Add msaa configs to bench_pictures.

Enables msaa4 and msaa16 configs in bench_pictures and render_pictures (and
anything else that may use PictureRenderer).

Review URL: https://codereview.chromium.org/14544007/


git-svn-id: http://skia.googlecode.com/svn/trunk@8952 2bbb7eff-a529-9590-31e7-b0007b416f81
diff --git a/tools/PictureRenderer.cpp b/tools/PictureRenderer.cpp
index 274768b..86b258d 100644
--- a/tools/PictureRenderer.cpp
+++ b/tools/PictureRenderer.cpp
@@ -120,7 +120,7 @@
                 desc.fFlags = kRenderTarget_GrTextureFlagBit;
                 desc.fWidth = width;
                 desc.fHeight = height;
-                desc.fSampleCnt = 0;
+                desc.fSampleCnt = fSampleCount;
                 target.reset(fGrContext->createUncachedTexture(desc, NULL, 0));
             }
             if (NULL == target.get()) {
diff --git a/tools/PictureRenderer.h b/tools/PictureRenderer.h
index 3fa7a3c..e6da358 100644
--- a/tools/PictureRenderer.h
+++ b/tools/PictureRenderer.h
@@ -162,6 +162,12 @@
 #endif
     }
 
+#if SK_SUPPORT_GPU
+    void setSampleCount(int sampleCount) {
+        fSampleCount = sampleCount;
+    }
+#endif
+
     void setDrawFilters(DrawFilterFlags const * const filters, const SkString& configName) {
         memcpy(fDrawFilters, filters, sizeof(fDrawFilters));
         fDrawFiltersConfig = configName;
@@ -201,7 +207,11 @@
 #if SK_SUPPORT_GPU
         switch (fDeviceType) {
             case kGPU_DeviceType:
-                config.append("_gpu");
+                if (fSampleCount) {
+                    config.appendf("_msaa%d", fSampleCount);
+                } else {
+                    config.append("_gpu");
+                }
                 break;
 #if SK_ANGLE
             case kAngle_DeviceType:
@@ -261,6 +271,7 @@
         , fScaleFactor(SK_Scalar1)
 #if SK_SUPPORT_GPU
         , fGrContext(NULL)
+        , fSampleCount(0)
 #endif
         {
             fGridInfo.fMargin.setEmpty();
@@ -315,6 +326,7 @@
 #if SK_SUPPORT_GPU
     GrContextFactory       fGrContextFactory;
     GrContext*             fGrContext;
+    int                    fSampleCount;
 #endif
 
     virtual SkString getConfigNameInternal() = 0;
diff --git a/tools/PictureRenderingFlags.cpp b/tools/PictureRenderingFlags.cpp
index ca984ef..4255773 100644
--- a/tools/PictureRenderingFlags.cpp
+++ b/tools/PictureRenderingFlags.cpp
@@ -31,9 +31,9 @@
 // consistent.
 #if SK_ANGLE
 // ANGLE assumes GPU
-DEFINE_string(config, "8888", "[8888|gpu|angle]: Use the corresponding config.");
+DEFINE_string(config, "8888", "[8888|gpu|msaa4|msaa16|angle]: Use the corresponding config.");
 #elif SK_SUPPORT_GPU
-DEFINE_string(config, "8888", "[8888|gpu]: Use the corresponding config.");
+DEFINE_string(config, "8888", "[8888|gpu|msaa4|msaa16]: Use the corresponding config.");
 #else
 DEFINE_string(config, "8888", "[8888]: Use the corresponding config.");
 #endif
@@ -252,6 +252,9 @@
 
     sk_tools::PictureRenderer::SkDeviceTypes deviceType =
         sk_tools::PictureRenderer::kBitmap_DeviceType;
+#if SK_SUPPORT_GPU
+    int sampleCount = 0;
+#endif
     if (FLAGS_config.count() > 0) {
         if (0 == strcmp(FLAGS_config[0], "8888")) {
             deviceType = sk_tools::PictureRenderer::kBitmap_DeviceType;
@@ -264,6 +267,22 @@
                 return NULL;
             }
         }
+        else if (0 == strcmp(FLAGS_config[0], "msaa4")) {
+            deviceType = sk_tools::PictureRenderer::kGPU_DeviceType;
+            if (FLAGS_multi > 1) {
+                error.printf("GPU not compatible with multithreaded tiling.\n");
+                return NULL;
+            }
+            sampleCount = 4;
+        }
+        else if (0 == strcmp(FLAGS_config[0], "msaa16")) {
+            deviceType = sk_tools::PictureRenderer::kGPU_DeviceType;
+            if (FLAGS_multi > 1) {
+                error.printf("GPU not compatible with multithreaded tiling.\n");
+                return NULL;
+            }
+            sampleCount = 16;
+        }
 #if SK_ANGLE
         else if (0 == strcmp(FLAGS_config[0], "angle")) {
             deviceType = sk_tools::PictureRenderer::kAngle_DeviceType;
@@ -279,6 +298,9 @@
             return NULL;
         }
         renderer->setDeviceType(deviceType);
+#if SK_SUPPORT_GPU
+        renderer->setSampleCount(sampleCount);
+#endif
     }