[Mesa-dev] [PATCH v2 02/23] mesa: add KHR_no_error support for glVertexArrayVertexBuffers()
Samuel Pitoiset
samuel.pitoiset at gmail.com
Tue Jun 6 12:20:29 UTC 2017
On 06/06/2017 12:57 PM, Samuel Pitoiset wrote:
>
>
> On 06/06/2017 01:04 AM, Fredrik Höglund wrote:
>> On Monday 05 June 2017, Samuel Pitoiset wrote:
>>> Signed-off-by: Samuel Pitoiset <samuel.pitoiset at gmail.com>
>>> Reviewed-by: Timothy Arceri <tarceri at itsqueeze.com>
>>> ---
>>> src/mapi/glapi/gen/ARB_direct_state_access.xml | 2 +-
>>> src/mesa/main/varray.c | 15 +++++++++++++++
>>> src/mesa/main/varray.h | 6 ++++++
>>> 3 files changed, 22 insertions(+), 1 deletion(-)
>>>
>>> diff --git a/src/mapi/glapi/gen/ARB_direct_state_access.xml
>>> b/src/mapi/glapi/gen/ARB_direct_state_access.xml
>>> index f13a1444a9..cb24d7981c 100644
>>> --- a/src/mapi/glapi/gen/ARB_direct_state_access.xml
>>> +++ b/src/mapi/glapi/gen/ARB_direct_state_access.xml
>>> @@ -607,7 +607,7 @@
>>> <param name="stride" type="GLsizei" />
>>> </function>
>>> - <function name="VertexArrayVertexBuffers">
>>> + <function name="VertexArrayVertexBuffers" no_error="true">
>>> <param name="vaobj" type="GLuint" />
>>> <param name="first" type="GLuint" />
>>> <param name="count" type="GLsizei" />
>>> diff --git a/src/mesa/main/varray.c b/src/mesa/main/varray.c
>>> index c2c771c173..0cc8b56c64 100644
>>> --- a/src/mesa/main/varray.c
>>> +++ b/src/mesa/main/varray.c
>>> @@ -2273,6 +2273,21 @@ _mesa_BindVertexBuffers(GLuint first, GLsizei
>>> count, const GLuint *buffers,
>>> void GLAPIENTRY
>>> +_mesa_VertexArrayVertexBuffers_no_error(GLuint vaobj, GLuint first,
>>> + GLsizei count, const GLuint
>>> *buffers,
>>> + const GLintptr *offsets,
>>> + const GLsizei *strides)
>>> +{
>>> + GET_CURRENT_CONTEXT(ctx);
>>> +
>>> + struct gl_vertex_array_object *vao = _mesa_lookup_vao(ctx, vaobj);
>>
>> _mesa_lookup_vao_err() has an optimization for DSA entry points
>> in that it keeps a reference to the last looked up VAO in the context,
>> and checks if the ID of that object matches the requested ID before
>> it calls _mesa_HashLookup(). The idea is that when a client makes a
>> series of calls like this:
>>
>> glVertexArrayAttribFormat(vaobj, ...);
>> glVertexArrayAttribBinding(vaobj, ...);
>> glEnableVertexArrayAttrib(vaobj, ...);
>>
>> We only look up the object once.
>>
>> By using _mesa_lookup_vao() here, you bypass that optimization.
>>
>> That being said, glVertexArrayVertexBuffers() may be the one vertex
>> array function that doesn't benefit from that optimization.
>
> Your are right, thanks for reporting this. I will probably change this
> to try to keep that optimization.
Oh well, that optimization has been removed to
glVertexArrayVertexBuffer() when Timothy added KHR_no_error.
I would prefer to keep this patch as-is for now and rework that area in
a separate series. One thing we can do too is to replace _mesa_HashTable
with an ordinary hash table, and probably some other improvements here
and there.
>
>>
>>> + vertex_array_vertex_buffers(ctx, vao, first, count,
>>> + buffers, offsets, strides, true,
>>> + "glVertexArrayVertexBuffers");
>>> +}
>>> +
>>> +
>>> +void GLAPIENTRY
>>> _mesa_VertexArrayVertexBuffers(GLuint vaobj, GLuint first, GLsizei
>>> count,
>>> const GLuint *buffers,
>>> const GLintptr *offsets, const
>>> GLsizei *strides)
>>> diff --git a/src/mesa/main/varray.h b/src/mesa/main/varray.h
>>> index 24e37a9bf7..90ca8483ca 100644
>>> --- a/src/mesa/main/varray.h
>>> +++ b/src/mesa/main/varray.h
>>> @@ -379,6 +379,12 @@ extern void GLAPIENTRY
>>> _mesa_BindVertexBuffers(GLuint first, GLsizei count, const GLuint
>>> *buffers,
>>> const GLintptr *offsets, const GLsizei
>>> *strides);
>>> +void GLAPIENTRY
>>> +_mesa_VertexArrayVertexBuffers_no_error(GLuint vaobj, GLuint first,
>>> + GLsizei count, const GLuint
>>> *buffers,
>>> + const GLintptr *offsets,
>>> + const GLsizei *strides);
>>> +
>>> extern void GLAPIENTRY
>>> _mesa_VertexArrayVertexBuffers(GLuint vaobj, GLuint first, GLsizei
>>> count,
>>> const GLuint *buffers,
>>>
>>
More information about the mesa-dev
mailing list