[Mesa-dev] [PATCH 1/4] vulkan/wsi/wayland: Refactor wsi_wl_display code

Jason Ekstrand jason at jlekstrand.net
Tue Sep 26 22:55:02 UTC 2017


We convert it over to an inti/finish model and make create/destroy
wrappers for the former.

Cc: mesa-stable at lists.freedesktop.org
---
 src/vulkan/wsi/wsi_common_wayland.c | 47 ++++++++++++++++++++++++++-----------
 1 file changed, 33 insertions(+), 14 deletions(-)

diff --git a/src/vulkan/wsi/wsi_common_wayland.c b/src/vulkan/wsi/wsi_common_wayland.c
index b726d98..62fc97c 100644
--- a/src/vulkan/wsi/wsi_common_wayland.c
+++ b/src/vulkan/wsi/wsi_common_wayland.c
@@ -249,7 +249,7 @@ static const struct wl_registry_listener registry_listener = {
 };
 
 static void
-wsi_wl_display_destroy(struct wsi_wayland *wsi, struct wsi_wl_display *display)
+wsi_wl_display_finish(struct wsi_wl_display *display)
 {
    u_vector_finish(&display->formats);
    if (display->drm)
@@ -258,21 +258,16 @@ wsi_wl_display_destroy(struct wsi_wayland *wsi, struct wsi_wl_display *display)
       wl_proxy_wrapper_destroy(display->wl_display_wrapper);
    if (display->queue)
       wl_event_queue_destroy(display->queue);
-   vk_free(wsi->alloc, display);
 }
 
-static struct wsi_wl_display *
-wsi_wl_display_create(struct wsi_wayland *wsi, struct wl_display *wl_display)
+static int
+wsi_wl_display_init(struct wsi_wayland *wsi_wl,
+                    struct wsi_wl_display *display,
+                    struct wl_display *wl_display)
 {
-   struct wsi_wl_display *display =
-      vk_alloc(wsi->alloc, sizeof(*display), 8,
-               VK_SYSTEM_ALLOCATION_SCOPE_INSTANCE);
-   if (!display)
-      return NULL;
-
    memset(display, 0, sizeof(*display));
 
-   display->wsi_wl = wsi;
+   display->wsi_wl = wsi_wl;
    display->wl_display = wl_display;
 
    if (!u_vector_init(&display->formats, sizeof(VkFormat), 8))
@@ -312,15 +307,39 @@ wsi_wl_display_create(struct wsi_wayland *wsi, struct wl_display *wl_display)
    /* We don't need this anymore */
    wl_registry_destroy(registry);
 
-   return display;
+   return 0;
 
 fail_registry:
    if (registry)
       wl_registry_destroy(registry);
 
 fail:
-   wsi_wl_display_destroy(wsi, display);
-   return NULL;
+   wsi_wl_display_finish(display);
+   return -1;
+}
+
+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_SYSTEM_ALLOCATION_SCOPE_INSTANCE);
+   if (!display)
+      return NULL;
+
+   if (wsi_wl_display_init(wsi, display, wl_display)) {
+      vk_free(wsi->alloc, display);
+      return NULL;
+   }
+
+   return display;
+}
+
+static void
+wsi_wl_display_destroy(struct wsi_wayland *wsi, struct wsi_wl_display *display)
+{
+   wsi_wl_display_finish(display);
+   vk_free(wsi->alloc, display);
 }
 
 static struct wsi_wl_display *
-- 
2.5.0.400.gff86faf



More information about the mesa-dev mailing list