venus: use common vk_device_memory as vn_device_memory base

This change only updates the handle object creation to use common vk
device memory.

Signed-off-by: Yiwei Zhang <zzyiwei@chromium.org>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/25184>
This commit is contained in:
Yiwei Zhang 2023-09-02 22:24:51 -07:00 committed by Marge Bot
parent 35a3a6338f
commit 6418a93510
3 changed files with 26 additions and 24 deletions

View file

@ -37,6 +37,7 @@
#include "vk_alloc.h"
#include "vk_debug_report.h"
#include "vk_device.h"
#include "vk_device_memory.h"
#include "vk_image.h"
#include "vk_instance.h"
#include "vk_object.h"
@ -147,6 +148,12 @@ struct vn_queue_base {
vn_object_id id;
};
/* base class of vn_device_memory */
struct vn_device_memory_base {
struct vk_device_memory base;
vn_object_id id;
};
/* base class of vn_image */
struct vn_image_base {
struct vk_image base;
@ -371,6 +378,9 @@ vn_object_set_id(void *obj, vn_object_id id, VkObjectType type)
case VK_OBJECT_TYPE_QUEUE:
((struct vn_queue_base *)obj)->id = id;
break;
case VK_OBJECT_TYPE_DEVICE_MEMORY:
((struct vn_device_memory_base *)obj)->id = id;
break;
case VK_OBJECT_TYPE_IMAGE:
((struct vn_image_base *)obj)->id = id;
break;
@ -393,6 +403,8 @@ vn_object_get_id(const void *obj, VkObjectType type)
return ((struct vn_device_base *)obj)->id;
case VK_OBJECT_TYPE_QUEUE:
return ((struct vn_queue_base *)obj)->id;
case VK_OBJECT_TYPE_DEVICE_MEMORY:
return ((struct vn_device_memory_base *)obj)->id;
case VK_OBJECT_TYPE_IMAGE:
return ((struct vn_image_base *)obj)->id;
default:

View file

@ -101,19 +101,18 @@ vn_device_memory_pool_grow_alloc(struct vn_device *dev,
VkDeviceSize size,
struct vn_device_memory **out_mem)
{
const VkAllocationCallbacks *alloc = &dev->base.base.alloc;
const VkMemoryAllocateInfo alloc_info = {
.sType = VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO,
.allocationSize = size,
.memoryTypeIndex = mem_type_index,
};
struct vn_device_memory *mem =
vk_zalloc(alloc, sizeof(*mem), VN_DEFAULT_ALIGN,
VK_SYSTEM_ALLOCATION_SCOPE_DEVICE);
struct vn_device_memory *mem = vk_device_memory_create(
&dev->base.base, &alloc_info, NULL, sizeof(*mem));
if (!mem)
return VK_ERROR_OUT_OF_HOST_MEMORY;
vn_object_base_init(&mem->base, VK_OBJECT_TYPE_DEVICE_MEMORY, &dev->base);
vn_object_set_id(mem, (uintptr_t)mem, VK_OBJECT_TYPE_DEVICE_MEMORY);
mem->size = size;
mem->type =
dev->physical_device->memory_properties.memoryTypes[mem_type_index];
@ -141,8 +140,7 @@ bo_unref:
mem_free:
vn_device_memory_free_simple(dev, mem);
obj_fini:
vn_object_base_fini(&mem->base);
vk_free(alloc, mem);
vk_device_memory_destroy(&dev->base.base, NULL, &mem->base.base);
return result;
}
@ -161,8 +159,6 @@ static void
vn_device_memory_pool_unref(struct vn_device *dev,
struct vn_device_memory *pool_mem)
{
const VkAllocationCallbacks *alloc = &dev->base.base.alloc;
assert(pool_mem->base_bo);
if (!vn_renderer_bo_unref(dev->renderer, pool_mem->base_bo))
@ -173,8 +169,7 @@ vn_device_memory_pool_unref(struct vn_device *dev,
vn_instance_wait_roundtrip(dev->instance, pool_mem->bo_roundtrip_seqno);
vn_device_memory_free_simple(dev, pool_mem);
vn_object_base_fini(&pool_mem->base);
vk_free(alloc, pool_mem);
vk_device_memory_destroy(&dev->base.base, NULL, &pool_mem->base.base);
}
void
@ -572,13 +567,13 @@ vn_AllocateMemory(VkDevice device,
}
}
struct vn_device_memory *mem =
vk_zalloc(alloc, sizeof(*mem), VN_DEFAULT_ALIGN,
VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
struct vn_device_memory *mem = vk_device_memory_create(
&dev->base.base, pAllocateInfo, pAllocator, sizeof(*mem));
if (!mem)
return vn_error(dev->instance, VK_ERROR_OUT_OF_HOST_MEMORY);
vn_object_base_init(&mem->base, VK_OBJECT_TYPE_DEVICE_MEMORY, &dev->base);
vn_object_set_id(mem, (uintptr_t)mem, VK_OBJECT_TYPE_DEVICE_MEMORY);
mem->size = pAllocateInfo->allocationSize;
mem->type = dev->physical_device->memory_properties
.memoryTypes[pAllocateInfo->memoryTypeIndex];
@ -609,8 +604,7 @@ vn_AllocateMemory(VkDevice device,
vn_device_memory_emit_report(dev, mem, /* is_alloc */ true, result);
if (result != VK_SUCCESS) {
vn_object_base_fini(&mem->base);
vk_free(alloc, mem);
vk_device_memory_destroy(&dev->base.base, pAllocator, &mem->base.base);
return vn_error(dev->instance, result);
}
@ -627,9 +621,6 @@ vn_FreeMemory(VkDevice device,
VN_TRACE_FUNC();
struct vn_device *dev = vn_device_from_handle(device);
struct vn_device_memory *mem = vn_device_memory_from_handle(memory);
const VkAllocationCallbacks *alloc =
pAllocator ? pAllocator : &dev->base.base.alloc;
if (!mem)
return;
@ -650,8 +641,7 @@ vn_FreeMemory(VkDevice device,
if (mem->ahb)
vn_android_release_ahb(mem->ahb);
vn_object_base_fini(&mem->base);
vk_free(alloc, mem);
vk_device_memory_destroy(&dev->base.base, pAllocator, &mem->base.base);
}
uint64_t

View file

@ -20,7 +20,7 @@ struct vn_device_memory_pool {
};
struct vn_device_memory {
struct vn_object_base base;
struct vn_device_memory_base base;
VkDeviceSize size;
VkMemoryType type;
@ -68,7 +68,7 @@ struct vn_device_memory {
struct AHardwareBuffer *ahb;
};
VK_DEFINE_NONDISP_HANDLE_CASTS(vn_device_memory,
base.base,
base.base.base,
VkDeviceMemory,
VK_OBJECT_TYPE_DEVICE_MEMORY)