OLD | NEW |
---|---|
1 | 1 |
2 /* | 2 /* |
3 * Copyright 2011 Google Inc. | 3 * Copyright 2011 Google Inc. |
4 * | 4 * |
5 * Use of this source code is governed by a BSD-style license that can be | 5 * Use of this source code is governed by a BSD-style license that can be |
6 * found in the LICENSE file. | 6 * found in the LICENSE file. |
7 */ | 7 */ |
8 | 8 |
9 // This is a GPU-backend specific test. It relies on static intializers to work | 9 // This is a GPU-backend specific test. It relies on static intializers to work |
10 | 10 |
(...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
124 do { | 124 do { |
125 header->fCoverageInput = static_cast<GrGLProgramDesc::ColorInput>( | 125 header->fCoverageInput = static_cast<GrGLProgramDesc::ColorInput>( |
126 random->nextULessThan(kColorInputCnt)); | 126 random->nextULessThan(kColorInputCnt)); |
127 } while ((GrDrawState::kMaxVertexAttribCnt <= currAttribIndex || isPathRende ring) && | 127 } while ((GrDrawState::kMaxVertexAttribCnt <= currAttribIndex || isPathRende ring) && |
128 kAttribute_ColorInput == header->fCoverageInput); | 128 kAttribute_ColorInput == header->fCoverageInput); |
129 header->fCoverageAttributeIndex = (header->fCoverageInput == kAttribute_Colo rInput) ? | 129 header->fCoverageAttributeIndex = (header->fCoverageInput == kAttribute_Colo rInput) ? |
130 currAttribIndex++ : | 130 currAttribIndex++ : |
131 -1; | 131 -1; |
132 bool useGS = random->nextBool(); | 132 bool useGS = random->nextBool(); |
133 #if GR_GL_EXPERIMENTAL_GS | 133 #if GR_GL_EXPERIMENTAL_GS |
134 header->fExperimentalGS = gpu->caps()->geometryShaderSupport() && useGS; | 134 header->fExperimentalGS = gpu->caps()->geometryShaderSupport() && useGS && |
bsalomon
2014/10/01 19:40:58
Feel free to delete this entirely.
| |
135 kGL_GrGLStandard == gpu->glStandard(); | |
135 #else | 136 #else |
136 (void) useGS; | 137 (void) useGS; |
137 #endif | 138 #endif |
138 | 139 |
139 header->fLocalCoordAttributeIndex = useLocalCoords ? currAttribIndex++ : -1; | 140 header->fLocalCoordAttributeIndex = useLocalCoords ? currAttribIndex++ : -1; |
140 | 141 |
141 header->fColorEffectCnt = numColorStages; | 142 header->fColorEffectCnt = numColorStages; |
142 header->fCoverageEffectCnt = numCoverageStages; | 143 header->fCoverageEffectCnt = numCoverageStages; |
143 | 144 |
144 if (dstRead) { | 145 if (dstRead) { |
(...skipping 179 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
324 dummyTextures[0]->asRenderTarget(), | 325 dummyTextures[0]->asRenderTarget(), |
325 dstTexture, | 326 dstTexture, |
326 geometryProcessor.get(), | 327 geometryProcessor.get(), |
327 stages.get(), | 328 stages.get(), |
328 numColorStages, | 329 numColorStages, |
329 numCoverageStages, | 330 numCoverageStages, |
330 currAttribIndex, | 331 currAttribIndex, |
331 drawType)) { | 332 drawType)) { |
332 return false; | 333 return false; |
333 } | 334 } |
334 | |
335 SkAutoTUnref<GrGLProgram> program(GrGLProgram::Create(this, | 335 SkAutoTUnref<GrGLProgram> program(GrGLProgram::Create(this, |
336 pdesc, | 336 pdesc, |
337 geometryProcessor. get(), | 337 geometryProcessor. get(), |
338 stages, | 338 stages, |
339 stages + numColorS tages)); | 339 stages + numColorS tages)); |
340 for (int s = 0; s < numStages; ++s) { | 340 for (int s = 0; s < numStages; ++s) { |
341 SkDELETE(stages[s]); | 341 SkDELETE(stages[s]); |
342 } | 342 } |
343 if (NULL == program.get()) { | 343 if (NULL == program.get()) { |
344 return false; | 344 return false; |
345 } | 345 } |
346 | |
347 // We have to reset the drawstate because we might have added a gp | 346 // We have to reset the drawstate because we might have added a gp |
348 this->drawState()->reset(); | 347 this->drawState()->reset(); |
349 } | 348 } |
350 return true; | 349 return true; |
351 } | 350 } |
352 | 351 |
353 DEF_GPUTEST(GLPrograms, reporter, factory) { | 352 DEF_GPUTEST(GLPrograms, reporter, factory) { |
354 for (int type = 0; type < GrContextFactory::kLastGLContextType; ++type) { | 353 for (int type = 0; type < GrContextFactory::kLastGLContextType; ++type) { |
355 GrContext* context = factory->get(static_cast<GrContextFactory::GLContex tType>(type)); | 354 GrContext* context = factory->get(static_cast<GrContextFactory::GLContex tType>(type)); |
356 if (context) { | 355 if (context) { |
357 GrGpuGL* gpu = static_cast<GrGpuGL*>(context->getGpu()); | 356 GrGpuGL* gpu = static_cast<GrGpuGL*>(context->getGpu()); |
358 int maxStages = 6; | 357 /* |
358 * For the time being, we only support the test with desktop GL or f or android on | |
359 * ARM platforms | |
360 * TODO When we run ES 3.00 GLSL in more places, test again | |
361 */ | |
362 int maxStages; | |
robertphillips
2014/10/01 19:45:56
This line alignment is a bit odd.
| |
363 if (kGL_GrGLStandard == gpu->glStandard() || | |
364 kARM_GrGLVendor == gpu->ctxInfo().vendor()) { | |
365 maxStages = 6; | |
366 } else if (kTegra3_GrGLRenderer == gpu->ctxInfo().renderer() || | |
367 kOther_GrGLRenderer == gpu->ctxInfo().renderer()) { | |
368 maxStages = 1; | |
369 } else { | |
370 return; | |
371 } | |
359 #if SK_ANGLE | 372 #if SK_ANGLE |
360 // Some long shaders run out of temporary registers in the D3D compi ler on ANGLE. | 373 // Some long shaders run out of temporary registers in the D3D compi ler on ANGLE. |
361 if (type == GrContextFactory::kANGLE_GLContextType) { | 374 if (type == GrContextFactory::kANGLE_GLContextType) { |
362 maxStages = 3; | 375 maxStages = 3; |
363 } | 376 } |
364 #endif | 377 #endif |
365 REPORTER_ASSERT(reporter, gpu->programUnitTest(maxStages)); | 378 REPORTER_ASSERT(reporter, gpu->programUnitTest(maxStages)); |
366 } | 379 } |
367 } | 380 } |
368 } | 381 } |
369 | 382 |
370 // This is evil evil evil. The linker may throw away whole translation units as dead code if it | |
371 // thinks none of the functions are called. It will do this even if there are st atic initializers | |
372 // in the unit that could pass pointers to functions from the unit out to other translation units! | |
373 // We force some of the effects that would otherwise be discarded to link here. | |
374 | |
375 #include "SkAlphaThresholdFilter.h" | |
376 #include "SkColorMatrixFilter.h" | |
377 #include "SkLightingImageFilter.h" | |
378 #include "SkMagnifierImageFilter.h" | |
379 | |
380 void forceLinking(); | |
381 | |
382 void forceLinking() { | |
383 SkLightingImageFilter::CreateDistantLitDiffuse(SkPoint3(0,0,0), 0, 0, 0); | |
384 SkAlphaThresholdFilter::Create(SkRegion(), .5f, .5f); | |
385 SkAutoTUnref<SkImageFilter> mag(SkMagnifierImageFilter::Create( | |
386 SkRect::MakeWH(SK_Scalar1, SK_Scalar1), SK_Scalar1)); | |
387 GrConfigConversionEffect::Create(NULL, | |
388 false, | |
389 GrConfigConversionEffect::kNone_PMConversio n, | |
390 SkMatrix::I()); | |
391 SkScalar matrix[20]; | |
392 SkAutoTUnref<SkColorMatrixFilter> cmf(SkColorMatrixFilter::Create(matrix)); | |
393 } | |
394 | |
395 #endif | 383 #endif |
OLD | NEW |