aco: Reset scratch_rsrc on blocks without predecessors

Fixes hangs with raytracing in Hellblade: Senua's Sacrifice.

Fixes: 3d4f6a00b ('aco/spill: allow for disconnected CFG')
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/23586>
(cherry picked from commit 7f3cfcc96a)
This commit is contained in:
Friedrich Vock 2023-06-12 10:18:37 +02:00 committed by Eric Engestrom
parent 20448890ff
commit 69df6917c0
2 changed files with 6 additions and 1 deletions

View file

@ -2308,7 +2308,7 @@
"description": "aco: Reset scratch_rsrc on blocks without predecessors",
"nominated": true,
"nomination_type": 1,
"resolution": 0,
"resolution": 1,
"main_sha": null,
"because_sha": "3d4f6a00b8e8710bbc265f8a5e3050d0550e1491"
},

View file

@ -1747,6 +1747,11 @@ assign_spill_slots(spill_ctx& ctx, unsigned spills_to_vgpr)
last_top_level_block_idx = block.index;
end_unused_spill_vgprs(ctx, block, vgpr_spill_temps, slots, ctx.spills_entry[block.index]);
/* If the block has no predecessors (for example in RT resume shaders),
* we cannot reuse the current scratch_rsrc temp because its definition is unreachable */
if (block.linear_preds.empty())
ctx.scratch_rsrc = Temp();
}
std::vector<aco_ptr<Instruction>>::iterator it;