Make GPU unit tests use GrContexts of different GL types.
Review URL: https://codereview.appspot.com/7281046

git-svn-id: http://skia.googlecode.com/svn/trunk@7540 2bbb7eff-a529-9590-31e7-b0007b416f81
diff --git a/tests/PremulAlphaRoundTripTest.cpp b/tests/PremulAlphaRoundTripTest.cpp
index 8321c94..b25d358 100644
--- a/tests/PremulAlphaRoundTripTest.cpp
+++ b/tests/PremulAlphaRoundTripTest.cpp
@@ -12,6 +12,7 @@
 #include "SkDevice.h"
 
 #if SK_SUPPORT_GPU
+#include "GrContextFactory.h"
 #include "SkGpuDevice.h"
 #endif
 
@@ -46,61 +47,75 @@
     SkCanvas::kRGBA_Unpremul_Config8888,
 };
 
-void PremulAlphaRoundTripTest(skiatest::Reporter* reporter,
-                              GrContext* context) {
+void PremulAlphaRoundTripTest(skiatest::Reporter* reporter, GrContextFactory* factory) {
     SkAutoTUnref<SkDevice> device;
     for (int dtype = 0; dtype < 2; ++dtype) {
-        if (0 == dtype) {
-            device.reset(new SkDevice(SkBitmap::kARGB_8888_Config,
-                                          256,
-                                          256,
-                                          false));
-        } else {
-#if !SK_SUPPORT_GPU || defined(SK_SCALAR_IS_FIXED)
-            // GPU device known not to work in the fixed pt build.
-            continue;
-#else
-            device.reset(new SkGpuDevice(context,
-                                             SkBitmap::kARGB_8888_Config,
-                                             256,
-                                             256));
-#endif
+
+        int glCtxTypeCnt = 1;
+#if SK_SUPPORT_GPU
+        if (0 != dtype)  {
+            glCtxTypeCnt = GrContextFactory::kGLContextTypeCnt;
         }
-        SkCanvas canvas(device);
+#endif
+        for (int glCtxType = 0; glCtxType < glCtxTypeCnt; ++glCtxType) {
+            if (0 == dtype) {
+                device.reset(new SkDevice(SkBitmap::kARGB_8888_Config,
+                                              256,
+                                              256,
+                                              false));
+            } else {
+#if SK_SUPPORT_GPU
+                GrContextFactory::GLContextType type =
+                    static_cast<GrContextFactory::GLContextType>(glCtxType);
+                if (!GrContextFactory::IsRenderingGLContext(type)) {
+                    continue;
+                }
+                GrContext* context = factory->get(type);
+                if (NULL == context) {
+                    continue;
+                }
 
-        SkBitmap readBmp1;
-        readBmp1.setConfig(SkBitmap::kARGB_8888_Config, 256, 256);
-        readBmp1.allocPixels();
-        SkBitmap readBmp2;
-        readBmp2.setConfig(SkBitmap::kARGB_8888_Config, 256, 256);
-        readBmp2.allocPixels();
+                device.reset(new SkGpuDevice(context, SkBitmap::kARGB_8888_Config, 256, 256));
+#else
+                continue;
+#endif
+            }
+            SkCanvas canvas(device);
 
-        for (size_t upmaIdx = 0;
-             upmaIdx < SK_ARRAY_COUNT(gUnpremulConfigs);
-             ++upmaIdx) {
-            fillCanvas(&canvas, gUnpremulConfigs[upmaIdx]);
-            {
+            SkBitmap readBmp1;
+            readBmp1.setConfig(SkBitmap::kARGB_8888_Config, 256, 256);
+            readBmp1.allocPixels();
+            SkBitmap readBmp2;
+            readBmp2.setConfig(SkBitmap::kARGB_8888_Config, 256, 256);
+            readBmp2.allocPixels();
+
+            for (size_t upmaIdx = 0;
+                 upmaIdx < SK_ARRAY_COUNT(gUnpremulConfigs);
+                 ++upmaIdx) {
+                fillCanvas(&canvas, gUnpremulConfigs[upmaIdx]);
+                {
+                    SkAutoLockPixels alp1(readBmp1);
+                    SkAutoLockPixels alp2(readBmp2);
+                    sk_bzero(readBmp1.getPixels(), readBmp1.getSafeSize());
+                    sk_bzero(readBmp2.getPixels(), readBmp2.getSafeSize());
+                }
+
+                canvas.readPixels(&readBmp1, 0, 0, gUnpremulConfigs[upmaIdx]);
+                canvas.writePixels(readBmp1, 0, 0, gUnpremulConfigs[upmaIdx]);
+                canvas.readPixels(&readBmp2, 0, 0, gUnpremulConfigs[upmaIdx]);
+
                 SkAutoLockPixels alp1(readBmp1);
                 SkAutoLockPixels alp2(readBmp2);
-                sk_bzero(readBmp1.getPixels(), readBmp1.getSafeSize());
-                sk_bzero(readBmp2.getPixels(), readBmp2.getSafeSize());
-            }
-
-            canvas.readPixels(&readBmp1, 0, 0, gUnpremulConfigs[upmaIdx]);
-            canvas.writePixels(readBmp1, 0, 0, gUnpremulConfigs[upmaIdx]);
-            canvas.readPixels(&readBmp2, 0, 0, gUnpremulConfigs[upmaIdx]);
-
-            SkAutoLockPixels alp1(readBmp1);
-            SkAutoLockPixels alp2(readBmp2);
-            uint32_t* pixels1 =
-                reinterpret_cast<uint32_t*>(readBmp1.getPixels());
-            uint32_t* pixels2 =
-                reinterpret_cast<uint32_t*>(readBmp2.getPixels());
-            bool success = true;
-            for (int y = 0; y < 256 && success; ++y) {
-                for (int x = 0; x < 256 && success; ++x) {
-                    int i = y * 256 + x;
-                    REPORTER_ASSERT(reporter, success = pixels1[i] == pixels2[i]);
+                uint32_t* pixels1 =
+                    reinterpret_cast<uint32_t*>(readBmp1.getPixels());
+                uint32_t* pixels2 =
+                    reinterpret_cast<uint32_t*>(readBmp2.getPixels());
+                bool success = true;
+                for (int y = 0; y < 256 && success; ++y) {
+                    for (int x = 0; x < 256 && success; ++x) {
+                        int i = y * 256 + x;
+                        REPORTER_ASSERT(reporter, success = pixels1[i] == pixels2[i]);
+                    }
                 }
             }
         }