r300g/swtcl: move index buffer updates from swtcl_draw_vbo into set_index_buffer
authorMarek Olšák <maraeo@gmail.com>
Fri, 11 May 2012 21:33:50 +0000 (23:33 +0200)
committerMarek Olšák <maraeo@gmail.com>
Fri, 11 May 2012 22:50:53 +0000 (00:50 +0200)
src/gallium/drivers/r300/r300_render.c
src/gallium/drivers/r300/r300_state.c

index d98b288..ea82e49 100644 (file)
@@ -879,16 +879,6 @@ static void r300_swtcl_draw_vbo(struct pipe_context* pipe,
         }
     }
 
-    if (indexed) {
-        if (r300->index_buffer.user_buffer) {
-            draw_set_mapped_index_buffer(r300->draw,
-                                         r300->index_buffer.user_buffer);
-        } else if (r300->index_buffer.buffer) {
-            draw_set_mapped_index_buffer(r300->draw,
-                r300_resource(r300->index_buffer.buffer)->malloced_buffer);
-        }
-    }
-
     r300->draw_vbo_locked = TRUE;
     r300->draw_first_emitted = FALSE;
     draw_vbo(r300->draw, info);
index 758fb40..cecbfd2 100644 (file)
@@ -1614,8 +1614,8 @@ static void r300_set_vertex_buffers(struct pipe_context* pipe,
     }
 }
 
-static void r300_set_index_buffer(struct pipe_context* pipe,
-                                  const struct pipe_index_buffer *ib)
+static void r300_set_index_buffer_hwtcl(struct pipe_context* pipe,
+                                        const struct pipe_index_buffer *ib)
 {
     struct r300_context* r300 = r300_context(pipe);
 
@@ -1625,9 +1625,23 @@ static void r300_set_index_buffer(struct pipe_context* pipe,
     } else {
         pipe_resource_reference(&r300->index_buffer.buffer, NULL);
     }
+}
+
+static void r300_set_index_buffer_swtcl(struct pipe_context* pipe,
+                                        const struct pipe_index_buffer *ib)
+{
+    struct r300_context* r300 = r300_context(pipe);
+
+    draw_set_index_buffer(r300->draw, ib);
 
-    if (!r300->screen->caps.has_tcl) {
-        draw_set_index_buffer(r300->draw, ib);
+    if (ib) {
+        if (ib->user_buffer) {
+            draw_set_mapped_index_buffer(r300->draw,
+                                         ib->user_buffer);
+        } else if (ib->buffer) {
+            draw_set_mapped_index_buffer(r300->draw,
+                r300_resource(ib->buffer)->malloced_buffer);
+        }
     }
 }
 
@@ -1939,7 +1953,12 @@ 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;
-    r300->context.set_index_buffer = r300_set_index_buffer;
+
+    if (r300->screen->caps.has_tcl) {
+        r300->context.set_index_buffer = r300_set_index_buffer_hwtcl;
+    } else {
+        r300->context.set_index_buffer = r300_set_index_buffer_swtcl;
+    }
 
     r300->context.create_vertex_elements_state = r300_create_vertex_elements_state;
     r300->context.bind_vertex_elements_state = r300_bind_vertex_elements_state;