From 91a3a38d5c0cfa89d95b6c7e16deabd212f90524 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marek=20Ol=C5=A1=C3=A1k?= Date: Sun, 24 Jul 2022 16:09:00 -0400 Subject: [PATCH] glthread: don't sync on IsEnabled(GL_DEPTH_TEST) by tracking it in glthread Discovered with viewperf. Reviewed-by: Pierre-Eric Pelloux-Prayer Part-of: --- src/mesa/main/glthread.h | 2 ++ src/mesa/main/glthread_marshal.h | 14 ++++++++++++++ 2 files changed, 16 insertions(+) diff --git a/src/mesa/main/glthread.h b/src/mesa/main/glthread.h index ae75def0216..ee15d5f4865 100644 --- a/src/mesa/main/glthread.h +++ b/src/mesa/main/glthread.h @@ -130,6 +130,7 @@ struct glthread_attrib_node { int ActiveTexture; GLenum MatrixMode; bool CullFace; + bool DepthTest; }; typedef enum { @@ -231,6 +232,7 @@ struct glthread_state int MatrixStackDepth[M_NUM_MATRIX_STACKS]; /** Enable states. */ + bool DepthTest; bool CullFace; GLuint CurrentDrawFramebuffer; diff --git a/src/mesa/main/glthread_marshal.h b/src/mesa/main/glthread_marshal.h index 95d4b20e4d1..80022c1cea6 100644 --- a/src/mesa/main/glthread_marshal.h +++ b/src/mesa/main/glthread_marshal.h @@ -452,6 +452,9 @@ _mesa_glthread_Enable(struct gl_context *ctx, GLenum cap) case GL_DEBUG_OUTPUT_SYNCHRONOUS_ARB: _mesa_glthread_destroy(ctx, "Enable(DEBUG_OUTPUT_SYNCHRONOUS)"); break; + case GL_DEPTH_TEST: + ctx->GLThread.DepthTest = true; + break; case GL_CULL_FACE: ctx->GLThread.CullFace = true; break; @@ -472,6 +475,9 @@ _mesa_glthread_Disable(struct gl_context *ctx, GLenum cap) case GL_CULL_FACE: ctx->GLThread.CullFace = false; break; + case GL_DEPTH_TEST: + ctx->GLThread.DepthTest = false; + break; } } @@ -481,6 +487,8 @@ _mesa_glthread_IsEnabled(struct gl_context *ctx, GLenum cap) switch (cap) { case GL_CULL_FACE: return ctx->GLThread.CullFace; + case GL_DEPTH_TEST: + return ctx->GLThread.DepthTest; case GL_VERTEX_ARRAY: return !!(ctx->GLThread.CurrentVAO->UserEnabled & VERT_BIT_POS); case GL_NORMAL_ARRAY: @@ -509,6 +517,9 @@ _mesa_glthread_PushAttrib(struct gl_context *ctx, GLbitfield mask) if (mask & (GL_POLYGON_BIT | GL_ENABLE_BIT)) attr->CullFace = ctx->GLThread.CullFace; + if (mask & (GL_DEPTH_BUFFER_BIT | GL_ENABLE_BIT)) + attr->DepthTest = ctx->GLThread.DepthTest; + if (mask & GL_TEXTURE_BIT) attr->ActiveTexture = ctx->GLThread.ActiveTexture; @@ -529,6 +540,9 @@ _mesa_glthread_PopAttrib(struct gl_context *ctx) if (mask & (GL_POLYGON_BIT | GL_ENABLE_BIT)) ctx->GLThread.CullFace = attr->CullFace; + if (mask & (GL_DEPTH_BUFFER_BIT | GL_ENABLE_BIT)) + ctx->GLThread.DepthTest = attr->DepthTest; + if (mask & GL_TEXTURE_BIT) ctx->GLThread.ActiveTexture = attr->ActiveTexture;