From 5a801e642cb8d3ee37bd8ed39d3664c5f110695a Mon Sep 17 00:00:00 2001 From: WiggleWizard <1405402+WiggleWizard@users.noreply.github.com> Date: Mon, 2 Sep 2024 20:37:47 +0100 Subject: [PATCH] Tracy MVP integration --- .gitmodules | 3 ++ Editor/src/EditorApplication.cpp | 2 +- Editor/src/Misc/ThumbnailManager.cpp | 6 +++ Editor/src/Windows/EditorInterface.cpp | 5 +++ Editor/src/Windows/FileSystemUI.cpp | 5 +++ Nuake/Engine.cpp | 16 +++++-- Nuake/dependencies/tracy | 1 + Nuake/dependencies/tracy_p5.lua | 30 +++++++++++++ Nuake/src/Application/Application.cpp | 10 ++++- Nuake/src/Core/Input.cpp | 3 ++ Nuake/src/Rendering/Buffers/Framebuffer.cpp | 3 ++ Nuake/src/Rendering/PostFX/SSAO.cpp | 7 +++ Nuake/src/Rendering/PostFX/Volumetric.cpp | 3 ++ Nuake/src/Rendering/Renderer.cpp | 5 +++ Nuake/src/Rendering/SceneRenderer.cpp | 11 +++++ Nuake/src/Rendering/Shaders/ShaderManager.cpp | 3 ++ Nuake/src/Scene/Scene.cpp | 6 +++ Nuake/src/Threading/Job.cpp | 2 + Nuake/src/Threading/JobSystem.cpp | 26 +++++++++++ Nuake/src/Threading/JobSystem.h | 16 +------ Nuake/src/Window.cpp | 22 ++++++++-- Runtime/Runtime.cpp | 3 ++ premake5.lua | 44 ++++++++++++++++--- 23 files changed, 202 insertions(+), 30 deletions(-) create mode 160000 Nuake/dependencies/tracy create mode 100644 Nuake/dependencies/tracy_p5.lua create mode 100644 Nuake/src/Threading/JobSystem.cpp diff --git a/.gitmodules b/.gitmodules index 5f9acda2..5e72028c 100644 --- a/.gitmodules +++ b/.gitmodules @@ -22,3 +22,6 @@ [submodule "Nuake/dependencies/recastnavigation"] path = Nuake/dependencies/recastnavigation url = https://github.com/antopilo/recastnavigation.git +[submodule "Nuake/dependencies/tracy"] + path = Nuake/dependencies/tracy + url = https://github.com/wolfpld/tracy.git diff --git a/Editor/src/EditorApplication.cpp b/Editor/src/EditorApplication.cpp index f4db1cf5..eb8252f1 100644 --- a/Editor/src/EditorApplication.cpp +++ b/Editor/src/EditorApplication.cpp @@ -11,7 +11,7 @@ void EditorApplication::OnInit() { using namespace Nuake; - + Engine::Init(); m_Window = Engine::GetCurrentWindow(); m_Window->SetSize({ m_Specification.WindowWidth, m_Specification.WindowHeight }); diff --git a/Editor/src/Misc/ThumbnailManager.cpp b/Editor/src/Misc/ThumbnailManager.cpp index 151af8d1..46f2eb92 100644 --- a/Editor/src/Misc/ThumbnailManager.cpp +++ b/Editor/src/Misc/ThumbnailManager.cpp @@ -5,6 +5,7 @@ #include #include #include +#include ThumbnailManager::ThumbnailManager() @@ -39,6 +40,8 @@ bool ThumbnailManager::IsThumbnailLoaded(const std::string& path) const Ref ThumbnailManager::GetThumbnail(const std::string& path) { + ZoneScoped; + if (IsThumbnailLoaded(path)) { return m_Thumbnails[path]; @@ -71,6 +74,9 @@ void ThumbnailManager::MarkThumbnailAsDirty(const std::string & path) Ref ThumbnailManager::GenerateThumbnail(const std::string& path, Ref texture) { + ZoneScopedN("GenerateThumbnail"); + ZoneText(path.c_str(), path.size()); + using namespace Nuake; const Matrix4 ortho = glm::orthoLH(-0.6f, 0.6f, -0.6f, 0.6f, -100.0f, 100.0f); diff --git a/Editor/src/Windows/EditorInterface.cpp b/Editor/src/Windows/EditorInterface.cpp index 13cd9d6c..19268b9d 100644 --- a/Editor/src/Windows/EditorInterface.cpp +++ b/Editor/src/Windows/EditorInterface.cpp @@ -56,6 +56,7 @@ #include #include "../ScriptingContext/ScriptingContext.h" #include +#include namespace Nuake { @@ -2900,6 +2901,8 @@ namespace Nuake { int frameCount = 2; void EditorInterface::Draw() { + ZoneScoped; + Init(); if (isCreatingNewProject && !_NewProjectWindow->HasCreatedProject()) @@ -3014,6 +3017,8 @@ namespace Nuake { void EditorInterface::Update(float ts) { + ZoneScoped; + if (!Engine::GetCurrentScene() || Engine::IsPlayMode()) { return; diff --git a/Editor/src/Windows/FileSystemUI.cpp b/Editor/src/Windows/FileSystemUI.cpp index 2492a80f..445cc8c5 100644 --- a/Editor/src/Windows/FileSystemUI.cpp +++ b/Editor/src/Windows/FileSystemUI.cpp @@ -15,6 +15,7 @@ #include "src/Scene/Systems/WadConverter.h" #include "../Misc/ThumbnailManager.h" +#include namespace Nuake { @@ -64,6 +65,8 @@ namespace Nuake void FileSystemUI::DrawDirectory(Ref directory, uint32_t drawId) { + ZoneScoped; + ImGui::PushFont(FontManager::GetFont(Icons)); ImGui::PushStyleVar(ImGuiStyleVar_FrameRounding, 4.0f); const char* icon = ICON_FA_FOLDER; @@ -226,6 +229,8 @@ namespace Nuake void FileSystemUI::DrawFile(Ref file, uint32_t drawId) { + ZoneScoped; + ImGui::PushFont(EditorInterface::bigIconFont); ImGui::PushStyleVar(ImGuiStyleVar_FrameRounding, 4.0f); ImGui::PushStyleVar(ImGuiStyleVar_CellPadding, {0.f, 0.f}); diff --git a/Nuake/Engine.cpp b/Nuake/Engine.cpp index 981e8dc2..4748092c 100644 --- a/Nuake/Engine.cpp +++ b/Nuake/Engine.cpp @@ -15,6 +15,7 @@ #include #include +#include namespace Nuake { @@ -49,6 +50,8 @@ namespace Nuake void Engine::Tick() { + ZoneScoped; + JobSystem::Get().Update(); @@ -120,12 +123,18 @@ namespace Nuake void Engine::Draw() { + ZoneScoped; + RenderCommand::Clear(); // Start imgui frame - ImGui_ImplOpenGL3_NewFrame(); - ImGui_ImplGlfw_NewFrame(); - ImGui::NewFrame(); + { + ZoneScopedN("ImGui New Frame"); + + ImGui_ImplOpenGL3_NewFrame(); + ImGui_ImplGlfw_NewFrame(); + ImGui::NewFrame(); + } // Draw scene Window::Get()->Draw(); @@ -133,6 +142,7 @@ namespace Nuake void Engine::EndDraw() { + ZoneScoped; Window::Get()->EndDraw(); } diff --git a/Nuake/dependencies/tracy b/Nuake/dependencies/tracy new file mode 160000 index 00000000..5d542dc0 --- /dev/null +++ b/Nuake/dependencies/tracy @@ -0,0 +1 @@ +Subproject commit 5d542dc09f3d9378d005092a4ad446bd405f819a diff --git a/Nuake/dependencies/tracy_p5.lua b/Nuake/dependencies/tracy_p5.lua new file mode 100644 index 00000000..c26ebde5 --- /dev/null +++ b/Nuake/dependencies/tracy_p5.lua @@ -0,0 +1,30 @@ +group "Dependencies" +project 'Tracy' + location "tracy" + + kind "StaticLib" + staticruntime "on" + warnings 'Off' + + includedirs { + "tracy/public/tracy" + } + + files { + "tracy/public/tracy/Tracy.hpp", + "tracy/public/TracyClient.cpp" + } + + defines { + "TRACY_ENABLE", + "TRACY_ON_DEMAND", + } + + filter "configurations:Debug" + runtime "Debug" + symbols "on" + + filter "configurations:Release" + runtime "Release" + optimize "on" +group "" \ No newline at end of file diff --git a/Nuake/src/Application/Application.cpp b/Nuake/src/Application/Application.cpp index 597061e4..6a6670be 100644 --- a/Nuake/src/Application/Application.cpp +++ b/Nuake/src/Application/Application.cpp @@ -3,6 +3,8 @@ #include +#include + namespace Nuake { Application::Application(const ApplicationSpecification& appSpecification) @@ -33,8 +35,11 @@ namespace Nuake { { while (!m_Window->ShouldClose()) { + ZoneScoped; + for (auto& layer : m_LayerStack) { + ZoneScopedN("Layer Update"); layer->OnUpdate(); } @@ -42,9 +47,12 @@ namespace Nuake { { for (auto& layer : m_LayerStack) { + ZoneScopedN("Layer Draw"); layer->OnDraw(); } } + + FrameMark; } } @@ -55,4 +63,4 @@ namespace Nuake { layer->OnDetach(); } } -} \ No newline at end of file +} diff --git a/Nuake/src/Core/Input.cpp b/Nuake/src/Core/Input.cpp index bda51eef..c7e43063 100644 --- a/Nuake/src/Core/Input.cpp +++ b/Nuake/src/Core/Input.cpp @@ -3,6 +3,7 @@ #include #include +#include namespace Nuake { @@ -167,6 +168,8 @@ namespace Nuake void Input::Update() { + ZoneScoped; + // Reset all input to false. for (auto& k : m_Keys) { diff --git a/Nuake/src/Rendering/Buffers/Framebuffer.cpp b/Nuake/src/Rendering/Buffers/Framebuffer.cpp index cb28e249..224968a6 100644 --- a/Nuake/src/Rendering/Buffers/Framebuffer.cpp +++ b/Nuake/src/Rendering/Buffers/Framebuffer.cpp @@ -1,5 +1,6 @@ #include "Framebuffer.h" #include +#include namespace Nuake { @@ -84,6 +85,8 @@ namespace Nuake void FrameBuffer::QueueResize(Vector2 size) { + ZoneScoped; + if (size == m_Size) return; diff --git a/Nuake/src/Rendering/PostFX/SSAO.cpp b/Nuake/src/Rendering/PostFX/SSAO.cpp index 9cfc9a7c..fc09aa5d 100644 --- a/Nuake/src/Rendering/PostFX/SSAO.cpp +++ b/Nuake/src/Rendering/PostFX/SSAO.cpp @@ -9,6 +9,7 @@ #include #include +#include namespace Nuake { @@ -32,6 +33,8 @@ namespace Nuake void SSAO::Resize(const Vector2& size) { + ZoneScoped; + if (_size == size) return; @@ -42,6 +45,8 @@ namespace Nuake void SSAO::Clear() { + ZoneScoped; + _ssaoBlurFramebuffer->Bind(); { RenderCommand::SetClearColor({ 1, 1, 1, 1}); @@ -96,6 +101,8 @@ namespace Nuake void SSAO::Draw(FrameBuffer* gBuffer, const Matrix4& projection, const Matrix4& view) { + ZoneScoped; + _ssaoFramebuffer->Bind(); { _ssaoFramebuffer->Clear(); diff --git a/Nuake/src/Rendering/PostFX/Volumetric.cpp b/Nuake/src/Rendering/PostFX/Volumetric.cpp index ff0e743b..f4a723e0 100644 --- a/Nuake/src/Rendering/PostFX/Volumetric.cpp +++ b/Nuake/src/Rendering/PostFX/Volumetric.cpp @@ -3,6 +3,7 @@ #include "src/Rendering/Renderer.h" #include #include +#include namespace Nuake { Volumetric::Volumetric() { @@ -37,6 +38,8 @@ namespace Nuake { void Volumetric::Draw(Matrix4 projection, Matrix4 view, const Vector3& camPos, std::vector& lights) { + ZoneScoped; + mVolumetricFramebuffer->Bind(); { mVolumetricFramebuffer->Clear(); diff --git a/Nuake/src/Rendering/Renderer.cpp b/Nuake/src/Rendering/Renderer.cpp index 47faf185..611525e8 100644 --- a/Nuake/src/Rendering/Renderer.cpp +++ b/Nuake/src/Rendering/Renderer.cpp @@ -17,6 +17,7 @@ #include "src/Rendering/Textures/MaterialManager.h" #include "src/Rendering/Vertex.h" #include +#include namespace Nuake { @@ -254,6 +255,8 @@ namespace Nuake int spotShadowMapCount = 0; void Renderer::EndDraw() { + ZoneScoped; + Shader* deferredShader = ShaderManager::GetShader("Resources/Shaders/deferred.shader"); deferredShader->Bind(); deferredShader->SetUniform1i("LightCount", 0); @@ -418,6 +421,8 @@ namespace Nuake void Renderer::DrawQuad(Matrix4 transform) { + ZoneScoped; + QuadMesh->Bind(); RenderCommand::DrawArrays(0, 6); } diff --git a/Nuake/src/Rendering/SceneRenderer.cpp b/Nuake/src/Rendering/SceneRenderer.cpp index 63307a5b..33f63e46 100644 --- a/Nuake/src/Rendering/SceneRenderer.cpp +++ b/Nuake/src/Rendering/SceneRenderer.cpp @@ -8,6 +8,7 @@ #include #include #include +#include namespace Nuake @@ -128,6 +129,8 @@ namespace Nuake /// Framebuffer to render the scene to. Should be in the right size void SceneRenderer::RenderScene(Scene& scene, FrameBuffer& framebuffer) { + ZoneScoped; + // Renders all shadow maps ShadowPass(scene); @@ -483,6 +486,8 @@ namespace Nuake void SceneRenderer::ShadowPass(Scene& scene) { + ZoneScoped; + RenderCommand::Enable(RendererEnum::DEPTH_TEST); Shader* shader = ShaderManager::GetShader("Resources/Shaders/shadowMap.shader"); @@ -729,6 +734,8 @@ namespace Nuake void SceneRenderer::GBufferPass(Scene& scene) { + ZoneScoped; + mGBuffer->Bind(); mGBuffer->Clear(); { @@ -933,6 +940,8 @@ namespace Nuake void SceneRenderer::ShadingPass(Scene& scene) { + ZoneScoped; + mShadingBuffer->Bind(); mShadingBuffer->Clear(); { @@ -1035,6 +1044,8 @@ namespace Nuake void SceneRenderer::DebugRendererPass(Scene& scene) { + ZoneScoped; + mShadingBuffer->Bind(); { // Lines diff --git a/Nuake/src/Rendering/Shaders/ShaderManager.cpp b/Nuake/src/Rendering/Shaders/ShaderManager.cpp index 08b69b1c..2b377eb2 100644 --- a/Nuake/src/Rendering/Shaders/ShaderManager.cpp +++ b/Nuake/src/Rendering/Shaders/ShaderManager.cpp @@ -2,6 +2,7 @@ #include "src/Core/Logger.h" #include "src/Resource/StaticResources.h" +#include #define LoadEmbeddedShader(file) \ m_Shaders[file##_path] = CreateScope(file##_path, std::string(reinterpret_cast(file), reinterpret_cast(file) + file##_len)); @@ -48,6 +49,8 @@ namespace Nuake Shader* ShaderManager::GetShader(const std::string& path) { + ZoneScoped; + if (m_Shaders.find(path) == m_Shaders.end()) { m_Shaders[path] = CreateScope(path); diff --git a/Nuake/src/Scene/Scene.cpp b/Nuake/src/Scene/Scene.cpp index febf6729..f4bd4b69 100644 --- a/Nuake/src/Scene/Scene.cpp +++ b/Nuake/src/Scene/Scene.cpp @@ -34,6 +34,7 @@ #include #include #include +#include namespace Nuake @@ -261,6 +262,8 @@ namespace Nuake void Scene::Update(Timestep ts) { + ZoneScoped; + const auto& view = m_Registry.view(); for (const auto& e : view) { @@ -280,6 +283,7 @@ namespace Nuake for (auto& system : m_Systems) { + ZoneScopedN("System Update"); system->Update(ts); } @@ -301,6 +305,8 @@ namespace Nuake void Scene::Draw(FrameBuffer& framebuffer) { + ZoneScoped; + Ref cam = nullptr; const auto& view = m_Registry.view(); for (const auto& e : view) diff --git a/Nuake/src/Threading/Job.cpp b/Nuake/src/Threading/Job.cpp index 36b18160..11fc4208 100644 --- a/Nuake/src/Threading/Job.cpp +++ b/Nuake/src/Threading/Job.cpp @@ -1,4 +1,5 @@ #include "Job.h" +#include namespace Nuake { @@ -10,6 +11,7 @@ namespace Nuake { m_Thread = std::thread([this, job]() { + ZoneScoped; job(); m_IsDone = true; }); diff --git a/Nuake/src/Threading/JobSystem.cpp b/Nuake/src/Threading/JobSystem.cpp new file mode 100644 index 00000000..6b52d9c9 --- /dev/null +++ b/Nuake/src/Threading/JobSystem.cpp @@ -0,0 +1,26 @@ +#include "JobSystem.h" + +#include + +namespace Nuake { + + void JobSystem::Update() + { + ZoneScoped; + + for(auto it = m_Jobs.begin(); it != m_Jobs.end();) + { + if(it->get()->IsDone()) + { + it->get()->End(); + it = m_Jobs.erase(it); + } + else + { + ++it; + } + } + } +} + + diff --git a/Nuake/src/Threading/JobSystem.h b/Nuake/src/Threading/JobSystem.h index a1b39a29..8be02723 100644 --- a/Nuake/src/Threading/JobSystem.h +++ b/Nuake/src/Threading/JobSystem.h @@ -24,20 +24,6 @@ namespace Nuake { m_Jobs.push_back(std::make_unique(job, end)); } - void Update() - { - for (auto it = m_Jobs.begin(); it != m_Jobs.end();) - { - if (it->get()->IsDone()) - { - it->get()->End(); - it = m_Jobs.erase(it); - } - else - { - ++it; - } - } - } + void Update(); }; } \ No newline at end of file diff --git a/Nuake/src/Window.cpp b/Nuake/src/Window.cpp index 756b5c8c..5035ae4a 100644 --- a/Nuake/src/Window.cpp +++ b/Nuake/src/Window.cpp @@ -17,6 +17,7 @@ #include #include #include +#include namespace Nuake { @@ -127,6 +128,8 @@ namespace Nuake void Window::Draw() { + ZoneScoped; + // Dont render if no scene is loaded. if (!m_Scene) { @@ -152,10 +155,12 @@ namespace Nuake if (Engine::IsPlayMode()) { + ZoneScopedN("PIE Draw"); m_Scene->Draw(*m_Framebuffer.get()); } else { + ZoneScopedN("Non-playmode Draw"); m_Scene->Draw(*m_Framebuffer.get(), m_Scene->m_EditorCamera->GetPerspective(), m_Scene->m_EditorCamera->GetTransform()); } @@ -165,8 +170,15 @@ namespace Nuake void Window::EndDraw() { - ImGui::EndFrame(); - ImGui::Render(); + { + ZoneScopedN("ImGui::EndFrame"); + ImGui::EndFrame(); + } + + { + ZoneScopedN("ImGui::Render"); + ImGui::Render(); + } ImGui_ImplOpenGL3_RenderDrawData(ImGui::GetDrawData()); @@ -178,8 +190,12 @@ namespace Nuake glfwMakeContextCurrent(backup_current_context); } + { + ZoneScopedN("SwapBuffers"); + glfwSwapBuffers(m_Window); + } - glfwSwapBuffers(m_Window); + ZoneScopedN("glfwPollEvents"); glfwPollEvents(); } diff --git a/Runtime/Runtime.cpp b/Runtime/Runtime.cpp index 5ddd87d2..6ab8f781 100644 --- a/Runtime/Runtime.cpp +++ b/Runtime/Runtime.cpp @@ -3,6 +3,7 @@ //#include #include +#include #include #include @@ -158,6 +159,8 @@ int ApplicationMain(int argc, char* argv[]) ImGui::PopStyleVar(2); Engine::EndDraw(); + + FrameMark; } } diff --git a/premake5.lua b/premake5.lua index c346fa66..59394dac 100644 --- a/premake5.lua +++ b/premake5.lua @@ -43,6 +43,10 @@ workspace "Nuake" architecture "x64" outputdir = "%{cfg.buildcfg}-%{cfg.system}-%{cfg.architecture}" +local globalDefines = { + "TRACY_ENABLE", + "TRACY_ON_DEMAND" +} group "Dependencies" include "Nuake/dependencies/glfw_p5.lua" @@ -52,6 +56,7 @@ group "Dependencies" include "Nuake/dependencies/soloud_p5.lua" include "Nuake/dependencies/coral_p5.lua" include "Nuake/dependencies/recastnavigation_p5.lua" + include "Nuake/dependencies/tracy_p5.lua" group "" include "NuakeNet/premake5.lua" @@ -79,8 +84,10 @@ project "Nuake" defines { + table.unpack(globalDefines), + "_MBCS", - "IMGUI_DEFINE_MATH_OPERATORS" + "IMGUI_DEFINE_MATH_OPERATORS", } targetdir ("bin/" .. outputdir .. "/%{prj.name}") @@ -152,12 +159,15 @@ project "Nuake" "%{prj.name}/dependencies/recastnavigation/Detour/Include", "%{prj.name}/dependencies/recastnavigation/DetourCrowd/Include", "%{prj.name}/dependencies/recastnavigation/DetourTileCache/Include", - "%{prj.name}/dependencies/recastnavigation/Recast/Include" + "%{prj.name}/dependencies/recastnavigation/Recast/Include", + + "%{prj.name}/../Nuake/dependencies/tracy/public/tracy", } links { - "soloud" + "soloud", + "tracy" } filter "system:linux" @@ -194,6 +204,8 @@ project "Nuake" runtime "Debug" symbols "on" + buildoptions { "/Zi" } + filter "configurations:Release" runtime "Release" optimize "on" @@ -231,7 +243,9 @@ project "NuakeRuntime" "%{prj.name}/../Nuake/dependencies/recastnavigation/Detour/Include", "%{prj.name}/../Nuake/dependencies/recastnavigation/DetourCrowd/Include", "%{prj.name}/../Nuake/dependencies/recastnavigation/DetourTileCache/Include", - "%{prj.name}/../Nuake/dependencies/recastnavigation/Recast/Include" + "%{prj.name}/../Nuake/dependencies/recastnavigation/Recast/Include", + + "%{prj.name}/../Nuake/dependencies/tracy/public/tracy", } libdirs @@ -257,7 +271,12 @@ project "NuakeRuntime" "Detour", "DetourCrowd", "DetourTileCache", - "Recast" + "Recast", + "tracy", + } + + defines { + table.unpack(globalDefines) } filter "system:windows" @@ -309,6 +328,8 @@ project "NuakeRuntime" "NK_DEBUG" } + buildoptions { "/Zi" } + filter "configurations:Release" kind "WindowedApp" runtime "Release" @@ -365,7 +386,9 @@ project "Editor" "%{prj.name}/../Nuake/dependencies/recastnavigation/Detour/Include", "%{prj.name}/../Nuake/dependencies/recastnavigation/DetourCrowd/Include", "%{prj.name}/../Nuake/dependencies/recastnavigation/DetourTileCache/Include", - "%{prj.name}/../Nuake/dependencies/recastnavigation/Recast/Include" + "%{prj.name}/../Nuake/dependencies/recastnavigation/Recast/Include", + + "%{prj.name}/../Nuake/dependencies/tracy/public/tracy", } libdirs @@ -392,7 +415,12 @@ project "Editor" "Detour", "DetourCrowd", "DetourTileCache", - "Recast" + "Recast", + "tracy", + } + + defines { + table.unpack(globalDefines) } filter "system:Windows" @@ -461,6 +489,8 @@ project "Editor" "IMGUI_DEFINE_MATH_OPERATORS" } + buildoptions { "/Zi" } + filter "configurations:Release" runtime "Release" optimize "on"