[Mesa-dev] [PATCH] anv: Implement VK_KHR_bind_memory2
Lionel Landwerlin
lionel.g.landwerlin at intel.com
Sun Sep 17 10:32:11 UTC 2017
I'll rebase my stuff on top of this.
Reviewed-by: Lionel Landwerlin <lionel.g.landwerlin at intel.com>
On 15/09/17 20:10, Jason Ekstrand wrote:
> ---
> src/intel/vulkan/anv_device.c | 41 +++++++++++++++++++++++++++++-------
> src/intel/vulkan/anv_extensions.py | 1 +
> src/intel/vulkan/anv_image.c | 43 ++++++++++++++++++++++++++++++--------
> 3 files changed, 68 insertions(+), 17 deletions(-)
>
> diff --git a/src/intel/vulkan/anv_device.c b/src/intel/vulkan/anv_device.c
> index 8e2ed9e..233dd39 100644
> --- a/src/intel/vulkan/anv_device.c
> +++ b/src/intel/vulkan/anv_device.c
> @@ -1863,23 +1863,48 @@ void anv_GetDeviceMemoryCommitment(
> *pCommittedMemoryInBytes = 0;
> }
>
> -VkResult anv_BindBufferMemory(
> - VkDevice device,
> - VkBuffer _buffer,
> - VkDeviceMemory _memory,
> - VkDeviceSize memoryOffset)
> +static void
> +anv_bind_buffer_memory(const VkBindBufferMemoryInfoKHR *pBindInfo)
> {
> - ANV_FROM_HANDLE(anv_device_memory, mem, _memory);
> - ANV_FROM_HANDLE(anv_buffer, buffer, _buffer);
> + ANV_FROM_HANDLE(anv_device_memory, mem, pBindInfo->memory);
> + ANV_FROM_HANDLE(anv_buffer, buffer, pBindInfo->buffer);
> +
> + assert(pBindInfo->sType == VK_STRUCTURE_TYPE_BIND_BUFFER_MEMORY_INFO_KHR);
>
> if (mem) {
> assert((buffer->usage & mem->type->valid_buffer_usage) == buffer->usage);
> buffer->bo = mem->bo;
> - buffer->offset = memoryOffset;
> + buffer->offset = pBindInfo->memoryOffset;
> } else {
> buffer->bo = NULL;
> buffer->offset = 0;
> }
> +}
> +
> +VkResult anv_BindBufferMemory(
> + VkDevice device,
> + VkBuffer buffer,
> + VkDeviceMemory memory,
> + VkDeviceSize memoryOffset)
> +{
> + anv_bind_buffer_memory(
> + &(VkBindBufferMemoryInfoKHR) {
> + .sType = VK_STRUCTURE_TYPE_BIND_BUFFER_MEMORY_INFO_KHR,
> + .buffer = buffer,
> + .memory = memory,
> + .memoryOffset = memoryOffset,
> + });
> +
> + return VK_SUCCESS;
> +}
> +
> +VkResult anv_BindBufferMemory2KHR(
> + VkDevice device,
> + uint32_t bindInfoCount,
> + const VkBindBufferMemoryInfoKHR* pBindInfos)
> +{
> + for (uint32_t i = 0; i < bindInfoCount; i++)
> + anv_bind_buffer_memory(&pBindInfos[i]);
>
> return VK_SUCCESS;
> }
> diff --git a/src/intel/vulkan/anv_extensions.py b/src/intel/vulkan/anv_extensions.py
> index acec785..cb0e36b 100644
> --- a/src/intel/vulkan/anv_extensions.py
> +++ b/src/intel/vulkan/anv_extensions.py
> @@ -45,6 +45,7 @@ class Extension:
> self.enable = enable;
>
> EXTENSIONS = [
> + Extension('VK_KHR_bind_memory2', 1, True),
> Extension('VK_KHR_dedicated_allocation', 1, True),
> Extension('VK_KHR_descriptor_update_template', 1, True),
> Extension('VK_KHR_external_fence', 1,
> diff --git a/src/intel/vulkan/anv_image.c b/src/intel/vulkan/anv_image.c
> index 492b341..982461c 100644
> --- a/src/intel/vulkan/anv_image.c
> +++ b/src/intel/vulkan/anv_image.c
> @@ -421,23 +421,48 @@ anv_DestroyImage(VkDevice _device, VkImage _image,
> vk_free2(&device->alloc, pAllocator, image);
> }
>
> -VkResult anv_BindImageMemory(
> - VkDevice _device,
> - VkImage _image,
> - VkDeviceMemory _memory,
> - VkDeviceSize memoryOffset)
> +static void
> +anv_bind_image_memory(const VkBindImageMemoryInfoKHR *pBindInfo)
> {
> - ANV_FROM_HANDLE(anv_device_memory, mem, _memory);
> - ANV_FROM_HANDLE(anv_image, image, _image);
> + ANV_FROM_HANDLE(anv_device_memory, mem, pBindInfo->memory);
> + ANV_FROM_HANDLE(anv_image, image, pBindInfo->image);
> +
> + assert(pBindInfo->sType == VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_INFO_KHR);
>
> if (mem == NULL) {
> image->bo = NULL;
> image->offset = 0;
> - return VK_SUCCESS;
> + return;
> }
>
> image->bo = mem->bo;
> - image->offset = memoryOffset;
> + image->offset = pBindInfo->memoryOffset;
> +}
> +
> +VkResult anv_BindImageMemory(
> + VkDevice device,
> + VkImage image,
> + VkDeviceMemory memory,
> + VkDeviceSize memoryOffset)
> +{
> + anv_bind_image_memory(
> + &(VkBindImageMemoryInfoKHR) {
> + .sType = VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_INFO_KHR,
> + .image = image,
> + .memory = memory,
> + .memoryOffset = memoryOffset,
> + });
> +
> + return VK_SUCCESS;
> +}
> +
> +VkResult anv_BindImageMemory2KHR(
> + VkDevice device,
> + uint32_t bindInfoCount,
> + const VkBindImageMemoryInfoKHR* pBindInfos)
> +{
> + for (uint32_t i = 0; i < bindInfoCount; i++)
> + anv_bind_image_memory(&pBindInfos[i]);
>
> return VK_SUCCESS;
> }
More information about the mesa-dev
mailing list