RandR transforms and filtering

Keith Packard keithp at keithp.com
Thu Mar 13 22:59:33 PDT 2008


I hooked up the transform proposal finally and figured out how I wanted
to do filtering. I originally figured I'd just use output properties,
but that doesn't make any sense when we've got custom protocol for the
transforms themselves. So, I'm extending the transform requests to
include Render filter/params which can be used during redisplay. I think
I'll make the filter 'advisory' instead of 'required' so that hardware
can do whatever it likes with the filter information instead of being
forced to fallback to software most of the time.

Here's the new protocol section on transforms:

┌───
    RRSetCrtcTransform
        crtc: CRTC
        transform: TRANSFORM
        inverse: TRANSFORM
        filter: STRING8
        values: LISTofFIXED
└───
        Errors: Crtc, Match

This request provides a mechanism that is more general than the existing
rotation and reflection values for describing the transformation from frame
buffer image to crtc presentation. 'transform' is a full 2D projective
transformations from screen coordinate space to crtc coordinate space. This
transformation is applied before the rotation and reflection values to
compute the complete transform. 'inverse' must be the
multiplicative inverse of 'transform' or a Match error results.

'filter' and 'values' specify a Render filter that may be used by the server
when transforming data from frame buffer to crtc.

This request sets the transform to be used at the next RRSetCrtcConfig
request execution; it does not cause any change to occur in the current
configuration.

When a non-identity transformation is in use, the rectangle returned by
RRGetCrtcInfo defines the bounding rectangle of the screen that is projected
to the crtc. It is this projected rectangle which must be within the area of
the screen when the mode is set.

┌───
    RRGetCrtcTransform
        crtc: CRTC
      ▶
        pending-transform: TRANSFORM
        pending-inverse: TRANSFORM
        pending-filter: STRING8
        pending-values: LISTofFIXED
        current-transform: TRANSFORM
        current-inverse: TRANSFORM
        current-filter: STRING8
        current-values: LISTofFIXED
└───

This request returns the pending and current transforms for the specified
CRTC. The pending transform will be the same as the current transform if no
new pending transform has been set since the last call to RRSetCrtcConfig.

-- 
keith.packard at intel.com
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 189 bytes
Desc: This is a digitally signed message part
URL: <http://lists.x.org/archives/xorg/attachments/20080313/3c6598cd/attachment.pgp>


More information about the xorg mailing list