mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-05 20:28:04 +02:00
aco: fix WQM handling in nested loops
If on a nested loop - the outer loop needs WQM but - the inner loop doesn't need WQM and - the break condition of the inner loop is computed in the outer loop then it could happen that we transitioned to Exact before entering the inner loop which could create an empty exec mask and lead to an infinite loop. Fixes a GPU hang with RDR2 Cc: 20.1 <mesa-stable@lists.freedesktop.org> Reviewed-by: Rhys Perry <pendingchaos02@gmail.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/5518>
This commit is contained in:
parent
8ce8895b69
commit
3817fa7a4d
1 changed files with 4 additions and 1 deletions
|
|
@ -189,11 +189,14 @@ void get_block_needs(wqm_ctx &ctx, exec_ctx &exec_ctx, Block* block)
|
|||
|
||||
if (block->kind & block_kind_top_level) {
|
||||
if (ctx.loop && ctx.wqm) {
|
||||
/* mark all break conditions as WQM */
|
||||
unsigned block_idx = block->index + 1;
|
||||
while (!(ctx.program->blocks[block_idx].kind & block_kind_top_level)) {
|
||||
/* flag all break conditions as WQM:
|
||||
* the conditions might be computed outside the nested CF */
|
||||
if (ctx.program->blocks[block_idx].kind & block_kind_break)
|
||||
mark_block_wqm(ctx, block_idx);
|
||||
/* flag all blocks as WQM to ensure we enter all (nested) loops in WQM */
|
||||
exec_ctx.info[block_idx].block_needs |= WQM;
|
||||
block_idx++;
|
||||
}
|
||||
} else if (ctx.loop && !ctx.wqm) {
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue