Skip to content

Commit

Permalink
gpu: Initialize Metal stencil state more aggressively
Browse files Browse the repository at this point in the history
  • Loading branch information
flibitijibibo committed Jan 12, 2025
1 parent 307dac9 commit 4f5f99d
Showing 1 changed file with 20 additions and 4 deletions.
24 changes: 20 additions & 4 deletions src/gpu/metal/SDL_gpu_metal.m
Original file line number Diff line number Diff line change
Expand Up @@ -1121,25 +1121,41 @@ static void METAL_ReleaseGraphicsPipeline(

if (createinfo->target_info.has_depth_stencil_target) {
pipelineDescriptor.depthAttachmentPixelFormat = SDLToMetal_TextureFormat(createinfo->target_info.depth_stencil_format);
pipelineDescriptor.stencilAttachmentPixelFormat = SDLToMetal_TextureFormat(createinfo->target_info.depth_stencil_format);

if (createinfo->depth_stencil_state.enable_stencil_test) {
pipelineDescriptor.stencilAttachmentPixelFormat = SDLToMetal_TextureFormat(createinfo->target_info.depth_stencil_format);
frontStencilDescriptor = [MTLStencilDescriptor new];
backStencilDescriptor = [MTLStencilDescriptor new];

frontStencilDescriptor = [MTLStencilDescriptor new];
if (createinfo->depth_stencil_state.enable_stencil_test) {
frontStencilDescriptor.stencilCompareFunction = SDLToMetal_CompareOp[createinfo->depth_stencil_state.front_stencil_state.compare_op];
frontStencilDescriptor.stencilFailureOperation = SDLToMetal_StencilOp[createinfo->depth_stencil_state.front_stencil_state.fail_op];
frontStencilDescriptor.depthStencilPassOperation = SDLToMetal_StencilOp[createinfo->depth_stencil_state.front_stencil_state.pass_op];
frontStencilDescriptor.depthFailureOperation = SDLToMetal_StencilOp[createinfo->depth_stencil_state.front_stencil_state.depth_fail_op];
frontStencilDescriptor.readMask = createinfo->depth_stencil_state.compare_mask;
frontStencilDescriptor.writeMask = createinfo->depth_stencil_state.write_mask;

backStencilDescriptor = [MTLStencilDescriptor new];
backStencilDescriptor.stencilCompareFunction = SDLToMetal_CompareOp[createinfo->depth_stencil_state.back_stencil_state.compare_op];
backStencilDescriptor.stencilFailureOperation = SDLToMetal_StencilOp[createinfo->depth_stencil_state.back_stencil_state.fail_op];
backStencilDescriptor.depthStencilPassOperation = SDLToMetal_StencilOp[createinfo->depth_stencil_state.back_stencil_state.pass_op];
backStencilDescriptor.depthFailureOperation = SDLToMetal_StencilOp[createinfo->depth_stencil_state.back_stencil_state.depth_fail_op];
backStencilDescriptor.readMask = createinfo->depth_stencil_state.compare_mask;
backStencilDescriptor.writeMask = createinfo->depth_stencil_state.write_mask;
} else {
// This is just a safe default that avoids doing anything to the stencil buffer

frontStencilDescriptor.stencilCompareFunction = MTLCompareFunctionNever;
frontStencilDescriptor.stencilFailureOperation = MTLStencilOperationKeep;
frontStencilDescriptor.depthStencilPassOperation = MTLStencilOperationKeep;
frontStencilDescriptor.depthFailureOperation = MTLStencilOperationKeep;
frontStencilDescriptor.readMask = createinfo->depth_stencil_state.compare_mask;
frontStencilDescriptor.writeMask = createinfo->depth_stencil_state.write_mask;

backStencilDescriptor.stencilCompareFunction = MTLCompareFunctionNever;
backStencilDescriptor.stencilFailureOperation = MTLStencilOperationKeep;
backStencilDescriptor.depthStencilPassOperation = MTLStencilOperationKeep;
backStencilDescriptor.depthFailureOperation = MTLStencilOperationKeep;
backStencilDescriptor.readMask = createinfo->depth_stencil_state.compare_mask;
backStencilDescriptor.writeMask = createinfo->depth_stencil_state.write_mask;
}

depthStencilDescriptor = [MTLDepthStencilDescriptor new];
Expand Down

0 comments on commit 4f5f99d

Please sign in to comment.