Files
Seele/src/Engine/Graphics/RenderPass/LightCullingPass.h
T

80 lines
2.5 KiB
C++
Raw Normal View History

2021-05-06 17:02:10 +02:00
#pragma once
#include "RenderPass.h"
2021-05-10 23:57:55 +02:00
#include "Graphics/GraphicsResources.h"
2021-05-06 17:02:10 +02:00
namespace Seele
{
DECLARE_REF(CameraActor)
DECLARE_REF(CameraComponent)
2021-05-10 23:57:55 +02:00
DECLARE_REF(Scene)
DECLARE_REF(Viewport)
2021-05-06 17:02:10 +02:00
class LightCullingPass : public RenderPass
{
public:
2021-05-10 23:57:55 +02:00
LightCullingPass(PRenderGraph renderGraph, const PScene scene, Gfx::PGraphics graphics, Gfx::PViewport viewport, PCameraActor camera);
2021-05-06 17:02:10 +02:00
virtual ~LightCullingPass();
virtual void beginFrame() override;
virtual void render() override;
virtual void endFrame() override;
virtual void publishOutputs() override;
virtual void createRenderPass() override;
static void modifyRenderPassMacros(Map<const char*, const char*>& defines);
private:
2021-05-10 23:57:55 +02:00
void setupFrustums();
2021-05-06 17:02:10 +02:00
static constexpr uint32 BLOCK_SIZE = 8;
2021-05-10 23:57:55 +02:00
static constexpr uint32 INDEX_LIGHT_ENV = 1;
2021-05-06 17:02:10 +02:00
_declspec(align(16)) struct DispatchParams
{
glm::uvec3 numThreadGroups;
uint32_t pad0;
glm::uvec3 numThreads;
uint32_t pad1;
} dispatchParams;
__declspec(align(16)) struct Plane
{
Vector n;
float d;
Vector p0;
Vector p1;
Vector p2;
};
__declspec(align(16)) struct Frustum
{
Plane planes[4];
};
2021-05-10 23:57:55 +02:00
PScene scene;
2021-09-23 10:10:39 +02:00
2021-05-10 23:57:55 +02:00
Gfx::PStructuredBuffer frustumBuffer;
Gfx::PUniformBuffer dispatchParamsBuffer;
Gfx::PUniformBuffer viewParamsBuffer;
Gfx::PDescriptorSet frustumDescriptorSet;
Gfx::PComputeShader frustumShader;
Gfx::PPipelineLayout frustumLayout;
Gfx::PComputePipeline frustumPipeline;
Gfx::PTexture2D depthAttachment;
//Gfx::PTexture2D depthComputeTexture;
Gfx::PStructuredBuffer frustums;
Gfx::PStructuredBuffer oLightIndexCounter;
Gfx::PStructuredBuffer tLightIndexCounter;
Gfx::PStructuredBuffer oLightIndexList;
Gfx::PStructuredBuffer tLightIndexList;
Gfx::PTexture2D oLightGrid;
Gfx::PTexture2D tLightGrid;
2021-06-12 18:51:29 +02:00
Gfx::PStructuredBuffer directLightBuffer;
Gfx::PUniformBuffer numDirLightBuffer;
Gfx::PStructuredBuffer pointLightBuffer;
Gfx::PUniformBuffer numPointLightBuffer;
2021-05-10 23:57:55 +02:00
Gfx::PDescriptorSet lightEnvDescriptorSet;
Gfx::PDescriptorSet cullingDescriptorSet;
Gfx::PDescriptorLayout lightEnvDescriptorLayout;
Gfx::PDescriptorLayout cullingDescriptorLayout;
Gfx::PComputeShader cullingShader;
Gfx::PPipelineLayout cullingLayout;
Gfx::PComputePipeline cullingPipeline;
2021-05-06 17:02:10 +02:00
PCameraComponent source;
};
2021-05-10 23:57:55 +02:00
DEFINE_REF(LightCullingPass)
2021-05-06 17:02:10 +02:00
} // namespace Seele