Browse Source

Move Dbg to the render graph

Panagiotis Christopoulos Charitos 8 năm trước cách đây
mục cha
commit
a08f78227c

+ 1 - 1
samples/common/Framework.cpp

@@ -70,7 +70,7 @@ Error SampleApp::userMainLoop(Bool& quit)
 	}
 	if(in.getKey(KeyCode::F2) == 1)
 	{
-		renderer.getDbg().flipFlags(DbgFlag::SPATIAL_COMPONENT);
+		// renderer.getDbg().flipFlags(DbgFlag::SPATIAL_COMPONENT);
 	}
 	if(in.getKey(KeyCode::F6) == 1)
 	{

+ 3 - 3
sandbox/Main.cpp

@@ -129,15 +129,15 @@ Error MyApp::userMainLoop(Bool& quit)
 	}
 	if(in.getKey(KeyCode::F2) == 1)
 	{
-		renderer.getDbg().flipFlags(DbgFlag::SPATIAL_COMPONENT);
+		// renderer.getDbg().flipFlags(DbgFlag::SPATIAL_COMPONENT);
 	}
 	if(in.getKey(KeyCode::F3) == 1)
 	{
-		renderer.getDbg().flipFlags(DbgFlag::PHYSICS);
+		// renderer.getDbg().flipFlags(DbgFlag::PHYSICS);
 	}
 	if(in.getKey(KeyCode::F4) == 1)
 	{
-		renderer.getDbg().flipFlags(DbgFlag::SECTOR_COMPONENT);
+		// renderer.getDbg().flipFlags(DbgFlag::SECTOR_COMPONENT);
 	}
 	if(in.getKey(KeyCode::F6) == 1)
 	{

+ 46 - 178
src/anki/renderer/Dbg.cpp

@@ -37,7 +37,6 @@ Dbg::~Dbg()
 Error Dbg::init(const ConfigSet& initializer)
 {
 	m_enabled = initializer.getNumber("r.dbg.enabled");
-	m_flags.set(DbgFlag::ALL);
 	return Error::NONE;
 }
 
@@ -45,24 +44,21 @@ Error Dbg::lazyInit()
 {
 	ANKI_ASSERT(!m_initialized);
 
-	// RT
-	m_rt = m_r->createAndClearRenderTarget(m_r->create2DRenderTargetInitInfo(m_r->getWidth(),
+	// RT descr
+	m_rtDescr = m_r->create2DRenderTargetDescription(m_r->getWidth(),
 		m_r->getHeight(),
 		DBG_COLOR_ATTACHMENT_PIXEL_FORMAT,
 		TextureUsageBit::SAMPLED_FRAGMENT | TextureUsageBit::FRAMEBUFFER_ATTACHMENT_READ_WRITE,
 		SamplingFilter::LINEAR,
-		1));
+		"Dbg");
+	m_rtDescr.bake();
 
-	// Create FB
-	FramebufferInitInfo fbInit;
-	fbInit.m_colorAttachmentCount = 1;
-	fbInit.m_colorAttachments[0].m_texture = m_rt;
-	fbInit.m_colorAttachments[0].m_loadOperation = AttachmentLoadOperation::CLEAR;
-	// TODO fbInit.m_depthStencilAttachment.m_texture = m_r->getGBuffer().m_depthRt;
-	fbInit.m_depthStencilAttachment.m_loadOperation = AttachmentLoadOperation::LOAD;
-	fbInit.m_depthStencilAttachment.m_aspect = DepthStencilAspectBit::DEPTH;
-
-	m_fb = getGrManager().newInstance<Framebuffer>(fbInit);
+	// Create FB descr
+	m_fbDescr.m_colorAttachmentCount = 1;
+	m_fbDescr.m_colorAttachments[0].m_loadOperation = AttachmentLoadOperation::CLEAR;
+	m_fbDescr.m_depthStencilAttachment.m_loadOperation = AttachmentLoadOperation::LOAD;
+	m_fbDescr.m_depthStencilAttachment.m_aspect = DepthStencilAspectBit::DEPTH;
+	m_fbDescr.bake();
 
 	m_drawer = getAllocator().newInstance<DebugDrawer>();
 	ANKI_CHECK(m_drawer->init(m_r));
@@ -70,19 +66,35 @@ Error Dbg::lazyInit()
 	return Error::NONE;
 }
 
-Error Dbg::run(RenderingContext& ctx)
+Bool Dbg::getDepthTestEnabled() const
+{
+	return m_drawer->getDepthTestEnabled();
+}
+
+void Dbg::setDepthTestEnabled(Bool enable)
+{
+	m_drawer->setDepthTestEnabled(enable);
+}
+
+void Dbg::switchDepthTestEnabled()
+{
+	Bool enabled = m_drawer->getDepthTestEnabled();
+	m_drawer->setDepthTestEnabled(!enabled);
+}
+
+void Dbg::run(const RenderingContext& ctx, const RenderGraph& rgraph, CommandBufferPtr& cmdb)
 {
-#if 0
 	ANKI_ASSERT(m_enabled);
 
 	if(!m_initialized)
 	{
-		ANKI_CHECK(lazyInit());
+		if(lazyInit())
+		{
+			return;
+		}
 		m_initialized = true;
 	}
 
-	CommandBufferPtr& cmdb = ctx.m_commandBuffer;
-	cmdb->beginRenderPass(m_fb);
 	cmdb->setViewport(0, 0, m_r->getWidth(), m_r->getHeight());
 
 	m_drawer->prepareFrame(cmdb);
@@ -113,171 +125,27 @@ Error Dbg::run(RenderingContext& ctx)
 		sceneDrawer.draw(plight);
 	}
 
-#if 0
-	{
-		m_drawer->setViewProjectionMatrix(camFrc.getViewProjectionMatrix());
-		m_drawer->setModelMatrix(Mat4::getIdentity());
-		CollisionDebugDrawer cd(m_drawer);
-		Mat4 proj = camFrc.getProjectionMatrix();
-
-		m_drawer->setViewProjectionMatrix(camFrc.getViewProjectionMatrix());
-
-		Sphere s(Vec4(1.2, 2.0, -1.1, 0.0), 2.1);
-
-		s.accept(cd);
-
-		Transform trf = scene.findSceneNode("light0").getComponent<MoveComponent>().getWorldTransform();
-		Vec4 rayOrigin = trf.getOrigin();
-		Vec3 rayDir = -trf.getRotation().getZAxis().getNormalized();
-		m_drawer->setModelMatrix(Mat4::getIdentity());
-		m_drawer->drawLine(rayOrigin.xyz(), rayOrigin.xyz() + rayDir.xyz() * 10.0, Vec4(1.0, 1.0, 1.0, 1.0));
-
-		Array<Vec4, 2> intersectionPoints;
-		U intersectionPointCount;
-		s.intersectsRay(rayDir.xyz0(), rayOrigin, intersectionPoints, intersectionPointCount);
-		for(U i = 0; i < intersectionPointCount; ++i)
-		{
-			m_drawer->drawLine(Vec3(0.0), intersectionPoints[i].xyz(), Vec4(0.0, 1.0, 0.0, 1.0));
-		}
-	}
-#endif
-
-#if 0
-	{
-		Clusterer c;
-		c.init(getAllocator(), 16, 12, 30);
-
-		const FrustumComponent& frc = scene.findSceneNode("cam0").getComponent<FrustumComponent>();
-		const MoveComponent& movc = scene.findSceneNode("cam0").getComponent<MoveComponent>();
-
-		ClustererPrepareInfo pinf;
-		pinf.m_viewMat = frc.getViewMatrix();
-		pinf.m_projMat = frc.getProjectionMatrix();
-		pinf.m_camTrf = frc.getFrustum().getTransform();
-		c.prepare(m_r->getThreadPool(), pinf);
-
-		class DD : public ClustererDebugDrawer
-		{
-		public:
-			DebugDrawer* m_d;
-
-			void operator()(const Vec3& lineA, const Vec3& lineB, const Vec3& color)
-			{
-				m_d->drawLine(lineA, lineB, color.xyz1());
-			}
-		};
-
-		DD dd;
-		dd.m_d = m_drawer;
-
-		CollisionDebugDrawer cd(m_drawer);
-
-		Sphere s(Vec4(1.0, 0.1, -1.2, 0.0), 1.2);
-		PerspectiveFrustum fr(toRad(25.), toRad(35.), 0.1, 5.);
-		fr.transform(Transform(Vec4(0., 1., 0., 0.), Mat3x4::getIdentity(), 1.0));
-
-		m_drawer->setModelMatrix(Mat4(movc.getWorldTransform()));
-		// c.debugDraw(dd);
-
-		if(frc.getFrustum().insideFrustum(fr))
-		{
-			ClustererTestResult rez;
-			c.initTestResults(getAllocator(), rez);
-			Aabb sbox;
-			fr.computeAabb(sbox);
-			c.binPerspectiveFrustum(fr, sbox, rez);
-			//c.bin(s, sbox, rez);
-
-			c.debugDrawResult(rez, dd);
-		}
-
-		m_drawer->setColor(Vec4(1.0, 1.0, 0.0, 1.0));
-		frc.getFrustum().accept(cd);
-		fr.accept(cd);
-	}
-#endif
-
-#if 0
-	{
-		CollisionDebugDrawer cd(m_drawer);
-
-		Array<Vec3, 4> poly;
-		poly[0] = Vec3(0.0, 0.0, 0.0);
-		poly[1] = Vec3(2.5, 0.0, 0.0);
-
-		Mat4 trf(Vec4(147.392776, -12.132728, 16.607138, 1.0),
-			Mat3(Euler(toRad(45.0), toRad(0.0), toRad(120.0))),
-			1.0);
-
-		Array<Vec3, 4> polyw;
-		polyw[0] = trf.transform(poly[0]);
-		polyw[1] = trf.transform(poly[1]);
-
-		m_drawer->setModelMatrix(Mat4::getIdentity());
-		m_drawer->drawLine(polyw[0], polyw[1], Vec4(1.0));
-
-		Vec4 p0 = camFrc.getViewMatrix() * polyw[0].xyz1();
-		p0.w() = 0.0;
-		Vec4 p1 = camFrc.getViewMatrix() * polyw[1].xyz1();
-		p1.w() = 0.0;
-
-		Vec4 r = p1 - p0;
-		r.normalize();
-
-		Vec4 a = camFrc.getProjectionMatrix() * p0.xyz1();
-		a /= a.w();
-
-		Vec4 i;
-		if(r.z() > 0)
-		{
-			// Plane near(Vec4(0, 0, -1, 0), camFrc.getFrustum().getNear() +
-			// 0.001);
-			// Bool in = near.intersectRay(p0, r * 100000.0, i);
-			i.z() = -camFrc.getFrustum().getNear();
-			F32 t = (i.z() - p0.z()) / r.z();
-			i.x() = p0.x() + t * r.x();
-			i.y() = p0.y() + t * r.y();
-
-			i = camFrc.getProjectionMatrix() * i.xyz1();
-			i /= i.w();
-		}
-		else
-		{
-			i = camFrc.getProjectionMatrix() * (r * 100000.0).xyz1();
-			i /= i.w();
-		}
-
-		/*r *= 0.01;
-		Vec4 b = polyw[0].xyz0() + r;
-		b = camFrc.getViewProjectionMatrix() * b.xyz1();
-		Vec4 d = b / b.w();*/
-
-		m_drawer->setViewProjectionMatrix(Mat4::getIdentity());
-		m_drawer->drawLine(
-			Vec3(a.xy(), 0.1), Vec3(i.xy(), 0.1), Vec4(1.0, 0, 0, 1));
-	}
-#endif
-
 	m_drawer->finishFrame();
-	cmdb->endRenderPass();
-#endif
-	return Error::NONE;
 }
 
-Bool Dbg::getDepthTestEnabled() const
+void Dbg::populateRenderGraph(RenderingContext& ctx)
 {
-	return m_drawer->getDepthTestEnabled();
-}
+	m_runCtx.m_ctx = &ctx;
+	RenderGraphDescription& rgraph = ctx.m_renderGraphDescr;
 
-void Dbg::setDepthTestEnabled(Bool enable)
-{
-	m_drawer->setDepthTestEnabled(enable);
-}
+	// Create RT
+	m_runCtx.m_rt = rgraph.newRenderTarget(m_rtDescr);
 
-void Dbg::switchDepthTestEnabled()
-{
-	Bool enabled = m_drawer->getDepthTestEnabled();
-	m_drawer->setDepthTestEnabled(!enabled);
+	// Create pass
+	GraphicsRenderPassDescription& pass = rgraph.newGraphicsRenderPass("DBG");
+
+	pass.setWork(runCallback, this, 0);
+	pass.setFramebufferInfo(m_fbDescr, {{m_runCtx.m_rt}}, m_r->getGBuffer().getDepthRt());
+
+	pass.newConsumer({m_runCtx.m_rt, TextureUsageBit::FRAMEBUFFER_ATTACHMENT_WRITE});
+	pass.newConsumer({m_r->getGBuffer().getDepthRt(),
+		TextureUsageBit::SAMPLED_FRAGMENT | TextureUsageBit::FRAMEBUFFER_ATTACHMENT_READ});
+	pass.newProducer({m_runCtx.m_rt, TextureUsageBit::FRAMEBUFFER_ATTACHMENT_WRITE});
 }
 
 } // end namespace anki

