Add support for new GetAttrib queries for integer and unsigned integer vertex attributes.

TRAC #23391

Signed-off-by: Shannon Woods
Signed-off-by: Geoff Lang
Authored-by: Jamie Madill
diff --git a/src/libGLESv2/libGLESv2.cpp b/src/libGLESv2/libGLESv2.cpp
index c244817..89672bd 100644
--- a/src/libGLESv2/libGLESv2.cpp
+++ b/src/libGLESv2/libGLESv2.cpp
@@ -9619,8 +9619,30 @@
                 return gl::error(GL_INVALID_OPERATION);
             }
 
-            // glGetVertexAttribIiv
-            UNIMPLEMENTED();
+            if (index >= gl::MAX_VERTEX_ATTRIBS)
+            {
+                return gl::error(GL_INVALID_VALUE);
+            }
+
+            const gl::VertexAttribute &attribState = context->getVertexAttribState(index);
+
+            if (!validateGetVertexAttribParameters(pname, context->getClientVersion()))
+            {
+                return;
+            }
+
+            if (pname == GL_CURRENT_VERTEX_ATTRIB)
+            {
+                const gl::VertexAttribCurrentValueData &currentValueData = context->getVertexAttribCurrentValue(index);
+                for (int i = 0; i < 4; ++i)
+                {
+                    params[i] = currentValueData.IntValues[i];
+                }
+            }
+            else
+            {
+                *params = attribState.querySingleParameter<GLint>(pname);
+            }
         }
     }
     catch(std::bad_alloc&)
@@ -9645,8 +9667,30 @@
                 return gl::error(GL_INVALID_OPERATION);
             }
 
-            // glGetVertexAttribIuiv
-            UNIMPLEMENTED();
+            if (index >= gl::MAX_VERTEX_ATTRIBS)
+            {
+                return gl::error(GL_INVALID_VALUE);
+            }
+
+            const gl::VertexAttribute &attribState = context->getVertexAttribState(index);
+
+            if (!validateGetVertexAttribParameters(pname, context->getClientVersion()))
+            {
+                return;
+            }
+
+            if (pname == GL_CURRENT_VERTEX_ATTRIB)
+            {
+                const gl::VertexAttribCurrentValueData &currentValueData = context->getVertexAttribCurrentValue(index);
+                for (int i = 0; i < 4; ++i)
+                {
+                    params[i] = currentValueData.UnsignedIntValues[i];
+                }
+            }
+            else
+            {
+                *params = attribState.querySingleParameter<GLuint>(pname);
+            }
         }
     }
     catch(std::bad_alloc&)