From b3e496c6d21058147de9a11b78860e73c74db3cb Mon Sep 17 00:00:00 2001 From: Dave Airlie Date: Fri, 23 Jan 2015 16:28:28 +1000 Subject: glamor: use screen blockhandler rather than dix one (v3) This adds glamor into the block handler call chain in the correct place. This should fix interactions between glamor and drivers requiring damage from glamor. v2: okay don't consolidate, just leave things wierd for now remove blcokhandler in screen close. v3: block handler wrapping the right way. Signed-off-by: Dave Airlie Reviewed-by: Keith Packard Signed-off-by: Keith Packard --- glamor/glamor.c | 23 +++++++++++------------ glamor/glamor_priv.h | 1 + 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/glamor/glamor.c b/glamor/glamor.c index 78e827809..017266a85 100644 --- a/glamor/glamor.c +++ b/glamor/glamor.c @@ -249,19 +249,19 @@ glamor_block_handler(ScreenPtr screen) } static void -_glamor_block_handler(void *data, OSTimePtr timeout, void *last_select_mask) +_glamor_block_handler(ScreenPtr screen, void *timeout, void *readmask) { - glamor_screen_private *glamor_priv = data; + glamor_screen_private *glamor_priv = glamor_get_screen_private(screen); + + screen->BlockHandler = glamor_priv->saved_procs.block_handler; + screen->BlockHandler(screen, timeout, readmask); + glamor_priv->saved_procs.block_handler = screen->BlockHandler; + screen->BlockHandler = _glamor_block_handler; glamor_make_current(glamor_priv); glFlush(); } -static void -_glamor_wakeup_handler(void *data, int result, void *last_select_mask) -{ -} - static void glamor_set_debug_level(int *debug_level) { @@ -443,11 +443,9 @@ glamor_init(ScreenPtr screen, unsigned int flags) goto fail; if (flags & GLAMOR_USE_SCREEN) { - if (!RegisterBlockAndWakeupHandlers(_glamor_block_handler, - _glamor_wakeup_handler, - glamor_priv)) { - goto fail; - } + + glamor_priv->saved_procs.block_handler = screen->BlockHandler; + screen->BlockHandler = _glamor_block_handler; glamor_priv->saved_procs.create_gc = screen->CreateGC; screen->CreateGC = glamor_create_gc; @@ -597,6 +595,7 @@ glamor_close_screen(ScreenPtr screen) glamor_priv->saved_procs.change_window_attributes; screen->CopyWindow = glamor_priv->saved_procs.copy_window; screen->BitmapToRegion = glamor_priv->saved_procs.bitmap_to_region; + screen->BlockHandler = glamor_priv->saved_procs.block_handler; } #ifdef RENDER if (ps && (flags & GLAMOR_USE_PICTURE_SCREEN)) { diff --git a/glamor/glamor_priv.h b/glamor/glamor_priv.h index f69949790..ed6e2d192 100644 --- a/glamor/glamor_priv.h +++ b/glamor/glamor_priv.h @@ -215,6 +215,7 @@ struct glamor_saved_procs { #if XSYNC SyncScreenFuncsRec sync_screen_funcs; #endif + ScreenBlockHandlerProcPtr block_handler; }; #define CACHE_FORMAT_COUNT 3 -- cgit v1.2.3