summaryrefslogtreecommitdiff
path: root/progs/perf
diff options
context:
space:
mode:
Diffstat (limited to 'progs/perf')
-rw-r--r--progs/perf/.gitignore10
-rw-r--r--progs/perf/Makefile55
-rw-r--r--progs/perf/SConscript32
-rw-r--r--progs/perf/common.c137
-rw-r--r--progs/perf/common.h44
-rw-r--r--progs/perf/copytex.c214
-rw-r--r--progs/perf/drawoverhead.c137
-rw-r--r--progs/perf/fbobind.c153
-rw-r--r--progs/perf/fill.c248
-rw-r--r--progs/perf/genmipmap.c142
-rw-r--r--progs/perf/glmain.c268
-rw-r--r--progs/perf/glmain.h68
-rw-r--r--progs/perf/readpixels.c169
-rw-r--r--progs/perf/swapbuffers.c161
-rw-r--r--progs/perf/teximage.c331
-rw-r--r--progs/perf/vbo.c246
-rw-r--r--progs/perf/vertexrate.c276
17 files changed, 0 insertions, 2691 deletions
diff --git a/progs/perf/.gitignore b/progs/perf/.gitignore
deleted file mode 100644
index 7e8fe616cd..0000000000
--- a/progs/perf/.gitignore
+++ /dev/null
@@ -1,10 +0,0 @@
-copytex
-drawoverhead
-fbobind
-fill
-genmipmap
-readpixels
-swapbuffers
-teximage
-vbo
-vertexrate
diff --git a/progs/perf/Makefile b/progs/perf/Makefile
deleted file mode 100644
index f7b965542e..0000000000
--- a/progs/perf/Makefile
+++ /dev/null
@@ -1,55 +0,0 @@
-# progs/demos/Makefile
-
-TOP = ../..
-include $(TOP)/configs/current
-
-INCDIR = $(TOP)/include
-
-LIBS = -L$(TOP)/$(LIB_DIR) -l$(GLUT_LIB) -l$(GLEW_LIB) \
- -l$(GLU_LIB) -l$(GL_LIB) $(APP_LIB_DEPS)
-
-# using : to avoid APP_CC pointing to CC loop
-CC := $(APP_CC)
-CFLAGS := -I$(INCDIR) $(CFLAGS)
-LDLIBS = $(LIBS)
-
-PROG_SOURCES = \
- copytex.c \
- drawoverhead.c \
- fbobind.c \
- fill.c \
- genmipmap.c \
- readpixels.c \
- swapbuffers.c \
- teximage.c \
- vbo.c \
- vertexrate.c \
-
-PROG_OBJS = $(PROG_SOURCES:.c=.o)
-
-PROGS = $(PROG_SOURCES:%.c=%)
-
-
-UTIL_SOURCES = \
- common.c \
- glmain.c
-
-UTIL_HEADERS = \
- common.h \
- glmain.h
-
-UTIL_OBJS = $(UTIL_SOURCES:.c=.o)
-
-
-
-default: $(PROGS)
-
-$(PROG_OBJS): $(UTIL_HEADERS)
-
-$(PROGS): $(UTIL_OBJS)
-
-
-
-clean:
- -rm -f $(PROGS)
- -rm -f *.o *~
diff --git a/progs/perf/SConscript b/progs/perf/SConscript
deleted file mode 100644
index a5ec9a7c2a..0000000000
--- a/progs/perf/SConscript
+++ /dev/null
@@ -1,32 +0,0 @@
-Import('env')
-
-if not env['GLUT']:
- Return()
-
-env = env.Clone()
-
-env.Prepend(LIBS = ['$GLUT_LIB'])
-
-progs = [
- 'copytex',
- 'drawoverhead',
- 'fbobind',
- 'fill',
- 'genmipmap',
- 'readpixels',
- 'swapbuffers',
- '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
deleted file mode 100644
index b6489ef918..0000000000
--- a/progs/perf/common.c
+++ /dev/null
@@ -1,137 +0,0 @@
-/*
- * Copyright (C) 2009 VMware, Inc. All Rights Reserved.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included
- * in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
- * VMWARE BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
- * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- */
-
-/**
- * Common perf code. This should be re-usable with other APIs.
- */
-
-#include "common.h"
-#include "glmain.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <stdarg.h>
-
-#if defined(_MSC_VER)
-#define snprintf _snprintf
-#endif
-
-
-/* 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.
- * Return the rate (iterations/second).
- */
-double
-PerfMeasureRate(PerfRateFunc f)
-{
- const double minDuration = 1.0;
- double rate = 0.0, prevRate = 0.0;
- unsigned subiters;
-
- /* Compute initial number of iterations to try.
- * If the test function is pretty slow this helps to avoid
- * extraordarily long run times.
- */
- subiters = 2;
- {
- const double t0 = PerfGetTime();
- double t1;
- do {
- f(subiters); /* call the rendering function */
- t1 = PerfGetTime();
- subiters *= 2;
- } while (t1 - t0 < 0.1 * minDuration);
- }
- /*perf_printf("initial subIters = %u\n", subiters);*/
-
- while (1) {
- const double t0 = PerfGetTime();
- unsigned iters = 0;
- double t1;
-
- do {
- f(subiters); /* call the rendering function */
- t1 = PerfGetTime();
- iters += subiters;
- } while (t1 - t0 < minDuration);
-
- rate = iters / (t1 - t0);
-
- if (0)
- 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:
- */
- if (rate > prevRate * 1.6)
- subiters *= 8;
- else if (rate > prevRate * 1.2)
- subiters *= 4;
- else if (rate > prevRate * 1.05)
- subiters *= 2;
- else
- break;
-
- prevRate = rate;
- }
-
- if (0)
- perf_printf("%s returning iters %u rate %f\n", __FUNCTION__, subiters, rate);
- return rate;
-}
-
-
-/* Note static buffer, can only use once per printf.
- */
-const char *
-PerfHumanFloat( double d )
-{
- static char buf[80];
-
- if (d > 1000000000.0)
- snprintf(buf, sizeof(buf), "%.1f billion", d / 1000000000.0);
- else if (d > 1000000.0)
- snprintf(buf, sizeof(buf), "%.1f million", d / 1000000.0);
- else if (d > 1000.0)
- snprintf(buf, sizeof(buf), "%.1f thousand", d / 1000.0);
- else
- snprintf(buf, sizeof(buf), "%.1f", d);
-
- return buf;
-}
diff --git a/progs/perf/common.h b/progs/perf/common.h
deleted file mode 100644
index 6ea17402b5..0000000000
--- a/progs/perf/common.h
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Copyright (C) 2009 VMware, Inc. All Rights Reserved.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included
- * in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
- * VMWARE BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
- * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- */
-
-
-#ifndef COMMON_H
-#define COMMON_H
-
-
-#include <stddef.h> /* for offsetof() */
-
-
-typedef void (*PerfRateFunc)(unsigned count);
-
-
-extern double
-PerfMeasureRate(PerfRateFunc f);
-
-const char *
-PerfHumanFloat( double d );
-
-extern void
-perf_printf(const char *format, ...);
-
-
-#endif /* COMMON_H */
-
diff --git a/progs/perf/copytex.c b/progs/perf/copytex.c
deleted file mode 100644
index f7a6b8aec3..0000000000
--- a/progs/perf/copytex.c
+++ /dev/null
@@ -1,214 +0,0 @@
-/*
- * Copyright (C) 2009 VMware, Inc. All Rights Reserved.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included
- * in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
- * VMWARE BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
- * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- */
-
-/**
- * Measure glCopyTex[Sub]Image() rate.
- * Create a large, off-screen framebuffer object for rendering and
- * copying the texture data from it since we can't make really large
- * on-screen windows.
- *
- * Brian Paul
- * 22 Sep 2009
- */
-
-#include <string.h>
-#include "glmain.h"
-#include "common.h"
-
-int WinWidth = 100, WinHeight = 100;
-
-static GLuint VBO, FBO, RBO, Tex;
-
-const GLsizei MinSize = 16, MaxSize = 4096;
-static GLsizei TexSize;
-
-static const GLboolean DrawPoint = GL_TRUE;
-static const GLboolean TexSubImage4 = GL_FALSE;
-
-struct vertex
-{
- GLfloat x, y, s, t;
-};
-
-static const struct vertex vertices[1] = {
- { 0.0, 0.0, 0.5, 0.5 },
-};
-
-#define VOFFSET(F) ((void *) offsetof(struct vertex, F))
-
-
-/** Called from test harness/main */
-void
-PerfInit(void)
-{
- const GLenum filter = GL_LINEAR;
- GLenum stat;
-
- if (!PerfExtensionSupported("GL_EXT_framebuffer_object")) {
- perf_printf("copytex: GL_EXT_framebuffer_object not supported\n");
- exit(0);
- }
-
- /* setup VBO */
- glGenBuffersARB(1, &VBO);
- glBindBufferARB(GL_ARRAY_BUFFER_ARB, VBO);
- glBufferDataARB(GL_ARRAY_BUFFER_ARB, sizeof(vertices),
- vertices, GL_STATIC_DRAW_ARB);
-
- glVertexPointer(2, GL_FLOAT, sizeof(struct vertex), VOFFSET(x));
- glTexCoordPointer(2, GL_FLOAT, sizeof(struct vertex), VOFFSET(s));
- glEnableClientState(GL_VERTEX_ARRAY);
- glEnableClientState(GL_TEXTURE_COORD_ARRAY);
-
- /* setup texture */
- glGenTextures(1, &Tex);
- glBindTexture(GL_TEXTURE_2D, Tex);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, filter);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, filter);
- glEnable(GL_TEXTURE_2D);
-
- /* setup rbo */
- glGenRenderbuffersEXT(1, &RBO);
- glBindRenderbufferEXT(GL_RENDERBUFFER_EXT, RBO);
- glRenderbufferStorageEXT(GL_RENDERBUFFER_EXT, GL_RGBA, MaxSize, MaxSize);
-
- /* setup fbo */
- glGenFramebuffersEXT(1, &FBO);
- glBindFramebufferEXT(GL_FRAMEBUFFER, FBO);
- glFramebufferRenderbufferEXT(GL_FRAMEBUFFER_EXT,
- GL_COLOR_ATTACHMENT0_EXT,
- GL_RENDERBUFFER_EXT, RBO);
-
- stat = glCheckFramebufferStatusEXT(GL_FRAMEBUFFER_EXT);
- if (stat != GL_FRAMEBUFFER_COMPLETE_EXT) {
- perf_printf("fboswitch: Error: incomplete FBO!\n");
- exit(1);
- }
-
- /* clear the FBO */
- glDrawBuffer(GL_COLOR_ATTACHMENT0_EXT);
- glViewport(0, 0, MaxSize, MaxSize);
- glClear(GL_COLOR_BUFFER_BIT);
-}
-
-
-static void
-CopyTexImage(unsigned count)
-{
- unsigned i;
- for (i = 1; i < count; i++) {
- /* draw something */
- if (DrawPoint)
- glDrawArrays(GL_POINTS, 0, 1);
-
- /* copy whole texture */
- glCopyTexImage2D(GL_TEXTURE_2D, 0,
- GL_RGBA, 0, 0, TexSize, TexSize, 0);
- }
- glFinish();
-}
-
-
-static void
-CopyTexSubImage(unsigned count)
-{
- unsigned i;
- for (i = 1; i < count; i++) {
- /* draw something */
- if (DrawPoint)
- glDrawArrays(GL_POINTS, 0, 1);
-
- /* copy sub texture */
- if (TexSubImage4) {
- /* four sub-copies */
- GLsizei half = TexSize / 2;
- /* lower-left */
- glCopyTexSubImage2D(GL_TEXTURE_2D, 0,
- 0, 0, 0, 0, half, half);
- /* lower-right */
- glCopyTexSubImage2D(GL_TEXTURE_2D, 0,
- half, 0, half, 0, half, half);
- /* upper-left */
- glCopyTexSubImage2D(GL_TEXTURE_2D, 0,
- 0, half, 0, half, half, half);
- /* upper-right */
- glCopyTexSubImage2D(GL_TEXTURE_2D, 0,
- half, half, half, half, half, half);
- }
- else {
- /* one big copy */
- glCopyTexSubImage2D(GL_TEXTURE_2D, 0,
- 0, 0, 0, 0, TexSize, TexSize);
- }
- }
- glFinish();
-}
-
-
-/** Called from test harness/main */
-void
-PerfNextRound(void)
-{
-}
-
-
-/** Called from test harness/main */
-void
-PerfDraw(void)
-{
- double rate, mbPerSec;
- GLint sub, maxTexSize;
-
- glGetIntegerv(GL_MAX_TEXTURE_SIZE, &maxTexSize);
-
- /* loop over whole/sub tex copy */
- for (sub = 0; sub < 2; sub++) {
-
- /* loop over texture sizes */
- for (TexSize = MinSize; TexSize <= MaxSize; TexSize *= 4) {
-
- if (TexSize <= maxTexSize) {
- GLint bytesPerImage = 4 * TexSize * TexSize;
-
- if (sub == 0)
- rate = PerfMeasureRate(CopyTexImage);
- else {
- /* setup empty dest texture */
- glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA,
- TexSize, TexSize, 0,
- GL_RGBA, GL_UNSIGNED_BYTE, NULL);
- rate = PerfMeasureRate(CopyTexSubImage);
- }
-
- mbPerSec = rate * bytesPerImage / (1024.0 * 1024.0);
- }
- else {
- rate = 0.0;
- mbPerSec = 0.0;
- }
-
- perf_printf(" glCopyTex%sImage(%d x %d): %.1f copies/sec, %.1f Mpixels/sec\n",
- (sub ? "Sub" : ""), TexSize, TexSize, rate, mbPerSec);
- }
- }
-
- exit(0);
-}
diff --git a/progs/perf/drawoverhead.c b/progs/perf/drawoverhead.c
deleted file mode 100644
index f75c9bb74e..0000000000
--- a/progs/perf/drawoverhead.c
+++ /dev/null
@@ -1,137 +0,0 @@
-/*
- * Copyright (C) 2009 VMware, Inc. All Rights Reserved.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included
- * in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
- * VMWARE BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
- * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- */
-
-/**
- * Measure drawing overhead
- *
- * This is the first in a series of simple performance benchmarks.
- * The code in this file should be as simple as possible to make it
- * easily portable to other APIs.
- *
- * All the window-system stuff should be contained in glmain.c (or TBDmain.c).
- *
- * Brian Paul
- * 15 Sep 2009
- */
-
-#include "glmain.h"
-#include "common.h"
-
-
-int WinWidth = 100, WinHeight = 100;
-
-static GLuint VBO;
-
-struct vertex
-{
- GLfloat x, y;
-};
-
-static const struct vertex vertices[4] = {
- { -1.0, -1.0 },
- { 1.0, -1.0 },
- { 1.0, 1.0 },
- { -1.0, 1.0 }
-};
-
-
-/** Called from test harness/main */
-void
-PerfInit(void)
-{
- /* setup VBO w/ vertex data */
- glGenBuffersARB(1, &VBO);
- glBindBufferARB(GL_ARRAY_BUFFER_ARB, VBO);
- glBufferDataARB(GL_ARRAY_BUFFER_ARB,
- sizeof(vertices), vertices, GL_STATIC_DRAW_ARB);
- glVertexPointer(2, GL_FLOAT, sizeof(struct vertex), (void *) 0);
- glEnableClientState(GL_VERTEX_ARRAY);
-
- /* misc GL state */
- glAlphaFunc(GL_ALWAYS, 0.0);
-}
-
-
-static void
-DrawNoStateChange(unsigned count)
-{
- unsigned i;
- for (i = 0; i < count; i++) {
- glDrawArrays(GL_POINTS, 0, 4);
- }
- glFinish();
-}
-
-
-static void
-DrawNopStateChange(unsigned count)
-{
- unsigned i;
- for (i = 0; i < count; i++) {
- glDisable(GL_ALPHA_TEST);
- glDrawArrays(GL_POINTS, 0, 4);
- }
- glFinish();
-}
-
-
-static void
-DrawStateChange(unsigned count)
-{
- unsigned i;
- for (i = 0; i < count; i++) {
- if (i & 1)
- glEnable(GL_TEXTURE_GEN_S);
- else
- glDisable(GL_TEXTURE_GEN_S);
- glDrawArrays(GL_POINTS, 0, 4);
- }
- glFinish();
-}
-
-void
-PerfNextRound(void)
-{
-}
-
-/** Called from test harness/main */
-void
-PerfDraw(void)
-{
- double rate0, rate1, rate2, overhead;
-
- rate0 = PerfMeasureRate(DrawNoStateChange);
- perf_printf(" Draw only: %s draws/second\n",
- PerfHumanFloat(rate0));
-
- rate1 = PerfMeasureRate(DrawNopStateChange);
- overhead = 1000.0 * (1.0 / rate1 - 1.0 / rate0);
- perf_printf(" Draw w/ nop state change: %s draws/sec (overhead: %f ms/draw)\n",
- PerfHumanFloat(rate1), overhead);
-
- rate2 = PerfMeasureRate(DrawStateChange);
- overhead = 1000.0 * (1.0 / rate2 - 1.0 / rate0);
- perf_printf(" Draw w/ state change: %s draws/sec (overhead: %f ms/draw)\n",
- PerfHumanFloat(rate2), overhead);
-
- exit(0);
-}
-
diff --git a/progs/perf/fbobind.c b/progs/perf/fbobind.c
deleted file mode 100644
index fb52a93a2f..0000000000
--- a/progs/perf/fbobind.c
+++ /dev/null
@@ -1,153 +0,0 @@
-/*
- * Copyright (C) 2009 VMware, Inc. All Rights Reserved.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included
- * in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
- * VMWARE BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
- * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- */
-
-/**
- * Measure rate of binding/switching between FBO targets.
- * Create two framebuffer objects for rendering to two textures.
- * Ping pong between texturing from one and drawing into the other.
- *
- * Brian Paul
- * 22 Sep 2009
- */
-
-#include <string.h>
-#include "glmain.h"
-#include "common.h"
-
-int WinWidth = 100, WinHeight = 100;
-
-static GLuint VBO;
-
-static GLuint FBO[2], Tex[2];
-
-static const GLsizei TexSize = 512;
-
-static const GLboolean DrawPoint = GL_TRUE;
-
-struct vertex
-{
- GLfloat x, y, s, t;
-};
-
-static const struct vertex vertices[1] = {
- { 0.0, 0.0, 0.5, 0.5 },
-};
-
-#define VOFFSET(F) ((void *) offsetof(struct vertex, F))
-
-
-/** Called from test harness/main */
-void
-PerfInit(void)
-{
- const GLenum filter = GL_LINEAR;
- GLenum stat;
- int i;
-
- if (!PerfExtensionSupported("GL_EXT_framebuffer_object")) {
- perf_printf("fboswitch: GL_EXT_framebuffer_object not supported\n");
- exit(0);
- }
-
- /* setup VBO */
- glGenBuffersARB(1, &VBO);
- glBindBufferARB(GL_ARRAY_BUFFER_ARB, VBO);
- glBufferDataARB(GL_ARRAY_BUFFER_ARB, sizeof(vertices),
- vertices, GL_STATIC_DRAW_ARB);
-
- glVertexPointer(2, GL_FLOAT, sizeof(struct vertex), VOFFSET(x));
- glTexCoordPointer(2, GL_FLOAT, sizeof(struct vertex), VOFFSET(s));
- glEnableClientState(GL_VERTEX_ARRAY);
- glEnableClientState(GL_TEXTURE_COORD_ARRAY);
-
- glGenFramebuffersEXT(2, FBO);
- glGenTextures(2, Tex);
-
- for (i = 0; i < 2; i++) {
- /* setup texture */
- glBindTexture(GL_TEXTURE_2D, Tex[i]);
- glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA,
- TexSize, TexSize, 0,
- GL_RGBA, GL_UNSIGNED_BYTE, NULL);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, filter);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, filter);
-
-
- /* setup fbo */
- glBindFramebufferEXT(GL_FRAMEBUFFER, FBO[i]);
- glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT,
- GL_COLOR_ATTACHMENT0_EXT,
- GL_TEXTURE_2D, Tex[i], 0/*level*/);
- stat = glCheckFramebufferStatusEXT(GL_FRAMEBUFFER_EXT);
- if (stat != GL_FRAMEBUFFER_COMPLETE_EXT) {
- perf_printf("fboswitch: Error: incomplete FBO!\n");
- exit(1);
- }
-
- /* clear the FBO */
- glClear(GL_COLOR_BUFFER_BIT);
- }
-
- glEnable(GL_TEXTURE_2D);
-}
-
-
-static void
-FBOBind(unsigned count)
-{
- unsigned i;
- for (i = 1; i < count; i++) {
- const GLuint dst = i & 1;
- const GLuint src = 1 - dst;
-
- /* bind src texture */
- glBindTexture(GL_TEXTURE_2D, Tex[src]);
-
- /* bind dst fbo */
- glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, FBO[dst]);
- glDrawBuffer(GL_COLOR_ATTACHMENT0_EXT);
-
- /* draw something */
- if (DrawPoint)
- glDrawArrays(GL_POINTS, 0, 1);
- }
- glFinish();
-}
-
-
-/** Called from test harness/main */
-void
-PerfNextRound(void)
-{
-}
-
-
-/** Called from test harness/main */
-void
-PerfDraw(void)
-{
- double rate;
-
- rate = PerfMeasureRate(FBOBind);
- perf_printf(" FBO Binding: %1.f binds/sec\n", rate);
-
- exit(0);
-}
diff --git a/progs/perf/fill.c b/progs/perf/fill.c
deleted file mode 100644
index 279f2b5f18..0000000000
--- a/progs/perf/fill.c
+++ /dev/null
@@ -1,248 +0,0 @@
-/*
- * Copyright (C) 2009 VMware, Inc. All Rights Reserved.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included
- * in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
- * VMWARE BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
- * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- */
-
-/**
- * Measure fill rates.
- *
- * Brian Paul
- * 21 Sep 2009
- */
-
-#include "glmain.h"
-#include "common.h"
-
-
-int WinWidth = 1000, WinHeight = 1000;
-
-static GLuint VBO, TexObj;
-
-
-struct vertex
-{
- GLfloat x, y, s, t, r, g, b, a;
-};
-
-#define VOFFSET(F) ((void *) offsetof(struct vertex, F))
-
-static const struct vertex vertices[4] = {
- /* x y s t r g b a */
- { -1.0, -1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.5 },
- { 1.0, -1.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.5 },
- { 1.0, 1.0, 1.0, 1.0, 0.0, 0.0, 1.0, 0.5 },
- { -1.0, 1.0, 0.0, 1.0, 1.0, 1.0, 1.0, 0.5 }
-};
-
-
-static const char *VertexShader =
- "void main() \n"
- "{ \n"
- " gl_Position = ftransform(); \n"
- " gl_TexCoord[0] = gl_MultiTexCoord0; \n"
- " gl_FrontColor = gl_Color; \n"
- "} \n";
-
-/* simple fragment shader */
-static const char *FragmentShader1 =
- "uniform sampler2D Tex; \n"
- "void main() \n"
- "{ \n"
- " vec4 t = texture2D(Tex, gl_TexCoord[0].xy); \n"
- " gl_FragColor = vec4(1.0) - t * gl_Color; \n"
- "} \n";
-
-/**
- * A more complex fragment shader (but equivalent to first shader).
- * A good optimizer should catch some of these no-op operations, but
- * probably not all of them.
- */
-static const char *FragmentShader2 =
- "uniform sampler2D Tex; \n"
- "void main() \n"
- "{ \n"
- " // as above \n"
- " vec4 t = texture2D(Tex, gl_TexCoord[0].xy); \n"
- " t = vec4(1.0) - t * gl_Color; \n"
-
- " vec4 u; \n"
-
- " // no-op negate/swizzle \n"
- " u = -t.wzyx; \n"
- " t = -u.wzyx; \n"
-
- " // no-op inverts \n"
- " t = vec4(1.0) - t; \n"
- " t = vec4(1.0) - t; \n"
-
- " // no-op min/max \n"
- " t = min(t, t); \n"
- " t = max(t, t); \n"
-
- " // no-op moves \n"
- " u = t; \n"
- " t = u; \n"
- " u = t; \n"
- " t = u; \n"
-
- " // no-op add/mul \n"
- " t = (t + t + t + t) * 0.25; \n"
-
- " // no-op mul/sub \n"
- " t = 3.0 * t - 2.0 * t; \n"
-
- " // no-op negate/min/max \n"
- " t = -min(-t, -t); \n"
- " t = -max(-t, -t); \n"
-
- " gl_FragColor = t; \n"
- "} \n";
-
-static GLuint ShaderProg1, ShaderProg2;
-
-
-
-/** Called from test harness/main */
-void
-PerfInit(void)
-{
- GLint u;
-
- /* setup VBO w/ vertex data */
- glGenBuffersARB(1, &VBO);
- glBindBufferARB(GL_ARRAY_BUFFER_ARB, VBO);
- glBufferDataARB(GL_ARRAY_BUFFER_ARB,
- sizeof(vertices), vertices, GL_STATIC_DRAW_ARB);
- glVertexPointer(2, GL_FLOAT, sizeof(struct vertex), VOFFSET(x));
- glTexCoordPointer(2, GL_FLOAT, sizeof(struct vertex), VOFFSET(s));
- glColorPointer(4, GL_FLOAT, sizeof(struct vertex), VOFFSET(r));
- glEnableClientState(GL_VERTEX_ARRAY);
- glEnableClientState(GL_COLOR_ARRAY);
-
- /* setup texture */
- TexObj = PerfCheckerTexture(128, 128);
-
- /* setup shaders */
- ShaderProg1 = PerfShaderProgram(VertexShader, FragmentShader1);
- glUseProgram(ShaderProg1);
- u = glGetUniformLocation(ShaderProg1, "Tex");
- glUniform1i(u, 0); /* texture unit 0 */
-
- ShaderProg2 = PerfShaderProgram(VertexShader, FragmentShader2);
- glUseProgram(ShaderProg2);
- u = glGetUniformLocation(ShaderProg2, "Tex");
- glUniform1i(u, 0); /* texture unit 0 */
-
- glUseProgram(0);
-}
-
-
-static void
-Ortho(void)
-{
- glMatrixMode(GL_PROJECTION);
- glLoadIdentity();
- glOrtho(-1.0, 1.0, -1.0, 1.0, -1.0, 1.0);
- glMatrixMode(GL_MODELVIEW);
- glLoadIdentity();
-}
-
-
-
-static void
-DrawQuad(unsigned count)
-{
- unsigned i;
- glClear(GL_COLOR_BUFFER_BIT);
-
- for (i = 0; i < count; i++) {
- glDrawArrays(GL_TRIANGLE_FAN, 0, 4);
-
- /* Avoid sending command buffers with huge numbers of fullscreen
- * quads. Graphics schedulers don't always cope well with
- * this...
- */
- if (i % 128 == 0) {
- PerfSwapBuffers();
- glClear(GL_COLOR_BUFFER_BIT);
- }
- }
-
- glFinish();
-
- if (1)
- PerfSwapBuffers();
-}
-
-void
-PerfNextRound(void)
-{
-}
-
-/** Called from test harness/main */
-void
-PerfDraw(void)
-{
- double rate;
- double pixelsPerDraw = WinWidth * WinHeight;
-
- Ortho();
-
- /* simple fill */
- rate = PerfMeasureRate(DrawQuad) * pixelsPerDraw;
- perf_printf(" Simple fill: %s pixels/second\n",
- PerfHumanFloat(rate));
-
- /* blended fill */
- glEnable(GL_BLEND);
- rate = PerfMeasureRate(DrawQuad) * pixelsPerDraw;
- glDisable(GL_BLEND);
- perf_printf(" Blended fill: %s pixels/second\n",
- PerfHumanFloat(rate));
-
- /* textured fill */
- glEnable(GL_TEXTURE_2D);
- glEnableClientState(GL_TEXTURE_COORD_ARRAY);
- rate = PerfMeasureRate(DrawQuad) * pixelsPerDraw;
- glDisable(GL_TEXTURE_2D);
- glDisableClientState(GL_TEXTURE_COORD_ARRAY);
- perf_printf(" Textured fill: %s pixels/second\n",
- PerfHumanFloat(rate));
-
- /* shader1 fill */
- glUseProgram(ShaderProg1);
- glEnableClientState(GL_TEXTURE_COORD_ARRAY);
- rate = PerfMeasureRate(DrawQuad) * pixelsPerDraw;
- glUseProgram(0);
- glDisableClientState(GL_TEXTURE_COORD_ARRAY);
- perf_printf(" Shader1 fill: %s pixels/second\n",
- PerfHumanFloat(rate));
-
- /* shader2 fill */
- glUseProgram(ShaderProg2);
- glEnableClientState(GL_TEXTURE_COORD_ARRAY);
- rate = PerfMeasureRate(DrawQuad) * pixelsPerDraw;
- glUseProgram(0);
- glDisableClientState(GL_TEXTURE_COORD_ARRAY);
- perf_printf(" Shader2 fill: %s pixels/second\n",
- PerfHumanFloat(rate));
-
- exit(0);
-}
-
diff --git a/progs/perf/genmipmap.c b/progs/perf/genmipmap.c
deleted file mode 100644
index 20e2fa3410..0000000000
--- a/progs/perf/genmipmap.c
+++ /dev/null
@@ -1,142 +0,0 @@
-/*
- * Copyright (C) 2009 VMware, Inc. All Rights Reserved.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included
- * in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
- * VMWARE BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
- * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- */
-
-/**
- * Measure glGenerateMipmap() speed.
- *
- * Brian Paul
- * 24 Sep 2009
- */
-
-#include <string.h>
-#include <stdio.h>
-#include "glmain.h"
-#include "common.h"
-
-
-int WinWidth = 100, WinHeight = 100;
-
-static GLboolean DrawPoint = GL_TRUE;
-static GLuint VBO;
-static GLuint TexObj = 0;
-static GLint BaseLevel, MaxLevel;
-
-struct vertex
-{
- GLfloat x, y, s, t;
-};
-
-static const struct vertex vertices[1] = {
- { 0.0, 0.0, 0.5, 0.5 },
-};
-
-#define VOFFSET(F) ((void *) offsetof(struct vertex, F))
-
-/** Called from test harness/main */
-void
-PerfInit(void)
-{
- if (!PerfExtensionSupported("GL_ARB_framebuffer_object")) {
- printf("Sorry, this test requires GL_ARB_framebuffer_object\n");
- exit(1);
- }
-
- /* setup VBO w/ vertex data */
- glGenBuffersARB(1, &VBO);
- glBindBufferARB(GL_ARRAY_BUFFER_ARB, VBO);
- glBufferDataARB(GL_ARRAY_BUFFER_ARB,
- sizeof(vertices), vertices, GL_STATIC_DRAW_ARB);
- glVertexPointer(2, GL_FLOAT, sizeof(struct vertex), VOFFSET(x));
- glTexCoordPointer(2, GL_FLOAT, sizeof(struct vertex), VOFFSET(s));
- glEnableClientState(GL_VERTEX_ARRAY);
- glEnableClientState(GL_TEXTURE_COORD_ARRAY);
-
- glGenTextures(1, &TexObj);
- glBindTexture(GL_TEXTURE_2D, TexObj);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
- glEnable(GL_TEXTURE_2D);
-}
-
-
-static void
-GenMipmap(unsigned count)
-{
- unsigned i;
- for (i = 0; i < count; i++) {
- GLubyte texel[4];
- texel[0] = texel[1] = texel[2] = texel[3] = i & 0xff;
- /* dirty the base image */
- glTexSubImage2D(GL_TEXTURE_2D, BaseLevel,
- 0, 0, 1, 1, GL_RGBA, GL_UNSIGNED_BYTE, texel);
- glGenerateMipmap(GL_TEXTURE_2D);
- if (DrawPoint)
- glDrawArrays(GL_POINTS, 0, 1);
- }
- glFinish();
-}
-
-
-/** Called from test harness/main */
-void
-PerfNextRound(void)
-{
-}
-
-
-/** Called from test harness/main */
-void
-PerfDraw(void)
-{
- const GLint NumLevels = 12;
- const GLint TexWidth = 2048, TexHeight = 2048;
- GLubyte *img;
- double rate;
-
- /* Make 2K x 2K texture */
- img = (GLubyte *) malloc(TexWidth * TexHeight * 4);
- memset(img, 128, TexWidth * TexHeight * 4);
- glTexImage2D(GL_TEXTURE_2D, 0,
- GL_RGBA, TexWidth, TexHeight, 0,
- GL_RGBA, GL_UNSIGNED_BYTE, img);
- free(img);
-
- perf_printf("Texture level[0] size: %d x %d, %d levels\n",
- TexWidth, TexHeight, NumLevels);
-
- /* loop over base levels 0, 2, 4 */
- for (BaseLevel = 0; BaseLevel <= 4; BaseLevel += 2) {
-
- /* loop over max level */
- for (MaxLevel = NumLevels; MaxLevel > BaseLevel; MaxLevel--) {
-
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_BASE_LEVEL, BaseLevel);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAX_LEVEL, MaxLevel);
-
- rate = PerfMeasureRate(GenMipmap);
-
- perf_printf(" glGenerateMipmap(levels %d..%d): %.2f gens/sec\n",
- BaseLevel + 1, MaxLevel, rate);
- }
- }
-
- exit(0);
-}
diff --git a/progs/perf/glmain.c b/progs/perf/glmain.c
deleted file mode 100644
index 69cdbce319..0000000000
--- a/progs/perf/glmain.c
+++ /dev/null
@@ -1,268 +0,0 @@
-/*
- * Copyright (C) 2009 VMware, Inc. All Rights Reserved.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included
- * in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
- * VMWARE BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
- * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- */
-
-/**
- * OpenGL/GLUT common code for perf programs.
- * Brian Paul
- * 15 Sep 2009
- */
-
-
-#include <stdio.h>
-#include "glmain.h"
-#include <GL/glut.h>
-
-
-static int Win;
-static GLfloat Xrot = 0, Yrot = 0, Zrot = 0;
-
-
-/** Return time in seconds */
-double
-PerfGetTime(void)
-{
- return glutGet(GLUT_ELAPSED_TIME) * 0.001;
-}
-
-
-void
-PerfSwapBuffers(void)
-{
- glutSwapBuffers();
-}
-
-
-/** make simple checkerboard texture object */
-GLuint
-PerfCheckerTexture(GLsizei width, GLsizei height)
-{
- const GLenum filter = GL_NEAREST;
- GLubyte *img = (GLubyte *) malloc(width * height * 4);
- GLint i, j, k;
- GLuint obj;
-
- k = 0;
- for (i = 0; i < height; i++) {
- for (j = 0; j < width; j++) {
- GLubyte color;
- if (((i / 8) ^ (j / 8)) & 1) {
- color = 0xff;
- }
- else {
- color = 0x0;
- }
- img[k++] = color;
- img[k++] = color;
- img[k++] = color;
- img[k++] = color;
- }
- }
-
- glGenTextures(1, &obj);
- glBindTexture(GL_TEXTURE_2D, obj);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, filter);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, filter);
- glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0,
- GL_RGBA, GL_UNSIGNED_BYTE, img);
- free(img);
-
- return obj;
-}
-
-
-static GLuint
-CompileShader(GLenum type, const char *shader)
-{
- GLuint sh;
- GLint stat;
-
- sh = glCreateShader(type);
- glShaderSource(sh, 1, (const GLchar **) &shader, NULL);
-
- glCompileShader(sh);
-
- glGetShaderiv(sh, GL_COMPILE_STATUS, &stat);
- if (!stat) {
- GLchar log[1000];
- GLsizei len;
- glGetShaderInfoLog(sh, 1000, &len, log);
- fprintf(stderr, "Error: problem compiling shader: %s\n", log);
- exit(1);
- }
-
- return sh;
-}
-
-
-/** Make shader program from given vert/frag shader text */
-GLuint
-PerfShaderProgram(const char *vertShader, const char *fragShader)
-{
- GLuint prog;
- GLint stat;
-
- {
- const char *version = (const char *) glGetString(GL_VERSION);
- if ((version[0] != '2' &&
- version[0] != '3') || version[1] != '.') {
- fprintf(stderr, "Error: GL version 2.x or better required\n");
- exit(1);
- }
- }
-
- prog = glCreateProgram();
-
- if (vertShader) {
- GLuint vs = CompileShader(GL_VERTEX_SHADER, vertShader);
- glAttachShader(prog, vs);
- }
- if (fragShader) {
- GLuint fs = CompileShader(GL_FRAGMENT_SHADER, fragShader);
- glAttachShader(prog, fs);
- }
-
- glLinkProgram(prog);
- glGetProgramiv(prog, GL_LINK_STATUS, &stat);
- if (!stat) {
- GLchar log[1000];
- GLsizei len;
- glGetProgramInfoLog(prog, 1000, &len, log);
- fprintf(stderr, "Shader link error:\n%s\n", log);
- exit(1);
- }
-
- return prog;
-}
-
-
-int
-PerfReshapeWindow( unsigned w, unsigned h )
-{
- if (glutGet(GLUT_SCREEN_WIDTH) < w ||
- glutGet(GLUT_SCREEN_HEIGHT) < h)
- return 0;
-
- glutReshapeWindow( w, h );
- glutPostRedisplay();
- return 1;
-}
-
-
-GLboolean
-PerfExtensionSupported(const char *ext)
-{
- return glutExtensionSupported(ext);
-}
-
-
-static void
-Idle(void)
-{
- PerfNextRound();
-}
-
-
-static void
-Draw(void)
-{
- PerfDraw();
- glutSwapBuffers();
-}
-
-
-static void
-Reshape(int width, int height)
-{
- WinWidth = width;
- WinHeight = height;
- glViewport(0, 0, width, height);
- glMatrixMode(GL_PROJECTION);
- glLoadIdentity();
- glFrustum(-1.0, 1.0, -1.0, 1.0, 5.0, 25.0);
- glMatrixMode(GL_MODELVIEW);
- glLoadIdentity();
- glTranslatef(0.0, 0.0, -15.0);
-}
-
-
-static void
-Key(unsigned char key, int x, int y)
-{
- const GLfloat step = 3.0;
- (void) x;
- (void) y;
- switch (key) {
- case 'z':
- Zrot -= step;
- break;
- case 'Z':
- Zrot += step;
- break;
- case 27:
- glutDestroyWindow(Win);
- exit(0);
- break;
- }
- glutPostRedisplay();
-}
-
-
-static void
-SpecialKey(int key, int x, int y)
-{
- const GLfloat step = 3.0;
- (void) x;
- (void) y;
- switch (key) {
- case GLUT_KEY_UP:
- Xrot -= step;
- break;
- case GLUT_KEY_DOWN:
- Xrot += step;
- break;
- case GLUT_KEY_LEFT:
- Yrot -= step;
- break;
- case GLUT_KEY_RIGHT:
- Yrot += step;
- break;
- }
- glutPostRedisplay();
-}
-
-
-int
-main(int argc, char *argv[])
-{
- glutInit(&argc, argv);
- glutInitWindowSize(WinWidth, WinHeight);
- glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH | GLUT_STENCIL);
- Win = glutCreateWindow(argv[0]);
- glewInit();
- glutReshapeFunc(Reshape);
- glutKeyboardFunc(Key);
- glutSpecialFunc(SpecialKey);
- glutDisplayFunc(Draw);
- glutIdleFunc(Idle);
- PerfInit();
- glutMainLoop();
- return 0;
-}
diff --git a/progs/perf/glmain.h b/progs/perf/glmain.h
deleted file mode 100644
index d9bcd5f4e2..0000000000
--- a/progs/perf/glmain.h
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- * Copyright (C) 2009 VMware, Inc. All Rights Reserved.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included
- * in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
- * VMWARE BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
- * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- */
-
-
-#ifndef GLMAIN_H
-#define GLMAIN_H
-
-
-#define GL_GLEXT_PROTOTYPES
-#include <GL/glew.h>
-#include <stdlib.h>
-#include <math.h>
-
-
-/** Test programs can use these vars/functions */
-
-extern int WinWidth, WinHeight;
-
-extern double
-PerfGetTime(void);
-
-extern void
-PerfSwapBuffers(void);
-
-extern GLuint
-PerfCheckerTexture(GLsizei width, GLsizei height);
-
-extern GLuint
-PerfShaderProgram(const char *vertShader, const char *fragShader);
-
-extern int
-PerfReshapeWindow( unsigned w, unsigned h );
-
-extern GLboolean
-PerfExtensionSupported(const char *ext);
-
-
-/** Test programs must implement these functions **/
-
-extern void
-PerfInit(void);
-
-extern void
-PerfNextRound(void);
-
-extern void
-PerfDraw(void);
-
-
-#endif /* GLMAIN_H */
diff --git a/progs/perf/readpixels.c b/progs/perf/readpixels.c
deleted file mode 100644
index ac7dc426e9..0000000000
--- a/progs/perf/readpixels.c
+++ /dev/null
@@ -1,169 +0,0 @@
-/*
- * Copyright (C) 2009 VMware, Inc. All Rights Reserved.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included
- * in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
- * VMWARE BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
- * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- */
-
-/**
- * Measure glReadPixels speed.
- * XXX also read into a PBO?
- * XXX also read from FBOs?
- *
- * Brian Paul
- * 23 Sep 2009
- */
-
-#include <string.h>
-#include <assert.h>
-#include "glmain.h"
-#include "common.h"
-
-int WinWidth = 1000, WinHeight = 1000;
-
-static GLuint VBO;
-
-static const GLboolean DrawPoint = GL_TRUE;
-static const GLboolean BufferSubDataInHalves = GL_TRUE;
-
-static const GLfloat Vertex0[2] = { 0.0, 0.0 };
-
-static GLenum HaveDepthStencil;
-
-static GLenum ReadFormat, ReadType;
-static GLint ReadWidth, ReadHeight;
-static GLvoid *ReadBuffer;
-
-
-/** Called from test harness/main */
-void
-PerfInit(void)
-{
- /* setup VBO */
- glGenBuffersARB(1, &VBO);
- glBindBufferARB(GL_ARRAY_BUFFER_ARB, VBO);
- glBufferDataARB(GL_ARRAY_BUFFER_ARB, sizeof(Vertex0), Vertex0, GL_STATIC_DRAW_ARB);
- glVertexPointer(2, GL_FLOAT, sizeof(Vertex0), (void *) 0);
- glEnableClientState(GL_VERTEX_ARRAY);
-
- glPixelStorei(GL_PACK_ALIGNMENT, 1);
-
- HaveDepthStencil = PerfExtensionSupported("GL_EXT_packed_depth_stencil");
-
- glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);
- glEnable(GL_DEPTH_TEST);
- glEnable(GL_STENCIL_TEST);
-}
-
-
-static void
-ReadPixels(unsigned count)
-{
- unsigned i;
- for (i = 0; i < count; i++) {
- /* read from random pos */
- GLint x, y;
-
- x = WinWidth - ReadWidth;
- y = WinHeight - ReadHeight;
- if (x > 0)
- x = rand() % x;
- if (y > 0)
- y = rand() % y;
-
- if (DrawPoint)
- glDrawArrays(GL_POINTS, 0, 1);
-
- glReadPixels(x, y, ReadWidth, ReadHeight,
- ReadFormat, ReadType, ReadBuffer);
- }
- glFinish();
-}
-
-
-static const GLsizei Sizes[] = {
- 10,
- 100,
- 500,
- 1000,
- 0
-};
-
-
-static const struct {
- GLenum format;
- GLenum type;
- const char *name;
- GLuint pixel_size;
-} DstFormats[] = {
- { GL_RGBA, GL_UNSIGNED_BYTE, "RGBA/ubyte", 4 },
- { GL_BGRA, GL_UNSIGNED_BYTE, "BGRA/ubyte", 4 },
- { GL_RGB, GL_UNSIGNED_SHORT_5_6_5, "RGB/565", 2 },
- { GL_LUMINANCE, GL_UNSIGNED_BYTE, "L/ubyte", 1 },
- { GL_DEPTH_COMPONENT, GL_UNSIGNED_INT, "Z/uint", 4 },
- { GL_DEPTH_STENCIL_EXT, GL_UNSIGNED_INT_24_8_EXT, "Z+S/uint", 4 },
- { 0, 0, NULL, 0 }
-};
-
-
-
-/** Called from test harness/main */
-void
-PerfNextRound(void)
-{
-}
-
-
-/** Called from test harness/main */
-void
-PerfDraw(void)
-{
- double rate, mbPerSec;
- int fmt, sz;
-
- /* loop over formats */
- for (fmt = 0; DstFormats[fmt].format; fmt++) {
- ReadFormat = DstFormats[fmt].format;
- ReadType = DstFormats[fmt].type;
-
- /* loop over sizes */
- for (sz = 0; Sizes[sz]; sz++) {
- int imgSize;
-
- ReadWidth = ReadHeight = Sizes[sz];
- imgSize = ReadWidth * ReadHeight * DstFormats[fmt].pixel_size;
- ReadBuffer = malloc(imgSize);
-
- if (ReadFormat == GL_DEPTH_STENCIL_EXT && !HaveDepthStencil) {
- rate = 0.0;
- mbPerSec = 0.0;
- }
- else {
- rate = PerfMeasureRate(ReadPixels);
- mbPerSec = rate * imgSize / (1024.0 * 1024.0);
- }
-
- perf_printf("glReadPixels(%d x %d, %s): %.1f images/sec, %.1f Mpixels/sec\n",
- ReadWidth, ReadHeight,
- DstFormats[fmt].name, rate, mbPerSec);
-
- free(ReadBuffer);
- }
- }
-
- exit(0);
-}
diff --git a/progs/perf/swapbuffers.c b/progs/perf/swapbuffers.c
deleted file mode 100644
index 63c7fc06f9..0000000000
--- a/progs/perf/swapbuffers.c
+++ /dev/null
@@ -1,161 +0,0 @@
-/*
- * Copyright (C) 2009 VMware, Inc. All Rights Reserved.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included
- * in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
- * VMWARE BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
- * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- */
-
-/**
- * Measure SwapBuffers.
- *
- * Keith Whitwell
- * 22 Sep 2009
- */
-
-#include "glmain.h"
-#include "common.h"
-
-
-int WinWidth = 100, WinHeight = 100;
-int real_WinWidth, real_WinHeight; /* don't know whats going on here */
-
-static GLuint VBO;
-
-struct vertex
-{
- GLfloat x, y;
-};
-
-static const struct vertex vertices[4] = {
- { -1.0, -1.0 },
- { 1.0, -1.0 },
- { 1.0, 1.0 },
- { -1.0, 1.0 }
-};
-
-
-/** Called from test harness/main */
-void
-PerfInit(void)
-{
- /* setup VBO w/ vertex data */
- glGenBuffersARB(1, &VBO);
- glBindBufferARB(GL_ARRAY_BUFFER_ARB, VBO);
- glBufferDataARB(GL_ARRAY_BUFFER_ARB,
- sizeof(vertices), vertices, GL_STATIC_DRAW_ARB);
- glVertexPointer(2, GL_FLOAT, sizeof(struct vertex), (void *) 0);
- glEnableClientState(GL_VERTEX_ARRAY);
-
- /* misc GL state */
- glAlphaFunc(GL_ALWAYS, 0.0);
-}
-
-static void
-SwapNaked(unsigned count)
-{
- unsigned i;
- for (i = 0; i < count; i++) {
- PerfSwapBuffers();
- }
-}
-
-
-static void
-SwapClear(unsigned count)
-{
- unsigned i;
- for (i = 0; i < count; i++) {
- glClear(GL_COLOR_BUFFER_BIT);
- PerfSwapBuffers();
- }
-}
-
-static void
-SwapClearPoint(unsigned count)
-{
- unsigned i;
- for (i = 0; i < count; i++) {
- glClear(GL_COLOR_BUFFER_BIT);
- glDrawArrays(GL_POINTS, 0, 4);
- PerfSwapBuffers();
- }
-}
-
-
-static const struct {
- unsigned w;
- unsigned h;
-} sizes[] = {
- { 320, 240 },
- { 640, 480 },
- { 1024, 768 },
- { 1200, 1024 },
- { 1600, 1200 }
-};
-
-void
-PerfNextRound(void)
-{
- static unsigned i;
-
- if (i < sizeof(sizes) / sizeof(sizes[0]) &&
- PerfReshapeWindow( sizes[i].w, sizes[i].h ))
- {
- perf_printf("Reshape %dx%d\n", sizes[i].w, sizes[i].h);
- real_WinWidth = sizes[i].w;
- real_WinHeight = sizes[i].h;
- i++;
- }
- else {
- exit(0);
- }
-}
-
-
-
-
-/** Called from test harness/main */
-void
-PerfDraw(void)
-{
- double rate0;
-
- rate0 = PerfMeasureRate(SwapNaked);
- perf_printf(" Swapbuffers %dx%d: %s swaps/second",
- real_WinWidth, real_WinHeight,
- PerfHumanFloat(rate0));
- perf_printf(" %s pixels/second\n",
- PerfHumanFloat(rate0 * real_WinWidth * real_WinHeight));
-
-
-
- rate0 = PerfMeasureRate(SwapClear);
- perf_printf(" Swap/Clear %dx%d: %s swaps/second",
- real_WinWidth, real_WinHeight,
- PerfHumanFloat(rate0));
- perf_printf(" %s pixels/second\n",
- PerfHumanFloat(rate0 * real_WinWidth * real_WinHeight));
-
-
- rate0 = PerfMeasureRate(SwapClearPoint);
- perf_printf(" Swap/Clear/Draw %dx%d: %s swaps/second",
- real_WinWidth, real_WinHeight,
- PerfHumanFloat(rate0));
- perf_printf(" %s pixels/second\n",
- PerfHumanFloat(rate0 * real_WinWidth * real_WinHeight));
-}
-
diff --git a/progs/perf/teximage.c b/progs/perf/teximage.c
deleted file mode 100644
index a3005d0bef..0000000000
--- a/progs/perf/teximage.c
+++ /dev/null
@@ -1,331 +0,0 @@
-/*
- * Copyright (C) 2009 VMware, Inc. All Rights Reserved.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included
- * in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
- * VMWARE BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
- * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- */
-
-/**
- * Measure glTex[Sub]Image2D() and glGetTexImage() rate
- *
- * Brian Paul
- * 16 Sep 2009
- */
-
-#include "glmain.h"
-#include "common.h"
-
-
-int WinWidth = 100, WinHeight = 100;
-
-static GLuint VBO;
-static GLuint TexObj = 0;
-static GLubyte *TexImage = NULL;
-static GLsizei TexSize;
-static GLenum TexIntFormat, TexSrcFormat, TexSrcType;
-
-static const GLboolean DrawPoint = GL_TRUE;
-static const GLboolean TexSubImage4 = GL_FALSE;
-
-enum {
- MODE_CREATE_TEXIMAGE,
- MODE_TEXIMAGE,
- MODE_TEXSUBIMAGE,
- MODE_GETTEXIMAGE,
- MODE_COUNT
-};
-
-static const char *mode_name[MODE_COUNT] =
-{
- "Create_TexImage",
- "TexImage",
- "TexSubImage",
- "GetTexImage"
-};
-
-
-
-struct vertex
-{
- GLfloat x, y, s, t;
-};
-
-static const struct vertex vertices[1] = {
- { 0.0, 0.0, 0.5, 0.5 },
-};
-
-#define VOFFSET(F) ((void *) offsetof(struct vertex, F))
-
-
-/** Called from test harness/main */
-void
-PerfInit(void)
-{
- /* setup VBO w/ vertex data */
- glGenBuffersARB(1, &VBO);
- glBindBufferARB(GL_ARRAY_BUFFER_ARB, VBO);
- glBufferDataARB(GL_ARRAY_BUFFER_ARB,
- sizeof(vertices), vertices, GL_STATIC_DRAW_ARB);
- glVertexPointer(2, GL_FLOAT, sizeof(struct vertex), VOFFSET(x));
- glTexCoordPointer(2, GL_FLOAT, sizeof(struct vertex), VOFFSET(s));
- glEnableClientState(GL_VERTEX_ARRAY);
- glEnableClientState(GL_TEXTURE_COORD_ARRAY);
-
- /* texture */
- glGenTextures(1, &TexObj);
- glBindTexture(GL_TEXTURE_2D, TexObj);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
- glEnable(GL_TEXTURE_2D);
-}
-
-
-
-
-static void
-CreateUploadTexImage2D(unsigned count)
-{
- unsigned i;
- for (i = 0; i < count; i++) {
- if (TexObj)
- glDeleteTextures(1, &TexObj);
-
- glGenTextures(1, &TexObj);
- glBindTexture(GL_TEXTURE_2D, TexObj);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
-
- glTexImage2D(GL_TEXTURE_2D, 0, TexIntFormat,
- TexSize, TexSize, 0,
- TexSrcFormat, TexSrcType, TexImage);
-
- if (DrawPoint)
- glDrawArrays(GL_POINTS, 0, 1);
- }
- glFinish();
-}
-
-
-static void
-UploadTexImage2D(unsigned count)
-{
- unsigned i;
- for (i = 0; i < count; i++) {
- /* XXX is this equivalent to a glTexSubImage call since we're
- * always specifying the same image size? That case isn't optimized
- * in Mesa but may be optimized in other drivers. Note sure how
- * much difference that might make.
- */
- glTexImage2D(GL_TEXTURE_2D, 0, TexIntFormat,
- TexSize, TexSize, 0,
- TexSrcFormat, TexSrcType, TexImage);
- if (DrawPoint)
- glDrawArrays(GL_POINTS, 0, 1);
- }
- glFinish();
-}
-
-
-static void
-UploadTexSubImage2D(unsigned count)
-{
- unsigned i;
- for (i = 0; i < count; i++) {
- if (TexSubImage4) {
- GLsizei halfSize = (TexSize == 1) ? 1 : TexSize / 2;
- GLsizei halfPos = TexSize - halfSize;
- /* do glTexSubImage2D in four pieces */
- /* lower-left */
- glPixelStorei(GL_UNPACK_ROW_LENGTH, TexSize);
- glTexSubImage2D(GL_TEXTURE_2D, 0,
- 0, 0, halfSize, halfSize,
- TexSrcFormat, TexSrcType, TexImage);
- /* lower-right */
- glPixelStorei(GL_UNPACK_SKIP_PIXELS, halfPos);
- glTexSubImage2D(GL_TEXTURE_2D, 0,
- halfPos, 0, halfSize, halfSize,
- TexSrcFormat, TexSrcType, TexImage);
- /* upper-left */
- glPixelStorei(GL_UNPACK_SKIP_PIXELS, 0);
- glPixelStorei(GL_UNPACK_SKIP_ROWS, halfPos);
- glTexSubImage2D(GL_TEXTURE_2D, 0,
- 0, halfPos, halfSize, halfSize,
- TexSrcFormat, TexSrcType, TexImage);
- /* upper-right */
- glPixelStorei(GL_UNPACK_SKIP_PIXELS, halfPos);
- glPixelStorei(GL_UNPACK_SKIP_ROWS, halfPos);
- glTexSubImage2D(GL_TEXTURE_2D, 0,
- halfPos, halfPos, halfSize, halfSize,
- TexSrcFormat, TexSrcType, TexImage);
- /* reset the unpacking state */
- glPixelStorei(GL_UNPACK_SKIP_PIXELS, 0);
- glPixelStorei(GL_UNPACK_SKIP_ROWS, 0);
- glPixelStorei(GL_UNPACK_ROW_LENGTH, 0);
- }
- else {
- /* replace whole texture image at once */
- glTexSubImage2D(GL_TEXTURE_2D, 0,
- 0, 0, TexSize, TexSize,
- TexSrcFormat, TexSrcType, TexImage);
- }
- if (DrawPoint)
- glDrawArrays(GL_POINTS, 0, 1);
- }
- glFinish();
-}
-
-
-static void
-GetTexImage2D(unsigned count)
-{
- unsigned i;
- GLubyte *buf = (GLubyte *) malloc(TexSize * TexSize * 4);
- for (i = 0; i < count; i++) {
- glGetTexImage(GL_TEXTURE_2D, 0,
- TexSrcFormat, TexSrcType, buf);
- }
- glFinish();
- free(buf);
-}
-
-
-/* XXX any other formats to measure? */
-static const struct {
- GLenum format, type;
- GLenum internal_format;
- const char *name;
- GLuint texel_size;
- GLboolean full_test;
-} SrcFormats[] = {
- { GL_RGBA, GL_UNSIGNED_BYTE, GL_RGBA, "RGBA/ubyte", 4, GL_TRUE },
- { GL_RGB, GL_UNSIGNED_BYTE, GL_RGB, "RGB/ubyte", 3, GL_FALSE },
- { GL_RGB, GL_UNSIGNED_SHORT_5_6_5, GL_RGB, "RGB/565", 2, GL_FALSE },
- { GL_BGRA, GL_UNSIGNED_BYTE, GL_RGBA, "BGRA/ubyte", 4, GL_FALSE },
- { GL_LUMINANCE, GL_UNSIGNED_BYTE, GL_LUMINANCE, "L/ubyte", 1, GL_FALSE },
- { 0, 0, 0, NULL, 0, 0 }
-};
-
-
-/** Called from test harness/main */
-void
-PerfNextRound(void)
-{
-}
-
-
-/** Called from test harness/main */
-void
-PerfDraw(void)
-{
- GLint maxSize;
- double rate;
- GLint fmt, mode;
-
- glGetIntegerv(GL_MAX_TEXTURE_SIZE, &maxSize);
-
- /* loop over source data formats */
- for (fmt = 0; SrcFormats[fmt].format; fmt++) {
- TexIntFormat = SrcFormats[fmt].internal_format;
- TexSrcFormat = SrcFormats[fmt].format;
- TexSrcType = SrcFormats[fmt].type;
-
- /* loop over glTexImage, glTexSubImage */
- for (mode = 0; mode < MODE_COUNT; mode++) {
- GLuint minsz, maxsz;
-
- if (SrcFormats[fmt].full_test) {
- minsz = 16;
- maxsz = 4096;
- }
- else {
- minsz = maxsz = 256;
- if (mode == MODE_CREATE_TEXIMAGE)
- continue;
- }
-
- /* loop over a defined range of texture sizes, test only the
- * ones which are legal for this driver.
- */
- for (TexSize = minsz; TexSize <= maxsz; TexSize *= 4) {
- double mbPerSec;
-
- if (TexSize <= maxSize) {
- GLint bytesPerImage;
-
- bytesPerImage = TexSize * TexSize * SrcFormats[fmt].texel_size;
- TexImage = malloc(bytesPerImage);
-
- switch (mode) {
- case MODE_TEXIMAGE:
- rate = PerfMeasureRate(UploadTexImage2D);
- break;
-
- case MODE_CREATE_TEXIMAGE:
- rate = PerfMeasureRate(CreateUploadTexImage2D);
- break;
-
- case MODE_TEXSUBIMAGE:
- /* create initial, empty texture */
- glTexImage2D(GL_TEXTURE_2D, 0, TexIntFormat,
- TexSize, TexSize, 0,
- TexSrcFormat, TexSrcType, NULL);
- rate = PerfMeasureRate(UploadTexSubImage2D);
- break;
-
- case MODE_GETTEXIMAGE:
- glTexImage2D(GL_TEXTURE_2D, 0, TexIntFormat,
- TexSize, TexSize, 0,
- TexSrcFormat, TexSrcType, TexImage);
- rate = PerfMeasureRate(GetTexImage2D);
- break;
-
- default:
- exit(1);
- }
-
- mbPerSec = rate * bytesPerImage / (1024.0 * 1024.0);
- free(TexImage);
-
-
- {
- unsigned err;
- err = glGetError();
- if (err) {
- perf_printf("non-zero glGetError() %d\n", err);
- exit(1);
- }
- }
-
- }
- else {
- rate = 0;
- mbPerSec = 0;
- }
-
- perf_printf(" %s(%s %d x %d): "
- "%.1f images/sec, %.1f MB/sec\n",
- mode_name[mode],
- SrcFormats[fmt].name, TexSize, TexSize, rate, mbPerSec);
- }
-
- if (SrcFormats[fmt].full_test)
- perf_printf("\n");
- }
- }
-
- exit(0);
-}
diff --git a/progs/perf/vbo.c b/progs/perf/vbo.c
deleted file mode 100644
index b326c056ec..0000000000
--- a/progs/perf/vbo.c
+++ /dev/null
@@ -1,246 +0,0 @@
-/*
- * Copyright (C) 2009 VMware, Inc. All Rights Reserved.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included
- * in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
- * VMWARE BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
- * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- */
-
-/**
- * Measure VBO upload speed.
- * That is, measure glBufferDataARB() and glBufferSubDataARB().
- *
- * Brian Paul
- * 16 Sep 2009
- */
-
-#include <string.h>
-#include "glmain.h"
-#include "common.h"
-
-/* Copy data out of a large array to avoid caching effects:
- */
-#define DATA_SIZE (16*1024*1024)
-
-int WinWidth = 100, WinHeight = 100;
-
-static GLuint VBO;
-
-static GLsizei VBOSize = 0;
-static GLsizei SubSize = 0;
-static GLubyte *VBOData = NULL; /* array[DATA_SIZE] */
-
-static const GLboolean DrawPoint = GL_TRUE;
-static const GLboolean BufferSubDataInHalves = GL_TRUE;
-
-static const GLfloat Vertex0[2] = { 0.0, 0.0 };
-
-
-/** Called from test harness/main */
-void
-PerfInit(void)
-{
- /* setup VBO */
- glGenBuffersARB(1, &VBO);
- glBindBufferARB(GL_ARRAY_BUFFER_ARB, VBO);
- glVertexPointer(2, GL_FLOAT, sizeof(Vertex0), (void *) 0);
- glEnableClientState(GL_VERTEX_ARRAY);
-}
-
-
-static void
-UploadVBO(unsigned count)
-{
- unsigned i;
- unsigned total = 0;
- unsigned src = 0;
-
- for (i = 0; i < count; i++) {
- glBufferDataARB(GL_ARRAY_BUFFER, VBOSize, VBOData + src, GL_STREAM_DRAW_ARB);
- glDrawArrays(GL_POINTS, 0, 1);
-
- /* Throw in an occasional flush to work around a driver crash:
- */
- total += VBOSize;
- if (total >= 16*1024*1024) {
- glFlush();
- total = 0;
- }
-
- src += VBOSize;
- src %= DATA_SIZE;
- }
- glFinish();
-}
-
-
-static void
-UploadSubVBO(unsigned count)
-{
- unsigned i;
- unsigned src = 0;
-
- for (i = 0; i < count; i++) {
- unsigned offset = (i * SubSize) % VBOSize;
- glBufferSubDataARB(GL_ARRAY_BUFFER, offset, SubSize, VBOData + src);
-
- if (DrawPoint) {
- glDrawArrays(GL_POINTS, offset / sizeof(Vertex0), 1);
- }
-
- src += SubSize;
- src %= DATA_SIZE;
- }
- glFinish();
-}
-
-
-/* Do multiple small SubData uploads, then call DrawArrays. This may be a
- * fairer comparison to back-to-back BufferData calls:
- */
-static void
-BatchUploadSubVBO(unsigned count)
-{
- unsigned i = 0, j;
- unsigned period = VBOSize / SubSize;
- unsigned src = 0;
-
- while (i < count) {
- for (j = 0; j < period && i < count; j++, i++) {
- unsigned offset = j * SubSize;
- glBufferSubDataARB(GL_ARRAY_BUFFER, offset, SubSize, VBOData + src);
- }
-
- glDrawArrays(GL_POINTS, 0, 1);
-
- src += SubSize;
- src %= DATA_SIZE;
- }
- glFinish();
-}
-
-
-/**
- * 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);
- glBindBufferARB(GL_ARRAY_BUFFER_ARB, 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,
- 16*1024,
- 256*1024,
- 1024*1024,
- 16*1024*1024,
- 0 /* end of list */
-};
-
-void
-PerfNextRound(void)
-{
-}
-
-/** Called from test harness/main */
-void
-PerfDraw(void)
-{
- double rate, mbPerSec;
- int i, sz;
-
- /* Load VBOData buffer with duplicated Vertex0.
- */
- VBOData = calloc(DATA_SIZE, 1);
-
- for (i = 0; i < DATA_SIZE / sizeof(Vertex0); i++) {
- memcpy(VBOData + i * sizeof(Vertex0),
- Vertex0,
- sizeof(Vertex0));
- }
-
- /* glBufferDataARB()
- */
- for (sz = 0; Sizes[sz]; sz++) {
- SubSize = VBOSize = Sizes[sz];
- rate = PerfMeasureRate(UploadVBO);
- mbPerSec = rate * VBOSize / (1024.0 * 1024.0);
- perf_printf(" glBufferDataARB(size = %d): %.1f MB/sec\n",
- VBOSize, mbPerSec);
- }
-
- /* glBufferSubDataARB()
- */
- for (sz = 0; Sizes[sz]; sz++) {
- SubSize = VBOSize = Sizes[sz];
- rate = PerfMeasureRate(UploadSubVBO);
- mbPerSec = rate * VBOSize / (1024.0 * 1024.0);
- perf_printf(" glBufferSubDataARB(size = %d): %.1f MB/sec\n",
- VBOSize, mbPerSec);
- }
-
- /* Batch upload
- */
- VBOSize = 1024 * 1024;
- glBufferDataARB(GL_ARRAY_BUFFER, VBOSize, VBOData, GL_STREAM_DRAW_ARB);
-
- for (sz = 0; Sizes[sz] < VBOSize; sz++) {
- SubSize = Sizes[sz];
- rate = PerfMeasureRate(UploadSubVBO);
- mbPerSec = rate * SubSize / (1024.0 * 1024.0);
- perf_printf(" glBufferSubDataARB(size = %d, VBOSize = %d): %.1f MB/sec\n",
- SubSize, VBOSize, mbPerSec);
- }
-
- for (sz = 0; Sizes[sz] < VBOSize; sz++) {
- SubSize = Sizes[sz];
- rate = PerfMeasureRate(BatchUploadSubVBO);
- mbPerSec = rate * SubSize / (1024.0 * 1024.0);
- perf_printf(" glBufferSubDataARB(size = %d, VBOSize = %d), batched: %.1f MB/sec\n",
- 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);
-}
diff --git a/progs/perf/vertexrate.c b/progs/perf/vertexrate.c
deleted file mode 100644
index b5355525d0..0000000000
--- a/progs/perf/vertexrate.c
+++ /dev/null
@@ -1,276 +0,0 @@
-/*
- * Copyright (C) 2009 VMware, Inc. All Rights Reserved.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included
- * in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
- * VMWARE BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
- * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- */
-
-/**
- * Measure simple vertex processing rate via:
- * - immediate mode
- * - vertex arrays
- * - VBO vertex arrays
- * - glDrawElements
- * - VBO glDrawElements
- * - glDrawRangeElements
- * - VBO glDrawRangeElements
- *
- * Brian Paul
- * 16 Sep 2009
- */
-
-#include <assert.h>
-#include <string.h>
-#include "glmain.h"
-#include "common.h"
-
-
-#define MAX_VERTS (100 * 100)
-
-/** glVertex2/3/4 size */
-#define VERT_SIZE 4
-
-int WinWidth = 500, WinHeight = 500;
-
-static GLuint VertexBO, ElementBO;
-
-static unsigned NumVerts = MAX_VERTS;
-static unsigned VertBytes = VERT_SIZE * sizeof(float);
-static float *VertexData = NULL;
-
-static unsigned NumElements = MAX_VERTS;
-static GLuint *Elements = NULL;
-
-
-/**
- * Load VertexData buffer with a 2-D grid of points in the range [-1,1]^2.
- */
-static void
-InitializeVertexData(void)
-{
- unsigned i;
- float x = -1.0, y = -1.0;
- float dx = 2.0 / 100;
- float dy = 2.0 / 100;
-
- VertexData = (float *) malloc(NumVerts * VertBytes);
-
- for (i = 0; i < NumVerts; i++) {
- VertexData[i * VERT_SIZE + 0] = x;
- VertexData[i * VERT_SIZE + 1] = y;
- VertexData[i * VERT_SIZE + 2] = 0.0;
- VertexData[i * VERT_SIZE + 3] = 1.0;
- x += dx;
- if (x > 1.0) {
- x = -1.0;
- y += dy;
- }
- }
-
- Elements = (GLuint *) malloc(NumVerts * sizeof(GLuint));
-
- for (i = 0; i < NumVerts; i++) {
- Elements[i] = NumVerts - i - 1;
- }
-}
-
-
-/** Called from test harness/main */
-void
-PerfInit(void)
-{
- InitializeVertexData();
-
- /* setup VertexBO */
- glGenBuffersARB(1, &VertexBO);
- glBindBufferARB(GL_ARRAY_BUFFER_ARB, VertexBO);
- glBufferDataARB(GL_ARRAY_BUFFER_ARB,
- NumVerts * VertBytes, VertexData, GL_STATIC_DRAW_ARB);
- glEnableClientState(GL_VERTEX_ARRAY);
-
- /* setup ElementBO */
- glGenBuffersARB(1, &ElementBO);
- glBindBufferARB(GL_ELEMENT_ARRAY_BUFFER_ARB, ElementBO);
- glBufferDataARB(GL_ELEMENT_ARRAY_BUFFER_ARB,
- NumElements * sizeof(GLuint), Elements, GL_STATIC_DRAW_ARB);
-}
-
-
-static void
-DrawImmediate(unsigned count)
-{
- unsigned i;
- glBindBufferARB(GL_ELEMENT_ARRAY_BUFFER, 0);
- glBindBufferARB(GL_ARRAY_BUFFER, 0);
- for (i = 0; i < count; i++) {
- unsigned j;
- glBegin(GL_POINTS);
- for (j = 0; j < NumVerts; j++) {
-#if VERT_SIZE == 4
- glVertex4fv(VertexData + j * 4);
-#elif VERT_SIZE == 3
- glVertex3fv(VertexData + j * 3);
-#elif VERT_SIZE == 2
- glVertex2fv(VertexData + j * 2);
-#else
- abort();
-#endif
- }
- glEnd();
- }
- glFinish();
- PerfSwapBuffers();
-}
-
-
-static void
-DrawArraysMem(unsigned count)
-{
- unsigned i;
- glBindBufferARB(GL_ELEMENT_ARRAY_BUFFER, 0);
- glBindBufferARB(GL_ARRAY_BUFFER, 0);
- glVertexPointer(VERT_SIZE, GL_FLOAT, VertBytes, VertexData);
- for (i = 0; i < count; i++) {
- glDrawArrays(GL_POINTS, 0, NumVerts);
- }
- glFinish();
- PerfSwapBuffers();
-}
-
-
-static void
-DrawArraysVBO(unsigned count)
-{
- unsigned i;
- glBindBufferARB(GL_ELEMENT_ARRAY_BUFFER, 0);
- glBindBufferARB(GL_ARRAY_BUFFER, VertexBO);
- glVertexPointer(VERT_SIZE, GL_FLOAT, VertBytes, (void *) 0);
- for (i = 0; i < count; i++) {
- glDrawArrays(GL_POINTS, 0, NumVerts);
- }
- glFinish();
- PerfSwapBuffers();
-}
-
-
-static void
-DrawElementsMem(unsigned count)
-{
- unsigned i;
- glBindBufferARB(GL_ELEMENT_ARRAY_BUFFER, 0);
- glBindBufferARB(GL_ARRAY_BUFFER, 0);
- glVertexPointer(VERT_SIZE, GL_FLOAT, VertBytes, VertexData);
- for (i = 0; i < count; i++) {
- glDrawElements(GL_POINTS, NumVerts, GL_UNSIGNED_INT, Elements);
- }
- glFinish();
- PerfSwapBuffers();
-}
-
-
-static void
-DrawElementsBO(unsigned count)
-{
- unsigned i;
- glBindBufferARB(GL_ELEMENT_ARRAY_BUFFER, ElementBO);
- glBindBufferARB(GL_ARRAY_BUFFER, VertexBO);
- glVertexPointer(VERT_SIZE, GL_FLOAT, VertBytes, (void *) 0);
- for (i = 0; i < count; i++) {
- glDrawElements(GL_POINTS, NumVerts, GL_UNSIGNED_INT, (void *) 0);
- }
- glFinish();
- PerfSwapBuffers();
-}
-
-
-static void
-DrawRangeElementsMem(unsigned count)
-{
- unsigned i;
- glBindBufferARB(GL_ELEMENT_ARRAY_BUFFER, 0);
- glBindBufferARB(GL_ARRAY_BUFFER, 0);
- glVertexPointer(VERT_SIZE, GL_FLOAT, VertBytes, VertexData);
- for (i = 0; i < count; i++) {
- glDrawRangeElements(GL_POINTS, 0, NumVerts - 1,
- NumVerts, GL_UNSIGNED_INT, Elements);
- }
- glFinish();
- PerfSwapBuffers();
-}
-
-
-static void
-DrawRangeElementsBO(unsigned count)
-{
- unsigned i;
- glBindBufferARB(GL_ELEMENT_ARRAY_BUFFER, ElementBO);
- glBindBufferARB(GL_ARRAY_BUFFER, VertexBO);
- glVertexPointer(VERT_SIZE, GL_FLOAT, VertBytes, (void *) 0);
- for (i = 0; i < count; i++) {
- glDrawRangeElements(GL_POINTS, 0, NumVerts - 1,
- NumVerts, GL_UNSIGNED_INT, (void *) 0);
- }
- glFinish();
- PerfSwapBuffers();
-}
-
-void
-PerfNextRound(void)
-{
-}
-
-
-/** Called from test harness/main */
-void
-PerfDraw(void)
-{
- double rate;
-
- glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
-
- perf_printf("Vertex rate (%d x Vertex%df)\n", NumVerts, VERT_SIZE);
-
- rate = PerfMeasureRate(DrawImmediate);
- rate *= NumVerts;
- perf_printf(" Immediate mode: %s verts/sec\n", PerfHumanFloat(rate));
-
- rate = PerfMeasureRate(DrawArraysMem);
- rate *= NumVerts;
- perf_printf(" glDrawArrays: %s verts/sec\n", PerfHumanFloat(rate));
-
- rate = PerfMeasureRate(DrawArraysVBO);
- rate *= NumVerts;
- perf_printf(" VBO glDrawArrays: %s verts/sec\n", PerfHumanFloat(rate));
-
- rate = PerfMeasureRate(DrawElementsMem);
- rate *= NumVerts;
- perf_printf(" glDrawElements: %s verts/sec\n", PerfHumanFloat(rate));
-
- rate = PerfMeasureRate(DrawElementsBO);
- rate *= NumVerts;
- perf_printf(" VBO glDrawElements: %s verts/sec\n", PerfHumanFloat(rate));
-
- rate = PerfMeasureRate(DrawRangeElementsMem);
- rate *= NumVerts;
- perf_printf(" glDrawRangeElements: %s verts/sec\n", PerfHumanFloat(rate));
-
- rate = PerfMeasureRate(DrawRangeElementsBO);
- rate *= NumVerts;
- perf_printf(" VBO glDrawRangeElements: %s verts/sec\n", PerfHumanFloat(rate));
-
- exit(0);
-}