Pārlūkot izejas kodu

Some refactoring

Panagiotis Christopoulos Charitos 4 mēneši atpakaļ
vecāks
revīzija
d353a5ae3c

+ 4 - 88
AnKi/Renderer/IndirectDiffuseClipmaps.cpp

@@ -274,13 +274,7 @@ void IndirectDiffuseClipmaps::populateRenderGraph(RenderingContext& ctx)
 
 		pass.newTextureDependency(rtResultHandle, TextureUsageBit::kUavCompute);
 		pass.newBufferDependency(sbtHandle, BufferUsageBit::kShaderBindingTable);
-		if(getRenderer().getGeneratedSky().isEnabled())
-		{
-			pass.newTextureDependency(getRenderer().getGeneratedSky().getEnvironmentMapRt(), TextureUsageBit::kSrvDispatchRays);
-		}
-		pass.newTextureDependency(getShadowMapping().getShadowmapRt(), TextureUsageBit::kSrvDispatchRays);
-		pass.newAccelerationStructureDependency(getRenderer().getAccelerationStructureBuilder().getAccelerationStructureHandle(),
-												AccelerationStructureUsageBit::kSrvDispatchRays);
+		setRgenSpace2Dependencies(pass);
 
 		for(U32 clipmap = 0; clipmap < kIndirectDiffuseClipmapCount; ++clipmap)
 		{
@@ -306,44 +300,9 @@ void IndirectDiffuseClipmaps::populateRenderGraph(RenderingContext& ctx)
 		Format::k##fmt);
 #include <AnKi/Shaders/Include/UnifiedGeometryTypes.def.h>
 
-			cmdb.bindConstantBuffer(0, 2, ctx.m_globalRenderingConstantsBuffer);
-
-			U32 srv = 0;
-			rgraphCtx.bindSrv(srv++, 2, getRenderer().getAccelerationStructureBuilder().getAccelerationStructureHandle());
-
-			const LightComponent* dirLight = SceneGraph::getSingleton().getDirectionalLight();
-			const SkyboxComponent* sky = SceneGraph::getSingleton().getSkybox();
-			const Bool bSkySolidColor =
-				(!sky || sky->getSkyboxType() == SkyboxType::kSolidColor || (!dirLight && sky->getSkyboxType() == SkyboxType::kGenerated));
-			if(bSkySolidColor)
-			{
-				cmdb.bindSrv(srv++, 2, TextureView(getDummyGpuResources().m_texture2DSrv.get(), TextureSubresourceDesc::all()));
-			}
-			else if(sky->getSkyboxType() == SkyboxType::kImage2D)
-			{
-				cmdb.bindSrv(srv++, 2, TextureView(&sky->getImageResource().getTexture(), TextureSubresourceDesc::all()));
-			}
-			else
-			{
-				rgraphCtx.bindSrv(srv++, 2, getRenderer().getGeneratedSky().getEnvironmentMapRt());
-			}
-
-			rgraphCtx.bindSrv(srv++, 2, getShadowMapping().getShadowmapRt());
-
-			cmdb.bindSrv(srv++, 2, BufferView(getDummyGpuResources().m_buffer.get(), 0, sizeof(GpuSceneGlobalIlluminationProbe)));
-			cmdb.bindSrv(srv++, 2, BufferView(getDummyGpuResources().m_buffer.get(), 0, sizeof(PixelFailedSsr)));
-
-			for(U32 i = 0; i < 3; ++i)
-			{
-				cmdb.bindSrv(srv++, 2, TextureView(getDummyGpuResources().m_texture2DSrv.get(), TextureSubresourceDesc::all()));
-			}
-
-			cmdb.bindSampler(0, 2, getRenderer().getSamplers().m_trilinearClamp.get());
-			cmdb.bindSampler(1, 2, getRenderer().getSamplers().m_trilinearClampShadow.get());
-			cmdb.bindSampler(2, 2, getRenderer().getSamplers().m_trilinearRepeat.get());
+			bindRgenSpace2Resources(ctx, rgraphCtx);
 
 			rgraphCtx.bindUav(0, 2, rtResultHandle);
-			cmdb.bindUav(1, 2, TextureView(getDummyGpuResources().m_texture2DUav.get(), TextureSubresourceDesc::firstSurface()));
 
 			const U32 raysPerProbePerFrame = square<U32>(g_indirectDiffuseClipmapRadianceOctMapSize);
 
@@ -440,15 +399,6 @@ void IndirectDiffuseClipmaps::populateRenderGraph(RenderingContext& ctx)
 		NonGraphicsRenderPass& pass = rgraph.newNonGraphicsRenderPass("IndirectDiffuseClipmaps: RTApply");
 
 		pass.newBufferDependency(sbtHandle, BufferUsageBit::kShaderBindingTable);
-		if(getRenderer().getGeneratedSky().isEnabled())
-		{
-			pass.newTextureDependency(getRenderer().getGeneratedSky().getEnvironmentMapRt(), TextureUsageBit::kSrvDispatchRays);
-		}
-		pass.newTextureDependency(getShadowMapping().getShadowmapRt(), TextureUsageBit::kSrvDispatchRays);
-		pass.newAccelerationStructureDependency(getRenderer().getAccelerationStructureBuilder().getAccelerationStructureHandle(),
-												AccelerationStructureUsageBit::kSrvDispatchRays);
-		pass.newTextureDependency(getGBuffer().getColorRt(2), TextureUsageBit::kSrvDispatchRays);
-		pass.newTextureDependency(getGBuffer().getDepthRt(), TextureUsageBit::kSrvDispatchRays);
 
 		for(U32 clipmap = 0; clipmap < kIndirectDiffuseClipmapCount; ++clipmap)
 		{
@@ -458,6 +408,7 @@ void IndirectDiffuseClipmaps::populateRenderGraph(RenderingContext& ctx)
 		}
 
 		pass.newTextureDependency(lowRezRt, TextureUsageBit::kUavDispatchRays);
+		setRgenSpace2Dependencies(pass);
 
 		pass.setWork([this, &ctx, sbtBuffer, lowRezRt](RenderPassWorkContext& rgraphCtx) {
 			CommandBuffer& cmdb = *rgraphCtx.m_commandBuffer;
@@ -478,43 +429,8 @@ void IndirectDiffuseClipmaps::populateRenderGraph(RenderingContext& ctx)
 		Format::k##fmt);
 #include <AnKi/Shaders/Include/UnifiedGeometryTypes.def.h>
 
-			cmdb.bindConstantBuffer(0, 2, ctx.m_globalRenderingConstantsBuffer);
-
-			U32 srv = 0;
-			rgraphCtx.bindSrv(srv++, 2, getRenderer().getAccelerationStructureBuilder().getAccelerationStructureHandle());
-
-			const LightComponent* dirLight = SceneGraph::getSingleton().getDirectionalLight();
-			const SkyboxComponent* sky = SceneGraph::getSingleton().getSkybox();
-			const Bool bSkySolidColor =
-				(!sky || sky->getSkyboxType() == SkyboxType::kSolidColor || (!dirLight && sky->getSkyboxType() == SkyboxType::kGenerated));
-			if(bSkySolidColor)
-			{
-				cmdb.bindSrv(srv++, 2, TextureView(getDummyGpuResources().m_texture2DSrv.get(), TextureSubresourceDesc::all()));
-			}
-			else if(sky->getSkyboxType() == SkyboxType::kImage2D)
-			{
-				cmdb.bindSrv(srv++, 2, TextureView(&sky->getImageResource().getTexture(), TextureSubresourceDesc::all()));
-			}
-			else
-			{
-				rgraphCtx.bindSrv(srv++, 2, getRenderer().getGeneratedSky().getEnvironmentMapRt());
-			}
-
-			rgraphCtx.bindSrv(srv++, 2, getShadowMapping().getShadowmapRt());
-
-			cmdb.bindSrv(srv++, 2, BufferView(getDummyGpuResources().m_buffer.get(), 0, sizeof(GpuSceneGlobalIlluminationProbe)));
-			cmdb.bindSrv(srv++, 2, BufferView(getDummyGpuResources().m_buffer.get(), 0, sizeof(PixelFailedSsr)));
-
-			rgraphCtx.bindSrv(srv++, 2, getGBuffer().getDepthRt());
-			cmdb.bindSrv(srv++, 2, TextureView(getDummyGpuResources().m_texture2DSrv.get(), TextureSubresourceDesc::all()));
-			rgraphCtx.bindSrv(srv++, 2, getGBuffer().getColorRt(2));
-
-			cmdb.bindSampler(0, 2, getRenderer().getSamplers().m_trilinearClamp.get());
-			cmdb.bindSampler(1, 2, getRenderer().getSamplers().m_trilinearClampShadow.get());
-			cmdb.bindSampler(2, 2, getRenderer().getSamplers().m_trilinearRepeat.get());
-
+			bindRgenSpace2Resources(ctx, rgraphCtx);
 			rgraphCtx.bindUav(0, 2, lowRezRt);
-			cmdb.bindUav(1, 2, TextureView(getDummyGpuResources().m_texture2DUav.get(), TextureSubresourceDesc::firstSurface()));
 
 			const Vec4 consts(g_indirectDiffuseClipmapFirstBounceRayDistance);
 			cmdb.setFastConstants(&consts, sizeof(consts));

+ 8 - 0
AnKi/Renderer/IndirectDiffuseClipmaps.h

@@ -105,6 +105,14 @@ public:
 		return m_runCtx.m_handles;
 	}
 
+	/// Output of IndirectDiffuseClipmaps is hidden and bindless so have this function to set dependencies
+	void setDependencies(RenderPassBase& pass, TextureUsageBit usage) const
+	{
+		ANKI_ASSERT(!(usage & ~TextureUsageBit::kAllSrv) && "Only SRV allowed");
+		// Cheat and only wait for the final RT. The rest will have been waited anyway
+		pass.newTextureDependency(m_runCtx.m_handles.m_appliedIrradiance, usage);
+	}
+
 private:
 	Array<TexturePtr, kIndirectDiffuseClipmapCount> m_radianceVolumes;
 	Array<TexturePtr, kIndirectDiffuseClipmapCount> m_irradianceVolumes;

+ 8 - 46
AnKi/Renderer/Reflections.cpp

@@ -14,6 +14,7 @@
 #include <AnKi/Renderer/ShadowMapping.h>
 #include <AnKi/Renderer/ClusterBinning.h>
 #include <AnKi/Renderer/ProbeReflections.h>
+#include <AnKi/Renderer/IndirectDiffuseClipmaps.h>
 #include <AnKi/GpuMemory/GpuVisibleTransientMemoryPool.h>
 #include <AnKi/GpuMemory/UnifiedGeometryBuffer.h>
 #include <AnKi/Scene/Components/SkyboxComponent.h>
@@ -271,17 +272,13 @@ void Reflections::populateRenderGraph(RenderingContext& ctx)
 		rpass.newBufferDependency(sbtHandle, BufferUsageBit::kShaderBindingTable);
 		rpass.newTextureDependency(transientRt1, TextureUsageBit::kUavDispatchRays);
 		rpass.newTextureDependency(hitPosAndDepthRt, TextureUsageBit::kUavDispatchRays);
-		rpass.newTextureDependency(getGBuffer().getDepthRt(), TextureUsageBit::kSrvDispatchRays);
-		rpass.newTextureDependency(getGBuffer().getColorRt(1), TextureUsageBit::kSrvDispatchRays);
-		rpass.newTextureDependency(getGBuffer().getColorRt(2), TextureUsageBit::kSrvDispatchRays);
-		if(getRenderer().getGeneratedSky().isEnabled())
+		rpass.newBufferDependency(indirectArgsHandle, BufferUsageBit::kIndirectDispatchRays);
+		setRgenSpace2Dependencies(rpass);
+
+		if(isIndirectDiffuseClipmapsEnabled())
 		{
-			rpass.newTextureDependency(getRenderer().getGeneratedSky().getEnvironmentMapRt(), TextureUsageBit::kSrvDispatchRays);
+			getIndirectDiffuseClipmaps().setDependencies(rpass, TextureUsageBit::kSrvDispatchRays);
 		}
-		rpass.newTextureDependency(getShadowMapping().getShadowmapRt(), TextureUsageBit::kSrvDispatchRays);
-		rpass.newAccelerationStructureDependency(getRenderer().getAccelerationStructureBuilder().getAccelerationStructureHandle(),
-												 AccelerationStructureUsageBit::kSrvDispatchRays);
-		rpass.newBufferDependency(indirectArgsHandle, BufferUsageBit::kIndirectDispatchRays);
 
 		rpass.setWork([this, sbtBuffer, &ctx, transientRt1, hitPosAndDepthRt, pixelsFailedSsrBuff](RenderPassWorkContext& rgraphCtx) {
 			ANKI_TRACE_SCOPED_EVENT(ReflectionsRayGen);
@@ -303,46 +300,11 @@ void Reflections::populateRenderGraph(RenderingContext& ctx)
 		Format::k##fmt);
 #include <AnKi/Shaders/Include/UnifiedGeometryTypes.def.h>
 
-			cmdb.bindConstantBuffer(0, 2, ctx.m_globalRenderingConstantsBuffer);
-
-			U32 srv = 0;
-			rgraphCtx.bindSrv(srv++, 2, getRenderer().getAccelerationStructureBuilder().getAccelerationStructureHandle());
-
-			const LightComponent* dirLight = SceneGraph::getSingleton().getDirectionalLight();
-			const SkyboxComponent* sky = SceneGraph::getSingleton().getSkybox();
-			const Bool bSkySolidColor =
-				(!sky || sky->getSkyboxType() == SkyboxType::kSolidColor || (!dirLight && sky->getSkyboxType() == SkyboxType::kGenerated));
-			if(bSkySolidColor)
-			{
-				cmdb.bindSrv(srv++, 2, TextureView(getDummyGpuResources().m_texture2DSrv.get(), TextureSubresourceDesc::all()));
-			}
-			else if(sky->getSkyboxType() == SkyboxType::kImage2D)
-			{
-				cmdb.bindSrv(srv++, 2, TextureView(&sky->getImageResource().getTexture(), TextureSubresourceDesc::all()));
-			}
-			else
-			{
-				rgraphCtx.bindSrv(srv++, 2, getRenderer().getGeneratedSky().getEnvironmentMapRt());
-			}
-
-			rgraphCtx.bindSrv(srv++, 2, getShadowMapping().getShadowmapRt());
-
-			const auto& arr = GpuSceneArrays::GlobalIlluminationProbe::getSingleton();
-			cmdb.bindSrv(srv++, 2,
-						 (arr.getElementCount()) ? arr.getBufferView() : BufferView(getDummyGpuResources().m_buffer.get(), 0, arr.getElementSize()));
-			cmdb.bindSrv(srv++, 2, pixelsFailedSsrBuff);
-
-			rgraphCtx.bindSrv(srv++, 2, getGBuffer().getDepthRt());
-			rgraphCtx.bindSrv(srv++, 2, getGBuffer().getColorRt(1));
-			rgraphCtx.bindSrv(srv++, 2, getGBuffer().getColorRt(2));
-
+			bindRgenSpace2Resources(ctx, rgraphCtx);
+			cmdb.bindSrv(7, 2, pixelsFailedSsrBuff);
 			rgraphCtx.bindUav(0, 2, transientRt1);
 			rgraphCtx.bindUav(1, 2, hitPosAndDepthRt);
 
-			cmdb.bindSampler(0, 2, getRenderer().getSamplers().m_trilinearClamp.get());
-			cmdb.bindSampler(1, 2, getRenderer().getSamplers().m_trilinearClampShadow.get());
-			cmdb.bindSampler(2, 2, getRenderer().getSamplers().m_trilinearRepeat.get());
-
 			struct Consts
 			{
 				F32 m_maxRayT;

+ 71 - 1
AnKi/Renderer/RendererObject.cpp

@@ -5,10 +5,15 @@
 
 #include <AnKi/Renderer/RendererObject.h>
 #include <AnKi/Renderer/Renderer.h>
-#include <AnKi/Renderer/AccelerationStructureBuilder.h>
+#include <AnKi/Renderer/Sky.h>
 #include <AnKi/Util/Enum.h>
 #include <AnKi/Util/Tracer.h>
 #include <AnKi/GpuMemory/GpuVisibleTransientMemoryPool.h>
+#include <AnKi/Scene/Components/SkyboxComponent.h>
+
+#include <AnKi/Renderer/AccelerationStructureBuilder.h>
+#include <AnKi/Renderer/ShadowMapping.h>
+#include <AnKi/Renderer/GBuffer.h>
 
 namespace anki {
 
@@ -251,4 +256,69 @@ void RtMaterialFetchRendererObject::patchShaderBindingTablePass(CString passName
 		});
 }
 
+void RtMaterialFetchRendererObject::setRgenSpace2Dependencies(RenderPassBase& pass)
+{
+	pass.newAccelerationStructureDependency(getAccelerationStructureBuilder().getAccelerationStructureHandle(),
+											AccelerationStructureUsageBit::kSrvDispatchRays);
+
+	if(getGeneratedSky().isEnabled())
+	{
+		pass.newTextureDependency(getGeneratedSky().getEnvironmentMapRt(), TextureUsageBit::kSrvDispatchRays);
+	}
+
+	pass.newTextureDependency(getShadowMapping().getShadowmapRt(), TextureUsageBit::kSrvDispatchRays);
+
+	pass.newTextureDependency(getGBuffer().getDepthRt(), TextureUsageBit::kSrvDispatchRays);
+	pass.newTextureDependency(getGBuffer().getColorRt(1), TextureUsageBit::kSrvDispatchRays);
+	pass.newTextureDependency(getGBuffer().getColorRt(2), TextureUsageBit::kSrvDispatchRays);
+}
+
+void RtMaterialFetchRendererObject::bindRgenSpace2Resources(RenderingContext& ctx, RenderPassWorkContext& rgraphCtx)
+{
+	CommandBuffer& cmdb = *rgraphCtx.m_commandBuffer;
+
+	const U32 space = 2;
+	U32 srv = 0;
+	rgraphCtx.bindSrv(srv++, space, getAccelerationStructureBuilder().getAccelerationStructureHandle());
+
+	const LightComponent* dirLight = SceneGraph::getSingleton().getDirectionalLight();
+	const SkyboxComponent* sky = SceneGraph::getSingleton().getSkybox();
+	const Bool bSkySolidColor =
+		(!sky || sky->getSkyboxType() == SkyboxType::kSolidColor || (!dirLight && sky->getSkyboxType() == SkyboxType::kGenerated));
+	if(bSkySolidColor)
+	{
+		cmdb.bindSrv(srv++, space, TextureView(getDummyGpuResources().m_texture2DSrv.get(), TextureSubresourceDesc::all()));
+	}
+	else if(sky->getSkyboxType() == SkyboxType::kImage2D)
+	{
+		cmdb.bindSrv(srv++, space, TextureView(&sky->getImageResource().getTexture(), TextureSubresourceDesc::all()));
+	}
+	else
+	{
+		rgraphCtx.bindSrv(srv++, space, getGeneratedSky().getEnvironmentMapRt());
+	}
+
+	rgraphCtx.bindSrv(srv++, space, getShadowMapping().getShadowmapRt());
+
+	const auto& arr = GpuSceneArrays::GlobalIlluminationProbe::getSingleton();
+	cmdb.bindSrv(srv++, space,
+				 (arr.getElementCount()) ? arr.getBufferView() : BufferView(getDummyGpuResources().m_buffer.get(), 0, arr.getElementSize()));
+
+	rgraphCtx.bindSrv(srv++, space, getGBuffer().getDepthRt());
+	rgraphCtx.bindSrv(srv++, space, getGBuffer().getColorRt(1));
+	rgraphCtx.bindSrv(srv++, space, getGBuffer().getColorRt(2));
+
+	// Someone else will have to bind comething if they use it
+	cmdb.bindSrv(srv++, space, BufferView(getDummyGpuResources().m_buffer.get(), 0, sizeof(PixelFailedSsr)));
+
+	cmdb.bindSampler(0, space, getRenderer().getSamplers().m_trilinearClamp.get());
+	cmdb.bindSampler(1, space, getRenderer().getSamplers().m_trilinearClampShadow.get());
+	cmdb.bindSampler(2, space, getRenderer().getSamplers().m_trilinearRepeat.get());
+
+	cmdb.bindUav(0, space, TextureView(getDummyGpuResources().m_texture2DUav.get(), TextureSubresourceDesc::firstSurface()));
+	cmdb.bindUav(1, space, TextureView(getDummyGpuResources().m_texture2DUav.get(), TextureSubresourceDesc::firstSurface()));
+
+	cmdb.bindConstantBuffer(0, space, ctx.m_globalRenderingConstantsBuffer);
+}
+
 } // end namespace anki

+ 7 - 0
AnKi/Renderer/RendererObject.h

@@ -145,6 +145,7 @@ protected:
 #include <AnKi/Renderer/RendererObject.def.h>
 };
 
+/// Contains common functionality of all passes that use RtMaterialFetch.
 class RtMaterialFetchRendererObject : protected RendererObject
 {
 protected:
@@ -157,6 +158,12 @@ protected:
 	void patchShaderBindingTablePass(CString passName, ShaderProgram* library, U32 raygenGroupIdx, U32 missGroupIdx, U32 sbtRecordSize,
 									 RenderGraphBuilder& rgraph, BufferHandle sbtHandle, BufferView sbtBuffer);
 
+	/// Sets the the resources of space 2 in RtMaterialFetch.hlsl as dependencies on the given pass.
+	void setRgenSpace2Dependencies(RenderPassBase& pass);
+
+	/// Bind the the resources of space 2 in RtMaterialFetch.hlsl.
+	void bindRgenSpace2Resources(RenderingContext& ctx, RenderPassWorkContext& rgraphCtx);
+
 private:
 	ShaderProgramResourcePtr m_sbtBuildProg;
 	ShaderProgramPtr m_sbtBuildGrProg;

+ 4 - 26
AnKi/Renderer/RtMaterialFetchDbg.cpp

@@ -72,6 +72,9 @@ void RtMaterialFetchDbg::populateRenderGraph(RenderingContext& ctx)
 
 		rpass.newBufferDependency(sbtHandle, BufferUsageBit::kShaderBindingTable);
 		rpass.newTextureDependency(m_runCtx.m_rt, TextureUsageBit::kUavDispatchRays);
+
+		setRgenSpace2Dependencies(rpass);
+
 		rpass.newAccelerationStructureDependency(getRenderer().getAccelerationStructureBuilder().getAccelerationStructureHandle(),
 												 AccelerationStructureUsageBit::kSrvDispatchRays);
 
@@ -95,33 +98,8 @@ void RtMaterialFetchDbg::populateRenderGraph(RenderingContext& ctx)
 		Format::k##fmt);
 #include <AnKi/Shaders/Include/UnifiedGeometryTypes.def.h>
 
-			cmdb.bindConstantBuffer(0, 2, ctx.m_globalRenderingConstantsBuffer);
-
-			U32 srv = 0;
-			rgraphCtx.bindSrv(srv++, 2, getRenderer().getAccelerationStructureBuilder().getAccelerationStructureHandle());
-
-			cmdb.bindSrv(srv++, 2, TextureView(getDummyGpuResources().m_texture2DSrv.get(), TextureSubresourceDesc::all()));
-			cmdb.bindSrv(srv++, 2, TextureView(getDummyGpuResources().m_texture2DSrv.get(), TextureSubresourceDesc::all()));
-
-			cmdb.bindSrv(srv++, 2, BufferView(getDummyGpuResources().m_buffer.get(), 0, sizeof(GpuSceneGlobalIlluminationProbe)));
-			cmdb.bindSrv(srv++, 2, BufferView(getDummyGpuResources().m_buffer.get(), 0, sizeof(PixelFailedSsr)));
-
-			for(U32 i = 0; i < kIndirectDiffuseClipmapCount * 3; ++i)
-			{
-				cmdb.bindSrv(srv++, 2, TextureView(getDummyGpuResources().m_texture3DSrv.get(), TextureSubresourceDesc::all()));
-			}
-
-			for(U32 i = 0; i < 3; ++i)
-			{
-				cmdb.bindSrv(srv++, 2, TextureView(getDummyGpuResources().m_texture2DSrv.get(), TextureSubresourceDesc::all()));
-			}
-
+			bindRgenSpace2Resources(ctx, rgraphCtx);
 			rgraphCtx.bindUav(0, 2, m_runCtx.m_rt);
-			cmdb.bindUav(1, 2, TextureView(getDummyGpuResources().m_texture2DUav.get(), TextureSubresourceDesc::firstSurface()));
-
-			cmdb.bindSampler(0, 2, getRenderer().getSamplers().m_trilinearClamp.get());
-			cmdb.bindSampler(1, 2, getRenderer().getSamplers().m_trilinearClampShadow.get());
-			cmdb.bindSampler(2, 2, getRenderer().getSamplers().m_trilinearClampShadow.get());
 
 			Vec4 dummy;
 			cmdb.setFastConstants(&dummy, sizeof(dummy));

+ 1 - 6
AnKi/Renderer/VolumetricLightingAccumulation.cpp

@@ -77,12 +77,7 @@ void VolumetricLightingAccumulation::populateRenderGraph(RenderingContext& ctx)
 
 	if(isIndirectDiffuseClipmapsEnabled())
 	{
-		for(U32 i = 0; i < kIndirectDiffuseClipmapCount; ++i)
-		{
-			pass.newTextureDependency(getIndirectDiffuseClipmaps().getRts().m_avgIrradianceVolumes[i], TextureUsageBit::kSrvCompute);
-			pass.newTextureDependency(getIndirectDiffuseClipmaps().getRts().m_distanceMomentsVolumes[i], TextureUsageBit::kSrvCompute);
-			pass.newTextureDependency(getIndirectDiffuseClipmaps().getRts().m_probeValidityVolumes[i], TextureUsageBit::kSrvCompute);
-		}
+		getIndirectDiffuseClipmaps().setDependencies(pass, TextureUsageBit::kSrvCompute);
 	}
 
 	pass.setWork([this, &ctx](RenderPassWorkContext& rgraphCtx) {

+ 6 - 12
AnKi/Shaders/RtMaterialFetch.hlsl

@@ -38,20 +38,14 @@ RaytracingAccelerationStructure g_tlas : register(t0, SPACE);
 Texture2D<Vec4> g_envMap : register(t1, SPACE);
 Texture2D<Vec4> g_shadowAtlasTex : register(t2, SPACE);
 
-#	if defined(CLIPMAP_VOLUME)
-StructuredBuffer<GpuSceneGlobalIlluminationProbe> g_dummyBuff1 : register(t3, SPACE);
-StructuredBuffer<PixelFailedSsr> g_dummyBuff2 : register(t4, SPACE);
-#	else
+#	if !defined(CLIPMAP_VOLUME)
 StructuredBuffer<GpuSceneGlobalIlluminationProbe> g_giProbes : register(t3, SPACE);
-StructuredBuffer<PixelFailedSsr> g_pixelsFailedSsr : register(t4, SPACE);
-#	endif
 
-#	if defined(CLIPMAP_VOLUME)
-Texture2D<Vec4> g_dummyTex[3] : register(t5, SPACE);
-#	else
-Texture2D<Vec4> g_depthTex : register(t5, SPACE);
-Texture2D<Vec4> g_gbufferRt1 : register(t6, SPACE);
-Texture2D<Vec4> g_gbufferRt2 : register(t7, SPACE);
+Texture2D<Vec4> g_depthTex : register(t4, SPACE);
+Texture2D<Vec4> g_gbufferRt1 : register(t5, SPACE);
+Texture2D<Vec4> g_gbufferRt2 : register(t6, SPACE);
+
+StructuredBuffer<PixelFailedSsr> g_pixelsFailedSsr : register(t7, SPACE);
 #	endif
 
 // UAVs