fix(diagnostics): add render-phase crash markers and improve signal handling

Add signal-safe render-phase markers throughout GameScreen::render() and
Application::render() so the crash handler can report which render call was
active when a SIGSEGV occurs. The AMD RADV crash backtrace only shows 2
frames due to missing frame pointers, making it impossible to identify the
actual crash site.

Changes:
- Add volatile g_crashRenderPhase marker updated before each major render call
- Upgrade Linux signal handler to sigaction with SA_SIGINFO for faulting address
- Set ImGui CheckVkResultFn to log silent Vulkan errors in ImGui backend
- Enable -fno-omit-frame-pointer in all build configs (not just Debug/RelWithDebInfo)
This commit is contained in:
Kelsi 2026-04-03 20:19:33 -07:00
parent b092bc2e90
commit 82267320b0
6 changed files with 104 additions and 29 deletions

View file

@ -2133,15 +2133,22 @@ void Application::update(float deltaTime) {
}
}
// Render-phase marker from game_screen.cpp — updated here for 3D/submit phases
} } // close wowee::core temporarily
extern volatile const char* g_crashRenderPhase;
namespace wowee { namespace core {
void Application::render() {
if (!renderer) {
return;
}
g_crashRenderPhase = "beginFrame";
renderer->beginFrame();
// Only render 3D world when in-game
if (state == AppState::IN_GAME) {
g_crashRenderPhase = "renderWorld";
if (world) {
renderer->renderWorld(world.get(), gameHandler.get());
} else {
@ -2151,15 +2158,19 @@ void Application::render() {
// Render performance HUD (within ImGui frame, before UI ends the frame)
if (renderer) {
g_crashRenderPhase = "renderHUD";
renderer->renderHUD();
}
// Render UI on top (ends ImGui frame with ImGui::Render())
if (uiManager) {
g_crashRenderPhase = "uiRender";
uiManager->render(state, authHandler.get(), gameHandler.get());
}
g_crashRenderPhase = "endFrame";
renderer->endFrame();
g_crashRenderPhase = "idle";
}
void Application::setupUICallbacks() {