[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