diff --git a/src/broadcom/vulkan/v3dv_device.c b/src/broadcom/vulkan/v3dv_device.c index bf93ad0a344..ba55585e975 100644 --- a/src/broadcom/vulkan/v3dv_device.c +++ b/src/broadcom/vulkan/v3dv_device.c @@ -1313,6 +1313,30 @@ v3dv_GetBufferMemoryRequirements(VkDevice _device, align64(buffer->size, pMemoryRequirements->alignment); } +VkResult +v3dv_BindBufferMemory(VkDevice _device, + VkBuffer _buffer, + VkDeviceMemory _memory, + VkDeviceSize memoryOffset) +{ + V3DV_FROM_HANDLE(v3dv_device_memory, mem, _memory); + V3DV_FROM_HANDLE(v3dv_buffer, buffer, _buffer); + + /* Valid usage: + * + * "memoryOffset must be an integer multiple of the alignment member of + * the VkMemoryRequirements structure returned from a call to + * vkGetBufferMemoryRequirements with buffer" + */ + assert(memoryOffset % buffer->alignment == 0); + assert(memoryOffset < mem->size); + + buffer->mem = mem; + buffer->mem_offset = memoryOffset; + + return VK_SUCCESS; +} + VkResult v3dv_CreateBuffer(VkDevice _device, const VkBufferCreateInfo *pCreateInfo, diff --git a/src/broadcom/vulkan/v3dv_private.h b/src/broadcom/vulkan/v3dv_private.h index 268593ba0fb..260fc60d08d 100644 --- a/src/broadcom/vulkan/v3dv_private.h +++ b/src/broadcom/vulkan/v3dv_private.h @@ -299,6 +299,9 @@ struct v3dv_buffer { VkDeviceSize size; VkBufferUsageFlags usage; uint32_t alignment; + + struct v3dv_device_memory *mem; + VkDeviceSize mem_offset; }; struct v3dv_shader_module {