Fix blend state optimisation breaking attachments

Fixes SM3DW
This commit is contained in:
Isaac Marovitz 2024-07-03 23:58:27 +01:00 committed by Isaac Marovitz
parent fd0329f2eb
commit 9d866ff282
2 changed files with 11 additions and 3 deletions

View file

@ -390,11 +390,11 @@ namespace Ryujinx.Graphics.Metal
{ {
_currentState.StoredBlend[i] = mtlBlend; _currentState.StoredBlend[i] = mtlBlend;
mtlBlend = new ColorBlendStateUid(); mtlBlend.Swap(new ColorBlendStateUid());
} }
else if (mtlBlend.WriteMask == 0) else if (mtlBlend.WriteMask == 0)
{ {
mtlBlend = _currentState.StoredBlend[i]; mtlBlend.Swap(_currentState.StoredBlend[i]);
} }
} }
@ -535,7 +535,7 @@ namespace Ryujinx.Graphics.Metal
{ {
_currentState.StoredBlend[index] = blendState; _currentState.StoredBlend[index] = blendState;
blendState = new ColorBlendStateUid(); blendState.Swap(new ColorBlendStateUid());
} }
_currentState.BlendColor = blend.BlendConstant; _currentState.BlendColor = blend.BlendConstant;

View file

@ -111,6 +111,14 @@ namespace Ryujinx.Graphics.Metal
readonly get => ((Id0 >> 63) & 0x1) != 0UL; readonly get => ((Id0 >> 63) & 0x1) != 0UL;
set => Id0 = (Id0 & 0x7FFFFFFFFFFFFFFF) | ((value ? 1UL : 0UL) << 63); set => Id0 = (Id0 & 0x7FFFFFFFFFFFFFFF) | ((value ? 1UL : 0UL) << 63);
} }
public void Swap(ColorBlendStateUid uid)
{
var format = PixelFormat;
this = uid;
PixelFormat = format;
}
} }
[SupportedOSPlatform("macos")] [SupportedOSPlatform("macos")]