loader/dri3: Only wait for back buffer fences in dri3_get_buffer
authorMichel Dänzer <michel.daenzer@amd.com>
Tue, 4 Sep 2018 10:18:19 +0000 (12:18 +0200)
committerMichel Dänzer <michel@daenzer.net>
Wed, 12 Sep 2018 14:53:58 +0000 (16:53 +0200)
We don't need to wait before drawing to the fake front buffer, as front
buffer rendering by definition is allowed to produce artifacts.

Fixes hangs in some cases when re-using the fake front buffer, due to it
still being busy (i.e. in use for presentation).

Cc: mesa-stable@lists.freedesktop.org
Bugzilla: https://bugs.freedesktop.org/106404
Bugzilla: https://bugs.freedesktop.org/107757
Tested-by: Olivier Fourdan <ofourdan@redhat.com>
Reviewed-by: Thomas Hellstrom <thellstrom@vmware.com>
src/loader/loader_dri3_helper.c

index b62521485837d5de1467ef5f3314c5398352c145..258678a6662f0bf0dde60e6372ac09364c857bb9 100644 (file)
@@ -1818,7 +1818,9 @@ dri3_get_buffer(__DRIdrawable *driDrawable,
       buffer = new_buffer;
       draw->buffers[buf_id] = buffer;
    }
       buffer = new_buffer;
       draw->buffers[buf_id] = buffer;
    }
-   dri3_fence_await(draw->conn, draw, buffer);
+
+   if (buffer_type == loader_dri3_buffer_back)
+      dri3_fence_await(draw->conn, draw, buffer);
 
    /*
     * Do we need to preserve the content of a previous buffer?
 
    /*
     * Do we need to preserve the content of a previous buffer?