summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/mesa/main/arrayobj.c4
-rw-r--r--src/mesa/main/mtypes.h21
2 files changed, 16 insertions, 9 deletions
diff --git a/src/mesa/main/arrayobj.c b/src/mesa/main/arrayobj.c
index 2810647c7e7..9d3ddbfcbf0 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 78132de4254..dccc152ad87 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;
};