Mesa (master): radv: fix the error code when exporting a semaphore/fence fails

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Thu Jul 16 21:17:48 UTC 2020


Module: Mesa
Branch: master
Commit: dd795ee1df4f5710f8a5ebf3a0cb527cd57fdf44
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=dd795ee1df4f5710f8a5ebf3a0cb527cd57fdf44

Author: Samuel Pitoiset <samuel.pitoiset at gmail.com>
Date:   Tue Jul 14 22:59:58 2020 +0200

radv: fix the error code when exporting a semaphore/fence fails

VK_ERROR_INVALID_EXTERNAL_HANDLE is not a valid Vulkan error code
for these functions and it's likely that too many objects are
created instead.

Signed-off-by: Samuel Pitoiset <samuel.pitoiset at gmail.com>
Reviewed-by: Bas Nieuwenhuizen <bas at basnieuwenhuizen.nl>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/5921>

---

 src/amd/vulkan/radv_device.c | 36 +++++++++++++++++++-----------------
 1 file changed, 19 insertions(+), 17 deletions(-)

diff --git a/src/amd/vulkan/radv_device.c b/src/amd/vulkan/radv_device.c
index 09a89b8be74..d69ad9d0b61 100644
--- a/src/amd/vulkan/radv_device.c
+++ b/src/amd/vulkan/radv_device.c
@@ -7138,23 +7138,24 @@ VkResult radv_GetSemaphoreFdKHR(VkDevice _device,
 	switch(pGetFdInfo->handleType) {
 	case VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_FD_BIT:
 		ret = device->ws->export_syncobj(device->ws, syncobj_handle, pFd);
+		if (ret)
+			return vk_error(device->instance, VK_ERROR_TOO_MANY_OBJECTS);
 		break;
 	case VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_SYNC_FD_BIT:
 		ret = device->ws->export_syncobj_to_sync_file(device->ws, syncobj_handle, pFd);
-		if (!ret) {
-			if (sem->temporary.kind != RADV_SEMAPHORE_NONE) {
-				radv_destroy_semaphore_part(device, &sem->temporary);
-			} else {
-				device->ws->reset_syncobj(device->ws, syncobj_handle);
-			}
+		if (ret)
+			return vk_error(device->instance, VK_ERROR_TOO_MANY_OBJECTS);
+
+		if (sem->temporary.kind != RADV_SEMAPHORE_NONE) {
+			radv_destroy_semaphore_part(device, &sem->temporary);
+		} else {
+			device->ws->reset_syncobj(device->ws, syncobj_handle);
 		}
 		break;
 	default:
 		unreachable("Unhandled semaphore handle type");
 	}
 
-	if (ret)
-		return vk_error(device->instance, VK_ERROR_INVALID_EXTERNAL_HANDLE);
 	return VK_SUCCESS;
 }
 
@@ -7232,24 +7233,25 @@ VkResult radv_GetFenceFdKHR(VkDevice _device,
 	switch(pGetFdInfo->handleType) {
 	case VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_FD_BIT:
 		ret = device->ws->export_syncobj(device->ws, syncobj_handle, pFd);
+		if (ret)
+			return vk_error(device->instance, VK_ERROR_TOO_MANY_OBJECTS);
 		break;
 	case VK_EXTERNAL_FENCE_HANDLE_TYPE_SYNC_FD_BIT:
 		ret = device->ws->export_syncobj_to_sync_file(device->ws, syncobj_handle, pFd);
-		if (!ret) {
-			if (fence->temp_syncobj) {
-				device->ws->destroy_syncobj(device->ws, fence->temp_syncobj);
-				fence->temp_syncobj = 0;
-			} else {
-				device->ws->reset_syncobj(device->ws, syncobj_handle);
-			}
+		if (ret)
+			return vk_error(device->instance, VK_ERROR_TOO_MANY_OBJECTS);
+
+		if (fence->temp_syncobj) {
+			device->ws->destroy_syncobj(device->ws, fence->temp_syncobj);
+			fence->temp_syncobj = 0;
+		} else {
+			device->ws->reset_syncobj(device->ws, syncobj_handle);
 		}
 		break;
 	default:
 		unreachable("Unhandled fence handle type");
 	}
 
-	if (ret)
-		return vk_error(device->instance, VK_ERROR_INVALID_EXTERNAL_HANDLE);
 	return VK_SUCCESS;
 }
 



More information about the mesa-commit mailing list