progs/perf: add scons support, get working under mingw
authorKeith Whitwell <keithw@vmware.com>
Thu, 17 Sep 2009 11:08:04 +0000 (12:08 +0100)
committerKeith Whitwell <keithw@vmware.com>
Thu, 17 Sep 2009 11:08:04 +0000 (12:08 +0100)
progs/SConscript
progs/perf/SConscript [new file with mode: 0644]
progs/perf/common.c
progs/perf/common.h
progs/perf/drawoverhead.c
progs/perf/glmain.h
progs/perf/teximage.c
progs/perf/vbo.c
progs/perf/vertexrate.c

index 620dd30e69c2559a484c8d36c2f25673bae6fbb0..66eaf9e54104678b8bed4a9775528b7e371200a7 100644 (file)
@@ -10,4 +10,5 @@ SConscript([
     'vpglsl/SConscript',
     'fp/SConscript',
     'wgl/SConscript',
+    'perf/SConscript',
 ])
diff --git a/progs/perf/SConscript b/progs/perf/SConscript
new file mode 100644 (file)
index 0000000..c019dc9
--- /dev/null
@@ -0,0 +1,26 @@
+Import('env')
+
+if not env['GLUT']:
+    Return()
+
+env = env.Clone()
+
+env.Prepend(LIBS = ['$GLUT_LIB'])
+
+progs = [
+      'drawoverhead',
+      'teximage',
+      'vbo',
+      'vertexrate',
+]
+
+for prog in progs:
+    env.Program(
+        target = prog,
+        source = [
+            prog + '.c',
+            'common.c',
+            'glmain.c',
+            ]
+        )
+
index a50fc11cca56ec51869de39cc60632c5fb9795b7..695b8a99d9d077ff7f9ad4bb556a516339d36aa8 100644 (file)
 #include "common.h"
 #include "glmain.h"
 
+#include <stdio.h>
+#include <stdlib.h>
+#include <stdarg.h>
+
+
+/* Need to add a fflush windows console with mingw, otherwise nothing
+ * shows up until program exit.  May want to add logging here.
+ */
+void
+perf_printf(const char *format, ...)
+{
+   va_list ap;
+   va_start(ap, format);
+
+   fflush(stdout);
+   vfprintf(stdout, format, ap);
+   fflush(stdout);
+
+   va_end(ap);
+}
+
+
 
 /**
  * Run function 'f' for enough iterations to reach a steady state.
@@ -52,7 +74,7 @@ PerfMeasureRate(PerfRateFunc f)
          subiters *= 2;
       } while (t1 - t0 < 0.1 * minDuration);
    }
-   /*printf("initial subIters = %u\n", subiters);*/
+   /*perf_printf("initial subIters = %u\n", subiters);*/
 
    while (1) {
       const double t0 = PerfGetTime();
@@ -68,7 +90,7 @@ PerfMeasureRate(PerfRateFunc f)
       rate = iters / (t1 - t0);
 
       if (0)
-         printf("prevRate %f  rate  %f  ratio %f  iters %u\n",
+         perf_printf("prevRate %f  rate  %f  ratio %f  iters %u\n",
                 prevRate, rate, rate/prevRate, iters);
 
       /* Try and speed the search up by skipping a few steps:
@@ -86,7 +108,7 @@ PerfMeasureRate(PerfRateFunc f)
    }
 
    if (0)
-      printf("%s returning iters %u  rate %f\n", __FUNCTION__, subiters, rate);
+      perf_printf("%s returning iters %u  rate %f\n", __FUNCTION__, subiters, rate);
    return rate;
 }
 
index 8b6091530d0c458ecf20ff3cb2a90d41f3acf271..85db678c64ecd7a435a90a82d4944c82eea62dec 100644 (file)
@@ -31,5 +31,9 @@ extern double
 PerfMeasureRate(PerfRateFunc f);
 
 
+extern void
+perf_printf(const char *format, ...);
+
+
 #endif /* COMMON_H */
 
index 8c99804d342704b7f6d6841265be87803a7f4108..a1d5febf19a9d34cc648e5b071df03cf5adaae33 100644 (file)
@@ -116,17 +116,18 @@ PerfDraw(void)
    double rate0, rate1, rate2, overhead;\r
 \r
    rate0 = PerfMeasureRate(DrawNoStateChange);\r
-   printf("   Draw only: %.1f draws/second\n", rate0);\r
+   perf_printf("   Draw only: %.1f draws/second\n", rate0);\r
+   \r
 \r
    rate1 = PerfMeasureRate(DrawNopStateChange);\r
    overhead = 1000.0 * (1.0 / rate1 - 1.0 / rate0);\r
-   printf("   Draw w/ nop state change: %.1f draws/sec (overhead: %f ms/draw)\n",\r
-          rate1, overhead);\r
+   perf_printf("   Draw w/ nop state change: %.1f draws/sec (overhead: %f ms/draw)\n",\r
+               rate1, overhead);\r
 \r
    rate2 = PerfMeasureRate(DrawStateChange);\r
    overhead = 1000.0 * (1.0 / rate2 - 1.0 / rate0);\r
-   printf("   Draw w/ state change: %.1f draws/sec (overhead: %f ms/draw)\n",\r
-          rate2, overhead);\r
+   perf_printf("   Draw w/ state change: %.1f draws/sec (overhead: %f ms/draw)\n",\r
+               rate2, overhead);\r
 \r
    exit(0);\r
 }\r
index 50480a80c0ccab80a10a83aac98a9f93b57dabb0..fe11d7235e0477dd23b7a7dc49d4805a05aa0d25 100644 (file)
@@ -26,7 +26,6 @@
 
 #define GL_GLEXT_PROTOTYPES
 #include <GL/glew.h>
-#include <stdio.h>
 #include <stdlib.h>
 #include <math.h>
 
index b6d4f644dec9dd4a010ea9eb084727627d1e530c..8727536922878859a1dcd0583b28a212c47d3b6b 100644 (file)
@@ -50,8 +50,11 @@ static const struct vertex vertices[1] = {
    { 0.0, 0.0, 0.5, 0.5 },\r
 };\r
 \r
-\r
+#if 0\r
 #define VOFFSET(F) ((void *) offsetof(struct vertex, F))\r
+#else\r
+#define VOFFSET(F) ((void *) &((struct vertex *)NULL)->F)\r
+#endif\r
 \r
 /** Called from test harness/main */\r
 void\r
@@ -196,10 +199,10 @@ PerfDraw(void)
 \r
             mbPerSec = rate * bytesPerImage / (1024.0 * 1024.0);\r
 \r
-            printf("  glTex%sImage2D(%s %d x %d): "\r
-                   "%.1f images/sec, %.1f MB/sec\n",\r
-                   (subImage ? "Sub" : ""),\r
-                   SrcFormats[fmt].name, TexSize, TexSize, rate, mbPerSec);\r
+            perf_printf("  glTex%sImage2D(%s %d x %d): "\r
+                        "%.1f images/sec, %.1f MB/sec\n",\r
+                        (subImage ? "Sub" : ""),\r
+                        SrcFormats[fmt].name, TexSize, TexSize, rate, mbPerSec);\r
 \r
             free(TexImage);\r
          }\r
