SetStencilTest
This commit is contained in:
parent
628772f685
commit
0f52165e86
2 changed files with 30 additions and 1 deletions
|
@ -387,7 +387,34 @@ namespace Ryujinx.Graphics.Metal
|
||||||
|
|
||||||
public void SetStencilTest(StencilTestDescriptor stencilTest)
|
public void SetStencilTest(StencilTestDescriptor stencilTest)
|
||||||
{
|
{
|
||||||
// TODO
|
var depthStencilDescriptor = new MTLDepthStencilDescriptor
|
||||||
|
{
|
||||||
|
BackFaceStencil = new MTLStencilDescriptor
|
||||||
|
{
|
||||||
|
StencilFailureOperation = stencilTest.BackSFail.Convert(),
|
||||||
|
DepthFailureOperation = stencilTest.BackDpFail.Convert(),
|
||||||
|
DepthStencilPassOperation = stencilTest.BackDpPass.Convert(),
|
||||||
|
StencilCompareFunction = stencilTest.BackFunc.Convert(),
|
||||||
|
ReadMask = (uint)stencilTest.BackFuncMask,
|
||||||
|
WriteMask = (uint)stencilTest.BackMask
|
||||||
|
},
|
||||||
|
FrontFaceStencil = new MTLStencilDescriptor
|
||||||
|
{
|
||||||
|
StencilFailureOperation = stencilTest.FrontSFail.Convert(),
|
||||||
|
DepthFailureOperation = stencilTest.FrontDpFail.Convert(),
|
||||||
|
DepthStencilPassOperation = stencilTest.FrontDpPass.Convert(),
|
||||||
|
StencilCompareFunction = stencilTest.FrontFunc.Convert(),
|
||||||
|
ReadMask = (uint)stencilTest.FrontFuncMask,
|
||||||
|
WriteMask = (uint)stencilTest.FrontMask
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
var depthStencilState = _device.NewDepthStencilState(depthStencilDescriptor);
|
||||||
|
|
||||||
|
if (_currentEncoder is MTLRenderCommandEncoder renderCommandEncoder)
|
||||||
|
{
|
||||||
|
renderCommandEncoder.SetDepthStencilState(depthStencilState);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void SetStorageBuffers(ReadOnlySpan<BufferAssignment> buffers)
|
public void SetStorageBuffers(ReadOnlySpan<BufferAssignment> buffers)
|
||||||
|
|
|
@ -11,6 +11,7 @@ namespace Ryujinx.Graphics.Metal
|
||||||
public PrimitiveTopology Topology = PrimitiveTopology.Triangles;
|
public PrimitiveTopology Topology = PrimitiveTopology.Triangles;
|
||||||
public MTLCullMode CullMode = MTLCullMode.None;
|
public MTLCullMode CullMode = MTLCullMode.None;
|
||||||
public MTLWinding Winding = MTLWinding.Clockwise;
|
public MTLWinding Winding = MTLWinding.Clockwise;
|
||||||
|
public MTLDepthStencilState DepthStencilState = null;
|
||||||
|
|
||||||
public RenderEncoderState(MTLRenderPipelineState renderPipelineState)
|
public RenderEncoderState(MTLRenderPipelineState renderPipelineState)
|
||||||
{
|
{
|
||||||
|
@ -22,6 +23,7 @@ namespace Ryujinx.Graphics.Metal
|
||||||
renderCommandEncoder.SetRenderPipelineState(RenderPipelineState);
|
renderCommandEncoder.SetRenderPipelineState(RenderPipelineState);
|
||||||
renderCommandEncoder.SetCullMode(CullMode);
|
renderCommandEncoder.SetCullMode(CullMode);
|
||||||
renderCommandEncoder.SetFrontFacingWinding(Winding);
|
renderCommandEncoder.SetFrontFacingWinding(Winding);
|
||||||
|
renderCommandEncoder.SetDepthStencilState(DepthStencilState);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue