Skip to content

fix(android-vulkan): bump osu-framework to 2026.502.3; prevent duplicate native crash dumps - #290

Merged
winnerspiros merged 2 commits into
masterfrom
copilot/fix-black-screen-vulkan-issue-again
May 2, 2026
Merged

fix(android-vulkan): bump osu-framework to 2026.502.3; prevent duplicate native crash dumps#290
winnerspiros merged 2 commits into
masterfrom
copilot/fix-black-screen-vulkan-issue-again

Conversation

Copilot AI commented May 2, 2026

Copy link
Copy Markdown

Two independent Vulkan black-screen causes on Adreno 740 (driver 512.676.73), plus a crash log hygiene fix.

vkCmdSetFragmentShadingRateKHR SIGSEGV (pc=0x0)

The driver advertises VK_KHR_fragment_shading_rate and returns a non-null proc addr for vkCmdSetFragmentShadingRateKHR, but the function jumps to 0x0 on call — crashing the Draw thread. The existing if (CmdSetFragmentShadingRate == null) guard is useless because the delegate wraps a broken native stub, not a missing one.

Fixed in veldrid PR #21 by chaining VkPhysicalDeviceFragmentShadingRateFeaturesKHR into vkCreateDevice — the driver then properly initialises the function pointer.

Consumed via osu-framework pack run #212026.502.3 (also includes the PR #20 chunked vkQueueSubmit fix for the Adreno 740 GPU stall / ANR).

Package bump

ppy.osu.Framework / .Android / .iOS: 2026.502.12026.502.3

Duplicate crash dumps (crash_handler.cpp)

g_inHandler is a transient re-entrancy guard — it's reset to 0 before raise(sig) so the chained handler (Mono) can run. If Mono re-raises SIGSEGV via tgkill and our handler has been re-installed between deliveries, it fires again and writes a second full dump.

Added a permanent g_dumpWritten latch (never cleared) so at most one dump is written per process lifetime. On subsequent invocations the handler still chains to g_prevHandlers for the system tombstone; falls back to SIG_DFL if sigaction fails.

// existing transient guard
volatile sig_atomic_t g_inHandler = 0;

// new: set once before first dump, never reset
volatile sig_atomic_t g_dumpWritten = 0;
if (g_dumpWritten) {
    bool restored = false;
    for (size_t i = 0; i < kNumSignals; ++i) {
        if (kSignals[i] == sig) {
            restored = (sigaction(sig, &g_prevHandlers[i], nullptr) == 0);
            break;
        }
    }
    if (!restored) signal(sig, SIG_DFL);
    g_inHandler = 0;
    raise(sig);
    return;
}
g_dumpWritten = 1;

Copilot AI and others added 2 commits May 2, 2026 18:55
…EGV dumps on repeated handler invocation

Agent-Logs-Url: https://github.com/winnerspiros/osu/sessions/ec8eb5f9-a370-4c4b-b106-2a543b35f72f

Co-authored-by: winnerspiros <1675249+winnerspiros@users.noreply.github.com>
@gitar-bot

gitar-bot Bot commented May 2, 2026

Copy link
Copy Markdown

Important

You are using the Gitar free plan. Upgrade to unlock code review, CI analysis, auto-apply, custom automations, and more.

Gitar

@winnerspiros
winnerspiros marked this pull request as ready for review May 2, 2026 19:23
Copilot AI review requested due to automatic review settings May 2, 2026 19:23
@winnerspiros
winnerspiros merged commit c6c586f into master May 2, 2026
15 of 16 checks passed
Copilot AI removed the request for review from Copilot May 2, 2026 19:48
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants