[PATCH] staging: drm/omap: add rotation properties

Ville Syrjälä ville.syrjala at linux.intel.com
Mon Jul 2 07:01:28 PDT 2012


On Fri, Jun 29, 2012 at 07:17:23AM -0500, Rob Clark wrote:
> On Fri, Jun 29, 2012 at 5:46 AM, Tomi Valkeinen <tomi.valkeinen at ti.com> wrote:
> > On Wed, 2012-06-27 at 09:06 -0500, Rob Clark wrote:
> >> From: Rob Clark <rob at ti.com>
> >>
> >> Use tiled buffers for rotated/reflected scanout, with CRTC and plane
> >> properties as the interface for userspace to configure rotation.
> >>
> >> Signed-off-by: Rob Clark <rob at ti.com>
> >
> >> +/* this should probably be in drm-core to standardize amongst drivers */
> >> +#define DRM_ROTATE_0 0
> >> +#define DRM_ROTATE_90        1
> >> +#define DRM_ROTATE_180       2
> >> +#define DRM_ROTATE_270       3
> >> +#define DRM_REFLECT_X        4
> >> +#define DRM_REFLECT_Y        5
> >
> > Are both reflect X and Y needed? You can get all the possible
> > orientations with just one of the reflects.
> >
> > And I think the word "mirror" represents nicely what the reflect does,
> > i.e. if you look at the mirror, the image you see is flipped
> > horizontally.
> 
> fwiw these values are aligned with what is used in userspace xrandr..
> an earlier version of this patch used just 3 bits, which where aligned
> with what the omap hw uses and can describe all possible combinations
> of mirroring and isomorphic rotation (x-invert, y-invert, and
> xy-flip).  But the advantage of the xrandr approach is you can more
> easily leave out bits for rotation/mirroring modes that your hw does
> not support.. for example if some hw supports only certain rotations
> or does not support mirror/reflect.

When I hear "mirror" I always think of it as the happening after
rotation, but that's not how xrandr does things. I suppose "reflection"
has more or less the same connotation for me, but since it's already
used by xrandr, I know I have to do the necessary mental gymnastics.

If you think about it in terms of matrix multiplication, xrandr does
things like this: x' = Rot * Ref * x, whereas for me the more natural
order (for whatever reason) would be x' = Ref * Rot * x, where x is the
source coordinates, and x' the destination coordinates.

IIRC in dss mirroring was specified in the post-rotation way, and
the direction of the rotation was also opposite to xrandr (cw in dss,
ccw in xrandr).

So FWIW, my vote goes to "reflect" if we want to match xrandr
semantics. Also I agree on the number of bits, six is better than
three since it allows you to describe the hw capabilities.

-- 
Ville Syrjälä
Intel OTC


More information about the dri-devel mailing list