[Mesa-dev] [v2 2/7] i965/gen4: Remove non-existing stencil and hiz buffer setup

Jason Ekstrand jason at jlekstrand.net
Thu Jun 15 16:10:21 UTC 2017


Yes, please!

Reviewed-by: Jason Ekstrand <jason at jlekstrand.net>

On Mon, May 22, 2017 at 12:12 PM, Topi Pohjolainen <
topi.pohjolainen at gmail.com> wrote:

> Separate stencil and hiz are only enabled for gen6+.
>
> Signed-off-by: Topi Pohjolainen <topi.pohjolainen at intel.com>
> ---
>  src/mesa/drivers/dri/i965/brw_context.h    |   6 +-
>  src/mesa/drivers/dri/i965/brw_misc_state.c | 120
> +++--------------------------
>  2 files changed, 14 insertions(+), 112 deletions(-)
>
> diff --git a/src/mesa/drivers/dri/i965/brw_context.h
> b/src/mesa/drivers/dri/i965/brw_context.h
> index 6b37500..379c18f 100644
> --- a/src/mesa/drivers/dri/i965/brw_context.h
> +++ b/src/mesa/drivers/dri/i965/brw_context.h
> @@ -1200,8 +1200,10 @@ struct brw_context
>        struct intel_mipmap_tree *stencil_mt;
>
>        /* Inter-tile (page-aligned) byte offsets. */
> -      uint32_t depth_offset, hiz_offset, stencil_offset;
> -      /* Intra-tile x,y offsets for drawing to depth/stencil/hiz */
> +      uint32_t depth_offset;
> +      /* Intra-tile x,y offsets for drawing to combined depth-stencil.
> Only
> +       * used for Gen < 6.
> +       */
>        uint32_t tile_x, tile_y;
>     } depthstencil;
>
> diff --git a/src/mesa/drivers/dri/i965/brw_misc_state.c
> b/src/mesa/drivers/dri/i965/brw_misc_state.c
> index 66f8555..6ea1fb0 100644
> --- a/src/mesa/drivers/dri/i965/brw_misc_state.c
> +++ b/src/mesa/drivers/dri/i965/brw_misc_state.c
> @@ -216,8 +216,6 @@ brw_workaround_depthstencil_alignment(struct
> brw_context *brw,
>     brw->depthstencil.tile_x = 0;
>     brw->depthstencil.tile_y = 0;
>     brw->depthstencil.depth_offset = 0;
> -   brw->depthstencil.stencil_offset = 0;
> -   brw->depthstencil.hiz_offset = 0;
>     brw->depthstencil.depth_mt = NULL;
>     brw->depthstencil.stencil_mt = NULL;
>     if (depth_irb)
> @@ -412,26 +410,15 @@ brw_workaround_depthstencil_alignment(struct
> brw_context *brw,
>           intel_miptree_get_aligned_offset(depth_mt,
>                                            depth_irb->draw_x &
> ~tile_mask_x,
>                                            depth_irb->draw_y &
> ~tile_mask_y);
> -      if (intel_renderbuffer_has_hiz(depth_irb)) {
> -         brw->depthstencil.hiz_offset =
> -            intel_miptree_get_aligned_offset(depth_mt,
> -                                             depth_irb->draw_x &
> ~tile_mask_x,
> -                                             (depth_irb->draw_y &
> ~tile_mask_y) / 2);
> -      }
> +      assert(!intel_renderbuffer_has_hiz(depth_irb));
>     }
>     if (stencil_irb) {
>        stencil_mt = get_stencil_miptree(stencil_irb);
>
>        brw->depthstencil.stencil_mt = stencil_mt;
> -      if (stencil_mt->format == MESA_FORMAT_S_UINT8) {
> -         /* Note: we can't compute the stencil offset using
> -          * intel_region_get_aligned_offset(), because stencil_region
> claims
> -          * that the region is untiled even though it's W tiled.
> -          */
> -         brw->depthstencil.stencil_offset =
> -            (stencil_draw_y & ~tile_mask_y) * stencil_mt->pitch +
> -            (stencil_draw_x & ~tile_mask_x) * 64;
> -      } else if (!depth_irb) {
> +      assert(stencil_mt->format != MESA_FORMAT_S_UINT8);
> +
> +      if (!depth_irb) {
>           brw->depthstencil.depth_offset =
>              intel_miptree_get_aligned_offset(
>                 stencil_mt,
> @@ -539,39 +526,19 @@ brw_emit_depth_stencil_hiz(struct brw_context *brw,
>                             uint32_t width, uint32_t height,
>                             uint32_t tile_x, uint32_t tile_y)
>  {
> -   /* Enable the hiz bit if we're doing separate stencil, because it and
> the
> -    * separate stencil bit must have the same value. From Section
> 2.11.5.6.1.1
> -    * 3DSTATE_DEPTH_BUFFER, Bit 1.21 "Separate Stencil Enable":
> -    *     [DevIL]: If this field is enabled, Hierarchical Depth Buffer
> -    *     Enable must also be enabled.
> -    *
> -    *     [DevGT]: This field must be set to the same value (enabled or
> -    *     disabled) as Hierarchical Depth Buffer Enable
> -    */
> -   bool enable_hiz_ss = hiz || separate_stencil;
> -
> +   (void)hiz;
> +   (void)separate_stencil;
> +   (void)stencil_mt;
>
> -   /* 3DSTATE_DEPTH_BUFFER, 3DSTATE_STENCIL_BUFFER are both
> -    * non-pipelined state that will need the PIPE_CONTROL workaround.
> -    */
> -   if (brw->gen == 6) {
> -      brw_emit_depth_stall_flushes(brw);
> -   }
> +   assert(!hiz);
> +   assert(!separate_stencil);
>
> -   unsigned int len;
> -   if (brw->gen >= 6)
> -      len = 7;
> -   else if (brw->is_g4x || brw->gen == 5)
> -      len = 6;
> -   else
> -      len = 5;
> +   const unsigned len = (brw->is_g4x || brw->gen == 5) ? 6 : 5;
>
>     BEGIN_BATCH(len);
>     OUT_BATCH(_3DSTATE_DEPTH_BUFFER << 16 | (len - 2));
>     OUT_BATCH((depth_mt ? depth_mt->pitch - 1 : 0) |
>               (depthbuffer_format << 18) |
> -             ((enable_hiz_ss ? 1 : 0) << 21) | /* separate stencil enable
> */
> -             ((enable_hiz_ss ? 1 : 0) << 22) | /* hiz enable */
>               (BRW_TILEWALK_YMAJOR << 26) |
>               ((depth_mt ? depth_mt->tiling != I915_TILING_NONE : 1)
>                << 27) |
> @@ -598,73 +565,6 @@ brw_emit_depth_stencil_hiz(struct brw_context *brw,
>        OUT_BATCH(0);
>
>     ADVANCE_BATCH();
> -
> -   if (hiz || separate_stencil) {
> -      /*
> -       * In the 3DSTATE_DEPTH_BUFFER batch emitted above, the 'separate
> -       * stencil enable' and 'hiz enable' bits were set. Therefore we must
> -       * emit 3DSTATE_HIER_DEPTH_BUFFER and 3DSTATE_STENCIL_BUFFER. Even
> if
> -       * there is no stencil buffer, 3DSTATE_STENCIL_BUFFER must be
> emitted;
> -       * failure to do so causes hangs on gen5 and a stall on gen6.
> -       */
> -
> -      /* Emit hiz buffer. */
> -      if (hiz) {
> -         assert(depth_mt);
> -        BEGIN_BATCH(3);
> -        OUT_BATCH((_3DSTATE_HIER_DEPTH_BUFFER << 16) | (3 - 2));
> -        OUT_BATCH(depth_mt->hiz_buf->aux_base.pitch - 1);
> -        OUT_RELOC(depth_mt->hiz_buf->aux_base.bo,
> -                  I915_GEM_DOMAIN_RENDER, I915_GEM_DOMAIN_RENDER,
> -                  brw->depthstencil.hiz_offset);
> -        ADVANCE_BATCH();
> -      } else {
> -        BEGIN_BATCH(3);
> -        OUT_BATCH((_3DSTATE_HIER_DEPTH_BUFFER << 16) | (3 - 2));
> -        OUT_BATCH(0);
> -        OUT_BATCH(0);
> -        ADVANCE_BATCH();
> -      }
> -
> -      /* Emit stencil buffer. */
> -      if (separate_stencil) {
> -        BEGIN_BATCH(3);
> -        OUT_BATCH((_3DSTATE_STENCIL_BUFFER << 16) | (3 - 2));
> -         /* The stencil buffer has quirky pitch requirements.  From Vol
> 2a,
> -          * 11.5.6.2.1 3DSTATE_STENCIL_BUFFER, field "Surface Pitch":
> -          *    The pitch must be set to 2x the value computed based on
> width, as
> -          *    the stencil buffer is stored with two rows interleaved.
> -          */
> -        OUT_BATCH(2 * stencil_mt->pitch - 1);
> -        OUT_RELOC(stencil_mt->bo,
> -                  I915_GEM_DOMAIN_RENDER, I915_GEM_DOMAIN_RENDER,
> -                  brw->depthstencil.stencil_offset);
> -        ADVANCE_BATCH();
> -      } else {
> -        BEGIN_BATCH(3);
> -        OUT_BATCH((_3DSTATE_STENCIL_BUFFER << 16) | (3 - 2));
> -        OUT_BATCH(0);
> -        OUT_BATCH(0);
> -        ADVANCE_BATCH();
> -      }
> -   }
> -
> -   /*
> -    * On Gen >= 6, emit clear params for safety. If using hiz, then clear
> -    * params must be emitted.
> -    *
> -    * From Section 2.11.5.6.4.1 3DSTATE_CLEAR_PARAMS:
> -    *     3DSTATE_CLEAR_PARAMS packet must follow the DEPTH_BUFFER_STATE
> packet
> -    *     when HiZ is enabled and the DEPTH_BUFFER_STATE changes.
> -    */
> -   if (brw->gen >= 6 || hiz) {
> -      BEGIN_BATCH(2);
> -      OUT_BATCH(_3DSTATE_CLEAR_PARAMS << 16 |
> -               GEN5_DEPTH_CLEAR_VALID |
> -               (2 - 2));
> -      OUT_BATCH(depth_mt ? depth_mt->depth_clear_value : 0);
> -      ADVANCE_BATCH();
> -   }
>  }
>
>  const struct brw_tracked_state brw_depthbuffer = {
> --
> 2.9.3
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/mesa-dev
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/mesa-dev/attachments/20170615/98e3dc05/attachment-0001.html>


More information about the mesa-dev mailing list