Browse Source

Some refactoring

Panagiotis Christopoulos Charitos 7 years ago
parent
commit
a96940e04e
39 changed files with 140 additions and 157 deletions
  1. 1 1
      src/anki/collision/CompoundShape.cpp
  2. 1 1
      src/anki/core/Config.cpp
  3. 2 2
      src/anki/gr/Common.h
  4. 1 1
      src/anki/gr/vulkan/Pipeline.h
  5. 3 3
      src/anki/gr/vulkan/ShaderProgramImpl.cpp
  6. 1 1
      src/anki/gr/vulkan/TextureImpl.cpp
  7. 3 3
      src/anki/input/Input.cpp
  8. 1 1
      src/anki/input/InputAndroid.cpp
  9. 2 3
      src/anki/physics/PhysicsWorld.h
  10. 10 2
      src/anki/renderer/Bloom.cpp
  11. 0 10
      src/anki/renderer/Bloom.h
  12. 7 1
      src/anki/renderer/Dbg.cpp
  13. 0 7
      src/anki/renderer/Dbg.h
  14. 12 2
      src/anki/renderer/DownscaleBlur.cpp
  15. 0 6
      src/anki/renderer/DownscaleBlur.h
  16. 7 1
      src/anki/renderer/FinalComposite.cpp
  17. 0 7
      src/anki/renderer/FinalComposite.h
  18. 5 1
      src/anki/renderer/GBuffer.cpp
  19. 0 7
      src/anki/renderer/GBuffer.h
  20. 4 1
      src/anki/renderer/GBufferPost.cpp
  21. 0 5
      src/anki/renderer/GBufferPost.h
  22. 6 1
      src/anki/renderer/Indirect.cpp
  23. 0 7
      src/anki/renderer/Indirect.h
  24. 7 1
      src/anki/renderer/LensFlare.cpp
  25. 0 7
      src/anki/renderer/LensFlare.h
  26. 13 2
      src/anki/renderer/MainRenderer.cpp
  27. 0 13
      src/anki/renderer/MainRenderer.h
  28. 7 1
      src/anki/renderer/ShadowMapping.cpp
  29. 28 4
      src/anki/renderer/Ssao.cpp
  30. 0 14
      src/anki/renderer/Ssao.h
  31. 2 1
      src/anki/renderer/Ssr.cpp
  32. 0 5
      src/anki/renderer/Ssr.h
  33. 7 1
      src/anki/renderer/TemporalAA.cpp
  34. 0 7
      src/anki/renderer/TemporalAA.h
  35. 7 1
      src/anki/renderer/Tonemapping.cpp
  36. 0 7
      src/anki/renderer/Tonemapping.h
  37. 2 2
      src/anki/resource/ShaderProgramResource.h
  38. 0 16
      src/anki/util/Functions.h
  39. 1 1
      src/anki/util/String.cpp

+ 1 - 1
src/anki/collision/CompoundShape.cpp

@@ -13,7 +13,7 @@ namespace anki
 CompoundShape::CompoundShape()
 	: CollisionShape(CollisionShapeType::COMPOUND)
 {
-	memset(&m_dflt, 0, sizeof(m_dflt));
+	zeroMemory(m_dflt);
 }
 
 F32 CompoundShape::testPlane(const Plane& p) const

+ 1 - 1
src/anki/core/Config.cpp

@@ -25,7 +25,7 @@ Config::Config()
 	newOption("r.volumetricLightingAccumulation.finalClusterInZ", 26);
 
 	newOption("r.shadowMapping.enabled", true);
-	newOption("r.shadowMapping.tileResolution", 64);
+	newOption("r.shadowMapping.tileResolution", 128);
 	newOption("r.shadowMapping.tileCountPerRowOrColumn", 16);
 	newOption("r.shadowMapping.scratchTileCountX", 4 * 5);
 	newOption("r.shadowMapping.scratchTileCountY", 4);

+ 2 - 2
src/anki/gr/Common.h

@@ -168,7 +168,7 @@ public:
 
 	ClearValue()
 	{
-		memset(this, 0, sizeof(*this));
+		zeroMemory(*this);
 	}
 
 	ClearValue(const ClearValue& b)
