[Mesa-dev] [PATCH v3 11/16] anv/cmd_buffer: Move aux_usage assignment up
Nanley Chery
nanleychery at gmail.com
Tue Jul 11 23:31:11 UTC 2017
On Mon, Jul 10, 2017 at 02:36:16PM -0700, Jason Ekstrand wrote:
> 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.
>
>
I'm personally not finding the alternative block above more readable. To
overcome this disagreement, I don't mind doing any of the following:
1. Omit the rationale in the commit message.
2. Drop the patch from this series.
Thoughts?
-Nanley
> > + } 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
> >
More information about the mesa-dev
mailing list