@@ -35,26 +35,44 @@ namespace hlsl {
3535#define _HLSL_16BIT_AVAILABILITY_STAGE (environment, version, stage )
3636#endif
3737
38- #define GEN_VEC_SCALAR_OVERLOADS (FUNC_NAME, BASE_TYPE, AVAIL ) \
39- GEN_BOTH_OVERLOADS (FUNC_NAME, BASE_TYPE, BASE_TYPE##2 , AVAIL) \
40- GEN_BOTH_OVERLOADS(FUNC_NAME, BASE_TYPE, BASE_TYPE##3 , AVAIL) \
41- GEN_BOTH_OVERLOADS(FUNC_NAME, BASE_TYPE, BASE_TYPE##4 , AVAIL)
42-
43- #define GEN_BOTH_OVERLOADS (FUNC_NAME, BASE_TYPE, VECTOR_TYPE, AVAIL ) \
44- IF_TRUE_##AVAIL( \
45- _HLSL_16BIT_AVAILABILITY (shadermodel, 6.2 )) constexpr VECTOR_TYPE \
46- FUNC_NAME(VECTOR_TYPE p0, BASE_TYPE p1) { \
47- return __builtin_elementwise_##FUNC_NAME (p0, (VECTOR_TYPE)p1); \
38+ #define _HLSL_CAT (a,b ) a##b
39+ #define _HLSL_VEC_SCALAR_OVERLOADS (NAME, BASE_T, AVAIL ) \
40+ _HLSL_ALL_OVERLOADS (NAME, BASE_T, AVAIL, _HLSL_CAT(_HLSL_NUM_ARGS_,NAME))
41+
42+ #define _HLSL_ALL_OVERLOADS (NAME, BASE_T, AVAIL, NUM_ARGS ) \
43+ _HLSL_CAT (_HLSL_BOTH_OVERLOADS_,NUM_ARGS)(NAME, BASE_T, _HLSL_CAT(BASE_T,2 ), AVAIL) \
44+ _HLSL_CAT(_HLSL_BOTH_OVERLOADS_,NUM_ARGS)(NAME, BASE_T, _HLSL_CAT(BASE_T,3 ), AVAIL) \
45+ _HLSL_CAT(_HLSL_BOTH_OVERLOADS_,NUM_ARGS)(NAME, BASE_T, _HLSL_CAT(BASE_T,4 ), AVAIL)
46+
47+ #define _HLSL_BOTH_OVERLOADS_2 (NAME, BASE_T, VECTOR_T, AVAIL ) \
48+ _HLSL_CAT (_HLSL_IF_TRUE_,AVAIL)( \
49+ _HLSL_16BIT_AVAILABILITY (shadermodel, 6.2 )) constexpr VECTOR_T \
50+ NAME(VECTOR_T p0, BASE_T p1) { \
51+ return _HLSL_CAT (__builtin_elementwise_,NAME)(p0, (VECTOR_T)p1); \
4852 } \
49- IF_TRUE_## AVAIL( \
50- _HLSL_16BIT_AVAILABILITY (shadermodel, 6.2 )) constexpr VECTOR_TYPE \
51- FUNC_NAME(BASE_TYPE p0, VECTOR_TYPE p1) { \
52- return __builtin_elementwise_## FUNC_NAME ((VECTOR_TYPE )p0, p1); \
53+ _HLSL_CAT (_HLSL_IF_TRUE_, AVAIL)( \
54+ _HLSL_16BIT_AVAILABILITY (shadermodel, 6.2 )) constexpr VECTOR_T \
55+ NAME(BASE_T p0, VECTOR_T p1) { \
56+ return _HLSL_CAT ( __builtin_elementwise_,NAME)((VECTOR_T )p0, p1); \
5357 }
5458
55- #define IF_TRUE_0 (EXPR )
56- #define IF_TRUE_1 (EXPR ) EXPR
59+ #define _HLSL_BOTH_OVERLOADS_3 (NAME, BASE_T, VECTOR_T, AVAIL ) \
60+ _HLSL_CAT (_HLSL_IF_TRUE_,AVAIL)(_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2 )) \
61+ constexpr VECTOR_T NAME(VECTOR_T p0, VECTOR_T p1, BASE_T p2) { \
62+ return _HLSL_CAT (__builtin_hlsl_elementwise_,NAME)(p0, p1, (VECTOR_T)p2); \
63+ } \
64+ _HLSL_CAT (_HLSL_IF_TRUE_,AVAIL)(_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2 )) \
65+ constexpr VECTOR_T NAME(VECTOR_T p0, BASE_T p1, VECTOR_T p2) { \
66+ return _HLSL_CAT (__builtin_hlsl_elementwise_,NAME)(p0, (VECTOR_T)p1, p2); \
67+ }
68+
69+ #define _HLSL_IF_TRUE_0 (EXPR )
70+ #define _HLSL_IF_TRUE_1 (EXPR ) EXPR
5771
72+ #define _HLSL_NUM_ARGS_min 2
73+ #define _HLSL_NUM_ARGS_max 2
74+ #define _HLSL_NUM_ARGS_clamp 3
75+
5876// ===----------------------------------------------------------------------===//
5977// abs builtins
6078// ===----------------------------------------------------------------------===//
@@ -603,7 +621,8 @@ half3 clamp(half3, half3, half3);
603621_HLSL_16BIT_AVAILABILITY (shadermodel, 6.2 )
604622_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
605623half4 clamp(half4, half4, half4);
606-
624+ _HLSL_VEC_SCALAR_OVERLOADS (clamp, half, 1 )
625+
607626#ifdef __HLSL_ENABLE_16_BIT
608627_HLSL_AVAILABILITY (shadermodel, 6.2 )
609628_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
@@ -617,7 +636,8 @@ int16_t3 clamp(int16_t3, int16_t3, int16_t3);
617636_HLSL_AVAILABILITY (shadermodel, 6.2 )
618637_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
619638int16_t4 clamp(int16_t4, int16_t4, int16_t4);
620-
639+ _HLSL_VEC_SCALAR_OVERLOADS (clamp, int16_t , 1 )
640+
621641_HLSL_AVAILABILITY(shadermodel, 6.2 )
622642_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
623643uint16_t clamp(uint16_t , uint16_t , uint16_t );
@@ -630,6 +650,7 @@ uint16_t3 clamp(uint16_t3, uint16_t3, uint16_t3);
630650_HLSL_AVAILABILITY (shadermodel, 6.2 )
631651_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
632652uint16_t4 clamp(uint16_t4, uint16_t4, uint16_t4);
653+ _HLSL_VEC_SCALAR_OVERLOADS (clamp, uint16_t , 1 )
633654#endif
634655
635656_HLSL_BUILTIN_ALIAS (__builtin_hlsl_elementwise_clamp)
@@ -640,6 +661,7 @@ _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
640661int3 clamp(int3, int3, int3);
641662_HLSL_BUILTIN_ALIAS (__builtin_hlsl_elementwise_clamp)
642663int4 clamp(int4, int4, int4);
664+ _HLSL_VEC_SCALAR_OVERLOADS (clamp, int , 0 )
643665
644666_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
645667uint clamp(uint, uint, uint);
@@ -649,6 +671,7 @@ _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
649671uint3 clamp(uint3, uint3, uint3);
650672_HLSL_BUILTIN_ALIAS (__builtin_hlsl_elementwise_clamp)
651673uint4 clamp(uint4, uint4, uint4);
674+ _HLSL_VEC_SCALAR_OVERLOADS (clamp, uint, 0 )
652675
653676_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
654677int64_t clamp(int64_t , int64_t , int64_t );
@@ -658,6 +681,7 @@ _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
658681int64_t3 clamp(int64_t3, int64_t3, int64_t3);
659682_HLSL_BUILTIN_ALIAS (__builtin_hlsl_elementwise_clamp)
660683int64_t4 clamp(int64_t4, int64_t4, int64_t4);
684+ _HLSL_VEC_SCALAR_OVERLOADS (clamp, int64_t , 0 )
661685
662686_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
663687uint64_t clamp(uint64_t , uint64_t , uint64_t );
@@ -667,6 +691,7 @@ _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
667691uint64_t3 clamp(uint64_t3, uint64_t3, uint64_t3);
668692_HLSL_BUILTIN_ALIAS (__builtin_hlsl_elementwise_clamp)
669693uint64_t4 clamp(uint64_t4, uint64_t4, uint64_t4);
694+ _HLSL_VEC_SCALAR_OVERLOADS (clamp, uint64_t , 0 )
670695
671696_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
672697float clamp(float , float , float );
@@ -676,6 +701,7 @@ _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
676701float3 clamp(float3, float3, float3);
677702_HLSL_BUILTIN_ALIAS (__builtin_hlsl_elementwise_clamp)
678703float4 clamp(float4, float4, float4);
704+ _HLSL_VEC_SCALAR_OVERLOADS (clamp, float , 0 )
679705
680706_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
681707double clamp(double , double , double );
@@ -685,6 +711,7 @@ _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
685711double3 clamp(double3, double3, double3);
686712_HLSL_BUILTIN_ALIAS (__builtin_hlsl_elementwise_clamp)
687713double4 clamp(double4, double4, double4);
714+ _HLSL_VEC_SCALAR_OVERLOADS (clamp, double , 0 )
688715
689716// ===----------------------------------------------------------------------===//
690717// clip builtins
@@ -1597,7 +1624,7 @@ half3 max(half3, half3);
15971624_HLSL_16BIT_AVAILABILITY (shadermodel, 6.2 )
15981625_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
15991626half4 max(half4, half4);
1600- GEN_VEC_SCALAR_OVERLOADS (max, half, 1 )
1627+ _HLSL_VEC_SCALAR_OVERLOADS (max, half, 1 )
16011628
16021629#ifdef __HLSL_ENABLE_16_BIT
16031630_HLSL_AVAILABILITY (shadermodel, 6.2 )
@@ -1612,7 +1639,7 @@ int16_t3 max(int16_t3, int16_t3);
16121639_HLSL_AVAILABILITY (shadermodel, 6.2 )
16131640_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
16141641int16_t4 max(int16_t4, int16_t4);
1615- GEN_VEC_SCALAR_OVERLOADS (max, int16_t , 1 )
1642+ _HLSL_VEC_SCALAR_OVERLOADS (max, int16_t , 1 )
16161643
16171644_HLSL_AVAILABILITY(shadermodel, 6.2 )
16181645_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
@@ -1626,7 +1653,7 @@ uint16_t3 max(uint16_t3, uint16_t3);
16261653_HLSL_AVAILABILITY (shadermodel, 6.2 )
16271654_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
16281655uint16_t4 max(uint16_t4, uint16_t4);
1629- GEN_VEC_SCALAR_OVERLOADS (max, uint16_t , 1 )
1656+ _HLSL_VEC_SCALAR_OVERLOADS (max, uint16_t , 1 )
16301657#endif
16311658
16321659_HLSL_BUILTIN_ALIAS (__builtin_elementwise_max)
@@ -1637,7 +1664,7 @@ _HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
16371664int3 max(int3, int3);
16381665_HLSL_BUILTIN_ALIAS (__builtin_elementwise_max)
16391666int4 max(int4, int4);
1640- GEN_VEC_SCALAR_OVERLOADS (max, int , 0 )
1667+ _HLSL_VEC_SCALAR_OVERLOADS (max, int , 0 )
16411668
16421669_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
16431670uint max(uint, uint);
@@ -1647,7 +1674,7 @@ _HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
16471674uint3 max(uint3, uint3);
16481675_HLSL_BUILTIN_ALIAS (__builtin_elementwise_max)
16491676uint4 max(uint4, uint4);
1650- GEN_VEC_SCALAR_OVERLOADS (max, uint, 0 )
1677+ _HLSL_VEC_SCALAR_OVERLOADS (max, uint, 0 )
16511678
16521679_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
16531680int64_t max(int64_t , int64_t );
@@ -1657,7 +1684,7 @@ _HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
16571684int64_t3 max(int64_t3, int64_t3);
16581685_HLSL_BUILTIN_ALIAS (__builtin_elementwise_max)
16591686int64_t4 max(int64_t4, int64_t4);
1660- GEN_VEC_SCALAR_OVERLOADS (max, int64_t , 0 )
1687+ _HLSL_VEC_SCALAR_OVERLOADS (max, int64_t , 0 )
16611688
16621689_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
16631690uint64_t max(uint64_t , uint64_t );
@@ -1667,7 +1694,7 @@ _HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
16671694uint64_t3 max(uint64_t3, uint64_t3);
16681695_HLSL_BUILTIN_ALIAS (__builtin_elementwise_max)
16691696uint64_t4 max(uint64_t4, uint64_t4);
1670- GEN_VEC_SCALAR_OVERLOADS (max, uint64_t , 0 )
1697+ _HLSL_VEC_SCALAR_OVERLOADS (max, uint64_t , 0 )
16711698
16721699_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
16731700float max(float , float );
@@ -1677,7 +1704,7 @@ _HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
16771704float3 max(float3, float3);
16781705_HLSL_BUILTIN_ALIAS (__builtin_elementwise_max)
16791706float4 max(float4, float4);
1680- GEN_VEC_SCALAR_OVERLOADS (max, float , 0 )
1707+ _HLSL_VEC_SCALAR_OVERLOADS (max, float , 0 )
16811708
16821709_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
16831710double max(double , double );
@@ -1687,7 +1714,7 @@ _HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
16871714double3 max(double3, double3);
16881715_HLSL_BUILTIN_ALIAS (__builtin_elementwise_max)
16891716double4 max(double4, double4);
1690- GEN_VEC_SCALAR_OVERLOADS (max, double , 0 )
1717+ _HLSL_VEC_SCALAR_OVERLOADS (max, double , 0 )
16911718
16921719// ===----------------------------------------------------------------------===//
16931720// min builtins
@@ -1710,7 +1737,7 @@ half3 min(half3, half3);
17101737_HLSL_16BIT_AVAILABILITY (shadermodel, 6.2 )
17111738_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
17121739half4 min(half4, half4);
1713- GEN_VEC_SCALAR_OVERLOADS (min, half, 1 )
1740+ _HLSL_VEC_SCALAR_OVERLOADS (min, half, 1 )
17141741
17151742#ifdef __HLSL_ENABLE_16_BIT
17161743_HLSL_AVAILABILITY (shadermodel, 6.2 )
@@ -1725,7 +1752,7 @@ int16_t3 min(int16_t3, int16_t3);
17251752_HLSL_AVAILABILITY (shadermodel, 6.2 )
17261753_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
17271754int16_t4 min(int16_t4, int16_t4);
1728- GEN_VEC_SCALAR_OVERLOADS (min, int16_t , 1 )
1755+ _HLSL_VEC_SCALAR_OVERLOADS (min, int16_t , 1 )
17291756
17301757_HLSL_AVAILABILITY(shadermodel, 6.2 )
17311758_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
@@ -1739,7 +1766,7 @@ uint16_t3 min(uint16_t3, uint16_t3);
17391766_HLSL_AVAILABILITY (shadermodel, 6.2 )
17401767_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
17411768uint16_t4 min(uint16_t4, uint16_t4);
1742- GEN_VEC_SCALAR_OVERLOADS (min, uint16_t , 1 )
1769+ _HLSL_VEC_SCALAR_OVERLOADS (min, uint16_t , 1 )
17431770#endif
17441771
17451772_HLSL_BUILTIN_ALIAS (__builtin_elementwise_min)
@@ -1750,7 +1777,7 @@ _HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
17501777int3 min(int3, int3);
17511778_HLSL_BUILTIN_ALIAS (__builtin_elementwise_min)
17521779int4 min(int4, int4);
1753- GEN_VEC_SCALAR_OVERLOADS (min, int , 0 )
1780+ _HLSL_VEC_SCALAR_OVERLOADS (min, int , 0 )
17541781
17551782_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
17561783uint min(uint, uint);
@@ -1760,7 +1787,7 @@ _HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
17601787uint3 min(uint3, uint3);
17611788_HLSL_BUILTIN_ALIAS (__builtin_elementwise_min)
17621789uint4 min(uint4, uint4);
1763- GEN_VEC_SCALAR_OVERLOADS (min, uint, 0 )
1790+ _HLSL_VEC_SCALAR_OVERLOADS (min, uint, 0 )
17641791
17651792_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
17661793float min(float , float );
@@ -1770,7 +1797,7 @@ _HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
17701797float3 min(float3, float3);
17711798_HLSL_BUILTIN_ALIAS (__builtin_elementwise_min)
17721799float4 min(float4, float4);
1773- GEN_VEC_SCALAR_OVERLOADS (min, float , 0 )
1800+ _HLSL_VEC_SCALAR_OVERLOADS (min, float , 0 )
17741801
17751802_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
17761803int64_t min(int64_t , int64_t );
@@ -1780,7 +1807,7 @@ _HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
17801807int64_t3 min(int64_t3, int64_t3);
17811808_HLSL_BUILTIN_ALIAS (__builtin_elementwise_min)
17821809int64_t4 min(int64_t4, int64_t4);
1783- GEN_VEC_SCALAR_OVERLOADS (min, int64_t , 0 )
1810+ _HLSL_VEC_SCALAR_OVERLOADS (min, int64_t , 0 )
17841811
17851812_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
17861813uint64_t min(uint64_t , uint64_t );
@@ -1790,7 +1817,7 @@ _HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
17901817uint64_t3 min(uint64_t3, uint64_t3);
17911818_HLSL_BUILTIN_ALIAS (__builtin_elementwise_min)
17921819uint64_t4 min(uint64_t4, uint64_t4);
1793- GEN_VEC_SCALAR_OVERLOADS (min, uint64_t , 0 )
1820+ _HLSL_VEC_SCALAR_OVERLOADS (min, uint64_t , 0 )
17941821
17951822_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
17961823double min(double , double );
@@ -1800,7 +1827,7 @@ _HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
18001827double3 min(double3, double3);
18011828_HLSL_BUILTIN_ALIAS (__builtin_elementwise_min)
18021829double4 min(double4, double4);
1803- GEN_VEC_SCALAR_OVERLOADS (min, double , 0 )
1830+ _HLSL_VEC_SCALAR_OVERLOADS (min, double , 0 )
18041831
18051832// ===----------------------------------------------------------------------===//
18061833// normalize builtins
0 commit comments