FCT
载入中...
搜索中...
未找到
FCT::RenderGraph类 参考

#include <RenderGraph.h>

类 FCT::RenderGraph 继承关系图:
Inheritance graph
FCT::RenderGraph 的协作图:
Collaboration graph

struct  BarrierInfo
struct  ImageState

Public 成员函数

 RenderGraph (PipeHub &pipeHub, Device *device, FlowControl *flowControl, CommandBufferGraph *commandBufferGraph, ResourceManager *resourceManager)
 ~RenderGraph ()
void recompile ()
std::vector< PassDescgetOriginalPasses () const
void clearOriginalPasses ()
template<typename Func>
SubscribeId subscribe (std::string passName, Func &&func)
void unsubscribe (SubscribeId subscribeId)
template<typename... Args>
void addPass (std::string name, Args &&... args)
void addPassDesc (const PassDesc &desc)
void buildGraph ()
void compile ()
void pushPipe ()
void executeAllPassGroups (RHI::CommandBuffer *cmdBuffer)
RHI::PassgetPass (const std::string &name) const
ImagegetImage (const std::string &name) const
std::vector< TextureEdge * > getTextureEdges (const std::string &passName) const

Private 成员函数

void initForSubmit ()
void allocateCommandBuffer ()
void cleanUpCompile ()
PipelineStage convertShaderStageToPipelineStage (ShaderStage stage) const
RenderGraphImageNodegetOrCreateImageNode (const std::string &name, const Texture &texture)
RenderGraphImageNodegetOrCreateImageNode (const std::string &name, const Target &target)
RenderGraphImageNodegetOrCreateImageNode (const std::string &name, const DepthStencil &depthStencil)
void createTextureEdge (const std::string &passName, const std::string &textureName, const Texture &texture)
void createTargetEdge (const std::string &passName, const std::string &targetName, const Target &target)
void createDepthStencilEdge (const std::string &passName, const std::string &depthStencilName, const DepthStencil &depthStencil)
void removeTextureEdge (TextureEdge *edgeToRemove)
void simulatePassGroupExecution (const std::string &groupLeader, const std::vector< std::string > &groupMembers, std::unordered_map< Image *, ImageState > &imageStates)
void simulateExecutionAndAnalyzeBarriers ()
std::vector< BarrierInfocheckBarriersBeforePassGroup (const std::string &groupLeader, const std::vector< std::string > &groupMembers, const std::unordered_map< Image *, ImageState > &imageStates)
void executeBarriers (RHI::CommandBuffer *cmdBuffer, const std::vector< BarrierInfo > &barriers)
void removeTargetEdge (TargetEdge *edgeToRemove)
void removeDepthStencilEdge (DepthStencilEdge *edgeToRemove)
void addPass (const PassDesc &desc)
void cleanUp ()
void resolveTextureSizes ()
void cullPasses ()
void cullPass (const std::string &passName)
void cullSinglePass (const std::string &passName)
void cullUnusedImageNode (const std::string &imageName)
void groupPasses ()
void clearResources ()
void allocateResources ()
void createRHIPasses ()
void analyzePassGroupDependencies (const std::string &groupLeader, const std::vector< std::string > &groupMembers, std::map< std::string, std::set< std::string > > &dependencies) const
std::vector< std::string > topologicalSortPasses () const
std::map< std::string, std::set< std::string > > buildPassDependencyGraph () const
std::vector< std::string > topologicalSort (const std::map< std::string, std::set< std::string > > &dependencies) const
void analyzePassGroupBarriers ()
void computePassGroupExecutionOrder ()
void createPassGroups ()
void submitPassGroup (RHI::CommandBuffer *cmdBuffer, const std::string &groupLeader)
void trigger (const Event &event)
void enqueue (Event &&event)
void update ()
void updateAll ()
SubscribeId subscribe (Func &&func)
void unsubscribeAll ()

静态 Private 成员函数

static constexpr auto getEventTypeId ()

Private 属性

bool m_needRecompiled = false
Devicem_resourceDevice
FlowControlm_flowControl
CommandBufferGraphm_commandBufferGraph
ResourceManagerm_resourceManager
CommandBufferToken m_commandBufferToken
std::unordered_map< std::string, std::vector< std::string > > m_passGroupOrders
std::vector< std::string > m_passGroupExecutionOrder
std::unordered_map< std::string, std::vector< BarrierInfo > > m_passGroupBarriers
std::map< std::string, std::set< std::string > > m_passGroupDependencies
std::unordered_map< std::string, std::unique_ptr< RenderGraphImageNode > > m_imageNodes
std::unordered_map< std::string, RenderGraphPassNodem_passNodes
UnionFind< std::string, char > m_passesUnions
std::unordered_set< std::unique_ptr< Edge > > m_edges
std::unordered_map< std::string, Image * > m_allocatedImages
std::unordered_map< std::string, RHI::Pass * > m_allocatedPasses
std::vector< PassDescm_originalPasses
std::vector< std::string > m_topologicalSortPasses
std::unordered_map< std::string, RHI::PassGroup * > m_allocatedPassGroups
PipeHubpipeHub
std::conditional_t< EventSystemConfig::TriggerOnly::EventAsData, std::unordered_map< entt::id_type, std::unordered_map< SubscribeId, std::unique_ptr< IEventHandler > > >, std::unordered_map< entt::id_type, std::unordered_map< SubscribeId, std::unique_ptr< IEventIdentifierHandler > > > > m_handlers
std::conditional_t< EventSystemConfig::TriggerOnly::EnableQueue, std::unordered_map< entt::id_type, std::vector< std::function< void()> > >, std::monostate > m_eventQueue
SubscribeId m_nextSubscribeId

详细描述

在文件 RenderGraph.h246 行定义.

构造及析构函数说明

◆ RenderGraph()

FCT::RenderGraph::RenderGraph ( PipeHub & pipeHub,
Device * device,
FlowControl * flowControl,
CommandBufferGraph * commandBufferGraph,
ResourceManager * resourceManager )

在文件 RenderGraph.cpp83 行定义.

函数调用图:

◆ ~RenderGraph()

FCT::RenderGraph::~RenderGraph ( )

在文件 RenderGraph.cpp108 行定义.

成员函数说明

◆ addPass() [1/2]

void FCT::RenderGraph::addPass ( const PassDesc & desc)
private

在文件 RenderGraph.cpp320 行定义.

函数调用图:
这是这个函数的调用关系图:

◆ addPass() [2/2]

template<typename... Args>
void FCT::RenderGraph::addPass ( std::string name,
Args &&... args )
inline

在文件 RenderGraph.h414 行定义.

函数调用图:

◆ addPassDesc()

void FCT::RenderGraph::addPassDesc ( const PassDesc & desc)
inline

在文件 RenderGraph.h421 行定义.

◆ allocateCommandBuffer()

void FCT::RenderGraph::allocateCommandBuffer ( )
private

todo: 添加移除机制来支持重新编译

在文件 RenderGraph.cpp37 行定义.

这是这个函数的调用关系图:

◆ allocateResources()

void FCT::RenderGraph::allocateResources ( )
private

在文件 RenderGraph.cpp497 行定义.

函数调用图:
这是这个函数的调用关系图:

◆ analyzePassGroupBarriers()

void FCT::RenderGraph::analyzePassGroupBarriers ( )
private

◆ analyzePassGroupDependencies()

void FCT::RenderGraph::analyzePassGroupDependencies ( const std::string & groupLeader,
const std::vector< std::string > & groupMembers,
std::map< std::string, std::set< std::string > > & dependencies ) const
private

在文件 RenderGraph.cpp625 行定义.

这是这个函数的调用关系图:

◆ buildGraph()

void FCT::RenderGraph::buildGraph ( )
inline

在文件 RenderGraph.h425 行定义.

函数调用图:
这是这个函数的调用关系图:

◆ buildPassDependencyGraph()

std::map< std::string, std::set< std::string > > FCT::RenderGraph::buildPassDependencyGraph ( ) const
private

在文件 RenderGraph.cpp680 行定义.

这是这个函数的调用关系图:

◆ checkBarriersBeforePassGroup()

std::vector< RenderGraph::BarrierInfo > FCT::RenderGraph::checkBarriersBeforePassGroup ( const std::string & groupLeader,
const std::vector< std::string > & groupMembers,
const std::unordered_map< Image *, ImageState > & imageStates )
private

在文件 RenderGraph.cpp941 行定义.

函数调用图:
这是这个函数的调用关系图:

◆ cleanUp()

void FCT::RenderGraph::cleanUp ( )
private

◆ cleanUpCompile()

void FCT::RenderGraph::cleanUpCompile ( )
private

在文件 RenderGraph.cpp1066 行定义.

函数调用图:
这是这个函数的调用关系图:

◆ clearOriginalPasses()

void FCT::RenderGraph::clearOriginalPasses ( )
inline

在文件 RenderGraph.h308 行定义.

◆ clearResources()

void FCT::RenderGraph::clearResources ( )
private

在文件 RenderGraph.cpp488 行定义.

这是这个函数的调用关系图:

◆ compile()

void FCT::RenderGraph::compile ( )
inline

在文件 RenderGraph.h432 行定义.

函数调用图:
这是这个函数的调用关系图:

◆ computePassGroupExecutionOrder()

void FCT::RenderGraph::computePassGroupExecutionOrder ( )
private

在文件 RenderGraph.cpp763 行定义.

函数调用图:
这是这个函数的调用关系图:

◆ convertShaderStageToPipelineStage()

PipelineStage FCT::RenderGraph::convertShaderStageToPipelineStage ( ShaderStage stage) const
private

在文件 RenderGraph.cpp1094 行定义.

这是这个函数的调用关系图:

◆ createDepthStencilEdge()

void FCT::RenderGraph::createDepthStencilEdge ( const std::string & passName,
const std::string & depthStencilName,
const DepthStencil & depthStencil )
private

在文件 RenderGraph.cpp215 行定义.

这是这个函数的调用关系图:

◆ createPassGroups()

void FCT::RenderGraph::createPassGroups ( )
private
注解
创建PassGroup并设置Pass之间的依赖关系 根据m_passesUnions的分组结果创建PassGroup 通过TextureEdge分析Pass之间的依赖关系 设置正确的PipelineStage和AccessFlags 注意点: 1.PassGroup内部在create的时候会把找不到的Pass*设置为external 2.

在文件 RenderGraph.cpp777 行定义.

函数调用图:
这是这个函数的调用关系图:

◆ createRHIPasses()

void FCT::RenderGraph::createRHIPasses ( )
private
注解
创建所有RHI Pass并绑定对应的图片资源 遍历所有pass节点,为每个pass创建RHI::Pass 通过ImageNode的getImage()获取对应的Image并绑定到Pass Target按order绑定,DepthStencil直接绑定,Texture不绑定

在文件 RenderGraph.cpp590 行定义.

函数调用图:
这是这个函数的调用关系图:

◆ createTargetEdge()

void FCT::RenderGraph::createTargetEdge ( const std::string & passName,
const std::string & targetName,
const Target & target )
private

在文件 RenderGraph.cpp196 行定义.

这是这个函数的调用关系图:

◆ createTextureEdge()

void FCT::RenderGraph::createTextureEdge ( const std::string & passName,
const std::string & textureName,
const Texture & texture )
private

在文件 RenderGraph.cpp174 行定义.

函数调用图:
这是这个函数的调用关系图:

◆ cullPass()

void FCT::RenderGraph::cullPass ( const std::string & passName)
private

在文件 RenderGraph.cpp1172 行定义.

函数调用图:
这是这个函数的调用关系图:

◆ cullPasses()

void FCT::RenderGraph::cullPasses ( )
private

在文件 RenderGraph.cpp1120 行定义.

函数调用图:
这是这个函数的调用关系图:

◆ cullSinglePass()

void FCT::RenderGraph::cullSinglePass ( const std::string & passName)
private

◆ cullUnusedImageNode()

void FCT::RenderGraph::cullUnusedImageNode ( const std::string & imageName)
private

◆ enqueue()

