From de463e2fce3f2aee34b1444a55de99a33dff090b Mon Sep 17 00:00:00 2001 From: Lubosz Sarnecki Date: Tue, 2 Feb 2021 23:20:49 +0100 Subject: [PATCH] Check if wl_display_connect succeeded before creating surface. This prevents creating an invalid surface, as vkCreateWaylandSurfaceKHR does not return an error if the `wl_display` is a nullptr in some implementations (as seen on radv/mesa). This fixes #93. (cherry picked from commit 18a63a27eeb385c7d48d9551ba04ee4f6ba6f78e) --- vulkancapsviewer.cpp | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/vulkancapsviewer.cpp b/vulkancapsviewer.cpp index 33ec715..5b06003 100644 --- a/vulkancapsviewer.cpp +++ b/vulkancapsviewer.cpp @@ -764,12 +764,19 @@ bool VulkanCapsViewer::initVulkan() #if defined(VK_USE_PLATFORM_WAYLAND_KHR) if (surface_extension == VK_KHR_WAYLAND_SURFACE_EXTENSION_NAME) { - VkWaylandSurfaceCreateInfoKHR surfaceCreateInfo = {}; - surfaceCreateInfo.pNext = nullptr; - surfaceCreateInfo.sType = VK_STRUCTURE_TYPE_WAYLAND_SURFACE_CREATE_INFO_KHR; - surfaceCreateInfo.display = wl_display_connect(NULL); - surfaceCreateInfo.surface = nullptr; - surfaceResult = vkCreateWaylandSurfaceKHR(vulkanContext.instance, &surfaceCreateInfo, nullptr, &vulkanContext.surface); + struct wl_display* display = wl_display_connect(NULL); + if (display != NULL) { + VkWaylandSurfaceCreateInfoKHR surfaceCreateInfo = { + .sType = VK_STRUCTURE_TYPE_WAYLAND_SURFACE_CREATE_INFO_KHR, + .pNext = nullptr, + .flags = 0, + .display = display, + .surface = nullptr + }; + surfaceResult = vkCreateWaylandSurfaceKHR(vulkanContext.instance, &surfaceCreateInfo, nullptr, &vulkanContext.surface); + } else { + qDebug() << "Could not connect to Wayland display."; + } } #endif