Skip to content

Commit dcfc25b

Browse files
committed
Improved tgmath vector specializations
1 parent 78d304c commit dcfc25b

File tree

1 file changed

+24
-21
lines changed

1 file changed

+24
-21
lines changed

include/nbl/builtin/hlsl/impl/tgmath_impl.hlsl

Lines changed: 24 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -247,37 +247,40 @@ struct erfInv_helper<FloatingPoint NBL_PARTIAL_REQ_BOT(concepts::FloatingPointSc
247247
}
248248
};
249249

250-
#define AUTO_SPECIALIZE_HELPER_FOR_VECTOR(HELPER_NAME)\
251-
template<typename Vectorial>\
252-
NBL_PARTIAL_REQ_TOP(concepts::Vectorial<Vectorial>)\
253-
struct HELPER_NAME<Vectorial NBL_PARTIAL_REQ_BOT(concepts::Vectorial<Vectorial>) >\
250+
#define AUTO_SPECIALIZE_HELPER_FOR_VECTOR(HELPER_NAME, RETURN_TYPE)\
251+
template<typename T>\
252+
NBL_PARTIAL_REQ_TOP(concepts::Vectorial<T>)\
253+
struct HELPER_NAME<T NBL_PARTIAL_REQ_BOT(concepts::Vectorial<T>) >\
254254
{\
255-
static Vectorial __call(NBL_CONST_REF_ARG(Vectorial) vec)\
255+
using return_t = RETURN_TYPE;\
256+
static return_t __call(NBL_CONST_REF_ARG(T) vec)\
256257
{\
257-
using traits = hlsl::vector_traits<Vectorial>;\
258-
array_get<Vectorial, typename traits::scalar_type> getter;\
259-
array_set<Vectorial, typename traits::scalar_type> setter;\
258+
using traits = hlsl::vector_traits<T>;\
259+
array_get<T, typename traits::scalar_type> getter;\
260+
array_set<T, typename traits::scalar_type> setter;\
260261
\
261-
Vectorial output;\
262+
return_t output;\
262263
for (uint32_t i = 0; i < traits::Dimension; ++i)\
263264
setter(output, i, HELPER_NAME<typename traits::scalar_type>::__call(getter(vec, i)));\
264265
\
265266
return output;\
266267
}\
267268
};
268269

269-
AUTO_SPECIALIZE_HELPER_FOR_VECTOR(cos_helper)
270-
AUTO_SPECIALIZE_HELPER_FOR_VECTOR(sin_helper)
271-
AUTO_SPECIALIZE_HELPER_FOR_VECTOR(acos_helper)
272-
AUTO_SPECIALIZE_HELPER_FOR_VECTOR(sqrt_helper)
273-
AUTO_SPECIALIZE_HELPER_FOR_VECTOR(abs_helper)
274-
AUTO_SPECIALIZE_HELPER_FOR_VECTOR(log_helper)
275-
AUTO_SPECIALIZE_HELPER_FOR_VECTOR(exp2_helper)
276-
AUTO_SPECIALIZE_HELPER_FOR_VECTOR(exp_helper)
277-
AUTO_SPECIALIZE_HELPER_FOR_VECTOR(pow_helper)
278-
AUTO_SPECIALIZE_HELPER_FOR_VECTOR(floor_helper)
279-
AUTO_SPECIALIZE_HELPER_FOR_VECTOR(isinf_helper)
280-
AUTO_SPECIALIZE_HELPER_FOR_VECTOR(isnan_helper)
270+
AUTO_SPECIALIZE_HELPER_FOR_VECTOR(cos_helper, T)
271+
AUTO_SPECIALIZE_HELPER_FOR_VECTOR(sin_helper, T)
272+
AUTO_SPECIALIZE_HELPER_FOR_VECTOR(acos_helper, T)
273+
AUTO_SPECIALIZE_HELPER_FOR_VECTOR(sqrt_helper, T)
274+
AUTO_SPECIALIZE_HELPER_FOR_VECTOR(abs_helper, T)
275+
AUTO_SPECIALIZE_HELPER_FOR_VECTOR(log_helper, T)
276+
AUTO_SPECIALIZE_HELPER_FOR_VECTOR(exp2_helper, T)
277+
AUTO_SPECIALIZE_HELPER_FOR_VECTOR(exp_helper, T)
278+
AUTO_SPECIALIZE_HELPER_FOR_VECTOR(pow_helper, T)
279+
AUTO_SPECIALIZE_HELPER_FOR_VECTOR(floor_helper, T)
280+
#define INT_VECTOR_RETURN_TYPE vector<int32_t, vector_traits<T>::Dimension>
281+
AUTO_SPECIALIZE_HELPER_FOR_VECTOR(isinf_helper, INT_VECTOR_RETURN_TYPE)
282+
AUTO_SPECIALIZE_HELPER_FOR_VECTOR(isnan_helper, INT_VECTOR_RETURN_TYPE)
283+
#undef INT_VECTOR_RETURN_TYPE
281284
#undef AUTO_SPECIALIZE_HELPER_FOR_VECTOR
282285

283286
}

0 commit comments

Comments
 (0)