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:
Keith Whitwell
2009-10-02 15:36:47 +01:00
parent 316b4ddcf7
commit 918199fb0f
2 changed files with 24 additions and 2 deletions

View File

@@ -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) {

View File

@@ -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) {