From 35c6ba83358cadb467efb4f793df09d6e6491f40 Mon Sep 17 00:00:00 2001 From: baldurk Date: Fri, 21 Jan 2022 10:32:25 +0000 Subject: [PATCH] Ignore device layers on vulkan for better compatibility * Device layers are deprecated and should not be enabled, if the application does so then we may think different extensions are available. Instead just explicitly use the list of layers from the instance. --- .../vulkan/wrappers/vk_device_funcs.cpp | 22 ++++++------------- 1 file changed, 7 insertions(+), 15 deletions(-) diff --git a/renderdoc/driver/vulkan/wrappers/vk_device_funcs.cpp b/renderdoc/driver/vulkan/wrappers/vk_device_funcs.cpp index da33c19c7..5750323bd 100644 --- a/renderdoc/driver/vulkan/wrappers/vk_device_funcs.cpp +++ b/renderdoc/driver/vulkan/wrappers/vk_device_funcs.cpp @@ -1624,26 +1624,18 @@ bool WrappedVulkan::Serialise_vkCreateDevice(SerialiserType &ser, VkPhysicalDevi Extensions.push_back(createInfo.ppEnabledExtensionNames[i]); } - rdcarray Layers; - for(uint32_t i = 0; i < createInfo.enabledLayerCount; i++) - Layers.push_back(createInfo.ppEnabledLayerNames[i]); - - StripUnwantedLayers(Layers); StripUnwantedExtensions(Extensions); std::set supportedExtensions; - for(size_t i = 0; i <= Layers.size(); i++) { - const char *pLayerName = (i == 0 ? NULL : Layers[i - 1].c_str()); - uint32_t count = 0; ObjDisp(physicalDevice) - ->EnumerateDeviceExtensionProperties(Unwrap(physicalDevice), pLayerName, &count, NULL); + ->EnumerateDeviceExtensionProperties(Unwrap(physicalDevice), NULL, &count, NULL); VkExtensionProperties *props = new VkExtensionProperties[count]; ObjDisp(physicalDevice) - ->EnumerateDeviceExtensionProperties(Unwrap(physicalDevice), pLayerName, &count, props); + ->EnumerateDeviceExtensionProperties(Unwrap(physicalDevice), NULL, &count, props); for(uint32_t e = 0; e < count; e++) supportedExtensions.insert(props[e].extensionName); @@ -3282,12 +3274,12 @@ bool WrappedVulkan::Serialise_vkCreateDevice(SerialiserType &ser, VkPhysicalDevi } } - rdcarray layerArray(Layers.size()); - for(size_t i = 0; i < Layers.size(); i++) - layerArray[i] = Layers[i].c_str(); + rdcarray layerArray(m_InitParams.Layers.size()); + for(size_t i = 0; i < m_InitParams.Layers.size(); i++) + layerArray[i] = m_InitParams.Layers[i].c_str(); - createInfo.enabledLayerCount = (uint32_t)layerArray.size(); - createInfo.ppEnabledLayerNames = layerArray.data(); + createInfo.enabledLayerCount = 0; + createInfo.ppEnabledLayerNames = NULL; rdcarray extArray(Extensions.size()); for(size_t i = 0; i < Extensions.size(); i++)