[Mesa-dev] [PATCH 14/22] anv/wsi: move further away from passing anv displays around

Jason Ekstrand jason at jlekstrand.net
Tue Oct 18 19:52:06 UTC 2016


On Sun, Oct 16, 2016 at 9:24 PM, Dave Airlie <airlied at gmail.com> wrote:

> From: Dave Airlie <airlied at redhat.com>
>
> ---
>  src/intel/vulkan/anv_wsi.c         | 28 +++++++++++++++++++---------
>  src/intel/vulkan/anv_wsi.h         |  3 ++-
>  src/intel/vulkan/anv_wsi_wayland.c | 21 +++++++--------------
>  src/intel/vulkan/anv_wsi_x11.c     | 22 +++++++---------------
>  4 files changed, 35 insertions(+), 39 deletions(-)
>
> diff --git a/src/intel/vulkan/anv_wsi.c b/src/intel/vulkan/anv_wsi.c
> index 514a29f..89bf780 100644
> --- a/src/intel/vulkan/anv_wsi.c
> +++ b/src/intel/vulkan/anv_wsi.c
> @@ -253,17 +253,21 @@ VkResult anv_CreateSwapchainKHR(
>     struct anv_wsi_interface *iface =
>        device->instance->physicalDevice.wsi_device.wsi[surface->platform];
>     struct anv_swapchain *swapchain;
> +   const VkAllocationCallbacks *alloc;
>
> -   VkResult result = iface->create_swapchain(surface, device,
> pCreateInfo,
> -                                             pAllocator,
> &anv_wsi_image_fns,
> +   if (pAllocator)
> +     alloc = pAllocator;
> +   else
> +     alloc = &device->alloc;
> +   VkResult result = iface->create_swapchain(surface, _device,
> +                                             &device->instance->
> physicalDevice.wsi_device,
> +                                             pCreateInfo,
> +                                             alloc, &anv_wsi_image_fns,
>                                               &swapchain);
>     if (result != VK_SUCCESS)
>        return result;
>
> -   if (pAllocator)
> -      swapchain->alloc = *pAllocator;
> -   else
> -      swapchain->alloc = device->alloc;
> +   swapchain->alloc = *alloc;
>
>     for (unsigned i = 0; i < ARRAY_SIZE(swapchain->fences); i++)
>        swapchain->fences[i] = VK_NULL_HANDLE;
> @@ -274,18 +278,24 @@ VkResult anv_CreateSwapchainKHR(
>  }
>
>  void anv_DestroySwapchainKHR(
> -    VkDevice                                     device,
> +    VkDevice                                     _device,
>      VkSwapchainKHR                               _swapchain,
>      const VkAllocationCallbacks*                 pAllocator)
>  {
> +   ANV_FROM_HANDLE(anv_device, device, _device);
>     ANV_FROM_HANDLE(anv_swapchain, swapchain, _swapchain);
> +   const VkAllocationCallbacks *alloc;
>
> +   if (pAllocator)
> +     alloc = pAllocator;
> +   else
> +     alloc = &device->alloc;
>

This isn't needed.  The client is required to pass the same allocator in
(if any) to this function as it does to Create.  We can just use
swapchain->alloc


>     for (unsigned i = 0; i < ARRAY_SIZE(swapchain->fences); i++) {
>        if (swapchain->fences[i] != VK_NULL_HANDLE)
> -         anv_DestroyFence(device, swapchain->fences[i], pAllocator);
> +         anv_DestroyFence(_device, swapchain->fences[i], pAllocator);
>     }
>
> -   swapchain->destroy(swapchain, pAllocator);
> +   swapchain->destroy(swapchain, alloc);
>  }
>
>  VkResult anv_GetSwapchainImagesKHR(
> diff --git a/src/intel/vulkan/anv_wsi.h b/src/intel/vulkan/anv_wsi.h
> index 2548e41..236133c 100644
> --- a/src/intel/vulkan/anv_wsi.h
> +++ b/src/intel/vulkan/anv_wsi.h
> @@ -60,7 +60,8 @@ struct anv_wsi_interface {
>                                   uint32_t* pPresentModeCount,
>                                   VkPresentModeKHR* pPresentModes);
>     VkResult (*create_swapchain)(VkIcdSurfaceBase *surface,
> -                                struct anv_device *device,
> +                                VkDevice device,
> +                                struct anv_wsi_device *wsi_device,
>                                  const VkSwapchainCreateInfoKHR*
> pCreateInfo,
>                                  const VkAllocationCallbacks* pAllocator,
>                                  const struct anv_wsi_image_fns *image_fns,
> diff --git a/src/intel/vulkan/anv_wsi_wayland.c
> b/src/intel/vulkan/anv_wsi_wayland.c
> index e56b3be..16a9647 100644
> --- a/src/intel/vulkan/anv_wsi_wayland.c
> +++ b/src/intel/vulkan/anv_wsi_wayland.c
> @@ -422,14 +422,6 @@ wsi_wl_surface_get_present_modes(VkIcdSurfaceBase
> *surface,
>     return VK_SUCCESS;
>  }
>
> -static VkResult
> -wsi_wl_surface_create_swapchain(VkIcdSurfaceBase *surface,
> -                                struct anv_device *device,
> -                                const VkSwapchainCreateInfoKHR*
> pCreateInfo,
> -                                const VkAllocationCallbacks* pAllocator,
> -                                const struct anv_wsi_image_fns *image_fns,
> -                                struct anv_swapchain **swapchain);
> -
>  VkResult anv_CreateWaylandSurfaceKHR(
>      VkInstance                                  _instance,
>      const VkWaylandSurfaceCreateInfoKHR*        pCreateInfo,
> @@ -650,7 +642,7 @@ wsi_wl_swapchain_destroy(struct anv_swapchain
> *anv_chain,
>                           const VkAllocationCallbacks *pAllocator)
>  {
>     struct wsi_wl_swapchain *chain = (struct wsi_wl_swapchain *)anv_chain;
> -   struct anv_device *device = anv_device_from_handle(chain->
> base.device);
> +
>     for (uint32_t i = 0; i < chain->image_count; i++) {
>        if (chain->images[i].buffer)
>           chain->base.image_fns->free_wsi_image(chain->base.device,
> pAllocator,
> @@ -658,14 +650,15 @@ wsi_wl_swapchain_destroy(struct anv_swapchain
> *anv_chain,
>                                                 chain->images[i].memory);
>     }
>
> -   vk_free2(&device->alloc, pAllocator, chain);
> +   vk_free(pAllocator, chain);
>
>     return VK_SUCCESS;
>  }
>
>  static VkResult
>  wsi_wl_surface_create_swapchain(VkIcdSurfaceBase *icd_surface,
> -                                struct anv_device *device,
> +                                VkDevice device,
> +                                struct anv_wsi_device *wsi_device,
>                                  const VkSwapchainCreateInfoKHR*
> pCreateInfo,
>                                  const VkAllocationCallbacks* pAllocator,
>                                  const struct anv_wsi_image_fns *image_fns,
> @@ -691,12 +684,12 @@ wsi_wl_surface_create_swapchain(VkIcdSurfaceBase
> *icd_surface,
>        num_images = MAX2(num_images, 4);
>
>     size_t size = sizeof(*chain) + num_images * sizeof(chain->images[0]);
> -   chain = vk_alloc2(&device->alloc, pAllocator, size, 8,
> +   chain = vk_alloc(pAllocator, size, 8,
>                        VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
>     if (chain == NULL)
>        return vk_error(VK_ERROR_OUT_OF_HOST_MEMORY);
>
> -   chain->base.device = anv_device_to_handle(device);
> +   chain->base.device = device;
>     chain->base.destroy = wsi_wl_swapchain_destroy;
>     chain->base.get_images = wsi_wl_swapchain_get_images;
>     chain->base.acquire_next_image = wsi_wl_swapchain_acquire_next_image;
> @@ -719,7 +712,7 @@ wsi_wl_surface_create_swapchain(VkIcdSurfaceBase
> *icd_surface,
>        chain->images[i].buffer = NULL;
>     chain->queue = NULL;
>
> -   chain->display = wsi_wl_get_display(&device->
> instance->physicalDevice.wsi_device,
> +   chain->display = wsi_wl_get_display(wsi_device,
>                                         surface->display);
>     if (!chain->display) {
>        result = vk_error(VK_ERROR_INITIALIZATION_FAILED);
> diff --git a/src/intel/vulkan/anv_wsi_x11.c b/src/intel/vulkan/anv_wsi_
> x11.c
> index 54fe057..f56df40 100644
> --- a/src/intel/vulkan/anv_wsi_x11.c
> +++ b/src/intel/vulkan/anv_wsi_x11.c
> @@ -434,14 +434,6 @@ x11_surface_get_present_modes(VkIcdSurfaceBase
> *surface,
>     return VK_SUCCESS;
>  }
>
> -static VkResult
> -x11_surface_create_swapchain(VkIcdSurfaceBase *surface,
> -                             struct anv_device *device,
> -                             const VkSwapchainCreateInfoKHR* pCreateInfo,
> -                             const VkAllocationCallbacks* pAllocator,
> -                             const struct anv_wsi_image_fns *image_fns,
> -                             struct anv_swapchain **swapchain);
> -
>  VkResult anv_CreateXcbSurfaceKHR(
>      VkInstance                                  _instance,
>      const VkXcbSurfaceCreateInfoKHR*            pCreateInfo,
> @@ -747,20 +739,20 @@ x11_swapchain_destroy(struct anv_swapchain
> *anv_chain,
>                        const VkAllocationCallbacks *pAllocator)
>  {
>     struct x11_swapchain *chain = (struct x11_swapchain *)anv_chain;
> -   struct anv_device *device = anv_device_from_handle(chain->
> base.device);
>     for (uint32_t i = 0; i < chain->image_count; i++)
>        x11_image_finish(chain, pAllocator, &chain->images[i]);
>
>     xcb_unregister_for_special_event(chain->conn, chain->special_event);
>
> -   vk_free2(&device->alloc, pAllocator, chain);
> +   vk_free(pAllocator, chain);
>
>     return VK_SUCCESS;
>  }
>
>  static VkResult
>  x11_surface_create_swapchain(VkIcdSurfaceBase *icd_surface,
> -                             struct anv_device *device,
> +                             VkDevice device,
> +                             struct anv_wsi_device *wsi_device,
>                               const VkSwapchainCreateInfoKHR *pCreateInfo,
>                               const VkAllocationCallbacks* pAllocator,
>                               const struct anv_wsi_image_fns *image_fns,
> @@ -784,12 +776,12 @@ x11_surface_create_swapchain(VkIcdSurfaceBase
> *icd_surface,
>        num_images = MAX2(num_images, 4);
>
>     size_t size = sizeof(*chain) + num_images * sizeof(chain->images[0]);
> -   chain = vk_alloc2(&device->alloc, pAllocator, size, 8,
> +   chain = vk_alloc(pAllocator, size, 8,
>                        VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
>     if (chain == NULL)
>        return vk_error(VK_ERROR_OUT_OF_HOST_MEMORY);
>
> -   chain->base.device = anv_device_to_handle(device);
> +   chain->base.device = device;
>     chain->base.destroy = x11_swapchain_destroy;
>     chain->base.get_images = x11_get_images;
>     chain->base.acquire_next_image = x11_acquire_next_image;
> @@ -830,7 +822,7 @@ x11_surface_create_swapchain(VkIcdSurfaceBase
> *icd_surface,
>
>     uint32_t image = 0;
>     for (; image < chain->image_count; image++) {
> -      result = x11_image_init(anv_device_to_handle(device), chain,
> pCreateInfo, pAllocator,
> +      result = x11_image_init(device, chain, pCreateInfo, pAllocator,
>                                &chain->images[image]);
>        if (result != VK_SUCCESS)
>           goto fail_init_images;
> @@ -847,7 +839,7 @@ fail_init_images:
>  fail_register:
>     xcb_unregister_for_special_event(chain->conn, chain->special_event);
>
> -   vk_free2(&device->alloc, pAllocator, chain);
> +   vk_free(pAllocator, chain);
>
>     return result;
>  }
> --
> 2.5.5
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/mesa-dev
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/mesa-dev/attachments/20161018/04d6e278/attachment-0001.html>


More information about the mesa-dev mailing list