fix transfer buffer record keeping
							parent
							
								
									159115cbfa
								
							
						
					
					
						commit
						81d04201d2
					
				|  | @ -1175,9 +1175,13 @@ typedef struct VulkanTransferBuffer | ||||||
| 
 | 
 | ||||||
| typedef struct VulkanTransferBufferPool | typedef struct VulkanTransferBufferPool | ||||||
| { | { | ||||||
| 	VulkanTransferBuffer **buffers; | 	VulkanTransferBuffer **availableBuffers; | ||||||
| 	uint32_t bufferCount; | 	uint32_t availableBufferCount; | ||||||
| 	uint32_t bufferCapacity; | 	uint32_t availableBufferCapacity; | ||||||
|  | 
 | ||||||
|  | 	VulkanTransferBuffer **submittedBuffers; | ||||||
|  | 	uint32_t submittedBufferCount; | ||||||
|  | 	uint32_t submittedBufferCapacity; | ||||||
| } VulkanTransferBufferPool; | } VulkanTransferBufferPool; | ||||||
| 
 | 
 | ||||||
| typedef struct VulkanCommandPool VulkanCommandPool; | typedef struct VulkanCommandPool VulkanCommandPool; | ||||||
|  | @ -3928,6 +3932,23 @@ static void VULKAN_INTERNAL_PostWorkCleanup(VulkanRenderer* renderer) | ||||||
| 	VULKAN_INTERNAL_RotateBoundUniformBuffers(renderer->fragmentUniformBufferPool); | 	VULKAN_INTERNAL_RotateBoundUniformBuffers(renderer->fragmentUniformBufferPool); | ||||||
| 	VULKAN_INTERNAL_RotateBoundUniformBuffers(renderer->computeUniformBufferPool); | 	VULKAN_INTERNAL_RotateBoundUniformBuffers(renderer->computeUniformBufferPool); | ||||||
| 
 | 
 | ||||||
|  | 	if (renderer->transferBufferPool.submittedBufferCount + renderer->transferBufferPool.availableBufferCount > renderer->transferBufferPool.availableBufferCapacity) | ||||||
|  | 	{ | ||||||
|  | 		renderer->transferBufferPool.availableBufferCapacity = renderer->transferBufferPool.submittedBufferCount + renderer->transferBufferPool.availableBufferCount; | ||||||
|  | 		renderer->transferBufferPool.availableBuffers = SDL_realloc( | ||||||
|  | 			renderer->transferBufferPool.availableBuffers, | ||||||
|  | 			renderer->transferBufferPool.availableBufferCapacity * sizeof(VulkanTransferBuffer*) | ||||||
|  | 		); | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	for (i = 0; i < renderer->transferBufferPool.submittedBufferCount; i += 1) | ||||||
|  | 	{ | ||||||
|  | 		renderer->transferBufferPool.submittedBuffers[i]->offset = 0; | ||||||
|  | 		renderer->transferBufferPool.availableBuffers[renderer->transferBufferPool.availableBufferCount] = renderer->transferBufferPool.submittedBuffers[i]; | ||||||
|  | 		renderer->transferBufferPool.availableBufferCount += 1; | ||||||
|  | 	} | ||||||
|  | 	renderer->transferBufferPool.submittedBufferCount = 0; | ||||||
|  | 
 | ||||||
| 	/* Reset descriptor set data */ | 	/* Reset descriptor set data */ | ||||||
| 	VULKAN_INTERNAL_ResetDescriptorSetData(renderer); | 	VULKAN_INTERNAL_ResetDescriptorSetData(renderer); | ||||||
| } | } | ||||||
|  | @ -6283,9 +6304,9 @@ static VulkanTransferBuffer* VULKAN_INTERNAL_AcquireTransferBuffer( | ||||||
| 
 | 
 | ||||||
| 	/* Nothing fits, so let's get a transfer buffer from the pool */ | 	/* Nothing fits, so let's get a transfer buffer from the pool */ | ||||||
| 
 | 
 | ||||||
| 	for (i = 0; i < renderer->transferBufferPool.bufferCount; i += 1) | 	for (i = 0; i < renderer->transferBufferPool.availableBufferCount; i += 1) | ||||||
| 	{ | 	{ | ||||||
| 		transferBuffer = renderer->transferBufferPool.buffers[i]; | 		transferBuffer = renderer->transferBufferPool.availableBuffers[i]; | ||||||
| 
 | 
 | ||||||
| 		if (transferBuffer->offset + requiredSize <= transferBuffer->buffer->size) | 		if (transferBuffer->offset + requiredSize <= transferBuffer->buffer->size) | ||||||
| 		{ | 		{ | ||||||
|  | @ -6296,8 +6317,8 @@ static VulkanTransferBuffer* VULKAN_INTERNAL_AcquireTransferBuffer( | ||||||
| 			commandBuffer->transferBuffers[commandBuffer->transferBufferCount] = transferBuffer; | 			commandBuffer->transferBuffers[commandBuffer->transferBufferCount] = transferBuffer; | ||||||
| 			commandBuffer->transferBufferCount += 1; | 			commandBuffer->transferBufferCount += 1; | ||||||
| 
 | 
 | ||||||
| 			renderer->transferBufferPool.buffers[i] = renderer->transferBufferPool.buffers[renderer->transferBufferPool.bufferCount - 1]; | 			renderer->transferBufferPool.availableBuffers[i] = renderer->transferBufferPool.availableBuffers[renderer->transferBufferPool.availableBufferCount - 1]; | ||||||
| 			renderer->transferBufferPool.bufferCount -= 1; | 			renderer->transferBufferPool.availableBufferCount -= 1; | ||||||
| 
 | 
 | ||||||
| 			return transferBuffer; | 			return transferBuffer; | ||||||
| 		} | 		} | ||||||
|  | @ -8429,19 +8450,19 @@ static void VULKAN_INTERNAL_ResetCommandBuffer( | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	/* Return transfer buffers to the pool */ | 	/* Return transfer buffers to the pool */ | ||||||
| 	if (renderer->transferBufferPool.bufferCount + commandBuffer->transferBufferCount > renderer->transferBufferPool.bufferCapacity) | 	if (renderer->transferBufferPool.submittedBufferCount + commandBuffer->transferBufferCount > renderer->transferBufferPool.submittedBufferCapacity) | ||||||
| 	{ | 	{ | ||||||
| 		renderer->transferBufferPool.bufferCapacity = renderer->transferBufferPool.bufferCount + commandBuffer->transferBufferCount; | 		renderer->transferBufferPool.submittedBufferCapacity = renderer->transferBufferPool.submittedBufferCount + commandBuffer->transferBufferCount; | ||||||
| 		renderer->transferBufferPool.buffers = SDL_realloc( | 		renderer->transferBufferPool.submittedBuffers = SDL_realloc( | ||||||
| 			renderer->transferBufferPool.buffers, | 			renderer->transferBufferPool.submittedBuffers, | ||||||
| 			renderer->transferBufferPool.bufferCapacity * sizeof(VulkanTransferBuffer*) | 			renderer->transferBufferPool.submittedBufferCapacity * sizeof(VulkanTransferBuffer*) | ||||||
| 		); | 		); | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	for (i = 0; i < commandBuffer->transferBufferCount; i+= 1) | 	for (i = 0; i < commandBuffer->transferBufferCount; i+= 1) | ||||||
| 	{ | 	{ | ||||||
| 		renderer->transferBufferPool.buffers[renderer->transferBufferPool.bufferCount] = commandBuffer->transferBuffers[i]; | 		renderer->transferBufferPool.submittedBuffers[renderer->transferBufferPool.submittedBufferCount] = commandBuffer->transferBuffers[i]; | ||||||
| 		renderer->transferBufferPool.bufferCount += 1; | 		renderer->transferBufferPool.submittedBufferCount += 1; | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	SDL_free(commandBuffer->transferBuffers); | 	SDL_free(commandBuffer->transferBuffers); | ||||||
|  | @ -9820,9 +9841,13 @@ static Refresh_Device* VULKAN_INTERNAL_CreateDevice( | ||||||
| 
 | 
 | ||||||
| 	/* Initialize transfer buffer pool */ | 	/* Initialize transfer buffer pool */ | ||||||
| 
 | 
 | ||||||
| 	renderer->transferBufferPool.bufferCapacity = 4; | 	renderer->transferBufferPool.availableBufferCapacity = 4; | ||||||
| 	renderer->transferBufferPool.bufferCount = 0; | 	renderer->transferBufferPool.availableBufferCount = 0; | ||||||
| 	renderer->transferBufferPool.buffers = SDL_malloc(renderer->transferBufferPool.bufferCapacity * sizeof(VulkanTransferBuffer*)); | 	renderer->transferBufferPool.availableBuffers = SDL_malloc(renderer->transferBufferPool.availableBufferCapacity * sizeof(VulkanTransferBuffer*)); | ||||||
|  | 
 | ||||||
|  | 	renderer->transferBufferPool.submittedBufferCapacity = 4; | ||||||
|  | 	renderer->transferBufferPool.submittedBufferCount = 0; | ||||||
|  | 	renderer->transferBufferPool.submittedBuffers = SDL_malloc(renderer->transferBufferPool.submittedBufferCapacity * sizeof(VulkanTransferBuffer*)); | ||||||
| 
 | 
 | ||||||
| 	/* Deferred destroy storage */ | 	/* Deferred destroy storage */ | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue