From d6458ee253deab4c753b1926aed63024ef7403ff Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Branimir=20Karad=C5=BEi=C4=87?= Date: Wed, 22 Apr 2026 16:34:12 -0700 Subject: [PATCH] Metal: Fixed depth/stencil store action on the main swap chain when using MSAA. (#3683) --- src/renderer_mtl.cpp | 46 +++++++++++++++++--------------------------- 1 file changed, 18 insertions(+), 28 deletions(-) diff --git a/src/renderer_mtl.cpp b/src/renderer_mtl.cpp index 45f466d4c..bdb9610a9 100644 --- a/src/renderer_mtl.cpp +++ b/src/renderer_mtl.cpp @@ -4751,17 +4751,15 @@ static_assert(BX_COUNTOF(s_accessNames) == Access::Count, "Invalid s_accessNames desc->setLoadAction(MTL::LoadActionLoad); } - if (NULL != m_capture - && !isValid(fbh) - && m_hasStoreActionStoreAndMultisampleResolve) - { - desc->setStoreAction(desc->texture()->sampleCount() > 1 ? MTL::StoreActionStoreAndMultisampleResolve : MTL::StoreActionStore); + const MTL::StoreAction multisampleStoreAction = m_hasStoreActionStoreAndMultisampleResolve + ? MTL::StoreActionStoreAndMultisampleResolve + : MTL::StoreActionMultisampleResolve + ; - } - else - { - desc->setStoreAction(desc->texture()->sampleCount() > 1 ? MTL::StoreActionMultisampleResolve : MTL::StoreActionStore); - } + desc->setStoreAction(desc->texture()->sampleCount() > 1 + ? multisampleStoreAction + : MTL::StoreActionStore + ); } } @@ -4774,10 +4772,7 @@ static_assert(BX_COUNTOF(s_accessNames) == Access::Count, "Invalid s_accessNames ? MTL::LoadActionClear : MTL::LoadActionLoad) ; - depthAttachment->setStoreAction(NULL != m_mainFrameBuffer.m_swapChain && NULL != m_mainFrameBuffer.m_swapChain->m_backBufferColorMsaa - ? MTL::StoreActionDontCare - : MTL::StoreActionStore) - ; + depthAttachment->setStoreAction(MTL::StoreActionStore); } MTL::RenderPassStencilAttachmentDescriptor* stencilAttachment = renderPassDescriptor->stencilAttachment(); @@ -4789,10 +4784,7 @@ static_assert(BX_COUNTOF(s_accessNames) == Access::Count, "Invalid s_accessNames ? MTL::LoadActionClear : MTL::LoadActionLoad) ; - stencilAttachment->setStoreAction(NULL != m_mainFrameBuffer.m_swapChain && NULL != m_mainFrameBuffer.m_swapChain->m_backBufferColorMsaa - ? MTL::StoreActionDontCare - : MTL::StoreActionStore) - ; + stencilAttachment->setStoreAction(MTL::StoreActionStore); } } else @@ -4804,17 +4796,15 @@ static_assert(BX_COUNTOF(s_accessNames) == Access::Count, "Invalid s_accessNames { desc->setLoadAction(MTL::LoadActionLoad); - if (NULL != m_capture - && !isValid(fbh) - && m_hasStoreActionStoreAndMultisampleResolve) - { - desc->setStoreAction(desc->texture()->sampleCount() > 1 ? MTL::StoreActionStoreAndMultisampleResolve : MTL::StoreActionStore); + const MTL::StoreAction multisampleStoreAction = m_hasStoreActionStoreAndMultisampleResolve + ? MTL::StoreActionStoreAndMultisampleResolve + : MTL::StoreActionMultisampleResolve + ; - } - else - { - desc->setStoreAction(desc->texture()->sampleCount() > 1 ? MTL::StoreActionMultisampleResolve : MTL::StoreActionStore); - } + desc->setStoreAction(desc->texture()->sampleCount() > 1 + ? multisampleStoreAction + : MTL::StoreActionStore + ); } }