Vulkan: Uber-shader support

For each internal shader, there is now possibly a companion .json file
that defines shader variations.  The variations consist of a set of
flags and a set of enums.  Each enum defines a variation that takes one
of a few values.  Flags are shorthands for 2-value enums.

In the shader code, #if can be used to change the shader based on
variations derived from flags and enums.  On the C++ side, those
variations are combined into an index and the appropriate shader is
retrieved from a table.

Bug: angleproject:2958
Change-Id: Ic4fc7061adb20c047c26624305285e3005092aab
Reviewed-on: https://chromium-review.googlesource.com/c/1351117
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
diff --git a/src/libANGLE/renderer/vulkan/RendererVk.cpp b/src/libANGLE/renderer/vulkan/RendererVk.cpp
index 59d376d..908af8a 100644
--- a/src/libANGLE/renderer/vulkan/RendererVk.cpp
+++ b/src/libANGLE/renderer/vulkan/RendererVk.cpp
@@ -1259,12 +1259,10 @@
     if (!mFullScreenClearShaderProgram.valid())
     {
         vk::RefCounted<vk::ShaderAndSerial> *fullScreenQuad = nullptr;
-        ANGLE_TRY(mShaderLibrary.getShader(context, vk::InternalShaderID::FullScreenQuad_vert,
-                                           &fullScreenQuad));
+        ANGLE_TRY(mShaderLibrary.getFullScreenQuad_vert(context, 0, &fullScreenQuad));
 
         vk::RefCounted<vk::ShaderAndSerial> *pushConstantColor = nullptr;
-        ANGLE_TRY(mShaderLibrary.getShader(context, vk::InternalShaderID::PushConstantColor_frag,
-                                           &pushConstantColor));
+        ANGLE_TRY(mShaderLibrary.getPushConstantColor_frag(context, 0, &pushConstantColor));
 
         mFullScreenClearShaderProgram.setShader(gl::ShaderType::Vertex, fullScreenQuad);
         mFullScreenClearShaderProgram.setShader(gl::ShaderType::Fragment, pushConstantColor);