On Wed, Jan 24, 2018 at 05:00:47PM -0800, Jason Ekstrand wrote:
> On Wed, Jan 24, 2018 at 4:39 PM, Nanley Chery <nanleych...@gmail.com> wrote:
> 
> > On Wed, Jan 24, 2018 at 04:15:33PM -0800, Jason Ekstrand wrote:
> > > On Wed, Jan 24, 2018 at 4:04 PM, Nanley Chery <nanleych...@gmail.com>
> > wrote:
> > >
> > > > On Fri, Jan 19, 2018 at 03:47:30PM -0800, Jason Ekstrand wrote:
> > > > > The current strategy we use for managing resolves has an issues
> > where we
> > > > > track clear colors and the need for resolves per-LOD but we still
> > allow
> > > > > resolves of only a subset of the slices in any given LOD and doing so
> > > > > sets the "needs resolve" flag for that LOD to false while leaving the
> > > > > remaining layers unresolved.  This patch is only the first step and
> > does
> > > > > not, by itself fix anything.  However, it's fairly self-contained and
> > > > > splitting it out means any performance regressions should bisect to
> > this
> > > > > nice obvious commit rather than to the giant "rework aux tracking"
> > > > > commit.
> > > > >
> > > > > Nanley and I did some testing and none of the applications we tested
> > > > > even tried to fast-clear anything other than the first slice of an
> > > > > image.  The applications tested were:
> > > > >
> > > >
> > > > Thanks for documenting the tested apps! We could be a tad more precise
> > > > by noting that we didn't check if an app cleared a subset of its
> > > > layers.. though even if they did, we wouldn't try to optimize for it so
> > > > it doesn't really matter.
> > > >
> > >
> > > Sure, I can make the comment a bit more descriptive:
> > >
> > >     Nanley and I did some testing and none of the applications we tested
> > >     even tried to fast-clear anything other than the first slice of an
> > >     image.  The test was done by adding a printf right before we call
> > >     blorp_fast_clear if we were every going to touch any slice other than
> > >     the first with a fast-clear.  Due to the way the original code was
> > >     structured, this would not have included applications which only
> > cleared
> > >     a subset of layers.  The applications tested were:
> > >
> > >
> > >
> >
> > That works.
> >
> > > > >  * All Sascha Willems demos
> > > > >  * Aztec Ruins
> > > > >  * Dota 2
> > > > >  * The Talos Principle
> > > > >  * Mad Max
> > > > >
> > > >
> > > > I'm also seeing the same behavior in the following apps:
> > > >  * Warhammer 40,000: Dawn of War III
> > > >  * Serious Sam Fusion 2017: BFE
> > > >
> > > > Feel free to add them on.
> > > >
> > >
> > > Will do.  Thanks!
> > >
> > >
> > > > > While not the full list of shipping applications, it's a pretty good
> > > > > spread and covers most of the engines we've seen running on our
> > driver.
> > > > > If this is ever shown to be a performance problem in the future, we
> > can
> > > > > reconsider our strategy.
> > > > > ---
> > > > >  src/intel/vulkan/genX_cmd_buffer.c | 34
> > +++++++++++++++++-------------
> > > > ----
> > > > >  1 file changed, 17 insertions(+), 17 deletions(-)
> > > > >
> > > > > diff --git a/src/intel/vulkan/genX_cmd_buffer.c
> > > > b/src/intel/vulkan/genX_cmd_buffer.c
> > > > > index ad7b9fc..0f56719 100644
> > > > > --- a/src/intel/vulkan/genX_cmd_buffer.c
> > > > > +++ b/src/intel/vulkan/genX_cmd_buffer.c
> > > > > @@ -309,23 +309,6 @@ color_attachment_compute_aux_usage(struct
> > > > anv_device * device,
> > > > >        if (GEN_GEN <= 8 && !att_state->clear_color_is_zero_one)
> > > > >           att_state->fast_clear = false;
> > > > >
> > > > > -      /* We allow fast clears when all aux layers of the miplevel
> > are
> > > > targeted.
> > > > > -       * See add_fast_clear_state_buffer() for more information.
> > Also,
> > > > because
> > > > > -       * we only either do a fast clear or a normal clear and not
> > both,
> > > > this
> > > > > -       * complies with the gen7 restriction of not fast-clearing
> > > > multiple
> > > > > -       * layers.
> > > > > -       */
> > > > > -      if (cmd_state->framebuffer->layers !=
> > > > > -          anv_image_aux_layers(iview->image,
> > VK_IMAGE_ASPECT_COLOR_BIT,
> > > > > -                               iview->planes[0].isl.base_level)) {
> > > > > -         att_state->fast_clear = false;
> > > > > -         if (GEN_GEN == 7) {
> > > > > -            anv_perf_warn(device->instance, iview->image,
> > > > > -                          "Not fast-clearing the first layer in "
> > > > > -                          "a multi-layer fast clear.");
> > > > > -         }
> > > > > -      }
> > > > > -
> > > > >        /* We only allow fast clears in the GENERAL layout if the
> > > > auxiliary
> > > > >         * buffer is always enabled and the fast-clear value is all
> > 0's.
> > > > See
> > > > >         * add_fast_clear_state_buffer() for more information.
> > > > > @@ -337,6 +320,23 @@ color_attachment_compute_aux_usage(struct
> > > > anv_device * device,
> > > > >           att_state->fast_clear = false;
> > > > >        }
> > > > >
> > > > > +      /* We only allow fast clears to the first slice of an image
> > > > (level 0,
> > > > > +       * layer 0) and only for the entire slice.  This guarantees us
> > > > that, at
> > > > > +       * any given time, there is only one clear color on any given
> > > > image at
> > > > > +       * any given time.  At the time of our testing (Jan 17, 2018),
> > > > there
> > > > > +       * were known applications which would benefit from
> > fast-clearing
> > > > more
> > > >                 ^
> > > >                 no
> > > >
> > >
> > > Yup.  Fixed locally.
> > >
> > >
> > > > > +       * than just the first slice.
> > > > > +       */
> > > > > +      if (att_state->fast_clear &&
> > > > > +          (iview->planes[0].isl.base_level > 0 ||
> > > > > +           iview->image->type == VK_IMAGE_TYPE_3D ||
> > > > > +           iview->image->array_size > 0)) {
> > > >
> > > > These conditions seem too restrictive. Instead of restricting
> > > > fast-clears to the first slice of an image, we're restricting
> > > > fast-clears to images with only one layer. Also, the imageview could
> > > > point to the first slice even if the base image is 3D.
> > > >
> > >
> > > Yes, it is.  We need to restrict it this far due to issues with resolve
> > > tracking.  The last patch in the series lifts the restriction back to the
> > > point we originally discussed of clearing the first slice of 3D and array
> > > textures.
> > >
> > >
> >
> > Right, I must've skimmed the commit title earlier.
> > Changing: iview->image->type == VK_IMAGE_TYPE_3D
> > to:       iview->image->extent.depth > 1
> > is more what we want right?
> >
> 
> I think that would work, yes.  I can make the change if you prefer.  I
> hightly doubt there are a lot of depth-1 3D images though. :)  I don't
> really care as it's going away later anyway.
> 
> 

Yeah, they probably are small in number, but I do like that new diff
would do exactly what the commit message says. With that change,
this patch is
Reviewed-by: Nanley Chery <nanley.g.ch...@intel.com>

> > > > > +         anv_perf_warn(device->instance, iview->image,
> > > > > +                       "Rendering to a multi-LOD or multi-layer
> > > > framebuffer "
> > > > > +                       "with LOAD_OP_CLEAR.  Not fast-clearing");
> > > > > +         att_state->fast_clear = false;
> > > > > +      }
> > > > > +
> > > > >        if (att_state->fast_clear) {
> > > > >           memcpy(fast_clear_color->u32, att_state->clear_value.color.
> > > > uint32,
> > > > >                  sizeof(fast_clear_color->u32));
> > > > > --
> > > > > 2.5.0.400.gff86faf
> > > > >
> > > > > _______________________________________________
> > > > > mesa-dev mailing list
> > > > > mesa-dev@lists.freedesktop.org
> > > > > https://lists.freedesktop.org/mailman/listinfo/mesa-dev
> > > >
> >
_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to