permanently map host-visible buffers
							parent
							
								
									a0414d0a4f
								
							
						
					
					
						commit
						74f26e605d
					
				|  | @ -449,6 +449,7 @@ struct VulkanMemoryAllocation | |||
| 	uint8_t availableForAllocation; | ||||
| 	VkDeviceSize freeSpace; | ||||
| 	VkDeviceSize usedSpace; | ||||
| 	uint8_t *mapPointer; | ||||
| 	SDL_mutex *memoryLock; | ||||
| }; | ||||
| 
 | ||||
|  | @ -745,7 +746,6 @@ typedef struct VulkanUniformBufferObject | |||
| 	VkDescriptorSet descriptorSet; | ||||
| 	VulkanBuffer *buffer; | ||||
| 	uint32_t currentOffset; | ||||
| 	uint8_t *mapPointer; /* uniform buffers are permanently mapped */ | ||||
| 	SDL_mutex *lock; | ||||
| } VulkanUniformBufferObject; | ||||
| 
 | ||||
|  | @ -2552,6 +2552,24 @@ static uint8_t VULKAN_INTERNAL_AllocateMemory( | |||
| 		return 0; | ||||
| 	} | ||||
| 
 | ||||
| 	/* Persistent mapping for host-visible memory */ | ||||
| 	if (isHostVisible) | ||||
| 	{ | ||||
| 		result = renderer->vkMapMemory( | ||||
| 			renderer->logicalDevice, | ||||
| 			allocation->memory, | ||||
| 			0, | ||||
| 			VK_WHOLE_SIZE, | ||||
| 			0, | ||||
| 			(void**) &allocation->mapPointer | ||||
| 		); | ||||
| 		VULKAN_ERROR_CHECK(result, vkMapMemory, 0) | ||||
| 	} | ||||
| 	else | ||||
| 	{ | ||||
| 		allocation->mapPointer = NULL; | ||||
| 	} | ||||
| 
 | ||||
| 	VULKAN_INTERNAL_NewMemoryFreeRegion( | ||||
| 		renderer, | ||||
| 		allocation, | ||||
|  | @ -4300,16 +4318,6 @@ static VulkanUniformBufferObject* VULKAN_INTERNAL_CreateUniformBufferObject( | |||
| 		NULL | ||||
| 	); | ||||
| 
 | ||||
| 	/* Permanently map the memory */ | ||||
| 	renderer->vkMapMemory( | ||||
| 		renderer->logicalDevice, | ||||
| 		uniformBufferObject->buffer->usedRegion->allocation->memory, | ||||
| 		0, | ||||
| 		VK_WHOLE_SIZE, | ||||
| 		0, | ||||
| 		(void**) &uniformBufferObject->mapPointer | ||||
| 	); | ||||
| 
 | ||||
| 	return uniformBufferObject; | ||||
| } | ||||
| 
 | ||||
|  | @ -4354,11 +4362,6 @@ static void VULKAN_INTERNAL_DestroyUniformBufferObject( | |||
| 	VulkanRenderer *renderer, | ||||
| 	VulkanUniformBufferObject *uniformBufferObject | ||||
| ) { | ||||
| 	renderer->vkUnmapMemory( | ||||
| 		renderer->logicalDevice, | ||||
| 		uniformBufferObject->buffer->usedRegion->allocation->memory | ||||
| 	); | ||||
| 
 | ||||
| 	VULKAN_INTERNAL_DestroyBuffer(renderer, uniformBufferObject->buffer); | ||||
| 
 | ||||
| 	SDL_DestroyMutex(uniformBufferObject->lock); | ||||
|  | @ -6843,7 +6846,7 @@ static void VULKAN_INTERNAL_SetUniformBufferData( | |||
| 	uint32_t dataLength | ||||
| ) { | ||||
| 	uint8_t *dst = | ||||
| 		uniformBufferObject->mapPointer + | ||||
| 		uniformBufferObject->buffer->usedRegion->allocation->mapPointer + | ||||
| 		uniformBufferObject->buffer->usedRegion->resourceOffset + | ||||
| 		uniformBufferObject->currentOffset; | ||||
| 
 | ||||
|  | @ -8336,43 +8339,6 @@ static void VULKAN_EndComputePass( | |||
| 	vulkanCommandBuffer->currentComputePipeline = NULL; | ||||
| } | ||||
| 
 | ||||
| static void* VULKAN_MapCpuBuffer( | ||||
| 	Refresh_Renderer *driverData, | ||||
| 	Refresh_CpuBuffer *buffer, | ||||
| 	uint32_t offsetInBytes, | ||||
| 	uint32_t sizeInBytes | ||||
| ) { | ||||
| 	VulkanRenderer *renderer = (VulkanRenderer*) driverData; | ||||
| 	VulkanBuffer *vulkanBuffer = (VulkanBuffer*) buffer; | ||||
| 	VkResult result; | ||||
| 	void* mapPointer; | ||||
| 
 | ||||
| 	result = renderer->vkMapMemory( | ||||
| 		renderer->logicalDevice, | ||||
| 		vulkanBuffer->usedRegion->allocation->memory, | ||||
| 		offsetInBytes, | ||||
| 		sizeInBytes, | ||||
| 		0, | ||||
| 		&mapPointer | ||||
| 	); | ||||
| 	VULKAN_ERROR_CHECK(result, vkMapMemory, NULL) | ||||
| 
 | ||||
| 	return mapPointer; | ||||
| } | ||||
| 
 | ||||
| static void VULKAN_UnmapCpuBuffer( | ||||
| 	Refresh_Renderer *driverData, | ||||
| 	Refresh_CpuBuffer *buffer | ||||
| ) { | ||||
| 	VulkanRenderer *renderer = (VulkanRenderer*) driverData; | ||||
| 	VulkanBuffer *vulkanBuffer = (VulkanBuffer*) buffer; | ||||
| 
 | ||||
| 	renderer->vkUnmapMemory( | ||||
| 		renderer->logicalDevice, | ||||
| 		vulkanBuffer->usedRegion->allocation->memory | ||||
| 	); | ||||
| } | ||||
| 
 | ||||
| static void VULKAN_BeginCopyPass( | ||||
| 	Refresh_Renderer *driverData, | ||||
| 	Refresh_CommandBuffer *commandBuffer | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue