summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarek Olšák <maraeo@gmail.com>2012-07-05 12:27:02 +0200
committerMarek Olšák <maraeo@gmail.com>2012-07-10 16:45:24 +0200
commit1208abca5646748758ff9dc6458491ce2e312079 (patch)
tree34fec1002e59254e8e319e6a5ace6b49df42c976
parentdf2cfb4d1cee5fc936c964c4bcc46f8daae08301 (diff)
Add a test for ARB_transform_feedback_instanced
Reviewed-by: Brian Paul <brianp@vmware.com>
-rw-r--r--tests/all.tests4
-rw-r--r--tests/spec/arb_transform_feedback2/draw-auto.c40
2 files changed, 39 insertions, 5 deletions
diff --git a/tests/all.tests b/tests/all.tests
index 459b1e532..5408e0042 100644
--- a/tests/all.tests
+++ b/tests/all.tests
@@ -1788,6 +1788,10 @@ arb_transform_feedback2 = Group()
spec['ARB_transform_feedback2'] = arb_transform_feedback2
arb_transform_feedback2['draw-auto'] = PlainExecTest(['arb_transform_feedback2-draw-auto', '-auto'])
+arb_transform_feedback_instanced = Group()
+spec['ARB_transform_feedback_instanced'] = arb_transform_feedback_instanced
+arb_transform_feedback_instanced['draw-auto instanced'] = PlainExecTest(['arb_transform_feedback2-draw-auto', '-auto', 'instanced'])
+
arb_transform_feedback3 = Group()
spec['ARB_transform_feedback3'] = arb_transform_feedback3
diff --git a/tests/spec/arb_transform_feedback2/draw-auto.c b/tests/spec/arb_transform_feedback2/draw-auto.c
index 06f55ca62..e7fe8bb8a 100644
--- a/tests/spec/arb_transform_feedback2/draw-auto.c
+++ b/tests/spec/arb_transform_feedback2/draw-auto.c
@@ -31,7 +31,7 @@
PIGLIT_GL_TEST_MAIN(
64 /*window_width*/,
- 64 /*window_height*/,
+ 128 /*window_height*/,
GLUT_DOUBLE | GLUT_RGB | GLUT_ALPHA)
static const char *vstext = {
@@ -42,21 +42,32 @@ static const char *vstext = {
};
static const char *vstext_notransform = {
"void main() {"
- " gl_Position = gl_Vertex + vec4(0.0, 0.625, 0.0, 0.0);"
+ " gl_Position = gl_Vertex + vec4(0.0, 0.32, 0.0, 0.0);"
+ " gl_FrontColor = gl_Color;"
+ "}"
+};
+static const char *vstext_notransform_instanced = {
+ "#extension GL_ARB_draw_instanced : enable\n"
+ "void main() {"
+ " gl_Position = gl_Vertex + vec4(0.0, 0.32 * float(gl_InstanceID+1), 0.0, 0.0);"
" gl_FrontColor = gl_Color;"
"}"
};
static const char *varyings[] = {"gl_FrontColor", "gl_Position"};
GLuint buf;
-GLuint prog, prog_notransform;
+GLuint prog, prog_notransform, prog_notransform_instanced;
GLuint tfb;
+GLboolean instanced;
void piglit_init(int argc, char **argv)
{
GLuint vs;
GLint maxcomps;
+ if (argc == 2 && strcmp(argv[1], "instanced") == 0)
+ instanced = GL_TRUE;
+
piglit_ortho_projection(piglit_width, piglit_height, GL_FALSE);
/* Check the driver. */
@@ -67,6 +78,8 @@ void piglit_init(int argc, char **argv)
piglit_require_GLSL();
piglit_require_extension("GL_EXT_transform_feedback");
piglit_require_extension("GL_ARB_transform_feedback2");
+ if (instanced)
+ piglit_require_extension("GL_ARB_transform_feedback_instanced");
glGetIntegerv(GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS_EXT, &maxcomps);
if (maxcomps < 8) {
@@ -88,6 +101,10 @@ void piglit_init(int argc, char **argv)
vs = piglit_compile_shader_text(GL_VERTEX_SHADER, vstext_notransform);
prog_notransform = piglit_link_simple_program(vs, 0);
+ if (instanced) {
+ vs = piglit_compile_shader_text(GL_VERTEX_SHADER, vstext_notransform_instanced);
+ prog_notransform_instanced = piglit_link_simple_program(vs, 0);
+ }
/* Set up transform feedback. */
glGenBuffers(1, &buf);
@@ -149,12 +166,16 @@ enum piglit_result piglit_display(void)
assert(glGetError() == 0);
- piglit_UseProgram(prog_notransform);
+ piglit_UseProgram(instanced ? prog_notransform_instanced : prog_notransform);
glBindBuffer(GL_ARRAY_BUFFER, buf);
glEnableClientState(GL_COLOR_ARRAY);
glColorPointer(4, GL_FLOAT, sizeof(float)*8, NULL);
glVertexPointer(4, GL_FLOAT, sizeof(float)*8, (void*)(intptr_t)(4*sizeof(float)));
- glDrawTransformFeedback(GL_TRIANGLES, tfb);
+ if (instanced) {
+ glDrawTransformFeedbackInstanced(GL_TRIANGLES, tfb, 4);
+ } else {
+ glDrawTransformFeedback(GL_TRIANGLES, tfb);
+ }
glDisableClientState(GL_COLOR_ARRAY);
glBindBuffer(GL_ARRAY_BUFFER, 0);
@@ -168,6 +189,15 @@ enum piglit_result piglit_display(void)
pass = piglit_probe_pixel_rgb(35, 35, clearcolor) && pass;
pass = piglit_probe_pixel_rgb(55, 35, blue) && pass;
+ if (instanced) {
+ unsigned i;
+ for (i = 1; i < 4; i++) {
+ pass = piglit_probe_pixel_rgb(15, 35 + 20*i, red) && pass;
+ pass = piglit_probe_pixel_rgb(35, 35 + 20*i, clearcolor) && pass;
+ pass = piglit_probe_pixel_rgb(55, 35 + 20*i, blue) && pass;
+ }
+ }
+
glutSwapBuffers();
return pass ? PIGLIT_PASS : PIGLIT_FAIL;