summaryrefslogtreecommitdiff
path: root/src/mesa/main/glthread_get.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/mesa/main/glthread_get.c')
-rw-r--r--src/mesa/main/glthread_get.c37
1 files changed, 26 insertions, 11 deletions
diff --git a/src/mesa/main/glthread_get.c b/src/mesa/main/glthread_get.c
index b0e17d306b3..51beaedc21a 100644
--- a/src/mesa/main/glthread_get.c
+++ b/src/mesa/main/glthread_get.c
@@ -26,8 +26,7 @@
uint32_t
_mesa_unmarshal_GetIntegerv(struct gl_context *ctx,
- const struct marshal_cmd_GetIntegerv *cmd,
- const uint64_t *last)
+ const struct marshal_cmd_GetIntegerv *restrict cmd)
{
unreachable("never executed");
return 0;
@@ -38,18 +37,15 @@ _mesa_marshal_GetIntegerv(GLenum pname, GLint *p)
{
GET_CURRENT_CONTEXT(ctx);
+ /* This will generate GL_INVALID_OPERATION, as it should. */
+ if (ctx->GLThread.inside_begin_end)
+ goto sync;
+
/* TODO: Use get_hash_params.py to return values for items containing:
* - CONST(
* - 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;
@@ -61,14 +57,32 @@ _mesa_marshal_GetIntegerv(GLenum pname, GLint *p)
*p = ctx->GLThread.AttribStackDepth;
return;
case GL_CLIENT_ACTIVE_TEXTURE:
- *p = ctx->GLThread.ClientActiveTexture;
+ *p = GL_TEXTURE0 + ctx->GLThread.ClientActiveTexture;
return;
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:
+ *p = ctx->GLThread.CurrentDrawFramebuffer;
+ return;
+ case GL_READ_FRAMEBUFFER_BINDING:
+ *p = ctx->GLThread.CurrentReadFramebuffer;
+ 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;
@@ -116,8 +130,9 @@ _mesa_marshal_GetIntegerv(GLenum pname, GLint *p)
return;
}
+sync:
_mesa_glthread_finish_before(ctx, "GetIntegerv");
- CALL_GetIntegerv(ctx->CurrentServerDispatch, (pname, p));
+ CALL_GetIntegerv(ctx->Dispatch.Current, (pname, p));
}
/* TODO: Implement glGetBooleanv, glGetFloatv, etc. if needed */