20 inline namespace _V1 {
21 namespace ext::intel::esimd::detail {
27 template <
typename T>
struct is_sycl_accessor :
public std::false_type {
38 DataT, Dimensions, AccessMode, AccessTarget, IsPlaceholder, PropertyListT>>
39 :
public std::true_type {
44 using accessor_mode_cap_val_t = bool;
47 struct accessor_mode_cap {
48 static constexpr accessor_mode_cap_val_t can_read =
false;
49 static constexpr accessor_mode_cap_val_t can_write =
true;
52 template <sycl::access::mode Mode, accessor_mode_cap_val_t Cap>
53 constexpr
bool accessor_mode_has_capability() {
54 static_assert(Cap == accessor_mode_cap::can_read ||
55 Cap == accessor_mode_cap::can_write,
56 "unsupported capability");
58 if constexpr (
Mode == sycl::access::mode::atomic ||
60 Mode == sycl::access::mode::discard_read_write)
63 return (Cap == accessor_mode_cap::can_read) ==
64 (
Mode == sycl::access::mode::read);
67 template <
typename T>
struct local_accessor_access_mode {
72 template <
typename DataT,
int Dimensions>
73 struct local_accessor_access_mode<local_accessor<DataT,
Dimensions>> {
75 sycl::detail::accessModeFromConstness<DataT>();
80 template <
typename T, accessor_mode_cap_val_t Capability>
81 struct is_device_accessor_with
82 :
public std::conditional_t<
83 accessor_mode_has_capability<is_sycl_accessor<T>::mode,
85 (is_sycl_accessor<T>::target == sycl::access::target::device),
86 std::true_type, std::false_type> {};
88 template <
typename T, accessor_mode_cap_val_t Capability>
89 struct is_local_accessor_with
90 :
public std::conditional_t<
91 sycl::detail::acc_properties::is_local_accessor_v<T> &&
92 accessor_mode_has_capability<local_accessor_access_mode<T>::mode,
94 std::true_type, std::false_type> {};
96 template <
typename T, accessor_mode_cap_val_t Capability>
97 inline constexpr
bool is_local_accessor_with_v =
98 is_local_accessor_with<T, Capability>::value;
100 template <
typename T, accessor_mode_cap_val_t Capability>
101 inline constexpr
bool is_device_accessor_with_v =
102 is_device_accessor_with<T, Capability>::value;
104 template <
typename T, accessor_mode_cap_val_t Capability>
105 inline constexpr
bool is_accessor_with_v =
106 is_device_accessor_with_v<T, Capability> ||
107 is_local_accessor_with_v<T, Capability>;
109 template <
typename T>
110 inline constexpr
bool is_rw_device_accessor_v =
111 is_device_accessor_with_v<T, accessor_mode_cap::can_read> &&
112 is_device_accessor_with_v<T, accessor_mode_cap::can_write>;
114 template <
typename T>
115 inline constexpr
bool is_rw_local_accessor_v =
116 is_local_accessor_with_v<T, accessor_mode_cap::can_read> &&
117 is_local_accessor_with_v<T, accessor_mode_cap::can_write>;
119 template <
typename T>
120 inline constexpr
bool is_rw_accessor_v =
121 is_rw_device_accessor_v<T> || is_rw_local_accessor_v<T>;
123 template <
typename T,
int Dimensions>
124 __ESIMD_API uint32_t localAccessorToOffset(local_accessor<T, Dimensions> acc) {
125 return static_cast<uint32_t
>(
126 reinterpret_cast<std::uintptr_t
>(acc.get_pointer().get()));
The file contains implementations of accessor class.
class __SYCL_EBO __SYCL_SPECIAL_CLASS __SYCL_TYPE(accessor) accessor accessor(buffer< DataT, Dimensions, AllocatorT >) -> accessor< DataT, Dimensions, access::mode::read_write, target::device, access::placeholder::true_t >
Buffer accessor.
class __SYCL_EBO __SYCL_SPECIAL_CLASS Dimensions
constexpr mode_tag_t< access_mode::read_write > read_write
class __SYCL_EBO __SYCL_SPECIAL_CLASS IsPlaceholder
class __SYCL_EBO __SYCL_SPECIAL_CLASS AccessMode