Detemplatize GrGLSLGeometryProcessor::setTransformDataHelper()
authorbsalomon <bsalomon@google.com>
Wed, 17 Aug 2016 17:30:17 +0000 (10:30 -0700)
committerCommit bot <commit-bot@chromium.org>
Wed, 17 Aug 2016 17:30:18 +0000 (10:30 -0700)
Instead take a local matrix parameter.
GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=2250563004

Review-Url: https://codereview.chromium.org/2250563004

src/gpu/GrDefaultGeoProcFactory.cpp
src/gpu/GrOvalRenderer.cpp
src/gpu/batches/GrAAConvexPathRenderer.cpp
src/gpu/batches/GrAnalyticRectBatch.cpp
src/gpu/batches/GrMSAAPathRenderer.cpp
src/gpu/batches/GrPLSPathRenderer.cpp
src/gpu/effects/GrBezierEffect.cpp
src/gpu/effects/GrBitmapTextGeoProc.cpp
src/gpu/effects/GrDashingEffect.cpp
src/gpu/glsl/GrGLSLGeometryProcessor.h

index 9efd9eb..f76acc6 100644 (file)
@@ -186,7 +186,8 @@ public:
                               const GrGLSLProgramDataManager& pdman,
                               int index,
                               const SkTArray<const GrCoordTransform*, true>& transforms) override {
-            this->setTransformDataHelper<DefaultGeoProc>(primProc, pdman, index, transforms);
+            this->setTransformDataHelper(primProc.cast<DefaultGeoProc>().fLocalMatrix, pdman, index,
+                                         transforms);
         }
 
     private:
index 9311f5b..1b8124f 100644 (file)
@@ -91,8 +91,6 @@ public:
 
     bool implementsDistanceVector() const override { return true; };
 
-    const SkMatrix& localMatrix() const { return fLocalMatrix; }
-
     virtual ~CircleGeometryProcessor() {}
 
     const char* name() const override { return "CircleEdge"; }
@@ -184,8 +182,8 @@ private:
                               const GrGLSLProgramDataManager& pdman,
                               int index,
                               const SkTArray<const GrCoordTransform*, true>& transforms) override {
-            this->setTransformDataHelper<CircleGeometryProcessor>(primProc, pdman, index,
-                                                                  transforms);
+            this->setTransformDataHelper(primProc.cast<CircleGeometryProcessor>().fLocalMatrix,
+                                         pdman, index, transforms);
         }
 
     private:
@@ -238,8 +236,6 @@ public:
 
     const char* name() const override { return "EllipseEdge"; }
 
-    const SkMatrix& localMatrix() const { return fLocalMatrix; }
-
     void getGLSLProcessorKey(const GrGLSLCaps& caps, GrProcessorKeyBuilder* b) const override {
         GLSLProcessor::GenKey(*this, caps, b);
     }
@@ -331,8 +327,8 @@ private:
                               const GrGLSLProgramDataManager& pdman,
                               int index,
                               const SkTArray<const GrCoordTransform*, true>& transforms) override {
-            this->setTransformDataHelper<EllipseGeometryProcessor>(primProc, pdman, index,
-                                                                   transforms);
+            this->setTransformDataHelper(primProc.cast<EllipseGeometryProcessor>().fLocalMatrix,
+                                         pdman, index, transforms);
         }
 
     private:
index b0ddaeb..1ce0083 100644 (file)
@@ -628,7 +628,8 @@ public:
                               const GrGLSLProgramDataManager& pdman,
                               int index,
                               const SkTArray<const GrCoordTransform*, true>& transforms) override {
-            this->setTransformDataHelper<QuadEdgeEffect>(primProc, pdman, index, transforms);
+            this->setTransformDataHelper(primProc.cast<QuadEdgeEffect>().fLocalMatrix, pdman, index,
+                                         transforms);
         }
 
     private:
index b13ea77..4d75d91 100644 (file)
@@ -202,7 +202,8 @@ public:
                               const GrGLSLProgramDataManager& pdman,
                               int index,
                               const SkTArray<const GrCoordTransform*, true>& transforms) override {
-            this->setTransformDataHelper<RectGeometryProcessor>(primProc, pdman, index, transforms);
+            this->setTransformDataHelper(primProc.cast<RectGeometryProcessor>().fLocalMatrix, pdman,
+                                         index, transforms);
         }
 
     private:
index ec54f32..324a976 100644 (file)
@@ -122,7 +122,6 @@ public:
     const Attribute* inUV() const { return fInUV; }
     const Attribute* inColor() const { return fInColor; }
     const SkMatrix& viewMatrix() const { return fViewMatrix; }
-    const SkMatrix& localMatrix() const { return SkMatrix::I(); }
 
     class GLSLProcessor : public GrGLSLGeometryProcessor {
     public:
@@ -177,13 +176,6 @@ public:
             }
         }
 
-        void setTransformData(const GrPrimitiveProcessor& primProc,
-                              const GrGLSLProgramDataManager& pdman,
-                              int index,
-                              const SkTArray<const GrCoordTransform*, true>& transforms) override {
-            this->setTransformDataHelper<MSAAQuadProcessor>(primProc, pdman, index, transforms);
-        }
-
     private:
         typedef GrGLSLGeometryProcessor INHERITED;
 
index c022e16..fa0bd90 100644 (file)
@@ -399,7 +399,8 @@ public:
                               const GrGLSLProgramDataManager& pdman,
                               int index,
                               const SkTArray<const GrCoordTransform*, true>& transforms) override {
-            this->setTransformDataHelper<PLSAATriangleEffect>(primProc, pdman, index, transforms);
+            this->setTransformDataHelper(primProc.cast<PLSAATriangleEffect>().fLocalMatrix, pdman,
+                                         index, transforms);
         }
 
     private:
@@ -588,7 +589,8 @@ public:
                               const GrGLSLProgramDataManager& pdman,
                               int index,
                               const SkTArray<const GrCoordTransform*, true>& transforms) override {
-            this->setTransformDataHelper<PLSQuadEdgeEffect>(primProc, pdman, index, transforms);
+            this->setTransformDataHelper(primProc.cast<PLSQuadEdgeEffect>().fLocalMatrix, pdman,
+                                         index, transforms);
         }
 
     private:
@@ -731,7 +733,8 @@ public:
                               const GrGLSLProgramDataManager& pdman,
                               int index,
                               const SkTArray<const GrCoordTransform*, true>& transforms) override {
-            this->setTransformDataHelper<PLSFinishEffect>(primProc, pdman, index, transforms);
+            this->setTransformDataHelper(primProc.cast<PLSFinishEffect>().fLocalMatrix, pdman,
+                                         index, transforms);
         }
 
     private:
index 9d3e8ee..1904b20 100644 (file)
@@ -53,7 +53,8 @@ public:
                           const GrGLSLProgramDataManager& pdman,
                           int index,
                           const SkTArray<const GrCoordTransform*, true>& transforms) override {
-        this->setTransformDataHelper<GrConicEffect>(primProc, pdman, index, transforms);
+        this->setTransformDataHelper(primProc.cast<GrConicEffect>().localMatrix(), pdman, index,
+                                     transforms);
     }
 
 private:
@@ -327,7 +328,8 @@ public:
                           const GrGLSLProgramDataManager& pdman,
                           int index,
                           const SkTArray<const GrCoordTransform*, true>& transforms) override {
-        this->setTransformDataHelper<GrQuadEffect>(primProc, pdman, index, transforms);
+        this->setTransformDataHelper(primProc.cast<GrQuadEffect>().localMatrix(), pdman, index,
+                                     transforms);
     }
 
 private:
