diff --git a/src/imagination/vulkan/winsys/pvrsrvkm/pvr_srv_job_compute.c b/src/imagination/vulkan/winsys/pvrsrvkm/pvr_srv_job_compute.c index f76a807be15..92debd910f9 100644 --- a/src/imagination/vulkan/winsys/pvrsrvkm/pvr_srv_job_compute.c +++ b/src/imagination/vulkan/winsys/pvrsrvkm/pvr_srv_job_compute.c @@ -222,8 +222,12 @@ VkResult pvr_srv_winsys_compute_submit( if (result != VK_SUCCESS) goto err_close_in_fd; - srv_signal_sync = to_srv_sync(signal_sync); - pvr_srv_set_sync_payload(srv_signal_sync, fence); + if (signal_sync) { + srv_signal_sync = to_srv_sync(signal_sync); + pvr_srv_set_sync_payload(srv_signal_sync, fence); + } else if (fence != -1) { + close(fence); + } return VK_SUCCESS; diff --git a/src/imagination/vulkan/winsys/pvrsrvkm/pvr_srv_job_render.c b/src/imagination/vulkan/winsys/pvrsrvkm/pvr_srv_job_render.c index b940627c677..a1b41fa1190 100644 --- a/src/imagination/vulkan/winsys/pvrsrvkm/pvr_srv_job_render.c +++ b/src/imagination/vulkan/winsys/pvrsrvkm/pvr_srv_job_render.c @@ -680,10 +680,19 @@ VkResult pvr_srv_winsys_render_submit( if (result != VK_SUCCESS) goto err_close_in_fds; - srv_signal_sync_geom = to_srv_sync(signal_sync_geom); - srv_signal_sync_frag = to_srv_sync(signal_sync_frag); - pvr_srv_set_sync_payload(srv_signal_sync_geom, fence_geom); - pvr_srv_set_sync_payload(srv_signal_sync_frag, fence_frag); + if (signal_sync_geom) { + srv_signal_sync_geom = to_srv_sync(signal_sync_geom); + pvr_srv_set_sync_payload(srv_signal_sync_geom, fence_geom); + } else if (fence_geom != -1) { + close(fence_geom); + } + + if (signal_sync_frag) { + srv_signal_sync_frag = to_srv_sync(signal_sync_frag); + pvr_srv_set_sync_payload(srv_signal_sync_frag, fence_frag); + } else if (fence_frag != -1) { + close(fence_frag); + } return VK_SUCCESS;