summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKonstantin Käfer <mail@kkaefer.com>2019-03-29 19:09:29 +0100
committerKonstantin Käfer <mail@kkaefer.com>2019-04-05 11:49:17 +0200
commitc02010ab6c8958f6897921c82cf47411de759269 (patch)
tree031d0b9f17d66c62232249b416fd327a2a519488
parent543b678982037595895a474f3a69348dc235e0fa (diff)
downloadqtlocation-mapboxgl-c02010ab6c8958f6897921c82cf47411de759269.tar.gz
[core] move debug groups to gfx::CommandEncoder
-rw-r--r--src/core-files.json3
-rw-r--r--src/mbgl/gfx/command_encoder.hpp10
-rw-r--r--src/mbgl/gfx/debug_group.hpp28
-rw-r--r--src/mbgl/gl/command_encoder.cpp31
-rw-r--r--src/mbgl/gl/command_encoder.hpp6
-rw-r--r--src/mbgl/gl/context.cpp3
-rw-r--r--src/mbgl/gl/debugging.cpp35
-rw-r--r--src/mbgl/gl/debugging.hpp37
-rw-r--r--src/mbgl/renderer/paint_parameters.cpp4
-rw-r--r--src/mbgl/renderer/paint_parameters.hpp3
-rw-r--r--src/mbgl/renderer/renderer_backend.cpp1
-rw-r--r--src/mbgl/renderer/renderer_impl.cpp21
12 files changed, 91 insertions, 91 deletions
diff --git a/src/core-files.json b/src/core-files.json
index 875f636dfe..f95d43e743 100644
--- a/src/core-files.json
+++ b/src/core-files.json
@@ -21,7 +21,6 @@
"src/mbgl/gl/binary_program.cpp",
"src/mbgl/gl/command_encoder.cpp",
"src/mbgl/gl/context.cpp",
- "src/mbgl/gl/debugging.cpp",
"src/mbgl/gl/debugging_extension.cpp",
"src/mbgl/gl/enum.cpp",
"src/mbgl/gl/object.cpp",
@@ -515,6 +514,7 @@
"mbgl/gfx/context.hpp": "src/mbgl/gfx/context.hpp",
"mbgl/gfx/context_impl.hpp": "src/mbgl/gfx/context_impl.hpp",
"mbgl/gfx/cull_face_mode.hpp": "src/mbgl/gfx/cull_face_mode.hpp",
+ "mbgl/gfx/debug_group.hpp": "src/mbgl/gfx/debug_group.hpp",
"mbgl/gfx/depth_mode.hpp": "src/mbgl/gfx/depth_mode.hpp",
"mbgl/gfx/draw_mode.hpp": "src/mbgl/gfx/draw_mode.hpp",
"mbgl/gfx/draw_scope.hpp": "src/mbgl/gfx/draw_scope.hpp",
@@ -532,7 +532,6 @@
"mbgl/gl/binary_program.hpp": "src/mbgl/gl/binary_program.hpp",
"mbgl/gl/command_encoder.hpp": "src/mbgl/gl/command_encoder.hpp",
"mbgl/gl/context.hpp": "src/mbgl/gl/context.hpp",
- "mbgl/gl/debugging.hpp": "src/mbgl/gl/debugging.hpp",
"mbgl/gl/debugging_extension.hpp": "src/mbgl/gl/debugging_extension.hpp",
"mbgl/gl/defines.hpp": "src/mbgl/gl/defines.hpp",
"mbgl/gl/draw_scope_resource.hpp": "src/mbgl/gl/draw_scope_resource.hpp",
diff --git a/src/mbgl/gfx/command_encoder.hpp b/src/mbgl/gfx/command_encoder.hpp
index 3f996bb701..f095c5b867 100644
--- a/src/mbgl/gfx/command_encoder.hpp
+++ b/src/mbgl/gfx/command_encoder.hpp
@@ -1,5 +1,7 @@
#pragma once
+#include <mbgl/gfx/debug_group.hpp>
+
namespace mbgl {
namespace gfx {
@@ -7,10 +9,18 @@ class CommandEncoder {
protected:
explicit CommandEncoder() = default;
+ friend class DebugGroup<CommandEncoder>;
+ virtual void pushDebugGroup(const char* name) = 0;
+ virtual void popDebugGroup() = 0;
+
public:
virtual ~CommandEncoder() = default;
CommandEncoder(const CommandEncoder&) = delete;
CommandEncoder& operator=(const CommandEncoder&) = delete;
+
+ DebugGroup<CommandEncoder> createDebugGroup(const char* name) {
+ return { *this, name };
+ }
};
} // namespace gfx
diff --git a/src/mbgl/gfx/debug_group.hpp b/src/mbgl/gfx/debug_group.hpp
new file mode 100644
index 0000000000..b7a25ad467
--- /dev/null
+++ b/src/mbgl/gfx/debug_group.hpp
@@ -0,0 +1,28 @@
+#pragma once
+
+namespace mbgl {
+namespace gfx {
+
+template <typename T>
+class DebugGroup {
+public:
+ DebugGroup(T& scope_, const char* name) : scope(&scope_) {
+ scope->pushDebugGroup(name);
+ }
+
+ DebugGroup(DebugGroup&& rhs) : scope(rhs.scope) {
+ rhs.scope = nullptr;
+ }
+
+ ~DebugGroup() {
+ if (scope) {
+ scope->popDebugGroup();
+ }
+ }
+
+private:
+ T* scope;
+};
+
+} // namespace gfx
+} // namespace mbgl
diff --git a/src/mbgl/gl/command_encoder.cpp b/src/mbgl/gl/command_encoder.cpp
index 82046202bc..e1bf5e1187 100644
--- a/src/mbgl/gl/command_encoder.cpp
+++ b/src/mbgl/gl/command_encoder.cpp
@@ -1,12 +1,43 @@
#include <mbgl/gl/command_encoder.hpp>
#include <mbgl/gl/context.hpp>
+#include <mbgl/gl/debugging_extension.hpp>
+#include <mbgl/platform/gl_functions.hpp>
+
+#include <cstring>
namespace mbgl {
namespace gl {
CommandEncoder::~CommandEncoder() {
+ const auto debugGroup(createDebugGroup("cleanup"));
context.performCleanup();
}
+void CommandEncoder::pushDebugGroup(const char* name) {
+ (void)name;
+#ifndef NDEBUG
+ if (auto debugging = context.getDebuggingExtension()) {
+ if (debugging->pushDebugGroup) {
+ MBGL_CHECK_ERROR(debugging->pushDebugGroup(GL_DEBUG_SOURCE_APPLICATION, 0,
+ platform::GLsizei(strlen(name)), name));
+ } else if (debugging->pushGroupMarkerEXT) {
+ MBGL_CHECK_ERROR(debugging->pushGroupMarkerEXT(platform::GLsizei(strlen(name) + 1), name));
+ }
+ }
+#endif
+}
+
+void CommandEncoder::popDebugGroup() {
+#ifndef NDEBUG
+ if (auto debugging = context.getDebuggingExtension()) {
+ if (debugging->popDebugGroup) {
+ MBGL_CHECK_ERROR(debugging->popDebugGroup());
+ } else if (debugging->popGroupMarkerEXT) {
+ MBGL_CHECK_ERROR(debugging->popGroupMarkerEXT());
+ }
+ }
+#endif
+}
+
} // namespace gl
} // namespace mbgl
diff --git a/src/mbgl/gl/command_encoder.hpp b/src/mbgl/gl/command_encoder.hpp
index 0cfe80f433..b4f7d2af13 100644
--- a/src/mbgl/gl/command_encoder.hpp
+++ b/src/mbgl/gl/command_encoder.hpp
@@ -7,7 +7,7 @@ namespace gl {
class Context;
-class CommandEncoder : public gfx::CommandEncoder {
+class CommandEncoder final : public gfx::CommandEncoder {
public:
explicit CommandEncoder(gl::Context& context_) : context(context_) {
}
@@ -15,6 +15,10 @@ public:
~CommandEncoder() override;
private:
+ void pushDebugGroup(const char* name) override;
+ void popDebugGroup() override;
+
+public:
gl::Context& context;
};
diff --git a/src/mbgl/gl/context.cpp b/src/mbgl/gl/context.cpp
index 97c1cd24d7..bc93042e25 100644
--- a/src/mbgl/gl/context.cpp
+++ b/src/mbgl/gl/context.cpp
@@ -7,7 +7,6 @@
#include <mbgl/gl/draw_scope_resource.hpp>
#include <mbgl/gl/texture.hpp>
#include <mbgl/gl/command_encoder.hpp>
-#include <mbgl/gl/debugging.hpp>
#include <mbgl/gl/debugging_extension.hpp>
#include <mbgl/gl/vertex_array_extension.hpp>
#include <mbgl/gl/program_binary_extension.hpp>
@@ -726,8 +725,6 @@ void Context::performCleanup() {
// TODO: Find a better way to unbind VAOs after we're done with them without introducing
// unnecessary bind(0)/bind(N) sequences.
{
- MBGL_DEBUG_GROUP(*this, "cleanup");
-
activeTextureUnit = 1;
texture[1] = 0;
activeTextureUnit = 0;
diff --git a/src/mbgl/gl/debugging.cpp b/src/mbgl/gl/debugging.cpp
deleted file mode 100644
index 54cee5fc09..0000000000
--- a/src/mbgl/gl/debugging.cpp
+++ /dev/null
@@ -1,35 +0,0 @@
-#include <mbgl/gl/debugging.hpp>
-#include <mbgl/gl/context.hpp>
-#include <mbgl/gl/debugging_extension.hpp>
-
-namespace mbgl {
-namespace gl {
-
-using namespace platform;
-
-#ifndef NDEBUG
-
-DebugGroup::DebugGroup(const gfx::Context& context_, const std::string& name) : context(context_) {
- if (auto debugging = reinterpret_cast<const gl::Context&>(context).getDebuggingExtension()) {
- if (debugging->pushDebugGroup) {
- MBGL_CHECK_ERROR(debugging->pushDebugGroup(GL_DEBUG_SOURCE_APPLICATION, 0, GLsizei(name.size()), name.c_str()));
- } else if (debugging->pushGroupMarkerEXT) {
- MBGL_CHECK_ERROR(debugging->pushGroupMarkerEXT(GLsizei(name.size() + 1), name.c_str()));
- }
- }
-}
-
-DebugGroup::~DebugGroup() {
- if (auto debugging = reinterpret_cast<const gl::Context&>(context).getDebuggingExtension()) {
- if (debugging->popDebugGroup) {
- MBGL_CHECK_ERROR(debugging->popDebugGroup());
- } else if (debugging->popGroupMarkerEXT) {
- MBGL_CHECK_ERROR(debugging->popGroupMarkerEXT());
- }
- }
-}
-
-#endif
-
-} // namespace gl
-} // namespace mbgl
diff --git a/src/mbgl/gl/debugging.hpp b/src/mbgl/gl/debugging.hpp
deleted file mode 100644
index d85eb631be..0000000000
--- a/src/mbgl/gl/debugging.hpp
+++ /dev/null
@@ -1,37 +0,0 @@
-#pragma once
-
-#include <mbgl/util/noncopyable.hpp>
-
-#include <string>
-
-namespace mbgl {
-
-namespace gfx {
-class Context;
-} // namespace gfx
-
-namespace gl {
-
-#ifndef NDEBUG
-
-class DebugGroup : private util::noncopyable {
-public:
- DebugGroup(const gfx::Context&, const std::string&);
- ~DebugGroup();
-
-private:
- const gfx::Context& context;
-};
-
-#define __MBGL_DEBUG_GROUP_NAME2(counter) __MBGL_DEBUG_GROUP_##counter
-#define __MBGL_DEBUG_GROUP_NAME(counter) __MBGL_DEBUG_GROUP_NAME2(counter)
-#define MBGL_DEBUG_GROUP(context, name) const ::mbgl::gl::DebugGroup __MBGL_DEBUG_GROUP_NAME(__LINE__)(context, name);
-
-#else
-
-#define MBGL_DEBUG_GROUP(context, name)
-
-#endif
-
-} // namespace gl
-} // namespace mbgl
diff --git a/src/mbgl/renderer/paint_parameters.cpp b/src/mbgl/renderer/paint_parameters.cpp
index 55dbf70472..3458c47da0 100644
--- a/src/mbgl/renderer/paint_parameters.cpp
+++ b/src/mbgl/renderer/paint_parameters.cpp
@@ -1,6 +1,7 @@
#include <mbgl/renderer/paint_parameters.hpp>
#include <mbgl/renderer/update_parameters.hpp>
#include <mbgl/renderer/render_static_data.hpp>
+#include <mbgl/gfx/command_encoder.hpp>
#include <mbgl/map/transform_state.hpp>
namespace mbgl {
@@ -17,6 +18,7 @@ PaintParameters::PaintParameters(gfx::Context& context_,
Placement::VariableOffsets variableOffsets_)
: context(context_),
backend(backend_),
+ encoder(context.createCommandEncoder()),
state(updateParameters.transformState),
evaluatedLight(evaluatedLight_),
staticData(staticData_),
@@ -53,6 +55,8 @@ PaintParameters::PaintParameters(gfx::Context& context_,
}
}
+PaintParameters::~PaintParameters() = default;
+
mat4 PaintParameters::matrixForTile(const UnwrappedTileID& tileID, bool aligned) const {
mat4 matrix;
state.matrixFor(matrix, tileID);
diff --git a/src/mbgl/renderer/paint_parameters.hpp b/src/mbgl/renderer/paint_parameters.hpp
index 537158a68e..e553028f90 100644
--- a/src/mbgl/renderer/paint_parameters.hpp
+++ b/src/mbgl/renderer/paint_parameters.hpp
@@ -26,6 +26,7 @@ class UnwrappedTileID;
namespace gfx {
class Context;
+class CommandEncoder;
} // namespace gfx
class PaintParameters {
@@ -40,9 +41,11 @@ public:
ImageManager&,
LineAtlas&,
Placement::VariableOffsets);
+ ~PaintParameters();
gfx::Context& context;
RendererBackend& backend;
+ const std::unique_ptr<gfx::CommandEncoder> encoder;
const TransformState& state;
const EvaluatedLight& evaluatedLight;
diff --git a/src/mbgl/renderer/renderer_backend.cpp b/src/mbgl/renderer/renderer_backend.cpp
index 22d263313c..d44386db55 100644
--- a/src/mbgl/renderer/renderer_backend.cpp
+++ b/src/mbgl/renderer/renderer_backend.cpp
@@ -2,7 +2,6 @@
#include <mbgl/renderer/backend_scope.hpp>
#include <mbgl/gl/context.hpp>
#include <mbgl/gl/extension.hpp>
-#include <mbgl/gl/debugging.hpp>
#include <cassert>
diff --git a/src/mbgl/renderer/renderer_impl.cpp b/src/mbgl/renderer/renderer_impl.cpp
index c58f4a091d..da051d61d9 100644
--- a/src/mbgl/renderer/renderer_impl.cpp
+++ b/src/mbgl/renderer/renderer_impl.cpp
@@ -17,7 +17,6 @@
#include <mbgl/renderer/backend_scope.hpp>
#include <mbgl/renderer/image_manager.hpp>
#include <mbgl/gl/context.hpp>
-#include <mbgl/gl/debugging.hpp>
#include <mbgl/geometry/line_atlas.hpp>
#include <mbgl/style/source_impl.hpp>
#include <mbgl/style/transition_options.hpp>
@@ -365,7 +364,6 @@ void Renderer::Impl::render(const UpdateParameters& updateParameters) {
}
}
- const auto encoder = parameters.context.createCommandEncoder();
// TODO: remove cast
gl::Context& glContext = static_cast<gl::Context&>(parameters.context);
@@ -377,7 +375,7 @@ void Renderer::Impl::render(const UpdateParameters& updateParameters) {
// - UPLOAD PASS -------------------------------------------------------------------------------
// Uploads all required buffers and images before we do any actual rendering.
{
- MBGL_DEBUG_GROUP(parameters.context, "upload");
+ const auto debugGroup(parameters.encoder->createDebugGroup("upload"));
parameters.imageManager.upload(parameters.context);
parameters.lineAtlas.upload(parameters.context);
@@ -396,7 +394,7 @@ void Renderer::Impl::render(const UpdateParameters& updateParameters) {
if (parameters.staticData.has3D) {
parameters.staticData.backendSize = parameters.backend.getFramebufferSize();
- MBGL_DEBUG_GROUP(parameters.context, "3d");
+ const auto debugGroup(parameters.encoder->createDebugGroup("3d"));
parameters.pass = RenderPass::Pass3D;
if (!parameters.staticData.depthRenderbuffer ||
@@ -410,7 +408,7 @@ void Renderer::Impl::render(const UpdateParameters& updateParameters) {
for (auto it = renderItems.begin(); it != renderItems.end(); ++it, --i) {
parameters.currentLayer = i;
if (it->layer.hasRenderPass(parameters.pass)) {
- MBGL_DEBUG_GROUP(parameters.context, it->layer.getID());
+ const auto layerDebugGroup(parameters.encoder->createDebugGroup(it->layer.getID().c_str()));
it->layer.render(parameters, it->source);
}
}
@@ -422,7 +420,6 @@ void Renderer::Impl::render(const UpdateParameters& updateParameters) {
{
using namespace gl::value;
- MBGL_DEBUG_GROUP(parameters.context, "clear");
parameters.backend.bind();
if (parameters.debugOptions & MapDebugOptions::Overdraw) {
glContext.clear(Color::black(), ClearDepth::Default, ClearStencil::Default);
@@ -436,7 +433,7 @@ void Renderer::Impl::render(const UpdateParameters& updateParameters) {
// - CLIPPING MASKS ----------------------------------------------------------------------------
// Draws the clipping masks to the stencil buffer.
{
- MBGL_DEBUG_GROUP(parameters.context, "clipping masks");
+ const auto debugGroup(parameters.encoder->createDebugGroup("clipping masks"));
static const Properties<>::PossiblyEvaluated properties {};
static const ClippingMaskProgram::Binders paintAttributeData(properties, 0);
@@ -518,13 +515,13 @@ void Renderer::Impl::render(const UpdateParameters& updateParameters) {
// Render everything top-to-bottom by using reverse iterators. Render opaque objects first.
{
parameters.pass = RenderPass::Opaque;
- MBGL_DEBUG_GROUP(parameters.context, "opaque");
+ const auto debugGroup(parameters.encoder->createDebugGroup("opaque"));
uint32_t i = 0;
for (auto it = renderItems.rbegin(); it != renderItems.rend(); ++it, ++i) {
parameters.currentLayer = i;
if (it->layer.hasRenderPass(parameters.pass)) {
- MBGL_DEBUG_GROUP(parameters.context, it->layer.getID());
+ const auto layerDebugGroup(parameters.encoder->createDebugGroup(it->layer.getID().c_str()));
it->layer.render(parameters, it->source);
}
}
@@ -534,13 +531,13 @@ void Renderer::Impl::render(const UpdateParameters& updateParameters) {
// Make a second pass, rendering translucent objects. This time, we render bottom-to-top.
{
parameters.pass = RenderPass::Translucent;
- MBGL_DEBUG_GROUP(parameters.context, "translucent");
+ const auto debugGroup(parameters.encoder->createDebugGroup("translucent"));
uint32_t i = static_cast<uint32_t>(renderItems.size()) - 1;
for (auto it = renderItems.begin(); it != renderItems.end(); ++it, --i) {
parameters.currentLayer = i;
if (it->layer.hasRenderPass(parameters.pass)) {
- MBGL_DEBUG_GROUP(parameters.context, it->layer.getID());
+ const auto layerDebugGroup(parameters.encoder->createDebugGroup(it->layer.getID().c_str()));
it->layer.render(parameters, it->source);
}
}
@@ -549,7 +546,7 @@ void Renderer::Impl::render(const UpdateParameters& updateParameters) {
// - DEBUG PASS --------------------------------------------------------------------------------
// Renders debug overlays.
{
- MBGL_DEBUG_GROUP(parameters.context, "debug");
+ const auto debugGroup(parameters.encoder->createDebugGroup("debug"));
// Finalize the rendering, e.g. by calling debug render calls per tile.
// This guarantees that we have at least one function per tile called.