Module: vkd3d Branch: master Commit: 9b0d304f8fe4e6f0d065e4561af9e372e1643c2d URL: https://gitlab.winehq.org/wine/vkd3d/-/commit/9b0d304f8fe4e6f0d065e4561af9e3...
Author: Henri Verbeet hverbeet@codeweavers.com Date: Fri Nov 17 18:36:33 2023 +0100
vkd3d-shader/glsl: Introduce glsl_compile().
---
libs/vkd3d-shader/glsl.c | 44 ++++++++++++++++++-------------- libs/vkd3d-shader/vkd3d_shader_main.c | 11 +------- libs/vkd3d-shader/vkd3d_shader_private.h | 7 +---- 3 files changed, 27 insertions(+), 35 deletions(-)
diff --git a/libs/vkd3d-shader/glsl.c b/libs/vkd3d-shader/glsl.c index e020bf3e..7c630d18 100644 --- a/libs/vkd3d-shader/glsl.c +++ b/libs/vkd3d-shader/glsl.c @@ -27,21 +27,6 @@ struct vkd3d_glsl_generator bool failed; };
-struct vkd3d_glsl_generator *vkd3d_glsl_generator_create(const struct vkd3d_shader_version *version, - struct vkd3d_shader_message_context *message_context) -{ - struct vkd3d_glsl_generator *generator; - - if (!(generator = vkd3d_malloc(sizeof(*generator)))) - return NULL; - - memset(generator, 0, sizeof(*generator)); - generator->version = *version; - vkd3d_string_buffer_init(&generator->buffer); - generator->message_context = message_context; - return generator; -} - static void VKD3D_PRINTF_FUNC(3, 4) vkd3d_glsl_compiler_error( struct vkd3d_glsl_generator *generator, enum vkd3d_shader_error error, const char *fmt, ...) @@ -91,7 +76,7 @@ static void vkd3d_glsl_handle_instruction(struct vkd3d_glsl_generator *generator } }
-int vkd3d_glsl_generator_generate(struct vkd3d_glsl_generator *generator, +static int vkd3d_glsl_generator_generate(struct vkd3d_glsl_generator *generator, struct vsir_program *program, struct vkd3d_shader_code *out) { unsigned int i; @@ -123,8 +108,29 @@ int vkd3d_glsl_generator_generate(struct vkd3d_glsl_generator *generator, return VKD3D_OK; }
-void vkd3d_glsl_generator_destroy(struct vkd3d_glsl_generator *generator) +static void vkd3d_glsl_generator_cleanup(struct vkd3d_glsl_generator *gen) { - vkd3d_string_buffer_cleanup(&generator->buffer); - vkd3d_free(generator); + vkd3d_string_buffer_cleanup(&gen->buffer); +} + +static void vkd3d_glsl_generator_init(struct vkd3d_glsl_generator *gen, + const struct vkd3d_shader_version *version, struct vkd3d_shader_message_context *message_context) +{ + memset(gen, 0, sizeof(*gen)); + gen->version = *version; + vkd3d_string_buffer_init(&gen->buffer); + gen->message_context = message_context; +} + +int glsl_compile(struct vsir_program *program, struct vkd3d_shader_code *out, + struct vkd3d_shader_message_context *message_context) +{ + struct vkd3d_glsl_generator generator; + int ret; + + vkd3d_glsl_generator_init(&generator, &program->shader_version, message_context); + ret = vkd3d_glsl_generator_generate(&generator, program, out); + vkd3d_glsl_generator_cleanup(&generator); + + return ret; } diff --git a/libs/vkd3d-shader/vkd3d_shader_main.c b/libs/vkd3d-shader/vkd3d_shader_main.c index 36aa5916..ff361a2b 100644 --- a/libs/vkd3d-shader/vkd3d_shader_main.c +++ b/libs/vkd3d-shader/vkd3d_shader_main.c @@ -1554,7 +1554,6 @@ static int vkd3d_shader_parser_compile(struct vkd3d_shader_parser *parser, { struct vkd3d_shader_scan_descriptor_info1 scan_descriptor_info; struct vsir_program *program = &parser->program; - struct vkd3d_glsl_generator *glsl_generator; struct vkd3d_shader_compile_info scan_info; int ret;
@@ -1569,15 +1568,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; - if (!(glsl_generator = vkd3d_glsl_generator_create(&program->shader_version, message_context))) - { - ERR("Failed to create GLSL generator.\n"); - vkd3d_shader_free_scan_descriptor_info1(&scan_descriptor_info); - return VKD3D_ERROR; - } - - ret = vkd3d_glsl_generator_generate(glsl_generator, program, out); - vkd3d_glsl_generator_destroy(glsl_generator); + ret = glsl_compile(program, 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 02902900..ba018070 100644 --- a/libs/vkd3d-shader/vkd3d_shader_private.h +++ b/libs/vkd3d-shader/vkd3d_shader_private.h @@ -1504,13 +1504,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);
-struct vkd3d_glsl_generator; - -struct vkd3d_glsl_generator *vkd3d_glsl_generator_create(const struct vkd3d_shader_version *version, +int glsl_compile(struct vsir_program *program, struct vkd3d_shader_code *out, struct vkd3d_shader_message_context *message_context); -int vkd3d_glsl_generator_generate(struct vkd3d_glsl_generator *generator, - struct vsir_program *program, struct vkd3d_shader_code *out); -void vkd3d_glsl_generator_destroy(struct vkd3d_glsl_generator *generator);
#define SPIRV_MAX_SRC_COUNT 6