diff --git a/renderdoc/driver/vulkan/wrappers/vk_device_funcs.cpp b/renderdoc/driver/vulkan/wrappers/vk_device_funcs.cpp index aed855783..83a5ab618 100644 --- a/renderdoc/driver/vulkan/wrappers/vk_device_funcs.cpp +++ b/renderdoc/driver/vulkan/wrappers/vk_device_funcs.cpp @@ -2995,7 +2995,19 @@ bool WrappedVulkan::Serialise_vkCreateDevice(SerialiserType &ser, VkPhysicalDevi (VkPhysicalDeviceBufferDeviceAddressFeaturesEXT *)FindNextStruct( &createInfo, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES_EXT); - if(!existingKHR && !existingEXT) + if(existingKHR) + { + if(existingKHR->bufferDeviceAddress) + existingKHR->bufferDeviceAddressCaptureReplay = VK_TRUE; + existingKHR->bufferDeviceAddress = VK_TRUE; + } + else if(existingEXT) + { + if(existingEXT->bufferDeviceAddress) + existingEXT->bufferDeviceAddressCaptureReplay = VK_TRUE; + existingEXT->bufferDeviceAddress = VK_TRUE; + } + else { // 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 diff --git a/util/test/demos/vk/vk_khr_buffer_address.cpp b/util/test/demos/vk/vk_khr_buffer_address.cpp index 08ca7a3eb..459f225c0 100644 --- a/util/test/demos/vk/vk_khr_buffer_address.cpp +++ b/util/test/demos/vk/vk_khr_buffer_address.cpp @@ -135,6 +135,9 @@ void main() if(!bufaddrFeatures.bufferDeviceAddress) Avail = "Buffer device address feature 'bufferDeviceAddress' not available"; + bufaddrFeatures.bufferDeviceAddressCaptureReplay = 0; + bufaddrFeatures.bufferDeviceAddressMultiDevice = 0; + devInfoNext = &bufaddrFeatures; }