Browse Source

Renderer refactoring

Panagiotis Christopoulos Charitos 10 years ago
parent
commit
fd0cfc93aa

+ 16 - 7
include/anki/renderer/Dbg.h

@@ -41,8 +41,21 @@ class Dbg : public RenderingPass, public Bitset<detail::DbgFlag>
 public:
 public:
 	using Flag = detail::DbgFlag;
 	using Flag = detail::DbgFlag;
 
 
-	/// @privatesection
-	/// @{
+	Bool getEnabled() const
+	{
+		return m_enabled;
+	}
+
+	void setEnabled(Bool e)
+	{
+		m_enabled = e;
+	}
+
+	Bool getDepthTestEnabled() const;
+	void setDepthTestEnabled(Bool enable);
+	void switchDepthTestEnabled();
+
+anki_internal:
 	Dbg(Renderer* r);
 	Dbg(Renderer* r);
 
 
 	~Dbg();
 	~Dbg();
@@ -51,12 +64,8 @@ public:
 
 
 	ANKI_USE_RESULT Error run(CommandBufferPtr& jobs);
 	ANKI_USE_RESULT Error run(CommandBufferPtr& jobs);
 
 
-	Bool getDepthTestEnabled() const;
-	void setDepthTestEnabled(Bool enable);
-	void switchDepthTestEnabled();
-	/// @}
-
 private:
 private:
+	Bool m_enabled = false;
 	FramebufferPtr m_fb;
 	FramebufferPtr m_fb;
 	DebugDrawer* m_drawer = nullptr;
 	DebugDrawer* m_drawer = nullptr;
 	// Have it as ptr because the constructor calls opengl
 	// Have it as ptr because the constructor calls opengl

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

@@ -18,36 +18,6 @@ namespace anki
 class Pps : public RenderingPass
 class Pps : public RenderingPass
 {
 {
 public:
 public:
-	const Bloom& getBloom() const
-	{
-		return *m_bloom;
-	}
-
-	Bloom& getBloom()
-	{
-		return *m_bloom;
-	}
-
-	const Ssao& getSsao() const
-	{
-		return *m_ssao;
-	}
-
-	Ssao& getSsao()
-	{
-		return *m_ssao;
-	}
-
-	const Tm& getTm() const
-	{
-		return *m_tm;
-	}
-
-	Tm& getTm()
-	{
-		return *m_tm;
-	}
-
 	/// Load the color grading texture.
 	/// Load the color grading texture.
 	Error loadColorGradingTexture(CString filename);
 	Error loadColorGradingTexture(CString filename);
 
 
@@ -78,11 +48,6 @@ anki_internal:
 	}
 	}
 
 
 private:
 private:
-	UniquePtr<Ssao> m_ssao;
-	UniquePtr<Tm> m_tm;
-	UniquePtr<Bloom> m_bloom;
-	UniquePtr<Sslf> m_sslf;
-
 	FramebufferPtr m_fb;
 	FramebufferPtr m_fb;
 	ShaderResourcePtr m_frag;
 	ShaderResourcePtr m_frag;
 	PipelinePtr m_ppline;
 	PipelinePtr m_ppline;

+ 42 - 18
include/anki/renderer/Renderer.h

@@ -44,44 +44,64 @@ public:
 		return *m_ir;
 		return *m_ir;
 	}
 	}
 
 
-	const Ms& getMs() const
+	Ms& getMs()
 	{
 	{
 		return *m_ms;
 		return *m_ms;
 	}
 	}
 
 
-	Ms& getMs()
+	Is& getIs()
 	{
 	{
-		return *m_ms;
+		return *m_is;
 	}
 	}
 
 
-	const Is& getIs() const
+	Fs& getFs()
 	{
 	{
-		return *m_is;
+		return *m_fs;
 	}
 	}
 
 
-	Is& getIs()
+	Tm& getTm()
 	{
 	{
-		return *m_is;
+		return *m_tm;
 	}
 	}
 
 
-	Fs& getFs()
+	Bool getSsaoEnabled() const
 	{
 	{
-		return *m_fs;
+		return m_ssao.isCreated();
 	}
 	}
 
 
-	const Pps& getPps() const
+	Ssao& getSsao()
 	{
 	{
-		return *m_pps;
+		return *m_ssao;
 	}
 	}
 
 
-	Pps& getPps()
+	Bool getBloomEnabled() const
 	{
 	{
-		return *m_pps;
+		return m_bloom.isCreated();
 	}
 	}
 
 
-	const Dbg& getDbg() const
+	Bloom& getBloom()
 	{
 	{
-		return *m_dbg;
+		return *m_bloom;
+	}
+
+	Bool getSslfEnabled() const
+	{
+		return m_sslf.isCreated();
+	}
+
+	Sslf& getSslf()
+	{
+		return *m_sslf;
+	}
+
+	Bool getPpsEnabled() const
+	{
+		return m_pps.isCreated();
+	}
+
+	Pps& getPps()
+	{
+		return *m_pps;
 	}
 	}
 
 
 	Dbg& getDbg()
 	Dbg& getDbg()
@@ -309,11 +329,15 @@ private:
 	UniquePtr<Ir> m_ir;
 	UniquePtr<Ir> m_ir;
 	UniquePtr<Ms> m_ms; ///< Material rendering stage
 	UniquePtr<Ms> m_ms; ///< Material rendering stage
 	UniquePtr<Is> m_is; ///< Illumination rendering stage
 	UniquePtr<Is> m_is; ///< Illumination rendering stage
-	UniquePtr<Tiler> m_tiler;
-	UniquePtr<Pps> m_pps; ///< Postprocessing rendering stage
 	UniquePtr<Fs> m_fs; ///< Forward shading.
 	UniquePtr<Fs> m_fs; ///< Forward shading.
-	UniquePtr<Upsample> m_upsample;
 	UniquePtr<Lf> m_lf; ///< Forward shading lens flares.
 	UniquePtr<Lf> m_lf; ///< Forward shading lens flares.
+	UniquePtr<Upsample> m_upsample;
+	UniquePtr<Tiler> m_tiler;
+	UniquePtr<Tm> m_tm;
+	UniquePtr<Ssao> m_ssao;
+	UniquePtr<Bloom> m_bloom;
+	UniquePtr<Sslf> m_sslf;
+	UniquePtr<Pps> m_pps; ///< Postprocessing rendering stage
 	UniquePtr<Dbg> m_dbg; ///< Debug stage.
 	UniquePtr<Dbg> m_dbg; ///< Debug stage.
 	/// @}
 	/// @}
 
 

+ 0 - 12
include/anki/renderer/RenderingPass.h

@@ -25,17 +25,6 @@ class ConfigSet;
 /// Rendering pass
 /// Rendering pass
 class RenderingPass
 class RenderingPass
 {
 {
-public:
-	Bool getEnabled() const
-	{
-		return m_enabled;
-	}
-
-	void setEnabled(Bool e)
-	{
-		m_enabled = e;
-	}
-
 anki_internal:
 anki_internal:
 	RenderingPass(Renderer* r)
 	RenderingPass(Renderer* r)
 		: m_r(r)
 		: m_r(r)
@@ -51,7 +40,6 @@ anki_internal:
 	StackAllocator<U8> getFrameAllocator() const;
 	StackAllocator<U8> getFrameAllocator() const;
 
 
 protected:
 protected:
-	Bool8 m_enabled = false;
 	Renderer* m_r; ///< Know your father
 	Renderer* m_r; ///< Know your father
 
 
 	GrManager& getGrManager();
 	GrManager& getGrManager();

+ 2 - 2
shaders/Bloom.frag.glsl

@@ -9,12 +9,12 @@
 // Vars
 // Vars
 layout(binding = 0) uniform lowp sampler2D u_tex; ///< Its the IS RT
 layout(binding = 0) uniform lowp sampler2D u_tex; ///< Its the IS RT
 
 
-layout(std140, binding = 0) uniform _blk
+layout(UBO_BINDING(0, 0), std140) uniform u0_
 {
 {
 	vec4 u_thresholdScalePad2;
 	vec4 u_thresholdScalePad2;
 };
 };
 
 
-layout(std140, binding = 0) readonly buffer _blk1
+layout(SS_BINDING(0, 0), std140) readonly buffer ss0_
 {
 {
 	vec4 u_averageLuminancePad3;
 	vec4 u_averageLuminancePad3;
 };
 };

+ 1 - 3
shaders/Pps.frag.glsl

@@ -168,11 +168,9 @@ void main()
 	out_color = colorGrading(out_color);
 	out_color = colorGrading(out_color);
 
 
 #if 0
 #if 0
-#if SSAO_ENABLED
 	if(out_color.x != 0.0000001)
 	if(out_color.x != 0.0000001)
 	{
 	{
-		out_color = vec3(ssao);
+		out_color = vec3(bloom);
 	}
 	}
 #endif
 #endif
-#endif
 }
 }

+ 12 - 20
src/core/Config.cpp

@@ -15,7 +15,6 @@ Config::Config()
 	// Renderer
 	// Renderer
 	//
 	//
 
 
-	// Is
 	newOption("is.sm.enabled", true);
 	newOption("is.sm.enabled", true);
 	newOption("is.sm.poissonEnabled", true);
 	newOption("is.sm.poissonEnabled", true);
 	newOption("is.sm.bilinearEnabled", true);
 	newOption("is.sm.bilinearEnabled", true);
@@ -31,39 +30,32 @@ Config::Config()
 	newOption("lf.maxSpritesPerFlare", 8);
 	newOption("lf.maxSpritesPerFlare", 8);
 	newOption("lf.maxFlares", 16);
 	newOption("lf.maxFlares", 16);
 
 
-	// Pps
-	newOption("pps.bloom.enabled", true);
-	newOption("pps.bloom.renderingQuality", 0.5);
-	newOption("pps.bloom.blurringDist", 1.0);
-	newOption("pps.bloom.samples", 5);
-	newOption("pps.bloom.blurringIterationsCount", 1);
-	newOption("pps.bloom.threshold", 1.0);
-	newOption("pps.bloom.scale", 2.0);
+	newOption("bloom.enabled", true);
+	newOption("bloom.renderingQuality", 0.5);
+	newOption("bloom.blurringDist", 1.0);
+	newOption("bloom.samples", 5);
+	newOption("bloom.blurringIterationsCount", 1);
+	newOption("bloom.threshold", 1.0);
+	newOption("bloom.scale", 2.0);
 
 
-	newOption("pps.ssao.enabled", true);
-	newOption("pps.ssao.renderingQuality", 0.3);
-	newOption("pps.ssao.blurringIterationsCount", 1);
+	newOption("ssao.enabled", true);
+	newOption("ssao.renderingQuality", 0.3);
+	newOption("ssao.blurringIterationsCount", 1);
 
 
-	newOption("pps.bl.enabled", true);
-	newOption("pps.bl.blurringIterationsCount", 1);
-	newOption("pps.bl.sideBlurFactor", 1.0);
-
-	newOption("pps.sslf.enabled", true);
+	newOption("sslf.enabled", true);
 
 
 	newOption("pps.enabled", true);
 	newOption("pps.enabled", true);
 	newOption("pps.sharpen", true);
 	newOption("pps.sharpen", true);
 	newOption("pps.gammaCorrection", true);
 	newOption("pps.gammaCorrection", true);
 
 
-	// Reflections
 	newOption("ir.enabled", true);
 	newOption("ir.enabled", true);
 	newOption("ir.rendererSize", 128);
 	newOption("ir.rendererSize", 128);
 	newOption("ir.cubemapTextureArraySize", 16);
 	newOption("ir.cubemapTextureArraySize", 16);
-	newOption("ir.clusterSizeZ", 16);
 	newOption("sslr.enabled", true);
 	newOption("sslr.enabled", true);
 	newOption("sslr.startRoughnes", 0.2);
 	newOption("sslr.startRoughnes", 0.2);
 
 
-	// Dbg
 	newOption("dbg.enabled", false);
 	newOption("dbg.enabled", false);
+	newOption("tm.enabled", true);
 
 
 	// Globals
 	// Globals
 	newOption("width", 0);
 	newOption("width", 0);

+ 27 - 28
src/renderer/Bloom.cpp

@@ -43,25 +43,18 @@ Error Bloom::initFb(FramebufferPtr& fb, TexturePtr& rt)
 //==============================================================================
 //==============================================================================
 Error Bloom::initInternal(const ConfigSet& config)
 Error Bloom::initInternal(const ConfigSet& config)
 {
 {
-	m_enabled = config.getNumber("pps.bloom.enabled");
-
-	if(!m_enabled)
-	{
-		return ErrorCode::NONE;
-	}
-
-	const F32 renderingQuality = config.getNumber("pps.bloom.renderingQuality");
+	const F32 renderingQuality = config.getNumber("bloom.renderingQuality");
 
 
 	m_width = renderingQuality * F32(m_r->getWidth());
 	m_width = renderingQuality * F32(m_r->getWidth());
 	alignRoundDown(16, m_width);
 	alignRoundDown(16, m_width);
 	m_height = renderingQuality * F32(m_r->getHeight());
 	m_height = renderingQuality * F32(m_r->getHeight());
 	alignRoundDown(16, m_height);
 	alignRoundDown(16, m_height);
 
 
-	m_threshold = config.getNumber("pps.bloom.threshold");
-	m_scale = config.getNumber("pps.bloom.scale");
-	m_blurringDist = config.getNumber("pps.bloom.blurringDist");
+	m_threshold = config.getNumber("bloom.threshold");
+	m_scale = config.getNumber("bloom.scale");
+	m_blurringDist = config.getNumber("bloom.blurringDist");
 	m_blurringIterationsCount =
 	m_blurringIterationsCount =
-		config.getNumber("pps.bloom.blurringIterationsCount");
+		config.getNumber("bloom.blurringIterationsCount");
 
 
 	ANKI_CHECK(initFb(m_hblurFb, m_hblurRt));
 	ANKI_CHECK(initFb(m_hblurFb, m_hblurRt));
 	ANKI_CHECK(initFb(m_vblurFb, m_vblurRt));
 	ANKI_CHECK(initFb(m_vblurFb, m_vblurRt));
@@ -117,20 +110,28 @@ Error Bloom::initInternal(const ConfigSet& config)
 		m_vblurFrag->getGrShader(), colorState, m_vblurPpline);
 		m_vblurFrag->getGrShader(), colorState, m_vblurPpline);
 
 
 	// Set descriptors
 	// Set descriptors
