From 47a62e826fe15fce9b7e33f5aa8a04807fe3d172 Mon Sep 17 00:00:00 2001 From: ReinUsesLisp Date: Wed, 19 Sep 2018 22:02:11 -0300 Subject: Implement DepthWriteMask and add R16G16 (#425) --- Ryujinx.Graphics/NvGpuEngine3d.cs | 27 +++++++++++++++++---------- 1 file changed, 17 insertions(+), 10 deletions(-) (limited to 'Ryujinx.Graphics/NvGpuEngine3d.cs') diff --git a/Ryujinx.Graphics/NvGpuEngine3d.cs b/Ryujinx.Graphics/NvGpuEngine3d.cs index a1d0ec80..b19f3063 100644 --- a/Ryujinx.Graphics/NvGpuEngine3d.cs +++ b/Ryujinx.Graphics/NvGpuEngine3d.cs @@ -209,7 +209,7 @@ namespace Ryujinx.Graphics private void SetFrameBuffer(GalPipelineState State) { - State.FramebufferSrgb = (ReadRegister(NvGpuEngine3dReg.FrameBufferSrgb) & 1) != 0; + State.FramebufferSrgb = ReadRegisterBool(NvGpuEngine3dReg.FrameBufferSrgb); State.FlipX = GetFlipSign(NvGpuEngine3dReg.ViewportNScaleX); State.FlipY = GetFlipSign(NvGpuEngine3dReg.ViewportNScaleY); @@ -227,7 +227,7 @@ namespace Ryujinx.Graphics GalMemoryLayout Layout = (GalMemoryLayout)((BlockDim >> 12) & 1); //? - bool ZetaEnable = (ReadRegister(NvGpuEngine3dReg.ZetaEnable) & 1) != 0; + bool ZetaEnable = ReadRegisterBool(NvGpuEngine3dReg.ZetaEnable); if (VA == 0 || ZetaFormat == 0 || !ZetaEnable) { @@ -352,7 +352,7 @@ namespace Ryujinx.Graphics private void SetCullFace(GalPipelineState State) { - State.CullFaceEnabled = (ReadRegister(NvGpuEngine3dReg.CullFaceEnable) & 1) != 0; + State.CullFaceEnabled = ReadRegisterBool(NvGpuEngine3dReg.CullFaceEnable); if (State.CullFaceEnabled) { @@ -362,7 +362,9 @@ namespace Ryujinx.Graphics private void SetDepth(GalPipelineState State) { - State.DepthTestEnabled = (ReadRegister(NvGpuEngine3dReg.DepthTestEnable) & 1) != 0; + State.DepthTestEnabled = ReadRegisterBool(NvGpuEngine3dReg.DepthTestEnable); + + State.DepthWriteEnabled = ReadRegisterBool(NvGpuEngine3dReg.DepthWriteEnable); if (State.DepthTestEnabled) { @@ -372,7 +374,7 @@ namespace Ryujinx.Graphics private void SetStencil(GalPipelineState State) { - State.StencilTestEnabled = (ReadRegister(NvGpuEngine3dReg.StencilEnable) & 1) != 0; + State.StencilTestEnabled = ReadRegisterBool(NvGpuEngine3dReg.StencilEnable); if (State.StencilTestEnabled) { @@ -397,11 +399,11 @@ namespace Ryujinx.Graphics private void SetAlphaBlending(GalPipelineState State) { //TODO: Support independent blend properly. - State.BlendEnabled = (ReadRegister(NvGpuEngine3dReg.IBlendNEnable) & 1) != 0; + State.BlendEnabled = ReadRegisterBool(NvGpuEngine3dReg.IBlendNEnable); if (State.BlendEnabled) { - State.BlendSeparateAlpha = (ReadRegister(NvGpuEngine3dReg.IBlendNSeparateAlpha) & 1) != 0; + State.BlendSeparateAlpha = ReadRegisterBool(NvGpuEngine3dReg.IBlendNSeparateAlpha); State.BlendEquationRgb = (GalBlendEquation)ReadRegister(NvGpuEngine3dReg.IBlendNEquationRgb); State.BlendFuncSrcRgb = (GalBlendFactor)ReadRegister(NvGpuEngine3dReg.IBlendNFuncSrcRgb); @@ -414,7 +416,7 @@ namespace Ryujinx.Graphics private void SetPrimitiveRestart(GalPipelineState State) { - State.PrimitiveRestartEnabled = (ReadRegister(NvGpuEngine3dReg.PrimRestartEnable) & 1) != 0; + State.PrimitiveRestartEnabled = ReadRegisterBool(NvGpuEngine3dReg.PrimRestartEnable); if (State.PrimitiveRestartEnabled) { @@ -424,7 +426,7 @@ namespace Ryujinx.Graphics private void SetRenderTargets() { - bool SeparateFragData = (ReadRegister(NvGpuEngine3dReg.RTSeparateFragData) & 1) != 0; + bool SeparateFragData = ReadRegisterBool(NvGpuEngine3dReg.RTSeparateFragData); if (SeparateFragData) { @@ -635,7 +637,7 @@ namespace Ryujinx.Graphics int VertexDivisor = ReadRegister(NvGpuEngine3dReg.VertexArrayNDivisor + Index * 4); - bool Instanced = (ReadRegister(NvGpuEngine3dReg.VertexArrayNInstance + Index) & 1) != 0; + bool Instanced = ReadRegisterBool(NvGpuEngine3dReg.VertexArrayNInstance + Index); int Stride = Control & 0xfff; @@ -845,6 +847,11 @@ namespace Ryujinx.Graphics return BitConverter.Int32BitsToSingle(ReadRegister(Reg)); } + private bool ReadRegisterBool(NvGpuEngine3dReg Reg) + { + return (ReadRegister(Reg) & 1) != 0; + } + private void WriteRegister(NvGpuEngine3dReg Reg, int Value) { Registers[(int)Reg] = Value; -- cgit v1.2.3