From 1ba9222a438365e01323052db40677f74a0f3bd6 Mon Sep 17 00:00:00 2001 From: redstrate <54911369+redstrate@users.noreply.github.com> Date: Wed, 23 Sep 2020 10:17:24 -0400 Subject: [PATCH] Add labels for render passes and framebuffers --- engine/gfx/public/gfx.hpp | 4 ++++ engine/gfx/vulkan/include/gfx_vulkan.hpp | 2 ++ engine/gfx/vulkan/src/gfx_vulkan.cpp | 9 ++++++++- engine/renderer/src/dofpass.cpp | 1 + engine/renderer/src/gaussianhelper.cpp | 1 + engine/renderer/src/imguipass.cpp | 2 +- engine/renderer/src/renderer.cpp | 4 ++++ engine/renderer/src/scenecapture.cpp | 2 ++ engine/renderer/src/shadowpass.cpp | 2 ++ engine/renderer/src/smaapass.cpp | 1 + platforms/windows/main.cpp.in | 7 ++++--- 11 files changed, 30 insertions(+), 5 deletions(-) diff --git a/engine/gfx/public/gfx.hpp b/engine/gfx/public/gfx.hpp index bdb49ac..346847e 100755 --- a/engine/gfx/public/gfx.hpp +++ b/engine/gfx/public/gfx.hpp @@ -215,11 +215,15 @@ struct GFXComputePipelineCreateInfo { }; struct GFXFramebufferCreateInfo { + std::string label; + GFXRenderPass* render_pass; std::vector attachments; }; struct GFXRenderPassCreateInfo { + std::string label; + std::vector attachments; }; diff --git a/engine/gfx/vulkan/include/gfx_vulkan.hpp b/engine/gfx/vulkan/include/gfx_vulkan.hpp index 86ed029..bbe270c 100755 --- a/engine/gfx/vulkan/include/gfx_vulkan.hpp +++ b/engine/gfx/vulkan/include/gfx_vulkan.hpp @@ -54,6 +54,8 @@ public: // misc operations GFXSize get_alignment(const GFXSize size) override; + GFXCommandBuffer* acquire_command_buffer() override; + void submit(GFXCommandBuffer* command_buffer, const int identifier) override; private: diff --git a/engine/gfx/vulkan/src/gfx_vulkan.cpp b/engine/gfx/vulkan/src/gfx_vulkan.cpp index e448770..b0197bf 100755 --- a/engine/gfx/vulkan/src/gfx_vulkan.cpp +++ b/engine/gfx/vulkan/src/gfx_vulkan.cpp @@ -432,7 +432,6 @@ void GFXVulkan::copy_texture(GFXTexture* from, GFXBuffer* to) { console::error(System::GFX, "Copy Texture->Buffer unimplemented!"); } - GFXFramebuffer* GFXVulkan::create_framebuffer(const GFXFramebufferCreateInfo& info) { GFXVulkanFramebuffer* framebuffer = new GFXVulkanFramebuffer(); @@ -457,6 +456,8 @@ GFXFramebuffer* GFXVulkan::create_framebuffer(const GFXFramebufferCreateInfo& in vkCreateFramebuffer(device, &framebufferInfo, nullptr, &framebuffer->handle); + name_object(device, VK_OBJECT_TYPE_FRAMEBUFFER, (uint64_t)framebuffer->handle, info.label); + framebuffer->width = ((GFXVulkanTexture*)info.attachments[0])->width; framebuffer->height = ((GFXVulkanTexture*)info.attachments[0])->height; @@ -536,6 +537,8 @@ GFXRenderPass* GFXVulkan::create_render_pass(const GFXRenderPassCreateInfo& info vkCreateRenderPass(device, &renderPassInfo, nullptr, &renderPass->handle); + name_object(device, VK_OBJECT_TYPE_RENDER_PASS, (uint64_t)renderPass->handle, info.label); + renderPass->numAttachments = static_cast(descriptions.size()); renderPass->hasDepthAttachment = hasDepthAttachment; @@ -779,6 +782,10 @@ GFXSize GFXVulkan::get_alignment(GFXSize size) { return (size + minUboAlignment / 2) & ~int(minUboAlignment - 1); } +GFXCommandBuffer* GFXVulkan::acquire_command_buffer() { + return new GFXCommandBuffer(); +} + void GFXVulkan::submit(GFXCommandBuffer* command_buffer, const int identifier) { vkWaitForFences(device, 1, &inFlightFences[currentFrame], VK_TRUE, std::numeric_limits::max()); diff --git a/engine/renderer/src/dofpass.cpp b/engine/renderer/src/dofpass.cpp index eb58d77..93d6e08 100755 --- a/engine/renderer/src/dofpass.cpp +++ b/engine/renderer/src/dofpass.cpp @@ -12,6 +12,7 @@ DoFPass::DoFPass(GFX* gfx, Renderer* renderer) : renderer(renderer) { aperture_texture = assetm->get(file::app_domain / "textures/aperture.png"); GFXRenderPassCreateInfo renderPassInfo = {}; + renderPassInfo.label = "Depth of Field"; renderPassInfo.attachments.push_back(GFXPixelFormat::RGBA_32F); renderpass = gfx->create_render_pass(renderPassInfo); diff --git a/engine/renderer/src/gaussianhelper.cpp b/engine/renderer/src/gaussianhelper.cpp index 16a88f4..db3a2ad 100755 --- a/engine/renderer/src/gaussianhelper.cpp +++ b/engine/renderer/src/gaussianhelper.cpp @@ -6,6 +6,7 @@ GaussianHelper::GaussianHelper(GFX* gfx, const prism::Extent extent) : extent(extent) { // render pass GFXRenderPassCreateInfo renderPassInfo = {}; + renderPassInfo.label = "Gaussian"; renderPassInfo.attachments.push_back(GFXPixelFormat::RGBA_32F); renderPass = gfx->create_render_pass(renderPassInfo); diff --git a/engine/renderer/src/imguipass.cpp b/engine/renderer/src/imguipass.cpp index fe8b86e..37c556f 100755 --- a/engine/renderer/src/imguipass.cpp +++ b/engine/renderer/src/imguipass.cpp @@ -16,7 +16,7 @@ void ImGuiPass::initialize() { io.BackendFlags |= ImGuiBackendFlags_RendererHasVtxOffset; io.BackendFlags |= ImGuiBackendFlags_RendererHasViewports; -#if !defined(PLATFORM_TVOS) && !defined(PLATFORM_IOS) +#if !defined(PLATFORM_TVOS) && !defined(PLATFORM_IOS) && !defined(PLATFORM_WINDOWS) load_font("OpenSans-Regular.ttf"); #endif create_font_texture(); diff --git a/engine/renderer/src/renderer.cpp b/engine/renderer/src/renderer.cpp index cbfdefb..d4186c3 100755 --- a/engine/renderer/src/renderer.cpp +++ b/engine/renderer/src/renderer.cpp @@ -778,12 +778,14 @@ void Renderer::createDummyTexture() { void Renderer::createOffscreenResources() { GFXRenderPassCreateInfo renderPassInfo = {}; + renderPassInfo.label = "Offscreen"; renderPassInfo.attachments.push_back(GFXPixelFormat::RGBA_32F); renderPassInfo.attachments.push_back(GFXPixelFormat::DEPTH_32F); offscreenRenderPass = gfx->create_render_pass(renderPassInfo); renderPassInfo = {}; + renderPassInfo.label = "Offscreen Unorm"; renderPassInfo.attachments = {GFXPixelFormat::RGBA8_UNORM}; unormRenderPass = gfx->create_render_pass(renderPassInfo); @@ -813,6 +815,7 @@ void Renderer::createOffscreenResources() { if(viewport_mode) { GFXRenderPassCreateInfo renderPassInfo = {}; + renderPassInfo.label = "Viewport"; renderPassInfo.attachments.push_back(GFXPixelFormat::RGBA8_UNORM); viewportRenderPass = gfx->create_render_pass(renderPassInfo); @@ -1001,6 +1004,7 @@ void Renderer::createGaussianResources() { void Renderer::createBRDF() { GFXRenderPassCreateInfo renderPassInfo = {}; + renderPassInfo.label = "BRDF Gen"; renderPassInfo.attachments.push_back(GFXPixelFormat::R8G8_SFLOAT); brdfRenderPass = gfx->create_render_pass(renderPassInfo); diff --git a/engine/renderer/src/scenecapture.cpp b/engine/renderer/src/scenecapture.cpp index cafc2a4..3a50f20 100755 --- a/engine/renderer/src/scenecapture.cpp +++ b/engine/renderer/src/scenecapture.cpp @@ -61,6 +61,7 @@ SceneCapture::SceneCapture(GFX* gfx) { // render pass GFXRenderPassCreateInfo renderPassInfo = {}; + renderPassInfo.label = "Scene Capture Cube"; renderPassInfo.attachments.push_back(GFXPixelFormat::R8G8B8A8_UNORM); renderPassInfo.attachments.push_back(GFXPixelFormat::DEPTH_32F); @@ -423,6 +424,7 @@ void SceneCapture::createIrradianceResources() { irradianceFramebuffer = gfx->create_framebuffer(info); GFXRenderPassCreateInfo renderPassInfo = {}; + renderPassInfo.label = "Irradiance"; renderPassInfo.attachments.push_back(GFXPixelFormat::R8G8B8A8_UNORM); irradianceRenderPass = gfx->create_render_pass(renderPassInfo); diff --git a/engine/renderer/src/shadowpass.cpp b/engine/renderer/src/shadowpass.cpp index 68403c6..16c088d 100755 --- a/engine/renderer/src/shadowpass.cpp +++ b/engine/renderer/src/shadowpass.cpp @@ -295,10 +295,12 @@ void ShadowPass::create_render_passes() { // render pass GFXRenderPassCreateInfo renderPassInfo = {}; + renderPassInfo.label = "Shadow"; renderPassInfo.attachments.push_back(GFXPixelFormat::DEPTH_32F); render_pass = gfx->create_render_pass(renderPassInfo); + renderPassInfo.label = "Shadow Cube"; renderPassInfo.attachments.clear(); renderPassInfo.attachments.push_back(GFXPixelFormat::R_32F); renderPassInfo.attachments.push_back(GFXPixelFormat::DEPTH_32F); diff --git a/engine/renderer/src/smaapass.cpp b/engine/renderer/src/smaapass.cpp index 1e2149d..e670791 100755 --- a/engine/renderer/src/smaapass.cpp +++ b/engine/renderer/src/smaapass.cpp @@ -98,6 +98,7 @@ void SMAAPass::create_textures() { void SMAAPass::create_render_pass() { GFXRenderPassCreateInfo createInfo = {}; + createInfo.label = "SMAA"; createInfo.attachments = {GFXPixelFormat::R16G16B16A16_SFLOAT}; render_pass = engine->get_gfx()->create_render_pass(createInfo); diff --git a/platforms/windows/main.cpp.in b/platforms/windows/main.cpp.in index 8b46d7b..7d022d1 100755 --- a/platforms/windows/main.cpp.in +++ b/platforms/windows/main.cpp.in @@ -72,6 +72,8 @@ int platform::open_window(const std::string_view title, const prism::Rectangle r engine->add_window(window, 0, rect.extent); + app->initialize_render(); + return 0; } @@ -154,8 +156,6 @@ int WINAPI wWinMain(HINSTANCE hInstance, HINSTANCE, PWSTR pCmdLine, int nCmdShow app_main(engine); - app->initialize_render(); - MSG msg = { }; while (GetMessage(&msg, NULL, 0, 0)) { @@ -207,8 +207,9 @@ LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) HCURSOR arrowCursor = LoadCursor(NULL, IDC_ARROW); SetCursor(arrowCursor); - engine->begin_frame(1.0f / 60.0f); engine->update(1.0f / 60.0f); + + engine->begin_frame(1.0f / 60.0f); engine->render(0); if(engine->is_quitting()) {