Correctly handle mat2x2 in Vulkan

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

Review-Url: https://codereview.chromium.org/2129953002
diff --git a/gyp/shaderc.gyp b/gyp/shaderc.gyp
index 4a85411..0eb6081 100644
--- a/gyp/shaderc.gyp
+++ b/gyp/shaderc.gyp
@@ -17,7 +17,7 @@
         'libglslangosdependent',
         'libglslang',
       ],
-      'direct_dependent_settings': {
+      'all_dependent_settings': {
         'include_dirs': [
           '../third_party/externals/shaderc2/libshaderc/include',
         ],
diff --git a/src/gpu/vk/GrVkPipelineStateDataManager.cpp b/src/gpu/vk/GrVkPipelineStateDataManager.cpp
index 9fa6d6d..5711df3 100644
--- a/src/gpu/vk/GrVkPipelineStateDataManager.cpp
+++ b/src/gpu/vk/GrVkPipelineStateDataManager.cpp
@@ -233,12 +233,10 @@
         buffer = static_cast<char*>(buffer) + uniformOffset;
         for (int i = 0; i < count; ++i) {
             const float* matrix = &matrices[N * N * i];
-            memcpy(buffer, &matrix[0], N * sizeof(float));
-            buffer = static_cast<char*>(buffer) + 4*sizeof(float);
-            memcpy(buffer, &matrix[3], N * sizeof(float));
-            buffer = static_cast<char*>(buffer) + 4*sizeof(float);
-            memcpy(buffer, &matrix[6], N * sizeof(float));
-            buffer = static_cast<char*>(buffer) + 4*sizeof(float);
+            for (int j = 0; j < N; ++j) {
+                memcpy(buffer, &matrix[j * N], N * sizeof(float));
+                buffer = static_cast<char*>(buffer) + 4 * sizeof(float);
+            }
         }
     }
 };
diff --git a/src/gpu/vk/GrVkUniformHandler.cpp b/src/gpu/vk/GrVkUniformHandler.cpp
index 3451d6b..ca61fc9 100644
--- a/src/gpu/vk/GrVkUniformHandler.cpp
+++ b/src/gpu/vk/GrVkUniformHandler.cpp
@@ -53,10 +53,10 @@
 }
 
 /** Returns the size in bytes taken up in vulkanbuffers for floating point GrSLTypes.
-    For non floating point type returns 0 */
+    For non floating point type returns 0. Currently this reflects the std140 alignment
+    so a mat22 takes up 8 floats. */
 static inline uint32_t grsltype_to_vk_size(GrSLType type) {
     SkASSERT(GrSLTypeIsFloatType(type));
-    SkASSERT(kMat22f_GrSLType != type); // TODO: handle mat2 differences between std140 and std430.
     static const uint32_t kSizes[] = {
         0,                        // kVoid_GrSLType
         sizeof(float),            // kFloat_GrSLType
@@ -104,8 +104,7 @@
                             int arrayCount) {
     uint32_t alignmentMask = grsltype_to_alignment_mask(type);
     // We want to use the std140 layout here, so we must make arrays align to 16 bytes.
-    SkASSERT(type != kMat22f_GrSLType); // TODO: support mat2.
-    if (arrayCount) {
+    if (arrayCount || type == kMat22f_GrSLType) {
         alignmentMask = 0xF;
     }
     uint32_t offsetDiff = *currentOffset & alignmentMask;