[Mesa-dev] [PATCH shader-db] Add support for shadertoy tests
Dylan Baker
baker.dylan.c at gmail.com
Thu Jul 9 14:40:46 PDT 2015
There's a few more cleanups you could do if you wanted, but either way:
Reviewed-by: Dylan Baker <baker.dylan.c at gmail.com>
On Thu, Jul 09, 2015 at 10:41:05AM -0400, Rob Clark wrote:
> Attached script grabs shaders from shadertoy, and dumps them out as
> .shader_test files which can be run through shader-db for compiler
> testing.
>
> shadertoy only gives you a fragment shader (which works based on
> gl_FragCoord), so a generic vertex shader is used. And a blurb is
> inserted for the pre-defined uniforms and main() function (which just
> calls shadertoy mainImage() fxn).
>
> v2: updated w/ python suggestions from Dylan
>
> ---
> Note: we probably want to pick a couple shadertoy shaders and commit
> them (rather than pulling down *all* shadertoy shaders, which may
> change over time, etc). I can just pick a couple randomly unless
> anyone has some requests. Either way, seems useful to have the script
> in git in case anyone else wants to grab new/more shaders.
>
> grab-shadertoy.py | 66 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
> 1 file changed, 66 insertions(+)
> create mode 100755 grab-shadertoy.py
>
> diff --git a/grab-shadertoy.py b/grab-shadertoy.py
> new file mode 100755
> index 0000000..04db411
> --- /dev/null
> +++ b/grab-shadertoy.py
> @@ -0,0 +1,66 @@
> +#!/usr/bin/env python3
> +
> +
> +import os, requests, textwrap
> +
> +url = 'https://www.shadertoy.com/api/v1/shaders'
> +key = '?key=NdnKw7'
> +
> +header = textwrap.dedent("""\
> + [require]
> + GLSL >= 1.30
> +
> + [fragment shader]
> + #version 130
> + uniform vec3 iResolution;
> + uniform float iGlobalTime;
> + uniform float iChannelTime[4];
> + uniform vec4 iMouse;
> + uniform vec4 iDate;
> + uniform float iSampleRate;
> + uniform vec3 iChannelResolution[4];
> + uniform sampler2D iChannel0;
> + uniform sampler2D iChannel1;
> + uniform sampler2D iChannel2;
> + uniform sampler2D iChannel3;
> +
> +""")
> +
> +footer = textwrap.dedent("""\
> +
> + void main() { mainImage(gl_FragColor, gl_FragCoord.xy); }
> +
> + [vertex shader]
> + #version 130
> + in vec2 position;
> +
> + void main()
> + {
> + gl_Position = vec4(position, 0.0, 1.0);
> + }
> +""")
> +
> +# Get the list of shaders
> +r = requests.get(url + key)
> +j = r.json()
> +print('Found {} shaders'.format(j['Shaders']))
> +
> +shader_ids = j['Results']
> +for id in shader_ids:
> + print('Fetching shader: {}'.format(id))
> + print('url: {}/{}{}'.format(url, id, key))
> + r = requests.get(url + '/' + id + key)
You're generating the same value twice, maybe store it?
> + j = r.json()
you could drop the j variable:
r = requests.get(url + '/' + id + key).json()
> + s = j['Shader']
> + info = s['info']
> + print('Name: ' + info['name'])
> + print('Description: ' + info['description'])
> + if not os.path.exists('shaders/shadertoy'):
> + os.makedirs('shaders/shadertoy')
> + for i, p in enumerate(s['renderpass']):
> + #print('Inputs: {}'.format(p['inputs']))
> + #print('Outputs: {}'.format(p['outputs']))
Probably, you should either uncomment, delete these, or put them behind
some kind of guard.
> + with open('shaders/shadertoy/{}_{}.shader_test'.format(id, i), 'w') as fobj:
> + fobj.write(header)
> + fobj.write(p['code'])
> + fobj.write(footer)
> --
> 2.4.3
>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 473 bytes
Desc: Digital signature
URL: <http://lists.freedesktop.org/archives/mesa-dev/attachments/20150709/448510b3/attachment.sig>
More information about the mesa-dev
mailing list