mesa/st: cope with non-ibo index data in st_draw_feedback.c
Previously only non-indexed or indicies-in-a-vbo cases were handled in this code. This change adds the missing regular indices-in-memory case.
This commit is contained in:
@@ -196,13 +196,10 @@ st_feedback_draw_vbo(GLcontext *ctx,
|
||||
draw_set_vertex_elements(draw, vp->num_inputs, velements);
|
||||
|
||||
if (ib) {
|
||||
unsigned indexSize;
|
||||
struct gl_buffer_object *bufobj = ib->obj;
|
||||
struct st_buffer_object *stobj = st_buffer_object(bufobj);
|
||||
unsigned indexSize;
|
||||
void *map;
|
||||
|
||||
index_buffer_handle = stobj->buffer;
|
||||
|
||||
switch (ib->type) {
|
||||
case GL_UNSIGNED_INT:
|
||||
indexSize = 4;
|
||||
@@ -215,9 +212,19 @@ st_feedback_draw_vbo(GLcontext *ctx,
|
||||
return;
|
||||
}
|
||||
|
||||
map = pipe_buffer_map(pipe->screen, index_buffer_handle,
|
||||
PIPE_BUFFER_USAGE_CPU_READ);
|
||||
draw_set_mapped_element_buffer(draw, indexSize, map);
|
||||
if (bufobj && bufobj->Name) {
|
||||
struct st_buffer_object *stobj = st_buffer_object(bufobj);
|
||||
|
||||
index_buffer_handle = stobj->buffer;
|
||||
|
||||
map = pipe_buffer_map(pipe->screen, index_buffer_handle,
|
||||
PIPE_BUFFER_USAGE_CPU_READ);
|
||||
|
||||
draw_set_mapped_element_buffer(draw, indexSize, map);
|
||||
}
|
||||
else {
|
||||
draw_set_mapped_element_buffer(draw, indexSize, (void *) ib->ptr);
|
||||
}
|
||||
}
|
||||
else {
|
||||
/* no index/element buffer */
|
||||
@@ -252,7 +259,7 @@ st_feedback_draw_vbo(GLcontext *ctx,
|
||||
draw_set_mapped_vertex_buffer(draw, i, NULL);
|
||||
}
|
||||
}
|
||||
if (ib) {
|
||||
if (index_buffer_handle) {
|
||||
pipe_buffer_unmap(pipe->screen, index_buffer_handle);
|
||||
draw_set_mapped_element_buffer(draw, 0, NULL);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user