[Mesa-dev] [PATCH] loader/dri3: Also wait for front buffer fence if we triggered it
Michel Dänzer
michel at daenzer.net
Thu Oct 11 08:27:09 UTC 2018
Any feedback? Without negative feedback, I'll push this fix tomorrow.
On 2018-10-02 4:44 p.m., Michel Dänzer wrote:
> From: Michel Dänzer <michel.daenzer at amd.com>
>
> In that case, we have to wait for the fence to synchronize with the
> corresponding drawing we triggered in the X server.
>
> Fixes incorrect display with the i965 and some applications, e.g.
BTW, I've locally fixed this to say "the i965 driver".
> solvespace.
>
> Bugzilla: https://bugs.freedesktop.org/108097
> Fixes: aefac10fecc9 "loader/dri3: Only wait for back buffer fences in
> dri3_get_buffer"
> Tested-by: Sergii Romantsov <sergii.romantsov at globallogic.com>
> Signed-off-by: Michel Dänzer <michel.daenzer at amd.com>
> ---
> src/loader/loader_dri3_helper.c | 7 +++++--
> 1 file changed, 5 insertions(+), 2 deletions(-)
>
> diff --git a/src/loader/loader_dri3_helper.c b/src/loader/loader_dri3_helper.c
> index f641a34e6d1..1981b5f0515 100644
> --- a/src/loader/loader_dri3_helper.c
> +++ b/src/loader/loader_dri3_helper.c
> @@ -1736,6 +1736,7 @@ dri3_get_buffer(__DRIdrawable *driDrawable,
> struct loader_dri3_drawable *draw)
> {
> struct loader_dri3_buffer *buffer;
> + bool fence_await = buffer_type == loader_dri3_buffer_back;
> int buf_id;
>
> if (buffer_type == loader_dri3_buffer_back) {
> @@ -1791,6 +1792,7 @@ dri3_get_buffer(__DRIdrawable *driDrawable,
> 0, 0, 0, 0,
> draw->width, draw->height);
> dri3_fence_trigger(draw->conn, new_buffer);
> + fence_await = true;
> }
> dri3_free_render_buffer(draw, buffer);
> } else if (buffer_type == loader_dri3_buffer_front) {
> @@ -1812,13 +1814,14 @@ dri3_get_buffer(__DRIdrawable *driDrawable,
> new_buffer->linear_buffer,
> 0, 0, draw->width, draw->height,
> 0, 0, 0);
> - }
> + } else
> + fence_await = true;
> }
> buffer = new_buffer;
> draw->buffers[buf_id] = buffer;
> }
>
> - if (buffer_type == loader_dri3_buffer_back)
> + if (fence_await)
> dri3_fence_await(draw->conn, draw, buffer);
>
> /*
>
--
Earthling Michel Dänzer | http://www.amd.com
Libre software enthusiast | Mesa and X developer
More information about the mesa-dev
mailing list