Turn timer query into asynchronous one

This commit is contained in:
Vincent Lejeune
2014-09-05 02:26:29 +02:00
parent 0848087b1d
commit 3529293b8d
2 changed files with 14 additions and 4 deletions

View File

@@ -924,11 +924,11 @@ size_t VAOManager::appendInstance(enum InstanceType, const std::vector<InstanceD
return result;
}
ScopedGPUTimer::ScopedGPUTimer(GPUTimer &timer)
ScopedGPUTimer::ScopedGPUTimer(GPUTimer &t) : timer(t)
{
if (!UserConfigParams::m_profiler_enabled) return;
if (profiler.isFrozen()) return;
if (!timer.canSubmitQuery) return;
#ifdef GL_TIME_ELAPSED
irr::video::COpenGLDriver *gl_driver = (irr::video::COpenGLDriver *)irr_driver->getDevice()->getVideoDriver();
if (!timer.initialised)
@@ -943,14 +943,15 @@ ScopedGPUTimer::~ScopedGPUTimer()
{
if (!UserConfigParams::m_profiler_enabled) return;
if (profiler.isFrozen()) return;
if (!timer.canSubmitQuery) return;
#ifdef GL_TIME_ELAPSED
irr::video::COpenGLDriver *gl_driver = (irr::video::COpenGLDriver *)irr_driver->getDevice()->getVideoDriver();
gl_driver->extGlEndQuery(GL_TIME_ELAPSED);
timer.canSubmitQuery = false;
#endif
}
GPUTimer::GPUTimer() : initialised(false)
GPUTimer::GPUTimer() : initialised(false), lastResult(0), canSubmitQuery(true)
{
}
@@ -960,7 +961,12 @@ unsigned GPUTimer::elapsedTimeus()
return 0;
GLuint result;
irr::video::COpenGLDriver *gl_driver = (irr::video::COpenGLDriver *)irr_driver->getDevice()->getVideoDriver();
gl_driver->extGlGetQueryObjectuiv(query, GL_QUERY_RESULT_AVAILABLE, &result);
if (result == GL_FALSE)
return lastResult;
gl_driver->extGlGetQueryObjectuiv(query, GL_QUERY_RESULT, &result);
lastResult = result / 1000;
canSubmitQuery = true;
return result / 1000;
}

View File

@@ -92,6 +92,8 @@ class GPUTimer;
class ScopedGPUTimer
{
protected:
GPUTimer &timer;
public:
ScopedGPUTimer(GPUTimer &);
~ScopedGPUTimer();
@@ -102,6 +104,8 @@ class GPUTimer
friend class ScopedGPUTimer;
GLuint query;
bool initialised;
unsigned lastResult;
bool canSubmitQuery;
public:
GPUTimer();
unsigned elapsedTimeus();