Metal: Fixed depth/stencil store action on the main swap chain when using MSAA. (#3683)

This commit is contained in:
Branimir Karadžić
2026-04-22 16:34:12 -07:00
committed by GitHub
parent 50bf41b224
commit d6458ee253

View File

@@ -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
);
}
}