Set sprite transforms from RRSetCrtcConfigs

These were getting ignored.

Signed-off-by: Keith Packard <keithp@keithp.com>
Reviewed-by: Aaron Plattner <aplattner@nvidia.com>
This commit is contained in:
Keith Packard 2010-12-05 20:55:46 -08:00
parent 96b4d4787b
commit a88d70fb20
4 changed files with 33 additions and 27 deletions

View File

@ -1819,8 +1819,8 @@ xf86RRConvertCrtcConfig(xf86CrtcSetConfigPtr xf86_config,
return FALSE; return FALSE;
for (o = 0; o < rr_config->numOutputs; o++) for (o = 0; o < rr_config->numOutputs; o++)
xf86_config->outputs[o] = rr_config->outputs[o]->devPrivate; xf86_config->outputs[o] = rr_config->outputs[o]->devPrivate;
xf86_config->sprite_position_transform = rr_config->sprite_position_transform; xf86_config->sprite_position_transform = rr_config->sprite_position_f_transform;
xf86_config->sprite_image_transform = rr_config->sprite_image_transform; xf86_config->sprite_image_transform = rr_config->sprite_image_f_transform;
xf86_config->pixmap = rr_config->pixmap; xf86_config->pixmap = rr_config->pixmap;
xf86_config->pixmap_x = rr_config->pixmap_x; xf86_config->pixmap_x = rr_config->pixmap_x;
xf86_config->pixmap_y = rr_config->pixmap_y; xf86_config->pixmap_y = rr_config->pixmap_y;

View File

@ -60,14 +60,21 @@ miRRSetCrtcConfig(RRCrtcConfigPtr crtc_config)
x = crtc_config->pixmap_x; x = crtc_config->pixmap_x;
y = crtc_config->pixmap_y; y = crtc_config->pixmap_y;
} }
return RRCrtcSet(crtc_config->crtc, if (!RRCrtcSet(crtc_config->crtc,
crtc_config->mode, crtc_config->mode,
x, x,
y, y,
crtc_config->rotation, crtc_config->rotation,
crtc_config->numOutputs, crtc_config->numOutputs,
crtc_config->outputs, crtc_config->outputs,
crtc_config->pixmap); crtc_config->pixmap))
return FALSE;
RRCrtcSpriteTransformSet(crtc_config->crtc,
&crtc_config->sprite_position_transform,
&crtc_config->sprite_image_transform,
&crtc_config->sprite_position_f_transform,
&crtc_config->sprite_image_f_transform);
return TRUE;
} }
Bool Bool

View File

@ -154,8 +154,10 @@ struct _rrCrtcConfig {
Rotation rotation; Rotation rotation;
int numOutputs; int numOutputs;
RROutputPtr *outputs; RROutputPtr *outputs;
struct pict_f_transform sprite_position_transform; PictTransform sprite_position_transform;
struct pict_f_transform sprite_image_transform; PictTransform sprite_image_transform;
struct pict_f_transform sprite_position_f_transform;
struct pict_f_transform sprite_image_f_transform;
PixmapPtr pixmap; PixmapPtr pixmap;
int pixmap_x, pixmap_y; int pixmap_x, pixmap_y;
}; };

View File

@ -430,8 +430,10 @@ RRCrtcCurrentConfig(RRCrtcPtr crtc,
if (!crtc_config->outputs) if (!crtc_config->outputs)
return FALSE; return FALSE;
memcpy(crtc_config->outputs, crtc->outputs, crtc->numOutputs * sizeof (RROutputPtr)); memcpy(crtc_config->outputs, crtc->outputs, crtc->numOutputs * sizeof (RROutputPtr));
crtc_config->sprite_position_transform = crtc->client_sprite_f_position_transform; crtc_config->sprite_position_transform = crtc->client_sprite_position_transform;
crtc_config->sprite_image_transform = crtc->client_sprite_f_image_transform; crtc_config->sprite_image_transform = crtc->client_sprite_image_transform;
crtc_config->sprite_position_f_transform = crtc->client_sprite_f_position_transform;
crtc_config->sprite_image_f_transform = crtc->client_sprite_f_image_transform;
/* XXX add pixmap stuff */ /* XXX add pixmap stuff */
crtc_config->pixmap = NULL; crtc_config->pixmap = NULL;
@ -718,8 +720,8 @@ RRScreenCoversCrtc(RRScreenConfigPtr screen_config,
crtc_config->mode->mode.width, crtc_config->mode->mode.height, crtc_config->mode->mode.width, crtc_config->mode->mode.height,
crtc_config->rotation, crtc_config->rotation,
client_transform, client_transform,
&crtc_config->sprite_position_transform, &crtc_config->sprite_position_f_transform,
&crtc_config->sprite_image_transform, &crtc_config->sprite_image_f_transform,
NULL, &f_transform, NULL, NULL, NULL, NULL); NULL, &f_transform, NULL, NULL, NULL, NULL);
RRModeGetScanoutSize (crtc_config->mode, &f_transform, RRModeGetScanoutSize (crtc_config->mode, &f_transform,
@ -1469,15 +1471,6 @@ ProcRRGetCrtcTransform (ClientPtr client)
return Success; return Success;
} }
static void
pixman_f_transform_from_xRenderTransform(struct pixman_f_transform *f_transform,
xRenderTransform *x_transform)
{
struct pixman_transform transform;
PictTransform_from_xRenderTransform(&transform, x_transform);
pixman_f_transform_from_pixman_transform(f_transform, &transform);
}
static int static int
RRConvertCrtcConfig(ClientPtr client, ScreenPtr screen, RRConvertCrtcConfig(ClientPtr client, ScreenPtr screen,
RRScreenConfigPtr screen_config, RRScreenConfigPtr screen_config,
@ -1594,10 +1587,14 @@ RRConvertCrtcConfig(ClientPtr client, ScreenPtr screen,
config->rotation = x->rotation; config->rotation = x->rotation;
config->numOutputs = x->nOutput; config->numOutputs = x->nOutput;
config->outputs = outputs; config->outputs = outputs;
pixman_f_transform_from_xRenderTransform(&config->sprite_position_transform, PictTransform_from_xRenderTransform(&config->sprite_position_transform,
&x->spritePositionTransform); &x->spritePositionTransform);
pixman_f_transform_from_xRenderTransform(&config->sprite_image_transform, PictTransform_from_xRenderTransform(&config->sprite_image_transform,
&x->spriteImageTransform); &x->spriteImageTransform);
pixman_f_transform_from_pixman_transform(&config->sprite_position_f_transform,
&config->sprite_position_transform);
pixman_f_transform_from_pixman_transform(&config->sprite_image_f_transform,
&config->sprite_image_transform);
config->pixmap = pixmap; config->pixmap = pixmap;
config->pixmap_x = x->xPixmap; config->pixmap_x = x->xPixmap;
config->pixmap_y = x->yPixmap; config->pixmap_y = x->yPixmap;