20 namespace ext::intel::esimd::detail {
26 template <
typename T>
struct is_sycl_accessor :
public std::false_type {
37 DataT, Dimensions, AccessMode, AccessTarget, IsPlaceholder, PropertyListT>>
38 :
public std::true_type {
43 using accessor_mode_cap_val_t = bool;
46 struct accessor_mode_cap {
47 static inline constexpr accessor_mode_cap_val_t can_read =
false;
48 static inline constexpr accessor_mode_cap_val_t can_write =
true;
51 template <sycl::access::mode Mode, accessor_mode_cap_val_t Cap>
52 constexpr
bool accessor_mode_has_capability() {
53 static_assert(Cap == accessor_mode_cap::can_read ||
54 Cap == accessor_mode_cap::can_write,
55 "unsupported capability");
57 if constexpr (Mode == sycl::access::mode::atomic ||
59 Mode == sycl::access::mode::discard_read_write)
62 return (Cap == accessor_mode_cap::can_read) ==
63 (Mode == sycl::access::mode::read);
68 template <
typename T, accessor_mode_cap_val_t Capability,
70 struct is_sycl_accessor_with
71 :
public std::conditional_t<
72 accessor_mode_has_capability<is_sycl_accessor<T>::mode,
74 (is_sycl_accessor<T>::target == AccessTarget),
75 std::true_type, std::false_type> {};
77 template <
typename T, accessor_mode_cap_val_t Capability,
79 using EnableIfAccessor = std::enable_if_t<
80 detail::is_sycl_accessor_with<T, Capability, AccessTarget>::value, RetT>;