Index: tests/GLProgramsTest.cpp |
=================================================================== |
--- tests/GLProgramsTest.cpp (revision 8436) |
+++ tests/GLProgramsTest.cpp (working copy) |
@@ -23,18 +23,30 @@ |
void GrGLProgramDesc::setRandom(SkMWCRandom* random, |
const GrGpuGL* gpu, |
- const GrEffectStage stages[GrDrawState::kNumStages]) { |
- fAttribBindings = 0; |
+ const GrEffectStage stages[GrDrawState::kNumStages], |
+ int currAttribIndex) { |
fEmitsPointSize = random->nextBool(); |
- fColorInput = random->nextULessThan(kColorInputCnt); |
- fCoverageInput = random->nextULessThan(kColorInputCnt); |
+ fPositionAttributeIndex = 0; |
+ |
+ // if the effects have used up all off the available attributes, |
+ // don't try to use color or coverage attributes as input |
+ do { |
+ fColorInput = random->nextULessThan(kColorInputCnt); |
+ } while (GrDrawState::kMaxVertexAttribCnt <= currAttribIndex && |
+ kAttribute_ColorInput == fColorInput); |
+ fColorAttributeIndex = (fColorInput == kAttribute_ColorInput) ? currAttribIndex++ : -1; |
+ |
+ do { |
+ fCoverageInput = random->nextULessThan(kColorInputCnt); |
+ } while (GrDrawState::kMaxVertexAttribCnt <= currAttribIndex && |
+ kAttribute_ColorInput == fCoverageInput); |
+ fCoverageAttributeIndex = (fCoverageInput == kAttribute_ColorInput) ? currAttribIndex++ : -1; |
+ |
fColorFilterXfermode = random->nextULessThan(SkXfermode::kCoeffModesCnt); |
fFirstCoverageStage = random->nextULessThan(GrDrawState::kNumStages); |
- fAttribBindings |= random->nextBool() ? GrDrawState::kCoverage_AttribBindingsBit : 0; |
- |
#if GR_GL_EXPERIMENTAL_GS |
fExperimentalGS = gpu->caps()->geometryShaderSupport() && random->nextBool(); |
#endif |
@@ -47,36 +59,16 @@ |
fDualSrcOutput = kNone_DualSrcOutput; |
} |
- // use separate tex coords? |
- if (random->nextBool()) { |
- fAttribBindings |= GrDrawState::kLocalCoords_AttribBindingsBit; |
- } |
+ bool useLocalCoords = random->nextBool() && currAttribIndex < GrDrawState::kMaxVertexAttribCnt; |
+ fLocalCoordAttributeIndex = useLocalCoords ? currAttribIndex++ : -1; |
for (int s = 0; s < GrDrawState::kNumStages; ++s) { |
if (NULL != stages[s].getEffect()) { |
const GrBackendEffectFactory& factory = (*stages[s].getEffect())->getFactory(); |
- bool explicitLocalCoords = (fAttribBindings & |
- GrDrawState::kLocalCoords_AttribBindingsBit); |
- GrDrawEffect drawEffect(stages[s], explicitLocalCoords); |
+ GrDrawEffect drawEffect(stages[s], useLocalCoords); |
fEffectKeys[s] = factory.glEffectKey(drawEffect, gpu->glCaps()); |
} |
} |
- |
- 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::kLocalCoords_AttribBindingsBit) { |
- fLocalCoordsAttributeIndex = attributeIndex; |
- ++attributeIndex; |
- } |
} |
bool GrGpuGL::programUnitTest(int maxStages) { |
@@ -109,7 +101,7 @@ |
GrGLProgramDesc pdesc; |
GrEffectStage stages[GrDrawState::kNumStages]; |
- int currAttribIndex = GrDrawState::kAttribIndexCount; |
+ int currAttribIndex = 1; // we need to always leave room for position |
int attribIndices[2]; |
for (int s = 0; s < maxStages; ++s) { |
// enable the stage? |
@@ -122,10 +114,9 @@ |
dummyTextures)); |
int numAttribs = (*effect)->numVertexAttribs(); |
- // If adding this effect would cause to exceed the max attrib count then generate a |
- // new random effect. The explanation for why this check is correct is a bit |
- // convoluted and this code will be removed soon. |
- if (currAttribIndex + numAttribs > GrDrawState::kCoverageOverrideAttribIndexValue) { |
+ // If adding this effect would exceed the max attrib count then generate a |
+ // new random effect. |
+ if (currAttribIndex + numAttribs > GrDrawState::kMaxVertexAttribCnt) { |
--s; |
continue; |
} |
@@ -135,7 +126,7 @@ |
stages[s].setEffect(effect.get(), attribIndices[0], attribIndices[1]); |
} |
} |
- pdesc.setRandom(&random, this, stages); |
+ pdesc.setRandom(&random, this, stages, currAttribIndex); |
const GrEffectStage* stagePtrs[GrDrawState::kNumStages]; |
for (int s = 0; s < GrDrawState::kNumStages; ++s) { |