From: Dave Airlie <airl...@redhat.com> This copies the allocator callbacks, along with normal callbacks and physical device into the wsi device.
I'm a bit 50/50 on whether this makes things cleaner so far --- src/amd/vulkan/radv_wsi.c | 17 +++++++++-------- src/amd/vulkan/radv_wsi_x11.c | 2 -- src/intel/vulkan/anv_wsi.c | 17 +++++++++-------- src/intel/vulkan/anv_wsi_x11.c | 2 -- src/vulkan/wsi/wsi_common.h | 28 +++++++++++++--------------- src/vulkan/wsi/wsi_common_wayland.c | 32 +++++++++++++------------------- src/vulkan/wsi/wsi_common_x11.c | 23 +++++++++-------------- src/vulkan/wsi/wsi_common_x11.h | 1 - 8 files changed, 53 insertions(+), 69 deletions(-) diff --git a/src/amd/vulkan/radv_wsi.c b/src/amd/vulkan/radv_wsi.c index 3c3abe9..56eacc5 100644 --- a/src/amd/vulkan/radv_wsi.c +++ b/src/amd/vulkan/radv_wsi.c @@ -37,19 +37,21 @@ radv_init_wsi(struct radv_physical_device *physical_device) memset(physical_device->wsi_device.wsi, 0, sizeof(physical_device->wsi_device.wsi)); + physical_device->wsi_device.alloc = physical_device->instance->alloc; + physical_device->wsi_device.physical_device = anv_physical_device_to_handle(physical_device); + physical_device->wsi_device.cbs = &wsi_cbs; + #ifdef VK_USE_PLATFORM_XCB_KHR - result = wsi_x11_init_wsi(&physical_device->wsi_device, &physical_device->instance->alloc); + result = wsi_x11_init_wsi(&physical_device->wsi_device); if (result != VK_SUCCESS) return result; #endif #ifdef VK_USE_PLATFORM_WAYLAND_KHR - result = wsi_wl_init_wsi(&physical_device->wsi_device, &physical_device->instance->alloc, - radv_physical_device_to_handle(physical_device), - &wsi_cbs); + result = wsi_wl_init_wsi(&physical_device->wsi_device); if (result != VK_SUCCESS) { #ifdef VK_USE_PLATFORM_XCB_KHR - wsi_x11_finish_wsi(&physical_device->wsi_device, &physical_device->instance->alloc); + wsi_x11_finish_wsi(&physical_device->wsi_device); #endif return result; } @@ -62,10 +64,10 @@ void radv_finish_wsi(struct radv_physical_device *physical_device) { #ifdef VK_USE_PLATFORM_WAYLAND_KHR - wsi_wl_finish_wsi(&physical_device->wsi_device, &physical_device->instance->alloc); + wsi_wl_finish_wsi(&physical_device->wsi_device); #endif #ifdef VK_USE_PLATFORM_XCB_KHR - wsi_x11_finish_wsi(&physical_device->wsi_device, &physical_device->instance->alloc); + wsi_x11_finish_wsi(&physical_device->wsi_device); #endif } @@ -91,7 +93,6 @@ VkResult radv_GetPhysicalDeviceSurfaceSupportKHR( struct wsi_interface *iface = device->wsi_device.wsi[surface->platform]; return iface->get_support(surface, &device->wsi_device, - &device->instance->alloc, queueFamilyIndex, pSupported); } diff --git a/src/amd/vulkan/radv_wsi_x11.c b/src/amd/vulkan/radv_wsi_x11.c index 946b990..66c9bbb 100644 --- a/src/amd/vulkan/radv_wsi_x11.c +++ b/src/amd/vulkan/radv_wsi_x11.c @@ -44,7 +44,6 @@ VkBool32 radv_GetPhysicalDeviceXcbPresentationSupportKHR( return wsi_get_physical_device_xcb_presentation_support( &device->wsi_device, - &device->instance->alloc, queueFamilyIndex, connection, visual_id); } @@ -58,7 +57,6 @@ VkBool32 radv_GetPhysicalDeviceXlibPresentationSupportKHR( return wsi_get_physical_device_xcb_presentation_support( &device->wsi_device, - &device->instance->alloc, queueFamilyIndex, XGetXCBConnection(dpy), visualID); } diff --git a/src/intel/vulkan/anv_wsi.c b/src/intel/vulkan/anv_wsi.c index f816735..3520300 100644 --- a/src/intel/vulkan/anv_wsi.c +++ b/src/intel/vulkan/anv_wsi.c @@ -36,19 +36,21 @@ anv_init_wsi(struct anv_physical_device *physical_device) memset(physical_device->wsi_device.wsi, 0, sizeof(physical_device->wsi_device.wsi)); + physical_device->wsi_device.alloc = physical_device->instance->alloc; + physical_device->wsi_device.physical_device = anv_physical_device_to_handle(physical_device); + physical_device->wsi_device.cbs = &wsi_cbs; + #ifdef VK_USE_PLATFORM_XCB_KHR - result = wsi_x11_init_wsi(&physical_device->wsi_device, &physical_device->instance->alloc); + result = wsi_x11_init_wsi(&physical_device->wsi_device); if (result != VK_SUCCESS) return result; #endif #ifdef VK_USE_PLATFORM_WAYLAND_KHR - result = wsi_wl_init_wsi(&physical_device->wsi_device, &physical_device->instance->alloc, - anv_physical_device_to_handle(physical_device), - &wsi_cbs); + result = wsi_wl_init_wsi(&physical_device->wsi_device); if (result != VK_SUCCESS) { #ifdef VK_USE_PLATFORM_XCB_KHR - wsi_x11_finish_wsi(&physical_device->wsi_device, &physical_device->instance->alloc); + wsi_x11_finish_wsi(&physical_device->wsi_device); #endif return result; } @@ -61,10 +63,10 @@ void anv_finish_wsi(struct anv_physical_device *physical_device) { #ifdef VK_USE_PLATFORM_WAYLAND_KHR - wsi_wl_finish_wsi(&physical_device->wsi_device, &physical_device->instance->alloc); + wsi_wl_finish_wsi(&physical_device->wsi_device); #endif #ifdef VK_USE_PLATFORM_XCB_KHR - wsi_x11_finish_wsi(&physical_device->wsi_device, &physical_device->instance->alloc); + wsi_x11_finish_wsi(&physical_device->wsi_device); #endif } @@ -90,7 +92,6 @@ VkResult anv_GetPhysicalDeviceSurfaceSupportKHR( struct wsi_interface *iface = device->wsi_device.wsi[surface->platform]; return iface->get_support(surface, &device->wsi_device, - &device->instance->alloc, queueFamilyIndex, pSupported); } diff --git a/src/intel/vulkan/anv_wsi_x11.c b/src/intel/vulkan/anv_wsi_x11.c index 60bc568..e8d70bb 100644 --- a/src/intel/vulkan/anv_wsi_x11.c +++ b/src/intel/vulkan/anv_wsi_x11.c @@ -40,7 +40,6 @@ VkBool32 anv_GetPhysicalDeviceXcbPresentationSupportKHR( return wsi_get_physical_device_xcb_presentation_support( &device->wsi_device, - &device->instance->alloc, queueFamilyIndex, connection, visual_id); } @@ -54,7 +53,6 @@ VkBool32 anv_GetPhysicalDeviceXlibPresentationSupportKHR( return wsi_get_physical_device_xcb_presentation_support( &device->wsi_device, - &device->instance->alloc, queueFamilyIndex, XGetXCBConnection(dpy), visualID); } diff --git a/src/vulkan/wsi/wsi_common.h b/src/vulkan/wsi/wsi_common.h index 1f4e0ae..6d6fc4a 100644 --- a/src/vulkan/wsi/wsi_common.h +++ b/src/vulkan/wsi/wsi_common.h @@ -68,7 +68,6 @@ struct wsi_swapchain { struct wsi_interface { VkResult (*get_support)(VkIcdSurfaceBase *surface, struct wsi_device *wsi_device, - const VkAllocationCallbacks *alloc, uint32_t queueFamilyIndex, VkBool32* pSupported); VkResult (*get_capabilities)(VkIcdSurfaceBase *surface, @@ -91,16 +90,19 @@ struct wsi_interface { #define VK_ICD_WSI_PLATFORM_MAX 5 -struct wsi_device { - struct wsi_interface * wsi[VK_ICD_WSI_PLATFORM_MAX]; -}; - struct wsi_callbacks { void (*get_phys_device_format_properties)(VkPhysicalDevice physicalDevice, VkFormat format, VkFormatProperties *pFormatProperties); }; +struct wsi_device { + VkAllocationCallbacks alloc; + VkPhysicalDevice physical_device; + const struct wsi_callbacks *cbs; + struct wsi_interface * wsi[VK_ICD_WSI_PLATFORM_MAX]; +}; + #define WSI_DEFINE_NONDISP_HANDLE_CASTS(__wsi_type, __VkType) \ \ static inline struct __wsi_type * \ @@ -118,16 +120,12 @@ struct wsi_callbacks { WSI_DEFINE_NONDISP_HANDLE_CASTS(_VkIcdSurfaceBase, VkSurfaceKHR) WSI_DEFINE_NONDISP_HANDLE_CASTS(wsi_swapchain, VkSwapchainKHR) -VkResult wsi_x11_init_wsi(struct wsi_device *wsi_device, - const VkAllocationCallbacks *alloc); -void wsi_x11_finish_wsi(struct wsi_device *wsi_device, - const VkAllocationCallbacks *alloc); -VkResult wsi_wl_init_wsi(struct wsi_device *wsi_device, - const VkAllocationCallbacks *alloc, - VkPhysicalDevice physical_device, - const struct wsi_callbacks *cbs); -void wsi_wl_finish_wsi(struct wsi_device *wsi_device, - const VkAllocationCallbacks *alloc); +VkResult wsi_x11_init_wsi(struct wsi_device *wsi_device); +void wsi_x11_finish_wsi(struct wsi_device *wsi_device); + +VkResult wsi_wl_init_wsi(struct wsi_device *wsi_device); +void wsi_wl_finish_wsi(struct wsi_device *wsi_device); + #endif diff --git a/src/vulkan/wsi/wsi_common_wayland.c b/src/vulkan/wsi/wsi_common_wayland.c index ecb1ab5..2f4e11d 100644 --- a/src/vulkan/wsi/wsi_common_wayland.c +++ b/src/vulkan/wsi/wsi_common_wayland.c @@ -59,8 +59,7 @@ struct wsi_wl_display { struct wsi_wayland { struct wsi_interface base; - const VkAllocationCallbacks *alloc; - VkPhysicalDevice physical_device; + struct wsi_device *wsi_device; pthread_mutex_t mutex; /* Hash table of wl_display -> wsi_wl_display mappings */ @@ -81,8 +80,8 @@ wsi_wl_display_add_vk_format(struct wsi_wl_display *display, VkFormat format) /* Don't add formats that aren't renderable. */ VkFormatProperties props; - display->wsi_wl->cbs->get_phys_device_format_properties(display->wsi_wl->physical_device, - format, &props); + display->wsi_wl->wsi_device->cbs->get_phys_device_format_properties(display->wsi_wl->wsi_device->physical_device, + format, &props); if (!(props.optimalTilingFeatures & VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT)) return; @@ -251,14 +250,14 @@ wsi_wl_display_destroy(struct wsi_wayland *wsi, struct wsi_wl_display *display) u_vector_finish(&display->formats); if (display->drm) wl_drm_destroy(display->drm); - vk_free(wsi->alloc, display); + vk_free(&wsi->wsi_device->alloc, display); } static struct wsi_wl_display * wsi_wl_display_create(struct wsi_wayland *wsi, struct wl_display *wl_display) { struct wsi_wl_display *display = - vk_alloc(wsi->alloc, sizeof(*display), 8, + vk_alloc(&wsi->wsi_device->alloc, sizeof(*display), 8, VK_SYSTEM_ALLOCATION_SCOPE_INSTANCE); if (!display) return NULL; @@ -348,7 +347,6 @@ wsi_wl_get_presentation_support(struct wsi_device *wsi_device, static VkResult wsi_wl_surface_get_support(VkIcdSurfaceBase *surface, struct wsi_device *wsi_device, - const VkAllocationCallbacks *alloc, uint32_t queueFamilyIndex, VkBool32* pSupported) { @@ -753,24 +751,21 @@ fail: } VkResult -wsi_wl_init_wsi(struct wsi_device *wsi_device, - const VkAllocationCallbacks *alloc, - VkPhysicalDevice physical_device, - const struct wsi_callbacks *cbs) +wsi_wl_init_wsi(struct wsi_device *wsi_device) { struct wsi_wayland *wsi; VkResult result; - wsi = vk_alloc(alloc, sizeof(*wsi), 8, + wsi = vk_alloc(&wsi_device->alloc, sizeof(*wsi), 8, VK_SYSTEM_ALLOCATION_SCOPE_INSTANCE); if (!wsi) { result = VK_ERROR_OUT_OF_HOST_MEMORY; goto fail; } - wsi->physical_device = physical_device; - wsi->alloc = alloc; - wsi->cbs = cbs; + + wsi->wsi_device = wsi_device; + int ret = pthread_mutex_init(&wsi->mutex, NULL); if (ret != 0) { if (ret == ENOMEM) { @@ -804,7 +799,7 @@ fail_mutex: pthread_mutex_destroy(&wsi->mutex); fail_alloc: - vk_free(alloc, wsi); + vk_free(&wsi_device->alloc, wsi); fail: wsi_device->wsi[VK_ICD_WSI_PLATFORM_WAYLAND] = NULL; @@ -812,8 +807,7 @@ fail: } void -wsi_wl_finish_wsi(struct wsi_device *wsi_device, - const VkAllocationCallbacks *alloc) +wsi_wl_finish_wsi(struct wsi_device *wsi_device) { struct wsi_wayland *wsi = (struct wsi_wayland *)wsi_device->wsi[VK_ICD_WSI_PLATFORM_WAYLAND]; @@ -823,6 +817,6 @@ wsi_wl_finish_wsi(struct wsi_device *wsi_device, pthread_mutex_destroy(&wsi->mutex); - vk_free(alloc, wsi); + vk_free(&wsi_device->alloc, wsi); } } diff --git a/src/vulkan/wsi/wsi_common_x11.c b/src/vulkan/wsi/wsi_common_x11.c index 3bb8f35..090a2f2 100644 --- a/src/vulkan/wsi/wsi_common_x11.c +++ b/src/vulkan/wsi/wsi_common_x11.c @@ -100,7 +100,6 @@ wsi_x11_connection_destroy(const VkAllocationCallbacks *alloc, static struct wsi_x11_connection * wsi_x11_get_connection(struct wsi_device *wsi_dev, - const VkAllocationCallbacks *alloc, xcb_connection_t *conn) { struct wsi_x11 *wsi = @@ -116,14 +115,14 @@ wsi_x11_get_connection(struct wsi_device *wsi_dev, pthread_mutex_unlock(&wsi->mutex); struct wsi_x11_connection *wsi_conn = - wsi_x11_connection_create(alloc, conn); + wsi_x11_connection_create(&wsi_dev->alloc, conn); pthread_mutex_lock(&wsi->mutex); entry = _mesa_hash_table_search(wsi->connections, conn); if (entry) { /* Oops, someone raced us to it */ - wsi_x11_connection_destroy(alloc, wsi_conn); + wsi_x11_connection_destroy(&wsi_dev->alloc, wsi_conn); } else { entry = _mesa_hash_table_insert(wsi->connections, conn, wsi_conn); } @@ -247,13 +246,12 @@ visual_has_alpha(xcb_visualtype_t *visual, unsigned depth) VkBool32 wsi_get_physical_device_xcb_presentation_support( struct wsi_device *wsi_device, - VkAllocationCallbacks *alloc, uint32_t queueFamilyIndex, xcb_connection_t* connection, xcb_visualid_t visual_id) { struct wsi_x11_connection *wsi_conn = - wsi_x11_get_connection(wsi_device, alloc, connection); + wsi_x11_get_connection(wsi_device, connection); if (!wsi_conn->has_dri3) { fprintf(stderr, "vulkan: No DRI3 support\n"); @@ -291,7 +289,6 @@ x11_surface_get_window(VkIcdSurfaceBase *icd_surface) static VkResult x11_surface_get_support(VkIcdSurfaceBase *icd_surface, struct wsi_device *wsi_device, - const VkAllocationCallbacks *alloc, uint32_t queueFamilyIndex, VkBool32* pSupported) { @@ -299,7 +296,7 @@ x11_surface_get_support(VkIcdSurfaceBase *icd_surface, xcb_window_t window = x11_surface_get_window(icd_surface); struct wsi_x11_connection *wsi_conn = - wsi_x11_get_connection(wsi_device, alloc, conn); + wsi_x11_get_connection(wsi_device, conn); if (!wsi_conn) return VK_ERROR_OUT_OF_HOST_MEMORY; @@ -815,13 +812,12 @@ fail_register: } VkResult -wsi_x11_init_wsi(struct wsi_device *wsi_device, - const VkAllocationCallbacks *alloc) +wsi_x11_init_wsi(struct wsi_device *wsi_device) { struct wsi_x11 *wsi; VkResult result; - wsi = vk_alloc(alloc, sizeof(*wsi), 8, + wsi = vk_alloc(&wsi_device->alloc, sizeof(*wsi), 8, VK_SYSTEM_ALLOCATION_SCOPE_INSTANCE); if (!wsi) { result = VK_ERROR_OUT_OF_HOST_MEMORY; @@ -861,7 +857,7 @@ wsi_x11_init_wsi(struct wsi_device *wsi_device, fail_mutex: pthread_mutex_destroy(&wsi->mutex); fail_alloc: - vk_free(alloc, wsi); + vk_free(&wsi_device->alloc, wsi); fail: wsi_device->wsi[VK_ICD_WSI_PLATFORM_XCB] = NULL; wsi_device->wsi[VK_ICD_WSI_PLATFORM_XLIB] = NULL; @@ -870,8 +866,7 @@ fail: } void -wsi_x11_finish_wsi(struct wsi_device *wsi_device, - const VkAllocationCallbacks *alloc) +wsi_x11_finish_wsi(struct wsi_device *wsi_device) { struct wsi_x11 *wsi = (struct wsi_x11 *)wsi_device->wsi[VK_ICD_WSI_PLATFORM_XCB]; @@ -881,6 +876,6 @@ wsi_x11_finish_wsi(struct wsi_device *wsi_device, pthread_mutex_destroy(&wsi->mutex); - vk_free(alloc, wsi); + vk_free(&wsi_device->alloc, wsi); } } diff --git a/src/vulkan/wsi/wsi_common_x11.h b/src/vulkan/wsi/wsi_common_x11.h index 7166f09..e4b1e94 100644 --- a/src/vulkan/wsi/wsi_common_x11.h +++ b/src/vulkan/wsi/wsi_common_x11.h @@ -27,7 +27,6 @@ VkBool32 wsi_get_physical_device_xcb_presentation_support( struct wsi_device *wsi_device, - VkAllocationCallbacks *alloc, uint32_t queueFamilyIndex, xcb_connection_t* connection, xcb_visualid_t visual_id); -- 2.5.5 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev