xserver: Branch 'master' - 2 commits

Keith Packard keithp at kemper.freedesktop.org
Fri Jan 23 09:57:17 PST 2015


 glamor/glamor.c                         |   23 +++++++++++------------
 glamor/glamor_priv.h                    |    1 +
 hw/xfree86/drivers/modesetting/driver.c |    1 +
 3 files changed, 13 insertions(+), 12 deletions(-)

New commits:
commit 3d12941b408de7a3bdc579e34e119f8aa81ea926
Author: Keith Packard <keithp at keithp.com>
Date:   Thu Jan 22 22:28:34 2015 -0800

    drivers/modesetting: Save current BlockHandler on return in msBlockHandler
    
    If the BlockHandler chain is modified while it is active, we need to
    re-fetch the current value and store it in our private for use the
    next time through.
    
    Signed-off-by: Dave Airlie <airlied at redhat.com>
    Signed-off-by: Keith Packard <keithp at keithp.com>

diff --git a/hw/xfree86/drivers/modesetting/driver.c b/hw/xfree86/drivers/modesetting/driver.c
index 1cb0c7c..d52517d 100644
--- a/hw/xfree86/drivers/modesetting/driver.c
+++ b/hw/xfree86/drivers/modesetting/driver.c
@@ -538,6 +538,7 @@ msBlockHandler(ScreenPtr pScreen, void *pTimeout, void *pReadmask)
 
     pScreen->BlockHandler = ms->BlockHandler;
     pScreen->BlockHandler(pScreen, pTimeout, pReadmask);
+    ms->BlockHandler = pScreen->BlockHandler;
     pScreen->BlockHandler = msBlockHandler;
     if (pScreen->isGPU)
         dispatch_slave_dirty(pScreen);
commit b3e496c6d21058147de9a11b78860e73c74db3cb
Author: Dave Airlie <airlied at redhat.com>
Date:   Fri Jan 23 16:28:28 2015 +1000

    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 <airlied at redhat.com>
    Reviewed-by: Keith Packard <keithp at keithp.com>
    Signed-off-by: Keith Packard <keithp at keithp.com>

diff --git a/glamor/glamor.c b/glamor/glamor.c
index 78e8278..017266a 100644
--- a/glamor/glamor.c
+++ b/glamor/glamor.c
@@ -249,20 +249,20 @@ 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)
 {
     char *debug_level_string;
@@ -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 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


More information about the xorg-commit mailing list