From 49fd76db0fee72870e0b7fee73e6b6380fa00823 Mon Sep 17 00:00:00 2001 From: gdkchan Date: Sun, 10 Jun 2018 01:00:43 -0300 Subject: [PATCH] Fix a small size related issue on MapBufferEx and add the BC7U texture format --- Ryujinx.Core/Gpu/TextureHelper.cs | 1 + Ryujinx.Core/Gpu/TextureReader.cs | 1 + .../OsHle/Services/Nv/NvGpuAS/NvGpuASIoctl.cs | 4 +--- Ryujinx.Graphics/Gal/GalTextureFormat.cs | 1 + Ryujinx.Graphics/Gal/OpenGL/OGLEnumConverter.cs | 11 ++++++----- Ryujinx.Graphics/Gal/OpenGL/OGLTexture.cs | 1 + 6 files changed, 11 insertions(+), 8 deletions(-) diff --git a/Ryujinx.Core/Gpu/TextureHelper.cs b/Ryujinx.Core/Gpu/TextureHelper.cs index 1863bb77..075fbc3e 100644 --- a/Ryujinx.Core/Gpu/TextureHelper.cs +++ b/Ryujinx.Core/Gpu/TextureHelper.cs @@ -44,6 +44,7 @@ namespace Ryujinx.Core.Gpu return W * H * 8; } + case GalTextureFormat.BC7U: case GalTextureFormat.BC2: case GalTextureFormat.BC3: case GalTextureFormat.BC5: diff --git a/Ryujinx.Core/Gpu/TextureReader.cs b/Ryujinx.Core/Gpu/TextureReader.cs index acd17c5d..e6058de1 100644 --- a/Ryujinx.Core/Gpu/TextureReader.cs +++ b/Ryujinx.Core/Gpu/TextureReader.cs @@ -18,6 +18,7 @@ namespace Ryujinx.Core.Gpu case GalTextureFormat.B5G6R5: return Read565 (Memory, Texture); case GalTextureFormat.G8R8: return Read2Bpp (Memory, Texture); case GalTextureFormat.R8: return Read1Bpp (Memory, Texture); + case GalTextureFormat.BC7U: return Read16Bpt4x4(Memory, Texture); case GalTextureFormat.BC1: return Read8Bpt4x4 (Memory, Texture); case GalTextureFormat.BC2: return Read16Bpt4x4(Memory, Texture); case GalTextureFormat.BC3: return Read16Bpt4x4(Memory, Texture); diff --git a/Ryujinx.Core/OsHle/Services/Nv/NvGpuAS/NvGpuASIoctl.cs b/Ryujinx.Core/OsHle/Services/Nv/NvGpuAS/NvGpuASIoctl.cs index 72622471..a69bc3aa 100644 --- a/Ryujinx.Core/OsHle/Services/Nv/NvGpuAS/NvGpuASIoctl.cs +++ b/Ryujinx.Core/OsHle/Services/Nv/NvGpuAS/NvGpuASIoctl.cs @@ -140,11 +140,9 @@ namespace Ryujinx.Core.OsHle.Services.Nv.NvGpuAS if (Size == 0) { - Size = Map.Size; + Size = (uint)Map.Size; } - Size = Map.Size; - int Result = NvResult.Success; //Note: When the fixed offset flag is not set, diff --git a/Ryujinx.Graphics/Gal/GalTextureFormat.cs b/Ryujinx.Graphics/Gal/GalTextureFormat.cs index d61495eb..3bac2f80 100644 --- a/Ryujinx.Graphics/Gal/GalTextureFormat.cs +++ b/Ryujinx.Graphics/Gal/GalTextureFormat.cs @@ -8,6 +8,7 @@ namespace Ryujinx.Graphics.Gal R32 = 0xf, A1B5G5R5 = 0x14, B5G6R5 = 0x15, + BC7U = 0x17, G8R8 = 0x18, R8 = 0x1d, BC1 = 0x24, diff --git a/Ryujinx.Graphics/Gal/OpenGL/OGLEnumConverter.cs b/Ryujinx.Graphics/Gal/OpenGL/OGLEnumConverter.cs index 2a9641fc..50b802c1 100644 --- a/Ryujinx.Graphics/Gal/OpenGL/OGLEnumConverter.cs +++ b/Ryujinx.Graphics/Gal/OpenGL/OGLEnumConverter.cs @@ -76,11 +76,12 @@ namespace Ryujinx.Graphics.Gal.OpenGL { switch (Format) { - case GalTextureFormat.BC1: return PixelInternalFormat.CompressedRgbaS3tcDxt1Ext; - case GalTextureFormat.BC2: return PixelInternalFormat.CompressedRgbaS3tcDxt3Ext; - case GalTextureFormat.BC3: return PixelInternalFormat.CompressedRgbaS3tcDxt5Ext; - case GalTextureFormat.BC4: return PixelInternalFormat.CompressedRedRgtc1; - case GalTextureFormat.BC5: return PixelInternalFormat.CompressedRgRgtc2; + case GalTextureFormat.BC7U: return PixelInternalFormat.CompressedRgbaBptcUnorm; + case GalTextureFormat.BC1: return PixelInternalFormat.CompressedRgbaS3tcDxt1Ext; + case GalTextureFormat.BC2: return PixelInternalFormat.CompressedRgbaS3tcDxt3Ext; + case GalTextureFormat.BC3: return PixelInternalFormat.CompressedRgbaS3tcDxt5Ext; + case GalTextureFormat.BC4: return PixelInternalFormat.CompressedRedRgtc1; + case GalTextureFormat.BC5: return PixelInternalFormat.CompressedRgRgtc2; } throw new NotImplementedException(Format.ToString()); diff --git a/Ryujinx.Graphics/Gal/OpenGL/OGLTexture.cs b/Ryujinx.Graphics/Gal/OpenGL/OGLTexture.cs index 540e4735..d81fcc48 100644 --- a/Ryujinx.Graphics/Gal/OpenGL/OGLTexture.cs +++ b/Ryujinx.Graphics/Gal/OpenGL/OGLTexture.cs @@ -202,6 +202,7 @@ namespace Ryujinx.Graphics.Gal.OpenGL { switch (Format) { + case GalTextureFormat.BC7U: case GalTextureFormat.BC1: case GalTextureFormat.BC2: case GalTextureFormat.BC3: