Hacker News new | ask | show | jobs
by krogue 620 days ago
From a PR standpoint, this page encourages the viewpoint that Rust fans are too often Rust fanatics.

As for ultimate usefulness, I am not really convinced. The big selling point on Rust is no memory leaks, no use after free and so on. These issues do not exist in shaders; one cannot allocate memory in shaders really, so that point of Rush seems, well, pointless. I would also never put bounds checking into a shader either; that harms performance a great a deal. I guess if you like Rust's syntax this is a useful, though doing bits that are natural in typical Rust would likely be far from ideal on GPU code. This happens also with current shading languages too, but I strongly suspect this makes it worse.

As a point against usefulness: it is somewhat useless on Apple platforms since one will need to translate into Metal (and yes, there are tools for that), but that drops so many capabilities of targeting Apple devices. Apple GPU's, because of their nature, can do things other GPU's cannot (and also the other way) and to make this useful to me (or any performance minded project that targets Apple GPUs), will require shoe-horning those features somehow into this.

But I guess, it is nice for those who like the syntax of Rust (I confess I do not like Rust's syntax) and are targeting Vulkan as it gives one another shading language to write in; which I guess means a point for SPIR-V (and the interface language idea in general).

3 comments

There are other big selling points of Rust, compared to GPU-specific languages.

One is an expressive type system with algebraic types and generics. It's a lot easier to produce versions of code optimized for a certain use case. Only CUDA comes close.

This brings us to the ecosystem. Outside of CUDA, how many libraries exist that can easily be used from a shader context?

Rustc has great error messages. I don't know others, but errors in OpenGL shaders make me want to flip tables.

And being able to run the same code on the CPU is valuable as well, leading to simpler testing and debugging.

So unless you like CUDA and its problems, then this is rather attractive.

> The big selling point on Rust is no memory leaks

Memory leaks are not considered memory errors in Rust and they are allowed.

They are allowed, but they're extremely uncommon nevertheless.
A modern language with generics and quality IDE experience with the ability to write truly composable code is what interests me in the project. Modern shader codebases are truly enormous, but the languages up until recently lacked any tools for composition beyond the function. HLSL got templates in 2021 and GLSL is a dead end with no development.

No Metal support is IMO no problem. I and most of the rest of the games industry couldn’t care less about MSL. Nobody uses it. I’ve seen numbers from Apple that say upwards of 80% of developers they asked target Metal via SPIR-V Cross and HLSL from DXC.

I love what this project wants to do, use a “real” language to get the developer experience while writing shaders. However IMO slang will eat Rust-GPU’s lunch. You are right, borrow checking is not useful for shaders, and slang delivers most of the same language improvements (modules, generics) while being able to target many more platforms. And slang is production ready, unlike rust-gpu.

I’d still love to see what rust-gpu could become though, especially with DX12 moving to spirv in the future. It’s be nice to share rust code between my engine code and shader code.

> No Metal support is IMO no problem. I and most of the rest of the games industry couldn’t care less about MSL. Nobody uses it. I’ve seen numbers from Apple that say upwards of 80% of developers they asked target Metal via SPIR-V Cross and HLSL from DXC.

That is a real, real shame with respect to performance. A number of algorithms one can do with MSL (or really because of tile based rendering) so much faster (nearly no main memory bandwidth consumption). Atleast there is GL_EXT_shader_pixel_local_storage for GL. For Vulkan it appears that there is VK_EXT_shader_tile_image, but I do how widespread it is on Android.

There are other nice features that are Metal-ish only as well (tile shaders are a big deal) but typically the memoryless textures tops my list.