Repository navigation
M4.02
Pre-release
Pre-release
Changelog
All notable changes to libslang-vk — a C++23 Vulkan runner for libretro
slang shader presets — are documented in this file.
Milestones follow the M-series plan in PLAN.md §11 (M0 → M5).
Each milestone corresponds to the matching M* commit(s) on main (no git
tags yet). Format adapted from
Keep a Changelog.
Unreleased
Planned
- Remaining 91 corpus failures (out of 2658 presets at the pinned corpus rev),
all one class: sampled-but-unbound textures behind preprocessor dead code —
ReflectionPassin MBZ NO-REFLECT variants (~60),ambi_temporal_pass
uborder (~15),playnedi (~9). Next fix: run the texture-reference check
against preprocessed text instead of raw source. - M3 leftovers: golden-image conformance suite, perf budgets.
- M5 (1.0): API freeze, packaging,
docs/API.md.
M4.02 — 2026-10-18
Corpus rescan release: full-corpus verdict went from 826 LOAD / 1832 FAIL
(2026-10-17 baseline) to 2567 LOAD / 91 FAIL — zero regressions at the
pinned revision.
Fixed
#referencemerge rebase stored cwd-relative paths (RebaseReferenceFilePath()
insrc/core/preset_parser.cpp): when the scan root was relative (the
documentedcorpus_sweep slang-shadersinvocation), rebased pass/texture
paths were joined onto the importing preset's directory at load time,
producing garbled paths and failing ~700 otherwise-healthy presets. Rebased
paths are now absolutized inside the SEC-01 shader root. Regression test in
tests/test_preset_parser.cpp(relative root +#referencechdir fixture
asserts an absolute, existing merged path).
Added
corpus_sweep --only-from FILEwhitelist for chunked rescans (keeps
corpus-root semantics; enables full-corpus sweeps in sandboxed/short-lived
environments).- CI: the Windows
shader-demoartifact now bundlescorpus_sweep.exe(Linux
shipscorpus_sweep), with an updated USAGE.txt section showing the
absolute-root invocation. .github/workflows/corpus.ymlworkflow_dispatchcan regenerate the ledger
without any local binary.
Changed
corpus/baseline-ledger.txtrefreshed at the same corpus rev: 2658 presets
→ 2567 LOAD / 91 FAIL, 0 regressions, +1741 improved (bezel +1367,
presets +160, hdr +146, crt +32, ...). Added/gone: 0/0.
M4.01 — 2026-10-18
Fixed
slang: unknown texture reference 'PhosphorPassFeedback'on presets
whose passes are named only via#pragma name(noaliasN— e.g.
crt-yah.slangp): the translator's texture-name universe only knew LUT
names,aliasNandUser#, while the chain runtime already resolved pragma
names,Feedback-suffix taps and<name>Size. Pass names from
#pragma nameare now collected at load time and seeded into the universe,
so bare-name taps, previous-frame<name>Feedbacktaps and<name>Size
UBO members all bind.
Added
- Public API
slv::preset::CollectSlangPragmaNames(shaderPath, out)
(include/slangvk/core/slang_translate.hpp): soft-fail include-once scan
with the sameResolveIncludesbucketing asTranslateSlang; scan failure
is silent and real errors surface from per-pass translation.
Tests
- Four feedback-tap regressions in
tests/test_slang_translate.cpp: collector
finds the pragma name; seeded universe bindsPhosphorPassFeedbackin set 2;
lowercase spelling resolves; empty universe still hard-fails with the
original diagnostic.
M4 — 2026-10-17/18
DevilutionX presentation spike (plan §8 mode (a)) plus the shader_demo
example app and its first two real-world fix waves.
Added
examples/shader_demo: hybrid windowed/headless demo — GLFW backend
probing with headless-only fallback, TUI preset browser, animated-pattern +
image inputs, PNG frame writer, and a--headless --no-menu --frames N --out DIRsweep mode used for corpus verification (~2k lines across
shader_demo.cpp,window_target.hpp,input_source.hpp,
preset_browser.hpp,frame_writer.hpp).- Default input: bundled
assets/testcard.png(480×320 pixel-art
Goku/Mario/Luigi, generated bytools/make_testcard.py+tools/sprites/),
with a 5-level portable asset lookup starting at the executable's directory. - Corpus tooling:
corpus/baseline-ledger.txt(per-preset LOAD/FAIL
baseline) +.github/workflows/corpus.yml— nightly pinned-rev sweep with a
no-regression gate. - Runner presentation:
SwapchainFramewith letterbox and rotation;
push-block / size-param runner coverage (test_runner_m4.cpp,
test_runner_pushblock.cpp,sizeparam/pushfraggolden shaders). docs/CHECKLIST.md,tools/scan_codefindings.py, vendored
stb_image_write.h; README CI badge + screenshot.
Fixed
- crt-consumer.slangp black screen: UBO member parsing stripped
smooth
fromfloat smoothness;via a left-token match, leaving memberness
zero-initialized and the corner mask at 0. Added a right-token-boundary
check plus aSLANGVK_FILL_DEBUGblock-fill dump inchain.cpp, with a
byte-exact golden regression (tests/data/runner/smoothqual.*). - analog-service-menu.slangp
include target outside the shaders root:
the SEC-01 ancestor-retry now also fires on that error string (previously
only on cannot-open). - shader_demo defaulted to the animated pattern (characters never visible);
it now defaults to the testcard image and falls back only if the asset is
missing.
M3 — 2026-10-17
Conformance + perf wave (partial per PLAN.md §11).
Added
src/vk/lut.cpp: LUT texture upload paths (plain, mipmap,<texture>Size
user bindings), golden runner3 presets (lut,lut_mip,lut_size,
lut_user+ PNG fixtures).examples/corpus_sweep.cpp: batch load/render sweep over a preset tree —
the basis of the corpus baseline ledger.- Chain/images/device hardening (+~350 lines) and parser fixes; CI updates.
M2 — 2026-10-17
Added
- Chain semantics on the Vulkan runner, proven by the
test_runner_m2
canary suite: feedback ping-pong (previous-frame output), history ring taps
(OriginalHistory1/3), pass formats (default/float/srgb), include/cycle
resolution, mipmap refill (textureLod), FBO + history-ring recreation on
input-size change, livesetParameter(), validation-error gating, and a
negative control (PassOutput0self-read must fail LOAD).
M1 — 2026-10-17
Added
- Vulkan runner skeleton (
src/vk/—device.cpp,images.cpp,preset.cpp,
chain.cpp+ VMA): headless golden blit on lavapipe with zero validation
errors; runner test presets (blit,param).
Fixed
- MSVC build fix; MinGW64 CI matrix additions (
libslangvk.dll/.a
artifacts).
M0 — 2026-10-17
Added
- Scaffold: core trio ported clean — preset parser, slang→GLSL translator,
slang compiler glue (src/core/,include/slangvk/); 12/12 tests green;
field-preset round-trip fixtures (feedback / history / format / include
cycles). - CI: Linux tests on lavapipe + asan/ubsan build; Windows MinGW
libslangvk.dll/.aartifacts; vendored CMake deps. - Docs:
PLAN.md(architecture + milestones),SPEC.md(libretro slang
preset conformance scope),PROVENANCE.md(MIT + upstream ledger).