[Mesa-dev] [PATCH v2 2/4] anv/image: Fix initialization of the ISL tiling

Jason Ekstrand jason at jlekstrand.net
Thu Jul 14 17:44:27 UTC 2016


rb

On Thu, Jul 14, 2016 at 8:32 AM, Nanley Chery <nanleychery at gmail.com> wrote:

> If an internal user creates an image with Vulkan tiling
> VK_IMAGE_TILING_OPTIMAL
> and an ISL tiling that isn't set, ISL will fail to create the image as
> anv_image_create_info::isl_tiling_flags will be an invalid value.
>
> Correct this by making anv_image_create_info::isl_tiling_flags an opt-in,
> filtering bitmask, that allows the caller to specify which ISL tilings are
> acceptable, but not contradictory to the Vulkan tiling.
>
> Opt-out of filtering for vkCreateImage.
>
> Signed-off-by: Nanley Chery <nanley.g.chery at intel.com>
> ---
>
> v2: Fix bug of vk tiling being ignored by internal users (Chad)
>     Fix bug in existing code (see commit message).
>
>  src/intel/vulkan/anv_image.c   | 15 +++++++++++----
>  src/intel/vulkan/anv_private.h |  3 +++
>  2 files changed, 14 insertions(+), 4 deletions(-)
>
> diff --git a/src/intel/vulkan/anv_image.c b/src/intel/vulkan/anv_image.c
> index 23fdd93..312efe1 100644
> --- a/src/intel/vulkan/anv_image.c
> +++ b/src/intel/vulkan/anv_image.c
> @@ -120,9 +120,17 @@ make_surface(const struct anv_device *dev,
>        [VK_IMAGE_TYPE_3D] = ISL_SURF_DIM_3D,
>     };
>
> -   isl_tiling_flags_t tiling_flags = anv_info->isl_tiling_flags;
> -   if (vk_info->tiling == VK_IMAGE_TILING_LINEAR)
> -      tiling_flags = ISL_TILING_LINEAR_BIT;
> +   /* Translate the Vulkan tiling to an equivalent ISL tiling, then
> filter the
> +    * result with an optionally provided ISL tiling argument.
> +    */
> +   isl_tiling_flags_t tiling_flags =
> +      (pCreateInfo->tiling == VK_IMAGE_TILING_LINEAR) ?
> +      ISL_TILING_LINEAR_BIT : ISL_TILING_ANY_MASK;
> +
> +   if (anv_info->isl_tiling_flags)
> +      tiling_flags &= anv_info->isl_tiling_flags;
> +
> +   assert(tiling_flags);
>
>     struct anv_surface *anv_surf = get_surface(image, aspect);
>
> @@ -260,7 +268,6 @@ anv_CreateImage(VkDevice device,
>     return anv_image_create(device,
>        &(struct anv_image_create_info) {
>           .vk_info = pCreateInfo,
> -         .isl_tiling_flags = ISL_TILING_ANY_MASK,
>        },
>        pAllocator,
>        pImage);
> diff --git a/src/intel/vulkan/anv_private.h
> b/src/intel/vulkan/anv_private.h
> index 7b2d1dd..4730641 100644
> --- a/src/intel/vulkan/anv_private.h
> +++ b/src/intel/vulkan/anv_private.h
> @@ -1698,7 +1698,10 @@ struct anv_image_view {
>
>  struct anv_image_create_info {
>     const VkImageCreateInfo *vk_info;
> +
> +   /** An opt-in bitmask which filters an ISL-mapping of the Vulkan
> tiling. */
>     isl_tiling_flags_t isl_tiling_flags;
> +
>     uint32_t stride;
>  };
>
> --
> 2.9.0
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/mesa-dev/attachments/20160714/9e8e281b/attachment.html>


More information about the mesa-dev mailing list