diff --git a/src/renderer_vk.cpp b/src/renderer_vk.cpp index b9aefc034..623099d08 100644 --- a/src/renderer_vk.cpp +++ b/src/renderer_vk.cpp @@ -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( diff --git a/src/renderer_webgpu.cpp b/src/renderer_webgpu.cpp index 63a159925..29dcb308e 100644 --- a/src/renderer_webgpu.cpp +++ b/src/renderer_webgpu.cpp @@ -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) ); }