Added uniform buffer queries
Implemented binding/size/start related queries for uniform buffers.
Change-Id: I9d36c92201a7f0df86b1d882ca6d9f04b372bad6
Reviewed-on: https://swiftshader-review.googlesource.com/4750
Tested-by: Alexis Hétu <sugoi@google.com>
Reviewed-by: Nicolas Capens <capn@google.com>
diff --git a/src/OpenGL/libGLESv2/Context.cpp b/src/OpenGL/libGLESv2/Context.cpp
index 237a8a6..8040da8 100644
--- a/src/OpenGL/libGLESv2/Context.cpp
+++ b/src/OpenGL/libGLESv2/Context.cpp
@@ -2444,6 +2444,31 @@
return true;
}
+template bool Context::getUniformBufferiv<GLint>(GLuint index, GLenum pname, GLint *param) const;
+template bool Context::getUniformBufferiv<GLint64>(GLuint index, GLenum pname, GLint64 *param) const;
+
+template<typename T> bool Context::getUniformBufferiv(GLuint index, GLenum pname, T *param) const
+{
+ const UniformBufferBinding& uniformBuffer = mState.uniformBuffers[index];
+
+ switch(pname)
+ {
+ case GL_UNIFORM_BUFFER_BINDING: // name, initially 0
+ *param = uniformBuffer.get().name();
+ break;
+ case GL_UNIFORM_BUFFER_SIZE: // indexed[n] 64-bit integer, initially 0
+ *param = uniformBuffer.getSize();
+ break;
+ case GL_UNIFORM_BUFFER_START: // indexed[n] 64-bit integer, initially 0
+ *param = uniformBuffer.getOffset();
+ break;
+ default:
+ return false;
+ }
+
+ return true;
+}
+
bool Context::getQueryParameterInfo(GLenum pname, GLenum *type, unsigned int *numParams) const
{
// Please note: the query type returned for DEPTH_CLEAR_VALUE in this implementation
diff --git a/src/OpenGL/libGLESv2/Context.h b/src/OpenGL/libGLESv2/Context.h
index 73f7358..cbd6a80 100644
--- a/src/OpenGL/libGLESv2/Context.h
+++ b/src/OpenGL/libGLESv2/Context.h
@@ -628,7 +628,8 @@
bool getFloatv(GLenum pname, GLfloat *params) const;
template<typename T> bool getIntegerv(GLenum pname, T *params) const;
bool getBooleanv(GLenum pname, GLboolean *params) const;
- template<typename T> bool getTransformFeedbackiv(GLuint xfb, GLenum pname, T *param) const;
+ template<typename T> bool getTransformFeedbackiv(GLuint index, GLenum pname, T *param) const;
+ template<typename T> bool getUniformBufferiv(GLuint index, GLenum pname, T *param) const;
void samplerParameteri(GLuint sampler, GLenum pname, GLint param);
void samplerParameterf(GLuint sampler, GLenum pname, GLfloat param);
GLint getSamplerParameteri(GLuint sampler, GLenum pname);
diff --git a/src/OpenGL/libGLESv2/libGLESv3.cpp b/src/OpenGL/libGLESv2/libGLESv3.cpp
index 95f0d77..d9d9742 100644
--- a/src/OpenGL/libGLESv2/libGLESv3.cpp
+++ b/src/OpenGL/libGLESv2/libGLESv3.cpp
@@ -1827,6 +1827,7 @@
if(context)
{
if(!context->getTransformFeedbackiv(index, target, data) &&
+ !context->getUniformBufferiv(index, target, data) &&
!context->getIntegerv(target, data))
{
GLenum nativeType;
@@ -3235,7 +3236,8 @@
if(context)
{
if(!context->getTransformFeedbackiv(index, target, data) &&
- !context->getIntegerv(target, data))
+ !context->getUniformBufferiv(index, target, data) &&
+ !context->getIntegerv(target, data))
{
GLenum nativeType;
unsigned int numParams = 0;