mesa/st: don't reuse vertex buffers for bitmap, clear quads
Currently using max_slots > 1 will cause synchronous rendering if the driver flushes its command buffers between one bitmap and the next. Need to improve buffer_write to allow NO_WAIT (as well as no_flush) updates to buffers where we know there is no conflict with previous data.
This commit is contained in:
@@ -330,7 +330,18 @@ setup_bitmap_vertex_data(struct st_context *st,
|
||||
const GLfloat clip_y0 = (GLfloat)(y0 / fb_height * 2.0 - 1.0);
|
||||
const GLfloat clip_x1 = (GLfloat)(x1 / fb_width * 2.0 - 1.0);
|
||||
const GLfloat clip_y1 = (GLfloat)(y1 / fb_height * 2.0 - 1.0);
|
||||
const GLuint max_slots = 4096 / sizeof(st->bitmap.vertices);
|
||||
|
||||
/* XXX: Need to improve buffer_write to allow NO_WAIT (as well as
|
||||
* no_flush) updates to buffers where we know there is no conflict
|
||||
* with previous data. Currently using max_slots > 1 will cause
|
||||
* synchronous rendering if the driver flushes its command buffers
|
||||
* between one bitmap and the next. Our flush hook below isn't
|
||||
* sufficient to catch this as the driver doesn't tell us when it
|
||||
* flushes its own command buffers. Until this gets fixed, pay the
|
||||
* price of allocating a new buffer for each bitmap cache-flush to
|
||||
* avoid synchronous rendering.
|
||||
*/
|
||||
const GLuint max_slots = 1; /* 4096 / sizeof(st->bitmap.vertices); */
|
||||
GLuint i;
|
||||
|
||||
if (st->bitmap.vbuf_slot >= max_slots) {
|
||||
|
@@ -116,7 +116,18 @@ draw_quad(GLcontext *ctx,
|
||||
{
|
||||
struct st_context *st = ctx->st;
|
||||
struct pipe_context *pipe = st->pipe;
|
||||
const GLuint max_slots = 1024 / sizeof(st->clear.vertices);
|
||||
|
||||
/* XXX: Need to improve buffer_write to allow NO_WAIT (as well as
|
||||
* no_flush) updates to buffers where we know there is no conflict
|
||||
* with previous data. Currently using max_slots > 1 will cause
|
||||
* synchronous rendering if the driver flushes its command buffers
|
||||
* between one bitmap and the next. Our flush hook below isn't
|
||||
* sufficient to catch this as the driver doesn't tell us when it
|
||||
* flushes its own command buffers. Until this gets fixed, pay the
|
||||
* price of allocating a new buffer for each bitmap cache-flush to
|
||||
* avoid synchronous rendering.
|
||||
*/
|
||||
const GLuint max_slots = 1; /* 1024 / sizeof(st->clear.vertices); */
|
||||
GLuint i;
|
||||
|
||||
if (st->clear.vbuf_slot >= max_slots) {
|
||||
|
Reference in New Issue
Block a user