[Piglit] [PATCH] glsl-1.50: enhance vs input test to include matrix inputs.
Dave Airlie
airlied at gmail.com
Thu Dec 10 22:22:34 PST 2015
From: Dave Airlie <airlied at redhat.com>
This exercises a bug in mesa when vertex inputs are matrices
and we return the wrong location to GetAttribLocation.
Signed-off-by: Dave Airlie <airlied at redhat.com>
---
tests/spec/glsl-1.50/execution/vs-input-arrays.c | 43 +++++++++++++++++++++---
1 file changed, 39 insertions(+), 4 deletions(-)
diff --git a/tests/spec/glsl-1.50/execution/vs-input-arrays.c b/tests/spec/glsl-1.50/execution/vs-input-arrays.c
index beeb418..79f0b0f 100644
--- a/tests/spec/glsl-1.50/execution/vs-input-arrays.c
+++ b/tests/spec/glsl-1.50/execution/vs-input-arrays.c
@@ -59,6 +59,7 @@ static const char vs_text[] =
"in float a[2];\n"
"in int b[2];\n"
"in vec3 c[2];\n"
+ "in mat2 d[2];\n"
"\n"
"out float i_failed;\n"
"\n"
@@ -82,6 +83,15 @@ static const char vs_text[] =
" if( c[1].x != 4.0 + float(gl_VertexID) ) failed = true;\n"
" if( c[1].y != 5.0 + float(gl_VertexID) ) failed = true;\n"
" if( c[1].z != 6.0 + float(gl_VertexID) ) failed = true;\n"
+ "\n"
+ " if( d[0][0].x != 1.0 + float(gl_VertexID) ) failed = true;\n"
+ " if( d[0][0].y != 2.0 + float(gl_VertexID) ) failed = true;\n"
+ " if( d[0][1].x != 3.0 + float(gl_VertexID) ) failed = true;\n"
+ " if( d[0][1].y != 4.0 + float(gl_VertexID) ) failed = true;\n"
+ " if( d[1][0].x != 5.0 + float(gl_VertexID) ) failed = true;\n"
+ " if( d[1][0].y != 6.0 + float(gl_VertexID) ) failed = true;\n"
+ " if( d[1][1].x != 7.0 + float(gl_VertexID) ) failed = true;\n"
+ " if( d[1][1].y != 8.0 + float(gl_VertexID) ) failed = true;\n"
" \n"
" if (failed)\n"
" i_failed = 1;\n"
@@ -116,33 +126,42 @@ struct vertex_inputs {
GLfloat a[2];
GLint b[2];
GLfloat c[2][3];
+ GLfloat d[4][2];
} vertex_data[] = {
{ { -1.0, -1.0, 0.0 },
{ 10.0, 20.0 },
{ 30, 40 },
{ { 1.0, 2.0, 3.0 },
- { 4.0, 5.0, 6.0 } }
+ { 4.0, 5.0, 6.0 } },
+ { { 1.0, 2.0 }, { 3.0, 4.0 },
+ { 5.0, 6.0 }, { 7.0, 8.0 } }
},
{ { -1.0, 1.0, 0.0 },
{ 11.0, 21.0 },
{ 31, 41 },
{ { 2.0, 3.0, 4.0 },
- { 5.0, 6.0, 7.0 } }
+ { 5.0, 6.0, 7.0 } },
+ { { 2.0, 3.0 }, { 4.0, 5.0 },
+ { 6.0, 7.0 }, { 8.0, 9.0 } }
},
{ { 1.0, 1.0, 0.0 },
{ 12.0, 22.0 },
{ 32, 42 },
{ { 3.0, 4.0, 5.0 },
- { 6.0, 7.0, 8.0 } }
+ { 6.0, 7.0, 8.0 } },
+ { { 3.0, 4.0 }, { 5.0, 6.0 },
+ { 7.0, 8.0 }, { 9.0, 10.0 } }
},
{ { 1.0, -1.0, 0.0 },
{ 13.0, 23.0 },
{ 33, 43 },
{ { 4.0, 5.0, 6.0 },
- { 7.0, 8.0, 9.0 } }
+ { 7.0, 8.0, 9.0 } },
+ { { 4.0, 5.0 }, { 6.0, 7.0 },
+ { 8.0, 9.0 }, { 10.0, 11.0 } }
}
};
@@ -156,6 +175,7 @@ piglit_init(int argc, char **argv)
GLint a_index;
GLint b_index;
GLint c_index;
+ GLint d_index[2];
prog = piglit_build_simple_program(vs_text, fs_text);
@@ -174,6 +194,8 @@ piglit_init(int argc, char **argv)
a_index = glGetAttribLocation( prog, "a" );
b_index = glGetAttribLocation( prog, "b" );
c_index = glGetAttribLocation( prog, "c" );
+ d_index[0] = glGetAttribLocation( prog, "d[0]" );
+ d_index[1] = glGetAttribLocation( prog, "d[1]" );
/* create buffers */
glGenBuffers( 1, &vbo );
@@ -201,6 +223,15 @@ piglit_init(int argc, char **argv)
glVertexAttribPointer( c_index + 1, 3, GL_FLOAT, GL_FALSE, stride,
(void*) offsetof( vertex_inputs, c[1] ));
+ glVertexAttribPointer( d_index[0], 2, GL_FLOAT, GL_FALSE, stride,
+ (void*) offsetof( vertex_inputs, d[0] ));
+ glVertexAttribPointer( d_index[0] + 1, 2, GL_FLOAT, GL_FALSE, stride,
+ (void*) offsetof( vertex_inputs, d[1] ));
+ glVertexAttribPointer( d_index[1], 2, GL_FLOAT, GL_FALSE, stride,
+ (void*) offsetof( vertex_inputs, d[2] ));
+ glVertexAttribPointer( d_index[1] + 1, 2, GL_FLOAT, GL_FALSE, stride,
+ (void*) offsetof( vertex_inputs, d[3] ));
+
/* enable vertex attrib arrays */
glEnableVertexAttribArray( vertex_index );
glEnableVertexAttribArray( a_index );
@@ -209,6 +240,10 @@ piglit_init(int argc, char **argv)
glEnableVertexAttribArray( b_index + 1 );
glEnableVertexAttribArray( c_index );
glEnableVertexAttribArray( c_index + 1 );
+ glEnableVertexAttribArray( d_index[0] );
+ glEnableVertexAttribArray( d_index[0] + 1);
+ glEnableVertexAttribArray( d_index[1] );
+ glEnableVertexAttribArray( d_index[1] + 1);
if (!piglit_check_gl_error(GL_NO_ERROR))
piglit_report_result(PIGLIT_FAIL);
--
2.5.0
More information about the Piglit
mailing list