From cd07e234851429a5d0aeeacc049604bc769b3984 Mon Sep 17 00:00:00 2001 From: Kelsi Date: Fri, 3 Apr 2026 20:32:18 -0700 Subject: [PATCH] fix(diagnostics): finer beginFrame sub-phase markers for AMD crash Previous markers showed crash before bf:ubo. Add markers at bf:msaa, bf:pp, bf:swap, bf:acquire, bf:jitter to isolate which early beginFrame call does the NULL deref. --- src/rendering/renderer.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/rendering/renderer.cpp b/src/rendering/renderer.cpp index eedffe1e..3366ea91 100644 --- a/src/rendering/renderer.cpp +++ b/src/rendering/renderer.cpp @@ -809,14 +809,17 @@ void Renderer::beginFrame() { if (vkCtx->isDeviceLost()) return; // Apply deferred MSAA change between frames (before any rendering state is used) + g_crashRenderPhase = "bf:msaa"; if (msaaChangePending_) { applyMsaaChange(); } // Post-process resource management (§4.3 — delegates to PostProcessPipeline) + g_crashRenderPhase = "bf:pp"; if (postProcessPipeline_) postProcessPipeline_->manageResources(); // Handle swapchain recreation if needed + g_crashRenderPhase = "bf:swap"; if (vkCtx->isSwapchainDirty()) { (void)vkCtx->recreateSwapchain(window->getWidth(), window->getHeight()); // Rebuild water resources that reference swapchain extent/views @@ -828,6 +831,7 @@ void Renderer::beginFrame() { } // Acquire swapchain image and begin command buffer + g_crashRenderPhase = "bf:acquire"; currentCmd = vkCtx->beginFrame(currentImageIndex); if (currentCmd == VK_NULL_HANDLE) { // Swapchain out of date, will retry next frame @@ -835,6 +839,7 @@ void Renderer::beginFrame() { } // FSR2 jitter pattern (§4.3 — delegates to PostProcessPipeline) + g_crashRenderPhase = "bf:jitter"; if (postProcessPipeline_ && camera) postProcessPipeline_->applyJitter(camera.get()); // Update per-frame UBO with current camera/lighting state