Mesa (master): mesa: shrink size of gl_array_attributes (v2)

Brian Paul brianp at kemper.freedesktop.org
Tue Jan 30 04:30:15 UTC 2018


Module: Mesa
Branch: master
Commit: d5f42f96e16f4b1242e51fb9eec6f608b221a1c4
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=d5f42f96e16f4b1242e51fb9eec6f608b221a1c4

Author: Brian Paul <brianp at vmware.com>
Date:   Mon Jan 29 14:09:54 2018 -0700

mesa: shrink size of gl_array_attributes (v2)

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.

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

---

 src/mesa/main/arrayobj.c |  4 ++++
 src/mesa/main/mtypes.h   | 21 ++++++++++++---------
 2 files changed, 16 insertions(+), 9 deletions(-)

diff --git a/src/mesa/main/arrayobj.c b/src/mesa/main/arrayobj.c
index 2810647c7e..9d3ddbfcbf 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,
            GLuint 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 78132de425..dccc152ad8 100644
--- a/src/mesa/main/mtypes.h
+++ b/src/mesa/main/mtypes.h
@@ -1528,18 +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 */
-   GLuint BufferBindingIndex;    /**< Vertex buffer binding */
+   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 */
+   unsigned BufferBindingIndex:6;
 };
 
 




More information about the mesa-commit mailing list