-	ResourceGroupInitializer descInit;
-	descInit.m_textures[0].m_texture = m_r->getIs().getRt();
-	descInit.m_uniformBuffers[0].m_dynamic = true;
-	descInit.m_uniformBuffers[0].m_range = sizeof(Vec4);
-	descInit.m_storageBuffers[0].m_buffer =
-		m_r->getPps().getTm().getAverageLuminanceBuffer();
+	{
+		ResourceGroupInitializer descInit;
+		descInit.m_textures[0].m_texture = m_r->getIs().getRt();
+		descInit.m_uniformBuffers[0].m_dynamic = true;
+
+		descInit.m_storageBuffers[0].m_buffer =
+			m_r->getTm().getAverageLuminanceBuffer();
 
 
-	m_firstDescrGroup = gl.newInstance<ResourceGroup>(descInit);
+		m_firstDescrGroup = gl.newInstance<ResourceGroup>(descInit);
+	}
 
 
-	descInit.m_textures[0].m_texture = m_vblurRt;
-	m_hDescrGroup = gl.newInstance<ResourceGroup>(descInit);
+	{
+		ResourceGroupInitializer descInit;
+		descInit.m_textures[0].m_texture = m_vblurRt;
+		m_hDescrGroup = gl.newInstance<ResourceGroup>(descInit);
+	}
 
 
-	descInit.m_textures[0].m_texture = m_hblurRt;
-	m_vDescrGroup = gl.newInstance<ResourceGroup>(descInit);
+	{
+		ResourceGroupInitializer descInit;
+		descInit.m_textures[0].m_texture = m_hblurRt;
+		m_vDescrGroup = gl.newInstance<ResourceGroup>(descInit);
+	}
 
 
 	getGrManager().finish();
 	getGrManager().finish();
 	return ErrorCode::NONE;
 	return ErrorCode::NONE;
@@ -151,8 +152,6 @@ Error Bloom::init(const ConfigSet& config)
 //==============================================================================
 //==============================================================================
 void Bloom::run(CommandBufferPtr& cmdb)
 void Bloom::run(CommandBufferPtr& cmdb)
 {
 {
-	ANKI_ASSERT(m_enabled);
-
 	// For the passes it should be NEAREST_BASE
 	// For the passes it should be NEAREST_BASE
 	// vblurFai.setFiltering(Texture::TFrustumType::NEAREST_BASE);
 	// vblurFai.setFiltering(Texture::TFrustumType::NEAREST_BASE);
 
 
@@ -162,9 +161,9 @@ void Bloom::run(CommandBufferPtr& cmdb)
 	cmdb->bindPipeline(m_tonePpline);
 	cmdb->bindPipeline(m_tonePpline);
 
 
 	DynamicBufferInfo dyn;
 	DynamicBufferInfo dyn;
-	Vec4* uniforms = static_cast<Vec4*>(
-		getGrManager().allocateFrameHostVisibleMemory(
-		sizeof(Vec4), BufferUsage::UNIFORM, dyn.m_uniformBuffers[0]));
+	Vec4* uniforms =
+		static_cast<Vec4*>(getGrManager().allocateFrameHostVisibleMemory(
+			sizeof(Vec4), BufferUsage::UNIFORM, dyn.m_uniformBuffers[0]));
 	*uniforms = Vec4(m_threshold, m_scale, 0.0, 0.0);
 	*uniforms = Vec4(m_threshold, m_scale, 0.0, 0.0);
 
 
 	cmdb->bindResourceGroup(m_firstDescrGroup, 0, &dyn);
 	cmdb->bindResourceGroup(m_firstDescrGroup, 0, &dyn);

+ 1 - 1
src/renderer/Dbg.cpp

@@ -55,7 +55,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->getPps().getEnabled())
+	if(m_r->getPpsEnabled())
 	{
 	{
 		fbInit.m_colorAttachments[0].m_texture = m_r->getPps().getRt();
 		fbInit.m_colorAttachments[0].m_texture = m_r->getPps().getRt();
 	}
 	}

+ 2 - 5
src/renderer/Ir.cpp

@@ -186,11 +186,9 @@ Error Ir::init(const ConfigSet& config)
 	nestedRConfig.set("is.sm.poissonEnabled", false);
 	nestedRConfig.set("is.sm.poissonEnabled", false);
 	nestedRConfig.set("is.sm.resolution", 16);
 	nestedRConfig.set("is.sm.resolution", 16);
 	nestedRConfig.set("lf.maxFlares", 8);
 	nestedRConfig.set("lf.maxFlares", 8);
-	nestedRConfig.set("pps.enabled", true);
-	nestedRConfig.set("pps.bloom.enabled", true); // XXX ?
-	nestedRConfig.set("pps.ssao.enabled", false);
+	nestedRConfig.set("pps.enabled", false);
 	nestedRConfig.set("renderingQuality", 1.0);
 	nestedRConfig.set("renderingQuality", 1.0);
-	nestedRConfig.set("clusterSizeZ", 4);
+	nestedRConfig.set("clusterSizeZ", 16);
 	nestedRConfig.set("width", m_fbSize);
 	nestedRConfig.set("width", m_fbSize);
 	nestedRConfig.set("height", m_fbSize);
 	nestedRConfig.set("height", m_fbSize);
 	nestedRConfig.set("lodDistance", 10.0);
 	nestedRConfig.set("lodDistance", 10.0);
@@ -205,7 +203,6 @@ Error Ir::init(const ConfigSet& config)
 		m_r->getFrameAllocator(),
 		m_r->getFrameAllocator(),
 		nestedRConfig,
 		nestedRConfig,
 		m_r->getGlobalTimestampPtr()));
 		m_r->getGlobalTimestampPtr()));
