[Mesa-dev] [PATCH] radv: Add VK_KHR_bind_memory2 support.

Jason Ekstrand jason at jlekstrand.net
Sun Sep 17 15:00:02 UTC 2017


Reviewed: Jason Ekstrand <jason at jlekstrand.net>


On September 17, 2017 5:00:01 AM Bas Nieuwenhuizen 
<bas at basnieuwenhuizen.nl> wrote:

> Nothing too exciting, just adding the possibility for a pNext pointer,
> and batch binding. Our binding is pretty much trivial.
>
> It also adds VK_IMAGE_CREATE_ALIAS_BIT_KHR, but since we store no
> state in radv_image, I don't think we have to do anything there.
> ---
>  src/amd/vulkan/radv_device.c           | 82 ++++++++++++++++++++++++----------
>  src/amd/vulkan/radv_entrypoints_gen.py |  1 +
>  2 files changed, 59 insertions(+), 24 deletions(-)
>
> diff --git a/src/amd/vulkan/radv_device.c b/src/amd/vulkan/radv_device.c
> index e6d595dfbe5..7bfdddf0eea 100644
> --- a/src/amd/vulkan/radv_device.c
> +++ b/src/amd/vulkan/radv_device.c
> @@ -174,6 +174,10 @@ static const VkExtensionProperties 
> common_device_extensions[] = {
>  		.extensionName = VK_KHR_IMAGE_FORMAT_LIST_EXTENSION_NAME,
>  		.specVersion = 1,
>  	},
> +	{
> +		.extensionName = VK_KHR_BIND_MEMORY_2_EXTENSION_NAME,
> +		.specVersion = 1,
> +	},
>  };
>  static const VkExtensionProperties ext_sema_device_extensions[] = {
>  	{
> @@ -2481,44 +2485,74 @@ void radv_GetDeviceMemoryCommitment(
>  	*pCommittedMemoryInBytes = 0;
>  }
>
> +VkResult radv_BindBufferMemory2KHR(VkDevice device,
> +                                   uint32_t bindInfoCount,
> +                                   const VkBindBufferMemoryInfoKHR 
> *pBindInfos)
> +{
> +	for (uint32_t i = 0; i < bindInfoCount; ++i) {
> +		RADV_FROM_HANDLE(radv_device_memory, mem, pBindInfos[i].memory);
> +		RADV_FROM_HANDLE(radv_buffer, buffer, pBindInfos[i].buffer);
> +
> +		if (mem) {
> +			buffer->bo = mem->bo;
> +			buffer->offset = pBindInfos[i].memoryOffset;
> +		} else {
> +			buffer->bo = NULL;
> +		}
> +	}
> +	return VK_SUCCESS;
> +}
> +
>  VkResult radv_BindBufferMemory(
>  	VkDevice                                    device,
> -	VkBuffer                                    _buffer,
> -	VkDeviceMemory                              _memory,
> +	VkBuffer                                    buffer,
> +	VkDeviceMemory                              memory,
>  	VkDeviceSize                                memoryOffset)
>  {
> -	RADV_FROM_HANDLE(radv_device_memory, mem, _memory);
> -	RADV_FROM_HANDLE(radv_buffer, buffer, _buffer);
> +	const VkBindBufferMemoryInfoKHR info = {
> +		.sType = VK_STRUCTURE_TYPE_BIND_BUFFER_MEMORY_INFO_KHR,
> +		.buffer = buffer,
> +		.memory = memory,
> +		.memoryOffset = memoryOffset
> +	};
>
> -	if (mem) {
> -		buffer->bo = mem->bo;
> -		buffer->offset = memoryOffset;
> -	} else {
> -		buffer->bo = NULL;
> -		buffer->offset = 0;
> -	}
> +	return radv_BindBufferMemory2KHR(device, 1, &info);
> +}
>
> +VkResult radv_BindImageMemory2KHR(VkDevice device,
> +                                  uint32_t bindInfoCount,
> +                                  const VkBindImageMemoryInfoKHR *pBindInfos)
> +{
> +	for (uint32_t i = 0; i < bindInfoCount; ++i) {
> +		RADV_FROM_HANDLE(radv_device_memory, mem, pBindInfos[i].memory);
> +		RADV_FROM_HANDLE(radv_image, image, pBindInfos[i].image);
> +
> +		if (mem) {
> +			image->bo = mem->bo;
> +			image->offset = pBindInfos[i].memoryOffset;
> +		} else {
> +			image->bo = NULL;
> +			image->offset = 0;
> +		}
> +	}
>  	return VK_SUCCESS;
>  }
>
> +
>  VkResult radv_BindImageMemory(
>  	VkDevice                                    device,
> -	VkImage                                     _image,
> -	VkDeviceMemory                              _memory,
> +	VkImage                                     image,
> +	VkDeviceMemory                              memory,
>  	VkDeviceSize                                memoryOffset)
>  {
> -	RADV_FROM_HANDLE(radv_device_memory, mem, _memory);
> -	RADV_FROM_HANDLE(radv_image, image, _image);
> -
> -	if (mem) {
> -		image->bo = mem->bo;
> -		image->offset = memoryOffset;
> -	} else {
> -		image->bo = NULL;
> -		image->offset = 0;
> -	}
> +	const VkBindImageMemoryInfoKHR info = {
> +		.sType = VK_STRUCTURE_TYPE_BIND_BUFFER_MEMORY_INFO_KHR,
> +		.image = image,
> +		.memory = memory,
> +		.memoryOffset = memoryOffset
> +	};
>
> -	return VK_SUCCESS;
> +	return radv_BindImageMemory2KHR(device, 1, &info);
>  }
>
>
> diff --git a/src/amd/vulkan/radv_entrypoints_gen.py 
> b/src/amd/vulkan/radv_entrypoints_gen.py
> index 9634f76fcd6..21738f4da90 100644
> --- a/src/amd/vulkan/radv_entrypoints_gen.py
> +++ b/src/amd/vulkan/radv_entrypoints_gen.py
> @@ -57,6 +57,7 @@ SUPPORTED_EXTENSIONS = [
>      'VK_KHR_external_semaphore_capabilities',
>      'VK_KHR_external_semaphore',
>      'VK_KHR_external_semaphore_fd',
> +    'VK_KHR_bind_memory2',
>  ]
>
>  # We generate a static hash table for entry point lookup
> --
> 2.14.1
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/mesa-dev




More information about the mesa-dev mailing list