On 2018-10-01 12:37 p.m., Sergii Romantsov wrote: > Kabylake doesn't have such issue, but also it doesn't have > a front buffers in that case. > Coffelake can be fixed if to wait for fences if it has back-buffer. > > Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=108097 > Fixes: aefac10fecc9 (loader/dri3: Only wait for back buffer fences in > dri3_get_buffer) > CC: Michel Dänzer <[email protected]> > Signed-off-by: Sergii Romantsov <[email protected]> > --- > src/loader/loader_dri3_helper.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/src/loader/loader_dri3_helper.c b/src/loader/loader_dri3_helper.c > index 258678a..e9f59a2 100644 > --- a/src/loader/loader_dri3_helper.c > +++ b/src/loader/loader_dri3_helper.c > @@ -1819,7 +1819,7 @@ dri3_get_buffer(__DRIdrawable *driDrawable, > draw->buffers[buf_id] = buffer; > } > > - if (buffer_type == loader_dri3_buffer_back) > + if (buffer_type == loader_dri3_buffer_back || draw->have_back) > dri3_fence_await(draw->conn, draw, buffer); > > /* >
Thanks for the patch, but unfortunately, this re-introduces https://bugs.freedesktop.org/106404 . Also, conceptually it's not clear why the presence of a back buffer would affect waiting for the fake front buffer's fence. Unfortunately, I'm unable to reproduce the problem with radeonsi. Does the patch below help by any chance? 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 _______________________________________________ mesa-dev mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/mesa-dev
