Mesa (staging/18.2): loader/dri3: Also wait for front buffer fence if we triggered it

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Wed Oct 24 09:00:25 UTC 2018


Module: Mesa
Branch: staging/18.2
Commit: f8d22f7b6ebf5037900d041ac519f65bbdb8522e
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=f8d22f7b6ebf5037900d041ac519f65bbdb8522e

Author: Michel Dänzer <michel.daenzer at amd.com>
Date:   Mon Oct  1 18:43:46 2018 +0200

loader/dri3: Also wait for front buffer fence if we triggered it

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 driver and some applications, e.g.
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>
(cherry picked from commit c20ba1be1843d035f36e9794bee7aea9abfc2f8b)

---

 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 f1c08f605f..fc42b8ea9c 100644
--- a/src/loader/loader_dri3_helper.c
+++ b/src/loader/loader_dri3_helper.c
@@ -1737,6 +1737,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) {
@@ -1793,6 +1794,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) {
@@ -1814,13 +1816,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);
 
    /*




More information about the mesa-commit mailing list