From 0c5a915db3ff5e663a422035823851466ed7d0fa Mon Sep 17 00:00:00 2001 From: Kelsi Date: Mon, 2 Mar 2026 08:58:48 -0800 Subject: [PATCH] Guard renderWorld/renderHUD against null command buffer after device lost After VK_ERROR_DEVICE_LOST, beginFrame returns VK_NULL_HANDLE but renderWorld() and renderHUD() were still called, passing the null handle to vkCmdBindPipeline which triggered a validation abort. --- src/rendering/renderer.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/rendering/renderer.cpp b/src/rendering/renderer.cpp index ceb98ac0..746ced7d 100644 --- a/src/rendering/renderer.cpp +++ b/src/rendering/renderer.cpp @@ -3166,6 +3166,9 @@ void Renderer::renderOverlay(const glm::vec4& color) { void Renderer::renderWorld(game::World* world, game::GameHandler* gameHandler) { (void)world; + // Guard against null command buffer (e.g. after VK_ERROR_DEVICE_LOST) + if (currentCmd == VK_NULL_HANDLE) return; + // GPU crash diagnostic: skip ALL world rendering to isolate crash source static const bool skipAll = (std::getenv("WOWEE_SKIP_ALL_RENDER") != nullptr); if (skipAll) return; @@ -3731,6 +3734,7 @@ void Renderer::setTerrainStreaming(bool enabled) { } void Renderer::renderHUD() { + if (currentCmd == VK_NULL_HANDLE) return; if (performanceHUD && camera) { performanceHUD->render(this, camera.get()); }