radv: reset semaphores & fences on sync_file export.
Per spec:
"Additionally, exporting a fence payload to a handle with copy transference has the same side effects
on the source fence’s payload as executing a fence reset operation. If the fence was using a
temporarily imported payload, the fence’s prior permanent payload will be restored."
And similar for semaphores:
"Additionally, exporting a semaphore payload to a handle with copy transference has the same side
effects on the source semaphore’s payload as executing a semaphore wait operation. If the
semaphore was using a temporarily imported payload, the semaphore’s prior permanent payload
will be restored."
Fixes: 42bc25a79c
"radv: Advertise sync fd import and export."
Reviewed-by: Dave Airlie <airlied@redhat.com>
This commit is contained in:
parent
fe668b5c15
commit
b9f4c615f8
|
@ -3815,6 +3815,14 @@ VkResult radv_GetSemaphoreFdKHR(VkDevice _device,
|
|||
break;
|
||||
case VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_SYNC_FD_BIT_KHR:
|
||||
ret = device->ws->export_syncobj_to_sync_file(device->ws, syncobj_handle, pFd);
|
||||
if (!ret) {
|
||||
if (sem->temp_syncobj) {
|
||||
close (sem->temp_syncobj);
|
||||
sem->temp_syncobj = 0;
|
||||
} else {
|
||||
device->ws->reset_syncobj(device->ws, syncobj_handle);
|
||||
}
|
||||
}
|
||||
break;
|
||||
default:
|
||||
unreachable("Unhandled semaphore handle type");
|
||||
|
@ -3896,6 +3904,14 @@ VkResult radv_GetFenceFdKHR(VkDevice _device,
|
|||
break;
|
||||
case VK_EXTERNAL_FENCE_HANDLE_TYPE_SYNC_FD_BIT_KHR:
|
||||
ret = device->ws->export_syncobj_to_sync_file(device->ws, syncobj_handle, pFd);
|
||||
if (!ret) {
|
||||
if (fence->temp_syncobj) {
|
||||
close (fence->temp_syncobj);
|
||||
fence->temp_syncobj = 0;
|
||||
} else {
|
||||
device->ws->reset_syncobj(device->ws, syncobj_handle);
|
||||
}
|
||||
}
|
||||
break;
|
||||
default:
|
||||
unreachable("Unhandled fence handle type");
|
||||
|
|
Loading…
Reference in New Issue