Browse Source

Move SSAO in a different place

Panagiotis Christopoulos Charitos 7 years ago
parent
commit
8f99467277

+ 2 - 7
shaders/GBufferPost.glslp

@@ -36,13 +36,12 @@ void main()
 #define LIGHT_SET 0
 #define LIGHT_SET 0
 #define LIGHT_SS_BINDING 0
 #define LIGHT_SS_BINDING 0
 #define LIGHT_UBO_BINDING 0
 #define LIGHT_UBO_BINDING 0
-#define LIGHT_TEX_BINDING 2
+#define LIGHT_TEX_BINDING 1
 #define LIGHT_DECALS
 #define LIGHT_DECALS
 #define LIGHT_COMMON_UNIS
 #define LIGHT_COMMON_UNIS
 #include <shaders/ClusterLightCommon.glsl>
 #include <shaders/ClusterLightCommon.glsl>
 
 
 layout(ANKI_TEX_BINDING(0, 0)) uniform sampler2D u_msDepthRt;
 layout(ANKI_TEX_BINDING(0, 0)) uniform sampler2D u_msDepthRt;
-layout(ANKI_TEX_BINDING(0, 1)) uniform sampler2D u_ssaoTex;
 
 
 layout(location = 0) in Vec2 in_uv;
 layout(location = 0) in Vec2 in_uv;
 layout(location = 1) in Vec2 in_clusterIJ;
 layout(location = 1) in Vec2 in_clusterIJ;
@@ -62,10 +61,6 @@ void main()
 	Vec4 outDiffuse = Vec4(0.0, 0.0, 0.0, 1.0);
 	Vec4 outDiffuse = Vec4(0.0, 0.0, 0.0, 1.0);
 	Vec4 outSpecular = Vec4(0.0, 0.0, 0.0, 1.0);
 	Vec4 outSpecular = Vec4(0.0, 0.0, 0.0, 1.0);
 
 
-	// Sample SSAO
-	F32 ssao = textureLod(u_ssaoTex, in_uv, 0.0).r;
-	outDiffuse.a *= ssao;
-
 	// Get worldPos
 	// Get worldPos
 	F32 depth = textureLod(u_msDepthRt, in_uv, 0.0).r;
 	F32 depth = textureLod(u_msDepthRt, in_uv, 0.0).r;
 	Vec2 ndc = UV_TO_NDC(in_uv);
 	Vec2 ndc = UV_TO_NDC(in_uv);
@@ -84,7 +79,7 @@ void main()
 
 
 	// Process decals
 	// Process decals
 	U32 count = u_lightIndices[idxOffset++];
 	U32 count = u_lightIndices[idxOffset++];
-	if(count == 0 && ssao >= (1.0 - EPSILON))
+	if(count == 0)
 	{
 	{
 		discard;
 		discard;
 	}
 	}

+ 6 - 1
shaders/LightShading.glslp

@@ -38,7 +38,7 @@ void main()
 #define LIGHT_SET 0
 #define LIGHT_SET 0
 #define LIGHT_SS_BINDING 0
 #define LIGHT_SS_BINDING 0
 #define LIGHT_UBO_BINDING 0
 #define LIGHT_UBO_BINDING 0
-#define LIGHT_TEX_BINDING 5
+#define LIGHT_TEX_BINDING 6
 #define LIGHT_INDIRECT
 #define LIGHT_INDIRECT
 #define LIGHT_LIGHTS
 #define LIGHT_LIGHTS
 #define LIGHT_COMMON_UNIS
 #define LIGHT_COMMON_UNIS
@@ -49,6 +49,7 @@ layout(ANKI_TEX_BINDING(0, 1)) uniform sampler2D u_msRt1;
 layout(ANKI_TEX_BINDING(0, 2)) uniform sampler2D u_msRt2;
 layout(ANKI_TEX_BINDING(0, 2)) uniform sampler2D u_msRt2;
 layout(ANKI_TEX_BINDING(0, 3)) uniform sampler2D u_msDepthRt;
 layout(ANKI_TEX_BINDING(0, 3)) uniform sampler2D u_msDepthRt;
 layout(ANKI_TEX_BINDING(0, 4)) uniform sampler2D u_ssrRt;
 layout(ANKI_TEX_BINDING(0, 4)) uniform sampler2D u_ssrRt;
