This commit is contained in:
Isaac Marovitz 2024-05-19 11:05:50 -04:00
parent 19f53084fc
commit 9e799f5589
No known key found for this signature in database
GPG Key ID: 97250B2B09A132E1
2 changed files with 95 additions and 91 deletions

View File

@ -16,6 +16,12 @@ namespace Ryujinx.Graphics.Metal
Pipeline = true;
DepthStencil = true;
}
public void Clear()
{
Pipeline = false;
DepthStencil = false;
}
}
[SupportedOSPlatform("macos")]

View File

@ -43,9 +43,7 @@ namespace Ryujinx.Graphics.Metal
public MTLRenderCommandEncoder CreateRenderCommandEncoder()
{
// Initialise Pass & State
var renderPassDescriptor = new MTLRenderPassDescriptor();
var renderPipelineDescriptor = new MTLRenderPipelineDescriptor();
for (int i = 0; i < EncoderState.MaxColorAttachments; i++)
{
@ -95,7 +93,6 @@ namespace Ryujinx.Graphics.Metal
}
// Initialise Encoder
var renderCommandEncoder = _pipeline.CommandBuffer.RenderCommandEncoder(renderPassDescriptor);
// Mark all state as dirty to ensure it is set on the encoder
@ -117,16 +114,21 @@ namespace Ryujinx.Graphics.Metal
}
public void RebindState(MTLRenderCommandEncoder renderCommandEncoder)
{
if (_currentState.Dirty.Pipeline)
{
SetPipelineState(renderCommandEncoder);
SetDepthStencilState(renderCommandEncoder);
}
_currentState.Dirty = new();
if (_currentState.Dirty.DepthStencil)
{
SetDepthStencilState(renderCommandEncoder);
}
_currentState.Dirty.Clear();
}
private void SetPipelineState(MTLRenderCommandEncoder renderCommandEncoder) {
if (_currentState.Dirty.Pipeline)
{
var renderPipelineDescriptor = new MTLRenderPipelineDescriptor();
for (int i = 0; i < EncoderState.MaxColorAttachments; i++)
@ -211,7 +213,6 @@ namespace Ryujinx.Graphics.Metal
_currentState.BlendColor.Blue,
_currentState.BlendColor.Alpha);
}
}
public void UpdateIndexBuffer(BufferRange buffer, IndexType type)
{
@ -550,15 +551,12 @@ namespace Ryujinx.Graphics.Metal
}
private void SetDepthStencilState(MTLRenderCommandEncoder renderCommandEncoder)
{
if (_currentState.Dirty.DepthStencil)
{
if (_currentState.DepthStencilState != null)
{
renderCommandEncoder.SetDepthStencilState(_currentState.DepthStencilState.Value);
}
}
}
private void SetDepthClamp(MTLRenderCommandEncoder renderCommandEncoder)
{