-#include "dlwrap.h"
-
-static int inside_new_list = 0;
-
-void *
-glwrap_lookup (char *name)
-{
- const char *libgl_filename = "libGL.so.1";
- static void *libgl_handle = NULL;
-
- if (! libgl_handle) {
- libgl_handle = dlwrap_real_dlopen (libgl_filename, RTLD_NOW | RTLD_DEEPBIND);
- if (! libgl_handle) {
- fprintf (stderr, "Error: Failed to dlopen %s\n",
- libgl_filename);
- exit (1);
- }
- }
-
- return dlwrap_real_dlsym (libgl_handle, name);
-}
-
-/* Execute a glBeginQuery/glEndQuery pair around an OpenGL call. */
-#define TIMED_DEFER(function,...) do { \
- if (! inside_new_list) { \
- unsigned counter; \
- counter = metrics_add_counter (); \
- glBeginQuery (GL_TIME_ELAPSED, counter); \
- } \
- GLWRAP_DEFER(function, __VA_ARGS__); \
- if (! inside_new_list) { \
- glEndQuery (GL_TIME_ELAPSED); \
- } \
-} while (0);
-
-/* Thanks to apitrace source code for the list of OpenGL draw calls. */
-void
-glDrawArrays (GLenum mode, GLint first, GLsizei count)
-{
- TIMED_DEFER (glDrawArrays, mode, first, count);
-}
-
-void
-glDrawArraysEXT (GLenum mode, GLint first, GLsizei count)
-{
- TIMED_DEFER (glDrawArraysEXT, mode, first, count);
-}
-
-void
-glDrawArraysIndirect (GLenum mode, const GLvoid *indirect)
-{
- TIMED_DEFER (glDrawArraysIndirect, mode, indirect);
-}
-
-void
-glDrawArraysInstanced (GLenum mode, GLint first, GLsizei count,
- GLsizei primcount)
-{
- TIMED_DEFER (glDrawArraysInstanced, mode, first, count, primcount);
-}
-
-void
-glDrawArraysInstancedARB (GLenum mode, GLint first, GLsizei count,
- GLsizei primcount)
-{
- TIMED_DEFER (glDrawArraysInstancedARB, mode, first, count, primcount);
-}
-
-void
-glDrawArraysInstancedEXT (GLenum mode, GLint start, GLsizei count,
- GLsizei primcount)
-{
- TIMED_DEFER (glDrawArraysInstancedEXT, mode, start, count, primcount);
-}
-
-void
-glDrawArraysInstancedBaseInstance (GLenum mode, GLint first, GLsizei count,
- GLsizei primcount, GLuint baseinstance)
-{
- TIMED_DEFER (glDrawArraysInstancedBaseInstance, mode,
- first, count, primcount, baseinstance);
-}
-
-void
-glDrawMeshArraysSUN (GLenum mode, GLint first, GLsizei count, GLsizei width)
-{
- TIMED_DEFER (glDrawMeshArraysSUN, mode, first, count, width);
-}
-
-void
-glMultiDrawArrays (GLenum mode, const GLint *first,
- const GLsizei *count, GLsizei primcount)
-{
- TIMED_DEFER (glMultiDrawArrays, mode, first, count, primcount);
-}
-
-void
-glMultiDrawArraysEXT (GLenum mode, const GLint *first,
- const GLsizei *count, GLsizei primcount)
-{
- TIMED_DEFER (glMultiDrawArraysEXT, mode, first, count, primcount);
-}
-
-void
-glMultiModeDrawArraysIBM (const GLenum *mode, const GLint *first,
- const GLsizei *count, GLsizei primcount,
- GLint modestride)
-{
- TIMED_DEFER (glMultiModeDrawArraysIBM, mode,
- first, count, primcount, modestride);
-}
-
-void
-glMultiDrawArraysIndirect (GLenum mode, const void *indirect,
- GLsizei drawcount, GLsizei stride)
-{
- TIMED_DEFER (glMultiDrawArraysIndirect, mode, indirect, drawcount, stride);
-}
-
-void
-glMultiDrawArraysIndirectAMD (GLenum mode, const GLvoid *indirect,
- GLsizei primcount, GLsizei stride)
-{
- TIMED_DEFER (glMultiDrawArraysIndirectAMD, mode,
- indirect, primcount, stride);
-}
-
-void
-glDrawElements (GLenum mode, GLsizei count, GLenum type, const GLvoid *indices)
-{
- TIMED_DEFER (glDrawElements, mode, count, type, indices);
-}
-
-void
-glDrawElementsBaseVertex (GLenum mode, GLsizei count, GLenum type,
- const GLvoid *indices, GLint basevertex)
-{
- TIMED_DEFER (glDrawElementsBaseVertex, mode, count,
- type, indices, basevertex);
-}
-
-void
-glDrawElementsIndirect (GLenum mode, GLenum type, const GLvoid *indirect)
-{
- TIMED_DEFER (glDrawElementsIndirect, mode, type, indirect);
-}
-
-void
-glDrawElementsInstanced (GLenum mode, GLsizei count, GLenum type,
- const GLvoid *indices, GLsizei primcount)
-{
- TIMED_DEFER (glDrawElementsInstanced, mode, count,
- type, indices, primcount);
-}
-
-void
-glDrawElementsInstancedARB (GLenum mode, GLsizei count, GLenum type,
- const GLvoid *indices, GLsizei primcount)
-{
- TIMED_DEFER (glDrawElementsInstancedARB, mode, count,
- type, indices, primcount);
-}
-
-void
-glDrawElementsInstancedEXT (GLenum mode, GLsizei count, GLenum type,
- const GLvoid *indices, GLsizei primcount)
-{
- TIMED_DEFER (glDrawElementsInstancedEXT, mode, count,
- type, indices, primcount);
-}
-
-void
-glDrawElementsInstancedBaseVertex (GLenum mode, GLsizei count, GLenum type,
- const GLvoid *indices, GLsizei primcount,
- GLint basevertex)
-{
- TIMED_DEFER (glDrawElementsInstancedBaseVertex, mode, count,
- type, indices, primcount, basevertex);
-}
-
-void
-glDrawElementsInstancedBaseInstance (GLenum mode, GLsizei count, GLenum type,
- const void *indices, GLsizei primcount,
- GLuint baseinstance)
-{
- TIMED_DEFER (glDrawElementsInstancedBaseInstance, mode, count, type,
- indices, primcount, baseinstance);
-}
-
-void
-glDrawElementsInstancedBaseVertexBaseInstance (GLenum mode, GLsizei count,
- GLenum type, const void *indices, GLsizei primcount,
- GLint basevertex, GLuint baseinstance)
-{
- TIMED_DEFER (glDrawElementsInstancedBaseVertexBaseInstance, mode,
- count, type, indices, primcount, basevertex, baseinstance);
-}
-
-void
-glDrawRangeElements (GLenum mode, GLuint start, GLuint end, GLsizei count,
- GLenum type, const GLvoid *indices)
-{
- TIMED_DEFER (glDrawRangeElements, mode, start, end,
- count, type, indices);
-}
-
-void
-glDrawRangeElementsEXT (GLenum mode, GLuint start, GLuint end, GLsizei count,
- GLenum type, const GLvoid *indices)
-{
- TIMED_DEFER (glDrawRangeElementsEXT, mode, start, end,
- count, type, indices);
-}
-
-void
-glDrawRangeElementsBaseVertex (GLenum mode, GLuint start, GLuint end,
- GLsizei count, GLenum type,
- const GLvoid *indices, GLint basevertex)
-{
- TIMED_DEFER (glDrawRangeElementsBaseVertex, mode, start, end,
- count, type, indices, basevertex);
-}
-
-void
-glMultiDrawElements (GLenum mode, const GLsizei *count, GLenum type,
- const GLvoid* *indices, GLsizei primcount)
-{
- TIMED_DEFER (glMultiDrawElements, mode, count, type,
- indices, primcount);
-}
-
-void
-glMultiDrawElementsBaseVertex (GLenum mode, const GLsizei *count,
- GLenum type, const GLvoid* *indices,
- GLsizei primcount, const GLint *basevertex)
-{
- TIMED_DEFER (glMultiDrawElementsBaseVertex, mode, count,
- type, indices, primcount, basevertex);
-}
-
-void
-glMultiDrawElementsEXT (GLenum mode, const GLsizei *count, GLenum type,
- const GLvoid* *indices, GLsizei primcount)
-{
- TIMED_DEFER (glMultiDrawElementsEXT, mode, count,
- type, indices, primcount);
-}
-
-void
-glMultiModeDrawElementsIBM (const GLenum *mode, const GLsizei *count,
- GLenum type, const GLvoid* const *indices,
- GLsizei primcount, GLint modestride)
-{
- TIMED_DEFER (glMultiModeDrawElementsIBM, mode, count,
- type, indices, primcount, modestride);
-}
-
-void
-glMultiDrawElementsIndirect (GLenum mode, GLenum type, const void *indirect,
- GLsizei drawcount, GLsizei stride)
-{
- TIMED_DEFER (glMultiDrawElementsIndirect, mode, type,
- indirect, drawcount, stride);
-}