vkd3d-shader/spirv: Immediately store a reference to the program in the SPIR-V generator.

So it doesn't have to be passed around uselessly.
This commit is contained in:
Giovanni Mascellani
2025-03-15 15:05:11 +01:00
committed by Henri Verbeet
parent 549659dab6
commit 5ce03258b5
Notes: Henri Verbeet 2025-03-18 16:04:30 +01:00
Approved-by: Henri Verbeet (@hverbeet)
Approved-by: Elizabeth Figura (@zfigura)
Merge-Request: https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/1430

View File

@@ -3058,7 +3058,7 @@ struct ssa_register_info
struct spirv_compiler struct spirv_compiler
{ {
struct vkd3d_spirv_builder spirv_builder; struct vkd3d_spirv_builder spirv_builder;
const struct vsir_program *program; struct vsir_program *program;
struct vkd3d_shader_message_context *message_context; struct vkd3d_shader_message_context *message_context;
struct vkd3d_shader_location location; struct vkd3d_shader_location location;
@@ -3196,7 +3196,7 @@ static void spirv_compiler_destroy(struct spirv_compiler *compiler)
vkd3d_free(compiler); vkd3d_free(compiler);
} }
static struct spirv_compiler *spirv_compiler_create(const struct vsir_program *program, static struct spirv_compiler *spirv_compiler_create(struct vsir_program *program,
const struct vkd3d_shader_compile_info *compile_info, const struct vkd3d_shader_compile_info *compile_info,
const struct vkd3d_shader_scan_descriptor_info1 *scan_descriptor_info, const struct vkd3d_shader_scan_descriptor_info1 *scan_descriptor_info,
struct vkd3d_shader_message_context *message_context, uint64_t config_flags) struct vkd3d_shader_message_context *message_context, uint64_t config_flags)
@@ -3214,6 +3214,7 @@ static struct spirv_compiler *spirv_compiler_create(const struct vsir_program *p
compiler->message_context = message_context; compiler->message_context = message_context;
compiler->location.source_name = compile_info->source_name; compiler->location.source_name = compile_info->source_name;
compiler->config_flags = config_flags; compiler->config_flags = config_flags;
compiler->program = program;
if ((target_info = vkd3d_find_struct(compile_info->next, SPIRV_TARGET_INFO))) if ((target_info = vkd3d_find_struct(compile_info->next, SPIRV_TARGET_INFO)))
{ {
@@ -11198,13 +11199,14 @@ static void spirv_compiler_emit_descriptor_declarations(struct spirv_compiler *c
} }
} }
static int spirv_compiler_generate_spirv(struct spirv_compiler *compiler, struct vsir_program *program, static int spirv_compiler_generate_spirv(struct spirv_compiler *compiler,
const struct vkd3d_shader_compile_info *compile_info, struct vkd3d_shader_code *spirv) const struct vkd3d_shader_compile_info *compile_info, struct vkd3d_shader_code *spirv)
{ {
const struct vkd3d_shader_spirv_target_info *info = compiler->spirv_target_info; const struct vkd3d_shader_spirv_target_info *info = compiler->spirv_target_info;
const struct vkd3d_shader_spirv_domain_shader_target_info *ds_info; const struct vkd3d_shader_spirv_domain_shader_target_info *ds_info;
struct vkd3d_spirv_builder *builder = &compiler->spirv_builder; struct vkd3d_spirv_builder *builder = &compiler->spirv_builder;
struct vkd3d_shader_instruction_array instructions; struct vkd3d_shader_instruction_array instructions;
struct vsir_program *program = compiler->program;
enum vkd3d_shader_spirv_environment environment; enum vkd3d_shader_spirv_environment environment;
enum vkd3d_result result = VKD3D_OK; enum vkd3d_result result = VKD3D_OK;
unsigned int i, max_element_count; unsigned int i, max_element_count;
@@ -11255,8 +11257,6 @@ static int spirv_compiler_generate_spirv(struct spirv_compiler *compiler, struct
if (program->block_count && !spirv_compiler_init_blocks(compiler, program->block_count)) if (program->block_count && !spirv_compiler_init_blocks(compiler, program->block_count))
return VKD3D_ERROR_OUT_OF_MEMORY; return VKD3D_ERROR_OUT_OF_MEMORY;
compiler->program = program;
instructions = program->instructions; instructions = program->instructions;
memset(&program->instructions, 0, sizeof(program->instructions)); memset(&program->instructions, 0, sizeof(program->instructions));
@@ -11387,7 +11387,7 @@ int spirv_compile(struct vsir_program *program, uint64_t config_flags,
return VKD3D_ERROR; return VKD3D_ERROR;
} }
ret = spirv_compiler_generate_spirv(spirv_compiler, program, compile_info, out); ret = spirv_compiler_generate_spirv(spirv_compiler, compile_info, out);
spirv_compiler_destroy(spirv_compiler); spirv_compiler_destroy(spirv_compiler);
return ret; return ret;