[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