132 class RenderGraphPassNode;
241 std::unordered_map<std::string, std::unique_ptr<RenderGraphImageNode>>
m_imageNodes;
254 const std::vector<std::string>& groupMembers,
255 std::unordered_map<Image*, ImageState>& imageStates);
258 const std::vector<std::string>& groupMembers,
259 const std::unordered_map<Image*, ImageState>& imageStates);
305 std::map<std::string, std::set<std::string>>& dependencies)
const;
306 std::vector<std::string>
topologicalSort(
const std::map<std::string, std::set<std::string>>& dependencies)
const;
323 template<
typename Func>
339 template<
typename... Args>
359 std::vector<TextureEdge*>
getTextureEdges(
const std::string& passName)
const;
365 const std::string& groupLeader);
void unsubscribe(SubscribeId subscribeId)
SubscribeId subscribe(Func &&func)
void simulateExecutionAndAnalyzeBarriers()
void simulatePassGroupExecution(const std::string &groupLeader, const std::vector< std::string > &groupMembers, std::unordered_map< Image *, ImageState > &imageStates)
RenderGraph(Device *device, FlowControl *flowControl, CommandBufferGraph *commandBufferGraph, ResourceManager *resourceManager)
void createTextureEdge(const std::string &passName, const std::string &textureName, const Texture &texture)
std::unordered_map< std::string, Image * > m_allocatedImages
void unsubscribe(SubscribeId subscribeId)
void analyzePassGroupBarriers()
std::map< std::string, std::set< std::string > > m_passGroupDependencies
std::unordered_map< std::string, std::unique_ptr< RenderGraphImageNode > > m_imageNodes
SubscribeId subscribe(std::string passName, Func &&func)
void addPass(std::string name, Args &&... args)
void allocateCommandBuffer()
Device * m_resourceDevice
FlowControl * m_flowControl
std::vector< TextureEdge * > getTextureEdges(const std::string &passName) const
void computePassGroupExecutionOrder()
RenderGraphImageNode * getOrCreateImageNode(const std::string &name, const Texture &texture)
void addPass(const PassDesc &desc)
void submitPassGroup(RHI::CommandBuffer *cmdBuffer, const std::string &groupLeader)
RHI::Pass * getPass(const std::string &name) const
void executeBarriers(RHI::CommandBuffer *cmdBuffer, const std::vector< BarrierInfo > &barriers)
CommandBufferGraph * m_commandBufferGraph
Image * getImage(const std::string &name) const
std::unordered_map< std::string, RHI::PassGroup * > m_allocatedPassGroups
std::unordered_map< std::string, RenderGraphPassNode > m_passNodes
ResourceManager * m_resourceManager
std::vector< std::string > m_passGroupExecutionOrder
std::vector< std::unique_ptr< Edge > > m_edges
uint32_t m_commandBufferIndex
UnionFind< std::string, char > m_passesUnions
std::unordered_map< std::string, std::vector< BarrierInfo > > m_passGroupBarriers
void executeAllPassGroups(RHI::CommandBuffer *cmdBuffer)
PipelineStage convertShaderStageToPipelineStage(ShaderStage stage) const
std::vector< std::string > topologicalSort(const std::map< std::string, std::set< std::string > > &dependencies) const
std::vector< BarrierInfo > checkBarriersBeforePassGroup(const std::string &groupLeader, const std::vector< std::string > &groupMembers, const std::unordered_map< Image *, ImageState > &imageStates)
std::unordered_map< std::string, RHI::Pass * > m_allocatedPasses
void createDepthStencilEdge(const std::string &passName, const std::string &depthStencilName, const DepthStencil &depthStencil)
void analyzePassGroupDependencies(const std::string &groupLeader, const std::vector< std::string > &groupMembers, std::map< std::string, std::set< std::string > > &dependencies) const
void resolveTextureSizes()
void createTargetEdge(const std::string &passName, const std::string &targetName, const Target &target)
std::unordered_map< std::string, std::vector< std::string > > m_passGroupOrders
CommandBufferToken m_commandBufferToken
RenderGraphImageNode(const std::string &name)
std::vector< TargetEdge * > m_targetIncomingEdges
uint32_t m_depthStencilOrderCounter
void addOutgoingEdge(TextureEdge *edge)
virtual Image * getImage() const =0
virtual RenderGraphImageNode & operator|=(const DepthStencil &other)=0
const std::vector< TargetEdge * > & getTargetIncomingEdges() const
uint32_t m_targetOrderCounter
std::vector< DepthStencilEdge * > m_depthStencilIncomingEdges
const std::vector< DepthStencilEdge * > & getDepthStencilIncomingEdges() const
std::vector< TextureEdge * > m_textureOutgoingEdges
virtual RenderGraphImageNode & operator|=(const Texture &other)=0
void addIncomingEdge(TargetEdge *edge)
const std::vector< TextureEdge * > & getTextureOutgoingEdges() const
void addIncomingEdge(DepthStencilEdge *edge)
virtual void fillDefaultData()=0
RenderGraphImageNode()=default
virtual RenderGraphImageNode & operator|=(const Target &other)=0
RenderGraphNode()=default
RenderGraphNode(const std::string &name)
void addOutgoingEdge(DepthStencilEdge *edge)
std::vector< TargetEdge * > m_targetOutgoingEdges
EnablePassClear m_clearInfo
const std::vector< DepthStencilEdge * > & getDepthStencilOutgoingEdges() const
std::vector< TextureEdge * > m_textureIncomingEdges
RenderGraphPassNode(std::string name)
void addOutgoingEdge(TargetEdge *edge)
std::vector< DepthStencilEdge * > m_depthStencilOutgoingEdges
const std::vector< TextureEdge * > & getTextureIncomingEdges() const
const std::vector< TargetEdge * > & getTargetOutgoingEdges() const
void applyPassDesc(const PassDesc &desc)
void addIncomingEdge(TextureEdge *edge)
const EnablePassClear & getClearInfo() const
constexpr const char * RenderGraphSubmit
CommandBufferNodes::CommandBuffer * CommandBufferToken
void processArgs(const EnablePassClear &other, Rest &&... rest)
RHI::CommandBuffer * cmdBuf
ImageLayout currentLayout
std::string lastWriterGroup