Fix regression to properly resume render pass when flushing barriers mid-pass

141a8de0da
This commit is contained in:
2026-05-07 09:03:22 +02:00
parent 6cc8f693f3
commit bdabcd5e43
2 changed files with 5 additions and 2 deletions
@@ -446,7 +446,7 @@ void GPUContextVulkan::BeginRenderPass()
if (_drawPass && _drawPass->RenderTargetsActions)
{
GPUDrawPassAction action = _drawPass->RenderTargetsActions[i];
if ((uint32)action & (uint32)GPUDrawPassAction::Clear)
if ((uint32)action & (uint32)GPUDrawPassAction::Clear && _drawPassCanClear)
layout.LoadClear |= mask;
else if (((uint32)action & (uint32)GPUDrawPassAction::LoadMask) == 0)
layout.LoadDontCare |= mask;
@@ -480,7 +480,7 @@ void GPUContextVulkan::BeginRenderPass()
if (_drawPass)
{
GPUDrawPassAction action = _drawPass->DepthAction;
if ((uint32)action & (uint32)GPUDrawPassAction::Clear)
if ((uint32)action & (uint32)GPUDrawPassAction::Clear && _drawPassCanClear)
layout.LoadClear |= mask;
else if (((uint32)action & (uint32)GPUDrawPassAction::LoadMask) == 0)
layout.LoadDontCare |= mask;
@@ -516,6 +516,7 @@ void GPUContextVulkan::BeginRenderPass()
framebufferKey.RenderPass = renderPass;
auto framebuffer = _device->GetOrCreateFramebuffer(framebufferKey, layout.Extent, layout.Layers);
_renderPass = renderPass;
_drawPassCanClear = false;
FlushBarriers();
@@ -2009,6 +2010,7 @@ void GPUContextVulkan::BeginDrawPass(GPUDrawPass& pass)
_drawPass = &pass;
_rtDirtyFlag = true;
_psDirtyFlag = true;
_drawPassCanClear = true;
_rtCount = pass.RenderTargetsCount;
_rtDepth = (GPUTextureViewVulkan*)pass.DepthBuffer;
Platform::MemoryCopy(_rtHandles, pass.RenderTargets, pass.RenderTargetsCount * sizeof(void*));
@@ -84,6 +84,7 @@ private:
int32 _psDirtyFlag : 1;
int32 _rtDirtyFlag : 1;
int32 _cbDirtyFlag : 1;
int32 _drawPassCanClear : 1;
int32 _depthBoundsEnable : 1;
int32 _rtCount;