Skip to content

Commit

Permalink
Stencil and transparent geo fixes
Browse files Browse the repository at this point in the history
  • Loading branch information
IsaacMarovitz committed Jan 9, 2025
1 parent 1bcef07 commit e51c9b3
Show file tree
Hide file tree
Showing 2 changed files with 9 additions and 8 deletions.
14 changes: 7 additions & 7 deletions core/rend/metal/metal_pipeline.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -301,20 +301,20 @@ void MetalPipelineManager::CreateDepthStencilState(u32 listType, bool sortTriang
stencilDescriptor->setStencilFailureOperation(MTL::StencilOperationKeep);
stencilDescriptor->setDepthFailureOperation(MTL::StencilOperationKeep);

if (shadowed) {
stencilDescriptor->setDepthStencilPassOperation(MTL::StencilOperationReplace);
stencilDescriptor->setStencilCompareFunction(MTL::CompareFunctionAlways);
stencilDescriptor->setReadMask(0);
stencilDescriptor->setWriteMask(0x80);
} else {
stencilDescriptor->setStencilFailureOperation(MTL::StencilOperationKeep);
stencilDescriptor->setDepthFailureOperation(MTL::StencilOperationKeep);
stencilDescriptor->setDepthStencilPassOperation(MTL::StencilOperationKeep);
stencilDescriptor->setStencilCompareFunction(MTL::CompareFunctionNever);
}

descriptor->setDepthCompareFunction(compareFunction);
descriptor->setDepthWriteEnabled(depthWriteEnabled);
descriptor->setBackFaceStencil(stencilDescriptor);
descriptor->setFrontFaceStencil(stencilDescriptor);

if (shadowed) {
descriptor->setBackFaceStencil(stencilDescriptor);
descriptor->setFrontFaceStencil(stencilDescriptor);
}

auto state = MetalContext::Instance()->GetDevice()->newDepthStencilState(descriptor);

Expand Down
3 changes: 2 additions & 1 deletion core/rend/metal/metal_renderer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -204,6 +204,8 @@ void MetalRenderer::SetBaseScissor(MTL::Viewport viewport) {

void MetalRenderer::DrawPoly(MTL::RenderCommandEncoder *encoder, u32 listType, bool sortTriangles, const PolyParam &poly, u32 first, u32 count)
{
encoder->setVertexBuffer(curMainBuffer, offsets.vertexUniformOffset, 0);

MTL::ScissorRect scissorRect {};
TileClipping tileClip = SetTileClip(encoder, poly.tileclip, scissorRect);

Expand Down Expand Up @@ -533,7 +535,6 @@ bool MetalRenderer::Draw(const MetalTexture *fogTexture, const MetalTexture *pal

UploadMainBuffer(vtxUniforms, fragUniforms);

renderEncoder->setVertexBuffer(curMainBuffer, offsets.vertexUniformOffset, 0);
renderEncoder->setVertexBuffer(curMainBuffer, 0, 30);
renderEncoder->setFragmentBuffer(curMainBuffer, offsets.fragmentUniformOffset, 0);

Expand Down

0 comments on commit e51c9b3

Please sign in to comment.