[Mesa-dev] [PATCH 2/2] mesa: shrink size of gl_array_attribs
Marek Olšák
maraeo at gmail.com
Mon Jan 29 22:16:32 UTC 2018
For the series:
Reviewed-by: Marek Olšák <marek.olsak at amd.com>
Marek
On Mon, Jan 29, 2018 at 10:38 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.
> Reduce Stride field to GLshort.
>
> Reduces size from 48 to 24 bytes.
> Also reduces size of gl_vertex_array_object from 3632 to 2864 bytes.
> ---
> 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..502f03c 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 */
> + GLuint _ElementSize:8; /**< Size of each element in bytes */
> /** Index into gl_vertex_array_object::BufferBinding[] array */
> - GLuint BufferBindingIndex;
> + GLuint 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