Foundation
Loading...
Searching...
No Matches
RenderPass.hpp
Go to the documentation of this file.
1#pragma once
2#include <RHICore/Command.hpp>
4#include <RHICore/Device.hpp>
7{
8 using namespace RHI;
9 class Renderer;
10 using PassHandle = size_t; // Index in the pass definitions vector
11 using ResourceHandle = size_t; // Index in the resource definitions vector
15 class RenderPass : public RHIObject
16 {
17 public:
22 RenderPass() = default;
30 virtual void Setup(PassHandle self, Renderer* r) = 0;
41 };
46 {
47 void operator()(PassHandle, Renderer*) const { /* nop */ }
48 };
53 {
54 void operator()(PassHandle, Renderer*, RHICommandList*) const { /* nop */ }
55 };
61 template <typename FSetup, typename FRecord>
77 {
79 PassHandle handle; // Index to tracked passes
80 int priority{0}; // Higher priority passes are scheduled earlier
81 // The queue to run this pass on
83 bool used{false}; // Culled?
84 // Backbuffer specializations
86 Optional<int> backbufferUAV; // opt: set index
87 // Uses compute shader? (not necessarily in a compute queue)
88 // Should be mutually exclusive with write_backbuffer and other graphics states
89 bool isComputePass{false};
90 // Local size for compute/mesh shaders
92 size_t depth{}; // Depth in RG
93 size_t ord{}; // Execution order
94 size_t frameExec{}; // Last frame this pass is executed
95 /* -- Resources -- */
96 Vector<PassHandle> bindPasses; // Referenced, explicit pass execute-before.
99 textureUsages; // Referenced texture sub resources
101 RHIPipelineStage>> bufferUsages; // Referenced buffers
102 // Unique referenced resources (tex/buf)
104 // Unique texture views
106 /* -- Pipeline -- */
107 // Shader [path, entry point, stage, specialization data]
109 // Bind points [view(tex) or buffer(buf), desc type, binding point]
111 // External Bind Sets [binding point, layout ptr, set index (set when built)]
112 // Sorted lexicographically if the pipeline is built.
114 // Samplers
116 // Push Constant
118 // Specialization Constants by [stage, offset, value]
120 // (Graphics Only) Render Target View[s], Blending Op
122 // (Graphics Only) Depth Stencil View
124 // (Graphics Only) Vertex Input assembly
127 /* --- */
131 /* -- Pipeline states (built at PSO setup) -- */
132 int groupIndex{}; // executionGroup index
133 // All stages used in this pass
135 // Pipeline states for the entire pass
137 // PSO Creation parameters
140 // Layouts created by ourselves
142 // Pointers. Can also contain external sets
144 // Sets created by ourselves
146 // Pointers. Can also contain external sets
148 // [Set Index, Set, Layout], correspond to externalBindings
150
151 void ResetPipeline();
152 };
153}
General Purpose Allocator (GPA) interface.
Definition Allocator.hpp:24
Definition Command.hpp:35
Base class for all RHI objects.
Definition Details.hpp:16
Scoped move-only RAII handle wrapper for RHI Objects.
Definition Details.hpp:86
Interface for a render pass.
Definition RenderPass.hpp:16
virtual void Setup(PassHandle self, Renderer *r)=0
Perform any setup required for this pass. This may include creating resources, declaring resource acc...
RenderPass()=default
Constructor. You may also create resources here for early setup. However, access declaration must be ...
virtual void Record(PassHandle self, Renderer *r, RHICommandList *cmd)=0
Record the commands of this pass into the given command list.
Renderer implementing a Frame Graph system with automatic resource tracking and synchronization.
Definition Renderer.hpp:78
std::vector< T, StlAllocator< T > > Vector
std::vector with explicit Foundation::Core::StlAllocator constructor
Definition Container.hpp:130
std::basic_string< char > String
Alias for std::basic_string<char>, without an explicit allocator constructor.
Definition Container.hpp:112
std::tuple< Args... > Tuple
Alias for std::tuple
Definition Container.hpp:38
std::basic_string_view< char > StringView
Alias for std::basic_string_view<char>
Definition Container.hpp:55
std::unique_ptr< T, Deleter > UniquePtr
std::unique_ptr with custom deleter that uses a Foundation::Core::Allocator to deallocate memory.
Definition Allocator.hpp:166
T * Construct(Allocator *resource, Args &&...args)
Convenience placement new with object of type T using a Foundation::Core::Allocator.
Definition Allocator.hpp:149
std::optional< T > Optional
Alias for std::optional
Definition Container.hpp:26
RHITextureLayout
Definition Common.hpp:144
RHIDeviceQueueType
Definition Common.hpp:107
static constexpr Handle kInvalidHandle
Definition Details.hpp:9
Core functionalities for rendering, including the Frame Graph implementation.
Definition Bindless.cpp:2
size_t ResourceHandle
Definition RenderPass.hpp:11
size_t PassHandle
Definition RenderPass.hpp:10
Default "no-op" functor for Record()
Definition RenderPass.hpp:53
void operator()(PassHandle, Renderer *, RHICommandList *) const
Definition RenderPass.hpp:54
Default "no-op" functor for Setup()
Definition RenderPass.hpp:46
void operator()(PassHandle, Renderer *) const
Definition RenderPass.hpp:47
Functional wrapper for a render pass.
Definition RenderPass.hpp:63
LambdaPass(FSetup &&setup, FRecord &&record)
Definition RenderPass.hpp:66
void Record(PassHandle self, Renderer *r, RHICommandList *cmd) override
Record the commands of this pass into the given command list.
Definition RenderPass.hpp:71
FRecord mRecord
Definition RenderPass.hpp:65
void Setup(PassHandle self, Renderer *r) override
Perform any setup required for this pass. This may include creating resources, declaring resource acc...
Definition RenderPass.hpp:70
FSetup mSetup
Definition RenderPass.hpp:64
Internal tracking information for a render pass in the frame graph.
Definition RenderPass.hpp:77
size_t frameExec
Definition RenderPass.hpp:94
int priority
Definition RenderPass.hpp:80
RHIPipelineState::PipelineStateDesc::DepthStencil psoDepthStencil
Definition RenderPass.hpp:139
ResourceHandle dsv
Definition RenderPass.hpp:123
Vector< RHIPipelineState::PipelineStateDesc::VertexInput::Binding > vertexInputBindings
Definition RenderPass.hpp:125
Vector< RHIDeviceDescriptorSetLayout * > pDescriptorLayouts
Definition RenderPass.hpp:143
RHIPipelineStageBits piplineStages
Definition RenderPass.hpp:134
Vector< Tuple< ResourceHandle, RHIResourceAccess, RHIPipelineStage, RHITextureSubresourceRange, RHITextureLayout > > textureUsages
Definition RenderPass.hpp:99
UniquePtr< RenderPass > pass
Definition RenderPass.hpp:128
Vector< RHIDeviceDescriptorSet * > pDescriptorSets
Definition RenderPass.hpp:147
RHIDeviceQueueType queue
Definition RenderPass.hpp:82
RHIPipelineState::PipelineStateDesc::Rasterizer psoRasterizer
Definition RenderPass.hpp:138
int groupIndex
Definition RenderPass.hpp:132
size_t ord
Definition RenderPass.hpp:93
Vector< Tuple< String, String, RHIShaderStage, Vector< char > > > shaders
Definition RenderPass.hpp:108
Vector< Tuple< ResourceHandle, RHIDescriptorType, String > > textureBindings
Definition RenderPass.hpp:110
Vector< Pair< ResourceHandle, String > > samplers
Definition RenderPass.hpp:115
RHIDeviceScopedHandle< RHIPipelineState > pso
Definition RenderPass.hpp:136
Vector< RHIDeviceScopedHandle< RHIDeviceDescriptorSetLayout > > descriptorLayouts
Definition RenderPass.hpp:141
Vector< RHIPipelineState::PipelineStateDesc::PushConstant > pushConstants
Definition RenderPass.hpp:117
Optional< RHIPipelineState::PipelineStateDesc::Attachment::Blending > backbufferRTV
Definition RenderPass.hpp:85
bool used
Definition RenderPass.hpp:83
Vector< RHIVertexAttribute > vertexInputAttributes
Definition RenderPass.hpp:126
Vector< Tuple< ResourceHandle, RHIDescriptorType, String > > bufferBindings
Definition RenderPass.hpp:110
Vector< Tuple< size_t, RHIDeviceDescriptorSetLayout * > > pExternalDescriptorSets
Definition RenderPass.hpp:149
Vector< Tuple< RHIShaderStage, size_t, Vector< char > > > specializationConstants
Definition RenderPass.hpp:119
Vector< RHIDeviceDescriptorPoolScopedHandle< RHIDeviceDescriptorSet > > descriptorSets
Definition RenderPass.hpp:145
PassHandle handle
Definition RenderPass.hpp:79
Tuple< uint32_t, uint32_t, uint32_t > groupLocalSize
Definition RenderPass.hpp:91
Vector< ResourceHandle > texviews
Definition RenderPass.hpp:105
Vector< Tuple< ResourceHandle, RHIResourceAccess, RHIPipelineStage > > bufferUsages
Definition RenderPass.hpp:101
Optional< int > backbufferUAV
Definition RenderPass.hpp:86
size_t depth
Definition RenderPass.hpp:92
Vector< PassHandle > bindPasses
Definition RenderPass.hpp:96
Vector< Pair< ResourceHandle, RHIPipelineState::PipelineStateDesc::Attachment::Blending > > rtvs
Definition RenderPass.hpp:121
bool isComputePass
Definition RenderPass.hpp:89
Vector< ResourceHandle > resources
Definition RenderPass.hpp:103
String name
Definition RenderPass.hpp:78
Vector< Tuple< String, RHIDeviceDescriptorSetLayout *, int > > externalBindings
Definition RenderPass.hpp:113
void ResetPipeline()
Definition RenderPass.cpp:11