From 25be75eefa6b8df7bb6a92fc5b73c5869427333c Mon Sep 17 00:00:00 2001 From: hyzboy Date: Sat, 9 Nov 2024 00:57:40 +0800 Subject: [PATCH] Moved few codes to RenderPassManager from GPUDevice --- inc/hgl/graph/RenderFramework.h | 3 ++ inc/hgl/graph/VKDevice.h | 10 ------ inc/hgl/graph/manager/RenderPassManager.h | 2 ++ src/SceneGraph/CMakeLists.txt | 1 - src/SceneGraph/RenderFramework.cpp | 1 + src/SceneGraph/Vulkan/VKDevice.cpp | 7 ---- src/SceneGraph/Vulkan/VKDeviceRenderPass.cpp | 38 -------------------- src/SceneGraph/manager/RenderPassManager.cpp | 12 +++++++ 8 files changed, 18 insertions(+), 56 deletions(-) delete mode 100644 src/SceneGraph/Vulkan/VKDeviceRenderPass.cpp diff --git a/inc/hgl/graph/RenderFramework.h b/inc/hgl/graph/RenderFramework.h index 275aa0ee..cfb8daaf 100644 --- a/inc/hgl/graph/RenderFramework.h +++ b/inc/hgl/graph/RenderFramework.h @@ -44,6 +44,7 @@ class FontSource; class Window; class VulkanInstance; +class RenderPassManager; class TextureManager; class SwapchainModule; @@ -75,6 +76,7 @@ protected: protected: + RenderPassManager * render_pass_manager =nullptr; TextureManager * texture_manager =nullptr; protected: @@ -101,6 +103,7 @@ public: //module public: //manager + RenderPassManager *GetRenderPassManager(){return render_pass_manager;} ///<取得渲染通道管理器 TextureManager *GetTextureManager(){return texture_manager;} ///<取得纹理管理器 public: diff --git a/inc/hgl/graph/VKDevice.h b/inc/hgl/graph/VKDevice.h index 92be5a97..44d28292 100644 --- a/inc/hgl/graph/VKDevice.h +++ b/inc/hgl/graph/VKDevice.h @@ -35,14 +35,6 @@ private: GPUDeviceAttribute *attr; -private: - - RenderPassManager *render_pass_manage; - RenderPass *device_render_pass; - - void InitRenderPassManage(); - void ClearRenderPassManage(); - private: VkCommandBuffer CreateCommandBuffer(const AnsiString &); @@ -71,8 +63,6 @@ public: const VkColorSpaceKHR GetColorSpace ()const {return attr->surface_format.colorSpace;} VkQueue GetGraphicsQueue () {return attr->graphics_queue;} - RenderPass * GetRenderPass () {return device_render_pass;} - void WaitIdle ()const {vkDeviceWaitIdle(attr->device);} DebugUtils * GetDebugUtils (){return attr->debug_utils;} diff --git a/inc/hgl/graph/manager/RenderPassManager.h b/inc/hgl/graph/manager/RenderPassManager.h index dbde187b..3b19c82e 100644 --- a/inc/hgl/graph/manager/RenderPassManager.h +++ b/inc/hgl/graph/manager/RenderPassManager.h @@ -32,6 +32,8 @@ private: const List &dependency, const RenderbufferInfo *); +public: + RenderPass * AcquireRenderPass( const RenderbufferInfo *,const uint subpass_count=2); };//class RenderPassManager VK_NAMESPACE_END diff --git a/src/SceneGraph/CMakeLists.txt b/src/SceneGraph/CMakeLists.txt index 6befd7e0..7e1a8e3b 100644 --- a/src/SceneGraph/CMakeLists.txt +++ b/src/SceneGraph/CMakeLists.txt @@ -166,7 +166,6 @@ SET(VK_DEVICE_SOURCE Vulkan/VKDeviceMemory.cpp Vulkan/VKDeviceSampler.cpp Vulkan/VKDeviceMaterial.cpp Vulkan/VKDeviceFramebuffer.cpp - Vulkan/VKDeviceRenderPass.cpp Vulkan/VKDeviceRenderTarget.cpp) SET(VK_PHYSICAL_DEVICE_SOURCE ${SG_INCLUDE_PATH}/VKPhysicalDevice.h diff --git a/src/SceneGraph/RenderFramework.cpp b/src/SceneGraph/RenderFramework.cpp index 619dae81..dd476a7b 100644 --- a/src/SceneGraph/RenderFramework.cpp +++ b/src/SceneGraph/RenderFramework.cpp @@ -11,6 +11,7 @@ RenderFramework::RenderFramework() { graph_module_manager=InitGraphModuleManager(device); + render_pass_manager=graph_module_manager->GetModule(true); swapchain_module=graph_module_manager->GetModule(true); } diff --git a/src/SceneGraph/Vulkan/VKDevice.cpp b/src/SceneGraph/Vulkan/VKDevice.cpp index 04ac7652..9537ecf6 100644 --- a/src/SceneGraph/Vulkan/VKDevice.cpp +++ b/src/SceneGraph/Vulkan/VKDevice.cpp @@ -20,18 +20,11 @@ GPUDevice::GPUDevice(GPUDeviceAttribute *da) { attr=da; - InitRenderPassManage(); - - sc_rt=nullptr; Resize(attr->surface_caps.currentExtent); } GPUDevice::~GPUDevice() { - ClearRenderPassManage(); - - SAFE_CLEAR(sc_rt); - delete attr; //按设计,上面那些rt/queue/cmdbuf都需要走graph_module_manager释放和申请 diff --git a/src/SceneGraph/Vulkan/VKDeviceRenderPass.cpp b/src/SceneGraph/Vulkan/VKDeviceRenderPass.cpp deleted file mode 100644 index 57647b2e..00000000 --- a/src/SceneGraph/Vulkan/VKDeviceRenderPass.cpp +++ /dev/null @@ -1,38 +0,0 @@ -#include -#include -#include -#include - -VK_NAMESPACE_BEGIN -void GPUDevice::InitRenderPassManage() -{ - render_pass_manage=new RenderPassManager(attr->device,attr->pipeline_cache); - - SwapchainRenderbufferInfo rbi(attr->surface_format.format,attr->physical_device->GetDepthFormat()); - - device_render_pass=render_pass_manage->AcquireRenderPass(&rbi); - - #ifdef _DEBUG - if(attr->debug_utils) - attr->debug_utils->SetRenderPass(device_render_pass->GetVkRenderPass(),"MainDeviceRenderPass"); - #endif//_DEBUG -} - -void GPUDevice::ClearRenderPassManage() -{ - SAFE_CLEAR(render_pass_manage); -} - -RenderPass *GPUDevice::AcquireRenderPass(const RenderbufferInfo *rbi,const uint subpass_count) -{ - for(const VkFormat &fmt:rbi->GetColorFormatList()) - if(!attr->physical_device->IsColorAttachmentOptimal(fmt)) - return(nullptr); - - if(rbi->HasDepthOrStencil()) - if(!attr->physical_device->IsDepthAttachmentOptimal(rbi->GetDepthFormat())) - return(nullptr); - - return render_pass_manage->AcquireRenderPass(rbi,subpass_count); -} -VK_NAMESPACE_END diff --git a/src/SceneGraph/manager/RenderPassManager.cpp b/src/SceneGraph/manager/RenderPassManager.cpp index 2b8611f8..d972ca68 100644 --- a/src/SceneGraph/manager/RenderPassManager.cpp +++ b/src/SceneGraph/manager/RenderPassManager.cpp @@ -294,6 +294,18 @@ RenderPass *RenderPassManager::CreateRenderPass( const ListGetColorFormatList()) + if(!phy_dev->IsColorAttachmentOptimal(fmt)) + return(nullptr); + + if(rbi->HasDepthOrStencil()) + if(!phy_dev->IsDepthAttachmentOptimal(rbi->GetDepthFormat())) + return(nullptr); + } + RenderPassHASHCode hash; RenderPass *rp=nullptr;