rb On Thu, Jul 14, 2016 at 8:32 AM, Nanley Chery <nanleych...@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.ch...@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 > >
_______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev