summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/gallium/drivers/r300/r300_render.c11
-rw-r--r--src/gallium/drivers/r300/r300_state.c52
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 ea82e49d450..ceda1269707 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 cecbfd213f3..812fe39155a 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;
}