From 39603d3b9d092af36c862951d430d2de4e4cb076 Mon Sep 17 00:00:00 2001 From: Iago Toral Quiroga Date: Wed, 4 Jun 2025 09:02:52 +0200 Subject: [PATCH] broadcom/compiler: handle moving last ubo load in the block correctly Before we move a UBO load to a previous location in the block we take a reference to the instruction after it so we can continue the loop from there, however, if the load we just moved was already the last instruction in the block we just want to break the loop right there. Fixes crashes with shaders from http://flightradar24.com Fixes: 8998666de7e ("broadcom/compiler: sort constant UBO loads by index and offset") Reviewed-by: Jose Maria Casanova Crespo Part-of: (cherry picked from commit c059c721fbc7f2f0396bf30e4e881c7b8b2bd5fb) --- .pick_status.json | 2 +- src/broadcom/compiler/vir.c | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/.pick_status.json b/.pick_status.json index da407eae634..ca4b20119bf 100644 --- a/.pick_status.json +++ b/.pick_status.json @@ -134,7 +134,7 @@ "description": "broadcom/compiler: handle moving last ubo load in the block correctly", "nominated": true, "nomination_type": 2, - "resolution": 0, + "resolution": 1, "main_sha": null, "because_sha": "8998666de7e827f5fe62b51186c7f81d362a2be1", "notes": null diff --git a/src/broadcom/compiler/vir.c b/src/broadcom/compiler/vir.c index 96bcb956ad8..08c7d06afd9 100644 --- a/src/broadcom/compiler/vir.c +++ b/src/broadcom/compiler/vir.c @@ -1541,6 +1541,10 @@ v3d_nir_sort_constant_ubo_load(nir_block *block, nir_intrinsic_instr *ref) exec_node_insert_after(&pos->node, &inst->node); progress = true; + + /* If this was the last instruction in the block we are done */ + if (!next_inst) + break; } return progress;