From 2852ddf510ecfeb3432ef7e75cd774b347cd66be Mon Sep 17 00:00:00 2001 From: gdk Date: Thu, 14 Apr 2022 23:19:28 -0300 Subject: [PATCH] Fix A1B5G5R5 texture format and support R4G4 on Vulkan --- Ryujinx.Graphics.Vulkan/FormatTable.cs | 1 + Ryujinx.Graphics.Vulkan/TextureView.cs | 10 ++++++++++ Ryujinx.Graphics.Vulkan/VulkanGraphicsDevice.cs | 2 +- 3 files changed, 12 insertions(+), 1 deletion(-) diff --git a/Ryujinx.Graphics.Vulkan/FormatTable.cs b/Ryujinx.Graphics.Vulkan/FormatTable.cs index 6f1e0b54a..439d492ce 100644 --- a/Ryujinx.Graphics.Vulkan/FormatTable.cs +++ b/Ryujinx.Graphics.Vulkan/FormatTable.cs @@ -68,6 +68,7 @@ namespace Ryujinx.Graphics.Vulkan Add(Format.D32FloatS8Uint, VkFormat.D32SfloatS8Uint); Add(Format.R8G8B8X8Srgb, VkFormat.R8G8B8Srgb); Add(Format.R8G8B8A8Srgb, VkFormat.R8G8B8A8Srgb); + Add(Format.R4G4Unorm, VkFormat.R4G4UnormPack8); Add(Format.R4G4B4A4Unorm, VkFormat.R4G4B4A4UnormPack16); Add(Format.R5G5B5X1Unorm, VkFormat.A1R5G5B5UnormPack16); Add(Format.R5G5B5A1Unorm, VkFormat.A1R5G5B5UnormPack16); diff --git a/Ryujinx.Graphics.Vulkan/TextureView.cs b/Ryujinx.Graphics.Vulkan/TextureView.cs index a8bad9537..7e1350eea 100644 --- a/Ryujinx.Graphics.Vulkan/TextureView.cs +++ b/Ryujinx.Graphics.Vulkan/TextureView.cs @@ -84,6 +84,16 @@ namespace Ryujinx.Graphics.Vulkan swizzleR = tempG; swizzleA = tempB; } + else if (info.Format == GAL.Format.A1B5G5R5Unorm) + { + var tempB = swizzleB; + var tempA = swizzleA; + + swizzleB = swizzleG; + swizzleA = swizzleR; + swizzleR = tempA; + swizzleG = tempB; + } var componentMapping = new ComponentMapping(swizzleR, swizzleG, swizzleB, swizzleA); diff --git a/Ryujinx.Graphics.Vulkan/VulkanGraphicsDevice.cs b/Ryujinx.Graphics.Vulkan/VulkanGraphicsDevice.cs index 177bb0824..d6b81dfe1 100644 --- a/Ryujinx.Graphics.Vulkan/VulkanGraphicsDevice.cs +++ b/Ryujinx.Graphics.Vulkan/VulkanGraphicsDevice.cs @@ -310,7 +310,7 @@ namespace Ryujinx.Graphics.Vulkan supportsAstcCompression: features.TextureCompressionAstcLdr, supports3DTextureCompression: true, supportsBgraFormat: true, - supportsR4G4Format: false, + supportsR4G4Format: FormatCapabilities.FormatSupports(GAL.Format.R4G4Unorm, FormatFeatureFlags.FormatFeatureSampledImageBit), supportsFragmentShaderInterlock: SupportsFragmentShaderInterlock, supportsFragmentShaderOrderingIntel: false, supportsGeometryShaderPassthrough: SupportsGeometryShaderPassthrough,