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:
@@ -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>
|
||||
|
@@ -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>
|
||||
|
@@ -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"/>
|
||||
|
@@ -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*/
|
||||
|
@@ -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 */
|
||||
|
@@ -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)
|
||||
{
|
||||
|
Reference in New Issue
Block a user