mirror of
https://github.com/Kelsidavis/WoWee.git
synced 2026-04-05 04:33:51 +00:00
fix(diagnostics): add sub-phase markers inside Renderer::beginFrame
AMD RADV crash is renderPhase=beginFrame with faultAddr=(nil) — a NULL pointer dereference somewhere in the pre-pass chain. Add granular markers (bf:ubo, bf:minimap, bf:worldmap, bf:preview, bf:shadow, bf:reflection, bf:renderpass) to pinpoint the exact call.
This commit is contained in:
parent
82267320b0
commit
5778ba230d
1 changed files with 9 additions and 0 deletions
|
|
@ -1,3 +1,5 @@
|
|||
extern volatile const char* g_crashRenderPhase;
|
||||
|
||||
#include "rendering/renderer.hpp"
|
||||
#include "rendering/camera.hpp"
|
||||
#include "rendering/camera_controller.hpp"
|
||||
|
|
@ -836,6 +838,7 @@ void Renderer::beginFrame() {
|
|||
if (postProcessPipeline_ && camera) postProcessPipeline_->applyJitter(camera.get());
|
||||
|
||||
// Update per-frame UBO with current camera/lighting state
|
||||
g_crashRenderPhase = "bf:ubo";
|
||||
updatePerFrameUBO();
|
||||
|
||||
// GPU crash diagnostic: skip all pre-passes to isolate crash source
|
||||
|
|
@ -844,6 +847,7 @@ void Renderer::beginFrame() {
|
|||
if (!skipPrePasses) {
|
||||
// --- Off-screen pre-passes (before main render pass) ---
|
||||
// Minimap composite (renders 3x3 tile grid into 768x768 render target)
|
||||
g_crashRenderPhase = "bf:minimap";
|
||||
if (minimap && minimap->isEnabled() && camera) {
|
||||
glm::vec3 minimapCenter = camera->getPosition();
|
||||
if (cameraController && cameraController->isThirdPerson())
|
||||
|
|
@ -851,11 +855,13 @@ void Renderer::beginFrame() {
|
|||
minimap->compositePass(currentCmd, minimapCenter);
|
||||
}
|
||||
// World map composite (renders zone tiles into 1024x768 render target)
|
||||
g_crashRenderPhase = "bf:worldmap";
|
||||
if (worldMap) {
|
||||
worldMap->compositePass(currentCmd);
|
||||
}
|
||||
|
||||
// Character preview composite passes
|
||||
g_crashRenderPhase = "bf:preview";
|
||||
for (auto* preview : activePreviews_) {
|
||||
if (preview && preview->isModelLoaded()) {
|
||||
preview->compositePass(currentCmd, vkCtx->getCurrentFrame());
|
||||
|
|
@ -863,15 +869,18 @@ void Renderer::beginFrame() {
|
|||
}
|
||||
|
||||
// Shadow pre-pass (before main render pass)
|
||||
g_crashRenderPhase = "bf:shadow";
|
||||
if (shadowsEnabled && shadowDepthImage[0] != VK_NULL_HANDLE) {
|
||||
renderShadowPass();
|
||||
}
|
||||
|
||||
// Water reflection pre-pass (renders scene from mirrored camera into 512x512 texture)
|
||||
g_crashRenderPhase = "bf:reflection";
|
||||
renderReflectionPass();
|
||||
} // !skipPrePasses
|
||||
|
||||
// --- Begin render pass ---
|
||||
g_crashRenderPhase = "bf:renderpass";
|
||||
// Select framebuffer: PP off-screen target or swapchain (§4.3 — PostProcessPipeline)
|
||||
VkRenderPassBeginInfo rpInfo{};
|
||||
rpInfo.sType = VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue