summaryrefslogtreecommitdiffstats
path: root/src/gallium/drivers/r300/r300_render.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/gallium/drivers/r300/r300_render.c')
-rw-r--r--src/gallium/drivers/r300/r300_render.c39
1 files changed, 8 insertions, 31 deletions
diff --git a/src/gallium/drivers/r300/r300_render.c b/src/gallium/drivers/r300/r300_render.c
index 56f480d3358..d98b28896be 100644
--- a/src/gallium/drivers/r300/r300_render.c
+++ b/src/gallium/drivers/r300/r300_render.c
@@ -855,10 +855,7 @@ static void r300_swtcl_draw_vbo(struct pipe_context* pipe,
const struct pipe_draw_info *info)
{
struct r300_context* r300 = r300_context(pipe);
- struct pipe_transfer *vb_transfer[PIPE_MAX_ATTRIBS];
- struct pipe_transfer *ib_transfer = NULL;
int i;
- const void *indices = NULL;
boolean indexed = info->indexed;
if (r300->skip_rendering) {
@@ -877,46 +874,26 @@ static void r300_swtcl_draw_vbo(struct pipe_context* pipe,
draw_set_mapped_vertex_buffer(r300->draw, i,
r300->vertex_buffer[i].user_buffer);
} else if (r300->vertex_buffer[i].buffer) {
- void *buf = pipe_buffer_map(pipe,
- r300->vertex_buffer[i].buffer,
- PIPE_TRANSFER_READ |
- PIPE_TRANSFER_UNSYNCHRONIZED,
- &vb_transfer[i]);
- draw_set_mapped_vertex_buffer(r300->draw, i, buf);
+ draw_set_mapped_vertex_buffer(r300->draw, i,
+ r300_resource(r300->vertex_buffer[i].buffer)->malloced_buffer);
}
}
if (indexed) {
if (r300->index_buffer.user_buffer) {
- indices = r300->index_buffer.user_buffer;
- } else {
- indices = pipe_buffer_map(pipe, r300->index_buffer.buffer,
- PIPE_TRANSFER_READ |
- PIPE_TRANSFER_UNSYNCHRONIZED, &ib_transfer);
+ 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);
}
}
- draw_set_mapped_index_buffer(r300->draw, indices);
-
r300->draw_vbo_locked = TRUE;
r300->draw_first_emitted = FALSE;
draw_vbo(r300->draw, info);
draw_flush(r300->draw);
r300->draw_vbo_locked = FALSE;
-
- for (i = 0; i < r300->nr_vertex_buffers; i++) {
- if (r300->vertex_buffer[i].buffer) {
- if (vb_transfer[i])
- pipe_buffer_unmap(pipe, vb_transfer[i]);
- draw_set_mapped_vertex_buffer(r300->draw, i, NULL);
- }
- }
-
- if (indexed) {
- if (ib_transfer)
- pipe_buffer_unmap(pipe, ib_transfer);
- draw_set_mapped_index_buffer(r300->draw, NULL);
- }
}
/* Object for rendering using Draw. */
@@ -969,7 +946,7 @@ static boolean r300_render_allocate_vertices(struct vbuf_render* render,
{
pipe_resource_reference(&r300->vbo, NULL);
r300->vbo = pipe_buffer_create(screen,
- PIPE_BIND_VERTEX_BUFFER,
+ PIPE_BIND_CUSTOM,
PIPE_USAGE_STREAM,
R300_MAX_DRAW_VBO_SIZE);
r300->draw_vbo_offset = 0;