From e48f676835d110f907e5cd55d659dae511e4af2d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marek=20Ol=C5=A1=C3=A1k?= Date: Sun, 28 Nov 2021 08:09:15 -0500 Subject: [PATCH] glthread: don't sync for more glGetIntegerv enums for glretrace This makes glretrace faster with glthread. Acked-by: Pierre-Eric Pelloux-Prayer Part-of: --- src/mapi/glapi/gen/ARB_framebuffer_object.xml | 3 ++- src/mapi/glapi/gen/gl_API.xml | 3 ++- src/mesa/main/glthread.h | 4 ++++ src/mesa/main/glthread_bufferobj.c | 3 +++ src/mesa/main/glthread_get.c | 22 +++++++++++++------ 5 files changed, 26 insertions(+), 9 deletions(-) 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;