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