From 120fe6b74a0d2903471bfaeb25ef8265712fc576 Mon Sep 17 00:00:00 2001
From: greggameplayer <33609333+greggameplayer@users.noreply.github.com>
Date: Thu, 19 Jul 2018 01:26:28 +0200
Subject: [PATCH] Implement BF10GF11RF11 TextureFormat (#246)

* add BF10GF11RF11 TextureFormat

* return correct PixelFormat & PixelType

* return correct texture size

* return correct Bytes Per Pixel

* correct PixelType
---
 Ryujinx.Graphics/Gal/GalTextureFormat.cs        | 1 +
 Ryujinx.Graphics/Gal/OpenGL/OGLEnumConverter.cs | 1 +
 Ryujinx.HLE/Gpu/Texture/TextureHelper.cs        | 1 +
 Ryujinx.HLE/Gpu/Texture/TextureReader.cs        | 1 +
 4 files changed, 4 insertions(+)

diff --git a/Ryujinx.Graphics/Gal/GalTextureFormat.cs b/Ryujinx.Graphics/Gal/GalTextureFormat.cs
index f1e025f2a2..c478428325 100644
--- a/Ryujinx.Graphics/Gal/GalTextureFormat.cs
+++ b/Ryujinx.Graphics/Gal/GalTextureFormat.cs
@@ -14,6 +14,7 @@ namespace Ryujinx.Graphics.Gal
         G8R8         = 0x18,
         R16          = 0x1b,
         R8           = 0x1d,
+        BF10GF11RF11 = 0x21,
         BC1          = 0x24,
         BC2          = 0x25,
         BC3          = 0x26,
diff --git a/Ryujinx.Graphics/Gal/OpenGL/OGLEnumConverter.cs b/Ryujinx.Graphics/Gal/OpenGL/OGLEnumConverter.cs
index 2b0b7403a3..9004e9bae2 100644
--- a/Ryujinx.Graphics/Gal/OpenGL/OGLEnumConverter.cs
+++ b/Ryujinx.Graphics/Gal/OpenGL/OGLEnumConverter.cs
@@ -139,6 +139,7 @@ namespace Ryujinx.Graphics.Gal.OpenGL
                 case GalTextureFormat.R16:          return (PixelFormat.Red,            PixelType.HalfFloat);
                 case GalTextureFormat.R8:           return (PixelFormat.Red,            PixelType.UnsignedByte);
                 case GalTextureFormat.ZF32:         return (PixelFormat.DepthComponent, PixelType.Float);
+                case GalTextureFormat.BF10GF11RF11: return (PixelFormat.Rgb,            PixelType.UnsignedInt10F11F11FRev);
                 case GalTextureFormat.Z24S8:        return (PixelFormat.DepthStencil,   PixelType.UnsignedInt248);
             }
 
diff --git a/Ryujinx.HLE/Gpu/Texture/TextureHelper.cs b/Ryujinx.HLE/Gpu/Texture/TextureHelper.cs
index e934e363d8..de26c397d5 100644
--- a/Ryujinx.HLE/Gpu/Texture/TextureHelper.cs
+++ b/Ryujinx.HLE/Gpu/Texture/TextureHelper.cs
@@ -37,6 +37,7 @@ namespace Ryujinx.HLE.Gpu.Texture
                 case GalTextureFormat.A8B8G8R8:
                 case GalTextureFormat.R32:
                 case GalTextureFormat.ZF32:
+                case GalTextureFormat.BF10GF11RF11:
                 case GalTextureFormat.Z24S8:
                     return Texture.Width * Texture.Height * 4;
 
diff --git a/Ryujinx.HLE/Gpu/Texture/TextureReader.cs b/Ryujinx.HLE/Gpu/Texture/TextureReader.cs
index 3a5037bbb7..26129877ab 100644
--- a/Ryujinx.HLE/Gpu/Texture/TextureReader.cs
+++ b/Ryujinx.HLE/Gpu/Texture/TextureReader.cs
@@ -14,6 +14,7 @@ namespace Ryujinx.HLE.Gpu.Texture
                 case GalTextureFormat.R16G16B16A16: return Read8Bpp                  (Memory, Texture);
                 case GalTextureFormat.A8B8G8R8:     return Read4Bpp                  (Memory, Texture);
                 case GalTextureFormat.R32:          return Read4Bpp                  (Memory, Texture);
+                case GalTextureFormat.BF10GF11RF11: return Read4Bpp                  (Memory, Texture);
                 case GalTextureFormat.Z24S8:        return Read4Bpp                  (Memory, Texture);
                 case GalTextureFormat.A1B5G5R5:     return Read5551                  (Memory, Texture);
                 case GalTextureFormat.B5G6R5:       return Read565                   (Memory, Texture);