diff --git a/src/mapi/glapi/gen/ARB_framebuffer_object.xml b/src/mapi/glapi/gen/ARB_framebuffer_object.xml
index 44f274691c1..11a09d93e48 100644
--- a/src/mapi/glapi/gen/ARB_framebuffer_object.xml
+++ b/src/mapi/glapi/gen/ARB_framebuffer_object.xml
@@ -202,7 +202,8 @@
-
+
diff --git a/src/mapi/glapi/gen/gl_API.xml b/src/mapi/glapi/gen/gl_API.xml
index 4a92a208a9a..cab41b8cbdf 100644
--- a/src/mapi/glapi/gen/gl_API.xml
+++ b/src/mapi/glapi/gen/gl_API.xml
@@ -5563,7 +5563,8 @@
-
+
diff --git a/src/mesa/main/glthread.h b/src/mesa/main/glthread.h
index cf10bf9be33..d141a18a14e 100644
--- a/src/mesa/main/glthread.h
+++ b/src/mesa/main/glthread.h
@@ -207,6 +207,7 @@ struct glthread_state
GLuint CurrentDrawIndirectBufferName;
GLuint CurrentPixelPackBufferName;
GLuint CurrentPixelUnpackBufferName;
+ GLuint CurrentQueryBufferName;
/**
* The batch index of the last occurence of glLinkProgram or
@@ -230,6 +231,9 @@ struct glthread_state
/** Enable states. */
bool CullFace;
+
+ GLuint CurrentDrawFramebuffer;
+ GLuint CurrentProgram;
};
void _mesa_glthread_init(struct gl_context *ctx);
diff --git a/src/mesa/main/glthread_bufferobj.c b/src/mesa/main/glthread_bufferobj.c
index 88b0b72ce02..bf3d0926a4c 100644
--- a/src/mesa/main/glthread_bufferobj.c
+++ b/src/mesa/main/glthread_bufferobj.c
@@ -195,6 +195,9 @@ _mesa_glthread_BindBuffer(struct gl_context *ctx, GLenum target, GLuint buffer)
case GL_PIXEL_UNPACK_BUFFER:
glthread->CurrentPixelUnpackBufferName = buffer;
break;
+ case GL_QUERY_BUFFER:
+ glthread->CurrentQueryBufferName = buffer;
+ break;
}
}
diff --git a/src/mesa/main/glthread_get.c b/src/mesa/main/glthread_get.c
index b0e17d306b3..ed56d6a8970 100644
--- a/src/mesa/main/glthread_get.c
+++ b/src/mesa/main/glthread_get.c
@@ -43,13 +43,6 @@ _mesa_marshal_GetIntegerv(GLenum pname, GLint *p)
* - CONTEXT_[A-Z]*(Const
*/
- if (ctx->API != API_OPENGL_COMPAT) {
- /* glthread only tracks these states for the compatibility profile. */
- _mesa_glthread_finish_before(ctx, "GetIntegerv");
- CALL_GetIntegerv(ctx->CurrentServerDispatch, (pname, p));
- return;
- }
-
switch (pname) {
case GL_ACTIVE_TEXTURE:
*p = GL_TEXTURE0 + ctx->GLThread.ActiveTexture;
@@ -66,9 +59,24 @@ _mesa_marshal_GetIntegerv(GLenum pname, GLint *p)
case GL_CLIENT_ATTRIB_STACK_DEPTH:
*p = ctx->GLThread.ClientAttribStackTop;
return;
+ case GL_CURRENT_PROGRAM:
+ *p = ctx->GLThread.CurrentProgram;
+ return;
case GL_DRAW_INDIRECT_BUFFER_BINDING:
*p = ctx->GLThread.CurrentDrawIndirectBufferName;
return;
+ case GL_DRAW_FRAMEBUFFER_BINDING: /* == GL_FRAMEBUFFER_BINDING */
+ *p = ctx->GLThread.CurrentDrawFramebuffer;
+ return;
+ case GL_PIXEL_PACK_BUFFER_BINDING:
+ *p = ctx->GLThread.CurrentPixelPackBufferName;
+ return;
+ case GL_PIXEL_UNPACK_BUFFER_BINDING:
+ *p = ctx->GLThread.CurrentPixelUnpackBufferName;
+ return;
+ case GL_QUERY_BUFFER_BINDING:
+ *p = ctx->GLThread.CurrentQueryBufferName;
+ return;
case GL_MATRIX_MODE:
*p = ctx->GLThread.MatrixMode;