Change user attribs to look for empty slot rather than using them in order.  Prevents conflict with numbered legacy slots.
diff --git a/rsProgramVertex.cpp b/rsProgramVertex.cpp
index 2be6a7d..8e59bc2 100644
--- a/rsProgramVertex.cpp
+++ b/rsProgramVertex.cpp
@@ -56,10 +56,10 @@
 static void logMatrix(const char *txt, const float *f)
 {
     LOGV("Matrix %s, %p", txt, f);
-    LOGV("%6.2f, %6.2f, %6.2f, %6.2f", f[0], f[4], f[8], f[12]);
-    LOGV("%6.2f, %6.2f, %6.2f, %6.2f", f[1], f[5], f[9], f[13]);
-    LOGV("%6.2f, %6.2f, %6.2f, %6.2f", f[2], f[6], f[10], f[14]);
-    LOGV("%6.2f, %6.2f, %6.2f, %6.2f", f[3], f[7], f[11], f[15]);
+    LOGV("%6.4f, %6.4f, %6.4f, %6.4f", f[0], f[4], f[8], f[12]);
+    LOGV("%6.4f, %6.4f, %6.4f, %6.4f", f[1], f[5], f[9], f[13]);
+    LOGV("%6.4f, %6.4f, %6.4f, %6.4f", f[2], f[6], f[10], f[14]);
+    LOGV("%6.4f, %6.4f, %6.4f, %6.4f", f[3], f[7], f[11], f[15]);
 }
 
 void ProgramVertex::setupGL(const Context *rsc, ProgramVertexState *state)
diff --git a/rsVertexArray.cpp b/rsVertexArray.cpp
index 7a8e054..7124eb5 100644
--- a/rsVertexArray.cpp
+++ b/rsVertexArray.cpp
@@ -26,7 +26,6 @@
 VertexArray::VertexArray()
 {
     mActiveBuffer = 0;
-    mUserCount = 0;
 }
 
 VertexArray::~VertexArray()
@@ -40,7 +39,6 @@
         mAttribs[ct].clear();
     }
     mActiveBuffer = 0;
-    mUserCount = 0;
 }
 
 VertexArray::Attrib::Attrib()
@@ -127,10 +125,13 @@
 
 void VertexArray::setUser(const Attrib &a, uint32_t stride)
 {
-    mAttribs[mUserCount].set(a);
-    mAttribs[mUserCount].buffer = mActiveBuffer;
-    mAttribs[mUserCount].stride = stride;
-    mUserCount ++;
+    // Find empty slot, some may be taken by legacy 1.1 slots.
+    uint32_t slot = 0;
+    while (mAttribs[slot].size) slot++;
+    rsAssert(slot < RS_MAX_ATTRIBS);
+    mAttribs[slot].set(a);
+    mAttribs[slot].buffer = mActiveBuffer;
+    mAttribs[slot].stride = stride;
 }
 
 void VertexArray::logAttrib(uint32_t idx, uint32_t slot) const {
@@ -215,9 +216,8 @@
     }
 
     for (uint32_t ct=0; ct < RS_MAX_ATTRIBS; ct++) {
-        if (mAttribs[ct].size) {
+        if (mAttribs[ct].size && (sc->vtxAttribSlot(ct) >= 0)) {
             //logAttrib(ct, sc->vtxAttribSlot(ct));
-            rsAssert(sc->vtxAttribSlot(ct) >= 0);
             glEnableVertexAttribArray(sc->vtxAttribSlot(ct));
             glBindBuffer(GL_ARRAY_BUFFER, mAttribs[ct].buffer);
 
diff --git a/rsVertexArray.h b/rsVertexArray.h
index 998e9ad..26e6f84 100644
--- a/rsVertexArray.h
+++ b/rsVertexArray.h
@@ -76,7 +76,6 @@
 
 protected:
     uint32_t mActiveBuffer;
-    uint32_t mUserCount;
     Attrib mAttribs[RS_MAX_ATTRIBS];
 };