From 5c5e4238ff8f9dfb92b13071582af13c985483ef Mon Sep 17 00:00:00 2001 From: Rob Clark Date: Mon, 31 Oct 2022 11:35:57 -0700 Subject: [PATCH] freedreno/a6xx: Fix occlusion queries WFI is not a strong enough barrier, which shows up in piglit qbo tests which do a single draw. Fixes: 13fc03f4c0e ("freedreno/a6xx: Avoid stalling for occlusion queries") Signed-off-by: Rob Clark Part-of: --- src/gallium/drivers/freedreno/a6xx/fd6_query.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/gallium/drivers/freedreno/a6xx/fd6_query.c b/src/gallium/drivers/freedreno/a6xx/fd6_query.c index 48233ba4912..7796f1eb521 100644 --- a/src/gallium/drivers/freedreno/a6xx/fd6_query.c +++ b/src/gallium/drivers/freedreno/a6xx/fd6_query.c @@ -99,7 +99,14 @@ occlusion_pause(struct fd_acc_query *aq, struct fd_batch *batch) assert_dt * counter delta in the epilogue ring. */ struct fd_ringbuffer *epilogue = fd_batch_get_epilogue(batch); - fd_wfi(batch, epilogue); + + OUT_PKT7(epilogue, CP_WAIT_REG_MEM, 6); + OUT_RING(epilogue, CP_WAIT_REG_MEM_0_FUNCTION(WRITE_NE) | + CP_WAIT_REG_MEM_0_POLL_MEMORY); + OUT_RELOC(epilogue, query_sample(aq, stop)); + OUT_RING(epilogue, CP_WAIT_REG_MEM_3_REF(0xffffffff)); + OUT_RING(epilogue, CP_WAIT_REG_MEM_4_MASK(0xffffffff)); + OUT_RING(epilogue, CP_WAIT_REG_MEM_5_DELAY_LOOP_CYCLES(16)); /* result += stop - start: */ OUT_PKT7(epilogue, CP_MEM_TO_MEM, 9);