X-Git-Url: https://git.cworth.org/git?a=blobdiff_plain;f=glwrap.c;h=a7d62c5c1ef2be57d650591302923197c0fbb05f;hb=99eeb7e0771887efc60f295db6a30a76c677c933;hp=e92889a7688da5efb636f1fc4503c251e3f91b79;hpb=5569357a9fc7189c2bae43773f44ba576583ec2b;p=fips diff --git a/glwrap.c b/glwrap.c index e92889a..a7d62c5 100644 --- a/glwrap.c +++ b/glwrap.c @@ -36,8 +36,10 @@ */ #define const +#define GL_GLEXT_PROTOTYPES +#include + #include "fips.h" -#include "fips-dispatch.h" #include "glwrap.h" @@ -65,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); @@ -335,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); @@ -357,7 +360,7 @@ glEnd (void) GLWRAP_DEFER (glEnd); if (! inside_new_list) { - glEndQuery (GL_TIME_ELAPSED); + metrics_counter_stop (); } }