diff options
author | Marek Olšák <[email protected]> | 2020-03-04 14:49:09 -0500 |
---|---|---|
committer | Marek Olšák <[email protected]> | 2020-03-20 23:01:13 -0400 |
commit | 0b1dd1859134e71b25ad1124535df96d435e9766 (patch) | |
tree | f10f3bfb8318cd41926b1b967d16951f7a6673c0 /src | |
parent | c571dda1e0929e1e8ff1686994df6601f34c7bf8 (diff) |
glthread: track which vertex array attribs are enabled
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_direct_state_access.xml | 6 | ||||
-rw-r--r-- | src/mapi/glapi/gen/EXT_direct_state_access.xml | 18 | ||||
-rw-r--r-- | src/mapi/glapi/gen/gl_API.xml | 15 | ||||
-rw-r--r-- | src/mesa/main/glthread.h | 5 | ||||
-rw-r--r-- | src/mesa/main/glthread_marshal.h | 29 | ||||
-rw-r--r-- | src/mesa/main/glthread_varray.c | 24 |
6 files changed, 84 insertions, 13 deletions
diff --git a/src/mapi/glapi/gen/ARB_direct_state_access.xml b/src/mapi/glapi/gen/ARB_direct_state_access.xml index ec7b13609a1..cd0f51c4327 100644 --- a/src/mapi/glapi/gen/ARB_direct_state_access.xml +++ b/src/mapi/glapi/gen/ARB_direct_state_access.xml @@ -585,12 +585,14 @@ <param name="arrays" type="GLuint *" /> </function> - <function name="DisableVertexArrayAttrib" no_error="true"> + <function name="DisableVertexArrayAttrib" no_error="true" + marshal_call_after="if (COMPAT) _mesa_glthread_ClientState(ctx, &vaobj, VERT_ATTRIB_GENERIC(index), false);"> <param name="vaobj" type="GLuint" /> <param name="index" type="GLuint" /> </function> - <function name="EnableVertexArrayAttrib" no_error="true"> + <function name="EnableVertexArrayAttrib" no_error="true" + marshal_call_after="if (COMPAT) _mesa_glthread_ClientState(ctx, &vaobj, VERT_ATTRIB_GENERIC(index), true);"> <param name="vaobj" type="GLuint" /> <param name="index" type="GLuint" /> </function> diff --git a/src/mapi/glapi/gen/EXT_direct_state_access.xml b/src/mapi/glapi/gen/EXT_direct_state_access.xml index 397c75a37d0..81310e343f4 100644 --- a/src/mapi/glapi/gen/EXT_direct_state_access.xml +++ b/src/mapi/glapi/gen/EXT_direct_state_access.xml @@ -986,12 +986,14 @@ <param name="params" type="GLint *" /> </function> - <function name="EnableClientStateiEXT"> + <function name="EnableClientStateiEXT" + marshal_call_after="if (COMPAT) _mesa_glthread_ClientState(ctx, NULL, VERT_ATTRIB_TEX(index), true);"> <param name="array" type="GLenum" /> <param name="index" type="GLuint" /> </function> - <function name="DisableClientStateiEXT"> + <function name="DisableClientStateiEXT" + marshal_call_after="if (COMPAT) _mesa_glthread_ClientState(ctx, NULL, VERT_ATTRIB_TEX(index), false);"> <param name="array" type="GLenum" /> <param name="index" type="GLuint" /> </function> @@ -1151,22 +1153,26 @@ <param name="offset" type="GLintptr" /> </function> - <function name="EnableVertexArrayEXT"> + <function name="EnableVertexArrayEXT" + marshal_call_after="if (COMPAT) _mesa_glthread_ClientState(ctx, &vaobj, _mesa_array_to_attrib(ctx, array), true);"> <param name="vaobj" type="GLuint" /> <param name="array" type="GLenum" /> </function> - <function name="DisableVertexArrayEXT"> + <function name="DisableVertexArrayEXT" + marshal_call_after="if (COMPAT) _mesa_glthread_ClientState(ctx, &vaobj, _mesa_array_to_attrib(ctx, array), false);"> <param name="vaobj" type="GLuint" /> <param name="array" type="GLenum" /> </function> - <function name="EnableVertexArrayAttribEXT"> + <function name="EnableVertexArrayAttribEXT" + marshal_call_after="if (COMPAT) _mesa_glthread_ClientState(ctx, &vaobj, VERT_ATTRIB_GENERIC(index), true);"> <param name="vaobj" type="GLuint" /> <param name="index" type="GLuint" /> </function> - <function name="DisableVertexArrayAttribEXT"> + <function name="DisableVertexArrayAttribEXT" + marshal_call_after="if (COMPAT) _mesa_glthread_ClientState(ctx, &vaobj, VERT_ATTRIB_GENERIC(index), false);"> <param name="vaobj" type="GLuint" /> <param name="index" type="GLuint" /> </function> diff --git a/src/mapi/glapi/gen/gl_API.xml b/src/mapi/glapi/gen/gl_API.xml index e1ef6262281..bd5e0f11110 100644 --- a/src/mapi/glapi/gen/gl_API.xml +++ b/src/mapi/glapi/gen/gl_API.xml @@ -3174,7 +3174,8 @@ <glx handcode="true"/> </function> - <function name="DisableClientState" es1="1.0" deprecated="3.1"> + <function name="DisableClientState" es1="1.0" deprecated="3.1" + marshal_call_after="if (COMPAT) _mesa_glthread_ClientState(ctx, NULL, _mesa_array_to_attrib(ctx, array), false);"> <param name="array" type="GLenum"/> <glx handcode="true"/> </function> @@ -3204,7 +3205,8 @@ <glx handcode="true"/> </function> - <function name="EnableClientState" es1="1.0" deprecated="3.1"> + <function name="EnableClientState" es1="1.0" deprecated="3.1" + marshal_call_after="if (COMPAT) _mesa_glthread_ClientState(ctx, NULL, _mesa_array_to_attrib(ctx, array), true);"> <param name="array" type="GLenum"/> <glx handcode="true"/> </function> @@ -4285,7 +4287,8 @@ <glx rop="197"/> </function> - <function name="ClientActiveTexture" es1="1.0" deprecated="3.1"> + <function name="ClientActiveTexture" es1="1.0" deprecated="3.1" + marshal_call_after="ctx->GLThread.ClientActiveTexture = texture - GL_TEXTURE0;"> <param name="texture" type="GLenum"/> <glx handcode="true"/> </function> @@ -5357,13 +5360,15 @@ <glx ignore="true"/> </function> - <function name="DisableVertexAttribArray" es2="2.0" no_error="true"> + <function name="DisableVertexAttribArray" es2="2.0" no_error="true" + marshal_call_after="if (COMPAT) _mesa_glthread_ClientState(ctx, NULL, VERT_ATTRIB_GENERIC(index), false);"> <param name="index" type="GLuint"/> <glx ignore="true"/> <glx handcode="true"/> </function> - <function name="EnableVertexAttribArray" es2="2.0" no_error="true"> + <function name="EnableVertexAttribArray" es2="2.0" no_error="true" + marshal_call_after="if (COMPAT) _mesa_glthread_ClientState(ctx, NULL, VERT_ATTRIB_GENERIC(index), true);"> <param name="index" type="GLuint"/> <glx ignore="true"/> <glx handcode="true"/> diff --git a/src/mesa/main/glthread.h b/src/mesa/main/glthread.h index 5491e1994c1..2dff33d9deb 100644 --- a/src/mesa/main/glthread.h +++ b/src/mesa/main/glthread.h @@ -47,6 +47,7 @@ #include <stdbool.h> #include "util/u_queue.h" #include "GL/gl.h" +#include "compiler/shader_enums.h" struct gl_context; struct _mesa_HashTable; @@ -55,6 +56,7 @@ struct glthread_vao { GLuint Name; bool HasUserPointer; GLuint CurrentElementBufferName; + GLbitfield Enabled; }; /** A single batch of commands queued up for execution. */ @@ -103,6 +105,7 @@ struct glthread_state struct glthread_vao *CurrentVAO; struct glthread_vao *LastLookedUpVAO; struct glthread_vao DefaultVAO; + int ClientActiveTexture; /** Currently-bound buffer object IDs. */ GLuint CurrentArrayBufferName; @@ -128,6 +131,8 @@ void _mesa_glthread_DeleteVertexArrays(struct gl_context *ctx, GLsizei n, const GLuint *ids); 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); #endif /* _GLTHREAD_H*/ diff --git a/src/mesa/main/glthread_marshal.h b/src/mesa/main/glthread_marshal.h index 2e5001b1af7..116d79f4366 100644 --- a/src/mesa/main/glthread_marshal.h +++ b/src/mesa/main/glthread_marshal.h @@ -372,4 +372,33 @@ _mesa_semaphore_enum_to_count(GLenum pname) } } +static inline gl_vert_attrib +_mesa_array_to_attrib(struct gl_context *ctx, GLenum array) +{ + switch (array) { + case GL_VERTEX_ARRAY: + return VERT_ATTRIB_POS; + case GL_NORMAL_ARRAY: + return VERT_ATTRIB_NORMAL; + case GL_COLOR_ARRAY: + return VERT_ATTRIB_COLOR0; + case GL_INDEX_ARRAY: + return VERT_ATTRIB_COLOR_INDEX; + case GL_TEXTURE_COORD_ARRAY: + return VERT_ATTRIB_TEX(ctx->GLThread.ClientActiveTexture); + case GL_EDGE_FLAG_ARRAY: + return VERT_ATTRIB_EDGEFLAG; + case GL_FOG_COORDINATE_ARRAY: + return VERT_ATTRIB_FOG; + case GL_SECONDARY_COLOR_ARRAY: + return VERT_ATTRIB_COLOR1; + case GL_POINT_SIZE_ARRAY_OES: + return VERT_ATTRIB_POINT_SIZE; + default: + if (array >= GL_TEXTURE0 && array <= GL_TEXTURE7) + return VERT_ATTRIB_TEX(array - GL_TEXTURE0); + return VERT_ATTRIB_MAX; + } +} + #endif /* MARSHAL_H */ diff --git a/src/mesa/main/glthread_varray.c b/src/mesa/main/glthread_varray.c index 8049a9d2ff1..9e45aa28755 100644 --- a/src/mesa/main/glthread_varray.c +++ b/src/mesa/main/glthread_varray.c @@ -134,6 +134,30 @@ _mesa_glthread_GenVertexArrays(struct gl_context *ctx, } void +_mesa_glthread_ClientState(struct gl_context *ctx, GLuint *vaobj, + gl_vert_attrib attrib, bool enable) +{ + struct glthread_state *glthread = &ctx->GLThread; + struct glthread_vao *vao; + + if (attrib >= VERT_ATTRIB_MAX) + return; + + if (vaobj) { + vao = lookup_vao(ctx, *vaobj); + if (!vao) + return; + } else { + vao = glthread->CurrentVAO; + } + + if (enable) + vao->Enabled |= 1u << attrib; + else + vao->Enabled &= ~(1u << attrib); +} + +void _mesa_glthread_AttribPointer(struct gl_context *ctx) { struct glthread_state *glthread = &ctx->GLThread; |