2
3
4
5
26 RendererPassBuilder{
"PostProcess",
this }
42 const auto image = m_RendererResourcePool->AccessRowResource(
"SceneColor").get();
44 DescriptorSetBuilder{
"DownSample",
this }
45 .AddPushConstant(
sizeof(uint32_t))
46 .AddStorageTexture(2, 0, VK_SHADER_STAGE_COMPUTE_BIT, {
"SceneColor" })
47 .AddStorageTextureMipmaps(2, 1, VK_SHADER_STAGE_COMPUTE_BIT,
"Bloom", image->GetFormat(), TextureType::Texture2D, [&](RendererResourceCreateInfo& info) {
48 info.mipLevel = SpicesShader::POST_BLOOM_MIPMAP;
49 info.sizeScale = 0.5f;
53 DescriptorSetBuilder{
"Bloom",
this }
54 .AddPushConstant(
sizeof(PostProcessR::BloomPushConstant))
55 .AddStorageTexture(2, 0, VK_SHADER_STAGE_COMPUTE_BIT, {
"SceneColor" })
56 .AddStorageTextureMipmaps(2, 1, VK_SHADER_STAGE_COMPUTE_BIT,
"Bloom", image->GetFormat(), TextureType::Texture2D, [&](RendererResourceCreateInfo& info) {
57 info.mipLevel = SpicesShader::POST_BLOOM_MIPMAP;
58 info.sizeScale = 0.5f;
62 DescriptorSetBuilder{
"TAA",
this }
65 DescriptorSetBuilder{
"ToneMapping",
this }
66 .AddPushConstant(
sizeof(uint64_t))
67 .AddStorageTexture(2, 0, VK_SHADER_STAGE_COMPUTE_BIT, {
"SceneColor" })
73 VkPipelineLayout& layout ,
79 PipelineBuilder{ subPass, material,
this }
80 .SetPipelineLayout(layout)
88 const auto bloomImage = m_RendererResourcePool->AccessRowResource(
"Bloom").get();
94 builder.BindDescriptorSet(DescriptorSetManager::GetByName(
"PreRenderer"));
96 builder.BindDescriptorSet(DescriptorSetManager::GetByName({ m_Pass->GetName(),
"DownSample" }));
98 builder.BindPipeline(
"PostProcessRenderer.DownSample.Default");
100 for (uint32_t i = 0; i < bloomImage->GetMipLevels(); i++)
102 builder.UpdatePushConstant<uint32_t>([&](
auto& push) {
106 builder.Dispatch((bloomImage->GetWidth() >> i) / 32 + 1, (bloomImage->GetHeight() >> i) / 32 + 1, 1);
108 builder.InternalBarriers();
113 builder.BindDescriptorSet(DescriptorSetManager::GetByName({ m_Pass->GetName(),
"Bloom" }));
115 builder.BindPipeline(
"PostProcessRenderer.Bloom.Default");
117 for (
int i = bloomImage->GetMipLevels() - 1; i >= 0; i--)
120 push.materialAddress = GetDefaultMaterial(
"Bloom")->GetMaterialParamsAddress();
122 push.weight = i == 0 ? 0.08f : 1.0f;
125 builder.Dispatch(((bloomImage->GetWidth() * 2) >> i) / 32 + 1, ((bloomImage->GetHeight() * 2) >> i) / 32 + 1, 1);
127 builder.InternalBarriers();
132 builder.BindDescriptorSet(DescriptorSetManager::GetByName({ m_Pass->GetName(),
"TAA" }));
134 builder.BindPipeline(
"PostProcessRenderer.TAA.Default");
138 builder.InternalBarriers();
142 const auto sceneColor = m_RendererResourcePool->AccessRowResource(
"SceneColor").get();
144 builder.BindDescriptorSet(DescriptorSetManager::GetByName({ m_Pass->GetName(),
"ToneMapping" }));
146 builder.BindPipeline(
"PostProcessRenderer.ToneMapping.Default");
148 builder.UpdatePushConstant<uint64_t>([&](
auto& push) {
149 push = GetDefaultMaterial(
"ToneMapping")->GetMaterialParamsAddress();
152 builder.Dispatch(sceneColor->GetWidth() / 32 + 1, sceneColor->GetHeight() / 32 + 1, 1);
154 builder.InternalBarriers();
#define SPICES_PROFILE_ZONE
uint32_t m_FrameIndex
FrameIndex, varying during 0 - (MaxFrameInFlight - 1). Used almost anywhere.
uint32_t m_ImageIndex
ImageIndex, varying during 0 - (MaxFrameInFlight - 1). Used in swapchain index and framebuffer index.
FrameInfo Class. This class defines the FrameInfo data.
Material Class. This class contains a branch of parameter and shader, also descriptor.
virtual void Render(TimeStep &ts, FrameInfo &frameInfo) override
The interface is inherited from Renderer.
virtual void CreateRendererPass() override
The interface is inherited from Renderer. Create Specific Renderer pass.
virtual void CreateDescriptorSet() override
The interface is inherited from Renderer. Create specific descriptor set for sub pass.
virtual void CreatePipeline(std::shared_ptr< Material > material, VkPipelineLayout &layout, std::shared_ptr< RendererSubPass > subPass) override
The interface is inherited from Renderer. Create Material Specific Pipeline.
PostProcessRenderer Class. This class defines the PostProcess render behaves.
This Class Combines some data relative to sub pass. Usually as a member variable of RendererPass.
void Dispatch(uint32_t x, uint32_t y, uint32_t z) const
Dispatch Compute Shader.
virtual void BeginRenderPass() override
Begin this Renderer's RenderPass.
virtual void BeginNextSubPass(const std::string &subPassName) override
End a preview sub pass and stat next sub pass.
virtual void EndRenderPass() override
End this Renderer's RenderPass.
This class helps to bind pipeline and bind buffer. Specific for pure Compute Renderer....
RendererPassBuilder & EndSubPass()
End recording a sub pass.
void Build() const
Build the RendererPass.
RendererPassBuilder & AddSubPass(const std::string &subPassName, Querier::StatisticsFlags flags=Querier::ALL)
Add a new SubPass to Renderer Pass.
VulkanState & m_VulkanState
This variable is passed while renderer instanced.
This Class handles our engine time step during frames. Global Unique.