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 <Karmjit.Mahil@imgtec.com>
Reviewed-by: Frank Binns <frank.binns@imgtec.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/24209>
This commit is contained in:
Karmjit Mahil 2023-07-17 10:47:11 +01:00 committed by Marge Bot
parent 2b685fb09e
commit a4bdf2de0f

View file

@ -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){