@@ -79,8 +79,9 @@ struct HELPER_NAME<T NBL_PARTIAL_REQ_BOT(always_true<decltype(spirv::SPIRV_FUNCT
79
79
}\
80
80
};
81
81
82
- AUTO_SPECIALIZE_TRIVIAL_CASE_HELPER (cos_helper, cos, T)
83
82
AUTO_SPECIALIZE_TRIVIAL_CASE_HELPER (sin_helper, sin, T)
83
+ AUTO_SPECIALIZE_TRIVIAL_CASE_HELPER (cos_helper, cos, T)
84
+ AUTO_SPECIALIZE_TRIVIAL_CASE_HELPER (acos_helper, acos, T)
84
85
AUTO_SPECIALIZE_TRIVIAL_CASE_HELPER (abs_helper, sAbs, T)
85
86
AUTO_SPECIALIZE_TRIVIAL_CASE_HELPER (abs_helper, fAbs, T)
86
87
AUTO_SPECIALIZE_TRIVIAL_CASE_HELPER (sqrt_helper, sqrt, T)
@@ -94,13 +95,13 @@ AUTO_SPECIALIZE_TRIVIAL_CASE_HELPER(isnan_helper, isNan, ISINF_AND_ISNAN_RETURN_
94
95
#undef ISINF_AND_ISNAN_RETURN_TYPE
95
96
#undef AUTO_SPECIALIZE_TRIVIAL_CASE_HELPER
96
97
97
- template<typename T, typename U > NBL_PARTIAL_REQ_TOP (always_true<decltype (spirv::pow<T>(experimental::declval<T>(), experimental::declval<T>()))>)
98
- struct pow_helper<T, U NBL_PARTIAL_REQ_BOT (always_true<decltype (spirv::pow<T>(experimental::declval<T>(), experimental::declval<T>()))>) >
98
+ template<typename T> NBL_PARTIAL_REQ_TOP (always_true<decltype (spirv::pow<T>(experimental::declval<T>(), experimental::declval<T>()))>)
99
+ struct pow_helper<T NBL_PARTIAL_REQ_BOT (always_true<decltype (spirv::pow<T>(experimental::declval<T>(), experimental::declval<T>()))>) >
99
100
{
100
101
using return_t = T;
101
102
static inline return_t __call (const T x, const T y)
102
103
{
103
- return spirv::pow<T>(x, y, a );
104
+ return spirv::pow<T>(x, y);
104
105
}
105
106
};
106
107
@@ -266,10 +267,17 @@ struct erfInv_helper<FloatingPoint NBL_PARTIAL_REQ_BOT(concepts::FloatingPointSc
266
267
}
267
268
};
268
269
270
+ #ifdef __HLSL_VERSION
271
+ // SPIR-V already defines specializations for builtin vector types
272
+ #define VECTOR_SPECIALIZATION_CONCEPT concepts::Vectorial<T> && !is_vector_v<T>
273
+ #else
274
+ #define VECTOR_SPECIALIZATION_CONCEPT concepts::Vectorial<T>
275
+ #endif
276
+
269
277
#define AUTO_SPECIALIZE_HELPER_FOR_VECTOR (HELPER_NAME, RETURN_TYPE)\
270
278
template<typename T>\
271
- NBL_PARTIAL_REQ_TOP (concepts::Vectorial<T> )\
272
- struct HELPER_NAME<T NBL_PARTIAL_REQ_BOT (concepts::Vectorial<T> ) >\
279
+ NBL_PARTIAL_REQ_TOP (VECTOR_SPECIALIZATION_CONCEPT )\
280
+ struct HELPER_NAME<T NBL_PARTIAL_REQ_BOT (VECTOR_SPECIALIZATION_CONCEPT ) >\
273
281
{\
274
282
using return_t = RETURN_TYPE;\
275
283
static return_t __call (NBL_CONST_REF_ARG (T) vec)\
@@ -287,9 +295,6 @@ struct HELPER_NAME<T NBL_PARTIAL_REQ_BOT(concepts::Vectorial<T>) >\
287
295
}\
288
296
};
289
297
290
- AUTO_SPECIALIZE_HELPER_FOR_VECTOR (cos_helper, T)
291
- AUTO_SPECIALIZE_HELPER_FOR_VECTOR (sin_helper, T)
292
- AUTO_SPECIALIZE_HELPER_FOR_VECTOR (acos_helper, T)
293
298
AUTO_SPECIALIZE_HELPER_FOR_VECTOR (sqrt_helper, T)
294
299
AUTO_SPECIALIZE_HELPER_FOR_VECTOR (abs_helper, T)
295
300
AUTO_SPECIALIZE_HELPER_FOR_VECTOR (log_helper, T)
@@ -299,12 +304,16 @@ AUTO_SPECIALIZE_HELPER_FOR_VECTOR(floor_helper, T)
299
304
#define INT_VECTOR_RETURN_TYPE vector <int32_t, vector_traits<T>::Dimension>
300
305
AUTO_SPECIALIZE_HELPER_FOR_VECTOR (isinf_helper, INT_VECTOR_RETURN_TYPE)
301
306
AUTO_SPECIALIZE_HELPER_FOR_VECTOR (isnan_helper, INT_VECTOR_RETURN_TYPE)
307
+ AUTO_SPECIALIZE_HELPER_FOR_VECTOR (cos_helper, T)
308
+ AUTO_SPECIALIZE_HELPER_FOR_VECTOR (sin_helper, T)
309
+ AUTO_SPECIALIZE_HELPER_FOR_VECTOR (acos_helper, T)
310
+
302
311
#undef INT_VECTOR_RETURN_TYPE
303
312
#undef AUTO_SPECIALIZE_HELPER_FOR_VECTOR
304
313
305
314
template<typename T>
306
- NBL_PARTIAL_REQ_TOP (concepts::Vectorial<T> )
307
- struct pow_helper<T NBL_PARTIAL_REQ_BOT (concepts::Vectorial<T> ) >
315
+ NBL_PARTIAL_REQ_TOP (VECTOR_SPECIALIZATION_CONCEPT )
316
+ struct pow_helper<T NBL_PARTIAL_REQ_BOT (VECTOR_SPECIALIZATION_CONCEPT ) >
308
317
{
309
318
using return_t = T;
310
319
static return_t __call (NBL_CONST_REF_ARG (T) x, NBL_CONST_REF_ARG (T) y)
@@ -320,6 +329,7 @@ struct pow_helper<T NBL_PARTIAL_REQ_BOT(concepts::Vectorial<T>) >
320
329
return output;
321
330
}
322
331
};
332
+ #undef VECTOR_SPECIALIZATION_CONCEPT
323
333
324
334
}
325
335
}
0 commit comments