From 27023e7afc603f2800a79d6bdbf87ce56e039664 Mon Sep 17 00:00:00 2001 From: HorrorTroll Date: Mon, 27 Aug 2018 21:18:21 +0700 Subject: [PATCH] Add R32_G32 texture format (#383) --- Ryujinx.Graphics/Gal/GalTextureFormat.cs | 1 + Ryujinx.Graphics/Gal/ImageFormatConverter.cs | 9 +++++++++ Ryujinx.Graphics/Gal/OpenGL/OGLEnumConverter.cs | 3 +++ Ryujinx.HLE/Gpu/Texture/TextureHelper.cs | 3 +++ Ryujinx.HLE/Gpu/Texture/TextureReader.cs | 1 + 5 files changed, 17 insertions(+) diff --git a/Ryujinx.Graphics/Gal/GalTextureFormat.cs b/Ryujinx.Graphics/Gal/GalTextureFormat.cs index 5ab7be89..ed3d3d85 100644 --- a/Ryujinx.Graphics/Gal/GalTextureFormat.cs +++ b/Ryujinx.Graphics/Gal/GalTextureFormat.cs @@ -4,6 +4,7 @@ namespace Ryujinx.Graphics.Gal { R32G32B32A32 = 0x1, R16G16B16A16 = 0x3, + R32G32 = 0x4, A8B8G8R8 = 0x8, A2B10G10R10 = 0x9, R32 = 0xf, diff --git a/Ryujinx.Graphics/Gal/ImageFormatConverter.cs b/Ryujinx.Graphics/Gal/ImageFormatConverter.cs index 2d20a8a0..f7b79912 100644 --- a/Ryujinx.Graphics/Gal/ImageFormatConverter.cs +++ b/Ryujinx.Graphics/Gal/ImageFormatConverter.cs @@ -75,6 +75,7 @@ namespace Ryujinx.Graphics.Gal { case GalTextureFormat.R32G32B32A32: return GalImageFormat.R32G32B32A32_SINT; case GalTextureFormat.R16G16B16A16: return GalImageFormat.R16G16B16A16_SINT; + case GalTextureFormat.R32G32: return GalImageFormat.R32G32_SINT; case GalTextureFormat.A8B8G8R8: return GalImageFormat.A8B8G8R8_SINT_PACK32; case GalTextureFormat.A2B10G10R10: return GalImageFormat.A2B10G10R10_SINT_PACK32; case GalTextureFormat.R32: return GalImageFormat.R32_SINT; @@ -89,6 +90,7 @@ namespace Ryujinx.Graphics.Gal { case GalTextureFormat.R32G32B32A32: return GalImageFormat.R32G32B32A32_UINT; case GalTextureFormat.R16G16B16A16: return GalImageFormat.R16G16B16A16_UINT; + case GalTextureFormat.R32G32: return GalImageFormat.R32G32_UINT; case GalTextureFormat.A8B8G8R8: return GalImageFormat.A8B8G8R8_UINT_PACK32; case GalTextureFormat.A2B10G10R10: return GalImageFormat.A2B10G10R10_UINT_PACK32; case GalTextureFormat.R32: return GalImageFormat.R32_UINT; @@ -111,6 +113,7 @@ namespace Ryujinx.Graphics.Gal { case GalTextureFormat.R32G32B32A32: return GalImageFormat.R32G32B32A32_SFLOAT; case GalTextureFormat.R16G16B16A16: return GalImageFormat.R16G16B16A16_SFLOAT; + case GalTextureFormat.R32G32: return GalImageFormat.R32G32_SFLOAT; case GalTextureFormat.R32: return GalImageFormat.R32_SFLOAT; case GalTextureFormat.BC6H_SF16: return GalImageFormat.BC6H_SFLOAT_BLOCK; case GalTextureFormat.BC6H_UF16: return GalImageFormat.BC6H_UFLOAT_BLOCK; @@ -142,6 +145,9 @@ namespace Ryujinx.Graphics.Gal case GalFrameBufferFormat.RG8Snorm: return GalImageFormat.R8_SNORM; case GalFrameBufferFormat.RGBA8Snorm: return GalImageFormat.A8B8G8R8_SNORM_PACK32; case GalFrameBufferFormat.RG8Unorm: return GalImageFormat.R8G8_UNORM; + case GalFrameBufferFormat.RG32Float: return GalImageFormat.R32G32_SFLOAT; + case GalFrameBufferFormat.RG32Sint: return GalImageFormat.R32G32_SINT; + case GalFrameBufferFormat.RG32Uint: return GalImageFormat.R32G32_UINT; } throw new NotImplementedException(Format.ToString()); @@ -169,6 +175,9 @@ namespace Ryujinx.Graphics.Gal case GalImageFormat.R16G16B16A16_SFLOAT: case GalImageFormat.R16G16B16A16_SINT: case GalImageFormat.R16G16B16A16_UINT: + case GalImageFormat.R32G32_SFLOAT: + case GalImageFormat.R32G32_SINT: + case GalImageFormat.R32G32_UINT: case GalImageFormat.A8B8G8R8_SNORM_PACK32: case GalImageFormat.A8B8G8R8_UNORM_PACK32: case GalImageFormat.A8B8G8R8_SINT_PACK32: diff --git a/Ryujinx.Graphics/Gal/OpenGL/OGLEnumConverter.cs b/Ryujinx.Graphics/Gal/OpenGL/OGLEnumConverter.cs index 64f670a5..07147cc0 100644 --- a/Ryujinx.Graphics/Gal/OpenGL/OGLEnumConverter.cs +++ b/Ryujinx.Graphics/Gal/OpenGL/OGLEnumConverter.cs @@ -135,6 +135,9 @@ namespace Ryujinx.Graphics.Gal.OpenGL case GalImageFormat.R16G16B16A16_SFLOAT: return (PixelInternalFormat.Rgba16f, PixelFormat.Rgba, PixelType.HalfFloat); case GalImageFormat.R16G16B16A16_SINT: return (PixelInternalFormat.Rgba16i, PixelFormat.RgbaInteger, PixelType.Short); case GalImageFormat.R16G16B16A16_UINT: return (PixelInternalFormat.Rgba16ui, PixelFormat.RgbaInteger, PixelType.UnsignedShort); + case GalImageFormat.R32G32_SFLOAT: return (PixelInternalFormat.Rg32f, PixelFormat.Rg, PixelType.Float); + case GalImageFormat.R32G32_SINT: return (PixelInternalFormat.Rg32i, PixelFormat.RgInteger, PixelType.Int); + case GalImageFormat.R32G32_UINT: return (PixelInternalFormat.Rg32ui, PixelFormat.RgInteger, PixelType.UnsignedInt); case GalImageFormat.A8B8G8R8_SNORM_PACK32: return (PixelInternalFormat.Rgba8Snorm, PixelFormat.Rgba, PixelType.Byte); case GalImageFormat.A8B8G8R8_UNORM_PACK32: return (PixelInternalFormat.Rgba8, PixelFormat.Rgba, PixelType.UnsignedByte); case GalImageFormat.A8B8G8R8_SINT_PACK32: return (PixelInternalFormat.Rgba8i, PixelFormat.RgbaInteger, PixelType.Byte); diff --git a/Ryujinx.HLE/Gpu/Texture/TextureHelper.cs b/Ryujinx.HLE/Gpu/Texture/TextureHelper.cs index 92b608a9..89228b25 100644 --- a/Ryujinx.HLE/Gpu/Texture/TextureHelper.cs +++ b/Ryujinx.HLE/Gpu/Texture/TextureHelper.cs @@ -44,6 +44,9 @@ namespace Ryujinx.HLE.Gpu.Texture case GalImageFormat.R16G16B16A16_SNORM: case GalImageFormat.R16G16B16A16_UINT: case GalImageFormat.R16G16B16A16_UNORM: + case GalImageFormat.R32G32_SFLOAT: + case GalImageFormat.R32G32_SINT: + case GalImageFormat.R32G32_UINT: return Image.Width * Image.Height * 8; case GalImageFormat.A8B8G8R8_SINT_PACK32: diff --git a/Ryujinx.HLE/Gpu/Texture/TextureReader.cs b/Ryujinx.HLE/Gpu/Texture/TextureReader.cs index 19aa25d7..6bbc41ca 100644 --- a/Ryujinx.HLE/Gpu/Texture/TextureReader.cs +++ b/Ryujinx.HLE/Gpu/Texture/TextureReader.cs @@ -12,6 +12,7 @@ namespace Ryujinx.HLE.Gpu.Texture { case GalTextureFormat.R32G32B32A32: return Read16Bpp (Memory, Texture); case GalTextureFormat.R16G16B16A16: return Read8Bpp (Memory, Texture); + case GalTextureFormat.R32G32: return Read8Bpp (Memory, Texture); case GalTextureFormat.A8B8G8R8: return Read4Bpp (Memory, Texture); case GalTextureFormat.A2B10G10R10: return Read4Bpp (Memory, Texture); case GalTextureFormat.R32: return Read4Bpp (Memory, Texture);