--- src/mesa/main/arrayobj.c | 11 +---------- src/mesa/main/attrib.c | 23 +++++++---------------- src/mesa/main/mtypes.h | 16 ---------------- src/mesa/main/varray.c | 2 +- 4 files changed, 9 insertions(+), 43 deletions(-)
diff --git a/src/mesa/main/arrayobj.c b/src/mesa/main/arrayobj.c index c52a07b..82c00fb 100644 --- a/src/mesa/main/arrayobj.c +++ b/src/mesa/main/arrayobj.c @@ -443,30 +443,21 @@ _mesa_BindVertexArray( GLuint id ) } else { /* non-default array object */ newObj = _mesa_lookup_vao(ctx, id); if (!newObj) { _mesa_error(ctx, GL_INVALID_OPERATION, "glBindVertexArray(non-gen name)"); return; } - if (!newObj->EverBound) { - /* The "Interactions with APPLE_vertex_array_object" section of the - * GL_ARB_vertex_array_object spec says: - * - * "The first bind call, either BindVertexArray or - * BindVertexArrayAPPLE, determines the semantic of the object." - */ - newObj->ARBsemantics = GL_TRUE; - newObj->EverBound = GL_TRUE; - } + newObj->EverBound = GL_TRUE; } if (ctx->Array.DrawMethod == DRAW_ARRAYS) { /* The _DrawArrays pointer is pointing at the VAO being unbound and * that VAO may be in the process of being deleted. If it's not going * to be deleted, this will have no effect, because the pointer needs * to be updated by the VBO module anyway. * * Before the VBO module can update the pointer, we have to set it * to NULL for drivers not to set up arrays which are not bound, diff --git a/src/mesa/main/attrib.c b/src/mesa/main/attrib.c index 87d3276..dbcfb4e 100644 --- a/src/mesa/main/attrib.c +++ b/src/mesa/main/attrib.c @@ -1472,23 +1472,20 @@ copy_pixelstore(struct gl_context *ctx, static void copy_array_object(struct gl_context *ctx, struct gl_vertex_array_object *dest, struct gl_vertex_array_object *src) { GLuint i; /* skip Name */ /* skip RefCount */ - /* In theory must be the same anyway, but on recreate make sure it matches */ - dest->ARBsemantics = src->ARBsemantics; - for (i = 0; i < ARRAY_SIZE(src->VertexAttrib); i++) { _mesa_copy_client_array(ctx, &dest->_VertexAttrib[i], &src->_VertexAttrib[i]); _mesa_copy_vertex_attrib_array(ctx, &dest->VertexAttrib[i], &src->VertexAttrib[i]); _mesa_copy_vertex_buffer_binding(ctx, &dest->BufferBinding[i], &src->BufferBinding[i]); } /* _Enabled must be the same than on push */ dest->_Enabled = src->_Enabled; /* The bitmask of bound VBOs needs to match the VertexBinding array */ dest->VertexAttribBufferMask = src->VertexAttribBufferMask; @@ -1550,56 +1547,50 @@ save_array_attrib(struct gl_context *ctx, } /** * Restore the content of src to dest. */ static void restore_array_attrib(struct gl_context *ctx, struct gl_array_attrib *dest, struct gl_array_attrib *src) { + bool is_vao_name_zero = src->VAO->Name == 0; + /* The ARB_vertex_array_object spec says: * * "BindVertexArray fails and an INVALID_OPERATION error is generated * if array is not a name returned from a previous call to * GenVertexArrays, or if such a name has since been deleted with * DeleteVertexArrays." * * Therefore popping a deleted VAO cannot magically recreate it. - * - * The semantics of objects created using APPLE_vertex_array_objects behave - * differently. These objects expect to be recreated by pop. Alas. */ - const bool arb_vao = (src->VAO->Name != 0 - && src->VAO->ARBsemantics); - - if (arb_vao && !_mesa_IsVertexArray(src->VAO->Name)) + if (!is_vao_name_zero && !_mesa_IsVertexArray(src->VAO->Name)) return; _mesa_BindVertexArray(src->VAO->Name); /* Restore or recreate the buffer objects by the names ... */ - if (!arb_vao - || src->ArrayBufferObj->Name == 0 - || _mesa_IsBuffer(src->ArrayBufferObj->Name)) { + if (is_vao_name_zero || src->ArrayBufferObj->Name == 0 || + _mesa_IsBuffer(src->ArrayBufferObj->Name)) { /* ... and restore its content */ copy_array_attrib(ctx, dest, src, false); _mesa_BindBuffer(GL_ARRAY_BUFFER_ARB, src->ArrayBufferObj->Name); } else { copy_array_attrib(ctx, dest, src, true); } - if (!arb_vao - || src->VAO->IndexBufferObj->Name == 0 - || _mesa_IsBuffer(src->VAO->IndexBufferObj->Name)) + if (is_vao_name_zero || src->VAO->IndexBufferObj->Name == 0 || + _mesa_IsBuffer(src->VAO->IndexBufferObj->Name)) _mesa_BindBuffer(GL_ELEMENT_ARRAY_BUFFER_ARB, src->VAO->IndexBufferObj->Name); } /** * init/alloc the fields of 'attrib'. * Needs to the init part matching free_array_attrib_data below. */ static bool init_array_attrib_data(struct gl_context *ctx, diff --git a/src/mesa/main/mtypes.h b/src/mesa/main/mtypes.h index 2e3a423..002e692 100644 --- a/src/mesa/main/mtypes.h +++ b/src/mesa/main/mtypes.h @@ -1502,36 +1502,20 @@ 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 */ /** - * Does the VAO use ARB semantics or Apple semantics? - * - * There are several ways in which ARB_vertex_array_object and - * APPLE_vertex_array_object VAOs have differing semantics. At the very - * least, - * - * - ARB VAOs require that all array data be sourced from vertex buffer - * objects, but Apple VAOs do not. - * - * - ARB VAOs require that names come from GenVertexArrays. - * - * This flag notes which behavior governs this VAO. - */ - GLboolean ARBsemantics; - - /** * 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. */ diff --git a/src/mesa/main/varray.c b/src/mesa/main/varray.c index 78dc004..2fb3c18 100644 --- a/src/mesa/main/varray.c +++ b/src/mesa/main/varray.c @@ -502,21 +502,21 @@ validate_array(struct gl_context *ctx, const char *func, * "An INVALID_OPERATION error is generated under any of the following * conditions: * * ... * * * any of the *Pointer commands specifying the location and * organization of vertex array data are called while zero is bound * to the ARRAY_BUFFER buffer object binding point (see section * 2.9.6), and the pointer argument is not NULL." */ - if (ptr != NULL && vao->ARBsemantics && + if (ptr != NULL && vao->EverBound && !_mesa_is_bufferobj(ctx->Array.ArrayBufferObj)) { _mesa_error(ctx, GL_INVALID_OPERATION, "%s(non-VBO array)", func); return; } } static bool validate_array_and_format(struct gl_context *ctx, const char *func, GLuint attrib, GLbitfield legalTypes, -- 2.9.3 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev