generators/gen_vs_in_fp64: Different VBO values per vertex

Submitted by Andres Gomez on July 6, 2016, 11:40 a.m.

Details

Message ID 1467805217-4832-1-git-send-email-agomez@igalia.com
State Accepted
Commit c7ed94a9de37dea3c78bcb62a07957ae40c80e2d
Headers show
Series "generators/gen_vs_in_fp64: Different VBO values per vertex" ( rev: 1 ) in Piglit

Not browsing as part of any series.

Commit Message

Andres Gomez July 6, 2016, 11:40 a.m.
Before, in every drawing we were having the same VBO values per vertex
to be compared against the values in the uniforms. Now, we also have
different values per vertex so we can be sure that it is truly its own
data.

Signed-off-by: Andres Gomez <agomez@igalia.com>
---
 .../gen_vs_in_fp64/columns.shader_test.mako        | 41 ++++++++++++---------
 .../gen_vs_in_fp64/regular.shader_test.mako        | 43 +++++++++++++---------
 2 files changed, 49 insertions(+), 35 deletions(-)

Patch hide | download patch | download mbox

diff --git a/generated_tests/templates/gen_vs_in_fp64/columns.shader_test.mako b/generated_tests/templates/gen_vs_in_fp64/columns.shader_test.mako
index 2dfb723..f094a03 100644
--- a/generated_tests/templates/gen_vs_in_fp64/columns.shader_test.mako
+++ b/generated_tests/templates/gen_vs_in_fp64/columns.shader_test.mako
@@ -48,7 +48,9 @@  GLSL >= ${glsl}
   #extension GL_ARB_vertex_attrib_64bit : require
 % endif
 
-uniform ${mat.name} expected;
+% for vidx in range(4):
+  uniform ${mat.name} expected${vidx};
+% endfor
 
 in ${mat.name} value;
 in vec3 piglit_vertex;
@@ -59,15 +61,18 @@  out vec4 fs_color;
 
 void main()
 {
-  gl_Position = vec4(piglit_vertex, 1.0);
-  % for idx, column in enumerate(columns):
-    % if column == 1:
-      if (value[${idx}] != expected[${idx}]) {
-        fs_color = RED;
-        return;
-      }
-      ## XXX: should we break here?
-    % endif
+  gl_Position = vec4(piglit_vertex.x, piglit_vertex.y, 0.0, 1.0);
+  % for vidx, vertex in enumerate(['-1.0', '0.0', '1.0', '2.0']):
+    if (piglit_vertex.z == ${vertex}) {
+    % for idx, column in enumerate(columns):
+      % if column == 1:
+        if (value[${idx}] != expected${vidx}[${idx}]) {
+            fs_color = RED;
+            return;
+        }
+      % endif
+    % endfor
+    }
   % endfor
   fs_color = GREEN;
 }
@@ -90,11 +95,11 @@  piglit_vertex/float/vec3\
   % endfor
 
 % for d in range(len(dvalues)):
-  % 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 vidx, vertex in enumerate(['-1.0 -1.0  -1.0', ' 1.0 -1.0  0.0', ' 1.0  1.0  1.0', '-1.0  1.0  2.0']):
 ${vertex} \
     % for i in range(mat.columns):
       % for j in range(mat.rows):
-${dvalues[(d + i * mat.rows + j) % len(dvalues)]}  \
+${dvalues[(d + i * mat.rows + j + vidx) % len(dvalues)]}  \
       % endfor
   \
     % endfor
@@ -105,13 +110,15 @@  ${dvalues[(d + i * mat.rows + j) % len(dvalues)]}  \
 [test]
 % for d in range(len(dvalues)):
 
-  uniform ${mat.name} expected\
-  % for i in range(mat.columns):
-    % for j in range(mat.rows):
-     ${dvalues[(d + i * mat.rows + j) % len(dvalues)]}\
+  % for vidx in range(4):
+    uniform ${mat.name} expected${vidx}\
+    % for i in range(mat.columns):
+      % for j in range(mat.rows):
+        ${dvalues[(d + i * mat.rows + j + vidx) % len(dvalues)]}\
+      % endfor
     % endfor
-  % endfor
 
+  % endfor
   clear color 0.0 0.0 1.0 0.0
   clear
   draw arrays GL_TRIANGLE_FAN ${d * 4} 4
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 b6fab62..5620cbe 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
@@ -50,7 +50,9 @@  GL_MAX_VERTEX_ATTRIBS >= ${num_vs_in}
 % endif
 
 % for idx, in_type in enumerate(in_types):
-  uniform ${in_type.name} expected${idx}${'[{}]'.format(arrays[idx]) if arrays[idx] - 1 else ''};
+  % for vidx in range(4):
+    uniform ${in_type.name} expected${idx}${vidx}${'[{}]'.format(arrays[idx]) if arrays[idx] - 1 else ''};
+  % endfor
 % endfor
 % for idx, in_type in enumerate(in_types):
   in ${in_type.name} value${idx}${'[{}]'.format(arrays[idx]) if arrays[idx] - 1 else ''};
@@ -63,13 +65,16 @@  out vec4 fs_color;
 
 void main()
 {
-    gl_Position = vec4(piglit_vertex, 1.0);
-    % for idx, in_type in enumerate(in_types):
-        if (value${idx} != expected${idx}) {
-            fs_color = RED;
-            return;
-        }
-    ## XXX: should this have a break?
+    gl_Position = vec4(piglit_vertex.x, piglit_vertex.y, 0.0, 1.0);
+    % for vidx, vertex in enumerate(['-1.0', '0.0', '1.0', '2.0']):
+      if (piglit_vertex.z == ${vertex}) {
+        % for idx, in_type in enumerate(in_types):
+          if (value${idx} != expected${idx}${vidx}) {
+              fs_color = RED;
+              return;
+          }
+        % endfor
+      }
     % endfor
     fs_color = GREEN;
 }
@@ -101,7 +106,7 @@  void main()
 % endif
 
 % 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 vidx, vertex in enumerate(['-1.0 -1.0 -1.0', ' 1.0 -1.0  0.0', ' 1.0  1.0  1.0', '-1.0  1.0  2.0']):
     % for idx, in_type in enumerate(in_types):
       % if idx == position_order - 1:
         ${vertex}   \
@@ -109,7 +114,7 @@  void main()
       % for i in range(arrays[idx]):
         % for j in range(in_type.columns):
           % for k in range(in_type.rows):
-            ${gl_types_values[gl_types[idx]][(d + (i * in_type.columns + j) * in_type.rows + k) % len(gl_types_values[gl_types[idx]])]}  \
+            ${gl_types_values[gl_types[idx]][(d + (i * in_type.columns + j) * in_type.rows + k + vidx) % len(gl_types_values[gl_types[idx]])]}  \
           % endfor
          \
         % endfor
@@ -125,16 +130,18 @@  void main()
 [test]
 % 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):
-	  ## 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]])]}\
+  % for vidx in range(4):
+    % for idx, in_type in enumerate(in_types):
+      % for i in range(arrays[idx]):
+        uniform ${in_type.name} expected${idx}${vidx}${'[{}]'.format(i) if arrays[idx] > 1 else ''}\
+        % for j in range(in_type.columns):
+          % for k in range(in_type.rows):
+            ## 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 + vidx) % len(gl_types_values[gl_types[idx]])]}\
+          % endfor
         % endfor
-      % endfor
 
+      % endfor
     % endfor
   % endfor
   clear color 0.0 0.0 1.0 0.0

Comments

Hi,

this patch is still unreviewed.

I'd welcome some help to get this into piglit with guarantees that the
changes are OK. Dylan, could you give it a look? :)

If there is nothing new by the end of this week, I will assume that all
is OK and will proceed to land the patch.

On Wed, 2016-07-06 at 14:40 +0300, Andres Gomez wrote:
> Before, in every drawing we were having the same VBO values per vertex
> to be compared against the values in the uniforms. Now, we also have
> different values per vertex so we can be sure that it is truly its own
> data.
> 
> Signed-off-by: Andres Gomez <agomez@igalia.com>
> ---
>  .../gen_vs_in_fp64/columns.shader_test.mako        | 41 ++++++++++++---------
>  .../gen_vs_in_fp64/regular.shader_test.mako        | 43 +++++++++++++---------
>  2 files changed, 49 insertions(+), 35 deletions(-)
> 
> diff --git a/generated_tests/templates/gen_vs_in_fp64/columns.shader_test.mako b/generated_tests/templates/gen_vs_in_fp64/columns.shader_test.mako
> index 2dfb723..f094a03 100644
> --- a/generated_tests/templates/gen_vs_in_fp64/columns.shader_test.mako
> +++ b/generated_tests/templates/gen_vs_in_fp64/columns.shader_test.mako
> @@ -48,7 +48,9 @@ GLSL >= ${glsl}
>    #extension GL_ARB_vertex_attrib_64bit : require
>  % endif
>  
> -uniform ${mat.name} expected;
> +% for vidx in range(4):
> +  uniform ${mat.name} expected${vidx};
> +% endfor
>  
>  in ${mat.name} value;
>  in vec3 piglit_vertex;
> @@ -59,15 +61,18 @@ out vec4 fs_color;
>  
>  void main()
>  {
> -  gl_Position = vec4(piglit_vertex, 1.0);
> -  % for idx, column in enumerate(columns):
> -    % if column == 1:
> -      if (value[${idx}] != expected[${idx}]) {
> -        fs_color = RED;
> -        return;
> -      }
> -      ## XXX: should we break here?
> -    % endif
> +  gl_Position = vec4(piglit_vertex.x, piglit_vertex.y, 0.0, 1.0);
> +  % for vidx, vertex in enumerate(['-1.0', '0.0', '1.0', '2.0']):
> +    if (piglit_vertex.z == ${vertex}) {
> +    % for idx, column in enumerate(columns):
> +      % if column == 1:
> +        if (value[${idx}] != expected${vidx}[${idx}]) {
> +            fs_color = RED;
> +            return;
> +        }
> +      % endif
> +    % endfor
> +    }
>    % endfor
>    fs_color = GREEN;
>  }
> @@ -90,11 +95,11 @@ piglit_vertex/float/vec3\
>    % endfor
>  
>  % for d in range(len(dvalues)):
> -  % 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 vidx, vertex in enumerate(['-1.0 -1.0  -1.0', ' 1.0 -1.0  0.0', ' 1.0  1.0  1.0', '-1.0  1.0  2.0']):
>  ${vertex} \
>      % for i in range(mat.columns):
>        % for j in range(mat.rows):
> -${dvalues[(d + i * mat.rows + j) % len(dvalues)]}  \
> +${dvalues[(d + i * mat.rows + j + vidx) % len(dvalues)]}  \
>        % endfor
>    \
>      % endfor
> @@ -105,13 +110,15 @@ ${dvalues[(d + i * mat.rows + j) % len(dvalues)]}  \
>  [test]
>  % for d in range(len(dvalues)):
>  
> -  uniform ${mat.name} expected\
> -  % for i in range(mat.columns):
> -    % for j in range(mat.rows):
> -     ${dvalues[(d + i * mat.rows + j) % len(dvalues)]}\
> +  % for vidx in range(4):
> +    uniform ${mat.name} expected${vidx}\
> +    % for i in range(mat.columns):
> +      % for j in range(mat.rows):
> +        ${dvalues[(d + i * mat.rows + j + vidx) % len(dvalues)]}\
> +      % endfor
>      % endfor
> -  % endfor
>  
> +  % endfor
>    clear color 0.0 0.0 1.0 0.0
>    clear
>    draw arrays GL_TRIANGLE_FAN ${d * 4} 4
> 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 b6fab62..5620cbe 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
> @@ -50,7 +50,9 @@ GL_MAX_VERTEX_ATTRIBS >= ${num_vs_in}
>  % endif
>  
>  % for idx, in_type in enumerate(in_types):
> -  uniform ${in_type.name} expected${idx}${'[{}]'.format(arrays[idx]) if arrays[idx] - 1 else ''};
> +  % for vidx in range(4):
> +    uniform ${in_type.name} expected${idx}${vidx}${'[{}]'.format(arrays[idx]) if arrays[idx] - 1 else ''};
> +  % endfor
>  % endfor
>  % for idx, in_type in enumerate(in_types):
>    in ${in_type.name} value${idx}${'[{}]'.format(arrays[idx]) if arrays[idx] - 1 else ''};
> @@ -63,13 +65,16 @@ out vec4 fs_color;
>  
>  void main()
>  {
> -    gl_Position = vec4(piglit_vertex, 1.0);
> -    % for idx, in_type in enumerate(in_types):
> -        if (value${idx} != expected${idx}) {
> -            fs_color = RED;
> -            return;
> -        }
> -    ## XXX: should this have a break?
> +    gl_Position = vec4(piglit_vertex.x, piglit_vertex.y, 0.0, 1.0);
> +    % for vidx, vertex in enumerate(['-1.0', '0.0', '1.0', '2.0']):
> +      if (piglit_vertex.z == ${vertex}) {
> +        % for idx, in_type in enumerate(in_types):
> +          if (value${idx} != expected${idx}${vidx}) {
> +              fs_color = RED;
> +              return;
> +          }
> +        % endfor
> +      }
>      % endfor
>      fs_color = GREEN;
>  }
> @@ -101,7 +106,7 @@ void main()
>  % endif
>  
>  % 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 vidx, vertex in enumerate(['-1.0 -1.0 -1.0', ' 1.0 -1.0  0.0', ' 1.0  1.0  1.0', '-1.0  1.0  2.0']):
>      % for idx, in_type in enumerate(in_types):
>        % if idx == position_order - 1:
>          ${vertex}   \
> @@ -109,7 +114,7 @@ void main()
>        % for i in range(arrays[idx]):
>          % for j in range(in_type.columns):
>            % for k in range(in_type.rows):
> -            ${gl_types_values[gl_types[idx]][(d + (i * in_type.columns + j) * in_type.rows + k) % len(gl_types_values[gl_types[idx]])]}  \
> +            ${gl_types_values[gl_types[idx]][(d + (i * in_type.columns + j) * in_type.rows + k + vidx) % len(gl_types_values[gl_types[idx]])]}  \
>            % endfor
>           \
>          % endfor
> @@ -125,16 +130,18 @@ void main()
>  [test]
>  % 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):
> -	  ## 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]])]}\
> +  % for vidx in range(4):
> +    % for idx, in_type in enumerate(in_types):
> +      % for i in range(arrays[idx]):
> +        uniform ${in_type.name} expected${idx}${vidx}${'[{}]'.format(i) if arrays[idx] > 1 else ''}\
> +        % for j in range(in_type.columns):
> +          % for k in range(in_type.rows):
> +            ## 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 + vidx) % len(gl_types_values[gl_types[idx]])]}\
> +          % endfor
>          % endfor
> -      % endfor
>  
> +      % endfor
>      % endfor
>    % endfor
>    clear color 0.0 0.0 1.0 0.0
Acked-by: Juan A. Suarez <jasuarez@igalia.com>


On Wed, 2016-07-06 at 14:40 +0300, Andres Gomez wrote:
> Before, in every drawing we were having the same VBO values per
> vertex
> to be compared against the values in the uniforms. Now, we also have
> different values per vertex so we can be sure that it is truly its
> own
> data.
> 
> Signed-off-by: Andres Gomez <agomez@igalia.com>
> ---
>  .../gen_vs_in_fp64/columns.shader_test.mako        | 41
> ++++++++++++---------
>  .../gen_vs_in_fp64/regular.shader_test.mako        | 43
> +++++++++++++---------
>  2 files changed, 49 insertions(+), 35 deletions(-)
> 
> diff --git
> a/generated_tests/templates/gen_vs_in_fp64/columns.shader_test.mako
> b/generated_tests/templates/gen_vs_in_fp64/columns.shader_test.mako
> index 2dfb723..f094a03 100644
> ---
> a/generated_tests/templates/gen_vs_in_fp64/columns.shader_test.mako
> +++
> b/generated_tests/templates/gen_vs_in_fp64/columns.shader_test.mako
> @@ -48,7 +48,9 @@ GLSL >= ${glsl}
>    #extension GL_ARB_vertex_attrib_64bit : require
>  % endif
>  
> -uniform ${mat.name} expected;
> +% for vidx in range(4):
> +  uniform ${mat.name} expected${vidx};
> +% endfor
>  
>  in ${mat.name} value;
>  in vec3 piglit_vertex;
> @@ -59,15 +61,18 @@ out vec4 fs_color;
>  
>  void main()
>  {
> -  gl_Position = vec4(piglit_vertex, 1.0);
> -  % for idx, column in enumerate(columns):
> -    % if column == 1:
> -      if (value[${idx}] != expected[${idx}]) {
> -        fs_color = RED;
> -        return;
> -      }
> -      ## XXX: should we break here?
> -    % endif
> +  gl_Position = vec4(piglit_vertex.x, piglit_vertex.y, 0.0, 1.0);
> +  % for vidx, vertex in enumerate(['-1.0', '0.0', '1.0', '2.0']):
> +    if (piglit_vertex.z == ${vertex}) {
> +    % for idx, column in enumerate(columns):
> +      % if column == 1:
> +        if (value[${idx}] != expected${vidx}[${idx}]) {
> +            fs_color = RED;
> +            return;
> +        }
> +      % endif
> +    % endfor
> +    }
>    % endfor
>    fs_color = GREEN;
>  }
> @@ -90,11 +95,11 @@ piglit_vertex/float/vec3\
>    % endfor
>  
>  % for d in range(len(dvalues)):
> -  % 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 vidx, vertex in enumerate(['-1.0 -1.0  -1.0', ' 1.0
> -1.0  0.0', ' 1.0  1.0  1.0', '-1.0  1.0  2.0']):
>  ${vertex} \
>      % for i in range(mat.columns):
>        % for j in range(mat.rows):
> -${dvalues[(d + i * mat.rows + j) % len(dvalues)]}  \
> +${dvalues[(d + i * mat.rows + j + vidx) % len(dvalues)]}  \
>        % endfor
>    \
>      % endfor
> @@ -105,13 +110,15 @@ ${dvalues[(d + i * mat.rows + j) %
> len(dvalues)]}  \
>  [test]
>  % for d in range(len(dvalues)):
>  
> -  uniform ${mat.name} expected\
> -  % for i in range(mat.columns):
> -    % for j in range(mat.rows):
> -     ${dvalues[(d + i * mat.rows + j) % len(dvalues)]}\
> +  % for vidx in range(4):
> +    uniform ${mat.name} expected${vidx}\
> +    % for i in range(mat.columns):
> +      % for j in range(mat.rows):
> +        ${dvalues[(d + i * mat.rows + j + vidx) % len(dvalues)]}\
> +      % endfor
>      % endfor
> -  % endfor
>  
> +  % endfor
>    clear color 0.0 0.0 1.0 0.0
>    clear
>    draw arrays GL_TRIANGLE_FAN ${d * 4} 4
> 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 b6fab62..5620cbe 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
> @@ -50,7 +50,9 @@ GL_MAX_VERTEX_ATTRIBS >= ${num_vs_in}
>  % endif
>  
>  % for idx, in_type in enumerate(in_types):
> -  uniform ${in_type.name} expected${idx}${'[{}]'.format(arrays[idx])
> if arrays[idx] - 1 else ''};
> +  % for vidx in range(4):
> +    uniform ${in_type.name}
> expected${idx}${vidx}${'[{}]'.format(arrays[idx]) if arrays[idx] - 1
> else ''};
> +  % endfor
>  % endfor
>  % for idx, in_type in enumerate(in_types):
>    in ${in_type.name} value${idx}${'[{}]'.format(arrays[idx]) if
> arrays[idx] - 1 else ''};
> @@ -63,13 +65,16 @@ out vec4 fs_color;
>  
>  void main()
>  {
> -    gl_Position = vec4(piglit_vertex, 1.0);
> -    % for idx, in_type in enumerate(in_types):
> -        if (value${idx} != expected${idx}) {
> -            fs_color = RED;
> -            return;
> -        }
> -    ## XXX: should this have a break?
> +    gl_Position = vec4(piglit_vertex.x, piglit_vertex.y, 0.0, 1.0);
> +    % for vidx, vertex in enumerate(['-1.0', '0.0', '1.0', '2.0']):
> +      if (piglit_vertex.z == ${vertex}) {
> +        % for idx, in_type in enumerate(in_types):
> +          if (value${idx} != expected${idx}${vidx}) {
> +              fs_color = RED;
> +              return;
> +          }
> +        % endfor
> +      }
>      % endfor
>      fs_color = GREEN;
>  }
> @@ -101,7 +106,7 @@ void main()
>  % endif
>  
>  % 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 vidx, vertex in enumerate(['-1.0 -1.0 -1.0', ' 1.0
> -1.0  0.0', ' 1.0  1.0  1.0', '-1.0  1.0  2.0']):
>      % for idx, in_type in enumerate(in_types):
>        % if idx == position_order - 1:
>          ${vertex}   \
> @@ -109,7 +114,7 @@ void main()
>        % for i in range(arrays[idx]):
>          % for j in range(in_type.columns):
>            % for k in range(in_type.rows):
> -            ${gl_types_values[gl_types[idx]][(d + (i *
> in_type.columns + j) * in_type.rows + k) %
> len(gl_types_values[gl_types[idx]])]}  \
> +            ${gl_types_values[gl_types[idx]][(d + (i *
> in_type.columns + j) * in_type.rows + k + vidx) %
> len(gl_types_values[gl_types[idx]])]}  \
>            % endfor
>           \
>          % endfor
> @@ -125,16 +130,18 @@ void main()
>  [test]
>  % 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):
> -	  ## 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]])]}\
> +  % for vidx in range(4):
> +    % for idx, in_type in enumerate(in_types):
> +      % for i in range(arrays[idx]):
> +        uniform ${in_type.name}
> expected${idx}${vidx}${'[{}]'.format(i) if arrays[idx] > 1 else ''}\
> +        % for j in range(in_type.columns):
> +          % for k in range(in_type.rows):
> +            ## 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 + vidx) %
> len(gl_types_values[gl_types[idx]])]}\
> +          % endfor
>          % endfor
> -      % endfor
>  
> +      % endfor
>      % endfor
>    % endfor
>    clear color 0.0 0.0 1.0 0.0