diff options
author | Christoph Bumiller <[email protected]> | 2011-01-08 14:24:14 +0100 |
---|---|---|
committer | Christoph Bumiller <[email protected]> | 2011-01-08 14:25:20 +0100 |
commit | 703f3597ad0e2b7134d4ea0fc2194eb67161910a (patch) | |
tree | 74c30a05d028b7df38f7b058d0a6cbb4919aa258 /src | |
parent | d8cfe464424b41bd986276e19427f0079778bf8f (diff) |
nvc0: fix primitive restart in immediate mode
Diffstat (limited to 'src')
-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 ccbb776447f..941be678586 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 881f0655506..fd7a7942cb8 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, |