@@ -351,7 +351,7 @@ public:
 	void setName(CString name)
 	{
 		// Zero it because the derived classes may be hashed.
-		memset(&m_name[0], 0, sizeof(m_name));
+		zeroMemory(m_name);
 
 		if(name && name.getLength())
 		{

+ 1 - 1
src/anki/gr/vulkan/Pipeline.h

@@ -155,7 +155,7 @@ public:
 
 		// Do a special construction. The state will be hashed and the padding may contain garbage. With this trick
 		// zero the padding
-		memset(this, 0, sizeof(*this));
+		zeroMemory(*this);
 
 #define ANKI_CONSTRUCT_AND_ZERO_PADDING(memb_) new(&memb_) decltype(memb_)()
 

+ 3 - 3
src/anki/gr/vulkan/ShaderProgramImpl.cpp

@@ -47,7 +47,7 @@ Error ShaderProgramImpl::init(const ShaderProgramInitInfo& inf)
 
 			m_stages |= static_cast<ShaderTypeBit>(1 << stype);
 
-			const ShaderImpl& simpl = *scast<const ShaderImpl*>(m_shaders[stype].get());
+			const ShaderImpl& simpl = *static_cast<const ShaderImpl*>(m_shaders[stype].get());
 
 			m_refl.m_activeBindingMask[set] |= simpl.m_activeBindingMask[set];
 
@@ -121,9 +121,9 @@ Error ShaderProgramImpl::init(const ShaderProgramInitInfo& inf)
 	const Bool graphicsProg = !!(m_stages & ShaderTypeBit::VERTEX);
 	if(graphicsProg)
 	{
-		m_refl.m_attributeMask = scast<const ShaderImpl*>(m_shaders[ShaderType::VERTEX].get())->m_attributeMask;
+		m_refl.m_attributeMask = static_cast<const ShaderImpl*>(m_shaders[ShaderType::VERTEX].get())->m_attributeMask;
 		m_refl.m_colorAttachmentWritemask =
-			scast<const ShaderImpl*>(m_shaders[ShaderType::FRAGMENT].get())->m_colorAttachmentWritemask;
+			static_cast<const ShaderImpl*>(m_shaders[ShaderType::FRAGMENT].get())->m_colorAttachmentWritemask;
 
 		const U attachmentCount = m_refl.m_colorAttachmentWritemask.getEnabledBitCount();
 		for(U i = 0; i < attachmentCount; ++i)

+ 1 - 1
src/anki/gr/vulkan/TextureImpl.cpp

@@ -91,7 +91,7 @@ Error TextureImpl::initInternal(VkImage externalImage, const TextureInitInfo& in
 	}
 
 	// Init the template
-	memset(&m_viewCreateInfoTemplate, 0, sizeof(m_viewCreateInfoTemplate)); // memset, it will be used for hashing
+	zeroMemory(m_viewCreateInfoTemplate); // zero it, it will be used for hashing
 	m_viewCreateInfoTemplate.sType = VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO;
 	m_viewCreateInfoTemplate.image = m_imageHandle;
 	m_viewCreateInfoTemplate.viewType = convertTextureViewType(init.m_type);

+ 3 - 3
src/anki/input/Input.cpp

@@ -11,11 +11,11 @@ namespace anki
 
 void Input::reset()
 {
-	std::memset(&m_keys[0], 0, sizeof(m_keys));
-	std::memset(&m_mouseBtns[0], 0, sizeof(m_mouseBtns));
+	zeroMemory(m_keys);
+	zeroMemory(m_mouseBtns);
 	m_mousePosNdc = Vec2(-1.0f);
 	m_mousePosWin = UVec2(0u);
-	std::memset(&m_events[0], 0, sizeof(m_events));
+	zeroMemory(m_events);
 }
 
 } // end namespace anki

+ 1 - 1
src/anki/input/InputAndroid.cpp

@@ -36,7 +36,7 @@ void Input::handleEvents()
 	int outEvents;
 	android_poll_source* source;
 
-	memset(&events[0], 0, sizeof(events));
+	zeroMemory(events);
 
 	while((ident = ALooper_pollAll(0, NULL, &outEvents, (void**)&source)) >= 0)
 	{

+ 2 - 3
src/anki/physics/PhysicsWorld.h

@@ -49,10 +49,9 @@ public:
 	template<typename T, typename... TArgs>
 	PhysicsPtr<T> newInstance(TArgs&&... args)
 	{
-		void* mem = m_alloc.getMemoryPool().allocate(sizeof(T), alignof(T));
-		::new(mem) T(this, std::forward<TArgs>(args)...);
+		T* obj = static_cast<T*>(m_alloc.getMemoryPool().allocate(sizeof(T), alignof(T)));
+		::new(obj) T(this, std::forward<TArgs>(args)...);
 
-		T* obj = static_cast<T*>(mem);
 		LockGuard<Mutex> lock(m_objectListsMtx);
 		m_objectLists[obj->getType()].pushBack(obj);
 

+ 10 - 2
src/anki/renderer/Bloom.cpp

@@ -88,7 +88,10 @@ void Bloom::populateRenderGraph(RenderingContext& ctx)
 
 		// Set the render pass
 		ComputeRenderPassDescription& rpass = rgraph.newComputeRenderPass("Bloom Main");
-		rpass.setWork(runExposureCallback, this, 0);
+		rpass.setWork(
+			[](RenderPassWorkContext& rgraphCtx) { static_cast<Bloom*>(rgraphCtx.m_userData)->runExposure(rgraphCtx); },
+			this,
+			0);
 
 		TextureSubresourceInfo inputTexSubresource;
 		inputTexSubresource.m_firstMipmap = m_r->getDownscaleBlur().getMipmapCount() - 1;
@@ -103,7 +106,12 @@ void Bloom::populateRenderGraph(RenderingContext& ctx)
 
 		// Set the render pass
 		ComputeRenderPassDescription& rpass = rgraph.newComputeRenderPass("Bloom Upscale");
-		rpass.setWork(runUpscaleAndSslfCallback, this, 0);
+		rpass.setWork(
+			[](RenderPassWorkContext& rgraphCtx) {
+				static_cast<Bloom*>(rgraphCtx.m_userData)->runUpscaleAndSslf(rgraphCtx);
+			},
+			this,
+			0);
 
 		rpass.newDependency({m_runCtx.m_exposureRt, TextureUsageBit::SAMPLED_COMPUTE});
 		rpass.newDependency({m_runCtx.m_upscaleRt, TextureUsageBit::IMAGE_COMPUTE_WRITE});

+ 0 - 10
src/anki/renderer/Bloom.h

@@ -91,16 +91,6 @@ private:
 		return Error::NONE;
 	}
 
-	static void runExposureCallback(RenderPassWorkContext& rgraphCtx)
-	{
-		scast<Bloom*>(rgraphCtx.m_userData)->runExposure(rgraphCtx);
-	}
-
-	static void runUpscaleAndSslfCallback(RenderPassWorkContext& rgraphCtx)
-	{
-		scast<Bloom*>(rgraphCtx.m_userData)->runUpscaleAndSslf(rgraphCtx);
-	}
-
 	void runExposure(RenderPassWorkContext& rgraphCtx);
 	void runUpscaleAndSslf(RenderPassWorkContext& rgraphCtx);
 };

+ 7 - 1
src/anki/renderer/Dbg.cpp

@@ -108,7 +108,13 @@ void Dbg::populateRenderGraph(RenderingContext& ctx)
 	// Create pass
 	GraphicsRenderPassDescription& pass = rgraph.newGraphicsRenderPass("DBG");
 
-	pass.setWork(runCallback, this, 0);
+	pass.setWork(
+		[](RenderPassWorkContext& rgraphCtx) {
+			Dbg* self = static_cast<Dbg*>(rgraphCtx.m_userData);
+			self->run(rgraphCtx, *self->m_runCtx.m_ctx);
+		},
+		this,
+		0);
 	pass.setFramebufferInfo(m_fbDescr, {{m_runCtx.m_rt}}, m_r->getGBuffer().getDepthRt());
 
 	pass.newDependency({m_runCtx.m_rt, TextureUsageBit::FRAMEBUFFER_ATTACHMENT_WRITE});

+ 0 - 7
src/anki/renderer/Dbg.h

@@ -91,13 +91,6 @@ private:
 
 	ANKI_USE_RESULT Error lazyInit();
 
-	// A RenderPassWorkCallback for debug pass.
-	static void runCallback(RenderPassWorkContext& rgraphCtx)
-	{
-		Dbg* self = static_cast<Dbg*>(rgraphCtx.m_userData);
-		self->run(rgraphCtx, *self->m_runCtx.m_ctx);
-	}
-
 	void run(RenderPassWorkContext& rgraphCtx, const RenderingContext& ctx);
 };
 /// @}

+ 12 - 2
src/anki/renderer/DownscaleBlur.cpp

@@ -106,7 +106,12 @@ void DownscaleBlur::populateRenderGraph(RenderingContext& ctx)
 		for(U i = 0; i < m_passCount; ++i)
 		{
 			ComputeRenderPassDescription& pass = rgraph.newComputeRenderPass(passNames[i]);
-			pass.setWork(runCallback, this, 0);
+			pass.setWork(
+				[](RenderPassWorkContext& rgraphCtx) {
+					static_cast<DownscaleBlur*>(rgraphCtx.m_userData)->run(rgraphCtx);
+				},
+				this,
+				0);
 
 			if(i > 0)
 			{
@@ -133,7 +138,12 @@ void DownscaleBlur::populateRenderGraph(RenderingContext& ctx)
 		for(U i = 0; i < m_passCount; ++i)
 		{
 			GraphicsRenderPassDescription& pass = rgraph.newGraphicsRenderPass(passNames[i]);
-			pass.setWork(runCallback, this, 0);
+			pass.setWork(
+				[](RenderPassWorkContext& rgraphCtx) {
+					static_cast<DownscaleBlur*>(rgraphCtx.m_userData)->run(rgraphCtx);
+				},
+				this,
+				0);
 			pass.setFramebufferInfo(m_fbDescrs[i], {{m_runCtx.m_rt}}, {});
 
 			if(i > 0)

+ 0 - 6
src/anki/renderer/DownscaleBlur.h

@@ -76,12 +76,6 @@ private:
 	ANKI_USE_RESULT Error initSubpass(U idx, const UVec2& inputTexSize);
 
 	void run(RenderPassWorkContext& rgraphCtx);
-
-	/// A RenderPassWorkCallback for the downscall passes.
-	static void runCallback(RenderPassWorkContext& rgraphCtx)
-	{
-		scast<DownscaleBlur*>(rgraphCtx.m_userData)->run(rgraphCtx);
-	}
 };
 /// @}
 

+ 7 - 1
src/anki/renderer/FinalComposite.cpp

@@ -141,7 +141,13 @@ void FinalComposite::populateRenderGraph(RenderingContext& ctx)
 	// Create the pass
 	GraphicsRenderPassDescription& pass = rgraph.newGraphicsRenderPass("Final Composite");
 
-	pass.setWork(runCallback, this, 0);
+	pass.setWork(
+		[](RenderPassWorkContext& rgraphCtx) {
+			FinalComposite* self = static_cast<FinalComposite*>(rgraphCtx.m_userData);
+			self->run(*self->m_runCtx.m_ctx, rgraphCtx);
+		},
+		this,
+		0);
 	pass.setFramebufferInfo(m_fbDescr, {{ctx.m_outRenderTarget}}, {});
 
 	pass.newDependency({ctx.m_outRenderTarget, TextureUsageBit::FRAMEBUFFER_ATTACHMENT_WRITE});

+ 0 - 7
src/anki/renderer/FinalComposite.h

@@ -52,13 +52,6 @@ private:
 	ANKI_USE_RESULT Error initInternal(const ConfigSet& config);
 
 	void run(RenderingContext& ctx, RenderPassWorkContext& rgraphCtx);
-
-	/// A RenderPassWorkCallback for the composite pass.
-	static void runCallback(RenderPassWorkContext& rgraphCtx)
-	{
-		FinalComposite* self = scast<FinalComposite*>(rgraphCtx.m_userData);
-		self->run(*self->m_runCtx.m_ctx, rgraphCtx);
-	}
 };
 /// @}
 

+ 5 - 1
src/anki/renderer/GBuffer.cpp

@@ -155,7 +155,11 @@ void GBuffer::populateRenderGraph(RenderingContext& ctx)
 	GraphicsRenderPassDescription& pass = rgraph.newGraphicsRenderPass("GBuffer");
 
 	pass.setFramebufferInfo(m_fbDescr, rts, m_depthRt);
-	pass.setWork(runCallback,
+	pass.setWork(
+		[](RenderPassWorkContext& rgraphCtx) {
+			GBuffer* self = static_cast<GBuffer*>(rgraphCtx.m_userData);
+			self->runInThread(*self->m_ctx, rgraphCtx);
+		},
 		this,
 		computeNumberOfSecondLevelCommandBuffers(
 			ctx.m_renderQueue->m_earlyZRenderables.getSize() + ctx.m_renderQueue->m_renderables.getSize()));

+ 0 - 7
src/anki/renderer/GBuffer.h

@@ -51,13 +51,6 @@ private:
 
 	ANKI_USE_RESULT Error initInternal(const ConfigSet& initializer);
 
-	// A RenderPassWorkCallback for G-buffer pass.
-	static void runCallback(RenderPassWorkContext& rgraphCtx)
-	{
-		GBuffer* self = scast<GBuffer*>(rgraphCtx.m_userData);
-		self->runInThread(*self->m_ctx, rgraphCtx);
-	}
-
 	void runInThread(const RenderingContext& ctx, RenderPassWorkContext& rgraphCtx) const;
 };
 /// @}

+ 4 - 1
src/anki/renderer/GBufferPost.cpp

@@ -59,7 +59,10 @@ void GBufferPost::populateRenderGraph(RenderingContext& ctx)
 	// Create pass
 	GraphicsRenderPassDescription& rpass = rgraph.newGraphicsRenderPass("GBuffPost");
 
-	rpass.setWork(runCallback, this, 0);
+	rpass.setWork(
+		[](RenderPassWorkContext& rgraphCtx) { static_cast<GBufferPost*>(rgraphCtx.m_userData)->run(rgraphCtx); },
+		this,
+		0);
 	rpass.setFramebufferInfo(m_fbDescr, {{m_r->getGBuffer().getColorRt(0), m_r->getGBuffer().getColorRt(1)}}, {});
 
 	rpass.newDependency({m_r->getGBuffer().getColorRt(0), TextureUsageBit::FRAMEBUFFER_ATTACHMENT_READ_WRITE});

+ 0 - 5
src/anki/renderer/GBufferPost.h

@@ -43,11 +43,6 @@ private:
 
 	ANKI_USE_RESULT Error initInternal(const ConfigSet& cfg);
 
-	static void runCallback(RenderPassWorkContext& rgraphCtx)
-	{
-		static_cast<GBufferPost*>(rgraphCtx.m_userData)->run(rgraphCtx);
-	}
-
 	void run(RenderPassWorkContext& rgraphCtx);
 };
 /// @}

+ 6 - 1
src/anki/renderer/Indirect.cpp

@@ -524,7 +524,12 @@ void Indirect::populateRenderGraph(RenderingContext& rctx)
 		// Pass
 		GraphicsRenderPassDescription& pass = rgraph.newGraphicsRenderPass("GI gbuff");
 		pass.setFramebufferInfo(m_gbuffer.m_fbDescr, rts, m_ctx.m_gbufferDepthRt);
-		pass.setWork(runGBufferCallback, this, 0);
+		pass.setWork(
+			[](RenderPassWorkContext& rgraphCtx) {
+				static_cast<Indirect*>(rgraphCtx.m_userData)->runGBuffer(rgraphCtx.m_commandBuffer);
+			},
+			this,
+			0);
 
 		for(U i = 0; i < GBUFFER_COLOR_ATTACHMENT_COUNT; ++i)
 		{

+ 0 - 7
src/anki/renderer/Indirect.h

@@ -151,13 +151,6 @@ private:
 	void runIrradiance(U32 faceIdx, RenderPassWorkContext& rgraphCtx);
 	void runIrradianceToRefl(U32 faceIdx, RenderPassWorkContext& rgraphCtx);
 
-	// A RenderPassWorkCallback for G-buffer pass
-	static void runGBufferCallback(RenderPassWorkContext& rgraphCtx)
-	{
-		Indirect* const self = static_cast<Indirect*>(rgraphCtx.m_userData);
-		self->runGBuffer(rgraphCtx.m_commandBuffer);
-	}
-
 	// A RenderPassWorkCallback for the light shading pass into a single face.
 	template<U faceIdx>
 	static void runLightShadingCallback(RenderPassWorkContext& rgraphCtx)

+ 7 - 1
src/anki/renderer/LensFlare.cpp

@@ -129,7 +129,13 @@ void LensFlare::populateRenderGraph(RenderingContext& ctx)
 	{
 		ComputeRenderPassDescription& rpass = rgraph.newComputeRenderPass("LF Upd Ind/ct");
 
-		rpass.setWork(runUpdateIndirectCallback, this, 0);
+		rpass.setWork(
+			[](RenderPassWorkContext& rgraphCtx) {
+				LensFlare* const self = static_cast<LensFlare*>(rgraphCtx.m_userData);
+				self->updateIndirectInfo(*self->m_runCtx.m_ctx, rgraphCtx);
+			},
+			this,
+			0);
 
 		rpass.newDependency({m_runCtx.m_indirectBuffHandle, BufferUsageBit::STORAGE_COMPUTE_WRITE});
 		rpass.newDependency({m_r->getDepthDownscale().getHiZRt(), TextureUsageBit::SAMPLED_COMPUTE, HIZ_QUARTER_DEPTH});

+ 0 - 7
src/anki/renderer/LensFlare.h

@@ -64,13 +64,6 @@ private:
 	ANKI_USE_RESULT Error initInternal(const ConfigSet& initializer);
 
 	void updateIndirectInfo(const RenderingContext& ctx, RenderPassWorkContext& rgraphCtx);
-
-	/// A RenderPassWorkCallback for updating the indirect info.
-	static void runUpdateIndirectCallback(RenderPassWorkContext& rgraphCtx)
-	{
-		LensFlare* const self = scast<LensFlare*>(rgraphCtx.m_userData);
-		self->updateIndirectInfo(*self->m_runCtx.m_ctx, rgraphCtx);
-	}
 };
 /// @}
 

+ 13 - 2
src/anki/renderer/MainRenderer.cpp

@@ -130,7 +130,13 @@ Error MainRenderer::render(RenderQueue& rqueue, TexturePtr presentTex)
 		fbDescr.bake();
 
 		pass.setFramebufferInfo(fbDescr, {{presentRt}}, {});
-		pass.setWork(runCallback, this, 0);
+		pass.setWork(
+			[](RenderPassWorkContext& rgraphCtx) {
+				MainRenderer* const self = static_cast<MainRenderer*>(rgraphCtx.m_userData);
+				self->runBlit(rgraphCtx);
+			},
+			this,
+			0);
 
 		pass.newDependency({presentRt, TextureUsageBit::FRAMEBUFFER_ATTACHMENT_WRITE});
 		pass.newDependency({ctx.m_outRenderTarget, TextureUsageBit::SAMPLED_FRAGMENT});
@@ -140,7 +146,12 @@ Error MainRenderer::render(RenderQueue& rqueue, TexturePtr presentTex)
 	{
 		ComputeRenderPassDescription& pass = ctx.m_renderGraphDescr.newComputeRenderPass("Present");
 
-		pass.setWork(presentCallback, nullptr, 0);
+		pass.setWork(
+			[](RenderPassWorkContext& rgraphCtx) {
+				// Do nothing. This pass is dummy
+			},
+			nullptr,
+			0);
 		pass.newDependency({presentRt, TextureUsageBit::PRESENT});
 	}
 

+ 0 - 13
src/anki/renderer/MainRenderer.h

@@ -97,19 +97,6 @@ private:
 	void runBlit(RenderPassWorkContext& rgraphCtx);
 	void present(RenderPassWorkContext& rgraphCtx);
 
-	// A RenderPassWorkCallback for blit pass.
-	static void runCallback(RenderPassWorkContext& rgraphCtx)
-	{
-		MainRenderer* const self = scast<MainRenderer*>(rgraphCtx.m_userData);
-		self->runBlit(rgraphCtx);
-	}
-
-	// A RenderPassWorkCallback for present.
-	static void presentCallback(RenderPassWorkContext& rgraphCtx)
-	{
-		// Do nothing. This pass is dummy
-	}
-
 	static void executeSecondaryCallback(
 		void* userData, U32 threadId, ThreadHive& hive, ThreadHiveSemaphore* signalSemaphore);
 };

+ 7 - 1
src/anki/renderer/ShadowMapping.cpp

@@ -46,6 +46,12 @@ Error ShadowMapping::init(const ConfigSet& config)
 		ANKI_R_LOGE("Failed to initialize shadowmapping");
 	}
 
+	ANKI_R_LOGI("\tScratch size %ux%u. ESM atlas size %ux%u",
+		m_scratchTileCountX * m_scratchTileResolution,
+		m_scratchTileCountY * m_scratchTileResolution,
+		m_esmTileCountBothAxis * m_esmTileResolution,
+		m_esmTileCountBothAxis * m_esmTileResolution);
+
 	return err;
 }
 
@@ -595,7 +601,7 @@ void ShadowMapping::processLights(RenderingContext& ctx, U32& threadCountForScra
 		else
 		{
 			// Light can't be a caster this frame
-			memset(&light->m_shadowRenderQueues[0], 0, sizeof(light->m_shadowRenderQueues));
+			zeroMemory(light->m_shadowRenderQueues);
 		}
 	}
 

+ 28 - 4
src/anki/renderer/Ssao.cpp

@@ -209,7 +209,13 @@ void Ssao::populateRenderGraph(RenderingContext& ctx)
 			pass.newDependency({m_r->getDepthDownscale().getHiZRt(), TextureUsageBit::SAMPLED_COMPUTE, HIZ_HALF_DEPTH});
 			pass.newDependency({m_runCtx.m_rts[0], TextureUsageBit::IMAGE_COMPUTE_WRITE});
 
-			pass.setWork(runMainCallback, this, 0);
+			pass.setWork(
+				[](RenderPassWorkContext& rgraphCtx) {
+					Ssao* const self = static_cast<Ssao*>(rgraphCtx.m_userData);
+					self->runMain(*self->m_runCtx.m_ctx, rgraphCtx);
+				},
+				this,
+				0);
 		}
 		else
 		{
@@ -226,7 +232,13 @@ void Ssao::populateRenderGraph(RenderingContext& ctx)
 				{m_r->getDepthDownscale().getHiZRt(), TextureUsageBit::SAMPLED_FRAGMENT, HIZ_HALF_DEPTH});
 			pass.newDependency({m_runCtx.m_rts[0], TextureUsageBit::FRAMEBUFFER_ATTACHMENT_WRITE});
 
