Commit bf338efc authored by Keith Packard's avatar Keith Packard

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=733282Signed-off-by: Keith Packard's avatarKeith Packard <keithp@keithp.com>
Reviewed-by: Eric Anholt's avatarEric Anholt <eric@anholt.net>
parent 7a0c79c8
......@@ -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
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment