diff options
| author | ArielG-NV <159081215+ArielG-NV@users.noreply.github.com> | 2024-04-19 23:18:40 -0400 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-04-19 20:18:40 -0700 |
| commit | f9bcad35562c1f08638e6d3eb397d370d7d2f8f8 (patch) | |
| tree | 4e2a993689209bd5b597263922af03cb87d07c3d /source/slang/glsl.meta.slang | |
| parent | 2da28c50d9c3699692eccde4b86d0b8d2323e55c (diff) | |
Initial pass to add capability declarations to stdlib intrinsics. (#3912)
Diffstat (limited to 'source/slang/glsl.meta.slang')
| -rw-r--r-- | source/slang/glsl.meta.slang | 1675 |
1 files changed, 1040 insertions, 635 deletions
diff --git a/source/slang/glsl.meta.slang b/source/slang/glsl.meta.slang index e2c1d25bd..d04dfe8b9 100644 --- a/source/slang/glsl.meta.slang +++ b/source/slang/glsl.meta.slang @@ -9,8 +9,6 @@ #define VECTOR_MAP_TRINARY(TYPE, COUNT, FUNC, A, B, C) \ vector<TYPE,COUNT> result; for(int i = 0; i < COUNT; ++i) { result[i] = FUNC(A[i], B[i], C[i]); } return result -#define REQUIRE_KHRONOS [require(glsl)] [require(spirv)] - // // OpenGL 4.60 spec // @@ -107,11 +105,11 @@ public in uvec3 gl_WorkGroupID : SV_GroupID; public in uvec3 gl_LocalInvocationIndex : SV_GroupIndex; public in uvec3 gl_LocalInvocationID : SV_GroupThreadID; -[require(glsl)] -[require(spirv)] public property uint3 gl_NumWorkGroups { - get { + [require(glsl_spirv, GLSL_430_SPIRV_1_0_compute)] + get + { __target_switch { case glsl: @@ -128,6 +126,7 @@ public property uint3 gl_NumWorkGroups { public property uint3 gl_WorkGroupSize { [__unsafeForceInlineEarly] + [require(glsl_spirv, GLSL_430_SPIRV_1_0_compute)] get { return WorkgroupSize(); @@ -153,6 +152,7 @@ public in int gl_ViewportIndex : SV_ViewportArrayIndex; [OverloadRank(15)] [ForceInline] +[require(cpp_cuda_glsl_hlsl_spirv, sm_2_0_GLSL_140)] public matrix<float, N, N> operator*<let N:int>(matrix<float, N, N> m1, matrix<float, N, N> m2) { return mul(m2, m1); @@ -160,6 +160,7 @@ public matrix<float, N, N> operator*<let N:int>(matrix<float, N, N> m1, matrix<f [OverloadRank(15)] [ForceInline] +[require(cpp_cuda_glsl_hlsl_spirv, sm_2_0_GLSL_140)] public matrix<half, N, N> operator*<let N:int>(matrix<half, N, N> m1, matrix<half, N, N> m2) { return mul(m2, m1); @@ -167,6 +168,7 @@ public matrix<half, N, N> operator*<let N:int>(matrix<half, N, N> m1, matrix<hal [OverloadRank(15)] [ForceInline] +[require(cpp_cuda_glsl_hlsl_spirv, sm_2_0_GLSL_140)] public matrix<double, N, N> operator*<let N:int>(matrix<double, N, N> m1, matrix<double, N, N> m2) { return mul(m2, m1); @@ -174,6 +176,7 @@ public matrix<double, N, N> operator*<let N:int>(matrix<double, N, N> m1, matrix [ForceInline] [OverloadRank(15)] +[require(cpp_cuda_glsl_hlsl_spirv, sm_2_0_GLSL_140)] public matrix<T, R, L> operator*<T:__BuiltinFloatingPointType, let L : int, let C : int, let R : int>(matrix<T, C, L> m1, matrix<T, R, C> m2) { return mul(m2, m1); @@ -181,6 +184,7 @@ public matrix<T, R, L> operator*<T:__BuiltinFloatingPointType, let L : int, let [ForceInline] [OverloadRank(15)] +[require(cpp_cuda_glsl_hlsl_spirv, sm_2_0_GLSL_140)] public vector<T, R> operator*<T:__BuiltinFloatingPointType, let C : int, let R : int>(vector<T, C> v, matrix<T, R, C> m) { return mul(m, v); @@ -188,6 +192,7 @@ public vector<T, R> operator*<T:__BuiltinFloatingPointType, let C : int, let R : [ForceInline] [OverloadRank(15)] +[require(cpp_cuda_glsl_hlsl_spirv, sm_2_0_GLSL_140)] public vector<T, C> operator*<T:__BuiltinFloatingPointType, let C : int, let R : int>(matrix<T, R, C> m, vector<T, R> v) { return mul(v, m); @@ -224,6 +229,7 @@ public extension vector<T, 3> [ForceInline] [OverloadRank(15)] +[require(cpp_cuda_glsl_hlsl_spirv)] public bool operator==<T:__BuiltinArithmeticType, let N:int>(vector<T, N> left, vector<T, N> right) { return all(equal(left, right)); @@ -231,6 +237,7 @@ public bool operator==<T:__BuiltinArithmeticType, let N:int>(vector<T, N> left, [ForceInline] [OverloadRank(15)] +[require(cpp_cuda_glsl_hlsl_spirv)] public bool operator!=<T:__BuiltinArithmeticType, let N:int>(vector<T, N> left, vector<T, N> right) { return any(notEqual(left, right)); @@ -238,6 +245,7 @@ public bool operator!=<T:__BuiltinArithmeticType, let N:int>(vector<T, N> left, [ForceInline] [OverloadRank(14)] +[require(cpp_cuda_glsl_hlsl_spirv)] public bool operator==<T:__BuiltinFloatingPointType, let N:int>(vector<T, N> left, vector<T, N> right) { return all(equal(left, right)); @@ -245,6 +253,7 @@ public bool operator==<T:__BuiltinFloatingPointType, let N:int>(vector<T, N> lef [ForceInline] [OverloadRank(14)] +[require(cpp_cuda_glsl_hlsl_spirv)] public bool operator!=<T:__BuiltinFloatingPointType, let N:int>(vector<T, N> left, vector<T, N> right) { return any(notEqual(left, right)); @@ -252,6 +261,7 @@ public bool operator!=<T:__BuiltinFloatingPointType, let N:int>(vector<T, N> lef [ForceInline] [OverloadRank(14)] +[require(cpp_cuda_glsl_hlsl_spirv)] public bool operator==<T:__BuiltinLogicalType, let N:int>(vector<T, N> left, vector<T, N> right) { return all(equal(left, right)); @@ -259,6 +269,7 @@ public bool operator==<T:__BuiltinLogicalType, let N:int>(vector<T, N> left, vec [ForceInline] [OverloadRank(14)] +[require(cpp_cuda_glsl_hlsl_spirv)] public bool operator!=<T:__BuiltinLogicalType, let N:int>(vector<T, N> left, vector<T, N> right) { return any(notEqual(left, right)); @@ -271,6 +282,7 @@ for (auto type : kBaseTypes) { }}}} [ForceInline] [OverloadRank(15)] +[require(cpp_cuda_glsl_hlsl_spirv)] public bool operator==<let N:int>(vector<$(typeName), N> left, vector<$(typeName), N> right) { return all(equal(left, right)); @@ -278,6 +290,7 @@ public bool operator==<let N:int>(vector<$(typeName), N> left, vector<$(typeName [ForceInline] [OverloadRank(15)] +[require(cpp_cuda_glsl_hlsl_spirv)] public bool operator!=<let N:int>(vector<$(typeName), N> left, vector<$(typeName), N> right) { return any(notEqual(left, right)); @@ -293,6 +306,7 @@ ${{{{ __generic<T : __BuiltinFloatingPointType> [__readNone] [ForceInline] +[require(cpp_cuda_glsl_hlsl_spirv, sm_2_0_GLSL_140)] public T atan(T y, T x) { return atan2(y, x); @@ -301,6 +315,7 @@ public T atan(T y, T x) __generic<T : __BuiltinFloatingPointType, let N:int> [__readNone] [ForceInline] +[require(cpp_cuda_glsl_hlsl_spirv, sm_2_0_GLSL_140)] public vector<T,N> atan(vector<T,N> y, vector<T,N> x) { return atan2(y, x); @@ -311,6 +326,7 @@ __target_intrinsic(cuda, "$P_asinh($0)") __target_intrinsic(cpp, "$P_asinh($0)") [__readNone] [ForceInline] +[require(cpp_cuda_glsl_hlsl_spirv, GLSL_130)] public T asinh(T x) { return log(x + sqrt(x * x + T(1))); @@ -319,6 +335,7 @@ public T asinh(T x) __generic<T : __BuiltinFloatingPointType, let N:int> [__readNone] [ForceInline] +[require(cpp_cuda_glsl_hlsl_spirv, GLSL_130)] public vector<T,N> asinh(vector<T,N> x) { VECTOR_MAP_UNARY(T, N, asinh, x); @@ -329,6 +346,7 @@ __target_intrinsic(cuda, "$P_acosh($0)") __target_intrinsic(cpp, "$P_acosh($0)") [__readNone] [ForceInline] +[require(cpp_cuda_glsl_hlsl_spirv, GLSL_130)] public T acosh(T x) { return log(x + sqrt( x * x - T(1))); @@ -337,6 +355,7 @@ public T acosh(T x) __generic<T : __BuiltinFloatingPointType, let N:int> [__readNone] [ForceInline] +[require(cpp_cuda_glsl_hlsl_spirv, GLSL_130)] public vector<T,N> acosh(vector<T,N> x) { VECTOR_MAP_UNARY(T, N, acosh, x); @@ -347,6 +366,7 @@ __target_intrinsic(cuda, "$P_atanh($0)") __target_intrinsic(cpp, "$P_atanh($0)") [__readNone] [ForceInline] +[require(cpp_cuda_glsl_hlsl_spirv, GLSL_130)] public T atanh(T x) { return T(0.5) * log((T(1) + x) / (T(1) - x)); @@ -355,6 +375,7 @@ public T atanh(T x) __generic<T : __BuiltinFloatingPointType, let N:int> [__readNone] [ForceInline] +[require(cpp_cuda_glsl_hlsl_spirv, sm_2_0_GLSL_140)] public vector<T,N> atanh(vector<T,N> x) { VECTOR_MAP_UNARY(T, N, atanh, x); @@ -367,6 +388,7 @@ public vector<T,N> atanh(vector<T,N> x) __generic<T : __BuiltinFloatingPointType> [__readNone] [ForceInline] +[require(cpp_cuda_glsl_hlsl_spirv, GLSL_130)] public T inversesqrt(T x) { return rsqrt(x); @@ -375,6 +397,7 @@ public T inversesqrt(T x) __generic<T : __BuiltinFloatingPointType, let N:int> [__readNone] [ForceInline] +[require(cpp_cuda_glsl_hlsl_spirv, GLSL_130)] public vector<T, N> inversesqrt(vector<T, N> x) { return rsqrt(x); @@ -387,6 +410,7 @@ public vector<T, N> inversesqrt(vector<T, N> x) __generic<T : __BuiltinFloatingPointType> [__readNone] [ForceInline] +[require(cpp_cuda_glsl_hlsl_spirv, GLSL_130)] public T roundEven(T x) { T i; @@ -404,6 +428,7 @@ public T roundEven(T x) __generic<T : __BuiltinFloatingPointType, let N:int> [__readNone] [ForceInline] +[require(cpp_cuda_glsl_hlsl_spirv, GLSL_130)] public vector<T,N> roundEven(vector<T,N> x) { VECTOR_MAP_UNARY(T, N, roundEven, x); @@ -412,6 +437,7 @@ public vector<T,N> roundEven(vector<T,N> x) __generic<T : __BuiltinFloatingPointType> [__readNone] [ForceInline] +[require(cpp_cuda_glsl_hlsl_spirv, sm_2_0_GLSL_140)] public T fract(T x) { return frac(x); @@ -420,6 +446,7 @@ public T fract(T x) __generic<T : __BuiltinFloatingPointType, let N:int> [__readNone] [ForceInline] +[require(cpp_cuda_glsl_hlsl_spirv, sm_2_0_GLSL_140)] public vector<T, N> fract(vector<T, N> x) { return frac(x); @@ -428,6 +455,7 @@ public vector<T, N> fract(vector<T, N> x) __generic<T : __BuiltinFloatingPointType> [__readNone] [ForceInline] +[require(cpp_cuda_glsl_hlsl_spirv, sm_2_0_GLSL_140)] public T mod(T x, T y) { return fmod(x, y); @@ -436,6 +464,7 @@ public T mod(T x, T y) __generic<T : __BuiltinFloatingPointType, let N:int> [__readNone] [ForceInline] +[require(cpp_cuda_glsl_hlsl_spirv, sm_2_0_GLSL_140)] public vector<T, N> mod(vector<T, N> x, T y) { return fmod(x, vector<T, N>(y)); @@ -444,6 +473,7 @@ public vector<T, N> mod(vector<T, N> x, T y) __generic<T : __BuiltinFloatingPointType, let N:int> [__readNone] [ForceInline] +[require(cpp_cuda_glsl_hlsl_spirv, sm_2_0_GLSL_140)] public vector<T, N> mod(vector<T, N> x, vector<T, N> y) { return fmod(x, y); @@ -452,6 +482,7 @@ public vector<T, N> mod(vector<T, N> x, vector<T, N> y) __generic<T : __BuiltinFloatingPointType> [__readNone] [ForceInline] +[require(cpp_cuda_glsl_hlsl_spirv, sm_2_0_GLSL_140)] public T mix(T x, T y, T a) { return lerp(x, y, a); @@ -460,6 +491,7 @@ public T mix(T x, T y, T a) __generic<T : __BuiltinFloatingPointType, let N:int> [__readNone] [ForceInline] +[require(cpp_cuda_glsl_hlsl_spirv, sm_2_0_GLSL_140)] public vector<T, N> mix(vector<T, N> x, vector<T, N> y, T a) { return lerp(x, y, vector<T, N>(a)); @@ -468,6 +500,7 @@ public vector<T, N> mix(vector<T, N> x, vector<T, N> y, T a) __generic<T : __BuiltinFloatingPointType, let N:int> [__readNone] [ForceInline] +[require(cpp_cuda_glsl_hlsl_spirv, sm_2_0_GLSL_140)] public vector<T, N> mix(vector<T, N> x, vector<T, N> y, vector<T, N> a) { return lerp(x, y, a); @@ -476,6 +509,7 @@ public vector<T, N> mix(vector<T, N> x, vector<T, N> y, vector<T, N> a) __generic<T> [__readNone] [ForceInline] +[require(cpp_cuda_glsl_hlsl_spirv, sm_2_0_GLSL_140)] public T mix(T x, T y, bool a) { return (a ? y : x); @@ -484,6 +518,7 @@ public T mix(T x, T y, bool a) __generic<T, let N:int> [__readNone] [ForceInline] +[require(cpp_cuda_glsl_hlsl_spirv, sm_2_0_GLSL_140)] public vector<T, N> mix(vector<T, N> x, vector<T, N> y, vector<bool, N> a) { vector<T, N> result; @@ -496,6 +531,7 @@ public vector<T, N> mix(vector<T, N> x, vector<T, N> y, vector<bool, N> a) [__readNone] [ForceInline] +[require(cpp_cuda_glsl_hlsl_spirv, shader5_sm_4_0)] public int floatBitsToInt(highp float x) { return asint(x); @@ -504,6 +540,7 @@ public int floatBitsToInt(highp float x) __generic<let N:int> [__readNone] [ForceInline] +[require(cpp_cuda_glsl_hlsl_spirv, shader5_sm_4_0)] public vector<int, N> floatBitsToInt(highp vector<float, N> x) { return asint(x); @@ -511,6 +548,7 @@ public vector<int, N> floatBitsToInt(highp vector<float, N> x) [__readNone] [ForceInline] +[require(cpp_cuda_glsl_hlsl_spirv, shader5_sm_4_0)] public uint floatBitsToUint(highp float x) { return asuint(x); @@ -519,6 +557,7 @@ public uint floatBitsToUint(highp float x) __generic<let N:int> [__readNone] [ForceInline] +[require(cpp_cuda_glsl_hlsl_spirv, shader5_sm_4_0)] public vector<uint, N> floatBitsToUint(highp vector<float, N> x) { return asuint(x); @@ -526,6 +565,7 @@ public vector<uint, N> floatBitsToUint(highp vector<float, N> x) [__readNone] [ForceInline] +[require(cpp_cuda_glsl_hlsl_spirv, shader5_sm_4_0)] public float intBitsToFloat(highp int x) { return asfloat(x); @@ -534,6 +574,7 @@ public float intBitsToFloat(highp int x) __generic<let N:int> [__readNone] [ForceInline] +[require(cpp_cuda_glsl_hlsl_spirv, shader5_sm_4_0)] public vector<float, N> intBitsToFloat(highp vector<int, N> x) { return asfloat(x); @@ -541,6 +582,7 @@ public vector<float, N> intBitsToFloat(highp vector<int, N> x) [__readNone] [ForceInline] +[require(cpp_cuda_glsl_hlsl_spirv, shader5_sm_4_0)] public float uintBitsToFloat(highp uint x) { return asfloat(x); @@ -549,6 +591,7 @@ public float uintBitsToFloat(highp uint x) __generic<let N:int> [__readNone] [ForceInline] +[require(cpp_cuda_glsl_hlsl_spirv, shader5_sm_4_0)] public vector<float, N> uintBitsToFloat(highp vector<uint, N> x) { return asfloat(x); @@ -616,6 +659,7 @@ float unpackSnorm1x8(uint p) [__readNone] [ForceInline] +[require(cpp_cuda_glsl_hlsl_spirv, shader5_sm_4_0)] uint float2half(float f) { uint u = floatBitsToUint(f); @@ -632,6 +676,7 @@ uint float2half(float f) __target_intrinsic(glsl) [__readNone] [ForceInline] +[require(cpp_cuda_glsl_hlsl_spirv, shader5_sm_4_0)] public uint packUnorm2x16(vec2 v) { return packUnorm1x16(v.x) | (packUnorm1x16(v.y) << uint(16)); @@ -640,6 +685,7 @@ public uint packUnorm2x16(vec2 v) __target_intrinsic(glsl) [__readNone] [ForceInline] +[require(cpp_cuda_glsl_hlsl_spirv, shader5_sm_4_0)] public uint packSnorm2x16(vec2 v) { return packSnorm1x16(v.x) | (packSnorm1x16(v.y) << uint(16)); @@ -648,6 +694,7 @@ public uint packSnorm2x16(vec2 v) __target_intrinsic(glsl) [__readNone] [ForceInline] +[require(cpp_cuda_glsl_hlsl_spirv, shader5_sm_4_0)] public uint packUnorm4x8(vec4 v) { return packUnorm1x8(v.x) | (packUnorm1x8(v.y) << uint(8)) | (packUnorm1x8(v.z) << uint(16)) | (packUnorm1x8(v.w) << uint(24)); @@ -656,6 +703,7 @@ public uint packUnorm4x8(vec4 v) __target_intrinsic(glsl) [__readNone] [ForceInline] +[require(cpp_cuda_glsl_hlsl_spirv, shader5_sm_4_0)] public uint packSnorm4x8(vec4 v) { return packSnorm1x8(v.x) | (packSnorm1x8(v.y) << uint(8)) | (packSnorm1x8(v.z) << uint(16)) | (packSnorm1x8(v.w) << uint(24)); @@ -664,6 +712,7 @@ public uint packSnorm4x8(vec4 v) __target_intrinsic(glsl) [__readNone] [ForceInline] +[require(cpp_cuda_glsl_hlsl_spirv, shader5_sm_4_0)] public vec2 unpackUnorm2x16(uint p) { return vec2(unpackUnorm1x16(p & uint(0xffff)), unpackUnorm1x16(p >> uint(16))); @@ -672,6 +721,7 @@ public vec2 unpackUnorm2x16(uint p) __target_intrinsic(glsl) [__readNone] [ForceInline] +[require(cpp_cuda_glsl_hlsl_spirv, shader5_sm_4_0)] public vec2 unpackSnorm2x16(uint p) { return vec2(unpackSnorm1x16(p & uint(0xffff)), unpackSnorm1x16(p >> uint(16))); @@ -680,6 +730,7 @@ public vec2 unpackSnorm2x16(uint p) __target_intrinsic(glsl) [__readNone] [ForceInline] +[require(cpp_cuda_glsl_hlsl_spirv, shader5_sm_4_0)] public vec4 unpackUnorm4x8(highp uint p) { return vec4(unpackUnorm1x8(p & uint(0xffff)), unpackUnorm1x8(p >> uint(8)), unpackUnorm1x8(p >> uint(16)), unpackUnorm1x8(p >> uint(24))); @@ -688,6 +739,7 @@ public vec4 unpackUnorm4x8(highp uint p) __target_intrinsic(glsl) [__readNone] [ForceInline] +[require(cpp_cuda_glsl_hlsl_spirv, shader5_sm_4_0)] public vec4 unpackSnorm4x8(highp uint p) { return vec4(unpackSnorm1x8(p & uint(0xffff)), unpackSnorm1x8(p >> uint(8)), unpackSnorm1x8(p >> uint(16)), unpackSnorm1x8(p >> uint(24))); @@ -696,6 +748,7 @@ public vec4 unpackSnorm4x8(highp uint p) __target_intrinsic(glsl) [__readNone] [ForceInline] +[require(cpp_cuda_glsl_hlsl_spirv, shader5_sm_4_0)] public uint packHalf2x16(vec2 v) { return float2half(v.x) | (float2half(v.y) << uint(16)); @@ -704,6 +757,7 @@ public uint packHalf2x16(vec2 v) __target_intrinsic(glsl) [__readNone] [ForceInline] +[require(cpp_cuda_glsl_hlsl_spirv, shader5_sm_4_0)] public float half2float(uint h) { uint s = ((h & uint(0x8000)) << uint(16)); @@ -719,6 +773,7 @@ public float half2float(uint h) __target_intrinsic(glsl) [__readNone] [ForceInline] +[require(cpp_cuda_glsl_hlsl_spirv, shader5_sm_4_0)] public vec2 unpackHalf2x16(uint p) { return vec2(half2float(p & uint(0xffff)), half2float(p >> uint(16))); @@ -727,6 +782,7 @@ public vec2 unpackHalf2x16(uint p) __target_intrinsic(glsl) [__readNone] [ForceInline] +[require(cpp_cuda_glsl_hlsl_spirv, shader5_sm_4_0)] public double packDouble2x32(uvec2 v) { // TODO: there is no "asdouble()" @@ -737,6 +793,7 @@ public double packDouble2x32(uvec2 v) __target_intrinsic(glsl) [__readNone] [ForceInline] +[require(cpp_cuda_glsl_hlsl_spirv, shader5_sm_4_0)] public uvec2 unpackDouble2x32(double v) { // TODO: there is no "asuint64()" @@ -751,6 +808,7 @@ public uvec2 unpackDouble2x32(double v) __generic<T : __BuiltinFloatingPointType> [__readNone] [ForceInline] +[require(cpp_cuda_glsl_hlsl_spirv, GLSL_400)] public T faceforward(T n, T i, T ng) { return dot(ng, i) < T(0.0f) ? n : -n; @@ -782,6 +840,7 @@ public matrix<T, C, R> outerProduct(vector<T, C> c, vector<T, R> r) __generic<T : __BuiltinFloatingPointType, let N : int> __target_intrinsic(hlsl) __target_intrinsic(glsl) +[require(cpp_cuda_glsl_hlsl_spirv, GLSL_400)] matrix<T,N,N> inverse(matrix<T,N,N> m); // @@ -987,27 +1046,35 @@ public vector<uint,N> bitfieldReverse(highp vector<uint,N> value) VECTOR_MAP_UNARY(int, N, bitfieldReverse, value); } -[__readNone] [ForceInline] REQUIRE_KHRONOS +[__readNone] +[ForceInline] +[require(cpp_cuda_glsl_hlsl_spirv, shader5_sm_5_0)] public uint bitCount(uint value) { return countbits(value); } __generic<let N:int> -[__readNone] [ForceInline] REQUIRE_KHRONOS +[__readNone] +[ForceInline] +[require(cpp_cuda_glsl_hlsl_spirv, shader5_sm_5_0)] public vector<uint,N> bitCount(vector<uint,N> value) { VECTOR_MAP_UNARY(uint, N, countbits, value); } -[__readNone] [ForceInline] REQUIRE_KHRONOS +[__readNone] +[ForceInline] +[require(cpp_cuda_glsl_hlsl_spirv, shader5_sm_5_0)] public int bitCount(int value) { return countbits(uint(value)); } __generic<let N:int> -[__readNone] [ForceInline] REQUIRE_KHRONOS +[__readNone] +[ForceInline] +[require(cpp_cuda_glsl_hlsl_spirv, shader5_sm_5_0)] public vector<int,N> bitCount(vector<int,N> value) { VECTOR_MAP_UNARY(int, N, countbits, value); @@ -1015,6 +1082,7 @@ public vector<int,N> bitCount(vector<int,N> value) [__readNone] [ForceInline] +[require(cpp_cuda_glsl_hlsl_spirv, shader5_sm_5_0)] public int findLSB(int v) { return firstbitlow(v); @@ -1023,6 +1091,7 @@ public int findLSB(int v) __generic<let N:int> [__readNone] [ForceInline] +[require(cpp_cuda_glsl_hlsl_spirv, shader5_sm_5_0)] public vector<int,N> findLSB(vector<int,N> value) { return firstbitlow(value); @@ -1030,6 +1099,7 @@ public vector<int,N> findLSB(vector<int,N> value) [__readNone] [ForceInline] +[require(cpp_cuda_glsl_hlsl_spirv, shader5_sm_5_0)] public uint findLSB(uint v) { return firstbitlow(v); @@ -1038,6 +1108,7 @@ public uint findLSB(uint v) __generic<let N:int> [__readNone] [ForceInline] +[require(cpp_cuda_glsl_hlsl_spirv, shader5_sm_5_0)] public vector<uint,N> findLSB(vector<uint,N> value) { return firstbitlow(value); @@ -1045,6 +1116,7 @@ public vector<uint,N> findLSB(vector<uint,N> value) [__readNone] [ForceInline] +[require(cpp_cuda_glsl_hlsl_spirv, shader5_sm_5_0)] public int findMSB(int value) { return firstbithigh(value); @@ -1053,6 +1125,7 @@ public int findMSB(int value) __generic<let N:int> [__readNone] [ForceInline] +[require(cpp_cuda_glsl_hlsl_spirv, shader5_sm_5_0)] public vector<int,N> findMSB(vector<int,N> value) { return firstbithigh(value); @@ -1060,6 +1133,7 @@ public vector<int,N> findMSB(vector<int,N> value) [__readNone] [ForceInline] +[require(cpp_cuda_glsl_hlsl_spirv, shader5_sm_5_0)] public uint findMSB(uint value) { return firstbithigh(value); @@ -1068,6 +1142,7 @@ public uint findMSB(uint value) __generic<let N:int> [__readNone] [ForceInline] +[require(cpp_cuda_glsl_hlsl_spirv, shader5_sm_5_0)] public vector<uint,N> findMSB(vector<uint,N> value) { return firstbithigh(value); @@ -1243,6 +1318,7 @@ public typealias usamplerBuffer = SamplerBuffer<uint4>; __generic<T:__BuiltinArithmeticType, let N:int> [ForceInline] +[require(glsl_hlsl_spirv, texture_size)] public int textureSize(Sampler1D<vector<T,N>> sampler, int lod) { int result; @@ -1253,6 +1329,7 @@ public int textureSize(Sampler1D<vector<T,N>> sampler, int lod) __generic<T:__BuiltinArithmeticType, let N:int> [ForceInline] +[require(glsl_hlsl_spirv, texture_size)] public ivec2 textureSize(Sampler2D<vector<T,N>> sampler, int lod) { vector<int,2> result; @@ -1263,6 +1340,7 @@ public ivec2 textureSize(Sampler2D<vector<T,N>> sampler, int lod) __generic<T:__BuiltinArithmeticType, let N:int> [ForceInline] +[require(glsl_hlsl_spirv, texture_size)] public ivec3 textureSize(Sampler3D<vector<T,N>> sampler, int lod) { vector<int,3> result; @@ -1273,6 +1351,7 @@ public ivec3 textureSize(Sampler3D<vector<T,N>> sampler, int lod) __generic<T:__BuiltinArithmeticType, let N:int> [ForceInline] +[require(glsl_hlsl_spirv, texture_size)] public ivec2 textureSize(SamplerCube<vector<T,N>> sampler, int lod) { vector<int,2> result; @@ -1282,6 +1361,7 @@ public ivec2 textureSize(SamplerCube<vector<T,N>> sampler, int lod) } [ForceInline] +[require(glsl_hlsl_spirv, texture_size)] public int textureSize(sampler1DShadow sampler, int lod) { int result; @@ -1291,6 +1371,7 @@ public int textureSize(sampler1DShadow sampler, int lod) } [ForceInline] +[require(glsl_hlsl_spirv, texture_size)] public ivec2 textureSize(sampler2DShadow sampler, int lod) { vector<int,2> result; @@ -1300,6 +1381,7 @@ public ivec2 textureSize(sampler2DShadow sampler, int lod) } [ForceInline] +[require(glsl_hlsl_spirv, texture_size)] public ivec2 textureSize(samplerCubeShadow sampler, int lod) { vector<int,2> result; @@ -1308,6 +1390,7 @@ public ivec2 textureSize(samplerCubeShadow sampler, int lod) return result; } +[require(glsl_hlsl_spirv, texture_size)] __generic<T:__BuiltinArithmeticType, let N:int> [ForceInline] public ivec3 textureSize(SamplerCubeArray<vector<T,N>> sampler, int lod) @@ -1319,6 +1402,7 @@ public ivec3 textureSize(SamplerCubeArray<vector<T,N>> sampler, int lod) } [ForceInline] +[require(glsl_hlsl_spirv, texture_size)] public ivec3 textureSize(samplerCubeArrayShadow sampler, int lod) { vector<int,3> result; @@ -1327,6 +1411,7 @@ public ivec3 textureSize(samplerCubeArrayShadow sampler, int lod) return result; } +[require(glsl_hlsl_spirv, texture_size)] __generic<T:__BuiltinArithmeticType, let N:int> [ForceInline] public ivec2 textureSize(Sampler2DRect<vector<T,N>> sampler) @@ -1338,6 +1423,7 @@ public ivec2 textureSize(Sampler2DRect<vector<T,N>> sampler) } [ForceInline] +[require(glsl_hlsl_spirv, texture_size)] public ivec2 textureSize(sampler2DRectShadow sampler) { vector<int,2> result; @@ -1346,6 +1432,7 @@ public ivec2 textureSize(sampler2DRectShadow sampler) return result; } +[require(glsl_hlsl_spirv, texture_size)] __generic<T:__BuiltinArithmeticType, let N:int> [ForceInline] public ivec2 textureSize(Sampler1DArray<vector<T,N>> sampler, int lod) @@ -1357,6 +1444,7 @@ public ivec2 textureSize(Sampler1DArray<vector<T,N>> sampler, int lod) } [ForceInline] +[require(glsl_hlsl_spirv, texture_size)] public ivec2 textureSize(sampler1DArrayShadow sampler, int lod) { vector<int,2> result; @@ -1365,6 +1453,7 @@ public ivec2 textureSize(sampler1DArrayShadow sampler, int lod) return result; } +[require(glsl_hlsl_spirv, texture_size)] __generic<T:__BuiltinArithmeticType, let N:int> [ForceInline] public ivec3 textureSize(Sampler2DArray<vector<T,N>> sampler, int lod) @@ -1376,6 +1465,7 @@ public ivec3 textureSize(Sampler2DArray<vector<T,N>> sampler, int lod) } [ForceInline] +[require(glsl_hlsl_spirv, texture_size)] public ivec3 textureSize(sampler2DArrayShadow sampler, int lod) { vector<int,3> result; @@ -1384,6 +1474,7 @@ public ivec3 textureSize(sampler2DArrayShadow sampler, int lod) return result; } +[require(glsl_hlsl_spirv, texture_size)] __generic<T:__BuiltinArithmeticType, let N:int, let format:int> [ForceInline] public int textureSize(SamplerBuffer<vector<T,N>,format> sampler) @@ -1393,6 +1484,7 @@ public int textureSize(SamplerBuffer<vector<T,N>,format> sampler) return int(result); } +[require(glsl_hlsl_spirv, texture_size)] __generic<T:__BuiltinArithmeticType, let N:int, let sampleCount:int> [ForceInline] public ivec2 textureSize(Sampler2DMS<vector<T,N>,sampleCount> sampler) @@ -1404,6 +1496,7 @@ public ivec2 textureSize(Sampler2DMS<vector<T,N>,sampleCount> sampler) return result; } +[require(glsl_hlsl_spirv, texture_size)] __generic<T:__BuiltinArithmeticType, let N:int, let sampleCount:int> [ForceInline] public ivec3 textureSize(Sampler2DMSArray<vector<T,N>,sampleCount> sampler) @@ -1421,6 +1514,7 @@ public ivec3 textureSize(Sampler2DMSArray<vector<T,N>,sampleCount> sampler) __generic<T:IFloat, let isArray:int, let sampleCount:int, let isShadow:int, let format:int> [ForceInline] +[require(cpp_cuda_glsl_hlsl_spirv, texture_querylod)] public vec2 textureQueryLod(__TextureImpl< T, __Shape1D, @@ -1441,6 +1535,7 @@ public vec2 textureQueryLod(__TextureImpl< __generic<T:IFloat, Shape: __ITextureShape, let isArray:int, let sampleCount:int, let isShadow:int, let format:int> [ForceInline] +[require(cpp_cuda_glsl_hlsl_spirv, texture_querylod)] public vec2 textureQueryLod(__TextureImpl<T, Shape, isArray, @@ -1464,6 +1559,7 @@ public vec2 textureQueryLod(__TextureImpl<T, __generic<T:__BuiltinArithmeticType, let N:int> [ForceInline] +[require(cpp_cuda_glsl_hlsl_spirv, texture_querylevels)] public int textureQueryLevels(Sampler1D<vector<T,N>> sampler) { int width; @@ -1474,6 +1570,7 @@ public int textureQueryLevels(Sampler1D<vector<T,N>> sampler) __generic<T:__BuiltinArithmeticType, let N:int> [ForceInline] +[require(cpp_cuda_glsl_hlsl_spirv, texture_querylevels)] public int textureQueryLevels(Sampler2D<vector<T,N>> sampler) { vector<int,2> dim; @@ -1484,6 +1581,7 @@ public int textureQueryLevels(Sampler2D<vector<T,N>> sampler) __generic<T:__BuiltinArithmeticType, let N:int> [ForceInline] +[require(cpp_cuda_glsl_hlsl_spirv, texture_querylevels)] public int textureQueryLevels(Sampler3D<vector<T,N>> sampler) { vector<int,3> dim; @@ -1494,6 +1592,7 @@ public int textureQueryLevels(Sampler3D<vector<T,N>> sampler) __generic<T:__BuiltinArithmeticType, let N:int> [ForceInline] +[require(cpp_cuda_glsl_hlsl_spirv, texture_querylevels)] public int textureQueryLevels(SamplerCube<vector<T,N>> sampler) { vector<int,2> dim; @@ -1504,6 +1603,7 @@ public int textureQueryLevels(SamplerCube<vector<T,N>> sampler) __generic<T:__BuiltinArithmeticType, let N:int> [ForceInline] +[require(cpp_cuda_glsl_hlsl_spirv, texture_querylevels)] public int textureQueryLevels(Sampler1DArray<vector<T,N>> sampler) { vector<int,2> dim; @@ -1514,6 +1614,7 @@ public int textureQueryLevels(Sampler1DArray<vector<T,N>> sampler) __generic<T:__BuiltinArithmeticType, let N:int> [ForceInline] +[require(cpp_cuda_glsl_hlsl_spirv, texture_querylevels)] public int textureQueryLevels(Sampler2DArray<vector<T,N>> sampler) { vector<int,3> dim; @@ -1524,6 +1625,7 @@ public int textureQueryLevels(Sampler2DArray<vector<T,N>> sampler) __generic<T:__BuiltinArithmeticType, let N:int> [ForceInline] +[require(cpp_cuda_glsl_hlsl_spirv, texture_querylevels)] public int textureQueryLevels(SamplerCubeArray<vector<T,N>> sampler) { vector<int,3> dim; @@ -1533,6 +1635,7 @@ public int textureQueryLevels(SamplerCubeArray<vector<T,N>> sampler) } [ForceInline] +[require(cpp_cuda_glsl_hlsl_spirv, texture_querylevels)] public int textureQueryLevels(sampler1DShadow sampler) { int dim; @@ -1542,6 +1645,7 @@ public int textureQueryLevels(sampler1DShadow sampler) } [ForceInline] +[require(cpp_cuda_glsl_hlsl_spirv, texture_querylevels)] public int textureQueryLevels(sampler2DShadow sampler) { vector<int,2> dim; @@ -1551,6 +1655,7 @@ public int textureQueryLevels(sampler2DShadow sampler) } [ForceInline] +[require(cpp_cuda_glsl_hlsl_spirv, texture_querylevels)] public int textureQueryLevels(samplerCubeShadow sampler) { vector<int,2> dim; @@ -1560,6 +1665,7 @@ public int textureQueryLevels(samplerCubeShadow sampler) } [ForceInline] +[require(cpp_cuda_glsl_hlsl_spirv, texture_querylevels)] public int textureQueryLevels(sampler1DArrayShadow sampler) { vector<int,2> dim; @@ -1569,6 +1675,7 @@ public int textureQueryLevels(sampler1DArrayShadow sampler) } [ForceInline] +[require(cpp_cuda_glsl_hlsl_spirv, texture_querylevels)] public int textureQueryLevels(sampler2DArrayShadow sampler) { vector<int,3> dim; @@ -1578,6 +1685,7 @@ public int textureQueryLevels(sampler2DArrayShadow sampler) } [ForceInline] +[require(cpp_cuda_glsl_hlsl_spirv, texture_querylevels)] public int textureQueryLevels(samplerCubeArrayShadow sampler) { vector<int,3> dim; @@ -1592,6 +1700,7 @@ public int textureQueryLevels(samplerCubeArrayShadow sampler) __generic<T:__BuiltinArithmeticType, let N:int, let sampleCount:int> [ForceInline] +[require(glsl_hlsl_spirv, image_samples)] public int textureSamples(Sampler2DMS<vector<T,N>,sampleCount> sampler) { vector<int,2> dim; @@ -1603,6 +1712,7 @@ public int textureSamples(Sampler2DMS<vector<T,N>,sampleCount> sampler) __generic<T:__BuiltinArithmeticType, let N:int, let sampleCount:int> [ForceInline] +[require(glsl_hlsl_spirv, image_samples)] public int textureSamples(Sampler2DMSArray<vector<T,N>,sampleCount> sampler) { vector<int,3> dim; @@ -1622,6 +1732,7 @@ public int textureSamples(Sampler2DMSArray<vector<T,N>,sampleCount> sampler) __generic<T:__BuiltinFloatingPointType, let N:int> [ForceInline] +[require(cpp_cuda_glsl_hlsl_spirv, texture_sm_4_1_fragment)] public vector<T,4> texture(Sampler1D<vector<T,N>> sampler, float p) { return __vectorReshape<4>(sampler.Sample(p)); @@ -1629,6 +1740,7 @@ public vector<T,4> texture(Sampler1D<vector<T,N>> sampler, float p) __generic<T:__BuiltinFloatingPointType, let N:int> [ForceInline] +[require(cpp_glsl_hlsl_spirv, texture_sm_4_1_fragment)] public vector<T,4> texture(Sampler1D<vector<T,N>> sampler, float p, constexpr float bias) { return __vectorReshape<4>(sampler.SampleBias(p, bias)); @@ -1636,6 +1748,7 @@ public vector<T,4> texture(Sampler1D<vector<T,N>> sampler, float p, constexpr fl __generic<T:__BuiltinFloatingPointType, let N:int, Shape: __ITextureShape, let isArray:int, let sampleCount:int, let format:int> [ForceInline] +[require(cpp_glsl_hlsl_spirv, texture_sm_4_1_fragment)] public vector<T,4> texture(__TextureImpl< vector<T,N>, Shape, @@ -1653,6 +1766,7 @@ public vector<T,4> texture(__TextureImpl< __generic<T:__BuiltinFloatingPointType, let N:int, Shape: __ITextureShape, let isArray:int, let sampleCount:int, let format:int> [ForceInline] +[require(cpp_glsl_hlsl_spirv, texture_sm_4_1_fragment)] public vector<T,4> texture(__TextureImpl< vector<T,N>, Shape, @@ -1669,12 +1783,14 @@ public vector<T,4> texture(__TextureImpl< } [ForceInline] +[require(glsl_hlsl_spirv, texture_shadowlod)] public float texture(sampler1DShadow sampler, vec3 p) { return sampler.SampleCmp(p.x, p.z); } [ForceInline] +[require(glsl_hlsl_spirv, texture_shadowlod)] public float texture(sampler1DShadow sampler, vec3 p, float bias) { // TODO: Need to apply bias @@ -1682,24 +1798,28 @@ public float texture(sampler1DShadow sampler, vec3 p, float bias) } [ForceInline] +[require(glsl_hlsl_spirv, texture_shadowlod)] public float texture(sampler2DShadow sampler, vec3 p) { return sampler.SampleCmp(p.xy, p.z); } [ForceInline] +[require(glsl_hlsl_spirv, texture_shadowlod)] public float texture(sampler2DShadow sampler, vec3 p, float bias) { // TODO: Need to apply bias return sampler.SampleCmp(p.xy, p.z); } +[require(glsl_hlsl_spirv, texture_shadowlod_cube)] [ForceInline] public float texture(samplerCubeShadow sampler, vec4 p) { return sampler.SampleCmp(p.xyz, p.w); } +[require(glsl_hlsl_spirv, texture_shadowlod_cube)] [ForceInline] public float texture(samplerCubeShadow sampler, vec4 p, float bias) { @@ -1708,12 +1828,14 @@ public float texture(samplerCubeShadow sampler, vec4 p, float bias) } [ForceInline] +[require(glsl_hlsl_spirv, texture_shadowlod)] public float texture(sampler1DArrayShadow sampler, vec3 p) { return sampler.SampleCmp(p.xy, p.z); } [ForceInline] +[require(glsl_hlsl_spirv, texture_shadowlod)] public float texture(sampler1DArrayShadow sampler, vec3 p, float bias) { // TODO: Need to apply bias @@ -1721,12 +1843,14 @@ public float texture(sampler1DArrayShadow sampler, vec3 p, float bias) } [ForceInline] +[require(glsl_hlsl_spirv, texture_shadowlod)] public float texture(sampler2DArrayShadow sampler, vec4 p) { return sampler.SampleCmp(p.xyz, p.w); } [ForceInline] +[require(glsl_hlsl_spirv, texture_shadowlod_cube)] public float texture(samplerCubeArrayShadow sampler, vec4 p, float compare) { return sampler.SampleCmp(p, compare); @@ -1738,6 +1862,7 @@ public float texture(samplerCubeArrayShadow sampler, vec4 p, float compare) __generic<T:__BuiltinFloatingPointType, let N:int> [ForceInline] +[require(glsl_hlsl_spirv, texture_sm_4_1_fragment)] public vector<T,4> textureProj(Sampler1D<vector<T,N>> sampler, vec2 p) { return texture(sampler, p.x / p.y); @@ -1745,6 +1870,7 @@ public vector<T,4> textureProj(Sampler1D<vector<T,N>> sampler, vec2 p) __generic<T:__BuiltinFloatingPointType, let N:int> [ForceInline] +[require(glsl_hlsl_spirv, texture_sm_4_1_fragment)] public vector<T,4> textureProj(Sampler1D<vector<T,N>> sampler, vec2 p, float bias) { return texture(sampler, p.x / p.y, bias); @@ -1752,6 +1878,7 @@ public vector<T,4> textureProj(Sampler1D<vector<T,N>> sampler, vec2 p, float bia __generic<T:__BuiltinFloatingPointType, let N:int> [ForceInline] +[require(glsl_hlsl_spirv, texture_sm_4_1_fragment)] public vector<T,4> textureProj(Sampler1D<vector<T,N>> sampler, vec4 p) { return texture(sampler, p.x / p.w); @@ -1759,6 +1886,7 @@ public vector<T,4> textureProj(Sampler1D<vector<T,N>> sampler, vec4 p) __generic<T:__BuiltinFloatingPointType, let N:int> [ForceInline] +[require(glsl_hlsl_spirv, texture_sm_4_1_fragment)] public vector<T,4> textureProj(Sampler1D<vector<T,N>> sampler, vec4 p, float bias) { return texture(sampler, p.x / p.w, bias); @@ -1766,6 +1894,7 @@ public vector<T,4> textureProj(Sampler1D<vector<T,N>> sampler, vec4 p, float bia __generic<T:__BuiltinFloatingPointType, let N:int> [ForceInline] +[require(glsl_hlsl_spirv, texture_sm_4_1_fragment)] public vector<T,4> textureProj(Sampler2D<vector<T,N>> sampler, vec3 p) { return texture(sampler, p.xy / p.z); @@ -1773,6 +1902,7 @@ public vector<T,4> textureProj(Sampler2D<vector<T,N>> sampler, vec3 p) __generic<T:__BuiltinFloatingPointType, let N:int> [ForceInline] +[require(glsl_hlsl_spirv, texture_sm_4_1_fragment)] public vector<T,4> textureProj(Sampler2D<vector<T,N>> sampler, vec3 p, float bias) { return texture(sampler, p.xy / p.z, bias); @@ -1780,6 +1910,7 @@ public vector<T,4> textureProj(Sampler2D<vector<T,N>> sampler, vec3 p, float bia __generic<T:__BuiltinFloatingPointType, let N:int> [ForceInline] +[require(glsl_hlsl_spirv, texture_sm_4_1_fragment)] public vector<T,4> textureProj(Sampler2D<vector<T,N>> sampler, vec4 p) { return texture(sampler, p.xy / p.w); @@ -1787,6 +1918,7 @@ public vector<T,4> textureProj(Sampler2D<vector<T,N>> sampler, vec4 p) __generic<T:__BuiltinFloatingPointType, let N:int> [ForceInline] +[require(glsl_hlsl_spirv, texture_sm_4_1_fragment)] public vector<T,4> textureProj(Sampler2D<vector<T,N>> sampler, vec4 p, float bias) { return texture(sampler, p.xy / p.w, bias); @@ -1794,6 +1926,7 @@ public vector<T,4> textureProj(Sampler2D<vector<T,N>> sampler, vec4 p, float bia __generic<T:__BuiltinFloatingPointType, let N:int> [ForceInline] +[require(glsl_hlsl_spirv, texture_sm_4_1_fragment)] public vector<T,4> textureProj(Sampler3D<vector<T,N>> sampler, vec4 p) { return texture(sampler, p.xyz / p.w); @@ -1801,30 +1934,35 @@ public vector<T,4> textureProj(Sampler3D<vector<T,N>> sampler, vec4 p) __generic<T:__BuiltinFloatingPointType, let N:int> [ForceInline] +[require(glsl_hlsl_spirv, texture_sm_4_1_fragment)] public vector<T,4> textureProj(Sampler3D<vector<T,N>> sampler, vec4 p, float bias) { return texture(sampler, p.xyz / p.w, bias); } [ForceInline] +[require(glsl_hlsl_spirv, texture_shadowlod)] public float textureProj(sampler1DShadow sampler, vec4 p) { return texture(sampler, p.xyz / p.w); } [ForceInline] +[require(glsl_hlsl_spirv, texture_shadowlod)] public float textureProj(sampler1DShadow sampler, vec4 p, float bias) { return texture(sampler, p.xyz / p.w, bias); } [ForceInline] +[require(glsl_hlsl_spirv, texture_shadowlod)] public float textureProj(sampler2DShadow sampler, vec4 p) { return texture(sampler, p.xyz / p.w); } [ForceInline] +[require(glsl_hlsl_spirv, texture_shadowlod)] public float textureProj(sampler2DShadow sampler, vec4 p, float bias) { return texture(sampler, p.xyz / p.w, bias); @@ -1836,6 +1974,7 @@ public float textureProj(sampler2DShadow sampler, vec4 p, float bias) __generic<T:__BuiltinFloatingPointType, let N:int> [ForceInline] +[require(cpp_cuda_glsl_hlsl_spirv, texture_sm_4_1_fragment)] public vector<T,4> textureLod(Sampler1D<vector<T,N>> sampler, float p, float lod) { return __vectorReshape<4>(sampler.SampleLevel(p, lod)); @@ -1843,6 +1982,7 @@ public vector<T,4> textureLod(Sampler1D<vector<T,N>> sampler, float p, float lod __generic<T:__BuiltinFloatingPointType, let N:int, Shape: __ITextureShape, let isArray:int, let sampleCount:int, let format:int> [ForceInline] +[require(cpp_cuda_glsl_hlsl_spirv, texture_sm_4_1_fragment)] public vector<T,4> textureLod(__TextureImpl< vector<T,N>, Shape, @@ -1859,6 +1999,7 @@ public vector<T,4> textureLod(__TextureImpl< } [ForceInline] +[require(glsl_hlsl_spirv, texture_shadowlod)] public float textureLod(sampler2DShadow sampler, vec3 p, float lod) { // TODO: Need to apply lod @@ -1866,6 +2007,7 @@ public float textureLod(sampler2DShadow sampler, vec3 p, float lod) } [ForceInline] +[require(glsl_hlsl_spirv, texture_shadowlod)] public float textureLod(sampler1DShadow sampler, vec3 p, float lod) { // TODO: Need to apply lod @@ -1873,6 +2015,7 @@ public float textureLod(sampler1DShadow sampler, vec3 p, float lod) } [ForceInline] +[require(glsl_hlsl_spirv, texture_shadowlod)] public float textureLod(sampler1DArrayShadow sampler, vec3 p, float lod) { // TODO: Need to apply lod @@ -1885,6 +2028,7 @@ public float textureLod(sampler1DArrayShadow sampler, vec3 p, float lod) __generic<T:__BuiltinFloatingPointType, let N:int> [ForceInline] +[require(cpp_glsl_hlsl_spirv, texture_sm_4_1_fragment)] public vector<T,4> textureOffset(Sampler1D<vector<T,N>> sampler, float p, constexpr int offset, float bias = 0.0) { return __vectorReshape<4>(sampler.SampleBias(p, bias, offset)); @@ -1892,6 +2036,7 @@ public vector<T,4> textureOffset(Sampler1D<vector<T,N>> sampler, float p, conste __generic<T:__BuiltinFloatingPointType, let N:int> [ForceInline] +[require(cpp_glsl_hlsl_spirv, texture_sm_4_1_fragment)] public vector<T,4> textureOffset(Sampler2D<vector<T,N>> sampler, vec2 p, constexpr ivec2 offset, float bias = 0.0) { return __vectorReshape<4>(sampler.SampleBias(p, bias, offset)); @@ -1899,12 +2044,14 @@ public vector<T,4> textureOffset(Sampler2D<vector<T,N>> sampler, vec2 p, constex __generic<T:__BuiltinFloatingPointType, let N:int> [ForceInline] +[require(cpp_glsl_hlsl_spirv, texture_sm_4_1_fragment)] public vector<T,4> textureOffset(Sampler3D<vector<T,N>> sampler, vec3 p, constexpr ivec3 offset, float bias = 0.0) { return __vectorReshape<4>(sampler.SampleBias(p, bias, offset)); } [ForceInline] +[require(glsl_hlsl_spirv, texture_shadowlod)] public float textureOffset(sampler2DShadow sampler, vec3 p, constexpr ivec2 offset, float bias = 0.0) { // TODO: Need to apply bias @@ -1912,6 +2059,7 @@ public float textureOffset(sampler2DShadow sampler, vec3 p, constexpr ivec2 offs } [ForceInline] +[require(glsl_hlsl_spirv, texture_shadowlod)] public float textureOffset(sampler1DShadow sampler, vec3 p, constexpr int offset, float bias = 0.0) { // TODO: Need to apply bias @@ -1920,6 +2068,7 @@ public float textureOffset(sampler1DShadow sampler, vec3 p, constexpr int offset __generic<T:__BuiltinFloatingPointType, let N:int> [ForceInline] +[require(cpp_glsl_hlsl_spirv, texture_sm_4_1_fragment)] public vector<T,4> textureOffset(Sampler1DArray<vector<T,N>> sampler, vec2 p, constexpr int offset, float bias = 0.0) { return __vectorReshape<4>(sampler.SampleBias(p, bias, offset)); @@ -1927,12 +2076,14 @@ public vector<T,4> textureOffset(Sampler1DArray<vector<T,N>> sampler, vec2 p, co __generic<T:__BuiltinFloatingPointType, let N:int> [ForceInline] +[require(cpp_glsl_hlsl_spirv, texture_sm_4_1_fragment)] public vector<T,4> textureOffset(Sampler2DArray<vector<T,N>> sampler, vec3 p, constexpr ivec2 offset, float bias = 0.0) { return __vectorReshape<4>(sampler.SampleBias(p, bias, offset)); } [ForceInline] +[require(glsl_hlsl_spirv, texture_shadowlod)] public float textureOffset(sampler1DArrayShadow sampler, vec3 p, constexpr int offset, float bias = 0.0) { // TODO: Need to apply bias @@ -1940,6 +2091,7 @@ public float textureOffset(sampler1DArrayShadow sampler, vec3 p, constexpr int o } [ForceInline] +[require(glsl_hlsl_spirv, texture_shadowlod)] public float textureOffset(sampler2DArrayShadow sampler, vec4 p, constexpr ivec2 offset) { return sampler.SampleCmp(p.xyz, p.w, offset); @@ -1951,6 +2103,7 @@ public float textureOffset(sampler2DArrayShadow sampler, vec4 p, constexpr ivec2 __generic<T:__BuiltinArithmeticType, let N:int> [ForceInline] +[require(cpp_glsl_hlsl_spirv, texture_sm_4_1_samplerless)] public vector<T,4> texelFetch(Sampler1D<vector<T,N>> sampler, int p, int lod) { return __vectorReshape<4>(sampler.Load(int2(p, lod))); @@ -1958,6 +2111,7 @@ public vector<T,4> texelFetch(Sampler1D<vector<T,N>> sampler, int p, int lod) __generic<T:__BuiltinArithmeticType, let N:int, Shape:__ITextureShape, let isArray:int, let sampleCount:int, let format:int> [ForceInline] +[require(cpp_glsl_hlsl_spirv, texture_sm_4_1_samplerless)] public vector<T,4> texelFetch(__TextureImpl< vector<T,N>, Shape, @@ -1975,6 +2129,7 @@ public vector<T,4> texelFetch(__TextureImpl< __generic<T:__BuiltinArithmeticType, let N:int> [ForceInline] +[require(cpp_glsl_hlsl_spirv, texture_sm_4_1_samplerless)] public vector<T,4> texelFetch(Sampler2DRect<vector<T,N>> sampler, ivec2 p) { return __vectorReshape<4>(sampler.Load(int3(p.xy,0))); @@ -1982,6 +2137,7 @@ public vector<T,4> texelFetch(Sampler2DRect<vector<T,N>> sampler, ivec2 p) __generic<T:__BuiltinArithmeticType, let N:int, let format:int> [ForceInline] +[require(glsl_hlsl_spirv, texture_sm_4_1_samplerless)] public vector<T,4> texelFetch(SamplerBuffer<vector<T,N>,format> sampler, int p) { return __vectorReshape<4>(sampler.Load(p)); @@ -1989,6 +2145,7 @@ public vector<T,4> texelFetch(SamplerBuffer<vector<T,N>,format> sampler, int p) __generic<T:__BuiltinArithmeticType, let N:int, let isArray:int, let sampleCount:int, let format:int> [ForceInline] +[require(cpp_glsl_hlsl_spirv, texture_sm_4_1_samplerless)] public vector<T,4> texelFetch(__TextureImpl< vector<T,N>, __Shape2D, @@ -2010,6 +2167,7 @@ public vector<T,4> texelFetch(__TextureImpl< __generic<T:__BuiltinArithmeticType, let N:int> [ForceInline] +[require(cpp_glsl_hlsl_spirv, texture_sm_4_1_samplerless)] public vector<T,4> texelFetchOffset(Sampler1D<vector<T,N>> sampler, int p, int lod, constexpr int offset) { return texelFetch(sampler, p + offset, lod); @@ -2017,6 +2175,7 @@ public vector<T,4> texelFetchOffset(Sampler1D<vector<T,N>> sampler, int p, int l __generic<T:__BuiltinArithmeticType, let N:int, Shape:__ITextureShape, let sampleCount:int, let format:int> [ForceInline] +[require(cpp_glsl_hlsl_spirv, texture_sm_4_1_samplerless)] public vector<T,4> texelFetchOffset(__TextureImpl< vector<T,N>, Shape, @@ -2034,6 +2193,7 @@ public vector<T,4> texelFetchOffset(__TextureImpl< __generic<T:__BuiltinArithmeticType, let N:int, Shape:__ITextureShape, let sampleCount:int, let format:int> [ForceInline] +[require(cpp_glsl_hlsl_spirv, texture_sm_4_1_samplerless)] public vector<T,4> texelFetchOffset(__TextureImpl< vector<T,N>, Shape, @@ -2051,6 +2211,7 @@ public vector<T,4> texelFetchOffset(__TextureImpl< __generic<T:__BuiltinArithmeticType, let N:int> [ForceInline] +[require(cpp_glsl_hlsl_spirv, texture_sm_4_1_samplerless)] public vector<T,4> texelFetchOffset(Sampler2DRect<vector<T,N>> sampler, ivec2 p, constexpr ivec2 offset) { return texelFetch(sampler, p + offset); @@ -2062,6 +2223,7 @@ public vector<T,4> texelFetchOffset(Sampler2DRect<vector<T,N>> sampler, ivec2 p, __generic<T:__BuiltinFloatingPointType, let N:int> [ForceInline] +[require(cpp_glsl_hlsl_spirv, texture_sm_4_1_fragment)] public vector<T,4> textureProjOffset(Sampler1D<vector<T,N>> sampler, vec2 p, constexpr int offset, float bias = 0.0) { return textureOffset(sampler, p.x / p.y, offset, bias); @@ -2069,6 +2231,7 @@ public vector<T,4> textureProjOffset(Sampler1D<vector<T,N>> sampler, vec2 p, con __generic<T:__BuiltinFloatingPointType, let N:int> [ForceInline] +[require(cpp_glsl_hlsl_spirv, texture_sm_4_1_fragment)] public vector<T,4> textureProjOffset(Sampler1D<vector<T,N>> sampler, vec4 p, constexpr int offset, float bias = 0.0) { return textureOffset(sampler, p.x / p.w, offset, bias); @@ -2076,6 +2239,7 @@ public vector<T,4> textureProjOffset(Sampler1D<vector<T,N>> sampler, vec4 p, con __generic<T:__BuiltinFloatingPointType, let N:int> [ForceInline] +[require(cpp_glsl_hlsl_spirv, texture_sm_4_1_fragment)] public vector<T,4> textureProjOffset(Sampler2D<vector<T,N>> sampler, vec3 p, constexpr ivec2 offset, float bias = 0.0) { return textureOffset(sampler, p.xy / p.z, offset, bias); @@ -2083,6 +2247,7 @@ public vector<T,4> textureProjOffset(Sampler2D<vector<T,N>> sampler, vec3 p, con __generic<T:__BuiltinFloatingPointType, let N:int> [ForceInline] +[require(cpp_glsl_hlsl_spirv, texture_sm_4_1_fragment)] public vector<T,4> textureProjOffset(Sampler2D<vector<T,N>> sampler, vec4 p, constexpr ivec2 offset, float bias = 0.0) { return textureOffset(sampler, p.xy / p.w, offset, bias); @@ -2090,18 +2255,21 @@ public vector<T,4> textureProjOffset(Sampler2D<vector<T,N>> sampler, vec4 p, con __generic<T:__BuiltinFloatingPointType, let N:int> [ForceInline] +[require(cpp_glsl_hlsl_spirv, texture_sm_4_1_fragment)] public vector<T,4> textureProjOffset(Sampler3D<vector<T,N>> sampler, vec4 p, constexpr ivec3 offset, float bias = 0.0) { return textureOffset(sampler, p.xyz / p.w, offset, bias); } [ForceInline] +[require(glsl_hlsl_spirv, texture_shadowlod)] public float textureProjOffset(sampler1DShadow sampler, vec4 p, constexpr int offset, float bias = 0.0) { return textureOffset(sampler, p.xyz / p.w, offset, bias); } [ForceInline] +[require(glsl_hlsl_spirv, texture_shadowlod)] public float textureProjOffset(sampler2DShadow sampler, vec4 p, constexpr ivec2 offset, float bias = 0.0) { return textureOffset(sampler, p.xyz / p.w, offset, bias); @@ -2113,6 +2281,7 @@ public float textureProjOffset(sampler2DShadow sampler, vec4 p, constexpr ivec2 __generic<T:__BuiltinFloatingPointType, let N:int> [ForceInline] +[require(cpp_glsl_hlsl_spirv, texture_sm_4_1)] public vector<T,4> textureLodOffset(Sampler1D<vector<T,N>> sampler, float p, float lod, constexpr int offset) { return __vectorReshape<4>(sampler.SampleLevel(p, lod, offset)); @@ -2120,6 +2289,7 @@ public vector<T,4> textureLodOffset(Sampler1D<vector<T,N>> sampler, float p, flo __generic<T:__BuiltinFloatingPointType, let N:int, Shape:__ITextureShape, let isArray:int, let sampleCount:int, let format:int> [ForceInline] +[require(cpp_glsl_hlsl_spirv, texture_sm_4_1)] public vector<T,4> textureLodOffset(__TextureImpl< vector<T,N>, Shape, @@ -2136,6 +2306,7 @@ public vector<T,4> textureLodOffset(__TextureImpl< } [ForceInline] +[require(glsl_hlsl_spirv, texture_shadowlod)] public float textureLodOffset(sampler1DShadow sampler, vec3 p, float lod, constexpr int offset) { // TODO: Need to apply lod @@ -2143,6 +2314,7 @@ public float textureLodOffset(sampler1DShadow sampler, vec3 p, float lod, conste } [ForceInline] +[require(glsl_hlsl_spirv, texture_shadowlod)] public float textureLodOffset(sampler2DShadow sampler, vec3 p, float lod, constexpr ivec2 offset) { // TODO: Need to apply lod @@ -2150,6 +2322,7 @@ public float textureLodOffset(sampler2DShadow sampler, vec3 p, float lod, conste } [ForceInline] +[require(glsl_hlsl_spirv, texture_shadowlod)] public float textureLodOffset(sampler1DArrayShadow sampler, vec3 p, float lod, constexpr int offset) { // TODO: Need to apply lod @@ -2162,6 +2335,7 @@ public float textureLodOffset(sampler1DArrayShadow sampler, vec3 p, float lod, c __generic<T:__BuiltinFloatingPointType, let N:int> [ForceInline] +[require(cpp_cuda_glsl_hlsl_spirv, texture_sm_4_1_fragment)] public vector<T,4> textureProjLod(Sampler1D<vector<T,N>> sampler, vec2 p, float lod) { return textureLod(sampler, p.x / p.y, lod); @@ -2169,6 +2343,7 @@ public vector<T,4> textureProjLod(Sampler1D<vector<T,N>> sampler, vec2 p, float __generic<T:__BuiltinFloatingPointType, let N:int> [ForceInline] +[require(cpp_cuda_glsl_hlsl_spirv, texture_sm_4_1_fragment)] public vector<T,4> textureProjLod(Sampler1D<vector<T,N>> sampler, vec4 p, float lod) { return textureLod(sampler, p.x / p.w, lod); @@ -2176,6 +2351,7 @@ public vector<T,4> textureProjLod(Sampler1D<vector<T,N>> sampler, vec4 p, float __generic<T:__BuiltinFloatingPointType, let N:int> [ForceInline] +[require(cpp_cuda_glsl_hlsl_spirv, texture_sm_4_1_fragment)] public vector<T,4> textureProjLod(Sampler2D<vector<T,N>> sampler, vec3 p, float lod) { return textureLod(sampler, p.xy / p.z, lod); @@ -2183,6 +2359,7 @@ public vector<T,4> textureProjLod(Sampler2D<vector<T,N>> sampler, vec3 p, float __generic<T:__BuiltinFloatingPointType, let N:int> [ForceInline] +[require(cpp_cuda_glsl_hlsl_spirv, texture_sm_4_1_fragment)] public vector<T,4> textureProjLod(Sampler2D<vector<T,N>> sampler, vec4 p, float lod) { return textureLod(sampler, p.xy / p.w, lod); @@ -2190,18 +2367,21 @@ public vector<T,4> textureProjLod(Sampler2D<vector<T,N>> sampler, vec4 p, float __generic<T:__BuiltinFloatingPointType, let N:int> [ForceInline] +[require(cpp_cuda_glsl_hlsl_spirv, texture_sm_4_1_fragment)] public vector<T,4> textureProjLod(Sampler3D<vector<T,N>> sampler, vec4 p, float lod) { return textureLod(sampler, p.xyz / p.w, lod); } [ForceInline] +[require(glsl_hlsl_spirv, texture_shadowlod)] public float textureProjLod(sampler1DShadow sampler, vec4 p, float lod) { return textureLod(sampler, p.xyz / p.w, lod); } [ForceInline] +[require(glsl_hlsl_spirv, texture_shadowlod)] public float textureProjLod(sampler2DShadow sampler, vec4 p, float lod) { return textureLod(sampler, p.xyz / p.w, lod); @@ -2213,6 +2393,7 @@ public float textureProjLod(sampler2DShadow sampler, vec4 p, float lod) __generic<T:__BuiltinFloatingPointType, let N:int> [ForceInline] +[require(glsl_hlsl_spirv, texture_sm_4_1_fragment)] public vector<T,4> textureProjLodOffset(Sampler1D<vector<T,N>> sampler, vec2 p, float lod, constexpr int offset) { return textureLodOffset(sampler, p.x / p.y, lod, offset); @@ -2220,6 +2401,7 @@ public vector<T,4> textureProjLodOffset(Sampler1D<vector<T,N>> sampler, vec2 p, __generic<T:__BuiltinFloatingPointType, let N:int> [ForceInline] +[require(glsl_hlsl_spirv, texture_sm_4_1_fragment)] public vector<T,4> textureProjLodOffset(Sampler1D<vector<T,N>> sampler, vec4 p, float lod, constexpr int offset) { return textureLodOffset(sampler, p.x / p.w, lod, offset); @@ -2227,6 +2409,7 @@ public vector<T,4> textureProjLodOffset(Sampler1D<vector<T,N>> sampler, vec4 p, __generic<T:__BuiltinFloatingPointType, let N:int> [ForceInline] +[require(glsl_hlsl_spirv, texture_sm_4_1_fragment)] public vector<T,4> textureProjLodOffset(Sampler2D<vector<T,N>> sampler, vec3 p, float lod, constexpr ivec2 offset) { return textureLodOffset(sampler, p.xy / p.z, lod, offset); @@ -2234,6 +2417,7 @@ public vector<T,4> textureProjLodOffset(Sampler2D<vector<T,N>> sampler, vec3 p, __generic<T:__BuiltinFloatingPointType, let N:int> [ForceInline] +[require(glsl_hlsl_spirv, texture_sm_4_1_fragment)] public vector<T,4> textureProjLodOffset(Sampler2D<vector<T,N>> sampler, vec4 p, float lod, constexpr ivec2 offset) { return textureLodOffset(sampler, p.xy / p.w, lod, offset); @@ -2241,18 +2425,21 @@ public vector<T,4> textureProjLodOffset(Sampler2D<vector<T,N>> sampler, vec4 p, __generic<T:__BuiltinFloatingPointType, let N:int> [ForceInline] +[require(glsl_hlsl_spirv, texture_sm_4_1_fragment)] public vector<T,4> textureProjLodOffset(Sampler3D<vector<T,N>> sampler, vec4 p, float lod, constexpr ivec3 offset) { return textureLodOffset(sampler, p.xyz / p.w, lod, offset); } [ForceInline] +[require(glsl_hlsl_spirv, texture_shadowlod)] public float textureProjLodOffset(sampler1DShadow sampler, vec4 p, float lod, constexpr int offset) { return textureLodOffset(sampler, p.xyz / p.w, lod, offset); } [ForceInline] +[require(glsl_hlsl_spirv, texture_shadowlod)] public float textureProjLodOffset(sampler2DShadow sampler, vec4 p, float lod, constexpr ivec2 offset) { return textureLodOffset(sampler, p.xyz / p.w, lod, offset); @@ -2262,8 +2449,10 @@ public float textureProjLodOffset(sampler2DShadow sampler, vec4 p, float lod, co // textureGrad // ------------------- + __generic<T:__BuiltinFloatingPointType, let N:int> [ForceInline] +[require(cpp_glsl_hlsl_spirv, texture_sm_4_1)] public vector<T,4> textureGrad(Sampler1D<vector<T,N>> sampler, float p, float dPdx, float dPdy) { return __vectorReshape<4>(sampler.SampleGrad(p, dPdx, dPdy)); @@ -2271,6 +2460,7 @@ public vector<T,4> textureGrad(Sampler1D<vector<T,N>> sampler, float p, float dP __generic<T:__BuiltinFloatingPointType, let N:int, Shape:__ITextureShape, let isArray:int, let sampleCount:int, let format:int> [ForceInline] +[require(cpp_glsl_hlsl_spirv, texture_sm_4_1)] public vector<T,4> textureGrad(__TextureImpl< vector<T,N>, Shape, @@ -2287,6 +2477,7 @@ public vector<T,4> textureGrad(__TextureImpl< } [ForceInline] +[require(cpp_cuda_glsl_hlsl_spirv, texture_shadowlod)] public float textureGrad(sampler1DShadow sampler, vec3 p, float dPdx, float dPdy) { // TODO: Not implemented @@ -2294,6 +2485,7 @@ public float textureGrad(sampler1DShadow sampler, vec3 p, float dPdx, float dPdy } [ForceInline] +[require(cpp_cuda_glsl_hlsl_spirv, texture_shadowlod)] public float textureGrad(sampler1DArrayShadow sampler, vec3 p, float dPdx, float dPdy) { // TODO: Not implemented @@ -2301,6 +2493,7 @@ public float textureGrad(sampler1DArrayShadow sampler, vec3 p, float dPdx, float } [ForceInline] +[require(cpp_cuda_glsl_hlsl_spirv, texture_shadowlod)] public float textureGrad(sampler2DShadow sampler, vec3 p, vec2 dPdx, vec2 dPdy) { // TODO: Not implemented on HLSL side yet. @@ -2308,6 +2501,7 @@ public float textureGrad(sampler2DShadow sampler, vec3 p, vec2 dPdx, vec2 dPdy) } [ForceInline] +[require(cpp_cuda_glsl_hlsl_spirv, texture_shadowlod_cube)] public float textureGrad(samplerCubeShadow sampler, vec4 p, vec3 dPdx, vec3 dPdy) { // TODO: Not implemented on HLSL side yet. @@ -2315,6 +2509,7 @@ public float textureGrad(samplerCubeShadow sampler, vec4 p, vec3 dPdx, vec3 dPdy } [ForceInline] +[require(cpp_cuda_glsl_hlsl_spirv, texture_shadowlod)] public float textureGrad(sampler2DArrayShadow sampler, vec4 p, vec2 dPdx, vec2 dPdy) { // TODO: Not implemented on HLSL side yet. @@ -2327,12 +2522,14 @@ public float textureGrad(sampler2DArrayShadow sampler, vec4 p, vec2 dPdx, vec2 d __generic<T:__BuiltinFloatingPointType, let N:int> [ForceInline] +[require(cpp_glsl_hlsl_spirv, texture_sm_4_1)] public vector<T,4> textureGradOffset(Sampler1D<vector<T,N>> sampler, float p, float dPdx, float dPdy, constexpr int offset) { return __vectorReshape<4>(sampler.SampleGrad(p, dPdx, dPdy, offset)); } __generic<T:__BuiltinFloatingPointType, let N:int, Shape:__ITextureShape, let isArray:int, let sampleCount:int, let format:int> +[require(cpp_glsl_hlsl_spirv, texture_sm_4_1)] [ForceInline] public vector<T,4> textureGradOffset(__TextureImpl< vector<T,N>, @@ -2350,6 +2547,7 @@ public vector<T,4> textureGradOffset(__TextureImpl< } [ForceInline] +[require(cpp_glsl_hlsl_spirv, texture_shadowlod)] public float textureGradOffset(sampler1DShadow sampler, vec3 p, float dPdx, float dPdy, constexpr int offset) { // TODO: Not implemented on HLSL side yet. @@ -2357,6 +2555,7 @@ public float textureGradOffset(sampler1DShadow sampler, vec3 p, float dPdx, floa } [ForceInline] +[require(cpp_glsl_hlsl_spirv, texture_shadowlod)] public float textureGradOffset(sampler2DShadow sampler, vec3 p, vec2 dPdx, vec2 dPdy, constexpr ivec2 offset) { // TODO: Not implemented on HLSL side yet. @@ -2364,6 +2563,7 @@ public float textureGradOffset(sampler2DShadow sampler, vec3 p, vec2 dPdx, vec2 } [ForceInline] +[require(cpp_glsl_hlsl_spirv, texture_shadowlod)] public float textureGradOffset(sampler1DArrayShadow sampler, vec3 p, float dPdx, float dPdy, constexpr int offset) { // TODO: Not implemented on HLSL side yet. @@ -2371,6 +2571,7 @@ public float textureGradOffset(sampler1DArrayShadow sampler, vec3 p, float dPdx, } [ForceInline] +[require(cpp_glsl_hlsl_spirv, texture_shadowlod)] public float textureGradOffset(sampler2DArrayShadow sampler, vec4 p, vec2 dPdx, vec2 dPdy, constexpr ivec2 offset) { // TODO: Not implemented on HLSL side yet. @@ -2383,6 +2584,7 @@ public float textureGradOffset(sampler2DArrayShadow sampler, vec4 p, vec2 dPdx, __generic<T:__BuiltinFloatingPointType, let N:int> [ForceInline] +[require(cpp_glsl_hlsl_spirv, texture_sm_4_1)] public vector<T,4> textureProjGrad(Sampler1D<vector<T,N>> sampler, vec2 p, float dPdx, float dPdy) { return textureGrad(sampler, p.x / p.y, dPdx, dPdy); @@ -2390,6 +2592,7 @@ public vector<T,4> textureProjGrad(Sampler1D<vector<T,N>> sampler, vec2 p, float __generic<T:__BuiltinFloatingPointType, let N:int> [ForceInline] +[require(cpp_glsl_hlsl_spirv, texture_sm_4_1)] public vector<T,4> textureProjGrad(Sampler1D<vector<T,N>> sampler, vec4 p, float dPdx, float dPdy) { return textureGrad(sampler, p.x / p.w, dPdx, dPdy); @@ -2397,6 +2600,7 @@ public vector<T,4> textureProjGrad(Sampler1D<vector<T,N>> sampler, vec4 p, float __generic<T:__BuiltinFloatingPointType, let N:int> [ForceInline] +[require(cpp_glsl_hlsl_spirv, texture_sm_4_1)] public vector<T,4> textureProjGrad(Sampler2D<vector<T,N>> sampler, vec3 p, vec2 dPdx, vec2 dPdy) { return textureGrad(sampler, p.xy / p.z, dPdx, dPdy); @@ -2404,6 +2608,7 @@ public vector<T,4> textureProjGrad(Sampler2D<vector<T,N>> sampler, vec3 p, vec2 __generic<T:__BuiltinFloatingPointType, let N:int> [ForceInline] +[require(cpp_glsl_hlsl_spirv, texture_sm_4_1)] public vector<T,4> textureProjGrad(Sampler2D<vector<T,N>> sampler, vec4 p, vec2 dPdx, vec2 dPdy) { return textureGrad(sampler, p.xy / p.w, dPdx, dPdy); @@ -2411,18 +2616,21 @@ public vector<T,4> textureProjGrad(Sampler2D<vector<T,N>> sampler, vec4 p, vec2 __generic<T:__BuiltinFloatingPointType, let N:int> [ForceInline] +[require(cpp_glsl_hlsl_spirv, texture_sm_4_1)] public vector<T,4> textureProjGrad(Sampler3D<vector<T,N>> sampler, vec4 p, vec3 dPdx, vec3 dPdy) { return textureGrad(sampler, p.xyz / p.w, dPdx, dPdy); } [ForceInline] +[require(cpp_glsl_hlsl_spirv, texture_shadowlod)] public float textureProjGrad(sampler1DShadow sampler, vec4 p, float dPdx, float dPdy) { return textureGrad(sampler, p.xyz / p.w, dPdx, dPdy); } [ForceInline] +[require(cpp_glsl_hlsl_spirv, texture_shadowlod)] public float textureProjGrad(sampler2DShadow sampler, vec4 p, vec2 dPdx, vec2 dPdy) { return textureGrad(sampler, p.xyz / p.w, dPdx, dPdy); @@ -2434,6 +2642,7 @@ public float textureProjGrad(sampler2DShadow sampler, vec4 p, vec2 dPdx, vec2 dP __generic<T:__BuiltinFloatingPointType, let N:int> [ForceInline] +[require(cpp_glsl_hlsl_spirv, texture_sm_4_1)] public vector<T,4> textureProjGradOffset(Sampler1D<vector<T,N>> sampler, vec2 p, float dPdx, float dPdy, constexpr int offset) { return textureGradOffset(sampler, p.x / p.y, dPdx, dPdy, offset); @@ -2441,6 +2650,7 @@ public vector<T,4> textureProjGradOffset(Sampler1D<vector<T,N>> sampler, vec2 p, __generic<T:__BuiltinFloatingPointType, let N:int> [ForceInline] +[require(cpp_glsl_hlsl_spirv, texture_sm_4_1)] public vector<T,4> textureProjGradOffset(Sampler1D<vector<T,N>> sampler, vec4 p, float dPdx, float dPdy, constexpr int offset) { return textureGradOffset(sampler, p.x / p.w, dPdx, dPdy, offset); @@ -2448,6 +2658,7 @@ public vector<T,4> textureProjGradOffset(Sampler1D<vector<T,N>> sampler, vec4 p, __generic<T:__BuiltinFloatingPointType, let N:int> [ForceInline] +[require(cpp_glsl_hlsl_spirv, texture_sm_4_1)] public vector<T,4> textureProjGradOffset(Sampler2D<vector<T,N>> sampler, vec3 p, vec2 dPdx, vec2 dPdy, constexpr ivec2 offset) { return textureGradOffset(sampler, p.xy / p.z, dPdx, dPdy, offset); @@ -2455,6 +2666,7 @@ public vector<T,4> textureProjGradOffset(Sampler2D<vector<T,N>> sampler, vec3 p, __generic<T:__BuiltinFloatingPointType, let N:int> [ForceInline] +[require(cpp_glsl_hlsl_spirv, texture_sm_4_1)] public vector<T,4> textureProjGradOffset(Sampler2D<vector<T,N>> sampler, vec4 p, vec2 dPdx, vec2 dPdy, constexpr ivec2 offset) { return textureGradOffset(sampler, p.xy / p.w, dPdx, dPdy, offset); @@ -2462,18 +2674,21 @@ public vector<T,4> textureProjGradOffset(Sampler2D<vector<T,N>> sampler, vec4 p, __generic<T:__BuiltinFloatingPointType, let N:int> [ForceInline] +[require(cpp_glsl_hlsl_spirv, texture_sm_4_1)] public vector<T,4> textureProjGradOffset(Sampler3D<vector<T,N>> sampler, vec4 p, vec3 dPdx, vec3 dPdy, constexpr ivec3 offset) { return textureGradOffset(sampler, p.xyz / p.w, dPdx, dPdy, offset); } [ForceInline] +[require(cpp_glsl_hlsl_spirv, texture_shadowlod)] public float textureProjGradOffset(sampler1DShadow sampler, vec4 p, float dPdx, float dPdy, constexpr int offset) { return textureGradOffset(sampler, p.xyz / p.w, dPdx, dPdy, offset); } [ForceInline] +[require(cpp_glsl_hlsl_spirv, texture_shadowlod)] public float textureProjGradOffset(sampler2DShadow sampler, vec4 p, vec2 dPdx, vec2 dPdy, constexpr ivec2 offset) { return textureGradOffset(sampler, p.xyz / p.w, dPdx, dPdy, offset); @@ -2489,6 +2704,7 @@ public float textureProjGradOffset(sampler2DShadow sampler, vec4 p, vec2 dPdx, v __generic<T:__BuiltinArithmeticType, let N:int, Shape:__ITextureShape, let isArray:int, let sampleCount:int, let format:int> [ForceInline] +[require(glsl_hlsl_spirv, texture_gather)] public vector<T,4> textureGather(__TextureImpl< vector<T,N>, Shape, @@ -2512,6 +2728,7 @@ public vector<T,4> textureGather(__TextureImpl< __generic<Shape:__ITextureShape, let isArray:int, let sampleCount:int, let format:int> [ForceInline] +[require(glsl_hlsl_spirv, texture_gather)] public vec4 textureGather(__TextureImpl< float, Shape, @@ -2533,6 +2750,7 @@ public vec4 textureGather(__TextureImpl< __generic<T:__BuiltinArithmeticType, let N:int, let isArray:int, let sampleCount:int, let format:int> [ForceInline] +[require(glsl_hlsl_spirv, texture_gather)] public vector<T,4> textureGatherOffset(__TextureImpl< vector<T,N>, __Shape2D, @@ -2556,6 +2774,7 @@ public vector<T,4> textureGatherOffset(__TextureImpl< __generic<let isArray:int, let sampleCount:int, let format:int> [ForceInline] +[require(glsl_hlsl_spirv, texture_gather)] public vec4 textureGatherOffset(__TextureImpl< float, __Shape2D, @@ -2577,6 +2796,7 @@ public vec4 textureGatherOffset(__TextureImpl< __generic<T:__BuiltinArithmeticType, let N:int, let isArray:int, let sampleCount:int, let format:int> [ForceInline] +[require(glsl_hlsl_spirv, texture_gather)] public vector<T,4> textureGatherOffsets(__TextureImpl< vector<T,N>, __Shape2D, @@ -2600,6 +2820,7 @@ public vector<T,4> textureGatherOffsets(__TextureImpl< __generic<let isArray:int, let sampleCount:int, let format:int> [ForceInline] +[require(glsl_hlsl_spirv, texture_gather)] public vec4 textureGatherOffsets(__TextureImpl< float, __Shape2D, @@ -2619,196 +2840,235 @@ public vec4 textureGatherOffsets(__TextureImpl< // Section 8.9.5. Compatibility Profile Texture Functions // +[require(cpp_glsl_hlsl_spirv, texture_sm_4_1_fragment)] public vec4 texture1D(sampler1D sampler, float coord) { return texture(sampler, coord); } +[require(cpp_glsl_hlsl_spirv, texture_sm_4_1_fragment)] public vec4 texture1D(sampler1D sampler, float coord, float bias) { return texture(sampler, coord, bias); } +[require(glsl_hlsl_spirv, texture_sm_4_1_fragment)] public vec4 texture1DProj(sampler1D sampler, vec2 coord) { return textureProj(sampler, coord); } +[require(glsl_hlsl_spirv, texture_sm_4_1_fragment)] public vec4 texture1DProj(sampler1D sampler, vec2 coord, float bias) { return textureProj(sampler, coord, bias); } +[require(glsl_hlsl_spirv, texture_sm_4_1_fragment)] public vec4 texture1DProj(sampler1D sampler, vec4 coord) { return textureProj(sampler, coord); } +[require(glsl_hlsl_spirv, texture_sm_4_1_fragment)] public vec4 texture1DProj(sampler1D sampler, vec4 coord, float bias) { return textureProj(sampler, coord, bias); } +[require(cpp_glsl_hlsl_spirv, texture_sm_4_1_fragment)] public vec4 texture1DLod(sampler1D sampler, float coord, float lod) { return textureLod(sampler, coord, lod); } +[require(cpp_glsl_hlsl_spirv, texture_sm_4_1_fragment)] public vec4 texture1DProjLod(sampler1D sampler, vec2 coord, float lod) { return textureProjLod(sampler, coord, lod); } +[require(cpp_glsl_hlsl_spirv, texture_sm_4_1_fragment)] public vec4 texture1DProjLod(sampler1D sampler, vec4 coord, float lod) { return textureProjLod(sampler, coord, lod); } +[require(cpp_glsl_hlsl_spirv, texture_sm_4_1_fragment)] public vec4 texture2D(sampler2D sampler, vec2 coord) { return texture(sampler, coord); } +[require(cpp_glsl_hlsl_spirv, texture_sm_4_1_fragment)] public vec4 texture2D(sampler2D sampler, vec2 coord, float bias) { return texture(sampler, coord, bias); } +[require(glsl_hlsl_spirv, texture_sm_4_1_fragment)] public vec4 texture2DProj(sampler2D sampler, vec3 coord) { return textureProj(sampler, coord); } +[require(glsl_hlsl_spirv, texture_sm_4_1_fragment)] public vec4 texture2DProj(sampler2D sampler, vec3 coord, float bias) { return textureProj(sampler, coord, bias); } +[require(glsl_hlsl_spirv, texture_sm_4_1_fragment)] public vec4 texture2DProj(sampler2D sampler, vec4 coord) { return textureProj(sampler, coord); } +[require(glsl_hlsl_spirv, texture_sm_4_1_fragment)] public vec4 texture2DProj(sampler2D sampler, vec4 coord, float bias) { return textureProj(sampler, coord, bias); } +[require(cpp_glsl_hlsl_spirv, texture_sm_4_1_fragment)] public vec4 texture2DLod(sampler2D sampler, vec2 coord, float lod) { return textureLod(sampler, coord, lod); } +[require(cpp_glsl_hlsl_spirv, texture_sm_4_1_fragment)] public vec4 texture2DProjLod(sampler2D sampler, vec3 coord, float lod) { return textureProjLod(sampler, coord, lod); } +[require(cpp_glsl_hlsl_spirv, texture_sm_4_1_fragment)] public vec4 texture2DProjLod(sampler2D sampler, vec4 coord, float lod) { return textureProjLod(sampler, coord, lod); } +[require(cpp_glsl_hlsl_spirv, texture_sm_4_1_fragment)] public vec4 texture3D(sampler3D sampler, vec3 coord) { return texture(sampler, coord); } +[require(cpp_glsl_hlsl_spirv, texture_sm_4_1_fragment)] public vec4 texture3D(sampler3D sampler, vec3 coord, float bias) { return texture(sampler, coord, bias); } +[require(glsl_hlsl_spirv, texture_sm_4_1_fragment)] public vec4 texture3DProj(sampler3D sampler, vec4 coord) { return textureProj(sampler, coord); } +[require(glsl_hlsl_spirv, texture_sm_4_1_fragment)] public vec4 texture3DProj(sampler3D sampler, vec4 coord, float bias) { return textureProj(sampler, coord, bias); } +[require(cpp_glsl_hlsl_spirv, texture_sm_4_1_fragment)] public vec4 texture3DLod(sampler3D sampler, vec3 coord, float lod) { return textureLod(sampler, coord, lod); } +[require(cpp_glsl_hlsl_spirv, texture_sm_4_1_fragment)] public vec4 texture3DProjLod(sampler3D sampler, vec4 coord, float lod) { return textureProjLod(sampler, coord, lod); } +[require(cpp_glsl_hlsl_spirv, texture_sm_4_1_fragment)] public vec4 textureCube(samplerCube sampler, vec3 coord) { return texture(sampler, coord); } +[require(cpp_glsl_hlsl_spirv, texture_sm_4_1_fragment)] public vec4 textureCube(samplerCube sampler, vec3 coord, float bias) { return texture(sampler, coord, bias); } +[require(cpp_glsl_hlsl_spirv, texture_sm_4_1_fragment)] public vec4 textureCubeLod(samplerCube sampler, vec3 coord, float lod) { return textureLod(sampler, coord, lod); } +[require(glsl_spirv, texture_shadowlod)] public vec4 shadow1D(sampler1DShadow sampler, vec3 coord) { return texture(sampler, coord); } +[require(glsl_spirv, texture_shadowlod)] public vec4 shadow1D(sampler1DShadow sampler, vec3 coord, float bias) { return texture(sampler, coord, bias); } +[require(glsl_spirv, texture_shadowlod)] public vec4 shadow2D(sampler2DShadow sampler, vec3 coord) { return texture(sampler, coord); } +[require(glsl_spirv, texture_shadowlod)] public vec4 shadow2D(sampler2DShadow sampler, vec3 coord, float bias) { return texture(sampler, coord, bias); } +[require(glsl_spirv, texture_shadowlod)] public vec4 shadow1DProj(sampler1DShadow sampler, vec4 coord) { return textureProj(sampler, coord); } +[require(glsl_spirv, texture_shadowlod)] public vec4 shadow1DProj(sampler1DShadow sampler, vec4 coord, float bias) { return textureProj(sampler, coord, bias); } +[require(glsl_spirv, texture_shadowlod)] public vec4 shadow2DProj(sampler2DShadow sampler, vec4 coord) { return textureProj(sampler, coord); } +[require(glsl_spirv, texture_shadowlod)] public vec4 shadow2DProj(sampler2DShadow sampler, vec4 coord, float bias) { return textureProj(sampler, coord, bias); } +[require(glsl_spirv, texture_shadowlod)] public vec4 shadow1DLod(sampler1DShadow sampler, vec3 coord, float lod) { return textureLod(sampler, coord, lod); } +[require(glsl_spirv, texture_shadowlod)] public vec4 shadow2DLod(sampler2DShadow sampler, vec3 coord, float lod) { return textureLod(sampler, coord, lod); } +[require(glsl_spirv, texture_shadowlod)] public vec4 shadow1DProjLod(sampler1DShadow sampler, vec4 coord, float lod) { return textureProjLod(sampler, coord, lod); } +[require(glsl_spirv, texture_shadowlod)] public vec4 shadow2DProjLod(sampler2DShadow sampler, vec4 coord, float lod) { return textureProjLod(sampler, coord, lod); @@ -3010,10 +3270,10 @@ ${{{{ }}}} // readonly writeonly in GLSL means an object only allows information queries. - [require(spirv)] - [require(glsl)] [__readNone] - [ForceInline] public $(imageSizeIntOrIVec) imageSize(readonly writeonly $(fullTypeName) image) + [ForceInline] + [require(glsl_spirv, image_size)] + public $(imageSizeIntOrIVec) imageSize(readonly writeonly $(fullTypeName) image) { __target_switch { @@ -3026,10 +3286,10 @@ ${{{{ }; } } - [require(spirv)] - [require(glsl)] [__NoSideEffect] - [ForceInline] public $(targetType.prefix)vec4 imageLoad(readonly $(IMAGE_PARAMS)) + [ForceInline] + [require(glsl_spirv, image_loadstore)] + public $(targetType.prefix)vec4 imageLoad(readonly $(IMAGE_PARAMS)) { __target_switch { @@ -3044,9 +3304,9 @@ ${{{{ } } } - [require(spirv)] - [require(glsl)] - [ForceInline] public void imageStore(writeonly $(IMAGE_PARAMS), $(targetType.prefix)vec4 data) + [ForceInline] + [require(glsl_spirv, image_loadstore)] + public void imageStore(writeonly $(IMAGE_PARAMS), $(targetType.prefix)vec4 data) { __target_switch { @@ -3067,10 +3327,10 @@ ${{{{ { }}}} // readonly writeonly in GLSL means an object only allows information queries. - [require(spirv)] - [require(glsl)] [__readNone] - [ForceInline] public int imageSamples(readonly writeonly $(fullTypeName) image) + [ForceInline] + [require(glsl_spirv, image_samples)] + public int imageSamples(readonly writeonly $(fullTypeName) image) { __target_switch { @@ -3086,9 +3346,9 @@ ${{{{ ${{{{ } }}}} - [require(spirv)] - [require(glsl)] - [ForceInline] public $(targetType.type) imageAtomicAdd($(IMAGE_PARAMS), $(targetType.type) data) + [ForceInline] + [require(glsl_spirv, image_loadstore)] + public $(targetType.type) imageAtomicAdd($(IMAGE_PARAMS), $(targetType.type) data) { typeRequireChecks_image_atomic_tier1<$(targetType.type)>(); __target_switch @@ -3109,9 +3369,9 @@ ${{{{ } } } - [require(spirv)] - [require(glsl)] - [ForceInline] public $(targetType.type) imageAtomicExchange($(IMAGE_PARAMS), $(targetType.type) data) + [ForceInline] + [require(glsl_spirv, image_loadstore)] + public $(targetType.type) imageAtomicExchange($(IMAGE_PARAMS), $(targetType.type) data) { typeRequireChecks_image_atomic_tier1<$(targetType.type)>(); __target_switch @@ -3132,9 +3392,9 @@ ${{{{ } } } - [require(spirv)] - [require(glsl)] - [ForceInline] public $(targetType.type) imageAtomicMin($(IMAGE_PARAMS), $(targetType.type) data) + [ForceInline] + [require(glsl_spirv, image_loadstore)] + public $(targetType.type) imageAtomicMin($(IMAGE_PARAMS), $(targetType.type) data) { typeRequireChecks_image_atomic_tier2<$(targetType.type)>(); __target_switch @@ -3155,9 +3415,9 @@ ${{{{ } } } - [require(spirv)] - [require(glsl)] - [ForceInline] public $(targetType.type) imageAtomicMax($(IMAGE_PARAMS), $(targetType.type) data) + [ForceInline] + [require(glsl_spirv, image_loadstore)] + public $(targetType.type) imageAtomicMax($(IMAGE_PARAMS), $(targetType.type) data) { typeRequireChecks_image_atomic_tier2<$(targetType.type)>(); __target_switch @@ -3182,9 +3442,9 @@ ${{{{ if (!targetType.isInt) continue; }}}} - [require(spirv)] - [require(glsl)] - [ForceInline] public $(targetType.type) imageAtomicAnd($(IMAGE_PARAMS), $(targetType.type) data) + [ForceInline] + [require(glsl_spirv, image_loadstore)] + public $(targetType.type) imageAtomicAnd($(IMAGE_PARAMS), $(targetType.type) data) { __target_switch { @@ -3204,9 +3464,9 @@ ${{{{ } } } - [require(spirv)] - [require(glsl)] - [ForceInline] public $(targetType.type) imageAtomicOr($(IMAGE_PARAMS), $(targetType.type) data) + [ForceInline] + [require(glsl_spirv, image_loadstore)] + public $(targetType.type) imageAtomicOr($(IMAGE_PARAMS), $(targetType.type) data) { __target_switch { @@ -3226,9 +3486,10 @@ ${{{{ } } } - [require(spirv)] - [require(glsl)] - [ForceInline] public $(targetType.type) imageAtomicXor($(IMAGE_PARAMS), $(targetType.type) data) + + [ForceInline] + [require(glsl_spirv, image_loadstore)] + public $(targetType.type) imageAtomicXor($(IMAGE_PARAMS), $(targetType.type) data) { __target_switch { @@ -3248,9 +3509,9 @@ ${{{{ } } } - [require(spirv)] - [require(glsl)] - [ForceInline] public $(targetType.type) imageAtomicCompSwap($(IMAGE_PARAMS), $(targetType.type) compare, $(targetType.type) data) + [ForceInline] + [require(glsl_spirv, image_loadstore)] + public $(targetType.type) imageAtomicCompSwap($(IMAGE_PARAMS), $(targetType.type) compare, $(targetType.type) data) { __target_switch { @@ -3287,6 +3548,7 @@ public typealias hitObjectNV = HitObject; //GL_EXT_ray_tracing BuiltIn's +[require(any_target, raytracing_allstages)] void requireGLSLExtForRayTracingBuiltin() { __target_switch @@ -3294,25 +3556,27 @@ void requireGLSLExtForRayTracingBuiltin() case glsl: __requireGLSLExtension("GL_EXT_ray_tracing"); __intrinsic_asm ""; + default: + return; } } __spirv_version(1.4) +[require(any_target, raytracing_allstages)] void setupExtForRayTracingBuiltIn() { __target_switch { case glsl: requireGLSLExtForRayTracingBuiltin(); - case spirv: + default: return; } } -[require(glsl, raytracing)] -[require(spirv, raytracing)] public property uint3 gl_LaunchIDNV { + [require(glsl_spirv, raytracing_allstages)] get { setupExtForRayTracingBuiltIn(); @@ -3333,10 +3597,9 @@ public property uint3 gl_LaunchIDNV } } -[require(glsl, raytracing)] -[require(spirv, raytracing)] public property uint3 gl_LaunchIDEXT { + [require(cuda_glsl_hlsl_spirv, raytracing_allstages)] get { setupExtForRayTracingBuiltIn(); @@ -3344,10 +3607,9 @@ public property uint3 gl_LaunchIDEXT } } -[require(glsl, raytracing)] -[require(spirv, raytracing)] public property uint3 gl_LaunchSizeNV { + [require(glsl_spirv, raytracing_allstages)] get { setupExtForRayTracingBuiltIn(); @@ -3368,10 +3630,9 @@ public property uint3 gl_LaunchSizeNV } } -[require(glsl, raytracing)] -[require(spirv, raytracing)] public property uint3 gl_LaunchSizeEXT { + [require(cuda_glsl_hlsl_spirv, raytracing_allstages)] get { setupExtForRayTracingBuiltIn(); @@ -3379,10 +3640,10 @@ public property uint3 gl_LaunchSizeEXT } } -[require(glsl, raytracing)] -[require(spirv, raytracing)] + public property int gl_PrimitiveID { + [require(cuda_glsl_hlsl_spirv, raytracing_anyhit_closesthit_intersection)] get { setupExtForRayTracingBuiltIn(); @@ -3390,10 +3651,9 @@ public property int gl_PrimitiveID } } -[require(glsl, raytracing)] -[require(spirv, raytracing)] public property int gl_InstanceID { + [require(cuda_glsl_hlsl_spirv, raytracing_anyhit_closesthit_intersection)] get { setupExtForRayTracingBuiltIn(); @@ -3401,10 +3661,9 @@ public property int gl_InstanceID } } -[require(glsl, raytracing)] -[require(spirv, raytracing)] public property int gl_InstanceCustomIndexEXT { + [require(cuda_glsl_hlsl_spirv, raytracing_anyhit_closesthit_intersection)] get { setupExtForRayTracingBuiltIn(); @@ -3412,10 +3671,9 @@ public property int gl_InstanceCustomIndexEXT } } -[require(glsl, raytracing)] -[require(spirv, raytracing)] public property int gl_GeometryIndexEXT { + [require(glsl_hlsl_spirv, raytracing_anyhit_closesthit_intersection)] get { setupExtForRayTracingBuiltIn(); @@ -3423,10 +3681,9 @@ public property int gl_GeometryIndexEXT } } -[require(glsl, raytracing)] -[require(spirv, raytracing)] public property vec3 gl_WorldRayOriginEXT { + [require(glsl_hlsl_spirv, raytracing_anyhit_closesthit_intersection_miss)] get { setupExtForRayTracingBuiltIn(); @@ -3434,10 +3691,9 @@ public property vec3 gl_WorldRayOriginEXT } } -[require(glsl, raytracing)] -[require(spirv, raytracing)] public property vec3 gl_WorldRayDirectionEXT { + [require(glsl_hlsl_spirv, raytracing_anyhit_closesthit_intersection_miss)] get { setupExtForRayTracingBuiltIn(); @@ -3445,10 +3701,9 @@ public property vec3 gl_WorldRayDirectionEXT } } -[require(glsl, raytracing)] -[require(spirv, raytracing)] public property vec3 gl_ObjectRayOriginEXT { + [require(glsl_hlsl_spirv, raytracing_anyhit_closesthit_intersection)] get { setupExtForRayTracingBuiltIn(); @@ -3456,10 +3711,9 @@ public property vec3 gl_ObjectRayOriginEXT } } -[require(glsl, raytracing)] -[require(spirv, raytracing)] public property vec3 gl_ObjectRayDirectionEXT { + [require(glsl_hlsl_spirv, raytracing_anyhit_closesthit_intersection)] get { setupExtForRayTracingBuiltIn(); @@ -3467,10 +3721,9 @@ public property vec3 gl_ObjectRayDirectionEXT } } -[require(glsl, raytracing)] -[require(spirv, raytracing)] public property float gl_RayTminEXT { + [require(glsl_hlsl_spirv, raytracing_anyhit_closesthit_intersection_miss)] get { setupExtForRayTracingBuiltIn(); @@ -3478,10 +3731,9 @@ public property float gl_RayTminEXT } } -[require(glsl, raytracing)] -[require(spirv, raytracing)] public property float gl_RayTmaxEXT { + [require(glsl_hlsl_spirv, raytracing_anyhit_closesthit_intersection_miss)] get { setupExtForRayTracingBuiltIn(); @@ -3489,10 +3741,9 @@ public property float gl_RayTmaxEXT } } -[require(glsl, raytracing)] -[require(spirv, raytracing)] public property uint gl_IncomingRayFlagsEXT { + [require(glsl_hlsl_spirv, raytracing_anyhit_closesthit_intersection_miss)] get { setupExtForRayTracingBuiltIn(); @@ -3500,10 +3751,9 @@ public property uint gl_IncomingRayFlagsEXT } } -[require(glsl, raytracing)] -[require(spirv, raytracing)] public property float gl_HitTEXT { + [require(glsl_spirv, raytracing_anyhit_closesthit)] get { setupExtForRayTracingBuiltIn(); @@ -3524,10 +3774,10 @@ public property float gl_HitTEXT } } -[require(glsl, raytracing)] -[require(spirv, raytracing)] public property uint gl_HitKindEXT { + + [require(glsl_hlsl_spirv, raytracing_anyhit_closesthit)] get { setupExtForRayTracingBuiltIn(); @@ -3535,10 +3785,9 @@ public property uint gl_HitKindEXT } } -[require(glsl, raytracing)] -[require(spirv, raytracing)] public property mat4x3 gl_ObjectToWorldEXT { + [require(glsl_spirv, raytracing_anyhit_closesthit_intersection)] get { setupExtForRayTracingBuiltIn(); @@ -3560,10 +3809,9 @@ public property mat4x3 gl_ObjectToWorldEXT } } -[require(glsl, raytracing)] -[require(spirv, raytracing)] public property mat3x4 gl_ObjectToWorld3x4EXT { + [require(glsl_spirv, raytracing_anyhit_closesthit_intersection)] get { setupExtForRayTracingBuiltIn(); @@ -3584,10 +3832,9 @@ public property mat3x4 gl_ObjectToWorld3x4EXT } } -[require(glsl, raytracing)] -[require(spirv, raytracing)] public property mat4x3 gl_WorldToObjectEXT { + [require(glsl_spirv, raytracing_anyhit_closesthit_intersection)] get { setupExtForRayTracingBuiltIn(); @@ -3609,10 +3856,9 @@ public property mat4x3 gl_WorldToObjectEXT } } -[require(glsl, raytracing)] -[require(spirv, raytracing)] public property mat3x4 gl_WorldToObject3x4EXT { + [require(glsl_spirv, raytracing_anyhit_closesthit_intersection)] get { setupExtForRayTracingBuiltIn(); @@ -3635,9 +3881,8 @@ public property mat3x4 gl_WorldToObject3x4EXT // GL_EXT_ray_tracing functions -__glsl_extension(GL_EXT_ray_query) -[require(glsl, raytracing)] -[require(spirv, raytracing)] +__glsl_extension(GL_EXT_ray_tracing) +[require(glsl_spirv, raytracing_raygen_closesthit_miss)] public void traceRayEXT( accelerationStructureEXT topLevel, uint rayFlags, @@ -3689,17 +3934,15 @@ public void traceRayEXT( } } -__glsl_extension(GL_EXT_ray_query) -[require(glsl, raytracing)] -[require(spirv, raytracing)] +__glsl_extension(GL_EXT_ray_tracing) +[require(glsl_spirv, raytracing_intersection)] public bool reportIntersectionEXT(float hitT, uint hitKind) { return __reportIntersection(hitT, hitKind); } -__glsl_extension(GL_EXT_ray_query) -[require(glsl, raytracing)] -[require(spirv, raytracing)] +__glsl_extension(GL_EXT_ray_tracing) +[require(glsl_spirv, raytracing_raygen_closesthit_miss_callable)] public void executeCallableEXT( uint sbtRecordIndex, int callable /*callableDataEXT and callableDataInEXT*/) @@ -3748,9 +3991,8 @@ public static const uint gl_RayQueryCandidateIntersectionAABBEXT = 1U; // GL_EXT_ray_query functions __glsl_extension(GL_EXT_ray_query) -[require(glsl, rayquery)] -[require(spirv, rayquery)] [ForceInline] +[require(glsl_spirv, rayquery)] public void rayQueryInitializeEXT( inout rayQueryEXT q, accelerationStructureEXT topLevel, @@ -3765,17 +4007,15 @@ public void rayQueryInitializeEXT( } __glsl_extension(GL_EXT_ray_query) -[require(glsl, rayquery)] -[require(spirv, rayquery)] [ForceInline] +[require(glsl_spirv, rayquery)] public bool rayQueryProceedEXT(inout rayQueryEXT q) { return q.Proceed(); } __glsl_extension(GL_EXT_ray_query) -[require(glsl, rayquery)] -[require(spirv, rayquery)] +[require(glsl_spirv, rayquery)] [mutating] [ForceInline] public void rayQueryTerminateEXT(inout rayQueryEXT q) @@ -3784,28 +4024,25 @@ public void rayQueryTerminateEXT(inout rayQueryEXT q) } __glsl_extension(GL_EXT_ray_query) -[require(glsl, rayquery)] -[require(spirv, rayquery)] [ForceInline] +[require(glsl_spirv, rayquery)] public void rayQueryGenerateIntersectionEXT(inout rayQueryEXT q, float tHit) { q.CommitProceduralPrimitiveHit(tHit); } __glsl_extension(GL_EXT_ray_query) -[require(glsl, rayquery)] -[require(spirv, rayquery)] [ForceInline] +[require(glsl_spirv, rayquery)] public void rayQueryConfirmIntersectionEXT(inout rayQueryEXT q) { q.CommitNonOpaqueTriangleHit(); } __glsl_extension(GL_EXT_ray_query) -[require(glsl, rayquery)] -[require(spirv, rayquery)] [__NoSideEffect] [ForceInline] +[require(glsl_spirv, rayquery)] public uint rayQueryGetIntersectionTypeEXT(rayQueryEXT q, bool committed) { if (committed) @@ -3819,45 +4056,40 @@ public uint rayQueryGetIntersectionTypeEXT(rayQueryEXT q, bool committed) } __glsl_extension(GL_EXT_ray_query) -[require(glsl, rayquery)] -[require(spirv, rayquery)] [ForceInline] +[require(glsl_spirv, rayquery)] public float rayQueryGetRayTMinEXT(rayQueryEXT q) { return q.RayTMin(); } __glsl_extension(GL_EXT_ray_query) -[require(glsl, rayquery)] -[require(spirv, rayquery)] [ForceInline] +[require(glsl_spirv, rayquery)] public uint rayQueryGetRayFlagsEXT(rayQueryEXT q) { return q.RayFlags(); } __glsl_extension(GL_EXT_ray_query) -[require(glsl, rayquery)] -[require(spirv, rayquery)] [ForceInline] +[require(glsl_spirv, rayquery)] public vec3 rayQueryGetWorldRayOriginEXT(rayQueryEXT q) { return q.WorldRayOrigin(); } __glsl_extension(GL_EXT_ray_query) -[require(glsl, rayquery)] -[require(spirv, rayquery)] [ForceInline] +[require(glsl_spirv, rayquery)] public vec3 rayQueryGetWorldRayDirectionEXT(rayQueryEXT q) { return q.WorldRayDirection(); } __glsl_extension(GL_EXT_ray_query) -[require(glsl, rayquery)] -[require(spirv, rayquery)] [ForceInline] +[require(glsl_spirv, rayquery)] public float rayQueryGetIntersectionTEXT(rayQueryEXT q, bool committed) { if (committed) @@ -3871,9 +4103,8 @@ public float rayQueryGetIntersectionTEXT(rayQueryEXT q, bool committed) } __glsl_extension(GL_EXT_ray_query) -[require(glsl, rayquery)] -[require(spirv, rayquery)] [ForceInline] +[require(glsl_spirv, rayquery)] public int rayQueryGetIntersectionInstanceCustomIndexEXT(rayQueryEXT q, bool committed) { if (committed) @@ -3887,9 +4118,8 @@ public int rayQueryGetIntersectionInstanceCustomIndexEXT(rayQueryEXT q, bool com } __glsl_extension(GL_EXT_ray_query) -[require(glsl, rayquery)] -[require(spirv, rayquery)] [ForceInline] +[require(glsl_spirv, rayquery)] public int rayQueryGetIntersectionInstanceIdEXT(rayQueryEXT q, bool committed) { if (committed) @@ -3903,9 +4133,8 @@ public int rayQueryGetIntersectionInstanceIdEXT(rayQueryEXT q, bool committed) } __glsl_extension(GL_EXT_ray_query) -[require(glsl, rayquery)] -[require(spirv, rayquery)] [ForceInline] +[require(glsl_spirv, rayquery)] public uint rayQueryGetIntersectionInstanceShaderBindingTableRecordOffsetEXT(rayQueryEXT q, bool committed) { if (committed) @@ -3919,9 +4148,8 @@ public uint rayQueryGetIntersectionInstanceShaderBindingTableRecordOffsetEXT(ray } __glsl_extension(GL_EXT_ray_query) -[require(glsl, rayquery)] -[require(spirv, rayquery)] [ForceInline] +[require(glsl_spirv, rayquery)] public int rayQueryGetIntersectionGeometryIndexEXT(rayQueryEXT q, bool committed) { if (committed) @@ -3935,9 +4163,8 @@ public int rayQueryGetIntersectionGeometryIndexEXT(rayQueryEXT q, bool committed } __glsl_extension(GL_EXT_ray_query) -[require(glsl, rayquery)] -[require(spirv, rayquery)] [ForceInline] +[require(glsl_spirv, rayquery)] public int rayQueryGetIntersectionPrimitiveIndexEXT(rayQueryEXT q, bool committed) { if (committed) @@ -3951,9 +4178,8 @@ public int rayQueryGetIntersectionPrimitiveIndexEXT(rayQueryEXT q, bool committe } __glsl_extension(GL_EXT_ray_query) -[require(glsl, rayquery)] -[require(spirv, rayquery)] [ForceInline] +[require(glsl_spirv, rayquery)] public vec2 rayQueryGetIntersectionBarycentricsEXT(rayQueryEXT q, bool committed) { if (committed) @@ -3967,9 +4193,8 @@ public vec2 rayQueryGetIntersectionBarycentricsEXT(rayQueryEXT q, bool committed } __glsl_extension(GL_EXT_ray_query) -[require(glsl, rayquery)] -[require(spirv, rayquery)] [ForceInline] +[require(glsl_spirv, rayquery)] public bool rayQueryGetIntersectionFrontFaceEXT(rayQueryEXT q, bool committed) { if (committed) @@ -3983,17 +4208,15 @@ public bool rayQueryGetIntersectionFrontFaceEXT(rayQueryEXT q, bool committed) } __glsl_extension(GL_EXT_ray_query) -[require(glsl, rayquery)] -[require(spirv, rayquery)] [ForceInline] +[require(glsl_spirv, rayquery)] public bool rayQueryGetIntersectionCandidateAABBOpaqueEXT(rayQueryEXT q) { return q.CandidateProceduralPrimitiveNonOpaque(); } -[require(glsl, rayquery)] -[require(spirv, rayquery)] [ForceInline] +[require(glsl_spirv, rayquery)] public vec3 rayQueryGetIntersectionObjectRayDirectionEXT(rayQueryEXT q, bool committed) { if (committed) @@ -4007,9 +4230,8 @@ public vec3 rayQueryGetIntersectionObjectRayDirectionEXT(rayQueryEXT q, bool com } __glsl_extension(GL_EXT_ray_query) -[require(glsl, rayquery)] -[require(spirv, rayquery)] [ForceInline] +[require(glsl_spirv, rayquery)] public vec3 rayQueryGetIntersectionObjectRayOriginEXT(rayQueryEXT q, bool committed) { if (committed) @@ -4023,9 +4245,8 @@ public vec3 rayQueryGetIntersectionObjectRayOriginEXT(rayQueryEXT q, bool commit } __glsl_extension(GL_EXT_ray_query) -[require(glsl, rayquery)] -[require(spirv, rayquery)] [ForceInline] +[require(glsl_spirv, rayquery)] public mat4x3 rayQueryGetIntersectionObjectToWorldEXT(rayQueryEXT q, bool committed) { if (committed) @@ -4039,9 +4260,8 @@ public mat4x3 rayQueryGetIntersectionObjectToWorldEXT(rayQueryEXT q, bool commit } __glsl_extension(GL_EXT_ray_query) -[require(glsl, rayquery)] -[require(spirv, rayquery)] [ForceInline] +[require(glsl_spirv, rayquery)] public mat4x3 rayQueryGetIntersectionWorldToObjectEXT(rayQueryEXT q, bool committed) { if (committed) @@ -4059,9 +4279,8 @@ public mat4x3 rayQueryGetIntersectionWorldToObjectEXT(rayQueryEXT q, bool commit __glsl_extension(GL_EXT_ray_tracing) __glsl_extension(GL_NV_shader_invocation_reorder) __glsl_extension(GLSL_EXT_buffer_reference_uvec2) -[require(glsl, ser)] -[require(spirv, ser)] [ForceInline] +[require(glsl_spirv, ser_raygen_closesthit_miss)] public void hitObjectTraceRayNV( inout hitObjectNV hitObject, accelerationStructureEXT topLevel, @@ -4120,9 +4339,8 @@ __glsl_extension(GL_EXT_ray_tracing) __glsl_extension(GL_NV_shader_invocation_reorder) __glsl_extension(GLSL_EXT_buffer_reference_uvec2) __glsl_extension(GL_NV_ray_tracing_motion_blur) -[require(glsl, ser_motion)] -[require(spirv, ser_motion)] [ForceInline] +[require(glsl_spirv, ser_motion_raygen_closesthit_miss)] public void hitObjectTraceRayMotionNV( inout hitObjectNV hitObject, accelerationStructureEXT topLevel, @@ -4185,9 +4403,8 @@ public void hitObjectTraceRayMotionNV( __glsl_extension(GL_EXT_ray_tracing) __glsl_extension(GL_NV_shader_invocation_reorder) __glsl_extension(GLSL_EXT_buffer_reference_uvec2) -[require(glsl, ser)] -[require(spirv, ser)] [ForceInline] +[require(glsl_spirv, ser_raygen_closesthit_miss)] public void hitObjectRecordHitNV( inout hitObjectNV hitObject, accelerationStructureEXT topLevel, @@ -4249,9 +4466,8 @@ __glsl_extension(GL_EXT_ray_tracing) __glsl_extension(GL_NV_shader_invocation_reorder) __glsl_extension(GLSL_EXT_buffer_reference_uvec2) __glsl_extension(GL_NV_ray_tracing_motion_blur) -[require(glsl, ser_motion)] -[require(spirv, ser_motion)] [ForceInline] +[require(glsl_spirv, ser_motion_raygen_closesthit_miss)] public void hitObjectRecordHitMotionNV( inout hitObjectNV hitObject, accelerationStructureEXT topLevel, @@ -4315,9 +4531,8 @@ public void hitObjectRecordHitMotionNV( __glsl_extension(GL_EXT_ray_tracing) __glsl_extension(GL_NV_shader_invocation_reorder) __glsl_extension(GLSL_EXT_buffer_reference_uvec2) -[require(glsl, ser)] -[require(spirv, ser)] [ForceInline] +[require(glsl_spirv, ser_raygen_closesthit_miss)] public void hitObjectRecordHitWithIndexNV( inout hitObjectNV hitObject, accelerationStructureEXT topLevel, @@ -4376,9 +4591,8 @@ __glsl_extension(GL_EXT_ray_tracing) __glsl_extension(GL_NV_shader_invocation_reorder) __glsl_extension(GLSL_EXT_buffer_reference_uvec2) __glsl_extension(GL_NV_ray_tracing_motion_blur) -[require(glsl, ser_motion)] -[require(spirv, ser_motion)] [ForceInline] +[require(glsl_spirv, ser_motion_raygen_closesthit_miss)] public void hitObjectRecordHitWithIndexMotionNV( inout hitObjectNV hitObject, accelerationStructureEXT topLevel, @@ -4441,9 +4655,8 @@ public void hitObjectRecordHitWithIndexMotionNV( __glsl_extension(GL_EXT_ray_tracing) __glsl_extension(GL_NV_shader_invocation_reorder) __glsl_extension(GLSL_EXT_buffer_reference_uvec2) -[require(glsl, ser)] -[require(spirv, ser)] [ForceInline] +[require(glsl_spirv, ser_raygen_closesthit_miss)] public void hitObjectRecordMissNV( inout hitObjectNV hitObject, uint sbtRecordIndex, @@ -4462,9 +4675,8 @@ __glsl_extension(GL_EXT_ray_tracing) __glsl_extension(GL_NV_shader_invocation_reorder) __glsl_extension(GLSL_EXT_buffer_reference_uvec2) __glsl_extension(GL_NV_ray_tracing_motion_blur) -[require(glsl, ser_motion)] -[require(spirv, ser_motion)] [ForceInline] +[require(glsl_spirv, ser_motion_raygen_closesthit_miss)] public void hitObjectRecordMissMotionNV( inout hitObjectNV hitObject, uint sbtRecordIndex, @@ -4484,9 +4696,8 @@ public void hitObjectRecordMissMotionNV( __glsl_extension(GL_EXT_ray_tracing) __glsl_extension(GL_NV_shader_invocation_reorder) __glsl_extension(GLSL_EXT_buffer_reference_uvec2) -[require(glsl, ser)] -[require(spirv, ser)] [ForceInline] +[require(glsl_spirv, ser_raygen_closesthit_miss)] public void hitObjectRecordEmptyNV(hitObjectNV hitObject) { hitObject = HitObject::MakeNop(); @@ -4495,9 +4706,8 @@ public void hitObjectRecordEmptyNV(hitObjectNV hitObject) __glsl_extension(GL_EXT_ray_tracing) __glsl_extension(GL_NV_shader_invocation_reorder) __glsl_extension(GLSL_EXT_buffer_reference_uvec2) -[require(glsl, ser)] -[require(spirv, ser)] [ForceInline] +[require(glsl_spirv, ser_raygen_closesthit_miss)] public void hitObjectExecuteShaderNV( inout hitObjectNV hitObject, constexpr int payload) @@ -4521,9 +4731,8 @@ public void hitObjectExecuteShaderNV( __glsl_extension(GL_EXT_ray_tracing) __glsl_extension(GL_NV_shader_invocation_reorder) __glsl_extension(GLSL_EXT_buffer_reference_uvec2) -[require(glsl, ser)] -[require(spirv, ser)] [ForceInline] +[require(glsl_spirv, ser_raygen_closesthit_miss)] public bool hitObjectIsEmptyNV(hitObjectNV hitObject) { return hitObject.IsNop(); @@ -4532,9 +4741,8 @@ public bool hitObjectIsEmptyNV(hitObjectNV hitObject) __glsl_extension(GL_EXT_ray_tracing) __glsl_extension(GL_NV_shader_invocation_reorder) __glsl_extension(GLSL_EXT_buffer_reference_uvec2) -[require(glsl, ser)] -[require(spirv, ser)] [ForceInline] +[require(glsl_spirv, ser_raygen_closesthit_miss)] public bool hitObjectIsMissNV(hitObjectNV hitObject) { return hitObject.IsMiss(); @@ -4543,9 +4751,8 @@ public bool hitObjectIsMissNV(hitObjectNV hitObject) __glsl_extension(GL_EXT_ray_tracing) __glsl_extension(GL_NV_shader_invocation_reorder) __glsl_extension(GLSL_EXT_buffer_reference_uvec2) -[require(glsl, ser)] -[require(spirv, ser)] [ForceInline] +[require(glsl_spirv, ser_raygen_closesthit_miss)] public bool hitObjectIsHitNV(hitObjectNV hitObject) { return hitObject.IsHit(); @@ -4554,9 +4761,8 @@ public bool hitObjectIsHitNV(hitObjectNV hitObject) __glsl_extension(GL_EXT_ray_tracing) __glsl_extension(GL_NV_shader_invocation_reorder) __glsl_extension(GLSL_EXT_buffer_reference_uvec2) -[require(glsl, ser)] -[require(spirv, ser)] [ForceInline] +[require(glsl_spirv, ser_raygen_closesthit_miss)] public float hitObjectGetRayTMinNV(hitObjectNV hitObject) { return hitObject.GetRayDesc().TMin; @@ -4565,9 +4771,8 @@ public float hitObjectGetRayTMinNV(hitObjectNV hitObject) __glsl_extension(GL_EXT_ray_tracing) __glsl_extension(GL_NV_shader_invocation_reorder) __glsl_extension(GLSL_EXT_buffer_reference_uvec2) -[require(glsl, ser)] -[require(spirv, ser)] [ForceInline] +[require(glsl_spirv, ser_raygen_closesthit_miss)] public float hitObjectGetRayTMaxNV(hitObjectNV hitObject) { return hitObject.GetRayDesc().TMax; @@ -4576,9 +4781,8 @@ public float hitObjectGetRayTMaxNV(hitObjectNV hitObject) __glsl_extension(GL_EXT_ray_tracing) __glsl_extension(GL_NV_shader_invocation_reorder) __glsl_extension(GLSL_EXT_buffer_reference_uvec2) -[require(glsl, ser)] -[require(spirv, ser)] [ForceInline] +[require(glsl_spirv, ser_raygen_closesthit_miss)] public vec3 hitObjectGetWorldRayOriginNV(hitObjectNV hitObject) { return hitObject.GetRayDesc().Origin; @@ -4587,9 +4791,8 @@ public vec3 hitObjectGetWorldRayOriginNV(hitObjectNV hitObject) __glsl_extension(GL_EXT_ray_tracing) __glsl_extension(GL_NV_shader_invocation_reorder) __glsl_extension(GLSL_EXT_buffer_reference_uvec2) -[require(glsl, ser)] -[require(spirv, ser)] [ForceInline] +[require(glsl_spirv, ser_raygen_closesthit_miss)] public vec3 hitObjectGetWorldRayDirectionNV(hitObjectNV hitObject) { return hitObject.GetRayDesc().Direction; @@ -4598,9 +4801,8 @@ public vec3 hitObjectGetWorldRayDirectionNV(hitObjectNV hitObject) __glsl_extension(GL_EXT_ray_tracing) __glsl_extension(GL_NV_shader_invocation_reorder) __glsl_extension(GLSL_EXT_buffer_reference_uvec2) -[require(glsl, ser)] -[require(spirv, ser)] [ForceInline] +[require(glsl_spirv, ser_raygen_closesthit_miss)] public vec3 hitObjectGetObjectRayOriginNV(hitObjectNV hitObject) { return hitObject.GetObjectRayOrigin(); @@ -4609,9 +4811,8 @@ public vec3 hitObjectGetObjectRayOriginNV(hitObjectNV hitObject) __glsl_extension(GL_EXT_ray_tracing) __glsl_extension(GL_NV_shader_invocation_reorder) __glsl_extension(GLSL_EXT_buffer_reference_uvec2) -[require(glsl, ser)] -[require(spirv, ser)] [ForceInline] +[require(glsl_spirv, ser_raygen_closesthit_miss)] public vec3 hitObjectGetObjectRayDirectionNV(hitObjectNV hitObject) { return hitObject.GetObjectRayDirection(); @@ -4620,9 +4821,8 @@ public vec3 hitObjectGetObjectRayDirectionNV(hitObjectNV hitObject) __glsl_extension(GL_EXT_ray_tracing) __glsl_extension(GL_NV_shader_invocation_reorder) __glsl_extension(GLSL_EXT_buffer_reference_uvec2) -[require(glsl, ser)] -[require(spirv, ser)] [ForceInline] +[require(glsl_spirv, ser_raygen_closesthit_miss)] public mat4x3 hitObjectGetObjectToWorldNV(hitObjectNV hitObject) { return transpose(hitObject.GetObjectToWorld()); @@ -4631,9 +4831,8 @@ public mat4x3 hitObjectGetObjectToWorldNV(hitObjectNV hitObject) __glsl_extension(GL_EXT_ray_tracing) __glsl_extension(GL_NV_shader_invocation_reorder) __glsl_extension(GLSL_EXT_buffer_reference_uvec2) -[require(glsl, ser)] -[require(spirv, ser)] [ForceInline] +[require(glsl_spirv, ser_raygen_closesthit_miss)] public mat4x3 hitObjectGetWorldToObjectNV(hitObjectNV hitObject) { return transpose(hitObject.GetWorldToObject()); @@ -4642,9 +4841,8 @@ public mat4x3 hitObjectGetWorldToObjectNV(hitObjectNV hitObject) __glsl_extension(GL_EXT_ray_tracing) __glsl_extension(GL_NV_shader_invocation_reorder) __glsl_extension(GLSL_EXT_buffer_reference_uvec2) -[require(glsl, ser)] -[require(spirv, ser)] [ForceInline] +[require(glsl_spirv, ser_raygen_closesthit_miss)] public int hitObjectGetInstanceCustomIndexNV(hitObjectNV hitObject) { return hitObject.GetInstanceID(); @@ -4653,17 +4851,18 @@ public int hitObjectGetInstanceCustomIndexNV(hitObjectNV hitObject) __glsl_extension(GL_EXT_ray_tracing) __glsl_extension(GL_NV_shader_invocation_reorder) __glsl_extension(GLSL_EXT_buffer_reference_uvec2) -[require(glsl, ser)] -[require(spirv, ser)] [ForceInline] +[require(glsl_spirv, ser_raygen_closesthit_miss)] public int hitObjectGetInstanceIdNV(hitObjectNV hitObject) { return hitObject.GetInstanceIndex(); } -[require(glsl, ser)] -[require(spirv, ser)] +__glsl_extension(GL_EXT_ray_tracing) +__glsl_extension(GL_NV_shader_invocation_reorder) +__glsl_extension(GLSL_EXT_buffer_reference_uvec2) [ForceInline] +[require(glsl_spirv, ser_raygen_closesthit_miss)] public int hitObjectGetGeometryIndexNV(hitObjectNV hitObject) { return hitObject.GetGeometryIndex(); @@ -4672,9 +4871,8 @@ public int hitObjectGetGeometryIndexNV(hitObjectNV hitObject) __glsl_extension(GL_EXT_ray_tracing) __glsl_extension(GL_NV_shader_invocation_reorder) __glsl_extension(GLSL_EXT_buffer_reference_uvec2) -[require(glsl, ser)] -[require(spirv, ser)] [ForceInline] +[require(glsl_spirv, ser_raygen_closesthit_miss)] public int hitObjectGetPrimitiveIndexNV(hitObjectNV hitObject) { return hitObject.GetPrimitiveIndex(); @@ -4683,9 +4881,8 @@ public int hitObjectGetPrimitiveIndexNV(hitObjectNV hitObject) __glsl_extension(GL_EXT_ray_tracing) __glsl_extension(GL_NV_shader_invocation_reorder) __glsl_extension(GLSL_EXT_buffer_reference_uvec2) -[require(glsl, ser)] -[require(spirv, ser)] [ForceInline] +[require(glsl_spirv, ser_raygen_closesthit_miss)] public uint hitObjectGetHitKindNV(hitObjectNV hitObject) { return hitObject.GetHitKind(); @@ -4694,9 +4891,8 @@ public uint hitObjectGetHitKindNV(hitObjectNV hitObject) __glsl_extension(GL_EXT_ray_tracing) __glsl_extension(GL_NV_shader_invocation_reorder) __glsl_extension(GLSL_EXT_buffer_reference_uvec2) -[require(glsl, ser)] -[require(spirv, ser)] [ForceInline] +[require(glsl_spirv, ser_raygen_closesthit_miss)] public void hitObjectGetAttributesNV( inout hitObjectNV hitObject, constexpr int attributeLocation) @@ -4721,9 +4917,8 @@ public void hitObjectGetAttributesNV( __glsl_extension(GL_EXT_ray_tracing) __glsl_extension(GL_NV_shader_invocation_reorder) __glsl_extension(GLSL_EXT_buffer_reference_uvec2) -[require(glsl, ser)] -[require(spirv, ser)] [ForceInline] +[require(glsl_spirv, ser_raygen_closesthit_miss)] public uvec2 hitObjectGetShaderRecordBufferHandleNV(hitObjectNV hitObject) { return hitObject.GetShaderRecordBufferHandle(); @@ -4732,9 +4927,8 @@ public uvec2 hitObjectGetShaderRecordBufferHandleNV(hitObjectNV hitObject) __glsl_extension(GL_EXT_ray_tracing) __glsl_extension(GL_NV_shader_invocation_reorder) __glsl_extension(GLSL_EXT_buffer_reference_uvec2) -[require(glsl, ser)] -[require(spirv, ser)] [ForceInline] +[require(glsl_spirv, ser_raygen_closesthit_miss)] public uint hitObjectGetShaderBindingTableRecordIndexNV(hitObjectNV hitObject) { return hitObject.GetShaderTableIndex(); @@ -4743,9 +4937,8 @@ public uint hitObjectGetShaderBindingTableRecordIndexNV(hitObjectNV hitObject) __glsl_extension(GL_EXT_ray_tracing) __glsl_extension(GL_NV_shader_invocation_reorder) __glsl_extension(GLSL_EXT_buffer_reference_uvec2) -[require(glsl, ser)] -[require(spirv, ser)] [ForceInline] +[require(glsl_spirv, ser_raygen_closesthit_miss)] public float hitObjectGetCurrentTimeNV(hitObjectNV hitObject) { return hitObject.GetCurrentTime(); @@ -4754,9 +4947,8 @@ public float hitObjectGetCurrentTimeNV(hitObjectNV hitObject) __glsl_extension(GL_EXT_ray_tracing) __glsl_extension(GL_NV_shader_invocation_reorder) __glsl_extension(GLSL_EXT_buffer_reference_uvec2) -[require(glsl, ser)] -[require(spirv, ser)] [ForceInline] +[require(glsl_spirv, ser_raygen)] public void reorderThreadNV(uint hint, uint bits) { ReorderThread(hint, bits); @@ -4765,9 +4957,8 @@ public void reorderThreadNV(uint hint, uint bits) __glsl_extension(GL_EXT_ray_tracing) __glsl_extension(GL_NV_shader_invocation_reorder) __glsl_extension(GLSL_EXT_buffer_reference_uvec2) -[require(glsl, ser)] -[require(spirv, ser)] [ForceInline] +[require(glsl_spirv, ser_raygen)] public void reorderThreadNV(hitObjectNV hitObject) { ReorderThread(hitObject); @@ -4776,9 +4967,8 @@ public void reorderThreadNV(hitObjectNV hitObject) __glsl_extension(GL_EXT_ray_tracing) __glsl_extension(GL_NV_shader_invocation_reorder) __glsl_extension(GLSL_EXT_buffer_reference_uvec2) -[require(glsl, ser)] -[require(spirv, ser)] [ForceInline] +[require(glsl_spirv, ser_raygen)] public void reorderThreadNV(hitObjectNV hitObject, uint hint, uint bits) { ReorderThread(hitObject, hint, bits); @@ -4786,10 +4976,9 @@ public void reorderThreadNV(hitObjectNV hitObject, uint hint, uint bits) /// GL_NV_ray_tracing_motion_blur -[require(glsl, raytracing_motionblur)] -[require(spirv, raytracing_motionblur)] public property float gl_CurrentRayTimeNV { + [require(glsl_spirv, raytracing_motionblur_anyhit_closesthit_intersection_miss)] get { __target_switch @@ -4809,9 +4998,8 @@ public property float gl_CurrentRayTimeNV __glsl_extension(GL_EXT_ray_tracing) __glsl_extension(GL_NV_ray_tracing_motion_blur) -[require(glsl, raytracing_motionblur)] -[require(spirv, raytracing_motionblur)] [ForceInline] +[require(glsl_spirv, raytracing_motionblur_raygen_closesthit_miss)] public void traceRayMotionNV( accelerationStructureEXT topLevel, uint rayFlags, @@ -4901,7 +5089,7 @@ void shader_subgroup_preamble() { { case glsl: typeRequireChecks_shader_subgroup_GLSL<T>(); - case spirv: + default: return; } @@ -4909,50 +5097,57 @@ void shader_subgroup_preamble() { // GL_KHR_shader_subgroup_basic Built-in Variables +[require(cpp_cuda_glsl_hlsl_spirv, subgroup_basic)] void requireGLSLExtForSubgroupBasicBuiltin() { __target_switch { case glsl: __requireGLSLExtension("GL_KHR_shader_subgroup_basic"); __intrinsic_asm ""; + default: + return; } } -__spirv_version(1.3) +[require(cpp_cuda_glsl_hlsl_spirv, subgroup_basic)] void setupExtForSubgroupBasicBuiltIn() { __target_switch { case glsl: requireGLSLExtForSubgroupBasicBuiltin(); - case spirv: + default: return; } } +__spirv_version(1.3) +[require(cpp_cuda_glsl_hlsl_spirv, subgroup_ballot)] void requireGLSLExtForSubgroupBallotBuiltin() { __target_switch { case glsl: __requireGLSLExtension("GL_KHR_shader_subgroup_ballot"); __intrinsic_asm ""; + default: + return; } } -__spirv_version(1.3) +__spirv_version(1.3) +[require(cpp_cuda_glsl_hlsl_spirv, subgroup_ballot)] void setupExtForSubgroupBallotBuiltIn() { __target_switch { case glsl: requireGLSLExtForSubgroupBallotBuiltin(); - case spirv: + default: return; } } -[require(glsl)] -[require(spirv)] public property uint gl_NumSubgroups { + [require(glsl_spirv, subgroup_basic)] get { setupExtForSubgroupBasicBuiltIn(); __target_switch @@ -4969,10 +5164,9 @@ public property uint gl_NumSubgroups { } } -[require(glsl)] -[require(spirv)] public property uint gl_SubgroupID { + [require(glsl_spirv, subgroup_basic)] get { setupExtForSubgroupBasicBuiltIn(); __target_switch @@ -4988,30 +5182,27 @@ public property uint gl_SubgroupID } } -[require(glsl)] -[require(spirv)] public property uint gl_SubgroupSize { + [require(cpp_cuda_glsl_hlsl_spirv, subgroup_basic)] get { setupExtForSubgroupBasicBuiltIn(); return WaveGetLaneCount(); } } -[require(glsl)] -[require(spirv)] public property uint gl_SubgroupInvocationID { + [require(cpp_cuda_glsl_hlsl_spirv, subgroup_basic)] get { setupExtForSubgroupBasicBuiltIn(); return WaveGetLaneIndex(); } } -[require(glsl)] -[require(spirv)] public property uvec4 gl_SubgroupEqMask { + [require(glsl_spirv, subgroup_basic_ballot)] get { setupExtForSubgroupBasicBuiltIn(); setupExtForSubgroupBallotBuiltIn(); @@ -5028,10 +5219,9 @@ public property uvec4 gl_SubgroupEqMask } } -[require(glsl)] -[require(spirv)] public property uvec4 gl_SubgroupGeMask { + [require(glsl_spirv, subgroup_basic_ballot)] get { setupExtForSubgroupBasicBuiltIn(); setupExtForSubgroupBallotBuiltIn(); @@ -5048,10 +5238,9 @@ public property uvec4 gl_SubgroupGeMask } } -[require(glsl)] -[require(spirv)] public property uvec4 gl_SubgroupGtMask { + [require(glsl_spirv, subgroup_basic_ballot)] get { setupExtForSubgroupBasicBuiltIn(); setupExtForSubgroupBallotBuiltIn(); @@ -5068,10 +5257,9 @@ public property uvec4 gl_SubgroupGtMask } } -[require(glsl)] -[require(spirv)] public property uvec4 gl_SubgroupLeMask { + [require(glsl_spirv, subgroup_basic_ballot)] get { setupExtForSubgroupBasicBuiltIn(); setupExtForSubgroupBallotBuiltIn(); @@ -5088,10 +5276,9 @@ public property uvec4 gl_SubgroupLeMask } } -[require(glsl)] -[require(spirv)] public property uvec4 gl_SubgroupLtMask { + [require(glsl_spirv, subgroup_basic_ballot)] get { setupExtForSubgroupBasicBuiltIn(); setupExtForSubgroupBallotBuiltIn(); @@ -5110,9 +5297,11 @@ public property uvec4 gl_SubgroupLtMask // GL_KHR_shader_subgroup_basic -__glsl_extension(GL_KHR_shader_subgroup_basic) [require(glsl)] -__spirv_version(1.3) [require(spirv)] -[ForceInline] public void subgroupBarrier() +__spirv_version(1.3) +__glsl_extension(GL_KHR_shader_subgroup_basic) +[ForceInline] +[require(cuda_glsl_hlsl_spirv, subgroup_basic)] +public void subgroupBarrier() { __target_switch { @@ -5131,9 +5320,11 @@ __spirv_version(1.3) [require(spirv)] } } -__glsl_extension(GL_KHR_shader_subgroup_basic) [require(glsl)] -__spirv_version(1.3) [require(spirv)] -[ForceInline] public void subgroupMemoryBarrier() +__spirv_version(1.3) +__glsl_extension(GL_KHR_shader_subgroup_basic) +[ForceInline] +[require(cuda_glsl_hlsl_spirv, subgroup_basic)] +public void subgroupMemoryBarrier() { __target_switch { @@ -5152,9 +5343,11 @@ __spirv_version(1.3) [require(spirv)] } } -__glsl_extension(GL_KHR_shader_subgroup_basic) [require(glsl)] -__spirv_version(1.3) [require(spirv)] -[ForceInline] public void subgroupMemoryBarrierBuffer() +__spirv_version(1.3) +__glsl_extension(GL_KHR_shader_subgroup_basic) +[ForceInline] +[require(cuda_glsl_hlsl_spirv, subgroup_basic)] +public void subgroupMemoryBarrierBuffer() { // the following implementation is NOT the same as DeviceMemoryBarrier // HLSL lacks the same granularity of blocking on subgroup memory within a subgroup @@ -5175,9 +5368,11 @@ __spirv_version(1.3) [require(spirv)] } } -__glsl_extension(GL_KHR_shader_subgroup_basic) [require(glsl)] -__spirv_version(1.3) [require(spirv)] -[ForceInline] public void subgroupMemoryBarrierImage() +__spirv_version(1.3) +__glsl_extension(GL_KHR_shader_subgroup_basic) +[ForceInline] +[require(cuda_glsl_hlsl_spirv, subgroup_basic)] +public void subgroupMemoryBarrierImage() { __target_switch { @@ -5195,9 +5390,11 @@ __spirv_version(1.3) [require(spirv)] } } -__glsl_extension(GL_KHR_shader_subgroup_basic) [require(glsl)] -__spirv_version(1.3) [require(spirv)] -[ForceInline] public void subgroupMemoryBarrierShared() +__spirv_version(1.3) +__glsl_extension(GL_KHR_shader_subgroup_basic) +[ForceInline] +[require(cuda_glsl_hlsl_spirv, subgroup_basic)] +public void subgroupMemoryBarrierShared() { __target_switch { @@ -5217,9 +5414,11 @@ __spirv_version(1.3) [require(spirv)] } } -__glsl_extension(GL_KHR_shader_subgroup_basic) [require(glsl)] -__spirv_version(1.3) [require(spirv)] -[ForceInline] public bool subgroupElect() +__spirv_version(1.3) +__glsl_extension(GL_KHR_shader_subgroup_basic) +[ForceInline] +[require(cuda_glsl_hlsl_spirv, subgroup_basic)] +public bool subgroupElect() { __target_switch { @@ -5235,36 +5434,41 @@ __spirv_version(1.3) [require(spirv)] // GL_KHR_shader_subgroup_vote -__glsl_extension(GL_KHR_shader_subgroup_vote) [require(glsl)] -__spirv_version(1.3) [require(spirv)] -[ForceInline] public bool subgroupAll(bool value) +__spirv_version(1.3) +__glsl_extension(GL_KHR_shader_subgroup_vote) +[ForceInline] +[require(cuda_glsl_hlsl_spirv, subgroup_vote)] +public bool subgroupAll(bool value) { - return WaveActiveAllTrue(value); - } -__glsl_extension(GL_KHR_shader_subgroup_vote) [require(glsl)] -__spirv_version(1.3) [require(spirv)] -[ForceInline] public bool subgroupAny(bool value) +__spirv_version(1.3) +__glsl_extension(GL_KHR_shader_subgroup_vote) +[ForceInline] +[require(cuda_glsl_hlsl_spirv, subgroup_vote)] +public bool subgroupAny(bool value) { return WaveActiveAnyTrue(value); - } __generic<T : __BuiltinType> -__glsl_extension(GL_KHR_shader_subgroup_vote) [require(glsl)] -__spirv_version(1.3) [require(spirv)] -[ForceInline] public bool subgroupAllEqual(T value) +__spirv_version(1.3) +__glsl_extension(GL_KHR_shader_subgroup_vote) +[ForceInline] +[require(cuda_glsl_hlsl_spirv, subgroup_vote)] +public bool subgroupAllEqual(T value) { shader_subgroup_preamble<T>(); return WaveActiveAllEqual(value); } __generic<T : __BuiltinType, let N : int> -__glsl_extension(GL_KHR_shader_subgroup_vote) [require(glsl)] -__spirv_version(1.3) [require(spirv)] -[ForceInline] public bool subgroupAllEqual(vector<T,N> value) +__spirv_version(1.3) +__glsl_extension(GL_KHR_shader_subgroup_vote) +[ForceInline] +[require(cuda_glsl_hlsl_spirv, subgroup_vote)] +public bool subgroupAllEqual(vector<T,N> value) { shader_subgroup_preamble<T>(); return WaveActiveAllEqual(value); @@ -5273,45 +5477,55 @@ __spirv_version(1.3) [require(spirv)] // GL_KHR_shader_subgroup_arithmetic __generic<T : __BuiltinArithmeticType> -__glsl_extension(GL_KHR_shader_subgroup_arithmetic) [require(glsl)] -__spirv_version(1.3) [require(spirv)] -[ForceInline] public T subgroupAdd(T value) +__spirv_version(1.3) +__glsl_extension(GL_KHR_shader_subgroup_arithmetic) +[ForceInline] +[require(cuda_glsl_hlsl_spirv, subgroup_arithmetic)] +public T subgroupAdd(T value) { shader_subgroup_preamble<T>(); return WaveActiveSum(value); } __generic<T : __BuiltinArithmeticType> -__glsl_extension(GL_KHR_shader_subgroup_arithmetic) [require(glsl)] -__spirv_version(1.3) [require(spirv)] -[ForceInline] public T subgroupMul(T value) +__spirv_version(1.3) +__glsl_extension(GL_KHR_shader_subgroup_arithmetic) +[ForceInline] +[require(cuda_glsl_hlsl_spirv, subgroup_arithmetic)] +public T subgroupMul(T value) { shader_subgroup_preamble<T>(); return WaveActiveProduct(value); } __generic<T : __BuiltinArithmeticType> -__glsl_extension(GL_KHR_shader_subgroup_arithmetic) [require(glsl)] -__spirv_version(1.3) [require(spirv)] -[ForceInline] public T subgroupMin(T value) +__spirv_version(1.3) +__glsl_extension(GL_KHR_shader_subgroup_arithmetic) +[ForceInline] +[require(cuda_glsl_hlsl_spirv, subgroup_arithmetic)] +public T subgroupMin(T value) { shader_subgroup_preamble<T>(); return WaveActiveMin(value); } __generic<T : __BuiltinArithmeticType> -__glsl_extension(GL_KHR_shader_subgroup_arithmetic) [require(glsl)] -__spirv_version(1.3) [require(spirv)] -[ForceInline] public T subgroupMax(T value) +__spirv_version(1.3) +__glsl_extension(GL_KHR_shader_subgroup_arithmetic) +[ForceInline] +[require(cuda_glsl_hlsl_spirv, subgroup_arithmetic)] +public T subgroupMax(T value) { shader_subgroup_preamble<T>(); return WaveActiveMax(value); } __generic<T : __BuiltinLogicalType> -__glsl_extension(GL_KHR_shader_subgroup_arithmetic) [require(glsl)] -__spirv_version(1.3) [require(spirv)] -[ForceInline] public T subgroupAnd(T value) +__spirv_version(1.3) +__glsl_extension(GL_KHR_shader_subgroup_arithmetic) +[ForceInline] +[require(glsl_spirv, subgroup_arithmetic)] +public T subgroupAnd(T value) { shader_subgroup_preamble<T>(); __target_switch @@ -5334,9 +5548,11 @@ __spirv_version(1.3) [require(spirv)] } __generic<T : __BuiltinLogicalType> -__glsl_extension(GL_KHR_shader_subgroup_arithmetic) [require(glsl)] -__spirv_version(1.3) [require(spirv)] -[ForceInline] public T subgroupOr(T value) +__spirv_version(1.3) +__glsl_extension(GL_KHR_shader_subgroup_arithmetic) +[ForceInline] +[require(glsl_spirv, subgroup_arithmetic)] +public T subgroupOr(T value) { shader_subgroup_preamble<T>(); __target_switch @@ -5359,9 +5575,11 @@ __spirv_version(1.3) [require(spirv)] } __generic<T : __BuiltinLogicalType> -__glsl_extension(GL_KHR_shader_subgroup_arithmetic) [require(glsl)] -__spirv_version(1.3) [require(spirv)] -[ForceInline] public T subgroupXor(T value) +__spirv_version(1.3) +__glsl_extension(GL_KHR_shader_subgroup_arithmetic) +[ForceInline] +[require(glsl_spirv, subgroup_arithmetic)] +public T subgroupXor(T value) { shader_subgroup_preamble<T>(); __target_switch @@ -5384,9 +5602,11 @@ __spirv_version(1.3) [require(spirv)] } __generic<T : __BuiltinArithmeticType> -__glsl_extension(GL_KHR_shader_subgroup_arithmetic) [require(glsl)] -__spirv_version(1.3) [require(spirv)] -[ForceInline] public T subgroupInclusiveAdd(T value) +__spirv_version(1.3) +__glsl_extension(GL_KHR_shader_subgroup_arithmetic) +[ForceInline] +[require(glsl_spirv, subgroup_arithmetic)] +public T subgroupInclusiveAdd(T value) { shader_subgroup_preamble<T>(); __target_switch @@ -5403,9 +5623,11 @@ __spirv_version(1.3) [require(spirv)] } __generic<T : __BuiltinArithmeticType> -__glsl_extension(GL_KHR_shader_subgroup_arithmetic) [require(glsl)] -__spirv_version(1.3) [require(spirv)] -[ForceInline] public T subgroupInclusiveMul(T value) +__spirv_version(1.3) +__glsl_extension(GL_KHR_shader_subgroup_arithmetic) +[ForceInline] +[require(glsl_spirv, subgroup_arithmetic)] +public T subgroupInclusiveMul(T value) { shader_subgroup_preamble<T>(); __target_switch @@ -5422,9 +5644,11 @@ __spirv_version(1.3) [require(spirv)] } __generic<T : __BuiltinArithmeticType> -__glsl_extension(GL_KHR_shader_subgroup_arithmetic) [require(glsl)] -__spirv_version(1.3) [require(spirv)] -[ForceInline] public T subgroupInclusiveMin(T value) +__spirv_version(1.3) +__glsl_extension(GL_KHR_shader_subgroup_arithmetic) +[ForceInline] +[require(glsl_spirv, subgroup_arithmetic)] +public T subgroupInclusiveMin(T value) { shader_subgroup_preamble<T>(); __target_switch @@ -5443,9 +5667,11 @@ __spirv_version(1.3) [require(spirv)] } __generic<T : __BuiltinArithmeticType> -__glsl_extension(GL_KHR_shader_subgroup_arithmetic) [require(glsl)] -__spirv_version(1.3) [require(spirv)] -[ForceInline] public T subgroupInclusiveMax(T value) +__spirv_version(1.3) +__glsl_extension(GL_KHR_shader_subgroup_arithmetic) +[ForceInline] +[require(glsl_spirv, subgroup_arithmetic)] +public T subgroupInclusiveMax(T value) { shader_subgroup_preamble<T>(); __target_switch @@ -5464,9 +5690,11 @@ __spirv_version(1.3) [require(spirv)] } __generic<T : __BuiltinLogicalType> -__glsl_extension(GL_KHR_shader_subgroup_arithmetic) [require(glsl)] -__spirv_version(1.3) [require(spirv)] -[ForceInline] public T subgroupInclusiveAnd(T value) +__spirv_version(1.3) +__glsl_extension(GL_KHR_shader_subgroup_arithmetic) +[ForceInline] +[require(glsl_spirv, subgroup_arithmetic)] +public T subgroupInclusiveAnd(T value) { shader_subgroup_preamble<T>(); __target_switch @@ -5489,9 +5717,11 @@ __spirv_version(1.3) [require(spirv)] } __generic<T : __BuiltinLogicalType> -__glsl_extension(GL_KHR_shader_subgroup_arithmetic) [require(glsl)] -__spirv_version(1.3) [require(spirv)] -[ForceInline] public T subgroupInclusiveOr(T value) +__spirv_version(1.3) +__glsl_extension(GL_KHR_shader_subgroup_arithmetic) +[ForceInline] +[require(glsl_spirv, subgroup_arithmetic)] +public T subgroupInclusiveOr(T value) { shader_subgroup_preamble<T>(); __target_switch @@ -5514,9 +5744,11 @@ __spirv_version(1.3) [require(spirv)] } __generic<T : __BuiltinLogicalType> -__glsl_extension(GL_KHR_shader_subgroup_arithmetic) [require(glsl)] -__spirv_version(1.3) [require(spirv)] -[ForceInline] public T subgroupInclusiveXor(T value) +__spirv_version(1.3) +__glsl_extension(GL_KHR_shader_subgroup_arithmetic) +[ForceInline] +[require(glsl_spirv, subgroup_arithmetic)] +public T subgroupInclusiveXor(T value) { shader_subgroup_preamble<T>(); __target_switch @@ -5531,9 +5763,11 @@ __spirv_version(1.3) [require(spirv)] } __generic<T : __BuiltinArithmeticType> -__glsl_extension(GL_KHR_shader_subgroup_arithmetic) [require(glsl)] -__spirv_version(1.3) [require(spirv)] -[ForceInline] public T subgroupExclusiveAdd(T value) +__spirv_version(1.3) +__glsl_extension(GL_KHR_shader_subgroup_arithmetic) +[ForceInline] +[require(cuda_glsl_hlsl_spirv, subgroup_arithmetic)] +public T subgroupExclusiveAdd(T value) { shader_subgroup_preamble<T>(); return WavePrefixSum(value); @@ -5541,18 +5775,22 @@ __spirv_version(1.3) [require(spirv)] __generic<T : __BuiltinArithmeticType> -__glsl_extension(GL_KHR_shader_subgroup_arithmetic) [require(glsl)] -__spirv_version(1.3) [require(spirv)] -[ForceInline] public T subgroupExclusiveMul(T value) +__spirv_version(1.3) +__glsl_extension(GL_KHR_shader_subgroup_arithmetic) +[ForceInline] +[require(cuda_glsl_hlsl_spirv, subgroup_arithmetic)] +public T subgroupExclusiveMul(T value) { shader_subgroup_preamble<T>(); return WavePrefixProduct(value); } __generic<T : __BuiltinArithmeticType> -__glsl_extension(GL_KHR_shader_subgroup_arithmetic) [require(glsl)] -__spirv_version(1.3) [require(spirv)] -[ForceInline] public T subgroupExclusiveMin(T value) +__spirv_version(1.3) +__glsl_extension(GL_KHR_shader_subgroup_arithmetic) +[ForceInline] +[require(glsl_spirv, subgroup_arithmetic)] +public T subgroupExclusiveMin(T value) { shader_subgroup_preamble<T>(); __target_switch @@ -5571,9 +5809,11 @@ __spirv_version(1.3) [require(spirv)] } __generic<T : __BuiltinArithmeticType> -__glsl_extension(GL_KHR_shader_subgroup_arithmetic) [require(glsl)] -__spirv_version(1.3) [require(spirv)] -[ForceInline] public T subgroupExclusiveMax(T value) +__spirv_version(1.3) +__glsl_extension(GL_KHR_shader_subgroup_arithmetic) +[ForceInline] +[require(glsl_spirv, subgroup_arithmetic)] +public T subgroupExclusiveMax(T value) { shader_subgroup_preamble<T>(); __target_switch @@ -5592,9 +5832,11 @@ __spirv_version(1.3) [require(spirv)] } __generic<T : __BuiltinLogicalType> -__glsl_extension(GL_KHR_shader_subgroup_arithmetic) [require(glsl)] -__spirv_version(1.3) [require(spirv)] -[ForceInline] public T subgroupExclusiveAnd(T value) +__spirv_version(1.3) +__glsl_extension(GL_KHR_shader_subgroup_arithmetic) +[ForceInline] +[require(glsl_spirv, subgroup_arithmetic)] +public T subgroupExclusiveAnd(T value) { shader_subgroup_preamble<T>(); __target_switch @@ -5607,9 +5849,11 @@ __spirv_version(1.3) [require(spirv)] } __generic<T : __BuiltinLogicalType> -__glsl_extension(GL_KHR_shader_subgroup_arithmetic) [require(glsl)] -__spirv_version(1.3) [require(spirv)] -[ForceInline] public T subgroupExclusiveOr(T value) +__spirv_version(1.3) +__glsl_extension(GL_KHR_shader_subgroup_arithmetic) +[ForceInline] +[require(glsl_spirv, subgroup_arithmetic)] +public T subgroupExclusiveOr(T value) { shader_subgroup_preamble<T>(); __target_switch @@ -5622,9 +5866,11 @@ __spirv_version(1.3) [require(spirv)] } __generic<T : __BuiltinLogicalType> -__glsl_extension(GL_KHR_shader_subgroup_arithmetic) [require(glsl)] -__spirv_version(1.3) [require(spirv)] -[ForceInline] public T subgroupExclusiveXor(T value) +__spirv_version(1.3) +__glsl_extension(GL_KHR_shader_subgroup_arithmetic) +[ForceInline] +[require(glsl_spirv, subgroup_arithmetic)] +public T subgroupExclusiveXor(T value) { shader_subgroup_preamble<T>(); __target_switch @@ -5640,45 +5886,55 @@ __spirv_version(1.3) [require(spirv)] //note: this is a seperate section because it is so huge that the only reasonable way to implement this is to just regex replace code __generic<T : __BuiltinArithmeticType, let N : int> -__glsl_extension(GL_KHR_shader_subgroup_arithmetic) [require(glsl)] -__spirv_version(1.3) [require(spirv)] -[ForceInline] public vector<T,N> subgroupAdd(vector<T,N> value) +__spirv_version(1.3) +__glsl_extension(GL_KHR_shader_subgroup_arithmetic) +[ForceInline] +[require(cuda_glsl_hlsl_spirv, subgroup_arithmetic)] +public vector<T,N> subgroupAdd(vector<T,N> value) { shader_subgroup_preamble<T>(); return WaveActiveSum(value); } __generic<T : __BuiltinArithmeticType, let N : int> -__glsl_extension(GL_KHR_shader_subgroup_arithmetic) [require(glsl)] -__spirv_version(1.3) [require(spirv)] -[ForceInline] public vector<T,N> subgroupMul(vector<T,N> value) +__spirv_version(1.3) +__glsl_extension(GL_KHR_shader_subgroup_arithmetic) +[ForceInline] +[require(cuda_glsl_hlsl_spirv, subgroup_arithmetic)] +public vector<T,N> subgroupMul(vector<T,N> value) { shader_subgroup_preamble<T>(); return WaveActiveProduct(value); } __generic<T : __BuiltinArithmeticType, let N : int> -__glsl_extension(GL_KHR_shader_subgroup_arithmetic) [require(glsl)] -__spirv_version(1.3) [require(spirv)] -[ForceInline] public vector<T,N> subgroupMin(vector<T,N> value) +__spirv_version(1.3) +__glsl_extension(GL_KHR_shader_subgroup_arithmetic) +[ForceInline] +[require(cuda_glsl_hlsl_spirv, subgroup_arithmetic)] +public vector<T,N> subgroupMin(vector<T,N> value) { shader_subgroup_preamble<T>(); return WaveActiveMin(value); } __generic<T : __BuiltinArithmeticType, let N : int> -__glsl_extension(GL_KHR_shader_subgroup_arithmetic) [require(glsl)] -__spirv_version(1.3) [require(spirv)] -[ForceInline] public vector<T,N> subgroupMax(vector<T,N> value) +__spirv_version(1.3) +__glsl_extension(GL_KHR_shader_subgroup_arithmetic) +[ForceInline] +[require(cuda_glsl_hlsl_spirv, subgroup_arithmetic)] +public vector<T,N> subgroupMax(vector<T,N> value) { shader_subgroup_preamble<T>(); return WaveActiveMax(value); } __generic<T : __BuiltinLogicalType, let N : int> -__glsl_extension(GL_KHR_shader_subgroup_arithmetic) [require(glsl)] -__spirv_version(1.3) [require(spirv)] -[ForceInline] public vector<T,N> subgroupAnd(vector<T,N> value) +__spirv_version(1.3) +__glsl_extension(GL_KHR_shader_subgroup_arithmetic) +[ForceInline] +[require(glsl_spirv, subgroup_arithmetic)] +public vector<T,N> subgroupAnd(vector<T,N> value) { shader_subgroup_preamble<T>(); __target_switch @@ -5702,9 +5958,11 @@ __spirv_version(1.3) [require(spirv)] } __generic<T : __BuiltinLogicalType, let N : int> -__glsl_extension(GL_KHR_shader_subgroup_arithmetic) [require(glsl)] -__spirv_version(1.3) [require(spirv)] -[ForceInline] public vector<T,N> subgroupOr(vector<T,N> value) +__spirv_version(1.3) +__glsl_extension(GL_KHR_shader_subgroup_arithmetic) +[ForceInline] +[require(glsl_spirv, subgroup_arithmetic)] +public vector<T,N> subgroupOr(vector<T,N> value) { shader_subgroup_preamble<T>(); __target_switch @@ -5728,9 +5986,11 @@ __spirv_version(1.3) [require(spirv)] } __generic<T : __BuiltinLogicalType, let N : int> -__glsl_extension(GL_KHR_shader_subgroup_arithmetic) [require(glsl)] -__spirv_version(1.3) [require(spirv)] -[ForceInline] public vector<T,N> subgroupXor(vector<T,N> value) +__spirv_version(1.3) +__glsl_extension(GL_KHR_shader_subgroup_arithmetic) +[ForceInline] +[require(glsl_spirv, subgroup_arithmetic)] +public vector<T,N> subgroupXor(vector<T,N> value) { shader_subgroup_preamble<T>(); __target_switch @@ -5753,9 +6013,11 @@ __spirv_version(1.3) [require(spirv)] } __generic<T : __BuiltinArithmeticType, let N : int> -__glsl_extension(GL_KHR_shader_subgroup_arithmetic) [require(glsl)] -__spirv_version(1.3) [require(spirv)] -[ForceInline] public vector<T,N> subgroupInclusiveAdd(vector<T,N> value) +__spirv_version(1.3) +__glsl_extension(GL_KHR_shader_subgroup_arithmetic) +[ForceInline] +[require(glsl_spirv, subgroup_arithmetic)] +public vector<T,N> subgroupInclusiveAdd(vector<T,N> value) { shader_subgroup_preamble<T>(); __target_switch @@ -5772,9 +6034,11 @@ __spirv_version(1.3) [require(spirv)] } __generic<T : __BuiltinArithmeticType, let N : int> -__glsl_extension(GL_KHR_shader_subgroup_arithmetic) [require(glsl)] -__spirv_version(1.3) [require(spirv)] -[ForceInline] public vector<T,N> subgroupInclusiveMul(vector<T,N> value) +__spirv_version(1.3) +__glsl_extension(GL_KHR_shader_subgroup_arithmetic) +[ForceInline] +[require(glsl_spirv, subgroup_arithmetic)] +public vector<T,N> subgroupInclusiveMul(vector<T,N> value) { shader_subgroup_preamble<T>(); __target_switch @@ -5791,9 +6055,11 @@ __spirv_version(1.3) [require(spirv)] } __generic<T : __BuiltinArithmeticType, let N : int> -__glsl_extension(GL_KHR_shader_subgroup_arithmetic) [require(glsl)] -__spirv_version(1.3) [require(spirv)] -[ForceInline] public vector<T,N> subgroupInclusiveMin(vector<T,N> value) +__spirv_version(1.3) +__glsl_extension(GL_KHR_shader_subgroup_arithmetic) +[ForceInline] +[require(glsl_spirv, subgroup_arithmetic)] +public vector<T,N> subgroupInclusiveMin(vector<T,N> value) { shader_subgroup_preamble<T>(); __target_switch @@ -5812,9 +6078,11 @@ __spirv_version(1.3) [require(spirv)] } __generic<T : __BuiltinArithmeticType, let N : int> -__glsl_extension(GL_KHR_shader_subgroup_arithmetic) [require(glsl)] -__spirv_version(1.3) [require(spirv)] -[ForceInline] public vector<T,N> subgroupInclusiveMax(vector<T,N> value) +__spirv_version(1.3) +__glsl_extension(GL_KHR_shader_subgroup_arithmetic) +[ForceInline] +[require(glsl_spirv, subgroup_arithmetic)] +public vector<T,N> subgroupInclusiveMax(vector<T,N> value) { shader_subgroup_preamble<T>(); __target_switch @@ -5833,9 +6101,11 @@ __spirv_version(1.3) [require(spirv)] } __generic<T : __BuiltinLogicalType, let N : int> -__glsl_extension(GL_KHR_shader_subgroup_arithmetic) [require(glsl)] -__spirv_version(1.3) [require(spirv)] -[ForceInline] public vector<T,N> subgroupInclusiveAnd(vector<T,N> value) +__spirv_version(1.3) +__glsl_extension(GL_KHR_shader_subgroup_arithmetic) +[ForceInline] +[require(glsl_spirv, subgroup_arithmetic)] +public vector<T,N> subgroupInclusiveAnd(vector<T,N> value) { shader_subgroup_preamble<T>(); __target_switch @@ -5849,9 +6119,11 @@ __spirv_version(1.3) [require(spirv)] } __generic<T : __BuiltinLogicalType, let N : int> -__glsl_extension(GL_KHR_shader_subgroup_arithmetic) [require(glsl)] -__spirv_version(1.3) [require(spirv)] -[ForceInline] public vector<T,N> subgroupInclusiveOr(vector<T,N> value) +__spirv_version(1.3) +__glsl_extension(GL_KHR_shader_subgroup_arithmetic) +[ForceInline] +[require(glsl_spirv, subgroup_arithmetic)] +public vector<T,N> subgroupInclusiveOr(vector<T,N> value) { shader_subgroup_preamble<T>(); __target_switch @@ -5865,9 +6137,11 @@ __spirv_version(1.3) [require(spirv)] } __generic<T : __BuiltinLogicalType, let N : int> -__glsl_extension(GL_KHR_shader_subgroup_arithmetic) [require(glsl)] -__spirv_version(1.3) [require(spirv)] -[ForceInline] public vector<T,N> subgroupInclusiveXor(vector<T,N> value) +__spirv_version(1.3) +__glsl_extension(GL_KHR_shader_subgroup_arithmetic) +[ForceInline] +[require(glsl_spirv, subgroup_arithmetic)] +public vector<T,N> subgroupInclusiveXor(vector<T,N> value) { shader_subgroup_preamble<T>(); __target_switch @@ -5881,9 +6155,11 @@ __spirv_version(1.3) [require(spirv)] } __generic<T : __BuiltinArithmeticType, let N : int> -__glsl_extension(GL_KHR_shader_subgroup_arithmetic) [require(glsl)] -__spirv_version(1.3) [require(spirv)] -[ForceInline] public vector<T,N> subgroupExclusiveAdd(vector<T,N> value) +__spirv_version(1.3) +__glsl_extension(GL_KHR_shader_subgroup_arithmetic) +[ForceInline] +[require(cuda_glsl_hlsl_spirv, subgroup_arithmetic)] +public vector<T,N> subgroupExclusiveAdd(vector<T,N> value) { shader_subgroup_preamble<T>(); return WavePrefixSum(value); @@ -5891,18 +6167,22 @@ __spirv_version(1.3) [require(spirv)] __generic<T : __BuiltinArithmeticType, let N : int> -__glsl_extension(GL_KHR_shader_subgroup_arithmetic) [require(glsl)] -__spirv_version(1.3) [require(spirv)] -[ForceInline] public vector<T,N> subgroupExclusiveMul(vector<T,N> value) +__spirv_version(1.3) +__glsl_extension(GL_KHR_shader_subgroup_arithmetic) +[ForceInline] +[require(cuda_glsl_hlsl_spirv, subgroup_arithmetic)] +public vector<T,N> subgroupExclusiveMul(vector<T,N> value) { shader_subgroup_preamble<T>(); return WavePrefixProduct(value); } __generic<T : __BuiltinArithmeticType, let N : int> -__glsl_extension(GL_KHR_shader_subgroup_arithmetic) [require(glsl)] -__spirv_version(1.3) [require(spirv)] -[ForceInline] public vector<T,N> subgroupExclusiveMin(vector<T,N> value) +__spirv_version(1.3) +__glsl_extension(GL_KHR_shader_subgroup_arithmetic) +[ForceInline] +[require(glsl_spirv, subgroup_arithmetic)] +public vector<T,N> subgroupExclusiveMin(vector<T,N> value) { shader_subgroup_preamble<T>(); __target_switch @@ -5921,9 +6201,11 @@ __spirv_version(1.3) [require(spirv)] } __generic<T : __BuiltinArithmeticType, let N : int> -__glsl_extension(GL_KHR_shader_subgroup_arithmetic) [require(glsl)] -__spirv_version(1.3) [require(spirv)] -[ForceInline] public vector<T,N> subgroupExclusiveMax(vector<T,N> value) +__spirv_version(1.3) +__glsl_extension(GL_KHR_shader_subgroup_arithmetic) +[ForceInline] +[require(glsl_spirv, subgroup_arithmetic)] +public vector<T,N> subgroupExclusiveMax(vector<T,N> value) { shader_subgroup_preamble<T>(); __target_switch @@ -5942,9 +6224,11 @@ __spirv_version(1.3) [require(spirv)] } __generic<T : __BuiltinLogicalType, let N : int> -__glsl_extension(GL_KHR_shader_subgroup_arithmetic) [require(glsl)] -__spirv_version(1.3) [require(spirv)] -[ForceInline] public vector<T,N> subgroupExclusiveAnd(vector<T,N> value) +__spirv_version(1.3) +__glsl_extension(GL_KHR_shader_subgroup_arithmetic) +[ForceInline] +[require(glsl_spirv, subgroup_arithmetic)] +public vector<T,N> subgroupExclusiveAnd(vector<T,N> value) { shader_subgroup_preamble<T>(); __target_switch @@ -5957,9 +6241,11 @@ __spirv_version(1.3) [require(spirv)] } __generic<T : __BuiltinLogicalType, let N : int> -__glsl_extension(GL_KHR_shader_subgroup_arithmetic) [require(glsl)] -__spirv_version(1.3) [require(spirv)] -[ForceInline] public vector<T,N> subgroupExclusiveOr(vector<T,N> value) +__spirv_version(1.3) +__glsl_extension(GL_KHR_shader_subgroup_arithmetic) +[ForceInline] +[require(glsl_spirv, subgroup_arithmetic)] +public vector<T,N> subgroupExclusiveOr(vector<T,N> value) { shader_subgroup_preamble<T>(); __target_switch @@ -5972,9 +6258,11 @@ __spirv_version(1.3) [require(spirv)] } __generic<T : __BuiltinLogicalType, let N : int> -__glsl_extension(GL_KHR_shader_subgroup_arithmetic) [require(glsl)] -__spirv_version(1.3) [require(spirv)] -[ForceInline] public vector<T,N> subgroupExclusiveXor(vector<T,N> value) +__spirv_version(1.3) +__glsl_extension(GL_KHR_shader_subgroup_arithmetic) +[ForceInline] +[require(glsl_spirv, subgroup_arithmetic)] +public vector<T,N> subgroupExclusiveXor(vector<T,N> value) { shader_subgroup_preamble<T>(); __target_switch @@ -5989,45 +6277,55 @@ __spirv_version(1.3) [require(spirv)] // GL_KHR_shader_subgroup_ballot __generic<T : __BuiltinType> -__glsl_extension(GL_KHR_shader_subgroup_ballot) [require(glsl)] -__spirv_version(1.3) [require(spirv)] -[ForceInline] public T subgroupBroadcast(T value, uint id) +__spirv_version(1.3) +__glsl_extension(GL_KHR_shader_subgroup_ballot) +[ForceInline] +[require(cuda_glsl_hlsl_spirv, subgroup_ballot)] +public T subgroupBroadcast(T value, uint id) { shader_subgroup_preamble<T>(); return WaveMaskBroadcastLaneAt(WaveGetActiveMask(), value, id); } __generic<T : __BuiltinType, let N : int> -__glsl_extension(GL_KHR_shader_subgroup_ballot) [require(glsl)] -__spirv_version(1.3) [require(spirv)] -[ForceInline] public vector<T,N> subgroupBroadcast(vector<T,N> value, uint id) +__spirv_version(1.3) +__glsl_extension(GL_KHR_shader_subgroup_ballot) +[ForceInline] +[require(cuda_glsl_hlsl_spirv, subgroup_ballot)] +public vector<T,N> subgroupBroadcast(vector<T,N> value, uint id) { shader_subgroup_preamble<T>(); return WaveMaskBroadcastLaneAt(WaveGetActiveMask(), value, id); } __generic<T : __BuiltinType> -__glsl_extension(GL_KHR_shader_subgroup_ballot) [require(glsl)] -__spirv_version(1.3) [require(spirv)] -[ForceInline] public T subgroupBroadcastFirst(T value) +__spirv_version(1.3) +__glsl_extension(GL_KHR_shader_subgroup_ballot) +[ForceInline] +[require(cuda_glsl_hlsl_spirv, subgroup_ballot)] +public T subgroupBroadcastFirst(T value) { shader_subgroup_preamble<T>(); return WaveMaskReadLaneFirst(WaveGetActiveMask(), value); } __generic<T : __BuiltinType, let N : int> -__glsl_extension(GL_KHR_shader_subgroup_ballot) [require(glsl)] -__spirv_version(1.3) [require(spirv)] -[ForceInline] public vector<T,N> subgroupBroadcastFirst(vector<T,N> value) +__spirv_version(1.3) +__glsl_extension(GL_KHR_shader_subgroup_ballot) +[ForceInline] +[require(cuda_glsl_hlsl_spirv, subgroup_ballot)] +public vector<T,N> subgroupBroadcastFirst(vector<T,N> value) { shader_subgroup_preamble<T>(); return WaveMaskReadLaneFirst(WaveGetActiveMask(), value); } // WaveMaskBallot is not the same; it force trunc's -__glsl_extension(GL_KHR_shader_subgroup_ballot) [require(glsl)] -__spirv_version(1.3) [require(spirv)] -[ForceInline] public uvec4 subgroupBallot(bool value) +__spirv_version(1.3) +__glsl_extension(GL_KHR_shader_subgroup_ballot) +[ForceInline] +[require(cuda_glsl_hlsl_spirv, subgroup_ballot)] +public uvec4 subgroupBallot(bool value) { return WaveActiveBallot(value); } @@ -6042,9 +6340,11 @@ __spirv_version(1.3) [require(spirv)] // note 2: we have a waveLaneCount check because based on wave lane count we can determine if we can do a // fast path or slow path (know index is 0 or non 0) // } -__glsl_extension(GL_KHR_shader_subgroup_ballot) [require(glsl)] -__spirv_version(1.3) [require(spirv)] -[ForceInline] public bool subgroupInverseBallot(uvec4 value) +__spirv_version(1.3) +__glsl_extension(GL_KHR_shader_subgroup_ballot) +[ForceInline] +[require(cuda_glsl_hlsl_spirv, subgroup_ballot)] +public bool subgroupInverseBallot(uvec4 value) { __target_switch { @@ -6075,9 +6375,11 @@ __spirv_version(1.3) [require(spirv)] } // same logic as subgroupInverseBallot -__glsl_extension(GL_KHR_shader_subgroup_ballot) [require(glsl)] -__spirv_version(1.3) [require(spirv)] -[ForceInline] public bool subgroupBallotBitExtract(uvec4 value, uint index) +__spirv_version(1.3) +__glsl_extension(GL_KHR_shader_subgroup_ballot) +[ForceInline] +[require(cuda_glsl_hlsl_spirv, subgroup_ballot)] +public bool subgroupBallotBitExtract(uvec4 value, uint index) { __target_switch { @@ -6107,9 +6409,11 @@ __spirv_version(1.3) [require(spirv)] // the count is only supposed to use uvec4 values within bottom bits of subgroup launched, not a simple countbits -__glsl_extension(GL_KHR_shader_subgroup_ballot) [require(glsl)] -__spirv_version(1.3) [require(spirv)] -[ForceInline] public uint subgroupBallotBitCount(uvec4 value) +__spirv_version(1.3) +__glsl_extension(GL_KHR_shader_subgroup_ballot) +[ForceInline] +[require(glsl_spirv, subgroup_ballot)] +public uint subgroupBallotBitCount(uvec4 value) { __target_switch { @@ -6123,9 +6427,11 @@ __spirv_version(1.3) [require(spirv)] } } -__glsl_extension(GL_KHR_shader_subgroup_ballot) [require(glsl)] -__spirv_version(1.3) [require(spirv)] -[ForceInline] public uint subgroupBallotInclusiveBitCount(uvec4 value) +__spirv_version(1.3) +__glsl_extension(GL_KHR_shader_subgroup_ballot) +[ForceInline] +[require(glsl_spirv, subgroup_ballot)] +public uint subgroupBallotInclusiveBitCount(uvec4 value) { __target_switch { @@ -6139,9 +6445,11 @@ __spirv_version(1.3) [require(spirv)] } } -__glsl_extension(GL_KHR_shader_subgroup_ballot) [require(glsl)] -__spirv_version(1.3) [require(spirv)] -[ForceInline] public uint subgroupBallotExclusiveBitCount(uvec4 value) +__spirv_version(1.3) +__glsl_extension(GL_KHR_shader_subgroup_ballot) +[ForceInline] +[require(glsl_spirv, subgroup_ballot)] +public uint subgroupBallotExclusiveBitCount(uvec4 value) { __target_switch { @@ -6155,9 +6463,11 @@ __spirv_version(1.3) [require(spirv)] } } -__glsl_extension(GL_KHR_shader_subgroup_ballot) [require(glsl)] -__spirv_version(1.3) [require(spirv)] -[ForceInline] public uint subgroupBallotFindLSB(uvec4 value) +__spirv_version(1.3) +__glsl_extension(GL_KHR_shader_subgroup_ballot) +[ForceInline] +[require(glsl_spirv, subgroup_ballot)] +public uint subgroupBallotFindLSB(uvec4 value) { __target_switch { @@ -6171,9 +6481,11 @@ __spirv_version(1.3) [require(spirv)] } } -__glsl_extension(GL_KHR_shader_subgroup_ballot) [require(glsl)] -__spirv_version(1.3) [require(spirv)] -[ForceInline] public uint subgroupBallotFindMSB(uvec4 value) +__spirv_version(1.3) +__glsl_extension(GL_KHR_shader_subgroup_ballot) +[ForceInline] +[require(glsl_spirv, subgroup_ballot)] +public uint subgroupBallotFindMSB(uvec4 value) { __target_switch { @@ -6190,17 +6502,20 @@ __spirv_version(1.3) [require(spirv)] // GL_KHR_shader_subgroup_shuffle __generic<T : __BuiltinType> -__glsl_extension(GL_KHR_shader_subgroup_shuffle) [require(glsl)] -__spirv_version(1.3) [require(spirv)] -[ForceInline] public T subgroupShuffle(T value, uint index) +__spirv_version(1.3) +__glsl_extension(GL_KHR_shader_subgroup_shuffle) +[ForceInline] +[require(cuda_glsl_hlsl_spirv, subgroup_shuffle)] +public T subgroupShuffle(T value, uint index) { shader_subgroup_preamble<T>(); return WaveShuffle(value, index); } __generic<T : __BuiltinType> -__glsl_extension(GL_KHR_shader_subgroup_shuffle) [require(glsl)] -__spirv_version(1.3) [require(spirv)] +__spirv_version(1.3) +__glsl_extension(GL_KHR_shader_subgroup_shuffle) +[require(glsl_spirv, subgroup_shuffle)] [ForceInline] public T subgroupShuffleXor(T value, uint mask) { shader_subgroup_preamble<T>(); @@ -6217,18 +6532,22 @@ __spirv_version(1.3) [require(spirv)] } __generic<T : __BuiltinType, let N : int> -__glsl_extension(GL_KHR_shader_subgroup_shuffle) [require(glsl)] -__spirv_version(1.3) [require(spirv)] -[ForceInline] public vector<T,N> subgroupShuffle(vector<T,N> value, uint index) +__spirv_version(1.3) +__glsl_extension(GL_KHR_shader_subgroup_shuffle) +[ForceInline] +[require(cuda_glsl_hlsl_spirv, subgroup_shuffle)] +public vector<T,N> subgroupShuffle(vector<T,N> value, uint index) { shader_subgroup_preamble<T>(); return WaveShuffle(value, index); } __generic<T : __BuiltinType, let N : int> -__glsl_extension(GL_KHR_shader_subgroup_shuffle) [require(glsl)] -__spirv_version(1.3) [require(spirv)] -[ForceInline] public vector<T,N> subgroupShuffleXor(vector<T,N> value, uint mask) +__spirv_version(1.3) +__glsl_extension(GL_KHR_shader_subgroup_shuffle) +[ForceInline] +[require(glsl_spirv, subgroup_shuffle)] +public vector<T,N> subgroupShuffleXor(vector<T,N> value, uint mask) { shader_subgroup_preamble<T>(); __target_switch @@ -6247,9 +6566,11 @@ __spirv_version(1.3) [require(spirv)] // GL_KHR_shader_subgroup_shuffle_relative __generic<T : __BuiltinType> -__glsl_extension(GL_KHR_shader_subgroup_shuffle_relative) [require(glsl)] -__spirv_version(1.3) [require(spirv)] -[ForceInline] public T subgroupShuffleUp(T value, uint delta) +__spirv_version(1.3) +__glsl_extension(GL_KHR_shader_subgroup_shuffle_relative) +[ForceInline] +[require(glsl_spirv, subgroup_shufflerelative)] +public T subgroupShuffleUp(T value, uint delta) { shader_subgroup_preamble<T>(); __target_switch @@ -6265,9 +6586,11 @@ __spirv_version(1.3) [require(spirv)] } __generic<T : __BuiltinType> -__glsl_extension(GL_KHR_shader_subgroup_shuffle_relative) [require(glsl)] -__spirv_version(1.3) [require(spirv)] -[ForceInline] public T subgroupShuffleDown(T value, uint delta) +__spirv_version(1.3) +__glsl_extension(GL_KHR_shader_subgroup_shuffle_relative) +[ForceInline] +[require(glsl_spirv, subgroup_shufflerelative)] +public T subgroupShuffleDown(T value, uint delta) { shader_subgroup_preamble<T>(); __target_switch @@ -6284,9 +6607,11 @@ __spirv_version(1.3) [require(spirv)] __generic<T : __BuiltinType, let N : int> -__glsl_extension(GL_KHR_shader_subgroup_shuffle_relative) [require(glsl)] -__spirv_version(1.3) [require(spirv)] -[ForceInline] public vector<T,N> subgroupShuffleUp(vector<T,N> value, uint delta) +__spirv_version(1.3) +__glsl_extension(GL_KHR_shader_subgroup_shuffle_relative) +[ForceInline] +[require(glsl_spirv, subgroup_shufflerelative)] +public vector<T,N> subgroupShuffleUp(vector<T,N> value, uint delta) { shader_subgroup_preamble<T>(); __target_switch @@ -6302,9 +6627,11 @@ __spirv_version(1.3) [require(spirv)] } __generic<T : __BuiltinType, let N : int> -__glsl_extension(GL_KHR_shader_subgroup_shuffle_relative) [require(glsl)] -__spirv_version(1.3) [require(spirv)] -[ForceInline] public vector<T,N> subgroupShuffleDown(vector<T,N> value, uint delta) +__spirv_version(1.3) +__glsl_extension(GL_KHR_shader_subgroup_shuffle_relative) +[ForceInline] +[require(glsl_spirv, subgroup_shufflerelative)] +public vector<T,N> subgroupShuffleDown(vector<T,N> value, uint delta) { shader_subgroup_preamble<T>(); __target_switch @@ -6321,9 +6648,11 @@ __spirv_version(1.3) [require(spirv)] // GL_KHR_shader_subgroup_clustered __generic<T : __BuiltinArithmeticType> -__glsl_extension(GL_KHR_shader_subgroup_clustered) [require(glsl)] -__spirv_version(1.3) [require(spirv)] -[ForceInline] public T subgroupClusteredAdd(T value, uint clusterSize) +__spirv_version(1.3) +__glsl_extension(GL_KHR_shader_subgroup_clustered) +[ForceInline] +[require(glsl_spirv, subgroup_clustered)] +public T subgroupClusteredAdd(T value, uint clusterSize) { shader_subgroup_preamble<T>(); __target_switch @@ -6340,9 +6669,11 @@ __spirv_version(1.3) [require(spirv)] } __generic<T : __BuiltinArithmeticType> -__glsl_extension(GL_KHR_shader_subgroup_clustered) [require(glsl)] -__spirv_version(1.3) [require(spirv)] -[ForceInline] public T subgroupClusteredMul(T value, uint clusterSize) +__spirv_version(1.3) +__glsl_extension(GL_KHR_shader_subgroup_clustered) +[ForceInline] +[require(glsl_spirv, subgroup_clustered)] +public T subgroupClusteredMul(T value, uint clusterSize) { shader_subgroup_preamble<T>(); __target_switch @@ -6359,9 +6690,11 @@ __spirv_version(1.3) [require(spirv)] } __generic<T : __BuiltinArithmeticType> -__glsl_extension(GL_KHR_shader_subgroup_clustered) [require(glsl)] -__spirv_version(1.3) [require(spirv)] -[ForceInline] public T subgroupClusteredMin(T value, uint clusterSize) +__spirv_version(1.3) +__glsl_extension(GL_KHR_shader_subgroup_clustered) +[ForceInline] +[require(glsl_spirv, subgroup_clustered)] +public T subgroupClusteredMin(T value, uint clusterSize) { shader_subgroup_preamble<T>(); __target_switch @@ -6380,9 +6713,11 @@ __spirv_version(1.3) [require(spirv)] } __generic<T : __BuiltinArithmeticType> -__glsl_extension(GL_KHR_shader_subgroup_clustered) [require(glsl)] -__spirv_version(1.3) [require(spirv)] -[ForceInline] public T subgroupClusteredMax(T value, uint clusterSize) +__spirv_version(1.3) +__glsl_extension(GL_KHR_shader_subgroup_clustered) +[ForceInline] +[require(glsl_spirv, subgroup_clustered)] +public T subgroupClusteredMax(T value, uint clusterSize) { shader_subgroup_preamble<T>(); __target_switch @@ -6401,9 +6736,11 @@ __spirv_version(1.3) [require(spirv)] } __generic<T : __BuiltinLogicalType> -__glsl_extension(GL_KHR_shader_subgroup_clustered) [require(glsl)] -__spirv_version(1.3) [require(spirv)] -[ForceInline] public T subgroupClusteredAnd(T value, uint clusterSize) +__spirv_version(1.3) +__glsl_extension(GL_KHR_shader_subgroup_clustered) +[ForceInline] +[require(glsl_spirv, subgroup_clustered)] +public T subgroupClusteredAnd(T value, uint clusterSize) { shader_subgroup_preamble<T>(); __target_switch @@ -6417,9 +6754,11 @@ __spirv_version(1.3) [require(spirv)] } __generic<T : __BuiltinLogicalType> -__glsl_extension(GL_KHR_shader_subgroup_clustered) [require(glsl)] -__spirv_version(1.3) [require(spirv)] -[ForceInline] public T subgroupClusteredOr(T value, uint clusterSize) +__spirv_version(1.3) +__glsl_extension(GL_KHR_shader_subgroup_clustered) +[ForceInline] +[require(glsl_spirv, subgroup_clustered)] +public T subgroupClusteredOr(T value, uint clusterSize) { shader_subgroup_preamble<T>(); __target_switch @@ -6435,9 +6774,11 @@ __spirv_version(1.3) [require(spirv)] __generic<T : __BuiltinLogicalType> -__glsl_extension(GL_KHR_shader_subgroup_clustered) [require(glsl)] -__spirv_version(1.3) [require(spirv)] -[ForceInline] public T subgroupClusteredXor(T value, uint clusterSize) +__spirv_version(1.3) +__glsl_extension(GL_KHR_shader_subgroup_clustered) +[ForceInline] +[require(glsl_spirv, subgroup_clustered)] +public T subgroupClusteredXor(T value, uint clusterSize) { shader_subgroup_preamble<T>(); __target_switch @@ -6453,9 +6794,11 @@ __spirv_version(1.3) [require(spirv)] __generic<T : __BuiltinArithmeticType, let N : int> -__glsl_extension(GL_KHR_shader_subgroup_clustered) [require(glsl)] -__spirv_version(1.3) [require(spirv)] -[ForceInline] public vector<T,N> subgroupClusteredAdd(vector<T,N> value, uint clusterSize) +__spirv_version(1.3) +__glsl_extension(GL_KHR_shader_subgroup_clustered) +[ForceInline] +[require(glsl_spirv, subgroup_clustered)] +public vector<T,N> subgroupClusteredAdd(vector<T,N> value, uint clusterSize) { shader_subgroup_preamble<T>(); __target_switch @@ -6473,9 +6816,11 @@ __spirv_version(1.3) [require(spirv)] } __generic<T : __BuiltinArithmeticType, let N : int> -__glsl_extension(GL_KHR_shader_subgroup_clustered) [require(glsl)] -__spirv_version(1.3) [require(spirv)] -[ForceInline] public vector<T,N> subgroupClusteredMul(vector<T,N> value, uint clusterSize) +__spirv_version(1.3) +__glsl_extension(GL_KHR_shader_subgroup_clustered) +[ForceInline] +[require(glsl_spirv, subgroup_clustered)] +public vector<T,N> subgroupClusteredMul(vector<T,N> value, uint clusterSize) { shader_subgroup_preamble<T>(); __target_switch @@ -6492,9 +6837,11 @@ __spirv_version(1.3) [require(spirv)] } __generic<T : __BuiltinArithmeticType, let N : int> -__glsl_extension(GL_KHR_shader_subgroup_clustered) [require(glsl)] -__spirv_version(1.3) [require(spirv)] -[ForceInline] public vector<T,N> subgroupClusteredMin(vector<T,N> value, uint clusterSize) +__spirv_version(1.3) +__glsl_extension(GL_KHR_shader_subgroup_clustered) +[ForceInline] +[require(glsl_spirv, subgroup_clustered)] +public vector<T,N> subgroupClusteredMin(vector<T,N> value, uint clusterSize) { shader_subgroup_preamble<T>(); __target_switch @@ -6513,9 +6860,11 @@ __spirv_version(1.3) [require(spirv)] } __generic<T : __BuiltinArithmeticType, let N : int> -__glsl_extension(GL_KHR_shader_subgroup_clustered) [require(glsl)] -__spirv_version(1.3) [require(spirv)] -[ForceInline] public vector<T,N> subgroupClusteredMax(vector<T,N> value, uint clusterSize) +__spirv_version(1.3) +__glsl_extension(GL_KHR_shader_subgroup_clustered) +[ForceInline] +[require(glsl_spirv, subgroup_clustered)] +public vector<T,N> subgroupClusteredMax(vector<T,N> value, uint clusterSize) { shader_subgroup_preamble<T>(); __target_switch @@ -6534,9 +6883,11 @@ __spirv_version(1.3) [require(spirv)] } __generic<T : __BuiltinLogicalType, let N : int> -__glsl_extension(GL_KHR_shader_subgroup_clustered) [require(glsl)] -__spirv_version(1.3) [require(spirv)] -[ForceInline] public vector<T,N> subgroupClusteredAnd(vector<T,N> value, uint clusterSize) +__spirv_version(1.3) +__glsl_extension(GL_KHR_shader_subgroup_clustered) +[ForceInline] +[require(glsl_spirv, subgroup_clustered)] +public vector<T,N> subgroupClusteredAnd(vector<T,N> value, uint clusterSize) { shader_subgroup_preamble<T>(); __target_switch @@ -6550,9 +6901,11 @@ __spirv_version(1.3) [require(spirv)] } __generic<T : __BuiltinLogicalType, let N : int> -__glsl_extension(GL_KHR_shader_subgroup_clustered) [require(glsl)] -__spirv_version(1.3) [require(spirv)] -[ForceInline] public vector<T,N> subgroupClusteredOr(vector<T,N> value, uint clusterSize) +__spirv_version(1.3) +__glsl_extension(GL_KHR_shader_subgroup_clustered) +[ForceInline] +[require(glsl_spirv, subgroup_clustered)] +public vector<T,N> subgroupClusteredOr(vector<T,N> value, uint clusterSize) { shader_subgroup_preamble<T>(); __target_switch @@ -6566,9 +6919,11 @@ __spirv_version(1.3) [require(spirv)] } __generic<T : __BuiltinLogicalType, let N : int> -__glsl_extension(GL_KHR_shader_subgroup_clustered) [require(glsl)] -__spirv_version(1.3) [require(spirv)] -[ForceInline] public vector<T,N> subgroupClusteredXor(vector<T,N> value, uint clusterSize) +__spirv_version(1.3) +__glsl_extension(GL_KHR_shader_subgroup_clustered) +[ForceInline] +[require(glsl_spirv, subgroup_clustered)] +public vector<T,N> subgroupClusteredXor(vector<T,N> value, uint clusterSize) { shader_subgroup_preamble<T>(); __target_switch @@ -6584,36 +6939,44 @@ __spirv_version(1.3) [require(spirv)] // GL_KHR_shader_subgroup_quad __generic<T : __BuiltinType> -__glsl_extension(GL_KHR_shader_subgroup_quad) [require(glsl)] -__spirv_version(1.3) [require(spirv)] -[ForceInline] public T subgroupQuadBroadcast(T value, uint id) +__spirv_version(1.3) +__glsl_extension(GL_KHR_shader_subgroup_quad) +[ForceInline] +[require(glsl_hlsl_spirv, subgroup_quad)] +public T subgroupQuadBroadcast(T value, uint id) { shader_subgroup_preamble<T>(); return QuadReadLaneAt(value, id); } __generic<T : __BuiltinType> -__glsl_extension(GL_KHR_shader_subgroup_quad) [require(glsl)] -__spirv_version(1.3) [require(spirv)] -[ForceInline] public T subgroupQuadSwapHorizontal(T value) +__spirv_version(1.3) +__glsl_extension(GL_KHR_shader_subgroup_quad) +[ForceInline] +[require(glsl_hlsl_spirv, subgroup_quad)] +public T subgroupQuadSwapHorizontal(T value) { shader_subgroup_preamble<T>(); return QuadReadAcrossX(value); } __generic<T : __BuiltinType> -__glsl_extension(GL_KHR_shader_subgroup_quad) [require(glsl)] -__spirv_version(1.3) [require(spirv)] -[ForceInline] public T subgroupQuadSwapVertical(T value) +__spirv_version(1.3) +__glsl_extension(GL_KHR_shader_subgroup_quad) +[ForceInline] +[require(glsl_hlsl_spirv, subgroup_quad)] +public T subgroupQuadSwapVertical(T value) { shader_subgroup_preamble<T>(); return QuadReadAcrossY(value); } __generic<T : __BuiltinType> -__glsl_extension(GL_KHR_shader_subgroup_quad) [require(glsl)] -__spirv_version(1.3) [require(spirv)] -[ForceInline] public T subgroupQuadSwapDiagonal(T value) +__spirv_version(1.3) +__glsl_extension(GL_KHR_shader_subgroup_quad) +[ForceInline] +[require(glsl_hlsl_spirv, subgroup_quad)] +public T subgroupQuadSwapDiagonal(T value) { shader_subgroup_preamble<T>(); return QuadReadAcrossDiagonal(value); @@ -6621,36 +6984,44 @@ __spirv_version(1.3) [require(spirv)] __generic<T : __BuiltinType, let N : int> -__glsl_extension(GL_KHR_shader_subgroup_quad) [require(glsl)] -__spirv_version(1.3) [require(spirv)] -[ForceInline] public vector<T,N> subgroupQuadBroadcast(vector<T,N> value, uint id) +__spirv_version(1.3) +__glsl_extension(GL_KHR_shader_subgroup_quad) +[ForceInline] +[require(glsl_hlsl_spirv, subgroup_quad)] +public vector<T,N> subgroupQuadBroadcast(vector<T,N> value, uint id) { shader_subgroup_preamble<T>(); return QuadReadLaneAt(value, id); } __generic<T : __BuiltinType, let N : int> -__glsl_extension(GL_KHR_shader_subgroup_quad) [require(glsl)] -__spirv_version(1.3) [require(spirv)] -[ForceInline] public vector<T,N> subgroupQuadSwapHorizontal(vector<T,N> value) +__spirv_version(1.3) +__glsl_extension(GL_KHR_shader_subgroup_quad) +[ForceInline] +[require(glsl_hlsl_spirv, subgroup_quad)] +public vector<T,N> subgroupQuadSwapHorizontal(vector<T,N> value) { shader_subgroup_preamble<T>(); return QuadReadAcrossX(value); } __generic<T : __BuiltinType, let N : int> -__glsl_extension(GL_KHR_shader_subgroup_quad) [require(glsl)] -__spirv_version(1.3) [require(spirv)] -[ForceInline] public vector<T,N> subgroupQuadSwapVertical(vector<T,N> value) +__spirv_version(1.3) +__glsl_extension(GL_KHR_shader_subgroup_quad) +[ForceInline] +[require(glsl_hlsl_spirv, subgroup_quad)] +public vector<T,N> subgroupQuadSwapVertical(vector<T,N> value) { shader_subgroup_preamble<T>(); return QuadReadAcrossY(value); } __generic<T : __BuiltinType, let N : int> -__glsl_extension(GL_KHR_shader_subgroup_quad) [require(glsl)] -__spirv_version(1.3) [require(spirv)] -[ForceInline] public vector<T,N> subgroupQuadSwapDiagonal(vector<T,N> value) +__spirv_version(1.3) +__glsl_extension(GL_KHR_shader_subgroup_quad) +[ForceInline] +[require(glsl_hlsl_spirv, subgroup_quad)] +public vector<T,N> subgroupQuadSwapDiagonal(vector<T,N> value) { shader_subgroup_preamble<T>(); return QuadReadAcrossDiagonal(value); @@ -6671,7 +7042,9 @@ public struct atomic_uint // types and operations to enable the according ext needed for these operations __generic<T : __BuiltinType> -[ForceInline] void typeRequireChecks_atomic_using_float0_tier() +[ForceInline] +[require(glsl_spirv, atomic_glsl)] +void typeRequireChecks_atomic_using_float0_tier() { __target_switch { @@ -6685,7 +7058,9 @@ __generic<T : __BuiltinType> } } __generic<T : __BuiltinType> -[ForceInline] void typeRequireChecks_atomic_using_float1_tier() +[ForceInline] +[require(glsl_spirv, atomic_glsl)] +void typeRequireChecks_atomic_using_float1_tier() { __target_switch { @@ -6708,7 +7083,9 @@ __generic<T : __BuiltinType> } } __generic<T : __BuiltinType> -[ForceInline] void typeRequireChecks_atomic_using_float2_tier() +[ForceInline] +[require(glsl_spirv, atomic_glsl)] +void typeRequireChecks_atomic_using_float2_tier() { __target_switch { @@ -6732,6 +7109,7 @@ __generic<T : __BuiltinType> } __generic<T : __BuiltinType> +[require(glsl_spirv, atomic_glsl)] void typeRequireChecks_atomic_using_add() { __target_switch @@ -6777,6 +7155,7 @@ void typeRequireChecks_atomic_using_add() } } __generic<T : __BuiltinType> +[require(glsl_spirv, atomic_glsl)] void typeRequireChecks_atomic_using_MinMax() { __target_switch @@ -6822,7 +7201,9 @@ void typeRequireChecks_atomic_using_MinMax() } } __generic<T : __BuiltinType> -[ForceInline] void typeRequireChecks_atomic_using_Logical_CAS() +[ForceInline] +[require(glsl_spirv, atomic_glsl)] +void typeRequireChecks_atomic_using_Logical_CAS() { __target_switch { @@ -6877,9 +7258,11 @@ for (const auto& item : atomics) { }}}} -__spirv_version(1.0)[require(spirv)] -__glsl_version(430) [require(glsl)] -[ForceInline] public $(item.name) atomicAdd(inout $(item.name) mem, $(item.name) data) + +__glsl_version(430) +[ForceInline] +[require(glsl_spirv, atomic_glsl)] +public $(item.name) atomicAdd(inout $(item.name) mem, $(item.name) data) { typeRequireChecks_atomic_using_float1_tier<$(item.name)>(); typeRequireChecks_atomic_using_add<$(item.name)>(); @@ -6894,9 +7277,11 @@ __glsl_version(430) [require(glsl)] } } -__spirv_version(1.0)[require(spirv)] -__glsl_version(430) [require(glsl)] -[ForceInline] public $(item.name) atomicMin(inout $(item.name) mem, $(item.name) data) + +__glsl_version(430) +[ForceInline] +[require(glsl_spirv, atomic_glsl)] +public $(item.name) atomicMin(inout $(item.name) mem, $(item.name) data) { typeRequireChecks_atomic_using_float2_tier<$(item.name)>(); typeRequireChecks_atomic_using_MinMax<$(item.name)>(); @@ -6911,9 +7296,11 @@ __glsl_version(430) [require(glsl)] } } -__spirv_version(1.0)[require(spirv)] -__glsl_version(430) [require(glsl)] -[ForceInline] public $(item.name) atomicMax(inout $(item.name) mem, $(item.name) data) + +__glsl_version(430) +[ForceInline] +[require(glsl_spirv, atomic_glsl)] +public $(item.name) atomicMax(inout $(item.name) mem, $(item.name) data) { typeRequireChecks_atomic_using_float2_tier<$(item.name)>(); typeRequireChecks_atomic_using_MinMax<$(item.name)>(); @@ -6928,9 +7315,11 @@ __glsl_version(430) [require(glsl)] } } -__spirv_version(1.0)[require(spirv)] -__glsl_version(430) [require(glsl)] -[ForceInline] public $(item.name) atomicExchange(inout $(item.name) mem, $(item.name) data) + +__glsl_version(430) +[ForceInline] +[require(glsl_spirv, atomic_glsl)] +public $(item.name) atomicExchange(inout $(item.name) mem, $(item.name) data) { typeRequireChecks_atomic_using_float1_tier<$(item.name)>(); __target_switch @@ -6949,9 +7338,11 @@ if(item.isFloat) continue; }}}} -__spirv_version(1.0)[require(spirv)] -__glsl_version(430) [require(glsl)] -[ForceInline] public $(item.name) atomicAnd(inout $(item.name) mem, $(item.name) data) + +__glsl_version(430) +[ForceInline] +[require(glsl_spirv, atomic_glsl)] +public $(item.name) atomicAnd(inout $(item.name) mem, $(item.name) data) { typeRequireChecks_atomic_using_float0_tier<$(item.name)>(); typeRequireChecks_atomic_using_Logical_CAS<$(item.name)>(); @@ -6969,9 +7360,11 @@ __glsl_version(430) [require(glsl)] } } -__spirv_version(1.0)[require(spirv)] -__glsl_version(430) [require(glsl)] -[ForceInline] public $(item.name) atomicOr(inout $(item.name) mem, $(item.name) data) + +__glsl_version(430) +[ForceInline] +[require(glsl_spirv, atomic_glsl)] +public $(item.name) atomicOr(inout $(item.name) mem, $(item.name) data) { typeRequireChecks_atomic_using_float0_tier<$(item.name)>(); typeRequireChecks_atomic_using_Logical_CAS<$(item.name)>(); @@ -6986,9 +7379,11 @@ __glsl_version(430) [require(glsl)] } } -__spirv_version(1.0)[require(spirv)] -__glsl_version(430) [require(glsl)] -[ForceInline] public $(item.name) atomicXor(inout $(item.name) mem, $(item.name) data) + +__glsl_version(430) +[ForceInline] +[require(glsl_spirv, atomic_glsl)] +public $(item.name) atomicXor(inout $(item.name) mem, $(item.name) data) { typeRequireChecks_atomic_using_float0_tier<$(item.name)>(); typeRequireChecks_atomic_using_Logical_CAS<$(item.name)>(); @@ -7003,9 +7398,11 @@ __glsl_version(430) [require(glsl)] } } -__spirv_version(1.0)[require(spirv)] -__glsl_version(430) [require(glsl)] -[ForceInline] public $(item.name) atomicCompSwap(inout $(item.name) mem, $(item.name) compare, $(item.name) data) + +__glsl_version(430) +[ForceInline] +[require(glsl_spirv, atomic_glsl)] +public $(item.name) atomicCompSwap(inout $(item.name) mem, $(item.name) compare, $(item.name) data) { typeRequireChecks_atomic_using_float0_tier<$(item.name)>(); typeRequireChecks_atomic_using_Logical_CAS<$(item.name)>(); @@ -7027,9 +7424,11 @@ ${{{{ // all atomic_uint functions are mangled at compile time, // all types are converted into a field address of a 'uint' // relative to the layout(offset) of the atomic_uint -__spirv_version(1.0)[require(spirv)] -__glsl_version(430) [require(glsl)] -[ForceInline] public uint atomicCounterIncrement(atomic_uint c) + +__glsl_version(430) +[ForceInline] +[require(glsl_spirv, atomic_glsl)] +public uint atomicCounterIncrement(atomic_uint c) { __target_switch @@ -7045,7 +7444,8 @@ __glsl_version(430) [require(glsl)] } } -__glsl_version(430) [require(glsl)] +__glsl_version(430) +[require(glsl, atomic_glsl)] [ForceInline] public uint atomicCounterDecrement_GLSL_helper(atomic_uint c) { __target_switch @@ -7057,9 +7457,10 @@ __glsl_version(430) [require(glsl)] } } -__spirv_version(1.0)[require(spirv)] -__glsl_version(430) [require(glsl)] -[ForceInline] public uint atomicCounter(atomic_uint c) +__glsl_version(430) +[ForceInline] +[require(glsl_spirv, atomic_glsl)] +public uint atomicCounter(atomic_uint c) { __target_switch { @@ -7077,9 +7478,11 @@ __glsl_version(430) [require(glsl)] } } -__spirv_version(1.0)[require(spirv)] -__glsl_version(430) [require(glsl)] -[ForceInline] public uint atomicCounterDecrement(atomic_uint c) + +__glsl_version(430) +[ForceInline] +[require(glsl_spirv, atomic_glsl)] +public uint atomicCounterDecrement(atomic_uint c) { __target_switch { @@ -7101,9 +7504,11 @@ __glsl_version(430) [require(glsl)] } } -__spirv_version(1.0)[require(spirv)] -__glsl_version(430) [require(glsl)] -[ForceInline] public uint atomicCounterAdd(atomic_uint c, uint data) + +__glsl_version(430) +[ForceInline] +[require(glsl_spirv, atomic_glsl)] +public uint atomicCounterAdd(atomic_uint c, uint data) { __target_switch { @@ -7118,9 +7523,11 @@ __glsl_version(430) [require(glsl)] } } -__spirv_version(1.0)[require(spirv)] -__glsl_version(430) [require(glsl)] -[ForceInline] public uint atomicCounterSubtract(atomic_uint c, uint data) + +__glsl_version(430) +[ForceInline] +[require(glsl_spirv, atomic_glsl)] +public uint atomicCounterSubtract(atomic_uint c, uint data) { __target_switch { @@ -7138,9 +7545,11 @@ __glsl_version(430) [require(glsl)] } } -__spirv_version(1.0)[require(spirv)] -__glsl_version(430) [require(glsl)] -[ForceInline] public uint atomicCounterMin(atomic_uint c, uint data) + +__glsl_version(430) +[ForceInline] +[require(glsl_spirv, atomic_glsl)] +public uint atomicCounterMin(atomic_uint c, uint data) { __target_switch { @@ -7155,9 +7564,11 @@ __glsl_version(430) [require(glsl)] } } -__spirv_version(1.0)[require(spirv)] -__glsl_version(430) [require(glsl)] -[ForceInline] public uint atomicCounterMax(atomic_uint c, uint data) + +__glsl_version(430) +[ForceInline] +[require(glsl_spirv, atomic_glsl)] +public uint atomicCounterMax(atomic_uint c, uint data) { __target_switch { @@ -7172,9 +7583,11 @@ __glsl_version(430) [require(glsl)] } } -__spirv_version(1.0)[require(spirv)] -__glsl_version(430) [require(glsl)] -[ForceInline] public uint atomicCounterAnd(atomic_uint c, uint data) + +__glsl_version(430) +[ForceInline] +[require(glsl_spirv, atomic_glsl)] +public uint atomicCounterAnd(atomic_uint c, uint data) { __target_switch { @@ -7189,9 +7602,11 @@ __glsl_version(430) [require(glsl)] } } -__spirv_version(1.0)[require(spirv)] -__glsl_version(430) [require(glsl)] -[ForceInline] public uint atomicCounterOr(atomic_uint c, uint data) + +__glsl_version(430) +[ForceInline] +[require(glsl_spirv, atomic_glsl)] +public uint atomicCounterOr(atomic_uint c, uint data) { __target_switch { @@ -7206,9 +7621,11 @@ __glsl_version(430) [require(glsl)] } } -__spirv_version(1.0)[require(spirv)] -__glsl_version(430) [require(glsl)] -[ForceInline] public uint atomicCounterXor(atomic_uint c, uint data) + +__glsl_version(430) +[ForceInline] +[require(glsl_spirv, atomic_glsl)] +public uint atomicCounterXor(atomic_uint c, uint data) { __target_switch { @@ -7223,9 +7640,11 @@ __glsl_version(430) [require(glsl)] } } -__spirv_version(1.0)[require(spirv)] -__glsl_version(430) [require(glsl)] -[ForceInline] public uint atomicCounterExchange(atomic_uint c, uint data) + +__glsl_version(430) +[ForceInline] +[require(glsl_spirv, atomic_glsl)] +public uint atomicCounterExchange(atomic_uint c, uint data) { __target_switch { @@ -7240,9 +7659,11 @@ __glsl_version(430) [require(glsl)] } } -__spirv_version(1.0)[require(spirv)] -__glsl_version(430) [require(glsl)] -[ForceInline] public uint atomicCounterCompSwap(atomic_uint c, uint compare, uint data) + +__glsl_version(430) +[ForceInline] +[require(glsl_spirv, atomic_glsl)] +public uint atomicCounterCompSwap(atomic_uint c, uint compare, uint data) { __target_switch { @@ -7259,105 +7680,105 @@ __glsl_version(430) [require(glsl)] /// Section 8.14. Fragment Processing Functions -[require(any_gfx_target, fragmentprocessing)] [__NoSideEffect] [ForceInline] +[require(glsl_hlsl_spirv, fragmentprocessing)] public float dFdx(float p) { return ddx(p); } -[require(any_gfx_target, fragmentprocessing)] __generic<let N : int> [__NoSideEffect] [ForceInline] +[require(glsl_hlsl_spirv, fragmentprocessing)] public vector<float, N> dFdx(vector<float, N> p) { return ddx(p); } -[require(any_gfx_target, fragmentprocessing)] [__NoSideEffect] [ForceInline] +[require(glsl_hlsl_spirv, fragmentprocessing)] public float dFdy(float p) { return ddy(p); } -[require(any_gfx_target, fragmentprocessing)] __generic<let N : int> [__NoSideEffect] [ForceInline] +[require(glsl_hlsl_spirv, fragmentprocessing)] public vector<float, N> dFdy(vector<float, N> p) { return ddy(p); } -[require(any_gfx_target, fragmentprocessing_derivativecontrol)] [__NoSideEffect] [ForceInline] +[require(glsl_hlsl_spirv, fragmentprocessing_derivativecontrol)] public float dFdxFine(float p) { return ddx_fine(p); } -[require(any_gfx_target, fragmentprocessing_derivativecontrol)] __generic<let N : int> [__NoSideEffect] [ForceInline] +[require(glsl_hlsl_spirv, fragmentprocessing_derivativecontrol)] public vector<float, N> dFdxFine(vector<float, N> p) { return ddx_fine(p); } -[require(any_gfx_target, fragmentprocessing_derivativecontrol)] [__NoSideEffect] [ForceInline] +[require(glsl_hlsl_spirv, fragmentprocessing_derivativecontrol)] public float dFdyFine(float p) { return ddy_fine(p); } -[require(any_gfx_target, fragmentprocessing_derivativecontrol)] __generic<let N : int> [__NoSideEffect] [ForceInline] +[require(glsl_hlsl_spirv, fragmentprocessing_derivativecontrol)] public vector<float, N> dFdyFine(vector<float, N> p) { return ddy_fine(p); } -[require(any_gfx_target, fragmentprocessing_derivativecontrol)] [__NoSideEffect] [ForceInline] +[require(glsl_hlsl_spirv, fragmentprocessing_derivativecontrol)] public float dFdxCoarse(float p) { return ddx_coarse(p); } -[require(any_gfx_target, fragmentprocessing_derivativecontrol)] __generic<let N : int> [__NoSideEffect] [ForceInline] +[require(glsl_hlsl_spirv, fragmentprocessing_derivativecontrol)] public vector<float, N> dFdxCoarse(vector<float, N> p) { return ddx_coarse(p); } -[require(any_gfx_target, fragmentprocessing_derivativecontrol)] [__NoSideEffect] [ForceInline] +[require(glsl_hlsl_spirv, fragmentprocessing_derivativecontrol)] public float dFdyCoarse(float p) { return ddy_coarse(p); } -[require(any_gfx_target, fragmentprocessing_derivativecontrol)] __generic<let N : int> [__NoSideEffect] [ForceInline] +[require(glsl_hlsl_spirv, fragmentprocessing_derivativecontrol)] public vector<float, N> dFdyCoarse(vector<float, N> p) { return ddy_coarse(p); } -[require(any_gfx_target, fragmentprocessing_derivativecontrol)] [__NoSideEffect] [ForceInline] +[require(glsl_hlsl_spirv, fragmentprocessing_derivativecontrol)] public float fwidthFine(float p) { __target_switch @@ -7377,10 +7798,10 @@ public float fwidthFine(float p) } } } -[require(any_gfx_target, fragmentprocessing_derivativecontrol)] __generic<let N : int> [__NoSideEffect] [ForceInline] +[require(glsl_hlsl_spirv, fragmentprocessing_derivativecontrol)] public vector<float, N> fwidthFine(vector<float, N> p) { __target_switch @@ -7401,9 +7822,9 @@ public vector<float, N> fwidthFine(vector<float, N> p) } } -[require(any_gfx_target, fragmentprocessing_derivativecontrol)] [__NoSideEffect] [ForceInline] +[require(glsl_hlsl_spirv, fragmentprocessing_derivativecontrol)] public float fwidthCoarse(float p) { __target_switch @@ -7423,10 +7844,10 @@ public float fwidthCoarse(float p) } } } -[require(any_gfx_target, fragmentprocessing_derivativecontrol)] __generic<let N : int> [__NoSideEffect] [ForceInline] +[require(glsl_hlsl_spirv, fragmentprocessing_derivativecontrol)] public vector<float, N> fwidthCoarse(vector<float, N> p) { __target_switch @@ -7447,17 +7868,13 @@ public vector<float, N> fwidthCoarse(vector<float, N> p) } } -[require(any_gfx_target, fragmentprocessing)] [__NoSideEffect] [__GLSLRequireShaderInputParameter(0)] +[require(glsl_spirv, fragmentprocessing)] public float interpolateAtCentroid(__ref float interpolant) { __target_switch { - case hlsl: - { - return EvaluateAttributeAtCentroid(interpolant); - } case glsl: __intrinsic_asm "interpolateAtCentroid($0)"; case spirv: { @@ -7469,18 +7886,14 @@ public float interpolateAtCentroid(__ref float interpolant) } } } -[require(any_gfx_target, fragmentprocessing)] __generic<let N : int> [__NoSideEffect] [__GLSLRequireShaderInputParameter(0)] +[require(glsl_spirv, fragmentprocessing)] public vector<float, N> interpolateAtCentroid(__ref vector<float, N> interpolant) { __target_switch { - case hlsl: - { - return EvaluateAttributeAtCentroid(interpolant); - } case glsl: __intrinsic_asm "interpolateAtCentroid($0)"; case spirv: { @@ -7493,17 +7906,13 @@ public vector<float, N> interpolateAtCentroid(__ref vector<float, N> interpolant } } -[require(any_gfx_target, fragmentprocessing)] [__NoSideEffect] [__GLSLRequireShaderInputParameter(0)] +[require(glsl_spirv, fragmentprocessing)] public float interpolateAtSample(__ref float interpolant, int sample) { __target_switch { - case hlsl: - { - return EvaluateAttributeAtSample(interpolant, sample); - } case glsl: __intrinsic_asm "interpolateAtSample($0,$1)"; case spirv: { @@ -7515,18 +7924,14 @@ public float interpolateAtSample(__ref float interpolant, int sample) } } } -[require(any_gfx_target, fragmentprocessing)] __generic<let N : int> [__NoSideEffect] [__GLSLRequireShaderInputParameter(0)] +[require(glsl_spirv, fragmentprocessing)] public vector<float, N> interpolateAtSample(__ref vector<float, N> interpolant, int sample) { __target_switch { - case hlsl: - { - return EvaluateAttributeAtSample(interpolant, sample); - } case glsl: __intrinsic_asm "interpolateAtSample($0,$1)"; case spirv: { @@ -7539,9 +7944,9 @@ public vector<float, N> interpolateAtSample(__ref vector<float, N> interpolant, } } -[require(glsl_spirv, fragmentprocessing)] [__NoSideEffect] [__GLSLRequireShaderInputParameter(0)] +[require(glsl_spirv, fragmentprocessing)] public float interpolateAtOffset(__ref float interpolant, vec2 offset) { __target_switch @@ -7557,10 +7962,10 @@ public float interpolateAtOffset(__ref float interpolant, vec2 offset) } } } -[require(glsl_spirv, fragmentprocessing)] __generic<let N : int> [__NoSideEffect] [__GLSLRequireShaderInputParameter(0)] +[require(glsl_spirv, fragmentprocessing)] public vector<float, N> interpolateAtOffset(__ref vector<float, N> interpolant, vec2 offset) { __target_switch @@ -7650,8 +8055,8 @@ public vec4 noise4(vector<float, N> x) // control flow. // TODO: if called after a return, error. -[require(any_gfx_target, compute_tess_gfx)] [ForceInline] +[require(glsl_hlsl_spirv, shader_stages_compute_tesscontrol_tesseval)] public void barrier() { __target_switch @@ -7673,8 +8078,8 @@ public void barrier() /// Section 8.17. Shader Memory Control Functions -[require(shadermemorycontrol)] [ForceInline] +[require(glsl_hlsl_spirv, shadermemorycontrol)] public void memoryBarrier() { __target_switch @@ -7699,8 +8104,8 @@ public void memoryBarrier() // glslang will compile with `AtomicCounterMemory` since it does not use // the `AtomicStorage` OpCapability which is required for `AtomicCounterMemory`. // this is invalid/undefined spir-v for vulkan targets and should not be followed -[require(any_gfx_target, shadermemorycontrol_compute)] [ForceInline] +[require(glsl_hlsl_spirv, shadermemorycontrol_compute)] public void memoryBarrierAtomicCounter() { __target_switch @@ -7717,8 +8122,8 @@ public void memoryBarrierAtomicCounter() } } } -[require(shadermemorycontrol)] [ForceInline] +[require(glsl_hlsl_spirv, shadermemorycontrol)] public void memoryBarrierBuffer() { __target_switch @@ -7736,8 +8141,8 @@ public void memoryBarrierBuffer() } } -[require(any_gfx_target, shadermemorycontrol_compute)] [ForceInline] +[require(glsl_hlsl_spirv, shadermemorycontrol_compute)] public void memoryBarrierShared() { __target_switch @@ -7754,8 +8159,8 @@ public void memoryBarrierShared() } } } -[require(shadermemorycontrol)] [ForceInline] +[require(glsl_hlsl_spirv, shadermemorycontrol)] public void memoryBarrierImage() { __target_switch @@ -7771,8 +8176,8 @@ public void memoryBarrierImage() } } } -[require(any_gfx_target, shadermemorycontrol_compute)] [ForceInline] +[require(glsl_hlsl_spirv, shadermemorycontrol_compute)] public void groupMemoryBarrier() { __target_switch @@ -7822,9 +8227,9 @@ ${{{{ }}}} __generic<T> - [require(glsl_spirv, subpass)] [__NoSideEffect] [ForceInline] + [require(glsl_hlsl_spirv, subpass)] public T subpassLoad(__SubpassImpl<T,0> subpass) { __target_switch @@ -7843,9 +8248,9 @@ ${{{{ } } __generic<T> - [require(glsl_spirv, subpass)] [__NoSideEffect] [ForceInline] + [require(glsl_hlsl_spirv, subpass)] public T subpassLoad(__SubpassImpl<T,1> subpass, int sample) { __target_switch @@ -7871,27 +8276,27 @@ ${{{{ // alternatives __glsl_version(460) __spirv_version(1.3) -[require(shaderinvocationgroup)] [NonUniformReturn] [ForceInline] +[require(glsl_hlsl_spirv, shaderinvocationgroup)] public bool anyInvocation(bool value) { return WaveActiveAnyTrue(value); } __glsl_version(460) __spirv_version(1.3) -[require(shaderinvocationgroup)] [NonUniformReturn] [ForceInline] +[require(glsl_hlsl_spirv, shaderinvocationgroup)] public bool allInvocations(bool value) { return WaveActiveAllTrue(value); } __glsl_version(460) __spirv_version(1.3) -[require(shaderinvocationgroup)] [NonUniformReturn] [ForceInline] +[require(glsl_hlsl_spirv, shaderinvocationgroup)] public bool allInvocationsEqual(bool value) { return WaveActiveAllEqual(value); |
