9#ifndef _HLSL_HLSL_DETAILS_H_
10#define _HLSL_HLSL_DETAILS_H_
16template <
typename T,
typename U>
struct is_same {
17 static const bool value =
false;
20template <
typename T>
struct is_same<T, T> {
30template <
bool B,
class T =
void>
33template <
typename U,
typename T,
int N>
34constexpr enable_if_t<
sizeof(
U) ==
sizeof(T), vector<U, N>>
36 return __builtin_bit_cast(vector<U, N>,
V);
39template <
typename U,
typename T>
41 return __builtin_bit_cast(
U, F);
47 return __builtin_elementwise_abs(
X);
50template <
typename T,
int N>
53 return __builtin_elementwise_sqrt(__builtin_hlsl_dot(
X,
X));
62template <
typename T,
int N>
65#if (__has_builtin(__builtin_spirv_distance))
66 return __builtin_spirv_distance(
X, Y);
constexpr enable_if_t< is_same< float, T >::value||is_same< half, T >::value, T > distance_impl(T X, T Y)
typename enable_if< B, T >::Type enable_if_t
constexpr enable_if_t< is_same< float, T >::value||is_same< half, T >::value, T > distance_vec_impl(vector< T, N > X, vector< T, N > Y)
constexpr enable_if_t< is_same< float, T >::value||is_same< half, T >::value, T > length_impl(T X)
constexpr enable_if_t< is_same< float, T >::value||is_same< half, T >::value, T > length_vec_impl(vector< T, N > X)
constexpr enable_if_t< sizeof(U)==sizeof(T), vector< U, N > > bit_cast(vector< T, N > V)