Moved few codes to RenderPassManager from GPUDevice
This commit is contained in:
parent
c9855d7dee
commit
25be75eefa
@ -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:
|
||||||
|
@ -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;}
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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释放和申请
|
||||||
|
@ -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
|
|
@ -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;
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user