mirror of
https://thingvellir.net/git/overte
synced 2025-03-27 23:52:03 +01:00
Clening up the gpu::Timer behavior, now need a way to show it
This commit is contained in:
parent
86e9c5ac9b
commit
bc579f2605
5 changed files with 37 additions and 30 deletions
|
@ -98,9 +98,12 @@ void GLBackend::do_getQuery(Batch& batch, size_t paramOffset) {
|
|||
glGetQueryObjectui64vEXT(glquery->_qo, GL_QUERY_RESULT, &glquery->_result);
|
||||
#endif
|
||||
#else
|
||||
glGetQueryObjectui64v(glquery->_qo, GL_QUERY_RESULT, &glquery->_result);
|
||||
glGetQueryObjectui64v(glquery->_qo, GL_QUERY_RESULT_AVAILABLE, &glquery->_result);
|
||||
if (glquery->_result == GL_TRUE) {
|
||||
glGetQueryObjectui64v(glquery->_qo, GL_QUERY_RESULT, &glquery->_result);
|
||||
query->triggerReturnHandler(glquery->_result);
|
||||
}
|
||||
#endif
|
||||
query->triggerReturnHandler(glquery->_result);
|
||||
(void)CHECK_GL_ERROR();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -37,32 +37,31 @@ void Query::triggerReturnHandler(uint64_t queryResult) {
|
|||
|
||||
|
||||
Timer::Timer() {
|
||||
_timerQueries.resize(6, std::make_shared<gpu::Query>([&] (const Query& query) {
|
||||
auto elapsedTime = query.getElapsedTime();
|
||||
_movingAverage.addSample(elapsedTime);
|
||||
|
||||
static int frameNum = 0;
|
||||
frameNum++;
|
||||
frameNum %= 10;
|
||||
if (frameNum == 0) {
|
||||
auto value = _movingAverage.average;
|
||||
qCDebug(gpulogging) << "AO on gpu = " << value;
|
||||
}
|
||||
}));
|
||||
|
||||
for (int i = 0; i < QUERY_QUEUE_SIZE; i++) {
|
||||
_timerQueries.push_back(std::make_shared<gpu::Query>([&, i] (const Query& query) {
|
||||
_tailIndex ++;
|
||||
auto elapsedTime = query.getElapsedTime();
|
||||
_movingAverage.addSample(elapsedTime);
|
||||
}));
|
||||
}
|
||||
}
|
||||
|
||||
void Timer::begin(gpu::Batch& batch) {
|
||||
batch.beginQuery(_timerQueries[_currentTimerQueryIndex]);
|
||||
_headIndex++;
|
||||
batch.beginQuery(_timerQueries[rangeIndex(_headIndex)]);
|
||||
}
|
||||
void Timer::end(gpu::Batch& batch) {
|
||||
batch.endQuery(_timerQueries[_currentTimerQueryIndex]);
|
||||
_currentTimerQueryIndex = (_currentTimerQueryIndex + 1) % _timerQueries.size();
|
||||
|
||||
auto returnQuery = _timerQueries[_currentTimerQueryIndex];
|
||||
batch.getQuery(returnQuery);
|
||||
if (_headIndex < 0) {
|
||||
return;
|
||||
}
|
||||
batch.endQuery(_timerQueries[rangeIndex(_headIndex)]);
|
||||
|
||||
if (_tailIndex < 0) {
|
||||
_tailIndex = _headIndex;
|
||||
}
|
||||
|
||||
// Pull the previous tail query hopping to see it return
|
||||
if (_tailIndex != _headIndex) {
|
||||
batch.getQuery(_timerQueries[rangeIndex(_tailIndex)]);
|
||||
}
|
||||
}
|
||||
|
||||
void Timer::onQueryReturned(const Query& query) {
|
||||
|
||||
}
|
|
@ -56,12 +56,15 @@ namespace gpu {
|
|||
double getAverage() const;
|
||||
|
||||
protected:
|
||||
|
||||
void onQueryReturned(const Query& query);
|
||||
|
||||
static const int QUERY_QUEUE_SIZE = 4;
|
||||
|
||||
gpu::Queries _timerQueries;
|
||||
int _currentTimerQueryIndex = 0;
|
||||
MovingAverage<double, 5> _movingAverage;
|
||||
int _headIndex = -1;
|
||||
int _tailIndex = -1;
|
||||
MovingAverage<double, QUERY_QUEUE_SIZE * 2> _movingAverage;
|
||||
|
||||
int rangeIndex(int index) const { return (index % QUERY_QUEUE_SIZE); }
|
||||
};
|
||||
};
|
||||
|
||||
|
|
|
@ -56,6 +56,8 @@ public:
|
|||
float getBlurDeviation() const { return _parametersBuffer.get<Parameters>()._blurInfo.z; }
|
||||
|
||||
|
||||
double getTimerAverage() const { return _gpuTimer.getAverage(); }
|
||||
|
||||
using JobModel = render::Task::Job::Model<AmbientOcclusionEffect>;
|
||||
|
||||
private:
|
||||
|
|
|
@ -50,7 +50,7 @@ public:
|
|||
void setGlobalAtmosphere(const model::AtmospherePointer& atmosphere) { _atmosphere = atmosphere; }
|
||||
|
||||
void setGlobalSkybox(const model::SkyboxPointer& skybox);
|
||||
|
||||
|
||||
private:
|
||||
DeferredLightingEffect() = default;
|
||||
|
||||
|
|
Loading…
Reference in a new issue