glx/present: Only send GLX_BufferSwapComplete for PresentCompleteKindPixmap
Present didn't provide the 'kind' argument to the present_complete_notify hook that GLX uses to construct GLX_BufferSwapComplete events, so GLX was reporting events for PresentCompleteKindMSC notifications, which resulted in duplicate GLX_BufferSwapComplete events and crashes in clutter. See the gnome bug: https://bugzilla.gnome.org/show_bug.cgi?id=733282 Signed-off-by: Keith Packard <keithp@keithp.com> Reviewed-by: Eric Anholt <eric@anholt.net>
This commit is contained in:
parent
7a0c79c8c4
commit
bf338efc67
|
@ -2508,13 +2508,16 @@ __glXsendSwapEvent(__GLXdrawable *drawable, int type, CARD64 ust,
|
||||||
|
|
||||||
#if PRESENT
|
#if PRESENT
|
||||||
static void
|
static void
|
||||||
__glXpresentCompleteNotify(WindowPtr window, CARD8 present_mode, CARD32 serial,
|
__glXpresentCompleteNotify(WindowPtr window, CARD8 present_kind, CARD8 present_mode,
|
||||||
uint64_t ust, uint64_t msc)
|
CARD32 serial, uint64_t ust, uint64_t msc)
|
||||||
{
|
{
|
||||||
__GLXdrawable *drawable;
|
__GLXdrawable *drawable;
|
||||||
int glx_type;
|
int glx_type;
|
||||||
int rc;
|
int rc;
|
||||||
|
|
||||||
|
if (present_kind != PresentCompleteKindPixmap)
|
||||||
|
return;
|
||||||
|
|
||||||
rc = dixLookupResourceByType((void **) &drawable, window->drawable.id,
|
rc = dixLookupResourceByType((void **) &drawable, window->drawable.id,
|
||||||
__glXDrawableRes, serverClient, DixGetAttrAccess);
|
__glXDrawableRes, serverClient, DixGetAttrAccess);
|
||||||
|
|
||||||
|
|
|
@ -116,6 +116,7 @@ extern _X_EXPORT Bool
|
||||||
present_screen_init(ScreenPtr screen, present_screen_info_ptr info);
|
present_screen_init(ScreenPtr screen, present_screen_info_ptr info);
|
||||||
|
|
||||||
typedef void (*present_complete_notify_proc)(WindowPtr window,
|
typedef void (*present_complete_notify_proc)(WindowPtr window,
|
||||||
|
CARD8 kind,
|
||||||
CARD8 mode,
|
CARD8 mode,
|
||||||
CARD32 serial,
|
CARD32 serial,
|
||||||
uint64_t ust,
|
uint64_t ust,
|
||||||
|
|
|
@ -174,7 +174,7 @@ present_send_complete_notify(WindowPtr window, CARD8 kind, CARD8 mode, CARD32 se
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (complete_notify)
|
if (complete_notify)
|
||||||
(*complete_notify)(window, mode, serial, ust, msc);
|
(*complete_notify)(window, kind, mode, serial, ust, msc);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
|
Loading…
Reference in New Issue