diff options
author | Marek Olšák <[email protected]> | 2020-03-08 22:50:16 -0400 |
---|---|---|
committer | Marek Olšák <[email protected]> | 2020-03-20 23:01:13 -0400 |
commit | c02a1347e5c68d7f1c68ca6b90d2736e35b1fde5 (patch) | |
tree | 624425458b2fc9cca70dcf6aad94c24c56570727 /src | |
parent | 0b1dd1859134e71b25ad1124535df96d435e9766 (diff) |
glthread: ignore vertex arrays with user pointers if they're disabled
Reviewed-by: Timothy Arceri <[email protected]>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/4124>
Diffstat (limited to 'src')
-rw-r--r-- | src/mapi/glapi/gen/ARB_vertex_attrib_64bit.xml | 2 | ||||
-rw-r--r-- | src/mapi/glapi/gen/EXT_direct_state_access.xml | 2 | ||||
-rw-r--r-- | src/mapi/glapi/gen/GL3x.xml | 2 | ||||
-rw-r--r-- | src/mapi/glapi/gen/es_EXT.xml | 2 | ||||
-rw-r--r-- | src/mapi/glapi/gen/gl_API.xml | 30 | ||||
-rw-r--r-- | src/mesa/main/glthread.h | 5 | ||||
-rw-r--r-- | src/mesa/main/glthread_marshal.h | 13 | ||||
-rw-r--r-- | src/mesa/main/glthread_varray.c | 9 |
8 files changed, 37 insertions, 28 deletions
diff --git a/src/mapi/glapi/gen/ARB_vertex_attrib_64bit.xml b/src/mapi/glapi/gen/ARB_vertex_attrib_64bit.xml index 45c30f48378..fcbb1673971 100644 --- a/src/mapi/glapi/gen/ARB_vertex_attrib_64bit.xml +++ b/src/mapi/glapi/gen/ARB_vertex_attrib_64bit.xml @@ -52,7 +52,7 @@ </function> <function name="VertexAttribLPointer" no_error="true" marshal="async" - marshal_call_after="if (COMPAT) _mesa_glthread_AttribPointer(ctx);"> + marshal_call_after="if (COMPAT) _mesa_glthread_AttribPointer(ctx, VERT_ATTRIB_GENERIC(index));"> <param name="index" type="GLuint"/> <param name="size" type="GLint"/> <param name="type" type="GLenum"/> diff --git a/src/mapi/glapi/gen/EXT_direct_state_access.xml b/src/mapi/glapi/gen/EXT_direct_state_access.xml index 81310e343f4..5c52573a172 100644 --- a/src/mapi/glapi/gen/EXT_direct_state_access.xml +++ b/src/mapi/glapi/gen/EXT_direct_state_access.xml @@ -658,7 +658,7 @@ </function> <function name="MultiTexCoordPointerEXT" marshal="async" - marshal_call_after="if (COMPAT) _mesa_glthread_AttribPointer(ctx);"> + marshal_call_after="if (COMPAT) _mesa_glthread_AttribPointer(ctx, VERT_ATTRIB_TEX(texunit - GL_TEXTURE0));"> <param name="texunit" type="GLenum" /> <param name="size" type="GLint" /> <param name="type" type="GLenum" /> diff --git a/src/mapi/glapi/gen/GL3x.xml b/src/mapi/glapi/gen/GL3x.xml index 943e5289a93..19875bc9505 100644 --- a/src/mapi/glapi/gen/GL3x.xml +++ b/src/mapi/glapi/gen/GL3x.xml @@ -258,7 +258,7 @@ <function name="VertexAttribIPointer" es2="3.0" marshal="async" no_error="true" - marshal_call_after="if (COMPAT) _mesa_glthread_AttribPointer(ctx);"> + marshal_call_after="if (COMPAT) _mesa_glthread_AttribPointer(ctx, VERT_ATTRIB_GENERIC(index));"> <param name="index" type="GLuint"/> <param name="size" type="GLint"/> <param name="type" type="GLenum"/> diff --git a/src/mapi/glapi/gen/es_EXT.xml b/src/mapi/glapi/gen/es_EXT.xml index 107ca9a2cb0..a5653313605 100644 --- a/src/mapi/glapi/gen/es_EXT.xml +++ b/src/mapi/glapi/gen/es_EXT.xml @@ -320,7 +320,7 @@ <function name="PointSizePointerOES" es1="1.0" desktop="false" no_error="true" marshal="async" - marshal_call_after="if (COMPAT) _mesa_glthread_AttribPointer(ctx);"> + marshal_call_after="if (COMPAT) _mesa_glthread_AttribPointer(ctx, VERT_ATTRIB_POINT_SIZE);"> <param name="type" type="GLenum"/> <param name="stride" type="GLsizei"/> <param name="pointer" type="const GLvoid *"/> diff --git a/src/mapi/glapi/gen/gl_API.xml b/src/mapi/glapi/gen/gl_API.xml index bd5e0f11110..8c64eed6dae 100644 --- a/src/mapi/glapi/gen/gl_API.xml +++ b/src/mapi/glapi/gen/gl_API.xml @@ -3166,7 +3166,7 @@ <function name="ColorPointer" es1="1.0" deprecated="3.1" marshal="async" no_error="true" - marshal_call_after="if (COMPAT) _mesa_glthread_AttribPointer(ctx);"> + marshal_call_after="if (COMPAT) _mesa_glthread_AttribPointer(ctx, VERT_ATTRIB_COLOR0);"> <param name="size" type="GLint"/> <param name="type" type="GLenum"/> <param name="stride" type="GLsizei"/> @@ -3199,7 +3199,7 @@ <function name="EdgeFlagPointer" deprecated="3.1" marshal="async" no_error="true" - marshal_call_after="if (COMPAT) _mesa_glthread_AttribPointer(ctx);"> + marshal_call_after="if (COMPAT) _mesa_glthread_AttribPointer(ctx, VERT_ATTRIB_EDGEFLAG);"> <param name="stride" type="GLsizei"/> <param name="pointer" type="const GLvoid *"/> <glx handcode="true"/> @@ -3219,7 +3219,7 @@ <function name="IndexPointer" deprecated="3.1" marshal="async" no_error="true" - marshal_call_after="if (COMPAT) _mesa_glthread_AttribPointer(ctx);"> + marshal_call_after="if (COMPAT) _mesa_glthread_AttribPointer(ctx, VERT_ATTRIB_COLOR_INDEX);"> <param name="type" type="GLenum"/> <param name="stride" type="GLsizei"/> <param name="pointer" type="const GLvoid *"/> @@ -3235,7 +3235,7 @@ <function name="NormalPointer" es1="1.0" deprecated="3.1" marshal="async" no_error="true" - marshal_call_after="if (COMPAT) _mesa_glthread_AttribPointer(ctx);"> + marshal_call_after="if (COMPAT) _mesa_glthread_AttribPointer(ctx, VERT_ATTRIB_NORMAL);"> <param name="type" type="GLenum"/> <param name="stride" type="GLsizei"/> <param name="pointer" type="const GLvoid *"/> @@ -3244,7 +3244,7 @@ <function name="TexCoordPointer" es1="1.0" deprecated="3.1" marshal="async" no_error="true" - marshal_call_after="if (COMPAT) _mesa_glthread_AttribPointer(ctx);"> + marshal_call_after="if (COMPAT) _mesa_glthread_AttribPointer(ctx, VERT_ATTRIB_TEX(ctx->GLThread.ClientActiveTexture));"> <param name="size" type="GLint"/> <param name="type" type="GLenum"/> <param name="stride" type="GLsizei"/> @@ -3254,7 +3254,7 @@ <function name="VertexPointer" es1="1.0" deprecated="3.1" marshal="async" no_error="true" - marshal_call_after="if (COMPAT) _mesa_glthread_AttribPointer(ctx);"> + marshal_call_after="if (COMPAT) _mesa_glthread_AttribPointer(ctx, VERT_ATTRIB_POS);"> <param name="size" type="GLint"/> <param name="type" type="GLenum"/> <param name="stride" type="GLsizei"/> @@ -4751,7 +4751,7 @@ <function name="FogCoordPointer" deprecated="3.1" marshal="async" no_error="true" - marshal_call_after="if (COMPAT) _mesa_glthread_AttribPointer(ctx);"> + marshal_call_after="if (COMPAT) _mesa_glthread_AttribPointer(ctx, VERT_ATTRIB_FOG);"> <param name="type" type="GLenum"/> <param name="stride" type="GLsizei"/> <param name="pointer" type="const GLvoid *"/> @@ -4892,7 +4892,7 @@ <function name="SecondaryColorPointer" deprecated="3.1" marshal="async" no_error="true" - marshal_call_after="if (COMPAT) _mesa_glthread_AttribPointer(ctx);"> + marshal_call_after="if (COMPAT) _mesa_glthread_AttribPointer(ctx, VERT_ATTRIB_COLOR1);"> <param name="size" type="GLint"/> <param name="type" type="GLenum"/> <param name="stride" type="GLsizei"/> @@ -5853,7 +5853,7 @@ <function name="VertexAttribPointer" es2="2.0" marshal="async" no_error="true" - marshal_call_after="if (COMPAT) _mesa_glthread_AttribPointer(ctx);"> + marshal_call_after="if (COMPAT) _mesa_glthread_AttribPointer(ctx, VERT_ATTRIB_GENERIC(index));"> <param name="index" type="GLuint"/> <param name="size" type="GLint"/> <param name="type" type="GLenum"/> @@ -9251,7 +9251,7 @@ </function> <function name="ColorPointerEXT" deprecated="3.1" marshal="async" - marshal_call_after="if (COMPAT) _mesa_glthread_AttribPointer(ctx);"> + marshal_call_after="if (COMPAT) _mesa_glthread_AttribPointer(ctx, VERT_ATTRIB_COLOR0);"> <param name="size" type="GLint"/> <param name="type" type="GLenum"/> <param name="stride" type="GLsizei"/> @@ -9267,7 +9267,7 @@ </function> <function name="EdgeFlagPointerEXT" deprecated="3.1" marshal="async" - marshal_call_after="if (COMPAT) _mesa_glthread_AttribPointer(ctx);"> + marshal_call_after="if (COMPAT) _mesa_glthread_AttribPointer(ctx, VERT_ATTRIB_EDGEFLAG);"> <param name="stride" type="GLsizei"/> <param name="count" type="GLsizei"/> <param name="pointer" type="const GLboolean *"/> @@ -9280,7 +9280,7 @@ </function> <function name="IndexPointerEXT" deprecated="3.1" marshal="async" - marshal_call_after="if (COMPAT) _mesa_glthread_AttribPointer(ctx);"> + marshal_call_after="if (COMPAT) _mesa_glthread_AttribPointer(ctx, VERT_ATTRIB_COLOR_INDEX);"> <param name="type" type="GLenum"/> <param name="stride" type="GLsizei"/> <param name="count" type="GLsizei"/> @@ -9289,7 +9289,7 @@ </function> <function name="NormalPointerEXT" deprecated="3.1" marshal="async" - marshal_call_after="if (COMPAT) _mesa_glthread_AttribPointer(ctx);"> + marshal_call_after="if (COMPAT) _mesa_glthread_AttribPointer(ctx, VERT_ATTRIB_NORMAL);"> <param name="type" type="GLenum"/> <param name="stride" type="GLsizei"/> <param name="count" type="GLsizei"/> @@ -9298,7 +9298,7 @@ </function> <function name="TexCoordPointerEXT" deprecated="3.1" marshal="async" - marshal_call_after="if (COMPAT) _mesa_glthread_AttribPointer(ctx);"> + marshal_call_after="if (COMPAT) _mesa_glthread_AttribPointer(ctx, VERT_ATTRIB_TEX(ctx->GLThread.ClientActiveTexture));"> <param name="size" type="GLint"/> <param name="type" type="GLenum"/> <param name="stride" type="GLsizei"/> @@ -9308,7 +9308,7 @@ </function> <function name="VertexPointerEXT" deprecated="3.1" marshal="async" - marshal_call_after="if (COMPAT) _mesa_glthread_AttribPointer(ctx);"> + marshal_call_after="if (COMPAT) _mesa_glthread_AttribPointer(ctx, VERT_ATTRIB_POS);"> <param name="size" type="GLint"/> <param name="type" type="GLenum"/> <param name="stride" type="GLsizei"/> diff --git a/src/mesa/main/glthread.h b/src/mesa/main/glthread.h index 2dff33d9deb..9c1742eb2b4 100644 --- a/src/mesa/main/glthread.h +++ b/src/mesa/main/glthread.h @@ -54,9 +54,9 @@ struct _mesa_HashTable; struct glthread_vao { GLuint Name; - bool HasUserPointer; GLuint CurrentElementBufferName; GLbitfield Enabled; + GLbitfield UserPointerMask; }; /** A single batch of commands queued up for execution. */ @@ -133,6 +133,7 @@ void _mesa_glthread_GenVertexArrays(struct gl_context *ctx, GLsizei n, GLuint *arrays); void _mesa_glthread_ClientState(struct gl_context *ctx, GLuint *vaobj, gl_vert_attrib attrib, bool enable); -void _mesa_glthread_AttribPointer(struct gl_context *ctx); +void _mesa_glthread_AttribPointer(struct gl_context *ctx, + gl_vert_attrib attrib); #endif /* _GLTHREAD_H*/ diff --git a/src/mesa/main/glthread_marshal.h b/src/mesa/main/glthread_marshal.h index 116d79f4366..8fc65d29862 100644 --- a/src/mesa/main/glthread_marshal.h +++ b/src/mesa/main/glthread_marshal.h @@ -84,25 +84,29 @@ _mesa_glthread_has_non_vbo_vertices_or_indices(const struct gl_context *ctx) struct glthread_vao *vao = glthread->CurrentVAO; return ctx->API != API_OPENGL_CORE && - (vao->CurrentElementBufferName == 0 || vao->HasUserPointer); + (vao->CurrentElementBufferName == 0 || + (vao->UserPointerMask & vao->Enabled)); } static inline bool _mesa_glthread_has_non_vbo_vertices(const struct gl_context *ctx) { const struct glthread_state *glthread = &ctx->GLThread; + const struct glthread_vao *vao = glthread->CurrentVAO; - return ctx->API != API_OPENGL_CORE && glthread->CurrentVAO->HasUserPointer; + return ctx->API != API_OPENGL_CORE && + (vao->UserPointerMask & vao->Enabled); } static inline bool _mesa_glthread_has_non_vbo_vertices_or_indirect(const struct gl_context *ctx) { const struct glthread_state *glthread = &ctx->GLThread; + const struct glthread_vao *vao = glthread->CurrentVAO; return ctx->API != API_OPENGL_CORE && (glthread->CurrentDrawIndirectBufferName == 0 || - glthread->CurrentVAO->HasUserPointer); + (vao->UserPointerMask & vao->Enabled)); } static inline bool @@ -113,7 +117,8 @@ _mesa_glthread_has_non_vbo_vertices_or_indices_or_indirect(const struct gl_conte return ctx->API != API_OPENGL_CORE && (glthread->CurrentDrawIndirectBufferName == 0 || - vao->CurrentElementBufferName == 0 || vao->HasUserPointer); + vao->CurrentElementBufferName == 0 || + (vao->UserPointerMask & vao->Enabled)); } diff --git a/src/mesa/main/glthread_varray.c b/src/mesa/main/glthread_varray.c index 9e45aa28755..fbd08f41e5a 100644 --- a/src/mesa/main/glthread_varray.c +++ b/src/mesa/main/glthread_varray.c @@ -158,10 +158,13 @@ _mesa_glthread_ClientState(struct gl_context *ctx, GLuint *vaobj, } void -_mesa_glthread_AttribPointer(struct gl_context *ctx) +_mesa_glthread_AttribPointer(struct gl_context *ctx, gl_vert_attrib attrib) { struct glthread_state *glthread = &ctx->GLThread; + struct glthread_vao *vao = glthread->CurrentVAO; - if (glthread->CurrentArrayBufferName == 0) - glthread->CurrentVAO->HasUserPointer = true; + if (glthread->CurrentArrayBufferName != 0) + vao->UserPointerMask &= ~(1u << attrib); + else + vao->UserPointerMask |= 1u << attrib; } |