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

Author: Jarred Davies <[email protected]>
Date:   Wed Jan 25 20:14:40 2023 +0000

pvr: Don't update fragment signal sync when fragment stage is disabled

Signed-off-by: Jarred Davies <[email protected]>

Reviewed-by: Karmjit Mahil <[email protected]>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/21577>

---

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

diff --git a/src/imagination/vulkan/pvr_queue.c 
b/src/imagination/vulkan/pvr_queue.c
index e37ec4e1bac..4b8ebc3045b 100644
--- a/src/imagination/vulkan/pvr_queue.c
+++ b/src/imagination/vulkan/pvr_queue.c
@@ -220,7 +220,7 @@ static VkResult pvr_process_graphics_cmd(struct pvr_device 
*device,
 {
    pvr_dev_addr_t original_ctrl_stream_addr = { 0 };
    struct vk_sync *geom_signal_sync;
-   struct vk_sync *frag_signal_sync;
+   struct vk_sync *frag_signal_sync = NULL;
    VkResult result;
 
    result = vk_sync_create(&device->vk,
@@ -231,13 +231,15 @@ static VkResult pvr_process_graphics_cmd(struct 
pvr_device *device,
    if (result != VK_SUCCESS)
       return result;
 
-   result = vk_sync_create(&device->vk,
-                           &device->pdevice->ws->syncobj_type,
-                           0U,
-                           0UL,
-                           &frag_signal_sync);
-   if (result != VK_SUCCESS)
-      goto err_destroy_geom_sync;
+   if (sub_cmd->job.run_frag) {
+      result = vk_sync_create(&device->vk,
+                              &device->pdevice->ws->syncobj_type,
+                              0U,
+                              0UL,
+                              &frag_signal_sync);
+      if (result != VK_SUCCESS)
+         goto err_destroy_geom_sync;
+   }
 
    /* FIXME: DoShadowLoadOrStore() */
 
@@ -296,14 +298,17 @@ static VkResult pvr_process_graphics_cmd(struct 
pvr_device *device,
       goto err_destroy_frag_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);
+
+   if (sub_cmd->job.run_frag)
+      pvr_update_job_syncs(device, queue, frag_signal_sync, PVR_JOB_TYPE_FRAG);
 
    /* FIXME: DoShadowLoadOrStore() */
 
    return VK_SUCCESS;
 
 err_destroy_frag_sync:
-   vk_sync_destroy(&device->vk, frag_signal_sync);
+   if (frag_signal_sync)
+      vk_sync_destroy(&device->vk, frag_signal_sync);
 err_destroy_geom_sync:
    vk_sync_destroy(&device->vk, geom_signal_sync);
 

Reply via email to