diff options
| -rw-r--r-- | src/gallium/drivers/nvc0/nvc0_push.c | 24 | ||||
| -rw-r--r-- | src/gallium/drivers/nvc0/nvc0_vbo.c | 3 | 
2 files changed, 18 insertions, 9 deletions
| diff --git a/src/gallium/drivers/nvc0/nvc0_push.c b/src/gallium/drivers/nvc0/nvc0_push.c index ccbb776447..941be67858 100644 --- a/src/gallium/drivers/nvc0/nvc0_push.c +++ b/src/gallium/drivers/nvc0/nvc0_push.c @@ -75,13 +75,15 @@ emit_vertices_i08(struct push_context *ctx, unsigned start, unsigned count)        BEGIN_RING_NI(ctx->chan, RING_3D(VERTEX_DATA), size); -      ctx->translate->run_elts8(ctx->translate, elts, push, 0, ctx->chan->cur); +      ctx->translate->run_elts8(ctx->translate, elts, nr, 0, ctx->chan->cur);        ctx->chan->cur += size; -      count -= push; -      elts += push; +      count -= nr; +      elts += nr;        if (nr != push) { +         count--; +         elts++;           BEGIN_RING(ctx->chan, RING_3D(VERTEX_END_GL), 2);           OUT_RING  (ctx->chan, 0);           OUT_RING  (ctx->chan, ctx->prim); @@ -106,13 +108,15 @@ emit_vertices_i16(struct push_context *ctx, unsigned start, unsigned count)        BEGIN_RING_NI(ctx->chan, RING_3D(VERTEX_DATA), size); -      ctx->translate->run_elts16(ctx->translate, elts, push, 0, ctx->chan->cur); +      ctx->translate->run_elts16(ctx->translate, elts, nr, 0, ctx->chan->cur);        ctx->chan->cur += size; -      count -= push; -      elts += push; +      count -= nr; +      elts += nr;        if (nr != push) { +         count--; +         elts++;           BEGIN_RING(ctx->chan, RING_3D(VERTEX_END_GL), 2);           OUT_RING  (ctx->chan, 0);           OUT_RING  (ctx->chan, ctx->prim); @@ -137,13 +141,15 @@ emit_vertices_i32(struct push_context *ctx, unsigned start, unsigned count)        BEGIN_RING_NI(ctx->chan, RING_3D(VERTEX_DATA), size); -      ctx->translate->run_elts(ctx->translate, elts, push, 0, ctx->chan->cur); +      ctx->translate->run_elts(ctx->translate, elts, nr, 0, ctx->chan->cur);        ctx->chan->cur += size; -      count -= push; -      elts += push; +      count -= nr; +      elts += nr;        if (nr != push) { +         count--; +         elts++;           BEGIN_RING(ctx->chan, RING_3D(VERTEX_END_GL), 2);           OUT_RING  (ctx->chan, 0);           OUT_RING  (ctx->chan, ctx->prim); diff --git a/src/gallium/drivers/nvc0/nvc0_vbo.c b/src/gallium/drivers/nvc0/nvc0_vbo.c index 881f065550..fd7a7942cb 100644 --- a/src/gallium/drivers/nvc0/nvc0_vbo.c +++ b/src/gallium/drivers/nvc0/nvc0_vbo.c @@ -584,6 +584,9 @@ nvc0_draw_vbo(struct pipe_context *pipe, const struct pipe_draw_info *info)        if (info->primitive_restart) {           BEGIN_RING(chan, RING_3D(PRIM_RESTART_INDEX), 1);           OUT_RING  (chan, info->restart_index); + +         if (info->restart_index > 65535) +            shorten = FALSE;        }        nvc0_draw_elements(nvc0, shorten, | 
