Mesa (master): mesa: add ARB_instanced_arrays EXT_dsa function
GitLab Mirror
gitlab-mirror at kemper.freedesktop.org
Tue Nov 19 08:24:13 UTC 2019
Module: Mesa
Branch: master
Commit: b78e2a197a1dd866024b0dc97689a006c0e6798f
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=b78e2a197a1dd866024b0dc97689a006c0e6798f
Author: Pierre-Eric Pelloux-Prayer <pierre-eric.pelloux-prayer at amd.com>
Date: Wed Nov 6 12:16:30 2019 +0100
mesa: add ARB_instanced_arrays EXT_dsa function
Reviewed-by: Marek Olšák <marek.olsak at amd.com>
---
docs/features.txt | 2 +-
src/mapi/glapi/gen/ARB_instanced_arrays.xml | 6 ++++
src/mapi/glapi/gen/static_data.py | 1 +
src/mesa/main/tests/dispatch_sanity.cpp | 1 +
src/mesa/main/varray.c | 49 +++++++++++++++++++++++++++++
src/mesa/main/varray.h | 2 ++
6 files changed, 60 insertions(+), 1 deletion(-)
diff --git a/docs/features.txt b/docs/features.txt
index 49ed0fdb7e6..7ccc097c9db 100644
--- a/docs/features.txt
+++ b/docs/features.txt
@@ -380,7 +380,7 @@ GL_EXT_direct_state_access additions from other extensions (complete list):
GL_ARB_clear_buffer_object DONE
GL_ARB_framebuffer_no_attachments DONE
GL_ARB_gpu_shader_fp64 DONE
- GL_ARB_instanced_arrays not started
+ GL_ARB_instanced_arrays DONE
GL_ARB_internalformat_query2 DONE
GL_ARB_sparse_texture n/a
GL_ARB_sparse_buffer not started
diff --git a/src/mapi/glapi/gen/ARB_instanced_arrays.xml b/src/mapi/glapi/gen/ARB_instanced_arrays.xml
index 907a9d4b8f3..8ecf7951af8 100644
--- a/src/mapi/glapi/gen/ARB_instanced_arrays.xml
+++ b/src/mapi/glapi/gen/ARB_instanced_arrays.xml
@@ -15,6 +15,12 @@
<param name="divisor" type="GLuint"/>
</function>
+ <function name="VertexArrayVertexAttribDivisorEXT">
+ <param name="vaobj" type="GLuint"/>
+ <param name="index" type="GLuint"/>
+ <param name="divisor" type="GLuint"/>
+ </function>
+
</category>
diff --git a/src/mapi/glapi/gen/static_data.py b/src/mapi/glapi/gen/static_data.py
index c9d9b2cb2d6..3326ffdf378 100644
--- a/src/mapi/glapi/gen/static_data.py
+++ b/src/mapi/glapi/gen/static_data.py
@@ -1621,6 +1621,7 @@ offsets = {
"NamedFramebufferParameteriEXT": 1585,
"GetNamedFramebufferParameterivEXT": 1586,
"VertexArrayVertexAttribLOffsetEXT": 1587,
+ "VertexArrayVertexAttribDivisorEXT": 1588,
}
functions = [
diff --git a/src/mesa/main/tests/dispatch_sanity.cpp b/src/mesa/main/tests/dispatch_sanity.cpp
index a34879ff17e..02ed6374317 100644
--- a/src/mesa/main/tests/dispatch_sanity.cpp
+++ b/src/mesa/main/tests/dispatch_sanity.cpp
@@ -546,6 +546,7 @@ const struct function common_desktop_functions_possible[] = {
/* GL_ARB_instanced_arrays */
{ "glVertexAttribDivisorARB", 31, -1 },
+ { "glVertexArrayVertexAttribDivisorEXT", 31, -1 },
/* GL_NV_texture_barrier */
{ "glTextureBarrierNV", 31, -1 },
diff --git a/src/mesa/main/varray.c b/src/mesa/main/varray.c
index 8db6f13a319..d046d5af302 100644
--- a/src/mesa/main/varray.c
+++ b/src/mesa/main/varray.c
@@ -2558,6 +2558,55 @@ _mesa_VertexAttribDivisor(GLuint index, GLuint divisor)
}
+void GLAPIENTRY
+_mesa_VertexArrayVertexAttribDivisorEXT(GLuint vaobj, GLuint index, GLuint divisor)
+{
+ GET_CURRENT_CONTEXT(ctx);
+
+ const gl_vert_attrib genericIndex = VERT_ATTRIB_GENERIC(index);
+ struct gl_vertex_array_object * vao;
+ /* The ARB_instanced_arrays spec says:
+ *
+ * "The vertex array object named by vaobj must
+ * be generated by GenVertexArrays (and not since deleted);
+ * otherwise an INVALID_OPERATION error is generated."
+ */
+ vao = _mesa_lookup_vao_err(ctx, vaobj,
+ false,
+ "glVertexArrayVertexAttribDivisorEXT");
+ if (!vao)
+ return;
+
+ if (!ctx->Extensions.ARB_instanced_arrays) {
+ _mesa_error(ctx, GL_INVALID_OPERATION, "glVertexArrayVertexAttribDivisorEXT()");
+ return;
+ }
+
+ if (index >= ctx->Const.Program[MESA_SHADER_VERTEX].MaxAttribs) {
+ _mesa_error(ctx, GL_INVALID_VALUE,
+ "glVertexArrayVertexAttribDivisorEXT(index = %u)", index);
+ return;
+ }
+
+ assert(genericIndex < ARRAY_SIZE(vao->VertexAttrib));
+
+ /* The ARB_vertex_attrib_binding spec says:
+ *
+ * "The command
+ *
+ * void VertexAttribDivisor(uint index, uint divisor);
+ *
+ * is equivalent to (assuming no errors are generated):
+ *
+ * VertexAttribBinding(index, index);
+ * VertexBindingDivisor(index, divisor);"
+ */
+ _mesa_vertex_attrib_binding(ctx, vao, genericIndex, genericIndex);
+ vertex_binding_divisor(ctx, vao, genericIndex, divisor);
+}
+
+
+
static ALWAYS_INLINE void
vertex_array_vertex_buffer(struct gl_context *ctx,
struct gl_vertex_array_object *vao,
diff --git a/src/mesa/main/varray.h b/src/mesa/main/varray.h
index fb490f1a586..9c1ed9efeac 100644
--- a/src/mesa/main/varray.h
+++ b/src/mesa/main/varray.h
@@ -317,6 +317,8 @@ extern void GLAPIENTRY
_mesa_VertexAttribDivisor_no_error(GLuint index, GLuint divisor);
extern void GLAPIENTRY
_mesa_VertexAttribDivisor(GLuint index, GLuint divisor);
+extern void GLAPIENTRY
+_mesa_VertexArrayVertexAttribDivisorEXT(GLuint vaobj, GLuint index, GLuint divisor);
static inline unsigned
_mesa_primitive_restart_index(const struct gl_context *ctx,
More information about the mesa-commit
mailing list