diff options
author | GPUCode <geoster3d@gmail.com> | 2023-06-06 22:10:06 +0200 |
---|---|---|
committer | bunnei <bunneidev@gmail.com> | 2023-06-28 03:00:09 +0200 |
commit | eac46ad7ceca5e35b396a8b80bfc38dc6ef1a4fe (patch) | |
tree | 761e98947d8e26a6409e24befa99cd127f67458d /src/video_core/renderer_vulkan/maxwell_to_vk.cpp | |
parent | renderer_vulkan: Add more feature checking (diff) | |
download | yuzu-eac46ad7ceca5e35b396a8b80bfc38dc6ef1a4fe.tar yuzu-eac46ad7ceca5e35b396a8b80bfc38dc6ef1a4fe.tar.gz yuzu-eac46ad7ceca5e35b396a8b80bfc38dc6ef1a4fe.tar.bz2 yuzu-eac46ad7ceca5e35b396a8b80bfc38dc6ef1a4fe.tar.lz yuzu-eac46ad7ceca5e35b396a8b80bfc38dc6ef1a4fe.tar.xz yuzu-eac46ad7ceca5e35b396a8b80bfc38dc6ef1a4fe.tar.zst yuzu-eac46ad7ceca5e35b396a8b80bfc38dc6ef1a4fe.zip |
Diffstat (limited to 'src/video_core/renderer_vulkan/maxwell_to_vk.cpp')
-rw-r--r-- | src/video_core/renderer_vulkan/maxwell_to_vk.cpp | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/src/video_core/renderer_vulkan/maxwell_to_vk.cpp b/src/video_core/renderer_vulkan/maxwell_to_vk.cpp index 9a0b10568..a8540339d 100644 --- a/src/video_core/renderer_vulkan/maxwell_to_vk.cpp +++ b/src/video_core/renderer_vulkan/maxwell_to_vk.cpp @@ -259,6 +259,26 @@ FormatInfo SurfaceFormat(const Device& device, FormatType format_type, bool with break; } } + // Transcode on hardware that doesn't support BCn natively + if (!device.IsOptimalBcnSupported() && VideoCore::Surface::IsPixelFormatBCn(pixel_format)) { + const bool is_srgb = with_srgb && VideoCore::Surface::IsPixelFormatSRGB(pixel_format); + if (pixel_format == PixelFormat::BC4_SNORM) { + tuple.format = VK_FORMAT_R8_SNORM; + } else if (pixel_format == PixelFormat::BC4_UNORM) { + tuple.format = VK_FORMAT_R8_UNORM; + } else if (pixel_format == PixelFormat::BC5_SNORM) { + tuple.format = VK_FORMAT_R8G8_SNORM; + } else if (pixel_format == PixelFormat::BC5_UNORM) { + tuple.format = VK_FORMAT_R8G8_UNORM; + } else if (pixel_format == PixelFormat::BC6H_SFLOAT || + pixel_format == PixelFormat::BC6H_UFLOAT) { + tuple.format = VK_FORMAT_R16G16B16A16_SFLOAT; + } else if (is_srgb) { + tuple.format = VK_FORMAT_A8B8G8R8_SRGB_PACK32; + } else { + tuple.format = VK_FORMAT_A8B8G8R8_UNORM_PACK32; + } + } const bool attachable = (tuple.usage & Attachable) != 0; const bool storage = (tuple.usage & Storage) != 0; |