From da2e08813f0762ef0bedd6d609a15e7db2dbb6e4 Mon Sep 17 00:00:00 2001 From: CamilleLaVey Date: Sat, 29 Nov 2025 18:35:29 -0400 Subject: [PATCH] [vk] TextureType extended --- .../renderer_vulkan/vk_texture_cache.cpp | 31 ++++++++++++------- 1 file changed, 20 insertions(+), 11 deletions(-) diff --git a/src/video_core/renderer_vulkan/vk_texture_cache.cpp b/src/video_core/renderer_vulkan/vk_texture_cache.cpp index 4451c7fed7..202a14bed1 100644 --- a/src/video_core/renderer_vulkan/vk_texture_cache.cpp +++ b/src/video_core/renderer_vulkan/vk_texture_cache.cpp @@ -2359,18 +2359,27 @@ VkImageView ImageView::SampledView(Shader::TextureType texture_type, VkImageView ImageView::StorageView(Shader::TextureType texture_type, Shader::ImageFormat image_format) { - if (image_handle) { - if (image_format == Shader::ImageFormat::Typeless) { - return Handle(texture_type); + if (!image_handle) { + return VK_NULL_HANDLE; + } + const bool is_signed{image_format == Shader::ImageFormat::R8_SINT || + image_format == Shader::ImageFormat::R16_SINT}; + if (!storage_views) { + storage_views.emplace(); + } + if (image_format == Shader::ImageFormat::Typeless) { + auto& view = storage_views->typeless[static_cast(texture_type)]; + if (view) { + return *view; } - const bool is_signed = image_format == Shader::ImageFormat::R8_SINT - || image_format == Shader::ImageFormat::R16_SINT; - if (!storage_views) - storage_views.emplace(); - auto& views{is_signed ? storage_views->signeds : storage_views->unsigneds}; - auto& view{views[size_t(texture_type)]}; - if (!view) - view = MakeView(Format(image_format), VK_IMAGE_ASPECT_COLOR_BIT); + 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) { return *view; } return VK_NULL_HANDLE;