@@ -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// ===----------------------------------------------------------------------===//
@@ -582,7 +600,8 @@ half3 clamp(half3, half3, half3);
582600_HLSL_16BIT_AVAILABILITY (shadermodel, 6.2 )
583601_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
584602half4 clamp(half4, half4, half4);
585-
603+ _HLSL_VEC_SCALAR_OVERLOADS (clamp, half, 1 )
604+
586605#ifdef __HLSL_ENABLE_16_BIT
587606_HLSL_AVAILABILITY (shadermodel, 6.2 )
588607_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
@@ -596,7 +615,8 @@ int16_t3 clamp(int16_t3, int16_t3, int16_t3);
596615_HLSL_AVAILABILITY (shadermodel, 6.2 )
597616_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
598617int16_t4 clamp(int16_t4, int16_t4, int16_t4);
599-
618+ _HLSL_VEC_SCALAR_OVERLOADS (clamp, int16_t , 1 )
619+
600620_HLSL_AVAILABILITY(shadermodel, 6.2 )
601621_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
602622uint16_t clamp(uint16_t , uint16_t , uint16_t );
@@ -609,6 +629,7 @@ uint16_t3 clamp(uint16_t3, uint16_t3, uint16_t3);
609629_HLSL_AVAILABILITY (shadermodel, 6.2 )
610630_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
611631uint16_t4 clamp(uint16_t4, uint16_t4, uint16_t4);
632+ _HLSL_VEC_SCALAR_OVERLOADS (clamp, uint16_t , 1 )
612633#endif
613634
614635_HLSL_BUILTIN_ALIAS (__builtin_hlsl_elementwise_clamp)
@@ -619,6 +640,7 @@ _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
619640int3 clamp(int3, int3, int3);
620641_HLSL_BUILTIN_ALIAS (__builtin_hlsl_elementwise_clamp)
621642int4 clamp(int4, int4, int4);
643+ _HLSL_VEC_SCALAR_OVERLOADS (clamp, int , 0 )
622644
623645_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
624646uint clamp(uint, uint, uint);
@@ -628,6 +650,7 @@ _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
628650uint3 clamp(uint3, uint3, uint3);
629651_HLSL_BUILTIN_ALIAS (__builtin_hlsl_elementwise_clamp)
630652uint4 clamp(uint4, uint4, uint4);
653+ _HLSL_VEC_SCALAR_OVERLOADS (clamp, uint, 0 )
631654
632655_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
633656int64_t clamp(int64_t , int64_t , int64_t );
@@ -637,6 +660,7 @@ _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
637660int64_t3 clamp(int64_t3, int64_t3, int64_t3);
638661_HLSL_BUILTIN_ALIAS (__builtin_hlsl_elementwise_clamp)
639662int64_t4 clamp(int64_t4, int64_t4, int64_t4);
663+ _HLSL_VEC_SCALAR_OVERLOADS (clamp, int64_t , 0 )
640664
641665_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
642666uint64_t clamp(uint64_t , uint64_t , uint64_t );
@@ -646,6 +670,7 @@ _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
646670uint64_t3 clamp(uint64_t3, uint64_t3, uint64_t3);
647671_HLSL_BUILTIN_ALIAS (__builtin_hlsl_elementwise_clamp)
648672uint64_t4 clamp(uint64_t4, uint64_t4, uint64_t4);
673+ _HLSL_VEC_SCALAR_OVERLOADS (clamp, uint64_t , 0 )
649674
650675_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
651676float clamp(float , float , float );
@@ -655,6 +680,7 @@ _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
655680float3 clamp(float3, float3, float3);
656681_HLSL_BUILTIN_ALIAS (__builtin_hlsl_elementwise_clamp)
657682float4 clamp(float4, float4, float4);
683+ _HLSL_VEC_SCALAR_OVERLOADS (clamp, float , 0 )
658684
659685_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
660686double clamp(double , double , double );
@@ -664,6 +690,7 @@ _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
664690double3 clamp(double3, double3, double3);
665691_HLSL_BUILTIN_ALIAS (__builtin_hlsl_elementwise_clamp)
666692double4 clamp(double4, double4, double4);
693+ _HLSL_VEC_SCALAR_OVERLOADS (clamp, double , 0 )
667694
668695// ===----------------------------------------------------------------------===//
669696// clip builtins
@@ -1576,7 +1603,7 @@ half3 max(half3, half3);
15761603_HLSL_16BIT_AVAILABILITY (shadermodel, 6.2 )
15771604_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
15781605half4 max(half4, half4);
1579- GEN_VEC_SCALAR_OVERLOADS (max, half, 1 )
1606+ _HLSL_VEC_SCALAR_OVERLOADS (max, half, 1 )
15801607
15811608#ifdef __HLSL_ENABLE_16_BIT
15821609_HLSL_AVAILABILITY (shadermodel, 6.2 )
@@ -1591,7 +1618,7 @@ int16_t3 max(int16_t3, int16_t3);
15911618_HLSL_AVAILABILITY (shadermodel, 6.2 )
15921619_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
15931620int16_t4 max(int16_t4, int16_t4);
1594- GEN_VEC_SCALAR_OVERLOADS (max, int16_t , 1 )
1621+ _HLSL_VEC_SCALAR_OVERLOADS (max, int16_t , 1 )
15951622
15961623_HLSL_AVAILABILITY(shadermodel, 6.2 )
15971624_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
@@ -1605,7 +1632,7 @@ uint16_t3 max(uint16_t3, uint16_t3);
16051632_HLSL_AVAILABILITY (shadermodel, 6.2 )
16061633_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
16071634uint16_t4 max(uint16_t4, uint16_t4);
1608- GEN_VEC_SCALAR_OVERLOADS (max, uint16_t , 1 )
1635+ _HLSL_VEC_SCALAR_OVERLOADS (max, uint16_t , 1 )
16091636#endif
16101637
16111638_HLSL_BUILTIN_ALIAS (__builtin_elementwise_max)
@@ -1616,7 +1643,7 @@ _HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
16161643int3 max(int3, int3);
16171644_HLSL_BUILTIN_ALIAS (__builtin_elementwise_max)
16181645int4 max(int4, int4);
1619- GEN_VEC_SCALAR_OVERLOADS (max, int , 0 )
1646+ _HLSL_VEC_SCALAR_OVERLOADS (max, int , 0 )
16201647
16211648_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
16221649uint max(uint, uint);
@@ -1626,7 +1653,7 @@ _HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
16261653uint3 max(uint3, uint3);
16271654_HLSL_BUILTIN_ALIAS (__builtin_elementwise_max)
16281655uint4 max(uint4, uint4);
1629- GEN_VEC_SCALAR_OVERLOADS (max, uint, 0 )
1656+ _HLSL_VEC_SCALAR_OVERLOADS (max, uint, 0 )
16301657
16311658_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
16321659int64_t max(int64_t , int64_t );
@@ -1636,7 +1663,7 @@ _HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
16361663int64_t3 max(int64_t3, int64_t3);
16371664_HLSL_BUILTIN_ALIAS (__builtin_elementwise_max)
16381665int64_t4 max(int64_t4, int64_t4);
1639- GEN_VEC_SCALAR_OVERLOADS (max, int64_t , 0 )
1666+ _HLSL_VEC_SCALAR_OVERLOADS (max, int64_t , 0 )
16401667
16411668_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
16421669uint64_t max(uint64_t , uint64_t );
@@ -1646,7 +1673,7 @@ _HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
16461673uint64_t3 max(uint64_t3, uint64_t3);
16471674_HLSL_BUILTIN_ALIAS (__builtin_elementwise_max)
16481675uint64_t4 max(uint64_t4, uint64_t4);
1649- GEN_VEC_SCALAR_OVERLOADS (max, uint64_t , 0 )
1676+ _HLSL_VEC_SCALAR_OVERLOADS (max, uint64_t , 0 )
16501677
16511678_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
16521679float max(float , float );
@@ -1656,7 +1683,7 @@ _HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
16561683float3 max(float3, float3);
16571684_HLSL_BUILTIN_ALIAS (__builtin_elementwise_max)
16581685float4 max(float4, float4);
1659- GEN_VEC_SCALAR_OVERLOADS (max, float , 0 )
1686+ _HLSL_VEC_SCALAR_OVERLOADS (max, float , 0 )
16601687
16611688_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
16621689double max(double , double );
@@ -1666,7 +1693,7 @@ _HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
16661693double3 max(double3, double3);
16671694_HLSL_BUILTIN_ALIAS (__builtin_elementwise_max)
16681695double4 max(double4, double4);
1669- GEN_VEC_SCALAR_OVERLOADS (max, double , 0 )
1696+ _HLSL_VEC_SCALAR_OVERLOADS (max, double , 0 )
16701697
16711698// ===----------------------------------------------------------------------===//
16721699// min builtins
@@ -1689,7 +1716,7 @@ half3 min(half3, half3);
16891716_HLSL_16BIT_AVAILABILITY (shadermodel, 6.2 )
16901717_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
16911718half4 min(half4, half4);
1692- GEN_VEC_SCALAR_OVERLOADS (min, half, 1 )
1719+ _HLSL_VEC_SCALAR_OVERLOADS (min, half, 1 )
16931720
16941721#ifdef __HLSL_ENABLE_16_BIT
16951722_HLSL_AVAILABILITY (shadermodel, 6.2 )
@@ -1704,7 +1731,7 @@ int16_t3 min(int16_t3, int16_t3);
17041731_HLSL_AVAILABILITY (shadermodel, 6.2 )
17051732_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
17061733int16_t4 min(int16_t4, int16_t4);
1707- GEN_VEC_SCALAR_OVERLOADS (min, int16_t , 1 )
1734+ _HLSL_VEC_SCALAR_OVERLOADS (min, int16_t , 1 )
17081735
17091736_HLSL_AVAILABILITY(shadermodel, 6.2 )
17101737_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
@@ -1718,7 +1745,7 @@ uint16_t3 min(uint16_t3, uint16_t3);
17181745_HLSL_AVAILABILITY (shadermodel, 6.2 )
17191746_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
17201747uint16_t4 min(uint16_t4, uint16_t4);
1721- GEN_VEC_SCALAR_OVERLOADS (min, uint16_t , 1 )
1748+ _HLSL_VEC_SCALAR_OVERLOADS (min, uint16_t , 1 )
17221749#endif
17231750
17241751_HLSL_BUILTIN_ALIAS (__builtin_elementwise_min)
@@ -1729,7 +1756,7 @@ _HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
17291756int3 min(int3, int3);
17301757_HLSL_BUILTIN_ALIAS (__builtin_elementwise_min)
17311758int4 min(int4, int4);
1732- GEN_VEC_SCALAR_OVERLOADS (min, int , 0 )
1759+ _HLSL_VEC_SCALAR_OVERLOADS (min, int , 0 )
17331760
17341761_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
17351762uint min(uint, uint);
@@ -1739,7 +1766,7 @@ _HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
17391766uint3 min(uint3, uint3);
17401767_HLSL_BUILTIN_ALIAS (__builtin_elementwise_min)
17411768uint4 min(uint4, uint4);
1742- GEN_VEC_SCALAR_OVERLOADS (min, uint, 0 )
1769+ _HLSL_VEC_SCALAR_OVERLOADS (min, uint, 0 )
17431770
17441771_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
17451772float min(float , float );
@@ -1749,7 +1776,7 @@ _HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
17491776float3 min(float3, float3);
17501777_HLSL_BUILTIN_ALIAS (__builtin_elementwise_min)
17511778float4 min(float4, float4);
1752- GEN_VEC_SCALAR_OVERLOADS (min, float , 0 )
1779+ _HLSL_VEC_SCALAR_OVERLOADS (min, float , 0 )
17531780
17541781_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
17551782int64_t min(int64_t , int64_t );
@@ -1759,7 +1786,7 @@ _HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
17591786int64_t3 min(int64_t3, int64_t3);
17601787_HLSL_BUILTIN_ALIAS (__builtin_elementwise_min)
17611788int64_t4 min(int64_t4, int64_t4);
1762- GEN_VEC_SCALAR_OVERLOADS (min, int64_t , 0 )
1789+ _HLSL_VEC_SCALAR_OVERLOADS (min, int64_t , 0 )
17631790
17641791_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
17651792uint64_t min(uint64_t , uint64_t );
@@ -1769,7 +1796,7 @@ _HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
17691796uint64_t3 min(uint64_t3, uint64_t3);
17701797_HLSL_BUILTIN_ALIAS (__builtin_elementwise_min)
17711798uint64_t4 min(uint64_t4, uint64_t4);
1772- GEN_VEC_SCALAR_OVERLOADS (min, uint64_t , 0 )
1799+ _HLSL_VEC_SCALAR_OVERLOADS (min, uint64_t , 0 )
17731800
17741801_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
17751802double min(double , double );
@@ -1779,7 +1806,7 @@ _HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
17791806double3 min(double3, double3);
17801807_HLSL_BUILTIN_ALIAS (__builtin_elementwise_min)
17811808double4 min(double4, double4);
1782- GEN_VEC_SCALAR_OVERLOADS (min, double , 0 )
1809+ _HLSL_VEC_SCALAR_OVERLOADS (min, double , 0 )
17831810
17841811// ===----------------------------------------------------------------------===//
17851812// normalize builtins
0 commit comments