From 0284e61c585e22f3c160fc53441bd194706170d1 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: (cherry picked from commit 5c5e4238ff8f9dfb92b13071582af13c985483ef) --- .pick_status.json | 2 +- src/gallium/drivers/freedreno/a6xx/fd6_query.c | 9 ++++++++- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/.pick_status.json b/.pick_status.json index e7c31fbfb3f..277bb239766 100644 --- a/.pick_status.json +++ b/.pick_status.json @@ -58,7 +58,7 @@ "description": "freedreno/a6xx: Fix occlusion queries", "nominated": true, "nomination_type": 1, - "resolution": 0, + "resolution": 1, "main_sha": null, "because_sha": "13fc03f4c0e709f6d1a8d811f9bc8a0c8c42943c" }, diff --git a/src/gallium/drivers/freedreno/a6xx/fd6_query.c b/src/gallium/drivers/freedreno/a6xx/fd6_query.c index 4171ac4cec5..76b77fb434f 100644 --- a/src/gallium/drivers/freedreno/a6xx/fd6_query.c +++ b/src/gallium/drivers/freedreno/a6xx/fd6_query.c @@ -97,7 +97,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);