Vulkan: Use ShaderType enum.

This re-uses the same machinery as the GL front-end. It saves a lot of
custom casting and array sizing. Currently we only support vertex and
fragment shaders in Vulkan. Because of the Pipeline cache sizing, it's
easier to stick with just VS/FS and introduce the full set of shaders
when we move to packing the cache better.

Bug: angleproject:2522
Bug: angleproject:2455
Change-Id: I21432a335c741885af87970d8ee52b4a36338304
Reviewed-on: https://chromium-review.googlesource.com/1036927
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Reviewed-by: Jiawei Shao <jiawei.shao@intel.com>
Commit-Queue: Jamie Madill <jmadill@chromium.org>
diff --git a/src/libANGLE/renderer/vulkan/ProgramVk.h b/src/libANGLE/renderer/vulkan/ProgramVk.h
index 0c03710..66e0784 100644
--- a/src/libANGLE/renderer/vulkan/ProgramVk.h
+++ b/src/libANGLE/renderer/vulkan/ProgramVk.h
@@ -19,11 +19,6 @@
 
 namespace rx
 {
-namespace
-{
-constexpr uint32_t kShaderTypeCount = 2;
-}  // anonymous namespace.
-
 class ProgramVk : public ProgramImpl
 {
   public:
@@ -163,8 +158,8 @@
         std::vector<sh::BlockMemberInfo> uniformLayout;
     };
 
-    std::array<DefaultUniformBlock, kShaderTypeCount> mDefaultUniformBlocks;
-    std::array<uint32_t, kShaderTypeCount> mUniformBlocksOffsets;
+    vk::ShaderMap<DefaultUniformBlock> mDefaultUniformBlocks;
+    vk::ShaderMap<uint32_t> mUniformBlocksOffsets;
 
     // This is a special "empty" placeholder buffer for when a shader has no uniforms.
     // It is necessary because we want to keep a compatible pipeline layout in all cases,