From 03e8e9986f07020dd8b1afd861dc55938a99849d Mon Sep 17 00:00:00 2001 From: squidbus <175574877+squidbus@users.noreply.github.com> Date: Wed, 25 Dec 2024 19:12:30 -0800 Subject: [PATCH] amdgpu: Add a few more unsupported format remaps. --- src/video_core/amdgpu/resource.h | 24 +++++++++++++++---- .../renderer_vulkan/liverpool_to_vk.cpp | 8 +++---- 2 files changed, 23 insertions(+), 9 deletions(-) diff --git a/src/video_core/amdgpu/resource.h b/src/video_core/amdgpu/resource.h index bf72f4f94..f3b15f64f 100644 --- a/src/video_core/amdgpu/resource.h +++ b/src/video_core/amdgpu/resource.h @@ -61,10 +61,16 @@ private: }; inline DataFormat RemapDataFormat(const DataFormat format) { - if (format == DataFormat::Format11_11_10) { + switch (format) { + case DataFormat::Format11_11_10: return DataFormat::Format10_11_11; + case DataFormat::Format10_10_10_2: + return DataFormat::Format2_10_10_10; + case DataFormat::Format5_5_5_1: + return DataFormat::Format1_5_5_5; + default: + return format; } - return format; } inline NumberFormat RemapNumberFormat(const NumberFormat format) { @@ -72,15 +78,25 @@ inline NumberFormat RemapNumberFormat(const NumberFormat format) { } inline CompMapping RemapComponents(const DataFormat format, const CompMapping components) { - if (format == DataFormat::Format11_11_10) { + switch (format) { + case DataFormat::Format11_11_10: return { .r = components.b, .g = components.g, .b = components.r, .a = components.a, }; + case DataFormat::Format10_10_10_2: + case DataFormat::Format5_5_5_1: + return { + .r = components.a, + .g = components.b, + .b = components.g, + .a = components.r, + }; + default: + return components; } - return components; } // Table 8.5 Buffer Resource Descriptor [Sea Islands Series Instruction Set Architecture] diff --git a/src/video_core/renderer_vulkan/liverpool_to_vk.cpp b/src/video_core/renderer_vulkan/liverpool_to_vk.cpp index dcddb1420..c6e2305ee 100644 --- a/src/video_core/renderer_vulkan/liverpool_to_vk.cpp +++ b/src/video_core/renderer_vulkan/liverpool_to_vk.cpp @@ -568,10 +568,8 @@ std::span SurfaceFormats() { // 10_11_11 CreateSurfaceFormatInfo(AmdGpu::DataFormat::Format10_11_11, AmdGpu::NumberFormat::Float, vk::Format::eB10G11R11UfloatPack32), - // 11_11_10 - CreateSurfaceFormatInfo(AmdGpu::DataFormat::Format11_11_10, AmdGpu::NumberFormat::Float, - vk::Format::eB10G11R11UfloatPack32), - // 10_10_10_2 + // 11_11_10 - Remapped to 10_11_11. + // 10_10_10_2 - Remapped to 2_10_10_10. // 2_10_10_10 CreateSurfaceFormatInfo(AmdGpu::DataFormat::Format2_10_10_10, AmdGpu::NumberFormat::Unorm, vk::Format::eA2B10G10R10UnormPack32), @@ -644,7 +642,7 @@ std::span SurfaceFormats() { // 1_5_5_5 CreateSurfaceFormatInfo(AmdGpu::DataFormat::Format1_5_5_5, AmdGpu::NumberFormat::Unorm, vk::Format::eR5G5B5A1UnormPack16), - // 5_5_5_1 + // 5_5_5_1 - Remapped to 1_5_5_5. // 4_4_4_4 CreateSurfaceFormatInfo(AmdGpu::DataFormat::Format4_4_4_4, AmdGpu::NumberFormat::Unorm, vk::Format::eR4G4B4A4UnormPack16),