summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJerome Glisse <jglisse@redhat.com>2012-11-08 20:42:28 -0500
committerJerome Glisse <jglisse@redhat.com>2012-11-08 15:46:59 -0500
commit60f5fe78f32aa12b85016235547587ae2b8f6dc5 (patch)
tree18b0b54c184d0a909eb178fa23b6de63a3ac77bc
parentc174ace749bb3603166ab00b543db30cd6b6297b (diff)
add gl query example
Signed-off-by: Jerome Glisse <jglisse@redhat.com>
-rw-r--r--Makefile2
-rw-r--r--glquery.c145
-rwxr-xr-xrun.sh2
3 files changed, 147 insertions, 2 deletions
diff --git a/Makefile b/Makefile
index 859d7be..764be5d 100644
--- a/Makefile
+++ b/Makefile
@@ -3,7 +3,7 @@ CFLAGS = -I . -g -O0 -Wall -std=c99 -lGL -lGLU -lm -D_BSD_SOURCE
TARGETS = amd-gpu-name glgears glgears-box glgears-box-cstrealloc \
gltransformfeedback glclear-depth glgears-box-msaa glbigshader \
- glgears-box2 glclear-depth2
+ glgears-box2 glclear-depth2 glquery
all: $(TARGETS)
diff --git a/glquery.c b/glquery.c
new file mode 100644
index 0000000..5e64490
--- /dev/null
+++ b/glquery.c
@@ -0,0 +1,145 @@
+/*
+ * Copyright (c) 1991, 1992, 1993 Silicon Graphics, Inc.
+ *
+ * Permission to use, copy, modify, distribute, and sell this software and
+ * its documentation for any purpose is hereby granted without fee, provided
+ * that (i) the above copyright notices and this permission notice appear in
+ * all copies of the software and related documentation, and (ii) the name of
+ * Silicon Graphics may not be used in any advertising or
+ * publicity relating to the software without the specific, prior written
+ * permission of Silicon Graphics.
+ *
+ * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF
+ * ANY KIND,
+ * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY
+ * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ * IN NO EVENT SHALL SILICON GRAPHICS BE LIABLE FOR
+ * ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND,
+ * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
+ * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF
+ * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
+ * OF THIS SOFTWARE.
+ */
+
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+#include <GL/glew.h>
+#include <GL/glut.h>
+
+
+#define CI_OFFSET_1 16
+#define CI_OFFSET_2 32
+
+static GLuint OccQuery;
+
+
+static void Init(void)
+{
+ if (!glutExtensionSupported("GL_ARB_occlusion_query")) {
+ fprintf(stderr, "Sorry, this program requires GL_ARB_occlusion_query\n");
+ exit(1);
+ }
+
+ fprintf(stderr, "GL_RENDERER = %s\n", (char *) glGetString(GL_RENDERER));
+ fprintf(stderr, "GL_VERSION = %s\n", (char *) glGetString(GL_VERSION));
+ fprintf(stderr, "GL_VENDOR = %s\n", (char *) glGetString(GL_VENDOR));
+ fflush(stderr);
+
+ glClearColor(0.0, 0.0, 1.0, 0.0);
+
+ glGenQueriesARB(1, &OccQuery);
+}
+
+static void Reshape(int width, int height)
+{
+
+ glViewport(0, 0, (GLint)width, (GLint)height);
+
+ glMatrixMode(GL_PROJECTION);
+ glLoadIdentity();
+ glOrtho(-1.0, 1.0, -1.0, 1.0, -0.5, 1000.0);
+ glMatrixMode(GL_MODELVIEW);
+}
+
+static void Key(unsigned char key, int x, int y)
+{
+
+ switch (key) {
+ case 27:
+ exit(1);
+ default:
+ break;
+ }
+
+ glutPostRedisplay();
+}
+
+static void Draw(void)
+{
+ GLuint passed;
+ GLint ready;
+
+ glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
+
+ glEnable(GL_DEPTH_TEST);
+
+ glBeginQueryARB(GL_SAMPLES_PASSED_ARB, OccQuery);
+
+ glBegin(GL_TRIANGLES);
+ glColor3f(0,0,.7);
+ glVertex3f( 0.9, -0.9, -30.0);
+ glColor3f(.8,0,0);
+ glVertex3f( 0.9, 0.9, -30.0);
+ glColor3f(0,.9,0);
+ glVertex3f(-0.9, 0.0, -30.0);
+ glEnd();
+
+ glEndQueryARB(GL_SAMPLES_PASSED_ARB);
+
+ do {
+ /* do useful work here, if any */
+ glGetQueryObjectivARB(OccQuery, GL_QUERY_RESULT_AVAILABLE_ARB, &ready);
+ } while (!ready);
+ glGetQueryObjectuivARB(OccQuery, GL_QUERY_RESULT_ARB, &passed);
+
+ fprintf(stderr, " %d Fragments Visible\n", passed);
+
+ glFlush();
+
+ glutSwapBuffers();
+}
+
+static GLenum Args(int argc, char **argv)
+{
+ return GL_TRUE;
+}
+
+int main(int argc, char **argv)
+{
+ glutInit(&argc, argv);
+
+ if (Args(argc, argv) == GL_FALSE) {
+ exit(1);
+ }
+
+ glutInitWindowPosition(100, 0); glutInitWindowSize( 250, 250);
+
+ glutInitDisplayMode(GLUT_RGB | GLUT_DEPTH | GLUT_DOUBLE);
+
+ if (glutCreateWindow(*argv) == GL_FALSE) {
+ exit(1);
+ }
+
+ glewInit();
+
+ Init();
+
+ glutReshapeFunc(Reshape);
+ glutKeyboardFunc(Key);
+ glutDisplayFunc(Draw);
+ Reshape(250, 250);
+ glutMainLoop();
+ return 0;
+}
diff --git a/run.sh b/run.sh
index 91e47fb..6295ced 100755
--- a/run.sh
+++ b/run.sh
@@ -5,7 +5,7 @@ rdb_name=`echo $output | cut --delimiter='-' -f1`
for i in `find ./ -name 'gl*' -executable` ; do
e=`basename $i`
echo $e
- sudo gdb -batch -x fglrx-trace-cs.gdb --args $i > .tmp 2>&1
+ sudo gdb -batch -x fglrx-trace-cs.gdb --args $i -auto > .tmp 2>&1
~/git/rdb/rdb_annotateib ~/git/rdb/$rdb_name.rdb .tmp > $output-$e.txt
sudo rm .tmp*
done