From 058d15fa1158c157cfabcdf120ea460cace8388e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Sch=C3=BCrmann?= Date: Mon, 9 Feb 2026 18:22:09 +0100 Subject: [PATCH] radv/dgc: add and lower loop continue construct We are going to disallow continue statements without loop continue constructs. Reviewed-by: Alyssa Rosenzweig Reviewed-by: Georg Lehmann Acked-by: Faith Ekstrand Part-of: --- src/amd/vulkan/radv_dgc.c | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/src/amd/vulkan/radv_dgc.c b/src/amd/vulkan/radv_dgc.c index f01f104c20e..5472da50190 100644 --- a/src/amd/vulkan/radv_dgc.c +++ b/src/amd/vulkan/radv_dgc.c @@ -1754,8 +1754,10 @@ dgc_alloc_push_constant(struct dgc_cmdbuf *cs, nir_def *stream_addr, nir_def *se nir_variable *idx = nir_variable_create(b->shader, nir_var_shader_temp, glsl_uint_type(), "idx"); nir_store_var(b, idx, nir_imm_int(b, 0), 0x1); - nir_push_loop(b); + nir_loop *loop = nir_push_loop(b); { + nir_loop_add_continue_construct(loop); + nir_def *cur_idx = nir_load_var(b, idx); nir_break_if(b, nir_ieq(b, cur_idx, load_param8(b, push_constant_size))); @@ -1777,7 +1779,7 @@ dgc_alloc_push_constant(struct dgc_cmdbuf *cs, nir_def *stream_addr, nir_def *se nir_store_var(b, idx, nir_iadd_imm(b, cur_idx, 1), 0x1); } - nir_pop_loop(b, NULL); + nir_pop_loop(b, loop); /* Store push constants set by DGC tokens. */ u_foreach_bit64 (i, layout->push_constant_mask) { @@ -2025,8 +2027,10 @@ dgc_emit_vertex_buffer(struct dgc_cmdbuf *cs, nir_def *stream_addr) nir_variable *vbo_idx = nir_variable_create(b->shader, nir_var_shader_temp, glsl_uint_type(), "vbo_idx"); nir_store_var(b, vbo_idx, nir_imm_int(b, 0), 0x1); - nir_push_loop(b); + nir_loop *loop = nir_push_loop(b); { + nir_loop_add_continue_construct(loop); + nir_def *cur_idx = nir_load_var(b, vbo_idx); nir_break_if(b, nir_uge_imm(b, cur_idx, 32 /* bits in vb_desc_usage_mask */)); @@ -2097,7 +2101,7 @@ dgc_emit_vertex_buffer(struct dgc_cmdbuf *cs, nir_def *stream_addr) nir_store_var(b, vbo_idx, nir_iadd_imm(b, cur_idx, 1), 0x1); } - nir_pop_loop(b, NULL); + nir_pop_loop(b, loop); } /** @@ -2959,6 +2963,8 @@ build_dgc_prepare_shader(struct radv_device *dev, struct radv_indirect_command_l } nir_pop_if(&b, NULL); + nir_lower_continue_constructs(b.shader); + return b.shader; }