[Mesa-dev] [PATCH] mesa: shrink size of gl_array_attributes (v2)

Marek Olšák maraeo at gmail.com
Mon Jan 29 22:25:33 UTC 2018


Reviewed-by: Marek Olšák <marek.olsak at amd.com>

Marek

On Mon, Jan 29, 2018 at 11:22 PM, Brian Paul <brianp at vmware.com> wrote:
> Inspired by Marek's earlier patch, but even smaller.  Sort fields from
> largest to smallest.  Use bitfields for more fields (sometimes with an
> extra bit for MSVC).  Reduce Stride field to GLshort.
>
> Note that some fields cannot be bitfields because they're accessed via
> pointers (such as for glEnableClientState(GL_VERTEX_ARRAY) to set the
> Enabled field).
>
> Reduces size from 48 to 24 bytes.
> Also reduces size of gl_vertex_array_object from 3632 to 2864 bytes.
>
> And add some assertions in init_array().
>
> v2: use s/GLuint/unsigned/, improve commit comments.
> ---
>  src/mesa/main/arrayobj.c |  4 ++++
>  src/mesa/main/mtypes.h   | 20 +++++++++++---------
>  2 files changed, 15 insertions(+), 9 deletions(-)
>
> diff --git a/src/mesa/main/arrayobj.c b/src/mesa/main/arrayobj.c
> index 1951638..7208f4c 100644
> --- a/src/mesa/main/arrayobj.c
> +++ b/src/mesa/main/arrayobj.c
> @@ -233,7 +233,9 @@ init_array(struct gl_context *ctx,
>             struct gl_vertex_array_object *vao,
>             gl_vert_attrib index, GLint size, GLint type)
>  {
> +   assert(index < ARRAY_SIZE(vao->VertexAttrib));
>     struct gl_array_attributes *array = &vao->VertexAttrib[index];
> +   assert(index < ARRAY_SIZE(vao->BufferBinding));
>     struct gl_vertex_buffer_binding *binding = &vao->BufferBinding[index];
>
>     array->Size = size;
> @@ -247,6 +249,8 @@ init_array(struct gl_context *ctx,
>     array->Integer = GL_FALSE;
>     array->Doubles = GL_FALSE;
>     array->_ElementSize = size * _mesa_sizeof_type(type);
> +   ASSERT_BITFIELD_SIZE(struct gl_array_attributes, BufferBindingIndex,
> +                        VERT_ATTRIB_MAX - 1);
>     array->BufferBindingIndex = index;
>
>     binding->Offset = 0;
> diff --git a/src/mesa/main/mtypes.h b/src/mesa/main/mtypes.h
> index 329402a..dccc152 100644
> --- a/src/mesa/main/mtypes.h
> +++ b/src/mesa/main/mtypes.h
> @@ -1528,19 +1528,21 @@ struct gl_vertex_array
>   */
>  struct gl_array_attributes
>  {
> -   GLint Size;              /**< Components per element (1,2,3,4) */
> +   /** Points to client array data. Not used when a VBO is bound */
> +   const GLubyte *Ptr;
> +   /** Offset of the first element relative to the binding offset */
> +   GLuint RelativeOffset;
> +   GLshort Stride;          /**< Stride as specified with gl*Pointer() */
>     GLenum16 Type;           /**< Datatype: GL_FLOAT, GL_INT, etc */
>     GLenum16 Format;         /**< Default: GL_RGBA, but may be GL_BGRA */
> -   GLsizei Stride;          /**< Stride as specified with gl*Pointer() */
> -   const GLubyte *Ptr;      /**< Points to client array data. Not used when a VBO is bound */
> -   GLintptr RelativeOffset; /**< Offset of the first element relative to the binding offset */
>     GLboolean Enabled;       /**< Whether the array is enabled */
> -   GLboolean Normalized;    /**< Fixed-point values are normalized when converted to floats */
> -   GLboolean Integer;       /**< Fixed-point values are not converted to floats */
> -   GLboolean Doubles;       /**< double precision values are not converted to floats */
> -   GLuint _ElementSize;     /**< Size of each element in bytes */
> +   GLubyte Size;            /**< Components per element (1,2,3,4) */
> +   unsigned Normalized:1;   /**< Fixed-point values are normalized when converted to floats */
> +   unsigned Integer:1;      /**< Fixed-point values are not converted to floats */
> +   unsigned Doubles:1;      /**< double precision values are not converted to floats */
> +   unsigned _ElementSize:8; /**< Size of each element in bytes */
>     /** Index into gl_vertex_array_object::BufferBinding[] array */
> -   GLuint BufferBindingIndex;
> +   unsigned BufferBindingIndex:6;
>  };
>
>
> --
> 2.7.4
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/mesa-dev


More information about the mesa-dev mailing list