+layout(ANKI_TEX_BINDING(0, 5)) uniform sampler2D u_ssaoRt;
 
 
 layout(location = 0) in Vec2 in_uv;
 layout(location = 0) in Vec2 in_uv;
 layout(location = 1) in Vec2 in_clusterIJ;
 layout(location = 1) in Vec2 in_clusterIJ;
@@ -137,6 +138,10 @@ void main()
 	readGBuffer(u_msRt0, u_msRt1, u_msRt2, in_uv, 0.0, gbuffer);
 	readGBuffer(u_msRt0, u_msRt1, u_msRt2, in_uv, 0.0, gbuffer);
 	gbuffer.m_subsurface = max(gbuffer.m_subsurface, SUBSURFACE_MIN);
 	gbuffer.m_subsurface = max(gbuffer.m_subsurface, SUBSURFACE_MIN);
 
 
+	// SSAO
+	F32 ssao = textureLod(u_ssaoRt, in_uv, 0.0).r;
+	gbuffer.m_diffuse *= ssao;
+
 	// Ambient and emissive color
 	// Ambient and emissive color
 	out_color = gbuffer.m_diffuse * gbuffer.m_emission;
 	out_color = gbuffer.m_diffuse * gbuffer.m_emission;
 
 

+ 0 - 1
shaders/VolumetricFog.glslp

@@ -36,7 +36,6 @@ layout(std140, ANKI_UBO_BINDING(0, 3), row_major) uniform ubo0_
 {
 {
 	Vec4 u_linearizeNoiseTexOffsetLayer;
 	Vec4 u_linearizeNoiseTexOffsetLayer;
 	Vec4 u_fogParticleColorPad1;
 	Vec4 u_fogParticleColorPad1;
-	Mat4 u_prevViewProjMatMulInvViewProjMat2; // TODO Light common ubo has that. Maybe remove it
 };
 };
 
 
 #define u_linearize UNIFORM(u_linearizeNoiseTexOffsetLayer.xy)
 #define u_linearize UNIFORM(u_linearizeNoiseTexOffsetLayer.xy)

+ 1 - 1
src/anki/renderer/Bloom.h

@@ -45,7 +45,7 @@ anki_internal:
 private:
 private:
 	static const Format RT_PIXEL_FORMAT = Format::A2B10G10R10_UNORM_PACK32;
 	static const Format RT_PIXEL_FORMAT = Format::A2B10G10R10_UNORM_PACK32;
 
 
-	Array<U32, 2> m_workgroupSize = {{8, 8}};
+	Array<U32, 2> m_workgroupSize = {{16, 16}};
 
 
 	class
 	class
 	{
 	{

+ 1 - 1
src/anki/renderer/DownscaleBlur.h

@@ -54,7 +54,7 @@ anki_internal:
 
 
 private:
 private:
 	static const Bool m_useCompute = true;
 	static const Bool m_useCompute = true;
-	Array<U32, 2> m_workgroupSize = {{8, 8}};
+	Array<U32, 2> m_workgroupSize = {{16, 16}};
 
 
 	U8 m_passCount = 0; ///< It's also the mip count of the m_rtTex.
 	U8 m_passCount = 0; ///< It's also the mip count of the m_rtTex.
 
 

+ 2 - 6
src/anki/renderer/GBufferPost.cpp

@@ -6,7 +6,6 @@
 #include <anki/renderer/GBufferPost.h>
 #include <anki/renderer/GBufferPost.h>
 #include <anki/renderer/Renderer.h>
 #include <anki/renderer/Renderer.h>
 #include <anki/renderer/GBuffer.h>
 #include <anki/renderer/GBuffer.h>
-#include <anki/renderer/Ssao.h>
 #include <anki/renderer/LightShading.h>
 #include <anki/renderer/LightShading.h>
 #include <anki/misc/ConfigSet.h>
 #include <anki/misc/ConfigSet.h>
 
 
@@ -69,8 +68,6 @@ void GBufferPost::populateRenderGraph(RenderingContext& ctx)
 		TextureUsageBit::SAMPLED_FRAGMENT,
 		TextureUsageBit::SAMPLED_FRAGMENT,
 		TextureSubresourceInfo(DepthStencilAspectBit::DEPTH)});
 		TextureSubresourceInfo(DepthStencilAspectBit::DEPTH)});
 
 
-	rpass.newConsumer({m_r->getSsao().getRt(), TextureUsageBit::SAMPLED_FRAGMENT});
-
 	rpass.newProducer({m_r->getGBuffer().getColorRt(0), TextureUsageBit::FRAMEBUFFER_ATTACHMENT_READ_WRITE});
 	rpass.newProducer({m_r->getGBuffer().getColorRt(0), TextureUsageBit::FRAMEBUFFER_ATTACHMENT_READ_WRITE});
 	rpass.newProducer({m_r->getGBuffer().getColorRt(1), TextureUsageBit::FRAMEBUFFER_ATTACHMENT_READ_WRITE});
 	rpass.newProducer({m_r->getGBuffer().getColorRt(1), TextureUsageBit::FRAMEBUFFER_ATTACHMENT_READ_WRITE});
 }
 }
@@ -92,14 +89,13 @@ void GBufferPost::run(RenderPassWorkContext& rgraphCtx)
 		m_r->getGBuffer().getDepthRt(),
 		m_r->getGBuffer().getDepthRt(),
 		TextureSubresourceInfo(DepthStencilAspectBit::DEPTH),
 		TextureSubresourceInfo(DepthStencilAspectBit::DEPTH),
 		m_r->getNearestSampler());
 		m_r->getNearestSampler());
-	rgraphCtx.bindColorTextureAndSampler(0, 1, m_r->getSsao().getRt(), m_r->getLinearSampler());
 	cmdb->bindTextureAndSampler(0,
 	cmdb->bindTextureAndSampler(0,
-		2,
+		1,
 		(rsrc.m_diffDecalTexView) ? rsrc.m_diffDecalTexView : m_r->getDummyTextureView(),
 		(rsrc.m_diffDecalTexView) ? rsrc.m_diffDecalTexView : m_r->getDummyTextureView(),
 		m_r->getTrilinearRepeatSampler(),
 		m_r->getTrilinearRepeatSampler(),
 		TextureUsageBit::SAMPLED_FRAGMENT);
 		TextureUsageBit::SAMPLED_FRAGMENT);
 	cmdb->bindTextureAndSampler(0,
 	cmdb->bindTextureAndSampler(0,
-		3,
+		2,
 		(rsrc.m_specularRoughnessDecalTexView) ? rsrc.m_specularRoughnessDecalTexView : m_r->getDummyTextureView(),
 		(rsrc.m_specularRoughnessDecalTexView) ? rsrc.m_specularRoughnessDecalTexView : m_r->getDummyTextureView(),
 		m_r->getTrilinearRepeatSampler(),
 		m_r->getTrilinearRepeatSampler(),
 		TextureUsageBit::SAMPLED_FRAGMENT);
 		TextureUsageBit::SAMPLED_FRAGMENT);

+ 7 - 4
src/anki/renderer/LightShading.cpp

@@ -12,6 +12,7 @@
 #include <anki/renderer/RenderQueue.h>
 #include <anki/renderer/RenderQueue.h>
 #include <anki/renderer/ForwardShading.h>
 #include <anki/renderer/ForwardShading.h>
 #include <anki/renderer/DepthDownscale.h>
 #include <anki/renderer/DepthDownscale.h>
+#include <anki/renderer/Ssao.h>
 #include <anki/renderer/Ssr.h>
 #include <anki/renderer/Ssr.h>
 #include <anki/misc/ConfigSet.h>
 #include <anki/misc/ConfigSet.h>
 #include <anki/util/HighRezTimer.h>
 #include <anki/util/HighRezTimer.h>
@@ -148,14 +149,15 @@ void LightShading::run(const RenderingContext& ctx, RenderPassWorkContext& rgrap
 			TextureSubresourceInfo(DepthStencilAspectBit::DEPTH),
 			TextureSubresourceInfo(DepthStencilAspectBit::DEPTH),
 			m_r->getNearestSampler());
 			m_r->getNearestSampler());
 		rgraphCtx.bindColorTextureAndSampler(0, 4, m_r->getSsr().getRt(), m_r->getLinearSampler());
 		rgraphCtx.bindColorTextureAndSampler(0, 4, m_r->getSsr().getRt(), m_r->getLinearSampler());
+		rgraphCtx.bindColorTextureAndSampler(0, 5, m_r->getSsao().getRt(), m_r->getLinearSampler());
 
 
-		rgraphCtx.bindColorTextureAndSampler(0, 5, m_r->getShadowMapping().getShadowmapRt(), m_r->getLinearSampler());
+		rgraphCtx.bindColorTextureAndSampler(0, 6, m_r->getShadowMapping().getShadowmapRt(), m_r->getLinearSampler());
 		rgraphCtx.bindColorTextureAndSampler(
 		rgraphCtx.bindColorTextureAndSampler(
-			0, 6, m_r->getIndirect().getReflectionRt(), m_r->getTrilinearRepeatSampler());
+			0, 7, m_r->getIndirect().getReflectionRt(), m_r->getTrilinearRepeatSampler());
 		rgraphCtx.bindColorTextureAndSampler(
 		rgraphCtx.bindColorTextureAndSampler(
-			0, 7, m_r->getIndirect().getIrradianceRt(), m_r->getTrilinearRepeatSampler());
+			0, 8, m_r->getIndirect().getIrradianceRt(), m_r->getTrilinearRepeatSampler());
 		cmdb->bindTextureAndSampler(0,
 		cmdb->bindTextureAndSampler(0,
-			8,
+			9,
 			m_r->getIndirect().getIntegrationLut(),
 			m_r->getIndirect().getIntegrationLut(),
 			m_r->getIndirect().getIntegrationLutSampler(),
 			m_r->getIndirect().getIntegrationLutSampler(),
 			TextureUsageBit::SAMPLED_FRAGMENT);
 			TextureUsageBit::SAMPLED_FRAGMENT);
@@ -229,6 +231,7 @@ void LightShading::populateRenderGraph(RenderingContext& ctx)
 		TextureUsageBit::SAMPLED_FRAGMENT,
 		TextureUsageBit::SAMPLED_FRAGMENT,
 		TextureSubresourceInfo(DepthStencilAspectBit::DEPTH)});
 		TextureSubresourceInfo(DepthStencilAspectBit::DEPTH)});
 	pass.newConsumer({m_r->getShadowMapping().getShadowmapRt(), TextureUsageBit::SAMPLED_FRAGMENT});
 	pass.newConsumer({m_r->getShadowMapping().getShadowmapRt(), TextureUsageBit::SAMPLED_FRAGMENT});
+	pass.newConsumer({m_r->getSsao().getRt(), TextureUsageBit::SAMPLED_FRAGMENT});
 
 
 	// Refl & indirect
 	// Refl & indirect
 	pass.newConsumer({m_r->getSsr().getRt(), TextureUsageBit::SAMPLED_FRAGMENT});
 	pass.newConsumer({m_r->getSsr().getRt(), TextureUsageBit::SAMPLED_FRAGMENT});

+ 1 - 1
src/anki/renderer/Renderer.cpp

@@ -270,10 +270,10 @@ Error Renderer::populateRenderGraph(RenderingContext& ctx)
 	m_shadowMapping->populateRenderGraph(ctx);
 	m_shadowMapping->populateRenderGraph(ctx);
 	m_indirect->populateRenderGraph(ctx);
 	m_indirect->populateRenderGraph(ctx);
 	m_gbuffer->populateRenderGraph(ctx);
 	m_gbuffer->populateRenderGraph(ctx);
+	m_gbufferPost->populateRenderGraph(ctx);
 	m_depth->populateRenderGraph(ctx);
 	m_depth->populateRenderGraph(ctx);
 	m_vol->populateRenderGraph(ctx);
 	m_vol->populateRenderGraph(ctx);
 	m_ssao->populateRenderGraph(ctx);
 	m_ssao->populateRenderGraph(ctx);
-	m_gbufferPost->populateRenderGraph(ctx);
 	m_lensFlare->populateRenderGraph(ctx);
 	m_lensFlare->populateRenderGraph(ctx);
 	m_forwardShading->populateRenderGraph(ctx);
 	m_forwardShading->populateRenderGraph(ctx);
 	m_ssr->populateRenderGraph(ctx);
 	m_ssr->populateRenderGraph(ctx);

+ 1 - 1
src/anki/renderer/TemporalAA.h

@@ -36,7 +36,7 @@ private:
 	ShaderProgramResourcePtr m_prog;
 	ShaderProgramResourcePtr m_prog;
 	Array<ShaderProgramPtr, 2> m_grProgs;
 	Array<ShaderProgramPtr, 2> m_grProgs;
 
 
-	Array<U32, 2> m_workgroupSize = {{8, 8}};
+	Array<U32, 2> m_workgroupSize = {{16, 16}};
 
 
 	class
 	class
 	{
 	{

+ 0 - 3
src/anki/renderer/Volumetric.cpp

@@ -144,7 +144,6 @@ void Volumetric::runMain(const RenderingContext& ctx, RenderPassWorkContext& rgr
 	{
 	{
 		Vec4 m_linearizeNoiseTexOffsetLayer;
 		Vec4 m_linearizeNoiseTexOffsetLayer;
 		Vec4 m_fogParticleColorPad1;
 		Vec4 m_fogParticleColorPad1;
-		Mat4 m_prevViewProjMatMulInvViewProjMat;
 	};
 	};
 
 
 	Unis* uniforms = allocateAndBindUniforms<Unis*>(sizeof(Unis), cmdb, 0, 3);
 	Unis* uniforms = allocateAndBindUniforms<Unis*>(sizeof(Unis), cmdb, 0, 3);
@@ -156,8 +155,6 @@ void Volumetric::runMain(const RenderingContext& ctx, RenderPassWorkContext& rgr
 	uniforms->m_linearizeNoiseTexOffsetLayer.z() = m_r->getFrameCount() * texelOffset;
 	uniforms->m_linearizeNoiseTexOffsetLayer.z() = m_r->getFrameCount() * texelOffset;
 	uniforms->m_linearizeNoiseTexOffsetLayer.w() = m_r->getFrameCount() & (m_main.m_noiseTex->getLayerCount() - 1);
 	uniforms->m_linearizeNoiseTexOffsetLayer.w() = m_r->getFrameCount() & (m_main.m_noiseTex->getLayerCount() - 1);
 	uniforms->m_fogParticleColorPad1 = Vec4(m_main.m_fogParticleColor, 0.0);
 	uniforms->m_fogParticleColorPad1 = Vec4(m_main.m_fogParticleColor, 0.0);
-	uniforms->m_prevViewProjMatMulInvViewProjMat =
-		ctx.m_prevViewProjMat * ctx.m_renderQueue->m_viewProjectionMatrix.getInverse();
 
 
 	bindStorage(cmdb, 0, 0, rsrc.m_clustersToken);
 	bindStorage(cmdb, 0, 0, rsrc.m_clustersToken);
 	bindStorage(cmdb, 0, 1, rsrc.m_lightIndicesToken);
 	bindStorage(cmdb, 0, 1, rsrc.m_lightIndicesToken);