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;