From dff14d102dfe006b69fcde3ea3cf04c2697d9689 Mon Sep 17 00:00:00 2001 From: Qiang Yu Date: Mon, 23 Dec 2024 17:25:19 +0800 Subject: [PATCH] aco: fix voffset missing when buffer store base >=4096 Regression on test: dEQP-GLES31.functional.geometry_shading.basic.output_256 voffset is missing if buffer store base >=4096, we need to re-calculate offen after resolve_excess_vmem_const_offset(). Fixes: cdaf269924f ("aco: inline store_vmem_mubuf/emit_single_mubuf_store") Part-of: --- src/amd/compiler/aco_instruction_selection.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/amd/compiler/aco_instruction_selection.cpp b/src/amd/compiler/aco_instruction_selection.cpp index 55e6a13625c..5650dfe6ffa 100644 --- a/src/amd/compiler/aco_instruction_selection.cpp +++ b/src/amd/compiler/aco_instruction_selection.cpp @@ -7092,6 +7092,9 @@ visit_store_buffer(isel_context* ctx, nir_intrinsic_instr* intrin) unsigned const_offset = resolve_excess_vmem_const_offset( bld, write_voffset, offsets[i] + nir_intrinsic_base(intrin)); + /* write_voffset may be updated in resolve_excess_vmem_const_offset(). */ + offen = write_voffset.id(); + Operand vaddr_op(v1); if (offen && idxen) vaddr_op = bld.pseudo(aco_opcode::p_create_vector, bld.def(v2), idx, write_voffset);