@@ -37,6 +37,26 @@ namespace hlsl {
3737#define _HLSL_16BIT_AVAILABILITY_STAGE (environment, version, stage )
3838#endif
3939
40+ #define GEN_VEC_SCALAR_OVERLOADS (FUNC_NAME, BASE_TYPE, AVAIL ) \
41+ GEN_BOTH_OVERLOADS (FUNC_NAME, BASE_TYPE, BASE_TYPE##2 , AVAIL) \
42+ GEN_BOTH_OVERLOADS(FUNC_NAME, BASE_TYPE, BASE_TYPE##3 , AVAIL) \
43+ GEN_BOTH_OVERLOADS(FUNC_NAME, BASE_TYPE, BASE_TYPE##4 , AVAIL)
44+
45+ #define GEN_BOTH_OVERLOADS (FUNC_NAME, BASE_TYPE, VECTOR_TYPE, AVAIL ) \
46+ IF_TRUE_##AVAIL( \
47+ _HLSL_16BIT_AVAILABILITY (shadermodel, 6.2 )) constexpr VECTOR_TYPE \
48+ FUNC_NAME(VECTOR_TYPE p0, BASE_TYPE p1) { \
49+ return __builtin_elementwise_##FUNC_NAME (p0, (VECTOR_TYPE)p1); \
50+ } \
51+ IF_TRUE_##AVAIL( \
52+ _HLSL_16BIT_AVAILABILITY (shadermodel, 6.2 )) constexpr VECTOR_TYPE \
53+ FUNC_NAME(BASE_TYPE p0, VECTOR_TYPE p1) { \
54+ return __builtin_elementwise_##FUNC_NAME ((VECTOR_TYPE)p0, p1); \
55+ }
56+
57+ #define IF_TRUE_0 (EXPR )
58+ #define IF_TRUE_1 (EXPR ) EXPR
59+
4060// ===----------------------------------------------------------------------===//
4161// abs builtins
4262// ===----------------------------------------------------------------------===//
@@ -1700,6 +1720,7 @@ half3 max(half3, half3);
17001720_HLSL_16BIT_AVAILABILITY (shadermodel, 6.2 )
17011721_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
17021722half4 max(half4, half4);
1723+ GEN_VEC_SCALAR_OVERLOADS (max, half, 1 )
17031724
17041725#ifdef __HLSL_ENABLE_16_BIT
17051726_HLSL_AVAILABILITY (shadermodel, 6.2 )
@@ -1714,6 +1735,7 @@ int16_t3 max(int16_t3, int16_t3);
17141735_HLSL_AVAILABILITY (shadermodel, 6.2 )
17151736_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
17161737int16_t4 max(int16_t4, int16_t4);
1738+ GEN_VEC_SCALAR_OVERLOADS (max, int16_t , 1 )
17171739
17181740_HLSL_AVAILABILITY(shadermodel, 6.2 )
17191741_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
@@ -1727,6 +1749,7 @@ uint16_t3 max(uint16_t3, uint16_t3);
17271749_HLSL_AVAILABILITY (shadermodel, 6.2 )
17281750_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
17291751uint16_t4 max(uint16_t4, uint16_t4);
1752+ GEN_VEC_SCALAR_OVERLOADS (max, uint16_t , 1 )
17301753#endif
17311754
17321755_HLSL_BUILTIN_ALIAS (__builtin_elementwise_max)
@@ -1737,6 +1760,7 @@ _HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
17371760int3 max(int3, int3);
17381761_HLSL_BUILTIN_ALIAS (__builtin_elementwise_max)
17391762int4 max(int4, int4);
1763+ GEN_VEC_SCALAR_OVERLOADS (max, int , 0 )
17401764
17411765_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
17421766uint max(uint, uint);
@@ -1746,6 +1770,7 @@ _HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
17461770uint3 max(uint3, uint3);
17471771_HLSL_BUILTIN_ALIAS (__builtin_elementwise_max)
17481772uint4 max(uint4, uint4);
1773+ GEN_VEC_SCALAR_OVERLOADS (max, uint, 0 )
17491774
17501775_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
17511776int64_t max(int64_t , int64_t );
@@ -1755,6 +1780,7 @@ _HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
17551780int64_t3 max(int64_t3, int64_t3);
17561781_HLSL_BUILTIN_ALIAS (__builtin_elementwise_max)
17571782int64_t4 max(int64_t4, int64_t4);
1783+ GEN_VEC_SCALAR_OVERLOADS (max, int64_t , 0 )
17581784
17591785_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
17601786uint64_t max(uint64_t , uint64_t );
@@ -1764,6 +1790,7 @@ _HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
17641790uint64_t3 max(uint64_t3, uint64_t3);
17651791_HLSL_BUILTIN_ALIAS (__builtin_elementwise_max)
17661792uint64_t4 max(uint64_t4, uint64_t4);
1793+ GEN_VEC_SCALAR_OVERLOADS (max, uint64_t , 0 )
17671794
17681795_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
17691796float max(float , float );
@@ -1773,6 +1800,7 @@ _HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
17731800float3 max(float3, float3);
17741801_HLSL_BUILTIN_ALIAS (__builtin_elementwise_max)
17751802float4 max(float4, float4);
1803+ GEN_VEC_SCALAR_OVERLOADS (max, float , 0 )
17761804
17771805_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
17781806double max(double , double );
@@ -1782,6 +1810,7 @@ _HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
17821810double3 max(double3, double3);
17831811_HLSL_BUILTIN_ALIAS (__builtin_elementwise_max)
17841812double4 max(double4, double4);
1813+ GEN_VEC_SCALAR_OVERLOADS (max, double , 0 )
17851814
17861815// ===----------------------------------------------------------------------===//
17871816// min builtins
@@ -1804,6 +1833,7 @@ half3 min(half3, half3);
18041833_HLSL_16BIT_AVAILABILITY (shadermodel, 6.2 )
18051834_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
18061835half4 min(half4, half4);
1836+ GEN_VEC_SCALAR_OVERLOADS (min, half, 1 )
18071837
18081838#ifdef __HLSL_ENABLE_16_BIT
18091839_HLSL_AVAILABILITY (shadermodel, 6.2 )
@@ -1818,6 +1848,7 @@ int16_t3 min(int16_t3, int16_t3);
18181848_HLSL_AVAILABILITY (shadermodel, 6.2 )
18191849_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
18201850int16_t4 min(int16_t4, int16_t4);
1851+ GEN_VEC_SCALAR_OVERLOADS (min, int16_t , 1 )
18211852
18221853_HLSL_AVAILABILITY(shadermodel, 6.2 )
18231854_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
@@ -1831,6 +1862,7 @@ uint16_t3 min(uint16_t3, uint16_t3);
18311862_HLSL_AVAILABILITY (shadermodel, 6.2 )
18321863_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
18331864uint16_t4 min(uint16_t4, uint16_t4);
1865+ GEN_VEC_SCALAR_OVERLOADS (min, uint16_t , 1 )
18341866#endif
18351867
18361868_HLSL_BUILTIN_ALIAS (__builtin_elementwise_min)
@@ -1841,6 +1873,7 @@ _HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
18411873int3 min(int3, int3);
18421874_HLSL_BUILTIN_ALIAS (__builtin_elementwise_min)
18431875int4 min(int4, int4);
1876+ GEN_VEC_SCALAR_OVERLOADS (min, int , 0 )
18441877
18451878_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
18461879uint min(uint, uint);
@@ -1850,6 +1883,7 @@ _HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
18501883uint3 min(uint3, uint3);
18511884_HLSL_BUILTIN_ALIAS (__builtin_elementwise_min)
18521885uint4 min(uint4, uint4);
1886+ GEN_VEC_SCALAR_OVERLOADS (min, uint, 0 )
18531887
18541888_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
18551889float min(float , float );
@@ -1859,6 +1893,7 @@ _HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
18591893float3 min(float3, float3);
18601894_HLSL_BUILTIN_ALIAS (__builtin_elementwise_min)
18611895float4 min(float4, float4);
1896+ GEN_VEC_SCALAR_OVERLOADS (min, float , 0 )
18621897
18631898_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
18641899int64_t min(int64_t , int64_t );
@@ -1868,6 +1903,7 @@ _HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
18681903int64_t3 min(int64_t3, int64_t3);
18691904_HLSL_BUILTIN_ALIAS (__builtin_elementwise_min)
18701905int64_t4 min(int64_t4, int64_t4);
1906+ GEN_VEC_SCALAR_OVERLOADS (min, int64_t , 0 )
18711907
18721908_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
18731909uint64_t min(uint64_t , uint64_t );
@@ -1877,6 +1913,7 @@ _HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
18771913uint64_t3 min(uint64_t3, uint64_t3);
18781914_HLSL_BUILTIN_ALIAS (__builtin_elementwise_min)
18791915uint64_t4 min(uint64_t4, uint64_t4);
1916+ GEN_VEC_SCALAR_OVERLOADS (min, uint64_t , 0 )
18801917
18811918_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
18821919double min(double , double );
@@ -1886,6 +1923,7 @@ _HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
18861923double3 min(double3, double3);
18871924_HLSL_BUILTIN_ALIAS (__builtin_elementwise_min)
18881925double4 min(double4, double4);
1926+ GEN_VEC_SCALAR_OVERLOADS (min, double , 0 )
18891927
18901928// ===----------------------------------------------------------------------===//
18911929// normalize builtins
0 commit comments