[Mesa-dev] [PATCH 15/18] i965/wm/gen6: Refactor push constant state uploading

Topi Pohjolainen topi.pohjolainen at intel.com
Wed Apr 22 13:47:35 PDT 2015


Signed-off-by: Topi Pohjolainen <topi.pohjolainen at intel.com>
---
 src/mesa/drivers/dri/i965/brw_state.h     |  5 ++++
 src/mesa/drivers/dri/i965/gen6_wm_state.c | 50 ++++++++++++++++++-------------
 2 files changed, 34 insertions(+), 21 deletions(-)

diff --git a/src/mesa/drivers/dri/i965/brw_state.h b/src/mesa/drivers/dri/i965/brw_state.h
index ca3274d..5be8035 100644
--- a/src/mesa/drivers/dri/i965/brw_state.h
+++ b/src/mesa/drivers/dri/i965/brw_state.h
@@ -300,6 +300,11 @@ gen6_wm_state_set_programs(const struct brw_wm_prog_data *prog_data,
                            uint32_t *ksp0, uint32_t *ksp2,
                            uint32_t *dw4, uint32_t *dw5, uint32_t *dw6);
 
+void
+gen6_upload_constant_state(struct brw_context *brw,
+                           const struct brw_wm_prog_data *prog_data,
+                           const struct brw_stage_state *stage_state);
+
 /* gen6_sf_state.c */
 void
 calculate_attr_overrides(const struct brw_context *brw,
diff --git a/src/mesa/drivers/dri/i965/gen6_wm_state.c b/src/mesa/drivers/dri/i965/gen6_wm_state.c
index bc921e5..9edaf81 100644
--- a/src/mesa/drivers/dri/i965/gen6_wm_state.c
+++ b/src/mesa/drivers/dri/i965/gen6_wm_state.c
@@ -96,26 +96,11 @@ gen6_wm_state_set_programs(const struct brw_wm_prog_data *prog_data,
    }
 }
 
-static void
-upload_wm_state(struct brw_context *brw)
+void
+gen6_upload_constant_state(struct brw_context *brw,
+                           const struct brw_wm_prog_data *prog_data,
+                           const struct brw_stage_state *stage_state)
 {
-   struct gl_context *ctx = &brw->ctx;
-   /* BRW_NEW_FRAGMENT_PROGRAM */
-   const struct brw_fragment_program *fp =
-      brw_fragment_program_const(brw->fragment_program);
-   /* BRW_NEW_FS_PROG_DATA */
-   const struct brw_wm_prog_data *prog_data = brw->wm.prog_data;
-   uint32_t dw2, dw4, dw5, dw6, ksp0, ksp2;
-
-   /* _NEW_BUFFERS */
-   bool multisampled_fbo = ctx->DrawBuffer->Visual.samples > 1;
-
-   /* We can't fold this into gen6_upload_wm_push_constants(), because
-    * according to the SNB PRM, vol 2 part 1 section 7.2.2
-    * (3DSTATE_CONSTANT_PS [DevSNB]):
-    *
-    *     "[DevSNB]: This packet must be followed by WM_STATE."
-    */
    if (prog_data->base.nr_params == 0) {
       /* Disable the push constant buffers. */
       BEGIN_BATCH(5);
@@ -133,13 +118,36 @@ upload_wm_state(struct brw_context *brw)
       /* Pointer to the WM constant buffer.  Covered by the set of
        * state flags from gen6_upload_wm_push_constants.
        */
-      OUT_BATCH(brw->wm.base.push_const_offset +
-		brw->wm.base.push_const_size - 1);
+      OUT_BATCH(stage_state->push_const_offset +
+		stage_state->push_const_size - 1);
       OUT_BATCH(0);
       OUT_BATCH(0);
       OUT_BATCH(0);
       ADVANCE_BATCH();
    }
+}
+
+static void
+upload_wm_state(struct brw_context *brw)
+{
+   struct gl_context *ctx = &brw->ctx;
+   /* BRW_NEW_FRAGMENT_PROGRAM */
+   const struct brw_fragment_program *fp =
+      brw_fragment_program_const(brw->fragment_program);
+   /* BRW_NEW_FS_PROG_DATA */
+   const struct brw_wm_prog_data *prog_data = brw->wm.prog_data;
+   uint32_t dw2, dw4, dw5, dw6, ksp0, ksp2;
+
+   /* _NEW_BUFFERS */
+   const bool multisampled_fbo = ctx->DrawBuffer->Visual.samples > 1;
+
+   /* We can't fold this into gen6_upload_wm_push_constants(), because
+    * according to the SNB PRM, vol 2 part 1 section 7.2.2
+    * (3DSTATE_CONSTANT_PS [DevSNB]):
+    *
+    *     "[DevSNB]: This packet must be followed by WM_STATE."
+    */
+   gen6_upload_constant_state(brw, prog_data, &brw->wm.base);
 
    dw2 = dw4 = dw5 = dw6 = ksp2 = 0;
    dw4 |= GEN6_WM_STATISTICS_ENABLE;
-- 
1.9.3



More information about the mesa-dev mailing list