From 16ec12b74087849c90d0472a86561127e51e9a45 Mon Sep 17 00:00:00 2001 From: Iago Toral Quiroga Date: Thu, 5 Dec 2019 10:36:24 +0100 Subject: [PATCH] v3dv: implement vkBindImageMemory Part-of: --- src/broadcom/vulkan/v3dv_device.c | 24 ++++++++++++++++++++++++ src/broadcom/vulkan/v3dv_private.h | 3 +++ 2 files changed, 27 insertions(+) diff --git a/src/broadcom/vulkan/v3dv_device.c b/src/broadcom/vulkan/v3dv_device.c index 60b83bb2150..aabe2a44da3 100644 --- a/src/broadcom/vulkan/v3dv_device.c +++ b/src/broadcom/vulkan/v3dv_device.c @@ -1275,3 +1275,27 @@ v3dv_GetImageMemoryRequirements(VkDevice _device, pMemoryRequirements->alignment = image->alignment; pMemoryRequirements->memoryTypeBits = 0x3; /* Both memory types */ } + +VkResult +v3dv_BindImageMemory(VkDevice _device, + VkImage _image, + VkDeviceMemory _memory, + VkDeviceSize memoryOffset) +{ + V3DV_FROM_HANDLE(v3dv_device_memory, mem, _memory); + V3DV_FROM_HANDLE(v3dv_image, image, _image); + + /* Valid usage: + * + * "memoryOffset must be an integer multiple of the alignment member of + * the VkMemoryRequirements structure returned from a call to + * vkGetImageMemoryRequirements with image" + */ + assert(memoryOffset % image->alignment == 0); + assert(memoryOffset < mem->size); + + image->mem = mem; + image->mem_offset = memoryOffset; + + return VK_SUCCESS; +} diff --git a/src/broadcom/vulkan/v3dv_private.h b/src/broadcom/vulkan/v3dv_private.h index 57a02fe9efa..a37d0fc7d6c 100644 --- a/src/broadcom/vulkan/v3dv_private.h +++ b/src/broadcom/vulkan/v3dv_private.h @@ -273,6 +273,9 @@ struct v3dv_image { uint32_t size; /* Total size in bytes */ uint32_t cube_map_stride; uint32_t alignment; + + struct v3dv_device_memory *mem; + VkDeviceSize mem_offset; }; struct v3dv_shader_module {