Browse Source

Make a simple BufferUsageBit simplification

Panagiotis Christopoulos Charitos 11 months ago
parent
commit
365b6a1d0a

+ 1 - 1
AnKi/Core/GpuMemory/GpuVisibleTransientMemoryPool.h

@@ -56,7 +56,7 @@ private:
 		}
 
 		BufferUsageBit buffUsage = BufferUsageBit::kAllConstant | BufferUsageBit::kAllUav | BufferUsageBit::kAllSrv | BufferUsageBit::kIndirectDraw
-								   | BufferUsageBit::kIndirectCompute | BufferUsageBit::kVertex | BufferUsageBit::kAllCopy
+								   | BufferUsageBit::kIndirectCompute | BufferUsageBit::kVertexOrIndex | BufferUsageBit::kAllCopy
 								   | BufferUsageBit::kIndirectTraceRays;
 		if(GrManager::getSingleton().getDeviceCapabilities().m_rayTracingEnabled)
 		{

+ 2 - 2
AnKi/Core/GpuMemory/RebarTransientMemoryPool.cpp

@@ -25,8 +25,8 @@ void RebarTransientMemoryPool::init()
 	BufferInitInfo buffInit("ReBar");
 	buffInit.m_mapAccess = BufferMapAccessBit::kWrite;
 	buffInit.m_size = g_rebarGpuMemorySizeCvar;
-	buffInit.m_usage = BufferUsageBit::kAllConstant | BufferUsageBit::kAllUav | BufferUsageBit::kAllSrv | BufferUsageBit::kVertex
-					   | BufferUsageBit::kIndex | BufferUsageBit::kShaderBindingTable | BufferUsageBit::kAllIndirect | BufferUsageBit::kCopySource;
+	buffInit.m_usage = BufferUsageBit::kAllConstant | BufferUsageBit::kAllUav | BufferUsageBit::kAllSrv | BufferUsageBit::kVertexOrIndex
+					   | BufferUsageBit::kShaderBindingTable | BufferUsageBit::kAllIndirect | BufferUsageBit::kCopySource;
 	m_buffer = GrManager::getSingleton().newBuffer(buffInit);
 
 	m_bufferSize = buffInit.m_size;

+ 1 - 1
AnKi/Core/GpuMemory/UnifiedGeometryBuffer.cpp

@@ -19,7 +19,7 @@ void UnifiedGeometryBuffer::init()
 
 	const Array classes = {1_KB, 8_KB, 32_KB, 128_KB, 512_KB, 4_MB, 8_MB, 16_MB, poolSize};
 
-	BufferUsageBit buffUsage = BufferUsageBit::kVertex | BufferUsageBit::kIndex | BufferUsageBit::kCopyDestination | BufferUsageBit::kAllSrv;
+	BufferUsageBit buffUsage = BufferUsageBit::kVertexOrIndex | BufferUsageBit::kCopyDestination | BufferUsageBit::kAllSrv;
 
 	if(GrManager::getSingleton().getDeviceCapabilities().m_rayTracingEnabled)
 	{

+ 3 - 4
AnKi/Gr/Common.h

@@ -730,8 +730,7 @@ enum class BufferUsageBit : U64
 	kUavCompute = 1ull << 10ull,
 	kUavTraceRays = 1ull << 11ull,
 
-	kIndex = 1ull << 12ull,
-	kVertex = 1ull << 13ull,
+	kVertexOrIndex = 1ull << 12ull,
 
 	kIndirectCompute = 1ull << 14ll,
 	kIndirectDraw = 1ull << 15ull,
@@ -751,14 +750,14 @@ enum class BufferUsageBit : U64
 	kAllIndirect = kIndirectCompute | kIndirectDraw | kIndirectTraceRays,
 	kAllCopy = kCopySource | kCopyDestination,
 
-	kAllGeometry = kConstantGeometry | kSrvGeometry | kUavGeometry | kIndex | kVertex,
+	kAllGeometry = kConstantGeometry | kSrvGeometry | kUavGeometry | kVertexOrIndex,
 	kAllPixel = kConstantPixel | kSrvPixel | kUavPixel,
 	kAllGraphics = kAllGeometry | kAllPixel | kIndirectDraw,
 	kAllCompute = kConstantCompute | kSrvCompute | kUavCompute | kIndirectCompute,
 	kAllTraceRays = kConstantTraceRays | kSrvTraceRays | kUavTraceRays | kIndirectTraceRays | kShaderBindingTable,
 
 	kAllRayTracing = kAllTraceRays | kAccelerationStructureBuild | kAccelerationStructureBuildScratch,
-	kAllRead = kAllConstant | kAllSrv | kAllUav | kIndex | kVertex | kAllIndirect | kCopySource | kAccelerationStructureBuild | kShaderBindingTable,
+	kAllRead = kAllConstant | kAllSrv | kAllUav | kVertexOrIndex | kAllIndirect | kCopySource | kAccelerationStructureBuild | kShaderBindingTable,
 	kAllWrite = kAllUav | kCopyDestination | kAccelerationStructureBuildScratch,
 
 	kAllShaderResource = kAllConstant | kAllSrv | kAllUav,

+ 3 - 8
AnKi/Gr/D3D/D3DBuffer.cpp

@@ -200,7 +200,7 @@ D3D12_BARRIER_SYNC BufferImpl::computeSync(BufferUsageBit usage) const
 		sync |= D3D12_BARRIER_SYNC_EXECUTE_INDIRECT;
 	}
 
-	if(!!(usage & BufferUsageBit::kIndex))
+	if(!!(usage & BufferUsageBit::kVertexOrIndex))
 	{
 		sync |= D3D12_BARRIER_SYNC_INDEX_INPUT;
 	}
@@ -248,9 +248,9 @@ D3D12_BARRIER_ACCESS BufferImpl::computeAccess(BufferUsageBit usage) const
 
 	D3D12_BARRIER_ACCESS out = {};
 
-	if(!!(usage & BufferUsageBit::kVertex))
+	if(!!(usage & BufferUsageBit::kVertexOrIndex))
 	{
-		out |= D3D12_BARRIER_ACCESS_VERTEX_BUFFER;
+		out |= D3D12_BARRIER_ACCESS_VERTEX_BUFFER | D3D12_BARRIER_ACCESS_INDEX_BUFFER;
 	}
 
 	if(!!(usage & BufferUsageBit::kAllConstant))
@@ -258,11 +258,6 @@ D3D12_BARRIER_ACCESS BufferImpl::computeAccess(BufferUsageBit usage) const
 		out |= D3D12_BARRIER_ACCESS_CONSTANT_BUFFER;
 	}
 
-	if(!!(usage & BufferUsageBit::kIndex))
-	{
-		out |= D3D12_BARRIER_ACCESS_INDEX_BUFFER;
-	}
-
 	if(!!(usage & BufferUsageBit::kAllUav))
 	{
 		out |= D3D12_BARRIER_ACCESS_UNORDERED_ACCESS;

+ 3 - 8
AnKi/Gr/Vulkan/VkBuffer.cpp

@@ -306,7 +306,7 @@ VkPipelineStageFlags BufferImpl::computePplineStage(BufferUsageBit usage)
 		stageMask |= VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT;
 	}
 
-	if(!!(usage & (BufferUsageBit::kIndex | BufferUsageBit::kVertex)))
+	if(!!(usage & (BufferUsageBit::kVertexOrIndex)))
 	{
 		stageMask |= VK_PIPELINE_STAGE_VERTEX_INPUT_BIT;
 	}
@@ -378,14 +378,9 @@ VkAccessFlags BufferImpl::computeAccessMask(BufferUsageBit usage)
 		mask |= VK_ACCESS_SHADER_WRITE_BIT;
 	}
 
-	if(!!(usage & BufferUsageBit::kIndex))
+	if(!!(usage & BufferUsageBit::kVertexOrIndex))
 	{
-		mask |= VK_ACCESS_INDEX_READ_BIT;
-	}
-
-	if(!!(usage & BufferUsageBit::kVertex))
-	{
-		mask |= VK_ACCESS_VERTEX_ATTRIBUTE_READ_BIT;
+		mask |= VK_ACCESS_INDEX_READ_BIT | VK_ACCESS_VERTEX_ATTRIBUTE_READ_BIT;
 	}
 
 	if(!!(usage & BufferUsageBit::kAllIndirect))

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

@@ -68,7 +68,7 @@ void CommandBuffer::bindIndexBuffer(const BufferView& buff, IndexType type)
 	ANKI_VK_SELF(CommandBufferImpl);
 	self.commandCommon();
 	const BufferImpl& buffi = static_cast<const BufferImpl&>(buff.getBuffer());
-	ANKI_ASSERT(!!(buffi.getBufferUsage() & BufferUsageBit::kIndex));
+	ANKI_ASSERT(!!(buffi.getBufferUsage() & BufferUsageBit::kVertexOrIndex));
 	vkCmdBindIndexBuffer(self.m_handle, buffi.getHandle(), buff.getOffset(), convertIndexType(type));
 }
 

+ 2 - 7
AnKi/Gr/Vulkan/VkCommon.cpp

@@ -286,14 +286,9 @@ VkBufferUsageFlags convertBufferUsageBit(BufferUsageBit usageMask)
 		out |= VK_BUFFER_USAGE_STORAGE_BUFFER_BIT;
 	}
 
-	if(!!(usageMask & BufferUsageBit::kIndex))
+	if(!!(usageMask & BufferUsageBit::kVertexOrIndex))
 	{
-		out |= VK_BUFFER_USAGE_INDEX_BUFFER_BIT;
-	}
-
-	if(!!(usageMask & BufferUsageBit::kVertex))
-	{
-		out |= VK_BUFFER_USAGE_VERTEX_BUFFER_BIT;
+		out |= VK_BUFFER_USAGE_INDEX_BUFFER_BIT | VK_BUFFER_USAGE_VERTEX_BUFFER_BIT;
 	}
 
 	if(!!(usageMask & BufferUsageBit::kAllIndirect))

+ 2 - 2
AnKi/Renderer/Dbg.cpp

@@ -49,7 +49,7 @@ Error Dbg::init()
 	{
 		BufferInitInfo buffInit("Dbg cube verts");
 		buffInit.m_size = sizeof(Vec3) * 8;
-		buffInit.m_usage = BufferUsageBit::kVertex;
+		buffInit.m_usage = BufferUsageBit::kVertexOrIndex;
 		buffInit.m_mapAccess = BufferMapAccessBit::kWrite;
 		m_cubeVertsBuffer = GrManager::getSingleton().newBuffer(buffInit);
 
@@ -69,7 +69,7 @@ Error Dbg::init()
 
 		constexpr U kIndexCount = 12 * 2;
 		buffInit.setName("Dbg cube indices");
-		buffInit.m_usage = BufferUsageBit::kIndex;
+		buffInit.m_usage = BufferUsageBit::kVertexOrIndex;
 		buffInit.m_size = kIndexCount * sizeof(U16);
 		m_cubeIndicesBuffer = GrManager::getSingleton().newBuffer(buffInit);
 		U16* indices = static_cast<U16*>(m_cubeIndicesBuffer->map(0, kMaxPtrSize, BufferMapAccessBit::kWrite));

+ 1 - 1
AnKi/Renderer/Utils/HzbGenerator.cpp

@@ -69,7 +69,7 @@ Error HzbGenerator::init()
 	// Boxes buffer
 	buffInit = BufferInitInfo("HzbBoxIndices");
 	buffInit.m_size = sizeof(kBoxIndices);
-	buffInit.m_usage = BufferUsageBit::kIndex;
+	buffInit.m_usage = BufferUsageBit::kVertexOrIndex;
 	buffInit.m_mapAccess = BufferMapAccessBit::kWrite;
 	m_boxIndexBuffer = GrManager::getSingleton().newBuffer(buffInit);
 

+ 1 - 1
AnKi/Resource/MeshResource.cpp

@@ -204,7 +204,7 @@ Error MeshResource::load(const ResourceFilename& filename, Bool async)
 		}
 
 		const BufferBarrierInfo barrier = {UnifiedGeometryBuffer::getSingleton().getBufferView(), BufferUsageBit::kCopyDestination,
-										   BufferUsageBit::kVertex};
+										   BufferUsageBit::kVertexOrIndex};
 
 		cmdb->setPipelineBarrier({}, {&barrier, 1}, {});
 

+ 2 - 2
Tests/Gr/Gr.cpp

@@ -406,7 +406,7 @@ float4 main(float4 svPosition : SV_POSITION, float2 uv : TEXCOORDS, uint svPrimI
 		texInit.m_width = 2;
 		texInit.m_height = 2;
 		texInit.m_format = Format::kR32G32B32A32_Sfloat;
-		texInit.m_usage = TextureUsageBit::kAllSrv | TextureUsageBit::kAllTransfer;
+		texInit.m_usage = TextureUsageBit::kAllSrv | TextureUsageBit::kAllCopy;
 		TexturePtr tex = GrManager::getSingleton().newTexture(texInit);
 
 		BufferInitInfo buffInit;
@@ -2511,7 +2511,7 @@ static void createCubeBuffers(GrManager& gr, Vec3 min, Vec3 max, BufferPtr& inde
 {
 	BufferInitInfo inf;
 	inf.m_mapAccess = BufferMapAccessBit::kWrite;
-	inf.m_usage = BufferUsageBit::kIndex | BufferUsageBit::kVertex | BufferUsageBit::kSrvTraceRays;
+	inf.m_usage = BufferUsageBit::kVertexOrIndex | BufferUsageBit::kSrvTraceRays;
 	inf.m_size = sizeof(Vec3) * 8;
 	vertBuffer = gr.newBuffer(inf);
 	WeakArray<Vec3, PtrSize> positions = vertBuffer->map<Vec3>(0, 8, BufferMapAccessBit::kWrite);