Mesa (master): r300-gallium: Cleanup some state emit, move vertex format state to r300_emit.

Corbin Simpson csimpson at kemper.freedesktop.org
Mon Feb 23 14:00:19 UTC 2009


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

Author: Corbin Simpson <MostAwesomeDude at gmail.com>
Date:   Mon Feb 23 04:48:42 2009 -0800

r300-gallium: Cleanup some state emit, move vertex format state to r300_emit.

No need to explicitly update derived state, as it will be done automatically.

---

 src/gallium/drivers/r300/r300_context.c    |    1 -
 src/gallium/drivers/r300/r300_emit.c       |   31 ++++++++++++++++++++++++++++
 src/gallium/drivers/r300/r300_swtcl_emit.c |   22 -------------------
 3 files changed, 31 insertions(+), 23 deletions(-)

diff --git a/src/gallium/drivers/r300/r300_context.c b/src/gallium/drivers/r300/r300_context.c
index 37dc9e8..15a8751 100644
--- a/src/gallium/drivers/r300/r300_context.c
+++ b/src/gallium/drivers/r300/r300_context.c
@@ -35,7 +35,6 @@ static boolean r300_draw_range_elements(struct pipe_context* pipe,
     int i;
 
     if (r300->dirty_state) {
-        r300_update_derived_state(r300);
         r300_emit_dirty_state(r300);
     }
 
diff --git a/src/gallium/drivers/r300/r300_emit.c b/src/gallium/drivers/r300/r300_emit.c
index d57ccff..960f45f 100644
--- a/src/gallium/drivers/r300/r300_emit.c
+++ b/src/gallium/drivers/r300/r300_emit.c
@@ -219,6 +219,32 @@ void r300_emit_scissor_state(struct r300_context* r300,
     END_CS;
 }
 
+void r300_emit_vertex_format_state(struct r300_context* r300)
+{
+    CS_LOCALS(r300);
+    int i;
+
+    BEGIN_CS(6);
+    OUT_CS_REG_SEQ(R300_VAP_VTX_STATE_CNTL, 2);
+    OUT_CS(r300->vertex_info.vinfo.hwfmt[0]);
+    OUT_CS(r300->vertex_info.vinfo.hwfmt[1]);
+    OUT_CS_REG_SEQ(R300_VAP_OUTPUT_VTX_FMT_0, 2);
+    OUT_CS(r300->vertex_info.vinfo.hwfmt[2]);
+    OUT_CS(r300->vertex_info.vinfo.hwfmt[3]);
+    END_CS;
+
+    BEGIN_CS(18);
+    OUT_CS_REG_SEQ(R300_VAP_PROG_STREAM_CNTL_0, 8);
+    for (i = 0; i < 8; i++) {
+        OUT_CS(r300->vertex_info.vap_prog_stream_cntl[i]);
+    }
+    OUT_CS_REG_SEQ(R300_VAP_PROG_STREAM_CNTL_EXT_0, 8);
+    for (i = 0; i < 8; i++) {
+        OUT_CS(r300->vertex_info.vap_prog_stream_cntl_ext[i]);
+    }
+    END_CS;
+}
+
 /* Emit all dirty state. */
 void r300_emit_dirty_state(struct r300_context* r300)
 {
@@ -269,4 +295,9 @@ void r300_emit_dirty_state(struct r300_context* r300)
         r300_emit_scissor_state(r300, r300->scissor_state);
         r300->dirty_state &= ~R300_NEW_SCISSOR;
     }
+
+    if (r300->dirty_state & R300_NEW_VERTEX_FORMAT) {
+        r300_emit_vertex_format_state(r300);
+        r300->dirty_state &= ~R300_NEW_VERTEX_FORMAT;
+    }
 }
diff --git a/src/gallium/drivers/r300/r300_swtcl_emit.c b/src/gallium/drivers/r300/r300_swtcl_emit.c
index 1ae69e7..141fa57 100644
--- a/src/gallium/drivers/r300/r300_swtcl_emit.c
+++ b/src/gallium/drivers/r300/r300_swtcl_emit.c
@@ -182,30 +182,8 @@ static void prepare_render(struct r300_swtcl_render* render)
     CS_LOCALS(r300);
 
     /* Make sure that all possible state is emitted. */
-    r300_update_derived_state(r300);
     r300_emit_dirty_state(r300);
 
-    /* Take care of vertex formats and routes. */
-    BEGIN_CS(6);
-    OUT_CS_REG_SEQ(R300_VAP_VTX_STATE_CNTL, 2);
-    OUT_CS(r300->vertex_info.vinfo.hwfmt[0]);
-    OUT_CS(r300->vertex_info.vinfo.hwfmt[1]);
-    OUT_CS_REG_SEQ(R300_VAP_OUTPUT_VTX_FMT_0, 2);
-    OUT_CS(r300->vertex_info.vinfo.hwfmt[2]);
-    OUT_CS(r300->vertex_info.vinfo.hwfmt[3]);
-    END_CS;
-
-    BEGIN_CS(18);
-    OUT_CS_REG_SEQ(R300_VAP_PROG_STREAM_CNTL_0, 8);
-    for (i = 0; i < 8; i++) {
-        OUT_CS(r300->vertex_info.vap_prog_stream_cntl[i]);
-    }
-    OUT_CS_REG_SEQ(R300_VAP_PROG_STREAM_CNTL_EXT_0, 8);
-    for (i = 0; i < 8; i++) {
-        OUT_CS(r300->vertex_info.vap_prog_stream_cntl_ext[i]);
-    }
-    END_CS;
-
     /* Set the pointer to our vertex buffer. The emitted values are this:
      * PACKET3 [3D_LOAD_VBPNTR]
      * COUNT   [1]




More information about the mesa-commit mailing list