[Mesa-dev] [PATCH 13/22] anv/wsi: split image alloc/free out to separate fns.

Mark Janes mark.a.janes at intel.com
Wed Oct 19 16:33:54 UTC 2016


Dave Airlie <airlied at gmail.com> writes:

> From: Dave Airlie <airlied at redhat.com>
>
> This moves these outside the wsi platform code, so we can reuse
> that code
> ---
>  src/intel/vulkan/anv_wsi.c         | 121 +++++++++++++++++++++++++++++++-
>  src/intel/vulkan/anv_wsi.h         |  19 ++++-
>  src/intel/vulkan/anv_wsi_wayland.c | 120 +++++++-------------------------
>  src/intel/vulkan/anv_wsi_x11.c     | 139 +++++--------------------------------
>  4 files changed, 180 insertions(+), 219 deletions(-)
>
> diff --git a/src/intel/vulkan/anv_wsi.c b/src/intel/vulkan/anv_wsi.c
> index f91e6f6..514a29f 100644
> --- a/src/intel/vulkan/anv_wsi.c
> +++ b/src/intel/vulkan/anv_wsi.c
> @@ -22,7 +22,7 @@
>   */
>  
>  #include "anv_wsi.h"
> -
> +#include "vk_format_info.h"
>  VkResult
>  anv_init_wsi(struct anv_physical_device *physical_device)
>  {
> @@ -126,6 +126,122 @@ VkResult anv_GetPhysicalDeviceSurfacePresentModesKHR(
>                                     pPresentModes);
>  }
>  
> +
> +static VkResult
> +x11_anv_wsi_image_create(VkDevice device_h,
> +                         const VkSwapchainCreateInfoKHR *pCreateInfo,
> +                         const VkAllocationCallbacks* pAllocator,
> +                         VkImage *image_p,
> +                         VkDeviceMemory *memory_p,
> +                         uint32_t *size,
> +                         uint32_t *offset,
> +                         uint32_t *row_pitch, int *fd_p)
> +{
> +   struct anv_device *device = anv_device_from_handle(device_h);
> +   VkImage image_h;
> +   struct anv_image *image;
> +
> +   VkResult result;
> +   result = anv_image_create(anv_device_to_handle(device),
> +      &(struct anv_image_create_info) {
> +         .isl_tiling_flags = ISL_TILING_X_BIT,
> +         .stride = 0,
> +         .vk_info =
> +      &(VkImageCreateInfo) {
> +         .sType = VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO,
> +         .imageType = VK_IMAGE_TYPE_2D,
> +         .format = pCreateInfo->imageFormat,
> +         .extent = {
> +            .width = pCreateInfo->imageExtent.width,
> +            .height = pCreateInfo->imageExtent.height,
> +            .depth = 1
> +         },
> +         .mipLevels = 1,
> +         .arrayLayers = 1,
> +         .samples = 1,
> +         /* FIXME: Need a way to use X tiling to allow scanout */
> +         .tiling = VK_IMAGE_TILING_OPTIMAL,
> +         .usage = (pCreateInfo->imageUsage |
> +                   VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT),
> +         .flags = 0,
> +      }},
> +      NULL,
> +      &image_h);
> +   if (result != VK_SUCCESS)
> +      return result;
> +
> +   image = anv_image_from_handle(image_h);
> +   assert(vk_format_is_color(image->vk_format));
> +
> +   VkDeviceMemory memory_h;
> +   struct anv_device_memory *memory;
> +   result = anv_AllocateMemory(anv_device_to_handle(device),
> +      &(VkMemoryAllocateInfo) {
> +         .sType = VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO,
> +         .allocationSize = image->size,
> +         .memoryTypeIndex = 0,
> +      },
> +      NULL /* XXX: pAllocator */,
> +      &memory_h);
> +   if (result != VK_SUCCESS)
> +      goto fail_create_image;
> +
> +   memory = anv_device_memory_from_handle(memory_h);
> +   memory->bo.is_winsys_bo = true;
> +
> +   anv_BindImageMemory(VK_NULL_HANDLE, image_h, memory_h, 0);
> +
> +   struct anv_surface *surface = &image->color_surface;
> +   assert(surface->isl.tiling == ISL_TILING_X);
> +
> +   *row_pitch = surface->isl.row_pitch;
> +   int ret = anv_gem_set_tiling(device, memory->bo.gem_handle,
> +                                surface->isl.row_pitch, I915_TILING_X);
> +   if (ret) {
> +      /* FINISHME: Choose a better error. */
> +      result = vk_errorf(VK_ERROR_OUT_OF_DEVICE_MEMORY,
> +                         "set_tiling failed: %m");
> +      goto fail_alloc_memory;
> +   }
> +
> +   int fd = anv_gem_handle_to_fd(device, memory->bo.gem_handle);
> +   if (fd == -1) {
> +      /* FINISHME: Choose a better error. */
> +      result = vk_errorf(VK_ERROR_OUT_OF_DEVICE_MEMORY,
> +                         "handle_to_fd failed: %m");
> +      goto fail_alloc_memory;
> +   }
> +
> +   *image_p = image_h;
> +   *memory_p = memory_h;
> +   *fd_p = fd;
> +   *size = image->size;
> +   *offset = image->offset;
> +   return VK_SUCCESS;
> +fail_alloc_memory:
> +   anv_FreeMemory(device_h, memory_h, pAllocator);
> +
> +fail_create_image:
> +   anv_DestroyImage(device_h, image_h, pAllocator);
> +   return result;
> +}
> +
> +static void
> +x11_anv_wsi_image_free(VkDevice device,
> +                       const VkAllocationCallbacks* pAllocator,
> +                       VkImage image_h,
> +                       VkDeviceMemory memory_h)
> +{
> +   anv_DestroyImage(device, image_h, pAllocator);
> +
> +   anv_FreeMemory(device, memory_h, pAllocator);
> +}
> +
> +static const struct anv_wsi_image_fns anv_wsi_image_fns = {
> +   .create_wsi_image = x11_anv_wsi_image_create,
> +   .free_wsi_image = x11_anv_wsi_image_free,
> +};
> +
>  VkResult anv_CreateSwapchainKHR(
>      VkDevice                                     _device,
>      const VkSwapchainCreateInfoKHR*              pCreateInfo,
> @@ -139,7 +255,8 @@ VkResult anv_CreateSwapchainKHR(
>     struct anv_swapchain *swapchain;
>  
>     VkResult result = iface->create_swapchain(surface, device, pCreateInfo,
> -                                             pAllocator, &swapchain);
> +                                             pAllocator, &anv_wsi_image_fns,
> +                                             &swapchain);
>     if (result != VK_SUCCESS)
>        return result;
>  
> diff --git a/src/intel/vulkan/anv_wsi.h b/src/intel/vulkan/anv_wsi.h
> index 1b7147d..2548e41 100644
> --- a/src/intel/vulkan/anv_wsi.h
> +++ b/src/intel/vulkan/anv_wsi.h
> @@ -28,6 +28,22 @@
>  
>  struct anv_swapchain;
>  
> +struct anv_wsi_image_fns {
> +   VkResult (*create_wsi_image)(VkDevice device_h,
> +                                const VkSwapchainCreateInfoKHR *pCreateInfo,
> +                                const VkAllocationCallbacks *pAllocator,
> +                                VkImage *image_p,
> +                                VkDeviceMemory *memory_p,
> +                                uint32_t *size_p,
> +                                uint32_t *offset_p,
> +                                uint32_t *row_pitch_p,
> +                                int *fd_p);
> +   void (*free_wsi_image)(VkDevice device,
> +                          const VkAllocationCallbacks *pAllocator,
> +                          VkImage image_h,
> +                          VkDeviceMemory memory_h);
> +};
> +
>  struct anv_wsi_interface {
>     VkResult (*get_support)(VkIcdSurfaceBase *surface,
>                             struct anv_wsi_device *wsi_device,
> @@ -47,6 +63,7 @@ struct anv_wsi_interface {
>                                  struct anv_device *device,
>                                  const VkSwapchainCreateInfoKHR* pCreateInfo,
>                                  const VkAllocationCallbacks* pAllocator,
> +                                const struct anv_wsi_image_fns *image_fns,
>                                  struct anv_swapchain **swapchain);
>  };
>  
> @@ -54,7 +71,7 @@ struct anv_swapchain {
>  
>     VkDevice device;
>     VkAllocationCallbacks alloc;
> -
> +   const struct anv_wsi_image_fns *image_fns;
>     VkFence fences[3];
>  
>     VkResult (*destroy)(struct anv_swapchain *swapchain,
> diff --git a/src/intel/vulkan/anv_wsi_wayland.c b/src/intel/vulkan/anv_wsi_wayland.c
> index dc239c9..e56b3be 100644
> --- a/src/intel/vulkan/anv_wsi_wayland.c
> +++ b/src/intel/vulkan/anv_wsi_wayland.c
> @@ -427,6 +427,7 @@ 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(
> @@ -456,8 +457,8 @@ VkResult anv_CreateWaylandSurfaceKHR(
>  }
>  
>  struct wsi_wl_image {
> -   struct anv_image *                           image;
> -   struct anv_device_memory *                   memory;
> +   VkImage image;
> +   VkDeviceMemory memory;
>     struct wl_buffer *                           buffer;
>     bool                                         busy;
>  };
> @@ -493,7 +494,7 @@ wsi_wl_swapchain_get_images(struct anv_swapchain *anv_chain,
>  
>     assert(chain->image_count <= *pCount);
>     for (uint32_t i = 0; i < chain->image_count; i++)
> -      pSwapchainImages[i] = anv_image_to_handle(chain->images[i].image);
> +      pSwapchainImages[i] = chain->images[i].image;
>  
>     *pCount = chain->image_count;
>  
> @@ -585,17 +586,6 @@ wsi_wl_swapchain_queue_present(struct anv_swapchain *anv_chain,
>  }
>  
>  static void
> -wsi_wl_image_finish(struct wsi_wl_swapchain *chain, struct wsi_wl_image *image,
> -                    const VkAllocationCallbacks* pAllocator)
> -{
> -   VkDevice vk_device = chain->base.device;
> -   anv_FreeMemory(vk_device, anv_device_memory_to_handle(image->memory),
> -                  pAllocator);
> -   anv_DestroyImage(vk_device, anv_image_to_handle(image->image),
> -                    pAllocator);
> -}
> -
> -static void
>  buffer_handle_release(void *data, struct wl_buffer *buffer)
>  {
>     struct wsi_wl_image *image = data;
> @@ -616,89 +606,30 @@ wsi_wl_image_init(struct wsi_wl_swapchain *chain,
>                    const VkAllocationCallbacks* pAllocator)
>  {
>     VkDevice vk_device = chain->base.device;
> -   struct anv_device *device = anv_device_from_handle(vk_device);
>     VkResult result;
> -
> -   VkImage vk_image;
> -   result = anv_image_create(vk_device,
> -      &(struct anv_image_create_info) {
> -         .isl_tiling_flags = ISL_TILING_X_BIT,
> -         .stride = 0,
> -         .vk_info =
> -      &(VkImageCreateInfo) {
> -         .sType = VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO,
> -         .imageType = VK_IMAGE_TYPE_2D,
> -         .format = chain->vk_format,
> -         .extent = {
> -            .width = chain->extent.width,
> -            .height = chain->extent.height,
> -            .depth = 1
> -         },
> -         .mipLevels = 1,
> -         .arrayLayers = 1,
> -         .samples = 1,
> -         /* FIXME: Need a way to use X tiling to allow scanout */
> -         .tiling = VK_IMAGE_TILING_OPTIMAL,
> -         .usage = (VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT |
> -                   pCreateInfo->imageUsage),
> -         .flags = 0,
> -      }},
> -      pAllocator,
> -      &vk_image);
> -
> +   int fd;
> +   uint32_t size;
> +   uint32_t row_pitch;
> +   uint32_t offset;
> +   result = chain->base.image_fns->create_wsi_image(vk_device,
> +                                                    pCreateInfo,
> +                                                    pAllocator,
> +                                                    &image->image,
> +                                                    &image->memory,
> +                                                    &size,
> +                                                    &offset,
> +                                                    &row_pitch,
> +                                                    &fd);
>     if (result != VK_SUCCESS)
>        return result;
>  
> -   image->image = anv_image_from_handle(vk_image);
> -   assert(vk_format_is_color(image->image->vk_format));
> -
> -   struct anv_surface *surface = &image->image->color_surface;
> -
> -   VkDeviceMemory vk_memory;
> -   result = anv_AllocateMemory(vk_device,
> -      &(VkMemoryAllocateInfo) {
> -         .sType = VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO,
> -         .allocationSize = image->image->size,
> -         .memoryTypeIndex = 0,
> -      },
> -      pAllocator,
> -      &vk_memory);
> -
> -   if (result != VK_SUCCESS)
> -      goto fail_image;
> -
> -   image->memory = anv_device_memory_from_handle(vk_memory);
> -   image->memory->bo.is_winsys_bo = true;
> -
> -   result = anv_BindImageMemory(vk_device, vk_image, vk_memory, 0);
> -
> -   if (result != VK_SUCCESS)
> -      goto fail_mem;
> -
> -   int ret = anv_gem_set_tiling(device,
> -                                image->memory->bo.gem_handle,
> -                                surface->isl.row_pitch, I915_TILING_X);
> -   if (ret) {
> -      /* FINISHME: Choose a better error. */
> -      result = vk_error(VK_ERROR_OUT_OF_DEVICE_MEMORY);
> -      goto fail_mem;
> -   }
> -
> -   int fd = anv_gem_handle_to_fd(device,
> -                                 image->memory->bo.gem_handle);
> -   if (fd == -1) {
> -      /* FINISHME: Choose a better error. */
> -      result = vk_error(VK_ERROR_OUT_OF_DEVICE_MEMORY);
> -      goto fail_mem;
> -   }
> -
>     image->buffer = wl_drm_create_prime_buffer(chain->display->drm,
>                                                fd, /* name */
>                                                chain->extent.width,
>                                                chain->extent.height,
>                                                chain->drm_format,
> -                                              surface->offset,
> -                                              surface->isl.row_pitch,
> +                                              offset,
> +                                              row_pitch,
>                                                0, 0, 0, 0 /* unused */);
>     wl_display_roundtrip(chain->display->display);
>     close(fd);
> @@ -708,10 +639,8 @@ wsi_wl_image_init(struct wsi_wl_swapchain *chain,
>  
>     return VK_SUCCESS;
>  
> -fail_mem:
> -   anv_FreeMemory(vk_device, vk_memory, pAllocator);
> -fail_image:
> -   anv_DestroyImage(vk_device, vk_image, pAllocator);
> +   chain->base.image_fns->free_wsi_image(vk_device, pAllocator,
> +                                         image->image, image->memory);

Coverity points out that this code is unreachable.  Should it be
removed, now that fail_mem and fail_image are gone?

>  
>     return result;
>  }
> @@ -724,7 +653,9 @@ wsi_wl_swapchain_destroy(struct anv_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)
> -         wsi_wl_image_finish(chain, &chain->images[i], pAllocator);
> +         chain->base.image_fns->free_wsi_image(chain->base.device, pAllocator,
> +                                               chain->images[i].image,
> +                                               chain->images[i].memory);
>     }
>  
>     vk_free2(&device->alloc, pAllocator, chain);
> @@ -737,6 +668,7 @@ wsi_wl_surface_create_swapchain(VkIcdSurfaceBase *icd_surface,
>                                  struct anv_device *device,
>                                  const VkSwapchainCreateInfoKHR* pCreateInfo,
>                                  const VkAllocationCallbacks* pAllocator,
> +                                const struct anv_wsi_image_fns *image_fns,
>                                  struct anv_swapchain **swapchain_out)
>  {
>     VkIcdSurfaceWayland *surface = (VkIcdSurfaceWayland *)icd_surface;
> @@ -769,7 +701,7 @@ wsi_wl_surface_create_swapchain(VkIcdSurfaceBase *icd_surface,
>     chain->base.get_images = wsi_wl_swapchain_get_images;
>     chain->base.acquire_next_image = wsi_wl_swapchain_acquire_next_image;
>     chain->base.queue_present = wsi_wl_swapchain_queue_present;
> -
> +   chain->base.image_fns = image_fns;
>     chain->surface = surface->surface;
>     chain->extent = pCreateInfo->imageExtent;
>     chain->vk_format = pCreateInfo->imageFormat;
> diff --git a/src/intel/vulkan/anv_wsi_x11.c b/src/intel/vulkan/anv_wsi_x11.c
> index 8f9f741..54fe057 100644
> --- a/src/intel/vulkan/anv_wsi_x11.c
> +++ b/src/intel/vulkan/anv_wsi_x11.c
> @@ -439,6 +439,7 @@ 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(
> @@ -652,115 +653,6 @@ x11_queue_present(struct anv_swapchain *anv_chain,
>  }
>  
>  static VkResult
> -x11_anv_create_image(VkDevice device_h,
> -                     struct x11_swapchain *chain,
> -                     const VkSwapchainCreateInfoKHR *pCreateInfo,
> -                     const VkAllocationCallbacks* pAllocator,
> -                     VkImage *image_p,
> -                     VkDeviceMemory *memory_p,
> -                     uint32_t *size,
> -                     uint32_t *row_pitch, int *fd_p)
> -{
> -   struct anv_device *device = anv_device_from_handle(device_h);
> -   VkImage image_h;
> -   struct anv_image *image;
> -
> -   VkResult result;
> -   result = anv_image_create(anv_device_to_handle(device),
> -      &(struct anv_image_create_info) {
> -         .isl_tiling_flags = ISL_TILING_X_BIT,
> -         .stride = 0,
> -         .vk_info =
> -      &(VkImageCreateInfo) {
> -         .sType = VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO,
> -         .imageType = VK_IMAGE_TYPE_2D,
> -         .format = pCreateInfo->imageFormat,
> -         .extent = {
> -            .width = pCreateInfo->imageExtent.width,
> -            .height = pCreateInfo->imageExtent.height,
> -            .depth = 1
> -         },
> -         .mipLevels = 1,
> -         .arrayLayers = 1,
> -         .samples = 1,
> -         /* FIXME: Need a way to use X tiling to allow scanout */
> -         .tiling = VK_IMAGE_TILING_OPTIMAL,
> -         .usage = (pCreateInfo->imageUsage |
> -                   VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT),
> -         .flags = 0,
> -      }},
> -      NULL,
> -      &image_h);
> -   if (result != VK_SUCCESS)
> -      return result;
> -
> -   image = anv_image_from_handle(image_h);
> -   assert(vk_format_is_color(image->vk_format));
> -
> -   VkDeviceMemory memory_h;
> -   struct anv_device_memory *memory;
> -   result = anv_AllocateMemory(anv_device_to_handle(device),
> -      &(VkMemoryAllocateInfo) {
> -         .sType = VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO,
> -         .allocationSize = image->size,
> -         .memoryTypeIndex = 0,
> -      },
> -      NULL /* XXX: pAllocator */,
> -      &memory_h);
> -   if (result != VK_SUCCESS)
> -      goto fail_create_image;
> -
> -   memory = anv_device_memory_from_handle(memory_h);
> -   memory->bo.is_winsys_bo = true;
> -
> -   anv_BindImageMemory(VK_NULL_HANDLE, image_h, memory_h, 0);
> -
> -   struct anv_surface *surface = &image->color_surface;
> -   assert(surface->isl.tiling == ISL_TILING_X);
> -
> -   *row_pitch = surface->isl.row_pitch;
> -   int ret = anv_gem_set_tiling(device, memory->bo.gem_handle,
> -                                surface->isl.row_pitch, I915_TILING_X);
> -   if (ret) {
> -      /* FINISHME: Choose a better error. */
> -      result = vk_errorf(VK_ERROR_OUT_OF_DEVICE_MEMORY,
> -                         "set_tiling failed: %m");
> -      goto fail_alloc_memory;
> -   }
> -
> -   int fd = anv_gem_handle_to_fd(device, memory->bo.gem_handle);
> -   if (fd == -1) {
> -      /* FINISHME: Choose a better error. */
> -      result = vk_errorf(VK_ERROR_OUT_OF_DEVICE_MEMORY,
> -                         "handle_to_fd failed: %m");
> -      goto fail_alloc_memory;
> -   }
> -
> -   *image_p = image_h;
> -   *memory_p = memory_h;
> -   *fd_p = fd;
> -   *size = image->size;
> -   return VK_SUCCESS;
> -fail_alloc_memory:
> -   anv_FreeMemory(device_h, memory_h, pAllocator);
> -
> -fail_create_image:
> -   anv_DestroyImage(device_h, image_h, pAllocator);
> -   return result;
> -}
> -
> -static void
> -x11_anv_free_image(VkDevice device,
> -                   const VkAllocationCallbacks* pAllocator)
> -                   VkImage image_h,
> -                   VkDeviceMemory memory_h)
> -{
> -   anv_DestroyImage(device, image_h, pAllocator);
> -
> -   anv_FreeMemory(device, memory_h, pAllocator);
> -}
> -
> -static VkResult
>  x11_image_init(VkDevice device_h, struct x11_swapchain *chain,
>                 const VkSwapchainCreateInfoKHR *pCreateInfo,
>                 const VkAllocationCallbacks* pAllocator,
> @@ -769,19 +661,21 @@ x11_image_init(VkDevice device_h, struct x11_swapchain *chain,
>     xcb_void_cookie_t cookie;
>     VkResult result;
>     uint32_t row_pitch;
> +   uint32_t offset;
>     uint32_t bpp = 32;
>     uint32_t depth = 24;
>     int fd;
>     uint32_t size;
>  
> -   result = x11_anv_create_image(device_h,
> -                                 pCreateInfo,
> -                                 pAllocator,
> -                                 &image->image,
> -                                 &image->memory,
> -                                 &size,
> -                                 &row_pitch,
> -                                 &fd);
> +   result = chain->base.image_fns->create_wsi_image(device_h,
> +                                                    pCreateInfo,
> +                                                    pAllocator,
> +                                                    &image->image,
> +                                                    &image->memory,
> +                                                    &size,
> +                                                    &offset,
> +                                                    &row_pitch,
> +                                                    &fd);
>     if (result != VK_SUCCESS)
>        return result;
>  
> @@ -825,8 +719,8 @@ fail_pixmap:
>     cookie = xcb_free_pixmap(chain->conn, image->pixmap);
>     xcb_discard_reply(chain->conn, cookie.sequence);
>  
> -   x11_anv_free_image(device_h, pAllocator,
> -                      image->image, image->memory);
> +   chain->base.image_fns->free_wsi_image(device_h, pAllocator,
> +                                         image->image, image->memory);
>     return result;
>  }
>  
> @@ -844,8 +738,8 @@ x11_image_finish(struct x11_swapchain *chain,
>     cookie = xcb_free_pixmap(chain->conn, image->pixmap);
>     xcb_discard_reply(chain->conn, cookie.sequence);
>  
> -   x11_anv_free_image(chain->base.device, pAllocator,
> -                      image->image, image->memory);
> +   chain->base.image_fns->free_wsi_image(chain->base.device, pAllocator,
> +                                         image->image, image->memory);
>  }
>  
>  static VkResult
> @@ -869,6 +763,7 @@ x11_surface_create_swapchain(VkIcdSurfaceBase *icd_surface,
>                               struct anv_device *device,
>                               const VkSwapchainCreateInfoKHR *pCreateInfo,
>                               const VkAllocationCallbacks* pAllocator,
> +                             const struct anv_wsi_image_fns *image_fns,
>                               struct anv_swapchain **swapchain_out)
>  {
>     struct x11_swapchain *chain;
> @@ -899,7 +794,7 @@ x11_surface_create_swapchain(VkIcdSurfaceBase *icd_surface,
>     chain->base.get_images = x11_get_images;
>     chain->base.acquire_next_image = x11_acquire_next_image;
>     chain->base.queue_present = x11_queue_present;
> -
> +   chain->base.image_fns = image_fns;
>     chain->conn = x11_surface_get_connection(icd_surface);
>     chain->window = x11_surface_get_window(icd_surface);
>     chain->extent = pCreateInfo->imageExtent;
> -- 
> 2.5.5
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/mesa-dev


More information about the mesa-dev mailing list