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
|
||||
static void
|
||||
__glXpresentCompleteNotify(WindowPtr window, CARD8 present_mode, CARD32 serial,
|
||||
uint64_t ust, uint64_t msc)
|
||||
__glXpresentCompleteNotify(WindowPtr window, CARD8 present_kind, CARD8 present_mode,
|
||||
CARD32 serial, uint64_t ust, uint64_t msc)
|
||||
{
|
||||
__GLXdrawable *drawable;
|
||||
int glx_type;
|
||||
int rc;
|
||||
|
||||
if (present_kind != PresentCompleteKindPixmap)
|
||||
return;
|
||||
|
||||
rc = dixLookupResourceByType((void **) &drawable, window->drawable.id,
|
||||
__glXDrawableRes, serverClient, DixGetAttrAccess);
|
||||
|
||||
|
|
|
@ -116,6 +116,7 @@ extern _X_EXPORT Bool
|
|||
present_screen_init(ScreenPtr screen, present_screen_info_ptr info);
|
||||
|
||||
typedef void (*present_complete_notify_proc)(WindowPtr window,
|
||||
CARD8 kind,
|
||||
CARD8 mode,
|
||||
CARD32 serial,
|
||||
uint64_t ust,
|
||||
|
|
|
@ -174,7 +174,7 @@ present_send_complete_notify(WindowPtr window, CARD8 kind, CARD8 mode, CARD32 se
|
|||
}
|
||||
}
|
||||
if (complete_notify)
|
||||
(*complete_notify)(window, mode, serial, ust, msc);
|
||||
(*complete_notify)(window, kind, mode, serial, ust, msc);
|
||||
}
|
||||
|
||||
void
|
||||
|
|
Loading…
Reference in New Issue