Commit 197aa784 authored by Keith Packard's avatar Keith Packard

Report whether transforms are support from driver through extension to client

Add APIs to xf86RandR12 support and randr extension to record whether the
driver supports transforms, report that value in the RRGetCrtcTransform
reply.
parent e86c3466
......@@ -735,11 +735,17 @@ xf86CrtcScreenInit (ScreenPtr screen)
break;
}
if (c == config->num_crtc)
{
xf86RandR12SetRotations (screen, RR_Rotate_0 | RR_Rotate_90 |
RR_Rotate_180 | RR_Rotate_270 |
RR_Reflect_X | RR_Reflect_Y);
xf86RandR12SetTransform (screen, TRUE);
}
else
{
xf86RandR12SetRotations (screen, RR_Rotate_0);
xf86RandR12SetTransform (screen, FALSE);
}
/* Wrap CreateScreenResources so we can initialize the RandR code */
config->CreateScreenResources = screen->CreateScreenResources;
......
......@@ -568,6 +568,31 @@ xf86RandR12SetRotations (ScreenPtr pScreen, Rotation rotations)
randrp->supported_rotations = rotations;
}
_X_EXPORT void
xf86RandR12SetTransform (ScreenPtr pScreen, Bool transforms)
{
XF86RandRInfoPtr randrp;
#if RANDR_13_INTERFACE
ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
int c;
xf86CrtcConfigPtr config = XF86_CRTC_CONFIG_PTR(pScrn);
#endif
#if XORG_VERSION_CURRENT < XORG_VERSION_NUMERIC(7,0,0,0,0)
if (xf86RandR12Key == NULL)
return;
#endif
randrp = XF86RANDRINFO(pScreen);
#if RANDR_13_INTERFACE
for (c = 0; c < config->num_crtc; c++) {
xf86CrtcPtr crtc = config->crtc[c];
RRCrtcSetTransform (crtc->randr_crtc, transforms);
}
#endif
}
_X_EXPORT void
xf86RandR12GetOriginalVirtualSize(ScrnInfoPtr pScrn, int *x, int *y)
{
......
......@@ -31,6 +31,7 @@
Bool xf86RandR12CreateScreenResources (ScreenPtr pScreen);
Bool xf86RandR12Init(ScreenPtr pScreen);
void xf86RandR12SetRotations (ScreenPtr pScreen, Rotation rotation);
void xf86RandR12SetTransform (ScreenPtr pScreen, Bool transforms);
Bool xf86RandR12SetConfig(ScreenPtr pScreen, Rotation rotation, int rate,
RRScreenSizePtr pSize);
Rotation xf86RandR12GetRotation(ScreenPtr pScreen);
......
......@@ -130,6 +130,7 @@ struct _rrCrtc {
CARD16 *gammaBlue;
CARD16 *gammaGreen;
void *devPrivate;
Bool transforms;
RRTransformRec client_pending_transform;
RRTransformRec client_current_transform;
PictTransform transform;
......@@ -538,6 +539,12 @@ RRCrtcCreate (ScreenPtr pScreen, void *devPrivate);
void
RRCrtcSetRotations (RRCrtcPtr crtc, Rotation rotations);
/*
* Set whether transforms are allowed on a CRTC
*/
void
RRCrtcSetTransform (RRCrtcPtr crtc, Bool transforms);
/*
* Notify the extension that the Crtc has been reconfigured,
* the driver calls this whenever it has updated the mode
......
......@@ -163,6 +163,15 @@ RRCrtcSetRotations (RRCrtcPtr crtc, Rotation rotations)
crtc->rotations = rotations;
}
/*
* Set whether transforms are allowed on a CRTC
*/
void
RRCrtcSetTransform (RRCrtcPtr crtc, Bool transforms)
{
crtc->transforms = transforms;
}
/*
* Notify the extension that the Crtc has been reconfigured,
* the driver calls this whenever it has updated the mode
......@@ -608,6 +617,9 @@ RRCrtcTransformSet (RRCrtcPtr crtc,
PictFilterPtr filter = NULL;
int width = 0, height = 0;
if (!crtc->transforms)
return BadValue;
if (filter_len)
{
filter = PictureFindFilter (crtc->pScreen,
......@@ -1326,8 +1338,7 @@ ProcRRGetCrtcTransform (ClientPtr client)
reply->sequenceNumber = client->sequence;
reply->length = (CrtcTransformExtra + nextra) >> 2;
/* XXX deal with DDXen that can't do transforms */
reply->hasTransforms = xTrue;
reply->hasTransforms = crtc->transforms;
transform_encode (client, &reply->pendingTransform, &pending->transform);
transform_encode (client, &reply->pendingInverse, &pending->inverse);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment