[graphite] Begin refactoring paint key creation

Bug: 251493570
Change-Id: Id92358016150e1cc4f73da2368e37c13c04a8902
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/754020
Reviewed-by: Michael Ludwig <michaelludwig@google.com>
Commit-Queue: Robert Phillips <robertphillips@google.com>
diff --git a/src/gpu/graphite/PaintParams.cpp b/src/gpu/graphite/PaintParams.cpp
index 8fe4d51..66a6b60 100644
--- a/src/gpu/graphite/PaintParams.cpp
+++ b/src/gpu/graphite/PaintParams.cpp
@@ -104,6 +104,18 @@
     return result;
 }
 
+void PaintParams::addPaintColorToKey(const KeyContext& keyContext,
+                                     PaintParamsKeyBuilder* keyBuilder,
+                                     PipelineDataGatherer* gatherer) const {
+    if (fShader) {
+        AddToKey(keyContext, keyBuilder, gatherer, fShader.get());
+    } else {
+        SolidColorShaderBlock::BeginBlock(keyContext, keyBuilder, gatherer,
+                                          keyContext.paintColor());
+        keyBuilder->endBlock();
+    }
+}
+
 void PaintParams::toKey(const KeyContext& keyContext,
                         PaintParamsKeyBuilder* builder,
                         PipelineDataGatherer* gatherer) const {
@@ -124,7 +136,7 @@
         builder->endBlock();
     }
 
-    AddToKey(keyContext, builder, gatherer, fShader.get());
+    this->addPaintColorToKey(keyContext, builder, gatherer);
 
     if (fPrimitiveBlender) {
         AddPrimitiveBlendBlock(keyContext, builder, gatherer, fPrimitiveBlender.get());
diff --git a/src/gpu/graphite/PaintParams.h b/src/gpu/graphite/PaintParams.h
index c0ceae7..7b34ac5 100644
--- a/src/gpu/graphite/PaintParams.h
+++ b/src/gpu/graphite/PaintParams.h
@@ -73,6 +73,8 @@
     void toKey(const KeyContext&, PaintParamsKeyBuilder*, PipelineDataGatherer*) const;
 
 private:
+    void addPaintColorToKey(const KeyContext&, PaintParamsKeyBuilder*, PipelineDataGatherer*) const;
+
     SkColor4f            fColor;
     sk_sp<SkBlender>     fFinalBlender; // A nullptr here means SrcOver blending
     sk_sp<SkShader>      fShader;
diff --git a/src/gpu/graphite/Precompile.cpp b/src/gpu/graphite/Precompile.cpp
index e191ebd..c41eb26 100644
--- a/src/gpu/graphite/Precompile.cpp
+++ b/src/gpu/graphite/Precompile.cpp
@@ -107,6 +107,18 @@
     return GetDstReadRequirement(caps, SkBlendMode::kSrcOver, coverage);
 }
 
+void PaintOptions::addPaintColorToKey(const KeyContext& keyContext,
+                                      PaintParamsKeyBuilder* keyBuilder,
+                                      int desiredShaderCombination) const {
+    if (!fShaderOptions.empty()) {
+        PrecompileBase::AddToKey(keyContext, keyBuilder, fShaderOptions, desiredShaderCombination);
+    } else {
+        SolidColorShaderBlock::BeginBlock(keyContext, keyBuilder, /* gatherer= */ nullptr,
+                                          {1, 0, 0, 1});
+        keyBuilder->endBlock();
+    }
+}
+
 void PaintOptions::createKey(const KeyContext& keyContext,
                              int desiredCombination,
                              PaintParamsKeyBuilder* keyBuilder,
@@ -153,9 +165,7 @@
         keyBuilder->endBlock();
     }
 
-    if (!fShaderOptions.empty()) {
-        PrecompileBase::AddToKey(keyContext, keyBuilder, fShaderOptions, desiredShaderCombination);
-    }
+    this->addPaintColorToKey(keyContext, keyBuilder, desiredShaderCombination);
 
     if (addPrimitiveBlender) {
         BlendShaderBlock::BeginBlock(keyContext, keyBuilder, /* gatherer= */ nullptr);
diff --git a/src/gpu/graphite/Precompile.h b/src/gpu/graphite/Precompile.h
index 6753b9c..b170095 100644
--- a/src/gpu/graphite/Precompile.h
+++ b/src/gpu/graphite/Precompile.h
@@ -196,6 +196,10 @@
         Coverage coverage,
         const std::function<void(UniquePaintParamsID)>& processCombination) const;
 
+    void addPaintColorToKey(const KeyContext&,
+                            PaintParamsKeyBuilder*,
+                            int desiredShaderCombination) const;
+
     std::vector<sk_sp<PrecompileShader>> fShaderOptions;
     std::vector<sk_sp<PrecompileMaskFilter>> fMaskFilterOptions;
     std::vector<sk_sp<PrecompileColorFilter>> fColorFilterOptions;