[Mesa-dev] [PATCH] Expose support for OES/EXT_draw_elements_base_vertex to OpenGL ES.

Ian Romanick idr at freedesktop.org
Mon Nov 2 16:46:55 PST 2015


On 11/01/2015 07:29 PM, Ilia Mirkin wrote:
> On Sun, Nov 1, 2015 at 10:24 PM, Ryan Houdek <sonicadvance1 at gmail.com> wrote:
>> This has been tested with the piglits in the mailing list and
>> on the Dolphin emulator.
>> ---
>>  docs/GL3.txt                                       |  2 +-
>>  docs/relnotes/11.1.0.html                          |  2 +
>>  .../glapi/gen/ARB_draw_elements_base_vertex.xml    |  6 +-
>>  src/mapi/glapi/gen/es_EXT.xml                      | 88 ++++++++++++++++++++++
>>  src/mesa/main/extensions.c                         |  2 +
>>  src/mesa/vbo/vbo_exec_array.c                      | 12 ++-
>>  6 files changed, 105 insertions(+), 7 deletions(-)
>>
>> diff --git a/docs/GL3.txt b/docs/GL3.txt
>> index 7964a5e..7f6b8c9 100644
>> --- a/docs/GL3.txt
>> +++ b/docs/GL3.txt
>> @@ -243,7 +243,7 @@ GLES3.2, GLSL ES 3.2
>>    GL_KHR_texture_compression_astc_ldr                  DONE (i965/gen9+)
>>    GL_OES_copy_image                                    not started (based on GL_ARB_copy_image, which is done for some drivers)
>>    GL_OES_draw_buffers_indexed                          not started
>> -  GL_OES_draw_elements_base_vertex                     not started (based on GL_ARB_draw_elements_base_vertex, which is done for all drivers)
>> +  GL_OES_draw_elements_base_vertex                     DONE (all drivers)
>>    GL_OES_geometry_shader                               not started (based on GL_ARB_geometry_shader4, which is done for all drivers)
>>    GL_OES_gpu_shader5                                   not started (based on parts of GL_ARB_gpu_shader5, which is done for some drivers)
>>    GL_OES_primitive_bounding box                        not started
>> diff --git a/docs/relnotes/11.1.0.html b/docs/relnotes/11.1.0.html
>> index 972361f..7160244 100644
>> --- a/docs/relnotes/11.1.0.html
>> +++ b/docs/relnotes/11.1.0.html
>> @@ -55,6 +55,8 @@ Note: some of the new features are only available with certain drivers.
>>  <li>GL_ARB_texture_barrier / GL_NV_texture_barrier on i965</li>
>>  <li>GL_ARB_texture_query_lod on softpipe</li>
>>  <li>GL_ARB_texture_view on radeonsi</li>
>> +<li>GL_EXT_draw_elements_base_vertex on all drivers</li>
>> +<li>GL_OES_draw_elements_base_vertex on all drivers</li>
>>  <li>EGL_KHR_create_context on softpipe, llvmpipe</li>
>>  <li>EGL_KHR_gl_colorspace on softpipe, llvmpipe</li>
>>  <li>new virgl gallium driver for qemu virtio-gpu</li>
>> 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 120bda1..72aa62c 100644
>> --- a/src/mapi/glapi/gen/ARB_draw_elements_base_vertex.xml
>> +++ b/src/mapi/glapi/gen/ARB_draw_elements_base_vertex.xml
>> @@ -8,7 +8,7 @@
>>
>>  <category name="GL_ARB_draw_elements_base_vertex" number="62">
>>
>> -    <function name="DrawElementsBaseVertex" exec="dynamic">
>> +    <function name="DrawElementsBaseVertex" es2="3.2" exec="dynamic">
>>          <param name="mode" type="GLenum"/>
>>          <param name="count" type="GLsizei"/>
>>          <param name="type" type="GLenum"/>
>> @@ -16,7 +16,7 @@
>>          <param name="basevertex" type="GLint"/>
>>      </function>
>>
>> -    <function name="DrawRangeElementsBaseVertex" exec="dynamic">
>> +    <function name="DrawRangeElementsBaseVertex" es2="3.2" exec="dynamic">
>>          <param name="mode" type="GLenum"/>
>>          <param name="start" type="GLuint"/>
>>          <param name="end" type="GLuint"/>
>> @@ -35,7 +35,7 @@
>>          <param name="basevertex" type="const GLint *"/>
>>      </function>
>>
>> -    <function name="DrawElementsInstancedBaseVertex" exec="dynamic">
>> +    <function name="DrawElementsInstancedBaseVertex" es2="3.2" exec="dynamic">
>>          <param name="mode" type="GLenum"/>
>>          <param name="count" type="GLsizei"/>
>>          <param name="type" type="GLenum"/>
>> diff --git a/src/mapi/glapi/gen/es_EXT.xml b/src/mapi/glapi/gen/es_EXT.xml
>> index cfca5a9..9277285 100644
>> --- a/src/mapi/glapi/gen/es_EXT.xml
>> +++ b/src/mapi/glapi/gen/es_EXT.xml
>> @@ -817,4 +817,92 @@
>>      </function>
>>  </category>
>>
>> +<category name="GL_EXT_draw_elements_base_vertex" number="204">
>> +
>> +       <function name="DrawElementsBaseVertexEXT" alias="DrawElementsBaseVertex"
> 
> indentation fail
> 
>> +            exec="dynamic">
>> +        <param name="mode" type="GLenum"/>
>> +        <param name="count" type="GLsizei"/>
>> +        <param name="type" type="GLenum"/>
>> +        <param name="indices" type="const GLvoid *"/>
>> +        <param name="basevertex" type="GLint"/>
>> +    </function>
>> +
>> +    <function name="DrawRangeElementsBaseVertexEXT" alias="DrawRangeElementsBaseVertex"
>> +            exec="dynamic">
>> +        <param name="mode" type="GLenum"/>
>> +        <param name="start" type="GLuint"/>
>> +        <param name="end" type="GLuint"/>
>> +        <param name="count" type="GLsizei"/>
>> +        <param name="type" type="GLenum"/>
>> +        <param name="indices" type="const GLvoid *"/>
>> +        <param name="basevertex" type="GLint"/>
>> +    </function>
>> +
>> +    <function name="MultiDrawElementsBaseVertexEXT" alias="MultiDrawElementsBaseVertex"
>> +            exec="dynamic">
>> +        <param name="mode" type="GLenum"/>
>> +        <param name="count" type="const GLsizei *"/>
>> +        <param name="type" type="GLenum"/>
>> +        <param name="indices" type="const GLvoid * const *"/>
>> +        <param name="primcount" type="GLsizei"/>
>> +        <param name="basevertex" type="const GLint *"/>
>> +    </function>
>> +
>> +    <function name="DrawElementsInstancedBaseVertexEXT" alias="DrawElementsInstancedBaseVertex"
>> +            exec="dynamic">
>> +        <param name="mode" type="GLenum"/>
>> +        <param name="count" type="GLsizei"/>
>> +        <param name="type" type="GLenum"/>
>> +        <param name="indices" type="const GLvoid *"/>
>> +        <param name="primcount" type="GLsizei"/>
>> +        <param name="basevertex" type="GLint"/>
>> +    </function>
>> +
>> +</category>
>> +
>> +<category name="GL_OES_draw_elements_base_vertex" number="219">
>> +
>> +       <function name="DrawElementsBaseVertexOES" alias="DrawElementsBaseVertex"
> 
> indentation fail. actually perhaps it's the rest of the files that are
> fail... will check what the other bits of it look like.
> 
>> +            exec="dynamic">
>> +        <param name="mode" type="GLenum"/>
>> +        <param name="count" type="GLsizei"/>
>> +        <param name="type" type="GLenum"/>
>> +        <param name="indices" type="const GLvoid *"/>
>> +        <param name="basevertex" type="GLint"/>
>> +    </function>
>> +
>> +    <function name="DrawRangeElementsBaseVertexOES" alias="DrawRangeElementsBaseVertex"
>> +            es2="3.0" exec="dynamic">
>> +        <param name="mode" type="GLenum"/>
>> +        <param name="start" type="GLuint"/>
>> +        <param name="end" type="GLuint"/>
>> +        <param name="count" type="GLsizei"/>
>> +        <param name="type" type="GLenum"/>
>> +        <param name="indices" type="const GLvoid *"/>
>> +        <param name="basevertex" type="GLint"/>
>> +    </function>
>> +
>> +    <function name="MultiDrawElementsBaseVertexOES" alias="MultiDrawElementsBaseVertex"
>> +            exec="dynamic">
>> +        <param name="mode" type="GLenum"/>
>> +        <param name="count" type="const GLsizei *"/>
>> +        <param name="type" type="GLenum"/>
>> +        <param name="indices" type="const GLvoid * const *"/>
>> +        <param name="primcount" type="GLsizei"/>
>> +        <param name="basevertex" type="const GLint *"/>
>> +    </function>
>> +
>> +    <function name="DrawElementsInstancedBaseVertexOES" alias="DrawElementsInstancedBaseVertex"
>> +            es2="3.0" exec="dynamic">
>> +        <param name="mode" type="GLenum"/>
>> +        <param name="count" type="GLsizei"/>
>> +        <param name="type" type="GLenum"/>
>> +        <param name="indices" type="const GLvoid *"/>
>> +        <param name="primcount" type="GLsizei"/>
>> +        <param name="basevertex" type="GLint"/>
>> +    </function>
>> +
>> +</category>
>> +
>>  </OpenGLAPI>
>> diff --git a/src/mesa/main/extensions.c b/src/mesa/main/extensions.c
>> index 64972fa..d964f03 100644
>> --- a/src/mesa/main/extensions.c
>> +++ b/src/mesa/main/extensions.c
>> @@ -230,6 +230,7 @@ static const struct extension extension_table[] = {
>>     { "GL_EXT_depth_bounds_test",                   o(EXT_depth_bounds_test),                   GL,             2002 },
>>     { "GL_EXT_draw_buffers",                        o(dummy_true),                                         ES2, 2012 },
>>     { "GL_EXT_draw_buffers2",                       o(EXT_draw_buffers2),                       GL,             2006 },
>> +   { "GL_EXT_draw_elements_base_vertex",           o(ARB_draw_elements_base_vertex),                      ES2, 2014 },
>>     { "GL_EXT_draw_instanced",                      o(ARB_draw_instanced),                      GL,             2006 },
>>     { "GL_EXT_draw_range_elements",                 o(dummy_true),                              GLL,            1997 },
>>     { "GL_EXT_fog_coord",                           o(dummy_true),                              GLL,            1999 },
>> @@ -306,6 +307,7 @@ static const struct extension extension_table[] = {
>>     { "GL_OES_depth32",                             o(dummy_false),                     DISABLE,                2005 },
>>     { "GL_OES_depth_texture",                       o(ARB_depth_texture),                                  ES2, 2006 },
>>     { "GL_OES_depth_texture_cube_map",              o(OES_depth_texture_cube_map),                         ES2, 2012 },
>> +   { "GL_OES_draw_elements_base_vertex",           o(ARB_draw_elements_base_vertex),                      ES2, 2014 },
>>     { "GL_OES_draw_texture",                        o(OES_draw_texture),                             ES1,       2004 },
>>     { "GL_OES_EGL_sync",                            o(dummy_true),                                   ES1 | ES2, 2010 },
>>     /*  FIXME: Mesa expects GL_OES_EGL_image to be available in OpenGL contexts. */
>> diff --git a/src/mesa/vbo/vbo_exec_array.c b/src/mesa/vbo/vbo_exec_array.c
>> index 34d2c1d..af22f0a 100644
>> --- a/src/mesa/vbo/vbo_exec_array.c
>> +++ b/src/mesa/vbo/vbo_exec_array.c
>> @@ -1807,13 +1807,19 @@ vbo_initialize_exec_dispatch(const struct gl_context *ctx,
>>        SET_EvalMesh2(exec, vbo_exec_EvalMesh2);
>>     }
>>
>> -   if (_mesa_is_desktop_gl(ctx)) {
>> +   if (ctx->API != API_OPENGLES2 && ctx->Extensions.ARB_draw_elements_base_vertex) {
> 
> != OPENGLES :)
> 
>>        SET_DrawElementsBaseVertex(exec, vbo_exec_DrawElementsBaseVertex);
>> -      SET_DrawRangeElementsBaseVertex(exec, vbo_exec_DrawRangeElementsBaseVertex);
>>        SET_MultiDrawElementsBaseVertex(exec, vbo_exec_MultiDrawElementsBaseVertex);
>> +
>> +       if (_mesa_is_desktop_gl(ctx) || _mesa_is_gles3(ctx)) {
> 
> indentation still fail.
> 
> I'll fix these up myself before pushing, I guess... it's getting
> trivial enough. But in the future, please pay attention to such
> details.
> 
> Reviewed-by: Ilia Mirkin <imirkin at alum.mit.edu>

With Ilia's requested changes,

Reviewed-by: Ian Romanick <ian.d.romanick at intel.com>

Also... please use the [PATCH v2], etc. notation.  When there were four
patches in my inbox with exactly the same subject, it was confusing
which one to review.

> 
>> +         SET_DrawRangeElementsBaseVertex(exec, vbo_exec_DrawRangeElementsBaseVertex);
>> +         SET_DrawElementsInstancedBaseVertex(exec, vbo_exec_DrawElementsInstancedBaseVertex);
>> +       }
>> +   }
>> +
>> +   if (_mesa_is_desktop_gl(ctx)) {
>>        SET_DrawArraysInstancedBaseInstance(exec, vbo_exec_DrawArraysInstancedBaseInstance);
>>        SET_DrawElementsInstancedBaseInstance(exec, vbo_exec_DrawElementsInstancedBaseInstance);
>> -      SET_DrawElementsInstancedBaseVertex(exec, vbo_exec_DrawElementsInstancedBaseVertex);
>>        SET_DrawElementsInstancedBaseVertexBaseInstance(exec, vbo_exec_DrawElementsInstancedBaseVertexBaseInstance);
>>     }
>>
>> --
>> 2.5.0
>>
>> _______________________________________________
>> mesa-dev mailing list
>> mesa-dev at lists.freedesktop.org
>> http://lists.freedesktop.org/mailman/listinfo/mesa-dev
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/mesa-dev
> 



More information about the mesa-dev mailing list