99#ifndef _HLSL_HLSL_ALIAS_INTRINSICS_H_
1010#define _HLSL_HLSL_ALIAS_INTRINSICS_H_
1111
12+ #include " hlsl_compat_overloads.h"
13+
1214namespace hlsl {
1315
1416// Note: Functions in this file are sorted alphabetically, then grouped by base
@@ -35,48 +37,25 @@ namespace hlsl {
3537#define _HLSL_16BIT_AVAILABILITY_STAGE (environment, version, stage )
3638#endif
3739
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) \
44- (NAME, BASE_T, _HLSL_CAT(BASE_T, 2 ), AVAIL) \
45- _HLSL_CAT(_HLSL_BOTH_OVERLOADS_, NUM_ARGS)(NAME, BASE_T, \
46- _HLSL_CAT (BASE_T, 3 ), AVAIL) \
47- _HLSL_CAT(_HLSL_BOTH_OVERLOADS_, \
48- NUM_ARGS)(NAME, BASE_T, _HLSL_CAT(BASE_T, 4 ), AVAIL)
49-
50- #define _HLSL_BOTH_OVERLOADS_2 (NAME, BASE_T, VECTOR_T, AVAIL ) \
51- _HLSL_CAT (_HLSL_IF_TRUE_, AVAIL) \
52- (_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2 )) constexpr VECTOR_T NAME( \
53- VECTOR_T p0, BASE_T p1) { \
54- return _HLSL_CAT (__builtin_elementwise_, NAME)(p0, (VECTOR_T)p1); \
55- } \
56- _HLSL_CAT (_HLSL_IF_TRUE_, AVAIL) \
57- (_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2 )) constexpr VECTOR_T NAME( \
58- BASE_T p0, VECTOR_T p1) { \
59- return _HLSL_CAT (__builtin_elementwise_, NAME)((VECTOR_T)p0, p1); \
60- }
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)
6144
62- #define _HLSL_BOTH_OVERLOADS_3 ( NAME, BASE_T, VECTOR_T , AVAIL ) \
63- _HLSL_CAT (_HLSL_IF_TRUE_, AVAIL) \
64- ( _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2 )) constexpr VECTOR_T NAME( \
65- VECTOR_T p0, VECTOR_T p1, BASE_T p2 ) { \
66- return _HLSL_CAT (__builtin_hlsl_elementwise_, NAME)( p0, p1, (VECTOR_T)p2); \
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); \
6750 } \
68- _HLSL_CAT (_HLSL_IF_TRUE_, AVAIL) \
69- ( _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2 )) constexpr VECTOR_T NAME( \
70- VECTOR_T p0, BASE_T p1, VECTOR_T p2 ) { \
71- return _HLSL_CAT (__builtin_hlsl_elementwise_, NAME)( p0, (VECTOR_T)p1, p2); \
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); \
7255 }
7356
74- #define _HLSL_IF_TRUE_0 (EXPR )
75- #define _HLSL_IF_TRUE_1 (EXPR ) EXPR
76-
77- #define _HLSL_NUM_ARGS_min 2
78- #define _HLSL_NUM_ARGS_max 2
79- #define _HLSL_NUM_ARGS_clamp 3
57+ #define IF_TRUE_0 (EXPR )
58+ #define IF_TRUE_1 (EXPR ) EXPR
8059
8160// ===----------------------------------------------------------------------===//
8261// abs builtins
@@ -626,7 +605,6 @@ half3 clamp(half3, half3, half3);
626605_HLSL_16BIT_AVAILABILITY (shadermodel, 6.2 )
627606_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
628607half4 clamp(half4, half4, half4);
629- _HLSL_VEC_SCALAR_OVERLOADS (clamp, half, 1 )
630608
631609#ifdef __HLSL_ENABLE_16_BIT
632610_HLSL_AVAILABILITY (shadermodel, 6.2 )
@@ -641,7 +619,6 @@ int16_t3 clamp(int16_t3, int16_t3, int16_t3);
641619_HLSL_AVAILABILITY (shadermodel, 6.2 )
642620_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
643621int16_t4 clamp(int16_t4, int16_t4, int16_t4);
644- _HLSL_VEC_SCALAR_OVERLOADS (clamp, int16_t , 1 )
645622
646623_HLSL_AVAILABILITY (shadermodel, 6.2 )
647624_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
@@ -655,7 +632,6 @@ uint16_t3 clamp(uint16_t3, uint16_t3, uint16_t3);
655632_HLSL_AVAILABILITY (shadermodel, 6.2 )
656633_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
657634uint16_t4 clamp(uint16_t4, uint16_t4, uint16_t4);
658- _HLSL_VEC_SCALAR_OVERLOADS (clamp, uint16_t , 1 )
659635#endif
660636
661637_HLSL_BUILTIN_ALIAS (__builtin_hlsl_elementwise_clamp)
@@ -666,7 +642,6 @@ _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
666642int3 clamp(int3, int3, int3);
667643_HLSL_BUILTIN_ALIAS (__builtin_hlsl_elementwise_clamp)
668644int4 clamp(int4, int4, int4);
669- _HLSL_VEC_SCALAR_OVERLOADS (clamp, int , 0 )
670645
671646_HLSL_BUILTIN_ALIAS (__builtin_hlsl_elementwise_clamp)
672647uint clamp(uint, uint, uint);
@@ -676,7 +651,6 @@ _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
676651uint3 clamp(uint3, uint3, uint3);
677652_HLSL_BUILTIN_ALIAS (__builtin_hlsl_elementwise_clamp)
678653uint4 clamp(uint4, uint4, uint4);
679- _HLSL_VEC_SCALAR_OVERLOADS (clamp, uint, 0 )
680654
681655_HLSL_BUILTIN_ALIAS (__builtin_hlsl_elementwise_clamp)
682656int64_t clamp(int64_t , int64_t , int64_t );
@@ -686,7 +660,6 @@ _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
686660int64_t3 clamp(int64_t3, int64_t3, int64_t3);
687661_HLSL_BUILTIN_ALIAS (__builtin_hlsl_elementwise_clamp)
688662int64_t4 clamp(int64_t4, int64_t4, int64_t4);
689- _HLSL_VEC_SCALAR_OVERLOADS (clamp, int64_t , 0 )
690663
691664_HLSL_BUILTIN_ALIAS (__builtin_hlsl_elementwise_clamp)
692665uint64_t clamp(uint64_t , uint64_t , uint64_t );
@@ -696,7 +669,6 @@ _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
696669uint64_t3 clamp(uint64_t3, uint64_t3, uint64_t3);
697670_HLSL_BUILTIN_ALIAS (__builtin_hlsl_elementwise_clamp)
698671uint64_t4 clamp(uint64_t4, uint64_t4, uint64_t4);
699- _HLSL_VEC_SCALAR_OVERLOADS (clamp, uint64_t , 0 )
700672
701673_HLSL_BUILTIN_ALIAS (__builtin_hlsl_elementwise_clamp)
702674float clamp(float , float , float );
@@ -706,7 +678,6 @@ _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
706678float3 clamp(float3, float3, float3);
707679_HLSL_BUILTIN_ALIAS (__builtin_hlsl_elementwise_clamp)
708680float4 clamp(float4, float4, float4);
709- _HLSL_VEC_SCALAR_OVERLOADS (clamp, float , 0 )
710681
711682_HLSL_BUILTIN_ALIAS (__builtin_hlsl_elementwise_clamp)
712683double clamp(double , double , double );
@@ -716,7 +687,6 @@ _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
716687double3 clamp(double3, double3, double3);
717688_HLSL_BUILTIN_ALIAS (__builtin_hlsl_elementwise_clamp)
718689double4 clamp(double4, double4, double4);
719- _HLSL_VEC_SCALAR_OVERLOADS (clamp, double , 0 )
720690
721691// ===----------------------------------------------------------------------===//
722692// clip builtins
@@ -1629,7 +1599,7 @@ half3 max(half3, half3);
16291599_HLSL_16BIT_AVAILABILITY (shadermodel, 6.2 )
16301600_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
16311601half4 max(half4, half4);
1632- _HLSL_VEC_SCALAR_OVERLOADS (max, half, 1 )
1602+ GEN_VEC_SCALAR_OVERLOADS (max, half, 1 )
16331603
16341604#ifdef __HLSL_ENABLE_16_BIT
16351605_HLSL_AVAILABILITY (shadermodel, 6.2 )
@@ -1644,7 +1614,7 @@ int16_t3 max(int16_t3, int16_t3);
16441614_HLSL_AVAILABILITY (shadermodel, 6.2 )
16451615_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
16461616int16_t4 max(int16_t4, int16_t4);
1647- _HLSL_VEC_SCALAR_OVERLOADS (max, int16_t , 1 )
1617+ GEN_VEC_SCALAR_OVERLOADS (max, int16_t , 1 )
16481618
16491619_HLSL_AVAILABILITY(shadermodel, 6.2 )
16501620_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
@@ -1658,7 +1628,7 @@ uint16_t3 max(uint16_t3, uint16_t3);
16581628_HLSL_AVAILABILITY (shadermodel, 6.2 )
16591629_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
16601630uint16_t4 max(uint16_t4, uint16_t4);
1661- _HLSL_VEC_SCALAR_OVERLOADS (max, uint16_t , 1 )
1631+ GEN_VEC_SCALAR_OVERLOADS (max, uint16_t , 1 )
16621632#endif
16631633
16641634_HLSL_BUILTIN_ALIAS (__builtin_elementwise_max)
@@ -1669,7 +1639,7 @@ _HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
16691639int3 max(int3, int3);
16701640_HLSL_BUILTIN_ALIAS (__builtin_elementwise_max)
16711641int4 max(int4, int4);
1672- _HLSL_VEC_SCALAR_OVERLOADS (max, int , 0 )
1642+ GEN_VEC_SCALAR_OVERLOADS (max, int , 0 )
16731643
16741644_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
16751645uint max(uint, uint);
@@ -1679,7 +1649,7 @@ _HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
16791649uint3 max(uint3, uint3);
16801650_HLSL_BUILTIN_ALIAS (__builtin_elementwise_max)
16811651uint4 max(uint4, uint4);
1682- _HLSL_VEC_SCALAR_OVERLOADS (max, uint, 0 )
1652+ GEN_VEC_SCALAR_OVERLOADS (max, uint, 0 )
16831653
16841654_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
16851655int64_t max(int64_t , int64_t );
@@ -1689,7 +1659,7 @@ _HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
16891659int64_t3 max(int64_t3, int64_t3);
16901660_HLSL_BUILTIN_ALIAS (__builtin_elementwise_max)
16911661int64_t4 max(int64_t4, int64_t4);
1692- _HLSL_VEC_SCALAR_OVERLOADS (max, int64_t , 0 )
1662+ GEN_VEC_SCALAR_OVERLOADS (max, int64_t , 0 )
16931663
16941664_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
16951665uint64_t max(uint64_t , uint64_t );
@@ -1699,7 +1669,7 @@ _HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
16991669uint64_t3 max(uint64_t3, uint64_t3);
17001670_HLSL_BUILTIN_ALIAS (__builtin_elementwise_max)
17011671uint64_t4 max(uint64_t4, uint64_t4);
1702- _HLSL_VEC_SCALAR_OVERLOADS (max, uint64_t , 0 )
1672+ GEN_VEC_SCALAR_OVERLOADS (max, uint64_t , 0 )
17031673
17041674_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
17051675float max(float , float );
@@ -1709,7 +1679,7 @@ _HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
17091679float3 max(float3, float3);
17101680_HLSL_BUILTIN_ALIAS (__builtin_elementwise_max)
17111681float4 max(float4, float4);
1712- _HLSL_VEC_SCALAR_OVERLOADS (max, float , 0 )
1682+ GEN_VEC_SCALAR_OVERLOADS (max, float , 0 )
17131683
17141684_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
17151685double max(double , double );
@@ -1719,7 +1689,7 @@ _HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
17191689double3 max(double3, double3);
17201690_HLSL_BUILTIN_ALIAS (__builtin_elementwise_max)
17211691double4 max(double4, double4);
1722- _HLSL_VEC_SCALAR_OVERLOADS (max, double , 0 )
1692+ GEN_VEC_SCALAR_OVERLOADS (max, double , 0 )
17231693
17241694// ===----------------------------------------------------------------------===//
17251695// min builtins
@@ -1742,7 +1712,7 @@ half3 min(half3, half3);
17421712_HLSL_16BIT_AVAILABILITY (shadermodel, 6.2 )
17431713_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
17441714half4 min(half4, half4);
1745- _HLSL_VEC_SCALAR_OVERLOADS (min, half, 1 )
1715+ GEN_VEC_SCALAR_OVERLOADS (min, half, 1 )
17461716
17471717#ifdef __HLSL_ENABLE_16_BIT
17481718_HLSL_AVAILABILITY (shadermodel, 6.2 )
@@ -1757,7 +1727,7 @@ int16_t3 min(int16_t3, int16_t3);
17571727_HLSL_AVAILABILITY (shadermodel, 6.2 )
17581728_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
17591729int16_t4 min(int16_t4, int16_t4);
1760- _HLSL_VEC_SCALAR_OVERLOADS (min, int16_t , 1 )
1730+ GEN_VEC_SCALAR_OVERLOADS (min, int16_t , 1 )
17611731
17621732_HLSL_AVAILABILITY(shadermodel, 6.2 )
17631733_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
@@ -1771,7 +1741,7 @@ uint16_t3 min(uint16_t3, uint16_t3);
17711741_HLSL_AVAILABILITY (shadermodel, 6.2 )
17721742_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
17731743uint16_t4 min(uint16_t4, uint16_t4);
1774- _HLSL_VEC_SCALAR_OVERLOADS (min, uint16_t , 1 )
1744+ GEN_VEC_SCALAR_OVERLOADS (min, uint16_t , 1 )
17751745#endif
17761746
17771747_HLSL_BUILTIN_ALIAS (__builtin_elementwise_min)
@@ -1782,7 +1752,7 @@ _HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
17821752int3 min(int3, int3);
17831753_HLSL_BUILTIN_ALIAS (__builtin_elementwise_min)
17841754int4 min(int4, int4);
1785- _HLSL_VEC_SCALAR_OVERLOADS (min, int , 0 )
1755+ GEN_VEC_SCALAR_OVERLOADS (min, int , 0 )
17861756
17871757_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
17881758uint min(uint, uint);
@@ -1792,7 +1762,7 @@ _HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
17921762uint3 min(uint3, uint3);
17931763_HLSL_BUILTIN_ALIAS (__builtin_elementwise_min)
17941764uint4 min(uint4, uint4);
1795- _HLSL_VEC_SCALAR_OVERLOADS (min, uint, 0 )
1765+ GEN_VEC_SCALAR_OVERLOADS (min, uint, 0 )
17961766
17971767_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
17981768float min(float , float );
@@ -1802,7 +1772,7 @@ _HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
18021772float3 min(float3, float3);
18031773_HLSL_BUILTIN_ALIAS (__builtin_elementwise_min)
18041774float4 min(float4, float4);
1805- _HLSL_VEC_SCALAR_OVERLOADS (min, float , 0 )
1775+ GEN_VEC_SCALAR_OVERLOADS (min, float , 0 )
18061776
18071777_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
18081778int64_t min(int64_t , int64_t );
@@ -1812,7 +1782,7 @@ _HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
18121782int64_t3 min(int64_t3, int64_t3);
18131783_HLSL_BUILTIN_ALIAS (__builtin_elementwise_min)
18141784int64_t4 min(int64_t4, int64_t4);
1815- _HLSL_VEC_SCALAR_OVERLOADS (min, int64_t , 0 )
1785+ GEN_VEC_SCALAR_OVERLOADS (min, int64_t , 0 )
18161786
18171787_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
18181788uint64_t min(uint64_t , uint64_t );
@@ -1822,7 +1792,7 @@ _HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
18221792uint64_t3 min(uint64_t3, uint64_t3);
18231793_HLSL_BUILTIN_ALIAS (__builtin_elementwise_min)
18241794uint64_t4 min(uint64_t4, uint64_t4);
1825- _HLSL_VEC_SCALAR_OVERLOADS (min, uint64_t , 0 )
1795+ GEN_VEC_SCALAR_OVERLOADS (min, uint64_t , 0 )
18261796
18271797_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
18281798double min(double , double );
@@ -1832,7 +1802,7 @@ _HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
18321802double3 min(double3, double3);
18331803_HLSL_BUILTIN_ALIAS (__builtin_elementwise_min)
18341804double4 min(double4, double4);
1835- _HLSL_VEC_SCALAR_OVERLOADS (min, double , 0 )
1805+ GEN_VEC_SCALAR_OVERLOADS (min, double , 0 )
18361806
18371807// ===----------------------------------------------------------------------===//
18381808// normalize builtins
0 commit comments