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:
parent
64b639959f
commit
b2a79953a6
|
@ -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];
|
||||
|
|
|
@ -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) {
|
||||
|
|
Loading…
Reference in New Issue