Read fractions for source/step values on the 2d copy engine aswell
This commit is contained in:
parent
6bea4ec882
commit
f6d52b62ca
1 changed files with 23 additions and 10 deletions
|
@ -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];
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue