Mesa (master): r300g/swtcl: move vertex buffer updates into set_vertex_buffers

Marek Olšák mareko at kemper.freedesktop.org
Fri May 11 22:51:13 UTC 2012


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

Author: Marek Olšák <maraeo at gmail.com>
Date:   Fri May 11 23:33:50 2012 +0200

r300g/swtcl: move vertex buffer updates into set_vertex_buffers

---

 src/gallium/drivers/r300/r300_render.c |   11 -------
 src/gallium/drivers/r300/r300_state.c  |   52 +++++++++++++++++++++-----------
 2 files changed, 34 insertions(+), 29 deletions(-)

diff --git a/src/gallium/drivers/r300/r300_render.c b/src/gallium/drivers/r300/r300_render.c
index ea82e49..ceda126 100644
--- a/src/gallium/drivers/r300/r300_render.c
+++ b/src/gallium/drivers/r300/r300_render.c
@@ -855,7 +855,6 @@ static void r300_swtcl_draw_vbo(struct pipe_context* pipe,
                                 const struct pipe_draw_info *info)
 {
     struct r300_context* r300 = r300_context(pipe);
-    int i;
     boolean indexed = info->indexed;
 
     if (r300->skip_rendering) {
@@ -869,16 +868,6 @@ static void r300_swtcl_draw_vbo(struct pipe_context* pipe,
             (indexed ? PREP_INDEXED : 0),
             indexed ? 256 : 6);
 
-    for (i = 0; i < r300->nr_vertex_buffers; i++) {
-        if (r300->vertex_buffer[i].user_buffer) {
-            draw_set_mapped_vertex_buffer(r300->draw, i,
-                                          r300->vertex_buffer[i].user_buffer);
-        } else if (r300->vertex_buffer[i].buffer) {
-            draw_set_mapped_vertex_buffer(r300->draw, i,
-                r300_resource(r300->vertex_buffer[i].buffer)->malloced_buffer);
-        }
-    }
-
     r300->draw_vbo_locked = TRUE;
     r300->draw_first_emitted = FALSE;
     draw_vbo(r300->draw, info);
diff --git a/src/gallium/drivers/r300/r300_state.c b/src/gallium/drivers/r300/r300_state.c
index cecbfd2..812fe39 100644
--- a/src/gallium/drivers/r300/r300_state.c
+++ b/src/gallium/drivers/r300/r300_state.c
@@ -1588,29 +1588,45 @@ static void r300_set_viewport_state(struct pipe_context* pipe,
     }
 }
 
-static void r300_set_vertex_buffers(struct pipe_context* pipe,
+static void r300_set_vertex_buffers_hwtcl(struct pipe_context* pipe,
                                     unsigned count,
                                     const struct pipe_vertex_buffer* buffers)
 {
     struct r300_context* r300 = r300_context(pipe);
 
-    if (r300->screen->caps.has_tcl) {
-        /* There must be at least one vertex buffer set, otherwise it locks up. */
-        if (!count) {
-            buffers = &r300->dummy_vb;
-            count = 1;
-        }
+    /* There must be at least one vertex buffer set, otherwise it locks up. */
+    if (!count) {
+        buffers = &r300->dummy_vb;
+        count = 1;
+    }
 
-        util_copy_vertex_buffers(r300->vertex_buffer,
-                                 &r300->nr_vertex_buffers,
-                                 buffers, count);
+    util_copy_vertex_buffers(r300->vertex_buffer,
+                             &r300->nr_vertex_buffers,
+                             buffers, count);
 
-        r300->vertex_arrays_dirty = TRUE;
-    } else {
-        util_copy_vertex_buffers(r300->vertex_buffer,
-                                 &r300->nr_vertex_buffers,
-                                 buffers, count);
-        draw_set_vertex_buffers(r300->draw, count, buffers);
+    r300->vertex_arrays_dirty = TRUE;
+}
+
+static void r300_set_vertex_buffers_swtcl(struct pipe_context* pipe,
+                                    unsigned count,
+                                    const struct pipe_vertex_buffer* buffers)
+{
+    struct r300_context* r300 = r300_context(pipe);
+    unsigned i;
+
+    util_copy_vertex_buffers(r300->vertex_buffer,
+                             &r300->nr_vertex_buffers,
+                             buffers, count);
+    draw_set_vertex_buffers(r300->draw, count, buffers);
+
+    for (i = 0; i < count; i++) {
+        if (buffers[i].user_buffer) {
+            draw_set_mapped_vertex_buffer(r300->draw, i,
+                                          buffers[i].user_buffer);
+        } else if (buffers[i].buffer) {
+            draw_set_mapped_vertex_buffer(r300->draw, i,
+                r300_resource(buffers[i].buffer)->malloced_buffer);
+        }
     }
 }
 
@@ -1952,11 +1968,11 @@ void r300_init_state_functions(struct r300_context* r300)
 
     r300->context.set_viewport_state = r300_set_viewport_state;
 
-    r300->context.set_vertex_buffers = r300_set_vertex_buffers;
-
     if (r300->screen->caps.has_tcl) {
+        r300->context.set_vertex_buffers = r300_set_vertex_buffers_hwtcl;
         r300->context.set_index_buffer = r300_set_index_buffer_hwtcl;
     } else {
+        r300->context.set_vertex_buffers = r300_set_vertex_buffers_swtcl;
         r300->context.set_index_buffer = r300_set_index_buffer_swtcl;
     }
 




More information about the mesa-commit mailing list