From c02010ab6c8958f6897921c82cf47411de759269 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Konstantin=20K=C3=A4fer?= Date: Fri, 29 Mar 2019 19:09:29 +0100 Subject: [core] move debug groups to gfx::CommandEncoder --- src/core-files.json | 3 +-- src/mbgl/gfx/command_encoder.hpp | 10 +++++++++ src/mbgl/gfx/debug_group.hpp | 28 +++++++++++++++++++++++++ src/mbgl/gl/command_encoder.cpp | 31 ++++++++++++++++++++++++++++ src/mbgl/gl/command_encoder.hpp | 6 +++++- src/mbgl/gl/context.cpp | 3 --- src/mbgl/gl/debugging.cpp | 35 -------------------------------- src/mbgl/gl/debugging.hpp | 37 ---------------------------------- src/mbgl/renderer/paint_parameters.cpp | 4 ++++ src/mbgl/renderer/paint_parameters.hpp | 3 +++ src/mbgl/renderer/renderer_backend.cpp | 1 - src/mbgl/renderer/renderer_impl.cpp | 21 +++++++++---------- 12 files changed, 91 insertions(+), 91 deletions(-) create mode 100644 src/mbgl/gfx/debug_group.hpp delete mode 100644 src/mbgl/gl/debugging.cpp delete mode 100644 src/mbgl/gl/debugging.hpp 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 + namespace mbgl { namespace gfx { @@ -7,10 +9,18 @@ class CommandEncoder { protected: explicit CommandEncoder() = default; + friend class DebugGroup; + 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 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 +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 #include +#include +#include + +#include 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 #include #include -#include #include #include #include @@ -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 -#include -#include - -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(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(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 - -#include - -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 #include #include +#include #include 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 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 #include #include -#include #include 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 #include #include -#include #include #include #include @@ -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(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(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. -- cgit v1.2.1