[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