vbo/dlist: remove vbo_save_copied_vtx

The copy_vertices() function is rarely called and removing
this decreases vbo_save_context's size by 20kb.

Reviewed-by: Marek Olšák <marek.olsak@amd.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/12646>
This commit is contained in:
Pierre-Eric Pelloux-Prayer 2021-08-13 12:17:35 +02:00
parent 0b8dcdec9d
commit 2671b9c90f
3 changed files with 24 additions and 12 deletions

View file

@ -151,10 +151,6 @@ struct vbo_exec_context
#endif
};
struct vbo_save_copied_vtx {
fi_type buffer[VBO_ATTRIB_MAX * 4 * VBO_MAX_COPIED_VERTS];
GLuint nr;
};
struct vbo_save_context {
GLvertexformat vtxfmt;
@ -180,7 +176,10 @@ struct vbo_save_context {
GLuint vert_count;
GLboolean dangling_attr_ref;
struct vbo_save_copied_vtx copied;
struct {
fi_type *buffer;
GLuint nr;
} copied;
fi_type *current[VBO_ATTRIB_MAX]; /* points into ctx->ListState */
GLubyte *currentsz[VBO_ATTRIB_MAX];

View file

@ -70,5 +70,8 @@ void vbo_save_destroy( struct gl_context *ctx )
save->vertex_store = NULL;
}
if (save->copied.buffer)
free(save->copied.buffer);
_mesa_reference_buffer_object(ctx, &save->current_bo, NULL);
}

View file

@ -127,14 +127,16 @@ copy_vertices(struct gl_context *ctx,
struct vbo_save_context *save = &vbo_context(ctx)->save;
struct _mesa_prim *prim = &node->cold->prims[node->cold->prim_count - 1];
GLuint sz = save->vertex_size;
const fi_type *src = src_buffer + prim->start * sz;
fi_type *dst = save->copied.buffer;
if (prim->end)
if (prim->end || !prim->count || !sz)
return 0;
const fi_type *src = src_buffer + prim->start * sz;
assert(save->copied.buffer == NULL);
save->copied.buffer = malloc(sizeof(fi_type) * sz * prim->count);
return vbo_copy_vertices(ctx, prim->mode, prim->start, &prim->count,
prim->begin, sz, true, dst, src);
prim->begin, sz, true, save->copied.buffer, src);
}
@ -971,9 +973,14 @@ wrap_filled_vertex(struct gl_context *ctx)
numComponents = save->copied.nr * save->vertex_size;
fi_type *buffer_ptr = save->vertex_store->buffer_in_ram;
memcpy(buffer_ptr,
save->copied.buffer,
numComponents * sizeof(fi_type));
if (numComponents) {
assert(save->copied.buffer);
memcpy(buffer_ptr,
save->copied.buffer,
numComponents * sizeof(fi_type));
free(save->copied.buffer);
save->copied.buffer = NULL;
}
assert(save->vertex_store->used == 0 && save->vert_count == 0);
save->vert_count = save->copied.nr;
save->vertex_store->used = numComponents;
@ -1090,6 +1097,7 @@ upgrade_vertex(struct gl_context *ctx, GLuint attr, GLuint newsz)
* and will need fixup at runtime.
*/
if (save->copied.nr) {
assert(save->copied.buffer);
const fi_type *data = save->copied.buffer;
fi_type *dest = save->vertex_store->buffer_in_ram;
@ -1128,6 +1136,8 @@ upgrade_vertex(struct gl_context *ctx, GLuint attr, GLuint newsz)
save->vert_count += save->copied.nr;
save->vertex_store->used += save->vertex_size * save->copied.nr;
free(save->copied.buffer);
save->copied.buffer = NULL;
}
}