summaryrefslogtreecommitdiff
path: root/randr
diff options
context:
space:
mode:
authorKeith Packard <keithp@keithp.com>2010-12-05 20:57:47 -0800
committerKeith Packard <keithp@keithp.com>2010-12-06 20:09:04 -0800
commit752c368421c1c824752cf467fba9318d75d2ca2c (patch)
tree719b2c506194607708369cc782de39e3cc792c5a /randr
parenta88d70fb20a2bc3152b84adff4380857e6cfadf5 (diff)
Separate out screen size and screen pixmap sizes in RRScreenSizeSet
This provides for separate sizes for the screen scanout and rendering buffer and the application-visible screen size. Signed-off-by: Keith Packard <keithp@keithp.com> Reviewed-by: Aaron Plattner <aplattner@nvidia.com>
Diffstat (limited to 'randr')
-rw-r--r--randr/mirrcrtc.c7
-rw-r--r--randr/randrstr.h4
-rw-r--r--randr/rrcrtc.c9
-rw-r--r--randr/rrscreen.c6
4 files changed, 16 insertions, 10 deletions
diff --git a/randr/mirrcrtc.c b/randr/mirrcrtc.c
index d493a0e88..a9ee6b445 100644
--- a/randr/mirrcrtc.c
+++ b/randr/mirrcrtc.c
@@ -28,11 +28,6 @@ miRRSetScreenConfig(ScreenPtr screen,
{
RRScreenConfigRec old_screen_config;
- /* XXX deal with separate pixmap/screen sizes */
- if (screen_config->screen_pixmap_width != screen_config->screen_width ||
- screen_config->screen_pixmap_height != screen_config->screen_height)
- return FALSE;
-
RRScreenCurrentConfig(screen, &old_screen_config);
/* Check and see if nothing has changed */
@@ -47,6 +42,8 @@ miRRSetScreenConfig(ScreenPtr screen,
return RRScreenSizeSet(screen,
screen_config->screen_width,
screen_config->screen_height,
+ screen_config->screen_pixmap_width,
+ screen_config->screen_pixmap_height,
screen_config->mm_width,
screen_config->mm_height);
}
diff --git a/randr/randrstr.h b/randr/randrstr.h
index 8240824db..7c553f21f 100644
--- a/randr/randrstr.h
+++ b/randr/randrstr.h
@@ -191,6 +191,8 @@ struct _rrOutput {
typedef Bool (*RRScreenSetSizeProcPtr) (ScreenPtr pScreen,
CARD16 width,
CARD16 height,
+ CARD16 pixWidth,
+ CARD16 pixHeight,
CARD32 mmWidth,
CARD32 mmHeight);
@@ -478,6 +480,8 @@ extern _X_EXPORT Bool
RRScreenSizeSet (ScreenPtr pScreen,
CARD16 width,
CARD16 height,
+ CARD16 pixWidth,
+ CARD16 pixHeight,
CARD32 mmWidth,
CARD32 mmHeight);
diff --git a/randr/rrcrtc.c b/randr/rrcrtc.c
index 0b2bc28c5..97aa3d7fa 100644
--- a/randr/rrcrtc.c
+++ b/randr/rrcrtc.c
@@ -435,10 +435,9 @@ RRCrtcCurrentConfig(RRCrtcPtr crtc,
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 */
- crtc_config->pixmap = NULL;
- crtc_config->pixmap_x = 0;
- crtc_config->pixmap_y = 0;
+ crtc_config->pixmap = crtc->scanoutPixmap;
+ crtc_config->pixmap_x = crtc->x;
+ crtc_config->pixmap_y = crtc->y;
return TRUE;
}
@@ -1510,6 +1509,8 @@ RRConvertCrtcConfig(ClientPtr client, ScreenPtr screen,
if (x->pixmap == None)
pixmap = NULL;
+ else if (x->pixmap == RR_CurrentScanoutPixmap)
+ pixmap = crtc->scanoutPixmap;
else
{
rc = dixLookupResourceByType((pointer *) &pixmap, x->pixmap,
diff --git a/randr/rrscreen.c b/randr/rrscreen.c
index 0c52347cf..292163f1d 100644
--- a/randr/rrscreen.c
+++ b/randr/rrscreen.c
@@ -168,6 +168,8 @@ Bool
RRScreenSizeSet (ScreenPtr pScreen,
CARD16 width,
CARD16 height,
+ CARD16 pixWidth,
+ CARD16 pixHeight,
CARD32 mmWidth,
CARD32 mmHeight)
{
@@ -178,6 +180,7 @@ RRScreenSizeSet (ScreenPtr pScreen,
{
return (*pScrPriv->rrScreenSetSize) (pScreen,
width, height,
+ pixWidth, pixHeight,
mmWidth, mmHeight);
}
#endif
@@ -318,6 +321,7 @@ ProcRRSetScreenSize (ClientPtr client)
}
if (!RRScreenSizeSet (pScreen,
stuff->width, stuff->height,
+ stuff->width, stuff->height,
stuff->widthInMillimeters,
stuff->heightInMillimeters))
{
@@ -949,7 +953,7 @@ ProcRRSetScreenConfig (ClientPtr client)
goto sendReply;
}
}
- if (!RRScreenSizeSet (pScreen, width, height,
+ if (!RRScreenSizeSet (pScreen, width, height, width, height,
pScreen->mmWidth, pScreen->mmHeight))
{
rep.status = RRSetConfigFailed;