DPC++ Runtime
Runtime libraries for oneAPI DPC++
accessor_properties.hpp
Go to the documentation of this file.
1 //==----------- accessor_properties.hpp --- SYCL accessor properties -------==//
2 //
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 //
7 //===----------------------------------------------------------------------===//
8 
9 #pragma once
10 
11 #include <sycl/access/access.hpp> // for mode, target
12 #include <sycl/detail/common.hpp> // for __SYCL_EBO
13 #include <sycl/detail/defines.hpp> // for __SYCL_TYPE
14 #include <sycl/detail/defines_elementary.hpp> // for __SYCL2020_DEP...
15 #include <sycl/detail/property_helper.hpp> // for DataLessPropKind
16 #include <sycl/ext/oneapi/accessor_property_list.hpp> // for IsCompileTimeP...
17 #include <sycl/image.hpp> // for image_accessor
18 #include <sycl/properties/property_traits.hpp> // for is_property_of
19 
20 #include <type_traits> // for true_type, fal...
21 
22 namespace sycl {
23 inline namespace _V1 {
24 namespace property {
25 
26 class no_init : public detail::DataLessProperty<detail::NoInit> {};
27 
28 class __SYCL2020_DEPRECATED("spelling is now: no_init") noinit
29  : public detail::DataLessProperty<detail::NoInit> {};
30 
31 } // namespace property
32 
33 inline constexpr property::no_init no_init;
34 
35 __SYCL2020_DEPRECATED("spelling is now: no_init")
36 inline constexpr property::noinit noinit;
37 
38 namespace ext::intel {
39 namespace property {
40 struct __SYCL_TYPE(buffer_location) buffer_location {
41  template <int A = 0> struct instance {
42  template <int B>
43  constexpr bool operator==(const buffer_location::instance<B> &) const {
44  return A == B;
45  }
46  template <int B>
47  constexpr bool operator!=(const buffer_location::instance<B> &) const {
48  return A != B;
49  }
50  int get_location() { return A; }
51  };
52 };
53 } // namespace property
54 
55 template <int A>
56 inline constexpr property::buffer_location::instance<A> buffer_location{};
57 } // namespace ext::intel
58 
59 namespace ext::oneapi {
60 namespace property {
61 struct no_offset {
62  template <bool B = true> struct instance {
63  constexpr bool operator==(const no_offset::instance<B> &) const {
64  return true;
65  }
66  constexpr bool operator!=(const no_offset::instance<B> &) const {
67  return false;
68  }
69  };
70 };
71 struct __SYCL_TYPE(no_alias) no_alias {
72  template <bool B = true> struct instance {
73  constexpr bool operator==(const no_alias::instance<B> &) const {
74  return true;
75  }
76  constexpr bool operator!=(const no_alias::instance<B> &) const {
77  return false;
78  }
79  };
80 };
81 } // namespace property
82 
84 inline constexpr property::no_alias::instance<> no_alias;
85 
86 template <>
88  : std::true_type {};
89 template <>
91  : std::true_type {};
92 template <>
94  : std::true_type {};
95 } // namespace ext::oneapi
96 
97 // Forward declaration
98 template <typename DataT, int Dimensions, access::mode AccessMode,
100  typename PropertyListT>
101 class accessor;
102 template <typename DataT, int Dimensions, access::mode AccessMode>
103 class host_accessor;
104 template <typename DataT, int Dimensions>
105 class __SYCL_EBO
107 template <typename DataT, int Dimensions, access::mode AccessMode,
110 template <typename DataT, int Dimensions, access_mode AccessMode,
111  image_target AccessTarget>
113 template <typename DataT, int Dimensions, image_target AccessTarget>
115 template <typename DataT, int Dimensions, access_mode AccessMode>
117 template <typename DataT, int Dimensions> class host_sampled_image_accessor;
118 
119 namespace detail::acc_properties {
120 template <typename T> struct is_accessor : std::false_type {};
121 template <typename DataT, int Dimensions, access::mode AccessMode,
123  typename PropertyListT>
124 struct is_accessor<accessor<DataT, Dimensions, AccessMode, AccessTarget,
125  IsPlaceholder, PropertyListT>> : std::true_type {};
126 template <typename T>
127 inline constexpr bool is_accessor_v = is_accessor<T>::value;
128 
129 template <typename T> struct is_sycl2020_image_accessor : std::false_type {};
130 template <typename DataT, int Dimensions, access_mode AccessMode,
131  image_target AccessTarget>
133  unsampled_image_accessor<DataT, Dimensions, AccessMode, AccessTarget>>
134  : std::true_type {};
135 template <typename DataT, int Dimensions, image_target AccessTarget>
137  sampled_image_accessor<DataT, Dimensions, AccessTarget>> : std::true_type {
138 };
139 template <typename T>
140 inline constexpr bool is_sycl2020_image_accessor_v =
142 
143 template <typename T>
144 struct is_sycl2020_image_host_accessor : std::false_type {};
145 template <typename DataT, int Dimensions, access_mode AccessMode>
148  : std::true_type {};
149 template <typename DataT, int Dimensions>
151  host_sampled_image_accessor<DataT, Dimensions>> : std::true_type {};
152 template <typename T>
153 inline constexpr bool is_sycl2020_image_host_accessor_v =
155 
156 template <typename T> struct is_host_accessor : std::false_type {};
157 template <typename DataT, int Dimensions, access::mode AccessMode>
159  : std::true_type {};
160 template <typename T>
162 
163 template <typename T> struct is_local_accessor : std::false_type {};
164 template <typename T, int Dimensions>
165 struct is_local_accessor<local_accessor<T, Dimensions>> : std::true_type {};
166 template <typename T>
168 
169 template <typename T> struct is_image_accessor : std::false_type {};
170 template <typename T, int Dimensions, access::mode AccessMode,
171  access::placeholder IsPlaceholder, typename PropertyListT>
173  accessor<T, Dimensions, AccessMode, access::target::image, IsPlaceholder,
174  PropertyListT>> : std::true_type {};
175 template <typename T, int Dimensions, access::mode AccessMode,
179  : std::true_type {};
180 template <typename T>
182 } // namespace detail::acc_properties
183 
184 // Accessor property trait specializations
185 template <>
186 struct is_property<ext::oneapi::property::no_offset> : std::true_type {};
187 template <>
188 struct is_property<ext::oneapi::property::no_alias> : std::true_type {};
189 template <>
190 struct is_property<ext::intel::property::buffer_location> : std::true_type {};
191 
192 template <typename T>
193 struct is_property_of<property::noinit, T>
194  : std::bool_constant<detail::acc_properties::is_accessor<T>::value ||
195  detail::acc_properties::is_host_accessor<T>::value> {};
196 
197 template <typename T>
198 struct is_property_of<property::no_init, T>
199  : std::bool_constant<
200  detail::acc_properties::is_accessor_v<T> ||
201  detail::acc_properties::is_host_accessor_v<T> ||
202  detail::acc_properties::is_sycl2020_image_accessor_v<T> ||
203  detail::acc_properties::is_sycl2020_image_host_accessor_v<T>> {};
204 
205 template <typename T>
207  : std::bool_constant<detail::acc_properties::is_accessor<T>::value> {};
208 
209 template <typename T>
211  : std::bool_constant<detail::acc_properties::is_accessor<T>::value> {};
212 
213 template <typename T>
215  : std::bool_constant<detail::acc_properties::is_accessor<T>::value> {};
216 
217 namespace detail {
218 template <int I>
220  ext::intel::property::buffer_location::instance<I>> : std::true_type {};
221 template <>
223  ext::oneapi::property::no_alias::instance<>> : std::true_type {};
224 template <>
226  ext::oneapi::property::no_offset::instance<>> : std::true_type {};
227 } // namespace detail
228 } // namespace _V1
229 } // namespace sycl
#define __SYCL_SPECIAL_CLASS
Definition: defines.hpp:29
#define __SYCL_EBO
Definition: common.hpp:250
class __SYCL_EBO __SYCL_SPECIAL_CLASS __SYCL_TYPE(local_accessor) local_accessor class __SYCL_EBO __SYCL_SPECIAL_CLASS __SYCL_TYPE(accessor) accessor< DataT
Image accessors.
constexpr property::buffer_location::instance< A > buffer_location
constexpr property::no_alias::instance no_alias
constexpr property::no_offset::instance no_offset
constexpr property::noinit noinit
image_target
Definition: access.hpp:74
class __SYCL_EBO __SYCL_SPECIAL_CLASS __SYCL_TYPE(local_accessor) local_accessor class __SYCL_EBO __SYCL_SPECIAL_CLASS Dimensions
Definition: accessor.hpp:3233
constexpr property::no_init no_init
signed char __SYCL2020_DEPRECATED
Definition: aliases.hpp:94
class __SYCL_EBO __SYCL_SPECIAL_CLASS __SYCL_TYPE(local_accessor) local_accessor class __SYCL_EBO __SYCL_SPECIAL_CLASS IsPlaceholder
Definition: accessor.hpp:3234
class __SYCL_EBO __SYCL_SPECIAL_CLASS __SYCL_TYPE(local_accessor) local_accessor class __SYCL_EBO __SYCL_SPECIAL_CLASS AccessMode
Definition: accessor.hpp:3233
Definition: access.hpp:18
constexpr bool operator==(const no_offset::instance< B > &) const
constexpr bool operator!=(const no_offset::instance< B > &) const