void FCT::IEventSystem< EventSystemConfig::TriggerOnly >::enqueue ( Event && event)
inlineinherited

在文件 IEventSystem.h138 行定义.

◆ executeAllPassGroups()

void FCT::RenderGraph::executeAllPassGroups ( RHI::CommandBuffer * cmdBuffer)

在文件 RenderGraph.cpp1409 行定义.

函数调用图:
这是这个函数的调用关系图:

◆ executeBarriers()

void FCT::RenderGraph::executeBarriers ( RHI::CommandBuffer * cmdBuffer,
const std::vector< BarrierInfo > & barriers )
private

在文件 RenderGraph.cpp1106 行定义.

函数调用图:
这是这个函数的调用关系图:

◆ getEventTypeId()

constexpr auto FCT::IEventSystem< EventSystemConfig::TriggerOnly >::getEventTypeId ( )
inlinestaticconstexprprivateinherited

在文件 IEventSystem.h49 行定义.

◆ getImage()

Image * FCT::RenderGraph::getImage ( const std::string & name) const

在文件 RenderGraph.cpp1425 行定义.

◆ getOrCreateImageNode() [1/3]

RenderGraphImageNode * FCT::RenderGraph::getOrCreateImageNode ( const std::string & name,
const DepthStencil & depthStencil )
private

在文件 RenderGraph.cpp153 行定义.

◆ getOrCreateImageNode() [2/3]

RenderGraphImageNode * FCT::RenderGraph::getOrCreateImageNode ( const std::string & name,
const Target & target )
private

在文件 RenderGraph.cpp132 行定义.

◆ getOrCreateImageNode() [3/3]

RenderGraphImageNode * FCT::RenderGraph::getOrCreateImageNode ( const std::string & name,
const Texture & texture )
private

在文件 RenderGraph.cpp118 行定义.

这是这个函数的调用关系图:

◆ getOriginalPasses()

std::vector< PassDesc > FCT::RenderGraph::getOriginalPasses ( ) const
inline

在文件 RenderGraph.h304 行定义.

◆ getPass()

RHI::Pass * FCT::RenderGraph::getPass ( const std::string & name) const

在文件 RenderGraph.cpp1420 行定义.

◆ getTextureEdges()

std::vector< TextureEdge * > FCT::RenderGraph::getTextureEdges ( const std::string & passName) const

在文件 RenderGraph.cpp1434 行定义.

◆ groupPasses()

void FCT::RenderGraph::groupPasses ( )
private
注解
在compile时调用,用于将Pass分组到PassGroup中
  1. 遍历所有pass,首先pass先unite自己
  2. 遍历texture边对应的image和(任一target或depthStencil)是否相同大小
  3. 如果相同大小,找到把texture当target的pass,unite起来
  4. 遍历所有image,遍历他们的target边和depthstencil边,fromPass全部unite起来

在文件 RenderGraph.cpp416 行定义.

函数调用图:
这是这个函数的调用关系图:

◆ initForSubmit()

void FCT::RenderGraph::initForSubmit ( )
private

在文件 RenderGraph.cpp18 行定义.

函数调用图:
这是这个函数的调用关系图:

◆ pushPipe()

void FCT::RenderGraph::pushPipe ( )

在文件 RenderGraph.cpp1244 行定义.

函数调用图:
这是这个函数的调用关系图:

◆ recompile()

void FCT::RenderGraph::recompile ( )

在文件 RenderGraph.cpp357 行定义.

◆ removeDepthStencilEdge()

void FCT::RenderGraph::removeDepthStencilEdge ( DepthStencilEdge * edgeToRemove)
private

在文件 RenderGraph.cpp290 行定义.

这是这个函数的调用关系图:

◆ removeTargetEdge()

void FCT::RenderGraph::removeTargetEdge ( TargetEdge * edgeToRemove)
private

在文件 RenderGraph.cpp262 行定义.

这是这个函数的调用关系图:

◆ removeTextureEdge()

void FCT::RenderGraph::removeTextureEdge ( TextureEdge * edgeToRemove)
private

在文件 RenderGraph.cpp234 行定义.

这是这个函数的调用关系图:

