Add vector GrSLTypes for shorts

Bug: skia:
Change-Id: Icb9eb1fcb0f879cd0bfdd27d06459843361c9947
Reviewed-on: https://skia-review.googlesource.com/62943
Reviewed-by: Greg Daniel <egdaniel@google.com>
Reviewed-by: Ethan Nicholas <ethannicholas@google.com>
Commit-Queue: Chris Dalton <csmartdalton@google.com>
diff --git a/src/gpu/vk/GrVkUniformHandler.cpp b/src/gpu/vk/GrVkUniformHandler.cpp
index 8bc0249..d9c2519 100644
--- a/src/gpu/vk/GrVkUniformHandler.cpp
+++ b/src/gpu/vk/GrVkUniformHandler.cpp
@@ -14,12 +14,22 @@
 // This alignment mask will give correct alignments for using the std430 block layout. If you want
 // the std140 alignment, you can use this, but then make sure if you have an array type it is
 // aligned to 16 bytes (i.e. has mask of 0xF).
+// These are designated in the Vulkan spec, section 14.5.4 "Offset and Stride Assignment".
+// https://www.khronos.org/registry/vulkan/specs/1.0-wsi_extensions/html/vkspec.html#interfaces-resources-layout
 uint32_t grsltype_to_alignment_mask(GrSLType type) {
     switch(type) {
         case kShort_GrSLType: // fall through
-        case kInt_GrSLType:
+        case kUShort_GrSLType:
+            return 0x1;
+        case kShort2_GrSLType: // fall through
+        case kUShort2_GrSLType:
             return 0x3;
-        case kUShort_GrSLType: // fall through
+        case kShort3_GrSLType: // fall through
+        case kShort4_GrSLType:
+        case kUShort3_GrSLType:
+        case kUShort4_GrSLType:
+            return 0x7;
+        case kInt_GrSLType:
         case kUint_GrSLType:
             return 0x3;
         case kHalf_GrSLType: // fall through
@@ -35,7 +45,7 @@
         case kFloat4_GrSLType:
             return 0xF;
         case kUint2_GrSLType:
-            return 0x3;
+            return 0x7;
         case kInt2_GrSLType:
             return 0x7;
         case kInt3_GrSLType:
@@ -70,15 +80,27 @@
     return 0;
 }
 
-/** Returns the size in bytes taken up in vulkanbuffers for floating point GrSLTypes.
-    For non floating point type returns 0. Currently this reflects the std140 alignment
-    so a float2x2 takes up 8 floats. */
+/** Returns the size in bytes taken up in vulkanbuffers for GrSLTypes. */
 static inline uint32_t grsltype_to_vk_size(GrSLType type) {
     switch(type) {
-        case kShort_GrSLType: // fall through
+        case kShort_GrSLType:
+            return sizeof(int16_t);
+        case kShort2_GrSLType:
+            return 2 * sizeof(int16_t);
+        case kShort3_GrSLType:
+            return 3 * sizeof(int16_t);
+        case kShort4_GrSLType:
+            return 4 * sizeof(int16_t);
+        case kUShort_GrSLType:
+            return sizeof(uint16_t);
+        case kUShort2_GrSLType:
+            return 2 * sizeof(uint16_t);
+        case kUShort3_GrSLType:
+            return 3 * sizeof(uint16_t);
+        case kUShort4_GrSLType:
+            return 4 * sizeof(uint16_t);
         case kInt_GrSLType:
             return sizeof(int32_t);
-        case kUShort_GrSLType: // fall through
         case kUint_GrSLType:
             return sizeof(int32_t);
         case kHalf_GrSLType: // fall through
@@ -94,7 +116,7 @@
         case kFloat4_GrSLType:
             return 4 * sizeof(float);
         case kUint2_GrSLType:
-            return 2 * sizeof(uint16_t);
+            return 2 * sizeof(uint32_t);
         case kInt2_GrSLType:
             return 2 * sizeof(int32_t);
         case kInt3_GrSLType: