fixed Metal matrix constructors

Bug: skia:8544
Change-Id: Ie1e96ab1ef6e8c032fa510be36c035f91a1f6851
Reviewed-on: https://skia-review.googlesource.com/c/185687
Reviewed-by: Chris Dalton <csmartdalton@google.com>
Commit-Queue: Ethan Nicholas <ethannicholas@google.com>
diff --git a/src/sksl/SkSLMetalCodeGenerator.h b/src/sksl/SkSLMetalCodeGenerator.h
index 1a3a790..3ed2524 100644
--- a/src/sksl/SkSLMetalCodeGenerator.h
+++ b/src/sksl/SkSLMetalCodeGenerator.h
@@ -184,9 +184,13 @@
 
     void writeInverseHack(const Expression& mat);
 
+    String getMatrixConstructHelper(const Type& matrix, const Type& arg);
+
     void writeSpecialIntrinsic(const FunctionCall& c, SpecialIntrinsic kind);
 
-    void writeConstructor(const Constructor& c);
+    bool canCoerce(const Type& t1, const Type& t2);
+
+    void writeConstructor(const Constructor& c, Precedence parentPrecedence);
 
     void writeFieldAccess(const FieldAccess& f);
 
@@ -268,6 +272,7 @@
     std::unordered_map<const FunctionDeclaration*, Requirements> fRequirements;
     bool fSetupFragPositionGlobal = false;
     bool fSetupFragPositionLocal = false;
+    std::unordered_map<String, String> fMatrixConstructHelpers;
     int fUniformBuffer = -1;
 
     typedef CodeGenerator INHERITED;