Refactor sh::Uniform and sh::ShaderVariable into a shader variable base type with different child types.

This change gives us better memory usage (many fields are unnecessary in different types) with better static
typing and clear type abstraction for specific methods that might take Attributes or Varyings, etc.

TRAC #23754

Signed-off-by: Nicolas Capens
Signed-off-by: Shannon Woods

diff --git a/src/compiler/BlockLayoutEncoder.h b/src/compiler/BlockLayoutEncoder.h
index 57a8d81..3ff1a2d 100644
--- a/src/compiler/BlockLayoutEncoder.h
+++ b/src/compiler/BlockLayoutEncoder.h
@@ -15,7 +15,8 @@
 namespace sh
 {
 
-struct Uniform;
+struct ShaderVariable;
+struct InterfaceBlockField;
 struct BlockMemberInfo;
 
 class BlockLayoutEncoder
@@ -23,8 +24,8 @@
   public:
     BlockLayoutEncoder(std::vector<BlockMemberInfo> *blockInfoOut);
 
-    void encodeFields(const std::vector<Uniform> &fields);
-    void encodeType(const Uniform &uniform);
+    void encodeInterfaceBlockFields(const std::vector<InterfaceBlockField> &fields);
+    void encodeInterfaceBlockField(const InterfaceBlockField &field);
     void encodeType(GLenum type, unsigned int arraySize, bool isRowMajorMatrix);
     size_t getBlockSize() { return mCurrentOffset * ComponentSize; }