On Wed, 2018-05-16 at 11:10 +0200, Michel Dänzer wrote:
> From: Michel Dänzer <michel.daen...@amd.com>
> 
> Prevents spuriously bumping the upper 32 bits of the SBC, which results
> in hangs with the modesetting driver from xserver 1.20.
> 

I've picked this patch for 18.0, as it was nominated when pushed to master.

Nevertheless, the patch didn't apply cleanly in branch, so I've resolved
conflicts.


You can find the commited solved patch at

https://github.com/Igalia/release-mesa/commit/b582b8fc93697d193365bf11cd9f336d78
6d7f8d


If you think the patch was solved wrongly, please, send me a fixed version.
Thanks in advance!


        J.A.


> Bugzilla: https://bugs.freedesktop.org/106351
> Tested-by: Mike Lothian <m...@fireburn.co.uk>
> Signed-off-by: Michel Dänzer <michel.daen...@amd.com>
> ---
>  src/loader/loader_dri3_helper.c | 14 +++++++++++---
>  1 file changed, 11 insertions(+), 3 deletions(-)
> 
> diff --git a/src/loader/loader_dri3_helper.c b/src/loader/loader_dri3_helper.c
> index 6db8303d26d..f0ff2f07bde 100644
> --- a/src/loader/loader_dri3_helper.c
> +++ b/src/loader/loader_dri3_helper.c
> @@ -370,9 +370,17 @@ dri3_handle_present_event(struct loader_dri3_drawable 
> *draw,
>         * checking for wrap.
>         */
>        if (ce->kind == XCB_PRESENT_COMPLETE_KIND_PIXMAP) {
> -         draw->recv_sbc = (draw->send_sbc & 0xffffffff00000000LL) | 
> ce->serial;
> -         if (draw->recv_sbc > draw->send_sbc)
> -            draw->recv_sbc -= 0x100000000;
> +         uint64_t recv_sbc = (draw->send_sbc & 0xffffffff00000000LL) | 
> ce->serial;
> +
> +         /* Only assume wraparound if that results in exactly the previous
> +          * SBC + 1, otherwise ignore received SBC > sent SBC (those are
> +          * probably from a previous loader_dri3_drawable instance) to avoid
> +          * calculating bogus target MSC values in 
> loader_dri3_swap_buffers_msc
> +          */
> +         if (recv_sbc <= draw->send_sbc)
> +            draw->recv_sbc = recv_sbc;
> +         else if (recv_sbc == (draw->recv_sbc + 0x100000001ULL))
> +            draw->recv_sbc = recv_sbc - 0x100000000ULL;
>  
>           /* When moving from flip to copy, we assume that we can allocate in
>            * a more optimal way if we don't need to cater for the display
_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to