+ 29 - 38
src/anki/renderer/Dbg.h

@@ -7,7 +7,6 @@
 
 #include <anki/renderer/RendererObject.h>
 #include <anki/Gr.h>
-#include <anki/util/BitMask.h>
 #include <anki/util/Enum.h>
 
 namespace anki
@@ -16,19 +15,6 @@ namespace anki
 /// @addtogroup renderer
 /// @{
 
-/// Dbg flags. Define them first so they can be parameter to the bitset
-enum class DbgFlag : U16
-{
-	NONE = 0,
-	SPATIAL_COMPONENT = 1 << 0,
-	FRUSTUM_COMPONENT = 1 << 1,
-	SECTOR_COMPONENT = 1 << 2,
-	DECAL_COMPONENT = 1 << 3,
-	PHYSICS = 1 << 4,
-	ALL = SPATIAL_COMPONENT | FRUSTUM_COMPONENT | SECTOR_COMPONENT | DECAL_COMPONENT | PHYSICS
-};
-ANKI_ENUM_ALLOW_NUMERIC_OPERATIONS(DbgFlag, inline)
-
 /// Debugging stage
 class Dbg : public RendererObject
 {
@@ -47,26 +33,6 @@ public:
 	void setDepthTestEnabled(Bool enable);
 	void switchDepthTestEnabled();
 
-	void setFlags(DbgFlag flags)
-	{
-		m_flags.set(flags);
-	}
-
-	void unsetFlags(DbgFlag flags)
-	{
-		m_flags.unset(flags);
-	}
-
-	void flipFlags(DbgFlag flags)
-	{
-		m_flags.flip(flags);
-	}
-
-	TexturePtr getRt() const
-	{
-		return m_rt;
-	}
-
 anki_internal:
 	Dbg(Renderer* r);
 
@@ -74,17 +40,42 @@ anki_internal:
 
 	ANKI_USE_RESULT Error init(const ConfigSet& initializer);
 
-	ANKI_USE_RESULT Error run(RenderingContext& ctx);
+	/// Populate the rendergraph.
+	void populateRenderGraph(RenderingContext& ctx);
+
+	RenderTargetHandle getRt() const
+	{
+		return m_runCtx.m_rt;
+	}
 
 private:
 	Bool8 m_enabled = false;
 	Bool8 m_initialized = false; ///< Lazily initialize.
-	TexturePtr m_rt;
-	FramebufferPtr m_fb;
+	RenderTargetDescription m_rtDescr;
+	FramebufferDescription m_fbDescr;
 	DebugDrawer* m_drawer = nullptr;
-	BitMask<DbgFlag> m_flags;
+
+	class
+	{
+	public:
+		RenderTargetHandle m_rt;
+		RenderingContext* m_ctx = nullptr;
+	} m_runCtx;
 
 	ANKI_USE_RESULT Error lazyInit();
+
+	// A RenderPassWorkCallback for debug pass.
+	static void runCallback(void* userData,
+		CommandBufferPtr cmdb,
+		U32 secondLevelCmdbIdx,
+		U32 secondLevelCmdbCount,
+		const RenderGraph& rgraph)
+	{
+		Dbg* self = static_cast<Dbg*>(userData);
+		self->run(*self->m_runCtx.m_ctx, rgraph, cmdb);
+	}
+
+	void run(const RenderingContext& ctx, const RenderGraph& rgraph, CommandBufferPtr& cmdb);
 };
 /// @}
 

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

@@ -119,7 +119,7 @@ void FinalComposite::run(const RenderingContext& ctx, const RenderGraph& rgraph,
 	cmdb->bindTexture(0, 3, m_blueNoise->getGrTexture());
 	if(dbgEnabled)
 	{
-		// TODO cmdb->bindTexture(0, 5, m_r->getDbg().getRt());
+		cmdb->bindTexture(0, 5, rgraph.getTexture(m_r->getDbg().getRt()));
 	}
 
 	cmdb->bindStorageBuffer(0, 0, rgraph.getBuffer(m_r->getTonemapping().getAverageLuminanceBuffer()), 0, MAX_PTR_SIZE);
@@ -149,6 +149,7 @@ void FinalComposite::populateRenderGraph(RenderingContext& ctx)
 	RenderGraphDescription& rgraph = ctx.m_renderGraphDescr;
 	m_runCtx.m_ctx = &ctx;
 	const Bool drawToDefaultFb = m_r->getDrawToDefaultFramebuffer();
+	const Bool dbgEnabled = m_r->getDbg().getEnabled();
 
 	// Maybe create the RT
 	if(!drawToDefaultFb)
@@ -176,7 +177,10 @@ void FinalComposite::populateRenderGraph(RenderingContext& ctx)
 		pass.newProducer({m_runCtx.m_rt, TextureUsageBit::FRAMEBUFFER_ATTACHMENT_WRITE});
 	}
 
