[Mesa-dev] [PATCH v3 11/16] anv/cmd_buffer: Move aux_usage assignment up

Jason Ekstrand jason at jlekstrand.net
Mon Jul 10 21:36:16 UTC 2017


On Wed, Jun 28, 2017 at 2:14 PM, Nanley Chery <nanleychery at gmail.com> wrote:

> For readability, bring the assignment of CCS closer to the assignment of
> NONE and MCS.
>
> Signed-off-by: Nanley Chery <nanley.g.chery at intel.com>
> ---
>  src/intel/vulkan/genX_cmd_buffer.c | 62 ++++++++++++++++++------------
> --------
>  1 file changed, 30 insertions(+), 32 deletions(-)
>
> diff --git a/src/intel/vulkan/genX_cmd_buffer.c
> b/src/intel/vulkan/genX_cmd_buffer.c
> index 49ad41edbd..1aa79c8e7b 100644
> --- a/src/intel/vulkan/genX_cmd_buffer.c
> +++ b/src/intel/vulkan/genX_cmd_buffer.c
> @@ -253,6 +253,36 @@ color_attachment_compute_aux_usage(struct anv_device
> * device,
>        att_state->input_aux_usage = ISL_AUX_USAGE_MCS;
>        att_state->fast_clear = false;
>        return;
> +   } else if (iview->image->aux_usage == ISL_AUX_USAGE_CCS_E) {
> +      att_state->aux_usage = ISL_AUX_USAGE_CCS_E;
> +      att_state->input_aux_usage = ISL_AUX_USAGE_CCS_E;
>

I'm not sure if this actually improves readability as-is.  The no aux case
and MCS cases are early returns.  Maybe what we want is something like this:

if (aux_surface.isl.size == 0) {
   /* set to none */
   return;
}

switch (aux_usage) {
case MCS:
case CCS_E:
   aux_state->aux_usage = iview->image->aux_usage;
   aux_state->input_aux_usage = iview->image->aux_usage;
   break;

case NONE:
   assert(samples == 1);
   /* stuff below */
   break;

default:
   unreachable();
}

/* Now we determine whether or not we want to fast-clear */

if (samples > 1) {
   perf_debug();
   fast_clear = false;
   return;
}

/* Other fast clear determination. */

Incidentally, it may be cleaner in the long run if we split this into two
functions: compute_ccs_usage and compute_mcs_usage.

Just thoughts BTW.  I'm not 100% sure how to make this the most readable.


> +   } else {
> +      att_state->aux_usage = ISL_AUX_USAGE_CCS_D;
> +      /* From the Sky Lake PRM, RENDER_SURFACE_STATE::
> AuxiliarySurfaceMode:
> +       *
> +       *    "If Number of Multisamples is MULTISAMPLECOUNT_1, AUX_CCS_D
> +       *    setting is only allowed if Surface Format supported for Fast
> +       *    Clear. In addition, if the surface is bound to the sampling
> +       *    engine, Surface Format must be supported for Render Target
> +       *    Compression for surfaces bound to the sampling engine."
> +       *
> +       * In other words, we can only sample from a fast-cleared image if
> it
> +       * also supports color compression.
> +       */
> +      if (isl_format_supports_ccs_e(&device->info, iview->isl.format)) {
> +         /* TODO: Consider using a heuristic to determine if temporarily
> enabling
> +          * CCS_E for this image view would be beneficial.
> +          *
> +          * While fast-clear resolves and partial resolves are fairly
> cheap in the
> +          * case where you render to most of the pixels, full resolves
> are not
> +          * because they potentially involve reading and writing the
> entire
> +          * framebuffer.  If we can't texture with CCS_E, we should leave
> it off and
> +          * limit ourselves to fast clears.
> +          */
> +         att_state->input_aux_usage = ISL_AUX_USAGE_CCS_D;
> +      } else {
> +         att_state->input_aux_usage = ISL_AUX_USAGE_NONE;
> +      }
>     }
>
>     assert(iview->image->aux_surface.isl.usage & ISL_SURF_USAGE_CCS_BIT);
> @@ -315,38 +345,6 @@ color_attachment_compute_aux_usage(struct anv_device
> * device,
>     } else {
>        att_state->fast_clear = false;
>     }
> -
> -   /**
> -    * TODO: Consider using a heuristic to determine if temporarily
> enabling
> -    * CCS_E for this image view would be beneficial.
> -    *
> -    * While fast-clear resolves and partial resolves are fairly cheap in
> the
> -    * case where you render to most of the pixels, full resolves are not
> -    * because they potentially involve reading and writing the entire
> -    * framebuffer.  If we can't texture with CCS_E, we should leave it
> off and
> -    * limit ourselves to fast clears.
> -    */
> -   if (iview->image->aux_usage == ISL_AUX_USAGE_CCS_E) {
> -      att_state->aux_usage = ISL_AUX_USAGE_CCS_E;
> -      att_state->input_aux_usage = ISL_AUX_USAGE_CCS_E;
> -   } else {
> -      att_state->aux_usage = ISL_AUX_USAGE_CCS_D;
> -      /* From the Sky Lake PRM, RENDER_SURFACE_STATE::
> AuxiliarySurfaceMode:
> -       *
> -       *    "If Number of Multisamples is MULTISAMPLECOUNT_1, AUX_CCS_D
> -       *    setting is only allowed if Surface Format supported for Fast
> -       *    Clear. In addition, if the surface is bound to the sampling
> -       *    engine, Surface Format must be supported for Render Target
> -       *    Compression for surfaces bound to the sampling engine."
> -       *
> -       * In other words, we can only sample from a fast-cleared image if
> it
> -       * also supports color compression.
> -       */
> -      if (isl_format_supports_ccs_e(&device->info, iview->isl.format))
> -         att_state->input_aux_usage = ISL_AUX_USAGE_CCS_D;
> -      else
> -         att_state->input_aux_usage = ISL_AUX_USAGE_NONE;
> -   }
>  }
>
>  static bool
> --
> 2.13.1
>
> _______________________________________________
> 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/20170710/c4148345/attachment-0001.html>


More information about the mesa-dev mailing list