[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