Repository navigation
fix(vk): recover from failed masked-clear pipeline creation - #115
Merged
Merged
Conversation
…dles Adapted from NotRexed/Hookshot#1880 commits f002c9048991003b7f4e5253a6a55403f9d83141 and fa04b6fcab179eb51062fe57d0e3fd8a861f1b21. Add production-function fault-injection regression coverage. Co-authored-by: oscarlosu-lab <251827664+oscarlosu-lab@users.noreply.github.com>
soltros
marked this pull request as ready for review
November 11, 2026 04:10
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Masked-clear pipeline construction ignored Vulkan creation results and cached a null pipeline after failure, preventing recovery. This admits only successful nonnull layouts/modules/pipelines, cleans up temporary resources and retries failed keys with bounded backoff.
Fixes #67 (imported NotRexed/Hookshot#1787). The report concerns a source-derived failure path; no player crash or physical-device OOM was reproduced here.
Fragment failure destroys the already-created vertex module. Pipeline failure destroys temporary modules and any partial pipeline, leaving the cache unmodified. A key gets three initial attempts, then one retry every 600 uses of that key. Success clears its failure record; other keys remain independent.
Provenance: NotRexed/Hookshot#1880, commits f002c9048991003b7f4e5253a6a55403f9d83141 and fa04b6fcab179eb51062fe57d0e3fd8a861f1b21 by oscarlosu-lab. Local cherry-picks preserve authorship; the published reconstruction credits that author and adds our behavioral fixtures. Original licensing is retained.
Validation: all 12 actual-function fault-injection cases pass with real Vulkan headers and an authored fake driver/placeholder words, normally and with GCC UBSan. Unchanged base passes the healthy-cache control and fails the other 11 cases. Coverage includes creation errors/null handles, partial-pipeline cleanup, cache reuse, independent keys and exact retry/recovery timing. The fixture explicitly selects its logger overload to compile against the Windows CRT math declarations, and captures compiler diagnostics.
Final Actions at 836f22f: Windows 319 passed, 0 failed, 21 skipped; Linux 331 passed, 0 failed, 9 skipped. Windows Builder, Linux AppImage, actionlint and both focused shader jobs passed. Local full suite: 273 passed, 12 baseline environment failures, 52 skipped; the Vulkan-header fixture was also run explicitly because that local runner did not discover its headers.
No real GPU, Vulkan loader, gameplay session or game-derived assets were used. These results verify failure handling and recovery, not performance or real-world device-loss behavior.