From e95a3a23dca9fc7aaa89237059d841f624b438db Mon Sep 17 00:00:00 2001 From: Keith Whitwell Date: Thu, 17 Sep 2009 12:08:04 +0100 Subject: [PATCH] progs/perf: add scons support, get working under mingw --- progs/SConscript | 1 + progs/perf/SConscript | 26 ++++++++++++++++++++++++++ progs/perf/common.c | 28 +++++++++++++++++++++++++--- progs/perf/common.h | 4 ++++ progs/perf/drawoverhead.c | 11 ++++++----- progs/perf/glmain.h | 1 - progs/perf/teximage.c | 13 ++++++++----- progs/perf/vbo.c | 4 ++-- progs/perf/vertexrate.c | 16 ++++++++-------- 9 files changed, 80 insertions(+), 24 deletions(-) create mode 100644 progs/perf/SConscript diff --git a/progs/SConscript b/progs/SConscript index 620dd30e69c..66eaf9e5410 100644 --- a/progs/SConscript +++ b/progs/SConscript @@ -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 index 00000000000..c019dc95b0f --- /dev/null +++ b/progs/perf/SConscript @@ -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', + ] + ) + diff --git a/progs/perf/common.c b/progs/perf/common.c index a50fc11cca5..695b8a99d9d 100644 --- a/progs/perf/common.c +++ b/progs/perf/common.c @@ -26,6 +26,28 @@ #include "common.h" #include "glmain.h" +#include +#include +#include + + +/* 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; } diff --git a/progs/perf/common.h b/progs/perf/common.h index 8b6091530d0..85db678c64e 100644 --- a/progs/perf/common.h +++ b/progs/perf/common.h @@ -31,5 +31,9 @@ extern double PerfMeasureRate(PerfRateFunc f); +extern void +perf_printf(const char *format, ...); + + #endif /* COMMON_H */ diff --git a/progs/perf/drawoverhead.c b/progs/perf/drawoverhead.c index 8c99804d342..a1d5febf19a 100644 --- a/progs/perf/drawoverhead.c +++ b/progs/perf/drawoverhead.c @@ -116,17 +116,18 @@ PerfDraw(void) double rate0, rate1, rate2, overhead; rate0 = PerfMeasureRate(DrawNoStateChange); - printf(" Draw only: %.1f draws/second\n", rate0); + perf_printf(" Draw only: %.1f draws/second\n", rate0); + rate1 = PerfMeasureRate(DrawNopStateChange); overhead = 1000.0 * (1.0 / rate1 - 1.0 / rate0); - printf(" Draw w/ nop state change: %.1f draws/sec (overhead: %f ms/draw)\n", - rate1, overhead); + perf_printf(" Draw w/ nop state change: %.1f draws/sec (overhead: %f ms/draw)\n", + rate1, overhead); rate2 = PerfMeasureRate(DrawStateChange); overhead = 1000.0 * (1.0 / rate2 - 1.0 / rate0); - printf(" Draw w/ state change: %.1f draws/sec (overhead: %f ms/draw)\n", - rate2, overhead); + perf_printf(" Draw w/ state change: %.1f draws/sec (overhead: %f ms/draw)\n", + rate2, overhead); exit(0); } diff --git a/progs/perf/glmain.h b/progs/perf/glmain.h index 50480a80c0c..fe11d7235e0 100644 --- a/progs/perf/glmain.h +++ b/progs/perf/glmain.h @@ -26,7 +26,6 @@ #define GL_GLEXT_PROTOTYPES #include -#include #include #include diff --git a/progs/perf/teximage.c b/progs/perf/teximage.c index b6d4f644dec..87275369228 100644 --- a/progs/perf/teximage.c +++ b/progs/perf/teximage.c @@ -50,8 +50,11 @@ static const struct vertex vertices[1] = { { 0.0, 0.0, 0.5, 0.5 }, }; - +#if 0 #define VOFFSET(F) ((void *) offsetof(struct vertex, F)) +#else +#define VOFFSET(F) ((void *) &((struct vertex *)NULL)->F) +#endif /** Called from test harness/main */ void @@ -196,10 +199,10 @@ PerfDraw(void) mbPerSec = rate * bytesPerImage / (1024.0 * 1024.0); - printf(" glTex%sImage2D(%s %d x %d): " - "%.1f images/sec, %.1f MB/sec\n", - (subImage ? "Sub" : ""), - SrcFormats[fmt].name, TexSize, TexSize, rate, mbPerSec); + perf_printf(" glTex%sImage2D(%s %d x %d): " + "%.1f images/sec, %.1f MB/sec\n", + (subImage ? "Sub" : ""), + SrcFormats[fmt].name, TexSize, TexSize, rate, mbPerSec); free(TexImage); } diff --git a/progs/perf/vbo.c b/progs/perf/vbo.c index 8545a33b7e3..4ed6a88fccb 100644 --- a/progs/perf/vbo.c +++ b/progs/perf/vbo.c @@ -127,8 +127,8 @@ PerfDraw(void) mbPerSec = rate * VBOSize / (1024.0 * 1024.0); - printf(" glBuffer%sDataARB(size = %d): %.1f MB/sec\n", - (sub ? "Sub" : ""), VBOSize, mbPerSec); + perf_printf(" glBuffer%sDataARB(size = %d): %.1f MB/sec\n", + (sub ? "Sub" : ""), VBOSize, mbPerSec); free(VBOData); } diff --git a/progs/perf/vertexrate.c b/progs/perf/vertexrate.c index f7e02624cc9..d3dd0c200fd 100644 --- a/progs/perf/vertexrate.c +++ b/progs/perf/vertexrate.c @@ -237,35 +237,35 @@ PerfDraw(void) glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - printf("Vertex rate (%d x Vertex%df)\n", NumVerts, VERT_SIZE); + perf_printf("Vertex rate (%d x Vertex%df)\n", NumVerts, VERT_SIZE); rate = PerfMeasureRate(DrawImmediate); rate *= NumVerts; - printf(" Immediate mode: %.1f verts/sec\n", rate); + perf_printf(" Immediate mode: %.1f verts/sec\n", rate); rate = PerfMeasureRate(DrawArraysMem); rate *= NumVerts; - printf(" glDrawArrays: %.1f verts/sec\n", rate); + perf_printf(" glDrawArrays: %.1f verts/sec\n", rate); rate = PerfMeasureRate(DrawArraysVBO); rate *= NumVerts; - printf(" VBO glDrawArrays: %.1f verts/sec\n", rate); + perf_printf(" VBO glDrawArrays: %.1f verts/sec\n", rate); rate = PerfMeasureRate(DrawElementsMem); rate *= NumVerts; - printf(" glDrawElements: %.1f verts/sec\n", rate); + perf_printf(" glDrawElements: %.1f verts/sec\n", rate); rate = PerfMeasureRate(DrawElementsBO); rate *= NumVerts; - printf(" VBO glDrawElements: %.1f verts/sec\n", rate); + perf_printf(" VBO glDrawElements: %.1f verts/sec\n", rate); rate = PerfMeasureRate(DrawRangeElementsMem); rate *= NumVerts; - printf(" glDrawRangeElements: %.1f verts/sec\n", rate); + perf_printf(" glDrawRangeElements: %.1f verts/sec\n", rate); rate = PerfMeasureRate(DrawRangeElementsBO); rate *= NumVerts; - printf(" VBO glDrawRangeElements: %.1f verts/sec\n", rate); + perf_printf(" VBO glDrawRangeElements: %.1f verts/sec\n", rate); exit(0); } -- 2.30.2