diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/mesa/main/arrayobj.c | 4 | ||||
-rw-r--r-- | 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 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; }; |