Mesa (master): ilo: add variants of 3DSTATE_WM

Chia-I Wu olv at kemper.freedesktop.org
Tue Nov 11 08:04:46 UTC 2014


Module: Mesa
Branch: master
Commit: 8ebb86325b567ae6dacdefdcc79d30bf93927c79
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=8ebb86325b567ae6dacdefdcc79d30bf93927c79

Author: Chia-I Wu <olvaffe at gmail.com>
Date:   Tue Nov 11 10:25:20 2014 +0800

ilo: add variants of 3DSTATE_WM

Add gen6_hiz_3DSTATE_WM() and gen7_hiz_3DSTATE_WM() for HiZ ops without
dispatching.

Signed-off-by: Chia-I Wu <olvaffe at gmail.com>

---

 src/gallium/drivers/ilo/ilo_builder_3d_bottom.h |  106 ++++++++++++-----------
 src/gallium/drivers/ilo/ilo_render_gen6.c       |    4 +-
 src/gallium/drivers/ilo/ilo_render_gen7.c       |    5 +-
 3 files changed, 61 insertions(+), 54 deletions(-)

diff --git a/src/gallium/drivers/ilo/ilo_builder_3d_bottom.h b/src/gallium/drivers/ilo/ilo_builder_3d_bottom.h
index 3207843..1592185 100644
--- a/src/gallium/drivers/ilo/ilo_builder_3d_bottom.h
+++ b/src/gallium/drivers/ilo/ilo_builder_3d_bottom.h
@@ -282,41 +282,20 @@ static inline void
 gen6_3DSTATE_WM(struct ilo_builder *builder,
                 const struct ilo_shader_state *fs,
                 const struct ilo_rasterizer_state *rasterizer,
-                bool dual_blend, bool cc_may_kill,
-                uint32_t hiz_op)
+                bool dual_blend, bool cc_may_kill)
 {
    const uint8_t cmd_len = 9;
-   const uint32_t dw0 = GEN6_RENDER_CMD(3D, 3DSTATE_WM) | (cmd_len - 2);
    const int num_samples = 1;
-   const struct ilo_shader_cso *fs_cso;
+   const struct ilo_shader_cso *cso;
    uint32_t dw2, dw4, dw5, dw6, *dw;
 
    ILO_DEV_ASSERT(builder->dev, 6, 6);
 
-   if (!fs) {
-      /* see brwCreateContext() */
-      const int max_threads = (builder->dev->gt == 2) ? 80 : 40;
-
-      ilo_builder_batch_pointer(builder, cmd_len, &dw);
-      dw[0] = dw0;
-      dw[1] = 0;
-      dw[2] = 0;
-      dw[3] = 0;
-      dw[4] = hiz_op;
-      /* honor the valid range even if dispatching is disabled */
-      dw[5] = (max_threads - 1) << GEN6_WM_DW5_MAX_THREADS__SHIFT;
-      dw[6] = 0;
-      dw[7] = 0;
-      dw[8] = 0;
-
-      return;
-   }
-
-   fs_cso = ilo_shader_get_kernel_cso(fs);
-   dw2 = fs_cso->payload[0];
-   dw4 = fs_cso->payload[1];
-   dw5 = fs_cso->payload[2];
-   dw6 = fs_cso->payload[3];
+   cso = ilo_shader_get_kernel_cso(fs);
+   dw2 = cso->payload[0];
+   dw4 = cso->payload[1];
+   dw5 = cso->payload[2];
+   dw6 = cso->payload[3];
 
    /*
     * From the Sandy Bridge PRM, volume 2 part 1, page 248:
@@ -325,7 +304,6 @@ gen6_3DSTATE_WM(struct ilo_builder *builder,
     *      bits is set: Depth Buffer Clear , Hierarchical Depth Buffer Resolve
     *      Enable or Depth Buffer Resolve Enable."
     */
-   assert(!hiz_op);
    dw4 |= GEN6_WM_DW4_STATISTICS;
 
    if (cc_may_kill)
@@ -344,7 +322,8 @@ gen6_3DSTATE_WM(struct ilo_builder *builder,
    }
 
    ilo_builder_batch_pointer(builder, cmd_len, &dw);
-   dw[0] = dw0;
+
+   dw[0] = GEN6_RENDER_CMD(3D, 3DSTATE_WM) | (cmd_len - 2);
    dw[1] = ilo_shader_get_kernel_offset(fs);
    dw[2] = dw2;
    dw[3] = 0; /* scratch */
@@ -356,36 +335,50 @@ gen6_3DSTATE_WM(struct ilo_builder *builder,
 }
 
 static inline void
+gen6_hiz_3DSTATE_WM(struct ilo_builder *builder, uint32_t hiz_op)
+{
+   const uint8_t cmd_len = 9;
+   const int max_threads = (builder->dev->gt == 2) ? 80 : 40;
+   uint32_t *dw;
+
+   ILO_DEV_ASSERT(builder->dev, 6, 6);
+
+   ilo_builder_batch_pointer(builder, cmd_len, &dw);
+
+   dw[0] = GEN6_RENDER_CMD(3D, 3DSTATE_WM) | (cmd_len - 2);
+   dw[1] = 0;
+   dw[2] = 0;
+   dw[3] = 0;
+   dw[4] = hiz_op;
+   /* honor the valid range even if dispatching is disabled */
+   dw[5] = (max_threads - 1) << GEN6_WM_DW5_MAX_THREADS__SHIFT;
+   dw[6] = 0;
+   dw[7] = 0;
+   dw[8] = 0;
+}
+
+static inline void
 gen7_3DSTATE_WM(struct ilo_builder *builder,
                 const struct ilo_shader_state *fs,
                 const struct ilo_rasterizer_state *rasterizer,
-                bool cc_may_kill, uint32_t hiz_op)
+                bool cc_may_kill)
 {
    const uint8_t cmd_len = 3;
-   const uint32_t dw0 = GEN6_RENDER_CMD(3D, 3DSTATE_WM) | (cmd_len - 2);
    const int num_samples = 1;
+   const struct ilo_shader_cso *cso;
    uint32_t dw1, dw2, *dw;
 
    ILO_DEV_ASSERT(builder->dev, 7, 7.5);
 
-   /* see ilo_gpe_init_rasterizer_wm() */
-   if (rasterizer) {
-      dw1 = rasterizer->wm.payload[0];
-      dw2 = rasterizer->wm.payload[1];
+   /* see rasterizer_init_wm_gen7() */
+   dw1 = rasterizer->wm.payload[0];
+   dw2 = rasterizer->wm.payload[1];
 
-      assert(!hiz_op);
-      dw1 |= GEN7_WM_DW1_STATISTICS;
-   }
-   else {
-      dw1 = hiz_op;
-      dw2 = 0;
-   }
-
-   if (fs) {
-      const struct ilo_shader_cso *fs_cso = ilo_shader_get_kernel_cso(fs);
+   /* see fs_init_cso_gen7() */
+   cso = ilo_shader_get_kernel_cso(fs);
+   dw1 |= cso->payload[3];
 
-      dw1 |= fs_cso->payload[3];
-   }
+   dw1 |= GEN7_WM_DW1_STATISTICS;
 
    if (cc_may_kill)
       dw1 |= GEN7_WM_DW1_PS_ENABLE | GEN7_WM_DW1_PS_KILL;
@@ -396,12 +389,27 @@ gen7_3DSTATE_WM(struct ilo_builder *builder,
    }
 
    ilo_builder_batch_pointer(builder, cmd_len, &dw);
-   dw[0] = dw0;
+
+   dw[0] = GEN6_RENDER_CMD(3D, 3DSTATE_WM) | (cmd_len - 2);
    dw[1] = dw1;
    dw[2] = dw2;
 }
 
 static inline void
