summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarek Olšák <marek.olsak@amd.com>2020-03-04 14:49:09 -0500
committerMarek Olšák <marek.olsak@amd.com>2020-03-20 23:01:13 -0400
commit0b1dd1859134e71b25ad1124535df96d435e9766 (patch)
treef10f3bfb8318cd41926b1b967d16951f7a6673c0
parentc571dda1e0929e1e8ff1686994df6601f34c7bf8 (diff)
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>
-rw-r--r--src/mapi/glapi/gen/ARB_direct_state_access.xml6
-rw-r--r--src/mapi/glapi/gen/EXT_direct_state_access.xml18
-rw-r--r--src/mapi/glapi/gen/gl_API.xml15
-rw-r--r--src/mesa/main/glthread.h5
-rw-r--r--src/mesa/main/glthread_marshal.h29
-rw-r--r--src/mesa/main/glthread_varray.c24
6 files changed, 84 insertions, 13 deletions
diff --git a/src/mapi/glapi/gen/ARB_direct_state_access.xml b/src/mapi/glapi/gen/ARB_direct_state_access.xml
index ec7b13609a1..cd0f51c4327 100644
--- a/src/mapi/glapi/gen/ARB_direct_state_access.xml
+++ b/src/mapi/glapi/gen/ARB_direct_state_access.xml
@@ -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>
diff --git a/src/mapi/glapi/gen/EXT_direct_state_access.xml b/src/mapi/glapi/gen/EXT_direct_state_access.xml
index 397c75a37d0..81310e343f4 100644
--- a/src/mapi/glapi/gen/EXT_direct_state_access.xml
+++ b/src/mapi/glapi/gen/EXT_direct_state_access.xml
@@ -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>
diff --git a/src/mapi/glapi/gen/gl_API.xml b/src/mapi/glapi/gen/gl_API.xml
index e1ef6262281..bd5e0f11110 100644
--- a/src/mapi/glapi/gen/gl_API.xml
+++ b/src/mapi/glapi/gen/gl_API.xml
@@ -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"/>
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;