When rotating X's display on the fly using xrandr -o left|normal|inverted|right command, following transitions are performed with black screen delay effect i.e. the display becomes black for a moment then displays rotated screen.
The following transitions are performed with a delay - a black screen is shown with ~1 second duration, then rotated screen appears
normal > right|left
inverted > normal|left|right
left > normal|inverted
right > normal|inverted
The following transitions are performed smoothly with no delays, i.e. "immediately"
normal > inverted
left > right
right > left
Steps to reproduce
1. Run following on machine with xorg-x11-drv-intel
2. In terminal run following from normal orientation : xrandr -o left
Actual result :
Screen is rotated with delay and black screen effect then it shows normal rotated screen
Expected result :
Should rotate screen with no delays and any black screen effect.
Like when rotating from the right orientation to the left orientation.
Details : Most time consuming code while rotating the display orientation with xrandr is
ret = crtc->funcs->set_mode_major(crtc, mode, rotation, x, y);
intel video drivers function call.
This call is located in hw/xfree86/modes/xf86Crtc.c file in xf86CrtcSetModeTransform function.
Graphics : Intel GMA 3150 graphics
Graphics : Intel Graphics Media Accelerator (GMA) 950
See the proposal for per-crtc pixmaps in RandR 1.4.
Randr1.4 was still born. However, this is indeed quite annoying since it should be possible to achieve a seamless transition to a rotated framebuffer in the current setup. :|
This is just an unnecessary forced disable due to the crtc_disable() in apply(). Comparing xrandr.c with xserver/randr/rrcrtc.c, I think it is a workaround for randr1.0 as randr1.2 drivers handle the situation fine.
Nope, actually missing a bit of protocol to change the screen size and adjust the CRTCs simultaneously.