diff options
Diffstat (limited to 'src/gallium/drivers')
| -rw-r--r-- | src/gallium/drivers/r300/r300_context.h | 1 | ||||
| -rw-r--r-- | src/gallium/drivers/r300/r300_render.c | 7 | ||||
| -rw-r--r-- | src/gallium/drivers/r300/r300_state.c | 7 | 
3 files changed, 13 insertions, 2 deletions
| diff --git a/src/gallium/drivers/r300/r300_context.h b/src/gallium/drivers/r300/r300_context.h index 3d4f6524e5..8704f18529 100644 --- a/src/gallium/drivers/r300/r300_context.h +++ b/src/gallium/drivers/r300/r300_context.h @@ -326,6 +326,7 @@ struct r300_context {      /* Vertex buffers for Gallium. */      struct pipe_vertex_buffer vertex_buffer[PIPE_MAX_ATTRIBS];      int vertex_buffer_count; +    int vertex_buffer_max_index;      /* Vertex elements for Gallium. */      struct pipe_vertex_element vertex_element[PIPE_MAX_ATTRIBS];      int vertex_element_count; diff --git a/src/gallium/drivers/r300/r300_render.c b/src/gallium/drivers/r300/r300_render.c index d604bfb7d7..e4f7615368 100644 --- a/src/gallium/drivers/r300/r300_render.c +++ b/src/gallium/drivers/r300/r300_render.c @@ -452,8 +452,11 @@ void r300_draw_elements(struct pipe_context* pipe,                          unsigned indexSize, unsigned mode,                          unsigned start, unsigned count)  { -   pipe->draw_range_elements(pipe, indexBuffer, indexSize, 0, ~0, -                             mode, start, count); +    struct r300_context *r300 = r300_context(pipe); + +    pipe->draw_range_elements(pipe, indexBuffer, indexSize, 0, +                              r300->vertex_buffer_max_index, +                              mode, start, count);  }  void r300_draw_arrays(struct pipe_context* pipe, unsigned mode, diff --git a/src/gallium/drivers/r300/r300_state.c b/src/gallium/drivers/r300/r300_state.c index 0f14ccc53e..ee4409c889 100644 --- a/src/gallium/drivers/r300/r300_state.c +++ b/src/gallium/drivers/r300/r300_state.c @@ -1026,10 +1026,17 @@ static void r300_set_vertex_buffers(struct pipe_context* pipe,                                      const struct pipe_vertex_buffer* buffers)  {      struct r300_context* r300 = r300_context(pipe); +    unsigned i, max_index = ~0;      memcpy(r300->vertex_buffer, buffers,          sizeof(struct pipe_vertex_buffer) * count); + +    for (i = 0; i < count; i++) { +        max_index = MIN2(buffers[i].max_index, max_index); +    } +      r300->vertex_buffer_count = count; +    r300->vertex_buffer_max_index = max_index;      if (r300->draw) {          draw_flush(r300->draw); | 
