<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>
<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>
<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>
<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>
<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>
<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>
<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"/>
#include <stdbool.h>
#include "util/u_queue.h"
#include "GL/gl.h"
+#include "compiler/shader_enums.h"
struct gl_context;
struct _mesa_HashTable;
GLuint Name;
bool HasUserPointer;
GLuint CurrentElementBufferName;
+ GLbitfield Enabled;
};
/** A single batch of commands queued up for execution. */
struct glthread_vao *CurrentVAO;
struct glthread_vao *LastLookedUpVAO;
struct glthread_vao DefaultVAO;
+ int ClientActiveTexture;
/** Currently-bound buffer object IDs. */
GLuint CurrentArrayBufferName;
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*/
}
}
+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 */
}
}
+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)
{