|
|
@@ -92,6 +92,44 @@ Error FinalComposite::loadColorGradingTextureImage(CString filename)
|
|
|
return Error::NONE;
|
|
|
}
|
|
|
|
|
|
+void FinalComposite::populateRenderGraph(RenderingContext& ctx)
|
|
|
+{
|
|
|
+ RenderGraphDescription& rgraph = ctx.m_renderGraphDescr;
|
|
|
+ m_runCtx.m_ctx = &ctx;
|
|
|
+
|
|
|
+ // Create the pass
|
|
|
+ GraphicsRenderPassDescription& pass = rgraph.newGraphicsRenderPass("Final Composite");
|
|
|
+
|
|
|
+ pass.setWork(
|
|
|
+ [](RenderPassWorkContext& rgraphCtx) {
|
|
|
+ FinalComposite* self = static_cast<FinalComposite*>(rgraphCtx.m_userData);
|
|
|
+ self->run(*self->m_runCtx.m_ctx, rgraphCtx);
|
|
|
+ },
|
|
|
+ this, 0);
|
|
|
+ pass.setFramebufferInfo(m_fbDescr, {ctx.m_outRenderTarget}, {});
|
|
|
+
|
|
|
+ pass.newDependency({ctx.m_outRenderTarget, TextureUsageBit::FRAMEBUFFER_ATTACHMENT_WRITE});
|
|
|
+
|
|
|
+ if(m_r->getDbg().getEnabled())
|
|
|
+ {
|
|
|
+ pass.newDependency({m_r->getDbg().getRt(), TextureUsageBit::SAMPLED_FRAGMENT});
|
|
|
+ }
|
|
|
+
|
|
|
+ pass.newDependency({m_r->getScale().getRt(), TextureUsageBit::SAMPLED_FRAGMENT});
|
|
|
+ pass.newDependency({m_r->getBloom().getRt(), TextureUsageBit::SAMPLED_FRAGMENT});
|
|
|
+ pass.newDependency({m_r->getMotionVectors().getMotionVectorsRt(), TextureUsageBit::SAMPLED_FRAGMENT});
|
|
|
+ pass.newDependency({m_r->getGBuffer().getDepthRt(), TextureUsageBit::SAMPLED_FRAGMENT});
|
|
|
+
|
|
|
+ RenderTargetHandle dbgRt;
|
|
|
+ Bool dbgRtValid;
|
|
|
+ ShaderProgramPtr debugProgram;
|
|
|
+ m_r->getCurrentDebugRenderTarget(dbgRt, dbgRtValid, debugProgram);
|
|
|
+ if(dbgRtValid)
|
|
|
+ {
|
|
|
+ pass.newDependency({dbgRt, TextureUsageBit::SAMPLED_FRAGMENT});
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
void FinalComposite::run(RenderingContext& ctx, RenderPassWorkContext& rgraphCtx)
|
|
|
{
|
|
|
CommandBufferPtr& cmdb = rgraphCtx.m_commandBuffer;
|
|
|
@@ -118,36 +156,27 @@ void FinalComposite::run(RenderingContext& ctx, RenderPassWorkContext& rgraphCtx
|
|
|
// Bind stuff
|
|
|
if(!dbgRtValid)
|
|
|
{
|
|
|
- rgraphCtx.bindUniformBuffer(0, 0, m_r->getTonemapping().getAverageLuminanceBuffer());
|
|
|
-
|
|
|
- cmdb->bindSampler(0, 1, m_r->getSamplers().m_nearestNearestClamp);
|
|
|
- cmdb->bindSampler(0, 2, m_r->getSamplers().m_trilinearClamp);
|
|
|
- cmdb->bindSampler(0, 3, m_r->getSamplers().m_trilinearRepeat);
|
|
|
+ cmdb->bindSampler(0, 0, m_r->getSamplers().m_nearestNearestClamp);
|
|
|
+ cmdb->bindSampler(0, 1, m_r->getSamplers().m_trilinearClamp);
|
|
|
+ cmdb->bindSampler(0, 2, m_r->getSamplers().m_trilinearRepeat);
|
|
|
|
|
|
- rgraphCtx.bindColorTexture(0, 4, m_r->getScale().getRt());
|
|
|
+ rgraphCtx.bindColorTexture(0, 3, m_r->getScale().getRt());
|
|
|
|
|
|
- rgraphCtx.bindColorTexture(0, 5, m_r->getBloom().getRt());
|
|
|
- cmdb->bindTexture(0, 6, m_lut->getTextureView());
|
|
|
- cmdb->bindTexture(0, 7, m_blueNoise->getTextureView());
|
|
|
- rgraphCtx.bindColorTexture(0, 8, m_r->getMotionVectors().getMotionVectorsRt());
|
|
|
- rgraphCtx.bindTexture(0, 9, m_r->getGBuffer().getDepthRt(),
|
|
|
+ rgraphCtx.bindColorTexture(0, 4, m_r->getBloom().getRt());
|
|
|
+ cmdb->bindTexture(0, 5, m_lut->getTextureView());
|
|
|
+ cmdb->bindTexture(0, 6, m_blueNoise->getTextureView());
|
|
|
+ rgraphCtx.bindColorTexture(0, 7, m_r->getMotionVectors().getMotionVectorsRt());
|
|
|
+ rgraphCtx.bindTexture(0, 8, m_r->getGBuffer().getDepthRt(),
|
|
|
TextureSubresourceInfo(DepthStencilAspectBit::DEPTH));
|
|
|
|
|
|
if(dbgEnabled)
|
|
|
{
|
|
|
- rgraphCtx.bindColorTexture(0, 10, m_r->getDbg().getRt());
|
|
|
+ rgraphCtx.bindColorTexture(0, 9, m_r->getDbg().getRt());
|
|
|
}
|
|
|
|
|
|
- class PushConsts
|
|
|
- {
|
|
|
- public:
|
|
|
- UVec4 m_frameCountPad3;
|
|
|
- Mat4 m_prevViewProjMatMulInvViewProjMat;
|
|
|
- } pconsts;
|
|
|
- pconsts.m_frameCountPad3.x() = m_r->getFrameCount() & MAX_U32;
|
|
|
- pconsts.m_prevViewProjMatMulInvViewProjMat = ctx.m_matrices.m_jitter * ctx.m_prevMatrices.m_viewProjection
|
|
|
- * ctx.m_matrices.m_viewProjectionJitter.getInverse();
|
|
|
- cmdb->setPushConstants(&pconsts, sizeof(pconsts));
|
|
|
+ UVec4 frameCountPad3;
|
|
|
+ frameCountPad3.x() = m_r->getFrameCount() & MAX_U32;
|
|
|
+ cmdb->setPushConstants(&frameCountPad3, sizeof(frameCountPad3));
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
@@ -162,42 +191,4 @@ void FinalComposite::run(RenderingContext& ctx, RenderPassWorkContext& rgraphCtx
|
|
|
m_r->getUiStage().draw(ctx.m_outRenderTargetWidth, ctx.m_outRenderTargetHeight, ctx, cmdb);
|
|
|
}
|
|
|
|
|
|
-void FinalComposite::populateRenderGraph(RenderingContext& ctx)
|
|
|
-{
|
|
|
- RenderGraphDescription& rgraph = ctx.m_renderGraphDescr;
|
|
|
- m_runCtx.m_ctx = &ctx;
|
|
|
-
|
|
|
- // Create the pass
|
|
|
- GraphicsRenderPassDescription& pass = rgraph.newGraphicsRenderPass("Final Composite");
|
|
|
-
|
|
|
- pass.setWork(
|
|
|
- [](RenderPassWorkContext& rgraphCtx) {
|
|
|
- FinalComposite* self = static_cast<FinalComposite*>(rgraphCtx.m_userData);
|
|
|
- self->run(*self->m_runCtx.m_ctx, rgraphCtx);
|
|
|
- },
|
|
|
- this, 0);
|
|
|
- pass.setFramebufferInfo(m_fbDescr, {ctx.m_outRenderTarget}, {});
|
|
|
-
|
|
|
- pass.newDependency({ctx.m_outRenderTarget, TextureUsageBit::FRAMEBUFFER_ATTACHMENT_WRITE});
|
|
|
-
|
|
|
- if(m_r->getDbg().getEnabled())
|
|
|
- {
|
|
|
- pass.newDependency({m_r->getDbg().getRt(), TextureUsageBit::SAMPLED_FRAGMENT});
|
|
|
- }
|
|
|
-
|
|
|
- pass.newDependency({m_r->getScale().getRt(), TextureUsageBit::SAMPLED_FRAGMENT});
|
|
|
- pass.newDependency({m_r->getBloom().getRt(), TextureUsageBit::SAMPLED_FRAGMENT});
|
|
|
- pass.newDependency({m_r->getMotionVectors().getMotionVectorsRt(), TextureUsageBit::SAMPLED_FRAGMENT});
|
|
|
- pass.newDependency({m_r->getGBuffer().getDepthRt(), TextureUsageBit::SAMPLED_FRAGMENT});
|
|
|
-
|
|
|
- RenderTargetHandle dbgRt;
|
|
|
- Bool dbgRtValid;
|
|
|
- ShaderProgramPtr debugProgram;
|
|
|
- m_r->getCurrentDebugRenderTarget(dbgRt, dbgRtValid, debugProgram);
|
|
|
- if(dbgRtValid)
|
|
|
- {
|
|
|
- pass.newDependency({dbgRt, TextureUsageBit::SAMPLED_FRAGMENT});
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
} // end namespace anki
|