aboutsummaryrefslogtreecommitdiffhomepage
path: root/tests/GLProgramsTest.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tests/GLProgramsTest.cpp')
-rw-r--r--tests/GLProgramsTest.cpp80
1 files changed, 43 insertions, 37 deletions
diff --git a/tests/GLProgramsTest.cpp b/tests/GLProgramsTest.cpp
index 9fa8dafda6..c72c31529b 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