// Copyright (C) 2023 Jérôme "Lynix" Leclercq (lynix680@gmail.com) // This file is part of the "Nazara Engine - Graphics module" // For conditions of distribution and use, see copyright notice in Config.hpp #pragma once #ifndef NAZARA_GRAPHICS_PIPELINEPASSLIST_HPP #define NAZARA_GRAPHICS_PIPELINEPASSLIST_HPP #include #include #include #include #include #include #include #include #include namespace Nz { class FrameGraph; class NAZARA_GRAPHICS_API PipelinePassList { public: PipelinePassList() = default; PipelinePassList(const PipelinePassList&) = delete; PipelinePassList(PipelinePassList&&) = delete; ~PipelinePassList() = default; inline std::size_t AddAttachment(FramePassAttachment attachment); inline std::size_t AddPass(std::string name, std::size_t implIndex, ParameterList parameterList = {}); std::vector> BuildPasses(FramePipelinePass::PassData& passData) const; std::size_t RegisterPasses(const std::vector>& passes, FrameGraph& frameGraph) const; inline void SetFinalOutput(std::size_t attachmentIndex); inline void SetPassInput(std::size_t passIndex, std::size_t inputIndex, std::size_t attachmentIndex); inline void SetPassOutput(std::size_t passIndex, std::size_t outputIndex, std::size_t attachmentIndex); inline void SetPassDepthStencilInput(std::size_t passIndex, std::size_t attachmentIndex); inline void SetPassDepthStencilOutput(std::size_t passIndex, std::size_t attachmentIndex); PipelinePassList& operator=(const PipelinePassList&) = delete; PipelinePassList& operator=(PipelinePassList&&) = delete; static constexpr std::size_t MaxPassAttachment = 8; private: static constexpr std::size_t NoAttachment = std::numeric_limits::max(); struct Pass { FixedVector inputs; FixedVector outputs; std::size_t depthStencilInput = NoAttachment; std::size_t depthStencilOutput = NoAttachment; std::size_t implIndex; std::string name; ParameterList parameterList; }; std::size_t m_finalOutputAttachment; std::vector m_attachments; std::vector m_passes; }; } #include #endif // NAZARA_GRAPHICS_PIPELINEPASSLIST_HPP