summaryrefslogtreecommitdiffstats
path: root/src/gallium/drivers/nv50/nv50_push.c
diff options
context:
space:
mode:
authorZack Rusin <[email protected]>2013-06-27 20:40:10 -0400
committerZack Rusin <[email protected]>2013-06-28 05:21:20 -0400
commit1c2e5c223da28cdffe156b6b430fcdf638909021 (patch)
treef86833cf8b5b43134231309cc75932da000de080 /src/gallium/drivers/nv50/nv50_push.c
parentdf4ab7974a825bf686f9dfa3474f3648e9a3ca66 (diff)
draw/translate: fix instancing
We were incorrectly computing the buffer offset when using the instances. The buffer offset is always equal to: start_instance * stride + (instance_num / instance_divisor) * stride We were completely ignoring the start instance quite often producing instances that completely wrong, e.g. if start instance = 5, instance divisor = 2, then on the first iteration it should be: 5 * stride, not (5/2) * stride as we'd have currently, and if start instance = 1, instance divisor = 3, then on the first iteration it should be: 1 * stride, not 0 as we'd have. This fixes it and adjusts all the code to the changes. Signed-off-by: Zack Rusin <[email protected]>
Diffstat (limited to 'src/gallium/drivers/nv50/nv50_push.c')
-rw-r--r--src/gallium/drivers/nv50/nv50_push.c8
1 files changed, 4 insertions, 4 deletions
diff --git a/src/gallium/drivers/nv50/nv50_push.c b/src/gallium/drivers/nv50/nv50_push.c
index eb6bfbccfa7..73804328138 100644
--- a/src/gallium/drivers/nv50/nv50_push.c
+++ b/src/gallium/drivers/nv50/nv50_push.c
@@ -76,7 +76,7 @@ emit_vertices_i08(struct push_context *ctx, unsigned start, unsigned count)
BEGIN_NI04(ctx->push, NV50_3D(VERTEX_DATA), size);
- ctx->translate->run_elts8(ctx->translate, elts, nr, ctx->instance_id,
+ ctx->translate->run_elts8(ctx->translate, elts, nr, 0, ctx->instance_id,
ctx->push->cur);
ctx->push->cur += size;
@@ -109,7 +109,7 @@ emit_vertices_i16(struct push_context *ctx, unsigned start, unsigned count)
BEGIN_NI04(ctx->push, NV50_3D(VERTEX_DATA), size);
- ctx->translate->run_elts16(ctx->translate, elts, nr, ctx->instance_id,
+ ctx->translate->run_elts16(ctx->translate, elts, nr, 0, ctx->instance_id,
ctx->push->cur);
ctx->push->cur += size;
@@ -142,7 +142,7 @@ emit_vertices_i32(struct push_context *ctx, unsigned start, unsigned count)
BEGIN_NI04(ctx->push, NV50_3D(VERTEX_DATA), size);
- ctx->translate->run_elts(ctx->translate, elts, nr, ctx->instance_id,
+ ctx->translate->run_elts(ctx->translate, elts, nr, 0, ctx->instance_id,
ctx->push->cur);
ctx->push->cur += size;
@@ -167,7 +167,7 @@ emit_vertices_seq(struct push_context *ctx, unsigned start, unsigned count)
BEGIN_NI04(ctx->push, NV50_3D(VERTEX_DATA), size);
- ctx->translate->run(ctx->translate, start, push, ctx->instance_id,
+ ctx->translate->run(ctx->translate, start, push, 0, ctx->instance_id,
ctx->push->cur);
ctx->push->cur += size;
count -= push;