40 cullDescritpor.
_modules.push_back(computeDescriptor);
52 computeDescriptor.
_variant =
"ResetCounter";
53 cullDescritpor.
_modules.push_back(computeDescriptor);
64 computeDescriptor.
_sourceFile =
"lightBuildClusteredAABBs.glsl";
67 buildDescritpor.
_modules.push_back(computeDescriptor);
68 buildDescritpor.
_globalDefines.emplace_back(
"inverseProjectionMatrix PushData0" );
69 buildDescritpor.
_globalDefines.emplace_back(
"viewport ivec4(PushData1[0])" );
70 buildDescritpor.
_globalDefines.emplace_back(
"_zPlanes PushData1[1].xy" );
164 GFX::EnqueueCommand<GFX::BeginDebugScopeCommand>(bufferInOut)->_scopeName =
"Renderer Cull Lights";
168 auto cmd = GFX::EnqueueCommand<GFX::BindShaderResourcesCommand>( bufferInOut );
171 const size_t stageIndex =
to_size( stage );
178 Set(binding.
_data,
LightPool::LightBuffer(), {stageIndex * Config::Lighting::MAX_ACTIVE_LIGHTS_PER_FRAME, Config::Lighting::MAX_ACTIVE_LIGHTS_PER_FRAME } );
198 auto cmd = GFX::EnqueueCommand<GFX::BindShaderResourcesCommand>(bufferInOut);
203 GFX::EnqueueCommand<GFX::BeginDebugScopeCommand>( bufferInOut )->_scopeName =
"Renderer Reset Global Index Count";
205 GFX::EnqueueCommand<GFX::MemoryBarrierCommand>( bufferInOut )->_bufferLocks.emplace_back(
BufferLock
212 GFX::EnqueueCommand<GFX::DispatchComputeCommand>( bufferInOut )->_computeGroupSize = { 1u, 1u, 1u };
213 GFX::EnqueueCommand<GFX::MemoryBarrierCommand>( bufferInOut )->_bufferLocks.emplace_back(
BufferLock
220 GFX::EnqueueCommand<GFX::EndDebugScopeCommand>( bufferInOut );
223 bool needRebuild = data.
_invalidated || g_rebuildLightGridEachFrame;
231 needRebuild = data.
_gridData != tempData;
242 GFX::EnqueueCommand<GFX::BeginDebugScopeCommand>( bufferInOut )->_scopeName =
"Renderer Rebuild Light Grid";
244 GFX::EnqueueCommand<GFX::MemoryBarrierCommand>( bufferInOut )->_bufferLocks.emplace_back(
BufferLock
252 PushConstantsStruct& pushConstants = GFX::EnqueueCommand<GFX::SendPushConstantsCommand>( bufferInOut )->_fastData;
256 GFX::EnqueueCommand<GFX::DispatchComputeCommand>(bufferInOut)->_computeGroupSize =
263 GFX::EnqueueCommand<GFX::MemoryBarrierCommand>( bufferInOut )->_bufferLocks.emplace_back(
BufferLock
270 GFX::EnqueueCommand<GFX::EndDebugScopeCommand>( bufferInOut );
274 GFX::EnqueueCommand<GFX::MemoryBarrierCommand>( bufferInOut )->_bufferLocks.emplace_back(
BufferLock
282 GFX::EnqueueCommand<GFX::DispatchComputeCommand>(bufferInOut)->_computeGroupSize =
290 auto memCmd = GFX::EnqueueCommand<GFX::MemoryBarrierCommand>( bufferInOut );
312 GFX::EnqueueCommand<GFX::EndDebugScopeCommand>(bufferInOut);
323 _postFX->updateResolution(newWidth, newHeight);
328 return _zPlanes != other._zPlanes ||
329 _viewport != other._viewport ||
330 _invProjectionMatrix != other._invProjectionMatrix;
#define WAIT_FOR_CONDITION(...)
#define PROFILE_SCOPE_AUTO(CATEGORY)
ShaderBuffer_uptr newSB(const ShaderBufferDescriptor &descriptor)
Pipeline * newPipeline(const PipelineDescriptor &descriptor)
Create and return a new graphics pipeline. This is only used for caching and doesn't use the object a...
static ShaderBuffer * LightBuffer()
static ShaderBuffer * SceneBuffer()
PlatformContext & context() noexcept
PlatformContext & _context
GFXDevice & gfx() noexcept
Configuration & config() noexcept
void updateResolution(U16 newWidth, U16 newHeight) const
Renderer(PlatformContext &context)
Handle< ShaderProgram > _lightCullComputeShader
Handle< ShaderProgram > _lightCounterResetComputeShader
void idle(const U64 deltaTimeUSGame) const
void prepareLighting(RenderStage stage, const Rect< I32 > &viewport, const CameraSnapshot &cameraSnapshot, GFX::CommandBuffer &bufferInOut)
std::array< PerRenderStageData, to_base(RenderStage::COUNT) - 1 > _lightDataPerStage
Handle< ShaderProgram > _lightBuildClusteredAABBsComputeShader
GFX::BindPipelineCommand _lightCullPipelineCmd
GFX::BindPipelineCommand _lightResetCounterPipelineCmd
GFX::BindPipelineCommand _lightBuildClusteredAABBsPipelineCmd
constexpr U8 CLUSTERS_Y_THREADS
constexpr U8 CLUSTERS_X_THREADS
constexpr U8 CLUSTERS_Z_THREADS
constexpr U8 CLUSTERS_X
Controls compute shader dispatch. e.g. Dispatch Z count = CLUSTERS_Z / CLUSTERS_Z_THREADS.
FORCE_INLINE T * EnqueueCommand(CommandBuffer &buffer)
constexpr Optick::Category::Type Graphics
const char * RenderStageToString(const RenderStage stage) noexcept
Str StringFormat(const char *fmt, Args &&...args)
constexpr bool g_rebuildLightGridEachFrame
Handle console commands that start with a forward slash.
constexpr U32 to_U32(const T value)
FORCE_INLINE void DestroyResource(Handle< T > &handle, const bool immediate=false)
void Set(DescriptorSetBindingData &dataInOut, ShaderBuffer *buffer, const BufferRange range) noexcept
DescriptorSetBinding & AddBinding(DescriptorSet &setInOut, U8 slot, U16 stageVisibilityMask)
FORCE_INLINE Handle< T > CreateResource(const ResourceDescriptor< T > &descriptor, bool &wasInCache, std::atomic_uint &taskCounter)
@ FILTER_SS_AMBIENT_OCCLUSION
constexpr size_t to_size(const T value)
constexpr auto to_base(const Type value) -> Type
BufferUpdateUsage _updateUsage
BufferUsageType _usageType
BufferUpdateFrequency _updateFrequency
size_t _elementSize
Buffer primitive size in bytes.
mat4< F32 > _invProjectionMatrix
struct Divide::Configuration::Rendering::PostFX::SSAO ssao
struct Divide::Configuration::Rendering::PostFX::DOF dof
struct Divide::Configuration::Rendering::PostFX::MotionBlur motionBlur
struct Divide::Configuration::Rendering::PostFX::PostAA postAA
struct Divide::Configuration::Rendering::PostFX::Bloom bloom
struct Divide::Configuration::Rendering::PostFX::SSR ssr
struct Divide::Configuration::Rendering::PostFX postFX
struct Divide::Configuration::Rendering rendering
DescriptorSetBindingData _data
const Pipeline * _pipeline
PrimitiveTopology _primitiveTopology
Handle< ShaderProgram > _shaderProgramHandle
vector< ShaderModuleDescriptor > _modules
ModuleDefines _globalDefines
mat4< F32 > _invProjectionMatrix
bool operator!=(const GridBuildData &other) const noexcept
ShaderBuffer_uptr _globalIndexCountBuffer
ShaderBuffer_uptr _lightClusterAABBsBuffer
ShaderBuffer_uptr _lightGridBuffer
ShaderBuffer_uptr _lightIndexBuffer
struct Divide::Renderer::PerRenderStageData::GridBuildData _gridData
BufferParams _bufferParams