Read fractions for source/step values on the 2d copy engine aswell

This commit is contained in:
gdkchan 2018-11-17 18:31:07 -03:00
commit f6d52b62ca

View file

@ -61,11 +61,11 @@ namespace Ryujinx.Graphics
int DstBlitW = ReadRegister(NvGpuEngine2dReg.BlitDstW); int DstBlitW = ReadRegister(NvGpuEngine2dReg.BlitDstW);
int DstBlitH = ReadRegister(NvGpuEngine2dReg.BlitDstH); int DstBlitH = ReadRegister(NvGpuEngine2dReg.BlitDstH);
int BlitDuDx = ReadRegister(NvGpuEngine2dReg.BlitDuDxInt); double BlitDuDx = ReadRegisterFixed1_31_32(NvGpuEngine2dReg.BlitDuDxFract);
int BlitDvDy = ReadRegister(NvGpuEngine2dReg.BlitDvDyInt); double BlitDvDy = ReadRegisterFixed1_31_32(NvGpuEngine2dReg.BlitDvDyFract);
int SrcBlitX = ReadRegister(NvGpuEngine2dReg.BlitSrcXInt); double SrcBlitX = ReadRegisterFixed1_31_32(NvGpuEngine2dReg.BlitSrcXFract);
int SrcBlitY = ReadRegister(NvGpuEngine2dReg.BlitSrcYInt); double SrcBlitY = ReadRegisterFixed1_31_32(NvGpuEngine2dReg.BlitSrcYFract);
GalImageFormat SrcImgFormat = ImageUtils.ConvertSurface((GalSurfaceFormat)SrcFormat); GalImageFormat SrcImgFormat = ImageUtils.ConvertSurface((GalSurfaceFormat)SrcFormat);
GalImageFormat DstImgFormat = ImageUtils.ConvertSurface((GalSurfaceFormat)DstFormat); GalImageFormat DstImgFormat = ImageUtils.ConvertSurface((GalSurfaceFormat)DstFormat);
@ -102,14 +102,17 @@ namespace Ryujinx.Graphics
Gpu.ResourceManager.SendTexture(Vmm, SrcKey, SrcTexture); Gpu.ResourceManager.SendTexture(Vmm, SrcKey, SrcTexture);
Gpu.ResourceManager.SendTexture(Vmm, DstKey, DstTexture); Gpu.ResourceManager.SendTexture(Vmm, DstKey, DstTexture);
int SrcBlitX2 = SrcBlitX + DstBlitW * BlitDuDx; int SrcBlitX1 = (int)SrcBlitX;
int SrcBlitY2 = SrcBlitY + DstBlitH * BlitDvDy; int SrcBlitY1 = (int)SrcBlitY;
int SrcBlitX2 = (int)(SrcBlitX + DstBlitW * BlitDuDx);
int SrcBlitY2 = (int)(SrcBlitY + DstBlitH * BlitDvDy);
Gpu.Renderer.RenderTarget.Copy( Gpu.Renderer.RenderTarget.Copy(
SrcKey, SrcKey,
DstKey, DstKey,
SrcBlitX, SrcBlitX1,
SrcBlitY, SrcBlitY1,
SrcBlitX2, SrcBlitX2,
SrcBlitY2, SrcBlitY2,
DstBlitX, DstBlitX,
@ -127,8 +130,8 @@ namespace Ryujinx.Graphics
DstTexture, DstTexture,
SrcAddress, SrcAddress,
DstAddress, DstAddress,
SrcBlitX, SrcBlitX1,
SrcBlitY, SrcBlitY1,
DstBlitX, DstBlitX,
DstBlitY, DstBlitY,
DstBlitW, DstBlitW,
@ -156,6 +159,16 @@ namespace Ryujinx.Graphics
Registers[MethCall.Method] = MethCall.Argument; Registers[MethCall.Method] = MethCall.Argument;
} }
private double ReadRegisterFixed1_31_32(NvGpuEngine2dReg Reg)
{
long Low = (uint)ReadRegister(Reg + 0);
long High = (uint)ReadRegister(Reg + 1);
long Value = Low | (High << 32);
return Value * (1d / 0x100000000);
}
private int ReadRegister(NvGpuEngine2dReg Reg) private int ReadRegister(NvGpuEngine2dReg Reg)
{ {
return Registers[(int)Reg]; return Registers[(int)Reg];