forked from Mirror/Ryujinx
Use source texture size when doing reads for texure copy
This commit is contained in:
parent
7822348439
commit
91420a402c
2 changed files with 37 additions and 10 deletions
|
@ -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)
|
||||||
|
|
|
@ -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(
|
||||||
|
|
Loading…
Reference in a new issue