You've already forked wine-staging
mirror of
https://gitlab.winehq.org/wine/wine-staging.git
synced 2025-09-12 18:50:20 -07:00
1760 lines
72 KiB
Diff
1760 lines
72 KiB
Diff
From b62327e3e6fae6a2df820e0160b04c1c54dfb68a Mon Sep 17 00:00:00 2001
|
|
From: Alistair Leslie-Hughes <leslie_alistair@hotmail.com>
|
|
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 <intrin.h>
|
|
#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.51.0
|
|
|