[Piglit] [PATCH 4/5] generated_tests: Add support for GLSL 1.40 tests using VBOs.
Paul Berry
stereotype441 at gmail.com
Wed May 2 15:29:21 PDT 2012
On 18 April 2012 18:29, Eric Anholt <eric at anholt.net> wrote:
> ---
> generated_tests/gen_builtin_uniform_tests.py | 71
> ++++++++++++++++++++------
> 1 file changed, 54 insertions(+), 17 deletions(-)
>
> diff --git a/generated_tests/gen_builtin_uniform_tests.py
> b/generated_tests/gen_builtin_uniform_tests.py
> index d6f4f06..5ff595f 100644
> --- a/generated_tests/gen_builtin_uniform_tests.py
> +++ b/generated_tests/gen_builtin_uniform_tests.py
> @@ -169,8 +169,8 @@ class BoolComparator(Comparator):
> value += [0.0] * self.__padding
> return value
>
> - def make_result_test(self, test_num, test_vector):
> - test = 'draw rect -1 -1 2 2\n'
> + def make_result_test(self, test_num, test_vector, draw):
> + test = draw
> test += 'probe rgba {0} 0 {1}\n'.format(
> test_num,
> shader_runner_format(self.convert_to_float(test_vector.result)))
> @@ -209,8 +209,8 @@ class BoolIfComparator(Comparator):
> else:
> return [0.0, 0.0, 1.0, 1.0]
>
> - def make_result_test(self, test_num, test_vector):
> - test = 'draw rect -1 -1 2 2\n'
> + def make_result_test(self, test_num, test_vector, draw):
> + test = draw
> test += 'probe rgba {0} 0 {1}\n'.format(
> test_num,
> shader_runner_format(self.convert_to_float(test_vector.result)))
> @@ -246,11 +246,11 @@ class IntComparator(Comparator):
> red='vec4(1.0, 0.0, 0.0, 1.0)')
> return statements
>
> - def make_result_test(self, test_num, test_vector):
> + def make_result_test(self, test_num, test_vector, draw):
> test = 'uniform {0} expected {1}\n'.format(
> shader_runner_type(self.__signature.rettype),
> shader_runner_format(column_major_values(test_vector.result)))
> - test += 'draw rect -1 -1 2 2\n'
> + test += draw
> test += 'probe rgba {0} 0 0.0 1.0 0.0 1.0\n'.format(test_num)
> return test
>
> @@ -314,13 +314,13 @@ class FloatComparator(Comparator):
> red='vec4(1.0, 0.0, 0.0, 1.0)')
> return statements
>
> - def make_result_test(self, test_num, test_vector):
> + def make_result_test(self, test_num, test_vector, draw):
> test = 'uniform {0} expected {1}\n'.format(
> shader_runner_type(self.__signature.rettype),
> shader_runner_format(column_major_values(test_vector.result)))
> test += 'uniform float tolerance {0}\n'.format(
> shader_runner_format([test_vector.tolerance]))
> - test += 'draw rect -1 -1 2 2\n'
> + test += draw
> test += 'probe rgba {0} 0 0.0 1.0 0.0 1.0\n'.format(test_num)
> return test
>
> @@ -362,11 +362,17 @@ class ShaderTest(object):
> return self._signature.version_introduced
>
> def version_directive(self):
> - if self.glsl_version() == '1.10':
> + if float(self.glsl_version()) == '1.10':
>
I see why you're changing this--doing string comparisons on values that are
intended as floating point is ugly. But what you've changed it to won't do
the right thing, since the test now compares a float to a string (which
always fails). Did you perhaps mean to compare a float to a float, like
this?
if float(self.glsl_version()) == 1.10:
I would be ok with changing this to a float/float comparison, or leaving it
as a string/string comparison.
In retrospect I wish I had made self.glsl_version() an integer representing
100x the GLSL version (e.g. 140 for GLSL version 1.40), like we do in Mesa
internals. Sorry you have to deal with this nonsense.
> return ''
> else:
> return '#version {0}\n'.format(self.glsl_version().replace('.',
> ''))
>
> + def draw_command(self):
> + if float(self.glsl_version()) >= 1.40:
> + return 'draw arrays GL_TRIANGLE_FAN 0 4\n'
> + else:
> + return 'draw rect -1 -1 2 2\n'
> +
> @abc.abstractmethod
> def test_prefix(self):
> """Return the prefix that should be used in the test file name
> @@ -425,9 +431,24 @@ class ShaderTest(object):
> # Note: shader_runner uses a 250x250 window so we must
> # ensure that test_num <= 250.
> test += self._comparator.make_result_test(
> - test_num % 250, test_vector)
> + test_num % 250, test_vector, self.draw_command())
> return test
>
> + def make_vbo_data(self):
> + # Starting with GLSL 1.40/GL 3.1, we need to use VBOs and
> + # vertex shader input bindings for our vertex data instead of
> + # the piglit drawing utilities and gl_Vertex.
> + if float(self.glsl_version()) < 1.40:
>
+ return ""
>
+ vbo = '[vertex data]\n'
> + vbo += 'vertex/float/2\n'
> + vbo += '-1.0 -1.0\n'
> + vbo += ' 1.0 -1.0\n'
> + vbo += ' 1.0 1.0\n'
> + vbo += '-1.0 1.0\n'
> + vbo += '\n'
> + return vbo
> +
> def filename(self):
> argtype_names = '-'.join(
> str(argtype) for argtype in self._signature.argtypes)
> @@ -449,6 +470,7 @@ class ShaderTest(object):
> shader_test += '[fragment shader]\n'
> shader_test += self.make_fragment_shader()
> shader_test += '\n'
> + shader_test += self.make_vbo_data()
> shader_test += '[test]\n'
> shader_test += self.make_test()
> filename = self.filename()
> @@ -468,8 +490,17 @@ class VertexShaderTest(ShaderTest):
> return 'vs'
>
> def make_vertex_shader(self):
> - return self.make_test_shader(
> - 'varying vec4 color;\n', ' gl_Position = gl_Vertex;\n',
> 'color')
> + if float(self.glsl_version()) >= 1.40:
>
+ return self.make_test_shader(
> + 'in vec4 vertex;\n' +
> + 'out vec4 color;\n',
> + ' gl_Position = vertex;\n',
> + 'color')
> + else:
> + return self.make_test_shader(
> + 'varying vec4 color;\n',
> + ' gl_Position = gl_Vertex;\n',
> + 'color')
>
> def make_fragment_shader(self):
> shader = self.version_directive()
> @@ -493,11 +524,17 @@ class FragmentShaderTest(ShaderTest):
>
> def make_vertex_shader(self):
> shader = self.version_directive()
> - shader += '''void main()
> -{
> - gl_Position = gl_Vertex;
> -}
> -'''
> + if float(self.glsl_version()) >= 1.40:
> + shader += "in vec4 vertex;\n"
> +
> + shader += "void main()\n"
> + shader += "{\n"
> + if float(self.glsl_version()) >= 1.40:
> + shader += " gl_Position = vertex;\n"
> + else:
> + shader += " gl_Position = gl_Vertex;\n"
> + shader += "}\n"
> +
> return shader
>
> def make_fragment_shader(self):
> --
> 1.7.10
>
> _______________________________________________
> Piglit mailing list
> Piglit at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/piglit
>
Assuming the float/string issue gets resolved, this patch is:
Reviewed-by: Paul Berry <stereotype441 at gmail.com>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freedesktop.org/archives/piglit/attachments/20120502/d4b2eae0/attachment.htm>
More information about the Piglit
mailing list