| Index: tests/GLProgramsTest.cpp
|
| diff --git a/tests/GLProgramsTest.cpp b/tests/GLProgramsTest.cpp
|
| index 9fa8dafda61f9bd9ab0d83d0622a9f2c5d093474..c72c31529b3a3426f9ce82aaed8ffd9cb7dde0aa 100644
|
| --- a/tests/GLProgramsTest.cpp
|
| +++ b/tests/GLProgramsTest.cpp
|
| @@ -401,7 +401,45 @@ bool GrDrawingManager::ProgramUnitTest(GrContext* context, int maxStages) {
|
| return true;
|
| }
|
|
|
| -DEF_GPUTEST(GLPrograms, reporter, factory) {
|
| +static int get_glprograms_max_stages(GrContext* context) {
|
| + GrGLGpu* gpu = static_cast<GrGLGpu*>(context->getGpu());
|
| + /*
|
| + * For the time being, we only support the test with desktop GL or for android on
|
| + * ARM platforms
|
| + * TODO When we run ES 3.00 GLSL in more places, test again
|
| + */
|
| + if (kGL_GrGLStandard == gpu->glStandard() ||
|
| + kARM_GrGLVendor == gpu->ctxInfo().vendor()) {
|
| + return 6;
|
| + } else if (kTegra3_GrGLRenderer == gpu->ctxInfo().renderer() ||
|
| + kOther_GrGLRenderer == gpu->ctxInfo().renderer()) {
|
| + return 1;
|
| + }
|
| + return 0;
|
| +}
|
| +
|
| +static void test_glprograms_native(skiatest::Reporter* reporter, GrContext* context) {
|
| + int maxStages = get_glprograms_max_stages(context);
|
| + if (maxStages == 0) {
|
| + return;
|
| + }
|
| + REPORTER_ASSERT(reporter, GrDrawingManager::ProgramUnitTest(context, maxStages));
|
| +}
|
| +
|
| +static void test_glprograms_other_contexts(skiatest::Reporter* reporter, GrContext* context) {
|
| + int maxStages = get_glprograms_max_stages(context);
|
| +#ifdef SK_BUILD_FOR_WIN
|
| + // Some long shaders run out of temporary registers in the D3D compiler on ANGLE and
|
| + // command buffer.
|
| + maxStages = SkTMin(maxStages, 2);
|
| +#endif
|
| + if (maxStages == 0) {
|
| + return;
|
| + }
|
| + REPORTER_ASSERT(reporter, GrDrawingManager::ProgramUnitTest(context, maxStages));
|
| +}
|
| +
|
| +DEF_GPUTEST(GLPrograms, reporter, /*factory*/) {
|
| // Set a locale that would cause shader compilation to fail because of , as decimal separator.
|
| // skbug 3330
|
| #ifdef SK_BUILD_FOR_WIN
|
| @@ -414,42 +452,10 @@ DEF_GPUTEST(GLPrograms, reporter, factory) {
|
| GrContextOptions opts;
|
| opts.fSuppressPrints = true;
|
| GrContextFactory debugFactory(opts);
|
| - for (int type = 0; type < GrContextFactory::kLastGLContextType; ++type) {
|
| - GrContext* context = debugFactory.get(static_cast<GrContextFactory::GLContextType>(type));
|
| - if (context) {
|
| - GrGLGpu* gpu = static_cast<GrGLGpu*>(context->getGpu());
|
| -
|
| - /*
|
| - * For the time being, we only support the test with desktop GL or for android on
|
| - * ARM platforms
|
| - * TODO When we run ES 3.00 GLSL in more places, test again
|
| - */
|
| - int maxStages;
|
| - if (kGL_GrGLStandard == gpu->glStandard() ||
|
| - kARM_GrGLVendor == gpu->ctxInfo().vendor()) {
|
| - maxStages = 6;
|
| - } else if (kTegra3_GrGLRenderer == gpu->ctxInfo().renderer() ||
|
| - kOther_GrGLRenderer == gpu->ctxInfo().renderer()) {
|
| - maxStages = 1;
|
| - } else {
|
| - return;
|
| - }
|
| -#if SK_ANGLE
|
| - // Some long shaders run out of temporary registers in the D3D compiler on ANGLE.
|
| - if (type == GrContextFactory::kANGLE_GLContextType) {
|
| - maxStages = 2;
|
| - }
|
| -#endif
|
| -#if SK_COMMAND_BUFFER
|
| - // Some long shaders run out of temporary registers in the D3D compiler on ANGLE.
|
| - // TODO(hendrikw): This only needs to happen with the ANGLE comand buffer backend.
|
| - if (type == GrContextFactory::kCommandBuffer_GLContextType) {
|
| - maxStages = 2;
|
| - }
|
| -#endif
|
| - REPORTER_ASSERT(reporter, GrDrawingManager::ProgramUnitTest(context, maxStages));
|
| - }
|
| - }
|
| + skiatest::RunWithGPUTestContexts(test_glprograms_native, skiatest::kNative_GPUTestContexts,
|
| + reporter, &debugFactory);
|
| + skiatest::RunWithGPUTestContexts(test_glprograms_other_contexts,
|
| + skiatest::kOther_GPUTestContexts, reporter, &debugFactory);
|
| }
|
|
|
| #endif
|
|
|