mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-24 21:50:12 +01:00
pvr: Clear wait syncs after job submission
Avoids the fw having to process redundant waits. Signed-off-by: Jarred Davies <jarred.davies@imgtec.com> Reviewed-by: Karmjit Mahil <Karmjit.Mahil@imgtec.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/21577>
This commit is contained in:
parent
18fb8d3b55
commit
4af1cf89ab
1 changed files with 24 additions and 35 deletions
|
|
@ -194,6 +194,25 @@ void pvr_queues_destroy(struct pvr_device *device)
|
|||
vk_free(&device->vk.alloc, device->queues);
|
||||
}
|
||||
|
||||
static void pvr_update_job_syncs(struct pvr_device *device,
|
||||
struct pvr_queue *queue,
|
||||
struct vk_sync *new_signal_sync,
|
||||
enum pvr_job_type submitted_job_type)
|
||||
{
|
||||
if (queue->next_job_wait_sync[submitted_job_type]) {
|
||||
vk_sync_destroy(&device->vk,
|
||||
queue->next_job_wait_sync[submitted_job_type]);
|
||||
queue->next_job_wait_sync[submitted_job_type] = NULL;
|
||||
}
|
||||
|
||||
if (queue->last_job_signal_sync[submitted_job_type]) {
|
||||
vk_sync_destroy(&device->vk,
|
||||
queue->last_job_signal_sync[submitted_job_type]);
|
||||
}
|
||||
|
||||
queue->last_job_signal_sync[submitted_job_type] = new_signal_sync;
|
||||
}
|
||||
|
||||
static VkResult pvr_process_graphics_cmd(struct pvr_device *device,
|
||||
struct pvr_queue *queue,
|
||||
struct pvr_cmd_buffer *cmd_buffer,
|
||||
|
|
@ -276,20 +295,8 @@ static VkResult pvr_process_graphics_cmd(struct pvr_device *device,
|
|||
if (result != VK_SUCCESS)
|
||||
goto err_destroy_frag_sync;
|
||||
|
||||
/* Replace the completion fences. */
|
||||
if (queue->last_job_signal_sync[PVR_JOB_TYPE_GEOM]) {
|
||||
vk_sync_destroy(&device->vk,
|
||||
queue->last_job_signal_sync[PVR_JOB_TYPE_GEOM]);
|
||||
}
|
||||
|
||||
queue->last_job_signal_sync[PVR_JOB_TYPE_GEOM] = geom_signal_sync;
|
||||
|
||||
if (queue->last_job_signal_sync[PVR_JOB_TYPE_FRAG]) {
|
||||
vk_sync_destroy(&device->vk,
|
||||
queue->last_job_signal_sync[PVR_JOB_TYPE_FRAG]);
|
||||
}
|
||||
|
||||
queue->last_job_signal_sync[PVR_JOB_TYPE_FRAG] = frag_signal_sync;
|
||||
pvr_update_job_syncs(device, queue, geom_signal_sync, PVR_JOB_TYPE_GEOM);
|
||||
pvr_update_job_syncs(device, queue, frag_signal_sync, PVR_JOB_TYPE_FRAG);
|
||||
|
||||
/* FIXME: DoShadowLoadOrStore() */
|
||||
|
||||
|
|
@ -328,13 +335,7 @@ static VkResult pvr_process_compute_cmd(struct pvr_device *device,
|
|||
return result;
|
||||
}
|
||||
|
||||
/* Replace the signal fence. */
|
||||
if (queue->last_job_signal_sync[PVR_JOB_TYPE_COMPUTE]) {
|
||||
vk_sync_destroy(&device->vk,
|
||||
queue->last_job_signal_sync[PVR_JOB_TYPE_COMPUTE]);
|
||||
}
|
||||
|
||||
queue->last_job_signal_sync[PVR_JOB_TYPE_COMPUTE] = sync;
|
||||
pvr_update_job_syncs(device, queue, sync, PVR_JOB_TYPE_COMPUTE);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
|
@ -365,13 +366,7 @@ static VkResult pvr_process_transfer_cmds(struct pvr_device *device,
|
|||
return result;
|
||||
}
|
||||
|
||||
/* Replace the signal syncs. */
|
||||
if (queue->last_job_signal_sync[PVR_JOB_TYPE_TRANSFER]) {
|
||||
vk_sync_destroy(&device->vk,
|
||||
queue->last_job_signal_sync[PVR_JOB_TYPE_TRANSFER]);
|
||||
}
|
||||
|
||||
queue->last_job_signal_sync[PVR_JOB_TYPE_TRANSFER] = sync;
|
||||
pvr_update_job_syncs(device, queue, sync, PVR_JOB_TYPE_TRANSFER);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
|
@ -408,13 +403,7 @@ pvr_process_occlusion_query_cmd(struct pvr_device *device,
|
|||
return result;
|
||||
}
|
||||
|
||||
if (queue->last_job_signal_sync[PVR_JOB_TYPE_OCCLUSION_QUERY]) {
|
||||
vk_sync_destroy(
|
||||
&device->vk,
|
||||
queue->last_job_signal_sync[PVR_JOB_TYPE_OCCLUSION_QUERY]);
|
||||
}
|
||||
|
||||
queue->last_job_signal_sync[PVR_JOB_TYPE_OCCLUSION_QUERY] = sync;
|
||||
pvr_update_job_syncs(device, queue, sync, PVR_JOB_TYPE_OCCLUSION_QUERY);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue