summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJordan Justen <jordan.l.justen@intel.com>2014-08-27 01:10:44 -0700
committerJordan Justen <jordan.l.justen@intel.com>2014-09-22 12:00:05 -0700
commitfdb079555eb6de7b72102f34d6ce7ebfa6da9360 (patch)
treebf8387314c76f6e4524a9ea36ca76864dd36f1aa
parentbda7bb616bc871ee37ff9e65f753eed62db77492 (diff)
gen_builtin_uniform_tests: Support Compute shaders
Signed-off-by: Jordan Justen <jordan.l.justen@intel.com>
-rw-r--r--generated_tests/gen_builtin_uniform_tests.py44
1 files changed, 44 insertions, 0 deletions
diff --git a/generated_tests/gen_builtin_uniform_tests.py b/generated_tests/gen_builtin_uniform_tests.py
index 3e9b64c92..d89a6f33d 100644
--- a/generated_tests/gen_builtin_uniform_tests.py
+++ b/generated_tests/gen_builtin_uniform_tests.py
@@ -408,6 +408,13 @@ class ShaderTest(object):
"""
return None
+ def make_compute_shader(self):
+ """Return the compute shader for this test (or None if this test
+ doesn't require a compute shader). No need to reimplement
+ this function in classes that don't use compute shaders.
+ """
+ return None
+
def make_test_shader(self, additional_declarations, prefix_statements,
output_var, suffix_statements):
"""Generate the shader code necessary to test the built-in.
@@ -519,6 +526,11 @@ class ShaderTest(object):
shader_test += '[fragment shader]\n'
shader_test += fs
shader_test += '\n'
+ cs = self.make_compute_shader()
+ if cs:
+ shader_test += '[compute shader]\n'
+ shader_test += cs
+ shader_test += '\n'
if vs:
shader_test += self.make_vbo_data()
shader_test += '[test]\n'
@@ -638,6 +650,37 @@ class FragmentShaderTest(ShaderTest):
return self.make_test_shader('', '', 'gl_FragColor', '')
+class ComputeShaderTest(ShaderTest):
+ """Derived class for tests that exercise the built-in in a
+ compute shader.
+ """
+ def test_prefix(self):
+ return 'cs'
+
+ def glsl_version(self):
+ return max(430, ShaderTest.glsl_version(self))
+
+ def make_compute_shader(self):
+ additional_declarations = 'writeonly uniform image2D tex;\n'
+ additional_declarations += 'layout(local_size_x = 16, local_size_y = 16) in;\n'
+ return self.make_test_shader(
+ additional_declarations,
+ ' vec4 tmp_color;\n',
+ 'tmp_color',
+ ' ivec2 coord = ivec2(gl_GlobalInvocationID.xy);\n'
+ ' imageStore(tex, coord, tmp_color);\n')
+
+ def make_test_init(self):
+ return '''uniform int tex 0
+texture rgbw 0 (16, 16)
+image texture 0
+fb tex 2d 0
+'''
+
+
+ def draw_command(self):
+ return 'compute 1 1 1\n'
+
def all_tests():
for use_if in [False, True]:
for signature, test_vectors in sorted(test_suite.items()):
@@ -646,6 +689,7 @@ def all_tests():
yield VertexShaderTest(signature, test_vectors, use_if)
yield GeometryShaderTest(signature, test_vectors, use_if)
yield FragmentShaderTest(signature, test_vectors, use_if)
+ yield ComputeShaderTest(signature, test_vectors, use_if)
def main():