@@ -37,6 +37,26 @@ namespace hlsl {
37
37
#define _HLSL_16BIT_AVAILABILITY_STAGE (environment, version, stage )
38
38
#endif
39
39
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)
44
+
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); \
50
+ } \
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); \
55
+ }
56
+
57
+ #define IF_TRUE_0 (EXPR )
58
+ #define IF_TRUE_1 (EXPR ) EXPR
59
+
40
60
// ===----------------------------------------------------------------------===//
41
61
// abs builtins
42
62
// ===----------------------------------------------------------------------===//
@@ -1700,6 +1720,7 @@ half3 max(half3, half3);
1700
1720
_HLSL_16BIT_AVAILABILITY (shadermodel, 6.2 )
1701
1721
_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1702
1722
half4 max(half4, half4);
1723
+ GEN_VEC_SCALAR_OVERLOADS (max, half, 1 )
1703
1724
1704
1725
#ifdef __HLSL_ENABLE_16_BIT
1705
1726
_HLSL_AVAILABILITY (shadermodel, 6.2 )
@@ -1714,6 +1735,7 @@ int16_t3 max(int16_t3, int16_t3);
1714
1735
_HLSL_AVAILABILITY (shadermodel, 6.2 )
1715
1736
_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1716
1737
int16_t4 max(int16_t4, int16_t4);
1738
+ GEN_VEC_SCALAR_OVERLOADS (max, int16_t , 1 )
1717
1739
1718
1740
_HLSL_AVAILABILITY(shadermodel, 6.2 )
1719
1741
_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
@@ -1727,6 +1749,7 @@ uint16_t3 max(uint16_t3, uint16_t3);
1727
1749
_HLSL_AVAILABILITY (shadermodel, 6.2 )
1728
1750
_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1729
1751
uint16_t4 max(uint16_t4, uint16_t4);
1752
+ GEN_VEC_SCALAR_OVERLOADS (max, uint16_t , 1 )
1730
1753
#endif
1731
1754
1732
1755
_HLSL_BUILTIN_ALIAS (__builtin_elementwise_max)
@@ -1737,6 +1760,7 @@ _HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1737
1760
int3 max(int3, int3);
1738
1761
_HLSL_BUILTIN_ALIAS (__builtin_elementwise_max)
1739
1762
int4 max(int4, int4);
1763
+ GEN_VEC_SCALAR_OVERLOADS (max, int , 0 )
1740
1764
1741
1765
_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1742
1766
uint max(uint, uint);
@@ -1746,6 +1770,7 @@ _HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1746
1770
uint3 max(uint3, uint3);
1747
1771
_HLSL_BUILTIN_ALIAS (__builtin_elementwise_max)
1748
1772
uint4 max(uint4, uint4);
1773
+ GEN_VEC_SCALAR_OVERLOADS (max, uint, 0 )
1749
1774
1750
1775
_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1751
1776
int64_t max(int64_t , int64_t );
@@ -1755,6 +1780,7 @@ _HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1755
1780
int64_t3 max(int64_t3, int64_t3);
1756
1781
_HLSL_BUILTIN_ALIAS (__builtin_elementwise_max)
1757
1782
int64_t4 max(int64_t4, int64_t4);
1783
+ GEN_VEC_SCALAR_OVERLOADS (max, int64_t , 0 )
1758
1784
1759
1785
_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1760
1786
uint64_t max(uint64_t , uint64_t );
@@ -1764,6 +1790,7 @@ _HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1764
1790
uint64_t3 max(uint64_t3, uint64_t3);
1765
1791
_HLSL_BUILTIN_ALIAS (__builtin_elementwise_max)
1766
1792
uint64_t4 max(uint64_t4, uint64_t4);
1793
+ GEN_VEC_SCALAR_OVERLOADS (max, uint64_t , 0 )
1767
1794
1768
1795
_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1769
1796
float max(float , float );
@@ -1773,6 +1800,7 @@ _HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1773
1800
float3 max(float3, float3);
1774
1801
_HLSL_BUILTIN_ALIAS (__builtin_elementwise_max)
1775
1802
float4 max(float4, float4);
1803
+ GEN_VEC_SCALAR_OVERLOADS (max, float , 0 )
1776
1804
1777
1805
_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1778
1806
double max(double , double );
@@ -1782,6 +1810,7 @@ _HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1782
1810
double3 max(double3, double3);
1783
1811
_HLSL_BUILTIN_ALIAS (__builtin_elementwise_max)
1784
1812
double4 max(double4, double4);
1813
+ GEN_VEC_SCALAR_OVERLOADS (max, double , 0 )
1785
1814
1786
1815
// ===----------------------------------------------------------------------===//
1787
1816
// min builtins
@@ -1804,6 +1833,7 @@ half3 min(half3, half3);
1804
1833
_HLSL_16BIT_AVAILABILITY (shadermodel, 6.2 )
1805
1834
_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1806
1835
half4 min(half4, half4);
1836
+ GEN_VEC_SCALAR_OVERLOADS (min, half, 1 )
1807
1837
1808
1838
#ifdef __HLSL_ENABLE_16_BIT
1809
1839
_HLSL_AVAILABILITY (shadermodel, 6.2 )
@@ -1818,6 +1848,7 @@ int16_t3 min(int16_t3, int16_t3);
1818
1848
_HLSL_AVAILABILITY (shadermodel, 6.2 )
1819
1849
_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1820
1850
int16_t4 min(int16_t4, int16_t4);
1851
+ GEN_VEC_SCALAR_OVERLOADS (min, int16_t , 1 )
1821
1852
1822
1853
_HLSL_AVAILABILITY(shadermodel, 6.2 )
1823
1854
_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
@@ -1831,6 +1862,7 @@ uint16_t3 min(uint16_t3, uint16_t3);
1831
1862
_HLSL_AVAILABILITY (shadermodel, 6.2 )
1832
1863
_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1833
1864
uint16_t4 min(uint16_t4, uint16_t4);
1865
+ GEN_VEC_SCALAR_OVERLOADS (min, uint16_t , 1 )
1834
1866
#endif
1835
1867
1836
1868
_HLSL_BUILTIN_ALIAS (__builtin_elementwise_min)
@@ -1841,6 +1873,7 @@ _HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1841
1873
int3 min(int3, int3);
1842
1874
_HLSL_BUILTIN_ALIAS (__builtin_elementwise_min)
1843
1875
int4 min(int4, int4);
1876
+ GEN_VEC_SCALAR_OVERLOADS (min, int , 0 )
1844
1877
1845
1878
_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1846
1879
uint min(uint, uint);
@@ -1850,6 +1883,7 @@ _HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1850
1883
uint3 min(uint3, uint3);
1851
1884
_HLSL_BUILTIN_ALIAS (__builtin_elementwise_min)
1852
1885
uint4 min(uint4, uint4);
1886
+ GEN_VEC_SCALAR_OVERLOADS (min, uint, 0 )
1853
1887
1854
1888
_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1855
1889
float min(float , float );
@@ -1859,6 +1893,7 @@ _HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1859
1893
float3 min(float3, float3);
1860
1894
_HLSL_BUILTIN_ALIAS (__builtin_elementwise_min)
1861
1895
float4 min(float4, float4);
1896
+ GEN_VEC_SCALAR_OVERLOADS (min, float , 0 )
1862
1897
1863
1898
_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1864
1899
int64_t min(int64_t , int64_t );
@@ -1868,6 +1903,7 @@ _HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1868
1903
int64_t3 min(int64_t3, int64_t3);
1869
1904
_HLSL_BUILTIN_ALIAS (__builtin_elementwise_min)
1870
1905
int64_t4 min(int64_t4, int64_t4);
1906
+ GEN_VEC_SCALAR_OVERLOADS (min, int64_t , 0 )
1871
1907
1872
1908
_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1873
1909
uint64_t min(uint64_t , uint64_t );
@@ -1877,6 +1913,7 @@ _HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1877
1913
uint64_t3 min(uint64_t3, uint64_t3);
1878
1914
_HLSL_BUILTIN_ALIAS (__builtin_elementwise_min)
1879
1915
uint64_t4 min(uint64_t4, uint64_t4);
1916
+ GEN_VEC_SCALAR_OVERLOADS (min, uint64_t , 0 )
1880
1917
1881
1918
_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1882
1919
double min(double , double );
@@ -1886,6 +1923,7 @@ _HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1886
1923
double3 min(double3, double3);
1887
1924
_HLSL_BUILTIN_ALIAS (__builtin_elementwise_min)
1888
1925
double4 min(double4, double4);
1926
+ GEN_VEC_SCALAR_OVERLOADS (min, double , 0 )
1889
1927
1890
1928
// ===----------------------------------------------------------------------===//
1891
1929
// normalize builtins
0 commit comments