diff --git a/libs/vkd3d-shader/spirv.c b/libs/vkd3d-shader/spirv.c index 431b8544..18f8998f 100644 --- a/libs/vkd3d-shader/spirv.c +++ b/libs/vkd3d-shader/spirv.c @@ -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;