|
10 | 10 |
|
11 | 11 | #include <CL/sycl/detail/common.hpp>
|
12 | 12 | #include <CL/sycl/detail/property_helper.hpp>
|
| 13 | +#include <CL/sycl/properties/property_traits.hpp> |
13 | 14 | #include <sycl/ext/oneapi/accessor_property_list.hpp>
|
14 | 15 | #include <type_traits>
|
15 | 16 |
|
@@ -111,6 +112,85 @@ struct is_compile_time_property<sycl::ext::intel::property::buffer_location>
|
111 | 112 | } // namespace oneapi
|
112 | 113 | } // namespace ext
|
113 | 114 |
|
| 115 | +// Forward declaration |
| 116 | +template <typename DataT, int Dimensions, access::mode AccessMode, |
| 117 | + access::target AccessTarget, access::placeholder IsPlaceholder, |
| 118 | + typename PropertyListT> |
| 119 | +class accessor; |
| 120 | +template <typename DataT, int Dimensions, access::mode AccessMode, |
| 121 | + access::target AccessTarget, access::placeholder IsPlaceholder> |
| 122 | +class image_accessor; |
| 123 | +template <typename DataT, int Dimensions, access::mode AccessMode> |
| 124 | +class host_accessor; |
| 125 | + |
| 126 | +// Accessor property trait specializations |
| 127 | +template <> struct is_property<property::noinit> : std::true_type {}; |
| 128 | +template <> struct is_property<property::no_init> : std::true_type {}; |
| 129 | +template <> |
| 130 | +struct is_property<ext::oneapi::property::no_offset> : std::true_type {}; |
| 131 | +template <> |
| 132 | +struct is_property<ext::oneapi::property::no_alias> : std::true_type {}; |
| 133 | +template <> |
| 134 | +struct is_property<ext::intel::property::buffer_location> : std::true_type {}; |
| 135 | + |
| 136 | +template <typename DataT, int Dimensions, access::mode AccessMode, |
| 137 | + access::target AccessTarget, access::placeholder IsPlaceholder, |
| 138 | + typename PropertyListT> |
| 139 | +struct is_property_of<property::noinit, |
| 140 | + accessor<DataT, Dimensions, AccessMode, AccessTarget, |
| 141 | + IsPlaceholder, PropertyListT>> : std::true_type { |
| 142 | +}; |
| 143 | +template <typename DataT, int Dimensions, access::mode AccessMode, |
| 144 | + access::target AccessTarget, access::placeholder IsPlaceholder, |
| 145 | + typename PropertyListT> |
| 146 | +struct is_property_of<property::no_init, |
| 147 | + accessor<DataT, Dimensions, AccessMode, AccessTarget, |
| 148 | + IsPlaceholder, PropertyListT>> : std::true_type { |
| 149 | +}; |
| 150 | +template <typename DataT, int Dimensions, access::mode AccessMode, |
| 151 | + access::target AccessTarget, access::placeholder IsPlaceholder, |
| 152 | + typename PropertyListT> |
| 153 | +struct is_property_of<ext::oneapi::property::no_offset, |
| 154 | + accessor<DataT, Dimensions, AccessMode, AccessTarget, |
| 155 | + IsPlaceholder, PropertyListT>> : std::true_type { |
| 156 | +}; |
| 157 | +template <typename DataT, int Dimensions, access::mode AccessMode, |
| 158 | + access::target AccessTarget, access::placeholder IsPlaceholder, |
| 159 | + typename PropertyListT> |
| 160 | +struct is_property_of<ext::oneapi::property::no_alias, |
| 161 | + accessor<DataT, Dimensions, AccessMode, AccessTarget, |
| 162 | + IsPlaceholder, PropertyListT>> : std::true_type { |
| 163 | +}; |
| 164 | +template <typename DataT, int Dimensions, access::mode AccessMode, |
| 165 | + access::target AccessTarget, access::placeholder IsPlaceholder, |
| 166 | + typename PropertyListT> |
| 167 | +struct is_property_of<ext::intel::property::buffer_location, |
| 168 | + accessor<DataT, Dimensions, AccessMode, AccessTarget, |
| 169 | + IsPlaceholder, PropertyListT>> : std::true_type { |
| 170 | +}; |
| 171 | + |
| 172 | +template <typename DataT, int Dimensions, access::mode AccessMode, |
| 173 | + access::target AccessTarget, access::placeholder IsPlaceholder> |
| 174 | +struct is_property_of< |
| 175 | + property::noinit, |
| 176 | + image_accessor<DataT, Dimensions, AccessMode, AccessTarget, IsPlaceholder>> |
| 177 | + : std::true_type {}; |
| 178 | +template <typename DataT, int Dimensions, access::mode AccessMode, |
| 179 | + access::target AccessTarget, access::placeholder IsPlaceholder> |
| 180 | +struct is_property_of< |
| 181 | + property::no_init, |
| 182 | + image_accessor<DataT, Dimensions, AccessMode, AccessTarget, IsPlaceholder>> |
| 183 | + : std::true_type {}; |
| 184 | + |
| 185 | +template <typename DataT, int Dimensions, access::mode AccessMode> |
| 186 | +struct is_property_of<property::noinit, |
| 187 | + host_accessor<DataT, Dimensions, AccessMode>> |
| 188 | + : std::true_type {}; |
| 189 | +template <typename DataT, int Dimensions, access::mode AccessMode> |
| 190 | +struct is_property_of<property::no_init, |
| 191 | + host_accessor<DataT, Dimensions, AccessMode>> |
| 192 | + : std::true_type {}; |
| 193 | + |
114 | 194 | namespace detail {
|
115 | 195 | template <int I>
|
116 | 196 | struct IsCompileTimePropertyInstance<
|
|
0 commit comments