index 8545a33b7e393dd361032e55e445c2e2e680bfa1..4ed6a88fccbc1dd21794fee5fa00e39213e3cdb4 100644 (file)
@@ -127,8 +127,8 @@ PerfDraw(void)
 \r
          mbPerSec = rate * VBOSize / (1024.0 * 1024.0);\r
 \r
-         printf("  glBuffer%sDataARB(size = %d): %.1f MB/sec\n",\r
-                (sub ? "Sub" : ""), VBOSize, mbPerSec);\r
+         perf_printf("  glBuffer%sDataARB(size = %d): %.1f MB/sec\n",\r
+                     (sub ? "Sub" : ""), VBOSize, mbPerSec);\r
 \r
          free(VBOData);\r
       }\r
index f7e02624cc9e68b858fe08877e34d4c49f207d51..d3dd0c200fd0adb94cff329e605815f7414f5d81 100644 (file)
@@ -237,35 +237,35 @@ PerfDraw(void)
 \r
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);\r
 \r
-   printf("Vertex rate (%d x Vertex%df)\n", NumVerts, VERT_SIZE);\r
+   perf_printf("Vertex rate (%d x Vertex%df)\n", NumVerts, VERT_SIZE);\r
 \r
    rate = PerfMeasureRate(DrawImmediate);\r
    rate *= NumVerts;\r
-   printf("  Immediate mode: %.1f verts/sec\n", rate);\r
+   perf_printf("  Immediate mode: %.1f verts/sec\n", rate);\r
 \r
    rate = PerfMeasureRate(DrawArraysMem);\r
    rate *= NumVerts;\r
-   printf("  glDrawArrays: %.1f verts/sec\n", rate);\r
+   perf_printf("  glDrawArrays: %.1f verts/sec\n", rate);\r
 \r
    rate = PerfMeasureRate(DrawArraysVBO);\r
    rate *= NumVerts;\r
-   printf("  VBO glDrawArrays: %.1f verts/sec\n", rate);\r
+   perf_printf("  VBO glDrawArrays: %.1f verts/sec\n", rate);\r
 \r
    rate = PerfMeasureRate(DrawElementsMem);\r
    rate *= NumVerts;\r
-   printf("  glDrawElements: %.1f verts/sec\n", rate);\r
+   perf_printf("  glDrawElements: %.1f verts/sec\n", rate);\r
 \r
    rate = PerfMeasureRate(DrawElementsBO);\r
    rate *= NumVerts;\r
-   printf("  VBO glDrawElements: %.1f verts/sec\n", rate);\r
+   perf_printf("  VBO glDrawElements: %.1f verts/sec\n", rate);\r
 \r
    rate = PerfMeasureRate(DrawRangeElementsMem);\r
    rate *= NumVerts;\r
-   printf("  glDrawRangeElements: %.1f verts/sec\n", rate);\r
+   perf_printf("  glDrawRangeElements: %.1f verts/sec\n", rate);\r
 \r
    rate = PerfMeasureRate(DrawRangeElementsBO);\r
    rate *= NumVerts;\r
-   printf("  VBO glDrawRangeElements: %.1f verts/sec\n", rate);\r
+   perf_printf("  VBO glDrawRangeElements: %.1f verts/sec\n", rate);\r
 \r
    exit(0);\r
 }\r