-	// TODO Add DBG RT
+	if(dbgEnabled)
+	{
+		pass.newConsumer({m_r->getDbg().getRt(), TextureUsageBit::SAMPLED_FRAGMENT});
+	}
 	pass.newConsumer({m_r->getTemporalAA().getRt(), TextureUsageBit::SAMPLED_FRAGMENT});
 	pass.newConsumer({m_r->getBloom().getRt(), TextureUsageBit::SAMPLED_FRAGMENT});
 	pass.newConsumer({m_r->getTonemapping().getAverageLuminanceBuffer(), BufferUsageBit::STORAGE_FRAGMENT_READ});

+ 2 - 2
src/anki/renderer/Indirect.cpp

@@ -196,8 +196,9 @@ Error Indirect::initLightShading(const ConfigSet& config)
 			TextureUsageBit::SAMPLED_FRAGMENT | TextureUsageBit::FRAMEBUFFER_ATTACHMENT_WRITE
 				| TextureUsageBit::GENERATE_MIPMAPS,
 			SamplingFilter::LINEAR,
-			m_lightShading.m_mipCount,
 			"GI refl");
+		texinit.m_mipmapsCount = m_lightShading.m_mipCount;
+		texinit.m_sampling.m_mipmapFilter = SamplingFilter::LINEAR;
 		texinit.m_type = TextureType::CUBE_ARRAY;
 		texinit.m_layerCount = m_cacheEntries.getSize();
 		texinit.m_initialUsage = TextureUsageBit::SAMPLED_FRAGMENT;
@@ -248,7 +249,6 @@ Error Indirect::initIrradiance(const ConfigSet& config)
 			LIGHT_SHADING_COLOR_ATTACHMENT_PIXEL_FORMAT,
 			TextureUsageBit::SAMPLED_FRAGMENT | TextureUsageBit::FRAMEBUFFER_ATTACHMENT_WRITE,
 			SamplingFilter::LINEAR,
-			1,
 			"GI irr");
 
 		texinit.m_layerCount = m_cacheEntries.getSize();

+ 2 - 123
src/anki/renderer/Renderer.cpp

@@ -402,7 +402,7 @@ Vec3 Renderer::unproject(
 }
 
 TextureInitInfo Renderer::create2DRenderTargetInitInfo(
-	U32 w, U32 h, const PixelFormat& format, TextureUsageBit usage, SamplingFilter filter, U mipsCount, CString name)
+	U32 w, U32 h, const PixelFormat& format, TextureUsageBit usage, SamplingFilter filter, CString name)
 {
 	ANKI_ASSERT(!!(usage & TextureUsageBit::FRAMEBUFFER_ATTACHMENT_WRITE));
 	TextureInitInfo init(name);
@@ -413,18 +413,10 @@ TextureInitInfo Renderer::create2DRenderTargetInitInfo(
 	init.m_layerCount = 1;
 	init.m_type = TextureType::_2D;
 	init.m_format = format;
-	init.m_mipmapsCount = mipsCount;
+	init.m_mipmapsCount = 1;
 	init.m_samples = 1;
 	init.m_usage = usage;
 	init.m_sampling.m_minMagFilter = filter;
-	if(mipsCount > 1)
-	{
-		init.m_sampling.m_mipmapFilter = filter;
-	}
-	else
-	{
-		init.m_sampling.m_mipmapFilter = SamplingFilter::BASE;
-	}
 	init.m_sampling.m_repeat = false;
 	init.m_sampling.m_anisotropyLevel = 0;
 
@@ -521,117 +513,4 @@ TexturePtr Renderer::createAndClearRenderTarget(const TextureInitInfo& inf, cons
 	return tex;
 }
 
-void Renderer::buildCommandBuffersInternal(RenderingContext& ctx, U32 threadId, PtrSize threadCount)
-{
-// G-Buffer pass
-//
-// TODO m_gbuffer->buildCommandBuffers(ctx, threadId, threadCount);
-
-// Append to the last MS's cmdb the occlusion tests
-/*if(ctx.m_gbuffer.m_lastThreadWithWork == threadId)
-{
-	m_lensFlare->runOcclusionTests(ctx, ctx.m_gbuffer.m_commandBuffers[threadId]);
-}
-
-if(ctx.m_gbuffer.m_commandBuffers[threadId])
-{
-	ctx.m_gbuffer.m_commandBuffers[threadId]->flush();
-}*/
-
-// SM
-//
-// TODO: m_shadowMapping->buildCommandBuffers(ctx, threadId, threadCount);
-
-// FS
-//
-#if 0
-	// TODO m_forwardShading->buildCommandBuffers(ctx, threadId, threadCount);
-
-	// Append to the last FB's cmdb the other passes
-	if(ctx.m_forwardShading.m_lastThreadWithWork == threadId)
-	{
-		m_lensFlare->run(ctx, ctx.m_forwardShading.m_commandBuffers[threadId]);
-		// TODO m_forwardShading->drawVolumetric(ctx, ctx.m_forwardShading.m_commandBuffers[threadId]);
-	}
-	else if(threadId == threadCount - 1 && ctx.m_forwardShading.m_lastThreadWithWork == MAX_U32)
-	{
-		// There is no FS work. Create a cmdb just for LF & VOL
-
-		CommandBufferInitInfo init;
-		init.m_flags =
-			CommandBufferFlag::GRAPHICS_WORK | CommandBufferFlag::SECOND_LEVEL | CommandBufferFlag::SMALL_BATCH;
-		init.m_framebuffer = m_forwardShading->getFramebuffer();
-		CommandBufferPtr cmdb = getGrManager().newInstance<CommandBuffer>(init);
-
-		cmdb->setViewport(0, 0, m_forwardShading->getWidth(), m_forwardShading->getHeight());
-
-		m_lensFlare->run(ctx, cmdb);
-		// TODO m_forwardShading->drawVolumetric(ctx, cmdb);
-
-		ctx.m_forwardShading.m_commandBuffers[threadId] = cmdb;
-	}
-
-	if(ctx.m_forwardShading.m_commandBuffers[threadId])
-	{
-		ctx.m_forwardShading.m_commandBuffers[threadId]->flush();
-	}
-#endif
-}
-
-Error Renderer::buildCommandBuffers(RenderingContext& ctx)
-{
-#if 0
-	ANKI_TRACE_SCOPED_EVENT(RENDERER_COMMAND_BUFFER_BUILDING);
-	ThreadPool& threadPool = getThreadPool();
-
-	// Find the last jobs for MS and FS
-	U32 lastMsJob = MAX_U32;
-	U32 lastFsJob = MAX_U32;
-	const U threadCount = threadPool.getThreadsCount();
-	for(U i = threadCount - 1; i != 0; --i)
-	{
-		const U gbuffProblemSize =
-			ctx.m_renderQueue->m_renderables.getSize() + ctx.m_renderQueue->m_earlyZRenderables.getSize();
-		if(threadWillDoWork(gbuffProblemSize, i, threadCount) && lastMsJob == MAX_U32)
-		{
-			lastMsJob = i;
-		}
-
-		if(threadWillDoWork(ctx.m_renderQueue->m_forwardShadingRenderables.getSize(), i, threadCount)
-			&& lastFsJob == MAX_U32)
-		{
-			lastFsJob = i;
-		}
-	}
-
-	ctx.m_gbuffer.m_lastThreadWithWork = lastMsJob;
-	ctx.m_forwardShading.m_lastThreadWithWork = lastFsJob;
-
-	// Build
-	class Task : public ThreadPoolTask
-	{
-	public:
-		Renderer* m_r ANKI_DBG_NULLIFY;
-		RenderingContext* m_ctx ANKI_DBG_NULLIFY;
-
-		Error operator()(U32 threadId, PtrSize threadCount)
-		{
-			m_r->buildCommandBuffersInternal(*m_ctx, threadId, threadCount);
-			return Error::NONE;
-		}
-	};
-
-	Task task;
-	task.m_r = this;
-	task.m_ctx = &ctx;
-	for(U i = 0; i < threadPool.getThreadsCount(); i++)
-	{
-		threadPool.assignNewTask(i, &task);
-	}
-
-	ANKI_CHECK(threadPool.waitForAllThreadsToFinish());
-#endif
-	return Error::NONE;
-}
-
 } // end namespace anki

+ 2 - 10
src/anki/renderer/Renderer.h

@@ -223,13 +223,8 @@ anki_internal:
 	}
 
 	/// Create the init info for a 2D texture that will be used as a render target.
-	ANKI_USE_RESULT TextureInitInfo create2DRenderTargetInitInfo(U32 w,
-		U32 h,
-		const PixelFormat& format,
-		TextureUsageBit usage,
-		SamplingFilter filter,
-		U mipsCount = 1,
-		CString name = {});
+	ANKI_USE_RESULT TextureInitInfo create2DRenderTargetInitInfo(
+		U32 w, U32 h, const PixelFormat& format, TextureUsageBit usage, SamplingFilter filter, CString name = {});
 
 	/// Create the init info for a 2D texture that will be used as a render target.
 	ANKI_USE_RESULT RenderTargetDescription create2DRenderTargetDescription(
@@ -379,9 +374,6 @@ private:
 
 	ANKI_USE_RESULT Error initInternal(const ConfigSet& initializer);
 
-	ANKI_USE_RESULT Error buildCommandBuffers(RenderingContext& ctx);
-	void buildCommandBuffersInternal(RenderingContext& ctx, U32 threadId, PtrSize threadCount);
-
 	void initJitteredMats();
 };
 /// @}

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

@@ -80,7 +80,6 @@ Error ShadowMapping::initEsm(const ConfigSet& cfg)
 			SHADOW_COLOR_PIXEL_FORMAT,
 			TextureUsageBit::SAMPLED_FRAGMENT | TextureUsageBit::FRAMEBUFFER_ATTACHMENT_WRITE,
 			SamplingFilter::LINEAR,
-			1,
 			"esm");
 		texinit.m_initialUsage = TextureUsageBit::SAMPLED_FRAGMENT;
 		ClearValue clearVal;

+ 0 - 1
src/anki/renderer/Ssao.cpp

@@ -93,7 +93,6 @@ Error Ssao::init(const ConfigSet& config)
 			Ssao::RT_PIXEL_FORMAT,
 			TextureUsageBit::SAMPLED_FRAGMENT | TextureUsageBit::FRAMEBUFFER_ATTACHMENT_WRITE | TextureUsageBit::CLEAR,
 			SamplingFilter::LINEAR,
-			1,
 			"ssaomain"));
 	}
 

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

@@ -48,7 +48,6 @@ Error TemporalAA::initInternal(const ConfigSet& config)
 			LIGHT_SHADING_COLOR_ATTACHMENT_PIXEL_FORMAT,
 			TextureUsageBit::SAMPLED_FRAGMENT | TextureUsageBit::FRAMEBUFFER_ATTACHMENT_WRITE,
 			SamplingFilter::LINEAR,
-			1,
 			"TemporalAA"));
 	}
 

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

@@ -89,7 +89,6 @@ Error Volumetric::init(const ConfigSet& config)
 			LIGHT_SHADING_COLOR_ATTACHMENT_PIXEL_FORMAT,
 			TextureUsageBit::SAMPLED_FRAGMENT | TextureUsageBit::FRAMEBUFFER_ATTACHMENT_WRITE,
 			SamplingFilter::LINEAR,
-			1,
 			"volmain");
 		rtInit.m_initialUsage = TextureUsageBit::SAMPLED_FRAGMENT;
 		m_rtTextures[i] = m_r->createAndClearRenderTarget(rtInit);