Delay half-float vertex color determination until Op::finalize

Bug: skia:8871
Change-Id: I873e80e2d97a32e4524c177a9b6e07b0566a02ce
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/201682
Reviewed-by: Brian Salomon <bsalomon@google.com>
Commit-Queue: Brian Osman <brianosman@google.com>
diff --git a/src/gpu/ops/GrQuadPerEdgeAA.cpp b/src/gpu/ops/GrQuadPerEdgeAA.cpp
index 9716e31..2a53dd9 100644
--- a/src/gpu/ops/GrQuadPerEdgeAA.cpp
+++ b/src/gpu/ops/GrQuadPerEdgeAA.cpp
@@ -14,6 +14,7 @@
 #include "glsl/GrGLSLFragmentShaderBuilder.h"
 #include "glsl/GrGLSLVarying.h"
 #include "glsl/GrGLSLVertexGeoBuilder.h"
+#include "SkGr.h"
 #include "SkNx.h"
 
 #define AI SK_ALWAYS_INLINE
@@ -688,13 +689,13 @@
 
 namespace GrQuadPerEdgeAA {
 
-ColorType MinColorType(SkPMColor4f color) {
+// This is a more elaborate version of SkPMColor4fNeedsWideColor that allows "no color" for white
+ColorType MinColorType(SkPMColor4f color, GrClampType clampType, const GrCaps& caps) {
     if (color == SK_PMColor4fWHITE) {
         return ColorType::kNone;
-    } else if (color.fitsInBytes()) {
-        return ColorType::kByte;
     } else {
-        return ColorType::kHalf;
+        return SkPMColor4fNeedsWideColor(color, clampType, caps) ? ColorType::kHalf
+                                                                 : ColorType::kByte;
     }
 }