Moved few codes to RenderPassManager from GPUDevice

This commit is contained in:
hyzboy 2024-11-09 00:57:40 +08:00
parent c9855d7dee
commit 25be75eefa
8 changed files with 18 additions and 56 deletions

View File

@ -44,6 +44,7 @@ class FontSource;
class Window; class Window;
class VulkanInstance; class VulkanInstance;
class RenderPassManager;
class TextureManager; class TextureManager;
class SwapchainModule; class SwapchainModule;
@ -75,6 +76,7 @@ protected:
protected: protected:
RenderPassManager * render_pass_manager =nullptr;
TextureManager * texture_manager =nullptr; TextureManager * texture_manager =nullptr;
protected: protected:
@ -101,6 +103,7 @@ public: //module
public: //manager public: //manager
RenderPassManager *GetRenderPassManager(){return render_pass_manager;} ///<取得渲染通道管理器
TextureManager *GetTextureManager(){return texture_manager;} ///<取得纹理管理器 TextureManager *GetTextureManager(){return texture_manager;} ///<取得纹理管理器
public: public:

View File

@ -35,14 +35,6 @@ private:
GPUDeviceAttribute *attr; GPUDeviceAttribute *attr;
private:
RenderPassManager *render_pass_manage;
RenderPass *device_render_pass;
void InitRenderPassManage();
void ClearRenderPassManage();
private: private:
VkCommandBuffer CreateCommandBuffer(const AnsiString &); VkCommandBuffer CreateCommandBuffer(const AnsiString &);
@ -71,8 +63,6 @@ public:
const VkColorSpaceKHR GetColorSpace ()const {return attr->surface_format.colorSpace;} const VkColorSpaceKHR GetColorSpace ()const {return attr->surface_format.colorSpace;}
VkQueue GetGraphicsQueue () {return attr->graphics_queue;} VkQueue GetGraphicsQueue () {return attr->graphics_queue;}
RenderPass * GetRenderPass () {return device_render_pass;}
void WaitIdle ()const {vkDeviceWaitIdle(attr->device);} void WaitIdle ()const {vkDeviceWaitIdle(attr->device);}
DebugUtils * GetDebugUtils (){return attr->debug_utils;} DebugUtils * GetDebugUtils (){return attr->debug_utils;}

View File

@ -32,6 +32,8 @@ private:
const List<VkSubpassDependency> &dependency, const List<VkSubpassDependency> &dependency,
const RenderbufferInfo *); const RenderbufferInfo *);
public:
RenderPass * AcquireRenderPass( const RenderbufferInfo *,const uint subpass_count=2); RenderPass * AcquireRenderPass( const RenderbufferInfo *,const uint subpass_count=2);
};//class RenderPassManager };//class RenderPassManager
VK_NAMESPACE_END VK_NAMESPACE_END

View File

@ -166,7 +166,6 @@ SET(VK_DEVICE_SOURCE Vulkan/VKDeviceMemory.cpp
Vulkan/VKDeviceSampler.cpp Vulkan/VKDeviceSampler.cpp
Vulkan/VKDeviceMaterial.cpp Vulkan/VKDeviceMaterial.cpp
Vulkan/VKDeviceFramebuffer.cpp Vulkan/VKDeviceFramebuffer.cpp
Vulkan/VKDeviceRenderPass.cpp
Vulkan/VKDeviceRenderTarget.cpp) Vulkan/VKDeviceRenderTarget.cpp)
SET(VK_PHYSICAL_DEVICE_SOURCE ${SG_INCLUDE_PATH}/VKPhysicalDevice.h SET(VK_PHYSICAL_DEVICE_SOURCE ${SG_INCLUDE_PATH}/VKPhysicalDevice.h

View File

@ -11,6 +11,7 @@ RenderFramework::RenderFramework()
{ {
graph_module_manager=InitGraphModuleManager(device); graph_module_manager=InitGraphModuleManager(device);
render_pass_manager=graph_module_manager->GetModule<RenderPassManager>(true);
swapchain_module=graph_module_manager->GetModule<SwapchainModule>(true); swapchain_module=graph_module_manager->GetModule<SwapchainModule>(true);
} }

View File

@ -20,18 +20,11 @@ GPUDevice::GPUDevice(GPUDeviceAttribute *da)
{ {
attr=da; attr=da;
InitRenderPassManage();
sc_rt=nullptr;
Resize(attr->surface_caps.currentExtent); Resize(attr->surface_caps.currentExtent);
} }
GPUDevice::~GPUDevice() GPUDevice::~GPUDevice()
{ {
ClearRenderPassManage();
SAFE_CLEAR(sc_rt);
delete attr; delete attr;
//按设计上面那些rt/queue/cmdbuf都需要走graph_module_manager释放和申请 //按设计上面那些rt/queue/cmdbuf都需要走graph_module_manager释放和申请

View File

@ -1,38 +0,0 @@
#include<hgl/graph/VKDevice.h>
#include<hgl/graph/VKDeviceAttribute.h>
#include<hgl/graph/VKPhysicalDevice.h>
#include<hgl/graph/VKDeviceRenderPassManage.h>
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

View File

@ -294,6 +294,18 @@ RenderPass *RenderPassManager::CreateRenderPass( const List<VkAttachmentDescri
RenderPass *RenderPassManager::AcquireRenderPass(const RenderbufferInfo *rbi,const uint subpass_count) RenderPass *RenderPassManager::AcquireRenderPass(const RenderbufferInfo *rbi,const uint subpass_count)
{ {
{
const auto *phy_dev=GetPhysicalDevice();
for(const VkFormat &fmt:rbi->GetColorFormatList())
if(!phy_dev->IsColorAttachmentOptimal(fmt))
return(nullptr);
if(rbi->HasDepthOrStencil())
if(!phy_dev->IsDepthAttachmentOptimal(rbi->GetDepthFormat()))
return(nullptr);
}
RenderPassHASHCode hash; RenderPassHASHCode hash;
RenderPass *rp=nullptr; RenderPass *rp=nullptr;