diff options
| author | gdkchan <gab.dark.100@gmail.com> | 2018-11-28 21:09:44 -0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2018-11-28 21:09:44 -0200 |
| commit | 59964f667c38d9d0550a3b5ef3970433493f4991 (patch) | |
| tree | 92f5545ee7f8ef0fa216f7d87f94963f6530a1a7 /Ryujinx.Graphics/NvGpuEngine2d.cs | |
| parent | 00579927e43bf55ee06ae02933c1e755fb4120eb (diff) | |
Add support for bigger UBOs, fix sRGB regression, small improvement t… (#503)
* Add support for bigger UBOs, fix sRGB regression, small improvement to the 2D copy engine
* Break into multiple lines
* Read fractions for source/step values on the 2d copy engine aswell
* Use fixed point math for more speed
* Fix reinterpret when texture sizes are different
Diffstat (limited to 'Ryujinx.Graphics/NvGpuEngine2d.cs')
| -rw-r--r-- | Ryujinx.Graphics/NvGpuEngine2d.cs | 33 |
1 files changed, 25 insertions, 8 deletions
diff --git a/Ryujinx.Graphics/NvGpuEngine2d.cs b/Ryujinx.Graphics/NvGpuEngine2d.cs index f20f8d6e..43fbcedf 100644 --- a/Ryujinx.Graphics/NvGpuEngine2d.cs +++ b/Ryujinx.Graphics/NvGpuEngine2d.cs @@ -61,8 +61,11 @@ namespace Ryujinx.Graphics int DstBlitW = ReadRegister(NvGpuEngine2dReg.BlitDstW); int DstBlitH = ReadRegister(NvGpuEngine2dReg.BlitDstH); - int SrcBlitX = ReadRegister(NvGpuEngine2dReg.BlitSrcXInt); - int SrcBlitY = ReadRegister(NvGpuEngine2dReg.BlitSrcYInt); + long BlitDuDx = ReadRegisterFixed1_31_32(NvGpuEngine2dReg.BlitDuDxFract); + long BlitDvDy = ReadRegisterFixed1_31_32(NvGpuEngine2dReg.BlitDvDyFract); + + long SrcBlitX = ReadRegisterFixed1_31_32(NvGpuEngine2dReg.BlitSrcXFract); + long SrcBlitY = ReadRegisterFixed1_31_32(NvGpuEngine2dReg.BlitSrcYFract); GalImageFormat SrcImgFormat = ImageUtils.ConvertSurface((GalSurfaceFormat)SrcFormat); GalImageFormat DstImgFormat = ImageUtils.ConvertSurface((GalSurfaceFormat)DstFormat); @@ -99,13 +102,19 @@ namespace Ryujinx.Graphics Gpu.ResourceManager.SendTexture(Vmm, SrcKey, SrcTexture); Gpu.ResourceManager.SendTexture(Vmm, DstKey, DstTexture); + int SrcBlitX1 = (int)(SrcBlitX >> 32); + int SrcBlitY1 = (int)(SrcBlitY >> 32); + + int SrcBlitX2 = (int)(SrcBlitX + DstBlitW * BlitDuDx >> 32); + int SrcBlitY2 = (int)(SrcBlitY + DstBlitH * BlitDvDy >> 32); + Gpu.Renderer.RenderTarget.Copy( SrcKey, DstKey, - SrcBlitX, - SrcBlitY, - SrcBlitX + DstBlitW, - SrcBlitY + DstBlitH, + SrcBlitX1, + SrcBlitY1, + SrcBlitX2, + SrcBlitY2, DstBlitX, DstBlitY, DstBlitX + DstBlitW, @@ -121,8 +130,8 @@ namespace Ryujinx.Graphics DstTexture, SrcAddress, DstAddress, - SrcBlitX, - SrcBlitY, + SrcBlitX1, + SrcBlitY1, DstBlitX, DstBlitY, DstBlitW, @@ -150,6 +159,14 @@ namespace Ryujinx.Graphics Registers[MethCall.Method] = MethCall.Argument; } + private long ReadRegisterFixed1_31_32(NvGpuEngine2dReg Reg) + { + long Low = (uint)ReadRegister(Reg + 0); + long High = (uint)ReadRegister(Reg + 1); + + return Low | (High << 32); + } + private int ReadRegister(NvGpuEngine2dReg Reg) { return Registers[(int)Reg]; |
