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

Reply via email to