consolidated writing fields logic and added more builtins for skslc msl backend

Bug: skia:
Change-Id: I6cad948bc68194322f031926ab9a49186ec2302b
Reviewed-on: https://skia-review.googlesource.com/134502
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 d5a8ca1..49a5bd6 100644
--- a/src/sksl/SkSLMetalCodeGenerator.h
+++ b/src/sksl/SkSLMetalCodeGenerator.h
@@ -80,7 +80,7 @@
     MetalCodeGenerator(const Context* context, const Program* program, ErrorReporter* errors,
                       OutputStream* out)
     : INHERITED(program, errors, out)
-    , fReservedWords({"atan2", "rsqrt", "dfdx", "dfdy"})
+    , fReservedWords({"atan2", "rsqrt", "dfdx", "dfdy", "vertex", "fragment"})
     , fLineEnding("\n")
     , fContext(*context) {
         this->setupIntrinsics();
@@ -136,6 +136,9 @@
 
     void writeInterfaceBlocks();
 
+    void writeFields(const std::vector<Type::Field>& fields, int parentOffset,
+                     const InterfaceBlock* parentIntf = nullptr);
+
     int size(const Type* type, bool isPacked) const;
 
     int alignment(const Type* type, bool isPacked) const;