[Mesa-dev] [PATCH shader-db] Add support for shadertoy tests
Rob Clark
robdclark at gmail.com
Thu Jul 9 07:41:05 PDT 2015
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)
+ j = r.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']))
+ 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
More information about the mesa-dev
mailing list