From 8fbb807d1029b012d2f45cb0f3ea0c6a6ebded6d Mon Sep 17 00:00:00 2001 From: marha Date: Wed, 13 Nov 2013 08:07:38 +0100 Subject: mesa xserver pixman git update 9 nov 2013 xserver commit 4a251f5883b042cd902c192060a0be2b11148f2b pixman commit 8487dfbcd056eff066939dc253fcf361b391592a mesa commit e0489531455623aa21aa565b2c890362d8437f23 --- mesalib/src/mesa/main/arrayobj.c | 29 ++++++++++++++++------------- mesalib/src/mesa/main/mtypes.h | 6 ++++++ mesalib/src/mesa/main/varray.c | 10 +++++----- mesalib/src/mesa/main/varray.h | 15 ++++++++------- 4 files changed, 35 insertions(+), 25 deletions(-) (limited to 'mesalib/src/mesa/main') diff --git a/mesalib/src/mesa/main/arrayobj.c b/mesalib/src/mesa/main/arrayobj.c index dbf8fdc73..fdcf172ea 100644 --- a/mesalib/src/mesa/main/arrayobj.c +++ b/mesalib/src/mesa/main/arrayobj.c @@ -53,7 +53,7 @@ /** * Look up the array object for the given ID. - * + * * \returns * Either a pointer to the array object with the specified ID or \c NULL for * a non-existent ID. The spec defines ID 0 as being technically @@ -91,7 +91,7 @@ unbind_array_object_vbos(struct gl_context *ctx, struct gl_array_object *obj) /** * Allocate and initialize a new vertex array object. - * + * * This function is intended to be called via * \c dd_function_table::NewArrayObject. */ @@ -107,7 +107,7 @@ _mesa_new_array_object( struct gl_context *ctx, GLuint name ) /** * Delete an array object. - * + * * This function is intended to be called via * \c dd_function_table::DeleteArrayObject. */ @@ -298,18 +298,18 @@ static GLuint compute_max_element(struct gl_array_object *arrayObj, GLbitfield64 enabled) { GLuint min = ~((GLuint)0); - + while (enabled) { struct gl_client_array *client_array; GLint attrib = ffsll(enabled) - 1; enabled ^= BITFIELD64_BIT(attrib); - + client_array = &arrayObj->_VertexAttrib[attrib]; assert(client_array->Enabled); _mesa_update_array_max_element(client_array); min = MIN2(min, client_array->_MaxElement); } - + return min; } @@ -340,7 +340,8 @@ _mesa_update_array_object_max_element(struct gl_context *ctx, * or a gl_vertex_buffer_binding has changed. */ void -_mesa_update_array_object_client_arrays(struct gl_context *ctx, struct gl_array_object *arrayObj) +_mesa_update_array_object_client_arrays(struct gl_context *ctx, + struct gl_array_object *arrayObj) { GLbitfield64 arrays = arrayObj->NewArrays; @@ -356,7 +357,8 @@ _mesa_update_array_object_client_arrays(struct gl_context *ctx, struct gl_array_ buffer_binding = &arrayObj->VertexBinding[attrib_array->VertexBinding]; client_array = &arrayObj->_VertexAttrib[attrib]; - _mesa_update_client_array(ctx, client_array, attrib_array, buffer_binding); + _mesa_update_client_array(ctx, client_array, attrib_array, + buffer_binding); } } @@ -396,7 +398,8 @@ bind_vertex_array(struct gl_context *ctx, GLuint id, GLboolean genRequired) newObj = _mesa_lookup_arrayobj(ctx, id); if (!newObj) { if (genRequired) { - _mesa_error(ctx, GL_INVALID_OPERATION, "glBindVertexArray(non-gen name)"); + _mesa_error(ctx, GL_INVALID_OPERATION, + "glBindVertexArray(non-gen name)"); return; } @@ -463,7 +466,7 @@ _mesa_BindVertexArrayAPPLE( GLuint id ) /** * Delete a set of array objects. - * + * * \param n Number of array objects to delete. * \param ids Array of \c n array object IDs. */ @@ -511,7 +514,7 @@ _mesa_DeleteVertexArrays(GLsizei n, const GLuint *ids) * \param arrays Array of \c n locations to store the IDs. * \param vboOnly Will arrays have to reside in VBOs? */ -static void +static void gen_vertex_arrays(struct gl_context *ctx, GLsizei n, GLuint *arrays) { GLuint first; @@ -570,9 +573,9 @@ _mesa_GenVertexArraysAPPLE(GLsizei n, GLuint *arrays) /** * Determine if ID is the name of an array object. - * + * * \param id ID of the potential array object. - * \return \c GL_TRUE if \c id is the name of a array object, + * \return \c GL_TRUE if \c id is the name of a array object, * \c GL_FALSE otherwise. */ GLboolean GLAPIENTRY diff --git a/mesalib/src/mesa/main/mtypes.h b/mesalib/src/mesa/main/mtypes.h index ae96e2326..41ffdb765 100644 --- a/mesalib/src/mesa/main/mtypes.h +++ b/mesalib/src/mesa/main/mtypes.h @@ -1502,6 +1502,12 @@ struct gl_vertex_attrib_array GLuint VertexBinding; /**< Vertex buffer binding */ }; + +/** + * 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 { GLintptr Offset; /**< User-specified offset */ diff --git a/mesalib/src/mesa/main/varray.c b/mesalib/src/mesa/main/varray.c index d17d698d3..0f38270d5 100644 --- a/mesalib/src/mesa/main/varray.c +++ b/mesalib/src/mesa/main/varray.c @@ -390,11 +390,6 @@ update_array(struct gl_context *ctx, return; } - if (!update_array_format(ctx, func, attrib, legalTypesMask, sizeMin, sizeMax, - size, type, normalized, integer, 0)) { - return; - } - if (stride < 0) { _mesa_error( ctx, GL_INVALID_VALUE, "%s(stride=%d)", func, stride ); return; @@ -418,6 +413,11 @@ update_array(struct gl_context *ctx, return; } + if (!update_array_format(ctx, func, attrib, legalTypesMask, sizeMin, + sizeMax, size, type, normalized, integer, 0)) { + return; + } + /* Reset the vertex attrib binding */ vertex_attrib_binding(ctx, attrib, attrib); diff --git a/mesalib/src/mesa/main/varray.h b/mesalib/src/mesa/main/varray.h index 8a9487c6e..3b9f39a61 100644 --- a/mesalib/src/mesa/main/varray.h +++ b/mesalib/src/mesa/main/varray.h @@ -73,12 +73,13 @@ _mesa_update_array_max_element(struct gl_client_array *array) * a vertex buffer. */ static inline const GLubyte * -_mesa_vertex_attrib_address(struct gl_vertex_attrib_array *array, - struct gl_vertex_buffer_binding *binding) +_mesa_vertex_attrib_address(const struct gl_vertex_attrib_array *array, + const struct gl_vertex_buffer_binding *binding) { - return (binding->BufferObj->Name == 0 ? - array->Ptr : - (const GLubyte *)(binding->Offset + array->RelativeOffset)); + if (_mesa_is_bufferobj(binding->BufferObj)) + return (const GLubyte *) (binding->Offset + array->RelativeOffset); + else + return array->Ptr; } /** @@ -88,8 +89,8 @@ _mesa_vertex_attrib_address(struct gl_vertex_attrib_array *array, static inline void _mesa_update_client_array(struct gl_context *ctx, struct gl_client_array *dst, - struct gl_vertex_attrib_array *src, - struct gl_vertex_buffer_binding *binding) + const struct gl_vertex_attrib_array *src, + const struct gl_vertex_buffer_binding *binding) { dst->Size = src->Size; dst->Type = src->Type; -- cgit v1.2.3