For the series: Reviewed-by: Marek Olšák <marek.ol...@amd.com>
Marek On Mon, Jan 29, 2018 at 10:38 PM, Brian Paul <bri...@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@lists.freedesktop.org > https://lists.freedesktop.org/mailman/listinfo/mesa-dev _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev