9#ifndef _HLSL_COMPAT_OVERLOADS_H_
10#define _HLSl_COMPAT_OVERLOADS_H_
19#define _DXC_COMPAT_UNARY_DOUBLE_OVERLOADS(fn) \
20 constexpr float fn(double V) { return fn((float)V); } \
21 constexpr float2 fn(double2 V) { return fn((float2)V); } \
22 constexpr float3 fn(double3 V) { return fn((float3)V); } \
23 constexpr float4 fn(double4 V) { return fn((float4)V); }
25#define _DXC_COMPAT_BINARY_DOUBLE_OVERLOADS(fn) \
26 constexpr float fn(double V1, double V2) { \
27 return fn((float)V1, (float)V2); \
29 constexpr float2 fn(double2 V1, double2 V2) { \
30 return fn((float2)V1, (float2)V2); \
32 constexpr float3 fn(double3 V1, double3 V2) { \
33 return fn((float3)V1, (float3)V2); \
35 constexpr float4 fn(double4 V1, double4 V2) { \
36 return fn((float4)V1, (float4)V2); \
39#define _DXC_COMPAT_TERNARY_DOUBLE_OVERLOADS(fn) \
40 constexpr float fn(double V1, double V2, double V3) { \
41 return fn((float)V1, (float)V2, (float)V3); \
43 constexpr float2 fn(double2 V1, double2 V2, double2 V3) { \
44 return fn((float2)V1, (float2)V2, (float2)V3); \
46 constexpr float3 fn(double3 V1, double3 V2, double3 V3) { \
47 return fn((float3)V1, (float3)V2, (float3)V3); \
49 constexpr float4 fn(double4 V1, double4 V2, double4 V3) { \
50 return fn((float4)V1, (float4)V2, (float4)V3); \
53#define _DXC_COMPAT_UNARY_INTEGER_OVERLOADS(fn) \
54 constexpr float fn(int V) { return fn((float)V); } \
55 constexpr float2 fn(int2 V) { return fn((float2)V); } \
56 constexpr float3 fn(int3 V) { return fn((float3)V); } \
57 constexpr float4 fn(int4 V) { return fn((float4)V); } \
58 constexpr float fn(uint V) { return fn((float)V); } \
59 constexpr float2 fn(uint2 V) { return fn((float2)V); } \
60 constexpr float3 fn(uint3 V) { return fn((float3)V); } \
61 constexpr float4 fn(uint4 V) { return fn((float4)V); } \
62 constexpr float fn(int64_t V) { return fn((float)V); } \
63 constexpr float2 fn(int64_t2 V) { return fn((float2)V); } \
64 constexpr float3 fn(int64_t3 V) { return fn((float3)V); } \
65 constexpr float4 fn(int64_t4 V) { return fn((float4)V); } \
66 constexpr float fn(uint64_t V) { return fn((float)V); } \
67 constexpr float2 fn(uint64_t2 V) { return fn((float2)V); } \
68 constexpr float3 fn(uint64_t3 V) { return fn((float3)V); } \
69 constexpr float4 fn(uint64_t4 V) { return fn((float4)V); }
71#define _DXC_COMPAT_BINARY_INTEGER_OVERLOADS(fn) \
72 constexpr float fn(int V1, int V2) { return fn((float)V1, (float)V2); } \
73 constexpr float2 fn(int2 V1, int2 V2) { return fn((float2)V1, (float2)V2); } \
74 constexpr float3 fn(int3 V1, int3 V2) { return fn((float3)V1, (float3)V2); } \
75 constexpr float4 fn(int4 V1, int4 V2) { return fn((float4)V1, (float4)V2); } \
76 constexpr float fn(uint V1, uint V2) { return fn((float)V1, (float)V2); } \
77 constexpr float2 fn(uint2 V1, uint2 V2) { \
78 return fn((float2)V1, (float2)V2); \
80 constexpr float3 fn(uint3 V1, uint3 V2) { \
81 return fn((float3)V1, (float3)V2); \
83 constexpr float4 fn(uint4 V1, uint4 V2) { \
84 return fn((float4)V1, (float4)V2); \
86 constexpr float fn(int64_t V1, int64_t V2) { \
87 return fn((float)V1, (float)V2); \
89 constexpr float2 fn(int64_t2 V1, int64_t2 V2) { \
90 return fn((float2)V1, (float2)V2); \
92 constexpr float3 fn(int64_t3 V1, int64_t3 V2) { \
93 return fn((float3)V1, (float3)V2); \
95 constexpr float4 fn(int64_t4 V1, int64_t4 V2) { \
96 return fn((float4)V1, (float4)V2); \
98 constexpr float fn(uint64_t V1, uint64_t V2) { \
99 return fn((float)V1, (float)V2); \
101 constexpr float2 fn(uint64_t2 V1, uint64_t2 V2) { \
102 return fn((float2)V1, (float2)V2); \
104 constexpr float3 fn(uint64_t3 V1, uint64_t3 V2) { \
105 return fn((float3)V1, (float3)V2); \
107 constexpr float4 fn(uint64_t4 V1, uint64_t4 V2) { \
108 return fn((float4)V1, (float4)V2); \
111#define _DXC_COMPAT_TERNARY_INTEGER_OVERLOADS(fn) \
112 constexpr float fn(int V1, int V2, int V3) { \
113 return fn((float)V1, (float)V2, (float)V3); \
115 constexpr float2 fn(int2 V1, int2 V2, int2 V3) { \
116 return fn((float2)V1, (float2)V2, (float2)V3); \
118 constexpr float3 fn(int3 V1, int3 V2, int3 V3) { \
119 return fn((float3)V1, (float3)V2, (float3)V3); \
121 constexpr float4 fn(int4 V1, int4 V2, int4 V3) { \
122 return fn((float4)V1, (float4)V2, (float4)V3); \
124 constexpr float fn(uint V1, uint V2, uint V3) { \
125 return fn((float)V1, (float)V2, (float)V3); \
127 constexpr float2 fn(uint2 V1, uint2 V2, uint2 V3) { \
128 return fn((float2)V1, (float2)V2, (float2)V3); \
130 constexpr float3 fn(uint3 V1, uint3 V2, uint3 V3) { \
131 return fn((float3)V1, (float3)V2, (float3)V3); \
133 constexpr float4 fn(uint4 V1, uint4 V2, uint4 V3) { \
134 return fn((float4)V1, (float4)V2, (float4)V3); \
136 constexpr float fn(int64_t V1, int64_t V2, int64_t V3) { \
137 return fn((float)V1, (float)V2, (float)V3); \
139 constexpr float2 fn(int64_t2 V1, int64_t2 V2, int64_t2 V3) { \
140 return fn((float2)V1, (float2)V2, (float2)V3); \
142 constexpr float3 fn(int64_t3 V1, int64_t3 V2, int64_t3 V3) { \
143 return fn((float3)V1, (float3)V2, (float3)V3); \
145 constexpr float4 fn(int64_t4 V1, int64_t4 V2, int64_t4 V3) { \
146 return fn((float4)V1, (float4)V2, (float4)V3); \
148 constexpr float fn(uint64_t V1, uint64_t V2, uint64_t V3) { \
149 return fn((float)V1, (float)V2, (float)V3); \
151 constexpr float2 fn(uint64_t2 V1, uint64_t2 V2, uint64_t2 V3) { \
152 return fn((float2)V1, (float2)V2, (float2)V3); \
154 constexpr float3 fn(uint64_t3 V1, uint64_t3 V2, uint64_t3 V3) { \
155 return fn((float3)V1, (float3)V2, (float3)V3); \
157 constexpr float4 fn(uint64_t4 V1, uint64_t4 V2, uint64_t4 V3) { \
158 return fn((float4)V1, (float4)V2, (float4)V3); \
200template <
typename T, u
int N>
202clamp(vector<T, N> p0, vector<T, N> p1, T p2) {
203 return clamp(p0, p1, (vector<T, N>)p2);
206template <
typename T, u
int N>
208clamp(vector<T, N> p0, T p1, vector<T, N> p2) {
209 return clamp(p0, (vector<T, N>)p1, p2);
212template <
typename T, u
int N>
215 return clamp(p0, (vector<T, N>)p1, (vector<T, N>)p2);
280template <
typename T, u
int N>
282lerp(vector<T, N> x, vector<T, N> y, T
s) {
283 return lerp(x, y, (vector<T, N>)
s);
314template <
typename T, u
int N>
316max(vector<T, N> p0, T p1) {
317 return max(p0, (vector<T, N>)p1);
320template <
typename T, u
int N>
322max(T p0, vector<T, N> p1) {
323 return max((vector<T, N>)p0, p1);
330template <
typename T, u
int N>
332min(vector<T, N> p0, T p1) {
333 return min(p0, (vector<T, N>)p1);
336template <
typename T, u
int N>
338min(T p0, vector<T, N> p1) {
339 return min((vector<T, N>)p0, p1);
__DEVICE__ double rsqrt(double __a)
__device__ __2f16 float __ockl_bool s
#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_UNARY_INTEGER_OVERLOADS(fn)
#define _DXC_COMPAT_BINARY_INTEGER_OVERLOADS(fn)
typename enable_if< B, T >::Type enable_if_t
vector< float, 4 > float4
half lerp(half, half, half)
half clamp(half, half, half)
vector< double, 3 > double3
vector< float, 2 > float2
vector< float, 3 > float3
vector< double, 4 > double4
vector< double, 2 > double2
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.
float __ovld __cnfn normalize(float)
Returns a vector in the same direction as p but with a length of 1.