VK/WGPU: drain a view's blits and uniform cache before its dispatches. VK: block on the swapchain image of window framebuffers on a headless device (#3989)

This commit is contained in:
Branimir Karadžić
2026-09-18 13:41:57 +00:00
committed by GitHub
parent 1512f4d961
commit 1fb47dca7a
2 changed files with 24 additions and 1 deletions
+11 -1
View File
@@ -3476,8 +3476,12 @@ VK_IMPORT_DEVICE
);
}
const bool block = !isValid(_fbh)
|| NULL == m_backBuffer.m_swapChain.m_nwh
;
int64_t start = bx::getHPCounter();
newFrameBuffer.acquire(m_commandBuffer, !isValid(_fbh) );
newFrameBuffer.acquire(m_commandBuffer, block);
m_presentElapsed += bx::getHPCounter() - start;
}
@@ -10778,6 +10782,12 @@ VK_DESTROY
}
}
if (viewChanged)
{
submitUniformCache(ucs, view);
submitBlit(bs, view);
}
// renderpass external subpass dependencies handle graphics -> compute and compute -> graphics
// but not compute -> compute (possibly also across views if they contain no draw calls)
setMemoryBarrier(
+13
View File
@@ -7220,6 +7220,13 @@ WGPU_IMPORT
if (isCompute)
{
if (viewChanged
&& NULL != computePassEncoder)
{
WGPU_CHECK(wgpuComputePassEncoderEnd(computePassEncoder) );
wgpuRelease(computePassEncoder);
}
if (NULL == computePassEncoder)
{
BGFX_WGPU_PROFILER_END();
@@ -7232,6 +7239,12 @@ WGPU_IMPORT
wgpuRelease(renderPassEncoder);
}
if (viewChanged)
{
submitUniformCache(ucs, view);
submitBlit(bs, view);
}
WGPUCommandEncoder cmdEncoder = m_cmd.alloc();
computePassEncoder = WGPU_CHECK(wgpuCommandEncoderBeginComputePass(cmdEncoder, NULL) );
}