Panagiotis Christopoulos Charitos пре 2 година
родитељ
комит
b827d87e71

+ 6 - 6
AnKi/Renderer/GpuVisibility.cpp

@@ -27,7 +27,7 @@ void GpuVisibility::populateRenderGraph(RenderingContext& ctx)
 	RenderGraphDescription& rgraph = ctx.m_renderGraphDescr;
 
 	const U32 aabbCount = GpuSceneContiguousArrays::getSingleton().getElementCount(GpuSceneContiguousArrayType::kRenderableBoundingVolumesGBuffer);
-	const U32 bucketCount = RenderStateBucketContainer::getSingleton().getActiveBucketCount(RenderingTechnique::kGBuffer);
+	const U32 bucketCount = RenderStateBucketContainer::getSingleton().getBucketCount(RenderingTechnique::kGBuffer);
 
 	// Allocate memory for the indirect commands
 	const GpuVisibleTransientMemoryAllocation indirectArgs =
@@ -82,15 +82,15 @@ void GpuVisibility::populateRenderGraph(RenderingContext& ctx)
 		rpass.bindStorageBuffer(0, 5, m_runCtx.m_drawIndexedIndirectArgs);
 
 		U32* offsets = allocateAndBindStorage<U32*>(
-			sizeof(U32) * RenderStateBucketContainer::getSingleton().getActiveBucketCount(RenderingTechnique::kGBuffer), cmdb, 0, 6);
-		U32 activeBucketCount = 0;
+			sizeof(U32) * RenderStateBucketContainer::getSingleton().getBucketCount(RenderingTechnique::kGBuffer), cmdb, 0, 6);
+		U32 bucketCount = 0;
 		U32 userCount = 0;
 		RenderStateBucketContainer::getSingleton().iterateBuckets(RenderingTechnique::kGBuffer, [&](const RenderStateInfo&, U32 userCount_) {
-			offsets[activeBucketCount] = userCount;
+			offsets[bucketCount] = userCount;
 			userCount += userCount_;
-			++activeBucketCount;
+			++bucketCount;
 		});
-		ANKI_ASSERT(activeBucketCount == RenderStateBucketContainer::getSingleton().getActiveBucketCount(RenderingTechnique::kGBuffer));
+		ANKI_ASSERT(userCount == RenderStateBucketContainer::getSingleton().getBucketsItemCount(RenderingTechnique::kGBuffer));
 
 		rpass.bindStorageBuffer(0, 7, m_runCtx.m_mdiDrawCounts);
 

+ 2 - 4
AnKi/Scene/RenderStateBucket.h

@@ -87,15 +87,13 @@ public:
 	/// @note It's thread-safe against addUser and removeUser
 	void removeUser(RenderStateBucketIndex& bucketIndex);
 
+	/// Iterate empty and non-empty buckets.
 	template<typename TFunc>
 	void iterateBuckets(RenderingTechnique technique, TFunc func) const
 	{
 		for(const ExtendedBucket& b : m_buckets[technique])
 		{
-			if(b.m_userCount > 0)
-			{
-				func(static_cast<const RenderStateInfo&>(b), b.m_userCount);
-			}
+			func(static_cast<const RenderStateInfo&>(b), b.m_userCount);
 		}
 	}
 

+ 2 - 2
AnKi/Shaders/GpuVisibility.ankiprog

@@ -19,9 +19,9 @@
 [[vk::binding(4)]] RWStructuredBuffer<GpuSceneRenderable> g_instanceRateRenderables;
 [[vk::binding(5)]] RWStructuredBuffer<DrawIndexedIndirectArgs> g_drawIndexedIndirectArgs;
 
-// Index pointing to the above arrays. Its size is equal to the number of render state buckets
+// Index pointing to the above arrays. One for each render state bucket
 [[vk::binding(6)]] StructuredBuffer<U32> g_drawIndirectArgsOffsets;
-// The MDI counts
+// The MDI counts. One for each render state bucket
 [[vk::binding(7)]] RWStructuredBuffer<U32> g_mdiDrawCounts;
 
 struct Uniforms