85 {
87
89
91
92 builder.BeginRenderPass();
93
95
97
98 builder.BindPipeline("PostProcessRenderer.DownSample.Default");
99
100 for (uint32_t i = 0; i < bloomImage->GetMipLevels(); i++)
101 {
102 builder.UpdatePushConstant<uint32_t>([&](auto& push) {
103 push = i;
104 });
105
106 builder.Dispatch((bloomImage->GetWidth() >> i) / 32 + 1, (bloomImage->GetHeight() >> i) / 32 + 1, 1);
107
108 builder.InternalBarriers();
109 }
110
111 builder.BeginNextSubPass("Bloom");
112
114
115 builder.BindPipeline("PostProcessRenderer.Bloom.Default");
116
117 for (int i = bloomImage->GetMipLevels() - 1; i >= 0; i--)
118 {
119 builder.UpdatePushConstant<PostProcessR::BloomPushConstant>([&](auto& push) {
121 push.mipmap = i;
122 push.weight = i == 0 ? 0.08f : 1.0f;
123 });
124
125 builder.Dispatch(((bloomImage->GetWidth() * 2) >> i) / 32 + 1, ((bloomImage->GetHeight() * 2) >> i) / 32 + 1, 1);
126
127 builder.InternalBarriers();
128 }
129
130 builder.BeginNextSubPass("TAA");
131
133
134 builder.BindPipeline("PostProcessRenderer.TAA.Default");
135
136 builder.Dispatch(1, 1, 1);
137
138 builder.InternalBarriers();
139
140 builder.BeginNextSubPass("ToneMapping");
141
143
145
146 builder.BindPipeline("PostProcessRenderer.ToneMapping.Default");
147
148 builder.UpdatePushConstant<uint64_t>([&](auto& push) {
150 });
151
152 builder.Dispatch(sceneColor->GetWidth() / 32 + 1, sceneColor->GetHeight() / 32 + 1, 1);
153
154 builder.InternalBarriers();
155
156 builder.EndRenderPass();
157 }
#define SPICES_PROFILE_ZONE
static DescriptorSetInfo & GetByName(const String2 &name)
Get a DescriptorSetInfo by owner's name.
std::shared_ptr< RendererPass > m_Pass
RendererPass.
std::shared_ptr< Material > GetDefaultMaterial(const std::string &subPassName) const
Get default material using sub pass Name.
std::shared_ptr< RendererResourcePool > m_RendererResourcePool
RendererResourcePool, Passed by instanced.
VulkanState & m_VulkanState
This variable is passed while renderer instanced.
std::array< VkCommandBuffer, MaxFrameInFlight > m_GraphicCommandBuffer