glthread: track which vertex array attribs are enabled

Reviewed-by: Timothy Arceri <tarceri@itsqueeze.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/4124>
This commit is contained in:
Marek Olšák
2020-03-04 14:49:09 -05:00
parent c571dda1e0
commit 0b1dd18591
6 changed files with 84 additions and 13 deletions

View File

@@ -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, &amp;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, &amp;vaobj, VERT_ATTRIB_GENERIC(index), true);">
<param name="vaobj" type="GLuint" />
<param name="index" type="GLuint" />
</function>

View File

@@ -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, &amp;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, &amp;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, &amp;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, &amp;vaobj, VERT_ATTRIB_GENERIC(index), false);">
<param name="vaobj" type="GLuint" />
<param name="index" type="GLuint" />
</function>

View File

@@ -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"/>

View File

@@ -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*/

View File

@@ -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 */

View File

@@ -133,6 +133,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)
{