mirror of
https://github.com/Kelsidavis/WoWee.git
synced 2026-04-10 23:03:52 +00:00
fix(vulkan): MSAA crash on AMD RADV due to vkCreateRenderPass2 null dispatch
Some checks are pending
Build / Build (arm64) (push) Waiting to run
Build / Build (x86-64) (push) Waiting to run
Build / Build (macOS arm64) (push) Waiting to run
Build / Build (windows-arm64) (push) Waiting to run
Build / Build (windows-x86-64) (push) Waiting to run
Security / CodeQL (C/C++) (push) Waiting to run
Security / Semgrep (push) Waiting to run
Security / Sanitizer Build (ASan/UBSan) (push) Waiting to run
Some checks are pending
Build / Build (arm64) (push) Waiting to run
Build / Build (x86-64) (push) Waiting to run
Build / Build (macOS arm64) (push) Waiting to run
Build / Build (windows-arm64) (push) Waiting to run
Build / Build (windows-x86-64) (push) Waiting to run
Security / CodeQL (C/C++) (push) Waiting to run
Security / Semgrep (push) Waiting to run
Security / Sanitizer Build (ASan/UBSan) (push) Waiting to run
Instance was created with Vulkan 1.1 but depthResolveSupported_ was gated on the physical device's API version (1.2+ on RADV). This caused vkCreateRenderPass2 (core 1.2) to dispatch through a null function pointer when MSAA was enabled. Now requests 1.2 instance with 1.1 minimum fallback and gates depth resolve on the actual instance API version. Also removes all diagnostic crash-phase instrumentation from the previous investigation.
This commit is contained in:
parent
9c4e61a227
commit
17c16150d6
6 changed files with 22 additions and 89 deletions
13
src/main.cpp
13
src/main.cpp
|
|
@ -27,10 +27,6 @@ static void releaseMouseGrab() {
|
|||
static void releaseMouseGrab() {}
|
||||
#endif
|
||||
|
||||
// Render-phase marker set by GameScreen::render() — lets crash handler
|
||||
// identify which render call was active when backtrace is incomplete.
|
||||
extern volatile const char* g_crashRenderPhase;
|
||||
|
||||
#ifdef __linux__
|
||||
static void crashHandlerSigaction(int sig, siginfo_t* info, void* /*ucontext*/) {
|
||||
releaseMouseGrab();
|
||||
|
|
@ -39,15 +35,14 @@ static void crashHandlerSigaction(int sig, siginfo_t* info, void* /*ucontext*/)
|
|||
const char* sigName = (sig == SIGSEGV) ? "SIGSEGV" :
|
||||
(sig == SIGABRT) ? "SIGABRT" :
|
||||
(sig == SIGFPE) ? "SIGFPE" : "UNKNOWN";
|
||||
const char* phase = (const char*)g_crashRenderPhase;
|
||||
void* faultAddr = info ? info->si_addr : nullptr;
|
||||
fprintf(stderr, "\n=== CRASH: signal %s (%d) renderPhase=%s faultAddr=%p ===\n",
|
||||
sigName, sig, phase ? phase : "?", faultAddr);
|
||||
fprintf(stderr, "\n=== CRASH: signal %s (%d) faultAddr=%p ===\n",
|
||||
sigName, sig, faultAddr);
|
||||
backtrace_symbols_fd(frames, n, STDERR_FILENO);
|
||||
FILE* f = fopen("/tmp/wowee_debug.log", "a");
|
||||
if (f) {
|
||||
fprintf(f, "\n=== CRASH: signal %s (%d) renderPhase=%s faultAddr=%p ===\n",
|
||||
sigName, sig, phase ? phase : "?", faultAddr);
|
||||
fprintf(f, "\n=== CRASH: signal %s (%d) faultAddr=%p ===\n",
|
||||
sigName, sig, faultAddr);
|
||||
fflush(f);
|
||||
backtrace_symbols_fd(frames, n, fileno(f));
|
||||
fclose(f);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue