[Mesa-dev] [PATCH 21/22] anv: Enable sampling from HiZ

Jason Ekstrand jason at jlekstrand.net
Thu Jan 12 18:38:00 UTC 2017


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

> Signed-off-by: Nanley Chery <nanley.g.chery at intel.com>
> ---
>  src/intel/vulkan/TODO        |  1 -
>  src/intel/vulkan/anv_image.c | 19 ++++++++++++++++---
>  2 files changed, 16 insertions(+), 4 deletions(-)
>
> diff --git a/src/intel/vulkan/TODO b/src/intel/vulkan/TODO
> index 37fd16b437..38acc0dd5b 100644
> --- a/src/intel/vulkan/TODO
> +++ b/src/intel/vulkan/TODO
> @@ -8,7 +8,6 @@ Missing Features:
>   - Sparse memory
>
>  Performance:
> - - Sampling from HiZ (Nanley)
>   - Multi-{sampled/gen8,LOD} HiZ
>   - Compressed multisample support
>   - Pushing pieces of UBOs?
> diff --git a/src/intel/vulkan/anv_image.c b/src/intel/vulkan/anv_image.c
> index 7d5beeabbe..ee563685bb 100644
> --- a/src/intel/vulkan/anv_image.c
> +++ b/src/intel/vulkan/anv_image.c
> @@ -538,10 +538,22 @@ anv_CreateImageView(VkDevice _device,
>        iview->isl.usage = 0;
>     }
>
> -   /* Sampling from HiZ is not yet enabled */
> +   /* If the HiZ buffer can be sampled from, set the constant clear color.
> +    * If it cannot, disable the isl aux usage flag.
> +    */
> +   float red_clear_color = 0.0f;
>     enum isl_aux_usage surf_usage = image->aux_usage;
> -   if (surf_usage == ISL_AUX_USAGE_HIZ)
> -      surf_usage = ISL_AUX_USAGE_NONE;
> +   if (image->aux_usage == ISL_AUX_USAGE_HIZ) {
> +      if (anv_can_sample_with_hiz(device->info.gen, image->samples)) {
> +         /* When a HiZ buffer is sampled on gen9+, ensure that
> +          * the constant fast clear value is set in the surface state.
> +          */
> +         if (device->info.gen >= 9)
> +            red_clear_color = ANV_HZ_FC_VAL;
> +      } else {
> +         surf_usage = ISL_AUX_USAGE_NONE;
> +      }
> +   }
>

I realized this morning that this doesn't actually do everything we need.
If we're going to use a layout-based approach to HiZ, we need two surface
states, one with HiZ and one without and we need to select which one to put
in the binding table based on layout.  Otherwise, if they sample from an
image in LAYOUT_GENERAL and the HiZ data doesn't match the depth data,
we'll get the wrong values.  I don't think this will be all that hard to
solve, but we should solve it.


>
>     /* Input attachment surfaces for color are allocated and filled
>      * out at BeginRenderPass time because they need compression
> information.
> @@ -560,6 +572,7 @@ anv_CreateImageView(VkDevice _device,
>                            iview->sampler_surface_state.map,
>                            .surf = &surface->isl,
>                            .view = &view,
> +                          .clear_color.f32 = { red_clear_color,},
>                            .aux_surf = &image->aux_surface.isl,
>                            .aux_usage = surf_usage,
>                            .mocs = device->default_mocs);
> --
> 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/20170112/14a3fcf9/attachment.html>


More information about the mesa-dev mailing list