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@redhat.com> Reviewed-by: Keith Packard <keithp@keithp.com> Signed-off-by: Keith Packard <keithp@keithp.com>
This commit is contained in:
parent
5af2f5b7d2
commit
b3e496c6d2
|
@ -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)) {
|
||||
|
|
|
@ -215,6 +215,7 @@ struct glamor_saved_procs {
|
|||
#if XSYNC
|
||||
SyncScreenFuncsRec sync_screen_funcs;
|
||||
#endif
|
||||
ScreenBlockHandlerProcPtr block_handler;
|
||||
};
|
||||
|
||||
#define CACHE_FORMAT_COUNT 3
|
||||
|
|
Loading…
Reference in New Issue
Block a user