From 9840c201de08419f5d940642974438917a44d849 Mon Sep 17 00:00:00 2001 From: James Benton Date: Mon, 23 Jul 2012 18:45:46 +0100 Subject: [PATCH] Added support for recording GL_SAMPLES_PASSED. --- common/trace_profiler.cpp | 3 ++- common/trace_profiler.hpp | 2 +- retrace/glretrace_main.cpp | 15 +++++++++------ 3 files changed, 12 insertions(+), 8 deletions(-) diff --git a/common/trace_profiler.cpp b/common/trace_profiler.cpp index fd684ed..ab29e36 100644 --- a/common/trace_profiler.cpp +++ b/common/trace_profiler.cpp @@ -36,7 +36,7 @@ Profiler::~Profiler() { } -void Profiler::addCall(unsigned no, const char *name, uint64_t gpu_start, uint64_t gpu_duration) +void Profiler::addCall(unsigned no, const char *name, uint64_t gpu_start, uint64_t gpu_duration, uint64_t samples_passed) { if (baseTime == 0) baseTime = gpu_start; @@ -45,6 +45,7 @@ void Profiler::addCall(unsigned no, const char *name, uint64_t gpu_start, uint64 << no << " " << (gpu_start - baseTime) << " " << gpu_duration << " " + << samples_passed << " " << name << std::endl; } diff --git a/common/trace_profiler.hpp b/common/trace_profiler.hpp index 191ac72..ff07c95 100644 --- a/common/trace_profiler.hpp +++ b/common/trace_profiler.hpp @@ -37,7 +37,7 @@ public: Profiler(); ~Profiler(); - void addCall(unsigned no, const char* name, uint64_t gpu_start, uint64_t gpu_duration); + void addCall(unsigned no, const char* name, uint64_t gpu_start, uint64_t gpu_duration, uint64_t samples_passed); void addFrameStart(unsigned no, uint64_t timestamp); void addFrameEnd(uint64_t timestamp); diff --git a/retrace/glretrace_main.cpp b/retrace/glretrace_main.cpp index ee19a69..4f5706b 100644 --- a/retrace/glretrace_main.cpp +++ b/retrace/glretrace_main.cpp @@ -39,14 +39,14 @@ bool insideGlBeginEnd = false; struct CallQuery { - GLuint ids[2]; + GLuint ids[3]; unsigned call; const trace::FunctionSig *sig; }; static bool firstFrame = true; static std::list callQueries; -static const int maxActiveCallQueries = 100; +static const int maxActiveCallQueries = 128; void @@ -110,13 +110,14 @@ getTimestamp() { static void completeCallQuery(CallQuery& query) { /* Get call start and duration */ - GLuint64 timestamp = 0, duration = 0; + GLuint64 timestamp = 0, duration = 0, samples = 0; glGetQueryObjectui64vEXT(query.ids[0], GL_QUERY_RESULT, ×tamp); glGetQueryObjectui64vEXT(query.ids[1], GL_QUERY_RESULT, &duration); - glDeleteQueries(2, query.ids); + glGetQueryObjectui64vEXT(query.ids[2], GL_QUERY_RESULT, &samples); + glDeleteQueries(3, query.ids); /* Add call to profile */ - retrace::profiler.addCall(query.call, query.sig->name, timestamp, duration); + retrace::profiler.addCall(query.call, query.sig->name, timestamp, duration, samples); } void @@ -145,9 +146,10 @@ beginProfileGPU(trace::Call &call) { query.call = call.no; query.sig = call.sig; - glGenQueries(2, query.ids); + glGenQueries(3, query.ids); glQueryCounter(query.ids[0], GL_TIMESTAMP); glBeginQuery(GL_TIME_ELAPSED, query.ids[1]); + glBeginQuery(GL_SAMPLES_PASSED, query.ids[2]); callQueries.push_back(query); } @@ -155,6 +157,7 @@ beginProfileGPU(trace::Call &call) { void endProfileGPU(trace::Call &call) { glEndQuery(GL_TIME_ELAPSED); + glEndQuery(GL_SAMPLES_PASSED); } void -- 2.43.0