From: Giovanni Mascellani gmascellani@codeweavers.com
This is meant only to emit error messages. All accesses to the program should happen through the `program' field. --- libs/vkd3d-shader/ir.c | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-)
diff --git a/libs/vkd3d-shader/ir.c b/libs/vkd3d-shader/ir.c index 05997241f..dcce1ec38 100644 --- a/libs/vkd3d-shader/ir.c +++ b/libs/vkd3d-shader/ir.c @@ -3098,6 +3098,7 @@ static void vsir_block_cleanup(struct vsir_block *block)
struct vsir_cfg { + struct vkd3d_shader_parser *parser; struct vsir_program *program; struct vsir_block *blocks; struct vsir_block *entry; @@ -3185,15 +3186,16 @@ static void vsir_cfg_dump_dot(struct vsir_cfg *cfg) TRACE("}\n"); }
-static enum vkd3d_result vsir_cfg_init(struct vsir_cfg *cfg, struct vsir_program *program) +static enum vkd3d_result vsir_cfg_init(struct vsir_cfg *cfg, struct vkd3d_shader_parser *parser) { struct vsir_block *current_block = NULL; enum vkd3d_result ret; size_t i;
memset(cfg, 0, sizeof(*cfg)); - cfg->program = program; - cfg->block_count = program->block_count; + cfg->parser = parser; + cfg->program = &parser->program; + cfg->block_count = cfg->program->block_count;
if (!(cfg->blocks = vkd3d_calloc(cfg->block_count, sizeof(*cfg->blocks)))) return VKD3D_ERROR_OUT_OF_MEMORY; @@ -3201,9 +3203,9 @@ static enum vkd3d_result vsir_cfg_init(struct vsir_cfg *cfg, struct vsir_program if (TRACE_ON()) vkd3d_string_buffer_init(&cfg->debug_buffer);
- for (i = 0; i < program->instructions.count; ++i) + for (i = 0; i < cfg->program->instructions.count; ++i) { - struct vkd3d_shader_instruction *instruction = &program->instructions.elements[i]; + struct vkd3d_shader_instruction *instruction = &cfg->program->instructions.elements[i];
switch (instruction->handler_idx) { @@ -3220,9 +3222,9 @@ static enum vkd3d_result vsir_cfg_init(struct vsir_cfg *cfg, struct vsir_program assert(label <= cfg->block_count); current_block = &cfg->blocks[label - 1]; assert(current_block->label == 0); - if ((ret = vsir_block_init(current_block, label, program->block_count)) < 0) + if ((ret = vsir_block_init(current_block, label, cfg->program->block_count)) < 0) goto fail; - current_block->begin = &program->instructions.elements[i + 1]; + current_block->begin = &cfg->program->instructions.elements[i + 1]; if (!cfg->entry) cfg->entry = current_block; break; @@ -3440,7 +3442,7 @@ enum vkd3d_result vkd3d_shader_normalise(struct vkd3d_shader_parser *parser, if ((result = materialize_ssas_to_temps(parser)) < 0) return result;
- if ((result = vsir_cfg_init(&cfg, &parser->program)) < 0) + if ((result = vsir_cfg_init(&cfg, parser)) < 0) return result;
vsir_cfg_compute_dominators(&cfg);