From: Dave Airlie <[email protected]> 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. Signed-off-by: Dave Airlie <[email protected]> --- glamor/glamor.c | 22 ++++++++++------------ glamor/glamor_priv.h | 1 + 2 files changed, 11 insertions(+), 12 deletions(-) diff --git a/glamor/glamor.c b/glamor/glamor.c index 78e8278..f96abcc 100644 --- a/glamor/glamor.c +++ b/glamor/glamor.c @@ -249,20 +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); + 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) { char *debug_level_string; @@ -443,11 +442,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 +594,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 f699497..ed6e2d1 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 -- 1.9.3 _______________________________________________ [email protected]: X.Org development Archives: http://lists.x.org/archives/xorg-devel Info: http://lists.x.org/mailman/listinfo/xorg-devel
