<- Back
Comments (12)
- AnimatsThat's a fun read. I use WGPU, but from Rust, which has a roughly similar library.[1]There are three levels of shims between the user application and the GPU - WGPU, the Vulkan library, and the Vulkan driver for the GPU. This varies a bit with the platform. None of these do much work. They mostly move data around.To draw something, with modern basic 3D graphics, the application creates a mesh object, which is a few big arrays. There are vertices with X, Y and Z coordinates, triplets of vertex indices to define triangles, and some other info. You create texture objects, which are just 2D pictures in memory. Each object has a transform, a 4x4 matrix that transforms it into world space, and finally there's a camera transform which projects the scene onto the flat screen. And you provide some shader programs which run on the GPU to process that data.All that data is moved, usually unmodified, into the GPU. Or placed where the GPU can reach it, in systems with "integrated graphics". The GPU's hardware and firmware then take that data and draw it.So what are WGPU and the Vulkan layers doing? Managing memory, time and safety. They're responsible for allocating GPU memory, interlocking against changing data in the GPU while the GPU is doing something with it, and preventing cross-process memory accesses by keeping the GPU from doing things to memory of another process. This is more like the job of an operating system than a graphics program. These levels of the graphics stack don't do much graphics. The application says what to do in formats the GPU hardware understands.There's a lot of cross platform stuff going on. WGPU can support quite a few graphics back ends. Its native language is Vulkan, but Direct-X is supported to keep Microsoft happy, Metal is supported to keep Apple happy, Android is supported to keep Google happy, WebGPU is supported to keep browsers happy, and OpenGL is supported to keep people with old hardware happy. There are some lowest common denominator problems; Android and WebGPU use subsets of Vulkan and run a few years behind desktop. The back end is not hidden from the application. Some special cases have to be handled, one of them being "integrated graphics". Also, Vulkan has a huge list of optional features, many of which are not available on older platforms. WGPU doesn't hide that; it tells the application what's available and the application has to handle it or say it can't.It's all plumbing.[1] https://github.com/gfx-rs/wgpu
- ChadNauseamThis resource taught me WebGPU a couple years ago. I can recommend it. It's the best WebGPU tutorial I've found. (The Rust one is quite good as well.) I used what I learned to make this simple game: https://alexpop11.github.io/Spec-Hops/ (space to drop bombs) and I have eliemichel to thank for that!
- minrawsNicely built resource, found a couple of nits but pretty good starting point.Although I feel like unless you need to specifically target web or extensive cross platform support, a better alternative for a higher level framework/library is nvrhi. Especially for C++ developers.And I feel like if you are making for cross platform or web you are likely using Rust or writing your own game engine/library maybe I view of the ecosystem is skewed.
- torlokI maybe be a complete moron not familiar with Github, but I wanted to have a look at the code and it took me solid 5 minutes of going through the website searching for a link to the repository, and the only one I eventually found was when I scrolled to the bottom and clicked the Github icon. Removing the path from https://eliemichel.github.io/LearnWebGPU/index.html leads to 404, no idea why that doesn't just lead to https://github.com/eliemichel. Don't know if it's just me, but I get unreasonably frustrated by things like this.
- yu3zhou4It's a very useful guide, I used it when working on torch-webgpu some time ago. Elie also published few packages that help with using some WebGPU related things, I don't remember exactly what was that but I recall it saved me lots of timehttps://github.com/jmaczan/torch-webgpu
- antoine-valton[dead]