[Mesa-dev] [PATCH 2/2] i965/skl: [SQUASH] Update the MCS buffer scale sizes

Ben Widawsky ben at bwidawsk.net
Tue Mar 10 22:16:32 PDT 2015


On Tue, Mar 10, 2015 at 09:43:26PM -0700, Kenneth Graunke wrote:
> On Thursday, February 26, 2015 03:42:53 PM Ben Widawsky wrote:
> > Keep this as a separate patch for review, but I will squash it with the previous
> > patch before pushing.
> > 
> > We don't support 16x MSAA yet, but I entered it in here while I was at the
> > table.
> > 
> > I'm having trouble getting through a piglit run on SKL at the moment, so I just
> > few a threw small tests at it:
> > 
> > tests/fast_color_clear/all-colors.shader_test
> > tests/fast_color_clear/non-redundant-clear.shader_test
> > tests/fast_color_clear/redundant-clear.shader_test
> > tests/fast_color_clear/fast-slow-clear-interaction.shader_test
> > 
> > Cc: Kristian Høgsberg <krh at bitplanet.net>
> > Signed-off-by: Ben Widawsky <ben at bwidawsk.net>
> > ---
> >  src/gallium/drivers/ilo/ilo_layout.c            |  5 ++++-
> >  src/mesa/drivers/dri/i965/brw_meta_fast_clear.c |  2 ++
> >  src/mesa/drivers/dri/i965/intel_mipmap_tree.c   | 11 +++++++++--
> >  3 files changed, 15 insertions(+), 3 deletions(-)
> > 
> > diff --git a/src/gallium/drivers/ilo/ilo_layout.c b/src/gallium/drivers/ilo/ilo_layout.c
> > index 0b639b2..c2c8ec5 100644
> > --- a/src/gallium/drivers/ilo/ilo_layout.c
> > +++ b/src/gallium/drivers/ilo/ilo_layout.c
> > @@ -1257,7 +1257,10 @@ layout_calculate_mcs_size(struct ilo_layout *layout,
> >           break;
> >        case INTEL_TILING_Y:
> >           downscale_x = 32 / layout->block_size;
> > -         downscale_y = 4;
> > +         if (brw->gen >= 9)
> > +            downscale_y = 2;
> > +         else
> > +            downscale_y = 4;
> >           break;
> >        default:
> >           assert(!"unsupported tiling mode");
> 
> Don't forget to drop this hunk.
> 
> > diff --git a/src/mesa/drivers/dri/i965/brw_meta_fast_clear.c b/src/mesa/drivers/dri/i965/brw_meta_fast_clear.c
> > index c4d4b68..f487e97 100644
> > --- a/src/mesa/drivers/dri/i965/brw_meta_fast_clear.c
> > +++ b/src/mesa/drivers/dri/i965/brw_meta_fast_clear.c
> > @@ -289,6 +289,8 @@ get_fast_clear_rect(struct brw_context *brw, struct gl_framebuffer *fb,
> >        case 8:
> >           x_scaledown = 2;
> >           break;
> > +      case 16:
> > +         x_scaledown = 1;
> >        default:
> >           unreachable("Unexpected sample count for fast clear");
> >        }
> 
> This hunk gets a R-b.  Searching for "width of clear rect" (in quotes)
> in the documentation finds the page with the table cited in the above
> comments...and it confirms your number here.
> 
> > diff --git a/src/mesa/drivers/dri/i965/intel_mipmap_tree.c b/src/mesa/drivers/dri/i965/intel_mipmap_tree.c
> > index 36c3b26..75ce2b9 100644
> > --- a/src/mesa/drivers/dri/i965/intel_mipmap_tree.c
> > +++ b/src/mesa/drivers/dri/i965/intel_mipmap_tree.c
> > @@ -138,10 +138,17 @@ intel_get_non_msrt_mcs_alignment(struct brw_context *brw,
> >        unreachable("Non-MSRT MCS requires X or Y tiling");
> >        /* In release builds, fall through */
> >     case I915_TILING_Y:
> > -      *width_px = 32 / mt->cpp;
> > -      *height = 4;
> > +      if (brw->gen >= 9) {
> > +         const int scale_factor = 16 / mt->cpp;
> > +         *width_px = 128 / scale_factor;
> > +         *height = 64;
> > +      } else {
> > +         *width_px = 32 / mt->cpp;
> > +         *height = 4;
> > +      }
> 
> I'm not getting these numbers at all...the "Color Clear of
> Non-MultiSampler Render Target Restrictions" section still has the same
> table (TiledY RT CL/Pixels/Lines 32/8/4, 64/4/4, 128/2/4) cited in the
> comments above.  I see no Skylake changes here.
> 

Hmm. The able I am looking at is
32/128/64
64/64/64
128/32/64

It's the same page, but a separate table for SKL. Perhaps I did something wrong?

> We actually don't use non-MSRT MCS buffers on arrayed or mipmapped
> textures, IIRC - it's a new feature on Broadwell we never enabled (and
> probably should).  So the new SKL comments about alignment for those
> shouldn't matter just yet.

I wasn't considering this specifically, I just was looking at that table. If
that was not the table to look at, then yeah, the numbers wouldn't be right. I
can certainly try the old table and see if tests pass.

> 
> >        break;
> >     case I915_TILING_X:
> > +      assert(brw->gen < 9);
> 
> Adding the assert looks good to me, X-Tile is definitely not supported.
> 

I don't remember leaving this on purpose. I'd rather do this as a separate
patch. Thoughts?

> >        *width_px = 64 / mt->cpp;
> >        *height = 2;
> >     }
> > 
> 
> I think what you want instead is to edit brw_meta_fast_clear.c's
> get_fast_clear_rect() - which is where the other tables come into play.
> 
> You would change:
> 
> -      y_align *= 32;
> +      y_align *= brw->gen >= 9 ? 16 : 32;
> 
> ...
> -      y_scaledown = y_align / 2;
> +      y_scaledown = brw->gen >= 9 ? y_align : (y_align / 2);
> 
> 
> If you're actually just changing the get_fast_clear_rect patch, then
> squashing it into the previous patch seems appropriate after all.
> Either way's fine.

I'll take a look. I think we have to squash the patches though since the former
patch really doesn't accomplish anything without this, so any intermediate
piglit results are kind of useless. I can probably split out the MSAA, and X
tile assertion from this.

Thanks for looking.  Let me know if you can't find the table I am referring to.


More information about the mesa-dev mailing list