nvc0: upload user buffers only from draw info min to max index

There are actually applications that profit immensely from this.
This commit is contained in:
Christoph Bumiller 2011-01-08 00:49:17 +01:00
parent 64b639959f
commit b2a79953a6
2 changed files with 9 additions and 3 deletions

View File

@ -101,6 +101,8 @@ struct nvc0_context {
unsigned num_vtxbufs;
struct pipe_index_buffer idxbuf;
uint32_t vbo_fifo;
unsigned vbo_min_index; /* from pipe_draw_info, for vertex upload */
unsigned vbo_max_index;
struct pipe_sampler_view *textures[5][PIPE_MAX_SAMPLERS];
unsigned num_textures[5];

View File

@ -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) {