diff --git a/src/graphics/host_gpu/renderer/image/image.cpp b/src/graphics/host_gpu/renderer/image/image.cpp index a5fae54ac..528d38872 100644 --- a/src/graphics/host_gpu/renderer/image/image.cpp +++ b/src/graphics/host_gpu/renderer/image/image.cpp @@ -59,16 +59,8 @@ namespace { if (HasFormatFeature(properties, vk::FormatFeatureFlagBits::eColorAttachment)) { usage |= vk::ImageUsageFlagBits::eColorAttachment; } - if (info.samples == 1 && - HasFormatFeature(properties, vk::FormatFeatureFlagBits::eStorageImage)) { + if (info.samples == 1) { usage |= vk::ImageUsageFlagBits::eStorage; - } else if (info.samples == 1) { - const auto compatible = SrgbStorageViewFormat(info.pixel_format); - if (compatible != vk::Format::eUndefined && - HasFormatFeature(graphics.GetFormatProperties(compatible), - vk::FormatFeatureFlagBits::eStorageImage)) { - usage |= vk::ImageUsageFlagBits::eStorage; - } } return usage; } diff --git a/tests/ShaderRecompilerComputeTests.cpp b/tests/ShaderRecompilerComputeTests.cpp index 0244da518..20d6c6a19 100644 --- a/tests/ShaderRecompilerComputeTests.cpp +++ b/tests/ShaderRecompilerComputeTests.cpp @@ -2950,6 +2950,28 @@ public: "dynamic view identity omitted mapping, format, mip, layer, type, " "or storage usage"); + auto video_out_info = color_info; + video_out_info.pixel_format = vk::Format::eA2R10G10B10UnormPack32; + video_out_info.guest_format = Prospero::BufferFormat::k10_10_10_2UNorm; + Libs::Graphics::Image video_out(m_runtime_context, scheduler, + video_out_info); + auto video_out_view_info = sampled; + video_out_view_info.format = video_out_info.pixel_format; + video_out_view_info.usage = vk::ImageUsageFlagBits::eTransferSrc; + const auto video_out_view = video_out.FindView(video_out_view_info); + auto storage_alias_info = video_out_view_info; + storage_alias_info.format = vk::Format::eA2B10G10R10UnormPack32; + storage_alias_info.usage = vk::ImageUsageFlagBits::eStorage; + const auto storage_alias_view = video_out.FindView(storage_alias_info); + Require( + name, "video-out storage alias usage", + ImageViewOps::FormatsCompatible(video_out_info.pixel_format, + storage_alias_info.format) && + static_cast(video_out.backing.usage & + vk::ImageUsageFlagBits::eStorage) && + video_out_view != nullptr && storage_alias_view != nullptr, + "compatible video-out backing was created without storage usage"); + ImageInfo depth_info{}; depth_info.pixel_format = vk::Format::eD32Sfloat; depth_info.guest_format = Prospero::BufferFormat::k32Float;