summaryrefslogtreecommitdiffstats
path: root/source
diff options
context:
space:
mode:
authorEllie Hermaszewska <ellieh@nvidia.com>2023-02-03 12:18:49 +0800
committerGitHub <noreply@github.com>2023-02-03 12:18:49 +0800
commita00dc69ca8dfbc346940c7d03d67c1cb229577fb (patch)
treece102791bfe2b052edb4e4fc3453a92fc53fb3a8 /source
parentbbd1e1786401bb88c34802b987d4da72e2364503 (diff)
Use SPIR-V opcode names rather than numbers (#2571)
* s/emititng blobal/emitting global * Use SPIR-V opcode names rather than numbers * regenerate Visual Studio project files * Use names for extended SPIR-V GLSL instructions * Add missing operand for SPIR-V extended instruction * Add warning aginst modifying generated hashing files * Squash warnings on MSVC
Diffstat (limited to 'source')
-rw-r--r--source/slang/hlsl.meta.slang240
-rw-r--r--source/slang/slang-emit-spirv.cpp7
-rw-r--r--source/slang/slang-ir-spirv-snippet.cpp75
-rw-r--r--source/slang/slang-lookup-glslstd450.cpp137
-rw-r--r--source/slang/slang-lookup-spirv.h10
-rw-r--r--source/slang/slang-lookup-spvop.cpp762
6 files changed, 1101 insertions, 130 deletions
diff --git a/source/slang/hlsl.meta.slang b/source/slang/hlsl.meta.slang
index ed150a4c0..f5b138f25 100644
--- a/source/slang/hlsl.meta.slang
+++ b/source/slang/hlsl.meta.slang
@@ -221,14 +221,14 @@ struct StructuredBuffer
out uint stride);
__target_intrinsic(glsl, "$0._data[$1]")
- __target_intrinsic(spirv_direct, "%addr = 65 resultType*StorageBuffer resultId _0 const(int, 0) _1; 61 resultType resultId %addr;")
+ __target_intrinsic(spirv_direct, "%addr = OpAccessChain resultType*StorageBuffer resultId _0 const(int, 0) _1; OpLoad resultType resultId %addr;")
T Load(int location);
T Load(int location, out uint status);
__subscript(uint index) -> T
{
__target_intrinsic(glsl, "$0._data[$1]")
- __target_intrinsic(spirv_direct, "%addr = 65 resultType*StorageBuffer resultId _0 const(int, 0) _1; 61 resultType resultId %addr;")
+ __target_intrinsic(spirv_direct, "%addr = OpAccessChain resultType*StorageBuffer resultId _0 const(int, 0) _1; OpLoad resultType resultId %addr;")
get;
};
};
@@ -697,14 +697,14 @@ struct $(item.name)
uint IncrementCounter();
__target_intrinsic(glsl, "$0._data[$1]")
- __target_intrinsic(spirv_direct, "%addr = 65 resultType*StorageBuffer resultId _0 const(int, 0) _1; 61 resultType resultId %addr;")
+ __target_intrinsic(spirv_direct, "%addr = OpAccessChain resultType*StorageBuffer resultId _0 const(int, 0) _1; OpLoad resultType resultId %addr;")
T Load(int location);
T Load(int location, out uint status);
__subscript(uint index) -> T
{
__target_intrinsic(glsl, "$0._data[$1]")
- __target_intrinsic(spirv_direct, "*StorageBuffer 65 resultType resultId _0 const(int, 0) _1")
+ __target_intrinsic(spirv_direct, "*StorageBuffer OpAccessChain resultType resultId _0 const(int, 0) _1")
ref;
}
};
@@ -797,7 +797,7 @@ __target_intrinsic(hlsl)
__target_intrinsic(glsl)
__target_intrinsic(cuda, "$P_abs($0)")
__target_intrinsic(cpp, "$P_abs($0)")
-__target_intrinsic(spirv_direct, "12 resultType resultId glsl450 fi(4,5) _0")
+__target_intrinsic(spirv_direct, "OpExtInst resultType resultId glsl450 fi(FAbs, SAbs) _0")
T abs(T x);
/*{
// Note: this simple definition may not be appropriate for floating-point inputs
@@ -807,7 +807,7 @@ T abs(T x);
__generic<T : __BuiltinIntegerType, let N : int>
__target_intrinsic(hlsl)
__target_intrinsic(glsl)
-__target_intrinsic(spirv_direct, "12 resultType resultId glsl450 fi(4,5) _0")
+__target_intrinsic(spirv_direct, "OpExtInst resultType resultId glsl450 fi(FAbs, SAbs) _0")
vector<T, N> abs(vector<T, N> x)
{
VECTOR_MAP_UNARY(T, N, abs, x);
@@ -825,13 +825,13 @@ __target_intrinsic(hlsl)
__target_intrinsic(glsl)
__target_intrinsic(cuda, "$P_abs($0)")
__target_intrinsic(cpp, "$P_abs($0)")
-__target_intrinsic(spirv_direct, "12 resultType resultId glsl450 fi(4,5) _0")
+__target_intrinsic(spirv_direct, "OpExtInst resultType resultId glsl450 fi(FAbs, SAbs) _0")
T abs(T x);
__generic<T : __BuiltinFloatingPointType, let N : int>
__target_intrinsic(hlsl)
__target_intrinsic(glsl)
-__target_intrinsic(spirv_direct, "12 resultType resultId glsl450 fi(4,5) _0")
+__target_intrinsic(spirv_direct, "OpExtInst resultType resultId glsl450 fi(FAbs, SAbs) _0")
vector<T, N> abs(vector<T, N> x)
{
VECTOR_MAP_UNARY(T, N, abs, x);
@@ -851,13 +851,13 @@ __target_intrinsic(hlsl)
__target_intrinsic(glsl)
__target_intrinsic(cuda, "$P_acos($0)")
__target_intrinsic(cpp, "$P_acos($0)")
-__target_intrinsic(spirv_direct, "12 resultType resultId glsl450 17 _0")
+__target_intrinsic(spirv_direct, "OpExtInst resultType resultId glsl450 Acos _0")
T acos(T x);
__generic<T : __BuiltinFloatingPointType, let N : int>
__target_intrinsic(hlsl)
__target_intrinsic(glsl)
-__target_intrinsic(spirv_direct, "12 resultType resultId glsl450 17 _0")
+__target_intrinsic(spirv_direct, "OpExtInst resultType resultId glsl450 Acos _0")
vector<T, N> acos(vector<T, N> x)
{
VECTOR_MAP_UNARY(T, N, acos, x);
@@ -952,7 +952,7 @@ bool any(matrix<T, N, M> x);
__target_intrinsic(hlsl)
__target_intrinsic(glsl, "packDouble2x32(uvec2($0, $1))")
-__target_intrinsic(spirv_direct, "%v = 80 _type(uint2) resultId _0 _1; 12 resultType resultId glsl450 59 %v")
+__target_intrinsic(spirv_direct, "%v = OpCompositeConstruct _type(uint2) resultId _0 _1; OpExtInst resultType resultId glsl450 59 %v")
__glsl_extension(GL_ARB_gpu_shader5)
double asdouble(uint lowbits, uint highbits);
@@ -960,18 +960,18 @@ double asdouble(uint lowbits, uint highbits);
__target_intrinsic(hlsl)
__target_intrinsic(glsl, "intBitsToFloat")
-__target_intrinsic(spirv_direct, "124 resultType resultId _0")
+__target_intrinsic(spirv_direct, "OpBitcast resultType resultId _0")
float asfloat(int x);
__target_intrinsic(hlsl)
__target_intrinsic(glsl, "uintBitsToFloat")
-__target_intrinsic(spirv_direct, "124 resultType resultId _0")
+__target_intrinsic(spirv_direct, "OpBitcast resultType resultId _0")
float asfloat(uint x);
__generic<let N : int>
__target_intrinsic(hlsl)
__target_intrinsic(glsl, "intBitsToFloat")
-__target_intrinsic(spirv_direct, "124 resultType resultId _0")
+__target_intrinsic(spirv_direct, "OpBitcast resultType resultId _0")
vector<float, N> asfloat(vector< int, N> x)
{
VECTOR_MAP_UNARY(float, N, asfloat, x);
@@ -980,7 +980,7 @@ vector<float, N> asfloat(vector< int, N> x)
__generic<let N : int>
__target_intrinsic(hlsl)
__target_intrinsic(glsl, "uintBitsToFloat")
-__target_intrinsic(spirv_direct, "124 resultType resultId _0")
+__target_intrinsic(spirv_direct, "OpBitcast resultType resultId _0")
vector<float,N> asfloat(vector<uint,N> x)
{
VECTOR_MAP_UNARY(float, N, asfloat, x);
@@ -1021,13 +1021,13 @@ __target_intrinsic(hlsl)
__target_intrinsic(glsl)
__target_intrinsic(cuda, "$P_asin($0)")
__target_intrinsic(cpp, "$P_asin($0)")
-__target_intrinsic(spirv_direct, "12 resultType resultId glsl450 16 _0")
+__target_intrinsic(spirv_direct, "OpExtInst resultType resultId glsl450 Asin _0")
T asin(T x);
__generic<T : __BuiltinFloatingPointType, let N : int>
__target_intrinsic(hlsl)
__target_intrinsic(glsl)
-__target_intrinsic(spirv_direct, "12 resultType resultId glsl450 16 _0")
+__target_intrinsic(spirv_direct, "OpExtInst resultType resultId glsl450 Asin _0")
vector<T, N> asin(vector<T, N> x)
{
VECTOR_MAP_UNARY(T,N,asin,x);
@@ -1044,18 +1044,18 @@ matrix<T, N, M> asin(matrix<T, N, M> x)
__target_intrinsic(hlsl)
__target_intrinsic(glsl, "floatBitsToInt")
-__target_intrinsic(spirv_direct, "124 resultType resultId _0")
+__target_intrinsic(spirv_direct, "OpBitcast resultType resultId _0")
int asint(float x);
__target_intrinsic(hlsl)
__target_intrinsic(glsl, "int($0)")
-__target_intrinsic(spirv_direct, "124 resultType resultId _0")
+__target_intrinsic(spirv_direct, "OpBitcast resultType resultId _0")
int asint(uint x);
__generic<let N : int>
__target_intrinsic(hlsl)
__target_intrinsic(glsl, "floatBitsToInt")
-__target_intrinsic(spirv_direct, "124 resultType resultId _0")
+__target_intrinsic(spirv_direct, "OpBitcast resultType resultId _0")
vector<int, N> asint(vector<float, N> x)
{
VECTOR_MAP_UNARY(int, N, asint, x);
@@ -1064,7 +1064,7 @@ vector<int, N> asint(vector<float, N> x)
__generic<let N : int>
__target_intrinsic(hlsl)
__target_intrinsic(glsl, "ivec$N0($0)")
-__target_intrinsic(spirv_direct, "124 resultType resultId _0")
+__target_intrinsic(spirv_direct, "OpBitcast resultType resultId _0")
vector<int, N> asint(vector<uint, N> x)
{
VECTOR_MAP_UNARY(int, N, asint, x);
@@ -1110,18 +1110,18 @@ void asuint(double value, out uint lowbits, out uint highbits);
__target_intrinsic(hlsl)
__target_intrinsic(glsl, "floatBitsToUint")
-__target_intrinsic(spirv_direct, "124 resultType resultId _0")
+__target_intrinsic(spirv_direct, "OpBitcast resultType resultId _0")
uint asuint(float x);
__target_intrinsic(hlsl)
__target_intrinsic(glsl, "uint($0)")
-__target_intrinsic(spirv_direct, "124 resultType resultId _0")
+__target_intrinsic(spirv_direct, "OpBitcast resultType resultId _0")
uint asuint(int x);
__generic<let N : int>
__target_intrinsic(hlsl)
__target_intrinsic(glsl, "floatBitsToUint")
-__target_intrinsic(spirv_direct, "124 resultType resultId _0")
+__target_intrinsic(spirv_direct, "OpBitcast resultType resultId _0")
vector<uint,N> asuint(vector<float,N> x)
{
VECTOR_MAP_UNARY(uint, N, asuint, x);
@@ -1130,7 +1130,7 @@ vector<uint,N> asuint(vector<float,N> x)
__generic<let N : int>
__target_intrinsic(hlsl)
__target_intrinsic(glsl, "uvec$N0($0)")
-__target_intrinsic(spirv_direct, "124 resultType resultId _0")
+__target_intrinsic(spirv_direct, "OpBitcast resultType resultId _0")
vector<uint, N> asuint(vector<int, N> x)
{
VECTOR_MAP_UNARY(uint, N, asuint, x);
@@ -1242,13 +1242,13 @@ __target_intrinsic(hlsl)
__target_intrinsic(glsl)
__target_intrinsic(cuda, "$P_atan($0)")
__target_intrinsic(cpp, "$P_atan($0)")
-__target_intrinsic(spirv_direct, "12 resultType resultId glsl450 18 _0")
+__target_intrinsic(spirv_direct, "OpExtInst resultType resultId glsl450 Atan _0")
T atan(T x);
__generic<T : __BuiltinFloatingPointType, let N : int>
__target_intrinsic(hlsl)
__target_intrinsic(glsl)
-__target_intrinsic(spirv_direct, "12 resultType resultId glsl450 18 _0")
+__target_intrinsic(spirv_direct, "OpExtInst resultType resultId glsl450 Atan _0")
vector<T, N> atan(vector<T, N> x)
{
VECTOR_MAP_UNARY(T, N, atan, x);
@@ -1266,13 +1266,13 @@ __target_intrinsic(hlsl)
__target_intrinsic(glsl,"atan($0,$1)")
__target_intrinsic(cuda, "$P_atan2($0, $1)")
__target_intrinsic(cpp, "$P_atan2($0, $1)")
-__target_intrinsic(spirv_direct, "12 resultType resultId glsl450 25 _0 _1")
+__target_intrinsic(spirv_direct, "OpExtInst resultType resultId glsl450 Atan2 _0 _1")
T atan2(T y, T x);
__generic<T : __BuiltinFloatingPointType, let N : int>
__target_intrinsic(hlsl)
__target_intrinsic(glsl,"atan($0,$1)")
-__target_intrinsic(spirv_direct, "12 resultType resultId glsl450 25 _0 _1")
+__target_intrinsic(spirv_direct, "OpExtInst resultType resultId glsl450 Atan2 _0 _1")
vector<T, N> atan2(vector<T, N> y, vector<T, N> x)
{
VECTOR_MAP_BINARY(T, N, atan2, y, x);
@@ -1291,13 +1291,13 @@ __target_intrinsic(hlsl)
__target_intrinsic(glsl)
__target_intrinsic(cuda, "$P_ceil($0)")
__target_intrinsic(cpp, "$P_ceil($0)")
-__target_intrinsic(spirv_direct, "12 resultType resultId glsl450 9 _0")
+__target_intrinsic(spirv_direct, "OpExtInst resultType resultId glsl450 Ceil _0")
T ceil(T x);
__generic<T : __BuiltinFloatingPointType, let N : int>
__target_intrinsic(hlsl)
__target_intrinsic(glsl)
-__target_intrinsic(spirv_direct, "12 resultType resultId glsl450 9 _0")
+__target_intrinsic(spirv_direct, "OpExtInst resultType resultId glsl450 Ceil _0")
vector<T, N> ceil(vector<T, N> x)
{
VECTOR_MAP_UNARY(T, N, ceil, x);
@@ -1318,7 +1318,7 @@ bool CheckAccessFullyMapped(uint status);
__generic<T : __BuiltinIntegerType>
__target_intrinsic(hlsl)
__target_intrinsic(glsl)
-__target_intrinsic(spirv_direct, "12 resultType resultId glsl450 fus(43,44,45) _0 _1 _2")
+__target_intrinsic(spirv_direct, "OpExtInst resultType resultId glsl450 fus(FClamp, UClamp, SClamp) _0 _1 _2")
T clamp(T x, T minBound, T maxBound)
{
return min(max(x, minBound), maxBound);
@@ -1327,7 +1327,7 @@ T clamp(T x, T minBound, T maxBound)
__generic<T : __BuiltinIntegerType, let N : int>
__target_intrinsic(hlsl)
__target_intrinsic(glsl)
-__target_intrinsic(spirv_direct, "12 resultType resultId glsl450 fus(43,44,45) _0 _1 _2")
+__target_intrinsic(spirv_direct, "OpExtInst resultType resultId glsl450 fus(FClamp, UClamp, SClamp) _0 _1 _2")
vector<T, N> clamp(vector<T, N> x, vector<T, N> minBound, vector<T, N> maxBound)
{
return min(max(x, minBound), maxBound);
@@ -1343,7 +1343,7 @@ matrix<T,N,M> clamp(matrix<T,N,M> x, matrix<T,N,M> minBound, matrix<T,N,M> maxBo
__generic<T : __BuiltinFloatingPointType>
__target_intrinsic(hlsl)
__target_intrinsic(glsl)
-__target_intrinsic(spirv_direct, "12 resultType resultId glsl450 fus(43,44,45) _0 _1 _2")
+__target_intrinsic(spirv_direct, "OpExtInst resultType resultId glsl450 fus(FClamp, UClamp, SClamp) _0 _1 _2")
T clamp(T x, T minBound, T maxBound)
{
return min(max(x, minBound), maxBound);
@@ -1352,7 +1352,7 @@ T clamp(T x, T minBound, T maxBound)
__generic<T : __BuiltinFloatingPointType, let N : int>
__target_intrinsic(hlsl)
__target_intrinsic(glsl)
-__target_intrinsic(spirv_direct, "12 resultType resultId glsl450 fus(43,44,45) _0 _1 _2")
+__target_intrinsic(spirv_direct, "OpExtInst resultType resultId glsl450 fus(FClamp, UClamp, SClamp) _0 _1 _2")
vector<T, N> clamp(vector<T, N> x, vector<T, N> minBound, vector<T, N> maxBound)
{
return min(max(x, minBound), maxBound);
@@ -1393,13 +1393,13 @@ __target_intrinsic(hlsl)
__target_intrinsic(glsl)
__target_intrinsic(cuda, "$P_cos($0)")
__target_intrinsic(cpp, "$P_cos($0)")
-__target_intrinsic(spirv_direct, "12 resultType resultId glsl450 14 _0")
+__target_intrinsic(spirv_direct, "OpExtInst resultType resultId glsl450 Cos _0")
T cos(T x);
__generic<T : __BuiltinFloatingPointType, let N : int>
__target_intrinsic(hlsl)
__target_intrinsic(glsl)
-__target_intrinsic(spirv_direct, "12 resultType resultId glsl450 14 _0")
+__target_intrinsic(spirv_direct, "OpExtInst resultType resultId glsl450 Cos _0")
vector<T, N> cos(vector<T, N> x)
{
VECTOR_MAP_UNARY(T,N, cos, x);
@@ -1418,13 +1418,13 @@ __target_intrinsic(hlsl)
__target_intrinsic(glsl)
__target_intrinsic(cuda, "$P_cosh($0)")
__target_intrinsic(cpp, "$P_cosh($0)")
-__target_intrinsic(spirv_direct, "12 resultType resultId glsl450 20 _0")
+__target_intrinsic(spirv_direct, "OpExtInst resultType resultId glsl450 Cosh _0")
T cosh(T x);
__generic<T : __BuiltinFloatingPointType, let N : int>
__target_intrinsic(hlsl)
__target_intrinsic(glsl)
-__target_intrinsic(spirv_direct, "12 resultType resultId glsl450 20 _0")
+__target_intrinsic(spirv_direct, "OpExtInst resultType resultId glsl450 Cosh _0")
vector<T,N> cosh(vector<T,N> x)
{
VECTOR_MAP_UNARY(T,N, cosh, x);
@@ -1449,7 +1449,7 @@ uint countbits(uint value);
__generic<T : __BuiltinArithmeticType>
__target_intrinsic(hlsl)
__target_intrinsic(glsl)
-__target_intrinsic(spirv_direct, "12 resultType resultId glsl450 68 _0 _1")
+__target_intrinsic(spirv_direct, "OpExtInst resultType resultId glsl450 Cross _0 _1")
vector<T,3> cross(vector<T,3> left, vector<T,3> right)
{
return vector<T,3>(
@@ -1599,7 +1599,7 @@ matrix<T, N, M> ddy_fine(matrix<T, N, M> x)
__generic<T : __BuiltinFloatingPointType>
__target_intrinsic(hlsl)
__target_intrinsic(glsl)
-__target_intrinsic(spirv_direct, "12 resultType resultId glsl450 12 _0")
+__target_intrinsic(spirv_direct, "OpExtInst resultType resultId glsl450 Degrees _0")
T degrees(T x)
{
return x * (T(180) / T.getPi());
@@ -1608,7 +1608,7 @@ T degrees(T x)
__generic<T : __BuiltinFloatingPointType, let N : int>
__target_intrinsic(hlsl)
__target_intrinsic(glsl)
-__target_intrinsic(spirv_direct, "12 resultType resultId glsl450 12 _0")
+__target_intrinsic(spirv_direct, "OpExtInst resultType resultId glsl450 Degrees _0")
vector<T, N> degrees(vector<T, N> x)
{
VECTOR_MAP_UNARY(T, N, degrees, x);
@@ -1626,7 +1626,7 @@ matrix<T, N, M> degrees(matrix<T, N, M> x)
__generic<T : __BuiltinFloatingPointType, let N : int>
__target_intrinsic(hlsl)
__target_intrinsic(glsl)
-__target_intrinsic(spirv_direct, "12 resultType resultId glsl450 33 _0")
+__target_intrinsic(spirv_direct, "OpExtInst resultType resultId glsl450 Determinant _0")
T determinant(matrix<T,N,N> m);
// Barrier for device memory
@@ -1643,7 +1643,7 @@ void DeviceMemoryBarrierWithGroupSync();
__generic<T : __BuiltinFloatingPointType, let N : int>
__target_intrinsic(hlsl)
__target_intrinsic(glsl)
-__target_intrinsic(spirv_direct, "12 resultType resultId glsl450 67 _0 _1")
+__target_intrinsic(spirv_direct, "OpExtInst resultType resultId glsl450 Distance _0 _1")
T distance(vector<T, N> x, vector<T, N> y)
{
return length(x - y);
@@ -1695,12 +1695,12 @@ RWStructuredBuffer<T> __getEquivalentStructuredBuffer<T>(RWByteAddressBuffer b);
__generic<T : __BuiltinArithmeticType>
__target_intrinsic(glsl, interpolateAtCentroid)
-__target_intrinsic(spirv_direct, "12 resultType resultId glsl450 76 _0")
+__target_intrinsic(spirv_direct, "OpExtInst resultType resultId glsl450 InterpolateAtCentroid _0")
T EvaluateAttributeAtCentroid(T x);
__generic<T : __BuiltinArithmeticType, let N : int>
__target_intrinsic(glsl, interpolateAtCentroid)
-__target_intrinsic(spirv_direct, "12 resultType resultId glsl450 76 _0")
+__target_intrinsic(spirv_direct, "OpExtInst resultType resultId glsl450 InterpolateAtCentroid _0")
vector<T,N> EvaluateAttributeAtCentroid(vector<T,N> x);
__generic<T : __BuiltinArithmeticType, let N : int, let M : int>
@@ -1712,12 +1712,12 @@ matrix<T,N,M> EvaluateAttributeAtCentroid(matrix<T,N,M> x)
__generic<T : __BuiltinArithmeticType>
__target_intrinsic(glsl, "interpolateAtSample($0, int($1))")
-__target_intrinsic(spirv_direct, "12 resultType resultId glsl450 77 _0 _1")
+__target_intrinsic(spirv_direct, "OpExtInst resultType resultId glsl450 InterpolateAtSample _0 _1")
T EvaluateAttributeAtSample(T x, uint sampleindex);
__generic<T : __BuiltinArithmeticType, let N : int>
__target_intrinsic(glsl, "interpolateAtSample($0, int($1))")
-__target_intrinsic(spirv_direct, "12 resultType resultId glsl450 77 _0 _1")
+__target_intrinsic(spirv_direct, "OpExtInst resultType resultId glsl450 InterpolateAtSample _0 _1")
vector<T,N> EvaluateAttributeAtSample(vector<T,N> x, uint sampleindex);
__generic<T : __BuiltinArithmeticType, let N : int, let M : int>
@@ -1734,12 +1734,12 @@ matrix<T,N,M> EvaluateAttributeAtSample(matrix<T,N,M> x, uint sampleindex)
__generic<T : __BuiltinArithmeticType>
__target_intrinsic(glsl, "interpolateAtOffset($0, vec2($1) / 16.0f)")
-__target_intrinsic(spirv_direct, "%foffset = 111 _type(float2) resultId _1; %offsetdiv16 = 136 _type(float2) resultId %foffset const(float2, 16.0, 16.0); 12 resultType resultId glsl450 78 _0 %offsetdiv16")
+__target_intrinsic(spirv_direct, "%foffset = OpConvertSToF _type(float2) resultId _1; %offsetdiv16 = 136 _type(float2) resultId %foffset const(float2, 16.0, 16.0); OpExtInst resultType resultId glsl450 78 _0 %offsetdiv16")
T EvaluateAttributeSnapped(T x, int2 offset);
__generic<T : __BuiltinArithmeticType, let N : int>
__target_intrinsic(glsl, "interpolateAtOffset($0, vec2($1) / 16.0f)")
-__target_intrinsic(spirv_direct, "%foffset = 111 _type(float2) resultId _1; %offsetdiv16 = 136 _type(float2) resultId %foffset const(float2, 16.0, 16.0); 12 resultType resultId glsl450 78 _0 %offsetdiv16")
+__target_intrinsic(spirv_direct, "%foffset = OpConvertSToF _type(float2) resultId _1; %offsetdiv16 = 136 _type(float2) resultId %foffset const(float2, 16.0, 16.0); OpExtInst resultType resultId glsl450 78 _0 %offsetdiv16")
vector<T,N> EvaluateAttributeSnapped(vector<T,N> x, int2 offset);
__generic<T : __BuiltinArithmeticType, let N : int, let M : int>
@@ -1761,13 +1761,13 @@ __target_intrinsic(hlsl)
__target_intrinsic(glsl)
__target_intrinsic(cuda, "$P_exp($0)")
__target_intrinsic(cpp, "$P_exp($0)")
-__target_intrinsic(spirv_direct, "12 resultType resultId glsl450 27 _0")
+__target_intrinsic(spirv_direct, "OpExtInst resultType resultId glsl450 Exp _0")
T exp(T x);
__generic<T : __BuiltinFloatingPointType, let N : int>
__target_intrinsic(hlsl)
__target_intrinsic(glsl)
-__target_intrinsic(spirv_direct, "12 resultType resultId glsl450 27 _0")
+__target_intrinsic(spirv_direct, "OpExtInst resultType resultId glsl450 Exp _0")
vector<T, N> exp(vector<T, N> x)
{
VECTOR_MAP_UNARY(T, N, exp, x);
@@ -1787,13 +1787,13 @@ __target_intrinsic(hlsl)
__target_intrinsic(glsl)
__target_intrinsic(cuda, "$P_exp2($0)")
__target_intrinsic(cpp, "$P_exp2($0)")
-__target_intrinsic(spirv_direct, "12 resultType resultId glsl450 29 _0")
+__target_intrinsic(spirv_direct, "OpExtInst resultType resultId glsl450 Exp2 _0")
T exp2(T x);
__generic<T : __BuiltinFloatingPointType, let N : int>
__target_intrinsic(hlsl)
__target_intrinsic(glsl)
-__target_intrinsic(spirv_direct, "12 resultType resultId glsl450 29 _0")
+__target_intrinsic(spirv_direct, "OpExtInst resultType resultId glsl450 Exp2 _0")
vector<T,N> exp2(vector<T,N> x)
{
VECTOR_MAP_UNARY(T, N, exp2, x);
@@ -1886,12 +1886,12 @@ __target_intrinsic(hlsl)
__target_intrinsic(glsl,"findMSB")
__target_intrinsic(cuda, "$P_firstbithigh($0)")
__target_intrinsic(cpp, "$P_firstbithigh($0)")
-__target_intrinsic(spirv_direct, "12 resultType resultId glsl450 74 _0")
+__target_intrinsic(spirv_direct, "OpExtInst resultType resultId glsl450 FindSMsb _0")
int firstbithigh(int value);
__target_intrinsic(hlsl)
__target_intrinsic(glsl,"findMSB")
-__target_intrinsic(spirv_direct, "12 resultType resultId glsl450 74 _0")
+__target_intrinsic(spirv_direct, "OpExtInst resultType resultId glsl450 FindSMsb _0")
__generic<let N : int>
vector<int, N> firstbithigh(vector<int, N> value)
{
@@ -1902,12 +1902,12 @@ __target_intrinsic(hlsl)
__target_intrinsic(glsl,"findMSB")
__target_intrinsic(cuda, "$P_firstbithigh($0)")
__target_intrinsic(cpp, "$P_firstbithigh($0)")
-__target_intrinsic(spirv_direct, "12 resultType resultId glsl450 75 _0")
+__target_intrinsic(spirv_direct, "OpExtInst resultType resultId glsl450 FindUMsb _0")
uint firstbithigh(uint value);
__target_intrinsic(hlsl)
__target_intrinsic(glsl,"findMSB")
-__target_intrinsic(spirv_direct, "12 resultType resultId glsl450 75 _0")
+__target_intrinsic(spirv_direct, "OpExtInst resultType resultId glsl450 FindUMsb _0")
__generic<let N : int>
vector<uint,N> firstbithigh(vector<uint,N> value)
{
@@ -1919,12 +1919,12 @@ __target_intrinsic(hlsl)
__target_intrinsic(glsl,"findLSB")
__target_intrinsic(cuda, "$P_firstbitlow($0)")
__target_intrinsic(cpp, "$P_firstbitlow($0)")
-__target_intrinsic(spirv_direct, "12 resultType resultId glsl450 73 _0")
+__target_intrinsic(spirv_direct, "OpExtInst resultType resultId glsl450 FindILsb _0")
int firstbitlow(int value);
__target_intrinsic(hlsl)
__target_intrinsic(glsl,"findLSB")
-__target_intrinsic(spirv_direct, "12 resultType resultId glsl450 73 _0")
+__target_intrinsic(spirv_direct, "OpExtInst resultType resultId glsl450 FindILsb _0")
__generic<let N : int>
vector<int,N> firstbitlow(vector<int,N> value)
{
@@ -1935,13 +1935,13 @@ __target_intrinsic(hlsl)
__target_intrinsic(glsl,"findLSB")
__target_intrinsic(cuda, "$P_firstbitlow($0)")
__target_intrinsic(cpp, "$P_firstbitlow($0)")
-__target_intrinsic(spirv_direct, "12 resultType resultId glsl450 73 _0")
+__target_intrinsic(spirv_direct, "OpExtInst resultType resultId glsl450 FindILsb _0")
uint firstbitlow(uint value);
__target_intrinsic(hlsl)
__target_intrinsic(glsl,"findLSB")
__generic<let N : int>
-__target_intrinsic(spirv_direct, "12 resultType resultId glsl450 73 _0")
+__target_intrinsic(spirv_direct, "OpExtInst resultType resultId glsl450 FindILsb _0")
vector<uint,N> firstbitlow(vector<uint,N> value)
{
VECTOR_MAP_UNARY(uint, N, firstbitlow, value);
@@ -1954,13 +1954,13 @@ __target_intrinsic(hlsl)
__target_intrinsic(glsl)
__target_intrinsic(cuda, "$P_floor($0)")
__target_intrinsic(cpp, "$P_floor($0)")
-__target_intrinsic(spirv_direct, "12 resultType resultId glsl450 8 _0")
+__target_intrinsic(spirv_direct, "OpExtInst resultType resultId glsl450 Floor _0")
T floor(T x);
__generic<T : __BuiltinFloatingPointType, let N : int>
__target_intrinsic(hlsl)
__target_intrinsic(glsl)
-__target_intrinsic(spirv_direct, "12 resultType resultId glsl450 8 _0")
+__target_intrinsic(spirv_direct, "OpExtInst resultType resultId glsl450 Floor _0")
vector<T, N> floor(vector<T, N> x)
{
VECTOR_MAP_UNARY(T, N, floor, x);
@@ -1978,13 +1978,13 @@ __target_intrinsic(hlsl)
__target_intrinsic(glsl)
__target_intrinsic(cuda, "$P_fma($0, $1, $2)")
__target_intrinsic(cpp, "$P_fma($0, $1, $2)")
-__target_intrinsic(spirv_direct, "12 resultType resultId glsl450 50 _0 _1 _2")
+__target_intrinsic(spirv_direct, "OpExtInst resultType resultId glsl450 Fma _0 _1 _2")
double fma(double a, double b, double c);
__generic<let N : int>
__target_intrinsic(hlsl)
__target_intrinsic(glsl)
-__target_intrinsic(spirv_direct, "12 resultType resultId glsl450 50 _0 _1 _2")
+__target_intrinsic(spirv_direct, "OpExtInst resultType resultId glsl450 Fma _0 _1 _2")
vector<double, N> fma(vector<double, N> a, vector<double, N> b, vector<double, N> c)
{
VECTOR_MAP_TRINARY(double, N, fma, a, b, c);
@@ -2027,13 +2027,13 @@ __target_intrinsic(hlsl)
__target_intrinsic(glsl, fract)
__target_intrinsic(cuda, "$P_frac($0)")
__target_intrinsic(cpp, "$P_frac($0)")
-__target_intrinsic(spirv_direct, "12 resultType resultId glsl450 10 _0")
+__target_intrinsic(spirv_direct, "OpExtInst resultType resultId glsl450 Fract _0")
T frac(T x);
__generic<T : __BuiltinFloatingPointType, let N : int>
__target_intrinsic(hlsl)
__target_intrinsic(glsl, fract)
-__target_intrinsic(spirv_direct, "12 resultType resultId glsl450 10 _0")
+__target_intrinsic(spirv_direct, "OpExtInst resultType resultId glsl450 Fract _0")
vector<T, N> frac(vector<T, N> x)
{
VECTOR_MAP_UNARY(T, N, frac, x);
@@ -2049,13 +2049,13 @@ matrix<T, N, M> frac(matrix<T, N, M> x)
__generic<T : __BuiltinFloatingPointType>
__target_intrinsic(hlsl)
__target_intrinsic(glsl)
-__target_intrinsic(spirv_direct, "12 resultType resultId glsl450 51 _0 _1")
+__target_intrinsic(spirv_direct, "OpExtInst resultType resultId glsl450 Frexp _0 _1")
T frexp(T x, out T exp);
__generic<T : __BuiltinFloatingPointType, let N : int>
__target_intrinsic(hlsl)
__target_intrinsic(glsl)
-__target_intrinsic(spirv_direct, "12 resultType resultId glsl450 51 _0 _1")
+__target_intrinsic(spirv_direct, "OpExtInst resultType resultId glsl450 Frexp _0 _1")
vector<T, N> frexp(vector<T, N> x, out vector<T, N> exp)
{
VECTOR_MAP_BINARY(T, N, frexp, x, exp);
@@ -2367,7 +2367,7 @@ matrix<bool, N, M> isnan(matrix<T, N, M> x)
__generic<T : __BuiltinFloatingPointType>
__target_intrinsic(hlsl)
-__target_intrinsic(spirv_direct, "12 resultType resultId glsl450 53 _0 _1")
+__target_intrinsic(spirv_direct, "OpExtInst resultType resultId glsl450 Ldexp _0 _1")
T ldexp(T x, T exp)
{
return x * exp2(exp);
@@ -2375,7 +2375,7 @@ T ldexp(T x, T exp)
__generic<T : __BuiltinFloatingPointType, let N : int>
__target_intrinsic(hlsl)
-__target_intrinsic(spirv_direct, "12 resultType resultId glsl450 53 _0 _1")
+__target_intrinsic(spirv_direct, "OpExtInst resultType resultId glsl450 Ldexp _0 _1")
vector<T, N> ldexp(vector<T, N> x, vector<T, N> exp)
{
return x * exp2(exp);
@@ -2392,7 +2392,7 @@ matrix<T, N, M> ldexp(matrix<T, N, M> x, matrix<T, N, M> exp)
__generic<T : __BuiltinFloatingPointType, let N : int>
__target_intrinsic(hlsl)
__target_intrinsic(glsl)
-__target_intrinsic(spirv_direct, "12 resultType resultId glsl450 66 _0")
+__target_intrinsic(spirv_direct, "OpExtInst resultType resultId glsl450 Length _0")
T length(vector<T, N> x)
{
return sqrt(dot(x, x));
@@ -2402,7 +2402,7 @@ T length(vector<T, N> x)
__generic<T : __BuiltinFloatingPointType>
__target_intrinsic(hlsl)
__target_intrinsic(glsl, mix)
-__target_intrinsic(spirv_direct, "12 resultType resultId glsl450 46 _0 _1 _2")
+__target_intrinsic(spirv_direct, "OpExtInst resultType resultId glsl450 FMix _0 _1 _2")
T lerp(T x, T y, T s)
{
return x * (T(1.0f) - s) + y * s;
@@ -2411,7 +2411,7 @@ T lerp(T x, T y, T s)
__generic<T : __BuiltinFloatingPointType, let N : int>
__target_intrinsic(hlsl)
__target_intrinsic(glsl, mix)
-__target_intrinsic(spirv_direct, "12 resultType resultId glsl450 46 _0 _1 _2")
+__target_intrinsic(spirv_direct, "OpExtInst resultType resultId glsl450 FMix _0 _1 _2")
vector<T, N> lerp(vector<T, N> x, vector<T, N> y, vector<T, N> s)
{
return x * (T(1.0f) - s) + y * s;
@@ -2440,13 +2440,13 @@ __target_intrinsic(hlsl)
__target_intrinsic(glsl)
__target_intrinsic(cuda, "$P_log($0)")
__target_intrinsic(cpp, "$P_log($0)")
-__target_intrinsic(spirv_direct, "12 resultType resultId glsl450 28 _0")
+__target_intrinsic(spirv_direct, "OpExtInst resultType resultId glsl450 Log _0")
T log(T x);
__generic<T : __BuiltinFloatingPointType, let N : int>
__target_intrinsic(hlsl)
__target_intrinsic(glsl)
-__target_intrinsic(spirv_direct, "12 resultType resultId glsl450 28 _0")
+__target_intrinsic(spirv_direct, "OpExtInst resultType resultId glsl450 Log _0")
vector<T, N> log(vector<T, N> x)
{
VECTOR_MAP_UNARY(T, N, log, x);
@@ -2465,13 +2465,13 @@ __target_intrinsic(hlsl)
__target_intrinsic(glsl, "(log( $0 ) * $S0( 0.43429448190325182765112891891661) )" )
__target_intrinsic(cuda, "$P_log10($0)")
__target_intrinsic(cpp, "$P_log10($0)")
-__target_intrinsic(spirv_direct, "%baseElog = 12 resultType resultId glsl450 28 _0; 133 resultType resultId _0 %baseElog const(_p,0.43429448190325182765112891891661)")
+__target_intrinsic(spirv_direct, "%baseElog = OpExtInst resultType resultId glsl450 Log _0; OpFMul resultType resultId _0 %baseElog const(_p,0.43429448190325182765112891891661)")
T log10(T x);
__generic<T : __BuiltinFloatingPointType, let N : int>
__target_intrinsic(hlsl)
__target_intrinsic(glsl, "(log( $0 ) * $S0(0.43429448190325182765112891891661) )" )
-__target_intrinsic(spirv_direct, "%baseElog = 12 resultType resultId glsl450 28 _0; 142 resultType resultId _0 %baseElog const(_p,0.43429448190325182765112891891661)")
+__target_intrinsic(spirv_direct, "%baseElog = OpExtInst resultType resultId glsl450 Log _0; OpVectorTimesScalar resultType resultId _0 %baseElog const(_p,0.43429448190325182765112891891661)")
vector<T,N> log10(vector<T,N> x)
{
VECTOR_MAP_UNARY(T, N, log10, x);
@@ -2490,13 +2490,13 @@ __target_intrinsic(hlsl)
__target_intrinsic(glsl)
__target_intrinsic(cuda, "$P_log2($0)")
__target_intrinsic(cpp, "$P_log2($0)")
-__target_intrinsic(spirv_direct, "12 resultType resultId glsl450 30 _0")
+__target_intrinsic(spirv_direct, "OpExtInst resultType resultId glsl450 Log2 _0")
T log2(T x);
__generic<T : __BuiltinFloatingPointType, let N : int>
__target_intrinsic(hlsl)
__target_intrinsic(glsl)
-__target_intrinsic(spirv_direct, "12 resultType resultId glsl450 30 _0")
+__target_intrinsic(spirv_direct, "OpExtInst resultType resultId glsl450 Log2 _0")
vector<T,N> log2(vector<T,N> x)
{
VECTOR_MAP_UNARY(T, N, log2, x);
@@ -2516,13 +2516,13 @@ __target_intrinsic(hlsl)
__target_intrinsic(glsl, fma)
__target_intrinsic(cuda, "$P_fma($0, $1, $2)")
__target_intrinsic(cpp, "$P_fma($0, $1, $2)")
-__target_intrinsic(spirv_direct, "12 resultType resultId glsl450 50 _0 _1 _2")
+__target_intrinsic(spirv_direct, "OpExtInst resultType resultId glsl450 Fma _0 _1 _2")
T mad(T mvalue, T avalue, T bvalue);
__generic<T : __BuiltinArithmeticType, let N : int>
__target_intrinsic(hlsl)
__target_intrinsic(glsl, fma)
-__target_intrinsic(spirv_direct, "12 resultType resultId glsl450 50 _0 _1 _2")
+__target_intrinsic(spirv_direct, "OpExtInst resultType resultId glsl450 Fma _0 _1 _2")
vector<T, N> mad(vector<T, N> mvalue, vector<T, N> avalue, vector<T, N> bvalue)
{
VECTOR_MAP_TRINARY(T, N, mad, mvalue, avalue, bvalue);
@@ -2541,7 +2541,7 @@ __target_intrinsic(hlsl)
__target_intrinsic(glsl)
__target_intrinsic(cuda, "$P_max($0, $1)")
__target_intrinsic(cpp, "$P_max($0, $1)")
-__target_intrinsic(spirv_direct, "12 resultType resultId glsl450 fus(40,41,42) _0")
+__target_intrinsic(spirv_direct, "OpExtInst resultType resultId glsl450 fus(FMax, UMax, SMax) _0")
T max(T x, T y);
// Note: a stdlib implementation of `max` (or `min`) will require splitting
// floating-point and integer cases apart, because the floating-point
@@ -2551,7 +2551,7 @@ T max(T x, T y);
__generic<T : __BuiltinIntegerType, let N : int>
__target_intrinsic(hlsl)
__target_intrinsic(glsl)
-__target_intrinsic(spirv_direct, "12 resultType resultId glsl450 fus(40,41,42) _0")
+__target_intrinsic(spirv_direct, "OpExtInst resultType resultId glsl450 fus(FMax, UMax, SMax) _0")
vector<T, N> max(vector<T, N> x, vector<T, N> y)
{
VECTOR_MAP_BINARY(T, N, max, x, y);
@@ -2569,13 +2569,13 @@ __target_intrinsic(hlsl)
__target_intrinsic(glsl)
__target_intrinsic(cuda, "$P_max($0, $1)")
__target_intrinsic(cpp, "$P_max($0, $1)")
-__target_intrinsic(spirv_direct, "12 resultType resultId glsl450 fus(40,41,42) _0")
+__target_intrinsic(spirv_direct, "OpExtInst resultType resultId glsl450 fus(FMax, UMax, SMax) _0")
T max(T x, T y);
__generic<T : __BuiltinFloatingPointType, let N : int>
__target_intrinsic(hlsl)
__target_intrinsic(glsl)
-__target_intrinsic(spirv_direct, "12 resultType resultId glsl450 fus(40,41,42) _0")
+__target_intrinsic(spirv_direct, "OpExtInst resultType resultId glsl450 fus(FMax, UMax, SMax) _0")
vector<T, N> max(vector<T, N> x, vector<T, N> y)
{
VECTOR_MAP_BINARY(T, N, max, x, y);
@@ -2594,13 +2594,13 @@ __target_intrinsic(hlsl)
__target_intrinsic(glsl)
__target_intrinsic(cuda, "$P_min($0, $1)")
__target_intrinsic(cpp, "$P_min($0, $1)")
-__target_intrinsic(spirv_direct, "12 resultType resultId glsl450 fus(37,38,39) _0")
+__target_intrinsic(spirv_direct, "OpExtInst resultType resultId glsl450 fus(FMin, UMin, SMin) _0")
T min(T x, T y);
__generic<T : __BuiltinIntegerType, let N : int>
__target_intrinsic(hlsl)
__target_intrinsic(glsl)
-__target_intrinsic(spirv_direct, "12 resultType resultId glsl450 fus(37,38,39) _0")
+__target_intrinsic(spirv_direct, "OpExtInst resultType resultId glsl450 fus(FMin, UMin, SMin) _0")
vector<T,N> min(vector<T,N> x, vector<T,N> y)
{
VECTOR_MAP_BINARY(T, N, min, x, y);
@@ -2618,13 +2618,13 @@ __target_intrinsic(hlsl)
__target_intrinsic(glsl)
__target_intrinsic(cuda, "$P_min($0, $1)")
__target_intrinsic(cpp, "$P_min($0, $1)")
-__target_intrinsic(spirv_direct, "12 resultType resultId glsl450 fus(37,38,39) _0")
+__target_intrinsic(spirv_direct, "OpExtInst resultType resultId glsl450 fus(FMin, UMin, SMin) _0")
T min(T x, T y);
__generic<T : __BuiltinFloatingPointType, let N : int>
__target_intrinsic(hlsl)
__target_intrinsic(glsl)
-__target_intrinsic(spirv_direct, "12 resultType resultId glsl450 fus(37,38,39) _0")
+__target_intrinsic(spirv_direct, "OpExtInst resultType resultId glsl450 fus(FMin, UMin, SMin) _0")
vector<T,N> min(vector<T,N> x, vector<T,N> y)
{
VECTOR_MAP_BINARY(T, N, min, x, y);
@@ -2928,7 +2928,7 @@ int NonUniformResourceIndex(int index)
__generic<T : __BuiltinFloatingPointType, let N : int>
__target_intrinsic(hlsl)
__target_intrinsic(glsl)
-__target_intrinsic(spirv_direct, "12 resultType resultId glsl450 69 _0")
+__target_intrinsic(spirv_direct, "OpExtInst resultType resultId glsl450 Normalize _0")
vector<T,N> normalize(vector<T,N> x)
{
return x / length(x);
@@ -2940,13 +2940,13 @@ __target_intrinsic(hlsl)
__target_intrinsic(glsl)
__target_intrinsic(cuda, "$P_pow($0, $1)")
__target_intrinsic(cpp, "$P_pow($0, $1)")
-__target_intrinsic(spirv_direct, "12 resultType resultId glsl450 26 _0 _1")
+__target_intrinsic(spirv_direct, "OpExtInst resultType resultId glsl450 Pow _0 _1")
T pow(T x, T y);
__generic<T : __BuiltinFloatingPointType, let N : int>
__target_intrinsic(hlsl)
__target_intrinsic(glsl)
-__target_intrinsic(spirv_direct, "12 resultType resultId glsl450 26 _0 _1")
+__target_intrinsic(spirv_direct, "OpExtInst resultType resultId glsl450 Pow _0 _1")
vector<T, N> pow(vector<T, N> x, vector<T, N> y)
{
VECTOR_MAP_BINARY(T, N, pow, x, y);
@@ -3100,7 +3100,7 @@ void ProcessTriTessFactorsMin(
__generic<T : __BuiltinFloatingPointType>
__target_intrinsic(hlsl)
__target_intrinsic(glsl)
-__target_intrinsic(spirv_direct, "12 resultType resultId glsl450 11 _0")
+__target_intrinsic(spirv_direct, "OpExtInst resultType resultId glsl450 Radians _0")
T radians(T x)
{
return x * (T.getPi() / T(180.0f));
@@ -3109,7 +3109,7 @@ T radians(T x)
__generic<T : __BuiltinFloatingPointType, let N : int>
__target_intrinsic(hlsl)
__target_intrinsic(glsl)
-__target_intrinsic(spirv_direct, "12 resultType resultId glsl450 11 _0")
+__target_intrinsic(spirv_direct, "OpExtInst resultType resultId glsl450 Radians _0")
vector<T, N> radians(vector<T, N> x)
{
return x * (T.getPi() / T(180.0f));
@@ -3148,7 +3148,7 @@ matrix<T, N, M> rcp(matrix<T, N, M> x)
__generic<T : __BuiltinFloatingPointType, let N : int>
__target_intrinsic(hlsl)
__target_intrinsic(glsl)
-__target_intrinsic(spirv_direct, "12 resultType resultId glsl450 71 _0 _1")
+__target_intrinsic(spirv_direct, "OpExtInst resultType resultId glsl450 Reflect _0 _1")
vector<T,N> reflect(vector<T,N> i, vector<T,N> n)
{
return i - T(2) * dot(n,i) * n;
@@ -3158,7 +3158,7 @@ vector<T,N> reflect(vector<T,N> i, vector<T,N> n)
__generic<T : __BuiltinFloatingPointType, let N : int>
__target_intrinsic(hlsl)
__target_intrinsic(glsl)
-__target_intrinsic(spirv_direct, "12 resultType resultId glsl450 72 _0 _1 _2")
+__target_intrinsic(spirv_direct, "OpExtInst resultType resultId glsl450 Refract _0 _1 _2")
vector<T,N> refract(vector<T,N> i, vector<T,N> n, T eta)
{
let dotNI = dot(n,i);
@@ -3187,13 +3187,13 @@ __target_intrinsic(hlsl)
__target_intrinsic(glsl)
__target_intrinsic(cuda, "$P_round($0)")
__target_intrinsic(cpp, "$P_round($0)")
-__target_intrinsic(spirv_direct, "12 resultType resultId glsl450 1 _0")
+__target_intrinsic(spirv_direct, "OpExtInst resultType resultId glsl450 Round _0")
T round(T x);
__generic<T : __BuiltinFloatingPointType, let N : int>
__target_intrinsic(hlsl)
__target_intrinsic(glsl)
-__target_intrinsic(spirv_direct, "12 resultType resultId glsl450 1 _0")
+__target_intrinsic(spirv_direct, "OpExtInst resultType resultId glsl450 Round _0")
vector<T, N> round(vector<T, N> x)
{
VECTOR_MAP_UNARY(T, N, round, x);
@@ -3212,7 +3212,7 @@ __target_intrinsic(hlsl)
__target_intrinsic(glsl, "inversesqrt($0)")
__target_intrinsic(cuda, "$P_rsqrt($0)")
__target_intrinsic(cpp, "$P_rsqrt($0)")
-__target_intrinsic(spirv_direct, "12 resultType resultId glsl450 32 _0")
+__target_intrinsic(spirv_direct, "OpExtInst resultType resultId glsl450 InverseSqrt _0")
T rsqrt(T x)
{
return T(1.0) / sqrt(x);
@@ -3221,7 +3221,7 @@ T rsqrt(T x)
__generic<T : __BuiltinFloatingPointType, let N : int>
__target_intrinsic(hlsl)
__target_intrinsic(glsl, "inversesqrt($0)")
-__target_intrinsic(spirv_direct, "12 resultType resultId glsl450 32 _0")
+__target_intrinsic(spirv_direct, "OpExtInst resultType resultId glsl450 InverseSqrt _0")
vector<T, N> rsqrt(vector<T, N> x)
{
VECTOR_MAP_UNARY(T, N, rsqrt, x);
@@ -3265,13 +3265,13 @@ __target_intrinsic(hlsl)
__target_intrinsic(glsl, "int(sign($0))")
__target_intrinsic(cuda, "$P_sign($0)")
__target_intrinsic(cpp, "$P_sign($0)")
-__target_intrinsic(spirv_direct, "12 resultType resultId glsl450 fi(6,7) _0")
+__target_intrinsic(spirv_direct, "OpExtInst resultType resultId glsl450 fi(FSign, SSign) _0")
int sign(T x);
__generic<T : __BuiltinSignedArithmeticType, let N : int>
__target_intrinsic(hlsl)
__target_intrinsic(glsl, "ivec$N0(sign($0))")
-__target_intrinsic(spirv_direct, "12 resultType resultId glsl450 fi(6,7) _0")
+__target_intrinsic(spirv_direct, "OpExtInst resultType resultId glsl450 fi(FSign, SSign) _0")
vector<int, N> sign(vector<T, N> x)
{
VECTOR_MAP_UNARY(int, N, sign, x);
@@ -3292,13 +3292,13 @@ __target_intrinsic(hlsl)
__target_intrinsic(glsl)
__target_intrinsic(cuda, "$P_sin($0)")
__target_intrinsic(cpp, "$P_sin($0)")
-__target_intrinsic(spirv_direct, "12 resultType resultId glsl450 13 _0")
+__target_intrinsic(spirv_direct, "OpExtInst resultType resultId glsl450 Sin _0")
T sin(T x);
__generic<T : __BuiltinFloatingPointType, let N : int>
__target_intrinsic(hlsl)
__target_intrinsic(glsl)
-__target_intrinsic(spirv_direct, "12 resultType resultId glsl450 13 _0")
+__target_intrinsic(spirv_direct, "OpExtInst resultType resultId glsl450 Sin _0")
vector<T, N> sin(vector<T, N> x)
{
VECTOR_MAP_UNARY(T, N, sin, x);
@@ -3343,13 +3343,13 @@ __target_intrinsic(hlsl)
__target_intrinsic(glsl)
__target_intrinsic(cuda, "$P_sinh($0)")
__target_intrinsic(cpp, "$P_sinh($0)")
-__target_intrinsic(spirv_direct, "12 resultType resultId glsl450 19 _0")
+__target_intrinsic(spirv_direct, "OpExtInst resultType resultId glsl450 Sinh _0")
T sinh(T x);
__generic<T : __BuiltinFloatingPointType, let N : int>
__target_intrinsic(hlsl)
__target_intrinsic(glsl)
-__target_intrinsic(spirv_direct, "12 resultType resultId glsl450 19 _0")
+__target_intrinsic(spirv_direct, "OpExtInst resultType resultId glsl450 Sinh _0")
vector<T, N> sinh(vector<T, N> x)
{
VECTOR_MAP_UNARY(T, N, sinh, x);
@@ -3366,7 +3366,7 @@ matrix<T, N, M> sinh(matrix<T, N, M> x)
__generic<T : __BuiltinFloatingPointType>
__target_intrinsic(hlsl)
__target_intrinsic(glsl)
-__target_intrinsic(spirv_direct, "12 resultType resultId glsl450 49 _0 _1 _2")
+__target_intrinsic(spirv_direct, "OpExtInst resultType resultId glsl450 SmoothStep _0 _1 _2")
T smoothstep(T min, T max, T x)
{
let t = saturate((x - min) / (max - min));
@@ -3376,7 +3376,7 @@ T smoothstep(T min, T max, T x)
__generic<T : __BuiltinFloatingPointType, let N : int>
__target_intrinsic(hlsl)
__target_intrinsic(glsl)
-__target_intrinsic(spirv_direct, "12 resultType resultId glsl450 49 _0 _1 _2")
+__target_intrinsic(spirv_direct, "OpExtInst resultType resultId glsl450 SmoothStep _0 _1 _2")
vector<T, N> smoothstep(vector<T, N> min, vector<T, N> max, vector<T, N> x)
{
VECTOR_MAP_TRINARY(T, N, smoothstep, min, max, x);
@@ -3395,13 +3395,13 @@ __target_intrinsic(hlsl)
__target_intrinsic(glsl)
__target_intrinsic(cuda, "$P_sqrt($0)")
__target_intrinsic(cpp, "$P_sqrt($0)")
-__target_intrinsic(spirv_direct, "12 resultType resultId glsl450 31 _0")
+__target_intrinsic(spirv_direct, "OpExtInst resultType resultId glsl450 Sqrt _0")
T sqrt(T x);
__generic<T : __BuiltinFloatingPointType, let N : int>
__target_intrinsic(hlsl)
__target_intrinsic(glsl)
-__target_intrinsic(spirv_direct, "12 resultType resultId glsl450 31 _0")
+__target_intrinsic(spirv_direct, "OpExtInst resultType resultId glsl450 Sqrt _0")
vector<T, N> sqrt(vector<T, N> x)
{
VECTOR_MAP_UNARY(T, N, sqrt, x);
@@ -3418,7 +3418,7 @@ matrix<T, N, M> sqrt(matrix<T, N, M> x)
__generic<T : __BuiltinFloatingPointType>
__target_intrinsic(hlsl)
__target_intrinsic(glsl)
-__target_intrinsic(spirv_direct, "12 resultType resultId glsl450 48 _0 _1")
+__target_intrinsic(spirv_direct, "OpExtInst resultType resultId glsl450 Step _0 _1")
T step(T y, T x)
{
return x < y ? T(0.0f) : T(1.0f);
@@ -3427,7 +3427,7 @@ T step(T y, T x)
__generic<T : __BuiltinFloatingPointType, let N : int>
__target_intrinsic(hlsl)
__target_intrinsic(glsl)
-__target_intrinsic(spirv_direct, "12 resultType resultId glsl450 48 _0 _1")
+__target_intrinsic(spirv_direct, "OpExtInst resultType resultId glsl450 Step _0 _1")
vector<T,N> step(vector<T,N> y, vector<T,N> x)
{
VECTOR_MAP_BINARY(T, N, step, y, x);
@@ -3446,13 +3446,13 @@ __target_intrinsic(hlsl)
__target_intrinsic(glsl)
__target_intrinsic(cuda, "$P_tan($0)")
__target_intrinsic(cpp, "$P_tan($0)")
-__target_intrinsic(spirv_direct, "12 resultType resultId glsl450 15 _0")
+__target_intrinsic(spirv_direct, "OpExtInst resultType resultId glsl450 Tan _0")
T tan(T x);
__generic<T : __BuiltinFloatingPointType, let N : int>
__target_intrinsic(hlsl)
__target_intrinsic(glsl)
-__target_intrinsic(spirv_direct, "12 resultType resultId glsl450 15 _0")
+__target_intrinsic(spirv_direct, "OpExtInst resultType resultId glsl450 Tan _0")
vector<T, N> tan(vector<T, N> x)
{
VECTOR_MAP_UNARY(T, N, tan, x);
@@ -3471,13 +3471,13 @@ __target_intrinsic(hlsl)
__target_intrinsic(glsl)
__target_intrinsic(cuda, "$P_tanh($0)")
__target_intrinsic(cpp, "$P_tanh($0)")
-__target_intrinsic(spirv_direct, "12 resultType resultId glsl450 21 _0")
+__target_intrinsic(spirv_direct, "OpExtInst resultType resultId glsl450 Tanh _0")
T tanh(T x);
__generic<T : __BuiltinFloatingPointType, let N : int>
__target_intrinsic(hlsl)
__target_intrinsic(glsl)
-__target_intrinsic(spirv_direct, "12 resultType resultId glsl450 21 _0")
+__target_intrinsic(spirv_direct, "OpExtInst resultType resultId glsl450 Tanh _0")
vector<T,N> tanh(vector<T,N> x)
{
VECTOR_MAP_UNARY(T, N, tanh, x);
@@ -3509,13 +3509,13 @@ __target_intrinsic(hlsl)
__target_intrinsic(glsl)
__target_intrinsic(cuda, "$P_trunc($0)")
__target_intrinsic(cpp, "$P_trunc($0)")
-__target_intrinsic(spirv_direct, "12 resultType resultId glsl450 3 _0")
+__target_intrinsic(spirv_direct, "OpExtInst resultType resultId glsl450 Trunc _0")
T trunc(T x);
__generic<T : __BuiltinFloatingPointType, let N : int>
__target_intrinsic(hlsl)
__target_intrinsic(glsl)
-__target_intrinsic(spirv_direct, "12 resultType resultId glsl450 3 _0")
+__target_intrinsic(spirv_direct, "OpExtInst resultType resultId glsl450 Trunc _0")
vector<T, N> trunc(vector<T, N> x)
{
VECTOR_MAP_UNARY(T, N, trunc, x);
diff --git a/source/slang/slang-emit-spirv.cpp b/source/slang/slang-emit-spirv.cpp
index 09ad3be58..47537b108 100644
--- a/source/slang/slang-emit-spirv.cpp
+++ b/source/slang/slang-emit-spirv.cpp
@@ -915,6 +915,7 @@ struct SPIRVEmitContext
getSection(SpvLogicalSectionID::ExtIntInstImports),
nullptr,
SpvOpExtInstImport,
+ kResultID,
UnownedStringSlice("GLSL.std.450"));
return m_glsl450ExtInst;
}
@@ -1213,7 +1214,7 @@ struct SPIRVEmitContext
// ...
default:
- SLANG_UNIMPLEMENTED_X("unhandled instruction opcode");
+ SLANG_UNIMPLEMENTED_X("unhandled instruction opcode for global instruction");
UNREACHABLE_RETURN(nullptr);
}
}
@@ -1568,7 +1569,7 @@ struct SPIRVEmitContext
// The instructions that appear inside the basic blocks of
// functions are what we will call "local" instructions.
//
- // When emititng blobal instructions, we usually have to
+ // When emitting global instructions, we usually have to
// pick the right logical section to emit them into, while
// for local instructions they will usually emit into
// a known parent (the basic block that contains them).
@@ -1579,7 +1580,7 @@ struct SPIRVEmitContext
switch( inst->getOp() )
{
default:
- SLANG_UNIMPLEMENTED_X("unhandled instruction opcode");
+ SLANG_UNIMPLEMENTED_X("unhandled instruction opcode for local instruction");
break;
case kIROp_Specialize:
return nullptr;
diff --git a/source/slang/slang-ir-spirv-snippet.cpp b/source/slang/slang-ir-spirv-snippet.cpp
index 5109d88c1..120c0accb 100644
--- a/source/slang/slang-ir-spirv-snippet.cpp
+++ b/source/slang/slang-ir-spirv-snippet.cpp
@@ -1,6 +1,7 @@
// slang-ir-spirv-snippet.cpp
-#include"slang-ir-spirv-snippet.h"
+#include "slang-ir-spirv-snippet.h"
+#include "slang-lookup-spirv.h"
#include "../core/slang-token-reader.h"
namespace Slang
@@ -60,8 +61,58 @@ RefPtr<SpvSnippet> SpvSnippet::parse(UnownedStringSlice definition)
mapInstNameToIndex[instName] = (int)snippet->instructions.getCount();
tokenReader.Read(Slang::Misc::TokenType::OpAssign);
}
- inst.opCode = (SpvWord)tokenReader.ReadInt();
+ SpvOp opCode;
+ switch (tokenReader.NextToken().Type)
+ {
+ case Slang::Misc::TokenType::IntLiteral:
+ opCode = (SpvOp)tokenReader.ReadInt();
+ break;
+ case Slang::Misc::TokenType::Identifier:
+ {
+ auto opName = tokenReader.ReadWord();
+ if(!lookupSpvOp(opName.getUnownedSlice(), opCode))
+ {
+ throw Misc::TextFormatException(
+ "Text parsing error: Unrecognized SPIR-V opcode: " + opName);
+ }
+ break;
+ }
+ default:
+ throw Misc::TextFormatException(
+ "Text parsing error: SPIR-V intrinsics must begin with an integer or opcode name");
+ }
+ inst.opCode = opCode;
bool insideOperandList = true;
+ const bool isExtInst = inst.opCode == SpvOpExtInst;
+ bool isGLSLstd450OpcodeAllowed = false;
+ auto readExtInstOpcode = [&]()
+ {
+ switch (tokenReader.NextToken().Type)
+ {
+ case Slang::Misc::TokenType::IntLiteral:
+ return (SpvWord)tokenReader.ReadInt();
+ break;
+ case Slang::Misc::TokenType::Identifier:
+ {
+ if(isGLSLstd450OpcodeAllowed)
+ {
+ auto opName = tokenReader.ReadWord();
+ GLSLstd450 glslOpcode;
+ if(!lookupGLSLstd450(opName.getUnownedSlice(), glslOpcode))
+ {
+ throw Misc::TextFormatException(
+ "Text parsing error: Unrecognized SPIR-V GLSLstd450 opcode: " + opName);
+ }
+ printf("BNBBB: %d\n", glslOpcode);
+ return (SpvWord)glslOpcode;
+ }
+ }
+ // fallthrough
+ default:
+ throw Misc::TextFormatException(
+ "Text parsing error: Failed to read SPIR-V ExtInst Opcode");
+ }
+ };
while (insideOperandList)
{
ASMOperand operand = {ASMOperandType::SpvWord, 0, 0, 0};
@@ -115,14 +166,16 @@ RefPtr<SpvSnippet> SpvSnippet::parse(UnownedStringSlice definition)
{
operand.type = SpvSnippet::ASMOperandType::GLSL450ExtInstSet;
inst.operands.add(operand);
+ // Allow the next token to be parsed as a glslsstd450 opcode
+ isGLSLstd450OpcodeAllowed = isExtInst;
}
else if (identifier == "fi")
{
operand.type = SpvSnippet::ASMOperandType::FloatIntegerSelection;
tokenReader.Read("(");
- operand.content = (SpvWord)tokenReader.ReadInt();
+ operand.content = readExtInstOpcode();
tokenReader.Read(",");
- operand.content2 = (SpvWord)tokenReader.ReadInt();
+ operand.content2 = readExtInstOpcode();
tokenReader.Read(")");
inst.operands.add(operand);
}
@@ -130,11 +183,11 @@ RefPtr<SpvSnippet> SpvSnippet::parse(UnownedStringSlice definition)
{
operand.type = SpvSnippet::ASMOperandType::FloatUnsignedSignedSelection;
tokenReader.Read("(");
- operand.content = (SpvWord)tokenReader.ReadInt();
+ operand.content = readExtInstOpcode();
tokenReader.Read(",");
- operand.content2 = (SpvWord)tokenReader.ReadInt();
+ operand.content2 = readExtInstOpcode();
tokenReader.Read(",");
- operand.content3 = (SpvWord)tokenReader.ReadInt();
+ operand.content3 = readExtInstOpcode();
tokenReader.Read(")");
inst.operands.add(operand);
}
@@ -183,6 +236,14 @@ RefPtr<SpvSnippet> SpvSnippet::parse(UnownedStringSlice definition)
operand.content = (SpvWord)(snippet->constants.getCount() - 1);
inst.operands.add(operand);
}
+ else if(isGLSLstd450OpcodeAllowed)
+ {
+ GLSLstd450 glslstd450Opcode;
+ lookupGLSLstd450(identifier.getUnownedSlice(), glslstd450Opcode);
+ operand.type = SpvSnippet::ASMOperandType::SpvWord;
+ operand.content = (SpvWord)glslstd450Opcode;
+ inst.operands.add(operand);
+ }
else
{
SLANG_ASSERT(!"Invalid SPV ASM operand.");
diff --git a/source/slang/slang-lookup-glslstd450.cpp b/source/slang/slang-lookup-glslstd450.cpp
new file mode 100644
index 000000000..46d683dbb
--- /dev/null
+++ b/source/slang/slang-lookup-glslstd450.cpp
@@ -0,0 +1,137 @@
+// Hash function for GLSLstd450
+//
+// This file was thoughtfully generated by a machine,
+// don't even think about modifying it yourself!
+//
+
+#include "../core/slang-common.h"
+#include "../core/slang-string.h"
+#include "spirv/unified1/GLSL.std.450.h"
+
+
+namespace Slang
+{
+
+static const unsigned tableSalt[81] ={
+ 2, 1, 5, 1, 1, 0, 1, 0, 3, 0, 3, 0, 0, 4, 6, 3,
+ 7, 8, 10, 32, 0, 0, 0, 1, 0, 21, 1, 0, 0, 66, 1, 18,
+ 2, 0, 0, 2, 0, 1, 0, 0, 3, 1, 1, 0, 0, 0, 0, 1,
+ 4, 2, 2, 0, 2, 0, 0, 2, 0, 2, 3, 0, 0, 1, 5, 4,
+ 0, 0, 0, 5, 4, 2, 1, 1, 0, 7, 5, 0, 14, 4, 10, 4,
+ 5
+};
+
+struct KV
+{
+ const char* name;
+ GLSLstd450 value;
+};
+
+static const KV words[81] =
+{
+ {"FindSMsb", GLSLstd450FindSMsb},
+ {"SClamp", GLSLstd450SClamp},
+ {"UnpackHalf2x16", GLSLstd450UnpackHalf2x16},
+ {"Normalize", GLSLstd450Normalize},
+ {"Pow", GLSLstd450Pow},
+ {"Ceil", GLSLstd450Ceil},
+ {"InterpolateAtSample", GLSLstd450InterpolateAtSample},
+ {"Cosh", GLSLstd450Cosh},
+ {"SMax", GLSLstd450SMax},
+ {"PackUnorm2x16", GLSLstd450PackUnorm2x16},
+ {"ModfStruct", GLSLstd450ModfStruct},
+ {"IMix", GLSLstd450IMix},
+ {"Ldexp", GLSLstd450Ldexp},
+ {"Atan", GLSLstd450Atan},
+ {"Round", GLSLstd450Round},
+ {"Cos", GLSLstd450Cos},
+ {"UMin", GLSLstd450UMin},
+ {"FClamp", GLSLstd450FClamp},
+ {"PackHalf2x16", GLSLstd450PackHalf2x16},
+ {"SAbs", GLSLstd450SAbs},
+ {"FindUMsb", GLSLstd450FindUMsb},
+ {"PackUnorm4x8", GLSLstd450PackUnorm4x8},
+ {"UnpackDouble2x32", GLSLstd450UnpackDouble2x32},
+ {"Fma", GLSLstd450Fma},
+ {"RoundEven", GLSLstd450RoundEven},
+ {"SmoothStep", GLSLstd450SmoothStep},
+ {"Refract", GLSLstd450Refract},
+ {"UnpackUnorm4x8", GLSLstd450UnpackUnorm4x8},
+ {"NClamp", GLSLstd450NClamp},
+ {"Trunc", GLSLstd450Trunc},
+ {"Sin", GLSLstd450Sin},
+ {"Asinh", GLSLstd450Asinh},
+ {"Atanh", GLSLstd450Atanh},
+ {"Length", GLSLstd450Length},
+ {"Fract", GLSLstd450Fract},
+ {"Asin", GLSLstd450Asin},
+ {"Determinant", GLSLstd450Determinant},
+ {"Floor", GLSLstd450Floor},
+ {"SMin", GLSLstd450SMin},
+ {"MatrixInverse", GLSLstd450MatrixInverse},
+ {"Exp2", GLSLstd450Exp2},
+ {"PackSnorm2x16", GLSLstd450PackSnorm2x16},
+ {"FindILsb", GLSLstd450FindILsb},
+ {"FMax", GLSLstd450FMax},
+ {"NMin", GLSLstd450NMin},
+ {"Frexp", GLSLstd450Frexp},
+ {"InverseSqrt", GLSLstd450InverseSqrt},
+ {"Atan2", GLSLstd450Atan2},
+ {"InterpolateAtCentroid", GLSLstd450InterpolateAtCentroid},
+ {"UClamp", GLSLstd450UClamp},
+ {"FMix", GLSLstd450FMix},
+ {"FaceForward", GLSLstd450FaceForward},
+ {"Tan", GLSLstd450Tan},
+ {"Modf", GLSLstd450Modf},
+ {"Exp", GLSLstd450Exp},
+ {"PackSnorm4x8", GLSLstd450PackSnorm4x8},
+ {"UnpackUnorm2x16", GLSLstd450UnpackUnorm2x16},
+ {"UMax", GLSLstd450UMax},
+ {"FSign", GLSLstd450FSign},
+ {"Distance", GLSLstd450Distance},
+ {"UnpackSnorm2x16", GLSLstd450UnpackSnorm2x16},
+ {"Log", GLSLstd450Log},
+ {"PackDouble2x32", GLSLstd450PackDouble2x32},
+ {"Sinh", GLSLstd450Sinh},
+ {"UnpackSnorm4x8", GLSLstd450UnpackSnorm4x8},
+ {"Cross", GLSLstd450Cross},
+ {"NMax", GLSLstd450NMax},
+ {"Acosh", GLSLstd450Acosh},
+ {"Reflect", GLSLstd450Reflect},
+ {"Degrees", GLSLstd450Degrees},
+ {"Acos", GLSLstd450Acos},
+ {"Radians", GLSLstd450Radians},
+ {"Sqrt", GLSLstd450Sqrt},
+ {"Tanh", GLSLstd450Tanh},
+ {"InterpolateAtOffset", GLSLstd450InterpolateAtOffset},
+ {"Step", GLSLstd450Step},
+ {"FAbs", GLSLstd450FAbs},
+ {"FrexpStruct", GLSLstd450FrexpStruct},
+ {"Log2", GLSLstd450Log2},
+ {"SSign", GLSLstd450SSign},
+ {"FMin", GLSLstd450FMin},
+};
+
+static UInt32 hash(const UnownedStringSlice& str, UInt32 salt)
+{
+ UInt64 h = salt;
+ for(const char c : str)
+ h = ((h * 0x00000100000001B3) ^ c);
+ return h % (sizeof(tableSalt)/sizeof(tableSalt[0]));
+}
+
+bool lookupGLSLstd450(const UnownedStringSlice& str, GLSLstd450& value)
+{
+ const auto i = hash(str, tableSalt[hash(str, 0)]);
+ if(str == words[i].name)
+ {
+ value = words[i].value;
+ return true;
+ }
+ else
+ {
+ return false;
+ }
+}
+
+}
diff --git a/source/slang/slang-lookup-spirv.h b/source/slang/slang-lookup-spirv.h
new file mode 100644
index 000000000..bc8dfb5a4
--- /dev/null
+++ b/source/slang/slang-lookup-spirv.h
@@ -0,0 +1,10 @@
+#include "../core/slang-string.h"
+
+#include "spirv/unified1/spirv.h"
+#include "spirv/unified1/GLSL.std.450.h"
+
+namespace Slang
+{
+bool lookupSpvOp(const UnownedStringSlice& str, SpvOp& value);
+bool lookupGLSLstd450(const UnownedStringSlice& str, GLSLstd450& value);
+}
diff --git a/source/slang/slang-lookup-spvop.cpp b/source/slang/slang-lookup-spvop.cpp
new file mode 100644
index 000000000..545229eed
--- /dev/null
+++ b/source/slang/slang-lookup-spvop.cpp
@@ -0,0 +1,762 @@
+// Hash function for SpvOp
+//
+// This file was thoughtfully generated by a machine,
+// don't even think about modifying it yourself!
+//
+
+#include "../core/slang-common.h"
+#include "../core/slang-string.h"
+#include "spirv/unified1/spirv.h"
+
+
+namespace Slang
+{
+
+static const unsigned tableSalt[670] ={
+ 0, 2, 4, 0, 0, 0, 4, 5, 10, 7, 0, 5, 0, 2, 24, 1,
+ 0, 6, 8, 7, 0, 0, 2, 1, 23, 23, 5, 0, 0, 1, 0, 0,
+ 5, 0, 0, 1, 0, 10, 6, 1, 9, 6, 0, 0, 0, 12, 0, 20,
+ 7, 1, 0, 1, 0, 1, 0, 1, 18, 2, 3, 3, 0, 2, 9, 0,
+ 3, 0, 0, 4, 0, 9, 9, 0, 0, 2, 11, 0, 10, 13, 13, 0,
+ 0, 0, 38, 23, 0, 16, 7, 1, 1, 7, 63, 15, 5, 16, 12, 9,
+ 30, 0, 6, 10, 2, 22, 0, 1, 3, 2, 3, 0, 6, 0, 0, 3,
+ 0, 4, 1, 0, 1, 5, 23, 0, 0, 0, 0, 13, 9, 0, 1, 1,
+ 1, 2, 0, 5, 1, 5, 4, 1, 5, 8, 10, 3, 3, 10, 4, 2,
+ 0, 0, 5, 8, 1, 15, 7, 0, 0, 18, 5, 2, 0, 0, 0, 1,
+ 1, 1, 0, 0, 1, 7, 1, 22, 4, 0, 8, 4, 5, 11, 0, 7,
+ 0, 1, 3, 0, 4, 1, 8, 1, 2, 2, 0, 1, 0, 2, 0, 3,
+ 0, 2, 0, 0, 8, 0, 1, 0, 3, 0, 27, 15, 0, 1, 7, 7,
+ 5, 1, 1, 6, 1, 1, 22, 5, 9, 4, 0, 2, 1, 0, 70, 1,
+ 0, 4, 4, 0, 4, 0, 76, 0, 0, 36, 0, 0, 44, 80, 0, 1,
+ 8, 3, 2, 1, 4, 1, 0, 66, 0, 0, 5, 2, 2, 56, 281, 7,
+ 31, 15, 0, 0, 1, 2, 19, 1, 72, 6, 4, 40, 6, 1, 220, 0,
+ 0, 3, 104, 222, 2, 333, 0, 0, 2, 7, 7, 11, 28, 0, 19, 563,
+ 138, 0, 0, 1, 1, 2, 0, 0, 3, 21, 0, 0, 0, 0, 15, 23,
+ 4, 0, 6, 2, 179, 26, 1, 1, 0, 3, 2, 5, 0, 1, 1, 2,
+ 1, 1, 3, 7, 7, 1, 5, 1, 3, 1, 1, 0, 2, 4, 5, 1,
+ 0, 0, 3, 0, 1, 1, 0, 0, 2, 2, 1, 2, 0, 3, 3, 2,
+ 0, 0, 0, 0, 1, 3, 0, 3, 0, 0, 0, 0, 5, 1, 0, 0,
+ 1, 1, 1, 1, 0, 2, 0, 0, 1, 0, 4, 3, 2, 3, 2, 0,
+ 1, 1, 5, 3, 0, 1, 0, 2, 2, 1, 2, 7, 0, 1, 0, 0,
+ 3, 7, 2, 0, 8, 1, 9, 0, 3, 1, 1, 1, 0, 6, 0, 1,
+ 3, 15, 0, 0, 0, 3, 0, 0, 1, 1, 12, 9, 1, 1, 7, 12,
+ 0, 0, 2, 3, 3, 0, 0, 24, 1, 9, 1, 1, 0, 3, 9, 1,
+ 4, 0, 0, 0, 0, 3, 2, 0, 1, 3, 0, 2, 2, 0, 2, 0,
+ 17, 4, 0, 1, 1, 2, 0, 0, 0, 4, 0, 1, 2, 6, 0, 1,
+ 1, 0, 1, 0, 5, 0, 0, 0, 0, 1, 7, 2, 0, 5, 3, 0,
+ 1, 4, 0, 0, 12, 4, 1, 0, 2, 0, 0, 3, 2, 8, 3, 0,
+ 0, 6, 3, 0, 1, 7, 1, 1, 0, 0, 1, 0, 3, 20, 1, 1,
+ 1, 0, 2, 0, 5, 0, 2, 0, 0, 1, 1, 1, 1, 5, 1, 4,
+ 0, 0, 6, 12, 0, 0, 3, 3, 0, 0, 0, 0, 0, 9, 4, 4,
+ 0, 2, 0, 5, 2, 0, 2, 0, 4, 1, 0, 5, 16, 3, 0, 1,
+ 0, 1, 0, 0, 0, 3, 0, 2, 6, 2, 12, 0, 16, 0, 1, 2,
+ 3, 0, 2, 12, 3, 2, 0, 1, 0, 0, 1, 2, 0, 1, 1, 0,
+ 1, 1, 1, 4, 0, 1, 0, 4, 0, 3, 5, 0, 1, 1, 3, 2,
+ 0, 0, 3, 14, 2, 0, 0, 0, 3, 8, 1, 2, 1, 2, 1, 3,
+ 1, 0, 3, 2, 1, 0, 1, 3, 1, 1, 0, 3, 2, 0, 0, 0,
+ 3, 0, 1, 0, 9, 4, 2, 0, 1, 8, 5, 5, 0, 0
+};
+
+struct KV
+{
+ const char* name;
+ SpvOp value;
+};
+
+static const KV words[670] =
+{
+ {"OpAtomicOr", SpvOpAtomicOr},
+ {"OpIsValidReserveId", SpvOpIsValidReserveId},
+ {"OpSubgroupAnyKHR", SpvOpSubgroupAnyKHR},
+ {"OpSubgroupAvcImeGetStreamoutSingleReferenceMajorShapeMotionVectorsINTEL", SpvOpSubgroupAvcImeGetStreamoutSingleReferenceMajorShapeMotionVectorsINTEL},
+ {"OpSubgroupAvcRefEvaluateWithDualReferenceINTEL", SpvOpSubgroupAvcRefEvaluateWithDualReferenceINTEL},
+ {"OpSubgroupAvcFmeInitializeINTEL", SpvOpSubgroupAvcFmeInitializeINTEL},
+ {"OpCompositeInsert", SpvOpCompositeInsert},
+ {"OpPtrAccessChain", SpvOpPtrAccessChain},
+ {"OpConvertSampledImageToUNV", SpvOpConvertSampledImageToUNV},
+ {"OpReadPipeBlockingINTEL", SpvOpReadPipeBlockingINTEL},
+ {"OpAtomicIIncrement", SpvOpAtomicIIncrement},
+ {"OpBitFieldSExtract", SpvOpBitFieldSExtract},
+ {"OpUnordered", SpvOpUnordered},
+ {"OpArbitraryFloatAddINTEL", SpvOpArbitraryFloatAddINTEL},
+ {"OpLoopMerge", SpvOpLoopMerge},
+ {"OpAsmTargetINTEL", SpvOpAsmTargetINTEL},
+ {"OpConstantSampler", SpvOpConstantSampler},
+ {"OpSubgroupAvcImeStripSingleReferenceStreamoutINTEL", SpvOpSubgroupAvcImeStripSingleReferenceStreamoutINTEL},
+ {"OpFOrdNotEqual", SpvOpFOrdNotEqual},
+ {"OpRayQueryGetIntersectionCandidateAABBOpaqueKHR", SpvOpRayQueryGetIntersectionCandidateAABBOpaqueKHR},
+ {"OpBuildNDRange", SpvOpBuildNDRange},
+ {"OpUndef", SpvOpUndef},
+ {"OpConvertPtrToU", SpvOpConvertPtrToU},
+ {"OpGroupLogicalOrKHR", SpvOpGroupLogicalOrKHR},
+ {"OpNamedBarrierInitialize", SpvOpNamedBarrierInitialize},
+ {"OpConstantComposite", SpvOpConstantComposite},
+ {"OpImageSparseSampleProjDrefExplicitLod", SpvOpImageSparseSampleProjDrefExplicitLod},
+ {"OpSGreaterThanEqual", SpvOpSGreaterThanEqual},
+ {"OpBitwiseAnd", SpvOpBitwiseAnd},
+ {"OpRayQueryGetIntersectionBarycentricsKHR", SpvOpRayQueryGetIntersectionBarycentricsKHR},
+ {"OpULessThan", SpvOpULessThan},
+ {"OpUnreachable", SpvOpUnreachable},
+ {"OpSubgroupAvcRefConvertToMceResultINTEL", SpvOpSubgroupAvcRefConvertToMceResultINTEL},
+ {"OpSubgroupAvcMceConvertToImePayloadINTEL", SpvOpSubgroupAvcMceConvertToImePayloadINTEL},
+ {"OpFunctionEnd", SpvOpFunctionEnd},
+ {"OpTypeAccelerationStructureNV", SpvOpTypeAccelerationStructureNV},
+ {"OpRayQueryConfirmIntersectionKHR", SpvOpRayQueryConfirmIntersectionKHR},
+ {"OpFConvert", SpvOpFConvert},
+ {"OpSubgroupAvcSicGetPackedSkcLumaCountThresholdINTEL", SpvOpSubgroupAvcSicGetPackedSkcLumaCountThresholdINTEL},
+ {"OpIsInf", SpvOpIsInf},
+ {"OpGroupCommitReadPipe", SpvOpGroupCommitReadPipe},
+ {"OpReadClockKHR", SpvOpReadClockKHR},
+ {"OpSubgroupReadInvocationKHR", SpvOpSubgroupReadInvocationKHR},
+ {"OpFDiv", SpvOpFDiv},
+ {"OpSubgroupAvcMceConvertToImeResultINTEL", SpvOpSubgroupAvcMceConvertToImeResultINTEL},
+ {"OpSubgroupAvcImeAdjustRefOffsetINTEL", SpvOpSubgroupAvcImeAdjustRefOffsetINTEL},
+ {"OpArbitraryFloatHypotINTEL", SpvOpArbitraryFloatHypotINTEL},
+ {"OpFragmentFetchAMD", SpvOpFragmentFetchAMD},
+ {"OpISub", SpvOpISub},
+ {"OpSubgroupAvcMceSetSingleReferenceInterlacedFieldPolarityINTEL", SpvOpSubgroupAvcMceSetSingleReferenceInterlacedFieldPolarityINTEL},
+ {"OpEnqueueMarker", SpvOpEnqueueMarker},
+ {"OpGroupUMinNonUniformAMD", SpvOpGroupUMinNonUniformAMD},
+ {"OpImageQueryLevels", SpvOpImageQueryLevels},
+ {"OpIMul", SpvOpIMul},
+ {"OpRayQueryGetWorldRayDirectionKHR", SpvOpRayQueryGetWorldRayDirectionKHR},
+ {"OpAtomicIAdd", SpvOpAtomicIAdd},
+ {"OpGroupNonUniformSMin", SpvOpGroupNonUniformSMin},
+ {"OpISubSatINTEL", SpvOpISubSatINTEL},
+ {"OpTypePipeStorage", SpvOpTypePipeStorage},
+ {"OpGroupNonUniformAllEqual", SpvOpGroupNonUniformAllEqual},
+ {"OpSubgroupAvcSicSetBlockBasedRawSkipSadINTEL", SpvOpSubgroupAvcSicSetBlockBasedRawSkipSadINTEL},
+ {"OpTypeDeviceEvent", SpvOpTypeDeviceEvent},
+ {"OpGroupFMax", SpvOpGroupFMax},
+ {"OpGroupNonUniformBroadcast", SpvOpGroupNonUniformBroadcast},
+ {"OpGroupNonUniformUMax", SpvOpGroupNonUniformUMax},
+ {"OpSubgroupAvcRefSetBidirectionalMixDisableINTEL", SpvOpSubgroupAvcRefSetBidirectionalMixDisableINTEL},
+ {"OpTypeAvcMcePayloadINTEL", SpvOpTypeAvcMcePayloadINTEL},
+ {"OpSubgroupAvcSicGetPackedIpeLumaModesINTEL", SpvOpSubgroupAvcSicGetPackedIpeLumaModesINTEL},
+ {"OpFSub", SpvOpFSub},
+ {"OpSubgroupAvcSicGetPackedSkcLumaSumThresholdINTEL", SpvOpSubgroupAvcSicGetPackedSkcLumaSumThresholdINTEL},
+ {"OpSubgroupAvcMceGetDefaultIntraChromaModeBasePenaltyINTEL", SpvOpSubgroupAvcMceGetDefaultIntraChromaModeBasePenaltyINTEL},
+ {"OpGroupNonUniformBroadcastFirst", SpvOpGroupNonUniformBroadcastFirst},
+ {"OpGroupReserveReadPipePackets", SpvOpGroupReserveReadPipePackets},
+ {"OpRayQueryProceedKHR", SpvOpRayQueryProceedKHR},
+ {"OpExecutionModeId", SpvOpExecutionModeId},
+ {"OpCapability", SpvOpCapability},
+ {"OpDPdyFine", SpvOpDPdyFine},
+ {"OpDot", SpvOpDot},
+ {"OpFragmentMaskFetchAMD", SpvOpFragmentMaskFetchAMD},
+ {"OpGroupReserveWritePipePackets", SpvOpGroupReserveWritePipePackets},
+ {"OpArbitraryFloatGTINTEL", SpvOpArbitraryFloatGTINTEL},
+ {"OpFixedRecipINTEL", SpvOpFixedRecipINTEL},
+ {"OpArbitraryFloatExp10INTEL", SpvOpArbitraryFloatExp10INTEL},
+ {"OpWritePipe", SpvOpWritePipe},
+ {"OpReserveReadPipePackets", SpvOpReserveReadPipePackets},
+ {"OpSubgroupAvcSicSetIntraLumaShapePenaltyINTEL", SpvOpSubgroupAvcSicSetIntraLumaShapePenaltyINTEL},
+ {"OpSubgroupAvcMceGetDefaultInterBaseMultiReferencePenaltyINTEL", SpvOpSubgroupAvcMceGetDefaultInterBaseMultiReferencePenaltyINTEL},
+ {"OpRestoreMemoryINTEL", SpvOpRestoreMemoryINTEL},
+ {"OpLine", SpvOpLine},
+ {"OpGroupNonUniformQuadSwap", SpvOpGroupNonUniformQuadSwap},
+ {"OpTypeArray", SpvOpTypeArray},
+ {"OpRayQueryGetIntersectionInstanceCustomIndexKHR", SpvOpRayQueryGetIntersectionInstanceCustomIndexKHR},
+ {"OpFMod", SpvOpFMod},
+ {"OpLifetimeStart", SpvOpLifetimeStart},
+ {"OpSubgroupAvcImeSetEarlySearchTerminationThresholdINTEL", SpvOpSubgroupAvcImeSetEarlySearchTerminationThresholdINTEL},
+ {"OpArbitraryFloatCosINTEL", SpvOpArbitraryFloatCosINTEL},
+ {"OpSelect", SpvOpSelect},
+ {"OpUCountLeadingZerosINTEL", SpvOpUCountLeadingZerosINTEL},
+ {"OpAliasDomainDeclINTEL", SpvOpAliasDomainDeclINTEL},
+ {"OpConstantCompositeContinuedINTEL", SpvOpConstantCompositeContinuedINTEL},
+ {"OpSubgroupAvcRefEvaluateWithMultiReferenceInterlacedINTEL", SpvOpSubgroupAvcRefEvaluateWithMultiReferenceInterlacedINTEL},
+ {"OpSubgroupAvcMceSetMotionVectorCostFunctionINTEL", SpvOpSubgroupAvcMceSetMotionVectorCostFunctionINTEL},
+ {"OpCommitWritePipe", SpvOpCommitWritePipe},
+ {"OpLogicalOr", SpvOpLogicalOr},
+ {"OpAtomicUMax", SpvOpAtomicUMax},
+ {"OpRayQueryGetIntersectionTypeKHR", SpvOpRayQueryGetIntersectionTypeKHR},
+ {"OpSLessThanEqual", SpvOpSLessThanEqual},
+ {"OpSubgroupBallotKHR", SpvOpSubgroupBallotKHR},
+ {"OpVectorShuffle", SpvOpVectorShuffle},
+ {"OpReturnValue", SpvOpReturnValue},
+ {"OpTypeForwardPointer", SpvOpTypeForwardPointer},
+ {"OpArrayLength", SpvOpArrayLength},
+ {"OpSubgroupAllKHR", SpvOpSubgroupAllKHR},
+ {"OpMatrixTimesVector", SpvOpMatrixTimesVector},
+ {"OpGroupNonUniformAny", SpvOpGroupNonUniformAny},
+ {"OpUSubSatINTEL", SpvOpUSubSatINTEL},
+ {"OpUGreaterThanEqual", SpvOpUGreaterThanEqual},
+ {"OpIEqual", SpvOpIEqual},
+ {"OpCompositeExtract", SpvOpCompositeExtract},
+ {"OpSetMeshOutputsEXT", SpvOpSetMeshOutputsEXT},
+ {"OpDPdxFine", SpvOpDPdxFine},
+ {"OpArbitraryFloatLog2INTEL", SpvOpArbitraryFloatLog2INTEL},
+ {"OpCommitReadPipe", SpvOpCommitReadPipe},
+ {"OpTypeAvcImeDualReferenceStreaminINTEL", SpvOpTypeAvcImeDualReferenceStreaminINTEL},
+ {"OpGroupNonUniformLogicalAnd", SpvOpGroupNonUniformLogicalAnd},
+ {"OpAtomicUMin", SpvOpAtomicUMin},
+ {"OpPtrEqual", SpvOpPtrEqual},
+ {"OpAtomicFMinEXT", SpvOpAtomicFMinEXT},
+ {"OpUDotAccSatKHR", SpvOpUDotAccSatKHR},
+ {"OpExecuteCallableKHR", SpvOpExecuteCallableKHR},
+ {"OpIsHelperInvocationEXT", SpvOpIsHelperInvocationEXT},
+ {"OpRayQueryGetIntersectionPrimitiveIndexKHR", SpvOpRayQueryGetIntersectionPrimitiveIndexKHR},
+ {"OpTypeAvcSicResultINTEL", SpvOpTypeAvcSicResultINTEL},
+ {"OpExtInst", SpvOpExtInst},
+ {"OpUMulExtended", SpvOpUMulExtended},
+ {"OpLoopControlINTEL", SpvOpLoopControlINTEL},
+ {"OpNot", SpvOpNot},
+ {"OpCreatePipeFromPipeStorage", SpvOpCreatePipeFromPipeStorage},
+ {"OpImageFetch", SpvOpImageFetch},
+ {"OpSubgroupAvcSicConfigureIpeLumaChromaINTEL", SpvOpSubgroupAvcSicConfigureIpeLumaChromaINTEL},
+ {"OpNop", SpvOpNop},
+ {"OpIsNormal", SpvOpIsNormal},
+ {"OpArbitraryFloatExpINTEL", SpvOpArbitraryFloatExpINTEL},
+ {"OpSubgroupAvcSicConfigureIpeLumaINTEL", SpvOpSubgroupAvcSicConfigureIpeLumaINTEL},
+ {"OpShiftRightArithmetic", SpvOpShiftRightArithmetic},
+ {"OpUMul32x16INTEL", SpvOpUMul32x16INTEL},
+ {"OpIAddSatINTEL", SpvOpIAddSatINTEL},
+ {"OpSubgroupAvcSicSetIntraLumaModeCostFunctionINTEL", SpvOpSubgroupAvcSicSetIntraLumaModeCostFunctionINTEL},
+ {"OpCopyMemory", SpvOpCopyMemory},
+ {"OpGroupSMinNonUniformAMD", SpvOpGroupSMinNonUniformAMD},
+ {"OpArbitraryFloatPowNINTEL", SpvOpArbitraryFloatPowNINTEL},
+ {"OpAccessChain", SpvOpAccessChain},
+ {"OpCooperativeMatrixMulAddNV", SpvOpCooperativeMatrixMulAddNV},
+ {"OpGroupNonUniformFMin", SpvOpGroupNonUniformFMin},
+ {"OpIsFinite", SpvOpIsFinite},
+ {"OpSubgroupAvcMceSetSourceInterlacedFieldPolarityINTEL", SpvOpSubgroupAvcMceSetSourceInterlacedFieldPolarityINTEL},
+ {"OpSubgroupAvcImeGetDualReferenceStreaminINTEL", SpvOpSubgroupAvcImeGetDualReferenceStreaminINTEL},
+ {"OpVmeImageINTEL", SpvOpVmeImageINTEL},
+ {"OpSubgroupAvcMceGetInterDirectionsINTEL", SpvOpSubgroupAvcMceGetInterDirectionsINTEL},
+ {"OpSubgroupImageBlockWriteINTEL", SpvOpSubgroupImageBlockWriteINTEL},
+ {"OpArbitraryFloatSubINTEL", SpvOpArbitraryFloatSubINTEL},
+ {"OpLogicalEqual", SpvOpLogicalEqual},
+ {"OpDecorateString", SpvOpDecorateString},
+ {"OpSubgroupAvcMceSetDualReferenceInterlacedFieldPolaritiesINTEL", SpvOpSubgroupAvcMceSetDualReferenceInterlacedFieldPolaritiesINTEL},
+ {"OpGroupNonUniformQuadBroadcast", SpvOpGroupNonUniformQuadBroadcast},
+ {"OpRayQueryGetWorldRayOriginKHR", SpvOpRayQueryGetWorldRayOriginKHR},
+ {"OpCopyMemorySized", SpvOpCopyMemorySized},
+ {"OpSubgroupAvcMceSetInterDirectionPenaltyINTEL", SpvOpSubgroupAvcMceSetInterDirectionPenaltyINTEL},
+ {"OpLogicalNotEqual", SpvOpLogicalNotEqual},
+ {"OpFixedSinINTEL", SpvOpFixedSinINTEL},
+ {"OpImageSampleFootprintNV", SpvOpImageSampleFootprintNV},
+ {"OpSubgroupBlockReadINTEL", SpvOpSubgroupBlockReadINTEL},
+ {"OpSubgroupAvcImeGetTruncatedSearchIndicationINTEL", SpvOpSubgroupAvcImeGetTruncatedSearchIndicationINTEL},
+ {"OpOrdered", SpvOpOrdered},
+ {"OpImageSampleExplicitLod", SpvOpImageSampleExplicitLod},
+ {"OpGroupUMin", SpvOpGroupUMin},
+ {"OpFixedSinPiINTEL", SpvOpFixedSinPiINTEL},
+ {"OpRayQueryInitializeKHR", SpvOpRayQueryInitializeKHR},
+ {"OpTerminateRayKHR", SpvOpTerminateRayKHR},
+ {"OpConvertUToSamplerNV", SpvOpConvertUToSamplerNV},
+ {"OpSubgroupAvcImeGetStreamoutDualReferenceMajorShapeReferenceIdsINTEL", SpvOpSubgroupAvcImeGetStreamoutDualReferenceMajorShapeReferenceIdsINTEL},
+ {"OpAtomicSMax", SpvOpAtomicSMax},
+ {"OpBitReverse", SpvOpBitReverse},
+ {"OpSubgroupAvcMceGetDefaultIntraLumaModePenaltyINTEL", SpvOpSubgroupAvcMceGetDefaultIntraLumaModePenaltyINTEL},
+ {"OpTypeAvcRefResultINTEL", SpvOpTypeAvcRefResultINTEL},
+ {"OpTypeBufferSurfaceINTEL", SpvOpTypeBufferSurfaceINTEL},
+ {"OpConvertFToS", SpvOpConvertFToS},
+ {"OpGetKernelNDrangeSubGroupCount", SpvOpGetKernelNDrangeSubGroupCount},
+ {"OpSDotKHR", SpvOpSDotKHR},
+ {"OpImageSampleProjImplicitLod", SpvOpImageSampleProjImplicitLod},
+ {"OpGenericCastToPtr", SpvOpGenericCastToPtr},
+ {"OpRayQueryGetIntersectionObjectRayDirectionKHR", SpvOpRayQueryGetIntersectionObjectRayDirectionKHR},
+ {"OpSubgroupAvcSicGetIpeLumaShapeINTEL", SpvOpSubgroupAvcSicGetIpeLumaShapeINTEL},
+ {"OpSpecConstantCompositeContinuedINTEL", SpvOpSpecConstantCompositeContinuedINTEL},
+ {"OpTraceRayMotionNV", SpvOpTraceRayMotionNV},
+ {"OpExecutionMode", SpvOpExecutionMode},
+ {"OpDPdyCoarse", SpvOpDPdyCoarse},
+ {"OpSubgroupAvcImeSetDualReferenceINTEL", SpvOpSubgroupAvcImeSetDualReferenceINTEL},
+ {"OpBranch", SpvOpBranch},
+ {"OpSubgroupAvcImeStripDualReferenceStreamoutINTEL", SpvOpSubgroupAvcImeStripDualReferenceStreamoutINTEL},
+ {"OpSLessThan", SpvOpSLessThan},
+ {"OpUAverageRoundedINTEL", SpvOpUAverageRoundedINTEL},
+ {"OpAtomicLoad", SpvOpAtomicLoad},
+ {"OpConvertUToF", SpvOpConvertUToF},
+ {"OpGroupNonUniformBitwiseXor", SpvOpGroupNonUniformBitwiseXor},
+ {"OpSubgroupAvcImeRefWindowSizeINTEL", SpvOpSubgroupAvcImeRefWindowSizeINTEL},
+ {"OpSubgroupAvcSicSetBilinearFilterEnableINTEL", SpvOpSubgroupAvcSicSetBilinearFilterEnableINTEL},
+ {"OpStore", SpvOpStore},
+ {"OpUDotAccSat", SpvOpUDotAccSat},
+ {"OpControlBarrierWaitINTEL", SpvOpControlBarrierWaitINTEL},
+ {"OpTypeFloat", SpvOpTypeFloat},
+ {"OpSubgroupAvcMceConvertToSicPayloadINTEL", SpvOpSubgroupAvcMceConvertToSicPayloadINTEL},
+ {"OpGroupAny", SpvOpGroupAny},
+ {"OpUAddSatINTEL", SpvOpUAddSatINTEL},
+ {"OpTypeStructContinuedINTEL", SpvOpTypeStructContinuedINTEL},
+ {"OpSubgroupAvcMceGetDefaultInterMotionVectorCostTableINTEL", SpvOpSubgroupAvcMceGetDefaultInterMotionVectorCostTableINTEL},
+ {"OpGroupNonUniformShuffleUp", SpvOpGroupNonUniformShuffleUp},
+ {"OpImageSampleDrefExplicitLod", SpvOpImageSampleDrefExplicitLod},
+ {"OpSRem", SpvOpSRem},
+ {"OpVariableLengthArrayINTEL", SpvOpVariableLengthArrayINTEL},
+ {"OpCooperativeMatrixStoreNV", SpvOpCooperativeMatrixStoreNV},
+ {"OpSubgroupShuffleDownINTEL", SpvOpSubgroupShuffleDownINTEL},
+ {"OpTypeMatrix", SpvOpTypeMatrix},
+ {"OpSatConvertUToS", SpvOpSatConvertUToS},
+ {"OpImageQueryFormat", SpvOpImageQueryFormat},
+ {"OpRayQueryTerminateKHR", SpvOpRayQueryTerminateKHR},
+ {"OpPtrNotEqual", SpvOpPtrNotEqual},
+ {"OpImageSparseRead", SpvOpImageSparseRead},
+ {"OpSubgroupShuffleXorINTEL", SpvOpSubgroupShuffleXorINTEL},
+ {"OpGroupDecorate", SpvOpGroupDecorate},
+ {"OpSubgroupAvcSicConvertToMceResultINTEL", SpvOpSubgroupAvcSicConvertToMceResultINTEL},
+ {"OpTypeAvcMceResultINTEL", SpvOpTypeAvcMceResultINTEL},
+ {"OpSubgroupAvcMceGetInterMinorShapeINTEL", SpvOpSubgroupAvcMceGetInterMinorShapeINTEL},
+ {"OpINotEqual", SpvOpINotEqual},
+ {"OpImageQueryLod", SpvOpImageQueryLod},
+ {"OpTypeQueue", SpvOpTypeQueue},
+ {"OpSetUserEventStatus", SpvOpSetUserEventStatus},
+ {"OpBranchConditional", SpvOpBranchConditional},
+ {"OpIgnoreIntersectionNV", SpvOpIgnoreIntersectionNV},
+ {"OpVectorExtractDynamic", SpvOpVectorExtractDynamic},
+ {"OpImageQuerySizeLod", SpvOpImageQuerySizeLod},
+ {"OpSubgroupAvcMceGetDefaultIntraLumaShapePenaltyINTEL", SpvOpSubgroupAvcMceGetDefaultIntraLumaShapePenaltyINTEL},
+ {"OpTypeBool", SpvOpTypeBool},
+ {"OpRayQueryGetIntersectionInstanceShaderBindingTableRecordOffsetKHR", SpvOpRayQueryGetIntersectionInstanceShaderBindingTableRecordOffsetKHR},
+ {"OpEntryPoint", SpvOpEntryPoint},
+ {"OpAtomicCompareExchangeWeak", SpvOpAtomicCompareExchangeWeak},
+ {"OpSource", SpvOpSource},
+ {"OpEmitStreamVertex", SpvOpEmitStreamVertex},
+ {"OpSubgroupAvcMceGetDefaultInterDirectionPenaltyINTEL", SpvOpSubgroupAvcMceGetDefaultInterDirectionPenaltyINTEL},
+ {"OpSubgroupAvcRefConvertToMcePayloadINTEL", SpvOpSubgroupAvcRefConvertToMcePayloadINTEL},
+ {"OpImageSparseTexelsResident", SpvOpImageSparseTexelsResident},
+ {"OpImageSparseFetch", SpvOpImageSparseFetch},
+ {"OpArbitraryFloatExp2INTEL", SpvOpArbitraryFloatExp2INTEL},
+ {"OpCreateUserEvent", SpvOpCreateUserEvent},
+ {"OpSubgroupAvcImeGetStreamoutDualReferenceMajorShapeMotionVectorsINTEL", SpvOpSubgroupAvcImeGetStreamoutDualReferenceMajorShapeMotionVectorsINTEL},
+ {"OpSubgroupAvcSicEvaluateIpeINTEL", SpvOpSubgroupAvcSicEvaluateIpeINTEL},
+ {"OpFixedCosPiINTEL", SpvOpFixedCosPiINTEL},
+ {"OpTypeVmeImageINTEL", SpvOpTypeVmeImageINTEL},
+ {"OpRayQueryGetRayTMinKHR", SpvOpRayQueryGetRayTMinKHR},
+ {"OpName", SpvOpName},
+ {"OpIgnoreIntersectionKHR", SpvOpIgnoreIntersectionKHR},
+ {"OpArbitraryFloatExpm1INTEL", SpvOpArbitraryFloatExpm1INTEL},
+ {"OpAtomicFMaxEXT", SpvOpAtomicFMaxEXT},
+ {"OpSDiv", SpvOpSDiv},
+ {"OpGroupNonUniformBallotBitExtract", SpvOpGroupNonUniformBallotBitExtract},
+ {"OpFUnordNotEqual", SpvOpFUnordNotEqual},
+ {"OpGetKernelNDrangeMaxSubGroupSize", SpvOpGetKernelNDrangeMaxSubGroupSize},
+ {"OpGetKernelPreferredWorkGroupSizeMultiple", SpvOpGetKernelPreferredWorkGroupSizeMultiple},
+ {"OpTypeAvcRefPayloadINTEL", SpvOpTypeAvcRefPayloadINTEL},
+ {"OpLogicalAnd", SpvOpLogicalAnd},
+ {"OpConvertUToPtr", SpvOpConvertUToPtr},
+ {"OpSubgroupShuffleUpINTEL", SpvOpSubgroupShuffleUpINTEL},
+ {"OpFUnordLessThanEqual", SpvOpFUnordLessThanEqual},
+ {"OpArbitraryFloatSinCosINTEL", SpvOpArbitraryFloatSinCosINTEL},
+ {"OpEndPrimitive", SpvOpEndPrimitive},
+ {"OpPhi", SpvOpPhi},
+ {"OpSubgroupAvcImeEvaluateWithSingleReferenceStreaminINTEL", SpvOpSubgroupAvcImeEvaluateWithSingleReferenceStreaminINTEL},
+ {"OpArbitraryFloatATan2INTEL", SpvOpArbitraryFloatATan2INTEL},
+ {"OpSubgroupAvcSicGetIpeChromaModeINTEL", SpvOpSubgroupAvcSicGetIpeChromaModeINTEL},
+ {"OpAbsISubINTEL", SpvOpAbsISubINTEL},
+ {"OpFAdd", SpvOpFAdd},
+ {"OpFOrdGreaterThan", SpvOpFOrdGreaterThan},
+ {"OpBitCount", SpvOpBitCount},
+ {"OpAtomicStore", SpvOpAtomicStore},
+ {"OpSizeOf", SpvOpSizeOf},
+ {"OpAny", SpvOpAny},
+ {"OpGroupFAddNonUniformAMD", SpvOpGroupFAddNonUniformAMD},
+ {"OpUDiv", SpvOpUDiv},
+ {"OpSubgroupAvcImeGetWeightingPatternMinimumDistortionINTEL", SpvOpSubgroupAvcImeGetWeightingPatternMinimumDistortionINTEL},
+ {"OpSubgroupAvcMceGetInterReferenceInterlacedFieldPolaritiesINTEL", SpvOpSubgroupAvcMceGetInterReferenceInterlacedFieldPolaritiesINTEL},
+ {"OpAtomicAnd", SpvOpAtomicAnd},
+ {"OpArbitraryFloatCastToIntINTEL", SpvOpArbitraryFloatCastToIntINTEL},
+ {"OpRayQueryGetIntersectionGeometryIndexKHR", SpvOpRayQueryGetIntersectionGeometryIndexKHR},
+ {"OpSubgroupAvcMceGetDefaultHighPenaltyCostTableINTEL", SpvOpSubgroupAvcMceGetDefaultHighPenaltyCostTableINTEL},
+ {"OpGetDefaultQueue", SpvOpGetDefaultQueue},
+ {"OpSUDotAccSatKHR", SpvOpSUDotAccSatKHR},
+ {"OpQuantizeToF16", SpvOpQuantizeToF16},
+ {"OpFOrdGreaterThanEqual", SpvOpFOrdGreaterThanEqual},
+ {"OpArbitraryFloatEQINTEL", SpvOpArbitraryFloatEQINTEL},
+ {"OpImageQueryOrder", SpvOpImageQueryOrder},
+ {"OpBitwiseXor", SpvOpBitwiseXor},
+ {"OpConstantNull", SpvOpConstantNull},
+ {"OpIsValidEvent", SpvOpIsValidEvent},
+ {"OpImageTexelPointer", SpvOpImageTexelPointer},
+ {"OpTypePipe", SpvOpTypePipe},
+ {"OpConstantPipeStorage", SpvOpConstantPipeStorage},
+ {"OpSelectionMerge", SpvOpSelectionMerge},
+ {"OpGroupUMax", SpvOpGroupUMax},
+ {"OpGroupSMaxNonUniformAMD", SpvOpGroupSMaxNonUniformAMD},
+ {"OpSubgroupAvcImeEvaluateWithSingleReferenceINTEL", SpvOpSubgroupAvcImeEvaluateWithSingleReferenceINTEL},
+ {"OpGroupWaitEvents", SpvOpGroupWaitEvents},
+ {"OpFRem", SpvOpFRem},
+ {"OpGroupNonUniformBallotBitCount", SpvOpGroupNonUniformBallotBitCount},
+ {"OpFwidthCoarse", SpvOpFwidthCoarse},
+ {"OpSubgroupFirstInvocationKHR", SpvOpSubgroupFirstInvocationKHR},
+ {"OpDPdxCoarse", SpvOpDPdxCoarse},
+ {"OpSubgroupAvcMceConvertToRefPayloadINTEL", SpvOpSubgroupAvcMceConvertToRefPayloadINTEL},
+ {"OpConvertSamplerToUNV", SpvOpConvertSamplerToUNV},
+ {"OpArbitraryFloatLTINTEL", SpvOpArbitraryFloatLTINTEL},
+ {"OpLessOrGreater", SpvOpLessOrGreater},
+ {"OpSUDotAccSat", SpvOpSUDotAccSat},
+ {"OpArbitraryFloatDivINTEL", SpvOpArbitraryFloatDivINTEL},
+ {"OpExtension", SpvOpExtension},
+ {"OpSubgroupAvcMceConvertToSicResultINTEL", SpvOpSubgroupAvcMceConvertToSicResultINTEL},
+ {"OpGroupNonUniformBallot", SpvOpGroupNonUniformBallot},
+ {"OpArbitraryFloatCastINTEL", SpvOpArbitraryFloatCastINTEL},
+ {"OpExtInstImport", SpvOpExtInstImport},
+ {"OpCopyObject", SpvOpCopyObject},
+ {"OpGroupAsyncCopy", SpvOpGroupAsyncCopy},
+ {"OpSubgroupAvcSicInitializeINTEL", SpvOpSubgroupAvcSicInitializeINTEL},
+ {"OpSubgroupAvcImeConvertToMcePayloadINTEL", SpvOpSubgroupAvcImeConvertToMcePayloadINTEL},
+ {"OpEndStreamPrimitive", SpvOpEndStreamPrimitive},
+ {"OpArbitraryFloatLEINTEL", SpvOpArbitraryFloatLEINTEL},
+ {"OpSMod", SpvOpSMod},
+ {"OpMemberDecorateString", SpvOpMemberDecorateString},
+ {"OpGroupIAddNonUniformAMD", SpvOpGroupIAddNonUniformAMD},
+ {"OpUGreaterThan", SpvOpUGreaterThan},
+ {"OpSubgroupAvcImeEvaluateWithDualReferenceStreaminoutINTEL", SpvOpSubgroupAvcImeEvaluateWithDualReferenceStreaminoutINTEL},
+ {"OpOuterProduct", SpvOpOuterProduct},
+ {"OpSubgroupAvcMceConvertToRefResultINTEL", SpvOpSubgroupAvcMceConvertToRefResultINTEL},
+ {"OpGroupBitwiseXorKHR", SpvOpGroupBitwiseXorKHR},
+ {"OpBeginInvocationInterlockEXT", SpvOpBeginInvocationInterlockEXT},
+ {"OpAtomicSMin", SpvOpAtomicSMin},
+ {"OpArbitraryFloatLog1pINTEL", SpvOpArbitraryFloatLog1pINTEL},
+ {"OpMemoryModel", SpvOpMemoryModel},
+ {"OpTypeInt", SpvOpTypeInt},
+ {"OpReportIntersectionNV", SpvOpReportIntersectionNV},
+ {"OpDecorateStringGOOGLE", SpvOpDecorateStringGOOGLE},
+ {"OpControlBarrier", SpvOpControlBarrier},
+ {"OpSubgroupAvcSicConfigureSkcINTEL", SpvOpSubgroupAvcSicConfigureSkcINTEL},
+ {"OpImageSampleImplicitLod", SpvOpImageSampleImplicitLod},
+ {"OpSwitch", SpvOpSwitch},
+ {"OpSDot", SpvOpSDot},
+ {"OpSubgroupAvcRefEvaluateWithMultiReferenceINTEL", SpvOpSubgroupAvcRefEvaluateWithMultiReferenceINTEL},
+ {"OpDemoteToHelperInvocationEXT", SpvOpDemoteToHelperInvocationEXT},
+ {"OpSUDot", SpvOpSUDot},
+ {"OpSDotAccSat", SpvOpSDotAccSat},
+ {"OpGetKernelWorkGroupSize", SpvOpGetKernelWorkGroupSize},
+ {"OpGroupNonUniformBallotFindLSB", SpvOpGroupNonUniformBallotFindLSB},
+ {"OpFwidthFine", SpvOpFwidthFine},
+ {"OpReserveWritePipePackets", SpvOpReserveWritePipePackets},
+ {"OpConstantFalse", SpvOpConstantFalse},
+ {"OpCooperativeMatrixLengthNV", SpvOpCooperativeMatrixLengthNV},
+ {"OpFixedExpINTEL", SpvOpFixedExpINTEL},
+ {"OpArbitraryFloatASinPiINTEL", SpvOpArbitraryFloatASinPiINTEL},
+ {"OpEnqueueKernel", SpvOpEnqueueKernel},
+ {"OpVectorInsertDynamic", SpvOpVectorInsertDynamic},
+ {"OpBitFieldInsert", SpvOpBitFieldInsert},
+ {"OpSubgroupAvcMceGetInterMajorShapeINTEL", SpvOpSubgroupAvcMceGetInterMajorShapeINTEL},
+ {"OpGroupNonUniformAll", SpvOpGroupNonUniformAll},
+ {"OpRayQueryGetIntersectionWorldToObjectKHR", SpvOpRayQueryGetIntersectionWorldToObjectKHR},
+ {"OpMatrixTimesScalar", SpvOpMatrixTimesScalar},
+ {"OpFixedCosINTEL", SpvOpFixedCosINTEL},
+ {"OpWritePackedPrimitiveIndices4x8NV", SpvOpWritePackedPrimitiveIndices4x8NV},
+ {"OpDemoteToHelperInvocation", SpvOpDemoteToHelperInvocation},
+ {"OpSubgroupImageBlockReadINTEL", SpvOpSubgroupImageBlockReadINTEL},
+ {"OpSubgroupAvcImeEvaluateWithSingleReferenceStreamoutINTEL", SpvOpSubgroupAvcImeEvaluateWithSingleReferenceStreamoutINTEL},
+ {"OpDecorationGroup", SpvOpDecorationGroup},
+ {"OpReturn", SpvOpReturn},
+ {"OpArbitraryFloatACosINTEL", SpvOpArbitraryFloatACosINTEL},
+ {"OpSubgroupAvcSicConvertToMcePayloadINTEL", SpvOpSubgroupAvcSicConvertToMcePayloadINTEL},
+ {"OpTranspose", SpvOpTranspose},
+ {"OpImageSparseSampleProjImplicitLod", SpvOpImageSparseSampleProjImplicitLod},
+ {"OpKill", SpvOpKill},
+ {"OpTraceRayKHR", SpvOpTraceRayKHR},
+ {"OpArbitraryFloatSinPiINTEL", SpvOpArbitraryFloatSinPiINTEL},
+ {"OpGroupNonUniformBallotFindMSB", SpvOpGroupNonUniformBallotFindMSB},
+ {"OpTraceMotionNV", SpvOpTraceMotionNV},
+ {"OpGroupNonUniformSMax", SpvOpGroupNonUniformSMax},
+ {"OpFunctionParameter", SpvOpFunctionParameter},
+ {"OpSubgroupAvcImeEvaluateWithSingleReferenceStreaminoutINTEL", SpvOpSubgroupAvcImeEvaluateWithSingleReferenceStreaminoutINTEL},
+ {"OpGroupAll", SpvOpGroupAll},
+ {"OpTypeOpaque", SpvOpTypeOpaque},
+ {"OpConstant", SpvOpConstant},
+ {"OpPtrCastToGeneric", SpvOpPtrCastToGeneric},
+ {"OpUConvert", SpvOpUConvert},
+ {"OpArbitraryFloatRecipINTEL", SpvOpArbitraryFloatRecipINTEL},
+ {"OpIsNan", SpvOpIsNan},
+ {"OpImageRead", SpvOpImageRead},
+ {"OpReleaseEvent", SpvOpReleaseEvent},
+ {"OpTypeFunction", SpvOpTypeFunction},
+ {"OpFwidth", SpvOpFwidth},
+ {"OpSourceExtension", SpvOpSourceExtension},
+ {"OpGetNumPipePackets", SpvOpGetNumPipePackets},
+ {"OpBitwiseOr", SpvOpBitwiseOr},
+ {"OpLifetimeStop", SpvOpLifetimeStop},
+ {"OpSubgroupAvcImeGetWeightingPatternMinimumMotionVectorINTEL", SpvOpSubgroupAvcImeGetWeightingPatternMinimumMotionVectorINTEL},
+ {"OpSourceContinued", SpvOpSourceContinued},
+ {"OpAsmCallINTEL", SpvOpAsmCallINTEL},
+ {"OpGroupNonUniformShuffleXor", SpvOpGroupNonUniformShuffleXor},
+ {"OpArbitraryFloatGEINTEL", SpvOpArbitraryFloatGEINTEL},
+ {"OpImageSparseSampleProjDrefImplicitLod", SpvOpImageSparseSampleProjDrefImplicitLod},
+ {"OpSubgroupAvcImeEvaluateWithDualReferenceStreaminINTEL", SpvOpSubgroupAvcImeEvaluateWithDualReferenceStreaminINTEL},
+ {"OpArbitraryFloatASinINTEL", SpvOpArbitraryFloatASinINTEL},
+ {"OpFUnordEqual", SpvOpFUnordEqual},
+ {"OpGroupNonUniformElect", SpvOpGroupNonUniformElect},
+ {"OpArbitraryFloatATanINTEL", SpvOpArbitraryFloatATanINTEL},
+ {"OpFOrdEqual", SpvOpFOrdEqual},
+ {"OpGroupFAdd", SpvOpGroupFAdd},
+ {"OpTypeRuntimeArray", SpvOpTypeRuntimeArray},
+ {"OpUAverageINTEL", SpvOpUAverageINTEL},
+ {"OpSubgroupAvcMceGetDefaultInterShapePenaltyINTEL", SpvOpSubgroupAvcMceGetDefaultInterShapePenaltyINTEL},
+ {"OpGroupFMinNonUniformAMD", SpvOpGroupFMinNonUniformAMD},
+ {"OpAll", SpvOpAll},
+ {"OpReservedReadPipe", SpvOpReservedReadPipe},
+ {"OpImageSparseGather", SpvOpImageSparseGather},
+ {"OpSpecConstantOp", SpvOpSpecConstantOp},
+ {"OpString", SpvOpString},
+ {"OpExpectKHR", SpvOpExpectKHR},
+ {"OpVectorTimesScalar", SpvOpVectorTimesScalar},
+ {"OpGroupNonUniformInverseBallot", SpvOpGroupNonUniformInverseBallot},
+ {"OpGroupNonUniformIMul", SpvOpGroupNonUniformIMul},
+ {"OpFixedSqrtINTEL", SpvOpFixedSqrtINTEL},
+ {"OpSubgroupAvcImeInitializeINTEL", SpvOpSubgroupAvcImeInitializeINTEL},
+ {"OpSubgroupAvcSicSetIntraChromaModeCostFunctionINTEL", SpvOpSubgroupAvcSicSetIntraChromaModeCostFunctionINTEL},
+ {"OpArbitraryFloatACosPiINTEL", SpvOpArbitraryFloatACosPiINTEL},
+ {"OpSubgroupAvcMceGetDefaultMediumPenaltyCostTableINTEL", SpvOpSubgroupAvcMceGetDefaultMediumPenaltyCostTableINTEL},
+ {"OpTerminateInvocation", SpvOpTerminateInvocation},
+ {"OpGroupBroadcast", SpvOpGroupBroadcast},
+ {"OpTypePointer", SpvOpTypePointer},
+ {"OpTypeRayQueryKHR", SpvOpTypeRayQueryKHR},
+ {"OpGenericCastToPtrExplicit", SpvOpGenericCastToPtrExplicit},
+ {"OpEndInvocationInterlockEXT", SpvOpEndInvocationInterlockEXT},
+ {"OpSubgroupAvcImeGetStreamoutDualReferenceMajorShapeDistortionsINTEL", SpvOpSubgroupAvcImeGetStreamoutDualReferenceMajorShapeDistortionsINTEL},
+ {"OpSubgroupAvcImeSetMaxMotionVectorCountINTEL", SpvOpSubgroupAvcImeSetMaxMotionVectorCountINTEL},
+ {"OpTypeImage", SpvOpTypeImage},
+ {"OpSubgroupAvcImeGetSingleReferenceStreaminINTEL", SpvOpSubgroupAvcImeGetSingleReferenceStreaminINTEL},
+ {"OpGroupCommitWritePipe", SpvOpGroupCommitWritePipe},
+ {"OpSGreaterThan", SpvOpSGreaterThan},
+ {"OpDecorate", SpvOpDecorate},
+ {"OpLabel", SpvOpLabel},
+ {"OpFUnordGreaterThan", SpvOpFUnordGreaterThan},
+ {"OpArbitraryFloatMulINTEL", SpvOpArbitraryFloatMulINTEL},
+ {"OpTypeAvcImeResultDualReferenceStreamoutINTEL", SpvOpTypeAvcImeResultDualReferenceStreamoutINTEL},
+ {"OpGroupSMin", SpvOpGroupSMin},
+ {"OpConstantTrue", SpvOpConstantTrue},
+ {"OpMatrixTimesMatrix", SpvOpMatrixTimesMatrix},
+ {"OpGetKernelLocalSizeForSubgroupCount", SpvOpGetKernelLocalSizeForSubgroupCount},
+ {"OpGroupFMulKHR", SpvOpGroupFMulKHR},
+ {"OpSpecConstantFalse", SpvOpSpecConstantFalse},
+ {"OpGroupNonUniformRotateKHR", SpvOpGroupNonUniformRotateKHR},
+ {"OpAtomicFlagTestAndSet", SpvOpAtomicFlagTestAndSet},
+ {"OpSDotAccSatKHR", SpvOpSDotAccSatKHR},
+ {"OpVariable", SpvOpVariable},
+ {"OpSpecConstantComposite", SpvOpSpecConstantComposite},
+ {"OpGroupSMax", SpvOpGroupSMax},
+ {"OpInBoundsAccessChain", SpvOpInBoundsAccessChain},
+ {"OpFOrdLessThanEqual", SpvOpFOrdLessThanEqual},
+ {"OpUCountTrailingZerosINTEL", SpvOpUCountTrailingZerosINTEL},
+ {"OpTypeStruct", SpvOpTypeStruct},
+ {"OpFNegate", SpvOpFNegate},
+ {"OpSubgroupAvcMceSetInterBaseMultiReferencePenaltyINTEL", SpvOpSubgroupAvcMceSetInterBaseMultiReferencePenaltyINTEL},
+ {"OpShiftLeftLogical", SpvOpShiftLeftLogical},
+ {"OpSubgroupAvcSicGetInterRawSadsINTEL", SpvOpSubgroupAvcSicGetInterRawSadsINTEL},
+ {"OpArbitraryFloatPowINTEL", SpvOpArbitraryFloatPowINTEL},
+ {"OpReservedWritePipe", SpvOpReservedWritePipe},
+ {"OpTypeAvcImeResultINTEL", SpvOpTypeAvcImeResultINTEL},
+ {"OpFPGARegINTEL", SpvOpFPGARegINTEL},
+ {"OpImageQuerySize", SpvOpImageQuerySize},
+ {"OpImageSparseSampleImplicitLod", SpvOpImageSparseSampleImplicitLod},
+ {"OpSubgroupAvcImeGetStreamoutSingleReferenceMajorShapeReferenceIdsINTEL", SpvOpSubgroupAvcImeGetStreamoutSingleReferenceMajorShapeReferenceIdsINTEL},
+ {"OpControlBarrierArriveINTEL", SpvOpControlBarrierArriveINTEL},
+ {"OpFixedLogINTEL", SpvOpFixedLogINTEL},
+ {"OpImageSparseSampleDrefImplicitLod", SpvOpImageSparseSampleDrefImplicitLod},
+ {"OpIAddCarry", SpvOpIAddCarry},
+ {"OpGroupNonUniformShuffle", SpvOpGroupNonUniformShuffle},
+ {"OpRayQueryGenerateIntersectionKHR", SpvOpRayQueryGenerateIntersectionKHR},
+ {"OpSubgroupAvcSicEvaluateWithMultiReferenceINTEL", SpvOpSubgroupAvcSicEvaluateWithMultiReferenceINTEL},
+ {"OpIAdd", SpvOpIAdd},
+ {"OpRayQueryGetIntersectionInstanceIdKHR", SpvOpRayQueryGetIntersectionInstanceIdKHR},
+ {"OpIAverageINTEL", SpvOpIAverageINTEL},
+ {"OpTypeAvcImePayloadINTEL", SpvOpTypeAvcImePayloadINTEL},
+ {"OpImageWrite", SpvOpImageWrite},
+ {"OpAssumeTrueKHR", SpvOpAssumeTrueKHR},
+ {"OpSubgroupAvcSicGetBestIpeLumaDistortionINTEL", SpvOpSubgroupAvcSicGetBestIpeLumaDistortionINTEL},
+ {"OpTypeAvcImeSingleReferenceStreaminINTEL", SpvOpTypeAvcImeSingleReferenceStreaminINTEL},
+ {"OpSatConvertSToU", SpvOpSatConvertSToU},
+ {"OpSubgroupAllEqualKHR", SpvOpSubgroupAllEqualKHR},
+ {"OpGenericPtrMemSemantics", SpvOpGenericPtrMemSemantics},
+ {"OpMemberDecorate", SpvOpMemberDecorate},
+ {"OpSubgroupAvcSicEvaluateWithSingleReferenceINTEL", SpvOpSubgroupAvcSicEvaluateWithSingleReferenceINTEL},
+ {"OpGroupNonUniformUMin", SpvOpGroupNonUniformUMin},
+ {"OpFunction", SpvOpFunction},
+ {"OpTypeAccelerationStructureKHR", SpvOpTypeAccelerationStructureKHR},
+ {"OpSubgroupAvcImeGetStreamoutSingleReferenceMajorShapeDistortionsINTEL", SpvOpSubgroupAvcImeGetStreamoutSingleReferenceMajorShapeDistortionsINTEL},
+ {"OpImageSampleProjDrefExplicitLod", SpvOpImageSampleProjDrefExplicitLod},
+ {"OpPtrCastToCrossWorkgroupINTEL", SpvOpPtrCastToCrossWorkgroupINTEL},
+ {"OpGroupNonUniformFAdd", SpvOpGroupNonUniformFAdd},
+ {"OpModuleProcessed", SpvOpModuleProcessed},
+ {"OpReadPipe", SpvOpReadPipe},
+ {"OpConvertUToSampledImageNV", SpvOpConvertUToSampledImageNV},
+ {"OpSampledImage", SpvOpSampledImage},
+ {"OpArbitraryFloatSinCosPiINTEL", SpvOpArbitraryFloatSinCosPiINTEL},
+ {"OpAliasScopeDeclINTEL", SpvOpAliasScopeDeclINTEL},
+ {"OpConstantFunctionPointerINTEL", SpvOpConstantFunctionPointerINTEL},
+ {"OpConvertImageToUNV", SpvOpConvertImageToUNV},
+ {"OpSubgroupAvcImeEvaluateWithDualReferenceStreamoutINTEL", SpvOpSubgroupAvcImeEvaluateWithDualReferenceStreamoutINTEL},
+ {"OpAliasScopeListDeclINTEL", SpvOpAliasScopeListDeclINTEL},
+ {"OpSubgroupAvcImeGetBorderReachedINTEL", SpvOpSubgroupAvcImeGetBorderReachedINTEL},
+ {"OpGroupNonUniformShuffleDown", SpvOpGroupNonUniformShuffleDown},
+ {"OpCaptureEventProfilingInfo", SpvOpCaptureEventProfilingInfo},
+ {"OpLoad", SpvOpLoad},
+ {"OpSUDotKHR", SpvOpSUDotKHR},
+ {"OpRayQueryGetIntersectionTKHR", SpvOpRayQueryGetIntersectionTKHR},
+ {"OpIMul32x16INTEL", SpvOpIMul32x16INTEL},
+ {"OpSubgroupAvcMceGetMotionVectorsINTEL", SpvOpSubgroupAvcMceGetMotionVectorsINTEL},
+ {"OpRayQueryGetIntersectionObjectRayOriginKHR", SpvOpRayQueryGetIntersectionObjectRayOriginKHR},
+ {"OpSubgroupAvcSicEvaluateWithMultiReferenceInterlacedINTEL", SpvOpSubgroupAvcSicEvaluateWithMultiReferenceInterlacedINTEL},
+ {"OpArbitraryFloatLogINTEL", SpvOpArbitraryFloatLogINTEL},
+ {"OpBitFieldUExtract", SpvOpBitFieldUExtract},
+ {"OpGetMaxPipePackets", SpvOpGetMaxPipePackets},
+ {"OpGetKernelMaxNumSubgroups", SpvOpGetKernelMaxNumSubgroups},
+ {"OpRayQueryGetIntersectionObjectToWorldKHR", SpvOpRayQueryGetIntersectionObjectToWorldKHR},
+ {"OpSubgroupAvcMceGetDefaultLowPenaltyCostTableINTEL", SpvOpSubgroupAvcMceGetDefaultLowPenaltyCostTableINTEL},
+ {"OpCooperativeMatrixLoadNV", SpvOpCooperativeMatrixLoadNV},
+ {"OpGroupIMulKHR", SpvOpGroupIMulKHR},
+ {"OpConvertUToAccelerationStructureKHR", SpvOpConvertUToAccelerationStructureKHR},
+ {"OpNoLine", SpvOpNoLine},
+ {"OpSignBitSet", SpvOpSignBitSet},
+ {"OpAsmINTEL", SpvOpAsmINTEL},
+ {"OpGroupNonUniformBitwiseOr", SpvOpGroupNonUniformBitwiseOr},
+ {"OpImageSparseDrefGather", SpvOpImageSparseDrefGather},
+ {"OpSubgroupShuffleINTEL", SpvOpSubgroupShuffleINTEL},
+ {"OpGroupBitwiseOrKHR", SpvOpGroupBitwiseOrKHR},
+ {"OpSubgroupImageMediaBlockWriteINTEL", SpvOpSubgroupImageMediaBlockWriteINTEL},
+ {"OpImage", SpvOpImage},
+ {"OpAtomicFlagClear", SpvOpAtomicFlagClear},
+ {"OpISubBorrow", SpvOpISubBorrow},
+ {"OpGroupFMin", SpvOpGroupFMin},
+ {"OpSubgroupAvcMceGetBestInterDistortionsINTEL", SpvOpSubgroupAvcMceGetBestInterDistortionsINTEL},
+ {"OpSubgroupAvcMceGetDefaultNonDcLumaIntraPenaltyINTEL", SpvOpSubgroupAvcMceGetDefaultNonDcLumaIntraPenaltyINTEL},
+ {"OpAtomicFAddEXT", SpvOpAtomicFAddEXT},
+ {"OpTypeNamedBarrier", SpvOpTypeNamedBarrier},
+ {"OpAtomicIDecrement", SpvOpAtomicIDecrement},
+ {"OpGroupNonUniformFMax", SpvOpGroupNonUniformFMax},
+ {"OpArbitraryFloatCbrtINTEL", SpvOpArbitraryFloatCbrtINTEL},
+ {"OpSubgroupAvcBmeInitializeINTEL", SpvOpSubgroupAvcBmeInitializeINTEL},
+ {"OpFunctionPointerCallINTEL", SpvOpFunctionPointerCallINTEL},
+ {"OpArbitraryFloatCastFromIntINTEL", SpvOpArbitraryFloatCastFromIntINTEL},
+ {"OpMemberDecorateStringGOOGLE", SpvOpMemberDecorateStringGOOGLE},
+ {"OpSConvert", SpvOpSConvert},
+ {"OpSMulExtended", SpvOpSMulExtended},
+ {"OpAtomicExchange", SpvOpAtomicExchange},
+ {"OpSubgroupAvcRefEvaluateWithSingleReferenceINTEL", SpvOpSubgroupAvcRefEvaluateWithSingleReferenceINTEL},
+ {"OpSubgroupAvcSicGetBestIpeChromaDistortionINTEL", SpvOpSubgroupAvcSicGetBestIpeChromaDistortionINTEL},
+ {"OpTypeSampledImage", SpvOpTypeSampledImage},
+ {"OpGroupNonUniformBitwiseAnd", SpvOpGroupNonUniformBitwiseAnd},
+ {"OpGroupUMaxNonUniformAMD", SpvOpGroupUMaxNonUniformAMD},
+ {"OpCopyLogical", SpvOpCopyLogical},
+ {"OpSNegate", SpvOpSNegate},
+ {"OpTypeReserveId", SpvOpTypeReserveId},
+ {"OpImageSparseSampleProjExplicitLod", SpvOpImageSparseSampleProjExplicitLod},
+ {"OpDecorateId", SpvOpDecorateId},
+ {"OpEmitMeshTasksEXT", SpvOpEmitMeshTasksEXT},
+ {"OpSaveMemoryINTEL", SpvOpSaveMemoryINTEL},
+ {"OpSubgroupBlockWriteINTEL", SpvOpSubgroupBlockWriteINTEL},
+ {"OpTypeVector", SpvOpTypeVector},
+ {"OpAbsUSubINTEL", SpvOpAbsUSubINTEL},
+ {"OpLogicalNot", SpvOpLogicalNot},
+ {"OpImageSparseSampleExplicitLod", SpvOpImageSparseSampleExplicitLod},
+ {"OpSubgroupAvcImeSetWeightedSadINTEL", SpvOpSubgroupAvcImeSetWeightedSadINTEL},
+ {"OpCompositeConstruct", SpvOpCompositeConstruct},
+ {"OpTypeCooperativeMatrixNV", SpvOpTypeCooperativeMatrixNV},
+ {"OpAtomicISub", SpvOpAtomicISub},
+ {"OpImageSampleProjDrefImplicitLod", SpvOpImageSampleProjDrefImplicitLod},
+ {"OpSubgroupAvcImeConvertToMceResultINTEL", SpvOpSubgroupAvcImeConvertToMceResultINTEL},
+ {"OpFixedSinCosPiINTEL", SpvOpFixedSinCosPiINTEL},
+ {"OpIAverageRoundedINTEL", SpvOpIAverageRoundedINTEL},
+ {"OpSubgroupAvcMceGetInterDistortionsINTEL", SpvOpSubgroupAvcMceGetInterDistortionsINTEL},
+ {"OpFOrdLessThan", SpvOpFOrdLessThan},
+ {"OpULessThanEqual", SpvOpULessThanEqual},
+ {"OpSpecConstant", SpvOpSpecConstant},
+ {"OpUDotKHR", SpvOpUDotKHR},
+ {"OpTypeVoid", SpvOpTypeVoid},
+ {"OpSubgroupAvcSicEvaluateWithDualReferenceINTEL", SpvOpSubgroupAvcSicEvaluateWithDualReferenceINTEL},
+ {"OpAtomicXor", SpvOpAtomicXor},
+ {"OpArbitraryFloatRSqrtINTEL", SpvOpArbitraryFloatRSqrtINTEL},
+ {"OpConvertSToF", SpvOpConvertSToF},
+ {"OpBitcast", SpvOpBitcast},
+ {"OpSubgroupAvcMceSetInterShapePenaltyINTEL", SpvOpSubgroupAvcMceSetInterShapePenaltyINTEL},
+ {"OpImageGather", SpvOpImageGather},
+ {"OpSubgroupAvcMceSetAcOnlyHaarINTEL", SpvOpSubgroupAvcMceSetAcOnlyHaarINTEL},
+ {"OpUDot", SpvOpUDot},
+ {"OpImageSparseSampleDrefExplicitLod", SpvOpImageSparseSampleDrefExplicitLod},
+ {"OpRayQueryGetRayFlagsKHR", SpvOpRayQueryGetRayFlagsKHR},
+ {"OpTerminateRayNV", SpvOpTerminateRayNV},
+ {"OpGroupLogicalXorKHR", SpvOpGroupLogicalXorKHR},
+ {"OpGroupNonUniformIAdd", SpvOpGroupNonUniformIAdd},
+ {"OpFunctionCall", SpvOpFunctionCall},
+ {"OpTypeAvcSicPayloadINTEL", SpvOpTypeAvcSicPayloadINTEL},
+ {"OpImageQuerySamples", SpvOpImageQuerySamples},
+ {"OpAtomicCompareExchange", SpvOpAtomicCompareExchange},
+ {"OpGroupNonUniformLogicalXor", SpvOpGroupNonUniformLogicalXor},
+ {"OpImageSampleProjExplicitLod", SpvOpImageSampleProjExplicitLod},
+ {"OpSubgroupAvcImeGetUnidirectionalEarlySearchTerminationINTEL", SpvOpSubgroupAvcImeGetUnidirectionalEarlySearchTerminationINTEL},
+ {"OpArbitraryFloatLog10INTEL", SpvOpArbitraryFloatLog10INTEL},
+ {"OpSamplerImageAddressingModeNV", SpvOpSamplerImageAddressingModeNV},
+ {"OpExecuteCallableNV", SpvOpExecuteCallableNV},
+ {"OpGroupIAdd", SpvOpGroupIAdd},
+ {"OpFUnordGreaterThanEqual", SpvOpFUnordGreaterThanEqual},
+ {"OpSubgroupAvcRefSetBilinearFilterEnableINTEL", SpvOpSubgroupAvcRefSetBilinearFilterEnableINTEL},
+ {"OpMemoryNamedBarrier", SpvOpMemoryNamedBarrier},
+ {"OpTypeEvent", SpvOpTypeEvent},
+ {"OpSubgroupAvcImeSetUnidirectionalMixDisableINTEL", SpvOpSubgroupAvcImeSetUnidirectionalMixDisableINTEL},
+ {"OpDPdx", SpvOpDPdx},
+ {"OpDPdy", SpvOpDPdy},
+ {"OpEmitVertex", SpvOpEmitVertex},
+ {"OpTraceNV", SpvOpTraceNV},
+ {"OpGroupFMaxNonUniformAMD", SpvOpGroupFMaxNonUniformAMD},
+ {"OpArbitraryFloatATanPiINTEL", SpvOpArbitraryFloatATanPiINTEL},
+ {"OpGroupBitwiseAndKHR", SpvOpGroupBitwiseAndKHR},
+ {"OpMemberName", SpvOpMemberName},
+ {"OpGroupMemberDecorate", SpvOpGroupMemberDecorate},
+ {"OpUMod", SpvOpUMod},
+ {"OpSubgroupAvcMceGetInterMotionVectorCountINTEL", SpvOpSubgroupAvcMceGetInterMotionVectorCountINTEL},
+ {"OpSubgroupAvcImeEvaluateWithDualReferenceINTEL", SpvOpSubgroupAvcImeEvaluateWithDualReferenceINTEL},
+ {"OpArbitraryFloatPowRINTEL", SpvOpArbitraryFloatPowRINTEL},
+ {"OpImageSampleDrefImplicitLod", SpvOpImageSampleDrefImplicitLod},
+ {"OpImageDrefGather", SpvOpImageDrefGather},
+ {"OpSubgroupImageMediaBlockReadINTEL", SpvOpSubgroupImageMediaBlockReadINTEL},
+ {"OpGroupLogicalAndKHR", SpvOpGroupLogicalAndKHR},
+ {"OpSubgroupAvcMceGetInterReferenceIdsINTEL", SpvOpSubgroupAvcMceGetInterReferenceIdsINTEL},
+ {"OpMemoryBarrier", SpvOpMemoryBarrier},
+ {"OpSubgroupAvcSicGetMotionVectorMaskINTEL", SpvOpSubgroupAvcSicGetMotionVectorMaskINTEL},
+ {"OpWritePipeBlockingINTEL", SpvOpWritePipeBlockingINTEL},
+ {"OpTypeAvcImeResultSingleReferenceStreamoutINTEL", SpvOpTypeAvcImeResultSingleReferenceStreamoutINTEL},
+ {"OpGroupNonUniformPartitionNV", SpvOpGroupNonUniformPartitionNV},
+ {"OpSubgroupAvcSicSetSkcForwardTransformEnableINTEL", SpvOpSubgroupAvcSicSetSkcForwardTransformEnableINTEL},
+ {"OpConvertFToU", SpvOpConvertFToU},
+ {"OpFMul", SpvOpFMul},
+ {"OpGroupNonUniformFMul", SpvOpGroupNonUniformFMul},
+ {"OpShiftRightLogical", SpvOpShiftRightLogical},
+ {"OpConvertUToImageNV", SpvOpConvertUToImageNV},
+ {"OpInBoundsPtrAccessChain", SpvOpInBoundsPtrAccessChain},
+ {"OpVectorTimesMatrix", SpvOpVectorTimesMatrix},
+ {"OpTypeSampler", SpvOpTypeSampler},
+ {"OpFixedRsqrtINTEL", SpvOpFixedRsqrtINTEL},
+ {"OpPtrDiff", SpvOpPtrDiff},
+ {"OpArbitraryFloatSinINTEL", SpvOpArbitraryFloatSinINTEL},
+ {"OpSubgroupAvcImeSetSingleReferenceINTEL", SpvOpSubgroupAvcImeSetSingleReferenceINTEL},
+ {"OpRetainEvent", SpvOpRetainEvent},
+ {"OpReportIntersectionKHR", SpvOpReportIntersectionKHR},
+ {"OpArbitraryFloatSqrtINTEL", SpvOpArbitraryFloatSqrtINTEL},
+ {"OpSpecConstantTrue", SpvOpSpecConstantTrue},
+ {"OpRayQueryGetIntersectionFrontFaceKHR", SpvOpRayQueryGetIntersectionFrontFaceKHR},
+ {"OpArbitraryFloatCosPiINTEL", SpvOpArbitraryFloatCosPiINTEL},
+ {"OpFixedSinCosINTEL", SpvOpFixedSinCosINTEL},
+ {"OpGroupNonUniformLogicalOr", SpvOpGroupNonUniformLogicalOr},
+ {"OpCrossWorkgroupCastToPtrINTEL", SpvOpCrossWorkgroupCastToPtrINTEL},
+ {"OpFUnordLessThan", SpvOpFUnordLessThan},
+};
+
+static UInt32 hash(const UnownedStringSlice& str, UInt32 salt)
+{
+ UInt64 h = salt;
+ for(const char c : str)
+ h = ((h * 0x00000100000001B3) ^ c);
+ return h % (sizeof(tableSalt)/sizeof(tableSalt[0]));
+}
+
+bool lookupSpvOp(const UnownedStringSlice& str, SpvOp& value)
+{
+ const auto i = hash(str, tableSalt[hash(str, 0)]);
+ if(str == words[i].name)
+ {
+ value = words[i].value;
+ return true;
+ }
+ else
+ {
+ return false;
+ }
+}
+
+}