Skip to content

fix(msl): use references (&) instead of pointers (*) for buffer parameters#39

Merged
kolkov merged 1 commit intomainfrom
fix/msl-buffer-reference
Mar 4, 2026
Merged

fix(msl): use references (&) instead of pointers (*) for buffer parameters#39
kolkov merged 1 commit intomainfrom
fix/msl-buffer-reference

Conversation

@kolkov
Copy link
Contributor

@kolkov kolkov commented Mar 4, 2026

Summary

  • MSL buffer parameters now use references (&) instead of pointers (*) — fixes Metal shader compilation crash on Apple Silicon (M3)
  • Expression writer generates dot access (u.viewport), which requires reference syntax (constant T& u), not pointer syntax (constant T* u which needs ->)
  • Aligns with Rust naga behavior and Metal best practices

Fixes gogpu/ui#23

Changes

  • msl/functions.go*& for buffer parameter generation
  • msl/expressions.gopointerNeedsDeref returns false (references don't need (*ptr) wrapping)
  • 4 golden test files regenerated
  • CHANGELOG.md updated

Test plan

  • All snapshot tests pass (go test ./snapshot/...)
  • All naga tests pass (GOWORK=off go test ./...)
  • Lint clean (GOWORK=off golangci-lint run)
  • Manual test on M3 MacBook Pro (rcarlier)

…eters

Buffer parameters now generate 'constant T& name' instead of 'constant T* name'.
Pointer syntax required '->' for member access while expression writer generates
dot access, causing Metal compilation errors on Apple Silicon (ui#23).
@kolkov kolkov merged commit de99217 into main Mar 4, 2026
10 checks passed
@codecov
Copy link

codecov bot commented Mar 4, 2026

Codecov Report

✅ All modified and coverable lines are covered by tests.

📢 Thoughts on this report? Let us know!

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.

Bug on M3 ?

1 participant