From a7e3a2272ad113c6607651faf435ee3af13f6c5b Mon Sep 17 00:00:00 2001 From: Tobias Frisch <tfrisch@uni-koblenz.de> Date: Mon, 2 Aug 2021 14:19:28 +0200 Subject: [PATCH] [#104] Added basic recording for debug labels Signed-off-by: Tobias Frisch <tfrisch@uni-koblenz.de> --- include/vkcv/Core.hpp | 6 +++ modules/scene/src/vkcv/scene/Scene.cpp | 6 +++ .../src/vkcv/upscaling/BilinearUpscaling.cpp | 6 +++ .../src/vkcv/upscaling/FSRUpscaling.cpp | 6 +++ projects/mesh_shader/.gitignore | 2 +- src/vkcv/Core.cpp | 43 +++++++++++++++++++ src/vkcv/DrawcallRecording.cpp | 2 - 7 files changed, 68 insertions(+), 3 deletions(-) diff --git a/include/vkcv/Core.hpp b/include/vkcv/Core.hpp index 5677dbf6..24fa92ce 100644 --- a/include/vkcv/Core.hpp +++ b/include/vkcv/Core.hpp @@ -270,6 +270,12 @@ namespace vkcv const uint32_t dispatchCount[3], const std::vector<DescriptorSetUsage> &descriptorSetUsages, const PushConstants& pushConstants); + + void recordBeginDebugLabel(const CommandStreamHandle &cmdStream, + const std::string& label, + const std::array<float, 4>& color); + + void recordEndDebugLabel(const CommandStreamHandle &cmdStream); /** * @brief end recording and present image diff --git a/modules/scene/src/vkcv/scene/Scene.cpp b/modules/scene/src/vkcv/scene/Scene.cpp index d6fa2a40..c0065af5 100644 --- a/modules/scene/src/vkcv/scene/Scene.cpp +++ b/modules/scene/src/vkcv/scene/Scene.cpp @@ -116,6 +116,10 @@ namespace vkcv::scene { size_t pushConstantsSizePerDrawcall, const RecordMeshDrawcallFunction &record, const std::vector<ImageHandle> &renderTargets) { + m_core->recordBeginDebugLabel(cmdStream, "vkcv::scene::Scene", { + 0.0f, 1.0f, 0.0f, 1.0f + }); + PushConstants pushConstants (pushConstantsSizePerDrawcall); std::vector<DrawcallInfo> drawcalls; size_t count = 0; @@ -137,6 +141,8 @@ namespace vkcv::scene { drawcalls, renderTargets ); + + m_core->recordEndDebugLabel(cmdStream); } Scene Scene::create(Core& core) { diff --git a/modules/upscaling/src/vkcv/upscaling/BilinearUpscaling.cpp b/modules/upscaling/src/vkcv/upscaling/BilinearUpscaling.cpp index 9c36acf5..54df1829 100644 --- a/modules/upscaling/src/vkcv/upscaling/BilinearUpscaling.cpp +++ b/modules/upscaling/src/vkcv/upscaling/BilinearUpscaling.cpp @@ -7,7 +7,13 @@ namespace vkcv::upscaling { void BilinearUpscaling::recordUpscaling(const CommandStreamHandle &cmdStream, const ImageHandle &input, const ImageHandle &output) { + m_core.recordBeginDebugLabel(cmdStream, "vkcv::upscaling::BilinearUpscaling", { + 0.0f, 0.0f, 1.0f, 1.0f + }); + m_core.recordBlitImage(cmdStream, input, output, SamplerFilterType::LINEAR); + + m_core.recordEndDebugLabel(cmdStream); } } diff --git a/modules/upscaling/src/vkcv/upscaling/FSRUpscaling.cpp b/modules/upscaling/src/vkcv/upscaling/FSRUpscaling.cpp index 460a6d0b..ff8f7dab 100644 --- a/modules/upscaling/src/vkcv/upscaling/FSRUpscaling.cpp +++ b/modules/upscaling/src/vkcv/upscaling/FSRUpscaling.cpp @@ -245,6 +245,10 @@ namespace vkcv::upscaling { void FSRUpscaling::recordUpscaling(const CommandStreamHandle& cmdStream, const ImageHandle& input, const ImageHandle& output) { + m_core.recordBeginDebugLabel(cmdStream, "vkcv::upscaling::FSRUpscaling", { + 1.0f, 0.0f, 0.0f, 1.0f + }); + const uint32_t inputWidth = m_core.getImageWidth(input); const uint32_t inputHeight = m_core.getImageHeight(input); @@ -361,6 +365,8 @@ namespace vkcv::upscaling { PushConstants(0) ); } + + m_core.recordEndDebugLabel(cmdStream); } bool FSRUpscaling::isHdrEnabled() const { diff --git a/projects/mesh_shader/.gitignore b/projects/mesh_shader/.gitignore index 7e24fd7b..fd009a62 100644 --- a/projects/mesh_shader/.gitignore +++ b/projects/mesh_shader/.gitignore @@ -1 +1 @@ -first_triangle \ No newline at end of file +mesh_shader \ No newline at end of file diff --git a/src/vkcv/Core.cpp b/src/vkcv/Core.cpp index e8e172dd..819b99bd 100644 --- a/src/vkcv/Core.cpp +++ b/src/vkcv/Core.cpp @@ -506,7 +506,50 @@ namespace vkcv recordCommandsToStream(cmdStreamHandle, submitFunction, nullptr); } + + void Core::recordBeginDebugLabel(const CommandStreamHandle &cmdStream, + const std::string& label, + const std::array<float, 4>& color) { +#ifndef NDEBUG + static PFN_vkCmdBeginDebugUtilsLabelEXT beginDebugLabel = reinterpret_cast<PFN_vkCmdBeginDebugUtilsLabelEXT>( + m_Context.getDevice().getProcAddr("vkCmdBeginDebugUtilsLabelEXT") + ); + + if (!beginDebugLabel) { + return; + } + + auto submitFunction = [&](const vk::CommandBuffer& cmdBuffer) { + const vk::DebugUtilsLabelEXT debug ( + label.c_str(), + color + ); + + beginDebugLabel(cmdBuffer, &(static_cast<const VkDebugUtilsLabelEXT&>(debug))); + }; + + recordCommandsToStream(cmdStream, submitFunction, nullptr); +#endif + } + + void Core::recordEndDebugLabel(const CommandStreamHandle &cmdStream) { +#ifndef NDEBUG + static PFN_vkCmdEndDebugUtilsLabelEXT endDebugLabel = reinterpret_cast<PFN_vkCmdEndDebugUtilsLabelEXT>( + m_Context.getDevice().getProcAddr("vkCmdEndDebugUtilsLabelEXT") + ); + + if (!endDebugLabel) { + return; + } + + auto submitFunction = [&](const vk::CommandBuffer& cmdBuffer) { + endDebugLabel(cmdBuffer); + }; + recordCommandsToStream(cmdStream, submitFunction, nullptr); +#endif + } + void Core::endFrame() { if (m_currentSwapchainImageIndex == std::numeric_limits<uint32_t>::max()) { return; diff --git a/src/vkcv/DrawcallRecording.cpp b/src/vkcv/DrawcallRecording.cpp index d89ace38..ca8b248a 100644 --- a/src/vkcv/DrawcallRecording.cpp +++ b/src/vkcv/DrawcallRecording.cpp @@ -52,8 +52,6 @@ namespace vkcv { } } - - struct MeshShaderFunctions { PFN_vkCmdDrawMeshTasksNV cmdDrawMeshTasks = nullptr; -- GitLab