Add SkImage::MakeFromYUVAPixmaps

Bug: skia:7903
Change-Id: I41ee31ad3657aee372e22ec3e7a0a317e31b2791
Reviewed-on: https://skia-review.googlesource.com/c/171007
Commit-Queue: Jim Van Verth <jvanverth@google.com>
Reviewed-by: Brian Salomon <bsalomon@google.com>
Reviewed-by: Greg Daniel <egdaniel@google.com>
diff --git a/gm/wacky_yuv_formats.cpp b/gm/wacky_yuv_formats.cpp
index 8ea25c0..00c2fe1 100644
--- a/gm/wacky_yuv_formats.cpp
+++ b/gm/wacky_yuv_formats.cpp
@@ -743,6 +743,7 @@
                         }
 
                         GrBackendTexture yuvaTextures[4];
+                        SkPixmap yuvaPixmaps[4];
 
                         for (int i = 0; i < 4; ++i) {
                             if (!used[i]) {
@@ -757,9 +758,12 @@
                                 false,
                                 GrMipMapped::kNo,
                                 resultBMs[i].rowBytes());
+                            yuvaPixmaps[i] = resultBMs[i].pixmap();
                         }
 
-                        if (counter & 0x1) {
+                        int counterMod = counter % 3;
+                        switch (counterMod) {
+                        case 0:
                             fImages[opaque][cs][format] = SkImage::MakeFromYUVATexturesCopy(
                                 context,
                                 (SkYUVColorSpace)cs,
@@ -767,7 +771,8 @@
                                 yuvaIndices,
                                 { fOriginalBMs[opaque].width(), fOriginalBMs[opaque].height() },
                                 kTopLeft_GrSurfaceOrigin);
-                        } else {
+                            break;
+                        case 1:
                             fImages[opaque][cs][format] = SkImage::MakeFromYUVATextures(
                                 context,
                                 (SkYUVColorSpace)cs,
@@ -775,7 +780,19 @@
                                 yuvaIndices,
                                 { fOriginalBMs[opaque].width(), fOriginalBMs[opaque].height() },
                                 kTopLeft_GrSurfaceOrigin);
+                            break;
+                        case 2:
+                        default:
+                            fImages[opaque][cs][format] = SkImage::MakeFromYUVAPixmaps(
+                                context,
+                                (SkYUVColorSpace)cs,
+                                yuvaPixmaps,
+                                yuvaIndices,
+                                { fOriginalBMs[opaque].width(), fOriginalBMs[opaque].height() },
+                                kTopLeft_GrSurfaceOrigin, true);
+                            break;
                         }
+                        ++counter;
                     } else {
                         fImages[opaque][cs][format] = make_yuv_gen_image(
                                                                 fOriginalBMs[opaque].info(),
@@ -785,7 +802,6 @@
                     }
                 }
             }
-            ++counter;
         }
     }