|
|
@@ -34,9 +34,11 @@ Error HalfDepth::init(const ConfigSet&)
|
|
|
fbInit.m_depthStencilAttachment.m_texture = m_depthRt;
|
|
|
fbInit.m_depthStencilAttachment.m_loadOperation = AttachmentLoadOperation::DONT_CARE;
|
|
|
fbInit.m_depthStencilAttachment.m_aspect = DepthStencilAspectBit::DEPTH;
|
|
|
-
|
|
|
m_fb = gr.newInstance<Framebuffer>(fbInit);
|
|
|
|
|
|
+ ANKI_CHECK(getResourceManager().loadResource("shaders/DepthDownscaleHalf.frag.glsl", m_frag));
|
|
|
+ m_r->createDrawQuadShaderProgram(m_frag->getGrShader(), m_prog);
|
|
|
+
|
|
|
return ErrorCode::NONE;
|
|
|
}
|
|
|
|
|
|
@@ -61,7 +63,7 @@ void HalfDepth::run(RenderingContext& ctx)
|
|
|
CommandBufferPtr& cmdb = ctx.m_commandBuffer;
|
|
|
|
|
|
cmdb->beginRenderPass(m_fb);
|
|
|
- cmdb->bindShaderProgram(m_parent->m_prog);
|
|
|
+ cmdb->bindShaderProgram(m_prog);
|
|
|
cmdb->bindTexture(0, 0, m_r->getMs().m_depthRt);
|
|
|
|
|
|
cmdb->setViewport(0, 0, m_r->getWidth() / 2, m_r->getHeight() / 2);
|
|
|
@@ -85,23 +87,23 @@ Error QuarterDepth::init(const ConfigSet&)
|
|
|
U width = m_r->getWidth() / 4;
|
|
|
U height = m_r->getHeight() / 4;
|
|
|
|
|
|
- // Create RT
|
|
|
m_r->createRenderTarget(width,
|
|
|
height,
|
|
|
- MS_DEPTH_ATTACHMENT_PIXEL_FORMAT,
|
|
|
- TextureUsageBit::FRAMEBUFFER_ATTACHMENT_READ_WRITE | TextureUsageBit::SAMPLED_FRAGMENT,
|
|
|
+ PixelFormat(ComponentFormat::R32, TransformFormat::FLOAT),
|
|
|
+ TextureUsageBit::FRAMEBUFFER_ATTACHMENT_WRITE | TextureUsageBit::SAMPLED_FRAGMENT,
|
|
|
SamplingFilter::LINEAR,
|
|
|
1,
|
|
|
m_depthRt);
|
|
|
|
|
|
- // Create FB
|
|
|
FramebufferInitInfo fbInit;
|
|
|
- fbInit.m_depthStencilAttachment.m_texture = m_depthRt;
|
|
|
- fbInit.m_depthStencilAttachment.m_loadOperation = AttachmentLoadOperation::DONT_CARE;
|
|
|
- fbInit.m_depthStencilAttachment.m_aspect = DepthStencilAspectBit::DEPTH;
|
|
|
-
|
|
|
+ fbInit.m_colorAttachments[0].m_texture = m_depthRt;
|
|
|
+ fbInit.m_colorAttachments[0].m_loadOperation = AttachmentLoadOperation::DONT_CARE;
|
|
|
+ fbInit.m_colorAttachmentCount = 1;
|
|
|
m_fb = gr.newInstance<Framebuffer>(fbInit);
|
|
|
|
|
|
+ ANKI_CHECK(getResourceManager().loadResource("shaders/DepthDownscaleQuarter.frag.glsl", m_frag));
|
|
|
+ m_r->createDrawQuadShaderProgram(m_frag->getGrShader(), m_prog);
|
|
|
+
|
|
|
return ErrorCode::NONE;
|
|
|
}
|
|
|
|
|
|
@@ -117,7 +119,7 @@ void QuarterDepth::setPostRunBarriers(RenderingContext& ctx)
|
|
|
{
|
|
|
ctx.m_commandBuffer->setTextureSurfaceBarrier(m_depthRt,
|
|
|
TextureUsageBit::FRAMEBUFFER_ATTACHMENT_WRITE,
|
|
|
- TextureUsageBit::SAMPLED_FRAGMENT | TextureUsageBit::FRAMEBUFFER_ATTACHMENT_READ,
|
|
|
+ TextureUsageBit::SAMPLED_FRAGMENT,
|
|
|
TextureSurfaceInfo(0, 0, 0, 0));
|
|
|
}
|
|
|
|
|
|
@@ -126,18 +128,14 @@ void QuarterDepth::run(RenderingContext& ctx)
|
|
|
CommandBufferPtr& cmdb = ctx.m_commandBuffer;
|
|
|
|
|
|
cmdb->beginRenderPass(m_fb);
|
|
|
- cmdb->bindShaderProgram(m_parent->m_prog);
|
|
|
+ cmdb->bindShaderProgram(m_prog);
|
|
|
cmdb->bindTexture(0, 0, m_parent->m_hd.m_depthRt);
|
|
|
|
|
|
cmdb->setViewport(0, 0, m_r->getWidth() / 4, m_r->getHeight() / 4);
|
|
|
- cmdb->setDepthCompareOperation(CompareOperation::ALWAYS);
|
|
|
|
|
|
m_r->drawQuad(cmdb);
|
|
|
|
|
|
cmdb->endRenderPass();
|
|
|
-
|
|
|
- // Restore state
|
|
|
- cmdb->setDepthCompareOperation(CompareOperation::LESS);
|
|
|
}
|
|
|
|
|
|
DepthDownscale::~DepthDownscale()
|
|
|
@@ -146,12 +144,6 @@ DepthDownscale::~DepthDownscale()
|
|
|
|
|
|
Error DepthDownscale::initInternal(const ConfigSet& cfg)
|
|
|
{
|
|
|
- // Create shader
|
|
|
- ANKI_CHECK(getResourceManager().loadResource("shaders/DepthDownscale.frag.glsl", m_frag));
|
|
|
-
|
|
|
- // Create prog
|
|
|
- m_r->createDrawQuadShaderProgram(m_frag->getGrShader(), m_prog);
|
|
|
-
|
|
|
ANKI_CHECK(m_hd.init(cfg));
|
|
|
ANKI_CHECK(m_qd.init(cfg));
|
|
|
return ErrorCode::NONE;
|