@@ -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
// ===----------------------------------------------------------------------===//
@@ -603,7 +621,8 @@ half3 clamp(half3, half3, half3);
603
621
_HLSL_16BIT_AVAILABILITY (shadermodel, 6.2 )
604
622
_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
605
623
half4 clamp(half4, half4, half4);
606
-
624
+ _HLSL_VEC_SCALAR_OVERLOADS (clamp, half, 1 )
625
+
607
626
#ifdef __HLSL_ENABLE_16_BIT
608
627
_HLSL_AVAILABILITY (shadermodel, 6.2 )
609
628
_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
@@ -617,7 +636,8 @@ int16_t3 clamp(int16_t3, int16_t3, int16_t3);
617
636
_HLSL_AVAILABILITY (shadermodel, 6.2 )
618
637
_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
619
638
int16_t4 clamp(int16_t4, int16_t4, int16_t4);
620
-
639
+ _HLSL_VEC_SCALAR_OVERLOADS (clamp, int16_t , 1 )
640
+
621
641
_HLSL_AVAILABILITY(shadermodel, 6.2 )
622
642
_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
623
643
uint16_t clamp(uint16_t , uint16_t , uint16_t );
@@ -630,6 +650,7 @@ uint16_t3 clamp(uint16_t3, uint16_t3, uint16_t3);
630
650
_HLSL_AVAILABILITY (shadermodel, 6.2 )
631
651
_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
632
652
uint16_t4 clamp(uint16_t4, uint16_t4, uint16_t4);
653
+ _HLSL_VEC_SCALAR_OVERLOADS (clamp, uint16_t , 1 )
633
654
#endif
634
655
635
656
_HLSL_BUILTIN_ALIAS (__builtin_hlsl_elementwise_clamp)
@@ -640,6 +661,7 @@ _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
640
661
int3 clamp(int3, int3, int3);
641
662
_HLSL_BUILTIN_ALIAS (__builtin_hlsl_elementwise_clamp)
642
663
int4 clamp(int4, int4, int4);
664
+ _HLSL_VEC_SCALAR_OVERLOADS (clamp, int , 0 )
643
665
644
666
_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
645
667
uint clamp(uint, uint, uint);
@@ -649,6 +671,7 @@ _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
649
671
uint3 clamp(uint3, uint3, uint3);
650
672
_HLSL_BUILTIN_ALIAS (__builtin_hlsl_elementwise_clamp)
651
673
uint4 clamp(uint4, uint4, uint4);
674
+ _HLSL_VEC_SCALAR_OVERLOADS (clamp, uint, 0 )
652
675
653
676
_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
654
677
int64_t clamp(int64_t , int64_t , int64_t );
@@ -658,6 +681,7 @@ _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
658
681
int64_t3 clamp(int64_t3, int64_t3, int64_t3);
659
682
_HLSL_BUILTIN_ALIAS (__builtin_hlsl_elementwise_clamp)
660
683
int64_t4 clamp(int64_t4, int64_t4, int64_t4);
684
+ _HLSL_VEC_SCALAR_OVERLOADS (clamp, int64_t , 0 )
661
685
662
686
_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
663
687
uint64_t clamp(uint64_t , uint64_t , uint64_t );
@@ -667,6 +691,7 @@ _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
667
691
uint64_t3 clamp(uint64_t3, uint64_t3, uint64_t3);
668
692
_HLSL_BUILTIN_ALIAS (__builtin_hlsl_elementwise_clamp)
669
693
uint64_t4 clamp(uint64_t4, uint64_t4, uint64_t4);
694
+ _HLSL_VEC_SCALAR_OVERLOADS (clamp, uint64_t , 0 )
670
695
671
696
_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
672
697
float clamp(float , float , float );
@@ -676,6 +701,7 @@ _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
676
701
float3 clamp(float3, float3, float3);
677
702
_HLSL_BUILTIN_ALIAS (__builtin_hlsl_elementwise_clamp)
678
703
float4 clamp(float4, float4, float4);
704
+ _HLSL_VEC_SCALAR_OVERLOADS (clamp, float , 0 )
679
705
680
706
_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
681
707
double clamp(double , double , double );
@@ -685,6 +711,7 @@ _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
685
711
double3 clamp(double3, double3, double3);
686
712
_HLSL_BUILTIN_ALIAS (__builtin_hlsl_elementwise_clamp)
687
713
double4 clamp(double4, double4, double4);
714
+ _HLSL_VEC_SCALAR_OVERLOADS (clamp, double , 0 )
688
715
689
716
// ===----------------------------------------------------------------------===//
690
717
// clip builtins
@@ -1597,7 +1624,7 @@ half3 max(half3, half3);
1597
1624
_HLSL_16BIT_AVAILABILITY (shadermodel, 6.2 )
1598
1625
_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1599
1626
half4 max(half4, half4);
1600
- GEN_VEC_SCALAR_OVERLOADS (max, half, 1 )
1627
+ _HLSL_VEC_SCALAR_OVERLOADS (max, half, 1 )
1601
1628
1602
1629
#ifdef __HLSL_ENABLE_16_BIT
1603
1630
_HLSL_AVAILABILITY (shadermodel, 6.2 )
@@ -1612,7 +1639,7 @@ int16_t3 max(int16_t3, int16_t3);
1612
1639
_HLSL_AVAILABILITY (shadermodel, 6.2 )
1613
1640
_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1614
1641
int16_t4 max(int16_t4, int16_t4);
1615
- GEN_VEC_SCALAR_OVERLOADS (max, int16_t , 1 )
1642
+ _HLSL_VEC_SCALAR_OVERLOADS (max, int16_t , 1 )
1616
1643
1617
1644
_HLSL_AVAILABILITY(shadermodel, 6.2 )
1618
1645
_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
@@ -1626,7 +1653,7 @@ uint16_t3 max(uint16_t3, uint16_t3);
1626
1653
_HLSL_AVAILABILITY (shadermodel, 6.2 )
1627
1654
_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1628
1655
uint16_t4 max(uint16_t4, uint16_t4);
1629
- GEN_VEC_SCALAR_OVERLOADS (max, uint16_t , 1 )
1656
+ _HLSL_VEC_SCALAR_OVERLOADS (max, uint16_t , 1 )
1630
1657
#endif
1631
1658
1632
1659
_HLSL_BUILTIN_ALIAS (__builtin_elementwise_max)
@@ -1637,7 +1664,7 @@ _HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1637
1664
int3 max(int3, int3);
1638
1665
_HLSL_BUILTIN_ALIAS (__builtin_elementwise_max)
1639
1666
int4 max(int4, int4);
1640
- GEN_VEC_SCALAR_OVERLOADS (max, int , 0 )
1667
+ _HLSL_VEC_SCALAR_OVERLOADS (max, int , 0 )
1641
1668
1642
1669
_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1643
1670
uint max(uint, uint);
@@ -1647,7 +1674,7 @@ _HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1647
1674
uint3 max(uint3, uint3);
1648
1675
_HLSL_BUILTIN_ALIAS (__builtin_elementwise_max)
1649
1676
uint4 max(uint4, uint4);
1650
- GEN_VEC_SCALAR_OVERLOADS (max, uint, 0 )
1677
+ _HLSL_VEC_SCALAR_OVERLOADS (max, uint, 0 )
1651
1678
1652
1679
_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1653
1680
int64_t max(int64_t , int64_t );
@@ -1657,7 +1684,7 @@ _HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1657
1684
int64_t3 max(int64_t3, int64_t3);
1658
1685
_HLSL_BUILTIN_ALIAS (__builtin_elementwise_max)
1659
1686
int64_t4 max(int64_t4, int64_t4);
1660
- GEN_VEC_SCALAR_OVERLOADS (max, int64_t , 0 )
1687
+ _HLSL_VEC_SCALAR_OVERLOADS (max, int64_t , 0 )
1661
1688
1662
1689
_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1663
1690
uint64_t max(uint64_t , uint64_t );
@@ -1667,7 +1694,7 @@ _HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1667
1694
uint64_t3 max(uint64_t3, uint64_t3);
1668
1695
_HLSL_BUILTIN_ALIAS (__builtin_elementwise_max)
1669
1696
uint64_t4 max(uint64_t4, uint64_t4);
1670
- GEN_VEC_SCALAR_OVERLOADS (max, uint64_t , 0 )
1697
+ _HLSL_VEC_SCALAR_OVERLOADS (max, uint64_t , 0 )
1671
1698
1672
1699
_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1673
1700
float max(float , float );
@@ -1677,7 +1704,7 @@ _HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1677
1704
float3 max(float3, float3);
1678
1705
_HLSL_BUILTIN_ALIAS (__builtin_elementwise_max)
1679
1706
float4 max(float4, float4);
1680
- GEN_VEC_SCALAR_OVERLOADS (max, float , 0 )
1707
+ _HLSL_VEC_SCALAR_OVERLOADS (max, float , 0 )
1681
1708
1682
1709
_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1683
1710
double max(double , double );
@@ -1687,7 +1714,7 @@ _HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1687
1714
double3 max(double3, double3);
1688
1715
_HLSL_BUILTIN_ALIAS (__builtin_elementwise_max)
1689
1716
double4 max(double4, double4);
1690
- GEN_VEC_SCALAR_OVERLOADS (max, double , 0 )
1717
+ _HLSL_VEC_SCALAR_OVERLOADS (max, double , 0 )
1691
1718
1692
1719
// ===----------------------------------------------------------------------===//
1693
1720
// min builtins
@@ -1710,7 +1737,7 @@ half3 min(half3, half3);
1710
1737
_HLSL_16BIT_AVAILABILITY (shadermodel, 6.2 )
1711
1738
_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1712
1739
half4 min(half4, half4);
1713
- GEN_VEC_SCALAR_OVERLOADS (min, half, 1 )
1740
+ _HLSL_VEC_SCALAR_OVERLOADS (min, half, 1 )
1714
1741
1715
1742
#ifdef __HLSL_ENABLE_16_BIT
1716
1743
_HLSL_AVAILABILITY (shadermodel, 6.2 )
@@ -1725,7 +1752,7 @@ int16_t3 min(int16_t3, int16_t3);
1725
1752
_HLSL_AVAILABILITY (shadermodel, 6.2 )
1726
1753
_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1727
1754
int16_t4 min(int16_t4, int16_t4);
1728
- GEN_VEC_SCALAR_OVERLOADS (min, int16_t , 1 )
1755
+ _HLSL_VEC_SCALAR_OVERLOADS (min, int16_t , 1 )
1729
1756
1730
1757
_HLSL_AVAILABILITY(shadermodel, 6.2 )
1731
1758
_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
@@ -1739,7 +1766,7 @@ uint16_t3 min(uint16_t3, uint16_t3);
1739
1766
_HLSL_AVAILABILITY (shadermodel, 6.2 )
1740
1767
_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1741
1768
uint16_t4 min(uint16_t4, uint16_t4);
1742
- GEN_VEC_SCALAR_OVERLOADS (min, uint16_t , 1 )
1769
+ _HLSL_VEC_SCALAR_OVERLOADS (min, uint16_t , 1 )
1743
1770
#endif
1744
1771
1745
1772
_HLSL_BUILTIN_ALIAS (__builtin_elementwise_min)
@@ -1750,7 +1777,7 @@ _HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1750
1777
int3 min(int3, int3);
1751
1778
_HLSL_BUILTIN_ALIAS (__builtin_elementwise_min)
1752
1779
int4 min(int4, int4);
1753
- GEN_VEC_SCALAR_OVERLOADS (min, int , 0 )
1780
+ _HLSL_VEC_SCALAR_OVERLOADS (min, int , 0 )
1754
1781
1755
1782
_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1756
1783
uint min(uint, uint);
@@ -1760,7 +1787,7 @@ _HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1760
1787
uint3 min(uint3, uint3);
1761
1788
_HLSL_BUILTIN_ALIAS (__builtin_elementwise_min)
1762
1789
uint4 min(uint4, uint4);
1763
- GEN_VEC_SCALAR_OVERLOADS (min, uint, 0 )
1790
+ _HLSL_VEC_SCALAR_OVERLOADS (min, uint, 0 )
1764
1791
1765
1792
_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1766
1793
float min(float , float );
@@ -1770,7 +1797,7 @@ _HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1770
1797
float3 min(float3, float3);
1771
1798
_HLSL_BUILTIN_ALIAS (__builtin_elementwise_min)
1772
1799
float4 min(float4, float4);
1773
- GEN_VEC_SCALAR_OVERLOADS (min, float , 0 )
1800
+ _HLSL_VEC_SCALAR_OVERLOADS (min, float , 0 )
1774
1801
1775
1802
_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1776
1803
int64_t min(int64_t , int64_t );
@@ -1780,7 +1807,7 @@ _HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1780
1807
int64_t3 min(int64_t3, int64_t3);
1781
1808
_HLSL_BUILTIN_ALIAS (__builtin_elementwise_min)
1782
1809
int64_t4 min(int64_t4, int64_t4);
1783
- GEN_VEC_SCALAR_OVERLOADS (min, int64_t , 0 )
1810
+ _HLSL_VEC_SCALAR_OVERLOADS (min, int64_t , 0 )
1784
1811
1785
1812
_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1786
1813
uint64_t min(uint64_t , uint64_t );
@@ -1790,7 +1817,7 @@ _HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1790
1817
uint64_t3 min(uint64_t3, uint64_t3);
1791
1818
_HLSL_BUILTIN_ALIAS (__builtin_elementwise_min)
1792
1819
uint64_t4 min(uint64_t4, uint64_t4);
1793
- GEN_VEC_SCALAR_OVERLOADS (min, uint64_t , 0 )
1820
+ _HLSL_VEC_SCALAR_OVERLOADS (min, uint64_t , 0 )
1794
1821
1795
1822
_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1796
1823
double min(double , double );
@@ -1800,7 +1827,7 @@ _HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1800
1827
double3 min(double3, double3);
1801
1828
_HLSL_BUILTIN_ALIAS (__builtin_elementwise_min)
1802
1829
double4 min(double4, double4);
1803
- GEN_VEC_SCALAR_OVERLOADS (min, double , 0 )
1830
+ _HLSL_VEC_SCALAR_OVERLOADS (min, double , 0 )
1804
1831
1805
1832
// ===----------------------------------------------------------------------===//
1806
1833
// normalize builtins
0 commit comments