Mesa (master): r300g/swtcl: force vertex prefetching for non-indexed primitives

Marek Olšák mareko at kemper.freedesktop.org
Wed May 26 22:19:35 UTC 2010


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

Author: Marek Olšák <maraeo at gmail.com>
Date:   Wed May 26 20:59:46 2010 +0200

r300g/swtcl: force vertex prefetching for non-indexed primitives

---

 src/gallium/drivers/r300/r300_emit.c   |    4 ++--
 src/gallium/drivers/r300/r300_emit.h   |    2 +-
 src/gallium/drivers/r300/r300_render.c |    7 ++++---
 3 files changed, 7 insertions(+), 6 deletions(-)

diff --git a/src/gallium/drivers/r300/r300_emit.c b/src/gallium/drivers/r300/r300_emit.c
index 40e7b4c..123b084 100644
--- a/src/gallium/drivers/r300/r300_emit.c
+++ b/src/gallium/drivers/r300/r300_emit.c
@@ -864,7 +864,7 @@ void r300_emit_aos(struct r300_context* r300, unsigned offset, boolean indexed)
     END_CS;
 }
 
-void r300_emit_aos_swtcl(struct r300_context *r300)
+void r300_emit_aos_swtcl(struct r300_context *r300, boolean indexed)
 {
     CS_LOCALS(r300);
 
@@ -880,7 +880,7 @@ void r300_emit_aos_swtcl(struct r300_context *r300)
      */
     BEGIN_CS(7);
     OUT_CS_PKT3(R300_PACKET3_3D_LOAD_VBPNTR, 3);
-    OUT_CS(1);
+    OUT_CS(1 | (!indexed ? R300_VC_FORCE_PREFETCH : 0));
     OUT_CS(r300->vertex_info.size |
             (r300->vertex_info.size << 8));
     OUT_CS(r300->vbo_offset);
diff --git a/src/gallium/drivers/r300/r300_emit.h b/src/gallium/drivers/r300/r300_emit.h
index da05aff..55e5898 100644
--- a/src/gallium/drivers/r300/r300_emit.h
+++ b/src/gallium/drivers/r300/r300_emit.h
@@ -76,7 +76,7 @@ void r300_emit_scissor_state(struct r300_context* r300,
 void r300_emit_textures_state(struct r300_context *r300,
                               unsigned size, void *state);
 
-void r300_emit_aos_swtcl(struct r300_context *r300);
+void r300_emit_aos_swtcl(struct r300_context *r300, boolean indexed);
 
 void r300_emit_vertex_stream_state(struct r300_context* r300,
                                    unsigned size, void* state);
diff --git a/src/gallium/drivers/r300/r300_render.c b/src/gallium/drivers/r300/r300_render.c
index 041ae80..a5d1294 100644
--- a/src/gallium/drivers/r300/r300_render.c
+++ b/src/gallium/drivers/r300/r300_render.c
@@ -191,7 +191,7 @@ static void r300_prepare_for_rendering(struct r300_context *r300,
         if (emit_aos)
             r300_emit_aos(r300, aos_offset, flags & PREP_INDEXED);
         if (emit_aos_swtcl)
-            r300_emit_aos_swtcl(r300);
+            r300_emit_aos_swtcl(r300, flags & PREP_INDEXED);
     }
 }
 
@@ -997,8 +997,9 @@ static void r500_render_draw_elements(struct vbuf_render* render,
 
     CS_LOCALS(r300);
 
-    r300_prepare_for_rendering(r300, PREP_FIRST_DRAW | PREP_EMIT_AOS_SWTCL,
-                               NULL, dwords, 0, 0);
+    r300_prepare_for_rendering(r300,
+        PREP_FIRST_DRAW | PREP_EMIT_AOS_SWTCL | PREP_INDEXED,
+        NULL, dwords, 0, 0);
 
     BEGIN_CS(dwords);
     OUT_CS_REG(R300_GA_COLOR_CONTROL,




More information about the mesa-commit mailing list