nv50,nvc0: reset per-instance state for inactive vertex elements
authorChristoph Bumiller <e0425955@student.tuwien.ac.at>
Sat, 15 Oct 2011 10:03:03 +0000 (12:03 +0200)
committerChristoph Bumiller <e0425955@student.tuwien.ac.at>
Fri, 21 Oct 2011 21:00:39 +0000 (23:00 +0200)
src/gallium/drivers/nv50/nv50_vbo.c
src/gallium/drivers/nvc0/nvc0_vbo.c

index 0ce19bec4af1426bc3cea152119d50e1541edd9e..ef01e61172d825c7fe9250bf3c95c804e1b6654a 100644 (file)
@@ -351,6 +351,10 @@ nv50_vertex_arrays_validate(struct nv50_context *nv50)
    for (; i < nv50->state.num_vtxelts; ++i) {
       BEGIN_RING(chan, RING_3D(VERTEX_ARRAY_ATTRIB(i)), 1);
       OUT_RING  (chan, NV50_3D_VERTEX_ATTRIB_INACTIVE);
+      if (unlikely(nv50->state.instance_elts & (1 << i))) {
+         BEGIN_RING(chan, RING_3D(VERTEX_ARRAY_PER_INSTANCE(i)), 1);
+         OUT_RING  (chan, 0);
+      }
       BEGIN_RING(chan, RING_3D(VERTEX_ARRAY_FETCH(i)), 1);
       OUT_RING  (chan, 0);
    }
index ac778a7491c5808c08901b9619eea7060711d41e..50e99ac5df3476b97f10662895a7be9737bf42d4 100644 (file)
@@ -327,6 +327,8 @@ nvc0_vertex_arrays_validate(struct nvc0_context *nvc0)
    for (; i < nvc0->state.num_vtxelts; ++i) {
       BEGIN_RING(chan, RING_3D(VERTEX_ATTRIB_FORMAT(i)), 1);
       OUT_RING  (chan, NVC0_3D_VERTEX_ATTRIB_INACTIVE);
+      if (unlikely(nvc0->state.instance_elts & (1 << i)))
+         IMMED_RING(chan, RING_3D(VERTEX_ARRAY_PER_INSTANCE(i)), 0);
       BEGIN_RING(chan, RING_3D(VERTEX_ARRAY_FETCH(i)), 1);
       OUT_RING  (chan, 0);
    }