From b9f9874c06108cd0aa51eb25c64f7362b323653e Mon Sep 17 00:00:00 2001 From: baldurk Date: Mon, 12 Apr 2021 17:49:36 +0100 Subject: [PATCH] Enable shaderStorageImageMultisample at capture time for MSAA stores * We need this to be able to add STORAGE_BIT to the image even if we don't do MSAA stores at capture time --- renderdoc/driver/vulkan/vk_msaa_array_conv.cpp | 3 ++- renderdoc/driver/vulkan/wrappers/vk_device_funcs.cpp | 9 +++++++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/renderdoc/driver/vulkan/vk_msaa_array_conv.cpp b/renderdoc/driver/vulkan/vk_msaa_array_conv.cpp index 4b8494007..6db7e9791 100644 --- a/renderdoc/driver/vulkan/vk_msaa_array_conv.cpp +++ b/renderdoc/driver/vulkan/vk_msaa_array_conv.cpp @@ -32,7 +32,8 @@ void VulkanDebugManager::CopyTex2DMSToArray(VkImage destArray, VkImage srcMS, VkExtent3D extent, uint32_t layers, uint32_t samples, VkFormat fmt) { - if(!m_pDriver->GetDeviceEnabledFeatures().shaderStorageImageWriteWithoutFormat) + if(!m_pDriver->GetDeviceEnabledFeatures().shaderStorageImageWriteWithoutFormat || + !m_pDriver->GetDeviceEnabledFeatures().shaderStorageImageMultisample) return; if(m_MS2ArrayPipe == VK_NULL_HANDLE) diff --git a/renderdoc/driver/vulkan/wrappers/vk_device_funcs.cpp b/renderdoc/driver/vulkan/wrappers/vk_device_funcs.cpp index a873df1b2..d3bd49448 100644 --- a/renderdoc/driver/vulkan/wrappers/vk_device_funcs.cpp +++ b/renderdoc/driver/vulkan/wrappers/vk_device_funcs.cpp @@ -3559,6 +3559,15 @@ VkResult WrappedVulkan::vkCreateDevice(VkPhysicalDevice physicalDevice, "shaderStorageImageWriteWithoutFormat = false, multisampled textures will have empty " "contents at frame start."); + // even though we don't actually do any multisampled stores, this is needed to be able to create + // MSAA images with STORAGE_BIT usage + if(availFeatures.shaderStorageImageMultisample) + enabledFeatures.shaderStorageImageMultisample = true; + else + RDCWARN( + "shaderStorageImageMultisample = false, multisampled textures will have empty " + "contents at frame start."); + // patch the enabled features if(enabledFeatures2) enabledFeatures2->features = enabledFeatures;