diff --git a/patches/vkd3d-latest/0001-Updated-vkd3d-to-44fffee5e1331e1c7e10489d84723c3b9da.patch b/patches/vkd3d-latest/0001-Updated-vkd3d-to-44fffee5e1331e1c7e10489d84723c3b9da.patch index a803d6fe..54977b0e 100644 --- a/patches/vkd3d-latest/0001-Updated-vkd3d-to-44fffee5e1331e1c7e10489d84723c3b9da.patch +++ b/patches/vkd3d-latest/0001-Updated-vkd3d-to-44fffee5e1331e1c7e10489d84723c3b9da.patch @@ -1,4 +1,4 @@ -From 7c1151365e7c94a832b7134ba700102a6073ba2a Mon Sep 17 00:00:00 2001 +From f54b809d2d0402064569abf7843cfc90b8761b2b Mon Sep 17 00:00:00 2001 From: Alistair Leslie-Hughes Date: Mon, 26 May 2025 07:03:34 +1000 Subject: [PATCH] Updated vkd3d to 44fffee5e1331e1c7e10489d84723c3b9dad7e17. diff --git a/patches/vkd3d-latest/0002-Updated-vkd3d-to-3b41d99fa9e80dda5844738a226f70f14f7.patch b/patches/vkd3d-latest/0002-Updated-vkd3d-to-3b41d99fa9e80dda5844738a226f70f14f7.patch index 2ec8c690..81c9f102 100644 --- a/patches/vkd3d-latest/0002-Updated-vkd3d-to-3b41d99fa9e80dda5844738a226f70f14f7.patch +++ b/patches/vkd3d-latest/0002-Updated-vkd3d-to-3b41d99fa9e80dda5844738a226f70f14f7.patch @@ -1,4 +1,4 @@ -From b2165faef0a403a805b21efd42f8769a1769b78a Mon Sep 17 00:00:00 2001 +From 68132ba78fd7988b49a335781c8a0ed8a5ad603c Mon Sep 17 00:00:00 2001 From: Alistair Leslie-Hughes Date: Fri, 22 Aug 2025 07:26:18 +1000 Subject: [PATCH] Updated vkd3d to 3b41d99fa9e80dda5844738a226f70f14f778c8b. diff --git a/patches/vkd3d-latest/0003-Updated-vkd3d-to-d0098b0d5968d1969ec622b91fd360fd0ae.patch b/patches/vkd3d-latest/0003-Updated-vkd3d-to-d0098b0d5968d1969ec622b91fd360fd0ae.patch index acfe026d..bc57eeb4 100644 --- a/patches/vkd3d-latest/0003-Updated-vkd3d-to-d0098b0d5968d1969ec622b91fd360fd0ae.patch +++ b/patches/vkd3d-latest/0003-Updated-vkd3d-to-d0098b0d5968d1969ec622b91fd360fd0ae.patch @@ -1,4 +1,4 @@ -From 5881c4d692d2522ed93d5e39362eda5f0c8e647f Mon Sep 17 00:00:00 2001 +From 5bb958cb76891665aa91871e976007f0acc3a273 Mon Sep 17 00:00:00 2001 From: Alistair Leslie-Hughes Date: Sat, 23 Aug 2025 07:27:59 +1000 Subject: [PATCH] Updated vkd3d to d0098b0d5968d1969ec622b91fd360fd0aec2328. diff --git a/patches/vkd3d-latest/0004-Updated-vkd3d-to-158f8b3cf6ff528eb6897baf04db80f0db2.patch b/patches/vkd3d-latest/0004-Updated-vkd3d-to-158f8b3cf6ff528eb6897baf04db80f0db2.patch new file mode 100644 index 00000000..c600203a --- /dev/null +++ b/patches/vkd3d-latest/0004-Updated-vkd3d-to-158f8b3cf6ff528eb6897baf04db80f0db2.patch @@ -0,0 +1,1759 @@ +From 69c3807e42ff958f23c0c959ad5d065487c4d896 Mon Sep 17 00:00:00 2001 +From: Alistair Leslie-Hughes +Date: Sat, 30 Aug 2025 07:08:53 +1000 +Subject: [PATCH] Updated vkd3d to 158f8b3cf6ff528eb6897baf04db80f0db2b53f8. + +--- + libs/vkd3d/include/private/spirv_grammar.h | 561 ++---------------- + libs/vkd3d/include/private/vkd3d_common.h | 2 + + libs/vkd3d/libs/vkd3d-shader/dxil.c | 52 +- + libs/vkd3d/libs/vkd3d-shader/fx.c | 2 +- + libs/vkd3d/libs/vkd3d-shader/glsl.c | 38 +- + libs/vkd3d/libs/vkd3d-shader/ir.c | 133 ++--- + libs/vkd3d/libs/vkd3d-shader/msl.c | 15 +- + .../libs/vkd3d-shader/vkd3d_shader_private.h | 10 + + .../vkd3d/libs/vkd3d-utils/vkd3d_utils_main.c | 6 +- + libs/vkd3d/libs/vkd3d/command.c | 2 +- + libs/vkd3d/libs/vkd3d/state.c | 6 +- + 11 files changed, 184 insertions(+), 643 deletions(-) + +diff --git a/libs/vkd3d/include/private/spirv_grammar.h b/libs/vkd3d/include/private/spirv_grammar.h +index 34cadd9bd58..2aac5a6558c 100644 +--- a/libs/vkd3d/include/private/spirv_grammar.h ++++ b/libs/vkd3d/include/private/spirv_grammar.h +@@ -43,12 +43,10 @@ enum spirv_parser_operand_type + SPIRV_PARSER_OPERAND_TYPE_ADDRESSING_MODEL, + SPIRV_PARSER_OPERAND_TYPE_BUILT_IN, + SPIRV_PARSER_OPERAND_TYPE_CAPABILITY, +- SPIRV_PARSER_OPERAND_TYPE_COMPONENT_TYPE, + SPIRV_PARSER_OPERAND_TYPE_COOPERATIVE_MATRIX_LAYOUT, + SPIRV_PARSER_OPERAND_TYPE_COOPERATIVE_MATRIX_OPERANDS, + SPIRV_PARSER_OPERAND_TYPE_COOPERATIVE_MATRIX_REDUCE, + SPIRV_PARSER_OPERAND_TYPE_COOPERATIVE_MATRIX_USE, +- SPIRV_PARSER_OPERAND_TYPE_COOPERATIVE_VECTOR_MATRIX_LAYOUT, + SPIRV_PARSER_OPERAND_TYPE_DECORATION, + SPIRV_PARSER_OPERAND_TYPE_DIM, + SPIRV_PARSER_OPERAND_TYPE_EXECUTION_MODE, +@@ -84,7 +82,6 @@ enum spirv_parser_operand_type + SPIRV_PARSER_OPERAND_TYPE_LITERAL_STRING, + SPIRV_PARSER_OPERAND_TYPE_LOAD_CACHE_CONTROL, + SPIRV_PARSER_OPERAND_TYPE_LOOP_CONTROL, +- SPIRV_PARSER_OPERAND_TYPE_MATRIX_MULTIPLY_ACCUMULATE_OPERANDS, + SPIRV_PARSER_OPERAND_TYPE_MEMORY_ACCESS, + SPIRV_PARSER_OPERAND_TYPE_MEMORY_MODEL, + SPIRV_PARSER_OPERAND_TYPE_MEMORY_SEMANTICS, +@@ -149,7 +146,7 @@ spirv_parser_operand_type_info[] = + }, + [SPIRV_PARSER_OPERAND_TYPE_BUILT_IN] = + { +- "BuiltIn", SPIRV_PARSER_OPERAND_CATEGORY_VALUE_ENUM, 126, ++ "BuiltIn", SPIRV_PARSER_OPERAND_CATEGORY_VALUE_ENUM, 116, + (struct spirv_parser_enumerant[]) + { + {0, "Position"}, +@@ -210,9 +207,6 @@ spirv_parser_operand_type_info[] = + {0x1156, "DeviceIndex"}, + {0x1158, "ViewIndex"}, + {0x115c, "ShadingRateKHR"}, +- {0x118c, "TileOffsetQCOM"}, +- {0x118d, "TileDimensionQCOM"}, +- {0x118e, "TileApronSizeQCOM"}, + {0x1380, "BaryCoordNoPerspAMD"}, + {0x1381, "BaryCoordNoPerspCentroidAMD"}, + {0x1382, "BaryCoordNoPerspSampleAMD"}, +@@ -264,25 +258,18 @@ spirv_parser_operand_type_info[] = + {0x14e0, "HitMicroTriangleVertexBarycentricsNV"}, + {0x14e7, "IncomingRayFlagsKHR"}, + {0x14e8, "RayGeometryIndexKHR"}, +- {0x14ef, "HitIsSphereNV"}, +- {0x14f0, "HitIsLSSNV"}, +- {0x14f1, "HitSpherePositionNV"}, + {0x14fe, "WarpsPerSMNV"}, + {0x14ff, "SMCountNV"}, + {0x1500, "WarpIDNV"}, + {0x1501, "SMIDNV"}, +- {0x1514, "HitLSSPositionsNV"}, + {0x151d, "HitKindFrontFacingMicroTriangleNV"}, + {0x151e, "HitKindBackFacingMicroTriangleNV"}, +- {0x152c, "HitSphereRadiusNV"}, +- {0x152d, "HitLSSRadiiNV"}, +- {0x153c, "ClusterIDNV"}, + {0x1785, "CullMaskKHR"}, + } + }, + [SPIRV_PARSER_OPERAND_TYPE_CAPABILITY] = + { +- "Capability", SPIRV_PARSER_OPERAND_CATEGORY_VALUE_ENUM, 261, ++ "Capability", SPIRV_PARSER_OPERAND_CATEGORY_VALUE_ENUM, 245, + (struct spirv_parser_enumerant[]) + { + {0, "Matrix"}, +@@ -393,7 +380,6 @@ spirv_parser_operand_type_info[] = + {0x1184, "TextureSampleWeightedQCOM"}, + {0x1185, "TextureBoxFilterQCOM"}, + {0x1186, "TextureBlockMatchQCOM"}, +- {0x118f, "TileShadingQCOM"}, + {0x1192, "TextureBlockMatch2QCOM"}, + {0x1390, "Float16ImageAMD"}, + {0x1391, "ImageGatherBiasLodAMD"}, +@@ -404,9 +390,6 @@ spirv_parser_operand_type_info[] = + {0x13bf, "ShaderClockKHR"}, + {0x13cb, "ShaderEnqueueAMDX"}, + {0x13df, "QuadControlKHR"}, +- {0x13fc, "BFloat16TypeKHR"}, +- {0x13fd, "BFloat16DotProductKHR"}, +- {0x13fe, "BFloat16CooperativeMatrixKHR"}, + {0x1481, "SampleMaskOverrideCoverageNV"}, + {0x1483, "GeometryShaderPassthroughNV"}, + {0x1486, "ShaderViewportIndexLayerEXT"}, +@@ -452,19 +435,14 @@ spirv_parser_operand_type_info[] = + {0x1507, "ShaderInvocationReorderNV"}, + {0x150e, "BindlessTextureNV"}, + {0x150f, "RayQueryPositionFetchKHR"}, +- {0x1512, "CooperativeVectorNV"}, + {0x151c, "AtomicFloat16VectorNV"}, + {0x1521, "RayTracingDisplacementMicromapNV"}, + {0x1526, "RawAccessChainsNV"}, +- {0x152a, "RayTracingSpheresGeometryNV"}, +- {0x152b, "RayTracingLinearSweptSpheresGeometryNV"}, + {0x1536, "CooperativeMatrixReductionsNV"}, + {0x1537, "CooperativeMatrixConversionsNV"}, + {0x1538, "CooperativeMatrixPerElementOperationsNV"}, + {0x1539, "CooperativeMatrixTensorAddressingNV"}, + {0x153a, "CooperativeMatrixBlockLoadsNV"}, +- {0x153b, "CooperativeVectorTrainingNV"}, +- {0x153d, "RayTracingClusterAccelerationStructureNV"}, + {0x153f, "TensorAddressingNV"}, + {0x15c0, "SubgroupShuffleINTEL"}, + {0x15c1, "SubgroupBufferBlockIOINTEL"}, +@@ -529,47 +507,18 @@ spirv_parser_operand_type_info[] = + {0x1800, "ArithmeticFenceEXT"}, + {0x1806, "FPGAClusterAttributesV2INTEL"}, + {0x1811, "FPGAKernelAttributesv2INTEL"}, +- {0x1812, "TaskSequenceINTEL"}, + {0x1819, "FPMaxErrorINTEL"}, + {0x181b, "FPGALatencyControlINTEL"}, + {0x181e, "FPGAArgumentInterfacesINTEL"}, + {0x182b, "GlobalVariableHostAccessINTEL"}, + {0x182d, "GlobalVariableFPGADecorationsINTEL"}, + {0x184c, "SubgroupBufferPrefetchINTEL"}, +- {0x1854, "Subgroup2DBlockIOINTEL"}, +- {0x1855, "Subgroup2DBlockTransformINTEL"}, +- {0x1856, "Subgroup2DBlockTransposeINTEL"}, +- {0x185c, "SubgroupMatrixMultiplyAccumulateINTEL"}, +- {0x1861, "TernaryBitwiseFunctionINTEL"}, + {0x1900, "GroupUniformArithmeticKHR"}, +- {0x1919, "TensorFloat32RoundingINTEL"}, + {0x191b, "MaskedGatherScatterINTEL"}, + {0x1929, "CacheControlsINTEL"}, + {0x193c, "RegisterLimitsINTEL"}, + } + }, +- [SPIRV_PARSER_OPERAND_TYPE_COMPONENT_TYPE] = +- { +- "ComponentType", SPIRV_PARSER_OPERAND_CATEGORY_VALUE_ENUM, 15, +- (struct spirv_parser_enumerant[]) +- { +- {0, "Float16NV"}, +- {0x1, "Float32NV"}, +- {0x2, "Float64NV"}, +- {0x3, "SignedInt8NV"}, +- {0x4, "SignedInt16NV"}, +- {0x5, "SignedInt32NV"}, +- {0x6, "SignedInt64NV"}, +- {0x7, "UnsignedInt8NV"}, +- {0x8, "UnsignedInt16NV"}, +- {0x9, "UnsignedInt32NV"}, +- {0xa, "UnsignedInt64NV"}, +- {0x3ba247f8, "SignedInt8PackedNV"}, +- {0x3ba247f9, "UnsignedInt8PackedNV"}, +- {0x3ba247fa, "FloatE4M3NV"}, +- {0x3ba247fb, "FloatE5M2NV"}, +- } +- }, + [SPIRV_PARSER_OPERAND_TYPE_COOPERATIVE_MATRIX_LAYOUT] = + { + "CooperativeMatrixLayout", SPIRV_PARSER_OPERAND_CATEGORY_VALUE_ENUM, 4, +@@ -614,17 +563,6 @@ spirv_parser_operand_type_info[] = + {0x2, "MatrixAccumulatorKHR"}, + } + }, +- [SPIRV_PARSER_OPERAND_TYPE_COOPERATIVE_VECTOR_MATRIX_LAYOUT] = +- { +- "CooperativeVectorMatrixLayout", SPIRV_PARSER_OPERAND_CATEGORY_VALUE_ENUM, 4, +- (struct spirv_parser_enumerant[]) +- { +- {0, "RowMajorNV"}, +- {0x1, "ColumnMajorNV"}, +- {0x2, "InferencingOptimalNV"}, +- {0x3, "TrainingOptimalNV"}, +- } +- }, + [SPIRV_PARSER_OPERAND_TYPE_DECORATION] = + { + "Decoration", SPIRV_PARSER_OPERAND_CATEGORY_VALUE_ENUM, 142, +@@ -1240,7 +1178,7 @@ spirv_parser_operand_type_info[] = + }, + [SPIRV_PARSER_OPERAND_TYPE_EXECUTION_MODE] = + { +- "ExecutionMode", SPIRV_PARSER_OPERAND_CATEGORY_VALUE_ENUM, 96, ++ "ExecutionMode", SPIRV_PARSER_OPERAND_CATEGORY_VALUE_ENUM, 94, + (struct spirv_parser_enumerant[]) + { + { +@@ -1389,16 +1327,6 @@ spirv_parser_operand_type_info[] = + SPIRV_PARSER_OPERAND_TYPE_LITERAL_INTEGER, + } + }, +- {0x1189, "NonCoherentTileAttachmentReadQCOM"}, +- { +- 0x118a, "TileShadingRateQCOM", 3, +- (enum spirv_parser_operand_type[]) +- { +- SPIRV_PARSER_OPERAND_TYPE_LITERAL_INTEGER, +- SPIRV_PARSER_OPERAND_TYPE_LITERAL_INTEGER, +- SPIRV_PARSER_OPERAND_TYPE_LITERAL_INTEGER, +- } +- }, + {0x1399, "EarlyAndLateFragmentTestsAMD"}, + {0x13a3, "StencilRefReplacingEXT"}, + {0x13cd, "CoalescingAMDX"}, +@@ -1628,11 +1556,7 @@ spirv_parser_operand_type_info[] = + }, + [SPIRV_PARSER_OPERAND_TYPE_FPENCODING] = + { +- "FPEncoding", SPIRV_PARSER_OPERAND_CATEGORY_VALUE_ENUM, 1, +- (struct spirv_parser_enumerant[]) +- { +- {0, "BFloat16KHR"}, +- } ++ "FPEncoding", SPIRV_PARSER_OPERAND_CATEGORY_VALUE_ENUM + }, + [SPIRV_PARSER_OPERAND_TYPE_FPFAST_MATH_MODE] = + { +@@ -1757,7 +1681,7 @@ spirv_parser_operand_type_info[] = + }, + [SPIRV_PARSER_OPERAND_TYPE_IMAGE_CHANNEL_DATA_TYPE] = + { +- "ImageChannelDataType", SPIRV_PARSER_OPERAND_CATEGORY_VALUE_ENUM, 26, ++ "ImageChannelDataType", SPIRV_PARSER_OPERAND_CATEGORY_VALUE_ENUM, 20, + (struct spirv_parser_enumerant[]) + { + {0, "SnormInt8"}, +@@ -1777,15 +1701,9 @@ spirv_parser_operand_type_info[] = + {0xe, "Float"}, + {0xf, "UnormInt24"}, + {0x10, "UnormInt101010_2"}, +- {0x11, "UnormInt10X6EXT"}, + {0x13, "UnsignedIntRaw10EXT"}, + {0x14, "UnsignedIntRaw12EXT"}, + {0x15, "UnormInt2_101010EXT"}, +- {0x16, "UnsignedInt10X6EXT"}, +- {0x17, "UnsignedInt12X4EXT"}, +- {0x18, "UnsignedInt14X2EXT"}, +- {0x19, "UnormInt12X4EXT"}, +- {0x1a, "UnormInt14X2EXT"}, + } + }, + [SPIRV_PARSER_OPERAND_TYPE_IMAGE_CHANNEL_ORDER] = +@@ -2146,28 +2064,6 @@ spirv_parser_operand_type_info[] = + }, + } + }, +- [SPIRV_PARSER_OPERAND_TYPE_MATRIX_MULTIPLY_ACCUMULATE_OPERANDS] = +- { +- "MatrixMultiplyAccumulateOperands", SPIRV_PARSER_OPERAND_CATEGORY_BIT_ENUM, 15, +- (struct spirv_parser_enumerant[]) +- { +- {0, "None"}, +- {0x1, "MatrixASignedComponentsINTEL"}, +- {0x2, "MatrixBSignedComponentsINTEL"}, +- {0x4, "MatrixCBFloat16INTEL"}, +- {0x8, "MatrixResultBFloat16INTEL"}, +- {0x10, "MatrixAPackedInt8INTEL"}, +- {0x20, "MatrixBPackedInt8INTEL"}, +- {0x40, "MatrixAPackedInt4INTEL"}, +- {0x80, "MatrixBPackedInt4INTEL"}, +- {0x100, "MatrixATF32INTEL"}, +- {0x200, "MatrixBTF32INTEL"}, +- {0x400, "MatrixAPackedFloat16INTEL"}, +- {0x800, "MatrixBPackedFloat16INTEL"}, +- {0x1000, "MatrixAPackedBFloat16INTEL"}, +- {0x2000, "MatrixBPackedBFloat16INTEL"}, +- } +- }, + [SPIRV_PARSER_OPERAND_TYPE_MEMORY_ACCESS] = + { + "MemoryAccess", SPIRV_PARSER_OPERAND_CATEGORY_BIT_ENUM, 9, +@@ -2405,7 +2301,7 @@ spirv_parser_operand_type_info[] = + }, + [SPIRV_PARSER_OPERAND_TYPE_SOURCE_LANGUAGE] = + { +- "SourceLanguage", SPIRV_PARSER_OPERAND_CATEGORY_VALUE_ENUM, 14, ++ "SourceLanguage", SPIRV_PARSER_OPERAND_CATEGORY_VALUE_ENUM, 13, + (struct spirv_parser_enumerant[]) + { + {0, "Unknown"}, +@@ -2421,12 +2317,11 @@ spirv_parser_operand_type_info[] = + {0xa, "WGSL"}, + {0xb, "Slang"}, + {0xc, "Zig"}, +- {0xd, "Rust"}, + } + }, + [SPIRV_PARSER_OPERAND_TYPE_STORAGE_CLASS] = + { +- "StorageClass", SPIRV_PARSER_OPERAND_CATEGORY_VALUE_ENUM, 28, ++ "StorageClass", SPIRV_PARSER_OPERAND_CATEGORY_VALUE_ENUM, 27, + (struct spirv_parser_enumerant[]) + { + {0, "UniformConstant"}, +@@ -2443,7 +2338,6 @@ spirv_parser_operand_type_info[] = + {0xb, "Image"}, + {0xc, "StorageBuffer"}, + {0x104c, "TileImageEXT"}, +- {0x118b, "TileAttachmentQCOM"}, + {0x13cc, "NodePayloadAMDX"}, + {0x14d0, "CallableDataKHR"}, + {0x14d1, "IncomingCallableDataKHR"}, +@@ -6996,78 +6890,6 @@ spirv_parser_opcode_info[] = + {SPIRV_PARSER_OPERAND_TYPE_IMAGE_OPERANDS, '?'}, + } + }, +- { +- 0x14a8, "OpTypeCooperativeVectorNV", 3, +- (struct spirv_parser_instruction_operand[]) +- { +- {SPIRV_PARSER_OPERAND_TYPE_ID_RESULT}, +- {SPIRV_PARSER_OPERAND_TYPE_ID_REF}, +- {SPIRV_PARSER_OPERAND_TYPE_ID_REF}, +- } +- }, +- { +- 0x14a9, "OpCooperativeVectorMatrixMulNV", 13, +- (struct spirv_parser_instruction_operand[]) +- { +- {SPIRV_PARSER_OPERAND_TYPE_ID_RESULT_TYPE}, +- {SPIRV_PARSER_OPERAND_TYPE_ID_RESULT}, +- {SPIRV_PARSER_OPERAND_TYPE_ID_REF}, +- {SPIRV_PARSER_OPERAND_TYPE_ID_REF}, +- {SPIRV_PARSER_OPERAND_TYPE_ID_REF}, +- {SPIRV_PARSER_OPERAND_TYPE_ID_REF}, +- {SPIRV_PARSER_OPERAND_TYPE_ID_REF}, +- {SPIRV_PARSER_OPERAND_TYPE_ID_REF}, +- {SPIRV_PARSER_OPERAND_TYPE_ID_REF}, +- {SPIRV_PARSER_OPERAND_TYPE_ID_REF}, +- {SPIRV_PARSER_OPERAND_TYPE_ID_REF}, +- {SPIRV_PARSER_OPERAND_TYPE_ID_REF, '?'}, +- {SPIRV_PARSER_OPERAND_TYPE_COOPERATIVE_MATRIX_OPERANDS, '?'}, +- } +- }, +- { +- 0x14aa, "OpCooperativeVectorOuterProductAccumulateNV", 7, +- (struct spirv_parser_instruction_operand[]) +- { +- {SPIRV_PARSER_OPERAND_TYPE_ID_REF}, +- {SPIRV_PARSER_OPERAND_TYPE_ID_REF}, +- {SPIRV_PARSER_OPERAND_TYPE_ID_REF}, +- {SPIRV_PARSER_OPERAND_TYPE_ID_REF}, +- {SPIRV_PARSER_OPERAND_TYPE_ID_REF}, +- {SPIRV_PARSER_OPERAND_TYPE_ID_REF}, +- {SPIRV_PARSER_OPERAND_TYPE_ID_REF, '?'}, +- } +- }, +- { +- 0x14ab, "OpCooperativeVectorReduceSumAccumulateNV", 3, +- (struct spirv_parser_instruction_operand[]) +- { +- {SPIRV_PARSER_OPERAND_TYPE_ID_REF}, +- {SPIRV_PARSER_OPERAND_TYPE_ID_REF}, +- {SPIRV_PARSER_OPERAND_TYPE_ID_REF}, +- } +- }, +- { +- 0x14ac, "OpCooperativeVectorMatrixMulAddNV", 16, +- (struct spirv_parser_instruction_operand[]) +- { +- {SPIRV_PARSER_OPERAND_TYPE_ID_RESULT_TYPE}, +- {SPIRV_PARSER_OPERAND_TYPE_ID_RESULT}, +- {SPIRV_PARSER_OPERAND_TYPE_ID_REF}, +- {SPIRV_PARSER_OPERAND_TYPE_ID_REF}, +- {SPIRV_PARSER_OPERAND_TYPE_ID_REF}, +- {SPIRV_PARSER_OPERAND_TYPE_ID_REF}, +- {SPIRV_PARSER_OPERAND_TYPE_ID_REF}, +- {SPIRV_PARSER_OPERAND_TYPE_ID_REF}, +- {SPIRV_PARSER_OPERAND_TYPE_ID_REF}, +- {SPIRV_PARSER_OPERAND_TYPE_ID_REF}, +- {SPIRV_PARSER_OPERAND_TYPE_ID_REF}, +- {SPIRV_PARSER_OPERAND_TYPE_ID_REF}, +- {SPIRV_PARSER_OPERAND_TYPE_ID_REF}, +- {SPIRV_PARSER_OPERAND_TYPE_ID_REF}, +- {SPIRV_PARSER_OPERAND_TYPE_ID_REF, '?'}, +- {SPIRV_PARSER_OPERAND_TYPE_COOPERATIVE_MATRIX_OPERANDS, '?'}, +- } +- }, + { + 0x14ad, "OpCooperativeMatrixConvertNV", 3, + (struct spirv_parser_instruction_operand[]) +@@ -7138,27 +6960,6 @@ spirv_parser_opcode_info[] = + {SPIRV_PARSER_OPERAND_TYPE_ID_REF}, + } + }, +- { +- 0x14b6, "OpCooperativeVectorLoadNV", 5, +- (struct spirv_parser_instruction_operand[]) +- { +- {SPIRV_PARSER_OPERAND_TYPE_ID_RESULT_TYPE}, +- {SPIRV_PARSER_OPERAND_TYPE_ID_RESULT}, +- {SPIRV_PARSER_OPERAND_TYPE_ID_REF}, +- {SPIRV_PARSER_OPERAND_TYPE_ID_REF}, +- {SPIRV_PARSER_OPERAND_TYPE_MEMORY_ACCESS, '?'}, +- } +- }, +- { +- 0x14b7, "OpCooperativeVectorStoreNV", 4, +- (struct spirv_parser_instruction_operand[]) +- { +- {SPIRV_PARSER_OPERAND_TYPE_ID_REF}, +- {SPIRV_PARSER_OPERAND_TYPE_ID_REF}, +- {SPIRV_PARSER_OPERAND_TYPE_ID_REF}, +- {SPIRV_PARSER_OPERAND_TYPE_MEMORY_ACCESS, '?'}, +- } +- }, + { + 0x14d6, "OpReportIntersectionKHR", 4, + (struct spirv_parser_instruction_operand[]) +@@ -7249,25 +7050,6 @@ spirv_parser_opcode_info[] = + {SPIRV_PARSER_OPERAND_TYPE_ID_REF}, + } + }, +- { +- 0x14e1, "OpRayQueryGetClusterIdNV", 4, +- (struct spirv_parser_instruction_operand[]) +- { +- {SPIRV_PARSER_OPERAND_TYPE_ID_RESULT_TYPE}, +- {SPIRV_PARSER_OPERAND_TYPE_ID_RESULT}, +- {SPIRV_PARSER_OPERAND_TYPE_ID_REF}, +- {SPIRV_PARSER_OPERAND_TYPE_ID_REF}, +- } +- }, +- { +- 0x14e2, "OpHitObjectGetClusterIdNV", 3, +- (struct spirv_parser_instruction_operand[]) +- { +- {SPIRV_PARSER_OPERAND_TYPE_ID_RESULT_TYPE}, +- {SPIRV_PARSER_OPERAND_TYPE_ID_RESULT}, +- {SPIRV_PARSER_OPERAND_TYPE_ID_REF}, +- } +- }, + { + 0x14ee, "OpTypeCooperativeMatrixNV", 5, + (struct spirv_parser_instruction_operand[]) +@@ -7580,130 +7362,6 @@ spirv_parser_opcode_info[] = + {SPIRV_PARSER_OPERAND_TYPE_RAW_ACCESS_CHAIN_OPERANDS, '?'}, + } + }, +- { +- 0x1533, "OpRayQueryGetIntersectionSpherePositionNV", 4, +- (struct spirv_parser_instruction_operand[]) +- { +- {SPIRV_PARSER_OPERAND_TYPE_ID_RESULT_TYPE}, +- {SPIRV_PARSER_OPERAND_TYPE_ID_RESULT}, +- {SPIRV_PARSER_OPERAND_TYPE_ID_REF}, +- {SPIRV_PARSER_OPERAND_TYPE_ID_REF}, +- } +- }, +- { +- 0x1534, "OpRayQueryGetIntersectionSphereRadiusNV", 4, +- (struct spirv_parser_instruction_operand[]) +- { +- {SPIRV_PARSER_OPERAND_TYPE_ID_RESULT_TYPE}, +- {SPIRV_PARSER_OPERAND_TYPE_ID_RESULT}, +- {SPIRV_PARSER_OPERAND_TYPE_ID_REF}, +- {SPIRV_PARSER_OPERAND_TYPE_ID_REF}, +- } +- }, +- { +- 0x1535, "OpRayQueryGetIntersectionLSSPositionsNV", 4, +- (struct spirv_parser_instruction_operand[]) +- { +- {SPIRV_PARSER_OPERAND_TYPE_ID_RESULT_TYPE}, +- {SPIRV_PARSER_OPERAND_TYPE_ID_RESULT}, +- {SPIRV_PARSER_OPERAND_TYPE_ID_REF}, +- {SPIRV_PARSER_OPERAND_TYPE_ID_REF}, +- } +- }, +- { +- 0x1536, "OpRayQueryGetIntersectionLSSRadiiNV", 4, +- (struct spirv_parser_instruction_operand[]) +- { +- {SPIRV_PARSER_OPERAND_TYPE_ID_RESULT_TYPE}, +- {SPIRV_PARSER_OPERAND_TYPE_ID_RESULT}, +- {SPIRV_PARSER_OPERAND_TYPE_ID_REF}, +- {SPIRV_PARSER_OPERAND_TYPE_ID_REF}, +- } +- }, +- { +- 0x1537, "OpRayQueryGetIntersectionLSSHitValueNV", 4, +- (struct spirv_parser_instruction_operand[]) +- { +- {SPIRV_PARSER_OPERAND_TYPE_ID_RESULT_TYPE}, +- {SPIRV_PARSER_OPERAND_TYPE_ID_RESULT}, +- {SPIRV_PARSER_OPERAND_TYPE_ID_REF}, +- {SPIRV_PARSER_OPERAND_TYPE_ID_REF}, +- } +- }, +- { +- 0x1538, "OpHitObjectGetSpherePositionNV", 3, +- (struct spirv_parser_instruction_operand[]) +- { +- {SPIRV_PARSER_OPERAND_TYPE_ID_RESULT_TYPE}, +- {SPIRV_PARSER_OPERAND_TYPE_ID_RESULT}, +- {SPIRV_PARSER_OPERAND_TYPE_ID_REF}, +- } +- }, +- { +- 0x1539, "OpHitObjectGetSphereRadiusNV", 3, +- (struct spirv_parser_instruction_operand[]) +- { +- {SPIRV_PARSER_OPERAND_TYPE_ID_RESULT_TYPE}, +- {SPIRV_PARSER_OPERAND_TYPE_ID_RESULT}, +- {SPIRV_PARSER_OPERAND_TYPE_ID_REF}, +- } +- }, +- { +- 0x153a, "OpHitObjectGetLSSPositionsNV", 3, +- (struct spirv_parser_instruction_operand[]) +- { +- {SPIRV_PARSER_OPERAND_TYPE_ID_RESULT_TYPE}, +- {SPIRV_PARSER_OPERAND_TYPE_ID_RESULT}, +- {SPIRV_PARSER_OPERAND_TYPE_ID_REF}, +- } +- }, +- { +- 0x153b, "OpHitObjectGetLSSRadiiNV", 3, +- (struct spirv_parser_instruction_operand[]) +- { +- {SPIRV_PARSER_OPERAND_TYPE_ID_RESULT_TYPE}, +- {SPIRV_PARSER_OPERAND_TYPE_ID_RESULT}, +- {SPIRV_PARSER_OPERAND_TYPE_ID_REF}, +- } +- }, +- { +- 0x153c, "OpHitObjectIsSphereHitNV", 3, +- (struct spirv_parser_instruction_operand[]) +- { +- {SPIRV_PARSER_OPERAND_TYPE_ID_RESULT_TYPE}, +- {SPIRV_PARSER_OPERAND_TYPE_ID_RESULT}, +- {SPIRV_PARSER_OPERAND_TYPE_ID_REF}, +- } +- }, +- { +- 0x153d, "OpHitObjectIsLSSHitNV", 3, +- (struct spirv_parser_instruction_operand[]) +- { +- {SPIRV_PARSER_OPERAND_TYPE_ID_RESULT_TYPE}, +- {SPIRV_PARSER_OPERAND_TYPE_ID_RESULT}, +- {SPIRV_PARSER_OPERAND_TYPE_ID_REF}, +- } +- }, +- { +- 0x153e, "OpRayQueryIsSphereHitNV", 4, +- (struct spirv_parser_instruction_operand[]) +- { +- {SPIRV_PARSER_OPERAND_TYPE_ID_RESULT_TYPE}, +- {SPIRV_PARSER_OPERAND_TYPE_ID_RESULT}, +- {SPIRV_PARSER_OPERAND_TYPE_ID_REF}, +- {SPIRV_PARSER_OPERAND_TYPE_ID_REF}, +- } +- }, +- { +- 0x153f, "OpRayQueryIsLSSHitNV", 4, +- (struct spirv_parser_instruction_operand[]) +- { +- {SPIRV_PARSER_OPERAND_TYPE_ID_RESULT_TYPE}, +- {SPIRV_PARSER_OPERAND_TYPE_ID_RESULT}, +- {SPIRV_PARSER_OPERAND_TYPE_ID_REF}, +- {SPIRV_PARSER_OPERAND_TYPE_ID_REF}, +- } +- }, + { + 0x15c3, "OpSubgroupShuffleINTEL", 4, + (struct spirv_parser_instruction_operand[]) +@@ -7962,9 +7620,10 @@ spirv_parser_opcode_info[] = + } + }, + { +- 0x15e9, "OpAsmTargetINTEL", 2, ++ 0x15e9, "OpAsmTargetINTEL", 3, + (struct spirv_parser_instruction_operand[]) + { ++ {SPIRV_PARSER_OPERAND_TYPE_ID_RESULT_TYPE}, + {SPIRV_PARSER_OPERAND_TYPE_ID_RESULT}, + {SPIRV_PARSER_OPERAND_TYPE_LITERAL_STRING}, + } +@@ -9237,7 +8896,7 @@ spirv_parser_opcode_info[] = + } + }, + { +- 0x16d0, "OpArbitraryFloatSinCosPiINTEL", 8, ++ 0x16d0, "OpArbitraryFloatSinCosPiINTEL", 9, + (struct spirv_parser_instruction_operand[]) + { + {SPIRV_PARSER_OPERAND_TYPE_ID_RESULT_TYPE}, +@@ -9248,6 +8907,7 @@ spirv_parser_opcode_info[] = + {SPIRV_PARSER_OPERAND_TYPE_LITERAL_INTEGER}, + {SPIRV_PARSER_OPERAND_TYPE_LITERAL_INTEGER}, + {SPIRV_PARSER_OPERAND_TYPE_LITERAL_INTEGER}, ++ {SPIRV_PARSER_OPERAND_TYPE_LITERAL_INTEGER}, + } + }, + { +@@ -9279,7 +8939,7 @@ spirv_parser_opcode_info[] = + } + }, + { +- 0x16d3, "OpArbitraryFloatCastToIntINTEL", 8, ++ 0x16d3, "OpArbitraryFloatCastToIntINTEL", 7, + (struct spirv_parser_instruction_operand[]) + { + {SPIRV_PARSER_OPERAND_TYPE_ID_RESULT_TYPE}, +@@ -9289,7 +8949,6 @@ spirv_parser_opcode_info[] = + {SPIRV_PARSER_OPERAND_TYPE_LITERAL_INTEGER}, + {SPIRV_PARSER_OPERAND_TYPE_LITERAL_INTEGER}, + {SPIRV_PARSER_OPERAND_TYPE_LITERAL_INTEGER}, +- {SPIRV_PARSER_OPERAND_TYPE_LITERAL_INTEGER}, + } + }, + { +@@ -9803,7 +9462,7 @@ spirv_parser_opcode_info[] = + } + }, + { +- 0x16fa, "OpArbitraryFloatPowNINTEL", 10, ++ 0x16fa, "OpArbitraryFloatPowNINTEL", 9, + (struct spirv_parser_instruction_operand[]) + { + {SPIRV_PARSER_OPERAND_TYPE_ID_RESULT_TYPE}, +@@ -9815,7 +9474,6 @@ spirv_parser_opcode_info[] = + {SPIRV_PARSER_OPERAND_TYPE_LITERAL_INTEGER}, + {SPIRV_PARSER_OPERAND_TYPE_LITERAL_INTEGER}, + {SPIRV_PARSER_OPERAND_TYPE_LITERAL_INTEGER}, +- {SPIRV_PARSER_OPERAND_TYPE_LITERAL_INTEGER}, + } + }, + { +@@ -9851,12 +9509,13 @@ spirv_parser_opcode_info[] = + } + }, + { +- 0x1723, "OpFixedSqrtINTEL", 8, ++ 0x1723, "OpFixedSqrtINTEL", 9, + (struct spirv_parser_instruction_operand[]) + { + {SPIRV_PARSER_OPERAND_TYPE_ID_RESULT_TYPE}, + {SPIRV_PARSER_OPERAND_TYPE_ID_RESULT}, + {SPIRV_PARSER_OPERAND_TYPE_ID_REF}, ++ {SPIRV_PARSER_OPERAND_TYPE_ID_REF}, + {SPIRV_PARSER_OPERAND_TYPE_LITERAL_INTEGER}, + {SPIRV_PARSER_OPERAND_TYPE_LITERAL_INTEGER}, + {SPIRV_PARSER_OPERAND_TYPE_LITERAL_INTEGER}, +@@ -9865,12 +9524,13 @@ spirv_parser_opcode_info[] = + } + }, + { +- 0x1724, "OpFixedRecipINTEL", 8, ++ 0x1724, "OpFixedRecipINTEL", 9, + (struct spirv_parser_instruction_operand[]) + { + {SPIRV_PARSER_OPERAND_TYPE_ID_RESULT_TYPE}, + {SPIRV_PARSER_OPERAND_TYPE_ID_RESULT}, + {SPIRV_PARSER_OPERAND_TYPE_ID_REF}, ++ {SPIRV_PARSER_OPERAND_TYPE_ID_REF}, + {SPIRV_PARSER_OPERAND_TYPE_LITERAL_INTEGER}, + {SPIRV_PARSER_OPERAND_TYPE_LITERAL_INTEGER}, + {SPIRV_PARSER_OPERAND_TYPE_LITERAL_INTEGER}, +@@ -9879,12 +9539,13 @@ spirv_parser_opcode_info[] = + } + }, + { +- 0x1725, "OpFixedRsqrtINTEL", 8, ++ 0x1725, "OpFixedRsqrtINTEL", 9, + (struct spirv_parser_instruction_operand[]) + { + {SPIRV_PARSER_OPERAND_TYPE_ID_RESULT_TYPE}, + {SPIRV_PARSER_OPERAND_TYPE_ID_RESULT}, + {SPIRV_PARSER_OPERAND_TYPE_ID_REF}, ++ {SPIRV_PARSER_OPERAND_TYPE_ID_REF}, + {SPIRV_PARSER_OPERAND_TYPE_LITERAL_INTEGER}, + {SPIRV_PARSER_OPERAND_TYPE_LITERAL_INTEGER}, + {SPIRV_PARSER_OPERAND_TYPE_LITERAL_INTEGER}, +@@ -9893,12 +9554,13 @@ spirv_parser_opcode_info[] = + } + }, + { +- 0x1726, "OpFixedSinINTEL", 8, ++ 0x1726, "OpFixedSinINTEL", 9, + (struct spirv_parser_instruction_operand[]) + { + {SPIRV_PARSER_OPERAND_TYPE_ID_RESULT_TYPE}, + {SPIRV_PARSER_OPERAND_TYPE_ID_RESULT}, + {SPIRV_PARSER_OPERAND_TYPE_ID_REF}, ++ {SPIRV_PARSER_OPERAND_TYPE_ID_REF}, + {SPIRV_PARSER_OPERAND_TYPE_LITERAL_INTEGER}, + {SPIRV_PARSER_OPERAND_TYPE_LITERAL_INTEGER}, + {SPIRV_PARSER_OPERAND_TYPE_LITERAL_INTEGER}, +@@ -9907,12 +9569,13 @@ spirv_parser_opcode_info[] = + } + }, + { +- 0x1727, "OpFixedCosINTEL", 8, ++ 0x1727, "OpFixedCosINTEL", 9, + (struct spirv_parser_instruction_operand[]) + { + {SPIRV_PARSER_OPERAND_TYPE_ID_RESULT_TYPE}, + {SPIRV_PARSER_OPERAND_TYPE_ID_RESULT}, + {SPIRV_PARSER_OPERAND_TYPE_ID_REF}, ++ {SPIRV_PARSER_OPERAND_TYPE_ID_REF}, + {SPIRV_PARSER_OPERAND_TYPE_LITERAL_INTEGER}, + {SPIRV_PARSER_OPERAND_TYPE_LITERAL_INTEGER}, + {SPIRV_PARSER_OPERAND_TYPE_LITERAL_INTEGER}, +@@ -9921,12 +9584,13 @@ spirv_parser_opcode_info[] = + } + }, + { +- 0x1728, "OpFixedSinCosINTEL", 8, ++ 0x1728, "OpFixedSinCosINTEL", 9, + (struct spirv_parser_instruction_operand[]) + { + {SPIRV_PARSER_OPERAND_TYPE_ID_RESULT_TYPE}, + {SPIRV_PARSER_OPERAND_TYPE_ID_RESULT}, + {SPIRV_PARSER_OPERAND_TYPE_ID_REF}, ++ {SPIRV_PARSER_OPERAND_TYPE_ID_REF}, + {SPIRV_PARSER_OPERAND_TYPE_LITERAL_INTEGER}, + {SPIRV_PARSER_OPERAND_TYPE_LITERAL_INTEGER}, + {SPIRV_PARSER_OPERAND_TYPE_LITERAL_INTEGER}, +@@ -9935,12 +9599,13 @@ spirv_parser_opcode_info[] = + } + }, + { +- 0x1729, "OpFixedSinPiINTEL", 8, ++ 0x1729, "OpFixedSinPiINTEL", 9, + (struct spirv_parser_instruction_operand[]) + { + {SPIRV_PARSER_OPERAND_TYPE_ID_RESULT_TYPE}, + {SPIRV_PARSER_OPERAND_TYPE_ID_RESULT}, + {SPIRV_PARSER_OPERAND_TYPE_ID_REF}, ++ {SPIRV_PARSER_OPERAND_TYPE_ID_REF}, + {SPIRV_PARSER_OPERAND_TYPE_LITERAL_INTEGER}, + {SPIRV_PARSER_OPERAND_TYPE_LITERAL_INTEGER}, + {SPIRV_PARSER_OPERAND_TYPE_LITERAL_INTEGER}, +@@ -9949,12 +9614,13 @@ spirv_parser_opcode_info[] = + } + }, + { +- 0x172a, "OpFixedCosPiINTEL", 8, ++ 0x172a, "OpFixedCosPiINTEL", 9, + (struct spirv_parser_instruction_operand[]) + { + {SPIRV_PARSER_OPERAND_TYPE_ID_RESULT_TYPE}, + {SPIRV_PARSER_OPERAND_TYPE_ID_RESULT}, + {SPIRV_PARSER_OPERAND_TYPE_ID_REF}, ++ {SPIRV_PARSER_OPERAND_TYPE_ID_REF}, + {SPIRV_PARSER_OPERAND_TYPE_LITERAL_INTEGER}, + {SPIRV_PARSER_OPERAND_TYPE_LITERAL_INTEGER}, + {SPIRV_PARSER_OPERAND_TYPE_LITERAL_INTEGER}, +@@ -9963,12 +9629,13 @@ spirv_parser_opcode_info[] = + } + }, + { +- 0x172b, "OpFixedSinCosPiINTEL", 8, ++ 0x172b, "OpFixedSinCosPiINTEL", 9, + (struct spirv_parser_instruction_operand[]) + { + {SPIRV_PARSER_OPERAND_TYPE_ID_RESULT_TYPE}, + {SPIRV_PARSER_OPERAND_TYPE_ID_RESULT}, + {SPIRV_PARSER_OPERAND_TYPE_ID_REF}, ++ {SPIRV_PARSER_OPERAND_TYPE_ID_REF}, + {SPIRV_PARSER_OPERAND_TYPE_LITERAL_INTEGER}, + {SPIRV_PARSER_OPERAND_TYPE_LITERAL_INTEGER}, + {SPIRV_PARSER_OPERAND_TYPE_LITERAL_INTEGER}, +@@ -9977,12 +9644,13 @@ spirv_parser_opcode_info[] = + } + }, + { +- 0x172c, "OpFixedLogINTEL", 8, ++ 0x172c, "OpFixedLogINTEL", 9, + (struct spirv_parser_instruction_operand[]) + { + {SPIRV_PARSER_OPERAND_TYPE_ID_RESULT_TYPE}, + {SPIRV_PARSER_OPERAND_TYPE_ID_RESULT}, + {SPIRV_PARSER_OPERAND_TYPE_ID_REF}, ++ {SPIRV_PARSER_OPERAND_TYPE_ID_REF}, + {SPIRV_PARSER_OPERAND_TYPE_LITERAL_INTEGER}, + {SPIRV_PARSER_OPERAND_TYPE_LITERAL_INTEGER}, + {SPIRV_PARSER_OPERAND_TYPE_LITERAL_INTEGER}, +@@ -9991,12 +9659,13 @@ spirv_parser_opcode_info[] = + } + }, + { +- 0x172d, "OpFixedExpINTEL", 8, ++ 0x172d, "OpFixedExpINTEL", 9, + (struct spirv_parser_instruction_operand[]) + { + {SPIRV_PARSER_OPERAND_TYPE_ID_RESULT_TYPE}, + {SPIRV_PARSER_OPERAND_TYPE_ID_RESULT}, + {SPIRV_PARSER_OPERAND_TYPE_ID_REF}, ++ {SPIRV_PARSER_OPERAND_TYPE_ID_REF}, + {SPIRV_PARSER_OPERAND_TYPE_LITERAL_INTEGER}, + {SPIRV_PARSER_OPERAND_TYPE_LITERAL_INTEGER}, + {SPIRV_PARSER_OPERAND_TYPE_LITERAL_INTEGER}, +@@ -10043,12 +9712,13 @@ spirv_parser_opcode_info[] = + } + }, + { +- 0x173d, "OpFPGARegINTEL", 3, ++ 0x173d, "OpFPGARegINTEL", 4, + (struct spirv_parser_instruction_operand[]) + { + {SPIRV_PARSER_OPERAND_TYPE_ID_RESULT_TYPE}, + {SPIRV_PARSER_OPERAND_TYPE_ID_RESULT}, + {SPIRV_PARSER_OPERAND_TYPE_ID_REF}, ++ {SPIRV_PARSER_OPERAND_TYPE_ID_REF}, + } + }, + { +@@ -10311,50 +9981,6 @@ spirv_parser_opcode_info[] = + {SPIRV_PARSER_OPERAND_TYPE_ID_REF}, + } + }, +- { +- 0x1813, "OpTaskSequenceCreateINTEL", 7, +- (struct spirv_parser_instruction_operand[]) +- { +- {SPIRV_PARSER_OPERAND_TYPE_ID_RESULT_TYPE}, +- {SPIRV_PARSER_OPERAND_TYPE_ID_RESULT}, +- {SPIRV_PARSER_OPERAND_TYPE_ID_REF}, +- {SPIRV_PARSER_OPERAND_TYPE_LITERAL_INTEGER}, +- {SPIRV_PARSER_OPERAND_TYPE_LITERAL_INTEGER}, +- {SPIRV_PARSER_OPERAND_TYPE_LITERAL_INTEGER}, +- {SPIRV_PARSER_OPERAND_TYPE_LITERAL_INTEGER}, +- } +- }, +- { +- 0x1814, "OpTaskSequenceAsyncINTEL", 2, +- (struct spirv_parser_instruction_operand[]) +- { +- {SPIRV_PARSER_OPERAND_TYPE_ID_REF}, +- {SPIRV_PARSER_OPERAND_TYPE_ID_REF, '*'}, +- } +- }, +- { +- 0x1815, "OpTaskSequenceGetINTEL", 3, +- (struct spirv_parser_instruction_operand[]) +- { +- {SPIRV_PARSER_OPERAND_TYPE_ID_RESULT_TYPE}, +- {SPIRV_PARSER_OPERAND_TYPE_ID_RESULT}, +- {SPIRV_PARSER_OPERAND_TYPE_ID_REF}, +- } +- }, +- { +- 0x1816, "OpTaskSequenceReleaseINTEL", 1, +- (struct spirv_parser_instruction_operand[]) +- { +- {SPIRV_PARSER_OPERAND_TYPE_ID_REF}, +- } +- }, +- { +- 0x1837, "OpTypeTaskSequenceINTEL", 1, +- (struct spirv_parser_instruction_operand[]) +- { +- {SPIRV_PARSER_OPERAND_TYPE_ID_RESULT}, +- } +- }, + { + 0x184d, "OpSubgroupBlockPrefetchINTEL", 3, + (struct spirv_parser_instruction_operand[]) +@@ -10364,110 +9990,6 @@ spirv_parser_opcode_info[] = + {SPIRV_PARSER_OPERAND_TYPE_MEMORY_ACCESS, '?'}, + } + }, +- { +- 0x1857, "OpSubgroup2DBlockLoadINTEL", 10, +- (struct spirv_parser_instruction_operand[]) +- { +- {SPIRV_PARSER_OPERAND_TYPE_ID_REF}, +- {SPIRV_PARSER_OPERAND_TYPE_ID_REF}, +- {SPIRV_PARSER_OPERAND_TYPE_ID_REF}, +- {SPIRV_PARSER_OPERAND_TYPE_ID_REF}, +- {SPIRV_PARSER_OPERAND_TYPE_ID_REF}, +- {SPIRV_PARSER_OPERAND_TYPE_ID_REF}, +- {SPIRV_PARSER_OPERAND_TYPE_ID_REF}, +- {SPIRV_PARSER_OPERAND_TYPE_ID_REF}, +- {SPIRV_PARSER_OPERAND_TYPE_ID_REF}, +- {SPIRV_PARSER_OPERAND_TYPE_ID_REF}, +- } +- }, +- { +- 0x1858, "OpSubgroup2DBlockLoadTransformINTEL", 10, +- (struct spirv_parser_instruction_operand[]) +- { +- {SPIRV_PARSER_OPERAND_TYPE_ID_REF}, +- {SPIRV_PARSER_OPERAND_TYPE_ID_REF}, +- {SPIRV_PARSER_OPERAND_TYPE_ID_REF}, +- {SPIRV_PARSER_OPERAND_TYPE_ID_REF}, +- {SPIRV_PARSER_OPERAND_TYPE_ID_REF}, +- {SPIRV_PARSER_OPERAND_TYPE_ID_REF}, +- {SPIRV_PARSER_OPERAND_TYPE_ID_REF}, +- {SPIRV_PARSER_OPERAND_TYPE_ID_REF}, +- {SPIRV_PARSER_OPERAND_TYPE_ID_REF}, +- {SPIRV_PARSER_OPERAND_TYPE_ID_REF}, +- } +- }, +- { +- 0x1859, "OpSubgroup2DBlockLoadTransposeINTEL", 10, +- (struct spirv_parser_instruction_operand[]) +- { +- {SPIRV_PARSER_OPERAND_TYPE_ID_REF}, +- {SPIRV_PARSER_OPERAND_TYPE_ID_REF}, +- {SPIRV_PARSER_OPERAND_TYPE_ID_REF}, +- {SPIRV_PARSER_OPERAND_TYPE_ID_REF}, +- {SPIRV_PARSER_OPERAND_TYPE_ID_REF}, +- {SPIRV_PARSER_OPERAND_TYPE_ID_REF}, +- {SPIRV_PARSER_OPERAND_TYPE_ID_REF}, +- {SPIRV_PARSER_OPERAND_TYPE_ID_REF}, +- {SPIRV_PARSER_OPERAND_TYPE_ID_REF}, +- {SPIRV_PARSER_OPERAND_TYPE_ID_REF}, +- } +- }, +- { +- 0x185a, "OpSubgroup2DBlockPrefetchINTEL", 9, +- (struct spirv_parser_instruction_operand[]) +- { +- {SPIRV_PARSER_OPERAND_TYPE_ID_REF}, +- {SPIRV_PARSER_OPERAND_TYPE_ID_REF}, +- {SPIRV_PARSER_OPERAND_TYPE_ID_REF}, +- {SPIRV_PARSER_OPERAND_TYPE_ID_REF}, +- {SPIRV_PARSER_OPERAND_TYPE_ID_REF}, +- {SPIRV_PARSER_OPERAND_TYPE_ID_REF}, +- {SPIRV_PARSER_OPERAND_TYPE_ID_REF}, +- {SPIRV_PARSER_OPERAND_TYPE_ID_REF}, +- {SPIRV_PARSER_OPERAND_TYPE_ID_REF}, +- } +- }, +- { +- 0x185b, "OpSubgroup2DBlockStoreINTEL", 10, +- (struct spirv_parser_instruction_operand[]) +- { +- {SPIRV_PARSER_OPERAND_TYPE_ID_REF}, +- {SPIRV_PARSER_OPERAND_TYPE_ID_REF}, +- {SPIRV_PARSER_OPERAND_TYPE_ID_REF}, +- {SPIRV_PARSER_OPERAND_TYPE_ID_REF}, +- {SPIRV_PARSER_OPERAND_TYPE_ID_REF}, +- {SPIRV_PARSER_OPERAND_TYPE_ID_REF}, +- {SPIRV_PARSER_OPERAND_TYPE_ID_REF}, +- {SPIRV_PARSER_OPERAND_TYPE_ID_REF}, +- {SPIRV_PARSER_OPERAND_TYPE_ID_REF}, +- {SPIRV_PARSER_OPERAND_TYPE_ID_REF}, +- } +- }, +- { +- 0x185d, "OpSubgroupMatrixMultiplyAccumulateINTEL", 7, +- (struct spirv_parser_instruction_operand[]) +- { +- {SPIRV_PARSER_OPERAND_TYPE_ID_RESULT_TYPE}, +- {SPIRV_PARSER_OPERAND_TYPE_ID_RESULT}, +- {SPIRV_PARSER_OPERAND_TYPE_ID_REF}, +- {SPIRV_PARSER_OPERAND_TYPE_ID_REF}, +- {SPIRV_PARSER_OPERAND_TYPE_ID_REF}, +- {SPIRV_PARSER_OPERAND_TYPE_ID_REF}, +- {SPIRV_PARSER_OPERAND_TYPE_MATRIX_MULTIPLY_ACCUMULATE_OPERANDS, '?'}, +- } +- }, +- { +- 0x1862, "OpBitwiseFunctionINTEL", 6, +- (struct spirv_parser_instruction_operand[]) +- { +- {SPIRV_PARSER_OPERAND_TYPE_ID_RESULT_TYPE}, +- {SPIRV_PARSER_OPERAND_TYPE_ID_RESULT}, +- {SPIRV_PARSER_OPERAND_TYPE_ID_REF}, +- {SPIRV_PARSER_OPERAND_TYPE_ID_REF}, +- {SPIRV_PARSER_OPERAND_TYPE_ID_REF}, +- {SPIRV_PARSER_OPERAND_TYPE_ID_REF}, +- } +- }, + { + 0x1901, "OpGroupIMulKHR", 5, + (struct spirv_parser_instruction_operand[]) +@@ -10556,15 +10078,6 @@ spirv_parser_opcode_info[] = + {SPIRV_PARSER_OPERAND_TYPE_ID_REF}, + } + }, +- { +- 0x191a, "OpRoundFToTF32INTEL", 3, +- (struct spirv_parser_instruction_operand[]) +- { +- {SPIRV_PARSER_OPERAND_TYPE_ID_RESULT_TYPE}, +- {SPIRV_PARSER_OPERAND_TYPE_ID_RESULT}, +- {SPIRV_PARSER_OPERAND_TYPE_ID_REF}, +- } +- }, + { + 0x191c, "OpMaskedGatherINTEL", 6, + (struct spirv_parser_instruction_operand[]) +diff --git a/libs/vkd3d/include/private/vkd3d_common.h b/libs/vkd3d/include/private/vkd3d_common.h +index 0501e6a06c2..8b63acf68e1 100644 +--- a/libs/vkd3d/include/private/vkd3d_common.h ++++ b/libs/vkd3d/include/private/vkd3d_common.h +@@ -38,6 +38,8 @@ + #include + #endif + ++#define VKD3D_SHADER_API_VERSION_CURRENT VKD3D_SHADER_API_VERSION_1_17 ++ + #ifndef ARRAY_SIZE + # define ARRAY_SIZE(x) (sizeof(x) / sizeof(*(x))) + #endif +diff --git a/libs/vkd3d/libs/vkd3d-shader/dxil.c b/libs/vkd3d/libs/vkd3d-shader/dxil.c +index 6a12dec14bf..172204f2226 100644 +--- a/libs/vkd3d/libs/vkd3d-shader/dxil.c ++++ b/libs/vkd3d/libs/vkd3d-shader/dxil.c +@@ -3665,14 +3665,15 @@ static struct vkd3d_shader_instruction *sm6_parser_require_space(struct sm6_pars + return &instructions->elements[instructions->count]; + } + +-/* Space should be reserved before calling this. It is intended to require no checking of the returned pointer. */ + static struct vkd3d_shader_instruction *sm6_parser_add_instruction(struct sm6_parser *sm6, +- enum vkd3d_shader_opcode handler_idx) ++ enum vkd3d_shader_opcode op) + { +- struct vkd3d_shader_instruction *ins = sm6_parser_require_space(sm6, 1); +- VKD3D_ASSERT(ins); +- vsir_instruction_init(ins, &sm6->p.location, handler_idx); +- ++sm6->program->instructions.count; ++ struct vkd3d_shader_instruction *ins; ++ ++ if (!(ins = vsir_program_append(sm6->program))) ++ return NULL; ++ vsir_instruction_init(ins, &sm6->p.location, op); ++ + return ins; + } + +@@ -8589,7 +8590,8 @@ static void sm6_parser_emit_label(struct sm6_parser *sm6, unsigned int label_id) + static enum vkd3d_result sm6_function_emit_blocks(const struct sm6_function *function, struct sm6_parser *sm6) + { + struct vsir_program *program = sm6->program; +- unsigned int i; ++ struct vkd3d_shader_instruction *ins; ++ unsigned int i, j; + + program->block_count = function->block_count; + +@@ -8607,10 +8609,11 @@ static enum vkd3d_result sm6_function_emit_blocks(const struct sm6_function *fun + sm6_parser_emit_label(sm6, block->id); + sm6_block_emit_phi(block, sm6); + +- memcpy(&program->instructions.elements[program->instructions.count], block->instructions, +- block->instruction_count * sizeof(*block->instructions)); +- program->instructions.count += block->instruction_count; +- ++ for (j = 0; j < block->instruction_count; ++j) ++ { ++ ins = vsir_program_append(program); ++ *ins = block->instructions[j]; ++ } + sm6_block_emit_terminator(block, sm6); + } + +@@ -9512,8 +9515,8 @@ static enum vkd3d_result sm6_parser_descriptor_type_init(struct sm6_parser *sm6, + struct vkd3d_shader_instruction *ins; + const struct sm6_metadata_node *node; + const struct sm6_metadata_value *m; ++ enum vkd3d_result ret = VKD3D_OK; + struct sm6_descriptor_info *d; +- enum vkd3d_result ret; + unsigned int i; + + for (i = 0; i < descriptor_node->operand_count; ++i) +@@ -9562,9 +9565,10 @@ static enum vkd3d_result sm6_parser_descriptor_type_init(struct sm6_parser *sm6, + return VKD3D_ERROR_INVALID_SHADER; + } + +- if (!(ins = sm6_parser_require_space(sm6, 1))) ++ if (!(ins = sm6_parser_add_instruction(sm6, VSIR_OP_NOP))) + { +- ERR("Failed to allocate instruction.\n"); ++ vkd3d_shader_parser_error(&sm6->p, VKD3D_SHADER_ERROR_DXIL_OUT_OF_MEMORY, ++ "Out of memory emitting shader instructions."); + return VKD3D_ERROR_OUT_OF_MEMORY; + } + +@@ -9572,32 +9576,34 @@ static enum vkd3d_result sm6_parser_descriptor_type_init(struct sm6_parser *sm6, + { + case VKD3D_SHADER_DESCRIPTOR_TYPE_CBV: + if ((ret = sm6_parser_resources_load_cbv(sm6, node, d, ins)) < 0) +- return ret; ++ goto done; + break; + case VKD3D_SHADER_DESCRIPTOR_TYPE_SRV: + if ((ret = sm6_parser_resources_load_srv(sm6, node, d, ins)) < 0) +- return ret; ++ goto done; + break; + case VKD3D_SHADER_DESCRIPTOR_TYPE_UAV: + if ((ret = sm6_parser_resources_load_uav(sm6, node, d, ins)) < 0) +- return ret; ++ goto done; + break; + case VKD3D_SHADER_DESCRIPTOR_TYPE_SAMPLER: + if ((ret = sm6_parser_resources_load_sampler(sm6, node, d, ins)) < 0) +- return ret; ++ goto done; + break; + default: +- FIXME("Unsupported descriptor type %u.\n", type); + vkd3d_shader_parser_error(&sm6->p, VKD3D_SHADER_ERROR_DXIL_INVALID_RESOURCES, +- "Resource descriptor type %u is unsupported.", type); +- return VKD3D_ERROR_INVALID_SHADER; ++ "Resource descriptor type %#x is unsupported.", type); ++ ret = VKD3D_ERROR_INVALID_SHADER; ++ goto done; + } + + ++sm6->descriptor_count; +- ++sm6->program->instructions.count; + } + +- return VKD3D_OK; ++done: ++ if (ret < 0) ++ vsir_instruction_init(ins, &ins->location, VSIR_OP_NOP); ++ return ret; + } + + static enum vkd3d_result sm6_parser_resources_init(struct sm6_parser *sm6) +diff --git a/libs/vkd3d/libs/vkd3d-shader/fx.c b/libs/vkd3d/libs/vkd3d-shader/fx.c +index 676c501bb08..a14346a45d2 100644 +--- a/libs/vkd3d/libs/vkd3d-shader/fx.c ++++ b/libs/vkd3d/libs/vkd3d-shader/fx.c +@@ -4205,7 +4205,7 @@ static void fx_parse_shader_blob(struct fx_parser *parser, enum vkd3d_shader_sou + + static const struct vkd3d_shader_compile_option options[] = + { +- {VKD3D_SHADER_COMPILE_OPTION_API_VERSION, VKD3D_SHADER_API_VERSION_1_17}, ++ {VKD3D_SHADER_COMPILE_OPTION_API_VERSION, VKD3D_SHADER_API_VERSION_CURRENT}, + }; + + info.type = VKD3D_SHADER_STRUCTURE_TYPE_COMPILE_INFO; +diff --git a/libs/vkd3d/libs/vkd3d-shader/glsl.c b/libs/vkd3d/libs/vkd3d-shader/glsl.c +index acc30b998f6..7325661ea7b 100644 +--- a/libs/vkd3d/libs/vkd3d-shader/glsl.c ++++ b/libs/vkd3d/libs/vkd3d-shader/glsl.c +@@ -792,7 +792,7 @@ static void shader_glsl_print_texel_offset(struct vkd3d_string_buffer *buffer, s + + static void shader_glsl_ld(struct vkd3d_glsl_generator *gen, const struct vkd3d_shader_instruction *ins) + { +- unsigned int resource_id, resource_idx, resource_space, sample_count; ++ unsigned int coord_size, resource_id, resource_idx, resource_space, sample_count; + const struct glsl_resource_type_info *resource_type_info; + const struct vkd3d_shader_descriptor_info1 *d; + enum vkd3d_shader_resource_type resource_type; +@@ -800,11 +800,9 @@ static void shader_glsl_ld(struct vkd3d_glsl_generator *gen, const struct vkd3d_ + enum vsir_data_type data_type; + struct glsl_src coord; + struct glsl_dst dst; +- uint32_t coord_mask; ++ bool array, offset; + +- if (vkd3d_shader_instruction_has_texel_offset(ins)) +- vkd3d_glsl_compiler_error(gen, VKD3D_SHADER_ERROR_GLSL_INTERNAL, +- "Internal compiler error: Unhandled texel fetch offset."); ++ offset = vkd3d_shader_instruction_has_texel_offset(ins); + + if (ins->src[1].reg.idx[0].rel_addr || ins->src[1].reg.idx[1].rel_addr) + vkd3d_glsl_compiler_error(gen, VKD3D_SHADER_ERROR_GLSL_UNSUPPORTED, +@@ -831,20 +829,22 @@ static void shader_glsl_ld(struct vkd3d_glsl_generator *gen, const struct vkd3d_ + + if ((resource_type_info = shader_glsl_get_resource_type_info(resource_type))) + { +- coord_mask = vkd3d_write_mask_from_component_count(resource_type_info->coord_size); ++ coord_size = resource_type_info->coord_size; ++ array = resource_type_info->array; + } + else + { + vkd3d_glsl_compiler_error(gen, VKD3D_SHADER_ERROR_GLSL_INTERNAL, + "Internal compiler error: Unhandled resource type %#x.", resource_type); +- coord_mask = vkd3d_write_mask_from_component_count(2); ++ coord_size = 2; ++ array = false; + } + + glsl_dst_init(&dst, gen, ins, &ins->dst[0]); +- glsl_src_init(&coord, gen, &ins->src[0], coord_mask); ++ glsl_src_init(&coord, gen, &ins->src[0], vkd3d_write_mask_from_component_count(coord_size)); + fetch = vkd3d_string_buffer_get(&gen->string_buffers); + +- vkd3d_string_buffer_printf(fetch, "texelFetch("); ++ vkd3d_string_buffer_printf(fetch, "texelFetch%s(", offset ? "Offset" : ""); + shader_glsl_print_combined_sampler_name(fetch, gen, resource_idx, + resource_space, VKD3D_SHADER_DUMMY_SAMPLER_INDEX, 0); + vkd3d_string_buffer_printf(fetch, ", %s", coord.str->buffer); +@@ -860,6 +860,11 @@ static void shader_glsl_ld(struct vkd3d_glsl_generator *gen, const struct vkd3d_ + else + shader_glsl_print_src(fetch, gen, &ins->src[2], VKD3DSP_WRITEMASK_0, ins->src[2].reg.data_type); + } ++ if (offset) ++ { ++ vkd3d_string_buffer_printf(fetch, ", "); ++ shader_glsl_print_texel_offset(fetch, gen, coord_size - array, &ins->texel_offset); ++ } + vkd3d_string_buffer_printf(fetch, ")"); + shader_glsl_print_swizzle(fetch, ins->src[1].swizzle, ins->dst[0].write_mask); + +@@ -1475,6 +1480,9 @@ static void vkd3d_glsl_handle_instruction(struct vkd3d_glsl_generator *gen, + case VSIR_OP_CONTINUE: + shader_glsl_continue(gen); + break; ++ case VSIR_OP_COS: ++ shader_glsl_intrinsic(gen, ins, "cos"); ++ break; + case VSIR_OP_DCL_INDEXABLE_TEMP: + shader_glsl_dcl_indexable_temp(gen, ins); + break; +@@ -1495,6 +1503,12 @@ static void vkd3d_glsl_handle_instruction(struct vkd3d_glsl_generator *gen, + case VSIR_OP_DP4: + shader_glsl_dot(gen, ins, VKD3DSP_WRITEMASK_ALL); + break; ++ case VSIR_OP_DSX: ++ shader_glsl_intrinsic(gen, ins, "dFdx"); ++ break; ++ case VSIR_OP_DSY: ++ shader_glsl_intrinsic(gen, ins, "dFdy"); ++ break; + case VSIR_OP_ELSE: + shader_glsl_else(gen, ins); + break; +@@ -1621,6 +1635,9 @@ static void vkd3d_glsl_handle_instruction(struct vkd3d_glsl_generator *gen, + case VSIR_OP_RSQ: + shader_glsl_intrinsic(gen, ins, "inversesqrt"); + break; ++ case VSIR_OP_SIN: ++ shader_glsl_intrinsic(gen, ins, "sin"); ++ break; + case VSIR_OP_SQRT: + shader_glsl_intrinsic(gen, ins, "sqrt"); + break; +@@ -1630,6 +1647,9 @@ static void vkd3d_glsl_handle_instruction(struct vkd3d_glsl_generator *gen, + case VSIR_OP_SWITCH: + shader_glsl_switch(gen, ins); + break; ++ case VSIR_OP_UDIV_SIMPLE: ++ shader_glsl_binop(gen, ins, "/"); ++ break; + case VSIR_OP_XOR: + shader_glsl_binop(gen, ins, "^"); + break; +diff --git a/libs/vkd3d/libs/vkd3d-shader/ir.c b/libs/vkd3d/libs/vkd3d-shader/ir.c +index fef186ac34b..396562e65e4 100644 +--- a/libs/vkd3d/libs/vkd3d-shader/ir.c ++++ b/libs/vkd3d/libs/vkd3d-shader/ir.c +@@ -27,6 +27,22 @@ struct vsir_transformation_context + uint64_t config_flags; + const struct vkd3d_shader_compile_info *compile_info; + struct vkd3d_shader_message_context *message_context; ++ struct vkd3d_shader_location null_location; ++}; ++ ++static void vsir_transformation_context_init(struct vsir_transformation_context *ctx, ++ struct vsir_program *program, uint64_t config_flags, const struct vkd3d_shader_compile_info *compile_info, ++ struct vkd3d_shader_message_context *message_context) ++{ ++ *ctx = (struct vsir_transformation_context) ++ { ++ .result = VKD3D_OK, ++ .program = program, ++ .config_flags = config_flags, ++ .compile_info = compile_info, ++ .message_context = message_context, ++ .null_location = {.source_name = compile_info->source_name}, ++ }; + }; + + const char *vsir_opcode_get_name(enum vkd3d_shader_opcode op, const char *error) +@@ -1814,16 +1830,19 @@ static enum vkd3d_result vsir_program_ensure_ret(struct vsir_program *program, + struct vsir_transformation_context *ctx) + { + struct vsir_program_iterator it = vsir_program_iterator(&program->instructions); +- static const struct vkd3d_shader_location no_loc; + struct vkd3d_shader_instruction *ins; ++ struct vkd3d_shader_location loc; + +- ins = vsir_program_iterator_tail(&it); +- if (ins && ins->opcode == VSIR_OP_RET) ++ if (!(ins = vsir_program_iterator_tail(&it))) ++ loc = ctx->null_location; ++ else if (ins->opcode == VSIR_OP_RET) + return VKD3D_OK; ++ else ++ loc = ins->location; + + if (!(ins = vsir_program_append(program))) + return VKD3D_ERROR_OUT_OF_MEMORY; +- vsir_instruction_init(ins, &no_loc, VSIR_OP_RET); ++ vsir_instruction_init(ins, &loc, VSIR_OP_RET); + + return VKD3D_OK; + } +@@ -1914,7 +1933,7 @@ static enum vkd3d_result vsir_program_ensure_diffuse(struct vsir_program *progra + struct vsir_transformation_context *ctx) + { + struct vsir_program_iterator it = vsir_program_iterator(&program->instructions); +- static const struct vkd3d_shader_location no_loc; ++ struct vkd3d_shader_location loc = ctx->null_location; + struct vkd3d_shader_instruction *ins; + unsigned int i; + +@@ -1928,15 +1947,16 @@ static enum vkd3d_result vsir_program_ensure_diffuse(struct vsir_program *progra + for (ins = vsir_program_iterator_head(&it); ins; ins = vsir_program_iterator_next(&it)) + { + if (!vsir_instruction_is_dcl(ins) && ins->opcode != VSIR_OP_LABEL && ins->opcode != VSIR_OP_NOP) ++ { ++ loc = ins->location; + break; ++ } + } + +- vsir_program_iterator_prev(&it); +- if (!vsir_program_iterator_insert_after(&it, 1)) ++ if (!(ins = vsir_program_iterator_insert_before_and_move(&it, 1))) + return VKD3D_ERROR_OUT_OF_MEMORY; +- ins = vsir_program_iterator_next(&it); + +- vsir_instruction_init_with_params(program, ins, &no_loc, VSIR_OP_MOV, 1, 1); ++ vsir_instruction_init_with_params(program, ins, &loc, VSIR_OP_MOV, 1, 1); + vsir_dst_param_init(&ins->dst[0], VKD3DSPR_ATTROUT, VSIR_DATA_F32, 1); + ins->dst[0].reg.idx[0].offset = 0; + ins->dst[0].reg.dimension = VSIR_DIMENSION_VEC4; +@@ -2153,10 +2173,8 @@ static enum vkd3d_result vsir_program_remap_output_signature(struct vsir_program + continue; + + loc = ins->location; +- vsir_program_iterator_prev(&it); +- if (!vsir_program_iterator_insert_after(&it, uninit_varying_count)) ++ if (!(ins = vsir_program_iterator_insert_before_and_move(&it, uninit_varying_count))) + return VKD3D_ERROR_OUT_OF_MEMORY; +- ins = vsir_program_iterator_next(&it); + + for (unsigned int j = signature->element_count - uninit_varying_count; j < signature->element_count; ++j) + { +@@ -4224,9 +4242,11 @@ static enum vkd3d_result vsir_program_lower_switch_to_selection_ladder(struct vs + struct vsir_transformation_context *ctx) + { + unsigned int block_count = program->block_count, ssa_count = program->ssa_count, current_label = 0, if_label; +- size_t ins_capacity = 0, ins_count = 0, i, map_capacity = 0, map_count = 0; ++ struct vsir_program_iterator it = vsir_program_iterator(&program->instructions); ++ size_t ins_capacity = 0, ins_count = 0, map_capacity = 0, map_count = 0; + struct vkd3d_shader_instruction *instructions = NULL; + struct lower_switch_to_if_ladder_block_mapping *block_map = NULL; ++ struct vkd3d_shader_instruction *ins; + + VKD3D_ASSERT(program->cf_type == VSIR_CF_BLOCKS); + +@@ -4236,9 +4256,8 @@ static enum vkd3d_result vsir_program_lower_switch_to_selection_ladder(struct vs + /* First subpass: convert SWITCH_MONOLITHIC instructions to + * selection ladders, keeping a map between blocks before and + * after the subpass. */ +- for (i = 0; i < program->instructions.count; ++i) ++ for (ins = vsir_program_iterator_head(&it); ins; ins = vsir_program_iterator_next(&it)) + { +- struct vkd3d_shader_instruction *ins = &program->instructions.elements[i]; + unsigned int case_count, j, default_label; + + switch (ins->opcode) +@@ -6872,7 +6891,6 @@ static enum vkd3d_result vsir_program_materialize_undominated_ssas_to_temps(stru + static bool use_flat_interpolation(const struct vsir_program *program, + struct vkd3d_shader_message_context *message_context, bool *flat) + { +- static const struct vkd3d_shader_location no_loc; + const struct vkd3d_shader_parameter1 *parameter; + + *flat = false; +@@ -6882,13 +6900,13 @@ static bool use_flat_interpolation(const struct vsir_program *program, + + if (parameter->type != VKD3D_SHADER_PARAMETER_TYPE_IMMEDIATE_CONSTANT) + { +- vkd3d_shader_error(message_context, &no_loc, VKD3D_SHADER_ERROR_VSIR_NOT_IMPLEMENTED, ++ vkd3d_shader_error(message_context, NULL, VKD3D_SHADER_ERROR_VSIR_NOT_IMPLEMENTED, + "Unsupported flat interpolation parameter type %#x.", parameter->type); + return false; + } + if (parameter->data_type != VKD3D_SHADER_PARAMETER_DATA_TYPE_UINT32) + { +- vkd3d_shader_error(message_context, &no_loc, VKD3D_SHADER_ERROR_VSIR_INVALID_DATA_TYPE, ++ vkd3d_shader_error(message_context, NULL, VKD3D_SHADER_ERROR_VSIR_INVALID_DATA_TYPE, + "Invalid flat interpolation parameter data type %#x.", parameter->data_type); + return false; + } +@@ -6929,7 +6947,6 @@ static enum vkd3d_result insert_alpha_test_before_ret(struct vsir_program *progr + uint32_t colour_temp, struct vkd3d_shader_message_context *message_context) + { + struct vkd3d_shader_location loc = vsir_program_iterator_current(it)->location; +- static const struct vkd3d_shader_location no_loc; + struct vkd3d_shader_instruction *ins; + + static const struct +@@ -6950,10 +6967,8 @@ static enum vkd3d_result insert_alpha_test_before_ret(struct vsir_program *progr + + if (compare_func == VKD3D_SHADER_COMPARISON_FUNC_NEVER) + { +- vsir_program_iterator_prev(it); +- if (!vsir_program_iterator_insert_after(it, 1)) ++ if (!(ins = vsir_program_iterator_insert_before_and_move(it, 1))) + return VKD3D_ERROR_OUT_OF_MEMORY; +- ins = vsir_program_iterator_next(it); + + vsir_instruction_init_with_params(program, ins, &loc, VSIR_OP_DISCARD, 0, 1); + ins->flags = VKD3D_SHADER_CONDITIONAL_OP_Z; +@@ -6963,10 +6978,8 @@ static enum vkd3d_result insert_alpha_test_before_ret(struct vsir_program *progr + return VKD3D_OK; + } + +- vsir_program_iterator_prev(it); +- if (!vsir_program_iterator_insert_after(it, 3)) ++ if (!(ins = vsir_program_iterator_insert_before_and_move(it, 3))) + return VKD3D_ERROR_OUT_OF_MEMORY; +- ins = vsir_program_iterator_next(it); + + switch (ref->data_type) + { +@@ -6985,7 +6998,7 @@ static enum vkd3d_result insert_alpha_test_before_ret(struct vsir_program *progr + break; + + case VKD3D_SHADER_PARAMETER_DATA_TYPE_FLOAT32_VEC4: +- vkd3d_shader_error(message_context, &no_loc, VKD3D_SHADER_ERROR_VSIR_INVALID_PARAMETER, ++ vkd3d_shader_error(message_context, NULL, VKD3D_SHADER_ERROR_VSIR_INVALID_PARAMETER, + "Alpha test reference data type must be a single component."); + return VKD3D_ERROR_INVALID_ARGUMENT; + +@@ -7027,7 +7040,6 @@ static enum vkd3d_result vsir_program_insert_alpha_test(struct vsir_program *pro + struct vkd3d_shader_message_context *message_context = ctx->message_context; + const struct vkd3d_shader_parameter1 *func = NULL, *ref = NULL; + uint32_t colour_signature_idx, colour_temp = ~0u; +- static const struct vkd3d_shader_location no_loc; + enum vkd3d_shader_comparison_func compare_func; + struct vkd3d_shader_instruction *ins; + int ret; +@@ -7045,13 +7057,13 @@ static enum vkd3d_result vsir_program_insert_alpha_test(struct vsir_program *pro + + if (func->type != VKD3D_SHADER_PARAMETER_TYPE_IMMEDIATE_CONSTANT) + { +- vkd3d_shader_error(message_context, &no_loc, VKD3D_SHADER_ERROR_VSIR_NOT_IMPLEMENTED, ++ vkd3d_shader_error(message_context, NULL, VKD3D_SHADER_ERROR_VSIR_NOT_IMPLEMENTED, + "Unsupported alpha test function parameter type %#x.", func->type); + return VKD3D_ERROR_NOT_IMPLEMENTED; + } + if (func->data_type != VKD3D_SHADER_PARAMETER_DATA_TYPE_UINT32) + { +- vkd3d_shader_error(message_context, &no_loc, VKD3D_SHADER_ERROR_VSIR_INVALID_DATA_TYPE, ++ vkd3d_shader_error(message_context, NULL, VKD3D_SHADER_ERROR_VSIR_INVALID_DATA_TYPE, + "Invalid alpha test function parameter data type %#x.", func->data_type); + return VKD3D_ERROR_INVALID_ARGUMENT; + } +@@ -7108,10 +7120,8 @@ static enum vkd3d_result insert_clip_planes_before_ret(struct vsir_program *prog + struct vkd3d_shader_instruction *ins; + unsigned int output_idx = 0; + +- vsir_program_iterator_prev(it); +- if (!vsir_program_iterator_insert_after(it, vkd3d_popcount(mask) + 1)) ++ if (!(ins = vsir_program_iterator_insert_before_and_move(it, vkd3d_popcount(mask) + 1))) + return VKD3D_ERROR_OUT_OF_MEMORY; +- ins = vsir_program_iterator_next(it); + + for (unsigned int i = 0; i < 8; ++i) + { +@@ -7279,10 +7289,8 @@ static enum vkd3d_result insert_point_size_before_ret(struct vsir_program *progr + const struct vkd3d_shader_location loc = vsir_program_iterator_current(it)->location; + struct vkd3d_shader_instruction *ins; + +- vsir_program_iterator_prev(it); +- if (!vsir_program_iterator_insert_after(it, 1)) ++ if (!(ins = vsir_program_iterator_insert_before_and_move(it, 1))) + return VKD3D_ERROR_OUT_OF_MEMORY; +- ins = vsir_program_iterator_next(it); + + vsir_instruction_init_with_params(program, ins, &loc, VSIR_OP_MOV, 1, 1); + vsir_dst_param_init(&ins->dst[0], VKD3DSPR_RASTOUT, VSIR_DATA_F32, 1); +@@ -7604,10 +7612,8 @@ static enum vkd3d_result vsir_program_insert_point_coord(struct vsir_program *pr + + if (used_texcoord) + { +- vsir_program_iterator_prev(&it); +- if (!vsir_program_iterator_insert_after(&it, 2)) ++ if (!(ins = vsir_program_iterator_insert_before_and_move(&it, 2))) + return VKD3D_ERROR_OUT_OF_MEMORY; +- ins = vsir_program_iterator_next(&it); + + vsir_instruction_init_with_params(program, ins, &no_loc, VSIR_OP_MOV, 1, 1); + dst_param_init_temp_float4(&ins->dst[0], coord_temp); +@@ -7675,10 +7681,8 @@ static enum vkd3d_result insert_fragment_fog_before_ret(struct vsir_program *pro + * add sr0, FOG_END, -vFOG.x + * mul_sat srFACTOR, sr0, FOG_SCALE + */ +- vsir_program_iterator_prev(it); +- if (!vsir_program_iterator_insert_after(it, 4)) ++ if (!(ins = vsir_program_iterator_insert_before_and_move(it, 4))) + return VKD3D_ERROR_OUT_OF_MEMORY; +- ins = vsir_program_iterator_next(it); + + ssa_temp = program->ssa_count++; + +@@ -7707,10 +7711,8 @@ static enum vkd3d_result insert_fragment_fog_before_ret(struct vsir_program *pro + * mul sr0, FOG_SCALE, vFOG.x + * exp_sat srFACTOR, -sr0 + */ +- vsir_program_iterator_prev(it); +- if (!vsir_program_iterator_insert_after(it, 4)) ++ if (!(ins = vsir_program_iterator_insert_before_and_move(it, 4))) + return VKD3D_ERROR_OUT_OF_MEMORY; +- ins = vsir_program_iterator_next(it); + + ssa_temp = program->ssa_count++; + +@@ -7738,10 +7740,8 @@ static enum vkd3d_result insert_fragment_fog_before_ret(struct vsir_program *pro + * mul sr1, sr0, sr0 + * exp_sat srFACTOR, -sr1 + */ +- vsir_program_iterator_prev(it); +- if (!vsir_program_iterator_insert_after(it, 5)) ++ if (!(ins = vsir_program_iterator_insert_before_and_move(it, 5))) + return VKD3D_ERROR_OUT_OF_MEMORY; +- ins = vsir_program_iterator_next(it); + + ssa_temp = program->ssa_count++; + ssa_temp2 = program->ssa_count++; +@@ -7921,10 +7921,8 @@ static enum vkd3d_result insert_vertex_fog_before_ret(struct vsir_program *progr + const struct vkd3d_shader_location loc = ret->location; + struct vkd3d_shader_instruction *ins; + +- vsir_program_iterator_prev(it); +- if (!vsir_program_iterator_insert_after(it, 2)) ++ if (!(ins = vsir_program_iterator_insert_before_and_move(it, 2))) + return VKD3D_ERROR_OUT_OF_MEMORY; +- ins = vsir_program_iterator_next(it); + + /* Write the fog output. */ + vsir_instruction_init_with_params(program, ins, &loc, VSIR_OP_MOV, 1, 1); +@@ -8934,11 +8932,9 @@ enum vkd3d_result vsir_update_dcl_temps(struct vsir_program *program, + ins = vsir_program_iterator_head(&it); + location = ins->location; + +- vsir_program_iterator_prev(&it); +- if (!vsir_program_iterator_insert_after(&it, 1)) ++ if (!(ins = vsir_program_iterator_insert_before_and_move(&it, 1))) + return VKD3D_ERROR_OUT_OF_MEMORY; + +- ins = vsir_program_iterator_next(&it); + vsir_instruction_init(ins, &location, VSIR_OP_DCL_TEMPS); + ins->declaration.count = temp_count; + } +@@ -12103,14 +12099,9 @@ static void vsir_transform_( + enum vkd3d_result vsir_program_transform_early(struct vsir_program *program, uint64_t config_flags, + const struct vkd3d_shader_compile_info *compile_info, struct vkd3d_shader_message_context *message_context) + { +- struct vsir_transformation_context ctx = +- { +- .result = VKD3D_OK, +- .program = program, +- .config_flags = config_flags, +- .compile_info = compile_info, +- .message_context = message_context, +- }; ++ struct vsir_transformation_context ctx; ++ ++ vsir_transformation_context_init(&ctx, program, config_flags, compile_info, message_context); + + /* For vsir_program_ensure_diffuse(). */ + if (program->shader_version.major <= 2) +@@ -12128,15 +12119,9 @@ enum vkd3d_result vsir_program_transform_early(struct vsir_program *program, uin + enum vkd3d_result vsir_program_lower_d3dbc(struct vsir_program *program, uint64_t config_flags, + const struct vkd3d_shader_compile_info *compile_info, struct vkd3d_shader_message_context *message_context) + { +- struct vsir_transformation_context ctx = +- { +- .result = VKD3D_OK, +- .program = program, +- .config_flags = config_flags, +- .compile_info = compile_info, +- .message_context = message_context, +- }; ++ struct vsir_transformation_context ctx; + ++ vsir_transformation_context_init(&ctx, program, config_flags, compile_info, message_context); + vsir_transform(&ctx, vsir_program_lower_d3dbc_instructions); + if (program->shader_version.major == 1 && program->shader_version.type == VKD3D_SHADER_TYPE_PIXEL) + vsir_transform(&ctx, vsir_program_normalise_ps1_output); +@@ -12150,15 +12135,9 @@ enum vkd3d_result vsir_program_lower_d3dbc(struct vsir_program *program, uint64_ + enum vkd3d_result vsir_program_transform(struct vsir_program *program, uint64_t config_flags, + const struct vkd3d_shader_compile_info *compile_info, struct vkd3d_shader_message_context *message_context) + { +- struct vsir_transformation_context ctx = +- { +- .result = VKD3D_OK, +- .program = program, +- .config_flags = config_flags, +- .compile_info = compile_info, +- .message_context = message_context, +- }; ++ struct vsir_transformation_context ctx; + ++ vsir_transformation_context_init(&ctx, program, config_flags, compile_info, message_context); + vsir_transform(&ctx, vsir_program_lower_instructions); + + if (program->shader_version.major >= 6) +diff --git a/libs/vkd3d/libs/vkd3d-shader/msl.c b/libs/vkd3d/libs/vkd3d-shader/msl.c +index 88d1160d4e8..fc8d482e08a 100644 +--- a/libs/vkd3d/libs/vkd3d-shader/msl.c ++++ b/libs/vkd3d/libs/vkd3d-shader/msl.c +@@ -1996,6 +1996,7 @@ static void msl_generate_entrypoint_epilogue(struct msl_generator *gen) + static void msl_generate_entrypoint(struct msl_generator *gen) + { + enum vkd3d_shader_type type = gen->program->shader_version.type; ++ bool output = true; + + switch (type) + { +@@ -2007,13 +2008,21 @@ static void msl_generate_entrypoint(struct msl_generator *gen) + vkd3d_string_buffer_printf(gen->buffer, "[[early_fragment_tests]]\n"); + vkd3d_string_buffer_printf(gen->buffer, "fragment "); + break; ++ case VKD3D_SHADER_TYPE_COMPUTE: ++ vkd3d_string_buffer_printf(gen->buffer, "kernel "); ++ output = false; ++ break; + default: + msl_compiler_error(gen, VKD3D_SHADER_ERROR_MSL_INTERNAL, + "Internal compiler error: Unhandled shader type %#x.", type); + return; + } + +- vkd3d_string_buffer_printf(gen->buffer, "vkd3d_%s_out shader_entry(\n", gen->prefix); ++ if (output) ++ vkd3d_string_buffer_printf(gen->buffer, "vkd3d_%s_out ", gen->prefix); ++ else ++ vkd3d_string_buffer_printf(gen->buffer, "void "); ++ vkd3d_string_buffer_printf(gen->buffer, "shader_entry(\n"); + + if (gen->program->descriptors.descriptor_count) + { +@@ -2055,7 +2064,9 @@ static void msl_generate_entrypoint(struct msl_generator *gen) + + msl_generate_entrypoint_epilogue(gen); + +- vkd3d_string_buffer_printf(gen->buffer, " return output;\n}\n"); ++ if (output) ++ vkd3d_string_buffer_printf(gen->buffer, " return output;\n"); ++ vkd3d_string_buffer_printf(gen->buffer, "}\n"); + } + + static int msl_generator_generate(struct msl_generator *gen, struct vkd3d_shader_code *out) +diff --git a/libs/vkd3d/libs/vkd3d-shader/vkd3d_shader_private.h b/libs/vkd3d/libs/vkd3d-shader/vkd3d_shader_private.h +index b63c5785770..4102fe53e67 100644 +--- a/libs/vkd3d/libs/vkd3d-shader/vkd3d_shader_private.h ++++ b/libs/vkd3d/libs/vkd3d-shader/vkd3d_shader_private.h +@@ -1510,6 +1510,16 @@ static inline bool vsir_program_iterator_insert_after(struct vsir_program_iterat + return shader_instruction_array_insert_at(it->array, it->idx + 1, count); + } + ++static inline struct vkd3d_shader_instruction *vsir_program_iterator_insert_before_and_move( ++ struct vsir_program_iterator *it, size_t count) ++{ ++ VKD3D_ASSERT(it->idx != SIZE_MAX); ++ ++ if (!shader_instruction_array_insert_at(it->array, it->idx, count)) ++ return NULL; ++ return vsir_program_iterator_current(it); ++} ++ + enum vkd3d_shader_config_flags + { + VKD3D_SHADER_CONFIG_FLAG_FORCE_VALIDATION = 0x00000001, +diff --git a/libs/vkd3d/libs/vkd3d-utils/vkd3d_utils_main.c b/libs/vkd3d/libs/vkd3d-utils/vkd3d_utils_main.c +index f804c1f0c24..15c5b77c8df 100644 +--- a/libs/vkd3d/libs/vkd3d-utils/vkd3d_utils_main.c ++++ b/libs/vkd3d/libs/vkd3d-utils/vkd3d_utils_main.c +@@ -271,7 +271,7 @@ HRESULT WINAPI D3DCompile2VKD3D(const void *data, SIZE_T data_size, const char * + + option = &options[0]; + option->name = VKD3D_SHADER_COMPILE_OPTION_API_VERSION; +- option->value = VKD3D_SHADER_API_VERSION_1_17; ++ option->value = VKD3D_SHADER_API_VERSION_CURRENT; + + compile_info.type = VKD3D_SHADER_STRUCTURE_TYPE_COMPILE_INFO; + compile_info.next = &preprocess_info; +@@ -435,7 +435,7 @@ HRESULT WINAPI D3DPreprocess(const void *data, SIZE_T size, const char *filename + + static const struct vkd3d_shader_compile_option options[] = + { +- {VKD3D_SHADER_COMPILE_OPTION_API_VERSION, VKD3D_SHADER_API_VERSION_1_17}, ++ {VKD3D_SHADER_COMPILE_OPTION_API_VERSION, VKD3D_SHADER_API_VERSION_CURRENT}, + }; + + TRACE("data %p, size %"PRIuPTR", filename %s, macros %p, include %p, preprocessed_blob %p, messages_blob %p.\n", +@@ -981,7 +981,7 @@ HRESULT WINAPI D3DDisassemble(const void *data, SIZE_T data_size, + + static const struct vkd3d_shader_compile_option options[] = + { +- {VKD3D_SHADER_COMPILE_OPTION_API_VERSION, VKD3D_SHADER_API_VERSION_1_17}, ++ {VKD3D_SHADER_COMPILE_OPTION_API_VERSION, VKD3D_SHADER_API_VERSION_CURRENT}, + }; + + TRACE("data %p, data_size %"PRIuPTR", flags %#x, comments %p, blob %p.\n", +diff --git a/libs/vkd3d/libs/vkd3d/command.c b/libs/vkd3d/libs/vkd3d/command.c +index 074d8430585..d933e7ec463 100644 +--- a/libs/vkd3d/libs/vkd3d/command.c ++++ b/libs/vkd3d/libs/vkd3d/command.c +@@ -3049,7 +3049,7 @@ static void d3d12_command_list_update_descriptor_table(struct d3d12_command_list + + if (descriptor_count > range->vk_binding_count) + { +- ERR("Heap descriptor count %u exceeds maximum Vulkan count %u. Reducing to the Vulkan maximum.\n", ++ MESSAGE("Heap descriptor count %u exceeds maximum Vulkan count %u. Reducing to the Vulkan maximum.\n", + descriptor_count, range->vk_binding_count); + descriptor_count = range->vk_binding_count; + } +diff --git a/libs/vkd3d/libs/vkd3d/state.c b/libs/vkd3d/libs/vkd3d/state.c +index 6bbd6533b74..b6055a50a99 100644 +--- a/libs/vkd3d/libs/vkd3d/state.c ++++ b/libs/vkd3d/libs/vkd3d/state.c +@@ -2391,7 +2391,7 @@ static HRESULT create_shader_stage(struct d3d12_device *device, + + const struct vkd3d_shader_compile_option options[] = + { +- {VKD3D_SHADER_COMPILE_OPTION_API_VERSION, VKD3D_SHADER_API_VERSION_1_17}, ++ {VKD3D_SHADER_COMPILE_OPTION_API_VERSION, VKD3D_SHADER_API_VERSION_CURRENT}, + {VKD3D_SHADER_COMPILE_OPTION_TYPED_UAV, typed_uav_compile_option(device)}, + {VKD3D_SHADER_COMPILE_OPTION_WRITE_TESS_GEOM_POINT_SIZE, 0}, + {VKD3D_SHADER_COMPILE_OPTION_FEATURE, feature_flags_compile_option(device)}, +@@ -2456,7 +2456,7 @@ static int vkd3d_scan_dxbc(const struct d3d12_device *device, const D3D12_SHADER + + const struct vkd3d_shader_compile_option options[] = + { +- {VKD3D_SHADER_COMPILE_OPTION_API_VERSION, VKD3D_SHADER_API_VERSION_1_17}, ++ {VKD3D_SHADER_COMPILE_OPTION_API_VERSION, VKD3D_SHADER_API_VERSION_CURRENT}, + {VKD3D_SHADER_COMPILE_OPTION_TYPED_UAV, typed_uav_compile_option(device)}, + }; + +@@ -4135,7 +4135,7 @@ static int compile_hlsl_cs(const struct vkd3d_shader_code *hlsl, struct vkd3d_sh + + static const struct vkd3d_shader_compile_option options[] = + { +- {VKD3D_SHADER_COMPILE_OPTION_API_VERSION, VKD3D_SHADER_API_VERSION_1_17}, ++ {VKD3D_SHADER_COMPILE_OPTION_API_VERSION, VKD3D_SHADER_API_VERSION_CURRENT}, + }; + + info.type = VKD3D_SHADER_STRUCTURE_TYPE_COMPILE_INFO; +-- +2.50.1 +