From 928cdea4206e59310581fac677c7f9cfabe58cd6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Henrik=20Rydg=C3=A5rd?= Date: Fri, 5 Jun 2026 10:09:23 +0200 Subject: [PATCH] Fix vulkan validation error after #21616 See #21616 --- Common/GPU/Vulkan/VulkanContext.cpp | 10 +++++++++- Common/GPU/Vulkan/VulkanLoader.h | 4 ++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/Common/GPU/Vulkan/VulkanContext.cpp b/Common/GPU/Vulkan/VulkanContext.cpp index ca83bf9739..b796947096 100644 --- a/Common/GPU/Vulkan/VulkanContext.cpp +++ b/Common/GPU/Vulkan/VulkanContext.cpp @@ -133,6 +133,7 @@ VkResult VulkanContext::CreateInstance(const CreateInfo &info) { if (!IsInstanceExtensionAvailable(VK_KHR_SURFACE_EXTENSION_NAME)) { // Cannot create a Vulkan display without VK_KHR_SURFACE_EXTENSION. + // Technically we could allow this for headless builds, but meh. init_error_ = "Vulkan not loaded - no surface extension"; return VK_ERROR_INITIALIZATION_FAILED; } @@ -185,6 +186,11 @@ VkResult VulkanContext::CreateInstance(const CreateInfo &info) { } } + if (IsInstanceExtensionAvailable(VK_KHR_GET_SURFACE_CAPABILITIES_2_EXTENSION_NAME)) { + instance_extensions_enabled_.push_back(VK_KHR_GET_SURFACE_CAPABILITIES_2_EXTENSION_NAME); + extensionsLookup_.KHR_get_surface_capabilities2 = true; + } + // Uncomment to test GPU backend fallback // abort(); @@ -670,9 +676,11 @@ VkResult VulkanContext::CreateDevice(int physical_device) { } extensionsLookup_.EXT_provoking_vertex = EnableDeviceExtension(VK_EXT_PROVOKING_VERTEX_EXTENSION_NAME, 0); + if (extensionsLookup_.KHR_get_surface_capabilities2) { #ifdef VK_EXT_full_screen_exclusive - extensionsLookup_.EXT_full_screen_exclusive = EnableDeviceExtension(VK_EXT_FULL_SCREEN_EXCLUSIVE_EXTENSION_NAME, 0); + extensionsLookup_.EXT_full_screen_exclusive = EnableDeviceExtension(VK_EXT_FULL_SCREEN_EXCLUSIVE_EXTENSION_NAME, 0); #endif + } extensionsLookup_.KHR_present_mode_fifo_latest_ready = EnableDeviceExtension(VK_KHR_PRESENT_MODE_FIFO_LATEST_READY_EXTENSION_NAME, 0); if (!extensionsLookup_.KHR_present_mode_fifo_latest_ready) { // Enable the EXT extension instead if available, it's equivalent (was promoted). diff --git a/Common/GPU/Vulkan/VulkanLoader.h b/Common/GPU/Vulkan/VulkanLoader.h index 5c571cf48d..159cb97c03 100644 --- a/Common/GPU/Vulkan/VulkanLoader.h +++ b/Common/GPU/Vulkan/VulkanLoader.h @@ -251,7 +251,11 @@ extern PFN_vkGetRefreshCycleDurationGOOGLE vkGetRefreshCycleDurationGOOGLE; // For fast extension-enabled checks. struct VulkanExtensions { + // Instance extensions + bool KHR_get_surface_capabilities2; bool EXT_debug_utils; + + // Device extensions bool KHR_maintenance1; // required for KHR_create_renderpass2 bool KHR_maintenance2; bool KHR_maintenance3;