diff options
Diffstat (limited to 'src/mesa/main/glthread_get.c')
-rw-r--r-- | src/mesa/main/glthread_get.c | 37 |
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 */ |