image_from_yuv_textures GM recreates YUVA image before each draw.

Otherwise if any draw flattens the image all subsequent draws of
the image use the flattened texture.

Change-Id: Id1aa58e33f2ec5a13cf1ff75d15f6137aafd556e

Bug: skia:9570
Change-Id: I3a45c4e2b9fead3a5a2500bf5f738ab5d1fbfc17
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/281336
Commit-Queue: Brian Salomon <bsalomon@google.com>
Commit-Queue: Michael Ludwig <michaelludwig@google.com>
Auto-Submit: Brian Salomon <bsalomon@google.com>
Reviewed-by: Michael Ludwig <michaelludwig@google.com>
diff --git a/gm/imagefromyuvtextures.cpp b/gm/imagefromyuvtextures.cpp
index 65fed5c..77f4220 100644
--- a/gm/imagefromyuvtextures.cpp
+++ b/gm/imagefromyuvtextures.cpp
@@ -169,12 +169,17 @@
                 {3, SkColorChannel::kR},
         };
         this->createYUVTextures(fYUVABmps, context, yuvaTextures);
-        auto image1 = SkImage::MakeFromYUVATextures(context,
-                                                    kJPEG_SkYUVColorSpace,
-                                                    yuvaTextures,
-                                                    kIndices,
-                                                    fRGBABmp.dimensions(),
-                                                    kTopLeft_GrSurfaceOrigin);
+
+        // We remake this image before each draw because if any draw flattens it to RGBA then
+        // all subsequent draws use the RGBA texture.
+        auto makeImage1 = [&]() {
+            return SkImage::MakeFromYUVATextures(context,
+                                                 kJPEG_SkYUVColorSpace,
+                                                 yuvaTextures,
+                                                 kIndices,
+                                                 fRGBABmp.dimensions(),
+                                                 kTopLeft_GrSurfaceOrigin);
+        };
 
         GrBackendTexture resultTexture;
         this->createResultTexture(context, fRGBABmp.dimensions(), &resultTexture);
@@ -233,7 +238,7 @@
                                 kMedium_SkFilterQuality, kHigh_SkFilterQuality}) {
                     canvas->save();
                         canvas->scale(scale, scale);
-                        auto s1 = draw(image1.get(), fq);
+                        auto s1 = draw(makeImage1().get(), fq);
                     canvas->restore();
                     canvas->translate(kPad + SkScalarCeilToScalar(scale*s1.width()), 0);
                     canvas->save();