-	m_nestedR.getPps().setFog(Vec3(1.0, 0.0, 1.0), 0.0);
 
 
 	// Init the textures
 	// Init the textures
 	TextureInitializer texinit;
 	TextureInitializer texinit;

+ 2 - 2
src/renderer/MainRenderer.cpp

@@ -100,7 +100,7 @@ Error MainRenderer::create(ThreadPool* threadpool,
 
 
 	// Init RC group
 	// Init RC group
 	ResourceGroupInitializer rcinit;
 	ResourceGroupInitializer rcinit;
-	if(m_r->getPps().getEnabled())
+	if(m_r->getPpsEnabled())
 	{
 	{
 		rcinit.m_textures[0].m_texture = m_r->getPps().getRt();
 		rcinit.m_textures[0].m_texture = m_r->getPps().getRt();
 	}
 	}
@@ -128,7 +128,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()
 	if(m_renderingQuality == 1.0 && !m_r->getDbg().getEnabled()
-		&& m_r->getPps().getEnabled())
+		&& m_r->getPpsEnabled())
 	{
 	{
 		rDrawToDefault = true;
 		rDrawToDefault = true;
 	}
 	}

+ 11 - 49
src/renderer/Pps.cpp

@@ -51,26 +51,8 @@ Pps::~Pps()
 //==============================================================================
 //==============================================================================
 Error Pps::initInternal(const ConfigSet& config)
 Error Pps::initInternal(const ConfigSet& config)
 {
 {
-	m_enabled = config.getNumber("pps.enabled");
-	if(!m_enabled)
-	{
-		return ErrorCode::NONE;
-	}
-
 	ANKI_ASSERT("Initializing PPS");
 	ANKI_ASSERT("Initializing PPS");
 
 
-	m_ssao.reset(getAllocator().newInstance<Ssao>(m_r));
-	ANKI_CHECK(m_ssao->init(config));
-
-	m_tm.reset(getAllocator().newInstance<Tm>(m_r));
-	ANKI_CHECK(m_tm->create(config));
-
-	m_bloom.reset(getAllocator().newInstance<Bloom>(m_r));
-	ANKI_CHECK(m_bloom->init(config));
-
-	m_sslf.reset(getAllocator().newInstance<Sslf>(m_r));
-	ANKI_CHECK(m_sslf->init(config));
-
 	// FBO
 	// FBO
 	m_r->createRenderTarget(m_r->getWidth(),
 	m_r->createRenderTarget(m_r->getWidth(),
 		m_r->getHeight(),
 		m_r->getHeight(),
@@ -97,9 +79,9 @@ 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_ssao->getEnabled(),
-		m_bloom->getEnabled(),
-		m_sslf->getEnabled(),
+		m_r->getSsaoEnabled(),
+		m_r->getBloomEnabled(),
+		m_r->getSslfEnabled(),
 		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(),
@@ -125,26 +107,27 @@ Error Pps::initInternal(const ConfigSet& config)
 	ResourceGroupInitializer rcInit;
 	ResourceGroupInitializer rcInit;
 	rcInit.m_textures[0].m_texture = m_r->getIs().getRt();
 	rcInit.m_textures[0].m_texture = m_r->getIs().getRt();
 
 
-	if(m_ssao->getEnabled())
+	if(m_r->getSsaoEnabled())
 	{
 	{
-		rcInit.m_textures[1].m_texture = m_ssao->getRt();
+		rcInit.m_textures[1].m_texture = m_r->getSsao().getRt();
 	}
 	}
 
 
-	if(m_bloom->getEnabled())
+	if(m_r->getBloomEnabled())
 	{
 	{
-		rcInit.m_textures[2].m_texture = m_bloom->getRt();
+		rcInit.m_textures[2].m_texture = m_r->getBloom().getRt();
 	}
 	}
 
 
 	rcInit.m_textures[3].m_texture = m_lut->getGrTexture();
 	rcInit.m_textures[3].m_texture = m_lut->getGrTexture();
 
 
-	if(m_sslf->getEnabled())
+	if(m_r->getSslfEnabled())
 	{
 	{
-		rcInit.m_textures[4].m_texture = m_sslf->getRt();
+		rcInit.m_textures[4].m_texture = m_r->getSslf().getRt();
 	}
 	}
 
 
 	rcInit.m_textures[5].m_texture = m_r->getMs().getDepthRt();
 	rcInit.m_textures[5].m_texture = m_r->getMs().getDepthRt();
 
 
-	rcInit.m_storageBuffers[0].m_buffer = m_tm->getAverageLuminanceBuffer();
+	rcInit.m_storageBuffers[0].m_buffer =
+		m_r->getTm().getAverageLuminanceBuffer();
 	rcInit.m_storageBuffers[1].m_buffer = m_uniformsBuff;
 	rcInit.m_storageBuffers[1].m_buffer = m_uniformsBuff;
 
 
 	m_rcGroup = getGrManager().newInstance<ResourceGroup>(rcInit);
 	m_rcGroup = getGrManager().newInstance<ResourceGroup>(rcInit);
@@ -174,27 +157,6 @@ Error Pps::loadColorGradingTexture(CString filename)
 //==============================================================================
 //==============================================================================
 void Pps::run(CommandBufferPtr& cmdb)
 void Pps::run(CommandBufferPtr& cmdb)
 {
 {
-	ANKI_ASSERT(m_enabled);
-
-	// First SSAO because it depends on MS where HDR depends on IS
-	if(m_ssao->getEnabled())
-	{
-		m_ssao->run(cmdb);
-	}
-
-	m_r->getIs().generateMipmaps(cmdb); // XXX
-	m_tm->run(cmdb);
-
-	if(m_bloom->getEnabled())
-	{
-		m_bloom->run(cmdb);
-	}
-
-	if(m_sslf->getEnabled())
-	{
-		m_sslf->run(cmdb);
-	}
-
 	FramebufferPtr fb = m_fb;
 	FramebufferPtr fb = m_fb;
 	U32 width = m_r->getWidth();
 	U32 width = m_r->getWidth();
 	U32 height = m_r->getHeight();
 	U32 height = m_r->getHeight();

+ 60 - 6
src/renderer/Renderer.cpp

@@ -13,6 +13,10 @@
 #include <anki/renderer/Ms.h>
 #include <anki/renderer/Ms.h>
 #include <anki/renderer/Is.h>
 #include <anki/renderer/Is.h>
 #include <anki/renderer/Pps.h>
 #include <anki/renderer/Pps.h>
+#include <anki/renderer/Ssao.h>
+#include <anki/renderer/Sslf.h>
+#include <anki/renderer/Bloom.h>
+#include <anki/renderer/Tm.h>
 #include <anki/renderer/Fs.h>
 #include <anki/renderer/Fs.h>
 #include <anki/renderer/Lf.h>
 #include <anki/renderer/Lf.h>
 #include <anki/renderer/Dbg.h>
 #include <anki/renderer/Dbg.h>
@@ -148,14 +152,42 @@ Error Renderer::initInternal(const ConfigSet& config)
 	m_fs.reset(m_alloc.newInstance<Fs>(this));
 	m_fs.reset(m_alloc.newInstance<Fs>(this));
 	ANKI_CHECK(m_fs->init(config));
 	ANKI_CHECK(m_fs->init(config));
 
 
+	m_lf.reset(m_alloc.newInstance<Lf>(this));
+	ANKI_CHECK(m_lf->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));
 
 
-	m_lf.reset(m_alloc.newInstance<Lf>(this));
-	ANKI_CHECK(m_lf->init(config));
+	if(config.getNumber("tm.enabled") && config.getNumber("pps.enabled"))
+	{
+		m_tm.reset(getAllocator().newInstance<Tm>(this));
+		ANKI_CHECK(m_tm->create(config));
+	}
+
+	if(config.getNumber("ssao.enabled") && config.getNumber("pps.enabled"))
+	{
+		m_ssao.reset(m_alloc.newInstance<Ssao>(this));
+		ANKI_CHECK(m_ssao->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_pps.reset(m_alloc.newInstance<Pps>(this));
-	ANKI_CHECK(m_pps->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));
+	}
+
+	if(config.getNumber("pps.enabled"))
+	{
+		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));
@@ -213,7 +245,7 @@ Error Renderer::render(
 
 
 	m_lf->runOcclusionTests(cmdb);
 	m_lf->runOcclusionTests(cmdb);
 
 
-	m_tiler->run(cmdb);
+	// m_tiler->run(cmdb);
 
 
 	ANKI_CHECK(m_is->run(cmdb));
 	ANKI_CHECK(m_is->run(cmdb));
 
 
@@ -225,7 +257,29 @@ Error Renderer::render(
 
 
 	m_upsample->run(cmdb);
 	m_upsample->run(cmdb);
 
 
-	if(m_pps->getEnabled())
+	cmdb->generateMipmaps(m_is->getRt());
+
+	if(m_tm)
+	{
+		m_tm->run(cmdb);
+	}
+
+	if(m_bloom)
+	{
+		m_bloom->run(cmdb);
+	}
+
+	if(m_sslf)
+	{
+		m_sslf->run(cmdb);
+	}
+
+	if(m_ssao)
+	{
+		m_ssao->run(cmdb);
+	}
+
+	if(m_pps)
 	{
 	{
 		m_pps->run(cmdb);
 		m_pps->run(cmdb);
 	}
 	}

+ 2 - 11
src/renderer/Ssao.cpp

@@ -83,22 +83,15 @@ Error Ssao::createFb(FramebufferPtr& fb, TexturePtr& rt)
 //==============================================================================
 //==============================================================================
 Error Ssao::initInternal(const ConfigSet& config)
 Error Ssao::initInternal(const ConfigSet& config)
 {
 {
-	m_enabled = config.getNumber("pps.ssao.enabled");
-
-	if(!m_enabled)
-	{
-		return ErrorCode::NONE;
-	}
-
 	GrManager& gr = getGrManager();
 	GrManager& gr = getGrManager();
 
 
 	m_blurringIterationsCount =
 	m_blurringIterationsCount =
-		config.getNumber("pps.ssao.blurringIterationsCount");
+		config.getNumber("ssao.blurringIterationsCount");
 
 
 	//
 	//
 	// Init the widths/heights
 	// Init the widths/heights
 	//
 	//
-	const F32 quality = config.getNumber("pps.ssao.renderingQuality");
+	const F32 quality = config.getNumber("ssao.renderingQuality");
 
 
 	m_width = quality * (F32)m_r->getWidth();
 	m_width = quality * (F32)m_r->getWidth();
 	alignRoundUp(16, m_width);
 	alignRoundUp(16, m_width);
@@ -265,8 +258,6 @@ Error Ssao::init(const ConfigSet& config)
 //==============================================================================
 //==============================================================================
 void Ssao::run(CommandBufferPtr& cmdb)
 void Ssao::run(CommandBufferPtr& cmdb)
 {
 {
-	ANKI_ASSERT(m_enabled);
-
 	// 1st pass
 	// 1st pass
 	//
 	//
 	cmdb->bindFramebuffer(m_vblurFb);
 	cmdb->bindFramebuffer(m_vblurFb);

+ 7 - 17
src/renderer/Sslf.cpp

@@ -27,12 +27,6 @@ Error Sslf::init(const ConfigSet& config)
 //==============================================================================
 //==============================================================================
 Error Sslf::initInternal(const ConfigSet& config)
 Error Sslf::initInternal(const ConfigSet& config)
 {
 {
-	m_enabled = config.getNumber("pps.sslf.enabled");
-	if(!m_enabled)
-	{
-		return ErrorCode::NONE;
-	}
-
 	const PixelFormat pixelFormat(
 	const PixelFormat pixelFormat(
 		ComponentFormat::R8G8B8, TransformFormat::UNORM);
 		ComponentFormat::R8G8B8, TransformFormat::UNORM);
 
 
@@ -40,8 +34,8 @@ Error Sslf::initInternal(const ConfigSet& config)
 	StringAuto pps(getAllocator());
 	StringAuto pps(getAllocator());
 
 
 	pps.sprintf("#define TEX_DIMENSIONS vec2(%u.0, %u.0)\n",
 	pps.sprintf("#define TEX_DIMENSIONS vec2(%u.0, %u.0)\n",
-		m_r->getPps().getBloom().getWidth(),
-		m_r->getPps().getBloom().getHeight());
+		m_r->getBloom().getWidth(),
+		m_r->getBloom().getHeight());
 
 
 	ANKI_CHECK(getResourceManager().loadResourceToCache(
 	ANKI_CHECK(getResourceManager().loadResourceToCache(
 		m_frag, "shaders/Sslf.frag.glsl", pps.toCString(), "r_"));
 		m_frag, "shaders/Sslf.frag.glsl", pps.toCString(), "r_"));
@@ -57,8 +51,8 @@ Error Sslf::initInternal(const ConfigSet& config)
 		"engine_data/lens_dirt.ankitex", m_lensDirtTex));
 		"engine_data/lens_dirt.ankitex", m_lensDirtTex));
 
 
 	// Create the render target and FB
 	// Create the render target and FB
-	m_r->createRenderTarget(m_r->getPps().getBloom().getWidth(),
-		m_r->getPps().getBloom().getHeight(),
+	m_r->createRenderTarget(m_r->getBloom().getWidth(),
+		m_r->getBloom().getHeight(),
 		pixelFormat,
 		pixelFormat,
 		1,
 		1,
 		SamplingFilter::LINEAR,
 		SamplingFilter::LINEAR,
@@ -74,7 +68,7 @@ Error Sslf::initInternal(const ConfigSet& config)
 
 
 	// Create the resource group
 	// Create the resource group
 	ResourceGroupInitializer rcInit;
 	ResourceGroupInitializer rcInit;
-	rcInit.m_textures[0].m_texture = m_r->getPps().getBloom().getRt();
+	rcInit.m_textures[0].m_texture = m_r->getBloom().getRt();
 	rcInit.m_textures[1].m_texture = m_lensDirtTex->getGrTexture();
 	rcInit.m_textures[1].m_texture = m_lensDirtTex->getGrTexture();
 
 
 	m_rcGroup = getGrManager().newInstance<ResourceGroup>(rcInit);
 	m_rcGroup = getGrManager().newInstance<ResourceGroup>(rcInit);
@@ -86,14 +80,10 @@ Error Sslf::initInternal(const ConfigSet& config)
 //==============================================================================
 //==============================================================================
 void Sslf::run(CommandBufferPtr& cmdb)
 void Sslf::run(CommandBufferPtr& cmdb)
 {
 {
-	ANKI_ASSERT(m_enabled);
-
 	// Draw to the SSLF FB
 	// Draw to the SSLF FB
 	cmdb->bindFramebuffer(m_fb);
 	cmdb->bindFramebuffer(m_fb);
-	cmdb->setViewport(0,
-		0,
-		m_r->getPps().getBloom().getWidth(),
-		m_r->getPps().getBloom().getHeight());
+	cmdb->setViewport(
+		0, 0, m_r->getBloom().getWidth(), m_r->getBloom().getHeight());
 
 
 	cmdb->bindPipeline(m_ppline);
 	cmdb->bindPipeline(m_ppline);
 	cmdb->bindResourceGroup(m_rcGroup, 0, nullptr);
 	cmdb->bindResourceGroup(m_rcGroup, 0, nullptr);

+ 11 - 15
testapp/Main.cpp

@@ -503,20 +503,17 @@ Error initSubsystems(int argc, char* argv[])
 	config.set("is.sm.resolution", 1024);
 	config.set("is.sm.resolution", 1024);
 	config.set("lf.maxFlares", 32);
 	config.set("lf.maxFlares", 32);
 	config.set("pps.enabled", true);
 	config.set("pps.enabled", true);
-	config.set("pps.bloom.enabled", true);
-	config.set("pps.bloom.renderingQuality", 0.5);
-	config.set("pps.bloom.blurringDist", 1.0);
-	config.set("pps.bloom.blurringIterationsCount", 3);
-	config.set("pps.bloom.threshold", 2.0);
-	config.set("pps.bloom.scale", 2.0);
-	config.set("pps.bloom.samples", 17);
-	config.set("pps.ssao.blurringIterationsCount", 2);
-	config.set("pps.ssao.enabled", true);
-	config.set("pps.ssao.renderingQuality", 0.35);
-	config.set("pps.bl.enabled", true);
-	config.set("pps.bl.blurringIterationsCount", 2);
-	config.set("pps.bl.sideBlurFactor", 1.0);
-	config.set("pps.sslf.enabled", true);
+	config.set("bloom.enabled", true);
+	config.set("bloom.renderingQuality", 0.5);
+	config.set("bloom.blurringDist", 1.0);
+	config.set("bloom.blurringIterationsCount", 3);
+	config.set("bloom.threshold", 2.0);
+	config.set("bloom.scale", 2.0);
+	config.set("bloom.samples", 17);
+	config.set("ssao.blurringIterationsCount", 2);
+	config.set("ssao.enabled", true);
+	config.set("ssao.renderingQuality", 0.35);
+	config.set("sslf.enabled", true);
 	config.set("pps.sharpen", true);
 	config.set("pps.sharpen", true);
 	config.set("renderingQuality", 1.0);
 	config.set("renderingQuality", 1.0);
 	config.set("width", 1920);
 	config.set("width", 1920);
@@ -529,7 +526,6 @@ Error initSubsystems(int argc, char* argv[])
 	// config.set("ir.clusterSizeZ", 32);
 	// config.set("ir.clusterSizeZ", 32);
 	config.set("sslr.enabled", false);
 	config.set("sslr.enabled", false);
 	config.set("ir.rendererSize", 64);
 	config.set("ir.rendererSize", 64);
-	config.set("ir.clusterSizeZ", 16);
 	config.set("fullscreenDesktopResolution", true);
 	config.set("fullscreenDesktopResolution", true);
 	// config.set("clusterSizeZ", 16);
 	// config.set("clusterSizeZ", 16);
 	config.set("debugContext", false);
 	config.set("debugContext", false);