33#ifndef DVD_RENDER_PASS_EXECUTOR_H_
34#define DVD_RENDER_PASS_EXECUTOR_H_
45struct RenderStagePass;
46struct RenderPassParams;
50class RenderPassManager;
51class RenderingComponent;
74 void reset() noexcept;
94 size_t _hash{ INVALID_MAT_HASH };
95 U16 _framesSinceLastUsed{ g_invalidMaterialIndex };
110 std::array<bool, Config::MAX_VISIBLE_NODES> _freeList{};
124 template<
typename DataContainer>
133 ShaderBuffer_uptr _gpuBuffer{
nullptr };
134 U32 _queueLength{ Config::MAX_FRAMES_IN_FLIGHT + 1u };
159 size_t visibleNodeCount,
167 bool prePassExecuted,
203 bool hasInvalidNodes,
204 const bool doPrePass,
205 const bool doOITPass,
Rough around the edges Adapter pattern abstracting the actual rendering API and access to the GPU.
eastl::fixed_vector< RenderingComponent *, Config::MAX_VISIBLE_NODES, false > SortedQueue
std::array< SortedQueue, to_base(RenderBinType::COUNT)> SortedQueues
static constexpr U8 MATERIAL_IDX
ExecutorBuffer< BufferIndirectionData > _indirectionBuffer
static constexpr U8 SELECTION_FLAG
static constexpr size_t INVALID_TEX_HASH
static void OnRenderingComponentCreation(RenderingComponent *rComp)
bool validateNodesForStagePass(RenderStagePass stagePass)
static void OnRenderingComponentDestruction(RenderingComponent *rComp)
void woitPass(const RenderPassParams ¶ms, const CameraSnapshot &cameraSnapshot, GFX::CommandBuffer &bufferInOut, GFX::MemoryBarrierCommand &memCmdInOut)
static Mutex s_indirectionGlobalLock
RenderQueuePackages _renderQueuePackages
ExecutorBuffer< BufferMaterialData > _materialBuffer
U16 processVisibleNodeMaterial(RenderingComponent *rComp, bool &cacheHit)
void transparencyPass(const RenderPassParams ¶ms, const CameraSnapshot &cameraSnapshot, GFX::CommandBuffer &bufferInOut, GFX::MemoryBarrierCommand &memCmdInOut)
void postInit(Handle< ShaderProgram > OITCompositionShader, Handle< ShaderProgram > OITCompositionShaderMS, Handle< ShaderProgram > ResolveGBufferShaderMS)
static bool s_globalDataInit
static Pipeline * s_OITCompositionPipeline
ExecutorBuffer< BufferTransformData > _transformBuffer
std::array< NodeIndirectionData, MAX_INDIRECTION_ENTRIES > BufferIndirectionData
static constexpr U8 TEXTURES_IDX
static constexpr U16 g_invalidMaterialIndex
void processVisibleNodeTransform(PlayerIndex index, RenderingComponent *rComp)
static constexpr U32 MAX_INDIRECTION_ENTRIES
void mainPass(const RenderPassParams ¶ms, const CameraSnapshot &cameraSnapshot, RenderTarget &target, bool prePassExecuted, bool hasHiZ, GFX::CommandBuffer &bufferInOut, GFX::MemoryBarrierCommand &memCmdInOut)
static constexpr size_t INVALID_MAT_HASH
void occlusionPass(PlayerIndex idx, const CameraSnapshot &cameraSnapshot, size_t visibleNodeCount, const RenderTargetID &sourceDepthBuffer, const RenderTargetID &targetHiZBuffer, GFX::CommandBuffer &bufferInOut) const
static constexpr U32 g_invalidTexturesIndex
static Pipeline * s_OITCompositionMSPipeline
size_t prepareNodeData(PlayerIndex index, const RenderPassParams ¶ms, const CameraSnapshot &cameraSnapshot, bool hasInvalidNodes, const bool doPrePass, const bool doOITPass, GFX::CommandBuffer &bufferInOut, GFX::MemoryBarrierCommand &memCmdInOut)
RenderPassManager & _parent
void resolveMainScreenTarget(const RenderPassParams ¶ms, GFX::CommandBuffer &bufferInOut) const
void doCustomPass(PlayerIndex idx, Camera *camera, RenderPassParams params, GFX::CommandBuffer &bufferInOut, GFX::MemoryBarrierCommand &memCmdInOut)
static void OnShutdown(const GFXDevice &gfx)
size_t buildDrawCommands(PlayerIndex index, const RenderPassParams ¶ms, bool doPrePass, bool doOITPass, GFX::CommandBuffer &bufferInOut, GFX::MemoryBarrierCommand &memCmdInOut)
U32 renderQueueSize() const
RenderQueue_uptr _renderQueue
ShaderBuffer_uptr _cmdBuffer
DrawCommandContainer _drawCommands
VisibleNodeList _visibleNodesCache
static constexpr U8 TRANSFORM_IDX
RenderBin::SortedQueues _sortedQueues
void prePass(const RenderPassParams ¶ms, const CameraSnapshot &cameraSnapshot, GFX::CommandBuffer &bufferInOut, GFX::MemoryBarrierCommand &memCmdInOut)
void parseMaterialRange(RenderBin::SortedQueue &queue, U32 start, U32 end)
static Pipeline * s_ResolveGBufferPipeline
static std::array< bool, MAX_INDIRECTION_ENTRIES > s_indirectionFreeList
void prepareRenderQueues(const RenderPassParams ¶ms, const CameraSnapshot &cameraSnapshot, bool transparencyPass, RenderingOrder renderOrder, GFX::CommandBuffer &bufferInOut, GFX::MemoryBarrierCommand &memCmdInOut)
static void OnStartup(const GFXDevice &gfx)
This class manages all of the RenderBins and renders them in the correct order.
constexpr U16 MAX_CONCURRENT_MATERIALS
Estimated maximum number of materials used in a single frame by all passes combined.
Handle console commands that start with a forward slash.
eastl::fixed_vector< RenderQueuePackage, Config::MAX_VISIBLE_NODES, false > RenderQueuePackages
std::shared_mutex SharedMutex
eastl::vector< Type > vector
eastl::fixed_vector< IndirectIndexedDrawCommand, Config::MAX_VISIBLE_NODES, false > DrawCommandContainer
std::array< NodeMaterialData, Config::MAX_CONCURRENT_MATERIALS > MaterialDataContainer
std::array< LookupInfo, Config::MAX_CONCURRENT_MATERIALS > LookupInfoContainer
U32 range() const noexcept
eastl::fixed_vector< U32, MAX_INDIRECTION_ENTRIES, false > _nodeProcessedThisFrame
SharedMutex _nodeProcessedLock
ExecutorBufferRange _range
BufferUpdateRange _bufferUpdateRangePrev
vector< BufferUpdateRange > _bufferUpdateRangeHistory
BufferUpdateRange _bufferUpdateRange