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/mesa | |
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/mesa')
-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 |
3 files changed, 58 insertions, 0 deletions
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; |