]> git.sesse.net Git - nageru/blob - gpu_timers.cpp
Move GPUTimers into its own file.
[nageru] / gpu_timers.cpp
1 #include <epoxy/gl.h>
2
3 #include "gpu_timers.h"
4
5 using namespace std;
6
7 pair<GLuint, GLuint> GPUTimers::begin_timer(const string &name, int level)
8 {
9         if (!enable_timing) {
10                 return make_pair(0, 0);
11         }
12
13         GLuint queries[2];
14         glGenQueries(2, queries);
15         glQueryCounter(queries[0], GL_TIMESTAMP);
16
17         Timer timer;
18         timer.name = name;
19         timer.level = level;
20         timer.query.first = queries[0];
21         timer.query.second = queries[1];
22         timers.push_back(timer);
23         return timer.query;
24 }
25
26 void GPUTimers::print()
27 {
28         for (const Timer &timer : timers) {
29                 // NOTE: This makes the CPU wait for the GPU.
30                 GLuint64 time_start, time_end;
31                 glGetQueryObjectui64v(timer.query.first, GL_QUERY_RESULT, &time_start);
32                 glGetQueryObjectui64v(timer.query.second, GL_QUERY_RESULT, &time_end);
33                 //fprintf(stderr, "GPU time used = %.1f ms\n", time_elapsed / 1e6);
34                 for (int i = 0; i < timer.level * 2; ++i) {
35                         fprintf(stderr, " ");
36                 }
37                 fprintf(stderr, "%-30s %4.1f ms\n", timer.name.c_str(), GLint64(time_end - time_start) / 1e6);
38         }
39 }