From 165234b159156ca82aed1c3eb2de9ab60fbe3fa2 Mon Sep 17 00:00:00 2001 From: nmzik Date: Thu, 17 Sep 2026 23:34:02 +0400 Subject: [PATCH] BC7-RGBA32_UINT views (Vulkan validation) Co-authored-by: Techx3 <56268269+Techx3@users.noreply.github.com> Co-authored-by: shadowbeat070 <70843316+shadowbeat070@users.noreply.github.com> Co-authored-by: SueryRD Co-authored-by: BlackCAT <52720489+psnwd@users.noreply.github.com> --- src/graphics/host_gpu/renderer/image/image.cpp | 10 +++++++--- tests/ShaderRecompilerComputeTests.cpp | 7 +++++++ 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/src/graphics/host_gpu/renderer/image/image.cpp b/src/graphics/host_gpu/renderer/image/image.cpp index 96b27e1e8..7b60f8bca 100644 --- a/src/graphics/host_gpu/renderer/image/image.cpp +++ b/src/graphics/host_gpu/renderer/image/image.cpp @@ -48,12 +48,16 @@ namespace { } [[nodiscard]] vk::ImageUsageFlags ImageUsageFlags(GraphicContext& graphics, const ImageInfo& info) { + auto usage = vk::ImageUsageFlagBits::eTransferSrc | vk::ImageUsageFlagBits::eTransferDst; if (info.IsBlock()) { - return vk::ImageUsageFlagBits::eTransferSrc | vk::ImageUsageFlagBits::eTransferDst | - vk::ImageUsageFlagBits::eSampled; + usage |= vk::ImageUsageFlagBits::eSampled; + if (graphics.supports_block_texel_view) { + // Uncompressed block views use storage access; ExtendedUsage permits their formats. + usage |= vk::ImageUsageFlagBits::eStorage; + } + return usage; } const auto properties = graphics.GetFormatProperties(info.pixel_format); - auto usage = vk::ImageUsageFlagBits::eTransferSrc | vk::ImageUsageFlagBits::eTransferDst; if (HasFormatFeature(properties, vk::FormatFeatureFlagBits::eSampledImage)) { usage |= vk::ImageUsageFlagBits::eSampled; } diff --git a/tests/ShaderRecompilerComputeTests.cpp b/tests/ShaderRecompilerComputeTests.cpp index d08c1b2b2..e988c6bdb 100644 --- a/tests/ShaderRecompilerComputeTests.cpp +++ b/tests/ShaderRecompilerComputeTests.cpp @@ -10442,6 +10442,13 @@ public: (vk::AccessFlagBits2::eShaderRead | vk::AccessFlagBits2::eShaderWrite), "a later sampled alias dropped an earlier storage write access"); + // Bind the raw block view through the existing uint storage descriptor layout. + auto block_bindings = graphics_bindings.vertex[0]; + block_bindings.images[0] = raw_blocks_again; + block_bindings.images[0].image_view = texture_cache.FindTexture( + raw_blocks_again.image_id, raw_blocks_again.desc); + descriptor_pipelines.push_back(RenderExecutorTestAccess::CommitBindings( + executor, scheduler.Current(), block_bindings)); RenderExecutorTestAccess::ResetBindings(executor); ShaderRecompiler::IR::Program vertex_sampled_program{};