Resubmit r7899 and r7901.


git-svn-id: http://skia.googlecode.com/svn/trunk@7929 2bbb7eff-a529-9590-31e7-b0007b416f81
diff --git a/tests/GLProgramsTest.cpp b/tests/GLProgramsTest.cpp
index bc148f1..45c5f2d 100644
--- a/tests/GLProgramsTest.cpp
+++ b/tests/GLProgramsTest.cpp
@@ -23,7 +23,7 @@
 void GrGLProgram::Desc::setRandom(SkMWCRandom* random,
                                   const GrGpuGL* gpu,
                                   const GrEffectStage stages[GrDrawState::kNumStages]) {
-    fVertexLayout = 0;
+    fAttribBindings = 0;
     fEmitsPointSize = random->nextBool();
     fColorInput = random->nextULessThan(kColorInputCnt);
     fCoverageInput = random->nextULessThan(kColorInputCnt);
@@ -32,7 +32,7 @@
 
     fFirstCoverageStage = random->nextULessThan(GrDrawState::kNumStages);
 
-    fVertexLayout |= random->nextBool() ? GrDrawState::kCoverage_VertexLayoutBit : 0;
+    fAttribBindings |= random->nextBool() ? GrDrawState::kCoverage_AttribBindingsBit : 0;
 
 #if GR_GL_EXPERIMENTAL_GS
     fExperimentalGS = gpu->getCaps().geometryShaderSupport() && random->nextBool();
@@ -40,7 +40,7 @@
 
     bool edgeAA = random->nextBool();
     if (edgeAA) {
-        fVertexLayout |= GrDrawState::kEdge_VertexLayoutBit;
+        fAttribBindings |= GrDrawState::kEdge_AttribBindingsBit;
         if (gpu->getCaps().shaderDerivativeSupport()) {
             fVertexEdgeType = (GrDrawState::VertexEdgeType)
                               random->nextULessThan(GrDrawState::kVertexEdgeTypeCnt);
@@ -64,11 +64,31 @@
             fEffectKeys[s] = factory.glEffectKey(stages[s], gpu->glCaps());
             // use separate tex coords?
             if (!useOnce && random->nextBool()) {
-                fVertexLayout |= GrDrawState::StageTexCoordVertexLayoutBit(s);
+                fAttribBindings |= GrDrawState::ExplicitTexCoordAttribBindingsBit(s);
                 useOnce = true;
             }
         }
     }
+
+    int attributeIndex = 0;
+    fPositionAttributeIndex = attributeIndex;
+    ++attributeIndex;
+    if (fColorInput || (fAttribBindings & GrDrawState::kColor_AttribBindingsBit)) {
+        fColorAttributeIndex = attributeIndex;
+        ++attributeIndex;
+    }
+    if (fCoverageInput || (fAttribBindings & GrDrawState::kCoverage_AttribBindingsBit)) {
+        fCoverageAttributeIndex = attributeIndex;
+        ++attributeIndex;
+    }
+    if (fAttribBindings & GrDrawState::kEdge_AttribBindingsBit) {
+        fEdgeAttributeIndex = attributeIndex;
+        ++attributeIndex;
+    }
+    if (GrDrawState::AttributesBindExplicitTexCoords(fAttribBindings)) {
+        fTexCoordAttributeIndex = attributeIndex;
+        ++attributeIndex;
+    }
 }
 
 bool GrGpuGL::programUnitTest(int maxStages) {