Module: vkd3d Branch: master Commit: e17e481130e095315d57a3d8cc66cc98c4b3f244 URL: https://gitlab.winehq.org/wine/vkd3d/-/commit/e17e481130e095315d57a3d8cc66cc...
Author: Henri Verbeet hverbeet@codeweavers.com Date: Sat Feb 24 15:13:06 2024 +0100
vkd3d-shader/glsl: Call vkd3d_shader_normalise().
---
libs/vkd3d-shader/glsl.c | 6 +++++- libs/vkd3d-shader/ir.c | 3 ++- libs/vkd3d-shader/vkd3d_shader_main.c | 2 +- libs/vkd3d-shader/vkd3d_shader_private.h | 3 ++- 4 files changed, 10 insertions(+), 4 deletions(-)
diff --git a/libs/vkd3d-shader/glsl.c b/libs/vkd3d-shader/glsl.c index 3977852a..f1012d06 100644 --- a/libs/vkd3d-shader/glsl.c +++ b/libs/vkd3d-shader/glsl.c @@ -139,12 +139,16 @@ static void vkd3d_glsl_generator_init(struct vkd3d_glsl_generator *gen, gen->message_context = message_context; }
-int glsl_compile(struct vsir_program *program, struct vkd3d_shader_code *out, +int glsl_compile(struct vsir_program *program, uint64_t config_flags, + const struct vkd3d_shader_compile_info *compile_info, struct vkd3d_shader_code *out, struct vkd3d_shader_message_context *message_context) { struct vkd3d_glsl_generator generator; int ret;
+ if ((ret = vsir_program_normalise(program, config_flags, compile_info, message_context)) < 0) + return ret; + vkd3d_glsl_generator_init(&generator, program, message_context); ret = vkd3d_glsl_generator_generate(&generator, out); vkd3d_glsl_generator_cleanup(&generator); diff --git a/libs/vkd3d-shader/ir.c b/libs/vkd3d-shader/ir.c index 454a8927..eca18f4e 100644 --- a/libs/vkd3d-shader/ir.c +++ b/libs/vkd3d-shader/ir.c @@ -6012,7 +6012,8 @@ enum vkd3d_result vsir_program_normalise(struct vsir_program *program, uint64_t if ((result = vsir_program_normalise_combined_samplers(program, message_context)) < 0) return result;
- if ((result = vsir_program_flatten_control_flow_constructs(program, message_context)) < 0) + if (compile_info->target_type != VKD3D_SHADER_TARGET_GLSL + && (result = vsir_program_flatten_control_flow_constructs(program, message_context)) < 0) return result; }
diff --git a/libs/vkd3d-shader/vkd3d_shader_main.c b/libs/vkd3d-shader/vkd3d_shader_main.c index 12024306..43bf5f6f 100644 --- a/libs/vkd3d-shader/vkd3d_shader_main.c +++ b/libs/vkd3d-shader/vkd3d_shader_main.c @@ -1576,7 +1576,7 @@ static int vkd3d_shader_parser_compile(struct vkd3d_shader_parser *parser, case VKD3D_SHADER_TARGET_GLSL: if ((ret = scan_with_parser(&scan_info, message_context, &scan_descriptor_info, parser)) < 0) return ret; - ret = glsl_compile(program, out, message_context); + ret = glsl_compile(program, parser->config_flags, compile_info, out, message_context); vkd3d_shader_free_scan_descriptor_info1(&scan_descriptor_info); break;
diff --git a/libs/vkd3d-shader/vkd3d_shader_private.h b/libs/vkd3d-shader/vkd3d_shader_private.h index a20a3c5f..cfd3de2c 100644 --- a/libs/vkd3d-shader/vkd3d_shader_private.h +++ b/libs/vkd3d-shader/vkd3d_shader_private.h @@ -1538,7 +1538,8 @@ int shader_extract_from_dxbc(const struct vkd3d_shader_code *dxbc, int shader_parse_input_signature(const struct vkd3d_shader_code *dxbc, struct vkd3d_shader_message_context *message_context, struct shader_signature *signature);
-int glsl_compile(struct vsir_program *program, struct vkd3d_shader_code *out, +int glsl_compile(struct vsir_program *program, uint64_t config_flags, + const struct vkd3d_shader_compile_info *compile_info, struct vkd3d_shader_code *out, struct vkd3d_shader_message_context *message_context);
#define SPIRV_MAX_SRC_COUNT 6