Commit 0fda9868 by Jamie Madill Committed by Shannon Woods

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
parent af496913
......@@ -52,5 +52,6 @@ void SafeRelease(T& resource)
#define GL_BGRA4_ANGLEX 0x6ABC
#define GL_BGR5_A1_ANGLEX 0x6ABD
#define GL_INT_64_ANGLEX 0x6ABE
#endif // COMMON_ANGLEUTILS_H_
......@@ -1817,6 +1817,41 @@ bool Context::getIntegerv(GLenum pname, GLint *params)
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 @@ bool Context::getQueryParameterInfo(GLenum pname, GLenum *type, unsigned int *nu
*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;
......
......@@ -336,9 +336,10 @@ class Context
Framebuffer *getDrawFramebuffer();
VertexArray *getCurrentVertexArray() const;
bool getBooleanv(GLenum pname, GLboolean *params);
bool getFloatv(GLenum pname, GLfloat *params);
bool getIntegerv(GLenum pname, GLint *params);
bool getBooleanv(GLenum pname, GLboolean *params);
bool getInteger64v(GLenum pname, GLint64 *params);
bool getQueryParameterInfo(GLenum pname, GLenum *type, unsigned int *numParams);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment