v0.17.15
MSL: function-scope workgroup variables (PR #77, @georgebuilds)
Fixed
-
MSL workgroup vars at function-body scope — workgroup (
threadgroup) variables
are now declared inside the kernel function body instead of as entry-point parameters.
The parameter form requires the host to callsetThreadgroupMemoryLength:atIndex:before
dispatch; our Pure Go Metal HAL does not, causing workgroup memory to silently no-op.
Function-scope declarations are legal MSL, statically sized by the compiler, and need
no host-side setup. Verified on Apple M3 Max with Metal 3.1 runtime (@lkmavi). -
MSL per-entry-point workgroup zero-init filtering —
writeWorkgroupZeroInitnow
filters by entry-point usage (matching Rust naga), so only workgroup vars actually used
by the entry point are declared and zeroed.
Changed
- CONTRIBUTING.md — snapshot test infrastructure docs: golden file naming convention
(1:1 with Rust naga test suite), reference allow-list, adding new test shaders.
Updated project structure and testing commands.
Quality gates
- TestRustReference: ALL PASS (100%)
- SPIR-V validation: 172/172 (100%)
- golangci-lint: 0 issues
- CI: 11/11 checks pass (Linux, macOS, Windows)
- Hardware verified: Apple M3 Max, Metal 3.1 (@lkmavi)