Use source texture size when doing reads for texure copy

This commit is contained in:
gdkchan 2018-06-09 00:46:06 -03:00
parent 7822348439
commit 91420a402c
2 changed files with 37 additions and 10 deletions

View file

@ -98,9 +98,19 @@ namespace Ryujinx.Core.Gpu
if (IsFbTexture) if (IsFbTexture)
{ {
//TODO: Change this when the correct frame buffer resolution is used.
//Currently, the frame buffer size is hardcoded to 1280x720.
SrcWidth = 1280;
SrcHeight = 720;
Gpu.Renderer.GetFrameBufferData(Tag, (byte[] Buffer) => Gpu.Renderer.GetFrameBufferData(Tag, (byte[] Buffer) =>
{ {
CopyTexture(Vmm, DstTexture, Buffer); CopyTexture(
Vmm,
DstTexture,
Buffer,
SrcWidth,
SrcHeight);
}); });
} }
else else
@ -109,13 +119,23 @@ namespace Ryujinx.Core.Gpu
byte[] Buffer = Vmm.ReadBytes(SrcAddress, Size); byte[] Buffer = Vmm.ReadBytes(SrcAddress, Size);
CopyTexture(Vmm, DstTexture, Buffer); CopyTexture(
Vmm,
DstTexture,
Buffer,
SrcWidth,
SrcHeight);
} }
} }
private void CopyTexture(NvGpuVmm Vmm, Texture Texture, byte[] Buffer) private void CopyTexture(
NvGpuVmm Vmm,
Texture Texture,
byte[] Buffer,
int Width,
int Height)
{ {
TextureWriter.Write(Vmm, Texture, Buffer); TextureWriter.Write(Vmm, Texture, Buffer, Width, Height);
} }
private long MakeInt64From2xInt32(NvGpuEngine2dReg Reg) private long MakeInt64From2xInt32(NvGpuEngine2dReg Reg)

View file

@ -6,21 +6,28 @@ namespace Ryujinx.Core.Gpu
{ {
static class TextureWriter static class TextureWriter
{ {
public static void Write(IAMemory Memory, Texture Texture, byte[] Data) public static void Write(
IAMemory Memory,
Texture Texture,
byte[] Data,
int Width,
int Height)
{ {
switch (Texture.Format) switch (Texture.Format)
{ {
case GalTextureFormat.A8B8G8R8: Write4Bpp(Memory, Texture, Data); break; case GalTextureFormat.A8B8G8R8: Write4Bpp(Memory, Texture, Data, Width, Height); break;
default: throw new NotImplementedException(Texture.Format.ToString()); default: throw new NotImplementedException(Texture.Format.ToString());
} }
} }
private unsafe static void Write4Bpp(IAMemory Memory, Texture Texture, byte[] Data) private unsafe static void Write4Bpp(
IAMemory Memory,
Texture Texture,
byte[] Data,
int Width,
int Height)
{ {
int Width = Texture.Width;
int Height = Texture.Height;
ISwizzle Swizzle = TextureHelper.GetSwizzle(Texture, Width, 4); ISwizzle Swizzle = TextureHelper.GetSwizzle(Texture, Width, 4);
(AMemory CpuMem, long Position) = TextureHelper.GetMemoryAndPosition( (AMemory CpuMem, long Position) = TextureHelper.GetMemoryAndPosition(