Hi Mario, I've picked up patches 1-4 in master and will land them in the stable branches shortly.
Gents, Can anyone spare some time and take a look at this patch. If you're planning to look into it in a few days/a week from now, kindly let me know so that I can keep the annoyance to a minimum :) Thanks Emil On 05/12/14 07:42, Mario Kleiner wrote: > The code for emitting INTEL_swap_events swap completion > events needs to translate from 32-Bit sbc on the wire to > 64-Bit sbc for the events and handle wraparound accordingly. > > It assumed that events would be sent by the server in the > order their corresponding swap requests were emitted from > the client, iow. sbc count should be always increasing. This > was correct for DRI2. > > This is not always the case under the DRI3/Present backend, > where the Present extension can execute swaps and send out > completion events in a different order than the submission > order of the present requests. This confused the wraparound > handling. This patch fixes the problem by handling 32-Bit > wraparound in both directions. As long as successive swap > completion events real 64-Bit sbc's don't differ by more > than 2^30, this should be able to do the right thing. > > Cc: "10.3 10.4" <mesa-sta...@lists.freedesktop.org> > Signed-off-by: Mario Kleiner <mario.kleiner...@gmail.com> > --- > src/glx/glxext.c | 9 +++++++-- > 1 file changed, 7 insertions(+), 2 deletions(-) > > diff --git a/src/glx/glxext.c b/src/glx/glxext.c > index 68c359e..fdc24d4 100644 > --- a/src/glx/glxext.c > +++ b/src/glx/glxext.c > @@ -143,8 +143,13 @@ __glXWireToEvent(Display *dpy, XEvent *event, xEvent > *wire) > aevent->ust = ((CARD64)awire->ust_hi << 32) | awire->ust_lo; > aevent->msc = ((CARD64)awire->msc_hi << 32) | awire->msc_lo; > > - if (awire->sbc < glxDraw->lastEventSbc) > - glxDraw->eventSbcWrap += 0x100000000; > + /* Handle 32-Bit wire sbc wraparound in both directions to cope with > out > + * of sequence 64-Bit sbc's > + */ > + if ((int64_t) awire->sbc < ((int64_t) glxDraw->lastEventSbc - > 0x40000000)) > + glxDraw->eventSbcWrap += 0x100000000; > + if ((int64_t) awire->sbc > ((int64_t) glxDraw->lastEventSbc + > 0x40000000)) > + glxDraw->eventSbcWrap -= 0x100000000; > glxDraw->lastEventSbc = awire->sbc; > aevent->sbc = awire->sbc + glxDraw->eventSbcWrap; > return True; > _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev