@@ -35,26 +35,44 @@ namespace hlsl {
35
35
#define _HLSL_16BIT_AVAILABILITY_STAGE (environment, version, stage )
36
36
#endif
37
37
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); \
48
52
} \
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); \
53
57
}
54
58
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
57
71
72
+ #define _HLSL_NUM_ARGS_min 2
73
+ #define _HLSL_NUM_ARGS_max 2
74
+ #define _HLSL_NUM_ARGS_clamp 3
75
+
58
76
// ===----------------------------------------------------------------------===//
59
77
// abs builtins
60
78
// ===----------------------------------------------------------------------===//
@@ -582,7 +600,8 @@ half3 clamp(half3, half3, half3);
582
600
_HLSL_16BIT_AVAILABILITY (shadermodel, 6.2 )
583
601
_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
584
602
half4 clamp(half4, half4, half4);
585
-
603
+ _HLSL_VEC_SCALAR_OVERLOADS (clamp, half, 1 )
604
+
586
605
#ifdef __HLSL_ENABLE_16_BIT
587
606
_HLSL_AVAILABILITY (shadermodel, 6.2 )
588
607
_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
@@ -596,7 +615,8 @@ int16_t3 clamp(int16_t3, int16_t3, int16_t3);
596
615
_HLSL_AVAILABILITY (shadermodel, 6.2 )
597
616
_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
598
617
int16_t4 clamp(int16_t4, int16_t4, int16_t4);
599
-
618
+ _HLSL_VEC_SCALAR_OVERLOADS (clamp, int16_t , 1 )
619
+
600
620
_HLSL_AVAILABILITY(shadermodel, 6.2 )
601
621
_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
602
622
uint16_t clamp(uint16_t , uint16_t , uint16_t );
@@ -609,6 +629,7 @@ uint16_t3 clamp(uint16_t3, uint16_t3, uint16_t3);
609
629
_HLSL_AVAILABILITY (shadermodel, 6.2 )
610
630
_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
611
631
uint16_t4 clamp(uint16_t4, uint16_t4, uint16_t4);
632
+ _HLSL_VEC_SCALAR_OVERLOADS (clamp, uint16_t , 1 )
612
633
#endif
613
634
614
635
_HLSL_BUILTIN_ALIAS (__builtin_hlsl_elementwise_clamp)
@@ -619,6 +640,7 @@ _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
619
640
int3 clamp(int3, int3, int3);
620
641
_HLSL_BUILTIN_ALIAS (__builtin_hlsl_elementwise_clamp)
621
642
int4 clamp(int4, int4, int4);
643
+ _HLSL_VEC_SCALAR_OVERLOADS (clamp, int , 0 )
622
644
623
645
_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
624
646
uint clamp(uint, uint, uint);
@@ -628,6 +650,7 @@ _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
628
650
uint3 clamp(uint3, uint3, uint3);
629
651
_HLSL_BUILTIN_ALIAS (__builtin_hlsl_elementwise_clamp)
630
652
uint4 clamp(uint4, uint4, uint4);
653
+ _HLSL_VEC_SCALAR_OVERLOADS (clamp, uint, 0 )
631
654
632
655
_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
633
656
int64_t clamp(int64_t , int64_t , int64_t );
@@ -637,6 +660,7 @@ _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
637
660
int64_t3 clamp(int64_t3, int64_t3, int64_t3);
638
661
_HLSL_BUILTIN_ALIAS (__builtin_hlsl_elementwise_clamp)
639
662
int64_t4 clamp(int64_t4, int64_t4, int64_t4);
663
+ _HLSL_VEC_SCALAR_OVERLOADS (clamp, int64_t , 0 )
640
664
641
665
_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
642
666
uint64_t clamp(uint64_t , uint64_t , uint64_t );
@@ -646,6 +670,7 @@ _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
646
670
uint64_t3 clamp(uint64_t3, uint64_t3, uint64_t3);
647
671
_HLSL_BUILTIN_ALIAS (__builtin_hlsl_elementwise_clamp)
648
672
uint64_t4 clamp(uint64_t4, uint64_t4, uint64_t4);
673
+ _HLSL_VEC_SCALAR_OVERLOADS (clamp, uint64_t , 0 )
649
674
650
675
_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
651
676
float clamp(float , float , float );
@@ -655,6 +680,7 @@ _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
655
680
float3 clamp(float3, float3, float3);
656
681
_HLSL_BUILTIN_ALIAS (__builtin_hlsl_elementwise_clamp)
657
682
float4 clamp(float4, float4, float4);
683
+ _HLSL_VEC_SCALAR_OVERLOADS (clamp, float , 0 )
658
684
659
685
_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
660
686
double clamp(double , double , double );
@@ -664,6 +690,7 @@ _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
664
690
double3 clamp(double3, double3, double3);
665
691
_HLSL_BUILTIN_ALIAS (__builtin_hlsl_elementwise_clamp)
666
692
double4 clamp(double4, double4, double4);
693
+ _HLSL_VEC_SCALAR_OVERLOADS (clamp, double , 0 )
667
694
668
695
// ===----------------------------------------------------------------------===//
669
696
// clip builtins
@@ -1576,7 +1603,7 @@ half3 max(half3, half3);
1576
1603
_HLSL_16BIT_AVAILABILITY (shadermodel, 6.2 )
1577
1604
_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1578
1605
half4 max(half4, half4);
1579
- GEN_VEC_SCALAR_OVERLOADS (max, half, 1 )
1606
+ _HLSL_VEC_SCALAR_OVERLOADS (max, half, 1 )
1580
1607
1581
1608
#ifdef __HLSL_ENABLE_16_BIT
1582
1609
_HLSL_AVAILABILITY (shadermodel, 6.2 )
@@ -1591,7 +1618,7 @@ int16_t3 max(int16_t3, int16_t3);
1591
1618
_HLSL_AVAILABILITY (shadermodel, 6.2 )
1592
1619
_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1593
1620
int16_t4 max(int16_t4, int16_t4);
1594
- GEN_VEC_SCALAR_OVERLOADS (max, int16_t , 1 )
1621
+ _HLSL_VEC_SCALAR_OVERLOADS (max, int16_t , 1 )
1595
1622
1596
1623
_HLSL_AVAILABILITY(shadermodel, 6.2 )
1597
1624
_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
@@ -1605,7 +1632,7 @@ uint16_t3 max(uint16_t3, uint16_t3);
1605
1632
_HLSL_AVAILABILITY (shadermodel, 6.2 )
1606
1633
_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1607
1634
uint16_t4 max(uint16_t4, uint16_t4);
1608
- GEN_VEC_SCALAR_OVERLOADS (max, uint16_t , 1 )
1635
+ _HLSL_VEC_SCALAR_OVERLOADS (max, uint16_t , 1 )
1609
1636
#endif
1610
1637
1611
1638
_HLSL_BUILTIN_ALIAS (__builtin_elementwise_max)
@@ -1616,7 +1643,7 @@ _HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1616
1643
int3 max(int3, int3);
1617
1644
_HLSL_BUILTIN_ALIAS (__builtin_elementwise_max)
1618
1645
int4 max(int4, int4);
1619
- GEN_VEC_SCALAR_OVERLOADS (max, int , 0 )
1646
+ _HLSL_VEC_SCALAR_OVERLOADS (max, int , 0 )
1620
1647
1621
1648
_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1622
1649
uint max(uint, uint);
@@ -1626,7 +1653,7 @@ _HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1626
1653
uint3 max(uint3, uint3);
1627
1654
_HLSL_BUILTIN_ALIAS (__builtin_elementwise_max)
1628
1655
uint4 max(uint4, uint4);
1629
- GEN_VEC_SCALAR_OVERLOADS (max, uint, 0 )
1656
+ _HLSL_VEC_SCALAR_OVERLOADS (max, uint, 0 )
1630
1657
1631
1658
_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1632
1659
int64_t max(int64_t , int64_t );
@@ -1636,7 +1663,7 @@ _HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1636
1663
int64_t3 max(int64_t3, int64_t3);
1637
1664
_HLSL_BUILTIN_ALIAS (__builtin_elementwise_max)
1638
1665
int64_t4 max(int64_t4, int64_t4);
1639
- GEN_VEC_SCALAR_OVERLOADS (max, int64_t , 0 )
1666
+ _HLSL_VEC_SCALAR_OVERLOADS (max, int64_t , 0 )
1640
1667
1641
1668
_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1642
1669
uint64_t max(uint64_t , uint64_t );
@@ -1646,7 +1673,7 @@ _HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1646
1673
uint64_t3 max(uint64_t3, uint64_t3);
1647
1674
_HLSL_BUILTIN_ALIAS (__builtin_elementwise_max)
1648
1675
uint64_t4 max(uint64_t4, uint64_t4);
1649
- GEN_VEC_SCALAR_OVERLOADS (max, uint64_t , 0 )
1676
+ _HLSL_VEC_SCALAR_OVERLOADS (max, uint64_t , 0 )
1650
1677
1651
1678
_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1652
1679
float max(float , float );
@@ -1656,7 +1683,7 @@ _HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1656
1683
float3 max(float3, float3);
1657
1684
_HLSL_BUILTIN_ALIAS (__builtin_elementwise_max)
1658
1685
float4 max(float4, float4);
1659
- GEN_VEC_SCALAR_OVERLOADS (max, float , 0 )
1686
+ _HLSL_VEC_SCALAR_OVERLOADS (max, float , 0 )
1660
1687
1661
1688
_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1662
1689
double max(double , double );
@@ -1666,7 +1693,7 @@ _HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1666
1693
double3 max(double3, double3);
1667
1694
_HLSL_BUILTIN_ALIAS (__builtin_elementwise_max)
1668
1695
double4 max(double4, double4);
1669
- GEN_VEC_SCALAR_OVERLOADS (max, double , 0 )
1696
+ _HLSL_VEC_SCALAR_OVERLOADS (max, double , 0 )
1670
1697
1671
1698
// ===----------------------------------------------------------------------===//
1672
1699
// min builtins
@@ -1689,7 +1716,7 @@ half3 min(half3, half3);
1689
1716
_HLSL_16BIT_AVAILABILITY (shadermodel, 6.2 )
1690
1717
_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1691
1718
half4 min(half4, half4);
1692
- GEN_VEC_SCALAR_OVERLOADS (min, half, 1 )
1719
+ _HLSL_VEC_SCALAR_OVERLOADS (min, half, 1 )
1693
1720
1694
1721
#ifdef __HLSL_ENABLE_16_BIT
1695
1722
_HLSL_AVAILABILITY (shadermodel, 6.2 )
@@ -1704,7 +1731,7 @@ int16_t3 min(int16_t3, int16_t3);
1704
1731
_HLSL_AVAILABILITY (shadermodel, 6.2 )
1705
1732
_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1706
1733
int16_t4 min(int16_t4, int16_t4);
1707
- GEN_VEC_SCALAR_OVERLOADS (min, int16_t , 1 )
1734
+ _HLSL_VEC_SCALAR_OVERLOADS (min, int16_t , 1 )
1708
1735
1709
1736
_HLSL_AVAILABILITY(shadermodel, 6.2 )
1710
1737
_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
@@ -1718,7 +1745,7 @@ uint16_t3 min(uint16_t3, uint16_t3);
1718
1745
_HLSL_AVAILABILITY (shadermodel, 6.2 )
1719
1746
_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1720
1747
uint16_t4 min(uint16_t4, uint16_t4);
1721
- GEN_VEC_SCALAR_OVERLOADS (min, uint16_t , 1 )
1748
+ _HLSL_VEC_SCALAR_OVERLOADS (min, uint16_t , 1 )
1722
1749
#endif
1723
1750
1724
1751
_HLSL_BUILTIN_ALIAS (__builtin_elementwise_min)
@@ -1729,7 +1756,7 @@ _HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1729
1756
int3 min(int3, int3);
1730
1757
_HLSL_BUILTIN_ALIAS (__builtin_elementwise_min)
1731
1758
int4 min(int4, int4);
1732
- GEN_VEC_SCALAR_OVERLOADS (min, int , 0 )
1759
+ _HLSL_VEC_SCALAR_OVERLOADS (min, int , 0 )
1733
1760
1734
1761
_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1735
1762
uint min(uint, uint);
@@ -1739,7 +1766,7 @@ _HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1739
1766
uint3 min(uint3, uint3);
1740
1767
_HLSL_BUILTIN_ALIAS (__builtin_elementwise_min)
1741
1768
uint4 min(uint4, uint4);
1742
- GEN_VEC_SCALAR_OVERLOADS (min, uint, 0 )
1769
+ _HLSL_VEC_SCALAR_OVERLOADS (min, uint, 0 )
1743
1770
1744
1771
_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1745
1772
float min(float , float );
@@ -1749,7 +1776,7 @@ _HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1749
1776
float3 min(float3, float3);
1750
1777
_HLSL_BUILTIN_ALIAS (__builtin_elementwise_min)
1751
1778
float4 min(float4, float4);
1752
- GEN_VEC_SCALAR_OVERLOADS (min, float , 0 )
1779
+ _HLSL_VEC_SCALAR_OVERLOADS (min, float , 0 )
1753
1780
1754
1781
_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1755
1782
int64_t min(int64_t , int64_t );
@@ -1759,7 +1786,7 @@ _HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1759
1786
int64_t3 min(int64_t3, int64_t3);
1760
1787
_HLSL_BUILTIN_ALIAS (__builtin_elementwise_min)
1761
1788
int64_t4 min(int64_t4, int64_t4);
1762
- GEN_VEC_SCALAR_OVERLOADS (min, int64_t , 0 )
1789
+ _HLSL_VEC_SCALAR_OVERLOADS (min, int64_t , 0 )
1763
1790
1764
1791
_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1765
1792
uint64_t min(uint64_t , uint64_t );
@@ -1769,7 +1796,7 @@ _HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1769
1796
uint64_t3 min(uint64_t3, uint64_t3);
1770
1797
_HLSL_BUILTIN_ALIAS (__builtin_elementwise_min)
1771
1798
uint64_t4 min(uint64_t4, uint64_t4);
1772
- GEN_VEC_SCALAR_OVERLOADS (min, uint64_t , 0 )
1799
+ _HLSL_VEC_SCALAR_OVERLOADS (min, uint64_t , 0 )
1773
1800
1774
1801
_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1775
1802
double min(double , double );
@@ -1779,7 +1806,7 @@ _HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1779
1806
double3 min(double3, double3);
1780
1807
_HLSL_BUILTIN_ALIAS (__builtin_elementwise_min)
1781
1808
double4 min(double4, double4);
1782
- GEN_VEC_SCALAR_OVERLOADS (min, double , 0 )
1809
+ _HLSL_VEC_SCALAR_OVERLOADS (min, double , 0 )
1783
1810
1784
1811
// ===----------------------------------------------------------------------===//
1785
1812
// normalize builtins
0 commit comments