[Mesa-dev] [PATCH 11/20] mesa: reduce the size of gl_vertex_array_object
Marek Olšák
maraeo at gmail.com
Tue Nov 21 18:01:53 UTC 2017
From: Marek Olšák <marek.olsak at amd.com>
RelativeOffset should actually be uint, not intptr,
according to ARB_vertex_attrib_binding.
gl_vertex_array_object: 3632 -> 3112 bytes
---
src/mesa/main/mtypes.h | 17 ++++++++---------
1 file changed, 8 insertions(+), 9 deletions(-)
diff --git a/src/mesa/main/mtypes.h b/src/mesa/main/mtypes.h
index 6ddef05..773fa57 100644
--- a/src/mesa/main/mtypes.h
+++ b/src/mesa/main/mtypes.h
@@ -1492,32 +1492,33 @@ struct gl_vertex_array
*
* Note that the Stride field corresponds to VERTEX_ATTRIB_ARRAY_STRIDE
* and is only present for backwards compatibility reasons.
* Rendering always uses VERTEX_BINDING_STRIDE.
* The gl*Pointer() functions will set VERTEX_ATTRIB_ARRAY_STRIDE
* and VERTEX_BINDING_STRIDE to the same value, while
* glBindVertexBuffer() will only set VERTEX_BINDING_STRIDE.
*/
struct gl_array_attributes
{
- GLint Size; /**< Components per element (1,2,3,4) */
+ GLuint RelativeOffset; /**< Offset of the first element relative to the binding offset */
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 */
+ GLshort Stride; /**< Stride as specified with gl*Pointer() */
+ GLubyte Size; /**< Components per element (1,2,3,4) */
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 */
+
+ const GLubyte *Ptr; /**< Points to client array data. Not used when a VBO is bound */
};
/**
* This describes the buffer object used for a vertex array (or
* multiple vertex arrays). If BufferObj points to the default/null
* buffer object, then the vertex array lives in user memory and not a VBO.
*/
struct gl_vertex_buffer_binding
{
@@ -1536,38 +1537,36 @@ struct gl_vertex_buffer_binding
struct gl_vertex_array_object
{
/** Name of the VAO as received from glGenVertexArray. */
GLuint Name;
GLint RefCount;
GLchar *Label; /**< GL_KHR_debug */
/**
- * Has this array object been bound?
- */
- GLboolean EverBound;
-
- /**
* Derived vertex attribute arrays
*
* This is a legacy data structure created from gl_vertex_attrib_array and
* gl_vertex_buffer_binding, for compatibility with existing driver code.
*/
struct gl_vertex_array _VertexAttrib[VERT_ATTRIB_MAX];
/** Vertex attribute arrays */
struct gl_array_attributes VertexAttrib[VERT_ATTRIB_MAX];
/** Vertex buffer bindings */
struct gl_vertex_buffer_binding BufferBinding[VERT_ATTRIB_MAX];
+ /** Has this array object been bound? */
+ GLboolean EverBound;
+
/** Mask indicating which vertex arrays have vertex buffer associated. */
GLbitfield VertexAttribBufferMask;
/** Mask of VERT_BIT_* values indicating which arrays are enabled */
GLbitfield _Enabled;
/** Mask of VERT_BIT_* values indicating changed/dirty arrays */
GLbitfield NewArrays;
/** The index buffer (also known as the element array buffer in OpenGL). */
--
2.7.4
More information about the mesa-dev
mailing list