From 247fbd869a5b28050b4c9f3f6675b7d1d51220b9 Mon Sep 17 00:00:00 2001 From: Giovanni Mascellani Date: Sun, 27 Jul 2025 16:28:02 +0200 Subject: [PATCH] vkd3d-shader/ir: Use iterators in vsir_program_ensure_ret(). --- libs/vkd3d-shader/ir.c | 15 +++++++++++---- libs/vkd3d-shader/vkd3d_shader_private.h | 7 +++++++ 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/libs/vkd3d-shader/ir.c b/libs/vkd3d-shader/ir.c index 8b8885fc8..1098e4d39 100644 --- a/libs/vkd3d-shader/ir.c +++ b/libs/vkd3d-shader/ir.c @@ -1740,14 +1740,21 @@ static enum vkd3d_result vsir_program_lower_instructions(struct vsir_program *pr static enum vkd3d_result vsir_program_ensure_ret(struct vsir_program *program, struct vsir_transformation_context *ctx) { + struct vsir_program_iterator it = vsir_program_iterator(&program->instructions); static const struct vkd3d_shader_location no_loc; - if (program->instructions.count - && program->instructions.elements[program->instructions.count - 1].opcode == VSIR_OP_RET) + struct vkd3d_shader_instruction *ins; + + ins = vsir_program_iterator_tail(&it); + + if (ins && ins->opcode == VSIR_OP_RET) return VKD3D_OK; - if (!shader_instruction_array_insert_at(&program->instructions, program->instructions.count, 1)) + if (!vsir_program_iterator_insert_after(&it, 1)) return VKD3D_ERROR_OUT_OF_MEMORY; - vsir_instruction_init(&program->instructions.elements[program->instructions.count - 1], &no_loc, VSIR_OP_RET); + + ins = vsir_program_iterator_next(&it); + vsir_instruction_init(ins, &no_loc, VSIR_OP_RET); + return VKD3D_OK; } diff --git a/libs/vkd3d-shader/vkd3d_shader_private.h b/libs/vkd3d-shader/vkd3d_shader_private.h index 1c622b97d..4027395b1 100644 --- a/libs/vkd3d-shader/vkd3d_shader_private.h +++ b/libs/vkd3d-shader/vkd3d_shader_private.h @@ -1453,6 +1453,13 @@ static inline struct vkd3d_shader_instruction *vsir_program_iterator_head( return vsir_program_iterator_current(iterator); } +static inline struct vkd3d_shader_instruction *vsir_program_iterator_tail(struct vsir_program_iterator *iterator) +{ + iterator->idx = iterator->array->count - 1; + + return vsir_program_iterator_current(iterator); +} + static inline struct vkd3d_shader_instruction *vsir_program_iterator_next( struct vsir_program_iterator *iterator) {