index 633a880..e0ec49c 100644 (file)
@@ -98,7 +98,8 @@ public:
                           const GrGLSLProgramDataManager& pdman,
                           int index,
                           const SkTArray<const GrCoordTransform*, true>& transforms) override {
-        this->setTransformDataHelper<GrBitmapTextGeoProc>(primProc, pdman, index, transforms);
+        this->setTransformDataHelper(primProc.cast<GrBitmapTextGeoProc>().localMatrix(), pdman,
+                                     index, transforms);
     }
 
     static inline void GenKey(const GrGeometryProcessor& proc,
index 5949f1f..1848c18 100644 (file)
@@ -823,7 +823,8 @@ public:
                           const GrGLSLProgramDataManager& pdman,
                           int index,
                           const SkTArray<const GrCoordTransform*, true>& transforms) override {
-        this->setTransformDataHelper<DashingCircleEffect>(primProc, pdman, index, transforms);
+        this->setTransformDataHelper(primProc.cast<DashingCircleEffect>().localMatrix(), pdman,
+                                     index, transforms);
     }
 
 private:
@@ -1043,7 +1044,8 @@ public:
                           const GrGLSLProgramDataManager& pdman,
                           int index,
                           const SkTArray<const GrCoordTransform*, true>& transforms) override {
-        this->setTransformDataHelper<DashingLineEffect>(primProc, pdman, index, transforms);
+        this->setTransformDataHelper(primProc.cast<DashingLineEffect>().localMatrix(), pdman, index,
+                                     transforms);
     }
 
 private:
index 72f00f1..00652a5 100644 (file)
@@ -27,18 +27,25 @@ public:
                           const GrGLSLProgramDataManager& pdman,
                           int index,
                           const SkTArray<const GrCoordTransform*, true>& transforms) override {
-        this->setTransformDataMatrix(SkMatrix::I(), pdman, index, transforms);
+        this->setTransformDataHelper(SkMatrix::I(), pdman, index, transforms);
     }
 
 protected:
-    // A helper which subclasses can use if needed
-    template <class GeometryProcessor>
-    void setTransformDataHelper(const GrPrimitiveProcessor& primProc,
+    // A helper which subclasses can use if needed and used above in the default setTransformData().
+    void setTransformDataHelper(const SkMatrix& localMatrix,
                                 const GrGLSLProgramDataManager& pdman,
                                 int index,
                                 const SkTArray<const GrCoordTransform*, true>& transforms) {
-        const GeometryProcessor& gp = primProc.cast<GeometryProcessor>();
-        this->setTransformDataMatrix(gp.localMatrix(), pdman, index, transforms);
+        SkSTArray<2, UniformTransform, true>& procTransforms = fInstalledTransforms[index];
+        int numTransforms = transforms.count();
+        for (int t = 0; t < numTransforms; ++t) {
+            SkASSERT(procTransforms[t].fHandle.isValid());
+            const SkMatrix& transform = GetTransformMatrix(localMatrix, *transforms[t]);
+            if (!procTransforms[t].fCurrentValue.cheapEqualTo(transform)) {
+                pdman.setSkMatrix(procTransforms[t].fHandle.toIndex(), transform);
+                procTransforms[t].fCurrentValue = transform;
+            }
+        }
     }
 
     // Emit a uniform matrix for each coord transform.
@@ -96,22 +103,6 @@ protected:
     }
 
 private:
-    void setTransformDataMatrix(const SkMatrix& localMatrix,
-                                const GrGLSLProgramDataManager& pdman,
-                                int index,
-                                const SkTArray<const GrCoordTransform*, true>& transforms) {
-        SkSTArray<2, UniformTransform, true>& procTransforms = fInstalledTransforms[index];
-        int numTransforms = transforms.count();
-        for (int t = 0; t < numTransforms; ++t) {
-            SkASSERT(procTransforms[t].fHandle.isValid());
-            const SkMatrix& transform = GetTransformMatrix(localMatrix, *transforms[t]);
-            if (!procTransforms[t].fCurrentValue.cheapEqualTo(transform)) {
-                pdman.setSkMatrix(procTransforms[t].fHandle.toIndex(), transform);
-                procTransforms[t].fCurrentValue = transform;
-            }
-        }
-    }
-
     virtual void onEmitCode(EmitArgs&, GrGPArgs*) = 0;
 
     struct UniformTransform : public Transform {