vbo/dlist: remove vbo_save_context::buffer_ptr

buffer_ptr is always "buffer_in_ram + used" so compute it when needed
and drop it from the struct to avoid out-of-sync errors.

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-12 15:45:12 +02:00
parent b511b65123
commit 3ab1ddd5c1
2 changed files with 7 additions and 21 deletions

View file

@ -177,7 +177,6 @@ struct vbo_save_context {
unsigned current_bo_bytes_used;
fi_type *buffer_map; /**< Mapping of vertex_store's buffer */
fi_type *buffer_ptr; /**< cursor, points into buffer_map */
fi_type vertex[VBO_ATTRIB_MAX*4]; /* current values */
fi_type *attrptr[VBO_ATTRIB_MAX];
GLuint vert_count;

View file

@ -190,8 +190,6 @@ reset_counters(struct gl_context *ctx)
save->buffer_map = save->vertex_store->buffer_in_ram + save->vertex_store->used;
assert(save->buffer_map == save->buffer_ptr);
if (save->vertex_size)
save->max_vert = (save->vertex_store->buffer_in_ram_size / sizeof(float) - save->vertex_store->used) /
save->vertex_size;
@ -272,7 +270,6 @@ convert_line_loop_to_strip(struct vbo_save_context *save,
prim->count++;
node->cold->vertex_count++;
save->vert_count++;
save->buffer_ptr += sz;
save->vertex_store->used += sz;
}
@ -417,8 +414,6 @@ realloc_storage(struct gl_context *ctx, int prim_count, int vertex_count)
/* Allocate and map new store:
*/
save->vertex_store = alloc_vertex_store(ctx, vertex_count);
save->buffer_ptr = save->vertex_store->buffer_in_ram + save->vertex_store->used;
save->out_of_memory = save->buffer_ptr == NULL;
}
if (prim_count >= 0)
@ -563,8 +558,6 @@ compile_vertex_list(struct gl_context *ctx)
if (save->dangling_attr_ref)
ctx->ListState.Current.UseLoopback = true;
save->vertex_store->used += save->vertex_size * node->cold->vertex_count;
/* Copy duplicated vertices
*/
save->copied.nr = copy_vertices(ctx, node, save->buffer_map);
@ -930,11 +923,6 @@ end:
save->vertex_store->buffer_in_ram_size / sizeof(float) - 16 * (save->vertex_size + 4)) {
realloc_storage(ctx, -1, 0);
}
else {
/* update buffer_ptr for next vertex */
save->buffer_ptr = save->vertex_store->buffer_in_ram
+ save->vertex_store->used;
}
/* Reset our structures for the next run of vertices:
*/
@ -996,10 +984,11 @@ wrap_filled_vertex(struct gl_context *ctx)
assert(save->max_vert - save->vert_count > save->copied.nr);
numComponents = save->copied.nr * save->vertex_size;
memcpy(save->buffer_ptr,
fi_type *buffer_ptr = save->vertex_store->buffer_in_ram + save->vertex_store->used;
memcpy(buffer_ptr,
save->copied.buffer,
numComponents * sizeof(fi_type));
save->buffer_ptr += numComponents;
save->vert_count += save->copied.nr;
}
@ -1153,8 +1142,8 @@ upgrade_vertex(struct gl_context *ctx, GLuint attr, GLuint newsz)
}
}
save->buffer_ptr = dest;
save->vert_count += save->copied.nr;
save->vertex_store->used += save->vertex_size * save->copied.nr;
}
}
@ -1256,12 +1245,12 @@ do { \
\
if ((A) == 0) { \
GLuint i; \
fi_type *buffer_ptr = save->vertex_store->buffer_in_ram + save->vertex_store->used; \
\
for (i = 0; i < save->vertex_size; i++) \
save->buffer_ptr[i] = save->vertex[i]; \
\
save->buffer_ptr += save->vertex_size; \
buffer_ptr[i] = save->vertex[i]; \
\
save->vertex_store->used += save->vertex_size; \
if (++save->vert_count >= save->max_vert) \
wrap_filled_vertex(ctx); \
} \
@ -1951,8 +1940,6 @@ vbo_save_NewList(struct gl_context *ctx, GLuint list, GLenum mode)
if (!save->vertex_store)
save->vertex_store = alloc_vertex_store(ctx, 0);
save->buffer_ptr = save->vertex_store->buffer_in_ram + save->vertex_store->used;
reset_vertex(ctx);
reset_counters(ctx);
ctx->Driver.SaveNeedFlush = GL_FALSE;