Browse Source

Minor refactoring

Panagiotis Christopoulos Charitos 1 year ago
parent
commit
56b24c2258
45 changed files with 61 additions and 269 deletions
  1. 0 3
      AnKi/Gr/BackendCommon/Common.h
  2. 2 0
      AnKi/Gr/Common.h
  3. 2 2
      AnKi/Gr/D3D/D3DFence.cpp
  4. 1 1
      AnKi/Gr/Vulkan/VkFenceFactory.cpp
  5. 1 1
      AnKi/Gr/Vulkan/VkFenceFactory.h
  6. 1 1
      AnKi/Gr/Vulkan/VkSemaphoreFactory.cpp
  7. 0 2
      AnKi/Renderer/Bloom.cpp
  8. 0 2
      AnKi/Renderer/Dbg.cpp
  9. 0 2
      AnKi/Renderer/DepthDownscale.cpp
  10. 0 2
      AnKi/Renderer/FinalComposite.cpp
  11. 0 14
      AnKi/Renderer/GBuffer.cpp
  12. 0 2
      AnKi/Renderer/GBuffer.h
  13. 0 14
      AnKi/Renderer/GBufferPost.cpp
  14. 0 2
      AnKi/Renderer/GBufferPost.h
  15. 0 2
      AnKi/Renderer/LensFlare.cpp
  16. 17 46
      AnKi/Renderer/LightShading.cpp
  17. 0 4
      AnKi/Renderer/LightShading.h
  18. 0 14
      AnKi/Renderer/MotionVectors.cpp
  19. 0 2
      AnKi/Renderer/MotionVectors.h
  20. 7 1
      AnKi/Renderer/Renderer.cpp
  21. 0 13
      AnKi/Renderer/RtShadows.cpp
  22. 0 2
      AnKi/Renderer/RtShadows.h
  23. 0 15
      AnKi/Renderer/ShadowMapping.cpp
  24. 0 2
      AnKi/Renderer/ShadowMapping.h
  25. 0 13
      AnKi/Renderer/ShadowmapsResolve.cpp
  26. 0 2
      AnKi/Renderer/ShadowmapsResolve.h
  27. 0 13
      AnKi/Renderer/Sky.cpp
  28. 0 2
      AnKi/Renderer/Sky.h
  29. 0 13
      AnKi/Renderer/Ssao.cpp
  30. 0 12
      AnKi/Renderer/Ssr.cpp
  31. 0 2
      AnKi/Renderer/Ssr.h
  32. 0 13
      AnKi/Renderer/TemporalAA.cpp
  33. 0 2
      AnKi/Renderer/TemporalAA.h
  34. 0 13
      AnKi/Renderer/Tonemapping.cpp
  35. 0 2
      AnKi/Renderer/Tonemapping.h
  36. 0 2
      AnKi/Renderer/VolumetricFog.cpp
  37. 0 1
      AnKi/Renderer/VolumetricLightingAccumulation.cpp
  38. 0 12
      AnKi/Renderer/VrsSriGeneration.cpp
  39. 0 2
      AnKi/Renderer/VrsSriGeneration.h
  40. 1 0
      AnKi/Util/CVarSet.cpp
  41. 3 1
      AnKi/Util/CVarSet.h
  42. 10 10
      AnKi/Util/Logger.cpp
  43. 14 3
      AnKi/Util/Logger.h
  44. 1 1
      Tests/Framework/Framework.cpp
  45. 1 1
      Tools/Shader/ShaderProgramBinaryDumpMain.cpp

+ 0 - 3
AnKi/Gr/BackendCommon/Common.h

@@ -9,9 +9,6 @@
 
 namespace anki {
 
-/// There is no need to ask for a fence or a semaphore to be waited for more than 10 seconds. The GPU will timeout anyway.
-constexpr Second kMaxFenceOrSemaphoreWaitTime = 120.0;
-
 constexpr U32 kMaxQueriesPerQueryChunk = 64;
 
 } // end namespace anki

+ 2 - 0
AnKi/Gr/Common.h

@@ -45,6 +45,8 @@ inline BoolCVar g_rayTracingCVar("Gr", "RayTracing", false, "Try enabling ray tr
 inline BoolCVar g_vrsCVar("Gr", "Vrs", false, "Enable or not VRS");
 inline BoolCVar g_workGraphcsCVar("Gr", "WorkGraphs", false, "Enable or not WorkGraphs");
 inline NumericCVar<U32> g_maxBindlessSampledTextureCountCVar("Gr", "MaxBindlessSampledTextureCountCVar", 512, 16, kMaxU16);
+inline NumericCVar<Second> g_gpuTimeoutCVar("Gr", "GpuTimeout", 120.0, 0.0, 24.0 * 60.0,
+											"Max time to wait for GPU fences or semaphores. More than that it must be a GPU timeout");
 
 #if ANKI_GR_BACKEND_DIRECT3D
 inline NumericCVar<U16> g_maxRtvDescriptorsCVar("Gr", "MaxRvtDescriptors", 1024, 8, kMaxU16, "Max number of RTVs");

+ 2 - 2
AnKi/Gr/D3D/D3DFence.cpp

@@ -39,7 +39,7 @@ Bool MicroFence::clientWait(Second seconds)
 	}
 	else
 	{
-		seconds = min(seconds, kMaxFenceOrSemaphoreWaitTime);
+		seconds = min<Second>(seconds, g_gpuTimeoutCVar);
 
 		ANKI_D3D_CHECKF(m_fence->SetEventOnCompletion(m_value.load(), m_event));
 
@@ -134,7 +134,7 @@ void FenceFactory::trimSignaledFences(Bool wait)
 	GrDynamicArray<MicroFence*> unsignaledFences;
 	for(MicroFence* fence : m_fences)
 	{
-		const Bool signaled = fence->clientWait((wait) ? kMaxFenceOrSemaphoreWaitTime : 0.0f);
+		const Bool signaled = fence->clientWait((wait) ? g_gpuTimeoutCVar : 0.0);
 		if(signaled)
 		{
 			deleteInstance(GrMemoryPool::getSingleton(), fence);

+ 1 - 1
AnKi/Gr/Vulkan/VkFenceFactory.cpp

@@ -93,7 +93,7 @@ void FenceFactory::trimSignaledFences(Bool wait)
 	GrDynamicArray<MicroFence*> unsignaledFences;
 	for(MicroFence* fence : m_fences)
 	{
-		const Bool signaled = fence->clientWait((wait) ? kMaxFenceOrSemaphoreWaitTime : 0.0f);
+		const Bool signaled = fence->clientWait((wait) ? g_gpuTimeoutCVar : 0.0);
 		if(signaled)
 		{
 			deleteInstance(GrMemoryPool::getSingleton(), fence);

+ 1 - 1
AnKi/Gr/Vulkan/VkFenceFactory.h

@@ -77,7 +77,7 @@ public:
 		}
 		else
 		{
-			seconds = min(seconds, kMaxFenceOrSemaphoreWaitTime);
+			seconds = min<Second>(seconds, g_gpuTimeoutCVar);
 			const F64 nsf = 1e+9 * seconds;
 			const U64 ns = U64(nsf);
 			VkResult res;

+ 1 - 1
AnKi/Gr/Vulkan/VkSemaphoreFactory.cpp

@@ -39,7 +39,7 @@ Bool MicroSemaphore::clientWait(Second seconds)
 {
 	ANKI_ASSERT(m_isTimeline);
 
-	seconds = min(seconds, kMaxFenceOrSemaphoreWaitTime);
+	seconds = min<Second>(seconds, g_gpuTimeoutCVar);
 
 	VkSemaphoreWaitInfo waitInfo = {};
 	waitInfo.sType = VK_STRUCTURE_TYPE_SEMAPHORE_WAIT_INFO;

+ 0 - 2
AnKi/Renderer/Bloom.cpp

@@ -17,8 +17,6 @@ Error Bloom::init()
 		const UVec2 pyramidSize = getRenderer().getInternalResolution() / 2;
 		const U32 pyramidMipCount = computeMaxMipmapCount2d(pyramidSize.x(), pyramidSize.y(), g_bloomPyramidLowLimit);
 
-		ANKI_R_LOGV("Initializing bloom downscale pyramid. Resolution %ux%u, mip count %u", pyramidSize.x(), pyramidSize.y(), pyramidMipCount);
-
 		const Bool preferCompute = g_preferComputeCVar;
 
 		// Create the miped texture

+ 0 - 2
AnKi/Renderer/Dbg.cpp

@@ -31,8 +31,6 @@ Dbg::~Dbg()
 
 Error Dbg::init()
 {
-	ANKI_R_LOGV("Initializing DBG");
-
 	// RT descr
 	m_rtDescr = getRenderer().create2DRenderTargetDescription(getRenderer().getInternalResolution().x(), getRenderer().getInternalResolution().y(),
 															  Format::kR8G8B8A8_Unorm, "Dbg");

+ 0 - 2
AnKi/Renderer/DepthDownscale.cpp

@@ -41,8 +41,6 @@ Error DepthDownscale::initInternal()
 
 	const UVec2 lastMipSize = UVec2(width, height) >> (m_mipCount - 1);
 
-	ANKI_R_LOGV("Initializing HiZ. Mip count %u, last mip size %ux%u", m_mipCount, lastMipSize.x(), lastMipSize.y());
-
 	const Bool preferCompute = g_preferComputeCVar;
 
 	// Create RT descr

+ 0 - 2
AnKi/Renderer/FinalComposite.cpp

@@ -37,8 +37,6 @@ namespace anki {
 
 Error FinalComposite::initInternal()
 {
-	ANKI_R_LOGV("Initializing final composite");
-
 	// Progs
 	for(MutatorValue dbg = 0; dbg < 2; ++dbg)
 	{

+ 0 - 14
AnKi/Renderer/GBuffer.cpp

@@ -24,20 +24,6 @@ GBuffer::~GBuffer()
 
 Error GBuffer::init()
 {
-	Error err = initInternal();
-
-	if(err)
-	{
-		ANKI_R_LOGE("Failed to initialize g-buffer pass");
-	}
-
-	return err;
-}
-
-Error GBuffer::initInternal()
-{
-	ANKI_R_LOGV("Initializing GBuffer. Resolution %ux%u", getRenderer().getInternalResolution().x(), getRenderer().getInternalResolution().y());
-
 	// RTs
 	static constexpr Array<const char*, 2> depthRtNames = {{"GBuffer depth #0", "GBuffer depth #1"}};
 	for(U32 i = 0; i < 2; ++i)

+ 0 - 2
AnKi/Renderer/GBuffer.h

@@ -93,8 +93,6 @@ private:
 		BufferView m_visibleAaabbIndicesBuffer; ///< Optional
 		BufferHandle m_visibleAaabbIndicesBufferDepedency;
 	} m_runCtx;
-
-	Error initInternal();
 };
 /// @}
 

+ 0 - 14
AnKi/Renderer/GBufferPost.cpp

@@ -13,21 +13,7 @@ namespace anki {
 
 Error GBufferPost::init()
 {
-	const Error err = initInternal();
-	if(err)
-	{
-		ANKI_R_LOGE("Failed to initialize GBufferPost pass");
-	}
-	return err;
-}
-
-Error GBufferPost::initInternal()
-{
-	ANKI_R_LOGV("Initializing GBufferPost pass");
-
-	// Load shaders
 	ANKI_CHECK(loadShaderProgram("ShaderBinaries/GBufferPost.ankiprogbin", m_prog, m_grProg));
-
 	return Error::kNone;
 }
 

+ 0 - 2
AnKi/Renderer/GBufferPost.h

@@ -24,8 +24,6 @@ public:
 private:
 	ShaderProgramResourcePtr m_prog;
 	ShaderProgramPtr m_grProg;
-
-	Error initInternal();
 };
 /// @}
 

+ 0 - 2
AnKi/Renderer/LensFlare.cpp

@@ -27,8 +27,6 @@ Error LensFlare::init()
 
 Error LensFlare::initInternal()
 {
-	ANKI_R_LOGV("Initializing lens flare");
-
 	m_maxSpritesPerFlare = g_lensFlareMaxSpritesPerFlareCVar;
 	ANKI_CHECK(loadShaderProgram("ShaderBinaries/LensFlareSprite.ankiprogbin", m_realProg, m_realGrProg));
 

+ 17 - 46
AnKi/Renderer/LightShading.cpp

@@ -27,66 +27,37 @@ namespace anki {
 
 Error LightShading::init()
 {
-	ANKI_R_LOGV("Initializing light shading");
+	{
+		// Load shaders and programs
+		ANKI_CHECK(loadShaderProgram("ShaderBinaries/LightShading.ankiprogbin", m_lightShading.m_prog, m_lightShading.m_grProg));
 
-	Error err = initLightShading();
+		// Create RT descr
+		const UVec2 internalResolution = getRenderer().getInternalResolution();
+		m_lightShading.m_rtDescr = getRenderer().create2DRenderTargetDescription(internalResolution.x(), internalResolution.y(),
+																				 getRenderer().getHdrFormat(), "Light Shading");
+		m_lightShading.m_rtDescr.bake();
 
-	if(!err)
-	{
-		err = initSkybox();
+		// Debug visualization
+		ANKI_CHECK(loadShaderProgram("ShaderBinaries/VisualizeHdrRenderTarget.ankiprogbin", m_visualizeRtProg, m_visualizeRtGrProg));
 	}
 
-	if(!err)
 	{
-		err = initApplyFog();
-	}
+		ANKI_CHECK(ResourceManager::getSingleton().loadResource("ShaderBinaries/LightShadingSkybox.ankiprogbin", m_skybox.m_prog));
 
-	if(err)
-	{
-		ANKI_R_LOGE("Failed to init light stage");
+		for(MutatorValue method = 0; method < 3; ++method)
+		{
+			ANKI_CHECK(loadShaderProgram("ShaderBinaries/LightShadingSkybox.ankiprogbin", {{"METHOD", method}}, m_skybox.m_prog,
+										 m_skybox.m_grProgs[method]));
+		}
 	}
 
-	return err;
-}
-
-Error LightShading::initLightShading()
-{
-	// Load shaders and programs
-	ANKI_CHECK(loadShaderProgram("ShaderBinaries/LightShading.ankiprogbin", m_lightShading.m_prog, m_lightShading.m_grProg));
-
-	// Create RT descr
-	const UVec2 internalResolution = getRenderer().getInternalResolution();
-	m_lightShading.m_rtDescr =
-		getRenderer().create2DRenderTargetDescription(internalResolution.x(), internalResolution.y(), getRenderer().getHdrFormat(), "Light Shading");
-	m_lightShading.m_rtDescr.bake();
-
-	// Debug visualization
-	ANKI_CHECK(loadShaderProgram("ShaderBinaries/VisualizeHdrRenderTarget.ankiprogbin", m_visualizeRtProg, m_visualizeRtGrProg));
-
-	return Error::kNone;
-}
-
-Error LightShading::initSkybox()
-{
-	ANKI_CHECK(ResourceManager::getSingleton().loadResource("ShaderBinaries/LightShadingSkybox.ankiprogbin", m_skybox.m_prog));
-
-	for(MutatorValue method = 0; method < 3; ++method)
 	{
-		ANKI_CHECK(
-			loadShaderProgram("ShaderBinaries/LightShadingSkybox.ankiprogbin", {{"METHOD", method}}, m_skybox.m_prog, m_skybox.m_grProgs[method]));
+		ANKI_CHECK(loadShaderProgram("ShaderBinaries/LightShadingApplyFog.ankiprogbin", m_applyFog.m_prog, m_applyFog.m_grProg));
 	}
 
 	return Error::kNone;
 }
 
-Error LightShading::initApplyFog()
-{
-	// Load shaders and programs
-	ANKI_CHECK(loadShaderProgram("ShaderBinaries/LightShadingApplyFog.ankiprogbin", m_applyFog.m_prog, m_applyFog.m_grProg));
-
-	return Error::kNone;
-}
-
 void LightShading::run(const RenderingContext& ctx, RenderPassWorkContext& rgraphCtx)
 {
 	ANKI_TRACE_SCOPED_EVENT(LightShading);

+ 0 - 4
AnKi/Renderer/LightShading.h

@@ -65,10 +65,6 @@ private:
 	ShaderProgramResourcePtr m_visualizeRtProg;
 	ShaderProgramPtr m_visualizeRtGrProg;
 
-	Error initLightShading();
-	Error initSkybox();
-	Error initApplyFog();
-
 	void run(const RenderingContext& ctx, RenderPassWorkContext& rgraphCtx);
 
 	void getDebugRenderTarget(CString rtName, Array<RenderTargetHandle, kMaxDebugRenderTargets>& handles,

+ 0 - 14
AnKi/Renderer/MotionVectors.cpp

@@ -14,22 +14,8 @@ namespace anki {
 
 Error MotionVectors::init()
 {
-	const Error err = initInternal();
-	if(err)
-	{
-		ANKI_R_LOGE("Failed to initialize motion vectors");
-	}
-	return err;
-}
-
-Error MotionVectors::initInternal()
-{
-	ANKI_R_LOGV("Initializing motion vectors");
-
-	// Prog
 	ANKI_CHECK(loadShaderProgram("ShaderBinaries/MotionVectors.ankiprogbin", m_prog, m_grProg));
 
-	// RTs
 	m_motionVectorsRtDescr = getRenderer().create2DRenderTargetDescription(
 		getRenderer().getInternalResolution().x(), getRenderer().getInternalResolution().y(), Format::kR16G16_Sfloat, "MotionVectors");
 	m_motionVectorsRtDescr.bake();

+ 0 - 2
AnKi/Renderer/MotionVectors.h

@@ -50,8 +50,6 @@ private:
 	public:
 		RenderTargetHandle m_motionVectorsRtHandle;
 	} m_runCtx;
-
-	Error initInternal();
 };
 /// @}
 

+ 7 - 1
AnKi/Renderer/Renderer.cpp

@@ -183,7 +183,13 @@ Error Renderer::initInternal(const RendererInitInfo& inf)
 	if(initCondition) \
 	{ \
 		m_##name2 = newInstance<name>(RendererMemoryPool::getSingleton()); \
-		ANKI_CHECK(m_##name2->init()); \
+		ANKI_R_LOGV("Initializing " ANKI_STRINGIZE(name)); \
+		const Error err = m_##name2->init(); \
+		if(err) \
+		{ \
+			ANKI_R_LOGE("Initialization failed: " ANKI_STRINGIZE(name)); \
+			return err; \
+		} \
 	}
 #include <AnKi/Renderer/RendererObject.def.h>
 

+ 0 - 13
AnKi/Renderer/RtShadows.cpp

@@ -23,19 +23,6 @@ namespace anki {
 
 Error RtShadows::init()
 {
-	const Error err = initInternal();
-	if(err)
-	{
-		ANKI_R_LOGE("Failed to initialize ray traced shadows");
-	}
-
-	return err;
-}
-
-Error RtShadows::initInternal()
-{
-	ANKI_R_LOGV("Initializing RT shadows");
-
 	m_useSvgf = g_rtShadowsSvgfCVar;
 	m_atrousPassCount = g_rtShadowsSvgfAtrousPassCountCVar;
 

+ 0 - 2
AnKi/Renderer/RtShadows.h

@@ -104,8 +104,6 @@ public:
 		Array<RenderTargetHandle, 2> m_varianceRts;
 	} m_runCtx;
 
-	Error initInternal();
-
 	void runDenoise(const RenderingContext& ctx, RenderPassWorkContext& rgraphCtx, Bool horizontal);
 
 	U32 getPassCountWithoutUpscaling() const

+ 0 - 15
AnKi/Renderer/ShadowMapping.cpp

@@ -60,27 +60,12 @@ static LightHash decodeTileHash(U64 hash)
 }
 
 Error ShadowMapping::init()
-{
-	const Error err = initInternal();
-	if(err)
-	{
-		ANKI_R_LOGE("Failed to initialize shadowmapping");
-	}
-
-	return err;
-}
-
-Error ShadowMapping::initInternal()
 {
 	// Init RT
 	{
 		m_tileResolution = g_shadowMappingTileResolutionCVar;
 		m_tileCountBothAxis = g_shadowMappingTileCountPerRowOrColumnCVar;
 
-		ANKI_R_LOGV("Initializing shadowmapping. Atlas resolution %ux%u", m_tileResolution * m_tileCountBothAxis,
-					m_tileResolution * m_tileCountBothAxis);
-
-		// RT
 		const TextureUsageBit usage = TextureUsageBit::kSrvPixel | TextureUsageBit::kSrvCompute | TextureUsageBit::kAllRtvDsv;
 		TextureInitInfo texinit = getRenderer().create2DRenderTargetInitInfo(
 			m_tileResolution * m_tileCountBothAxis, m_tileResolution * m_tileCountBothAxis, Format::kD32_Sfloat, usage, "ShadowAtlas");

+ 0 - 2
AnKi/Renderer/ShadowMapping.h

@@ -75,8 +75,6 @@ private:
 		RenderTargetHandle m_rt;
 	} m_runCtx;
 
-	Error initInternal();
-
 	void processLights(RenderingContext& ctx);
 
 	TileAllocatorResult2 allocateAtlasTiles(U32 lightUuid, U32 componentIndex, U32 faceCount, const U32* hierarchies, UVec4* atlasTileViewports);

+ 0 - 13
AnKi/Renderer/ShadowmapsResolve.cpp

@@ -16,24 +16,11 @@
 namespace anki {
 
 Error ShadowmapsResolve::init()
-{
-	const Error err = initInternal();
-	if(err)
-	{
-		ANKI_R_LOGE("Failed to initialize shadow resolve pass");
-	}
-
-	return Error::kNone;
-}
-
-Error ShadowmapsResolve::initInternal()
 {
 	m_quarterRez = g_smResolveQuarterRezCVar;
 	const U32 width = getRenderer().getInternalResolution().x() / (m_quarterRez + 1);
 	const U32 height = getRenderer().getInternalResolution().y() / (m_quarterRez + 1);
 
-	ANKI_R_LOGV("Initializing shadowmaps resolve. Resolution %ux%u", width, height);
-
 	m_rtDescr = getRenderer().create2DRenderTargetDescription(width, height, Format::kR8G8B8A8_Unorm, "SM resolve");
 	m_rtDescr.bake();
 

+ 0 - 2
AnKi/Renderer/ShadowmapsResolve.h

@@ -54,8 +54,6 @@ public:
 		RenderTargetHandle m_rt;
 	} m_runCtx;
 
-	Error initInternal();
-
 	void run(RenderPassWorkContext& rgraphCtx, RenderingContext& ctx);
 };
 /// @}

+ 0 - 13
AnKi/Renderer/Sky.cpp

@@ -13,19 +13,6 @@ namespace anki {
 
 Error Sky::init()
 {
-	const Error err = initInternal();
-	if(err)
-	{
-		ANKI_R_LOGE("Failed to initialize sky passes");
-	}
-
-	return Error::kNone;
-}
-
-Error Sky::initInternal()
-{
-	ANKI_R_LOGV("Initializing sky passes");
-
 	ANKI_CHECK(loadShaderProgram("ShaderBinaries/Sky.ankiprogbin", {}, m_prog, m_transmittanceLutGrProg, "SkyTransmittanceLut"));
 	ANKI_CHECK(loadShaderProgram("ShaderBinaries/Sky.ankiprogbin", {}, m_prog, m_multipleScatteringLutGrProg, "SkyMultipleScatteringLut"));
 	ANKI_CHECK(loadShaderProgram("ShaderBinaries/Sky.ankiprogbin", {}, m_prog, m_skyLutGrProg, "SkyLut"));

+ 0 - 2
AnKi/Renderer/Sky.h

@@ -67,8 +67,6 @@ public:
 	public:
 		RenderTargetHandle m_skyLutRt;
 	} m_runCtx;
-
-	Error initInternal();
 };
 /// @}
 

+ 0 - 13
AnKi/Renderer/Ssao.cpp

@@ -13,21 +13,8 @@
 namespace anki {
 
 Error Ssao::init()
-{
-	const Error err = initInternal();
-	if(err)
-	{
-		ANKI_R_LOGE("Failed to initialize SSAO");
-	}
-	return err;
-}
-
-Error Ssao::initInternal()
 {
 	const UVec2 rez = (g_ssaoQuarterRezCVar) ? getRenderer().getInternalResolution() / 2 : getRenderer().getInternalResolution();
-
-	ANKI_R_LOGV("Initializing SSAO. Resolution %ux%u", rez.x(), rez.y());
-
 	const Bool preferCompute = g_preferComputeCVar;
 
 	{

+ 0 - 12
AnKi/Renderer/Ssr.cpp

@@ -30,21 +30,9 @@
 namespace anki {
 
 Error Ssr::init()
-{
-	const Error err = initInternal();
-	if(err)
-	{
-		ANKI_R_LOGE("Failed to initialize SSR");
-	}
-	return err;
-}
-
-Error Ssr::initInternal()
 {
 	const UVec2 rez = (g_ssrQuarterResolutionCVar) ? getRenderer().getInternalResolution() / 2 : getRenderer().getInternalResolution();
 
-	ANKI_R_LOGV("Initializing SSR. Resolution %ux%u", rez.x(), rez.y());
-
 	TextureUsageBit mipTexUsage = TextureUsageBit::kAllSrv;
 	if(g_preferComputeCVar)
 	{

+ 0 - 2
AnKi/Renderer/Ssr.h

@@ -56,8 +56,6 @@ public:
 	public:
 		RenderTargetHandle m_ssrRt;
 	} m_runCtx;
-
-	Error initInternal();
 };
 /// @}
 

+ 0 - 13
AnKi/Renderer/TemporalAA.cpp

@@ -16,19 +16,6 @@ namespace anki {
 
 Error TemporalAA::init()
 {
-	const Error err = initInternal();
-	if(err)
-	{
-		ANKI_R_LOGE("Failed to init TAA");
-	}
-
-	return Error::kNone;
-}
-
-Error TemporalAA::initInternal()
-{
-	ANKI_R_LOGV("Initializing TAA");
-
 	ANKI_CHECK(loadShaderProgram("ShaderBinaries/TemporalAA.ankiprogbin", {{"VARIANCE_CLIPPING", 1}, {"YCBCR", 0}}, m_prog, m_grProg));
 
 	for(U32 i = 0; i < 2; ++i)

+ 0 - 2
AnKi/Renderer/TemporalAA.h

@@ -38,8 +38,6 @@ private:
 		RenderTargetHandle m_renderRt;
 		RenderTargetHandle m_historyRt;
 	} m_runCtx;
-
-	Error initInternal();
 };
 /// @}
 

+ 0 - 13
AnKi/Renderer/Tonemapping.cpp

@@ -14,25 +14,12 @@
 namespace anki {
 
 Error Tonemapping::init()
-{
-	const Error err = initInternal();
-	if(err)
-	{
-		ANKI_R_LOGE("Failed to initialize tonemapping");
-	}
-
-	return err;
-}
-
-Error Tonemapping::initInternal()
 {
 	{
 		m_expAndAvgLum.m_inputTexMip =
 			(getRenderer().getBloom().getPyramidTextureMipmapCount() > 2) ? getRenderer().getBloom().getPyramidTextureMipmapCount() - 2 : 0;
 		const UVec2 size = getRenderer().getBloom().getPyramidTextureSize() >> m_expAndAvgLum.m_inputTexMip;
 
-		ANKI_R_LOGV("Initializing tonemapping. Resolution %ux%u", size.x(), size.y());
-
 		// Create program
 		ANKI_CHECK(loadShaderProgram("ShaderBinaries/TonemappingAverageLuminance.ankiprogbin", m_expAndAvgLum.m_prog, m_expAndAvgLum.m_grProg));
 

+ 0 - 2
AnKi/Renderer/Tonemapping.h

@@ -63,8 +63,6 @@ private:
 		RenderTargetHandle m_exposureLuminanceHandle;
 		RenderTargetHandle m_rt;
 	} m_runCtx;
-
-	Error initInternal();
 };
 /// @}
 

+ 0 - 2
AnKi/Renderer/VolumetricFog.cpp

@@ -26,8 +26,6 @@ Error VolumetricFog::init()
 	m_volumeSize[1] = U32(F32(getRenderer().getTileCounts().y()) * qualityXY);
 	m_volumeSize[2] = U32(F32(m_finalZSplit + 1) * qualityZ);
 
-	ANKI_R_LOGV("Initializing volumetric fog. Resolution %ux%ux%u", m_volumeSize[0], m_volumeSize[1], m_volumeSize[2]);
-
 	// Shaders
 	ANKI_CHECK(loadShaderProgram("ShaderBinaries/VolumetricFogAccumulation.ankiprogbin", m_prog, m_grProg));
 

+ 0 - 1
AnKi/Renderer/VolumetricLightingAccumulation.cpp

@@ -25,7 +25,6 @@ Error VolumetricLightingAccumulation::init()
 	m_volumeSize[0] = U32(F32(getRenderer().getTileCounts().x()) * qualityXY);
 	m_volumeSize[1] = U32(F32(getRenderer().getTileCounts().y()) * qualityXY);
 	m_volumeSize[2] = U32(F32(finalZSplit + 1) * qualityZ);
-	ANKI_R_LOGV("Initializing volumetric lighting accumulation. Size %ux%ux%u", m_volumeSize[0], m_volumeSize[1], m_volumeSize[2]);
 
 	if(!isAligned(getRenderer().getTileCounts().x(), m_volumeSize[0]) || !isAligned(getRenderer().getTileCounts().y(), m_volumeSize[1])
 	   || m_volumeSize[0] == 0 || m_volumeSize[1] == 0 || m_volumeSize[2] == 0)

+ 0 - 12
AnKi/Renderer/VrsSriGeneration.cpp

@@ -12,16 +12,6 @@
 namespace anki {
 
 Error VrsSriGeneration::init()
-{
-	const Error err = initInternal();
-	if(err)
-	{
-		ANKI_R_LOGE("Failed to initialize VRS SRI generation");
-	}
-	return err;
-}
-
-Error VrsSriGeneration::initInternal()
 {
 	if(!GrManager::getSingleton().getDeviceCapabilities().m_vrs)
 	{
@@ -32,8 +22,6 @@ Error VrsSriGeneration::initInternal()
 	ANKI_ASSERT(m_sriTexelDimension == 8 || m_sriTexelDimension == 16);
 	const UVec2 rez = (getRenderer().getInternalResolution() + m_sriTexelDimension - 1) / m_sriTexelDimension;
 
-	ANKI_R_LOGV("Intializing VRS SRI generation. SRI resolution %ux%u", rez.x(), rez.y());
-
 	// Create textures
 	const TextureUsageBit texUsage = TextureUsageBit::kShadingRate | TextureUsageBit::kUavCompute | TextureUsageBit::kAllSrv;
 	TextureInitInfo sriInitInfo = getRenderer().create2DRenderTargetInitInfo(rez.x(), rez.y(), Format::kR8_Uint, texUsage, "VrsSri");

+ 0 - 2
AnKi/Renderer/VrsSriGeneration.h

@@ -69,8 +69,6 @@ public:
 		RenderTargetHandle m_downscaledRt;
 	} m_runCtx;
 
-	Error initInternal();
-
 	void getDebugRenderTarget(CString rtName, Array<RenderTargetHandle, kMaxDebugRenderTargets>& handles,
 							  ShaderProgramPtr& optionalShaderProgram) const override;
 };

+ 1 - 0
AnKi/Util/CVarSet.cpp

@@ -103,6 +103,7 @@ Error CVarSet::setMultiple(ConstWeakArray<const Char*> arr)
 				ANKI_CVAR_NUMERIC_SET(U32)
 				ANKI_CVAR_NUMERIC_SET(PtrSize)
 				ANKI_CVAR_NUMERIC_SET(F32)
+				ANKI_CVAR_NUMERIC_SET(F64)
 			default:
 				ANKI_ASSERT(0);
 			}

+ 3 - 1
AnKi/Util/CVarSet.h

@@ -40,7 +40,8 @@ protected:
 		kNumericU16,
 		kNumericU32,
 		kNumericPtrSize,
-		kNumericF32
+		kNumericF32,
+		kNumericF64
 	};
 
 	Type m_type;
@@ -111,6 +112,7 @@ ANKI_CVAR_NUMERIC_TYPE(U16)
 ANKI_CVAR_NUMERIC_TYPE(U32)
 ANKI_CVAR_NUMERIC_TYPE(PtrSize)
 ANKI_CVAR_NUMERIC_TYPE(F32)
+ANKI_CVAR_NUMERIC_TYPE(F64)
 #undef ANKI_CVAR_NUMERIC_TYPE
 
 /// String config variable.

+ 10 - 10
AnKi/Util/Logger.cpp

@@ -65,15 +65,9 @@ void Logger::removeMessageHandler(void* data, LoggerMessageHandlerCallback callb
 	}
 }
 
-void Logger::write(const Char* file, int line, const Char* func, const Char* subsystem, LoggerMessageType type, const Char* threadName,
-				   const Char* msg)
+void Logger::writeInternal(const Char* file, int line, const Char* func, const Char* subsystem, LoggerMessageType type, const Char* threadName,
+						   const Char* msg)
 {
-	// Note: m_verbosityEnabled is not accessed in a thread-safe way. It doesn't really matter though
-	if(type == LoggerMessageType::kVerbose && !m_verbosityEnabled) [[likely]]
-	{
-		return;
-	}
-
 	const Char* baseFile = strrchr(file, (ANKI_OS_WINDOWS) ? '\\' : '/');
 	baseFile = (baseFile) ? baseFile + 1 : file;
 
@@ -107,6 +101,12 @@ void Logger::write(const Char* file, int line, const Char* func, const Char* sub
 void Logger::writeFormated(const Char* file, int line, const Char* func, const Char* subsystem, LoggerMessageType type, const Char* threadName,
 						   const Char* fmt, ...)
 {
+	// Note: m_verbosityEnabled is not accessed in a thread-safe way. It doesn't really matter though
+	if(type == LoggerMessageType::kVerbose && !m_verbosityEnabled)
+	{
+		return;
+	}
+
 	Array<Char, 256> buffer;
 	va_list args;
 
@@ -119,7 +119,7 @@ void Logger::writeFormated(const Char* file, int line, const Char* func, const C
 	}
 	else if(len < I(sizeof(buffer)))
 	{
-		write(file, line, func, subsystem, type, threadName, &buffer[0]);
+		writeInternal(file, line, func, subsystem, type, threadName, &buffer[0]);
 		va_end(args);
 	}
 	else
@@ -133,7 +133,7 @@ void Logger::writeFormated(const Char* file, int line, const Char* func, const C
 		Char* newBuffer = static_cast<Char*>(malloc(newSize));
 		len = vsnprintf(newBuffer, newSize, fmt, args);
 
-		write(file, line, func, subsystem, type, threadName, newBuffer);
+		writeInternal(file, line, func, subsystem, type, threadName, newBuffer);
 
 		free(newBuffer);
 		va_end(args);

+ 14 - 3
AnKi/Util/Logger.h

@@ -47,8 +47,7 @@ public:
 /// @memberof Logger
 using LoggerMessageHandlerCallback = void (*)(void*, const LoggerMessageInfo& info);
 
-/// The logger singleton class. The logger cannot print errors or throw exceptions, it has to recover somehow. It's
-/// thread safe.
+/// The logger singleton class. The logger cannot print errors or throw exceptions, it has to recover somehow. It's thread safe.
 /// To add a new signal:
 /// @code logger.addMessageHandler((void*)obj, &function) @endcode
 class Logger : public MakeSingleton<Logger>
@@ -67,7 +66,16 @@ public:
 	void addFileMessageHandler(File* file);
 
 	/// Send a message.
-	void write(const Char* file, int line, const Char* func, const Char* subsystem, LoggerMessageType type, const Char* threadName, const Char* msg);
+	void write(const Char* file, int line, const Char* func, const Char* subsystem, LoggerMessageType type, const Char* threadName, const Char* msg)
+	{
+		// Note: m_verbosityEnabled is not accessed in a thread-safe way. It doesn't really matter though
+		if(type == LoggerMessageType::kVerbose && !m_verbosityEnabled)
+		{
+			return;
+		}
+
+		writeInternal(file, line, func, subsystem, type, threadName, msg);
+	}
 
 	/// Send a formated message.
 	ANKI_CHECK_FORMAT(7, 8)
@@ -100,6 +108,9 @@ private:
 
 	static void defaultSystemMessageHandler(void*, const LoggerMessageInfo& info);
 	static void fileMessageHandler(void* file, const LoggerMessageInfo& info);
+
+	void writeInternal(const Char* file, int line, const Char* func, const Char* subsystem, LoggerMessageType type, const Char* threadName,
+					   const Char* msg);
 };
 
 #define ANKI_LOG(subsystem_, t, ...) \

+ 1 - 1
Tests/Framework/Framework.cpp

@@ -241,7 +241,7 @@ void initWindow()
 	inf.m_width = g_windowWidthCVar;
 	inf.m_height = g_windowHeightCVar;
 	inf.m_title = "AnKi unit tests";
-	NativeWindow* win = &NativeWindow::allocateSingleton();
+	NativeWindow::allocateSingleton();
 	ANKI_TEST_EXPECT_NO_ERR(NativeWindow::getSingleton().init(inf));
 }
 

+ 1 - 1
Tools/Shader/ShaderProgramBinaryDumpMain.cpp

@@ -178,7 +178,7 @@ Error dumpStats(const ShaderBinary& bin)
 					DynamicArray<U8> newSpirv;
 					newSpirv.resize(codeBlock.m_binary.getSize());
 					memcpy(newSpirv.getBegin(), codeBlock.m_binary.getBegin(), codeBlock.m_binary.getSizeInBytes());
-					visitSpirv(WeakArray<U32>(reinterpret_cast<U32*>(newSpirv.getBegin()), newSpirv.getSizeInBytes() / sizeof(U32)),
+					visitSpirv(WeakArray<U32>(reinterpret_cast<U32*>(newSpirv.getBegin()), U32(newSpirv.getSizeInBytes() / sizeof(U32))),
 							   [&](U32 cmd, WeakArray<U32> instructions) {
 								   if(cmd == spv::OpDecorate && instructions[1] == spv::DecorationDescriptorSet
 									  && instructions[2] == kDxcVkBindlessRegisterSpace)