added support for push_constant layout

BUG=skia:
GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=2187433003

Committed: https://skia.googlesource.com/skia/+/fa5f65ac61fd525029aa9dab161ffe4896c10f6d
Review-Url: https://codereview.chromium.org/2187433003
diff --git a/src/sksl/SkSLSPIRVCodeGenerator.h b/src/sksl/SkSLSPIRVCodeGenerator.h
index b791945..c885ffc 100644
--- a/src/sksl/SkSLSPIRVCodeGenerator.h
+++ b/src/sksl/SkSLSPIRVCodeGenerator.h
@@ -14,6 +14,7 @@
 
 #include "SkStream.h"
 #include "SkSLCodeGenerator.h"
+#include "SkSLMemoryLayout.h"
 #include "ir/SkSLBinaryExpression.h"
 #include "ir/SkSLBoolLiteral.h"
 #include "ir/SkSLConstructor.h"
@@ -63,6 +64,7 @@
 
     SPIRVCodeGenerator(const Context* context)
     : fContext(*context)
+    , fDefaultLayout(MemoryLayout::k140_Standard)
     , fCapabilities(1 << SpvCapabilityShader)
     , fIdCount(1)
     , fBoolTrue(0)
@@ -94,17 +96,22 @@
 
     SpvId getType(const Type& type);
 
+    SpvId getType(const Type& type, const MemoryLayout& layout);
+
     SpvId getFunctionType(const FunctionDeclaration& function);
 
     SpvId getPointerType(const Type& type, SpvStorageClass_ storageClass);
 
+    SpvId getPointerType(const Type& type, const MemoryLayout& layout, 
+                         SpvStorageClass_ storageClass);
+
     std::vector<SpvId> getAccessChain(const Expression& expr, SkWStream& out);
 
     void writeLayout(const Layout& layout, SpvId target);
 
     void writeLayout(const Layout& layout, SpvId target, int member);
 
-    void writeStruct(const Type& type, SpvId resultId);
+    void writeStruct(const Type& type, const MemoryLayout& layout, SpvId resultId);
 
     void writeProgramElement(const ProgramElement& pe, SkWStream& out);
 
@@ -230,6 +237,7 @@
                           SkWStream& out);
 
     const Context& fContext;
+    const MemoryLayout fDefaultLayout;
 
     uint64_t fCapabilities;
     SpvId fIdCount;