From 79e55360887fc432652e45c9be03690b37af7fc4 Mon Sep 17 00:00:00 2001 From: CamilleLaVey Date: Sat, 29 Nov 2025 18:35:29 -0400 Subject: [PATCH] [vk] TextureType extended --- src/video_core/renderer_vulkan/vk_texture_cache.cpp | 13 ++++++++++--- src/video_core/renderer_vulkan/vk_texture_cache.h | 1 + 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/src/video_core/renderer_vulkan/vk_texture_cache.cpp b/src/video_core/renderer_vulkan/vk_texture_cache.cpp index 9dae0c2a75..0b22e38cf3 100644 --- a/src/video_core/renderer_vulkan/vk_texture_cache.cpp +++ b/src/video_core/renderer_vulkan/vk_texture_cache.cpp @@ -2279,14 +2279,21 @@ VkImageView ImageView::StorageView(Shader::TextureType texture_type, if (!image_handle) { return VK_NULL_HANDLE; } - if (image_format == Shader::ImageFormat::Typeless) { - return Handle(texture_type); - } const bool is_signed{image_format == Shader::ImageFormat::R8_SINT || image_format == Shader::ImageFormat::R16_SINT}; if (!storage_views) { storage_views = std::make_unique(); } + if (image_format == Shader::ImageFormat::Typeless) { + auto& view = storage_views->typeless[static_cast(texture_type)]; + if (view) { + return *view; + } + const auto& format_info = + MaxwellToVK::SurfaceFormat(*device, FormatType::Optimal, true, format); + view = MakeView(format_info.format, VK_IMAGE_ASPECT_COLOR_BIT, texture_type); + return *view; + } auto& views{is_signed ? storage_views->signeds : storage_views->unsigneds}; auto& view{views[static_cast(texture_type)]}; if (view) { diff --git a/src/video_core/renderer_vulkan/vk_texture_cache.h b/src/video_core/renderer_vulkan/vk_texture_cache.h index 5a6b359517..21924ce50d 100644 --- a/src/video_core/renderer_vulkan/vk_texture_cache.h +++ b/src/video_core/renderer_vulkan/vk_texture_cache.h @@ -272,6 +272,7 @@ private: struct StorageViews { std::array signeds; std::array unsigneds; + std::array typeless; }; [[nodiscard]] Shader::TextureType BaseTextureType() const noexcept;