vkd3d-shader/spirv: Parse the SPIR-V instruction schema.

This commit is contained in:
Giovanni Mascellani 2024-10-29 20:23:35 -05:00 committed by Henri Verbeet
parent 9b4f5dab77
commit ac2901d2cb
Notes: Henri Verbeet 2024-12-09 16:17:46 +01:00
Approved-by: Giovanni Mascellani (@giomasce)
Approved-by: Henri Verbeet (@hverbeet)
Merge-Request: https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/1239

View File

@ -286,7 +286,7 @@ static void spirv_parser_print_generator(struct spirv_parser *parser, uint32_t m
static enum vkd3d_result spirv_parser_read_header(struct spirv_parser *parser)
{
uint32_t magic, version, generator, bound;
uint32_t magic, version, generator, bound, schema;
unsigned int major, minor;
if (parser->pos > parser->size || parser->size - parser->pos < VKD3D_SPIRV_HEADER_SIZE)
@ -300,6 +300,7 @@ static enum vkd3d_result spirv_parser_read_header(struct spirv_parser *parser)
version = spirv_parser_read_u32(parser);
generator = spirv_parser_read_u32(parser);
bound = spirv_parser_read_u32(parser);
schema = spirv_parser_read_u32(parser);
if (magic != SpvMagicNumber)
{
@ -331,12 +332,20 @@ static enum vkd3d_result spirv_parser_read_header(struct spirv_parser *parser)
return VKD3D_ERROR_INVALID_SHADER;
}
if (schema)
{
spirv_parser_error(parser, VKD3D_SHADER_ERROR_SPV_NOT_IMPLEMENTED,
"Unable to handle instruction schema %#08x.", schema);
return VKD3D_ERROR_NOT_IMPLEMENTED;
}
if (parser->formatting & VKD3D_SHADER_COMPILE_OPTION_FORMATTING_HEADER)
{
spirv_parser_print_comment(parser, "SPIR-V");
spirv_parser_print_comment(parser, "Version: %u.%u", major, minor);
spirv_parser_print_generator(parser, generator);
spirv_parser_print_comment(parser, "Bound: %u", bound);
spirv_parser_print_comment(parser, "Schema: %u", schema);
}
return VKD3D_OK;