Sfoglia il codice sorgente

Fix a small size related issue on MapBufferEx and add the BC7U texture format

gdkchan 7 anni fa
parent
commit
49fd76db0f

+ 1 - 0
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:

+ 1 - 0
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);

+ 1 - 3
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,

+ 1 - 0
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,

+ 6 - 5
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());

+ 1 - 0
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: