Browse Source

DebugTools: avoid excessive repetition in FrameProfilerGL internals.

StaticArray is a thing, use it! This also makes it easier to fiddle with
the delay.
pull/578/head
Vladimír Vondruš 4 years ago
parent
commit
21fbe38c52
  1. 19
      src/Magnum/DebugTools/FrameProfiler.cpp

19
src/Magnum/DebugTools/FrameProfiler.cpp

@ -29,6 +29,7 @@
#include <sstream>
#include <Corrade/Containers/EnumSet.hpp>
#include <Corrade/Containers/GrowableArray.h>
#include <Corrade/Containers/StaticArray.h>
#include <Corrade/Containers/String.h>
#include <Corrade/Utility/DebugStl.h>
#include <Corrade/Utility/Format.h>
@ -443,12 +444,14 @@ struct FrameProfilerGL::State {
#endif
UnsignedLong frameTimeStartFrame[2];
UnsignedLong cpuDurationStartFrame;
GL::TimeQuery timeQueries[3]{GL::TimeQuery{NoCreate}, GL::TimeQuery{NoCreate}, GL::TimeQuery{NoCreate}};
enum: std::size_t { QueryCount = 3 };
Containers::StaticArray<QueryCount, GL::TimeQuery> timeQueries{DirectInit, NoCreate};
#ifndef MAGNUM_TARGET_GLES
GL::PipelineStatisticsQuery verticesSubmittedQueries[3]{GL::PipelineStatisticsQuery{NoCreate}, GL::PipelineStatisticsQuery{NoCreate}, GL::PipelineStatisticsQuery{NoCreate}};
GL::PipelineStatisticsQuery vertexShaderInvocationsQueries[3]{GL::PipelineStatisticsQuery{NoCreate}, GL::PipelineStatisticsQuery{NoCreate}, GL::PipelineStatisticsQuery{NoCreate}};
GL::PipelineStatisticsQuery clippingInputPrimitivesQueries[3]{GL::PipelineStatisticsQuery{NoCreate}, GL::PipelineStatisticsQuery{NoCreate}, GL::PipelineStatisticsQuery{NoCreate}};
GL::PipelineStatisticsQuery clippingOutputPrimitivesQueries[3]{GL::PipelineStatisticsQuery{NoCreate}, GL::PipelineStatisticsQuery{NoCreate}, GL::PipelineStatisticsQuery{NoCreate}};
Containers::StaticArray<QueryCount, GL::PipelineStatisticsQuery> verticesSubmittedQueries{DirectInit, NoCreate};
Containers::StaticArray<QueryCount, GL::PipelineStatisticsQuery> vertexShaderInvocationsQueries{DirectInit, NoCreate};
Containers::StaticArray<QueryCount, GL::PipelineStatisticsQuery> clippingInputPrimitivesQueries{DirectInit, NoCreate};
Containers::StaticArray<QueryCount, GL::PipelineStatisticsQuery> clippingOutputPrimitivesQueries{DirectInit, NoCreate};
#endif
};
@ -502,7 +505,7 @@ void FrameProfilerGL::setup(const Values values, const UnsignedInt maxFrameCount
q = GL::TimeQuery{GL::TimeQuery::Target::TimeElapsed};
arrayAppend(measurements, InPlaceInit,
"GPU duration", Units::Nanoseconds,
UnsignedInt(Containers::arraySize(_state->timeQueries)),
UnsignedInt(_state->timeQueries.size()),
[](void* state, UnsignedInt current) {
static_cast<State*>(state)->timeQueries[current].begin();
},
@ -522,7 +525,7 @@ void FrameProfilerGL::setup(const Values values, const UnsignedInt maxFrameCount
q = GL::PipelineStatisticsQuery{GL::PipelineStatisticsQuery::Target::VertexShaderInvocations};
arrayAppend(measurements, InPlaceInit,
"Vertex fetch ratio", Units::RatioThousandths,
UnsignedInt(Containers::arraySize(_state->verticesSubmittedQueries)),
UnsignedInt(_state->verticesSubmittedQueries.size()),
[](void* state, UnsignedInt current) {
static_cast<State*>(state)->verticesSubmittedQueries[current].begin();
static_cast<State*>(state)->vertexShaderInvocationsQueries[current].begin();
@ -547,7 +550,7 @@ void FrameProfilerGL::setup(const Values values, const UnsignedInt maxFrameCount
q = GL::PipelineStatisticsQuery{GL::PipelineStatisticsQuery::Target::ClippingOutputPrimitives};
arrayAppend(measurements, InPlaceInit,
"Primitives clipped", Units::PercentageThousandths,
UnsignedInt(Containers::arraySize(_state->clippingInputPrimitivesQueries)),
UnsignedInt(_state->clippingInputPrimitivesQueries.size()),
[](void* state, UnsignedInt current) {
static_cast<State*>(state)->clippingInputPrimitivesQueries[current].begin();
static_cast<State*>(state)->clippingOutputPrimitivesQueries[current].begin();

Loading…
Cancel
Save