From 3f26f4254117147125a99d3a613f77e764b88bdf Mon Sep 17 00:00:00 2001 From: baldurk Date: Wed, 9 Sep 2020 11:31:52 +0100 Subject: [PATCH] Fix enabling of bufferDeviceAddressCaptureReplay * We only enable this if we find an existing struct somewhere enabling the base feature. Otherwise we might try to enable this when it's not supported at all. --- .../vulkan/wrappers/vk_device_funcs.cpp | 30 +++---------------- 1 file changed, 4 insertions(+), 26 deletions(-) diff --git a/renderdoc/driver/vulkan/wrappers/vk_device_funcs.cpp b/renderdoc/driver/vulkan/wrappers/vk_device_funcs.cpp index f6e67462b..7b291662e 100644 --- a/renderdoc/driver/vulkan/wrappers/vk_device_funcs.cpp +++ b/renderdoc/driver/vulkan/wrappers/vk_device_funcs.cpp @@ -2919,6 +2919,7 @@ bool WrappedVulkan::Serialise_vkCreateDevice(SerialiserType &ser, VkPhysicalDevi if(existing) { existing->bufferDeviceAddress = VK_TRUE; + existing->bufferDeviceAddressCaptureReplay = VK_TRUE; } else { @@ -2932,8 +2933,7 @@ bool WrappedVulkan::Serialise_vkCreateDevice(SerialiserType &ser, VkPhysicalDevi if(!existingKHR && !existingEXT) { // don't add a new VkPhysicalDeviceVulkan12Features to the pNext chain because if we do - // we - // have to remove any components etc. Instead just add the individual + // we have to remove any components etc. Instead just add the individual // VkPhysicalDeviceBufferDeviceAddressFeaturesKHR bufAddrKHRFeatures.bufferDeviceAddress = VK_TRUE; bufAddrKHRFeatures.bufferDeviceAddressMultiDevice = VK_FALSE; @@ -2961,6 +2961,7 @@ bool WrappedVulkan::Serialise_vkCreateDevice(SerialiserType &ser, VkPhysicalDevi { // if so, make sure the feature is enabled existing->bufferDeviceAddress = VK_TRUE; + existing->bufferDeviceAddressCaptureReplay = VK_TRUE; } else { @@ -2998,6 +2999,7 @@ bool WrappedVulkan::Serialise_vkCreateDevice(SerialiserType &ser, VkPhysicalDevi { // if so, make sure the feature is enabled existing->bufferDeviceAddress = VK_TRUE; + existing->bufferDeviceAddressCaptureReplay = VK_TRUE; } else { @@ -3019,30 +3021,6 @@ bool WrappedVulkan::Serialise_vkCreateDevice(SerialiserType &ser, VkPhysicalDevi } } - { - VkPhysicalDeviceVulkan12Features *enabledFeaturesVK12 = - (VkPhysicalDeviceVulkan12Features *)FindNextStruct( - &createInfo, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_FEATURES); - VkPhysicalDeviceBufferDeviceAddressFeatures *bufferAddressFeaturesCoreKHR = - (VkPhysicalDeviceBufferDeviceAddressFeatures *)FindNextStruct( - &createInfo, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES); - VkPhysicalDeviceBufferDeviceAddressFeaturesEXT *bufferAddressFeaturesEXT = - (VkPhysicalDeviceBufferDeviceAddressFeaturesEXT *)FindNextStruct( - &createInfo, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES_EXT); - - // turn on bufferDeviceAddressCaptureReplay if available, so that a capture that uses it is - // safe - // to replay. Enabling this without using it is fine. - if(enabledFeaturesVK12 && enabledFeaturesVK12->bufferDeviceAddress) - enabledFeaturesVK12->bufferDeviceAddressCaptureReplay = VK_TRUE; - - if(bufferAddressFeaturesCoreKHR) - bufferAddressFeaturesCoreKHR->bufferDeviceAddressCaptureReplay = VK_TRUE; - - if(bufferAddressFeaturesEXT) - bufferAddressFeaturesEXT->bufferDeviceAddressCaptureReplay = VK_TRUE; - } - rdcarray layerArray(Layers.size()); for(size_t i = 0; i < Layers.size(); i++) layerArray[i] = Layers[i].c_str();