fixed vec3 size differences and mod calculation of skslc msl backend

Bug: skia:
Change-Id: I5dc6d956463845627a1a2debee5ac8856e5e2e8d
Reviewed-on: https://skia-review.googlesource.com/132500
Reviewed-by: Ethan Nicholas <ethannicholas@google.com>
Commit-Queue: Timothy Liang <timliang@google.com>
diff --git a/src/sksl/SkSLMetalCodeGenerator.h b/src/sksl/SkSLMetalCodeGenerator.h
index 3f0bc28..d5a8ca1 100644
--- a/src/sksl/SkSLMetalCodeGenerator.h
+++ b/src/sksl/SkSLMetalCodeGenerator.h
@@ -13,6 +13,7 @@
 #include <unordered_map>
 
 #include "SkSLCodeGenerator.h"
+#include "SkSLMemoryLayout.h"
 #include "SkSLStringStream.h"
 #include "ir/SkSLBinaryExpression.h"
 #include "ir/SkSLBoolLiteral.h"
@@ -79,6 +80,7 @@
     MetalCodeGenerator(const Context* context, const Program* program, ErrorReporter* errors,
                       OutputStream* out)
     : INHERITED(program, errors, out)
+    , fReservedWords({"atan2", "rsqrt", "dfdx", "dfdy"})
     , fLineEnding("\n")
     , fContext(*context) {
         this->setupIntrinsics();
@@ -102,6 +104,7 @@
 
     enum SpecialIntrinsic {
         kTexture_SpecialIntrinsic,
+        kMod_SpecialIntrinsic,
     };
 
     enum MetalIntrinsic {
@@ -161,6 +164,8 @@
 
     void writeVarInitializer(const Variable& var, const Expression& value);
 
+    void writeName(const String& name);
+
     void writeVarDeclarations(const VarDeclarations& decl, bool global);
 
     void writeFragCoord();
@@ -231,6 +236,7 @@
 
     typedef std::pair<IntrinsicKind, int32_t> Intrinsic;
     std::unordered_map<String, Intrinsic> fIntrinsicMap;
+    std::unordered_set<String> fReservedWords;
     std::vector<const VarDeclaration*> fInitNonConstGlobalVars;
     std::vector<const Variable*> fTextures;
     std::unordered_map<const Type::Field*, const InterfaceBlock*> fInterfaceBlockMap;