vbo: optimize vertex copying when 'wrapping'
Instead of calling memcpy() 'n' times, we can do it all at once since the source and dest regions are all contiguous. Reviewed-by: Matt Turner <mattst88@gmail.com>
This commit is contained in:
parent
7b63658125
commit
9919f56099
|
@ -132,8 +132,7 @@ static void vbo_exec_wrap_buffers( struct vbo_exec_context *exec )
|
|||
static void
|
||||
vbo_exec_vtx_wrap(struct vbo_exec_context *exec)
|
||||
{
|
||||
fi_type *data = exec->vtx.copied.buffer;
|
||||
GLuint i;
|
||||
unsigned numComponents;
|
||||
|
||||
/* Run pipeline on current vertices, copy wrapped vertices
|
||||
* to exec->vtx.copied.
|
||||
|
@ -149,13 +148,12 @@ vbo_exec_vtx_wrap(struct vbo_exec_context *exec)
|
|||
*/
|
||||
assert(exec->vtx.max_vert - exec->vtx.vert_count > exec->vtx.copied.nr);
|
||||
|
||||
for (i = 0 ; i < exec->vtx.copied.nr ; i++) {
|
||||
memcpy( exec->vtx.buffer_ptr, data,
|
||||
exec->vtx.vertex_size * sizeof(GLfloat));
|
||||
exec->vtx.buffer_ptr += exec->vtx.vertex_size;
|
||||
data += exec->vtx.vertex_size;
|
||||
exec->vtx.vert_count++;
|
||||
}
|
||||
numComponents = exec->vtx.copied.nr * exec->vtx.vertex_size;
|
||||
memcpy(exec->vtx.buffer_ptr,
|
||||
exec->vtx.copied.buffer,
|
||||
numComponents * sizeof(fi_type));
|
||||
exec->vtx.buffer_ptr += numComponents;
|
||||
exec->vtx.vert_count += exec->vtx.copied.nr;
|
||||
|
||||
exec->vtx.copied.nr = 0;
|
||||
}
|
||||
|
|
|
@ -601,8 +601,7 @@ static void
|
|||
_save_wrap_filled_vertex(struct gl_context *ctx)
|
||||
{
|
||||
struct vbo_save_context *save = &vbo_context(ctx)->save;
|
||||
fi_type *data = save->copied.buffer;
|
||||
GLuint i;
|
||||
unsigned numComponents;
|
||||
|
||||
/* Emit a glEnd to close off the last vertex list.
|
||||
*/
|
||||
|
@ -612,12 +611,12 @@ _save_wrap_filled_vertex(struct gl_context *ctx)
|
|||
*/
|
||||
assert(save->max_vert - save->vert_count > save->copied.nr);
|
||||
|
||||
for (i = 0; i < save->copied.nr; i++) {
|
||||
memcpy(save->buffer_ptr, data, save->vertex_size * sizeof(GLfloat));
|
||||
data += save->vertex_size;
|
||||
save->buffer_ptr += save->vertex_size;
|
||||
save->vert_count++;
|
||||
}
|
||||
numComponents = save->copied.nr * save->vertex_size;
|
||||
memcpy(save->buffer_ptr,
|
||||
save->copied.buffer,
|
||||
numComponents * sizeof(fi_type));
|
||||
save->buffer_ptr += numComponents;
|
||||
save->vert_count += save->copied.nr;
|
||||
}
|
||||
|
||||
|
||||
|
|
Loading…
Reference in New Issue