aco: Skip waitcnt insertion in the discard early exit block

Waits are needed for early exits from inside a Primitive Ordered Pixel
Shading ordered section, but that code doesn't insert them reliably anyway
because it doesn't obtain the counters for the exact locations of the
jumps, which may be anywhere inside the predecessor blocks.

Reviewed-by: Timur Kristóf <timur.kristof@gmail.com>
Signed-off-by: Vitaliy Triang3l Kuzmin <triang3l@yandex.ru>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/22250>
This commit is contained in:
Vitaliy Triang3l Kuzmin
2023-04-15 21:45:12 +03:00
committed by Marge Bot
parent f8e744f07f
commit 6082e126eb
+9
View File
@@ -1037,6 +1037,15 @@ insert_wait_states(Program* program)
for (unsigned i = 0; i < program->blocks.size();) {
Block& current = program->blocks[i++];
if (current.kind & block_kind_discard_early_exit) {
/* Because the jump to the discard early exit block may happen anywhere in a block, it's
* not possible to join it with its predecessors this way.
* We emit all required waits when emitting the discard block.
*/
continue;
}
wait_ctx ctx = in_ctx[current.index];
if (current.kind & block_kind_loop_header) {