From 7f75ebfda7ef5c8b75c05be8794e2184b49f4c46 Mon Sep 17 00:00:00 2001 From: Yiwei Zhang Date: Fri, 29 Mar 2024 17:08:03 -0700 Subject: [PATCH] venus: use STACK_ARRAY to simplify BindBufferMemory2 Signed-off-by: Yiwei Zhang Part-of: --- src/virtio/vulkan/vn_buffer.c | 31 +++++++++---------------------- 1 file changed, 9 insertions(+), 22 deletions(-) diff --git a/src/virtio/vulkan/vn_buffer.c b/src/virtio/vulkan/vn_buffer.c index 4cadb940fa2..23bdc6c73e3 100644 --- a/src/virtio/vulkan/vn_buffer.c +++ b/src/virtio/vulkan/vn_buffer.c @@ -451,37 +451,24 @@ vn_BindBufferMemory2(VkDevice device, uint32_t bindInfoCount, const VkBindBufferMemoryInfo *pBindInfos) { - struct vn_device *dev = vn_device_from_handle(device); - const VkAllocationCallbacks *alloc = &dev->base.base.alloc; + STACK_ARRAY(VkBindBufferMemoryInfo, bind_infos, bindInfoCount); + typed_memcpy(bind_infos, pBindInfos, bindInfoCount); - VkBindBufferMemoryInfo *local_infos = NULL; for (uint32_t i = 0; i < bindInfoCount; i++) { - const VkBindBufferMemoryInfo *info = &pBindInfos[i]; + VkBindBufferMemoryInfo *info = &bind_infos[i]; struct vn_device_memory *mem = vn_device_memory_from_handle(info->memory); - if (!mem->base_memory) - continue; - - if (!local_infos) { - const size_t size = sizeof(*local_infos) * bindInfoCount; - local_infos = vk_alloc(alloc, size, VN_DEFAULT_ALIGN, - VK_SYSTEM_ALLOCATION_SCOPE_COMMAND); - if (!local_infos) - return vn_error(dev->instance, VK_ERROR_OUT_OF_HOST_MEMORY); - - memcpy(local_infos, pBindInfos, size); + if (mem->base_memory) { + info->memory = vn_device_memory_to_handle(mem->base_memory); + info->memoryOffset += mem->base_offset; } - - local_infos[i].memory = vn_device_memory_to_handle(mem->base_memory); - local_infos[i].memoryOffset += mem->base_offset; } - if (local_infos) - pBindInfos = local_infos; + struct vn_device *dev = vn_device_from_handle(device); vn_async_vkBindBufferMemory2(dev->primary_ring, device, bindInfoCount, - pBindInfos); + bind_infos); - vk_free(alloc, local_infos); + STACK_ARRAY_FINISH(bind_infos); return VK_SUCCESS; }