Module: vkd3d Branch: master Commit: 5e42f6779ae992b410931b955843067687e2a336 URL: https://gitlab.winehq.org/wine/vkd3d/-/commit/5e42f6779ae992b410931b95584306...
Author: Giovanni Mascellani gmascellani@codeweavers.com Date: Wed Apr 10 17:13:02 2024 +0200
vkd3d-shader/ir: Split handling blocks when emitting a structured program.
---
libs/vkd3d-shader/ir.c | 29 +++++++++++++++++++---------- 1 file changed, 19 insertions(+), 10 deletions(-)
diff --git a/libs/vkd3d-shader/ir.c b/libs/vkd3d-shader/ir.c index 19ef4ea4..ad1f1b7d 100644 --- a/libs/vkd3d-shader/ir.c +++ b/libs/vkd3d-shader/ir.c @@ -4441,6 +4441,23 @@ static enum vkd3d_result vsir_cfg_optimize(struct vsir_cfg *cfg) return ret; }
+static enum vkd3d_result vsir_cfg_structure_list_emit_block(struct vsir_cfg *cfg, + struct vsir_block *block) +{ + struct vsir_cfg_emit_target *target = cfg->target; + + if (!reserve_instructions(&target->instructions, &target->ins_capacity, + target->ins_count + (block->end - block->begin))) + return VKD3D_ERROR_OUT_OF_MEMORY; + + memcpy(&target->instructions[target->ins_count], block->begin, + (char *)block->end - (char *)block->begin); + + target->ins_count += block->end - block->begin; + + return VKD3D_OK; +} + static enum vkd3d_result vsir_cfg_structure_list_emit(struct vsir_cfg *cfg, struct vsir_cfg_structure_list *list, unsigned int loop_idx) { @@ -4456,17 +4473,9 @@ static enum vkd3d_result vsir_cfg_structure_list_emit(struct vsir_cfg *cfg, switch (structure->type) { case STRUCTURE_TYPE_BLOCK: - { - struct vsir_block *block = structure->u.block; - - if (!reserve_instructions(&target->instructions, &target->ins_capacity, target->ins_count + (block->end - block->begin))) - return VKD3D_ERROR_OUT_OF_MEMORY; - - memcpy(&target->instructions[target->ins_count], block->begin, (char *)block->end - (char *)block->begin); - - target->ins_count += block->end - block->begin; + if ((ret = vsir_cfg_structure_list_emit_block(cfg, structure->u.block)) < 0) + return ret; break; - }
case STRUCTURE_TYPE_LOOP: {