X-Git-Url: https://git.cworth.org/git?a=blobdiff_plain;f=glwrap.c;h=a7d62c5c1ef2be57d650591302923197c0fbb05f;hb=02c39fbdaa29d62a8e7b8d223f62ccd08d4782ee;hp=8e8b64d193194aa8ffd7a127e00d59448d8f0a36;hpb=499af6e2043af80750f5b2a2866ebb430e085851;p=fips diff --git a/glwrap.c b/glwrap.c index 8e8b64d..a7d62c5 100644 --- a/glwrap.c +++ b/glwrap.c @@ -19,12 +19,6 @@ * THE SOFTWARE. */ -#include "fips.h" - -#include "glwrap.h" - -#include "metrics.h" - /* The prototypes for some OpenGL functions changed at one point from: * * const void* *indices @@ -45,6 +39,12 @@ #define GL_GLEXT_PROTOTYPES #include +#include "fips.h" + +#include "glwrap.h" + +#include "metrics.h" + #include "dlwrap.h" static int inside_new_list = 0; @@ -67,16 +67,16 @@ glwrap_lookup (char *name) return dlwrap_real_dlsym (libgl_handle, name); } -/* Execute a glBeginQuery/glEndQuery pair around an OpenGL call. */ +/* Execute an OpenGL call and time it with a GPU metrics counter. */ #define TIMED_DEFER(function,...) do { \ if (! inside_new_list) { \ unsigned counter; \ - counter = metrics_add_counter (); \ - glBeginQuery (GL_TIME_ELAPSED, counter); \ + counter = metrics_counter_new (); \ + metrics_counter_start (counter); \ } \ GLWRAP_DEFER(function, __VA_ARGS__); \ if (! inside_new_list) { \ - glEndQuery (GL_TIME_ELAPSED); \ + metrics_counter_stop (); \ } \ } while (0); @@ -157,13 +157,12 @@ glMultiModeDrawArraysIBM (const GLenum *mode, const GLint *first, first, count, primcount, modestride); } -/* FIXME? void -glMultiDrawArraysIndirect (...) +glMultiDrawArraysIndirect (GLenum mode, const void *indirect, + GLsizei drawcount, GLsizei stride) { - TIMED_DEFER (glMultiDrawArraysIndirect, ...); + TIMED_DEFER (glMultiDrawArraysIndirect, mode, indirect, drawcount, stride); } -*/ void glMultiDrawArraysIndirectAMD (GLenum mode, const GLvoid *indirect, @@ -303,13 +302,13 @@ glMultiModeDrawElementsIBM (const GLenum *mode, const GLsizei *count, type, indices, primcount, modestride); } -/* FIXME? void -glMultiDrawElementsIndirect (...) +glMultiDrawElementsIndirect (GLenum mode, GLenum type, const void *indirect, + GLsizei drawcount, GLsizei stride) { - TIMED_DEFER (glMultiDrawElementsIndirect, ...); + TIMED_DEFER (glMultiDrawElementsIndirect, mode, type, + indirect, drawcount, stride); } -*/ void glMultiDrawElementsIndirectAMD (GLenum mode, GLenum type, @@ -338,17 +337,18 @@ glClear (GLbitfield mask) TIMED_DEFER (glClear, mask); } -/* We can't just use TIMED_DEFER for glBegin/glEnd since the - * glBeginQuery/glEndQuery calls must both be outside - * glBegin/glEnd. */ +/* We can't just use TIMED_DEFER for glBegin/glEnd since the metrics + * counter must be started before glBegin and stopped after glEnd, + * (that is, everything from glBegin to glEnd is counted as a single + * operation). */ void glBegin (GLenum mode) { if (! inside_new_list) { unsigned counter; - counter = metrics_add_counter (); - glBeginQuery (GL_TIME_ELAPSED, counter); + counter = metrics_counter_new (); + metrics_counter_start (counter); } GLWRAP_DEFER (glBegin, mode); @@ -360,7 +360,7 @@ glEnd (void) GLWRAP_DEFER (glEnd); if (! inside_new_list) { - glEndQuery (GL_TIME_ELAPSED); + metrics_counter_stop (); } }