rust-gpu icon indicating copy to clipboard operation
rust-gpu copied to clipboard

Infrastructure for using ShaderToy as a test corpus

Open LegNeato opened this issue 1 year ago • 6 comments

Proposal

Create infrastructure that translates (working) shadertoy shaders into rust-gpu (and runs?). This would make it so we have a sort of burndown chart a la https://github.com/uutils/coreutils#gnu-test-suite-compatibility and https://boajs.dev/boa/test262/ and stress test different parts of rust-gpu. Implementing enough to flip a shader from not working to working may be an easier place for contributors to start, and seeing shaders work is neat!

Feasibility

The shadertoy api looks pretty straightforward to implement from the runner side: https://www.shadertoy.com/howto.

I'm not sure how easy the transpiling will be, but there is https://github.com/phaazon/glsl/tree/master/glsl/src/transpiler and spot checks on some shadertoy shaders doesn't look too crazy. We could probably allowlist or denylist.

Implementation

I wanted to open this for comments before starting on an implementation.

LegNeato avatar Nov 27 '23 17:11 LegNeato

Related: https://github.com/EmbarkStudios/rust-gpu/issues/1096

LegNeato avatar Nov 27 '23 20:11 LegNeato

I hand ported three shaders from shadertoy...I think automating this is doable for most of the image shaders. It would be cool to have a harness that compares rendering results.

LegNeato avatar Dec 09 '23 03:12 LegNeato

Example, which works with mouse too: Screenshot 2023-12-08 at 11 27 42 PM

Ported from https://www.shadertoy.com/view/DlGfzh. Code in https://github.com/LegNeato/rust-gpu/tree/fork-shield

LegNeato avatar Dec 09 '23 03:12 LegNeato

Update: I have a WIP PR to make naga translate to rust.

LegNeato avatar Jan 09 '24 22:01 LegNeato

Update: I have a WIP differential harness that compares the original shadertoy shader and the converted rust shader's output.

LegNeato avatar Mar 26 '24 20:03 LegNeato