nv50: fix instancing of client-side vertex buffers
authorIlia Mirkin <imirkin@alum.mit.edu>
Fri, 8 Jan 2021 01:39:54 +0000 (20:39 -0500)
committerMarge Bot <eric+marge@anholt.net>
Mon, 11 Jan 2021 20:06:44 +0000 (20:06 +0000)
Signed-off-by: Ilia Mirkin <imirkin@alum.mit.edu>
Reviewed-by: Karol Herbst <kherbst@redhat.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/8396>

src/gallium/drivers/nouveau/nv50/nv50_vbo.c

index d7172b6..16ce34b 100644 (file)
@@ -189,9 +189,10 @@ nv50_user_vbuf_range(struct nv50_context *nv50, unsigned vbi,
 {
    assert(vbi < PIPE_MAX_ATTRIBS);
    if (unlikely(nv50->vertex->instance_bufs & (1 << vbi))) {
-      /* TODO: use min and max instance divisor to get a proper range */
-      *base = 0;
-      *size = nv50->vtxbuf[vbi].buffer.resource->width0;
+      const uint32_t div = nv50->vertex->min_instance_div[vbi];
+      *base = nv50->instance_off * nv50->vtxbuf[vbi].stride;
+      *size = (nv50->instance_max / div) * nv50->vtxbuf[vbi].stride +
+         nv50->vertex->vb_access_size[vbi];
    } else {
       /* NOTE: if there are user buffers, we *must* have index bounds */
       assert(nv50->vb_elt_limit != ~0);