[Mesa-dev] [PATCH 03/22] anv: Replace anv_image_has_hiz() with ISL_AUX_USAGE_HIZ

Jason Ekstrand jason at jlekstrand.net
Thu Jan 12 02:45:56 UTC 2017


On Wed, Jan 11, 2017 at 5:54 PM, Nanley Chery <nanleychery at gmail.com> wrote:

> The helper doesn't provide additional functionality over the current
> infrastructure.
>

Actually... It does.  The point of anv_image::aux_usage is to say how the
aux surface is supposed to be used outside of a render pass.  Just because
an image has a HiZ surface allocated doesn't mean that it should always be
used.  The intention (and the way it's used for CCS) was that you could
have an aux surface allocated but where it was only used inside the render
pass and not outside.

Unfortunately, that mental model doesn't really work when you're using
layout transitions.  I'll have to think about this as I read the rest of
the patches.


> Signed-off-by: Nanley Chery <nanley.g.chery at intel.com>
> ---
>  src/intel/vulkan/anv_blorp.c       |  2 +-
>  src/intel/vulkan/anv_image.c       | 10 ++++++++--
>  src/intel/vulkan/anv_private.h     | 10 ----------
>  src/intel/vulkan/gen8_cmd_buffer.c |  2 +-
>  src/intel/vulkan/genX_cmd_buffer.c |  2 +-
>  5 files changed, 11 insertions(+), 15 deletions(-)
>
> diff --git a/src/intel/vulkan/anv_blorp.c b/src/intel/vulkan/anv_blorp.c
> index b431d6af48..13d5b5f9d7 100644
> --- a/src/intel/vulkan/anv_blorp.c
> +++ b/src/intel/vulkan/anv_blorp.c
> @@ -857,7 +857,7 @@ void anv_CmdClearDepthStencilImage(
>     struct blorp_surf depth, stencil;
>     if (image->aspects & VK_IMAGE_ASPECT_DEPTH_BIT) {
>        get_blorp_surf_for_anv_image(image, VK_IMAGE_ASPECT_DEPTH_BIT,
> -                                   image->aux_usage, &depth);
> +                                   ISL_AUX_USAGE_NONE, &depth);
>     } else {
>        memset(&depth, 0, sizeof(depth));
>     }
> diff --git a/src/intel/vulkan/anv_image.c b/src/intel/vulkan/anv_image.c
> index f262d8a524..d821629191 100644
> --- a/src/intel/vulkan/anv_image.c
> +++ b/src/intel/vulkan/anv_image.c
> @@ -195,6 +195,7 @@ make_surface(const struct anv_device *dev,
>           isl_surf_get_hiz_surf(&dev->isl_dev, &image->depth_surface.isl,
>                                 &image->aux_surface.isl);
>           add_surface(image, &image->aux_surface);
> +         image->aux_usage = ISL_AUX_USAGE_HIZ;
>        }
>     } else if (aspect == VK_IMAGE_ASPECT_COLOR_BIT && vk_info->samples ==
> 1) {
>        if (!unlikely(INTEL_DEBUG & DEBUG_NO_RBC)) {
> @@ -523,6 +524,11 @@ anv_CreateImageView(VkDevice _device,
>        iview->isl.usage = 0;
>     }
>
> +   /* Sampling from HiZ is not yet enabled */
> +   enum isl_aux_usage surf_usage = image->aux_usage;
> +   if (surf_usage == ISL_AUX_USAGE_HIZ)
> +      surf_usage = ISL_AUX_USAGE_NONE;
> +
>     /* Input attachment surfaces for color or depth are allocated and
> filled
>      * out at BeginRenderPass time because they need compression
> information.
>      * Stencil image do not support compression so we just use the texture
> @@ -540,7 +546,7 @@ anv_CreateImageView(VkDevice _device,
>                            .surf = &surface->isl,
>                            .view = &view,
>                            .aux_surf = &image->aux_surface.isl,
> -                          .aux_usage = image->aux_usage,
> +                          .aux_usage = surf_usage,
>                            .mocs = device->default_mocs);
>
>        if (!device->info.has_llc)
> @@ -564,7 +570,7 @@ anv_CreateImageView(VkDevice _device,
>                               .surf = &surface->isl,
>                               .view = &view,
>                               .aux_surf = &image->aux_surface.isl,
> -                             .aux_usage = image->aux_usage,
> +                             .aux_usage = surf_usage,
>                               .mocs = device->default_mocs);
>        } else {
>           anv_fill_buffer_surface_state(device,
> iview->storage_surface_state,
> diff --git a/src/intel/vulkan/anv_private.h b/src/intel/vulkan/anv_
> private.h
> index dbc8c3cf68..4b2cac5c48 100644
> --- a/src/intel/vulkan/anv_private.h
> +++ b/src/intel/vulkan/anv_private.h
> @@ -1642,16 +1642,6 @@ const struct anv_surface *
>  anv_image_get_surface_for_aspect_mask(const struct anv_image *image,
>                                        VkImageAspectFlags aspect_mask);
>
> -static inline bool
> -anv_image_has_hiz(const struct anv_image *image)
> -{
> -   /* We must check the aspect because anv_image::aux_surface may be used
> for
> -    * any type of auxiliary surface, not just HiZ.
> -    */
> -   return (image->aspects & VK_IMAGE_ASPECT_DEPTH_BIT) &&
> -          image->aux_surface.isl.size > 0;
> -}
> -
>  struct anv_buffer_view {
>     enum isl_format format; /**< VkBufferViewCreateInfo::format */
>     struct anv_bo *bo;
> diff --git a/src/intel/vulkan/gen8_cmd_buffer.c
> b/src/intel/vulkan/gen8_cmd_buffer.c
> index 3e4aa9bc62..892a035304 100644
> --- a/src/intel/vulkan/gen8_cmd_buffer.c
> +++ b/src/intel/vulkan/gen8_cmd_buffer.c
> @@ -337,7 +337,7 @@ genX(cmd_buffer_emit_hz_op)(struct anv_cmd_buffer
> *cmd_buffer,
>     const struct anv_image_view *iview =
>        anv_cmd_buffer_get_depth_stencil_view(cmd_buffer);
>
> -   if (iview == NULL || !anv_image_has_hiz(iview->image))
> +   if (iview == NULL || iview->image->aux_usage != ISL_AUX_USAGE_HIZ)
>        return;
>
>     /* FINISHME: Implement multi-subpass HiZ */
> diff --git a/src/intel/vulkan/genX_cmd_buffer.c
> b/src/intel/vulkan/genX_cmd_buffer.c
> index 7ff0d3ebba..a372e6420f 100644
> --- a/src/intel/vulkan/genX_cmd_buffer.c
> +++ b/src/intel/vulkan/genX_cmd_buffer.c
> @@ -2087,7 +2087,7 @@ cmd_buffer_emit_depth_stencil(struct anv_cmd_buffer
> *cmd_buffer)
>        anv_cmd_buffer_get_depth_stencil_view(cmd_buffer);
>     const struct anv_image *image = iview ? iview->image : NULL;
>     const bool has_depth = image && (image->aspects &
> VK_IMAGE_ASPECT_DEPTH_BIT);
> -   const bool has_hiz = image != NULL && anv_image_has_hiz(image);
> +   const bool has_hiz = image != NULL && image->aux_usage ==
> ISL_AUX_USAGE_HIZ;
>     const bool has_stencil =
>        image && (image->aspects & VK_IMAGE_ASPECT_STENCIL_BIT);
>
> --
> 2.11.0
>
> _______________________________________________
> 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/20170111/121cfd70/attachment-0001.html>


More information about the mesa-dev mailing list