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;