progs/perf: add another VBO test for Create/Draw/Destroy pattern
authorBrian Paul <brianp@vmware.com>
Tue, 22 Sep 2009 15:53:35 +0000 (09:53 -0600)
committerBrian Paul <brianp@vmware.com>
Tue, 22 Sep 2009 15:53:35 +0000 (09:53 -0600)
Report both MB/sec and draw/sec.

progs/perf/vbo.c

index ab893315e7fa47e9ca361c74320aa968f1047471..a9d4102de9f9a3743f9769b78f7957c194b7af19 100644 (file)
@@ -41,7 +41,7 @@ static GLuint VBO;
 
 static GLsizei VBOSize = 0;
 static GLsizei SubSize = 0;
-static GLubyte *VBOData = NULL;
+static GLubyte *VBOData = NULL;  /* array[DATA_SIZE] */
 
 static const GLboolean DrawPoint = GL_TRUE;
 static const GLboolean BufferSubDataInHalves = GL_TRUE;
@@ -107,6 +107,7 @@ UploadSubVBO(unsigned count)
    glFinish();
 }
 
+
 /* Do multiple small SubData uploads, then call DrawArrays.  This may be a
  * fairer comparison to back-to-back BufferData calls:
  */
@@ -132,6 +133,31 @@ BatchUploadSubVBO(unsigned count)
 }
 
 
+/**
+ * Test the sequence:
+ *    create/load VBO
+ *    draw
+ *    destroy VBO
+ */
+static void
+CreateDrawDestroyVBO(unsigned count)
+{
+   unsigned i;
+   for (i = 0; i < count; i++) {
+      GLuint vbo;
+      /* create/load */
+      glGenBuffersARB(1, &vbo);
+      glBufferDataARB(GL_ARRAY_BUFFER, VBOSize, VBOData, GL_STREAM_DRAW_ARB);
+      /* draw */
+      glVertexPointer(2, GL_FLOAT, sizeof(Vertex0), (void *) 0);
+      glDrawArrays(GL_POINTS, 0, 1);
+      /* destroy */
+      glDeleteBuffersARB(1, &vbo);
+   }
+   glFinish();
+}
+
+
 static const GLsizei Sizes[] = {
    64,
    1024,
@@ -164,7 +190,6 @@ PerfDraw(void)
              sizeof(Vertex0));
    }
 
-
    /* glBufferDataARB()
     */
    for (sz = 0; Sizes[sz]; sz++) {
@@ -206,5 +231,15 @@ PerfDraw(void)
                   SubSize, VBOSize, mbPerSec);
    }
 
+   /* Create/Draw/Destroy
+    */
+   for (sz = 0; Sizes[sz]; sz++) {
+      SubSize = VBOSize = Sizes[sz];
+      rate = PerfMeasureRate(CreateDrawDestroyVBO);
+      mbPerSec = rate * VBOSize / (1024.0 * 1024.0);
+      perf_printf("  VBO Create/Draw/Destroy(size = %d): %.1f MB/sec, %.1f draws/sec\n",
+                  VBOSize, mbPerSec, rate);
+   }
+
    exit(0);
 }