[PATCH] hw/xfree86: Fix block handler wrapping in xf86Rotate
eric at anholt.net
Wed Apr 16 16:56:14 PDT 2014
Keith Packard <keithp at keithp.com> writes:
> xf86Rotate, it was delaying unwrapping the BlockHandler until after
> calling xf86RotateRedisplay. If there was a software cursor on the
> screen, the redisplay operation would cause cursor to be removed from
> the frame buffer and the misprite block handler to be inserted into
> the block handler chain with the misprite screen private saved block
> handler now set to xf86RotateBlockHandler.
> When xf86RotateRedisplay returned, xf86RotateBlockHandler would then
> set screen->BlockHandler to its saved value, call down and then reset
> screen->BlockHandler to xf86RotateBlockHandler. miSpriteBlockHandler
> would never be called after that, which meant that the software cursor
> will now disappear from the screen whenever rendering overlapped and
> would only reappear when the cursor was moved.
> To correct this, all that is needed is to move the restoration of
> screen->BlockHandler to the top of xf86RotateBlockHandler, before the
> call to xf86RotateRedisplay.
> I've also added to this patch a check to see if the rotate block
> handler is still required and only re-insert itself if that is the
> There's also an enormous comment added to scrnintstr.h which details
> the required conventions for screen function wrapping.
I'm uncomfortable with you mashing these 3 changes together,
particularly the reinsertion change in what was supposed to be just a
bugfix commit. It didn't take much grepping for me to find more code
that wasn't rewrapping the blockhandler according to these rules:
hw/xfree86/common/xf86VGAarbiterPriv.h:#define SCREEN_EPILOG(x,y) pScreen->x = y;
void *pTimeout, void *pReadmask)
pScreen->BlockHandler(pScreen, pTimeout, pReadmask);
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Size: 818 bytes
Desc: not available
More information about the xorg-devel