summaryrefslogtreecommitdiff
path: root/src/gallium/drivers/nvc0/nvc0_vbo.c
diff options
context:
space:
mode:
authorChristoph Bumiller <e0425955@student.tuwien.ac.at>2011-01-08 00:49:17 +0100
committerChristoph Bumiller <e0425955@student.tuwien.ac.at>2011-01-08 02:13:54 +0100
commitb2a79953a6e68853b44dbb20f4c0c4c67dc5f75b (patch)
tree937e5b529b36a3f18b5c6abc6cc5aa310d75d38c /src/gallium/drivers/nvc0/nvc0_vbo.c
parent64b639959ff95baf96be5ec835c6c1e490ff80b6 (diff)
nvc0: upload user buffers only from draw info min to max index
There are actually applications that profit immensely from this.
Diffstat (limited to 'src/gallium/drivers/nvc0/nvc0_vbo.c')
-rw-r--r--src/gallium/drivers/nvc0/nvc0_vbo.c10
1 files changed, 7 insertions, 3 deletions
diff --git a/src/gallium/drivers/nvc0/nvc0_vbo.c b/src/gallium/drivers/nvc0/nvc0_vbo.c
index c6a88a75cf..881f065550 100644
--- a/src/gallium/drivers/nvc0/nvc0_vbo.c
+++ b/src/gallium/drivers/nvc0/nvc0_vbo.c
@@ -161,9 +161,10 @@ nvc0_vertex_arrays_validate(struct nvc0_context *nvc0)
continue;
push = nvc0->vbo_push_hint;
if (!push) {
- nvc0_migrate_vertices(nvc0_resource(vb->buffer),
- vb->buffer_offset,
- vb->buffer->width0 - vb->buffer_offset);
+ unsigned base, size;
+ base = vb->buffer_offset + nvc0->vbo_min_index * vb->stride;
+ size = (nvc0->vbo_max_index - nvc0->vbo_min_index + 1) * vb->stride;
+ nvc0_migrate_vertices(nvc0_resource(vb->buffer), base, size);
nvc0->vbo_dirty = TRUE;
} else
continue;
@@ -536,6 +537,9 @@ nvc0_draw_vbo(struct pipe_context *pipe, const struct pipe_draw_info *info)
!(info->indexed &&
((info->max_index - info->min_index + 64) < info->count));
+ nvc0->vbo_min_index = info->min_index;
+ nvc0->vbo_max_index = info->max_index;
+
nvc0_state_validate(nvc0);
if (nvc0->state.instance_base != info->start_instance) {