-			pass.setWork(runMainCallback, this, 0);
+			pass.setWork(
+				[](RenderPassWorkContext& rgraphCtx) {
+					Ssao* const self = static_cast<Ssao*>(rgraphCtx.m_userData);
+					self->runMain(*self->m_runCtx.m_ctx, rgraphCtx);
+				},
+				this,
+				0);
 		}
 	}
 
@@ -236,7 +248,13 @@ void Ssao::populateRenderGraph(RenderingContext& ctx)
 		{
 			ComputeRenderPassDescription& pass = rgraph.newComputeRenderPass("SSAO blur");
 
-			pass.setWork(runBlurCallback, this, 0);
+			pass.setWork(
+				[](RenderPassWorkContext& rgraphCtx) {
+					Ssao* const self = static_cast<Ssao*>(rgraphCtx.m_userData);
+					self->runBlur(rgraphCtx);
+				},
+				this,
+				0);
 
 			pass.newDependency({m_runCtx.m_rts[1], TextureUsageBit::IMAGE_COMPUTE_WRITE});
 			pass.newDependency({m_runCtx.m_rts[0], TextureUsageBit::SAMPLED_COMPUTE});
@@ -245,7 +263,13 @@ void Ssao::populateRenderGraph(RenderingContext& ctx)
 		{
 			GraphicsRenderPassDescription& pass = rgraph.newGraphicsRenderPass("SSAO blur");
 
-			pass.setWork(runBlurCallback, this, 0);
+			pass.setWork(
+				[](RenderPassWorkContext& rgraphCtx) {
+					Ssao* const self = static_cast<Ssao*>(rgraphCtx.m_userData);
+					self->runBlur(rgraphCtx);
+				},
+				this,
+				0);
 			pass.setFramebufferInfo(m_fbDescr, {{m_runCtx.m_rts[1]}}, {});
 
 			pass.newDependency({m_runCtx.m_rts[1], TextureUsageBit::FRAMEBUFFER_ATTACHMENT_WRITE});

+ 0 - 14
src/anki/renderer/Ssao.h

@@ -76,20 +76,6 @@ private:
 
 	void runMain(const RenderingContext& ctx, RenderPassWorkContext& rgraphCtx);
 	void runBlur(RenderPassWorkContext& rgraphCtx);
-
-	/// A RenderPassWorkCallback for SSAO main pass.
-	static void runMainCallback(RenderPassWorkContext& rgraphCtx)
-	{
-		Ssao* const self = scast<Ssao*>(rgraphCtx.m_userData);
-		self->runMain(*self->m_runCtx.m_ctx, rgraphCtx);
-	}
-
-	/// A RenderPassWorkCallback for SSAO blur.
-	static void runBlurCallback(RenderPassWorkContext& rgraphCtx)
-	{
-		Ssao* const self = scast<Ssao*>(rgraphCtx.m_userData);
-		self->runBlur(rgraphCtx);
-	}
 };
 /// @}
 

+ 2 - 1
src/anki/renderer/Ssr.cpp

@@ -78,7 +78,8 @@ void Ssr::populateRenderGraph(RenderingContext& ctx)
 
 	// Create pass
 	ComputeRenderPassDescription& rpass = rgraph.newComputeRenderPass("SSR");
-	rpass.setWork(runCallback, this, 0);
+	rpass.setWork(
+		[](RenderPassWorkContext& rgraphCtx) { static_cast<Ssr*>(rgraphCtx.m_userData)->run(rgraphCtx); }, this, 0);
 
 	rpass.newDependency({m_runCtx.m_rt, TextureUsageBit::IMAGE_COMPUTE_READ_WRITE});
 	rpass.newDependency({m_r->getGBuffer().getColorRt(1), TextureUsageBit::SAMPLED_COMPUTE});

+ 0 - 5
src/anki/renderer/Ssr.h

@@ -51,11 +51,6 @@ private:
 
 	ANKI_USE_RESULT Error initInternal(const ConfigSet& cfg);
 
-	static void runCallback(RenderPassWorkContext& rgraphCtx)
-	{
-		static_cast<Ssr*>(rgraphCtx.m_userData)->run(rgraphCtx);
-	}
-
 	void run(RenderPassWorkContext& rgraphCtx);
 };
 /// @}

+ 7 - 1
src/anki/renderer/TemporalAA.cpp

@@ -108,7 +108,13 @@ void TemporalAA::populateRenderGraph(RenderingContext& ctx)
 	// Create pass
 	ComputeRenderPassDescription& pass = rgraph.newComputeRenderPass("TemporalAA");
 
-	pass.setWork(runCallback, this, 0);
+	pass.setWork(
+		[](RenderPassWorkContext& rgraphCtx) {
+			TemporalAA* const self = static_cast<TemporalAA*>(rgraphCtx.m_userData);
+			self->run(*self->m_runCtx.m_ctx, rgraphCtx);
+		},
+		this,
+		0);
 
 	pass.newDependency({m_runCtx.m_renderRt, TextureUsageBit::IMAGE_COMPUTE_WRITE});
 	pass.newDependency({m_r->getGBuffer().getDepthRt(),

+ 0 - 7
src/anki/renderer/TemporalAA.h

@@ -49,13 +49,6 @@ private:
 	ANKI_USE_RESULT Error initInternal(const ConfigSet& cfg);
 
 	void run(const RenderingContext& ctx, RenderPassWorkContext& rgraphCtx);
-
-	/// A RenderPassWorkCallback for the AA pass.
-	static void runCallback(RenderPassWorkContext& rgraphCtx)
-	{
-		TemporalAA* const self = scast<TemporalAA*>(rgraphCtx.m_userData);
-		self->run(*self->m_runCtx.m_ctx, rgraphCtx);
-	}
 };
 /// @}
 

+ 7 - 1
src/anki/renderer/Tonemapping.cpp

@@ -78,7 +78,13 @@ void Tonemapping::populateRenderGraph(RenderingContext& ctx)
 	// Create the pass
 	ComputeRenderPassDescription& pass = rgraph.newComputeRenderPass("Avg lum");
 
-	pass.setWork(runCallback, this, 0);
+	pass.setWork(
+		[](RenderPassWorkContext& rgraphCtx) {
+			Tonemapping* const self = static_cast<Tonemapping*>(rgraphCtx.m_userData);
+			self->run(rgraphCtx);
+		},
+		this,
+		0);
 
 	pass.newDependency({m_runCtx.m_buffHandle, BufferUsageBit::STORAGE_COMPUTE_READ_WRITE});
 

+ 0 - 7
src/anki/renderer/Tonemapping.h

@@ -50,13 +50,6 @@ private:
 	ANKI_USE_RESULT Error initInternal(const ConfigSet& cfg);
 
 	void run(RenderPassWorkContext& rgraphCtx);
-
-	/// A RenderPassWorkCallback to run the compute pass.
-	static void runCallback(RenderPassWorkContext& rgraphCtx)
-	{
-		Tonemapping* const self = scast<Tonemapping*>(rgraphCtx.m_userData);
-		self->run(rgraphCtx);
-	}
 };
 /// @}
 

