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

Author: Iago Toral Quiroga <[email protected]>
Date:   Tue Apr  4 12:25:11 2023 +0200

vulkan/wsi/display: set pDisplay to NULL on error

the spec for vkGetDrmDisplayEXT says:

  "If there is no VkDisplayKHR corresponding to the connectorId on the
   physicalDevice, the returning display must be set to VK_NULL_HANDLE.
   The provided drmFd must correspond to the one owned by the physicalDevice.
   If not, the error code VK_ERROR_UNKNOWN must be returned. (...)
   The given connectorId must be a resource owned by the provided drmFd.
   If not, the error code VK_ERROR_UNKNOWN must be returned"

We were only setting the display pointer to VK_NULL_HANDLE if the provided
drmFd was valid, however, there are CTS tests checking that it is also set
to NULL when it is not.

Fixes the following test on all drivers exposing EXT_acquire_drm_display
(tested with Intel and V3DV):
dEQP-VK.wsi.acquire_drm_display.acquire_drm_display_invalid_fd

Reviewed-by: Lionel Landwerlin <[email protected]>
Cc: mesa-stable
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/22283>

---

 src/vulkan/wsi/wsi_common_display.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/src/vulkan/wsi/wsi_common_display.c 
b/src/vulkan/wsi/wsi_common_display.c
index 380bdb8ae32..840476bd6b3 100644
--- a/src/vulkan/wsi/wsi_common_display.c
+++ b/src/vulkan/wsi/wsi_common_display.c
@@ -3172,8 +3172,10 @@ wsi_GetDrmDisplayEXT(VkPhysicalDevice physicalDevice,
    VK_FROM_HANDLE(vk_physical_device, pdevice, physicalDevice);
    struct wsi_device *wsi_device = pdevice->wsi_device;
 
-   if (!wsi_device_matches_drm_fd(wsi_device, drmFd))
+   if (!wsi_device_matches_drm_fd(wsi_device, drmFd)) {
+      *pDisplay = VK_NULL_HANDLE;
       return VK_ERROR_UNKNOWN;
+   }
 
    struct wsi_display_connector *connector =
       wsi_display_get_connector(wsi_device, drmFd, connectorId);

Reply via email to