Reviewed-by: Timothy Arceri <tarceri@itsqueeze.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/4124>
</function>
<function name="VertexAttribLPointer" no_error="true" marshal="async"
</function>
<function name="VertexAttribLPointer" no_error="true" marshal="async"
- marshal_call_after="if (COMPAT) _mesa_glthread_AttribPointer(ctx);">
+ marshal_call_after="if (COMPAT) _mesa_glthread_AttribPointer(ctx, VERT_ATTRIB_GENERIC(index));">
<param name="index" type="GLuint"/>
<param name="size" type="GLint"/>
<param name="type" type="GLenum"/>
<param name="index" type="GLuint"/>
<param name="size" type="GLint"/>
<param name="type" type="GLenum"/>
</function>
<function name="MultiTexCoordPointerEXT" marshal="async"
</function>
<function name="MultiTexCoordPointerEXT" marshal="async"
- marshal_call_after="if (COMPAT) _mesa_glthread_AttribPointer(ctx);">
+ marshal_call_after="if (COMPAT) _mesa_glthread_AttribPointer(ctx, VERT_ATTRIB_TEX(texunit - GL_TEXTURE0));">
<param name="texunit" type="GLenum" />
<param name="size" type="GLint" />
<param name="type" type="GLenum" />
<param name="texunit" type="GLenum" />
<param name="size" type="GLint" />
<param name="type" type="GLenum" />
<function name="VertexAttribIPointer" es2="3.0" marshal="async"
no_error="true"
<function name="VertexAttribIPointer" es2="3.0" marshal="async"
no_error="true"
- marshal_call_after="if (COMPAT) _mesa_glthread_AttribPointer(ctx);">
+ marshal_call_after="if (COMPAT) _mesa_glthread_AttribPointer(ctx, VERT_ATTRIB_GENERIC(index));">
<param name="index" type="GLuint"/>
<param name="size" type="GLint"/>
<param name="type" type="GLenum"/>
<param name="index" type="GLuint"/>
<param name="size" type="GLint"/>
<param name="type" type="GLenum"/>
<function name="PointSizePointerOES" es1="1.0" desktop="false"
no_error="true" marshal="async"
<function name="PointSizePointerOES" es1="1.0" desktop="false"
no_error="true" marshal="async"
- marshal_call_after="if (COMPAT) _mesa_glthread_AttribPointer(ctx);">
+ marshal_call_after="if (COMPAT) _mesa_glthread_AttribPointer(ctx, VERT_ATTRIB_POINT_SIZE);">
<param name="type" type="GLenum"/>
<param name="stride" type="GLsizei"/>
<param name="pointer" type="const GLvoid *"/>
<param name="type" type="GLenum"/>
<param name="stride" type="GLsizei"/>
<param name="pointer" type="const GLvoid *"/>
<function name="ColorPointer" es1="1.0" deprecated="3.1" marshal="async"
no_error="true"
<function name="ColorPointer" es1="1.0" deprecated="3.1" marshal="async"
no_error="true"
- marshal_call_after="if (COMPAT) _mesa_glthread_AttribPointer(ctx);">
+ marshal_call_after="if (COMPAT) _mesa_glthread_AttribPointer(ctx, VERT_ATTRIB_COLOR0);">
<param name="size" type="GLint"/>
<param name="type" type="GLenum"/>
<param name="stride" type="GLsizei"/>
<param name="size" type="GLint"/>
<param name="type" type="GLenum"/>
<param name="stride" type="GLsizei"/>
<function name="EdgeFlagPointer" deprecated="3.1" marshal="async"
no_error="true"
<function name="EdgeFlagPointer" deprecated="3.1" marshal="async"
no_error="true"
- marshal_call_after="if (COMPAT) _mesa_glthread_AttribPointer(ctx);">
+ marshal_call_after="if (COMPAT) _mesa_glthread_AttribPointer(ctx, VERT_ATTRIB_EDGEFLAG);">
<param name="stride" type="GLsizei"/>
<param name="pointer" type="const GLvoid *"/>
<glx handcode="true"/>
<param name="stride" type="GLsizei"/>
<param name="pointer" type="const GLvoid *"/>
<glx handcode="true"/>
<function name="IndexPointer" deprecated="3.1" marshal="async"
no_error="true"
<function name="IndexPointer" deprecated="3.1" marshal="async"
no_error="true"
- marshal_call_after="if (COMPAT) _mesa_glthread_AttribPointer(ctx);">
+ marshal_call_after="if (COMPAT) _mesa_glthread_AttribPointer(ctx, VERT_ATTRIB_COLOR_INDEX);">
<param name="type" type="GLenum"/>
<param name="stride" type="GLsizei"/>
<param name="pointer" type="const GLvoid *"/>
<param name="type" type="GLenum"/>
<param name="stride" type="GLsizei"/>
<param name="pointer" type="const GLvoid *"/>
<function name="NormalPointer" es1="1.0" deprecated="3.1" marshal="async"
no_error="true"
<function name="NormalPointer" es1="1.0" deprecated="3.1" marshal="async"
no_error="true"
- marshal_call_after="if (COMPAT) _mesa_glthread_AttribPointer(ctx);">
+ marshal_call_after="if (COMPAT) _mesa_glthread_AttribPointer(ctx, VERT_ATTRIB_NORMAL);">
<param name="type" type="GLenum"/>
<param name="stride" type="GLsizei"/>
<param name="pointer" type="const GLvoid *"/>
<param name="type" type="GLenum"/>
<param name="stride" type="GLsizei"/>
<param name="pointer" type="const GLvoid *"/>
<function name="TexCoordPointer" es1="1.0" deprecated="3.1" marshal="async"
no_error="true"
<function name="TexCoordPointer" es1="1.0" deprecated="3.1" marshal="async"
no_error="true"
- marshal_call_after="if (COMPAT) _mesa_glthread_AttribPointer(ctx);">
+ marshal_call_after="if (COMPAT) _mesa_glthread_AttribPointer(ctx, VERT_ATTRIB_TEX(ctx->GLThread.ClientActiveTexture));">
<param name="size" type="GLint"/>
<param name="type" type="GLenum"/>
<param name="stride" type="GLsizei"/>
<param name="size" type="GLint"/>
<param name="type" type="GLenum"/>
<param name="stride" type="GLsizei"/>
<function name="VertexPointer" es1="1.0" deprecated="3.1" marshal="async"
no_error="true"
<function name="VertexPointer" es1="1.0" deprecated="3.1" marshal="async"
no_error="true"
- marshal_call_after="if (COMPAT) _mesa_glthread_AttribPointer(ctx);">
+ marshal_call_after="if (COMPAT) _mesa_glthread_AttribPointer(ctx, VERT_ATTRIB_POS);">
<param name="size" type="GLint"/>
<param name="type" type="GLenum"/>
<param name="stride" type="GLsizei"/>
<param name="size" type="GLint"/>
<param name="type" type="GLenum"/>
<param name="stride" type="GLsizei"/>
<function name="FogCoordPointer" deprecated="3.1" marshal="async"
no_error="true"
<function name="FogCoordPointer" deprecated="3.1" marshal="async"
no_error="true"
- marshal_call_after="if (COMPAT) _mesa_glthread_AttribPointer(ctx);">
+ marshal_call_after="if (COMPAT) _mesa_glthread_AttribPointer(ctx, VERT_ATTRIB_FOG);">
<param name="type" type="GLenum"/>
<param name="stride" type="GLsizei"/>
<param name="pointer" type="const GLvoid *"/>
<param name="type" type="GLenum"/>
<param name="stride" type="GLsizei"/>
<param name="pointer" type="const GLvoid *"/>
<function name="SecondaryColorPointer" deprecated="3.1" marshal="async"
no_error="true"
<function name="SecondaryColorPointer" deprecated="3.1" marshal="async"
no_error="true"
- marshal_call_after="if (COMPAT) _mesa_glthread_AttribPointer(ctx);">
+ marshal_call_after="if (COMPAT) _mesa_glthread_AttribPointer(ctx, VERT_ATTRIB_COLOR1);">
<param name="size" type="GLint"/>
<param name="type" type="GLenum"/>
<param name="stride" type="GLsizei"/>
<param name="size" type="GLint"/>
<param name="type" type="GLenum"/>
<param name="stride" type="GLsizei"/>
<function name="VertexAttribPointer" es2="2.0" marshal="async"
no_error="true"
<function name="VertexAttribPointer" es2="2.0" marshal="async"
no_error="true"
- marshal_call_after="if (COMPAT) _mesa_glthread_AttribPointer(ctx);">
+ marshal_call_after="if (COMPAT) _mesa_glthread_AttribPointer(ctx, VERT_ATTRIB_GENERIC(index));">
<param name="index" type="GLuint"/>
<param name="size" type="GLint"/>
<param name="type" type="GLenum"/>
<param name="index" type="GLuint"/>
<param name="size" type="GLint"/>
<param name="type" type="GLenum"/>
</function>
<function name="ColorPointerEXT" deprecated="3.1" marshal="async"
</function>
<function name="ColorPointerEXT" deprecated="3.1" marshal="async"
- marshal_call_after="if (COMPAT) _mesa_glthread_AttribPointer(ctx);">
+ marshal_call_after="if (COMPAT) _mesa_glthread_AttribPointer(ctx, VERT_ATTRIB_COLOR0);">
<param name="size" type="GLint"/>
<param name="type" type="GLenum"/>
<param name="stride" type="GLsizei"/>
<param name="size" type="GLint"/>
<param name="type" type="GLenum"/>
<param name="stride" type="GLsizei"/>
</function>
<function name="EdgeFlagPointerEXT" deprecated="3.1" marshal="async"
</function>
<function name="EdgeFlagPointerEXT" deprecated="3.1" marshal="async"
- marshal_call_after="if (COMPAT) _mesa_glthread_AttribPointer(ctx);">
+ marshal_call_after="if (COMPAT) _mesa_glthread_AttribPointer(ctx, VERT_ATTRIB_EDGEFLAG);">
<param name="stride" type="GLsizei"/>
<param name="count" type="GLsizei"/>
<param name="pointer" type="const GLboolean *"/>
<param name="stride" type="GLsizei"/>
<param name="count" type="GLsizei"/>
<param name="pointer" type="const GLboolean *"/>
</function>
<function name="IndexPointerEXT" deprecated="3.1" marshal="async"
</function>
<function name="IndexPointerEXT" deprecated="3.1" marshal="async"
- marshal_call_after="if (COMPAT) _mesa_glthread_AttribPointer(ctx);">
+ marshal_call_after="if (COMPAT) _mesa_glthread_AttribPointer(ctx, VERT_ATTRIB_COLOR_INDEX);">
<param name="type" type="GLenum"/>
<param name="stride" type="GLsizei"/>
<param name="count" type="GLsizei"/>
<param name="type" type="GLenum"/>
<param name="stride" type="GLsizei"/>
<param name="count" type="GLsizei"/>
</function>
<function name="NormalPointerEXT" deprecated="3.1" marshal="async"
</function>
<function name="NormalPointerEXT" deprecated="3.1" marshal="async"
- marshal_call_after="if (COMPAT) _mesa_glthread_AttribPointer(ctx);">
+ marshal_call_after="if (COMPAT) _mesa_glthread_AttribPointer(ctx, VERT_ATTRIB_NORMAL);">
<param name="type" type="GLenum"/>
<param name="stride" type="GLsizei"/>
<param name="count" type="GLsizei"/>
<param name="type" type="GLenum"/>
<param name="stride" type="GLsizei"/>
<param name="count" type="GLsizei"/>
</function>
<function name="TexCoordPointerEXT" deprecated="3.1" marshal="async"
</function>
<function name="TexCoordPointerEXT" deprecated="3.1" marshal="async"
- marshal_call_after="if (COMPAT) _mesa_glthread_AttribPointer(ctx);">
+ marshal_call_after="if (COMPAT) _mesa_glthread_AttribPointer(ctx, VERT_ATTRIB_TEX(ctx->GLThread.ClientActiveTexture));">
<param name="size" type="GLint"/>
<param name="type" type="GLenum"/>
<param name="stride" type="GLsizei"/>
<param name="size" type="GLint"/>
<param name="type" type="GLenum"/>
<param name="stride" type="GLsizei"/>
</function>
<function name="VertexPointerEXT" deprecated="3.1" marshal="async"
</function>
<function name="VertexPointerEXT" deprecated="3.1" marshal="async"
- marshal_call_after="if (COMPAT) _mesa_glthread_AttribPointer(ctx);">
+ marshal_call_after="if (COMPAT) _mesa_glthread_AttribPointer(ctx, VERT_ATTRIB_POS);">
<param name="size" type="GLint"/>
<param name="type" type="GLenum"/>
<param name="stride" type="GLsizei"/>
<param name="size" type="GLint"/>
<param name="type" type="GLenum"/>
<param name="stride" type="GLsizei"/>
struct glthread_vao {
GLuint Name;
struct glthread_vao {
GLuint Name;
GLuint CurrentElementBufferName;
GLbitfield Enabled;
GLuint CurrentElementBufferName;
GLbitfield Enabled;
+ GLbitfield UserPointerMask;
};
/** A single batch of commands queued up for execution. */
};
/** A single batch of commands queued up for execution. */
GLsizei n, GLuint *arrays);
void _mesa_glthread_ClientState(struct gl_context *ctx, GLuint *vaobj,
gl_vert_attrib attrib, bool enable);
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);
+void _mesa_glthread_AttribPointer(struct gl_context *ctx,
+ gl_vert_attrib attrib);
struct glthread_vao *vao = glthread->CurrentVAO;
return ctx->API != API_OPENGL_CORE &&
struct glthread_vao *vao = glthread->CurrentVAO;
return ctx->API != API_OPENGL_CORE &&
- (vao->CurrentElementBufferName == 0 || vao->HasUserPointer);
+ (vao->CurrentElementBufferName == 0 ||
+ (vao->UserPointerMask & vao->Enabled));
}
static inline bool
_mesa_glthread_has_non_vbo_vertices(const struct gl_context *ctx)
{
const struct glthread_state *glthread = &ctx->GLThread;
}
static inline bool
_mesa_glthread_has_non_vbo_vertices(const struct gl_context *ctx)
{
const struct glthread_state *glthread = &ctx->GLThread;
+ const struct glthread_vao *vao = glthread->CurrentVAO;
- return ctx->API != API_OPENGL_CORE && glthread->CurrentVAO->HasUserPointer;
+ return ctx->API != API_OPENGL_CORE &&
+ (vao->UserPointerMask & vao->Enabled);
}
static inline bool
_mesa_glthread_has_non_vbo_vertices_or_indirect(const struct gl_context *ctx)
{
const struct glthread_state *glthread = &ctx->GLThread;
}
static inline bool
_mesa_glthread_has_non_vbo_vertices_or_indirect(const struct gl_context *ctx)
{
const struct glthread_state *glthread = &ctx->GLThread;
+ const struct glthread_vao *vao = glthread->CurrentVAO;
return ctx->API != API_OPENGL_CORE &&
(glthread->CurrentDrawIndirectBufferName == 0 ||
return ctx->API != API_OPENGL_CORE &&
(glthread->CurrentDrawIndirectBufferName == 0 ||
- glthread->CurrentVAO->HasUserPointer);
+ (vao->UserPointerMask & vao->Enabled));
return ctx->API != API_OPENGL_CORE &&
(glthread->CurrentDrawIndirectBufferName == 0 ||
return ctx->API != API_OPENGL_CORE &&
(glthread->CurrentDrawIndirectBufferName == 0 ||
- vao->CurrentElementBufferName == 0 || vao->HasUserPointer);
+ vao->CurrentElementBufferName == 0 ||
+ (vao->UserPointerMask & vao->Enabled));
-_mesa_glthread_AttribPointer(struct gl_context *ctx)
+_mesa_glthread_AttribPointer(struct gl_context *ctx, gl_vert_attrib attrib)
{
struct glthread_state *glthread = &ctx->GLThread;
{
struct glthread_state *glthread = &ctx->GLThread;
+ struct glthread_vao *vao = glthread->CurrentVAO;
- if (glthread->CurrentArrayBufferName == 0)
- glthread->CurrentVAO->HasUserPointer = true;
+ if (glthread->CurrentArrayBufferName != 0)
+ vao->UserPointerMask &= ~(1u << attrib);
+ else
+ vao->UserPointerMask |= 1u << attrib;