mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-30 18:40:13 +01:00
dri3: Only update number of back buffers in loader_dri3_get_buffers
And only free no longer needed back buffers there as well.
We want to stick to the same back buffer throughout a frame, otherwise
we can run into various issues.
Bugzilla: https://bugs.freedesktop.org/105906
Bugzilla: https://bugs.freedesktop.org/106399
Fixes: 3160cb86aa "egl/x11: Re-allocate buffers if format is suboptimal"
Reported-by: Sergii Romantsov <sergii.romantsov@globallogic.com>
Tested-by: Eero Tamminen <eero.t.tamminen@intel.com>
Acked-by: Daniel Stone <daniels@collabora.com>
This commit is contained in:
parent
2cf64fdb46
commit
6f81e07ecb
1 changed files with 11 additions and 8 deletions
|
|
@ -420,13 +420,6 @@ dri3_handle_present_event(struct loader_dri3_drawable *draw,
|
|||
|
||||
if (buf && buf->pixmap == ie->pixmap)
|
||||
buf->busy = 0;
|
||||
|
||||
if (buf && draw->cur_blit_source != b && !buf->busy &&
|
||||
(buf->reallocate ||
|
||||
(draw->num_back <= b && b < LOADER_DRI3_MAX_BACK))) {
|
||||
dri3_free_render_buffer(draw, buf);
|
||||
draw->buffers[b] = NULL;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
|
@ -559,7 +552,6 @@ dri3_find_back(struct loader_dri3_drawable *draw)
|
|||
/* Check whether we need to reuse the current back buffer as new back.
|
||||
* In that case, wait until it's not busy anymore.
|
||||
*/
|
||||
dri3_update_num_back(draw);
|
||||
num_to_consider = draw->num_back;
|
||||
if (!loader_dri3_have_image_blit(draw) && draw->cur_blit_source != -1) {
|
||||
num_to_consider = 1;
|
||||
|
|
@ -1815,6 +1807,7 @@ loader_dri3_get_buffers(__DRIdrawable *driDrawable,
|
|||
{
|
||||
struct loader_dri3_drawable *draw = loaderPrivate;
|
||||
struct loader_dri3_buffer *front, *back;
|
||||
int buf_id;
|
||||
|
||||
buffers->image_mask = 0;
|
||||
buffers->front = NULL;
|
||||
|
|
@ -1826,6 +1819,16 @@ loader_dri3_get_buffers(__DRIdrawable *driDrawable,
|
|||
if (!dri3_update_drawable(driDrawable, draw))
|
||||
return false;
|
||||
|
||||
dri3_update_num_back(draw);
|
||||
|
||||
/* Free no longer needed back buffers */
|
||||
for (buf_id = draw->num_back; buf_id < LOADER_DRI3_MAX_BACK; buf_id++) {
|
||||
if (draw->cur_blit_source != buf_id && draw->buffers[buf_id]) {
|
||||
dri3_free_render_buffer(draw, draw->buffers[buf_id]);
|
||||
draw->buffers[buf_id] = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
/* pixmaps always have front buffers.
|
||||
* Exchange swaps also mandate fake front buffers.
|
||||
*/
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue