From 9c0079e0ee1ad18e9c75f6e5a56188a52acb9837 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Alejandro=20Pi=C3=B1eiro?= Date: Wed, 27 Jan 2021 13:46:58 +0100 Subject: [PATCH] v3dv: move to subclassing instance/physical device This moves to using the common base structs for these two objects, but doesn't use any of the new features yet. Reviewed-by: Iago Toral Quiroga Reviewed-by: Jason Ekstrand Part-of: --- src/broadcom/vulkan/v3dv_device.c | 53 ++++++++++++++++++++-------------- src/broadcom/vulkan/v3dv_private.h | 8 ++--- src/broadcom/vulkan/v3dv_wsi.c | 6 ++-- src/broadcom/vulkan/v3dv_wsi_display.c | 2 +- src/broadcom/vulkan/v3dv_wsi_wayland.c | 2 +- src/broadcom/vulkan/v3dv_wsi_x11.c | 4 +-- 6 files changed, 43 insertions(+), 32 deletions(-) diff --git a/src/broadcom/vulkan/v3dv_device.c b/src/broadcom/vulkan/v3dv_device.c index 63eacba..dedab8a 100644 --- a/src/broadcom/vulkan/v3dv_device.c +++ b/src/broadcom/vulkan/v3dv_device.c @@ -138,17 +138,21 @@ v3dv_CreateInstance(const VkInstanceCreateInfo *pCreateInfo, enabled_extensions.extensions[idx] = true; } + if (pAllocator == NULL) + pAllocator = &default_alloc; + instance = vk_alloc2(&default_alloc, pAllocator, sizeof(*instance), 8, VK_SYSTEM_ALLOCATION_SCOPE_INSTANCE); if (!instance) return vk_error(NULL, VK_ERROR_OUT_OF_HOST_MEMORY); - vk_object_base_init(NULL, &instance->base, VK_OBJECT_TYPE_INSTANCE); + result = vk_instance_init(&instance->vk, NULL, NULL, + pCreateInfo, pAllocator); - if (pAllocator) - instance->alloc = *pAllocator; - else - instance->alloc = default_alloc; + if (result != VK_SUCCESS) { + vk_free(pAllocator, instance); + return vk_error(instance, result); + } v3d_process_debug_variable(); @@ -157,12 +161,12 @@ v3dv_CreateInstance(const VkInstanceCreateInfo *pCreateInfo, const VkApplicationInfo *app = pCreateInfo->pApplicationInfo; instance->app_info.app_name = - vk_strdup(&instance->alloc, app->pApplicationName, + vk_strdup(&instance->vk.alloc, app->pApplicationName, VK_SYSTEM_ALLOCATION_SCOPE_INSTANCE); instance->app_info.app_version = app->applicationVersion; instance->app_info.engine_name = - vk_strdup(&instance->alloc, app->pEngineName, + vk_strdup(&instance->vk.alloc, app->pEngineName, VK_SYSTEM_ALLOCATION_SCOPE_INSTANCE); instance->app_info.engine_version = app->engineVersion; @@ -222,7 +226,7 @@ v3dv_CreateInstance(const VkInstanceCreateInfo *pCreateInfo, result = vk_debug_report_instance_init(&instance->debug_report_callbacks); if (result != VK_SUCCESS) { - vk_object_base_finish(&instance->base); + vk_instance_finish(&instance->vk); vk_free2(&default_alloc, pAllocator, instance); return vk_error(NULL, result); } @@ -284,7 +288,7 @@ physical_device_finish(struct v3dv_physical_device *device) v3d_simulator_destroy(device->sim_file); #endif - vk_object_base_finish(&device->base); + vk_physical_device_finish(&device->vk); mtx_destroy(&device->mutex); } @@ -303,8 +307,8 @@ v3dv_DestroyInstance(VkInstance _instance, physical_device_finish(&instance->physicalDevice); } - vk_free(&instance->alloc, (char *)instance->app_info.app_name); - vk_free(&instance->alloc, (char *)instance->app_info.engine_name); + vk_free(&instance->vk.alloc, (char *)instance->app_info.app_name); + vk_free(&instance->vk.alloc, (char *)instance->app_info.engine_name); VG(VALGRIND_DESTROY_MEMPOOL(instance)); @@ -312,8 +316,8 @@ v3dv_DestroyInstance(VkInstance _instance, glsl_type_singleton_decref(); - vk_object_base_finish(&instance->base); - vk_free(&instance->alloc, instance); + vk_instance_finish(&instance->vk); + vk_free(&instance->vk.alloc, instance); } static uint64_t @@ -694,14 +698,19 @@ physical_device_init(struct v3dv_physical_device *device, VkResult result = VK_SUCCESS; int32_t master_fd = -1; - vk_object_base_init(NULL, &device->base, VK_OBJECT_TYPE_PHYSICAL_DEVICE); + result = vk_physical_device_init(&device->vk, &instance->vk, NULL, NULL); + + if (result != VK_SUCCESS) + goto fail; device->instance = instance; assert(drm_render_device); const char *path = drm_render_device->nodes[DRM_NODE_RENDER]; int32_t render_fd = open(path, O_RDWR | O_CLOEXEC); - if (render_fd < 0) - return vk_error(instance, VK_ERROR_INCOMPATIBLE_DRIVER); + if (render_fd < 0) { + result = VK_ERROR_INCOMPATIBLE_DRIVER; + goto fail; + } /* If we are running on VK_KHR_display we need to acquire the master * display device now for the v3dv_wsi_init() call below. For anything else @@ -786,6 +795,8 @@ physical_device_init(struct v3dv_physical_device *device, return VK_SUCCESS; fail: + vk_physical_device_finish(&device->vk); + if (render_fd >= 0) close(render_fd); if (master_fd >= 0) @@ -1573,14 +1584,14 @@ v3dv_CreateDevice(VkPhysicalDevice physicalDevice, return vk_error(instance, VK_ERROR_INITIALIZATION_FAILED); } - device = vk_zalloc2(&physical_device->instance->alloc, pAllocator, + device = vk_zalloc2(&physical_device->instance->vk.alloc, pAllocator, sizeof(*device), 8, VK_SYSTEM_ALLOCATION_SCOPE_DEVICE); if (!device) return vk_error(instance, VK_ERROR_OUT_OF_HOST_MEMORY); result = vk_device_init(&device->vk, NULL, NULL, pCreateInfo, - &physical_device->instance->alloc, pAllocator); + &physical_device->instance->vk.alloc, pAllocator); if (result != VK_SUCCESS) { vk_free(&device->vk.alloc, device); return vk_error(instance, result); @@ -1592,7 +1603,7 @@ v3dv_CreateDevice(VkPhysicalDevice physicalDevice, if (pAllocator) device->vk.alloc = *pAllocator; else - device->vk.alloc = physical_device->instance->alloc; + device->vk.alloc = physical_device->instance->vk.alloc; pthread_mutex_init(&device->mutex, NULL); @@ -1684,7 +1695,7 @@ v3dv_CreateDebugReportCallbackEXT(VkInstance _instance, { V3DV_FROM_HANDLE(v3dv_instance, instance, _instance); return vk_create_debug_report_callback(&instance->debug_report_callbacks, - pCreateInfo, pAllocator, &instance->alloc, + pCreateInfo, pAllocator, &instance->vk.alloc, pCallback); } @@ -1695,7 +1706,7 @@ v3dv_DestroyDebugReportCallbackEXT(VkInstance _instance, { V3DV_FROM_HANDLE(v3dv_instance, instance, _instance); vk_destroy_debug_report_callback(&instance->debug_report_callbacks, - _callback, pAllocator, &instance->alloc); + _callback, pAllocator, &instance->vk.alloc); } static VkResult diff --git a/src/broadcom/vulkan/v3dv_private.h b/src/broadcom/vulkan/v3dv_private.h index 8e51252..853af89 100644 --- a/src/broadcom/vulkan/v3dv_private.h +++ b/src/broadcom/vulkan/v3dv_private.h @@ -37,6 +37,8 @@ #include #include "vk_device.h" +#include "vk_instance.h" +#include "vk_physical_device.h" #include @@ -125,7 +127,7 @@ struct v3dv_instance; struct v3d_simulator_file; struct v3dv_physical_device { - struct vk_object_base base; + struct vk_physical_device vk; struct v3dv_instance *instance; @@ -184,9 +186,7 @@ struct v3dv_app_info { }; struct v3dv_instance { - struct vk_object_base base; - - VkAllocationCallbacks alloc; + struct vk_instance vk; struct v3dv_app_info app_info; diff --git a/src/broadcom/vulkan/v3dv_wsi.c b/src/broadcom/vulkan/v3dv_wsi.c index 1ef2225..cf7e545 100644 --- a/src/broadcom/vulkan/v3dv_wsi.c +++ b/src/broadcom/vulkan/v3dv_wsi.c @@ -44,7 +44,7 @@ v3dv_wsi_init(struct v3dv_physical_device *physical_device) result = wsi_device_init(&physical_device->wsi_device, v3dv_physical_device_to_handle(physical_device), v3dv_wsi_proc_addr, - &physical_device->instance->alloc, + &physical_device->instance->vk.alloc, physical_device->master_fd, NULL, false); if (result != VK_SUCCESS) @@ -59,7 +59,7 @@ void v3dv_wsi_finish(struct v3dv_physical_device *physical_device) { wsi_device_finish(&physical_device->wsi_device, - &physical_device->instance->alloc); + &physical_device->instance->vk.alloc); } void v3dv_DestroySurfaceKHR( @@ -73,7 +73,7 @@ void v3dv_DestroySurfaceKHR( if (!surface) return; - vk_free2(&instance->alloc, pAllocator, surface); + vk_free2(&instance->vk.alloc, pAllocator, surface); } VkResult v3dv_GetPhysicalDeviceSurfaceSupportKHR( diff --git a/src/broadcom/vulkan/v3dv_wsi_display.c b/src/broadcom/vulkan/v3dv_wsi_display.c index 2e43a5f..d278dfc 100644 --- a/src/broadcom/vulkan/v3dv_wsi_display.c +++ b/src/broadcom/vulkan/v3dv_wsi_display.c @@ -129,7 +129,7 @@ v3dv_CreateDisplayPlaneSurfaceKHR( if (allocator) alloc = allocator; else - alloc = &instance->alloc; + alloc = &instance->vk.alloc; return wsi_create_display_surface(_instance, alloc, create_info, surface); diff --git a/src/broadcom/vulkan/v3dv_wsi_wayland.c b/src/broadcom/vulkan/v3dv_wsi_wayland.c index f769449..a5ebcc7 100644 --- a/src/broadcom/vulkan/v3dv_wsi_wayland.c +++ b/src/broadcom/vulkan/v3dv_wsi_wayland.c @@ -49,7 +49,7 @@ VkResult v3dv_CreateWaylandSurfaceKHR( if (pAllocator) alloc = pAllocator; else - alloc = &instance->alloc; + alloc = &instance->vk.alloc; return wsi_create_wl_surface(alloc, pCreateInfo, pSurface); } diff --git a/src/broadcom/vulkan/v3dv_wsi_x11.c b/src/broadcom/vulkan/v3dv_wsi_x11.c index 4421dc3..333f919 100644 --- a/src/broadcom/vulkan/v3dv_wsi_x11.c +++ b/src/broadcom/vulkan/v3dv_wsi_x11.c @@ -74,7 +74,7 @@ VkResult v3dv_CreateXcbSurfaceKHR( if (pAllocator) alloc = pAllocator; else - alloc = &instance->alloc; + alloc = &instance->vk.alloc; return wsi_create_xcb_surface(alloc, pCreateInfo, pSurface); } @@ -93,7 +93,7 @@ VkResult v3dv_CreateXlibSurfaceKHR( if (pAllocator) alloc = pAllocator; else - alloc = &instance->alloc; + alloc = &instance->vk.alloc; return wsi_create_xlib_surface(alloc, pCreateInfo, pSurface); } -- 2.7.4