Fix color mask common, set default value on first color mask register
This commit is contained in:
parent
7920dc1d2f
commit
e872182f7b
4 changed files with 30 additions and 17 deletions
|
@ -72,7 +72,7 @@
|
|||
public GalBlendFactor BlendFuncSrcAlpha;
|
||||
public GalBlendFactor BlendFuncDstAlpha;
|
||||
|
||||
public ColorMaskRgba ColorMask;
|
||||
public bool ColorMaskCommon;
|
||||
public ColorMaskRgba[] ColorMasks;
|
||||
|
||||
public bool PrimitiveRestartEnabled;
|
||||
|
|
|
@ -129,8 +129,6 @@ namespace Ryujinx.Graphics.Gal.OpenGL
|
|||
BlendFuncSrcAlpha = GalBlendFactor.One,
|
||||
BlendFuncDstAlpha = GalBlendFactor.Zero,
|
||||
|
||||
ColorMask = ColorMaskRgba.Default,
|
||||
|
||||
PrimitiveRestartEnabled = false,
|
||||
PrimitiveRestartIndex = 0
|
||||
};
|
||||
|
@ -308,16 +306,30 @@ namespace Ryujinx.Graphics.Gal.OpenGL
|
|||
}
|
||||
}
|
||||
|
||||
for (int Index = 0; Index < GalPipelineState.RenderTargetsCount; Index++)
|
||||
if (New.ColorMaskCommon)
|
||||
{
|
||||
if (!New.ColorMasks[Index].Equals(Old.ColorMasks[Index]))
|
||||
if (!New.ColorMasks[0].Equals(Old.ColorMasks[0]))
|
||||
{
|
||||
GL.ColorMask(
|
||||
Index,
|
||||
New.ColorMasks[Index].Red,
|
||||
New.ColorMasks[Index].Green,
|
||||
New.ColorMasks[Index].Blue,
|
||||
New.ColorMasks[Index].Alpha);
|
||||
New.ColorMasks[0].Red,
|
||||
New.ColorMasks[0].Green,
|
||||
New.ColorMasks[0].Blue,
|
||||
New.ColorMasks[0].Alpha);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
for (int Index = 0; Index < GalPipelineState.RenderTargetsCount; Index++)
|
||||
{
|
||||
if (!New.ColorMasks[Index].Equals(Old.ColorMasks[Index]))
|
||||
{
|
||||
GL.ColorMask(
|
||||
Index,
|
||||
New.ColorMasks[Index].Red,
|
||||
New.ColorMasks[Index].Green,
|
||||
New.ColorMasks[Index].Blue,
|
||||
New.ColorMasks[Index].Alpha);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -64,6 +64,10 @@ namespace Ryujinx.Graphics
|
|||
{
|
||||
UploadedKeys[i] = new List<long>();
|
||||
}
|
||||
|
||||
//Ensure that all components are enabled by default.
|
||||
//Is this correct?
|
||||
WriteRegister(NvGpuEngine3dReg.ColorMaskN, 0x1111);
|
||||
}
|
||||
|
||||
public void CallMethod(NvGpuVmm Vmm, NvGpuPBEntry PBEntry)
|
||||
|
@ -417,16 +421,13 @@ namespace Ryujinx.Graphics
|
|||
|
||||
private void SetColorMask(GalPipelineState State)
|
||||
{
|
||||
int ColorMask = ReadRegister(NvGpuEngine3dReg.ColorMask);
|
||||
bool ColorMaskCommon = ReadRegisterBool(NvGpuEngine3dReg.ColorMaskCommon);
|
||||
|
||||
State.ColorMask.Red = ((ColorMask >> 0) & 0xf) != 0;
|
||||
State.ColorMask.Green = ((ColorMask >> 4) & 0xf) != 0;
|
||||
State.ColorMask.Blue = ((ColorMask >> 8) & 0xf) != 0;
|
||||
State.ColorMask.Alpha = ((ColorMask >> 12) & 0xf) != 0;
|
||||
State.ColorMaskCommon = ColorMaskCommon;
|
||||
|
||||
for (int Index = 0; Index < GalPipelineState.RenderTargetsCount; Index++)
|
||||
{
|
||||
ColorMask = ReadRegister(NvGpuEngine3dReg.ColorMaskN + Index);
|
||||
int ColorMask = ReadRegister(NvGpuEngine3dReg.ColorMaskN + (ColorMaskCommon ? 0 : Index));
|
||||
|
||||
State.ColorMasks[Index].Red = ((ColorMask >> 0) & 0xf) != 0;
|
||||
State.ColorMasks[Index].Green = ((ColorMask >> 4) & 0xf) != 0;
|
||||
|
|
|
@ -23,7 +23,7 @@ namespace Ryujinx.Graphics
|
|||
StencilBackFuncRef = 0x3d5,
|
||||
StencilBackMask = 0x3d6,
|
||||
StencilBackFuncMask = 0x3d7,
|
||||
ColorMask = 0x3e4,
|
||||
ColorMaskCommon = 0x3e4,
|
||||
RTSeparateFragData = 0x3eb,
|
||||
ZetaAddress = 0x3f8,
|
||||
ZetaFormat = 0x3fa,
|
||||
|
|
Loading…
Add table
Reference in a new issue