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