mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-01-02 07:20:16 +01:00
dri3: Prefer the last chosen back when finding a new one.
With the buffer_age code, I need to be able to potentially call this more than once per frame, and it would be bad if a new special event showing up meant I chose a different back mid-frame. Now, once we've chosen a back for the frame, another find_back will choose it again since we know that it won't have ->busy set until swap. Note that this makes find_back return a buffer id instead of a backbuffer index. That's kind of a silly distinction anyway, since it's an identity mapping between the two (it's the front buffer that is at an offset). Reviewed-By: Adel Gadllah <adel.gadllah@gmail.com>
This commit is contained in:
parent
551d459af4
commit
0b02d8a633
1 changed files with 7 additions and 10 deletions
|
|
@ -1090,13 +1090,13 @@ dri3_find_back(xcb_connection_t *c, struct dri3_drawable *priv)
|
|||
|
||||
for (;;) {
|
||||
for (b = 0; b < priv->num_back; b++) {
|
||||
int id = DRI3_BACK_ID(b);
|
||||
int id = DRI3_BACK_ID((b + priv->cur_back) % priv->num_back);
|
||||
struct dri3_buffer *buffer = priv->buffers[id];
|
||||
|
||||
if (!buffer)
|
||||
return b;
|
||||
if (!buffer->busy)
|
||||
return b;
|
||||
if (!buffer || !buffer->busy) {
|
||||
priv->cur_back = id;
|
||||
return id;
|
||||
}
|
||||
}
|
||||
xcb_flush(c);
|
||||
ev = xcb_wait_for_special_event(c, priv->special_event);
|
||||
|
|
@ -1123,13 +1123,10 @@ dri3_get_buffer(__DRIdrawable *driDrawable,
|
|||
int buf_id;
|
||||
|
||||
if (buffer_type == dri3_buffer_back) {
|
||||
int back = dri3_find_back(c, priv);
|
||||
buf_id = dri3_find_back(c, priv);
|
||||
|
||||
if (back < 0)
|
||||
if (buf_id < 0)
|
||||
return NULL;
|
||||
|
||||
priv->cur_back = back;
|
||||
buf_id = DRI3_BACK_ID(priv->cur_back);
|
||||
} else {
|
||||
buf_id = DRI3_FRONT_ID;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue