From 616b693f4a9c62a87c16288e0b5889dbfe73fdb7 Mon Sep 17 00:00:00 2001 From: Forrest Keller Date: Sat, 3 Jan 2026 20:47:29 -0600 Subject: [PATCH] Added hack to force float format to fix FLOAT sampler warnings --- .../renderer_vulkan/vk_texture_cache.cpp | 50 ++++++++++++++++++- 1 file changed, 49 insertions(+), 1 deletion(-) diff --git a/src/video_core/renderer_vulkan/vk_texture_cache.cpp b/src/video_core/renderer_vulkan/vk_texture_cache.cpp index cff7a73903..cb0110e86c 100644 --- a/src/video_core/renderer_vulkan/vk_texture_cache.cpp +++ b/src/video_core/renderer_vulkan/vk_texture_cache.cpp @@ -879,6 +879,29 @@ TextureCacheRuntime::TextureCacheRuntime(const Device& device_, Scheduler& sched view_formats[index_a].push_back(view_info.format); } } + + switch (image_format) { + case PixelFormat::R32G32B32A32_UINT: + view_formats[index_a].push_back(VK_FORMAT_R32G32B32A32_SFLOAT); + break; + case PixelFormat::R32_UINT: + view_formats[index_a].push_back(VK_FORMAT_R32_SFLOAT); + break; + case PixelFormat::R32G32_UINT: + view_formats[index_a].push_back(VK_FORMAT_R32G32_SFLOAT); + break; + case PixelFormat::R16G16B16A16_UINT: + view_formats[index_a].push_back(VK_FORMAT_R16G16B16A16_SFLOAT); + break; + case PixelFormat::R16_UINT: + view_formats[index_a].push_back(VK_FORMAT_R16_SFLOAT); + break; + case PixelFormat::A8B8G8R8_UINT: + view_formats[index_a].push_back(VK_FORMAT_R8G8B8A8_UNORM); + break; + default: + break; + } } bl3d_unswizzle_pass.emplace(device, scheduler, descriptor_pool, @@ -2133,7 +2156,32 @@ ImageView::ImageView(TextureCacheRuntime& runtime, const VideoCommon::ImageViewI std::ranges::transform(swizzle, swizzle.begin(), ConvertGreenRed); } } - const auto format_info = MaxwellToVK::SurfaceFormat(*device, FormatType::Optimal, true, format); + + // Hacky fix for reinterpretation for UINT vs FLOAT + PixelFormat view_format = format; + if (!info.IsRenderTarget()) { + switch (format) { + case PixelFormat::R32G32B32A32_UINT: + view_format = PixelFormat::R32G32B32A32_FLOAT; + break; + case PixelFormat::R32_UINT: + view_format = PixelFormat::R32_FLOAT; + break; + case PixelFormat::R32G32_UINT: + view_format = PixelFormat::R32G32_FLOAT; + break; + case PixelFormat::R16G16B16A16_UINT: + view_format = PixelFormat::R16G16B16A16_FLOAT; + break; + case PixelFormat::R16_UINT: + view_format = PixelFormat::R16_FLOAT; + break; + default: + break; + } + } + + const auto format_info = MaxwellToVK::SurfaceFormat(*device, FormatType::Optimal, true, view_format); if (ImageUsageFlags(format_info, format) != image.UsageFlags()) { LOG_WARNING(Render_Vulkan, "Image view format {} has different usage flags than image format {}", format,