Adding simple visibility pass

This commit is contained in:
Dynamitos
2024-06-04 21:34:14 +02:00
parent 157368a241
commit ad00e16cf9
10 changed files with 160 additions and 25 deletions
@@ -20,7 +20,9 @@ target_sources(Engine
TextPass.h
TextPass.cpp
UIPass.h
UIPass.cpp)
UIPass.cpp
VisibilityPass.h
VisibilityPass.cpp)
target_sources(Engine
PUBLIC FILE_SET HEADERS
@@ -35,4 +37,5 @@ target_sources(Engine
RenderPass.h
SkyboxRenderPass.h
TextPass.h
UIPass.h)
UIPass.h
VisibilityPass.h)
@@ -40,7 +40,9 @@ void LightCullingPass::beginFrame(const Component::Camera& cam)
.owner = Gfx::QueueType::COMPUTE
}
};
oLightIndexCounter->rotateBuffer(sizeof(uint32));
oLightIndexCounter->updateContents(counterReset);
tLightIndexCounter->rotateBuffer(sizeof(uint32));
tLightIndexCounter->updateContents(counterReset);
oLightIndexCounter->pipelineBarrier(
Gfx::SE_ACCESS_MEMORY_WRITE_BIT, Gfx::SE_PIPELINE_STAGE_TRANSFER_BIT,
@@ -0,0 +1,63 @@
#include "VisibilityPass.h"
using namespace Seele;
VisibilityPass::VisibilityPass(Gfx::PGraphics graphics, PScene scene)
: RenderPass(graphics, scene)
{
}
VisibilityPass::~VisibilityPass()
{
}
void VisibilityPass::beginFrame(const Component::Camera& cam)
{
RenderPass::beginFrame(cam);
visibilityDescriptor->reset();
visibilitySet = visibilityDescriptor->allocateDescriptorSet();
visibilitySet->updateTexture(0, visibilityAttachment->getTexture());
visibliitySet->updateBuffer(StaticMeshVertexData::getInstance()->get)
}
void VisibilityPass::render()
{
}
void VisibilityPass::endFrame()
{
}
void VisibilityPass::publishOutputs()
{
visibilityDescriptor = graphcis->createDescriptorLayout("pVisibilityParams");
visibilityDescriptor->addDescriptorBinding(Gfx::DescriptorBinding{ .binding = 0, .descriptorType = Gfx::SE_DESCRIPTOR_TYPE_SAMPLED_IMAGE, });
visibilityDescriptor->addDescriptorBinding(Gfx::DescriptorBinding{ .binding = 1, .descriptorType = Gfx::SE_DESCRIPTOR_TYPE_STORAGE_BUFFER, .access = Gfx::SE_DESCRIPTOR_ACCESS_READ_WRITE_BIT, });
visibilityDescriptor->create();
visibilityLayout = graphics->createPipelineLayout("VisibilityLayout");
visibilityLayout->addDescriptorLayout(viewParamsLayout);
visibilityLayout->addDescriptorLayout(visibilityDescriptor);
ShaderCreateInfo createInfo = {
.name = "Visibility",
.mainModule = "VisibilityCompute",
.entryPoint = "computeMain",
.rootSignature = visibilityLayout,
};
visibilityShader = graphics->createComputeShader(createInfo);
visibilityLayout->create();
Gfx::ComputePipelineCreateInfo pipelineInfo;
pipelineInfo.computeShader = visibilityShader;
pipelineInfo.pipelineLayout = std::move(visibilityLayout);
visibilityPipeline = graphics->createComputePipeline(std::move(pipelineInfo));
}
void VisibilityPass::createRenderPass()
{
visibilityAttachment = resources->requestRenderTarget("VISIBILITY");
}
@@ -0,0 +1,30 @@
#pragma once
#include "RenderPass.h"
namespace Seele
{
class VisibilityPass : public RenderPass
{
public:
VisibilityPass(Gfx::PGraphics graphics, PScene scene);
VisibilityPass(VisibilityPass&&) = default;
VisibilityPass& operator=(VisibilityPass&&) = default;
virtual ~VisibilityPass();
virtual void beginFrame(const Component::Camera& cam) override;
virtual void render() override;
virtual void endFrame() override;
virtual void publishOutputs() override;
virtual void createRenderPass() override;
uint64 allocate
private:
Gfx::RenderTargetAttachment visibilityAttachment;
Gfx::PDescriptorSet visibilitySet;
Gfx::ODescriptorLayout visibilityDescriptor;
Gfx::OPipelineLayout visibilityLayout;
Gfx::PComputePipeline visibilityPipeline;
// Holds culling information for every meshlet for each instance
Gfx::OShaderBuffer cullingBuffer;
};
DEFINE_REF(VisibilityPass)
}
-2
View File
@@ -117,8 +117,6 @@ namespace Seele
Gfx::OShaderBuffer meshletBuffer;
Gfx::OShaderBuffer vertexIndicesBuffer;
Gfx::OShaderBuffer primitiveIndicesBuffer;
// Holds culling information for every meshlet for each instance
Gfx::OShaderBuffer cullingBuffer;
Gfx::OShaderBuffer cullingOffsetBuffer;
// for legacy pipeline
Gfx::OIndexBuffer indexBuffer;