Skip to content

docs(vulkan): the cross-platform closure as implemented and measured - #397

Merged
Sunrisepeak merged 2 commits into
mainfrom
docs/vulkan-cross-platform-design
Sep 11, 2026
Merged

docs(vulkan): the cross-platform closure as implemented and measured#397
Sunrisepeak merged 2 commits into
mainfrom
docs/vulkan-cross-platform-design

Conversation

@Sunrisepeak

Copy link
Copy Markdown
Member

Record of the Vulkan cross-platform work: what was implemented (#395, #394, #392, openxlings/xim-pkgindex#821), what was measured (windows-2022 with no system loader: build / test / pack + clean-dir run; macos-15: ICD discovery beside the executable), where it departs from the reviewed design and why, and what remains (mcpp-community/mcpp#615 for macOS deployment; mcpp pack refusing Mach-O programs; the two-project-index failure still reproducing). Docs only — .agents/* selects no workspace member.

Sunrisepeak and others added 2 commits September 11, 2026 21:59
Design only -- nothing implemented. Written for review.

Separates the three runtime layers (loader / ICD / layer) because the
whole problem comes from conflating them: a missing loader kills the
process before main (0xC0000135), a missing ICD merely enumerates zero
devices. The goal is to make every failure the second kind.

Records the inventory finding that makes this small: every payload
already exists -- xim:vulkan-loader (linux + windows), xim:moltenvk
(macosx), xim:mesa-lavapipe (linux + windows) -- and mcpp already
deploys a dependency's *.dll beside the executable and already treats
vulkan-1.dll as must-ship in pack. Only the mcpp-index wiring is
missing.

Also records what not to retry: the xpm.<platform>.deps route produced
three runs with no loader and no diagnostic, and that path is used by 2
windows packages in the whole index, neither of them tested on Windows.

Co-authored-by: sunrisepeak <x.d2learn.org@gmail.com>
Rewrites the design written for review earlier today into a record of what
was done, what was measured, where it departs from the design, and why.

The headline: a Windows machine with no GPU driver no longer dies before
`main` (0xC0000135). compat.vulkan 1.4.357.3 ships the loader DLL and mcpp
deploys it beside every consuming executable. Measured on `windows-2022` with
no system loader for `mcpp build`, `mcpp test`, and `mcpp pack` followed by a
run from a clean directory; transitive consumers (eui-neo's vulkan feature)
included.

Departures from the design, each with its reason in the doc: no new
`compat.vulkan-loader` package (compat.openblas already had the exact shape);
the `xpm.<platform>.deps` route abandoned (three runs, no loader, no
diagnostic); versions bumped rather than pins moved (warm stores record pins);
khronos.vulkan-hpp split into a follow-up (a member gets one project index, and
the two-index failure still reproduces on 2026.9.11.2 although mcpp#238 and
xlings#374 are closed); no `vulkan.loader` capability (mcpp does not error on an
unserved one); CI provisioning of the DLL dropped (it would pass whether or not
the package works).

macOS, measured on `macos-15`: without MoltenVK nothing crashes; with
`libMoltenVK.dylib` and `vulkan/icd.d/MoltenVK_icd.json` beside the executable
(relative library_path) a real device enumerates, and the layout survives
copying bin/ elsewhere. What is missing is mcpp deploying those two files --
filed as mcpp-community/mcpp#615. `mcpp pack` also refuses Mach-O programs
today, which is recorded as the mcpp limitation it is.

Also records the two install hooks found deriving paths from the version
(eui-neo, xim:vulkan-loader) and the stray gitcode asset from a misnamed upload.

Co-authored-by: sunrisepeak <x.d2learn.org@gmail.com>
@Sunrisepeak
Sunrisepeak merged commit 492a7e2 into main Sep 11, 2026
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.

1 participant