Add a field to uniforms to track which element within a register the uniform should be uploaded to.

This is necessary to support HLSL-backed uniform structs.

TRAC #23750

Signed-off-by: Geoff Lang
Signed-off-by: Nicolas Capens
diff --git a/src/libGLESv2/Uniform.cpp b/src/libGLESv2/Uniform.cpp
index 3ee7769..77c6083 100644
--- a/src/libGLESv2/Uniform.cpp
+++ b/src/libGLESv2/Uniform.cpp
@@ -23,13 +23,14 @@
       dirty(true),
       psRegisterIndex(GL_INVALID_INDEX),
       vsRegisterIndex(GL_INVALID_INDEX),
-      registerCount(0)
+      registerCount(0),
+      registerElement(0)
 {
     // We use data storage for default block uniforms to cache values that are sent to D3D during rendering
     // Uniform blocks/buffers are treated separately by the Renderer (ES3 path only)
     if (isInDefaultBlock())
     {
-        size_t bytes = UniformInternalSize(type) * elementCount();
+        size_t bytes = dataSize();
         data = new unsigned char[bytes];
         memset(data, 0, bytes);
         registerCount = VariableRowCount(type) * elementCount();
@@ -66,6 +67,11 @@
     return blockIndex == -1;
 }
 
+size_t Uniform::dataSize() const
+{
+    return UniformInternalSize(type) * elementCount();
+}
+
 UniformBlock::UniformBlock(const std::string &name, unsigned int elementIndex, unsigned int dataSize)
     : name(name),
       elementIndex(elementIndex),