On Mon, Jan 08, 2018 at 04:33:25PM -0800, Rafael Antognolli wrote:
> On Mon, Jan 08, 2018 at 04:03:47PM -0800, Jason Ekstrand wrote:
> > On Mon, Jan 8, 2018 at 3:00 PM, Nanley Chery <nanleych...@gmail.com> wrote:
> > 
> >     On Fri, Dec 15, 2017 at 02:53:30PM -0800, Rafael Antognolli wrote:
> >     > On Gen10+, if we use the clear state address field in the surface 
> > state
> >     > instead of the clear color directly, there's a restriction that the
> >     > address must point to the lower part of a 64 byte cache-line.
> >     >
> >     > Signed-off-by: Rafael Antognolli <rafael.antogno...@intel.com>
> >     > ---
> >     >  src/intel/vulkan/anv_private.h | 12 +++++++++++-
> >     >  1 file changed, 11 insertions(+), 1 deletion(-)
> >     >
> >     > diff --git a/src/intel/vulkan/anv_private.h b/src/intel/vulkan/anv_
> >     private.h
> >     > index b7bde4b8ce6..43cbf065724 100644
> >     > --- a/src/intel/vulkan/anv_private.h
> >     > +++ b/src/intel/vulkan/anv_private.h
> >     > @@ -2490,7 +2490,17 @@ anv_fast_clear_state_entry_size(const struct
> >     anv_device *device)
> >     >      * GPU memcpy operations.
> >     >      */
> >     >     assert(device->isl_dev.ss.clear_value_size % 4 == 0);
> >     > -   return device->isl_dev.ss.clear_value_size + 4;
> >     > +
> >     > +   const unsigned entry_size = device->isl_dev.ss.clear_value_size + 
> > 4;
> >     > +   /* On Gen10+, we use the clear color address of the surface to 
> > point
> >     to this
> >     > +    * buffer directly. However, according to the bspec:
> >     > +    *
> >     > +    *    The memory layout of the clear color pointed to by this 
> > address
> >     is a
> >     > +    *    value stored in the lower-order bytes of a 64-byte 
> > cache-line.
> >     > +    *
> >     > +    * So add some padding here for Gen10+.
> >     > +    */
> > 
> >     I don't see any indication that the upper bytes may be modified by the
> >     hardware. For that reason, I think we can assume that the image that
> >     precedes this entry is at least 64 bytes and avoid padding the entry.
> > 
> > 
> > I'm not sure what you mean by this.
> 
> Hmm... maybe my comment is confusing, but the idea is to add padding to
> the entry, so if we have multiple entries (one per level), all of them
> are aligned. I can try to find a better way to guarantee that.
> 
> Without this code, I was hitting the assert in patch 04 on some tests.
> 

Oh, okay. That makes sense. This solution looks good to me. Perhaps we
want the title to mention that we specifically want the buffer entries
to be 64-byte aligned.

> >     > +   return device->info.gen >= 10 ? ALIGN(entry_size, 64) : 
> > entry_size;
> > 
> > 
> >     >  }
> >     >
> >     >  static inline struct anv_address
> >     > --
> >     > 2.14.3
> >     >
> >     > _______________________________________________
> >     > 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
> > 
> > 
_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to