浏览代码

Some RT fixes

Panagiotis Christopoulos Charitos 2 年之前
父节点
当前提交
507e135d03

+ 6 - 2
AnKi/Core/GpuMemory/GpuVisibleTransientMemoryPool.h

@@ -86,8 +86,12 @@ private:
 		alignment = max(alignment, GrManager::getSingleton().getDeviceCapabilities().m_storageBufferBindOffsetAlignment);
 		alignment = max(alignment, GrManager::getSingleton().getDeviceCapabilities().m_sbtRecordAlignment);
 
-		const BufferUsageBit buffUsage = BufferUsageBit::kAllUniform | BufferUsageBit::kAllStorage | BufferUsageBit::kIndirectDraw
-										 | BufferUsageBit::kIndirectCompute | BufferUsageBit::kVertex | BufferUsageBit::kTransferDestination;
+		BufferUsageBit buffUsage = BufferUsageBit::kAllUniform | BufferUsageBit::kAllStorage | BufferUsageBit::kIndirectDraw
+								   | BufferUsageBit::kIndirectCompute | BufferUsageBit::kVertex | BufferUsageBit::kTransferDestination;
+		if(GrManager::getSingleton().getDeviceCapabilities().m_rayTracingEnabled)
+		{
+			buffUsage |= (BufferUsageBit::kAccelerationStructureBuildScratch | BufferUsageBit::kAccelerationStructureBuild);
+		}
 		m_pool.init(10_MB, 2.0, 0, alignment, buffUsage, BufferMapAccessBit::kNone, true, "GpuVisibleTransientMemoryPool");
 	}
 

+ 2 - 0
AnKi/Gr/RenderGraph.inl.h

@@ -155,6 +155,8 @@ inline void RenderPassDescriptionBase::newDependency(const RenderPassDependency&
 	}
 	else if(kType == RenderPassDependency::Type::kBuffer)
 	{
+		ANKI_ASSERT(!!(m_descr->m_buffers[dep.m_buffer.m_handle.m_idx].m_importedBuff->getBufferUsage() & dep.m_buffer.m_usage));
+
 		m_buffDeps.emplaceBack(dep);
 
 		if(!!(dep.m_buffer.m_usage & BufferUsageBit::kAllRead))

+ 6 - 1
AnKi/Gr/Vulkan/BufferImpl.cpp

@@ -270,7 +270,7 @@ VkPipelineStageFlags BufferImpl::computePplineStage(BufferUsageBit usage)
 		stageMask |= VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT;
 	}
 
-	if(!!(usage & BufferUsageBit::kAccelerationStructureBuild))
+	if(!!(usage & (BufferUsageBit::kAccelerationStructureBuild | BufferUsageBit::kAccelerationStructureBuildScratch)))
 	{
 		stageMask |= VK_PIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_KHR;
 	}
@@ -353,6 +353,11 @@ VkAccessFlags BufferImpl::computeAccessMask(BufferUsageBit usage)
 		mask |= VK_ACCESS_ACCELERATION_STRUCTURE_READ_BIT_KHR;
 	}
 
+	if(!!(usage & BufferUsageBit::kAccelerationStructureBuildScratch))
+	{
+		mask |= VK_ACCESS_ACCELERATION_STRUCTURE_WRITE_BIT_KHR;
+	}
+
 	return mask;
 }
 

+ 2 - 17
AnKi/Renderer/LightShading.cpp

@@ -163,15 +163,7 @@ void LightShading::run(const RenderingContext& ctx, RenderPassWorkContext& rgrap
 		rgraphCtx.bindColorTexture(0, 7, getRenderer().getGBuffer().getColorRt(1));
 		rgraphCtx.bindColorTexture(0, 8, getRenderer().getGBuffer().getColorRt(2));
 		rgraphCtx.bindTexture(0, 9, getRenderer().getGBuffer().getDepthRt(), TextureSubresourceInfo(DepthStencilAspectBit::kDepth));
-
-		if(getRenderer().getRtShadowsEnabled())
-		{
-			rgraphCtx.bindColorTexture(0, 10, getRenderer().getRtShadows().getRt());
-		}
-		else
-		{
-			rgraphCtx.bindColorTexture(0, 11, getRenderer().getShadowmapsResolve().getRt());
-		}
+		rgraphCtx.bindColorTexture(0, 10, getRenderer().getShadowmapsResolve().getRt());
 
 		// Draw
 		drawQuad(cmdb);
@@ -355,14 +347,7 @@ void LightShading::populateRenderGraph(RenderingContext& ctx)
 	pass.newTextureDependency(getRenderer().getGBuffer().getDepthRt(), TextureUsageBit::kSampledFragment | TextureUsageBit::kFramebufferRead,
 							  TextureSubresourceInfo(DepthStencilAspectBit::kDepth));
 	pass.newTextureDependency(getRenderer().getShadowMapping().getShadowmapRt(), readUsage);
-	if(getRenderer().getRtShadowsEnabled())
-	{
-		pass.newTextureDependency(getRenderer().getRtShadows().getRt(), readUsage);
-	}
-	else
-	{
-		pass.newTextureDependency(getRenderer().getShadowmapsResolve().getRt(), readUsage);
-	}
+	pass.newTextureDependency(getRenderer().getShadowmapsResolve().getRt(), readUsage);
 	pass.newBufferDependency(getRenderer().getClusterBinning2().getClustersBufferHandle(), BufferUsageBit::kStorageFragmentRead);
 	pass.newBufferDependency(getRenderer().getClusterBinning2().getPackedObjectsBufferHandle(GpuSceneNonRenderableObjectType::kLight),
 							 BufferUsageBit::kStorageFragmentRead);

+ 4 - 8
AnKi/Renderer/ShadowmapsResolve.cpp

@@ -52,8 +52,7 @@ Error ShadowmapsResolve::initInternal()
 	variantInitInfo.addConstant("kZSplitCount", getRenderer().getZSplitCount());
 	variantInitInfo.addConstant("kTileSize", getRenderer().getTileSize());
 	variantInitInfo.addMutation("PCF", g_shadowMappingPcfCVar.get() != 0);
-	variantInitInfo.addMutation("DIRECTIONAL_LIGHT_SHADOW_RESOLVED",
-								GrManager::getSingleton().getDeviceCapabilities().m_rayTracingEnabled && g_rayTracedShadowsCVar.get());
+	variantInitInfo.addMutation("DIRECTIONAL_LIGHT_SHADOW_RESOLVED", getRenderer().getRtShadowsEnabled());
 	const ShaderProgramResourceVariant* variant;
 	m_prog->getOrCreateVariant(variantInitInfo, variant);
 	m_grProg.reset(&variant->getProgram());
@@ -65,8 +64,6 @@ Error ShadowmapsResolve::initInternal()
 
 void ShadowmapsResolve::populateRenderGraph(RenderingContext& ctx)
 {
-	const Bool rtShadowsEnabled = GrManager::getSingleton().getDeviceCapabilities().m_rayTracingEnabled && g_rayTracedShadowsCVar.get();
-
 	RenderGraphDescription& rgraph = ctx.m_renderGraphDescr;
 	m_runCtx.m_rt = rgraph.newRenderTarget(m_rtDescr);
 
@@ -87,7 +84,7 @@ void ShadowmapsResolve::populateRenderGraph(RenderingContext& ctx)
 		rpass.newBufferDependency(getRenderer().getClusterBinning2().getPackedObjectsBufferHandle(GpuSceneNonRenderableObjectType::kLight),
 								  BufferUsageBit::kStorageComputeRead);
 
-		if(rtShadowsEnabled)
+		if(getRenderer().getRtShadowsEnabled())
 		{
 			rpass.newTextureDependency(getRenderer().getRtShadows().getRt(), TextureUsageBit::kSampledCompute);
 		}
@@ -110,7 +107,7 @@ void ShadowmapsResolve::populateRenderGraph(RenderingContext& ctx)
 		rpass.newBufferDependency(getRenderer().getClusterBinning2().getPackedObjectsBufferHandle(GpuSceneNonRenderableObjectType::kLight),
 								  BufferUsageBit::kStorageFragmentRead);
 
-		if(rtShadowsEnabled)
+		if(getRenderer().getRtShadowsEnabled())
 		{
 			rpass.newTextureDependency(getRenderer().getRtShadows().getRt(), TextureUsageBit::kSampledFragment);
 		}
@@ -142,8 +139,7 @@ void ShadowmapsResolve::run(RenderPassWorkContext& rgraphCtx)
 	}
 	cmdb.bindTexture(0, 8, &m_noiseImage->getTextureView());
 
-	const Bool rtShadowsEnabled = GrManager::getSingleton().getDeviceCapabilities().m_rayTracingEnabled && g_rayTracedShadowsCVar.get();
-	if(rtShadowsEnabled)
+	if(getRenderer().getRtShadowsEnabled())
 	{
 		rgraphCtx.bindColorTexture(0, 9, getRenderer().getRtShadows().getRt());
 	}

+ 1 - 1
AnKi/Scene/Components/ModelComponent.h

@@ -55,7 +55,7 @@ private:
 		GpuSceneArrays::RenderableAabbGBuffer::Allocation m_gpuSceneRenderableAabbGBuffer;
 		GpuSceneArrays::RenderableAabbDepth::Allocation m_gpuSceneRenderableAabbDepth;
 		GpuSceneArrays::RenderableAabbForward::Allocation m_gpuSceneRenderableAabbForward;
-		GpuSceneArrays::RenderableAabbForward::Allocation m_gpuSceneRenderableAabbRt;
+		GpuSceneArrays::RenderableAabbRt::Allocation m_gpuSceneRenderableAabbRt;
 
 		Array<RenderStateBucketIndex, U32(RenderingTechnique::kCount)> m_renderStateBucketIndices;
 		RenderingTechniqueBit m_techniques;

+ 1 - 1
AnKi/Shaders/LightShading.ankiprog

@@ -30,7 +30,7 @@ ANKI_SPECIALIZATION_CONSTANT_U32(kTileSize, 3u);
 [[vk::binding(7)]] Texture2D<Vec4> g_gbuffer1Tex;
 [[vk::binding(8)]] Texture2D<Vec4> g_gbuffer2Tex;
 [[vk::binding(9)]] Texture2D g_depthTex;
-[[vk::binding(11)]] Texture2D<RVec4> g_resolvedShadowsTex;
+[[vk::binding(10)]] Texture2D<RVec4> g_resolvedShadowsTex;
 
 // Common code for lighting
 #define LIGHTING_COMMON_BRDF() \