[Mesa-dev] [PATCH 03/10] mesa: Implement _mesa_array_element by walking enabled arrays.

Brian Paul brianp at vmware.com
Fri May 3 12:40:26 UTC 2019


On 05/02/2019 11:18 PM, Mathias Fröhlich wrote:
> Hi Brian,
> 
> On Friday, 3 May 2019 00:17:51 CEST Brian Paul wrote:
>> On 05/02/2019 03:27 AM, Mathias.Froehlich at gmx.net wrote:
>>> From: Mathias Fröhlich <mathias.froehlich at web.de>
>>>
>>> In glArrayElement, use the bitmask trick to just walk the enabled
>>> vao arrays. This should be about equivalent in execution time to
>>> walk the prepare aelt_context list. Finally this will allow us to
>>> reduce the _mesa_update_state calls in a few patches.
>>>
>>> Signed-off-by: Mathias Fröhlich <Mathias.Froehlich at web.de>
>>> ---
>>>    src/mesa/main/api_arrayelt.c | 78 ++++++++++++++++++++++++++++--------
>>>    1 file changed, 61 insertions(+), 17 deletions(-)
>>>
>>> diff --git a/src/mesa/main/api_arrayelt.c b/src/mesa/main/api_arrayelt.c
>>> index d46c8d14b68..62f1e73ca4c 100644
>>> --- a/src/mesa/main/api_arrayelt.c
>>> +++ b/src/mesa/main/api_arrayelt.c
>>> @@ -1541,32 +1541,76 @@ _ae_update_state(struct gl_context *ctx)
>>>    }
>>>
>>>
>>> +static inline attrib_func
>>> +func_nv(const struct gl_vertex_format *vformat)
>>> +{
>>> +   return AttribFuncsNV[vformat->Normalized][vformat->Size-1]
>>> +      [TYPE_IDX(vformat->Type)];
>>> +}
>>> +
>>> +
>>> +static inline attrib_func
>>> +func_arb(const struct gl_vertex_format *vformat)
>>> +{
>>> +   return AttribFuncsARB[NORM_IDX(vformat)][vformat->Size-1]
>>> +      [TYPE_IDX(vformat->Type)];
>>> +}
>>> +
>>> +
>>> +static inline const void *
>>> +attrib_src(const struct gl_vertex_array_object *vao,
>>> +           const struct gl_array_attributes *array, GLint elt)
>>> +{
>>> +   const struct gl_vertex_buffer_binding *binding =
>>> +      &vao->BufferBinding[array->BufferBindingIndex];
>>> +   const GLubyte *src
>>> +      = ADD_POINTERS(binding->BufferObj->Mappings[MAP_INTERNAL].Pointer,
>>> +                     _mesa_vertex_attrib_address(array, binding))
>>> +      + elt * binding->Stride;
>>> +   return src;
>>> +}
>>
>> Could you add some brief comments on those functions to explain what
>> they do?
> 
> Added brief comments:
> 
> /*
>   * Return VertexAttrib*NV function pointer matching the provided vertex format.
>   */
> static inline attrib_func
> func_nv(const struct gl_vertex_format *vformat)
> 
> [...]
> 
> /*
>   * Return VertexAttrib*ARB function pointer matching the provided vertex format.
>   */
> static inline attrib_func
> func_arb(const struct gl_vertex_format *vformat)
> 
> [...]
> 
> /*
>   * Return the address of the array attribute array at elt in the
>   * vertex array object vao.
>   */
> static inline const void *
> attrib_src(const struct gl_vertex_array_object *vao,
>             const struct gl_array_attributes *array, GLint elt)
> 
> 
>> Otherwise, for the rest of the series,
>> Reviewed-by: Brian Paul <brianp at vmware.com>
>>
>> Nice work!!
> 
> Thanks for looking at the patches!

All your suggested changes look good.

Reviewed-by: Brian Paul <brianp at vmware.com>

Thanks.

-Brian





More information about the mesa-dev mailing list