9#ifndef _HLSL_COMPAT_OVERLOADS_H_
10#define _HLSL_COMPAT_OVERLOADS_H_
19#define _DXC_DEPRECATED_64BIT_FN(fn) \
20 [[deprecated("In 202x 64 bit API lowering for " #fn " is deprecated. " \
21 "Explicitly cast parameters to 32 or 16 bit types.")]]
23#define _DXC_DEPRECATED_INT_FN(fn) \
24 [[deprecated("In 202x int lowering for " #fn " is deprecated. " \
25 "Explicitly cast parameters to float types.")]]
27#define _DXC_DEPRECATED_VEC_SCALAR_FN(fn) \
28 [[deprecated("In 202x mismatched vector/scalar lowering for " #fn " is " \
29 "deprecated. Explicitly cast parameters.")]]
31#define _DXC_COMPAT_UNARY_DOUBLE_OVERLOADS(fn) \
32 _DXC_DEPRECATED_64BIT_FN(fn) \
33 constexpr float fn(double V) { return fn((float)V); } \
34 _DXC_DEPRECATED_64BIT_FN(fn) \
35 constexpr float2 fn(double2 V) { return fn((float2)V); } \
36 _DXC_DEPRECATED_64BIT_FN(fn) \
37 constexpr float3 fn(double3 V) { return fn((float3)V); } \
38 _DXC_DEPRECATED_64BIT_FN(fn) \
39 constexpr float4 fn(double4 V) { return fn((float4)V); }
41#define _DXC_COMPAT_BINARY_DOUBLE_OVERLOADS(fn) \
42 _DXC_DEPRECATED_64BIT_FN(fn) \
43 constexpr float fn(double V1, double V2) { \
44 return fn((float)V1, (float)V2); \
46 _DXC_DEPRECATED_64BIT_FN(fn) \
47 constexpr float2 fn(double2 V1, double2 V2) { \
48 return fn((float2)V1, (float2)V2); \
50 _DXC_DEPRECATED_64BIT_FN(fn) \
51 constexpr float3 fn(double3 V1, double3 V2) { \
52 return fn((float3)V1, (float3)V2); \
54 _DXC_DEPRECATED_64BIT_FN(fn) \
55 constexpr float4 fn(double4 V1, double4 V2) { \
56 return fn((float4)V1, (float4)V2); \
59#define _DXC_COMPAT_TERNARY_DOUBLE_OVERLOADS(fn) \
60 _DXC_DEPRECATED_64BIT_FN(fn) \
61 constexpr float fn(double V1, double V2, double V3) { \
62 return fn((float)V1, (float)V2, (float)V3); \
64 _DXC_DEPRECATED_64BIT_FN(fn) \
65 constexpr float2 fn(double2 V1, double2 V2, double2 V3) { \
66 return fn((float2)V1, (float2)V2, (float2)V3); \
68 _DXC_DEPRECATED_64BIT_FN(fn) \
69 constexpr float3 fn(double3 V1, double3 V2, double3 V3) { \
70 return fn((float3)V1, (float3)V2, (float3)V3); \
72 _DXC_DEPRECATED_64BIT_FN(fn) \
73 constexpr float4 fn(double4 V1, double4 V2, double4 V3) { \
74 return fn((float4)V1, (float4)V2, (float4)V3); \
77#define _DXC_COMPAT_UNARY_INTEGER_OVERLOADS(fn) \
78 _DXC_DEPRECATED_INT_FN(fn) \
79 constexpr float fn(int V) { return fn((float)V); } \
80 _DXC_DEPRECATED_INT_FN(fn) \
81 constexpr float2 fn(int2 V) { return fn((float2)V); } \
82 _DXC_DEPRECATED_INT_FN(fn) \
83 constexpr float3 fn(int3 V) { return fn((float3)V); } \
84 _DXC_DEPRECATED_INT_FN(fn) \
85 constexpr float4 fn(int4 V) { return fn((float4)V); } \
86 _DXC_DEPRECATED_INT_FN(fn) \
87 constexpr float fn(uint V) { return fn((float)V); } \
88 _DXC_DEPRECATED_INT_FN(fn) \
89 constexpr float2 fn(uint2 V) { return fn((float2)V); } \
90 _DXC_DEPRECATED_INT_FN(fn) \
91 constexpr float3 fn(uint3 V) { return fn((float3)V); } \
92 _DXC_DEPRECATED_INT_FN(fn) \
93 constexpr float4 fn(uint4 V) { return fn((float4)V); } \
94 _DXC_DEPRECATED_INT_FN(fn) \
95 constexpr float fn(int64_t V) { return fn((float)V); } \
96 _DXC_DEPRECATED_INT_FN(fn) \
97 constexpr float2 fn(int64_t2 V) { return fn((float2)V); } \
98 _DXC_DEPRECATED_INT_FN(fn) \
99 constexpr float3 fn(int64_t3 V) { return fn((float3)V); } \
100 _DXC_DEPRECATED_INT_FN(fn) \
101 constexpr float4 fn(int64_t4 V) { return fn((float4)V); } \
102 _DXC_DEPRECATED_INT_FN(fn) \
103 constexpr float fn(uint64_t V) { return fn((float)V); } \
104 _DXC_DEPRECATED_INT_FN(fn) \
105 constexpr float2 fn(uint64_t2 V) { return fn((float2)V); } \
106 _DXC_DEPRECATED_INT_FN(fn) \
107 constexpr float3 fn(uint64_t3 V) { return fn((float3)V); } \
108 _DXC_DEPRECATED_INT_FN(fn) \
109 constexpr float4 fn(uint64_t4 V) { return fn((float4)V); }
111#define _DXC_COMPAT_BINARY_INTEGER_OVERLOADS(fn) \
112 _DXC_DEPRECATED_INT_FN(fn) \
113 constexpr float fn(int V1, int V2) { return fn((float)V1, (float)V2); } \
114 _DXC_DEPRECATED_INT_FN(fn) \
115 constexpr float2 fn(int2 V1, int2 V2) { return fn((float2)V1, (float2)V2); } \
116 _DXC_DEPRECATED_INT_FN(fn) \
117 constexpr float3 fn(int3 V1, int3 V2) { return fn((float3)V1, (float3)V2); } \
118 _DXC_DEPRECATED_INT_FN(fn) \
119 constexpr float4 fn(int4 V1, int4 V2) { return fn((float4)V1, (float4)V2); } \
120 _DXC_DEPRECATED_INT_FN(fn) \
121 constexpr float fn(uint V1, uint V2) { return fn((float)V1, (float)V2); } \
122 _DXC_DEPRECATED_INT_FN(fn) \
123 constexpr float2 fn(uint2 V1, uint2 V2) { \
124 return fn((float2)V1, (float2)V2); \
126 _DXC_DEPRECATED_INT_FN(fn) \
127 constexpr float3 fn(uint3 V1, uint3 V2) { \
128 return fn((float3)V1, (float3)V2); \
130 _DXC_DEPRECATED_INT_FN(fn) \
131 constexpr float4 fn(uint4 V1, uint4 V2) { \
132 return fn((float4)V1, (float4)V2); \
134 _DXC_DEPRECATED_INT_FN(fn) \
135 constexpr float fn(int64_t V1, int64_t V2) { \
136 return fn((float)V1, (float)V2); \
138 _DXC_DEPRECATED_INT_FN(fn) \
139 constexpr float2 fn(int64_t2 V1, int64_t2 V2) { \
140 return fn((float2)V1, (float2)V2); \
142 _DXC_DEPRECATED_INT_FN(fn) \
143 constexpr float3 fn(int64_t3 V1, int64_t3 V2) { \
144 return fn((float3)V1, (float3)V2); \
146 _DXC_DEPRECATED_INT_FN(fn) \
147 constexpr float4 fn(int64_t4 V1, int64_t4 V2) { \
148 return fn((float4)V1, (float4)V2); \
150 _DXC_DEPRECATED_INT_FN(fn) \
151 constexpr float fn(uint64_t V1, uint64_t V2) { \
152 return fn((float)V1, (float)V2); \
154 _DXC_DEPRECATED_INT_FN(fn) \
155 constexpr float2 fn(uint64_t2 V1, uint64_t2 V2) { \
156 return fn((float2)V1, (float2)V2); \
158 _DXC_DEPRECATED_INT_FN(fn) \
159 constexpr float3 fn(uint64_t3 V1, uint64_t3 V2) { \
160 return fn((float3)V1, (float3)V2); \
162 _DXC_DEPRECATED_INT_FN(fn) \
163 constexpr float4 fn(uint64_t4 V1, uint64_t4 V2) { \
164 return fn((float4)V1, (float4)V2); \
167#define _DXC_COMPAT_TERNARY_INTEGER_OVERLOADS(fn) \
168 _DXC_DEPRECATED_INT_FN(fn) \
169 constexpr float fn(int V1, int V2, int V3) { \
170 return fn((float)V1, (float)V2, (float)V3); \
172 _DXC_DEPRECATED_INT_FN(fn) \
173 constexpr float2 fn(int2 V1, int2 V2, int2 V3) { \
174 return fn((float2)V1, (float2)V2, (float2)V3); \
176 _DXC_DEPRECATED_INT_FN(fn) \
177 constexpr float3 fn(int3 V1, int3 V2, int3 V3) { \
178 return fn((float3)V1, (float3)V2, (float3)V3); \
180 _DXC_DEPRECATED_INT_FN(fn) \
181 constexpr float4 fn(int4 V1, int4 V2, int4 V3) { \
182 return fn((float4)V1, (float4)V2, (float4)V3); \
184 _DXC_DEPRECATED_INT_FN(fn) \
185 constexpr float fn(uint V1, uint V2, uint V3) { \
186 return fn((float)V1, (float)V2, (float)V3); \
188 _DXC_DEPRECATED_INT_FN(fn) \
189 constexpr float2 fn(uint2 V1, uint2 V2, uint2 V3) { \
190 return fn((float2)V1, (float2)V2, (float2)V3); \
192 _DXC_DEPRECATED_INT_FN(fn) \
193 constexpr float3 fn(uint3 V1, uint3 V2, uint3 V3) { \
194 return fn((float3)V1, (float3)V2, (float3)V3); \
196 _DXC_DEPRECATED_INT_FN(fn) \
197 constexpr float4 fn(uint4 V1, uint4 V2, uint4 V3) { \
198 return fn((float4)V1, (float4)V2, (float4)V3); \
200 _DXC_DEPRECATED_INT_FN(fn) \
201 constexpr float fn(int64_t V1, int64_t V2, int64_t V3) { \
202 return fn((float)V1, (float)V2, (float)V3); \
204 _DXC_DEPRECATED_INT_FN(fn) \
205 constexpr float2 fn(int64_t2 V1, int64_t2 V2, int64_t2 V3) { \
206 return fn((float2)V1, (float2)V2, (float2)V3); \
208 _DXC_DEPRECATED_INT_FN(fn) \
209 constexpr float3 fn(int64_t3 V1, int64_t3 V2, int64_t3 V3) { \
210 return fn((float3)V1, (float3)V2, (float3)V3); \
212 _DXC_DEPRECATED_INT_FN(fn) \
213 constexpr float4 fn(int64_t4 V1, int64_t4 V2, int64_t4 V3) { \
214 return fn((float4)V1, (float4)V2, (float4)V3); \
216 _DXC_DEPRECATED_INT_FN(fn) \
217 constexpr float fn(uint64_t V1, uint64_t V2, uint64_t V3) { \
218 return fn((float)V1, (float)V2, (float)V3); \
220 _DXC_DEPRECATED_INT_FN(fn) \
221 constexpr float2 fn(uint64_t2 V1, uint64_t2 V2, uint64_t2 V3) { \
222 return fn((float2)V1, (float2)V2, (float2)V3); \
224 _DXC_DEPRECATED_INT_FN(fn) \
225 constexpr float3 fn(uint64_t3 V1, uint64_t3 V2, uint64_t3 V3) { \
226 return fn((float3)V1, (float3)V2, (float3)V3); \
228 _DXC_DEPRECATED_INT_FN(fn) \
229 constexpr float4 fn(uint64_t4 V1, uint64_t4 V2, uint64_t4 V3) { \
230 return fn((float4)V1, (float4)V2, (float4)V3); \
233#define _DXC_COMPAT_BINARY_DOUBLE_MATRIX_OVERLOADS(fn) \
234 template <uint R, uint C> \
235 _DXC_DEPRECATED_64BIT_FN(fn) \
236 constexpr matrix<float, R, C> fn(matrix<double, R, C> V1, \
237 matrix<double, R, C> V2) { \
238 return fn((matrix<float, R, C>)V1, (matrix<float, R, C>)V2); \
241#define _DXC_COMPAT_BINARY_INTEGER_MATRIX_OVERLOADS(fn) \
242 template <uint R, uint C> \
243 _DXC_DEPRECATED_INT_FN(fn) \
244 constexpr matrix<float, R, C> fn(matrix<int, R, C> V1, \
245 matrix<int, R, C> V2) { \
246 return fn((matrix<float, R, C>)V1, (matrix<float, R, C>)V2); \
249 template <uint R, uint C> \
250 _DXC_DEPRECATED_INT_FN(fn) \
251 constexpr matrix<float, R, C> fn(matrix<uint, R, C> V1, \
252 matrix<uint, R, C> V2) { \
253 return fn((matrix<float, R, C>)V1, (matrix<float, R, C>)V2); \
256 template <uint R, uint C> \
257 _DXC_DEPRECATED_INT_FN(fn) \
258 constexpr matrix<float, R, C> fn(matrix<int64_t, R, C> V1, \
259 matrix<int64_t, R, C> V2) { \
260 return fn((matrix<float, R, C>)V1, (matrix<float, R, C>)V2); \
263 template <uint R, uint C> \
264 _DXC_DEPRECATED_INT_FN(fn) \
265 constexpr matrix<float, R, C> fn(matrix<uint64_t, R, C> V1, \
266 matrix<uint64_t, R, C> V2) { \
267 return fn((matrix<float, R, C>)V1, (matrix<float, R, C>)V2); \
311template <
typename T, u
int N>
314 vector<T, N> p0, vector<T, N> p1, T p2) {
315 return clamp(p0, p1, (vector<T, N>)p2);
318template <
typename T, u
int N>
321 vector<T, N> p0, T p1, vector<T, N> p2) {
322 return clamp(p0, (vector<T, N>)p1, p2);
325template <
typename T, u
int N>
328 vector<T, N> p0, T p1, T p2) {
329 return clamp(p0, (vector<T, N>)p1, (vector<T, N>)p2);
471template <
typename T, u
int N>
474 vector<T, N> x, vector<T, N> y, T s) {
475 return lerp(x, y, (vector<T, N>)s);
506template <
typename T, u
int N>
508constexpr
__detail::enable_if_t<(N > 1 && N <= 4), vector<T, N>>
max(
509 vector<T, N> p0, T p1) {
510 return max(p0, (vector<T, N>)p1);
513template <
typename T, u
int N>
515constexpr
__detail::enable_if_t<(N > 1 && N <= 4), vector<T, N>>
max(
516 T p0, vector<T, N> p1) {
517 return max((vector<T, N>)p0, p1);
524template <
typename T, u
int N>
526constexpr
__detail::enable_if_t<(N > 1 && N <= 4), vector<T, N>>
min(
527 vector<T, N> p0, T p1) {
528 return min(p0, (vector<T, N>)p1);
531template <
typename T, u
int N>
533constexpr
__detail::enable_if_t<(N > 1 && N <= 4), vector<T, N>>
min(
534 T p0, vector<T, N> p1) {
535 return min((vector<T, N>)p0, p1);
__DEVICE__ bool isnan(float __x)
Test for a NaN.
__DEVICE__ bool isinf(float __x)
Test for infinity value (+ve or -ve) .
__DEVICE__ int min(int __a, int __b)
__DEVICE__ int max(int __a, int __b)
__DEVICE__ double rsqrt(double __a)
#define _DXC_DEPRECATED_64BIT_FN(fn)
#define _DXC_DEPRECATED_VEC_SCALAR_FN(fn)
#define _DXC_COMPAT_BINARY_DOUBLE_OVERLOADS(fn)
#define _DXC_COMPAT_TERNARY_INTEGER_OVERLOADS(fn)
#define _DXC_COMPAT_UNARY_DOUBLE_OVERLOADS(fn)
#define _DXC_COMPAT_TERNARY_DOUBLE_OVERLOADS(fn)
#define _DXC_COMPAT_BINARY_INTEGER_MATRIX_OVERLOADS(fn)
#define _DXC_COMPAT_UNARY_INTEGER_OVERLOADS(fn)
#define _DXC_COMPAT_BINARY_INTEGER_OVERLOADS(fn)
#define _DXC_COMPAT_BINARY_DOUBLE_MATRIX_OVERLOADS(fn)
matrix< double, 4, 3 > double4x3
matrix< double, 3, 3 > double3x3
matrix< float, 2, 1 > float2x1
matrix< float, 4, 4 > float4x4
matrix< float, 3, 1 > float3x1
matrix< double, 2, 3 > double2x3
matrix< bool, 2, 1 > bool2x1
matrix< double, 3, 2 > double3x2
matrix< float, 1, 4 > float1x4
matrix< float, 3, 2 > float3x2
matrix< float, 1, 3 > float1x3
matrix< float, 3, 4 > float3x4
matrix< bool, 1, 4 > bool1x4
matrix< bool, 4, 1 > bool4x1
constexpr bool isinf(double V)
vector< float, 4 > float4
matrix< bool, 2, 3 > bool2x3
matrix< bool, 2, 2 > bool2x2
matrix< double, 4, 2 > double4x2
matrix< bool, 2, 4 > bool2x4
matrix< bool, 3, 1 > bool3x1
matrix< bool, 3, 4 > bool3x4
matrix< double, 2, 1 > double2x1
matrix< bool, 3, 2 > bool3x2
matrix< double, 2, 2 > double2x2
matrix< double, 3, 1 > double3x1
matrix< double, 1, 2 > double1x2
constexpr __detail::enable_if_t<(N > 1 &&N<=4), vector< T, N > > lerp(vector< T, N > x, vector< T, N > y, T s)
matrix< bool, 1, 2 > bool1x2
matrix< float, 4, 2 > float4x2
matrix< double, 4, 1 > double4x1
matrix< float, 1, 2 > float1x2
vector< double, 3 > double3
vector< float, 2 > float2
constexpr __detail::enable_if_t<(N > 1 &&N<=4), vector< T, N > > max(vector< T, N > p0, T p1)
vector< float, 3 > float3
matrix< bool, 1, 3 > bool1x3
matrix< double, 2, 4 > double2x4
constexpr __detail::enable_if_t<(N > 1 &&N<=4), vector< T, N > > min(vector< T, N > p0, T p1)
vector< double, 4 > double4
vector< double, 2 > double2
matrix< float, 2, 3 > float2x3
constexpr __detail::enable_if_t<(N > 1 &&N<=4), vector< T, N > > clamp(vector< T, N > p0, vector< T, N > p1, T p2)
matrix< double, 1, 3 > double1x3
matrix< bool, 3, 3 > bool3x3
matrix< double, 4, 4 > double4x4
matrix< float, 2, 4 > float2x4
matrix< float, 4, 3 > float4x3
matrix< bool, 4, 2 > bool4x2
matrix< float, 3, 3 > float3x3
matrix< double, 3, 4 > double3x4
matrix< bool, 4, 4 > bool4x4
matrix< bool, 4, 3 > bool4x3
matrix< float, 4, 1 > float4x1
matrix< float, 2, 2 > float2x2
matrix< double, 1, 4 > double1x4
constexpr bool isnan(double V)
float __ovld __cnfn step(float, float)
Returns 0.0 if x < edge, otherwise it returns 1.0.
float __ovld __cnfn radians(float)
Converts degrees to radians, i.e.
float __ovld __cnfn degrees(float)
Converts radians to degrees, i.e.
char __ovld __cnfn clamp(char, char, char)
Returns min(max(x, minval), maxval).
float __ovld __cnfn normalize(float)
Returns a vector in the same direction as p but with a length of 1.