Mesa (main): glthread: don't sync for more glGetIntegerv enums for glretrace

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Mon Nov 29 14:55:08 UTC 2021


Module: Mesa
Branch: main
Commit: e48f676835d110f907e5cd55d659dae511e4af2d
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=e48f676835d110f907e5cd55d659dae511e4af2d

Author: Marek Olšák <marek.olsak at amd.com>
Date:   Sun Nov 28 08:09:15 2021 -0500

glthread: don't sync for more glGetIntegerv enums for glretrace

This makes glretrace faster with glthread.

Acked-by: Pierre-Eric Pelloux-Prayer <pierre-eric.pelloux-prayer at amd.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/13970>

---

 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 @@
 	<glx vendorpriv="1425"/>
     </function>
 
-    <function name="BindFramebuffer" es2="2.0">
+    <function name="BindFramebuffer" es2="2.0"
+              marshal_call_after="if (target == GL_FRAMEBUFFER || target == GL_DRAW_FRAMEBUFFER) ctx->GLThread.CurrentDrawFramebuffer = framebuffer;">
         <param name="target" type="GLenum"/>
         <param name="framebuffer" type="GLuint"/>
         <glx rop="236"/>
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 @@
         <glx ignore="true"/>
     </function>
 
-    <function name="UseProgram" es2="2.0" no_error="true">
+    <function name="UseProgram" es2="2.0" no_error="true"
+              marshal_call_after="ctx->GLThread.CurrentProgram = program;">
         <param name="program" type="GLuint"/>
         <glx ignore="true"/>
     </function>
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;



More information about the mesa-commit mailing list