From 41671ec544dc76e7eb926910e3db69803550c3aa Mon Sep 17 00:00:00 2001 From: =?utf8?q?Marek=20Ol=C5=A1=C3=A1k?= Date: Sun, 22 Mar 2020 19:35:28 -0400 Subject: [PATCH] mesa: remove exec="dynamic" from Draw functions that are not really dynamic Acked-by: Pierre-Eric Pelloux-Prayer Part-of: --- src/mapi/glapi/gen/ARB_base_instance.xml | 6 +- .../gen/ARB_draw_elements_base_vertex.xml | 2 +- src/mapi/glapi/gen/ARB_draw_indirect.xml | 12 +- src/mapi/glapi/gen/ARB_draw_instanced.xml | 4 +- .../glapi/gen/ARB_indirect_parameters.xml | 4 +- src/mapi/glapi/gen/EXT_transform_feedback.xml | 2 +- src/mapi/glapi/gen/es_EXT.xml | 4 +- src/mapi/glapi/gen/gl_API.xml | 10 +- src/mesa/drivers/common/meta.c | 2 +- src/mesa/main/draw.c | 185 +++++++----------- src/mesa/main/draw.h | 77 +++++++- src/mesa/main/tests/dispatch_sanity.cpp | 2 + 12 files changed, 173 insertions(+), 137 deletions(-) diff --git a/src/mapi/glapi/gen/ARB_base_instance.xml b/src/mapi/glapi/gen/ARB_base_instance.xml index f9a7661e952..c4c2a5b99ab 100644 --- a/src/mapi/glapi/gen/ARB_base_instance.xml +++ b/src/mapi/glapi/gen/ARB_base_instance.xml @@ -8,7 +8,7 @@ - @@ -17,7 +17,7 @@ - @@ -27,7 +27,7 @@ - diff --git a/src/mapi/glapi/gen/ARB_draw_elements_base_vertex.xml b/src/mapi/glapi/gen/ARB_draw_elements_base_vertex.xml index 915501a9c28..18940b84223 100644 --- a/src/mapi/glapi/gen/ARB_draw_elements_base_vertex.xml +++ b/src/mapi/glapi/gen/ARB_draw_elements_base_vertex.xml @@ -38,7 +38,7 @@ - diff --git a/src/mapi/glapi/gen/ARB_draw_indirect.xml b/src/mapi/glapi/gen/ARB_draw_indirect.xml index dc50cc3bd9e..6dc1d6feeec 100644 --- a/src/mapi/glapi/gen/ARB_draw_indirect.xml +++ b/src/mapi/glapi/gen/ARB_draw_indirect.xml @@ -8,14 +8,14 @@ - - @@ -28,7 +28,7 @@ - @@ -36,7 +36,7 @@ - @@ -50,14 +50,14 @@ - + - + diff --git a/src/mapi/glapi/gen/ARB_draw_instanced.xml b/src/mapi/glapi/gen/ARB_draw_instanced.xml index 52006c223c3..67846ea1b42 100644 --- a/src/mapi/glapi/gen/ARB_draw_instanced.xml +++ b/src/mapi/glapi/gen/ARB_draw_instanced.xml @@ -8,7 +8,7 @@ - @@ -16,7 +16,7 @@ - diff --git a/src/mapi/glapi/gen/ARB_indirect_parameters.xml b/src/mapi/glapi/gen/ARB_indirect_parameters.xml index 7d4f15d8250..2739f153875 100644 --- a/src/mapi/glapi/gen/ARB_indirect_parameters.xml +++ b/src/mapi/glapi/gen/ARB_indirect_parameters.xml @@ -8,7 +8,7 @@ - @@ -18,7 +18,7 @@ - diff --git a/src/mapi/glapi/gen/EXT_transform_feedback.xml b/src/mapi/glapi/gen/EXT_transform_feedback.xml index 9982a3f81a5..604ab7cd0d5 100644 --- a/src/mapi/glapi/gen/EXT_transform_feedback.xml +++ b/src/mapi/glapi/gen/EXT_transform_feedback.xml @@ -108,7 +108,7 @@ - + diff --git a/src/mapi/glapi/gen/es_EXT.xml b/src/mapi/glapi/gen/es_EXT.xml index a5653313605..de3c14dafed 100644 --- a/src/mapi/glapi/gen/es_EXT.xml +++ b/src/mapi/glapi/gen/es_EXT.xml @@ -1101,7 +1101,7 @@ + es2="3.0"> @@ -1243,7 +1243,7 @@ + es2="3.0"> diff --git a/src/mapi/glapi/gen/gl_API.xml b/src/mapi/glapi/gen/gl_API.xml index 39c80dabbf4..d421e778091 100644 --- a/src/mapi/glapi/gen/gl_API.xml +++ b/src/mapi/glapi/gen/gl_API.xml @@ -2523,7 +2523,7 @@ - + @@ -2535,7 +2535,7 @@ - + @@ -8144,7 +8144,7 @@ - + @@ -8192,13 +8192,13 @@ - + - + diff --git a/src/mesa/drivers/common/meta.c b/src/mesa/drivers/common/meta.c index 30116721c7e..ad289a54bff 100644 --- a/src/mesa/drivers/common/meta.c +++ b/src/mesa/drivers/common/meta.c @@ -1861,7 +1861,7 @@ meta_clear(struct gl_context *ctx, GLbitfield buffers, bool glsl) /* draw quad(s) */ if (fb->MaxNumLayers > 0) { - _mesa_DrawArraysInstanced(GL_TRIANGLE_FAN, 0, 4, fb->MaxNumLayers); + _mesa_DrawArraysInstancedARB(GL_TRIANGLE_FAN, 0, 4, fb->MaxNumLayers); } else { _mesa_DrawArrays(GL_TRIANGLE_FAN, 0, 4); } diff --git a/src/mesa/main/draw.c b/src/mesa/main/draw.c index 253e2fdbee7..686a065ffb5 100644 --- a/src/mesa/main/draw.c +++ b/src/mesa/main/draw.c @@ -392,8 +392,8 @@ _mesa_exec_Rectf(GLfloat x1, GLfloat y1, GLfloat x2, GLfloat y2) } -static void GLAPIENTRY -_mesa_exec_EvalMesh1(GLenum mode, GLint i1, GLint i2) +void GLAPIENTRY +_mesa_EvalMesh1(GLenum mode, GLint i1, GLint i2) { GET_CURRENT_CONTEXT(ctx); GLint i; @@ -428,8 +428,8 @@ _mesa_exec_EvalMesh1(GLenum mode, GLint i1, GLint i2) } -static void GLAPIENTRY -_mesa_exec_EvalMesh2(GLenum mode, GLint i1, GLint i2, GLint j1, GLint j2) +void GLAPIENTRY +_mesa_EvalMesh2(GLenum mode, GLint i1, GLint i2, GLint j1, GLint j2) { GET_CURRENT_CONTEXT(ctx); GLfloat u, du, v, dv, v1, u1; @@ -534,8 +534,8 @@ _mesa_DrawArrays(GLenum mode, GLint start, GLsizei count) * display list mode). */ void GLAPIENTRY -_mesa_DrawArraysInstanced(GLenum mode, GLint start, GLsizei count, - GLsizei numInstances) +_mesa_DrawArraysInstancedARB(GLenum mode, GLint start, GLsizei count, + GLsizei numInstances) { GET_CURRENT_CONTEXT(ctx); @@ -569,10 +569,10 @@ _mesa_DrawArraysInstanced(GLenum mode, GLint start, GLsizei count, /** * Called from glDrawArraysInstancedBaseInstance when in immediate mode. */ -static void GLAPIENTRY -_mesa_exec_DrawArraysInstancedBaseInstance(GLenum mode, GLint first, - GLsizei count, GLsizei numInstances, - GLuint baseInstance) +void GLAPIENTRY +_mesa_DrawArraysInstancedBaseInstance(GLenum mode, GLint first, + GLsizei count, GLsizei numInstances, + GLuint baseInstance) { GET_CURRENT_CONTEXT(ctx); @@ -1025,9 +1025,9 @@ _mesa_DrawElementsBaseVertex(GLenum mode, GLsizei count, GLenum type, /** * Called by glDrawElementsInstanced() in immediate mode. */ -static void GLAPIENTRY -_mesa_exec_DrawElementsInstanced(GLenum mode, GLsizei count, GLenum type, - const GLvoid * indices, GLsizei numInstances) +void GLAPIENTRY +_mesa_DrawElementsInstancedARB(GLenum mode, GLsizei count, GLenum type, + const GLvoid * indices, GLsizei numInstances) { GET_CURRENT_CONTEXT(ctx); @@ -1057,11 +1057,11 @@ _mesa_exec_DrawElementsInstanced(GLenum mode, GLsizei count, GLenum type, /** * Called by glDrawElementsInstancedBaseVertex() in immediate mode. */ -static void GLAPIENTRY -_mesa_exec_DrawElementsInstancedBaseVertex(GLenum mode, GLsizei count, - GLenum type, const GLvoid * indices, - GLsizei numInstances, - GLint basevertex) +void GLAPIENTRY +_mesa_DrawElementsInstancedBaseVertex(GLenum mode, GLsizei count, + GLenum type, const GLvoid * indices, + GLsizei numInstances, + GLint basevertex) { GET_CURRENT_CONTEXT(ctx); @@ -1095,12 +1095,12 @@ _mesa_exec_DrawElementsInstancedBaseVertex(GLenum mode, GLsizei count, /** * Called by glDrawElementsInstancedBaseInstance() in immediate mode. */ -static void GLAPIENTRY -_mesa_exec_DrawElementsInstancedBaseInstance(GLenum mode, GLsizei count, - GLenum type, - const GLvoid *indices, - GLsizei numInstances, - GLuint baseInstance) +void GLAPIENTRY +_mesa_DrawElementsInstancedBaseInstance(GLenum mode, GLsizei count, + GLenum type, + const GLvoid *indices, + GLsizei numInstances, + GLuint baseInstance) { GET_CURRENT_CONTEXT(ctx); @@ -1134,14 +1134,14 @@ _mesa_exec_DrawElementsInstancedBaseInstance(GLenum mode, GLsizei count, /** * Called by glDrawElementsInstancedBaseVertexBaseInstance() in immediate mode. */ -static void GLAPIENTRY -_mesa_exec_DrawElementsInstancedBaseVertexBaseInstance(GLenum mode, - GLsizei count, - GLenum type, - const GLvoid *indices, - GLsizei numInstances, - GLint basevertex, - GLuint baseInstance) +void GLAPIENTRY +_mesa_DrawElementsInstancedBaseVertexBaseInstance(GLenum mode, + GLsizei count, + GLenum type, + const GLvoid *indices, + GLsizei numInstances, + GLint basevertex, + GLuint baseInstance) { GET_CURRENT_CONTEXT(ctx); @@ -1424,8 +1424,8 @@ _mesa_DrawTransformFeedback(GLenum mode, GLuint name) } -static void GLAPIENTRY -_mesa_exec_DrawTransformFeedbackStream(GLenum mode, GLuint name, GLuint stream) +void GLAPIENTRY +_mesa_DrawTransformFeedbackStream(GLenum mode, GLuint name, GLuint stream) { GET_CURRENT_CONTEXT(ctx); struct gl_transform_feedback_object *obj = @@ -1439,9 +1439,9 @@ _mesa_exec_DrawTransformFeedbackStream(GLenum mode, GLuint name, GLuint stream) } -static void GLAPIENTRY -_mesa_exec_DrawTransformFeedbackInstanced(GLenum mode, GLuint name, - GLsizei primcount) +void GLAPIENTRY +_mesa_DrawTransformFeedbackInstanced(GLenum mode, GLuint name, + GLsizei primcount) { GET_CURRENT_CONTEXT(ctx); struct gl_transform_feedback_object *obj = @@ -1455,10 +1455,10 @@ _mesa_exec_DrawTransformFeedbackInstanced(GLenum mode, GLuint name, } -static void GLAPIENTRY -_mesa_exec_DrawTransformFeedbackStreamInstanced(GLenum mode, GLuint name, - GLuint stream, - GLsizei primcount) +void GLAPIENTRY +_mesa_DrawTransformFeedbackStreamInstanced(GLenum mode, GLuint name, + GLuint stream, + GLsizei primcount) { GET_CURRENT_CONTEXT(ctx); struct gl_transform_feedback_object *obj = @@ -1525,8 +1525,8 @@ _mesa_validated_multidrawelementsindirect(struct gl_context *ctx, * Like [Multi]DrawArrays/Elements, but they take most arguments from * a buffer object. */ -static void GLAPIENTRY -_mesa_exec_DrawArraysIndirect(GLenum mode, const GLvoid *indirect) +void GLAPIENTRY +_mesa_DrawArraysIndirect(GLenum mode, const GLvoid *indirect) { GET_CURRENT_CONTEXT(ctx); @@ -1545,9 +1545,9 @@ _mesa_exec_DrawArraysIndirect(GLenum mode, const GLvoid *indirect) !ctx->DrawIndirectBuffer) { DrawArraysIndirectCommand *cmd = (DrawArraysIndirectCommand *) indirect; - _mesa_exec_DrawArraysInstancedBaseInstance(mode, cmd->first, cmd->count, - cmd->primCount, - cmd->baseInstance); + _mesa_DrawArraysInstancedBaseInstance(mode, cmd->first, cmd->count, + cmd->primCount, + cmd->baseInstance); return; } @@ -1571,8 +1571,8 @@ _mesa_exec_DrawArraysIndirect(GLenum mode, const GLvoid *indirect) } -static void GLAPIENTRY -_mesa_exec_DrawElementsIndirect(GLenum mode, GLenum type, const GLvoid *indirect) +void GLAPIENTRY +_mesa_DrawElementsIndirect(GLenum mode, GLenum type, const GLvoid *indirect) { GET_CURRENT_CONTEXT(ctx); @@ -1608,11 +1608,11 @@ _mesa_exec_DrawElementsIndirect(GLenum mode, GLenum type, const GLvoid *indirect void *offset = (void *) (uintptr_t)((cmd->firstIndex * _mesa_sizeof_type(type)) & 0xffffffffUL); - _mesa_exec_DrawElementsInstancedBaseVertexBaseInstance(mode, cmd->count, - type, offset, - cmd->primCount, - cmd->baseVertex, - cmd->baseInstance); + _mesa_DrawElementsInstancedBaseVertexBaseInstance(mode, cmd->count, + type, offset, + cmd->primCount, + cmd->baseVertex, + cmd->baseInstance); } return; @@ -1639,9 +1639,9 @@ _mesa_exec_DrawElementsIndirect(GLenum mode, GLenum type, const GLvoid *indirect } -static void GLAPIENTRY -_mesa_exec_MultiDrawArraysIndirect(GLenum mode, const GLvoid *indirect, - GLsizei primcount, GLsizei stride) +void GLAPIENTRY +_mesa_MultiDrawArraysIndirect(GLenum mode, const GLvoid *indirect, + GLsizei primcount, GLsizei stride) { GET_CURRENT_CONTEXT(ctx); @@ -1670,9 +1670,9 @@ _mesa_exec_MultiDrawArraysIndirect(GLenum mode, const GLvoid *indirect, const uint8_t *ptr = (const uint8_t *) indirect; for (unsigned i = 0; i < primcount; i++) { DrawArraysIndirectCommand *cmd = (DrawArraysIndirectCommand *) ptr; - _mesa_exec_DrawArraysInstancedBaseInstance(mode, cmd->first, - cmd->count, cmd->primCount, - cmd->baseInstance); + _mesa_DrawArraysInstancedBaseInstance(mode, cmd->first, + cmd->count, cmd->primCount, + cmd->baseInstance); if (stride == 0) { ptr += sizeof(DrawArraysIndirectCommand); @@ -1705,10 +1705,10 @@ _mesa_exec_MultiDrawArraysIndirect(GLenum mode, const GLvoid *indirect, } -static void GLAPIENTRY -_mesa_exec_MultiDrawElementsIndirect(GLenum mode, GLenum type, - const GLvoid *indirect, - GLsizei primcount, GLsizei stride) +void GLAPIENTRY +_mesa_MultiDrawElementsIndirect(GLenum mode, GLenum type, + const GLvoid *indirect, + GLsizei primcount, GLsizei stride) { GET_CURRENT_CONTEXT(ctx); @@ -1751,7 +1751,7 @@ _mesa_exec_MultiDrawElementsIndirect(GLenum mode, GLenum type, const uint8_t *ptr = (const uint8_t *) indirect; for (unsigned i = 0; i < primcount; i++) { - _mesa_exec_DrawElementsIndirect(mode, type, ptr); + _mesa_DrawElementsIndirect(mode, type, ptr); if (stride == 0) { ptr += sizeof(DrawElementsIndirectCommand); @@ -1785,10 +1785,10 @@ _mesa_exec_MultiDrawElementsIndirect(GLenum mode, GLenum type, } -static void GLAPIENTRY -_mesa_exec_MultiDrawArraysIndirectCount(GLenum mode, GLintptr indirect, - GLintptr drawcount_offset, - GLsizei maxdrawcount, GLsizei stride) +void GLAPIENTRY +_mesa_MultiDrawArraysIndirectCountARB(GLenum mode, GLintptr indirect, + GLintptr drawcount_offset, + GLsizei maxdrawcount, GLsizei stride) { GET_CURRENT_CONTEXT(ctx); @@ -1827,11 +1827,11 @@ _mesa_exec_MultiDrawArraysIndirectCount(GLenum mode, GLintptr indirect, } -static void GLAPIENTRY -_mesa_exec_MultiDrawElementsIndirectCount(GLenum mode, GLenum type, - GLintptr indirect, - GLintptr drawcount_offset, - GLsizei maxdrawcount, GLsizei stride) +void GLAPIENTRY +_mesa_MultiDrawElementsIndirectCountARB(GLenum mode, GLenum type, + GLintptr indirect, + GLintptr drawcount_offset, + GLsizei maxdrawcount, GLsizei stride) { GET_CURRENT_CONTEXT(ctx); @@ -1889,8 +1889,6 @@ _mesa_initialize_exec_dispatch(const struct gl_context *ctx, if (ctx->API == API_OPENGL_COMPAT) { SET_Rectf(exec, _mesa_exec_Rectf); - SET_EvalMesh1(exec, _mesa_exec_EvalMesh1); - SET_EvalMesh2(exec, _mesa_exec_EvalMesh2); } if (ctx->API != API_OPENGLES && @@ -1902,45 +1900,8 @@ _mesa_initialize_exec_dispatch(const struct gl_context *ctx, if (_mesa_is_desktop_gl(ctx) || _mesa_is_gles3(ctx)) { SET_DrawRangeElementsBaseVertex(exec, _mesa_DrawRangeElementsBaseVertex); - SET_DrawElementsInstancedBaseVertex(exec, - _mesa_exec_DrawElementsInstancedBaseVertex); } } - - if (_mesa_is_desktop_gl(ctx) || _mesa_is_gles3(ctx)) { - SET_DrawArraysInstancedBaseInstance(exec, - _mesa_exec_DrawArraysInstancedBaseInstance); - SET_DrawElementsInstancedBaseInstance(exec, - _mesa_exec_DrawElementsInstancedBaseInstance); - SET_DrawElementsInstancedBaseVertexBaseInstance(exec, - _mesa_exec_DrawElementsInstancedBaseVertexBaseInstance); - } - - if (_mesa_is_desktop_gl(ctx) || _mesa_is_gles31(ctx)) { - SET_DrawArraysIndirect(exec, _mesa_exec_DrawArraysIndirect); - SET_DrawElementsIndirect(exec, _mesa_exec_DrawElementsIndirect); - } - - if (_mesa_is_desktop_gl(ctx) || _mesa_is_gles3(ctx)) { - SET_DrawArraysInstancedARB(exec, _mesa_DrawArraysInstanced); - SET_DrawElementsInstancedARB(exec, _mesa_exec_DrawElementsInstanced); - } - - if (_mesa_is_desktop_gl(ctx)) { - SET_DrawTransformFeedback(exec, _mesa_DrawTransformFeedback); - SET_DrawTransformFeedbackStream(exec, - _mesa_exec_DrawTransformFeedbackStream); - SET_DrawTransformFeedbackInstanced(exec, - _mesa_exec_DrawTransformFeedbackInstanced); - SET_DrawTransformFeedbackStreamInstanced(exec, - _mesa_exec_DrawTransformFeedbackStreamInstanced); - SET_MultiDrawArraysIndirect(exec, _mesa_exec_MultiDrawArraysIndirect); - SET_MultiDrawElementsIndirect(exec, _mesa_exec_MultiDrawElementsIndirect); - SET_MultiDrawArraysIndirectCountARB(exec, - _mesa_exec_MultiDrawArraysIndirectCount); - SET_MultiDrawElementsIndirectCountARB(exec, - _mesa_exec_MultiDrawElementsIndirectCount); - } } diff --git a/src/mesa/main/draw.h b/src/mesa/main/draw.h index d815d6d1bfd..212e70a3fd4 100644 --- a/src/mesa/main/draw.h +++ b/src/mesa/main/draw.h @@ -81,15 +81,88 @@ void _mesa_initialize_exec_dispatch(const struct gl_context *ctx, struct _glapi_table *exec); +void GLAPIENTRY +_mesa_EvalMesh1(GLenum mode, GLint i1, GLint i2); + +void GLAPIENTRY +_mesa_EvalMesh2(GLenum mode, GLint i1, GLint i2, GLint j1, GLint j2); + +void GLAPIENTRY +_mesa_DrawElementsInstancedARB(GLenum mode, GLsizei count, GLenum type, + const GLvoid * indices, GLsizei numInstances); + +void GLAPIENTRY +_mesa_DrawArraysInstancedBaseInstance(GLenum mode, GLint first, + GLsizei count, GLsizei numInstances, + GLuint baseInstance); + +void GLAPIENTRY +_mesa_DrawElementsInstancedBaseVertex(GLenum mode, GLsizei count, + GLenum type, const GLvoid * indices, + GLsizei numInstances, + GLint basevertex); + +void GLAPIENTRY +_mesa_DrawElementsInstancedBaseInstance(GLenum mode, GLsizei count, + GLenum type, + const GLvoid *indices, + GLsizei numInstances, + GLuint baseInstance); + +void GLAPIENTRY +_mesa_DrawTransformFeedbackStream(GLenum mode, GLuint name, GLuint stream); + +void GLAPIENTRY +_mesa_DrawTransformFeedbackInstanced(GLenum mode, GLuint name, + GLsizei primcount); + +void GLAPIENTRY +_mesa_DrawTransformFeedbackStreamInstanced(GLenum mode, GLuint name, + GLuint stream, + GLsizei primcount); + +void GLAPIENTRY +_mesa_DrawArraysIndirect(GLenum mode, const GLvoid *indirect); + +void GLAPIENTRY +_mesa_DrawElementsIndirect(GLenum mode, GLenum type, const GLvoid *indirect); + +void GLAPIENTRY +_mesa_MultiDrawArraysIndirect(GLenum mode, const GLvoid *indirect, + GLsizei primcount, GLsizei stride); + +void GLAPIENTRY +_mesa_MultiDrawElementsIndirect(GLenum mode, GLenum type, + const GLvoid *indirect, + GLsizei primcount, GLsizei stride); + +void GLAPIENTRY +_mesa_MultiDrawArraysIndirectCountARB(GLenum mode, GLintptr indirect, + GLintptr drawcount_offset, + GLsizei maxdrawcount, GLsizei stride); + +void GLAPIENTRY +_mesa_MultiDrawElementsIndirectCountARB(GLenum mode, GLenum type, + GLintptr indirect, + GLintptr drawcount_offset, + GLsizei maxdrawcount, GLsizei stride); void GLAPIENTRY _mesa_DrawArrays(GLenum mode, GLint first, GLsizei count); void GLAPIENTRY -_mesa_DrawArraysInstanced(GLenum mode, GLint first, GLsizei count, - GLsizei primcount); +_mesa_DrawArraysInstancedARB(GLenum mode, GLint first, GLsizei count, + GLsizei primcount); +void GLAPIENTRY +_mesa_DrawElementsInstancedBaseVertexBaseInstance(GLenum mode, + GLsizei count, + GLenum type, + const GLvoid *indices, + GLsizei numInstances, + GLint basevertex, + GLuint baseInstance); void GLAPIENTRY _mesa_DrawElements(GLenum mode, GLsizei count, GLenum type, diff --git a/src/mesa/main/tests/dispatch_sanity.cpp b/src/mesa/main/tests/dispatch_sanity.cpp index 0fe3c9c348c..6ff28309c6d 100644 --- a/src/mesa/main/tests/dispatch_sanity.cpp +++ b/src/mesa/main/tests/dispatch_sanity.cpp @@ -2654,6 +2654,8 @@ const struct function gles3_functions_possible[] = { /* EXT_EGL_image_storage */ { "glEGLImageTargetTexStorageEXT", 30, -1 }, + { "glDrawElementsInstancedBaseVertex", 30, -1 }, + { NULL, 0, -1 } }; -- 2.30.2