Added Context::getInteger64v for 64-bit integer state queries.

TRAC #23082

Signed-off-by: Geoff Lang
Signed-off-by: Shannon Woods
Authored-by: Jamie Madill
diff --git a/src/libGLESv2/Context.cpp b/src/libGLESv2/Context.cpp
index 03470e9..99f5b68 100644
--- a/src/libGLESv2/Context.cpp
+++ b/src/libGLESv2/Context.cpp
@@ -1817,6 +1817,41 @@
     return true;
 }
 
+bool Context::getInteger64v(GLenum pname, GLint64 *params)
+{
+    switch (pname)
+    {
+      case GL_MAX_ELEMENT_INDEX:
+        *params = static_cast<GLint64>(std::numeric_limits<unsigned int>::max());
+        break;
+      case GL_MAX_UNIFORM_BLOCK_SIZE:
+        *params = static_cast<GLint64>(mRenderer->getMaxUniformBufferSize());
+        break;
+      case GL_MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS:
+        {
+            GLint64 uniformBufferComponents = static_cast<GLint64>(mRenderer->getMaxVertexShaderUniformBuffers()) * static_cast<GLint64>(mRenderer->getMaxUniformBufferSize() / 4);
+            GLint64 defaultBufferComponents = static_cast<GLint64>(mRenderer->getMaxVertexUniformVectors() * 4);
+            *params = uniformBufferComponents + defaultBufferComponents;
+        }
+        break;
+      case GL_MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS:
+        {
+            GLint64 uniformBufferComponents = static_cast<GLint64>(mRenderer->getMaxFragmentShaderUniformBuffers()) * static_cast<GLint64>(mRenderer->getMaxUniformBufferSize() / 4);
+            GLint64 defaultBufferComponents = static_cast<GLint64>(mRenderer->getMaxVertexUniformVectors() * 4);
+            *params = uniformBufferComponents + defaultBufferComponents;
+        }
+        break;
+      case GL_MAX_SERVER_WAIT_TIMEOUT:
+        // Can return an arbitrary value (nanoseconds) as we do not perform any blocking, in this case 100 seconds.
+        *params = 100ll * 1000ll * 1000ll;
+        break;
+      default:
+        return false;
+    }
+
+    return true;
+}
+
 bool Context::getQueryParameterInfo(GLenum pname, GLenum *type, unsigned int *numParams)
 {
     if (pname >= GL_DRAW_BUFFER0_EXT && pname <= GL_DRAW_BUFFER15_EXT)
@@ -2031,6 +2066,17 @@
             *numParams = 1;
         }
         return true;
+
+      case GL_MAX_ELEMENT_INDEX:
+      case GL_MAX_UNIFORM_BLOCK_SIZE:
+      case GL_MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS:
+      case GL_MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS:
+      case GL_MAX_SERVER_WAIT_TIMEOUT:
+        {
+            *type = GL_INT_64_ANGLEX;
+            *numParams = 1;
+        }
+        return true;
     }
 
     return false;