Re-land "Compute packed varyings in ProgramD3D only."

Instead of storing varying information in the shader, use a temporary
set when linking a D3D program. This also means we won't have to
modify information in the Shader object when linking a D3D program.

This completes the refactoring for PackedVaryings.

Re-land with fix for missing init of PackedVarying::vertexOnly.

BUG=angleproject:1123

Change-Id: If110809c3817d88b0370ac575d739d7385b067d9
Reviewed-on: https://chromium-review.googlesource.com/296731
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Tested-by: Jamie Madill <jmadill@chromium.org>
diff --git a/util/shader_utils.h b/util/shader_utils.h
index 6ac7eb2..3fdb747 100644
--- a/util/shader_utils.h
+++ b/util/shader_utils.h
@@ -17,12 +17,18 @@
 #include <EGL/eglext.h>
 
 #include <string>
+#include <vector>
 
 #define SHADER_SOURCE(...) #__VA_ARGS__
 
 GLuint CompileShader(GLenum type, const std::string &source);
 GLuint CompileShaderFromFile(GLenum type, const std::string &sourcePath);
 
+GLuint CompileProgramWithTransformFeedback(
+    const std::string &vsSource,
+    const std::string &fsSource,
+    const std::vector<std::string> &transformFeedbackVaryings,
+    GLenum bufferMode);
 GLuint CompileProgram(const std::string &vsSource, const std::string &fsSource);
 GLuint CompileProgramFromFiles(const std::string &vsPath, const std::string &fsPath);