◆ resolveTextureSizes()

void FCT::RenderGraph::resolveTextureSizes ( )
private
注解
在compile调用时执行,遍历每个pass, 然后遍历pass的texture边, 如果TextureSize.type=Undefined, 并且调用对应texture的SizeNode的isSizeDetermined为false, 那么就调用SizeNode的 bool unite(SizeNode* other, const Scale2D& scale = Scale2D()) 把texture和任意一个target或depthStencilunite起来, 如果TextureSize.type=Relative, 不管texture的size决定没有, 把texture和(target或depth stencil 其中的一个)unite起来, 并把传 Scale2D(TextureSize.relativeWidth,TextureSize.relativeHeight) 进去

在文件 RenderGraph.cpp367 行定义.

函数调用图:
这是这个函数的调用关系图:

◆ simulateExecutionAndAnalyzeBarriers()

void FCT::RenderGraph::simulateExecutionAndAnalyzeBarriers ( )
private

在文件 RenderGraph.cpp914 行定义.

函数调用图:
这是这个函数的调用关系图:

◆ simulatePassGroupExecution()

void FCT::RenderGraph::simulatePassGroupExecution ( const std::string & groupLeader,
const std::vector< std::string > & groupMembers,
std::unordered_map< Image *, ImageState > & imageStates )
private

在文件 RenderGraph.cpp1010 行定义.

函数调用图:
这是这个函数的调用关系图:

◆ submitPassGroup()

void FCT::RenderGraph::submitPassGroup ( RHI::CommandBuffer * cmdBuffer,
const std::string & groupLeader )
private

在文件 RenderGraph.cpp887 行定义.

函数调用图:
这是这个函数的调用关系图:

◆ subscribe() [1/2]

SubscribeId FCT::IEventSystem< EventSystemConfig::TriggerOnly >::subscribe ( Func && func)
inlineinherited

在文件 IEventSystem.h192 行定义.

◆ subscribe() [2/2]

template<typename Func>
SubscribeId FCT::RenderGraph::subscribe ( std::string passName,
Func && func )
inline

在文件 RenderGraph.h398 行定义.

函数调用图:

◆ topologicalSort()

std::vector< std::string > FCT::RenderGraph::topologicalSort ( const std::map< std::string, std::set< std::string > > & dependencies) const
private

在文件 RenderGraph.cpp716 行定义.

这是这个函数的调用关系图:

◆ topologicalSortPasses()

std::vector< std::string > FCT::RenderGraph::topologicalSortPasses ( ) const
private

在文件 RenderGraph.cpp674 行定义.

函数调用图:
这是这个函数的调用关系图:

◆ trigger()

void FCT::IEventSystem< EventSystemConfig::TriggerOnly >::trigger ( const Event & event)
inlineinherited

在文件 IEventSystem.h110 行定义.

这是这个函数的调用关系图:

◆ unsubscribe()

void FCT::RenderGraph::unsubscribe ( SubscribeId subscribeId)
inline

在文件 RenderGraph.h409 行定义.

函数调用图:

◆ unsubscribeAll()

void FCT::IEventSystem< EventSystemConfig::TriggerOnly >::unsubscribeAll ( )
inlineinherited

在文件 IEventSystem.h239 行定义.

◆ update()

void FCT::IEventSystem< EventSystemConfig::TriggerOnly >::update ( )
inlineinherited

在文件 IEventSystem.h165 行定义.

◆ updateAll()

void FCT::IEventSystem< EventSystemConfig::TriggerOnly >::updateAll ( )
inlineinherited

在文件 IEventSystem.h180 行定义.

类成员变量说明

◆ m_allocatedImages

std::unordered_map<std::string, Image*> FCT::RenderGraph::m_allocatedImages
private

在文件 RenderGraph.h290 行定义.

◆ m_allocatedPasses

std::unordered_map<std::string, RHI::Pass*> FCT::RenderGraph::m_allocatedPasses
private

在文件 RenderGraph.h291 行定义.

◆ m_allocatedPassGroups

std::unordered_map<std::string, RHI::PassGroup*> FCT::RenderGraph::m_allocatedPassGroups
private

在文件 RenderGraph.h294 行定义.

◆ m_commandBufferGraph

CommandBufferGraph* FCT::RenderGraph::m_commandBufferGraph
private

在文件 RenderGraph.h268 行定义.

◆ m_commandBufferToken

CommandBufferToken FCT::RenderGraph::m_commandBufferToken
private

todo:修改以做多CommandBufferGraph支持

在文件 RenderGraph.h276 行定义.

◆ m_edges

std::unordered_set<std::unique_ptr<Edge> > FCT::RenderGraph::m_edges
private

在文件 RenderGraph.h289 行定义.

◆ m_eventQueue

std::conditional_t<EventSystemConfig::TriggerOnly::EnableQueue, std::unordered_map<entt::id_type, std::vector<std::function<void()> > >, std::monostate> FCT::IEventSystem< EventSystemConfig::TriggerOnly >::m_eventQueue
privateinherited

在文件 IEventSystem.h104 行定义.

◆ m_flowControl

FlowControl* FCT::RenderGraph::m_flowControl
private

在文件 RenderGraph.h267 行定义.

◆ m_handlers

std::conditional_t<EventSystemConfig::TriggerOnly::EventAsData, std::unordered_map<entt::id_type, std::unordered_map<SubscribeId, std::unique_ptr<IEventHandler> > >, std::unordered_map<entt::id_type, std::unordered_map<SubscribeId, std::unique_ptr<IEventIdentifierHandler> > > > FCT::IEventSystem< EventSystemConfig::TriggerOnly >::m_handlers
privateinherited

在文件 IEventSystem.h100 行定义.

◆ m_imageNodes

std::unordered_map<std::string, std::unique_ptr<RenderGraphImageNode> > FCT::RenderGraph::m_imageNodes
private

在文件 RenderGraph.h286 行定义.

◆ m_needRecompiled

bool FCT::RenderGraph::m_needRecompiled = false
private

在文件 RenderGraph.h265 行定义.

◆ m_nextSubscribeId

SubscribeId FCT::IEventSystem< EventSystemConfig::TriggerOnly >::m_nextSubscribeId
privateinherited

在文件 IEventSystem.h106 行定义.

◆ m_originalPasses

std::vector<PassDesc> FCT::RenderGraph::m_originalPasses
private

在文件 RenderGraph.h292 行定义.

◆ m_passesUnions

UnionFind<std::string,char> FCT::RenderGraph::m_passesUnions
private

在文件 RenderGraph.h288 行定义.

◆ m_passGroupBarriers

std::unordered_map<std::string, std::vector<BarrierInfo> > FCT::RenderGraph::m_passGroupBarriers
private

在文件 RenderGraph.h284 行定义.

◆ m_passGroupDependencies

std::map<std::string, std::set<std::string> > FCT::RenderGraph::m_passGroupDependencies
private

在文件 RenderGraph.h285 行定义.

◆ m_passGroupExecutionOrder

std::vector<std::string> FCT::RenderGraph::m_passGroupExecutionOrder
private

在文件 RenderGraph.h281 行定义.

◆ m_passGroupOrders

std::unordered_map<std::string, std::vector<std::string> > FCT::RenderGraph::m_passGroupOrders
private

在文件 RenderGraph.h280 行定义.

◆ m_passNodes

std::unordered_map<std::string,RenderGraphPassNode> FCT::RenderGraph::m_passNodes
private

在文件 RenderGraph.h287 行定义.

◆ m_resourceDevice

Device* FCT::RenderGraph::m_resourceDevice
private

在文件 RenderGraph.h266 行定义.

◆ m_resourceManager

ResourceManager* FCT::RenderGraph::m_resourceManager
private

在文件 RenderGraph.h269 行定义.

◆ m_topologicalSortPasses

std::vector<std::string> FCT::RenderGraph::m_topologicalSortPasses
private

在文件 RenderGraph.h293 行定义.

◆ pipeHub

PipeHub& FCT::RenderGraph::pipeHub
private

在文件 RenderGraph.h296 行定义.


该类的文档由以下文件生成: