@@ -644,30 +644,38 @@ template <typename Type, int NumElements> class vec {
644
644
#undef __SYCL_ACCESS_RETURN
645
645
// End of hi/lo, even/odd, xyzw, and rgba swizzles.
646
646
647
- // TODO: make templated address space to work.
648
- // Somehow, access<> to multi_ptr<> conversion doesn't work w/o making
649
- // address space explicitly specified.
650
- #ifdef __SYCL_LOADSTORE
651
- #error "Undefine __SYCL_LOADSTORE macro"
652
- #endif
653
- #define __SYCL_LOADSTORE (Space ) \
654
- void load (size_t Offset, multi_ptr<const DataT, Space> Ptr) { \
655
- for (int I = 0 ; I < NumElements; I++) { \
656
- setValue ( \
657
- I, *multi_ptr<const DataT, Space>(Ptr + Offset * NumElements + I)); \
658
- } \
659
- } \
660
- void store (size_t Offset, multi_ptr<DataT, Space> Ptr) const { \
661
- for (int I = 0 ; I < NumElements; I++) { \
662
- *multi_ptr<DataT, Space>(Ptr + Offset * NumElements + I) = getValue (I); \
663
- } \
647
+ template <access::address_space Space>
648
+ void load (size_t Offset, multi_ptr<const DataT, Space> Ptr) {
649
+ for (int I = 0 ; I < NumElements; I++) {
650
+ setValue (I,
651
+ *multi_ptr<const DataT, Space>(Ptr + Offset * NumElements + I));
652
+ }
653
+ }
654
+ template <access::address_space Space>
655
+ void load (size_t Offset, multi_ptr<DataT, Space> Ptr) {
656
+ multi_ptr<const DataT, Space> ConstPtr (Ptr);
657
+ load (Offset, ConstPtr);
658
+ }
659
+ template <int Dimensions, access::mode Mode,
660
+ access::placeholder IsPlaceholder, access::target Target>
661
+ void load (size_t Offset,
662
+ accessor<DataT, Dimensions, Mode, Target, IsPlaceholder> Acc) {
663
+ multi_ptr<const DataT, detail::TargetToAS<Target>::AS> MultiPtr (Acc);
664
+ load (Offset, MultiPtr);
665
+ }
666
+ template <access::address_space Space>
667
+ void store (size_t Offset, multi_ptr<DataT, Space> Ptr) const {
668
+ for (int I = 0 ; I < NumElements; I++) {
669
+ *multi_ptr<DataT, Space>(Ptr + Offset * NumElements + I) = getValue (I);
670
+ }
671
+ }
672
+ template <int Dimensions, access::mode Mode,
673
+ access::placeholder IsPlaceholder, access::target Target>
674
+ void store (size_t Offset,
675
+ accessor<DataT, Dimensions, Mode, Target, IsPlaceholder> Acc) {
676
+ multi_ptr<DataT, detail::TargetToAS<Target>::AS> MultiPtr (Acc);
677
+ store (Offset, MultiPtr);
664
678
}
665
-
666
- __SYCL_LOADSTORE (access::address_space::global_space)
667
- __SYCL_LOADSTORE(access::address_space::local_space)
668
- __SYCL_LOADSTORE(access::address_space::constant_space)
669
- __SYCL_LOADSTORE(access::address_space::private_space)
670
- #undef __SYCL_LOADSTORE
671
679
672
680
#ifdef __SYCL_BINOP
673
681
#error "Undefine __SYCL_BINOP macro"
@@ -1548,27 +1556,14 @@ class SwizzleOp {
1548
1556
#undef __SYCL_ACCESS_RETURN
1549
1557
// End of hi/lo, even/odd, xyzw, and rgba swizzles.
1550
1558
1551
- // TODO: make templated address space to work.
1552
- // Somehow, access<> to multi_ptr<> conversion doesn't work w/o making
1553
- // address space explicitly specified.
1554
- //
1555
1559
// Leave store() interface to automatic conversion to vec<>.
1556
1560
// Load to vec_t and then assign to swizzle.
1557
- #ifdef __SYCL_LOAD
1558
- #error "Undefine __SYCL_LOAD macro"
1559
- #endif
1560
- #define __SYCL_LOAD (Space ) \
1561
- void load (size_t offset, multi_ptr<DataT, Space> ptr) { \
1562
- vec_t Tmp; \
1563
- Tmp.template load (offset, ptr); \
1564
- *this = Tmp; \
1565
- }
1566
-
1567
- __SYCL_LOAD (access::address_space::global_space)
1568
- __SYCL_LOAD (access::address_space::local_space)
1569
- __SYCL_LOAD (access::address_space::constant_space)
1570
- __SYCL_LOAD (access::address_space::private_space)
1571
- #undef __SYCL_LOAD
1561
+ template <access::address_space Space>
1562
+ void load (size_t offset, multi_ptr<DataT, Space> ptr) {
1563
+ vec_t Tmp;
1564
+ Tmp.template load (offset, ptr);
1565
+ *this = Tmp;
1566
+ }
1572
1567
1573
1568
template <typename convertT, rounding_mode roundingMode>
1574
1569
vec<convertT, sizeof ...(Indexes)> convert () const {
0 commit comments