+gen7_hiz_3DSTATE_WM(struct ilo_builder *builder, uint32_t hiz_op)
+{
+   const uint8_t cmd_len = 3;
+   uint32_t *dw;
+
+   ILO_DEV_ASSERT(builder->dev, 7, 7.5);
+
+   ilo_builder_batch_pointer(builder, cmd_len, &dw);
+   dw[0] = GEN6_RENDER_CMD(3D, 3DSTATE_WM) | (cmd_len - 2);
+   dw[1] = hiz_op;
+   dw[2] = 0;
+}
+
+static inline void
 gen7_3DSTATE_PS(struct ilo_builder *builder,
                 const struct ilo_shader_state *fs,
                 bool dual_blend)
diff --git a/src/gallium/drivers/ilo/ilo_render_gen6.c b/src/gallium/drivers/ilo/ilo_render_gen6.c
index 70a7400..4e3bd18 100644
--- a/src/gallium/drivers/ilo/ilo_render_gen6.c
+++ b/src/gallium/drivers/ilo/ilo_render_gen6.c
@@ -698,7 +698,7 @@ gen6_draw_wm(struct ilo_render *r,
          gen6_wa_pre_3dstate_wm_max_threads(r);
 
       gen6_3DSTATE_WM(r->builder, vec->fs,
-            vec->rasterizer, dual_blend, cc_may_kill, 0);
+            vec->rasterizer, dual_blend, cc_may_kill);
    }
 }
 
@@ -879,7 +879,7 @@ gen6_rectlist_wm(struct ilo_render *r,
    gen6_3DSTATE_CONSTANT_PS(r->builder, NULL, NULL, 0);
 
    gen6_wa_pre_3dstate_wm_max_threads(r);
-   gen6_3DSTATE_WM(r->builder, NULL, NULL, false, false, hiz_op);
+   gen6_hiz_3DSTATE_WM(r->builder, hiz_op);
 }
 
 static void
diff --git a/src/gallium/drivers/ilo/ilo_render_gen7.c b/src/gallium/drivers/ilo/ilo_render_gen7.c
index 79d147a..ab27a3d 100644
--- a/src/gallium/drivers/ilo/ilo_render_gen7.c
+++ b/src/gallium/drivers/ilo/ilo_render_gen7.c
@@ -512,8 +512,7 @@ gen7_draw_wm(struct ilo_render *r,
       const bool cc_may_kill = (vec->dsa->dw_alpha ||
                                 vec->blend->alpha_to_coverage);
 
-      gen7_3DSTATE_WM(r->builder, vec->fs,
-            vec->rasterizer, cc_may_kill, 0);
+      gen7_3DSTATE_WM(r->builder, vec->fs, vec->rasterizer, cc_may_kill);
    }
 
    /* 3DSTATE_BINDING_TABLE_POINTERS_PS */
@@ -766,7 +765,7 @@ gen7_rectlist_wm(struct ilo_render *r,
       break;
    }
 
-   gen7_3DSTATE_WM(r->builder, NULL, NULL, false, hiz_op);
+   gen7_hiz_3DSTATE_WM(r->builder, hiz_op);
 
    gen7_3DSTATE_CONSTANT_PS(r->builder, NULL, NULL, 0);
 




More information about the mesa-commit mailing list