On Mon, Nov 9, 2015 at 4:56 PM, Ian Romanick <i...@freedesktop.org> wrote: > From: Ian Romanick <ian.d.roman...@intel.com> > > Signed-off-by: Ian Romanick <ian.d.roman...@intel.com> > --- > src/mesa/drivers/common/meta.c | 76 > ++++++++++++++++++++++++------------------ > 1 file changed, 43 insertions(+), 33 deletions(-) > > diff --git a/src/mesa/drivers/common/meta.c b/src/mesa/drivers/common/meta.c > index 8cf0bf9..3507927 100644 > --- a/src/mesa/drivers/common/meta.c > +++ b/src/mesa/drivers/common/meta.c > @@ -342,12 +342,16 @@ _mesa_meta_setup_vertex_objects(struct gl_context *ctx, > GLuint VBO; > > if (*VAO == 0) { > + struct gl_vertex_array_object *array_obj; > assert(*buf_obj == NULL); > > /* create vertex array object */ > _mesa_GenVertexArrays(1, VAO); > _mesa_BindVertexArray(*VAO); > > + array_obj = _mesa_lookup_vao(ctx, *VAO); > + assert(array_obj != NULL); > + > /* create vertex array buffer */ > _mesa_CreateBuffers(1, &VBO); > *buf_obj = _mesa_lookup_bufferobj(ctx, VBO); > @@ -360,8 +364,8 @@ _mesa_meta_setup_vertex_objects(struct gl_context *ctx, > assert(*buf_obj != NULL && (*buf_obj)->Name == VBO); > assert(*buf_obj != ctx->Array.ArrayBufferObj); > > - _mesa_NamedBufferData(VBO, 4 * sizeof(struct vertex), NULL, > - GL_DYNAMIC_DRAW); > + _mesa_buffer_data(ctx, *buf_obj, GL_NONE, 4 * sizeof(struct vertex), > NULL, > + GL_DYNAMIC_DRAW, __func__); > > assert((*buf_obj)->Size == 4 * sizeof(struct vertex)); > > @@ -369,45 +373,51 @@ _mesa_meta_setup_vertex_objects(struct gl_context *ctx, > if (use_generic_attributes) { > assert(color_size == 0); > > - _mesa_VertexArrayAttribFormat(*VAO, 0, vertex_size, GL_FLOAT, > - GL_FALSE, OFFSET(x)); > - _mesa_VertexArrayVertexBuffer(*VAO, 0, VBO, 0, > - sizeof(struct vertex)); > - _mesa_EnableVertexAttribArray(0); > - > + _mesa_update_array_format(ctx, array_obj, VERT_ATTRIB_GENERIC(0), > + vertex_size, GL_FLOAT, GL_RGBA, GL_FALSE, > + GL_FALSE, GL_FALSE, > + offsetof(struct vertex, x), true); > + _mesa_bind_vertex_buffer(ctx, array_obj, VERT_ATTRIB_GENERIC(0), > + *buf_obj, 0, sizeof(struct vertex)); > + _mesa_enable_vertex_array_attrib(ctx, array_obj, > + VERT_ATTRIB_GENERIC(0)); > if (texcoord_size > 0) { > - _mesa_VertexArrayAttribFormat(*VAO, 1, texcoord_size, GL_FLOAT, > - GL_FALSE, OFFSET(tex)); > - _mesa_VertexArrayVertexBuffer(*VAO, 1, VBO, 0, > - sizeof(struct vertex)); > - _mesa_EnableVertexAttribArray(1); > + _mesa_update_array_format(ctx, array_obj, VERT_ATTRIB_GENERIC(1), > + texcoord_size, GL_FLOAT, GL_RGBA, > + GL_FALSE, GL_FALSE, GL_FALSE, > + offsetof(struct vertex, tex), false); > + _mesa_bind_vertex_buffer(ctx, array_obj, VERT_ATTRIB_GENERIC(1), > + *buf_obj, 0, sizeof(struct vertex)); > + _mesa_enable_vertex_array_attrib(ctx, array_obj, > + VERT_ATTRIB_GENERIC(1)); > } > } else { > - _mesa_BindBuffer(GL_ARRAY_BUFFER, VBO); > - _mesa_VertexPointer(vertex_size, GL_FLOAT, sizeof(struct vertex), > - OFFSET(x)); > - _mesa_EnableClientState(GL_VERTEX_ARRAY); > + _mesa_update_array_format(ctx, array_obj, VERT_ATTRIB_POS, > + vertex_size, GL_FLOAT, GL_RGBA, GL_FALSE, > + GL_FALSE, GL_FALSE, > + offsetof(struct vertex, x), true); > + _mesa_bind_vertex_buffer(ctx, array_obj, VERT_ATTRIB_POS, > + *buf_obj, 0, sizeof(struct vertex)); > + _mesa_enable_vertex_array_attrib(ctx, array_obj, VERT_ATTRIB_POS); > > if (texcoord_size > 0) { > - _mesa_TexCoordPointer(texcoord_size, GL_FLOAT, > - sizeof(struct vertex), OFFSET(tex)); > - _mesa_EnableClientState(GL_TEXTURE_COORD_ARRAY); > + _mesa_update_array_format(ctx, array_obj, VERT_ATTRIB_TEX(0), > + vertex_size, GL_FLOAT, GL_RGBA, > GL_FALSE,
In the similar block above, you pass texcoord_size instead of vertex_size. Is this difference here intentional? Coverity suggests there might be a copy-n-paste mistake, but it looks to me like this^ might be the problem rather than what Coverity says. *** CID 1341051: Incorrect expression (COPY_PASTE_ERROR) /src/mesa/drivers/common/meta.c: 395 in _mesa_meta_setup_vertex_objects() 389 GL_FALSE, GL_FALSE, 390 offsetof(struct vertex, x), true); 391 _mesa_bind_vertex_buffer(ctx, array_obj, VERT_ATTRIB_POS, 392 *buf_obj, 0, sizeof(struct vertex)); 393 _mesa_enable_vertex_array_attrib(ctx, array_obj, VERT_ATTRIB_POS); 394 >>> CID 1341051: Incorrect expression (COPY_PASTE_ERROR) >>> "texcoord_size" in "texcoord_size > 0U" looks like a copy-paste error. 395 if (texcoord_size > 0) { 396 _mesa_update_array_format(ctx, array_obj, VERT_ATTRIB_TEX(0), 397 vertex_size, GL_FLOAT, GL_RGBA, GL_FALSE, 398 GL_FALSE, GL_FALSE, 399 offsetof(struct vertex, tex), false); 400 _mesa_bind_vertex_buffer(ctx, array_obj, VERT_ATTRIB_TEX(0), > + GL_FALSE, GL_FALSE, > + offsetof(struct vertex, tex), false); > + _mesa_bind_vertex_buffer(ctx, array_obj, VERT_ATTRIB_TEX(0), > + *buf_obj, 0, sizeof(struct vertex)); > + _mesa_enable_vertex_array_attrib(ctx, array_obj, > VERT_ATTRIB_TEX(0)); > } > > if (color_size > 0) { > - _mesa_ColorPointer(color_size, GL_FLOAT, > - sizeof(struct vertex), OFFSET(r)); > - _mesa_EnableClientState(GL_COLOR_ARRAY); > - } > - > - /* Restore the old VBO. This is done because we don't want the new > VBO > - * to be bound on exit. It would be nicer to use DSA type > functions, > - * but there are no DSA functions to bind a VBO to a VAO for > - * fixed-function vertex attributes. > - */ > - { > - struct save_state *save = > &ctx->Meta->Save[ctx->Meta->SaveStackDepth - 1]; > - _mesa_BindBuffer(GL_ARRAY_BUFFER, save->ArrayBufferObj->Name); > + _mesa_update_array_format(ctx, array_obj, VERT_ATTRIB_COLOR0, > + vertex_size, GL_FLOAT, GL_RGBA, > GL_FALSE, > + GL_FALSE, GL_FALSE, > + offsetof(struct vertex, r), false); > + _mesa_bind_vertex_buffer(ctx, array_obj, VERT_ATTRIB_COLOR0, > + *buf_obj, 0, sizeof(struct vertex)); > + _mesa_enable_vertex_array_attrib(ctx, array_obj, > VERT_ATTRIB_COLOR0); > } > } > } else { > -- > 2.1.0 > > _______________________________________________ > mesa-dev mailing list > mesa-dev@lists.freedesktop.org > http://lists.freedesktop.org/mailman/listinfo/mesa-dev _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev