Panagiotis Christopoulos Charitos 8 лет назад
Родитель
Сommit
c64f6f0a57

+ 0 - 1
sandbox/config.xml

@@ -41,7 +41,6 @@
 	<imageReflectionMaxDistance>30</imageReflectionMaxDistance>
 	<core.uniformPerFrameMemorySize>16777216</core.uniformPerFrameMemorySize>
 	<core.storagePerFrameMemorySize>16777216</core.storagePerFrameMemorySize>
-	<core.transferPerFrameMemorySize>67108864</core.transferPerFrameMemorySize>
 	<core.vertexPerFrameMemorySize>16777216</core.vertexPerFrameMemorySize>
 	<rsrc.maxTextureSize>1048576</rsrc.maxTextureSize>
 	<rsrc.textureAnisotropy>8</rsrc.textureAnisotropy>

+ 0 - 1
src/anki/core/Config.cpp

@@ -88,7 +88,6 @@ Config::Config()
 	newOption("core.uniformPerFrameMemorySize", 16_MB);
 	newOption("core.storagePerFrameMemorySize", 16_MB);
 	newOption("core.vertexPerFrameMemorySize", 10_MB);
-	newOption("core.transferPerFrameMemorySize", 128_MB);
 	newOption("core.textureBufferPerFrameMemorySize", 1_MB);
 }
 

+ 0 - 6
src/anki/core/StagingGpuMemoryManager.cpp

@@ -29,7 +29,6 @@ Error StagingGpuMemoryManager::init(GrManager* gr, const ConfigSet& cfg)
 	m_perFrameBuffers[StagingGpuMemoryType::UNIFORM].m_size = cfg.getNumber("core.uniformPerFrameMemorySize");
 	m_perFrameBuffers[StagingGpuMemoryType::STORAGE].m_size = cfg.getNumber("core.storagePerFrameMemorySize");
 	m_perFrameBuffers[StagingGpuMemoryType::VERTEX].m_size = cfg.getNumber("core.vertexPerFrameMemorySize");
-	m_perFrameBuffers[StagingGpuMemoryType::TRANSFER].m_size = cfg.getNumber("core.transferPerFrameMemorySize");
 	m_perFrameBuffers[StagingGpuMemoryType::TEXTURE].m_size = cfg.getNumber("core.textureBufferPerFrameMemorySize");
 
 	U32 alignment;
@@ -42,11 +41,6 @@ Error StagingGpuMemoryManager::init(GrManager* gr, const ConfigSet& cfg)
 	initBuffer(StagingGpuMemoryType::STORAGE, alignment, maxSize, BufferUsageBit::STORAGE_ALL, *gr);
 
 	initBuffer(StagingGpuMemoryType::VERTEX, 16, MAX_U32, BufferUsageBit::VERTEX, *gr);
-	initBuffer(StagingGpuMemoryType::TRANSFER,
-		16,
-		MAX_U32,
-		BufferUsageBit::BUFFER_UPLOAD_SOURCE | BufferUsageBit::TEXTURE_UPLOAD_SOURCE,
-		*gr);
 
 	gr->getTextureBufferInfo(alignment, maxSize);
 	initBuffer(StagingGpuMemoryType::TEXTURE, alignment, maxSize, BufferUsageBit::TEXTURE_ALL, *gr);

+ 0 - 1
src/anki/core/StagingGpuMemoryManager.h

@@ -22,7 +22,6 @@ enum class StagingGpuMemoryType
 	UNIFORM,
 	STORAGE,
 	VERTEX,
-	TRANSFER,
 	TEXTURE,
 	COUNT
 };

+ 13 - 8
src/anki/renderer/Ir.cpp

@@ -123,9 +123,10 @@ Error Ir::loadMesh(CString fname, BufferPtr& vert, BufferPtr& idx, U32& idxCount
 	init.m_flags = CommandBufferFlag::SMALL_BATCH;
 	CommandBufferPtr cmdb = getGrManager().newInstance<CommandBuffer>(init);
 
-	StagingGpuMemoryToken token;
-	Vec3* verts = static_cast<Vec3*>(
-		m_r->getStagingGpuMemoryManager().allocateFrame(vertBuffSize, StagingGpuMemoryType::TRANSFER, token));
+	TransferGpuAllocatorHandle handle;
+	ANKI_CHECK(m_r->getResourceManager().getTransferGpuAllocator().allocate(vertBuffSize, handle));
+
+	Vec3* verts = static_cast<Vec3*>(handle.getMappedMemory());
 
 	const U8* ptr = loader.getVertexData();
 	for(U i = 0; i < loader.getHeader().m_totalVerticesCount; ++i)
@@ -135,17 +136,21 @@ Error Ir::loadMesh(CString fname, BufferPtr& vert, BufferPtr& idx, U32& idxCount
 		ptr += loader.getVertexSize();
 	}
 
-	cmdb->copyBufferToBuffer(token.m_buffer, token.m_offset, vert, 0, token.m_range);
+	cmdb->copyBufferToBuffer(handle.getBuffer(), handle.getOffset(), vert, 0, handle.getRange());
 
-	void* cpuIds = m_r->getStagingGpuMemoryManager().allocateFrame(
-		loader.getIndexDataSize(), StagingGpuMemoryType::TRANSFER, token);
+	TransferGpuAllocatorHandle handle2;
+	ANKI_CHECK(m_r->getResourceManager().getTransferGpuAllocator().allocate(loader.getIndexDataSize(), handle2));
+	void* cpuIds = handle2.getMappedMemory();
 
 	memcpy(cpuIds, loader.getIndexData(), loader.getIndexDataSize());
 
-	cmdb->copyBufferToBuffer(token.m_buffer, token.m_offset, idx, 0, token.m_range);
+	cmdb->copyBufferToBuffer(handle2.getBuffer(), handle2.getOffset(), idx, 0, handle2.getRange());
 	idxCount = loader.getHeader().m_totalIndicesCount;
 
-	cmdb->flush();
+	FencePtr fence;
+	cmdb->flush(&fence);
+	m_r->getResourceManager().getTransferGpuAllocator().release(handle, fence);
+	m_r->getResourceManager().getTransferGpuAllocator().release(handle2, fence);
 
 	return ErrorCode::NONE;
 }

+ 10 - 4
src/anki/renderer/Tm.cpp

@@ -43,11 +43,17 @@ Error Tm::initInternal(const ConfigSet& initializer)
 	cmdbinit.m_flags = CommandBufferFlag::SMALL_BATCH | CommandBufferFlag::TRANSFER_WORK;
 	CommandBufferPtr cmdb = getGrManager().newInstance<CommandBuffer>(cmdbinit);
 
-	StagingGpuMemoryToken token;
-	void* data = m_r->getStagingGpuMemoryManager().allocateFrame(sizeof(Vec4), StagingGpuMemoryType::TRANSFER, token);
+	TransferGpuAllocatorHandle handle;
+	ANKI_CHECK(m_r->getResourceManager().getTransferGpuAllocator().allocate(sizeof(Vec4), handle));
+	void* data = handle.getMappedMemory();
+
 	*static_cast<Vec4*>(data) = Vec4(0.5);
-	cmdb->copyBufferToBuffer(token.m_buffer, token.m_offset, m_luminanceBuff, 0, token.m_range);
-	cmdb->flush();
+	cmdb->copyBufferToBuffer(handle.getBuffer(), handle.getOffset(), m_luminanceBuff, 0, handle.getRange());
+
+	FencePtr fence;
+	cmdb->flush(&fence);
+
+	m_r->getResourceManager().getTransferGpuAllocator().release(handle, fence);
 
 	return ErrorCode::NONE;
 }