open-standards/wai/changes/2026-11-10-ci-vulkan-and-riscv.md
Transaction Science 1a0d850602
All checks were successful
wai media golden suite on RISC-V (emulated) / does this change touch it (push) Successful in 12s
repository checks / lockfiles, advisories, tests in CI, workflow hygiene, spec and section references, public text (push) Successful in 4m44s
WAI breaking changes and the conformance runner / WAI breaking · does this change touch WAI (push) Successful in 7s
wai media golden suite on RISC-V (emulated) / golden suite · riscv64 (emulated) (push) Successful in 1m15s
WAI breaking changes and the conformance runner / WAI breaking · wire, record and API against main · linux (push) Successful in 47s
WAI breaking changes and the conformance runner / WAI breaking and conform · their tests, and the independent verifiers through wai conform · linux (push) Successful in 4m59s
CI: the integer decoders on Vulkan GPUs, and the golden suite on RISC-V under a pinned emulator
wai-ops-gpu.yml gains a vulkan job on linux-amd (framework-128gb: gpu-vulkan-1002 and
swgpu-vulkan-10005) and linux-hw (jetson-hub: gpu-vulkan-10de, gpu-vulkan-8086 and
swgpu-vulkan-10005), with WAI_OPS_GPU_EXPECT and WAI_OPS_GPU_REQUIRE. It runs the
operator crate's 17 tests and the decoders' corpus (tests/ops_gpu.rs, jpegai/v1
included) on every declared adapter, and requires each adapter's report lines. The
jpegai/v1 inputs stay on the host between runs, are checked against their pins each
time, and are fetched with a ten-minute bound only when one is missing or off its pin.
The workflow has no push trigger, so its nightly run (06:17 UTC) is the first CI run.

By hand on the Framework through rbq, with the job's step scripts verbatim: both steps
pass on both adapters, each under two minutes with its build, and the jpegai decode
takes about four seconds. The jetson-hub declaration is the adapter set its
wai-quantum WebGPU member already declares there; it has not been run by hand.

wai-media-riscv.yml (new) builds wai/byte-exact-conformance for riscv64gc in the
cross-rs image pinned by digest, capped at 6 GiB on `linux`. It runs the suite under
Debian's static qemu-riscv64 10.0.13, pinned by SHA-256 and named as cargo's runner.
No QEMU_* variable is set. A preflight program checks the emulator, the run has an hour,
every download has a bound, and the build must compile the suite. It triggers on
wai-byte-equality.yml's paths and its own file. By hand in that image on the Framework:
112 passed and 1 ignored (the exhaustive root test, ignored on every leg), in nine
seconds of emulated running.

Planted faults, caught by hand on the Framework:
- no Vulkan device (VK_ICD_FILENAMES and VK_DRIVER_FILES naming no file) under REQUIRE,
  in each Vulkan step;
- an unexpected backend declared (gpu-metal-0), in each Vulkan step;
- a declared adapter missing, in the crate step;
- one byte of the synthetic clip's golden SHA-256 (5a to 5b), failing the RISC-V leg.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-11-09 21:38:51 -05:00

949 B

The integer decoders on Vulkan GPUs, and the golden suite on RISC-V, in CI

  • wai-ops-gpu.yml has a vulkan job on two hosts, one with an integrated GPU and one with a discrete and an integrated GPU, each with the software Vulkan driver too: the operator crate's tests (the probe, the corpus at both widths, the mutants, WGSL's integer semantics) and every committed vector and refusal fixture of every capability that runs a wai-ops/1 graph, the jpegai/v1 inputs included, decoded with its graphs on each adapter and held to the decode on the CPU. WAI_OPS_GPU_EXPECT names every adapter a host must offer and WAI_OPS_GPU_REQUIRE makes a missing one a failure.
  • wai-media-riscv.yml builds byte-exact-conformance for riscv64gc-unknown-linux-gnu and runs it under a pinned user-mode emulator: every golden the x86_64 and arm64 legs hold, on a third instruction set, with one changed byte failing the leg.