gpu: build idiomatic Zig interface to WebGPU, abstract away native+browser support #21
Labels
No labels
CI
all
basisu
blog
bug
build
contributor-friendly
core
correctness
deferred
dev
direct3d-headers
docs
driver-os-issue
duplicate
dxcompiler
editor
examples
experiment
feature-idea
feedback
flac
freetype
gamemode
gkurve
glfw
gpu
gpu-dawn
harfbuzz
help welcome
in-progress
infrastructure
invalid
libmach
linux-audio-headers
long-term
mach
mach.gfx
mach.math
mach.physics
mach.testing
model3d
needs-triage
object
opengl-headers
opus
os/linux
os/macos
os/wasm
os/windows
package-manager
priority
proposal
proposal-accepted
question
roadmap
slipped
stability
sysaudio
sysgpu
sysjs
validating-fix
vulkan-zig-generated
wayland-headers
website
wontfix
wrench
www
x11-headers
xcode-frameworks
zig-update
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
hexops/mach#21
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
This would give us a truly nice, cross-platform, seamless graphics API across browsers, mobile and desktop via Vulkan, Metal, and OpenGL as fallback.
Use the same Zig API for:
This is also the only truly cross-platform graphics API being blessed by major vendors (e.g. Apple) which leads me to believe it has a real shot long-term at displacing the tried and true Vulkan+Metal+OpenGL combo. And even if it doesn't, there has been a massive undertaking to offer a unified API of that Vulkan+Metal+OpenGL combo in forming WebGPU that very few will be able to effectively beat in the general case (e.g. I think we can effectively beat Godot's, potentially Unity and Unreal's, graphics API abstractions using WebGPU.)
For what its worth, I've brought up an easily reproducible dawn build here: https://github.com/meshula/LabSlang (it assumes you have jinja2 installed). I've been looking for a way to zigify the sample program: https://github.com/meshula/LabSlang/blob/main/example/ManualSwapChainTest.cpp and stumbled across your glfw binding which could be a nice first step, from my perspective.
@meshula Oh, a few thoughts:
zig build. I actually already have this working on MacOS, and other platforms should be pretty trivial/straightforward from here. I haven't published any of this yet on GitHub, though, sorry. I need to do some more work to finalize things but I'll see if I can push a branch up soon.You can read a bit about it here: https://devlog.hexops.com/2021/mach-engine-the-future-of-graphics-with-zig#whats-next-webgpu
I'll try to get a branch up that you can look at / play with / help out with, if you're interested, sometime this week
Sent a PR to fix the Obj-C++ compilation issue in Zig, so we can compile Dawn using a
build.zigfile: https://github.com/ziglang/zig/pull/10096Sorry I missed your reply, if you post a branch, I'm definitely interested.
... which I see is here https://github.com/hexops/mach/tree/dawn
@meshula Cool! You indeed found the branch I'm working from, https://github.com/hexops/mach/pull/62 is the pull request which has more details on how to use it, issues, etc. I probably need about a day more before it'll be relatively easy for you to try running it
I got all the way to the compiling .mm issue, as you might expect. I haven't been building zig myself, so does it make sense to wait for that to land? or is there an artifact I can download from CI somewhere?
I have a fairly large contraption right now where I am writing zig bindings over my LabSlang project, which I need for a current zig project that currently is CLI only. I'd be happy to shift my attention to mach in the short term to see if we are both pushing in the same direction. Due to the mm compilation issue, I can do other things in the meanwhile and wait a little for "relatively easy", and therefore put off learning to build zig :)
As you probably already know:
The only part of the build that required a bit of research was the installation of git-subtree. I downloaded the git sources, and did an install from the contrib/subtree folder, with
make;sudo make -prefix=/XXX installwhere XXX is the path containingbin/git. Might be worth noting that twist for others who attempt it.@meshula can you clarify why you needed to install Git from source? AFAIK, only I myself should ever need to use
git subtree, nobody else should ever need to.I'd wait until I can get the
.mmchange landed, then Zig's CI will build artifacts for you.Here's what I did.
git clone machzig build(didn't work, glfw not found,grepbuild system discover pull-subrepos.sh)cd dev;./pull-subrepos.sh(complains about subtree because ofgithub.com/hexops/mach@9f906cfd94/dev/pull-subrepos.sh (L6)pull-supreposagain (git loses it's mind, zomg)cd dev;./pull-subrepos.sh(succeeds)cd ..;zig buildsucceeds in building engine and glfwcd webgpu; zig buildgets as far as noted above.I was making it up as I went along since I wasn't sure what the intended build process actually is, and I haven't used git in a monorepo context in this way before. Maybe I missed an obvious (to one practiced in the monorepo arts ;) ) workflow step.
I'd love more details on this part, what error did you get? GLFW is committed to the repository the same as any other file, so you really shouldn't have ever needed to touch
git subtreeat all. There isn't any magic here,git subtreejust helps us with copying files back and forth between two repositories.hmm, I think i have another mac without git subtree installed. standby.
ok, all of my macs except that one have subtree installed, so (1) there is likely something wrong with git on that machine, probably I've hacked it too much with aliases and helper things. (2) all my other machines function as you describe; I can clone and zig build in the root directory, and in the dawn branch, in the webgpu directory, with the same .mm issue.
All right, sorry for the noise, but glad to have worked through this.
Perfect! Glad to hear it.