Kaynağa Gözat

Adding more barriers in the renderer. Removed optional effects. Fixed some shaders

Panagiotis Christopoulos Charitos 9 yıl önce
ebeveyn
işleme
d11d2c2d6a

+ 5 - 0
include/anki/renderer/Bloom.h

@@ -33,8 +33,13 @@ anki_internal:
 	~Bloom();
 	~Bloom();
 
 
 	ANKI_USE_RESULT Error init(const ConfigSet& initializer);
 	ANKI_USE_RESULT Error init(const ConfigSet& initializer);
+
+	void setPreRunBarriers(RenderingContext& ctx);
+
 	void run(RenderingContext& ctx);
 	void run(RenderingContext& ctx);
 
 
+	void setPostRunBarriers(RenderingContext& ctx);
+
 	TexturePtr& getMaxExposureRt()
 	TexturePtr& getMaxExposureRt()
 	{
 	{
 		return m_extractExposure.m_rt;
 		return m_extractExposure.m_rt;

+ 4 - 0
include/anki/renderer/Fs.h

@@ -31,8 +31,12 @@ anki_internal:
 	ANKI_USE_RESULT Error buildCommandBuffers(
 	ANKI_USE_RESULT Error buildCommandBuffers(
 		RenderingContext& ctx, U threadId, U threadCount) const;
 		RenderingContext& ctx, U threadId, U threadCount) const;
 
 
+	void setPreRunBarriers(RenderingContext& ctx);
+
 	void run(RenderingContext& ctx);
 	void run(RenderingContext& ctx);
 
 
+	void setPostRunBarriers(RenderingContext& ctx);
+
 	TexturePtr getRt() const
 	TexturePtr getRt() const
 	{
 	{
 		return m_rt;
 		return m_rt;

+ 2 - 5
include/anki/renderer/Is.h

@@ -31,6 +31,8 @@ anki_internal:
 
 
 	ANKI_USE_RESULT Error binLights(RenderingContext& ctx);
 	ANKI_USE_RESULT Error binLights(RenderingContext& ctx);
 
 
+	void setPreRunBarriers(RenderingContext& ctx);
+
 	void run(RenderingContext& ctx);
 	void run(RenderingContext& ctx);
 
 
 	TexturePtr getRt() const
 	TexturePtr getRt() const
@@ -38,11 +40,6 @@ anki_internal:
 		return m_rt;
 		return m_rt;
 	}
 	}
 
 
-	void generateMipmaps(CommandBufferPtr& cmdb)
-	{
-		cmdb->generateMipmaps(m_rt, 0, 0, 0);
-	}
-
 	/// Get the number of mips for IS's render target.
 	/// Get the number of mips for IS's render target.
 	U getRtMipmapCount() const
 	U getRtMipmapCount() const
 	{
 	{

+ 0 - 2
include/anki/renderer/MainRenderer.h

@@ -40,8 +40,6 @@ public:
 
 
 	ANKI_USE_RESULT Error render(SceneGraph& scene);
 	ANKI_USE_RESULT Error render(SceneGraph& scene);
 
 
-	void prepareForVisibilityTests(SceneNode& cam);
-
 	const String& getMaterialShaderSource() const
 	const String& getMaterialShaderSource() const
 	{
 	{
 		return m_materialShaderSource;
 		return m_materialShaderSource;

+ 0 - 35
include/anki/renderer/Renderer.h

@@ -113,11 +113,6 @@ public:
 
 
 	~Renderer();
 	~Renderer();
 
 
-	Bool getIrEnabled() const
-	{
-		return m_ir.isCreated();
-	}
-
 	Ir& getIr()
 	Ir& getIr()
 	{
 	{
 		return *m_ir;
 		return *m_ir;
@@ -128,11 +123,6 @@ public:
 		return *m_sm;
 		return *m_sm;
 	}
 	}
 
 
-	Bool getSmEnabled() const
-	{
-		return m_sm.isCreated();
-	}
-
 	Ms& getMs()
 	Ms& getMs()
 	{
 	{
 		return *m_ms;
 		return *m_ms;
@@ -158,41 +148,21 @@ public:
 		return *m_tm;
 		return *m_tm;
 	}
 	}
 
 
-	Bool getSsaoEnabled() const
-	{
-		return m_ssao.isCreated();
-	}
-
 	Ssao& getSsao()
 	Ssao& getSsao()
 	{
 	{
 		return *m_ssao;
 		return *m_ssao;
 	}
 	}
 
 
-	Bool getBloomEnabled() const
-	{
-		return m_bloom.isCreated();
-	}
-
 	Bloom& getBloom()
 	Bloom& getBloom()
 	{
 	{
 		return *m_bloom;
 		return *m_bloom;
 	}
 	}
 
 
-	Bool getSslfEnabled() const
-	{
-		return m_sslf.isCreated();
-	}
-
 	Sslf& getSslf()
 	Sslf& getSslf()
 	{
 	{
 		return *m_sslf;
 		return *m_sslf;
 	}
 	}
 
 
-	Bool getPpsEnabled() const
-	{
-		return m_pps.isCreated();
-	}
-
 	Pps& getPps()
 	Pps& getPps()
 	{
 	{
 		return *m_pps;
 		return *m_pps;
@@ -336,10 +306,6 @@ anki_internal:
 		U mipsCount,
 		U mipsCount,
 		TexturePtr& rt);
 		TexturePtr& rt);
 
 
-	Bool doGpuVisibilityTest(const CollisionShape& cs, const Aabb& aabb) const;
-
-	void prepareForVisibilityTests(const SceneNode& cam);
-
 	GrManager& getGrManager()
 	GrManager& getGrManager()
 	{
 	{
 		return *m_gr;
 		return *m_gr;
@@ -407,7 +373,6 @@ private:
 	UniquePtr<Volumetric> m_vol; ///< Volumetric effects.
 	UniquePtr<Volumetric> m_vol; ///< Volumetric effects.
 	UniquePtr<Lf> m_lf; ///< Forward shading lens flares.
 	UniquePtr<Lf> m_lf; ///< Forward shading lens flares.
 	UniquePtr<Upsample> m_upsample;
 	UniquePtr<Upsample> m_upsample;
-	UniquePtr<Tiler> m_tiler;
 	UniquePtr<DownscaleBlur> m_downscale;
 	UniquePtr<DownscaleBlur> m_downscale;
 	UniquePtr<Tm> m_tm;
 	UniquePtr<Tm> m_tm;
 	UniquePtr<Ssao> m_ssao;
 	UniquePtr<Ssao> m_ssao;

+ 3 - 0
include/anki/renderer/Ssao.h

@@ -29,7 +29,10 @@ anki_internal:
 	}
 	}
 
 
 	ANKI_USE_RESULT Error init(const ConfigSet& initializer);
 	ANKI_USE_RESULT Error init(const ConfigSet& initializer);
+
+	void setPreRunBarriers(RenderingContext& ctx);
 	void run(RenderingContext& ctx);
 	void run(RenderingContext& ctx);
+	void setPostRunBarriers(RenderingContext& ctx);
 
 
 	TexturePtr& getRt()
 	TexturePtr& getRt()
 	{
 	{

+ 1 - 1
shaders/Blit.frag.glsl

@@ -5,7 +5,7 @@
 
 
 #include "shaders/Common.glsl"
 #include "shaders/Common.glsl"
 
 
-layout(binding = 0) uniform lowp sampler2D uTex;
+layout(ANKI_TEX_BINDING(0, 0)) uniform lowp sampler2D uTex;
 
 
 layout(location = 0) in vec2 inTexCoords;
 layout(location = 0) in vec2 inTexCoords;
 
 

+ 1 - 1
shaders/Final.frag.glsl

@@ -8,7 +8,7 @@
 #include "shaders/Common.glsl"
 #include "shaders/Common.glsl"
 #include "shaders/Pack.glsl"
 #include "shaders/Pack.glsl"
 
 
-layout(binding = 0) uniform sampler2D u_tex;
+layout(ANKI_TEX_BINDING(0, 0)) uniform sampler2D u_tex;
 
 
 layout(location = 0) in highp vec2 in_texCoord;
 layout(location = 0) in highp vec2 in_texCoord;
 layout(location = 0) out vec3 out_color;
 layout(location = 0) out vec3 out_color;

+ 3 - 3
shaders/Sslf.frag.glsl

@@ -11,15 +11,15 @@
 #define MAX_GHOSTS 4
 #define MAX_GHOSTS 4
 #define GHOST_DISPERSAL (0.7)
 #define GHOST_DISPERSAL (0.7)
 #define HALO_WIDTH 0.4
 #define HALO_WIDTH 0.4
-#define CHROMATIC_DISTORTION 6.0
+#define CHROMATIC_DISTORTION 3.0
 #define ENABLE_CHROMATIC_DISTORTION 1
 #define ENABLE_CHROMATIC_DISTORTION 1
 #define ENABLE_HALO 1
 #define ENABLE_HALO 1
 #define HALO_OPACITY 0.5
 #define HALO_OPACITY 0.5
 
 
 layout(location = 0) in vec2 in_texCoord;
 layout(location = 0) in vec2 in_texCoord;
 
 
-layout(binding = 0) uniform sampler2D u_rt;
-layout(binding = 1) uniform sampler2D u_lensDirtTex;
+layout(ANKI_TEX_BINDING(0, 0)) uniform sampler2D u_rt;
+layout(ANKI_TEX_BINDING(0, 1)) uniform sampler2D u_lensDirtTex;
 
 
 layout(location = 0) out vec3 out_color;
 layout(location = 0) out vec3 out_color;
 
 

+ 2 - 2
shaders/PpsTmAverageLuminance.comp.glsl → shaders/TmAverageLuminance.comp.glsl

@@ -24,9 +24,9 @@ const uint MIPMAP_HEIGHT = ANKI_RENDERER_HEIGHT / (2u << (IS_RT_MIPMAP - 1u));
 const uint PIXEL_READ_X = MIPMAP_WIDTH / WORKGROUP_SIZE_X;
 const uint PIXEL_READ_X = MIPMAP_WIDTH / WORKGROUP_SIZE_X;
 const uint PIXEL_READ_Y = MIPMAP_HEIGHT / WORKGROUP_SIZE_Y;
 const uint PIXEL_READ_Y = MIPMAP_HEIGHT / WORKGROUP_SIZE_Y;
 
 
-layout(binding = 0) uniform sampler2D u_isRt;
+layout(ANKI_TEX_BINDING(0, 0)) uniform sampler2D u_isRt;
 
 
-layout(std140, binding = 0) buffer _blk
+layout(std140, ANKI_SS_BINDING(0, 0)) buffer _blk
 {
 {
 	vec4 u_averageLuminancePad3;
 	vec4 u_averageLuminancePad3;
 };
 };

+ 1 - 1
shaders/Volumetric.frag.glsl

@@ -8,7 +8,7 @@
 
 
 layout(location = 0) in vec2 in_uv;
 layout(location = 0) in vec2 in_uv;
 
 
-layout(binding = 0) uniform sampler2D u_msDepthRt;
+layout(ANKI_TEX_BINDING(0, 0)) uniform sampler2D u_msDepthRt;
 
 
 layout(std140, ANKI_UBO_BINDING(0, 0)) uniform ubo0_
 layout(std140, ANKI_UBO_BINDING(0, 0)) uniform ubo0_
 {
 {

+ 27 - 4
src/renderer/Bloom.cpp

@@ -160,16 +160,39 @@ void Bloom::run(RenderingContext& ctx)
 	cmdb->endRenderPass();
 	cmdb->endRenderPass();
 
 
 	// pass 1
 	// pass 1
+	cmdb->setTextureBarrier(m_extractExposure.m_rt,
+		TextureUsageBit::FRAMEBUFFER_ATTACHMENT_WRITE,
+		TextureUsageBit::FRAGMENT_SHADER_SAMPLED,
+		TextureSurfaceInfo(0, 0, 0, 0));
+
+	cmdb->setTextureBarrier(m_upscale.m_rt,
+		TextureUsageBit::NONE,
+		TextureUsageBit::FRAMEBUFFER_ATTACHMENT_READ_WRITE,
+		TextureSurfaceInfo(0, 0, 0, 0));
+
 	cmdb->setViewport(0, 0, m_upscale.m_width, m_upscale.m_height);
 	cmdb->setViewport(0, 0, m_upscale.m_width, m_upscale.m_height);
 	cmdb->beginRenderPass(m_upscale.m_fb);
 	cmdb->beginRenderPass(m_upscale.m_fb);
 	cmdb->bindPipeline(m_upscale.m_ppline);
 	cmdb->bindPipeline(m_upscale.m_ppline);
 	cmdb->bindResourceGroup(m_upscale.m_rsrc, 0, nullptr);
 	cmdb->bindResourceGroup(m_upscale.m_rsrc, 0, nullptr);
 	m_r->drawQuad(cmdb);
 	m_r->drawQuad(cmdb);
+}
 
 
-	if(!m_r->getSslfEnabled())
-	{
-		cmdb->endRenderPass();
-	}
+//==============================================================================
+void Bloom::setPreRunBarriers(RenderingContext& ctx)
+{
+	ctx.m_commandBuffer->setTextureBarrier(m_extractExposure.m_rt,
+		TextureUsageBit::NONE,
+		TextureUsageBit::FRAMEBUFFER_ATTACHMENT_WRITE,
+		TextureSurfaceInfo(0, 0, 0, 0));
+}
+
+//==============================================================================
+void Bloom::setPostRunBarriers(RenderingContext& ctx)
+{
+	ctx.m_commandBuffer->setTextureBarrier(m_upscale.m_rt,
+		TextureUsageBit::FRAMEBUFFER_ATTACHMENT_WRITE,
+		TextureUsageBit::FRAGMENT_SHADER_SAMPLED,
+		TextureSurfaceInfo(0, 0, 0, 0));
 }
 }
 
 
 } // end namespace anki
 } // end namespace anki

+ 1 - 8
src/renderer/Dbg.cpp

@@ -53,14 +53,7 @@ Error Dbg::init(const ConfigSet& initializer)
 	fbInit.m_depthStencilAttachment.m_texture = m_r->getMs().getDepthRt();
 	fbInit.m_depthStencilAttachment.m_texture = m_r->getMs().getDepthRt();
 	fbInit.m_depthStencilAttachment.m_loadOperation =
 	fbInit.m_depthStencilAttachment.m_loadOperation =
 		AttachmentLoadOperation::LOAD;
 		AttachmentLoadOperation::LOAD;
-	if(m_r->getPpsEnabled())
-	{
-		fbInit.m_colorAttachments[0].m_texture = m_r->getPps().getRt();
-	}
-	else
-	{
-		fbInit.m_colorAttachments[0].m_texture = m_r->getIs().getRt();
-	}
+	fbInit.m_colorAttachments[0].m_texture = m_r->getPps().getRt();
 	fbInit.m_colorAttachments[0].m_loadOperation =
 	fbInit.m_colorAttachments[0].m_loadOperation =
 		AttachmentLoadOperation::LOAD;
 		AttachmentLoadOperation::LOAD;
 
 

+ 13 - 0
src/renderer/DownscaleBlur.cpp

@@ -93,6 +93,19 @@ void DownscaleBlur::run(RenderingContext& ctx)
 		size /= 2;
 		size /= 2;
 		Subpass& pass = m_passes[i];
 		Subpass& pass = m_passes[i];
 
 
+		if(i > 0)
+		{
+			cmdb->setTextureBarrier(m_r->getIs().getRt(),
+				TextureUsageBit::FRAMEBUFFER_ATTACHMENT_WRITE,
+				TextureUsageBit::FRAGMENT_SHADER_SAMPLED,
+				TextureSurfaceInfo(i, 0, 0, 0));
+		}
+
+		cmdb->setTextureBarrier(m_r->getIs().getRt(),
+			TextureUsageBit::NONE,
+			TextureUsageBit::FRAMEBUFFER_ATTACHMENT_WRITE,
+			TextureSurfaceInfo(i + 1, 0, 0, 0));
+
 		cmdb->beginRenderPass(pass.m_fb);
 		cmdb->beginRenderPass(pass.m_fb);
 		cmdb->setViewport(0, 0, size.x(), size.y());
 		cmdb->setViewport(0, 0, size.x(), size.y());
 		cmdb->bindPipeline(pass.m_ppline);
 		cmdb->bindPipeline(pass.m_ppline);

+ 20 - 6
src/renderer/Fs.cpp

@@ -49,12 +49,8 @@ Error Fs::init(const ConfigSet&)
 	{
 	{
 		ResourceGroupInitInfo init;
 		ResourceGroupInitInfo init;
 		init.m_textures[0].m_texture = m_r->getMs().getDepthRt();
 		init.m_textures[0].m_texture = m_r->getMs().getDepthRt();
-
-		if(m_r->getSmEnabled())
-		{
-			init.m_textures[1].m_texture = m_r->getSm().getSpotTextureArray();
-			init.m_textures[2].m_texture = m_r->getSm().getOmniTextureArray();
-		}
+		init.m_textures[1].m_texture = m_r->getSm().getSpotTextureArray();
+		init.m_textures[2].m_texture = m_r->getSm().getOmniTextureArray();
 
 
 		init.m_uniformBuffers[0].m_uploadedMemory = true;
 		init.m_uniformBuffers[0].m_uploadedMemory = true;
 		init.m_uniformBuffers[1].m_uploadedMemory = true;
 		init.m_uniformBuffers[1].m_uploadedMemory = true;
@@ -111,6 +107,24 @@ Error Fs::buildCommandBuffers(
 	return err;
 	return err;
 }
 }
 
 
+//==============================================================================
+void Fs::setPreRunBarriers(RenderingContext& ctx)
+{
+	ctx.m_commandBuffer->setTextureBarrier(m_rt,
+		TextureUsageBit::NONE,
+		TextureUsageBit::FRAMEBUFFER_ATTACHMENT_READ_WRITE,
+		TextureSurfaceInfo(0, 0, 0, 0));
+}
+
+//==============================================================================
+void Fs::setPostRunBarriers(RenderingContext& ctx)
+{
+	ctx.m_commandBuffer->setTextureBarrier(m_rt,
+		TextureUsageBit::FRAMEBUFFER_ATTACHMENT_READ_WRITE,
+		TextureUsageBit::FRAGMENT_SHADER_SAMPLED,
+		TextureSurfaceInfo(0, 0, 0, 0));
+}
+
 //==============================================================================
 //==============================================================================
 void Fs::run(RenderingContext& ctx)
 void Fs::run(RenderingContext& ctx)
 {
 {

+ 21 - 26
src/renderer/Is.cpp

@@ -109,10 +109,9 @@ Error Is::initInternal(const ConfigSet& config)
 		m_r->getWidth(),
 		m_r->getWidth(),
 		m_r->getHeight(),
 		m_r->getHeight(),
 		m_maxLightIds,
 		m_maxLightIds,
-		m_r->getSmEnabled() ? m_r->getSm().getPoissonEnabled() : 0,
-		m_r->getIrEnabled(),
-		(m_r->getIrEnabled()) ? m_r->getIr().getReflectionTextureMipmapCount()
-							  : 0);
+		m_r->getSm().getPoissonEnabled(),
+		1,
+		m_r->getIr().getReflectionTextureMipmapCount());
 
 
 	// point light
 	// point light
 	ANKI_CHECK(getResourceManager().loadResourceToCache(
 	ANKI_CHECK(getResourceManager().loadResourceToCache(
@@ -159,30 +158,19 @@ Error Is::initInternal(const ConfigSet& config)
 		init.m_textures[1].m_texture = m_r->getMs().getRt1();
 		init.m_textures[1].m_texture = m_r->getMs().getRt1();
 		init.m_textures[2].m_texture = m_r->getMs().getRt2();
 		init.m_textures[2].m_texture = m_r->getMs().getRt2();
 		init.m_textures[3].m_texture = m_r->getMs().getDepthRt();
 		init.m_textures[3].m_texture = m_r->getMs().getDepthRt();
+		init.m_textures[4].m_texture = m_r->getSm().getSpotTextureArray();
+		init.m_textures[5].m_texture = m_r->getSm().getOmniTextureArray();
 
 
-		if(m_r->getSmEnabled())
-		{
-			init.m_textures[4].m_texture = m_r->getSm().getSpotTextureArray();
-			init.m_textures[5].m_texture = m_r->getSm().getOmniTextureArray();
-		}
-
-		if(m_r->getIrEnabled())
-		{
-			init.m_textures[6].m_texture = m_r->getIr().getReflectionTexture();
-			init.m_textures[7].m_texture = m_r->getIr().getIrradianceTexture();
+		init.m_textures[6].m_texture = m_r->getIr().getReflectionTexture();
+		init.m_textures[7].m_texture = m_r->getIr().getIrradianceTexture();
 
 
-			init.m_textures[8].m_texture = m_r->getIr().getIntegrationLut();
-			init.m_textures[8].m_sampler =
-				m_r->getIr().getIntegrationLutSampler();
-		}
+		init.m_textures[8].m_texture = m_r->getIr().getIntegrationLut();
+		init.m_textures[8].m_sampler = m_r->getIr().getIntegrationLutSampler();
 
 
 		init.m_uniformBuffers[0].m_uploadedMemory = true;
 		init.m_uniformBuffers[0].m_uploadedMemory = true;
 		init.m_uniformBuffers[1].m_uploadedMemory = true;
 		init.m_uniformBuffers[1].m_uploadedMemory = true;
 		init.m_uniformBuffers[2].m_uploadedMemory = true;
 		init.m_uniformBuffers[2].m_uploadedMemory = true;
-		if(m_r->getIrEnabled())
-		{
-			init.m_uniformBuffers[3].m_uploadedMemory = true;
-		}
+		init.m_uniformBuffers[3].m_uploadedMemory = true;
 
 
 		init.m_storageBuffers[0].m_uploadedMemory = true;
 		init.m_storageBuffers[0].m_uploadedMemory = true;
 		init.m_storageBuffers[1].m_uploadedMemory = true;
 		init.m_storageBuffers[1].m_uploadedMemory = true;
@@ -202,12 +190,10 @@ Error Is::binLights(RenderingContext& ctx)
 	ANKI_CHECK(m_lightBin->bin(*ctx.m_frustumComponent,
 	ANKI_CHECK(m_lightBin->bin(*ctx.m_frustumComponent,
 		getFrameAllocator(),
 		getFrameAllocator(),
 		m_maxLightIds,
 		m_maxLightIds,
-		m_r->getSmEnabled(),
+		true,
 		ctx.m_is.m_dynBufferInfo.m_uniformBuffers[P_LIGHTS_LOCATION],
 		ctx.m_is.m_dynBufferInfo.m_uniformBuffers[P_LIGHTS_LOCATION],
 		ctx.m_is.m_dynBufferInfo.m_uniformBuffers[S_LIGHTS_LOCATION],
 		ctx.m_is.m_dynBufferInfo.m_uniformBuffers[S_LIGHTS_LOCATION],
-		m_r->getIrEnabled()
-			? &ctx.m_is.m_dynBufferInfo.m_uniformBuffers[PROBES_LOCATION]
-			: nullptr,
+		&ctx.m_is.m_dynBufferInfo.m_uniformBuffers[PROBES_LOCATION],
 		ctx.m_is.m_dynBufferInfo.m_storageBuffers[CLUSTERS_LOCATION],
 		ctx.m_is.m_dynBufferInfo.m_storageBuffers[CLUSTERS_LOCATION],
 		ctx.m_is.m_dynBufferInfo.m_storageBuffers[LIGHT_IDS_LOCATION]));
 		ctx.m_is.m_dynBufferInfo.m_storageBuffers[LIGHT_IDS_LOCATION]));
 
 
@@ -254,4 +240,13 @@ void Is::updateCommonBlock(RenderingContext& ctx)
 	blk->m_tileCount = UVec4(m_r->getTileCountXY(), m_r->getTileCount(), 0);
 	blk->m_tileCount = UVec4(m_r->getTileCountXY(), m_r->getTileCount(), 0);
 }
 }
 
 
+//==============================================================================
+void Is::setPreRunBarriers(RenderingContext& ctx)
+{
+	ctx.m_commandBuffer->setTextureBarrier(m_rt,
+		TextureUsageBit::NONE,
+		TextureUsageBit::FRAMEBUFFER_ATTACHMENT_READ_WRITE,
+		TextureSurfaceInfo(0, 0, 0, 0));
+}
+
 } // end namespace anki
 } // end namespace anki

+ 2 - 17
src/renderer/MainRenderer.cpp

@@ -103,15 +103,7 @@ Error MainRenderer::create(ThreadPool* threadpool,
 
 
 	// Init RC group
 	// Init RC group
 	ResourceGroupInitInfo rcinit;
 	ResourceGroupInitInfo rcinit;
-	if(m_r->getPpsEnabled())
-	{
-		rcinit.m_textures[0].m_texture = m_r->getPps().getRt();
-	}
-	else
-	{
-		rcinit.m_textures[0].m_texture = m_r->getIs().getRt();
-	}
-
+	rcinit.m_textures[0].m_texture = m_r->getPps().getRt();
 	m_rcGroup = m_r->getGrManager().newInstance<ResourceGroup>(rcinit);
 	m_rcGroup = m_r->getGrManager().newInstance<ResourceGroup>(rcinit);
 
 
 	return ErrorCode::NONE;
 	return ErrorCode::NONE;
@@ -135,8 +127,7 @@ Error MainRenderer::render(SceneGraph& scene)
 
 
 	// Find where the m_r should draw
 	// Find where the m_r should draw
 	Bool rDrawToDefault;
 	Bool rDrawToDefault;
-	if(m_renderingQuality == 1.0 && !m_r->getDbg().getEnabled()
-		&& m_r->getPpsEnabled())
+	if(m_renderingQuality == 1.0 && !m_r->getDbg().getEnabled())
 	{
 	{
 		rDrawToDefault = true;
 		rDrawToDefault = true;
 	}
 	}
@@ -196,10 +187,4 @@ F32 MainRenderer::getAspectRatio() const
 	return m_r->getAspectRatio();
 	return m_r->getAspectRatio();
 }
 }
 
 
-//==============================================================================
-void MainRenderer::prepareForVisibilityTests(SceneNode& cam)
-{
-	m_r->prepareForVisibilityTests(cam);
-}
-
 } // end namespace anki
 } // end namespace anki

+ 2 - 6
src/renderer/Pps.cpp

@@ -63,7 +63,7 @@ Error Pps::initInternal(const ConfigSet& config)
 				"#define GAMMA_CORRECTION_ENABLED %u\n"
 				"#define GAMMA_CORRECTION_ENABLED %u\n"
 				"#define FBO_WIDTH %u\n"
 				"#define FBO_WIDTH %u\n"
 				"#define FBO_HEIGHT %u\n",
 				"#define FBO_HEIGHT %u\n",
-		m_r->getBloomEnabled(),
+		true,
 		U(config.getNumber("pps.sharpen")),
 		U(config.getNumber("pps.sharpen")),
 		U(config.getNumber("pps.gammaCorrection")),
 		U(config.getNumber("pps.gammaCorrection")),
 		m_r->getWidth(),
 		m_r->getWidth(),
@@ -83,11 +83,7 @@ Error Pps::initInternal(const ConfigSet& config)
 	// RC goup
 	// RC goup
 	ResourceGroupInitInfo rcInit;
 	ResourceGroupInitInfo rcInit;
 	rcInit.m_textures[0].m_texture = m_r->getIs().getRt();
 	rcInit.m_textures[0].m_texture = m_r->getIs().getRt();
-
-	if(m_r->getBloomEnabled())
-	{
-		rcInit.m_textures[1].m_texture = m_r->getBloom().getFinalRt();
-	}
+	rcInit.m_textures[1].m_texture = m_r->getBloom().getFinalRt();
 
 
 	rcInit.m_textures[2].m_texture = m_lut->getGrTexture();
 	rcInit.m_textures[2].m_texture = m_lut->getGrTexture();
 
 

+ 47 - 117
src/renderer/Renderer.cpp

@@ -132,23 +132,14 @@ Error Renderer::initInternal(const ConfigSet& config)
 		m_resources->loadResource("shaders/Quad.vert.glsl", m_drawQuadVert));
 		m_resources->loadResource("shaders/Quad.vert.glsl", m_drawQuadVert));
 
 
 	// Init the stages. Careful with the order!!!!!!!!!!
 	// Init the stages. Careful with the order!!!!!!!!!!
-	if(config.getNumber("ir.enabled"))
-	{
-		m_ir.reset(m_alloc.newInstance<Ir>(this));
-		ANKI_CHECK(m_ir->init(config));
-	}
+	m_ir.reset(m_alloc.newInstance<Ir>(this));
+	ANKI_CHECK(m_ir->init(config));
 
 
 	m_ms.reset(m_alloc.newInstance<Ms>(this));
 	m_ms.reset(m_alloc.newInstance<Ms>(this));
 	ANKI_CHECK(m_ms->init(config));
 	ANKI_CHECK(m_ms->init(config));
 
 
-	if(config.getNumber("sm.enabled"))
-	{
-		m_sm.reset(m_alloc.newInstance<Sm>(this));
-		ANKI_CHECK(m_sm->init(config));
-	}
-
-	m_tiler.reset(m_alloc.newInstance<Tiler>(this));
-	ANKI_CHECK(m_tiler->init());
+	m_sm.reset(m_alloc.newInstance<Sm>(this));
+	ANKI_CHECK(m_sm->init(config));
 
 
 	m_is.reset(m_alloc.newInstance<Is>(this));
 	m_is.reset(m_alloc.newInstance<Is>(this));
 	ANKI_CHECK(m_is->init(config));
 	ANKI_CHECK(m_is->init(config));
@@ -162,45 +153,26 @@ Error Renderer::initInternal(const ConfigSet& config)
 	m_lf.reset(m_alloc.newInstance<Lf>(this));
 	m_lf.reset(m_alloc.newInstance<Lf>(this));
 	ANKI_CHECK(m_lf->init(config));
 	ANKI_CHECK(m_lf->init(config));
 
 
-	if(config.getNumber("ssao.enabled") && config.getNumber("pps.enabled"))
-	{
-		m_ssao.reset(m_alloc.newInstance<Ssao>(this));
-		ANKI_CHECK(m_ssao->init(config));
-	}
+	m_ssao.reset(m_alloc.newInstance<Ssao>(this));
+	ANKI_CHECK(m_ssao->init(config));
 
 
 	m_upsample.reset(m_alloc.newInstance<Upsample>(this));
 	m_upsample.reset(m_alloc.newInstance<Upsample>(this));
 	ANKI_CHECK(m_upsample->init(config));
 	ANKI_CHECK(m_upsample->init(config));
 
 
-	if(config.getNumber("tm.enabled") && config.getNumber("pps.enabled"))
-	{
-		m_tm.reset(getAllocator().newInstance<Tm>(this));
-		ANKI_CHECK(m_tm->create(config));
-	}
+	m_tm.reset(getAllocator().newInstance<Tm>(this));
+	ANKI_CHECK(m_tm->create(config));
 
 
-	if(config.getNumber("tm.enabled") && config.getNumber("pps.enabled"))
-	{
-		m_downscale.reset(getAllocator().newInstance<DownscaleBlur>(this));
-		ANKI_CHECK(m_downscale->init(config));
-	}
+	m_downscale.reset(getAllocator().newInstance<DownscaleBlur>(this));
+	ANKI_CHECK(m_downscale->init(config));
 
 
-	if(config.getNumber("bloom.enabled") && config.getNumber("pps.enabled"))
-	{
-		m_bloom.reset(m_alloc.newInstance<Bloom>(this));
-		ANKI_CHECK(m_bloom->init(config));
-	}
+	m_bloom.reset(m_alloc.newInstance<Bloom>(this));
+	ANKI_CHECK(m_bloom->init(config));
 
 
-	if(config.getNumber("sslf.enabled") && m_bloom
-		&& config.getNumber("pps.enabled"))
-	{
-		m_sslf.reset(m_alloc.newInstance<Sslf>(this));
-		ANKI_CHECK(m_sslf->init(config));
-	}
+	m_sslf.reset(m_alloc.newInstance<Sslf>(this));
+	ANKI_CHECK(m_sslf->init(config));
 
 
-	if(config.getNumber("pps.enabled"))
-	{
-		m_pps.reset(m_alloc.newInstance<Pps>(this));
-		ANKI_CHECK(m_pps->init(config));
-	}
+	m_pps.reset(m_alloc.newInstance<Pps>(this));
+	ANKI_CHECK(m_pps->init(config));
 
 
 	m_dbg.reset(m_alloc.newInstance<Dbg>(this));
 	m_dbg.reset(m_alloc.newInstance<Dbg>(this));
 	ANKI_CHECK(m_dbg->init(config));
 	ANKI_CHECK(m_dbg->init(config));
@@ -249,25 +221,20 @@ Error Renderer::render(RenderingContext& ctx)
 	}
 	}
 
 
 	// Run stages
 	// Run stages
-	if(m_ir)
-	{
-		ANKI_CHECK(m_ir->run(ctx));
-	}
+	ANKI_CHECK(m_ir->run(ctx));
 
 
 	ANKI_CHECK(m_is->binLights(ctx));
 	ANKI_CHECK(m_is->binLights(ctx));
 	ANKI_CHECK(buildCommandBuffers(ctx));
 	ANKI_CHECK(buildCommandBuffers(ctx));
 
 
-	// Set barriers for SM and MS
-	if(m_sm)
-	{
-		m_sm->setPreRunBarriers(ctx);
-	}
+	// Perform image transitions
+	m_sm->setPreRunBarriers(ctx);
 	m_ms->setPreRunBarriers(ctx);
 	m_ms->setPreRunBarriers(ctx);
+	m_is->setPreRunBarriers(ctx);
+	m_fs->setPreRunBarriers(ctx);
+	m_ssao->setPreRunBarriers(ctx);
+	m_bloom->setPreRunBarriers(ctx);
 
 
-	if(m_sm)
-	{
-		m_sm->run(ctx);
-	}
+	m_sm->run(ctx);
 
 
 	m_ms->run(ctx);
 	m_ms->run(ctx);
 	m_lf->runOcclusionTests(ctx);
 	m_lf->runOcclusionTests(ctx);
@@ -276,11 +243,6 @@ Error Renderer::render(RenderingContext& ctx)
 	m_ms->setPostRunBarriers(ctx);
 	m_ms->setPostRunBarriers(ctx);
 	m_sm->setPostRunBarriers(ctx);
 	m_sm->setPostRunBarriers(ctx);
 
 
-	cmdb->setTextureBarrier(m_is->getRt(),
-		TextureUsageBit::NONE,
-		TextureUsageBit::FRAMEBUFFER_ATTACHMENT_WRITE,
-		TextureSurfaceInfo(0, 0, 0, 0));
-
 	m_is->run(ctx);
 	m_is->run(ctx);
 
 
 	cmdb->setTextureBarrier(m_ms->getDepthRt(),
 	cmdb->setTextureBarrier(m_ms->getDepthRt(),
@@ -310,55 +272,39 @@ Error Renderer::render(RenderingContext& ctx)
 			TextureSurfaceInfo(i, 0, 0, 0));
 			TextureSurfaceInfo(i, 0, 0, 0));
 	}
 	}
 
 
-	cmdb->setTextureBarrier(m_fs->getRt(),
-		TextureUsageBit::NONE,
-		TextureUsageBit::FRAMEBUFFER_ATTACHMENT_READ_WRITE,
-		TextureSurfaceInfo(0, 0, 0, 0));
-
-	if(m_ssao)
-	{
-		cmdb->setTextureBarrier(m_ssao->getRt(),
-			TextureUsageBit::NONE,
-			TextureUsageBit::FRAMEBUFFER_ATTACHMENT_WRITE,
-			TextureSurfaceInfo(0, 0, 0, 0));
-	}
-
 	m_fs->run(ctx);
 	m_fs->run(ctx);
 	m_lf->run(ctx);
 	m_lf->run(ctx);
 	m_vol->run(ctx);
 	m_vol->run(ctx);
 	cmdb->endRenderPass();
 	cmdb->endRenderPass();
 
 
-	if(m_ssao)
-	{
-		m_ssao->run(ctx);
-	}
+	m_ssao->run(ctx);
+
+	m_ssao->setPostRunBarriers(ctx);
+	m_fs->setPostRunBarriers(ctx);
 
 
 	m_upsample->run(ctx);
 	m_upsample->run(ctx);
 
 
-	if(m_downscale)
-	{
-		m_downscale->run(ctx);
-	}
+	cmdb->setTextureBarrier(m_is->getRt(),
+		TextureUsageBit::FRAMEBUFFER_ATTACHMENT_READ_WRITE,
+		TextureUsageBit::FRAGMENT_SHADER_SAMPLED,
+		TextureSurfaceInfo(0, 0, 0, 0));
 
 
-	if(m_tm)
-	{
-		m_tm->run(ctx);
-	}
+	m_downscale->run(ctx);
 
 
-	if(m_bloom)
-	{
-		m_bloom->run(ctx);
-	}
+	cmdb->setTextureBarrier(m_is->getRt(),
+		TextureUsageBit::FRAMEBUFFER_ATTACHMENT_WRITE,
+		TextureUsageBit::FRAGMENT_SHADER_SAMPLED
+			| TextureUsageBit::COMPUTE_SHADER_SAMPLED,
+		TextureSurfaceInfo(m_is->getRtMipmapCount() - 1, 0, 0, 0));
 
 
-	if(m_sslf)
-	{
-		m_sslf->run(ctx);
-	}
+	m_tm->run(ctx);
 
 
-	if(m_pps)
-	{
-		m_pps->run(ctx);
-	}
+	m_bloom->run(ctx);
+	m_sslf->run(ctx);
+	cmdb->endRenderPass();
+	m_bloom->setPostRunBarriers(ctx);
+
+	m_pps->run(ctx);
 
 
 	if(m_dbg->getEnabled())
 	if(m_dbg->getEnabled())
 	{
 	{
@@ -451,19 +397,6 @@ void Renderer::createDrawQuadPipeline(
 	ppline = m_gr->newInstance<Pipeline>(init);
 	ppline = m_gr->newInstance<Pipeline>(init);
 }
 }
 
 
-//==============================================================================
-void Renderer::prepareForVisibilityTests(const SceneNode& cam)
-{
-	m_tiler->prepareForVisibilityTests(cam);
-}
-
-//==============================================================================
-Bool Renderer::doGpuVisibilityTest(
-	const CollisionShape& cs, const Aabb& aabb) const
-{
-	return m_tiler->test(cs, aabb);
-}
-
 //==============================================================================
 //==============================================================================
 Error Renderer::buildCommandBuffers(RenderingContext& ctx)
 Error Renderer::buildCommandBuffers(RenderingContext& ctx)
 {
 {
@@ -488,11 +421,8 @@ Error Renderer::buildCommandBuffers(RenderingContext& ctx)
 			ANKI_CHECK(m_r->getMs().buildCommandBuffers(
 			ANKI_CHECK(m_r->getMs().buildCommandBuffers(
 				*m_ctx, threadId, threadsCount));
 				*m_ctx, threadId, threadsCount));
 
 
-			if(m_r->getSmEnabled())
-			{
-				ANKI_CHECK(m_r->getSm().buildCommandBuffers(
-					*m_ctx, threadId, threadsCount));
-			}
+			ANKI_CHECK(m_r->getSm().buildCommandBuffers(
+				*m_ctx, threadId, threadsCount));
 
 
 			ANKI_CHECK(m_r->getFs().buildCommandBuffers(
 			ANKI_CHECK(m_r->getFs().buildCommandBuffers(
 				*m_ctx, threadId, threadsCount));
 				*m_ctx, threadId, threadsCount));

+ 34 - 0
src/renderer/Ssao.cpp

@@ -270,6 +270,24 @@ Error Ssao::init(const ConfigSet& config)
 	return err;
 	return err;
 }
 }
 
 
+//==============================================================================
+void Ssao::setPreRunBarriers(RenderingContext& ctx)
+{
+	ctx.m_commandBuffer->setTextureBarrier(m_vblurRt,
+		TextureUsageBit::NONE,
+		TextureUsageBit::FRAMEBUFFER_ATTACHMENT_WRITE,
+		TextureSurfaceInfo(0, 0, 0, 0));
+}
+
+//==============================================================================
+void Ssao::setPostRunBarriers(RenderingContext& ctx)
+{
+	ctx.m_commandBuffer->setTextureBarrier(m_vblurRt,
+		TextureUsageBit::FRAMEBUFFER_ATTACHMENT_WRITE,
+		TextureUsageBit::FRAGMENT_SHADER_SAMPLED,
+		TextureSurfaceInfo(0, 0, 0, 0));
+}
+
 //==============================================================================
 //==============================================================================
 void Ssao::run(RenderingContext& ctx)
 void Ssao::run(RenderingContext& ctx)
 {
 {
@@ -294,6 +312,14 @@ void Ssao::run(RenderingContext& ctx)
 	for(U i = 0; i < m_blurringIterationsCount; i++)
 	for(U i = 0; i < m_blurringIterationsCount; i++)
 	{
 	{
 		// hpass
 		// hpass
+		cmdb->setTextureBarrier(m_vblurRt,
+			TextureUsageBit::FRAMEBUFFER_ATTACHMENT_WRITE,
+			TextureUsageBit::FRAGMENT_SHADER_SAMPLED,
+			TextureSurfaceInfo(0, 0, 0, 0));
+		cmdb->setTextureBarrier(m_hblurRt,
+			TextureUsageBit::NONE,
+			TextureUsageBit::FRAMEBUFFER_ATTACHMENT_WRITE,
+			TextureSurfaceInfo(0, 0, 0, 0));
 		cmdb->beginRenderPass(m_hblurFb);
 		cmdb->beginRenderPass(m_hblurFb);
 		cmdb->bindPipeline(m_hblurPpline);
 		cmdb->bindPipeline(m_hblurPpline);
 		cmdb->bindResourceGroup(m_hblurRc, 0, nullptr);
 		cmdb->bindResourceGroup(m_hblurRc, 0, nullptr);
@@ -301,6 +327,14 @@ void Ssao::run(RenderingContext& ctx)
 		cmdb->endRenderPass();
 		cmdb->endRenderPass();
 
 
 		// vpass
 		// vpass
+		cmdb->setTextureBarrier(m_hblurRt,
+			TextureUsageBit::FRAMEBUFFER_ATTACHMENT_WRITE,
+			TextureUsageBit::FRAGMENT_SHADER_SAMPLED,
+			TextureSurfaceInfo(0, 0, 0, 0));
+		cmdb->setTextureBarrier(m_vblurRt,
+			TextureUsageBit::NONE,
+			TextureUsageBit::FRAMEBUFFER_ATTACHMENT_WRITE,
+			TextureSurfaceInfo(0, 0, 0, 0));
 		cmdb->beginRenderPass(m_vblurFb);
 		cmdb->beginRenderPass(m_vblurFb);
 		cmdb->bindPipeline(m_vblurPpline);
 		cmdb->bindPipeline(m_vblurPpline);
 		cmdb->bindResourceGroup(m_vblurRc, 0, nullptr);
 		cmdb->bindResourceGroup(m_vblurRc, 0, nullptr);

+ 0 - 1
src/renderer/Sslf.cpp

@@ -68,7 +68,6 @@ void Sslf::run(RenderingContext& ctx)
 	cmdb->bindResourceGroup(m_rcGroup, 0, nullptr);
 	cmdb->bindResourceGroup(m_rcGroup, 0, nullptr);
 
 
 	m_r->drawQuad(cmdb);
 	m_r->drawQuad(cmdb);
-	cmdb->endRenderPass();
 }
 }
 
 
 } // end namespace anki
 } // end namespace anki

+ 1 - 1
src/renderer/Tm.cpp

@@ -25,7 +25,7 @@ Error Tm::create(const ConfigSet& initializer)
 		m_r->getHeight());
 		m_r->getHeight());
 
 
 	ANKI_CHECK(getResourceManager().loadResourceToCache(m_luminanceShader,
 	ANKI_CHECK(getResourceManager().loadResourceToCache(m_luminanceShader,
-		"shaders/PpsTmAverageLuminance.comp.glsl",
+		"shaders/TmAverageLuminance.comp.glsl",
 		pps.toCString(),
 		pps.toCString(),
 		"r_"));
 		"r_"));
 
 

+ 2 - 5
src/renderer/Upsample.cpp

@@ -39,10 +39,7 @@ Error Upsample::init(const ConfigSet& config)
 	rcInit.m_textures[3].m_texture = m_r->getFs().getRt();
 	rcInit.m_textures[3].m_texture = m_r->getFs().getRt();
 	rcInit.m_textures[3].m_sampler = gr.newInstance<Sampler>(sinit);
 	rcInit.m_textures[3].m_sampler = gr.newInstance<Sampler>(sinit);
 
 
-	if(m_r->getSsaoEnabled())
-	{
-		rcInit.m_textures[4].m_texture = m_r->getSsao().getRt();
-	}
+	rcInit.m_textures[4].m_texture = m_r->getSsao().getRt();
 
 
 	rcInit.m_uniformBuffers[0].m_uploadedMemory = true;
 	rcInit.m_uniformBuffers[0].m_uploadedMemory = true;
 
 
@@ -55,7 +52,7 @@ Error Upsample::init(const ConfigSet& config)
 				"#define SSAO_ENABLED %u\n",
 				"#define SSAO_ENABLED %u\n",
 		m_r->getWidth() / FS_FRACTION,
 		m_r->getWidth() / FS_FRACTION,
 		m_r->getHeight() / FS_FRACTION,
 		m_r->getHeight() / FS_FRACTION,
-		m_r->getSsaoEnabled());
+		1);
 
 
 	ANKI_CHECK(getResourceManager().loadResourceToCache(
 	ANKI_CHECK(getResourceManager().loadResourceToCache(
 		m_frag, "shaders/NearDepthUpscale.frag.glsl", pps.toCString(), "r_"));
 		m_frag, "shaders/NearDepthUpscale.frag.glsl", pps.toCString(), "r_"));

+ 0 - 2
src/scene/SceneGraph.cpp

@@ -329,8 +329,6 @@ Error SceneGraph::update(
 	ANKI_CHECK(threadPool.waitForAllThreadsToFinish());
 	ANKI_CHECK(threadPool.waitForAllThreadsToFinish());
 	ANKI_TRACE_STOP_EVENT(SCENE_NODES_UPDATE);
 	ANKI_TRACE_STOP_EVENT(SCENE_NODES_UPDATE);
 
 
-	renderer.getOffscreenRenderer().prepareForVisibilityTests(*m_mainCam);
-
 	doVisibilityTests(*m_mainCam, *this, renderer.getOffscreenRenderer());
 	doVisibilityTests(*m_mainCam, *this, renderer.getOffscreenRenderer());
 
 
 	ANKI_TRACE_STOP_EVENT(SCENE_UPDATE);
 	ANKI_TRACE_STOP_EVENT(SCENE_UPDATE);