@@ -1011,7 +1011,7 @@ class __SYCL_SPECIAL_CLASS accessor :
10111011 detail::convertToArrayOfN<3 , 1 >(BufferRef.get_range ()),
10121012 getAdjustedMode (PropertyList),
10131013 detail::getSyclObjImpl (BufferRef).get (), AdjustedDim, sizeof (DataT),
1014- BufferRef.OffsetInBytes , BufferRef.IsSubBuffer ) {
1014+ BufferRef.OffsetInBytes , BufferRef.IsSubBuffer , PropertyList ) {
10151015 preScreenAccessor (BufferRef.size (), PropertyList);
10161016 if (!IsPlaceH)
10171017 addHostAccessorAndWait (AccessorBaseHost::impl.get ());
@@ -1042,7 +1042,7 @@ class __SYCL_SPECIAL_CLASS accessor :
10421042 detail::convertToArrayOfN<3 , 1 >(BufferRef.get_range ()),
10431043 getAdjustedMode (PropertyList),
10441044 detail::getSyclObjImpl (BufferRef).get (), AdjustedDim, sizeof (DataT),
1045- BufferRef.OffsetInBytes , BufferRef.IsSubBuffer ) {
1045+ BufferRef.OffsetInBytes , BufferRef.IsSubBuffer , PropertyList ) {
10461046 preScreenAccessor (BufferRef.size (), PropertyList);
10471047 if (!IsPlaceH)
10481048 addHostAccessorAndWait (AccessorBaseHost::impl.get ());
@@ -1072,7 +1072,7 @@ class __SYCL_SPECIAL_CLASS accessor :
10721072 detail::convertToArrayOfN<3 , 1 >(BufferRef.get_range ()),
10731073 getAdjustedMode (PropertyList),
10741074 detail::getSyclObjImpl (BufferRef).get (), Dimensions, sizeof (DataT),
1075- BufferRef.OffsetInBytes , BufferRef.IsSubBuffer ) {
1075+ BufferRef.OffsetInBytes , BufferRef.IsSubBuffer , PropertyList ) {
10761076 preScreenAccessor (BufferRef.size (), PropertyList);
10771077 detail::associateWithHandler (CommandGroupHandler, this , AccessTarget);
10781078 detail::constructorNotification (detail::getSyclObjImpl (BufferRef).get (),
@@ -1103,7 +1103,7 @@ class __SYCL_SPECIAL_CLASS accessor :
11031103 detail::convertToArrayOfN<3 , 1 >(BufferRef.get_range ()),
11041104 getAdjustedMode (PropertyList),
11051105 detail::getSyclObjImpl (BufferRef).get (), Dimensions, sizeof (DataT),
1106- BufferRef.OffsetInBytes , BufferRef.IsSubBuffer ) {
1106+ BufferRef.OffsetInBytes , BufferRef.IsSubBuffer , PropertyList ) {
11071107 preScreenAccessor (BufferRef.size (), PropertyList);
11081108 detail::associateWithHandler (CommandGroupHandler, this , AccessTarget);
11091109 detail::constructorNotification (detail::getSyclObjImpl (BufferRef).get (),
@@ -1133,7 +1133,7 @@ class __SYCL_SPECIAL_CLASS accessor :
11331133 detail::convertToArrayOfN<3 , 1 >(BufferRef.get_range ()),
11341134 getAdjustedMode (PropertyList),
11351135 detail::getSyclObjImpl (BufferRef).get (), Dimensions, sizeof (DataT),
1136- BufferRef.OffsetInBytes , BufferRef.IsSubBuffer ) {
1136+ BufferRef.OffsetInBytes , BufferRef.IsSubBuffer , PropertyList ) {
11371137 preScreenAccessor (BufferRef.size (), PropertyList);
11381138 if (!IsPlaceH)
11391139 addHostAccessorAndWait (AccessorBaseHost::impl.get ());
@@ -1166,7 +1166,7 @@ class __SYCL_SPECIAL_CLASS accessor :
11661166 detail::convertToArrayOfN<3 , 1 >(BufferRef.get_range ()),
11671167 getAdjustedMode (PropertyList),
11681168 detail::getSyclObjImpl (BufferRef).get (), Dimensions, sizeof (DataT),
1169- BufferRef.OffsetInBytes , BufferRef.IsSubBuffer ) {
1169+ BufferRef.OffsetInBytes , BufferRef.IsSubBuffer , PropertyList ) {
11701170 preScreenAccessor (BufferRef.size (), PropertyList);
11711171 if (!IsPlaceH)
11721172 addHostAccessorAndWait (AccessorBaseHost::impl.get ());
@@ -1229,7 +1229,7 @@ class __SYCL_SPECIAL_CLASS accessor :
12291229 detail::convertToArrayOfN<3 , 1 >(BufferRef.get_range ()),
12301230 getAdjustedMode (PropertyList),
12311231 detail::getSyclObjImpl (BufferRef).get (), Dimensions, sizeof (DataT),
1232- BufferRef.OffsetInBytes , BufferRef.IsSubBuffer ) {
1232+ BufferRef.OffsetInBytes , BufferRef.IsSubBuffer , PropertyList ) {
12331233 preScreenAccessor (BufferRef.size (), PropertyList);
12341234 detail::associateWithHandler (CommandGroupHandler, this , AccessTarget);
12351235 detail::constructorNotification (detail::getSyclObjImpl (BufferRef).get (),
@@ -1261,7 +1261,7 @@ class __SYCL_SPECIAL_CLASS accessor :
12611261 detail::convertToArrayOfN<3 , 1 >(BufferRef.get_range ()),
12621262 getAdjustedMode (PropertyList),
12631263 detail::getSyclObjImpl (BufferRef).get (), Dimensions, sizeof (DataT),
1264- BufferRef.OffsetInBytes , BufferRef.IsSubBuffer ) {
1264+ BufferRef.OffsetInBytes , BufferRef.IsSubBuffer , PropertyList ) {
12651265 preScreenAccessor (BufferRef.size (), PropertyList);
12661266 detail::associateWithHandler (CommandGroupHandler, this , AccessTarget);
12671267 detail::constructorNotification (detail::getSyclObjImpl (BufferRef).get (),
@@ -1447,7 +1447,7 @@ class __SYCL_SPECIAL_CLASS accessor :
14471447 getAdjustedMode (PropertyList),
14481448 detail::getSyclObjImpl (BufferRef).get (), Dimensions,
14491449 sizeof (DataT), BufferRef.OffsetInBytes ,
1450- BufferRef.IsSubBuffer ) {
1450+ BufferRef.IsSubBuffer , PropertyList ) {
14511451 preScreenAccessor (BufferRef.size (), PropertyList);
14521452 if (BufferRef.isOutOfBounds (AccessOffset, AccessRange,
14531453 BufferRef.get_range ()))
@@ -1488,7 +1488,7 @@ class __SYCL_SPECIAL_CLASS accessor :
14881488 getAdjustedMode (PropertyList),
14891489 detail::getSyclObjImpl (BufferRef).get (), Dimensions,
14901490 sizeof (DataT), BufferRef.OffsetInBytes ,
1491- BufferRef.IsSubBuffer ) {
1491+ BufferRef.IsSubBuffer , PropertyList ) {
14921492 preScreenAccessor (BufferRef.size (), PropertyList);
14931493 if (BufferRef.isOutOfBounds (AccessOffset, AccessRange,
14941494 BufferRef.get_range ()))
@@ -1560,7 +1560,7 @@ class __SYCL_SPECIAL_CLASS accessor :
15601560 getAdjustedMode (PropertyList),
15611561 detail::getSyclObjImpl (BufferRef).get (), Dimensions,
15621562 sizeof (DataT), BufferRef.OffsetInBytes ,
1563- BufferRef.IsSubBuffer ) {
1563+ BufferRef.IsSubBuffer , PropertyList ) {
15641564 preScreenAccessor (BufferRef.size (), PropertyList);
15651565 if (BufferRef.isOutOfBounds (AccessOffset, AccessRange,
15661566 BufferRef.get_range ()))
@@ -1600,7 +1600,7 @@ class __SYCL_SPECIAL_CLASS accessor :
16001600 getAdjustedMode (PropertyList),
16011601 detail::getSyclObjImpl (BufferRef).get (), Dimensions,
16021602 sizeof (DataT), BufferRef.OffsetInBytes ,
1603- BufferRef.IsSubBuffer ) {
1603+ BufferRef.IsSubBuffer , PropertyList ) {
16041604 preScreenAccessor (BufferRef.size (), PropertyList);
16051605 if (BufferRef.isOutOfBounds (AccessOffset, AccessRange,
16061606 BufferRef.get_range ()))
@@ -1785,6 +1785,50 @@ class __SYCL_SPECIAL_CLASS accessor :
17851785 return constant_ptr<DataT>(getPointerAdjusted ());
17861786 }
17871787
1788+ // accessor::has_property for runtime properties is only available in host
1789+ // code. This restriction is not listed in the core spec and will be added in
1790+ // future versions.
1791+ template <typename Property>
1792+ typename sycl::detail::enable_if_t <
1793+ !ext::oneapi::is_compile_time_property<Property>::value, bool >
1794+ has_property () const noexcept {
1795+ #ifndef __SYCL_DEVICE_ONLY__
1796+ return AccessorBaseHost::impl->MPropertyList .has_property <Property>();
1797+ #else
1798+ return false ;
1799+ #endif
1800+ }
1801+
1802+ // accessor::get_property for runtime properties is only available in host
1803+ // code. This restriction is not listed in the core spec and will be added in
1804+ // future versions.
1805+ template <typename Property,
1806+ typename = typename sycl::detail::enable_if_t <
1807+ !ext::oneapi::is_compile_time_property<Property>::value>>
1808+ Property get_property () const {
1809+ #ifndef __SYCL_DEVICE_ONLY__
1810+ return AccessorBaseHost::impl->MPropertyList .get_property <Property>();
1811+ #else
1812+ return Property ();
1813+ #endif
1814+ }
1815+
1816+ #if __cplusplus >= 201703L
1817+ template <typename Property>
1818+ static constexpr bool has_property (
1819+ typename std::enable_if_t <
1820+ ext::oneapi::is_compile_time_property<Property>::value> * = 0 ) {
1821+ return PropertyListT::template has_property<Property>();
1822+ }
1823+
1824+ template <typename Property>
1825+ static constexpr auto get_property (
1826+ typename std::enable_if_t <
1827+ ext::oneapi::is_compile_time_property<Property>::value> * = 0 ) {
1828+ return PropertyListT::template get_property<Property>();
1829+ }
1830+ #endif
1831+
17881832 bool operator ==(const accessor &Rhs) const { return impl == Rhs.impl ; }
17891833 bool operator !=(const accessor &Rhs) const { return !(*this == Rhs); }
17901834
0 commit comments