Module: Mesa
Branch: main
Commit: a4bdf2de0f8bbef2536f6450ec0d1cc64b153b7a
URL:    
http://cgit.freedesktop.org/mesa/mesa/commit/?id=a4bdf2de0f8bbef2536f6450ec0d1cc64b153b7a

Author: Karmjit Mahil <[email protected]>
Date:   Mon Jul 17 10:47:11 2023 +0100

pvr: Fix occlusion query unaccounted for user fences

User provided fences can never have a source stage for occlusion
queries as the occlusion query job is internal to the driver. So
at vkQueueSubmit the user's VkFence could be signalled before the
queries had completed.

Signed-off-by: Karmjit Mahil <[email protected]>
Reviewed-by: Frank Binns <[email protected]>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/24209>

---

 src/imagination/vulkan/pvr_queue.c | 10 ++++++++--
 1 file changed, 8 insertions(+), 2 deletions(-)

diff --git a/src/imagination/vulkan/pvr_queue.c 
b/src/imagination/vulkan/pvr_queue.c
index 724e358871c..472fc9db983 100644
--- a/src/imagination/vulkan/pvr_queue.c
+++ b/src/imagination/vulkan/pvr_queue.c
@@ -847,8 +847,14 @@ static VkResult pvr_process_queue_signals(struct pvr_queue 
*queue,
       uint32_t wait_count = 0;
 
       for (uint32_t i = 0; i < PVR_JOB_TYPE_MAX; i++) {
-         if (!(signal_stage_src & BITFIELD_BIT(i)) ||
-             !queue->last_job_signal_sync[i])
+         /* Exception for occlusion query jobs since that's something internal,
+          * so the user provided syncs won't ever have it as a source stage.
+          */
+         if (!(signal_stage_src & BITFIELD_BIT(i)) &&
+             i != PVR_JOB_TYPE_OCCLUSION_QUERY)
+            continue;
+
+         if (!queue->last_job_signal_sync[i])
             continue;
 
          signal_waits[wait_count++] = (struct vk_sync_wait){

Reply via email to