[Mesa-dev] [PATCH] wsi: fix VK_INCOMPLETE for vkGetSwapchainImagesKHR

Jason Ekstrand jason at jlekstrand.net
Tue Nov 15 21:41:17 UTC 2016


Rb.  Please cc stable

On Nov 15, 2016 1:20 PM, "Dave Airlie" <airlied at gmail.com> wrote:

> From: Dave Airlie <airlied at redhat.com>
>
> This fixes the x11 and wayland backends to not assert:
> dEQP-VK.wsi.xcb.swapchain.get_images.incomplete
>
> Signed-off-by: Dave Airlie <airlied at redhat.com>
> ---
>  src/vulkan/wsi/wsi_common_wayland.c | 16 +++++++++++-----
>  src/vulkan/wsi/wsi_common_x11.c     | 16 +++++++++++-----
>  2 files changed, 22 insertions(+), 10 deletions(-)
>
> diff --git a/src/vulkan/wsi/wsi_common_wayland.c
> b/src/vulkan/wsi/wsi_common_wayland.c
> index 7691744..f6c218b 100644
> --- a/src/vulkan/wsi/wsi_common_wayland.c
> +++ b/src/vulkan/wsi/wsi_common_wayland.c
> @@ -498,19 +498,25 @@ wsi_wl_swapchain_get_images(struct wsi_swapchain
> *wsi_chain,
>                              uint32_t *pCount, VkImage *pSwapchainImages)
>  {
>     struct wsi_wl_swapchain *chain = (struct wsi_wl_swapchain *)wsi_chain;
> +   uint32_t ret_count;
> +   VkResult result;
>
>     if (pSwapchainImages == NULL) {
>        *pCount = chain->image_count;
>        return VK_SUCCESS;
>     }
>
> -   assert(chain->image_count <= *pCount);
> -   for (uint32_t i = 0; i < chain->image_count; i++)
> -      pSwapchainImages[i] = chain->images[i].image;
> +   result = VK_SUCCESS;
> +   ret_count = chain->image_count;
> +   if (chain->image_count > *pCount) {
> +     ret_count = *pCount;
> +     result = VK_INCOMPLETE;
> +   }
>
> -   *pCount = chain->image_count;
> +   for (uint32_t i = 0; i < ret_count; i++)
> +      pSwapchainImages[i] = chain->images[i].image;
>
> -   return VK_SUCCESS;
> +   return result;
>  }
>
>  static VkResult
> diff --git a/src/vulkan/wsi/wsi_common_x11.c b/src/vulkan/wsi/wsi_common_
> x11.c
> index c758d2d..b69a621 100644
> --- a/src/vulkan/wsi/wsi_common_x11.c
> +++ b/src/vulkan/wsi/wsi_common_x11.c
> @@ -510,19 +510,25 @@ x11_get_images(struct wsi_swapchain *anv_chain,
>                 uint32_t* pCount, VkImage *pSwapchainImages)
>  {
>     struct x11_swapchain *chain = (struct x11_swapchain *)anv_chain;
> +   uint32_t ret_count;
> +   VkResult result;
>
>     if (pSwapchainImages == NULL) {
>        *pCount = chain->image_count;
>        return VK_SUCCESS;
>     }
>
> -   assert(chain->image_count <= *pCount);
> -   for (uint32_t i = 0; i < chain->image_count; i++)
> -      pSwapchainImages[i] = chain->images[i].image;
> +   result = VK_SUCCESS;
> +   ret_count = chain->image_count;
> +   if (chain->image_count > *pCount) {
> +     ret_count = *pCount;
> +     result = VK_INCOMPLETE;
> +   }
>
> -   *pCount = chain->image_count;
> +   for (uint32_t i = 0; i < ret_count; i++)
> +      pSwapchainImages[i] = chain->images[i].image;
>
> -   return VK_SUCCESS;
> +   return result;
>  }
>
>  static VkResult
> --
> 2.7.4
>
> _______________________________________________
> 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/20161115/118567b1/attachment-0001.html>


More information about the mesa-dev mailing list