[Mesa-dev] [Bug 98833] [REGRESSION, bisected] Wayland revert commit breaks fullscreen frame updates

bugzilla-daemon at freedesktop.org bugzilla-daemon at freedesktop.org
Wed Nov 23 17:35:40 UTC 2016


https://bugs.freedesktop.org/show_bug.cgi?id=98833

            Bug ID: 98833
           Summary: [REGRESSION, bisected] Wayland revert commit breaks
                    fullscreen frame updates
           Product: Mesa
           Version: git
          Hardware: Other
                OS: All
            Status: NEW
          Severity: normal
          Priority: medium
         Component: EGL/Wayland
          Assignee: wayland-bugs at lists.freedesktop.org
          Reporter: eero.t.tamminen at intel.com
        QA Contact: mesa-dev at lists.freedesktop.org

Most of SynMark2 v7.0.1 (internal test-suite) Wayland version tests' fullscreen
frame updates start to be shown in random order after following commit:
------------------
commit 9ca6711faa03a9527c0946f2489e42cd9a62235c
Author:     Daniel Stone <daniels at collabora.com>
AuthorDate: Wed Jun 1 09:59:06 2016 +0100
Commit:     Daniel Stone <daniels at collabora.com>
CommitDate: Thu Nov 10 10:25:03 2016 +0000

    Revert "wayland: Block for the frame callback in get_back_bo not
dri2_swap_buffers"

    This reverts commit 25cc889004aad6d1cab9edd76db898658e347b97, though
    since the code has changed, it was applied manually.

    The intent of moving blocking from SwapBuffers to get_back_bo, was to
    avoid unnecessary triple-buffering by ensuring that the compositor had
    fully processed the previous frame before we started rendering. This
    means that the only time we would have to resort to triple-buffering
    would be when the buffer is directly scanned out, thus saving an extra
    buffer for composition anyway.

    The 'repaint window' changes introduced in Weston since then, however,
    have narrowed the window of time between the frame event being sent and
    the repaint loop needing to conclude, to 7ms by default, in order to
    reduce latency. This means however that blocking in get_back_bo gives a
    maximum of 7ms for the entire GL submission to begin and complete.

    Not only this, but if a client is using buffer_age to avoid full
    repaints, the buffer-age request will stall in get_back_bo until the
    frame callback completes, meaning that the client cannot even calculate
    the repaint area before the 7ms window.

    The combination of the two meant that WebKit-GTK+ was failing to
    achieve full framerate on a Minnowboard, due to spending a great deal of
    its time attempting to query the age of the next buffer before redraw.

    Revert to the previous behaviour of allowing rendering to begin but
    delaying SwapBuffers, unless and until we can find a more gentle
    behaviour.

    Signed-off-by: Daniel Stone <daniels at collabora.com>
    Reviewed-by: Jonas Ådahl <jadahl at gmail.com>
    Reviewed-by: Derek Foreman <derekf at osg.samsung.com>
    Tested-by: Derek Foreman <derekf at osg.samsung.com>
    Cc: Kristian Høgsberg <krh at bitplanet.net>
------------------

Frame updates work fine with 12.0.4 & 13.0.1 (and Ubuntu Mesa 11.2), but not
after above commit.

Test suite has options for using single, double or triple buffering and
toggling Vsync, but these didn't have any effect.

Only if the tests are run in non-native (fullscreen) resolution, or as
windowed, the problem isn't visible.

I wasn't able to reproduce the issue with (Ubuntu) Glmark2 Wayland version, and
didn't have any other test-cases at hand.

So far I've tested this only on SKL, with Ubuntu 16.04, using its default
kernel (i.e. don't know whether kernel affects it).

-- 
You are receiving this mail because:
You are the QA Contact for the bug.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/mesa-dev/attachments/20161123/d0af14a4/attachment.html>


More information about the mesa-dev mailing list