vulkan: Add a vk_object_multialloc helper
authorJason Ekstrand <jason@jlekstrand.net>
Thu, 8 Apr 2021 21:46:04 +0000 (16:46 -0500)
committerMarge Bot <eric+marge@anholt.net>
Sat, 10 Apr 2021 02:18:02 +0000 (02:18 +0000)
Reviewed-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/10123>

src/vulkan/util/vk_object.c
src/vulkan/util/vk_object.h

index 4d2ab2c..af2c72b 100644 (file)
@@ -91,6 +91,39 @@ vk_object_zalloc(struct vk_device *device,
    return ptr;
 }
 
+void *
+vk_object_multialloc(struct vk_device *device,
+                     struct vk_multialloc *ma,
+                     const VkAllocationCallbacks *alloc,
+                     VkObjectType obj_type)
+{
+   void *ptr = vk_multialloc_alloc2(ma, &device->alloc, alloc,
+                                    VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
+   if (ptr == NULL)
+      return NULL;
+
+   vk_object_base_init(device, (struct vk_object_base *)ptr, obj_type);
+
+   return ptr;
+}
+
+void *
+vk_object_multizalloc(struct vk_device *device,
+                      struct vk_multialloc *ma,
+                      const VkAllocationCallbacks *alloc,
+                      VkObjectType obj_type)
+{
+   void *ptr = vk_multialloc_alloc2(ma, &device->alloc, alloc,
+                                    VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
+   if (ptr == NULL)
+      return NULL;
+
+   memset(ptr, 0, ma->size);
+   vk_object_base_init(device, (struct vk_object_base *)ptr, obj_type);
+
+   return ptr;
+}
+
 void
 vk_object_free(struct vk_device *device,
                const VkAllocationCallbacks *alloc,
index 750c040..c9c751a 100644 (file)
@@ -120,6 +120,20 @@ vk_object_zalloc(struct vk_device *device,
                 size_t size,
                 VkObjectType vk_obj_type);
 
+struct vk_multialloc;
+
+void *
+vk_object_multialloc(struct vk_device *device,
+                     struct vk_multialloc *ma,
+                     const VkAllocationCallbacks *alloc,
+                     VkObjectType vk_obj_type);
+
+void *
+vk_object_multizalloc(struct vk_device *device,
+                      struct vk_multialloc *ma,
+                      const VkAllocationCallbacks *alloc,
+                      VkObjectType vk_obj_type);
+
 void
 vk_object_free(struct vk_device *device,
                const VkAllocationCallbacks *alloc,