Move to sampling for async-rescale routines

Bug: skia:7650
Change-Id: I10fde77472679b81747e15f150cbc0fe8e49906f
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/349402
Reviewed-by: Brian Salomon <bsalomon@google.com>
Commit-Queue: Mike Reed <reed@google.com>
diff --git a/src/gpu/GrSurfaceContext.cpp b/src/gpu/GrSurfaceContext.cpp
index 077d88c..5a85e88 100644
--- a/src/gpu/GrSurfaceContext.cpp
+++ b/src/gpu/GrSurfaceContext.cpp
@@ -510,7 +510,7 @@
                                                  const SkImageInfo& info,
                                                  const SkIRect& srcRect,
                                                  RescaleGamma rescaleGamma,
-                                                 SkFilterQuality rescaleQuality,
+                                                 RescaleMode rescaleMode,
                                                  ReadPixelsCallback callback,
                                                  ReadPixelsContext callbackContext) {
     // We implement this by rendering and we don't currently support rendering kUnpremul.
@@ -565,8 +565,7 @@
     int x = srcRect.fLeft;
     int y = srcRect.fTop;
     if (needsRescale) {
-        tempRTC = this->rescale(info, kTopLeft_GrSurfaceOrigin, srcRect, rescaleGamma,
-                                rescaleQuality);
+        tempRTC = this->rescale(info, kTopLeft_GrSurfaceOrigin, srcRect, rescaleGamma, rescaleMode);
         if (!tempRTC) {
             callback(callbackContext, nullptr);
             return;
@@ -768,7 +767,7 @@
                                                        const SkIRect& srcRect,
                                                        SkISize dstSize,
                                                        RescaleGamma rescaleGamma,
-                                                       SkFilterQuality rescaleQuality,
+                                                       RescaleMode rescaleMode,
                                                        ReadPixelsCallback callback,
                                                        ReadPixelsContext callbackContext) {
     SkASSERT(srcRect.fLeft >= 0 && srcRect.fRight <= this->width());
@@ -803,7 +802,7 @@
                                       dstColorSpace);
         // TODO: Incorporate the YUV conversion into last pass of rescaling.
         auto tempRTC = this->rescale(info, kTopLeft_GrSurfaceOrigin, srcRect, rescaleGamma,
-                                     rescaleQuality);
+                                     rescaleMode);
         if (!tempRTC) {
             callback(callbackContext, nullptr);
             return;
@@ -1059,7 +1058,7 @@
                                                                 GrSurfaceOrigin origin,
                                                                 SkIRect srcRect,
                                                                 RescaleGamma rescaleGamma,
-                                                                SkFilterQuality rescaleQuality) {
+                                                                RescaleMode rescaleMode) {
     // We rescale by drawing and currently only support drawing to premul.
     if (info.alphaType() != kPremul_SkAlphaType) {
         return nullptr;
@@ -1077,7 +1076,7 @@
                                    SkIRect::MakeSize(sdc->dimensions()),
                                    srcRect,
                                    rescaleGamma,
-                                   rescaleQuality)) {
+                                   rescaleMode)) {
         return nullptr;
     }
     return sdc;
@@ -1087,7 +1086,7 @@
                                    SkIRect dstRect,
                                    SkIRect srcRect,
                                    RescaleGamma rescaleGamma,
-                                   SkFilterQuality rescaleQuality) {
+                                   RescaleMode rescaleMode) {
     SkASSERT(dst);
     if (!SkIRect::MakeSize(dst->dimensions()).contains((dstRect))) {
         return false;
@@ -1158,7 +1157,7 @@
 
     while (srcRect.size() != finalSize) {
         SkISize nextDims = finalSize;
-        if (rescaleQuality != kNone_SkFilterQuality) {
+        if (rescaleMode != RescaleMode::kNearest) {
             if (srcRect.width() > finalSize.width()) {
                 nextDims.fWidth = std::max((srcRect.width() + 1)/2, finalSize.width());
             } else if (srcRect.width() < finalSize.width()) {
@@ -1198,7 +1197,7 @@
             stepDst = tempB.get();
             stepDstRect = SkIRect::MakeSize(tempB->dimensions());
         }
-        if (rescaleQuality == kHigh_SkFilterQuality) {
+        if (rescaleMode == RescaleMode::kRepeatedCubic) {
             SkMatrix matrix;
             matrix.setScaleTranslate((float)srcRect.width()/nextDims.width(),
                                      (float)srcRect.height()/nextDims.height(),
@@ -1235,8 +1234,8 @@
                                     SkRect::Make(stepDstRect),
                                     SkRect::Make(stepDstRect));
         } else {
-            auto filter = rescaleQuality == kNone_SkFilterQuality ? GrSamplerState::Filter::kNearest
-                                                                  : GrSamplerState::Filter::kLinear;
+            auto filter = rescaleMode == RescaleMode::kNearest ? GrSamplerState::Filter::kNearest
+                                                               : GrSamplerState::Filter::kLinear;
             // Minimizing draw with integer coord src and dev rects can always be kFast.
             auto constraint = SkCanvas::SrcRectConstraint::kStrict_SrcRectConstraint;
             if (nextDims.width() <= srcRect.width() && nextDims.height() <= srcRect.height()) {