|
@@ -7,7 +7,6 @@
|
|
|
#include <anki/renderer/Renderer.h>
|
|
#include <anki/renderer/Renderer.h>
|
|
|
#include <anki/renderer/Bloom.h>
|
|
#include <anki/renderer/Bloom.h>
|
|
|
#include <anki/renderer/TemporalAA.h>
|
|
#include <anki/renderer/TemporalAA.h>
|
|
|
-#include <anki/renderer/MotionBlur.h>
|
|
|
|
|
#include <anki/renderer/Tonemapping.h>
|
|
#include <anki/renderer/Tonemapping.h>
|
|
|
#include <anki/renderer/LightShading.h>
|
|
#include <anki/renderer/LightShading.h>
|
|
|
#include <anki/renderer/GBuffer.h>
|
|
#include <anki/renderer/GBuffer.h>
|
|
@@ -36,7 +35,6 @@ Error FinalComposite::initInternal(const ConfigSet& config)
|
|
|
ANKI_ASSERT("Initializing PPS");
|
|
ANKI_ASSERT("Initializing PPS");
|
|
|
|
|
|
|
|
ANKI_CHECK(loadColorGradingTexture("engine_data/DefaultLut.ankitex"));
|
|
ANKI_CHECK(loadColorGradingTexture("engine_data/DefaultLut.ankitex"));
|
|
|
- m_sharpenEnabled = config.getNumber("r.finalComposite.sharpen");
|
|
|
|
|
|
|
|
|
|
if(!m_r->getDrawToDefaultFramebuffer())
|
|
if(!m_r->getDrawToDefaultFramebuffer())
|
|
|
{
|
|
{
|
|
@@ -59,11 +57,8 @@ Error FinalComposite::initInternal(const ConfigSet& config)
|
|
|
// Progs
|
|
// Progs
|
|
|
ANKI_CHECK(getResourceManager().loadResource("shaders/FinalComposite.glslp", m_prog));
|
|
ANKI_CHECK(getResourceManager().loadResource("shaders/FinalComposite.glslp", m_prog));
|
|
|
|
|
|
|
|
- ShaderProgramResourceMutationInitList<4> mutations(m_prog);
|
|
|
|
|
- mutations.add("BLUE_NOISE", 1)
|
|
|
|
|
- .add("SHARPEN_ENABLED", m_sharpenEnabled)
|
|
|
|
|
- .add("BLOOM_ENABLED", 1)
|
|
|
|
|
- .add("DBG_ENABLED", 0);
|
|
|
|
|
|
|
+ ShaderProgramResourceMutationInitList<3> mutations(m_prog);
|
|
|
|
|
+ mutations.add("BLUE_NOISE", 1).add("BLOOM_ENABLED", 1).add("DBG_ENABLED", 0);
|
|
|
|
|
|
|
|
ShaderProgramResourceConstantValueInitList<2> consts(m_prog);
|
|
ShaderProgramResourceConstantValueInitList<2> consts(m_prog);
|
|
|
consts.add("LUT_SIZE", U32(LUT_SIZE)).add("FB_SIZE", UVec2(m_r->getWidth(), m_r->getHeight()));
|
|
consts.add("LUT_SIZE", U32(LUT_SIZE)).add("FB_SIZE", UVec2(m_r->getWidth(), m_r->getHeight()));
|
|
@@ -72,7 +67,7 @@ Error FinalComposite::initInternal(const ConfigSet& config)
|
|
|
m_prog->getOrCreateVariant(mutations.get(), consts.get(), variant);
|
|
m_prog->getOrCreateVariant(mutations.get(), consts.get(), variant);
|
|
|
m_grProgs[0] = variant->getProgram();
|
|
m_grProgs[0] = variant->getProgram();
|
|
|
|
|
|
|
|
- mutations[3].m_value = 1;
|
|
|
|
|
|
|
+ mutations[2].m_value = 1;
|
|
|
m_prog->getOrCreateVariant(mutations.get(), consts.get(), variant);
|
|
m_prog->getOrCreateVariant(mutations.get(), consts.get(), variant);
|
|
|
m_grProgs[1] = variant->getProgram();
|
|
m_grProgs[1] = variant->getProgram();
|
|
|
|
|
|
|
@@ -108,24 +103,39 @@ void FinalComposite::run(RenderingContext& ctx, RenderPassWorkContext& rgraphCtx
|
|
|
const Bool dbgEnabled = m_r->getDbg().getEnabled();
|
|
const Bool dbgEnabled = m_r->getDbg().getEnabled();
|
|
|
const Bool drawToDefaultFb = m_r->getDrawToDefaultFramebuffer();
|
|
const Bool drawToDefaultFb = m_r->getDrawToDefaultFramebuffer();
|
|
|
|
|
|
|
|
|
|
+ cmdb->bindShaderProgram(m_grProgs[dbgEnabled]);
|
|
|
|
|
+
|
|
|
// Bind stuff
|
|
// Bind stuff
|
|
|
- rgraphCtx.bindColorTextureAndSampler(
|
|
|
|
|
- 0, 0, m_r->getMotionBlur().getRt(), (drawToDefaultFb) ? m_r->getNearestSampler() : m_r->getLinearSampler());
|
|
|
|
|
|
|
+ rgraphCtx.bindColorTextureAndSampler(0, 0, m_r->getTemporalAA().getRt(), m_r->getLinearSampler());
|
|
|
|
|
|
|
|
rgraphCtx.bindColorTextureAndSampler(0, 1, m_r->getBloom().getRt(), m_r->getLinearSampler());
|
|
rgraphCtx.bindColorTextureAndSampler(0, 1, m_r->getBloom().getRt(), m_r->getLinearSampler());
|
|
|
cmdb->bindTextureAndSampler(
|
|
cmdb->bindTextureAndSampler(
|
|
|
0, 2, m_lut->getGrTextureView(), m_r->getLinearSampler(), TextureUsageBit::SAMPLED_FRAGMENT);
|
|
0, 2, m_lut->getGrTextureView(), m_r->getLinearSampler(), TextureUsageBit::SAMPLED_FRAGMENT);
|
|
|
cmdb->bindTextureAndSampler(
|
|
cmdb->bindTextureAndSampler(
|
|
|
0, 3, m_blueNoise->getGrTextureView(), m_blueNoise->getSampler(), TextureUsageBit::SAMPLED_FRAGMENT);
|
|
0, 3, m_blueNoise->getGrTextureView(), m_blueNoise->getSampler(), TextureUsageBit::SAMPLED_FRAGMENT);
|
|
|
|
|
+ rgraphCtx.bindColorTextureAndSampler(0, 4, m_r->getGBuffer().getColorRt(3), m_r->getNearestSampler());
|
|
|
|
|
+ rgraphCtx.bindTextureAndSampler(0,
|
|
|
|
|
+ 5,
|
|
|
|
|
+ m_r->getGBuffer().getDepthRt(),
|
|
|
|
|
+ TextureSubresourceInfo(DepthStencilAspectBit::DEPTH),
|
|
|
|
|
+ m_r->getNearestSampler());
|
|
|
|
|
+
|
|
|
if(dbgEnabled)
|
|
if(dbgEnabled)
|
|
|
{
|
|
{
|
|
|
- rgraphCtx.bindColorTextureAndSampler(0, 5, m_r->getDbg().getRt(), m_r->getLinearSampler());
|
|
|
|
|
|
|
+ rgraphCtx.bindColorTextureAndSampler(0, 6, m_r->getDbg().getRt(), m_r->getLinearSampler());
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
rgraphCtx.bindUniformBuffer(0, 1, m_r->getTonemapping().getAverageLuminanceBuffer());
|
|
rgraphCtx.bindUniformBuffer(0, 1, m_r->getTonemapping().getAverageLuminanceBuffer());
|
|
|
|
|
|
|
|
- Vec4* uniforms = allocateAndBindUniforms<Vec4*>(sizeof(Vec4), cmdb, 0, 0);
|
|
|
|
|
- uniforms->x() = F32(m_r->getFrameCount() % m_blueNoise->getLayerCount());
|
|
|
|
|
|
|
+ struct PushConsts
|
|
|
|
|
+ {
|
|
|
|
|
+ Vec4 m_blueNoiseLayerPad3;
|
|
|
|
|
+ Mat4 m_prevViewProjMatMulInvViewProjMat;
|
|
|
|
|
+ } pconsts;
|
|
|
|
|
+ pconsts.m_blueNoiseLayerPad3.x() = F32(m_r->getFrameCount() % m_blueNoise->getLayerCount());
|
|
|
|
|
+ pconsts.m_prevViewProjMatMulInvViewProjMat = ctx.m_matrices.m_jitter * ctx.m_prevMatrices.m_viewProjection
|
|
|
|
|
+ * ctx.m_matrices.m_viewProjectionJitter.getInverse();
|
|
|
|
|
+ cmdb->setPushConstants(&pconsts, sizeof(pconsts));
|
|
|
|
|
|
|
|
U width, height;
|
|
U width, height;
|
|
|
if(drawToDefaultFb)
|
|
if(drawToDefaultFb)
|
|
@@ -140,7 +150,6 @@ void FinalComposite::run(RenderingContext& ctx, RenderPassWorkContext& rgraphCtx
|
|
|
}
|
|
}
|
|
|
cmdb->setViewport(0, 0, width, height);
|
|
cmdb->setViewport(0, 0, width, height);
|
|
|
|
|
|
|
|
- cmdb->bindShaderProgram(m_grProgs[dbgEnabled]);
|
|
|
|
|
drawQuad(cmdb);
|
|
drawQuad(cmdb);
|
|
|
|
|
|
|
|
// Draw UI
|
|
// Draw UI
|
|
@@ -184,8 +193,10 @@ void FinalComposite::populateRenderGraph(RenderingContext& ctx)
|
|
|
{
|
|
{
|
|
|
pass.newConsumer({m_r->getDbg().getRt(), TextureUsageBit::SAMPLED_FRAGMENT});
|
|
pass.newConsumer({m_r->getDbg().getRt(), TextureUsageBit::SAMPLED_FRAGMENT});
|
|
|
}
|
|
}
|
|
|
- pass.newConsumer({m_r->getMotionBlur().getRt(), TextureUsageBit::SAMPLED_FRAGMENT});
|
|
|
|
|
pass.newConsumer({m_r->getBloom().getRt(), TextureUsageBit::SAMPLED_FRAGMENT});
|
|
pass.newConsumer({m_r->getBloom().getRt(), TextureUsageBit::SAMPLED_FRAGMENT});
|
|
|
|
|
+
|
|
|
|
|
+ pass.newConsumer({m_r->getGBuffer().getColorRt(3), TextureUsageBit::SAMPLED_FRAGMENT});
|
|
|
|
|
+ pass.newConsumer({m_r->getGBuffer().getDepthRt(), TextureUsageBit::SAMPLED_FRAGMENT});
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
} // end namespace anki
|
|
} // end namespace anki
|