On Fri, Dec 28, 2012 at 2:08 AM, Maarten Maathuis <[email protected]> wrote: > On Thu, Dec 27, 2012 at 8:48 PM, Denis 'GNUtoo' Carikli > <[email protected]> wrote: >> Hi, >> >> I've been trying to add rotation to the out of tree >> xf86-video-omapfb(I'm aware of xf86-video-omap but I've an omap3, and >> beside, it requires a staging kernel driver). >> >> So far I got rotation working(xrandr -o 1 works). >> >> But when I want to rotate back (xrandr -o 0) Xorg checks if the >> requested X resolution is smaller or equals to the masimum allowed >> Xresolution and it fails... >> >> The thing is that I've been using a hack to make it work: >> instead of keeping the same resolution and just making rotate the >> display content, I've changed the resolution too. >> >> My device is the GTA04 and it has a 480x640 display, so when rotating a >> new mode is created(640x480): >> root@om-gta04:~# xrandr -q >> Screen 0: minimum 8 x 8, current 640 x 480, maximum 480 x 640 >> LCD connected 640x480+0+0 left (normal left inverted right x axis y >> axis) 0mm x 0mm >> 640x480 66.8 + >> 480x640 (0x41) 22.2MHz >> h: width 480 start 504 end 512 total 520 skew 0 clock >> 42.6KHz >> v: height 640 start 644 end 646 total 648 clock >> 65.7Hz >> >> This shouldn't happen and instead I should use the normal approach, >> which is not to change the resolution... >> >> But that fails too: My display is in portrait mode, and so when >> rotating the image changes to 640x480, from the point 0.0 and isn't >> rotated, which result in the image going over the physical screen >> dimentions... >> >> The code I've been developing is here: >> https://gitorious.org/gnutoo-s-programs-for-shr/xf86-video-omapfb/commit/834a2b938cbff98e6f69ff66789cf422e3e2d483 >> >> I'd like to make the "correct way" work and rotate, but I've no idea of >> how... >> >> Denis. >> _______________________________________________ >> [email protected]: X.Org development >> Archives: http://lists.x.org/archives/xorg-devel >> Info: http://lists.x.org/mailman/listinfo/xorg-devel > > As far as i remember you typically allocate a shadow (there are some > driver hooks for that, check existing drivers like intel, radeon or > nouveau). This will become the new scanout buffer and this has the > rotated dimensions. The original rendering will still be done to the > "normal" framebuffer. Composite with rotation in combination with > damage (a system used in X to track what areas have been rendered to > i.e. damaged) is used to keep the shadow up to date. > > You should probably implement the shadow hooks that are present in the > crtc structure. You should make sure this shadow allocation gets used > as the framebuffer. And you should check if your composite > implementation supports rotation, if not it may be necessary to expand > it with support for any scaling/rotation matrix or else add a special > case for 90 degree rotation if your hardware supports that. > > -- > Far away from the primal instinct, the song seems to fade away, the > river get wider between your thoughts and the things we do and say.
I forgot to mention that decision/logic for the shadow allocation is done inside the xserver, so it's not a choice you have. -- Far away from the primal instinct, the song seems to fade away, the river get wider between your thoughts and the things we do and say. _______________________________________________ [email protected]: X.Org development Archives: http://lists.x.org/archives/xorg-devel Info: http://lists.x.org/mailman/listinfo/xorg-devel
