17 inline namespace _V1 {
20 namespace experimental {
29 template <sycl::usm::alloc Kind,
typename PropertyListT>
35 template <
typename PropKey,
typename PropertyListT>
struct HasProperty {};
37 template <
typename PropKey,
typename... Props>
41 template <
typename PropertyListT>
43 template <
typename PropertyListT>
45 template <
typename PropertyListT>
49 template <
typename PropKey,
typename ConstType,
typename DefaultPropVal,
50 typename PropertyListT>
53 template <
typename PropKey,
typename ConstType,
typename DefaultPropVal,
60 PropKey, std::tuple<Props...>>::type,
62 static constexpr ConstType value =
68 template <
typename PropertyListT>
74 template <
typename PropertyListT>
77 decltype(usm_kind<sycl::usm::alloc::unknown>),
81 template <
typename PropertyListT>
84 decltype(sycl::ext::intel::experimental::buffer_location<-1>),
94 template <
typename T,
typename propertyList>
99 template <
typename T,
typename Prop,
typename... Props>
101 : std::integral_constant<
102 bool, (is_valid_property<T *, Prop>::value ||
103 IsRuntimePropertyValid<Prop>::value) &&
104 ValidAllocPropertyList<
105 T, detail::properties_t<Props...>>::value> {
109 "Found invalid compile-time property in the property list.");
113 "Found invalid runtime property in the property list.");
124 template <
typename Prop>
127 std::conditional_t<detail::IsCompileTimePropertyValue<Prop>::value,
132 template <
typename Prop,
typename... Props>
135 std::conditional_t<detail::IsCompileTimePropertyValue<Prop>::value,
153 template <sycl::usm::alloc Kind,
typename PropertyListT>
164 "Input property list contains conflicting USM kind.");
179 template <
typename T,
typename propertyListA,
typename propertyListB>
182 template <
typename T,
typename... PropsA,
typename... PropsB>
185 : std::integral_constant<
187 !is_property_list<T>::value &&
188 std::is_same_v<detail::properties_t<PropsB...>,
189 typename GetCompileTimeProperties<
190 detail::properties_t<PropsA...>>::type>> {};
206 typename propertyListB>
213 : std::integral_constant<
214 bool, !is_property_list<T>::value &&
216 detail::properties_t<PropsB...>,
217 typename GetAnnotatedPtrPropertiesWithUsmKind<
218 Kind, detail::properties_t<PropsA...>>::type>> {};
242 return alignA == 0 ? alignB
243 : (alignB == 0 ? alignA : std::lcm(alignA, alignB));
Objects of the property_list class are containers for the SYCL properties.
sycl::ext::oneapi::experimental::alignment_key alignment_key
The 'alignment' property is used to specify the alignment of memory accessed in ESIMD memory operatio...
constexpr buffer_location_key::value_t< N > buffer_location
detail::merged_properties_t< PropertyListT, decltype(properties{usm_kind< Kind >})> MergeUsmKind
typename merged_properties< LHSPropertiesT, RHSPropertiesT >::type merged_properties_t
properties< std::tuple<> > empty_properties_t
property_list get_usm_property_list()
intel::experimental::buffer_location_key buffer_location_key
size_t combine_align(size_t alignA, size_t alignB)
detail::merged_properties_t< filtered_input_properties_t, decltype(properties{usm_kind< Kind >})> type
typename GetCompileTimeProperties< input_properties_t >::type filtered_input_properties_t
std::conditional_t< detail::IsCompileTimePropertyValue< Prop >::value, detail::properties_t< Prop >, detail::empty_properties_t > filtered_this_property_t
detail::merged_properties_t< filtered_this_property_t, filtered_other_properties_t > type
typename GetCompileTimeProperties< detail::properties_t< Props... > >::type filtered_other_properties_t
std::conditional_t< detail::IsCompileTimePropertyValue< Prop >::value, detail::properties_t< Prop >, detail::empty_properties_t > type
std::conditional_t< detail::ContainsProperty< PropKey, std::tuple< Props... > >::value, typename detail::FindCompileTimePropertyValueType< PropKey, std::tuple< Props... > >::type, DefaultPropVal > prop_val_t