splited to GraphModuleManager.cpp

This commit is contained in:
hyzboy 2024-10-25 23:17:14 +08:00
parent 1183e44221
commit 983281f6ad
6 changed files with 122 additions and 105 deletions

View File

@ -6,6 +6,10 @@
#include<hgl/graph/VKInlinePipeline.h>
#include<hgl/io/DataOutputStream.h>
VK_NAMESPACE_BEGIN
/**
* 线<br>
* 线
*/
class Pipeline
{
VkDevice device;

View File

@ -65,7 +65,8 @@ public:
virtual const bool IsRender(){return false;} ///<是否为渲染模块
GraphModuleManager *GetManager(){return module_manager;} ///<取得模块管理器
GPUDevice *GetDevice(){return module_manager->GetDevice();} ///<取得GPU设备
GPUDevice * GetDevice(){return module_manager->GetDevice();} ///<取得GPU设备
GPUDeviceAttribute *GetDeviceAttribute();
static const AnsiIDName *GetModuleName(){return nullptr;} ///<取得模块名称(标准通用的名称比如Upscale供通用模块使用)
virtual const AnsiIDName *GetName()const{return &module_name;} ///<取得名称(完整的私有名称比如FSR3Upscale,DLSS3Upscale)

View File

@ -284,6 +284,7 @@ SET(GRAPH_MODULE_HEADER ${SGM_HEADER_PATH}/GraphModule.h
${SGM_HEADER_PATH}/SwapchainModule.h)
SET(GRAPH_MODULE_SOURCE module/GraphModule.cpp
module/GraphModuleManager.cpp
module/GraphModuleFactory.cpp
module/RenderModule.cpp
module/RegistryCommonModule.cpp

View File

@ -1,111 +1,11 @@
#include<hgl/graph/module/GraphModule.h>
#include<hgl/type/Map.h>
#include<hgl/graph/VKDevice.h>
VK_NAMESPACE_BEGIN
namespace
GPUDeviceAttribute *GraphModule::GetDeviceAttribute()
{
using GraphModuleManagerMap=Map<GPUDevice *,GraphModuleManager *>;
static GraphModuleManagerMap *graph_module_manager_map=nullptr;
}
GraphModuleManager *InitGraphModuleManager(GPUDevice *dev)
{
if(!dev)
return(nullptr);
if(graph_module_manager_map)
{
if(graph_module_manager_map->ContainsKey(dev))
return(nullptr);
}
else
{
graph_module_manager_map=new GraphModuleManagerMap;
}
GraphModuleManager *gmm=new GraphModuleManager(dev);
graph_module_manager_map->Add(dev,gmm);
return gmm;
}
bool ClearGraphModuleManager(GPUDevice *dev)
{
if(!dev)
return(false);
if(!graph_module_manager_map)
return(false);
GraphModuleManager *gmm;
if(!graph_module_manager_map->Get(dev,gmm))
return(false);
graph_module_manager_map->DeleteByKey(dev);
delete gmm;
return(true);
}
GraphModuleManager *GetGraphModuleManager(GPUDevice *dev)
{
if(!dev)
return(nullptr);
if(!graph_module_manager_map)
return(nullptr);
GraphModuleManager *gmm;
if(graph_module_manager_map->Get(dev,gmm))
return gmm;
return(nullptr);
}
GraphModule *CreateGraphModule(const AnsiIDName &name,GraphModuleManager *gmm);
GraphModule *GraphModuleManager::GetModule(const AnsiIDName &name,bool create)
{
GraphModule *gm;
if(graph_module_map.Get(name,gm))
return gm;
if(create)
{
gm=CreateGraphModule(name,this);
if(gm)
graph_module_map.Add(name,gm);
return gm;
}
return nullptr;
}
GraphModuleManager::~GraphModuleManager()
{
for(auto *gm:graph_module_map)
{
delete gm->value;
}
}
void GraphModuleManager::OnResize(const VkExtent2D &extent)
{
if(graph_module_map.IsEmpty())
return;
for(auto *gm:graph_module_map)
{
gm->value->OnResize(extent);
}
return module_manager->GetDevice()->GetDeviceAttribute();
}
VK_NAMESPACE_END

View File

@ -0,0 +1,111 @@
#include<hgl/graph/module/GraphModule.h>
#include<hgl/type/Map.h>
VK_NAMESPACE_BEGIN
namespace
{
using GraphModuleManagerMap=Map<GPUDevice *,GraphModuleManager *>;
static GraphModuleManagerMap *graph_module_manager_map=nullptr;
}
GraphModuleManager *InitGraphModuleManager(GPUDevice *dev)
{
if(!dev)
return(nullptr);
if(graph_module_manager_map)
{
if(graph_module_manager_map->ContainsKey(dev))
return(nullptr);
}
else
{
graph_module_manager_map=new GraphModuleManagerMap;
}
GraphModuleManager *gmm=new GraphModuleManager(dev);
graph_module_manager_map->Add(dev,gmm);
return gmm;
}
bool ClearGraphModuleManager(GPUDevice *dev)
{
if(!dev)
return(false);
if(!graph_module_manager_map)
return(false);
GraphModuleManager *gmm;
if(!graph_module_manager_map->Get(dev,gmm))
return(false);
graph_module_manager_map->DeleteByKey(dev);
delete gmm;
return(true);
}
GraphModuleManager *GetGraphModuleManager(GPUDevice *dev)
{
if(!dev)
return(nullptr);
if(!graph_module_manager_map)
return(nullptr);
GraphModuleManager *gmm;
if(graph_module_manager_map->Get(dev,gmm))
return gmm;
return(nullptr);
}
GraphModule *CreateGraphModule(const AnsiIDName &name,GraphModuleManager *gmm);
GraphModule *GraphModuleManager::GetModule(const AnsiIDName &name,bool create)
{
GraphModule *gm;
if(graph_module_map.Get(name,gm))
return gm;
if(create)
{
gm=CreateGraphModule(name,this);
if(gm)
graph_module_map.Add(name,gm);
return gm;
}
return nullptr;
}
GraphModuleManager::~GraphModuleManager()
{
for(auto *gm:graph_module_map)
{
delete gm->value;
}
}
void GraphModuleManager::OnResize(const VkExtent2D &extent)
{
if(graph_module_map.IsEmpty())
return;
for(auto *gm:graph_module_map)
{
gm->value->OnResize(extent);
}
}
VK_NAMESPACE_END