[Mesa-dev] [PATCH 13/18] i965: Pass slice details as parameters for surface setup

Kenneth Graunke kenneth at whitecape.org
Wed Apr 29 01:26:06 PDT 2015


On Wednesday, April 29, 2015 08:58:18 AM Pohjolainen, Topi wrote:
> On Tue, Apr 28, 2015 at 02:45:27PM -0700, Kenneth Graunke wrote:
> > On Wednesday, April 22, 2015 11:47:33 PM Topi Pohjolainen wrote:
> > > Also changed a couple of direct shifts into SET_FIELD().
> > > 
> > > Signed-off-by: Topi Pohjolainen <topi.pohjolainen at intel.com>
> > > ---
> > >  src/mesa/drivers/dri/i965/brw_context.h           |  3 ++-
> > >  src/mesa/drivers/dri/i965/brw_wm_surface_state.c  | 30 +++++++++++++----------
> > >  src/mesa/drivers/dri/i965/gen7_wm_surface_state.c | 14 +++++------
> > >  src/mesa/drivers/dri/i965/gen8_surface_state.c    | 10 +++-----
> > >  4 files changed, 29 insertions(+), 28 deletions(-)
> > > 
> > > diff --git a/src/mesa/drivers/dri/i965/brw_context.h b/src/mesa/drivers/dri/i965/brw_context.h
> > > index b90d329..ae28955 100644
> > > --- a/src/mesa/drivers/dri/i965/brw_context.h
> > > +++ b/src/mesa/drivers/dri/i965/brw_context.h
> > > @@ -964,10 +964,11 @@ struct brw_context
> > >     {
> > >        void (*update_texture_surface)(struct brw_context *brw,
> > >                                       const struct intel_mipmap_tree *mt,
> > > -                                     struct gl_texture_object *tObj,
> > >                                       uint32_t tex_format,
> > >                                       bool is_integer_format,
> > >                                       GLenum target, uint32_t effective_depth,
> > > +                                     uint32_t min_layer,
> > > +                                     uint32_t min_lod, uint32_t mip_count, 
> > >                                       int swizzle, uint32_t *surf_offset,
> > >                                       bool for_gather);
> > >        uint32_t (*update_renderbuffer_surface)(struct brw_context *brw,
> > > diff --git a/src/mesa/drivers/dri/i965/brw_wm_surface_state.c b/src/mesa/drivers/dri/i965/brw_wm_surface_state.c
> > > index f7acad4..ad5ddb5 100644
> > > --- a/src/mesa/drivers/dri/i965/brw_wm_surface_state.c
> > > +++ b/src/mesa/drivers/dri/i965/brw_wm_surface_state.c
> > > @@ -310,16 +310,16 @@ update_buffer_texture_surface(struct gl_context *ctx,
> > >  static void
> > >  brw_update_texture_surface(struct brw_context *brw,
> > >                             const struct intel_mipmap_tree *mt,
> > > -                           struct gl_texture_object *tObj,
> > >                             uint32_t tex_format,
> > >                             bool is_integer_format /* unused */,
> > >                             GLenum target,
> > >                             uint32_t effective_depth /* unused */,
> > > +                           uint32_t min_layer /* unused */,
> > > +                           uint32_t min_lod, uint32_t mip_count, 
> > >                             int swizzle /* unused */,
> > >                             uint32_t *surf_offset,
> > >                             bool for_gather)
> > >  {
> > > -   struct intel_texture_object *intelObj = intel_texture_object(tObj);
> > >     uint32_t *surf;
> > >  
> > >     surf = brw_state_batch(brw, AUB_TRACE_SURFACE_STATE,
> > > @@ -361,16 +361,16 @@ brw_update_texture_surface(struct brw_context *brw,
> > >  
> > >     surf[1] = mt->bo->offset64 + mt->offset; /* reloc */
> > >  
> > > -   surf[2] = ((intelObj->_MaxLevel - tObj->BaseLevel) << BRW_SURFACE_LOD_SHIFT |
> > > -	      (mt->logical_width0 - 1) << BRW_SURFACE_WIDTH_SHIFT |
> > > -	      (mt->logical_height0 - 1) << BRW_SURFACE_HEIGHT_SHIFT);
> > > +   surf[2] = SET_FIELD(mip_count, BRW_SURFACE_LOD) |
> > > +             SET_FIELD(mt->logical_width0 - 1, BRW_SURFACE_WIDTH) |
> > > +             SET_FIELD(mt->logical_height0 - 1, BRW_SURFACE_HEIGHT);
> > >  
> > > -   surf[3] = (brw_get_surface_tiling_bits(mt->tiling) |
> > > -	      (mt->logical_depth0 - 1) << BRW_SURFACE_DEPTH_SHIFT |
> > > -	      (mt->pitch - 1) << BRW_SURFACE_PITCH_SHIFT);
> > > +   surf[3] = brw_get_surface_tiling_bits(mt->tiling) |
> > > +	     SET_FIELD(mt->logical_depth0 - 1, BRW_SURFACE_DEPTH) |
> > > +	     SET_FIELD(mt->pitch - 1, BRW_SURFACE_PITCH);
> > >  
> > > -   surf[4] = (brw_get_surface_num_multisamples(mt->num_samples) |
> > > -              SET_FIELD(tObj->BaseLevel - mt->first_level, BRW_SURFACE_MIN_LOD));
> > > +   surf[4] = brw_get_surface_num_multisamples(mt->num_samples) |
> > > +             SET_FIELD(min_lod, BRW_SURFACE_MIN_LOD);
> > 
> > This is not equivalent...Min Lod used to be:
> > 
> >    tObj->BaseLevel - mt->first_level
> > 
> > and now it is:
> > 
> >    tObj->MinLevel + tObj->BaseLevel - mt->first_level
> > 
> > I would really appreciate it if you could make this a separate patch
> > from the refactoring, for easier bisectability.  (First add tObj->MinLevel
> > to the Gen4-6 code, then do this refactor.)
> > 
> > It seems like a fine change, but is certainly worth noting in the commit
> > message.  Perhaps this is what fixed some tests?
> 
> Mark helped me to bisect that with Jenkins, it wasn't this patch. It was
> 
> i965: Pass slice details as parameters for surface setup
> 
> 
> Anyway, as the series grew I started forgetting things I meant to say or
> fix. This was something I meant to address, my apologies for you to need to
> figure it out manually. I actually thought adding assert and comment here:
> 
>    /* Mininum level setting is only used for ARB_texture_view which isn't
>     * enabled before gen7.
>     */
>    assert(ctx->Extensions.ARB_texture_view || tObj->MinLevel == 0);
> 
> How would you feel about that?

Ahh, right, that is only used for texture view.  So they are equivalent.

Cool.  Seems like a reasonable assertion to add.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: This is a digitally signed message part.
URL: <http://lists.freedesktop.org/archives/mesa-dev/attachments/20150429/277ea0cb/attachment.sig>


More information about the mesa-dev mailing list