+ 2 - 2
src/anki/resource/ShaderProgramResource.h

@@ -65,7 +65,7 @@ public:
 
 	ShaderProgramResourceMutation()
 	{
-		memset(this, 0, sizeof(*this));
+		zeroMemory(*this);
 	}
 };
 
@@ -228,7 +228,7 @@ public:
 
 	ShaderProgramResourceConstantValue()
 	{
-		memset(this, 0, sizeof(*this));
+		zeroMemory(*this);
 	}
 };
 

+ 0 - 16
src/anki/util/Functions.h

@@ -238,22 +238,6 @@ inline void splitThreadedProblem(
 	ANKI_ASSERT(!(threadId == threadCount - 1 && end != problemSize));
 }
 
-/// Equivelent to static_cast.
-template<typename T, typename Y>
-inline T scast(Y from)
-{
-	ANKI_ASSERT(from);
-	return static_cast<T>(from);
-}
-
-/// Equivelent to reinterpret_cast.
-template<typename T, typename Y>
-inline T rcast(Y from)
-{
-	ANKI_ASSERT(from);
-	return reinterpret_cast<T>(from);
-}
-
 #define _ANKI_CONCATENATE(a, b) a##b
 
 /// Concatenate 2 preprocessor tokens.

+ 1 - 1
src/anki/util/String.cpp

@@ -167,7 +167,7 @@ void String::create(Allocator alloc, Char c, PtrSize length)
 	ANKI_ASSERT(c != '\0');
 	m_data.create(alloc, length + 1);
 
-	std::memset(&m_data[0], c, length);
+	memset(&m_data[0], c, length);
 	m_data[length] = '\0';
 }