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: cdaf269924 ("aco: inline store_vmem_mubuf/emit_single_mubuf_store")
(cherry picked from commit dff14d102d)

Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/32852>
This commit is contained in:
Qiang Yu 2024-12-23 17:25:19 +08:00 committed by Dylan Baker
parent 29c400ca56
commit cc58288510
2 changed files with 4 additions and 1 deletions

View file

@ -1964,7 +1964,7 @@
"description": "aco: fix voffset missing when buffer store base >=4096",
"nominated": true,
"nomination_type": 2,
"resolution": 0,
"resolution": 1,
"main_sha": null,
"because_sha": "cdaf269924ffc2f40c38ff05359466bfc0155fde",
"notes": null

View file

@ -7303,6 +7303,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);