mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-04 22:49:13 +02:00
aco: fix target calculation when vgpr spilling introduces sgpr spilling
A shader might require vgpr spilling but not require sgpr spilling. In that case, the spiller lowers the sgpr target by 5 which could mean sgpr spilling is then required. Then the vgpr target has to be lowered to make space for the linear vgprs. Previously, space wasn't make for the linear vgprs. Found while testing the spiller on the pipeline-db with a lowered limit Fixes:a7ff1bb5b9('aco: simplify calculation of target register pressure when spilling') Signed-off-by: Rhys Perry <pendingchaos02@gmail.com> Reviewed-by: Daniel Schürmann <daniel@schuermann.dev> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/merge_requests/3257> (cherry picked from commit590c26beab) Conflicts: src/amd/compiler/aco_spill.cpp
This commit is contained in:
parent
9d9c92b8a6
commit
d686805876
2 changed files with 3 additions and 4 deletions
|
|
@ -418,7 +418,7 @@
|
|||
"description": "aco: fix target calculation when vgpr spilling introduces sgpr spilling",
|
||||
"nominated": true,
|
||||
"nomination_type": 1,
|
||||
"resolution": 0,
|
||||
"resolution": 1,
|
||||
"master_sha": null,
|
||||
"because_sha": "a7ff1bb5b9a78cf57073b5e2e136daf0c85078d6"
|
||||
},
|
||||
|
|
|
|||
|
|
@ -1744,9 +1744,8 @@ void spill(Program* program, live& live_vars, const struct radv_nir_compiler_opt
|
|||
|
||||
if (register_target.vgpr > program->vgpr_limit)
|
||||
register_target.sgpr = program->sgpr_limit - 5;
|
||||
register_target.vgpr = program->vgpr_limit - (register_target.vgpr - program->max_reg_demand.vgpr);
|
||||
|
||||
int spills_to_vgpr = (program->max_reg_demand.sgpr - register_target.sgpr + 63 + 32) / 64;
|
||||
int spills_to_vgpr = (program->max_reg_demand.sgpr - register_target.sgpr + program->wave_size - 1 + 32) / program->wave_size;
|
||||
register_target.vgpr = program->vgpr_limit - spills_to_vgpr;
|
||||
|
||||
/* initialize ctx */
|
||||
spill_ctx ctx(register_target, program, live_vars.register_demand);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue