[Mesa-dev] [PATCH] Expose support for OES/EXT_draw_elements_base_vertex to OpenGL ES.
Ilia Mirkin
imirkin at alum.mit.edu
Mon Nov 2 16:48:07 PST 2015
On Mon, Nov 2, 2015 at 7:46 PM, Ian Romanick <idr at freedesktop.org> wrote:
> 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.
FWIW I already pushed this last night. I made some final very minor adjustments.
http://cgit.freedesktop.org/mesa/mesa/commit/?id=af7c98a9c75b17fc8c8ed0989aa732766e5b06d1
More information about the mesa-dev
mailing list