aboutsummaryrefslogtreecommitdiffhomepage
path: root/tests
diff options
context:
space:
mode:
authorGravatar commit-bot@chromium.org <commit-bot@chromium.org@2bbb7eff-a529-9590-31e7-b0007b416f81>2013-10-21 14:48:23 +0000
committerGravatar commit-bot@chromium.org <commit-bot@chromium.org@2bbb7eff-a529-9590-31e7-b0007b416f81>2013-10-21 14:48:23 +0000
commit8e919add406c5d20918a7f0ca811317312e6ce67 (patch)
treeccf88d598957c568910be6f2455763bbaa435372 /tests
parent15455b2a13e9c673ea41a32ca9205bbc21415abc (diff)
Fix GrProgramsTest to not generate tests with too many TexCoord references
Make GrProgramsTest check how many texture coordinate sets are available and select random effects up until the amount runs out. Otherwise, following effect sequence would fail the shader compilation when Skia is compiled with nv_path_rendering on (eg. when fixed function codepath is used): * Stage 0: TextureDomain (1 texcoord) * Stage 1: Convolution (1 texcoord) * Stage 2: Bitmap Alpha Threshold (2 texcoords) * Stage 3: DisplacementMap (2 texcoords) * Stage 4: Config Conversion (1 texcoords) * Stage 5: Two-Point Conical Gradient (2 texcoords) This would use more texture coordinate sets than 8, which is fairly common amount currently. R=bsalomon@google.com, cdalton@nvidia.com Author: kkinnunen@nvidia.com Review URL: https://codereview.chromium.org/32403002 git-svn-id: http://skia.googlecode.com/svn/trunk@11881 2bbb7eff-a529-9590-31e7-b0007b416f81
Diffstat (limited to 'tests')
-rw-r--r--tests/GLProgramsTest.cpp21
1 files changed, 19 insertions, 2 deletions
diff --git a/tests/GLProgramsTest.cpp b/tests/GLProgramsTest.cpp
index 13d0d2ee5b..12107f4356 100644
--- a/tests/GLProgramsTest.cpp
+++ b/tests/GLProgramsTest.cpp
@@ -158,6 +158,7 @@ bool GrGpuGL::programUnitTest(int maxStages) {
GrGLProgramDesc pdesc;
int currAttribIndex = 1; // we need to always leave room for position
+ int currTextureCoordSet = 0;
int attribIndices[2];
GrTexture* dummyTextures[] = {dummyTexture1.get(), dummyTexture2.get()};
@@ -167,7 +168,9 @@ bool GrGpuGL::programUnitTest(int maxStages) {
SkAutoSTMalloc<8, const GrEffectStage*> stages(numStages);
- for (int s = 0; s < numStages; ++s) {
+ bool useFixedFunctionTexturing = this->shouldUseFixedFunctionTexturing();
+
+ for (int s = 0; s < numStages;) {
SkAutoTUnref<const GrEffectRef> effect(GrEffectTestFactory::CreateStage(
&random,
this->getContext(),
@@ -178,15 +181,29 @@ bool GrGpuGL::programUnitTest(int maxStages) {
// If adding this effect would exceed the max attrib count then generate a
// new random effect.
if (currAttribIndex + numAttribs > GrDrawState::kMaxVertexAttribCnt) {
- --s;
continue;
}
+
+
+ // If adding this effect would exceed the max texture coord set count then generate a
+ // new random effect.
+ if (useFixedFunctionTexturing && !(*effect)->hasVertexCode()) {
+ int numTransforms = (*effect)->numTransforms();
+ if (currTextureCoordSet + numTransforms > this->glCaps().maxFixedFunctionTextureCoords()) {
+ continue;
+ }
+ currTextureCoordSet += numTransforms;
+ }
+
+ useFixedFunctionTexturing = useFixedFunctionTexturing && !(*effect)->hasVertexCode();
+
for (int i = 0; i < numAttribs; ++i) {
attribIndices[i] = currAttribIndex++;
}
GrEffectStage* stage = SkNEW_ARGS(GrEffectStage,
(effect.get(), attribIndices[0], attribIndices[1]));
stages[s] = stage;
+ ++s;
}
const GrTexture* dstTexture = random.nextBool() ? dummyTextures[0] : dummyTextures[1];
pdesc.setRandom(&random,