From d3fa4472152a273fd8e9277808fece3e16798e5f Mon Sep 17 00:00:00 2001 From: Dave Airlie Date: Fri, 27 Jun 2014 10:11:32 +1000 Subject: [PATCH] add dri3 gnome-shell startup fix from Jasper. --- ...Drawable-s-ID-in-the-GLX_BufferSwapC.patch | 72 +++++++++++++++++++ mesa.spec | 10 ++- 2 files changed, 81 insertions(+), 1 deletion(-) create mode 100644 0001-glxext-Send-the-Drawable-s-ID-in-the-GLX_BufferSwapC.patch diff --git a/0001-glxext-Send-the-Drawable-s-ID-in-the-GLX_BufferSwapC.patch b/0001-glxext-Send-the-Drawable-s-ID-in-the-GLX_BufferSwapC.patch new file mode 100644 index 0000000..206307f --- /dev/null +++ b/0001-glxext-Send-the-Drawable-s-ID-in-the-GLX_BufferSwapC.patch @@ -0,0 +1,72 @@ +From b4dcf87f34f68111acd9d364739938721fc692f4 Mon Sep 17 00:00:00 2001 +From: "Jasper St. Pierre" +Date: Tue, 24 Jun 2014 13:43:53 -0400 +Subject: [PATCH] glxext: Send the Drawable's ID in the GLX_BufferSwapComplete + event + +While the official INTEL_swap_event specification says that the drawable +field should contain the GLXDrawable, not the Drawable, the existing +DRI2 code in dri2.c that translates from DRI2_BufferSwapComplete sends out +GLX_BufferSwapComplete with the Drawable's ID, so existing codebases +like Clutter/Cogl rely on getting the Drawable. + +Match DRI2's error here and stuff the event with the X Drawable, not +the GLX drawable. + +This fixes apps seeing wrong drawables through an indirect GLX context +or with DRI3, which uses the GLX_BufferSwapComplete event directly on +the wire instead of translates Present in mesa. + +At the same time, also modify the structure for the event to make sure +that clients don't make the same mistake. This is not an API or ABI +break, as GLXDrawable and Drawable are both typedefs for XID. + +Signed-off-by: Jasper St. Pierre +Reviewed-by: Axel Davy +Cc: "10.1 10.2" +Signed-off-by: Dave Airlie +--- + include/GL/glx.h | 2 +- + src/glx/glxext.c | 9 +++++---- + 2 files changed, 6 insertions(+), 5 deletions(-) + +diff --git a/include/GL/glx.h b/include/GL/glx.h +index 234abc0..78f5052 100644 +--- a/include/GL/glx.h ++++ b/include/GL/glx.h +@@ -518,7 +518,7 @@ typedef struct { + unsigned long serial; /* # of last request processed by server */ + Bool send_event; /* true if this came from a SendEvent request */ + Display *display; /* Display the event was read from */ +- GLXDrawable drawable; /* drawable on which event was requested in event mask */ ++ Drawable drawable; /* drawable on which event was requested in event mask */ + int event_type; + int64_t ust; + int64_t msc; +diff --git a/src/glx/glxext.c b/src/glx/glxext.c +index 94582f6..68c359e 100644 +--- a/src/glx/glxext.c ++++ b/src/glx/glxext.c +@@ -134,14 +134,15 @@ __glXWireToEvent(Display *dpy, XEvent *event, xEvent *wire) + GLXBufferSwapComplete *aevent = (GLXBufferSwapComplete *)event; + xGLXBufferSwapComplete2 *awire = (xGLXBufferSwapComplete2 *)wire; + struct glx_drawable *glxDraw = GetGLXDrawable(dpy, awire->drawable); +- aevent->event_type = awire->event_type; +- aevent->drawable = awire->drawable; +- aevent->ust = ((CARD64)awire->ust_hi << 32) | awire->ust_lo; +- aevent->msc = ((CARD64)awire->msc_hi << 32) | awire->msc_lo; + + if (!glxDraw) + return False; + ++ aevent->event_type = awire->event_type; ++ aevent->drawable = glxDraw->xDrawable; ++ 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; + glxDraw->lastEventSbc = awire->sbc; +-- +2.0.0 + diff --git a/mesa.spec b/mesa.spec index d324660..f2d572e 100644 --- a/mesa.spec +++ b/mesa.spec @@ -59,7 +59,7 @@ Summary: Mesa graphics libraries Name: mesa Version: 10.2.2 -Release: 1.%{gitdate}%{?dist} +Release: 2.%{gitdate}%{?dist} License: MIT Group: System Environment/Libraries URL: http://www.mesa3d.org @@ -81,6 +81,9 @@ Patch12: mesa-8.0.1-fix-16bpp.patch Patch15: mesa-9.2-hardware-float.patch Patch20: mesa-10.2-evergreen-big-endian.patch +# dri3 GLX_INTEL_swap_event fix +Patch30: 0001-glxext-Send-the-Drawable-s-ID-in-the-GLX_BufferSwapC.patch + # https://bugs.freedesktop.org/show_bug.cgi?id=73512 Patch99: 0001-opencl-use-versioned-.so-in-mesa.icd.patch @@ -347,6 +350,8 @@ grep -q ^/ src/gallium/auxiliary/vl/vl_decoder.c && exit 1 %patch15 -p1 -b .hwfloat %patch20 -p1 -b .egbe +%patch30 -p1 -b .dri3fix + %if 0%{?with_opencl} %patch99 -p1 -b .icd %endif @@ -674,6 +679,9 @@ rm -rf $RPM_BUILD_ROOT %endif %changelog +* Fri Jun 27 2014 Dave Airlie 10.2.2-2.20140625 +- add dri3 gnome-shell startup fix from Jasper. + * Wed Jun 25 2014 Igor Gnatenko - 10.2.2-1.20140625 - 10.2.2 upstream release