[Piglit] [PATCH v4 4/4] arb_instanced_arrays: test instanced_arrays with VBOs

Jordan Justen jordan.l.justen at intel.com
Sun May 27 21:37:58 PDT 2012


The new test named instanced_arrays-vbo which adds a vbo
parameter when running the instanced_arrays test. This
will cause the test to run while using VBOs.

Signed-off-by: Jordan Justen <jordan.l.justen at intel.com>
---
 tests/all.tests                                    |    1 +
 tests/spec/arb_instanced_arrays/instanced_arrays.c |   47 +++++++++++++++++---
 2 files changed, 41 insertions(+), 7 deletions(-)

diff --git a/tests/all.tests b/tests/all.tests
index 374f8cf..892ee39 100644
--- a/tests/all.tests
+++ b/tests/all.tests
@@ -1682,6 +1682,7 @@ add_plain_test(ati_envmap_bumpmap, 'ati_envmap_bumpmap-bump')
 arb_instanced_arrays = Group()
 spec['ARB_instanced_arrays'] = arb_instanced_arrays
 add_plain_test(arb_instanced_arrays, 'instanced_arrays')
+add_single_param_test_set(arb_instanced_arrays, 'instanced_arrays', 'vbo')
 
 arb_map_buffer_range = Group()
 spec['ARB_map_buffer_range'] = arb_map_buffer_range
diff --git a/tests/spec/arb_instanced_arrays/instanced_arrays.c b/tests/spec/arb_instanced_arrays/instanced_arrays.c
index ce8318f..d6c14bc 100644
--- a/tests/spec/arb_instanced_arrays/instanced_arrays.c
+++ b/tests/spec/arb_instanced_arrays/instanced_arrays.c
@@ -61,6 +61,8 @@ static const char *FragShaderText =
 
 static GLuint VertShader, FragShader, Program;
 
+static GLboolean use_vbo = GL_FALSE;
+
 static const GLfloat Positions[PRIMS][2] = {
    { -6, 6 },
    { -4, 4 },
@@ -90,14 +92,39 @@ test_instancing(GLuint divisor)
    static const GLfloat verts[4][2] = {
       {-1, -1}, {1, -1}, {1, 1}, {-1, 1}
    };
-   
-   glVertexPointer(2, GL_FLOAT, 0, verts);
-   glEnableClientState(GL_VERTEX_ARRAY);
+   GLuint vbo;
+   uintptr_t offset = 0;
+
+   if (use_vbo) {
+      glGenBuffers(1, &vbo);
+      glBindBuffer(GL_ARRAY_BUFFER, vbo);
+      glBufferData(GL_ARRAY_BUFFER,
+                   sizeof(verts) + sizeof(Positions) + sizeof(Colors),
+                   NULL,
+                   GL_STATIC_DRAW);
+      glBufferSubData(GL_ARRAY_BUFFER, offset, sizeof(verts), verts);
+      glVertexPointer(2, GL_FLOAT, 0, (void*) offset);
+      offset += sizeof(verts);
+
+      glBufferSubData(GL_ARRAY_BUFFER, offset, sizeof(Positions), Positions);
+      glVertexAttribPointer(PosAttrib, 2, GL_FLOAT, GL_FALSE, 0, (void*) offset);
+      offset += sizeof(Positions);
+
+      glBufferSubData(GL_ARRAY_BUFFER, offset, sizeof(Colors), Colors);
+      glVertexAttribPointer(ColorAttrib, 4, GL_FLOAT, GL_FALSE, 0, (void*) offset);
+      offset += sizeof(Colors);
+
+      glBindBuffer(GL_ARRAY_BUFFER, 0);
+   } else {
+      glVertexPointer(2, GL_FLOAT, 0, verts);
+      glVertexAttribPointer(PosAttrib, 2, GL_FLOAT, GL_FALSE, 0, Positions);
+      glVertexAttribPointer(ColorAttrib, 4, GL_FLOAT, GL_FALSE, 0, Colors);
+   }
 
-   glVertexAttribPointer(PosAttrib, 2, GL_FLOAT, GL_FALSE, 0, Positions);
-   glVertexAttribPointer(ColorAttrib, 4, GL_FLOAT, GL_FALSE, 0, Colors);
+   glEnableClientState(GL_VERTEX_ARRAY);
    glEnableVertexAttribArray(PosAttrib);
    glEnableVertexAttribArray(ColorAttrib);
+
    glVertexAttribDivisorARB(PosAttrib, 1);
    /* advance color once every 'n' instances */
    glVertexAttribDivisorARB(ColorAttrib, divisor);
@@ -110,6 +137,10 @@ test_instancing(GLuint divisor)
 
    glUseProgram(0);
 
+   if (use_vbo) {
+      glDeleteBuffers(1, &vbo);
+   }
+
    {
       GLint i;
       GLint pos[4];
@@ -136,8 +167,6 @@ test_instancing(GLuint divisor)
    glDisableVertexAttribArray(PosAttrib);
    glDisableVertexAttribArray(ColorAttrib);
 
-   glutSwapBuffers();
-
    return GL_TRUE;
 }
 
@@ -183,4 +212,8 @@ piglit_init(int argc, char **argv)
    glLoadIdentity();
    glTranslatef(0, 0, -11.0);
    glScalef(0.5, 0.5, 1.0);
+
+   if ((argc >= 2) && (strcmp(argv[1], "vbo") == 0)) {
+      use_vbo = GL_TRUE;
+   }
 }
-- 
1.7.9.5



More information about the Piglit mailing list