diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/gallium/drivers/nouveau/nv50/nv50_push.c | 16 | ||||
-rw-r--r-- | src/gallium/drivers/nouveau/nvc0/nvc0_vbo_translate.c | 16 |
2 files changed, 22 insertions, 10 deletions
diff --git a/src/gallium/drivers/nouveau/nv50/nv50_push.c b/src/gallium/drivers/nouveau/nv50/nv50_push.c index cbef95d07f6..6a53ad09768 100644 --- a/src/gallium/drivers/nouveau/nv50/nv50_push.c +++ b/src/gallium/drivers/nouveau/nv50/nv50_push.c @@ -30,6 +30,7 @@ struct push_context { uint32_t prim; uint32_t restart_index; + uint32_t start_instance; uint32_t instance_id; }; @@ -85,7 +86,8 @@ 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, 0, ctx->instance_id, + ctx->translate->run_elts8(ctx->translate, elts, nr, + ctx->start_instance, ctx->instance_id, ctx->push->cur); ctx->push->cur += size; @@ -123,7 +125,8 @@ 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, 0, ctx->instance_id, + ctx->translate->run_elts16(ctx->translate, elts, nr, + ctx->start_instance, ctx->instance_id, ctx->push->cur); ctx->push->cur += size; @@ -161,7 +164,8 @@ 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, 0, ctx->instance_id, + ctx->translate->run_elts(ctx->translate, elts, nr, + ctx->start_instance, ctx->instance_id, ctx->push->cur); ctx->push->cur += size; @@ -194,7 +198,8 @@ 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, 0, ctx->instance_id, + ctx->translate->run(ctx->translate, start, push, + ctx->start_instance, ctx->instance_id, ctx->push->cur); ctx->push->cur += size; count -= push; @@ -247,6 +252,7 @@ nv50_push_vbo(struct nv50_context *nv50, const struct pipe_draw_info *info) ctx.need_vertex_id = nv50->screen->base.class_3d >= NV84_3D_CLASS && nv50->vertprog->vp.need_vertex_id && (nv50->vertex->num_elements < 32); ctx.index_bias = info->index_bias; + ctx.instance_id = 0; /* For indexed draws, gl_VertexID must be emitted for every vertex. */ ctx.packet_vertex_limit = @@ -301,7 +307,7 @@ nv50_push_vbo(struct nv50_context *nv50, const struct pipe_draw_info *info) ctx.restart_index = 0; } - ctx.instance_id = info->start_instance; + ctx.start_instance = info->start_instance; ctx.prim = nv50_prim_gl(info->mode); if (info->primitive_restart) { diff --git a/src/gallium/drivers/nouveau/nvc0/nvc0_vbo_translate.c b/src/gallium/drivers/nouveau/nvc0/nvc0_vbo_translate.c index 20b6742d8d7..fd2bcbb961c 100644 --- a/src/gallium/drivers/nouveau/nvc0/nvc0_vbo_translate.c +++ b/src/gallium/drivers/nouveau/nvc0/nvc0_vbo_translate.c @@ -19,6 +19,7 @@ struct push_context { uint32_t vertex_size; uint32_t restart_index; + uint32_t start_instance; uint32_t instance_id; bool prim_restart; @@ -44,6 +45,7 @@ nvc0_push_context_init(struct nvc0_context *nvc0, struct push_context *ctx) ctx->translate = nvc0->vertex->translate; ctx->vertex_size = nvc0->vertex->size; + ctx->instance_id = 0; ctx->need_vertex_id = nvc0->vertprog->vp.need_vertex_id && (nvc0->vertex->num_elements < 32); @@ -246,7 +248,8 @@ disp_vertices_i08(struct push_context *ctx, unsigned start, unsigned count) if (unlikely(ctx->prim_restart)) nR = prim_restart_search_i08(elts, nR, ctx->restart_index); - translate->run_elts8(translate, elts, nR, 0, ctx->instance_id, ctx->dest); + translate->run_elts8(translate, elts, nR, + ctx->start_instance, ctx->instance_id, ctx->dest); count -= nR; ctx->dest += nR * ctx->vertex_size; @@ -302,7 +305,8 @@ disp_vertices_i16(struct push_context *ctx, unsigned start, unsigned count) if (unlikely(ctx->prim_restart)) nR = prim_restart_search_i16(elts, nR, ctx->restart_index); - translate->run_elts16(translate, elts, nR, 0, ctx->instance_id, ctx->dest); + translate->run_elts16(translate, elts, nR, + ctx->start_instance, ctx->instance_id, ctx->dest); count -= nR; ctx->dest += nR * ctx->vertex_size; @@ -358,7 +362,8 @@ disp_vertices_i32(struct push_context *ctx, unsigned start, unsigned count) if (unlikely(ctx->prim_restart)) nR = prim_restart_search_i32(elts, nR, ctx->restart_index); - translate->run_elts(translate, elts, nR, 0, ctx->instance_id, ctx->dest); + translate->run_elts(translate, elts, nR, + ctx->start_instance, ctx->instance_id, ctx->dest); count -= nR; ctx->dest += nR * ctx->vertex_size; @@ -410,7 +415,8 @@ disp_vertices_seq(struct push_context *ctx, unsigned start, unsigned count) /* XXX: This will read the data corresponding to the primitive restart index, * maybe we should avoid that ? */ - translate->run(translate, start, count, 0, ctx->instance_id, ctx->dest); + translate->run(translate, start, count, + ctx->start_instance, ctx->instance_id, ctx->dest); do { unsigned nr = count; @@ -515,7 +521,7 @@ nvc0_push_vbo(struct nvc0_context *nvc0, const struct pipe_draw_info *info) index_size = 0; } - ctx.instance_id = info->start_instance; + ctx.start_instance = info->start_instance; prim = nvc0_prim_gl(info->mode); do { |