mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-07 11:28:05 +02:00
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:
parent
0b8dcdec9d
commit
2671b9c90f
3 changed files with 24 additions and 12 deletions
|
|
@ -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];
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue