Repository navigation
1.6.0-dev-98357ff
Linux builds failing CI, No Linux build for this release
1.6.0-dev-98357ff (2026-10-15 7:01:14 PM)
Round 7 of the audit re-walked the entire mod with fresh eyes - scaler/present
lifecycle, parser/translator, runner/compiler, tests/CI - and produced 25 new
findings (2 High, 11 Medium, 12 Low) plus a reopened MAINT-03. The Priority
Matrix's entire Immediate row shipped as one low-risk patch the same day,
closing both High findings and the unchecked-SDL-return cluster behind them;
the vendored-SDL3 build break (SDL >= 3.2 made SDL_UploadToGPUTexture return
void) and the CI clang-format gate were fixed on top of it. The WAV-fallback
diagnostics learned to name the failing asset and the MPQ archive it came
from. The ledger stands at 44 open findings (0 High / 14 Medium / 30 Low);
deltas.md remains the single record of closures.
Added
Audio
DEVILUTIONX_WAV_FALLBACKCMake option: builds theSDL_LoadWAV_IO
fallback path that recovers the WAV files SDL3_mixer 3.2.0's stricter chunk
scanner rejects (zero-length or past-EOF data-chunk sizes in the tail).
Testing
preset_smokeis registered with ctest against a committed good + malformed
corpus (multi-pass/feedback/history/LUT presets; malformed presets must fail
with a named error string, never a crash) - the round-5 fix that closed the
audit's last High finding. It landed inside this release window and carries
its own full entry above (1.6.0-dev-a67a4c0).
Packaging
Packaging/windows/clear_gpu-scaler.log.cmd: one-click reset of
gpu-scaler.lognext to the game executable for Windows field reports.
Changed
Audit ledger
audit.mdrefreshed by the round-7 sweep (+25 findings, MAINT-03 reopened),
then re-scoped to the open set only (44 findings: 0 High / 14 Medium /
30 Low) after the quick-fix batch;deltas.mdgained the closure records
for everything shipped in this window.
Removed
.github/workflows/cache-cleanup.yml,.github/workflows/
clang-tidy-check.yml,.github/workflows/translations.yml- the MAINT-03
zombie workflows, still pinned to the nonexistentactions/checkout@v7,
actually deleted from the tree this time and verified withgit ls-tree..github/workflows/wav-fallback-test.yml- the Windows-only A/B workflow
built to capture the fallback mismatch, retired once the diagnostics it
drove had landed (added and removed inside this release window).
Fixed
GPU scaler (round-7 quick-fix batch)
- ROB-14 (High): activating the shader filter no longer destroys the
SDL_Renderer while the global displaytexturestill references it - the
stale handle is dropped first, mirroringdx_cleanup, so toggling the
filter can no longer hand a freed texture to the next
ReinitializeTexture()(the virtual-gamepad half of the finding remains
open as ROB-22 by design). - ROB-15 (High):
Runner::Runcaptures the present target BEFORE the
double-buffer flip - feedback-driven final passes no longer present a
permanently one-frame-stale image plus one undefined frame after every
load/resize. - ROB-16: a failed
SDL_MapGPUTransferBuffer(device loss, allocation
failure) now costs one skipped frame like every neighboring stage instead
of memcpying to NULL outside the failure contract. - ROB-17:
SDL_BeginGPUCopyPassis null-checked (fail visibly + empty
submit instead of blitting stale contents with a clean log). The
upload-result half was reverted in an r7.6 fixup: vendored SDL3 (master,
post-3.4.0) follows the SDL >= 3.2 API where command-encoded copy calls
returnvoid- per-call failure reporting was removed upstream, the bool
capture broke the CI build, and the checked
SDL_SubmitGPUCommandBufferis the failure net. - ROB-24: a failed Vulkan-retry window claim now nulls
gWindow, so the
Shutdown()path cannot release a window this device never claimed. - ROB-25: an unexpected (non-custom) filter value is now counted and
throttled-logged as a present-path skip instead of presenting a permanent
silent black screen with a healthy heartbeat.
Audio / WAV fallback
- Load-failure diagnostics name the asset:
SoundSample::SetChunkcarries the
asset path and - for MPQ-sourced assets - the archive path (exposed via
mpq_reader's newpath()), so a rejection logs
Failed to decode audio file / <path> (<archive>) / <SDL_GetError>instead
of a bare SDL error, alongside the 56-byte head hex dump from the previous
round.
Parser
- MAINT-09: the
#referencemerge comment now states the real semantics
(the LAST parent chain providing passes wins; textures/parameters
accumulate). - MAINT-19 (partial): texture validation names the actual problem (empty-name
vs missing-path) instead of sending field debugging the wrong way, and the
dead 4-argumentParsePresetdeclaration is gone. The bareshaderpath
behavior decision remains open with the maintainer.
CI / build hygiene
- The CI build break with vendored SDL3 master (
void value not ignored,
SDL_UploadToGPUTexturebool capture) is fixed - see ROB-17. - The
clang-format checkworkflow is green for the first time against the
mod:gpu_scaler.cpphad shipped with a whole-file indentation regression
from the previous batch's tooling (whitespace-only, compiled fine); the
canonicalSource/.clang-formatformatting is restored and the file's diff
collapses back to the surgical change set, and 12 pre-existing violations in
soundsample.cppare fixed. Both files are token-identical to their
pre-format state (verified by whitespace-stripped byte diff); all 698
C/C++ files under the CI's check-paths now pass.
Full Changelog: gpu-shaders-v13...98357ff