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) ...@@ -52,5 +52,6 @@ void SafeRelease(T& resource)
#define GL_BGRA4_ANGLEX 0x6ABC #define GL_BGRA4_ANGLEX 0x6ABC
#define GL_BGR5_A1_ANGLEX 0x6ABD #define GL_BGR5_A1_ANGLEX 0x6ABD
#define GL_INT_64_ANGLEX 0x6ABE
#endif // COMMON_ANGLEUTILS_H_ #endif // COMMON_ANGLEUTILS_H_
...@@ -1817,6 +1817,41 @@ bool Context::getIntegerv(GLenum pname, GLint *params) ...@@ -1817,6 +1817,41 @@ bool Context::getIntegerv(GLenum pname, GLint *params)
return true; 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) bool Context::getQueryParameterInfo(GLenum pname, GLenum *type, unsigned int *numParams)
{ {
if (pname >= GL_DRAW_BUFFER0_EXT && pname <= GL_DRAW_BUFFER15_EXT) 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 ...@@ -2031,6 +2066,17 @@ bool Context::getQueryParameterInfo(GLenum pname, GLenum *type, unsigned int *nu
*numParams = 1; *numParams = 1;
} }
return true; 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; return false;
......
...@@ -336,9 +336,10 @@ class Context ...@@ -336,9 +336,10 @@ class Context
Framebuffer *getDrawFramebuffer(); Framebuffer *getDrawFramebuffer();
VertexArray *getCurrentVertexArray() const; VertexArray *getCurrentVertexArray() const;
bool getBooleanv(GLenum pname, GLboolean *params);
bool getFloatv(GLenum pname, GLfloat *params); bool getFloatv(GLenum pname, GLfloat *params);
bool getIntegerv(GLenum pname, GLint *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); 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