[Piglit] [PATCH 4/5] generators/gen_vs_in_fp64: Adds support to specify the GL type in the VBO

Alejandro Piñeiro apinheiro at igalia.com
Wed Jun 29 14:30:54 UTC 2016


I don't have too much experience with generators and python code in
general. But the patch looks good:
Acked-by: Alejandro Piñeiro <apinheiro at igalia.com>

On 14/06/16 23:37, Andres Gomez wrote:
> Signed-off-by: Andres Gomez <agomez at igalia.com>
> ---
>  generated_tests/gen_vs_in_fp64.py                  | 266 +++++++++++++++++----
>  .../gen_vs_in_fp64/regular.shader_test.mako        |  21 +-
>  2 files changed, 222 insertions(+), 65 deletions(-)
>
> diff --git a/generated_tests/gen_vs_in_fp64.py b/generated_tests/gen_vs_in_fp64.py
> index 88c4952..af7e81b 100644
> --- a/generated_tests/gen_vs_in_fp64.py
> +++ b/generated_tests/gen_vs_in_fp64.py
> @@ -72,47 +72,165 @@ DOUBLE_NORMAL_VALUES   = ['0xffefffffffffffff', # Negative maximum normalized
>                            '0x4b1e35ed24eb6496', # +7.23401345e+53
>                            '0x7fefffffffffffff'] # Positive maximum normalized
>  
> -DSCALAR_TYPES          = [glsltypes.DOUBLE]
> -
> -DVEC_TYPES             = [glsltypes.DVEC2, glsltypes.DVEC3, glsltypes.DVEC4]
> -
> -DMAT_TYPES             = [glsltypes.DMAT2, glsltypes.DMAT2X3, glsltypes.DMAT2X4,
> +FLOAT_POS_ZERO         = ['0x00000000'] #  0.0
> +
> +FLOAT_NORMAL_VALUES    = ['0xc21620c5', # -3.7532
> +                          '0x75bc289b', #  4.7703e32
> +                          '0x54c1c081', #  6.6572e12
> +                          '0x878218f8', # -1.9575e-34
> +                          '0x7e0857ed', #  4.5307886e37
> +                          '0x2bb561bf', #  1.2887954e-12
> +                          '0xff7fffff', # Negative maximum normalized
> +                          '0xcb800000', # -16777216.0
> +                          '0xc0a00000', # -5.0
> +                          '0xbff92e73', # -1.9467300
> +                          '0x80800000', # Negative minimum normalized
> +                          '0x00800000', # Positive minimum normalized
> +                          '0x3ff92e73', #  1.9467300
> +                          '0x40a00000', #  5.0
> +                          '0x4b800000', #  16777216.0
> +                          '0x7f7fffff'] # Positive maximum normalized
> +
> +UBYTE_VALUES           = ['0', # Minimum
> +                          '127', # Signed byte low frontier
> +                          '128', # Signed byte up frontier
> +                          '255', # Maximum
> +                          '1',
> +                          '5',
> +                          '14',
> +                          '23',
> +                          '58',
> +                          '91',
> +                          '113',
> +                          '135',
> +                          '179',
> +                          '185',
> +                          '205',
> +                          '207',
> +                          '212']
> +
> +BYTE_VALUES            = ['-128', # Minimum
> +                          '-5',
> +                          '-1',
> +                          '0',
> +                          '1',
> +                          '5',
> +                          '127', # Maximum
> +                          '-125',
> +                          '-120',
> +                          '-117',
> +                          '-69',
> +                          '-24',
> +                          '-20',
> +                          '21',
> +                          '89',
> +                          '106',
> +                          '119']
> +
> +USHORT_VALUES          = ['0', # Minimum
> +                          '32767', # Signed short low frontier
> +                          '32768', # Signed short up frontier
> +                          '65535', # Maximum
> +                          '1',
> +                          '5',
> +                          '12610',
> +                          '17110',
> +                          '19962',
> +                          '23589',
> +                          '37265',
> +                          '41792',
> +                          '45699',
> +                          '47934',
> +                          '55916',
> +                          '56412',
> +                          '65142']
> +
> +SHORT_VALUES           = ['-32768', # Minimum
> +                          '-5',
> +                          '-1',
> +                          '0',
> +                          '1',
> +                          '5',
> +                          '32767', # Maximum
> +                          '-16255',
> +                          '-12480',
> +                          '-12360',
> +                          '1706',
> +                          '5386',
> +                          '7315',
> +                          '18137',
> +                          '25871',
> +                          '26255',
> +                          '26472']
> +
> +UINT_VALUES            = ['0', # Minimum
> +                          '2147483647', # Signed int low frontier
> +                          '2147483648', # Signed int up frontier
> +                          '4294967295', # Maximum
> +                          '1',
> +                          '5',
> +                          '1073294963',
> +                          '1084227584',
> +                          '1266679808',
> +                          '1421983873',
> +                          '2114476013',
> +                          '2273450232',
> +                          '3220778611',
> +                          '3231711232',
> +                          '3256230085',
> +                          '3414163456',
> +                          '4294967294']
> +
> +INT_VALUES             = ['-2147483648', # Minimum
> +                          '-5',
> +                          '-1',
> +                          '0',
> +                          '1',
> +                          '5',
> +                          '2147483647', # Maximum
> +                          '-1038737211',
> +                          '-1063256064',
> +                          '-1074188685',
> +                          '-880803840',
> +                          '1073294963',
> +                          '1084227584',
> +                          '1266679808',
> +                          '1421983873',
> +                          '1975265435',
> +                          '2114476013']
> +
> +GL_TYPES_VALUES        = {'double': DOUBLE_NORMAL_VALUES + DOUBLE_POS_ZERO,
> +                          'float': FLOAT_NORMAL_VALUES + FLOAT_POS_ZERO,
> +                          'ubyte': UBYTE_VALUES,
> +                          'byte': BYTE_VALUES,
> +                          'ushort': USHORT_VALUES,
> +                          'short': SHORT_VALUES,
> +                          'uint': UINT_VALUES,
> +                          'int': INT_VALUES}
> +
> +GLSL_DSCALAR_TYPES     = [glsltypes.DOUBLE]
> +
> +GLSL_DVEC_TYPES        = [glsltypes.DVEC2, glsltypes.DVEC3, glsltypes.DVEC4]
> +
> +GLSL_DMAT_TYPES        = [glsltypes.DMAT2, glsltypes.DMAT2X3, glsltypes.DMAT2X4,
>                            glsltypes.DMAT3X2, glsltypes.DMAT3, glsltypes.DMAT3X4,
>                            glsltypes.DMAT4X2, glsltypes.DMAT4X3, glsltypes.DMAT4]
>  
> -FSCALAR_TYPES          = [glsltypes.FLOAT]
> +GLSL_FSCALAR_TYPES     = [glsltypes.FLOAT]
>  
> -FVEC_TYPES             = [glsltypes.VEC2, glsltypes.VEC3, glsltypes.VEC4]
> +GLSL_FVEC_TYPES        = [glsltypes.VEC2, glsltypes.VEC3, glsltypes.VEC4]
>  
> -FMAT_TYPES             = [glsltypes.MAT2, glsltypes.MAT2X3, glsltypes.MAT2X4,
> +GLSL_FMAT_TYPES        = [glsltypes.MAT2, glsltypes.MAT2X3, glsltypes.MAT2X4,
>                            glsltypes.MAT3X2, glsltypes.MAT3, glsltypes.MAT3X4,
>                            glsltypes.MAT4X2, glsltypes.MAT4X3, glsltypes.MAT4]
>  
> -ISCALAR_TYPES          = [glsltypes.INT]
> -
> -IVEC_TYPES             = [glsltypes.IVEC2, glsltypes.IVEC3, glsltypes.IVEC4]
> +GLSL_ISCALAR_TYPES     = [glsltypes.INT]
>  
> -USCALAR_TYPES          = [glsltypes.UINT]
> +GLSL_IVEC_TYPES        = [glsltypes.IVEC2, glsltypes.IVEC3, glsltypes.IVEC4]
>  
> -UVEC_TYPES             = [glsltypes.UVEC2, glsltypes.UVEC3, glsltypes.UVEC4]
> +GLSL_USCALAR_TYPES     = [glsltypes.UINT]
>  
> -HEX_VALUES_32BIT       = ['0xc21620c5', # -3.7532        float, -1038737211 int, 3256230085 uint
> -                          '0x75bc289b', #  4.7703e32     float,  1975265435 int, 1975265435 uint
> -                          '0x54c1c081', #  6.6572e12     float,  1421983873 int, 1421983873 uint
> -                          '0x878218f8', # -1.9575e-34    float, -1038737211 int, 2273450232 uint
> -                          '0x7e0857ed', #  4.5307886e+37 float,  2114476013 int, 2114476013 uint
> -                          '0x2bb561bf', #  1.2887954e-12 float,   733307327 int,  733307327 uint
> -                          '0xff7fffff', # -3.4028235e+38 float,    -8388609 int, 4286578687 uint
> -                          '0xcb800000', # -16777216.0    float,  -880803840 int, 3414163456 uint
> -                          '0xc0a00000', # -5.0           float, -1063256064 int, 3231711232 uint
> -                          '0xbff92e73', # -1.9467300     float, -1074188685 int, 3220778611 uint
> -                          '0x80800000', # -1.1754944e-38 float, -2139095040 int, 2155872256 uint
> -                          '0x00000000', #  0.0           float,           0 int,          0 uint
> -                          '0x00800000', #  1.1754944e-38 float,     8388608 int,    8388608 uint
> -                          '0x3ff92e73', #  1.9467300     float,  1073294963 int, 1073294963 uint
> -                          '0x40a00000', #  5.0           float,  1084227584 int, 1084227584 uint
> -                          '0x4b800000', #  16777216.0    float,  1266679808 int, 1266679808 uint
> -                          '0x7f7fffff'] #  3.4028235e+38 float,  2139095039 int, 2139095039 uint
> +GLSL_UVEC_TYPES        = [glsltypes.UVEC2, glsltypes.UVEC3, glsltypes.UVEC4]
>  
>  
>  # pylint: enable=bad-whitespace,line-too-long
> @@ -155,15 +273,18 @@ class RegularTestTuple(TestTuple):
>      @staticmethod
>      def create_in_types_array(*types_arrays):
>          """Creates vertex input combinations."""
> +
>          for product_item in itertools.product(*types_arrays):
>              yield product_item
>  
>      @staticmethod
> -    def create_tests(glsl_vers, in_types_array, position_orders, arrays_array, names_only):
> +    def create_tests(glsl_vers, in_types_array, gl_types,
> +                     position_orders, arrays_array, names_only):
>          """Creates combinations for flat qualifier tests."""
>  
>          assert isinstance(glsl_vers, list)
>          assert isinstance(in_types_array, types.GeneratorType)
> +        assert isinstance(gl_types, list)
>          assert isinstance(position_orders, list)
>          assert isinstance(arrays_array, list)
>          assert isinstance(names_only, bool)
> @@ -188,7 +309,7 @@ class RegularTestTuple(TestTuple):
>              if num_vs_in > MAX_VERTEX_ATTRIBS:
>                  continue
>  
> -            yield ver, in_types, position_order, arrays, num_vs_in, names_only
> +            yield ver, in_types, gl_types, position_order, arrays, num_vs_in, names_only
>  
>      @staticmethod
>      def all_tests(names_only):
> @@ -202,10 +323,29 @@ class RegularTestTuple(TestTuple):
>          for test_args in RegularTestTuple.create_tests(
>                  ['GL_ARB_vertex_attrib_64bit', '410'],
>                  RegularTestTuple.create_in_types_array(
> -                    itertools.chain(DSCALAR_TYPES, DVEC_TYPES, DMAT_TYPES),
> -                    itertools.chain(FSCALAR_TYPES, FVEC_TYPES, FMAT_TYPES,
> -                                    ISCALAR_TYPES, IVEC_TYPES,
> -                                    USCALAR_TYPES, UVEC_TYPES)),
> +                    itertools.chain(GLSL_DSCALAR_TYPES, GLSL_DVEC_TYPES, GLSL_DMAT_TYPES),
> +                    itertools.chain(GLSL_FSCALAR_TYPES, GLSL_FVEC_TYPES, GLSL_FMAT_TYPES)),
> +                ['double', 'float'],
> +                [1, 2, 3],
> +                [[1, 1], [1, 3], [5, 1], [5, 3]],
> +                names_only):
> +            yield RegularTestTuple(*test_args)
> +        for test_args in RegularTestTuple.create_tests(
> +                ['GL_ARB_vertex_attrib_64bit', '410'],
> +                RegularTestTuple.create_in_types_array(
> +                    itertools.chain(GLSL_DSCALAR_TYPES, GLSL_DVEC_TYPES, GLSL_DMAT_TYPES),
> +                    itertools.chain(GLSL_ISCALAR_TYPES, GLSL_IVEC_TYPES)),
> +                ['double', 'int'],
> +                [1, 2, 3],
> +                [[1, 1], [1, 3], [5, 1], [5, 3]],
> +                names_only):
> +            yield RegularTestTuple(*test_args)
> +        for test_args in RegularTestTuple.create_tests(
> +                ['GL_ARB_vertex_attrib_64bit', '410'],
> +                RegularTestTuple.create_in_types_array(
> +                    itertools.chain(GLSL_DSCALAR_TYPES, GLSL_DVEC_TYPES, GLSL_DMAT_TYPES),
> +                    itertools.chain(GLSL_USCALAR_TYPES, GLSL_UVEC_TYPES)),
> +                ['double', 'uint'],
>                  [1, 2, 3],
>                  [[1, 1], [1, 3], [5, 1], [5, 3]],
>                  names_only):
> @@ -213,10 +353,9 @@ class RegularTestTuple(TestTuple):
>          for test_args in RegularTestTuple.create_tests(
>                  ['GL_ARB_vertex_attrib_64bit', '410'],
>                  RegularTestTuple.create_in_types_array(
> -                    itertools.chain(FSCALAR_TYPES, FVEC_TYPES, FMAT_TYPES,
> -                                    ISCALAR_TYPES, IVEC_TYPES,
> -                                    USCALAR_TYPES, UVEC_TYPES),
> -                    itertools.chain(DSCALAR_TYPES, DVEC_TYPES, DMAT_TYPES)),
> +                    itertools.chain(GLSL_FSCALAR_TYPES, GLSL_FVEC_TYPES, GLSL_FMAT_TYPES),
> +                    itertools.chain(GLSL_DSCALAR_TYPES, GLSL_DVEC_TYPES, GLSL_DMAT_TYPES)),
> +                ['float', 'double'],
>                  [1, 2, 3],
>                  [[1, 1], [1, 2], [3, 1], [3, 2]],
>                  names_only):
> @@ -224,8 +363,9 @@ class RegularTestTuple(TestTuple):
>          for test_args in RegularTestTuple.create_tests(
>                  ['GL_ARB_vertex_attrib_64bit', '410'],
>                  RegularTestTuple.create_in_types_array(
> -                    itertools.chain(DSCALAR_TYPES, DVEC_TYPES, DMAT_TYPES),
> -                    itertools.chain(DSCALAR_TYPES, DVEC_TYPES, DMAT_TYPES)),
> +                    itertools.chain(GLSL_ISCALAR_TYPES, GLSL_IVEC_TYPES),
> +                    itertools.chain(GLSL_DSCALAR_TYPES, GLSL_DVEC_TYPES, GLSL_DMAT_TYPES)),
> +                ['int', 'double'],
>                  [1, 2, 3],
>                  [[1, 1], [1, 2], [3, 1], [3, 2]],
>                  names_only):
> @@ -233,15 +373,38 @@ class RegularTestTuple(TestTuple):
>          for test_args in RegularTestTuple.create_tests(
>                  ['GL_ARB_vertex_attrib_64bit', '410'],
>                  RegularTestTuple.create_in_types_array(
> -                    itertools.chain(DSCALAR_TYPES, DVEC_TYPES, DMAT_TYPES)),
> +                    itertools.chain(GLSL_USCALAR_TYPES, GLSL_UVEC_TYPES),
> +                    itertools.chain(GLSL_DSCALAR_TYPES, GLSL_DVEC_TYPES, GLSL_DMAT_TYPES)),
> +                ['uint', 'double'],
> +                [1, 2, 3],
> +                [[1, 1], [1, 2], [3, 1], [3, 2]],
> +                names_only):
> +            yield RegularTestTuple(*test_args)
> +        for test_args in RegularTestTuple.create_tests(
> +                ['GL_ARB_vertex_attrib_64bit', '410'],
> +                RegularTestTuple.create_in_types_array(
> +                    itertools.chain(GLSL_DSCALAR_TYPES, GLSL_DVEC_TYPES, GLSL_DMAT_TYPES),
> +                    itertools.chain(GLSL_DSCALAR_TYPES, GLSL_DVEC_TYPES, GLSL_DMAT_TYPES)),
> +                ['double', 'double'],
> +                [1, 2, 3],
> +                [[1, 1], [1, 2], [3, 1], [3, 2]],
> +                names_only):
> +            yield RegularTestTuple(*test_args)
> +        for test_args in RegularTestTuple.create_tests(
> +                ['GL_ARB_vertex_attrib_64bit', '410'],
> +                RegularTestTuple.create_in_types_array(
> +                    itertools.chain(GLSL_DSCALAR_TYPES, GLSL_DVEC_TYPES, GLSL_DMAT_TYPES)),
> +                ['double'],
>                  [1, 2],
>                  [[1], [5]],
>                  names_only):
>              yield RegularTestTuple(*test_args)
>  
> -    def __init__(self, ver, in_types, position_order, arrays, num_vs_in, names_only):
> +    def __init__(self, ver, in_types, gl_types, position_order, arrays, num_vs_in, names_only):
>          assert ver in ('GL_ARB_vertex_attrib_64bit', '410', '420')
>          assert isinstance(in_types, tuple)
> +        assert isinstance(gl_types, list)
> +        assert len(gl_types) == len(in_types)
>          assert isinstance(position_order, int)
>          assert (position_order > 0) and (position_order - 1 <= len(in_types))
>          assert isinstance(arrays, list)
> @@ -249,6 +412,7 @@ class RegularTestTuple(TestTuple):
>          super(RegularTestTuple, self).__init__(ver, names_only)
>  
>          self._in_types = in_types
> +        self._gl_types = gl_types
>          self._position_order = position_order
>          self._arrays = arrays
>          self._num_vs_in = num_vs_in
> @@ -259,8 +423,8 @@ class RegularTestTuple(TestTuple):
>          for idx, in_type in enumerate(self._in_types):
>              if idx == self._position_order - 1:
>                  filename += '-position'
> -            filename += '-{}{}'.format(
> -                in_type.name, '-array{}'.format(
> +            filename += '-{}_{}{}'.format(
> +                self._gl_types[idx], in_type.name, '_array{}'.format(
>                      self._arrays[idx]) if self._arrays[idx] - 1 else '')
>          if self._position_order > len(self._in_types):
>              filename += '-position'
> @@ -272,11 +436,12 @@ class RegularTestTuple(TestTuple):
>                      'regular.shader_test.mako').render_unicode(
>                          ver=self._ver,
>                          in_types=self._in_types,
> +                        gl_types=self._gl_types,
>                          position_order=self._position_order,
>                          arrays=self._arrays,
>                          num_vs_in=self._num_vs_in,
> -                        dvalues=DOUBLE_NORMAL_VALUES + DOUBLE_POS_ZERO,
> -                        hvalues=HEX_VALUES_32BIT))
> +                        gl_types_values=GL_TYPES_VALUES))
> +
>          print(filename)
>  
>  
> @@ -296,7 +461,7 @@ class ColumnsTestTuple(TestTuple):
>              for ver in glsl_vers:
>                  utils.safe_makedirs(TestTuple.get_dir_name(ver))
>  
> -        for mat in DMAT_TYPES:
> +        for mat in GLSL_DMAT_TYPES:
>              for columns in itertools.product(range(2), repeat=mat.columns):
>                  if (0 not in columns) or (1 not in columns):
>                      continue
> @@ -327,7 +492,8 @@ class ColumnsTestTuple(TestTuple):
>                          ver=self._ver,
>                          mat=self._mat,
>                          columns=self._columns,
> -                        dvalues=DOUBLE_NORMAL_VALUES + DOUBLE_POS_ZERO))
> +                        dvalues=GL_TYPES_VALUES['double']))
> +
>          print(filename)
>  
>  
> diff --git a/generated_tests/templates/gen_vs_in_fp64/regular.shader_test.mako b/generated_tests/templates/gen_vs_in_fp64/regular.shader_test.mako
> index fa54932..b6fab62 100644
> --- a/generated_tests/templates/gen_vs_in_fp64/regular.shader_test.mako
> +++ b/generated_tests/templates/gen_vs_in_fp64/regular.shader_test.mako
> @@ -31,16 +31,6 @@
>        glsl_version = '{}.{}'.format(glsl_version_int[0], glsl_version_int[1:3])
>  
>        return (glsl_version, glsl_version_int)
> -
> -  def _glsl_to_gl(glsl_type):
> -      if glsl_type.startswith("d"):
> -          return "double"
> -      elif glsl_type.startswith("u"):
> -          return "uint"
> -      elif glsl_type.startswith("i"):
> -          return "int"
> -      else:
> -          return "float"
>  %>
>  <% glsl, glsl_int = _version(ver) %>
>  
> @@ -102,7 +92,7 @@ void main()
>    % endif
>    % for i in range(arrays[idx]):
>      % for j in range(in_type.columns):
> -    value${idx}${'[{}]'.format(i) if arrays[idx] > 1 else ''}/${_glsl_to_gl(in_type.name)}/${in_type.name}${'/{}'.format(j) if (in_type.columns or 0) > 1 else ''} \
> +    value${idx}${'[{}]'.format(i) if arrays[idx] > 1 else ''}/${gl_types[idx]}/${in_type.name}${'/{}'.format(j) if in_type.columns > 1 else ''} \
>      % endfor
>    % endfor
>  % endfor
> @@ -110,7 +100,7 @@ void main()
>    piglit_vertex/float/vec3\
>  % endif
>  
> -% for d in range(len(dvalues)):
> +% for d in range(len(gl_types_values['double'])):
>    % for vertex in ('-1.0 -1.0  0.0', ' 1.0 -1.0  0.0', ' 1.0  1.0  0.0', '-1.0  1.0  0.0'):
>      % for idx, in_type in enumerate(in_types):
>        % if idx == position_order - 1:
> @@ -119,7 +109,7 @@ void main()
>        % for i in range(arrays[idx]):
>          % for j in range(in_type.columns):
>            % for k in range(in_type.rows):
> -            ${dvalues[(d + (i * (in_type.columns) + j) * (in_type.rows) + k) % len(dvalues)] if in_type.type.name == 'double' else hvalues[(d + (i * (in_type.columns) + j) * (in_type.rows) + k) % len(hvalues)]}  \
> +            ${gl_types_values[gl_types[idx]][(d + (i * in_type.columns + j) * in_type.rows + k) % len(gl_types_values[gl_types[idx]])]}  \
>            % endfor
>           \
>          % endfor
> @@ -133,14 +123,15 @@ void main()
>  % endfor
>  
>  [test]
> -% for d in range(len(dvalues)):
> +% for d in range(len(gl_types_values['double'])):
>  
>    % for idx, in_type in enumerate(in_types):
>      % for i in range(arrays[idx]):
>        uniform ${in_type.name} expected${idx}${'[{}]'.format(i) if arrays[idx] > 1 else ''}\
>        % for j in range(in_type.columns):
>          % for k in range(in_type.rows):
> -         ${dvalues[(d + (i * (in_type.columns) + j) * (in_type.rows) + k) % len(dvalues)] if in_type.type.name == 'double' else hvalues[(d + (i * (in_type.columns) + j) * (in_type.rows) + k) % len(hvalues)]}\
> +	  ## Careful: these are the values for the VBO type, not the uniform type. If we use the hex format they should match or the run will fail.
> +          ${gl_types_values[gl_types[idx]][(d + (i * in_type.columns + j) * in_type.rows + k) % len(gl_types_values[gl_types[idx]])]}\
>          % endfor
>        % endfor
>  



More information about the Piglit mailing list