randrstr.h revision 6747b715
105b261ecSmrg/*
205b261ecSmrg * Copyright © 2000 Compaq Computer Corporation
305b261ecSmrg * Copyright © 2002 Hewlett-Packard Company
405b261ecSmrg * Copyright © 2006 Intel Corporation
54642e01fSmrg * Copyright © 2008 Red Hat, Inc.
605b261ecSmrg *
705b261ecSmrg * Permission to use, copy, modify, distribute, and sell this software and its
805b261ecSmrg * documentation for any purpose is hereby granted without fee, provided that
905b261ecSmrg * the above copyright notice appear in all copies and that both that copyright
1005b261ecSmrg * notice and this permission notice appear in supporting documentation, and
1105b261ecSmrg * that the name of the copyright holders not be used in advertising or
1205b261ecSmrg * publicity pertaining to distribution of the software without specific,
1305b261ecSmrg * written prior permission.  The copyright holders make no representations
1405b261ecSmrg * about the suitability of this software for any purpose.  It is provided "as
1505b261ecSmrg * is" without express or implied warranty.
1605b261ecSmrg *
1705b261ecSmrg * THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
1805b261ecSmrg * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
1905b261ecSmrg * EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY SPECIAL, INDIRECT OR
2005b261ecSmrg * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
2105b261ecSmrg * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
2205b261ecSmrg * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
2305b261ecSmrg * OF THIS SOFTWARE.
2405b261ecSmrg *
2505b261ecSmrg * Author:  Jim Gettys, Hewlett-Packard Company, Inc.
2605b261ecSmrg *	    Keith Packard, Intel Corporation
2705b261ecSmrg */
2805b261ecSmrg
2905b261ecSmrg#ifdef HAVE_DIX_CONFIG_H
3005b261ecSmrg#include <dix-config.h>
3105b261ecSmrg#endif
3205b261ecSmrg
3305b261ecSmrg#ifndef _RANDRSTR_H_
3405b261ecSmrg#define _RANDRSTR_H_
3505b261ecSmrg
3605b261ecSmrg#include <X11/X.h>
3705b261ecSmrg#include <X11/Xproto.h>
3805b261ecSmrg#include "misc.h"
3905b261ecSmrg#include "os.h"
4005b261ecSmrg#include "dixstruct.h"
4105b261ecSmrg#include "resource.h"
4205b261ecSmrg#include "scrnintstr.h"
4305b261ecSmrg#include "windowstr.h"
4405b261ecSmrg#include "pixmapstr.h"
4505b261ecSmrg#include "extnsionst.h"
4605b261ecSmrg#include "servermd.h"
474642e01fSmrg#include "rrtransform.h"
4805b261ecSmrg#include <X11/extensions/randr.h>
4905b261ecSmrg#include <X11/extensions/randrproto.h>
5005b261ecSmrg#include <X11/extensions/render.h> 	/* we share subpixel order information */
5105b261ecSmrg#include "picturestr.h"
5205b261ecSmrg#include <X11/Xfuncproto.h>
5305b261ecSmrg
5405b261ecSmrg/* required for ABI compatibility for now */
5505b261ecSmrg#define RANDR_10_INTERFACE 1
5605b261ecSmrg#define RANDR_12_INTERFACE 1
574642e01fSmrg#define RANDR_13_INTERFACE 1 /* requires RANDR_12_INTERFACE */
584642e01fSmrg#define RANDR_GET_CRTC_INTERFACE 1
594642e01fSmrg
604642e01fSmrg#define RANDR_INTERFACE_VERSION 0x0103
6105b261ecSmrg
6205b261ecSmrgtypedef XID	RRMode;
6305b261ecSmrgtypedef XID	RROutput;
6405b261ecSmrgtypedef XID	RRCrtc;
6505b261ecSmrg
666747b715Smrgextern _X_EXPORT int	RREventBase, RRErrorBase;
6705b261ecSmrg
686747b715Smrgextern _X_EXPORT int (*ProcRandrVector[RRNumberRequests])(ClientPtr);
696747b715Smrgextern _X_EXPORT int (*SProcRandrVector[RRNumberRequests])(ClientPtr);
7005b261ecSmrg
7105b261ecSmrg/*
7205b261ecSmrg * Modeline for a monitor. Name follows directly after this struct
7305b261ecSmrg */
7405b261ecSmrg
7505b261ecSmrg#define RRModeName(pMode) ((char *) (pMode + 1))
7605b261ecSmrgtypedef struct _rrMode		RRModeRec, *RRModePtr;
7705b261ecSmrgtypedef struct _rrPropertyValue	RRPropertyValueRec, *RRPropertyValuePtr;
7805b261ecSmrgtypedef struct _rrProperty	RRPropertyRec, *RRPropertyPtr;
7905b261ecSmrgtypedef struct _rrCrtc		RRCrtcRec, *RRCrtcPtr;
8005b261ecSmrgtypedef struct _rrOutput	RROutputRec, *RROutputPtr;
8105b261ecSmrg
8205b261ecSmrgstruct _rrMode {
8305b261ecSmrg    int		    refcnt;
8405b261ecSmrg    xRRModeInfo	    mode;
8505b261ecSmrg    char	    *name;
8605b261ecSmrg    ScreenPtr	    userScreen;
8705b261ecSmrg};
8805b261ecSmrg
8905b261ecSmrgstruct _rrPropertyValue {
9005b261ecSmrg    Atom	    type;       /* ignored by server */
9105b261ecSmrg    short	    format;     /* format of data for swapping - 8,16,32 */
9205b261ecSmrg    long	    size;	/* size of data in (format/8) bytes */
9305b261ecSmrg    pointer         data;	/* private to client */
9405b261ecSmrg};
9505b261ecSmrg
9605b261ecSmrgstruct _rrProperty {
9705b261ecSmrg    RRPropertyPtr   next;
9805b261ecSmrg    ATOM 	    propertyName;
9905b261ecSmrg    Bool	    is_pending;
10005b261ecSmrg    Bool	    range;
10105b261ecSmrg    Bool	    immutable;
10205b261ecSmrg    int		    num_valid;
10305b261ecSmrg    INT32	    *valid_values;
10405b261ecSmrg    RRPropertyValueRec	current, pending;
10505b261ecSmrg};
10605b261ecSmrg
10705b261ecSmrgstruct _rrCrtc {
10805b261ecSmrg    RRCrtc	    id;
10905b261ecSmrg    ScreenPtr	    pScreen;
11005b261ecSmrg    RRModePtr	    mode;
11105b261ecSmrg    int		    x, y;
11205b261ecSmrg    Rotation	    rotation;
11305b261ecSmrg    Rotation	    rotations;
11405b261ecSmrg    Bool	    changed;
11505b261ecSmrg    int		    numOutputs;
11605b261ecSmrg    RROutputPtr	    *outputs;
11705b261ecSmrg    int		    gammaSize;
11805b261ecSmrg    CARD16	    *gammaRed;
11905b261ecSmrg    CARD16	    *gammaBlue;
12005b261ecSmrg    CARD16	    *gammaGreen;
12105b261ecSmrg    void	    *devPrivate;
1224642e01fSmrg    Bool	    transforms;
1234642e01fSmrg    RRTransformRec  client_pending_transform;
1244642e01fSmrg    RRTransformRec  client_current_transform;
1254642e01fSmrg    PictTransform   transform;
1264642e01fSmrg    struct pict_f_transform f_transform;
1274642e01fSmrg    struct pict_f_transform f_inverse;
12805b261ecSmrg};
12905b261ecSmrg
13005b261ecSmrgstruct _rrOutput {
13105b261ecSmrg    RROutput	    id;
13205b261ecSmrg    ScreenPtr	    pScreen;
13305b261ecSmrg    char	    *name;
13405b261ecSmrg    int		    nameLength;
13505b261ecSmrg    CARD8	    connection;
13605b261ecSmrg    CARD8	    subpixelOrder;
13705b261ecSmrg    int		    mmWidth;
13805b261ecSmrg    int		    mmHeight;
13905b261ecSmrg    RRCrtcPtr	    crtc;
14005b261ecSmrg    int		    numCrtcs;
14105b261ecSmrg    RRCrtcPtr	    *crtcs;
14205b261ecSmrg    int		    numClones;
14305b261ecSmrg    RROutputPtr	    *clones;
14405b261ecSmrg    int		    numModes;
14505b261ecSmrg    int		    numPreferred;
14605b261ecSmrg    RRModePtr	    *modes;
14705b261ecSmrg    int		    numUserModes;
14805b261ecSmrg    RRModePtr	    *userModes;
14905b261ecSmrg    Bool	    changed;
15005b261ecSmrg    RRPropertyPtr   properties;
15105b261ecSmrg    Bool	    pendingProperties;
15205b261ecSmrg    void	    *devPrivate;
15305b261ecSmrg};
15405b261ecSmrg
15505b261ecSmrg#if RANDR_12_INTERFACE
15605b261ecSmrgtypedef Bool (*RRScreenSetSizeProcPtr) (ScreenPtr	pScreen,
15705b261ecSmrg					CARD16		width,
15805b261ecSmrg					CARD16		height,
15905b261ecSmrg					CARD32		mmWidth,
16005b261ecSmrg					CARD32		mmHeight);
16105b261ecSmrg
16205b261ecSmrgtypedef Bool (*RRCrtcSetProcPtr) (ScreenPtr		pScreen,
16305b261ecSmrg				  RRCrtcPtr		crtc,
16405b261ecSmrg				  RRModePtr		mode,
16505b261ecSmrg				  int			x,
16605b261ecSmrg				  int			y,
16705b261ecSmrg				  Rotation		rotation,
16805b261ecSmrg				  int			numOutputs,
16905b261ecSmrg				  RROutputPtr		*outputs);
17005b261ecSmrg
17105b261ecSmrgtypedef Bool (*RRCrtcSetGammaProcPtr) (ScreenPtr	pScreen,
17205b261ecSmrg				       RRCrtcPtr	crtc);
17305b261ecSmrg
1746747b715Smrgtypedef Bool (*RRCrtcGetGammaProcPtr) (ScreenPtr	pScreen,
1756747b715Smrg				       RRCrtcPtr	crtc);
1766747b715Smrg
17705b261ecSmrgtypedef Bool (*RROutputSetPropertyProcPtr) (ScreenPtr		pScreen,
17805b261ecSmrg					    RROutputPtr		output,
17905b261ecSmrg					    Atom		property,
18005b261ecSmrg					    RRPropertyValuePtr	value);
18105b261ecSmrg
18205b261ecSmrgtypedef Bool (*RROutputValidateModeProcPtr) (ScreenPtr		pScreen,
18305b261ecSmrg					     RROutputPtr	output,
18405b261ecSmrg					     RRModePtr		mode);
18505b261ecSmrg
18605b261ecSmrgtypedef void (*RRModeDestroyProcPtr) (ScreenPtr	    pScreen,
18705b261ecSmrg				      RRModePtr	    mode);
18805b261ecSmrg
18905b261ecSmrg#endif
19005b261ecSmrg
1914642e01fSmrg#if RANDR_13_INTERFACE
1924642e01fSmrgtypedef Bool (*RROutputGetPropertyProcPtr) (ScreenPtr		pScreen,
1934642e01fSmrg					    RROutputPtr		output,
1944642e01fSmrg					    Atom		property);
1954642e01fSmrgtypedef Bool (*RRGetPanningProcPtr)    (ScreenPtr		pScrn,
1964642e01fSmrg					RRCrtcPtr		crtc,
1974642e01fSmrg					BoxPtr		totalArea,
1984642e01fSmrg					BoxPtr		trackingArea,
1994642e01fSmrg					INT16		*border);
2004642e01fSmrgtypedef Bool (*RRSetPanningProcPtr)    (ScreenPtr		pScrn,
2014642e01fSmrg					RRCrtcPtr		crtc,
2024642e01fSmrg					BoxPtr		totalArea,
2034642e01fSmrg					BoxPtr		trackingArea,
2044642e01fSmrg					INT16		*border);
2054642e01fSmrg
2064642e01fSmrg#endif /* RANDR_13_INTERFACE */
2074642e01fSmrg
20805b261ecSmrgtypedef Bool (*RRGetInfoProcPtr) (ScreenPtr pScreen, Rotation *rotations);
20905b261ecSmrgtypedef Bool (*RRCloseScreenProcPtr) ( int i, ScreenPtr pscreen);
21005b261ecSmrg
21105b261ecSmrg/* These are for 1.0 compatibility */
21205b261ecSmrg
21305b261ecSmrgtypedef struct _rrRefresh {
21405b261ecSmrg    CARD16	    rate;
21505b261ecSmrg    RRModePtr	    mode;
21605b261ecSmrg} RRScreenRate, *RRScreenRatePtr;
21705b261ecSmrg
21805b261ecSmrgtypedef struct _rrScreenSize {
21905b261ecSmrg    int		    id;
22005b261ecSmrg    short	    width, height;
22105b261ecSmrg    short	    mmWidth, mmHeight;
22205b261ecSmrg    int		    nRates;
22305b261ecSmrg    RRScreenRatePtr pRates;
22405b261ecSmrg} RRScreenSize, *RRScreenSizePtr;
22505b261ecSmrg
22605b261ecSmrg#ifdef RANDR_10_INTERFACE
22705b261ecSmrg
22805b261ecSmrgtypedef Bool (*RRSetConfigProcPtr) (ScreenPtr		pScreen,
22905b261ecSmrg				    Rotation		rotation,
23005b261ecSmrg				    int			rate,
23105b261ecSmrg				    RRScreenSizePtr	pSize);
23205b261ecSmrg
23305b261ecSmrg#endif
23405b261ecSmrg
23505b261ecSmrg
23605b261ecSmrgtypedef struct _rrScrPriv {
23705b261ecSmrg    /*
23805b261ecSmrg     * 'public' part of the structure; DDXen fill this in
23905b261ecSmrg     * as they initialize
24005b261ecSmrg     */
24105b261ecSmrg#if RANDR_10_INTERFACE
24205b261ecSmrg    RRSetConfigProcPtr	    rrSetConfig;
24305b261ecSmrg#endif
24405b261ecSmrg    RRGetInfoProcPtr	    rrGetInfo;
24505b261ecSmrg#if RANDR_12_INTERFACE
24605b261ecSmrg    RRScreenSetSizeProcPtr  rrScreenSetSize;
24705b261ecSmrg    RRCrtcSetProcPtr	    rrCrtcSet;
24805b261ecSmrg    RRCrtcSetGammaProcPtr   rrCrtcSetGamma;
2496747b715Smrg    RRCrtcGetGammaProcPtr   rrCrtcGetGamma;
25005b261ecSmrg    RROutputSetPropertyProcPtr	rrOutputSetProperty;
25105b261ecSmrg    RROutputValidateModeProcPtr	rrOutputValidateMode;
25205b261ecSmrg    RRModeDestroyProcPtr	rrModeDestroy;
25305b261ecSmrg#endif
2544642e01fSmrg#if RANDR_13_INTERFACE
2554642e01fSmrg    RROutputGetPropertyProcPtr	rrOutputGetProperty;
2564642e01fSmrg    RRGetPanningProcPtr	rrGetPanning;
2574642e01fSmrg    RRSetPanningProcPtr	rrSetPanning;
2584642e01fSmrg#endif
25905b261ecSmrg
26005b261ecSmrg    /*
26105b261ecSmrg     * Private part of the structure; not considered part of the ABI
26205b261ecSmrg     */
26305b261ecSmrg    TimeStamp		    lastSetTime;	/* last changed by client */
26405b261ecSmrg    TimeStamp		    lastConfigTime;	/* possible configs changed */
26505b261ecSmrg    RRCloseScreenProcPtr    CloseScreen;
26605b261ecSmrg
26705b261ecSmrg    Bool		    changed;		/* some config changed */
26805b261ecSmrg    Bool		    configChanged;	/* configuration changed */
26905b261ecSmrg    Bool		    layoutChanged;	/* screen layout changed */
27005b261ecSmrg
27105b261ecSmrg    CARD16		    minWidth, minHeight;
27205b261ecSmrg    CARD16		    maxWidth, maxHeight;
27305b261ecSmrg    CARD16		    width, height;	/* last known screen size */
27405b261ecSmrg    CARD16		    mmWidth, mmHeight;	/* last known screen size */
27505b261ecSmrg
27605b261ecSmrg    int			    numOutputs;
27705b261ecSmrg    RROutputPtr		    *outputs;
2784642e01fSmrg    RROutputPtr		    primaryOutput;
27905b261ecSmrg
28005b261ecSmrg    int			    numCrtcs;
28105b261ecSmrg    RRCrtcPtr		    *crtcs;
28205b261ecSmrg
28305b261ecSmrg    /* Last known pointer position */
28405b261ecSmrg    RRCrtcPtr		    pointerCrtc;
28505b261ecSmrg
28605b261ecSmrg#ifdef RANDR_10_INTERFACE
28705b261ecSmrg    /*
28805b261ecSmrg     * Configuration information
28905b261ecSmrg     */
29005b261ecSmrg    Rotation		    rotations;
29105b261ecSmrg    CARD16		    reqWidth, reqHeight;
29205b261ecSmrg
29305b261ecSmrg    int			    nSizes;
29405b261ecSmrg    RRScreenSizePtr	    pSizes;
29505b261ecSmrg
29605b261ecSmrg    Rotation		    rotation;
29705b261ecSmrg    int			    rate;
29805b261ecSmrg    int			    size;
29905b261ecSmrg#endif
30005b261ecSmrg} rrScrPrivRec, *rrScrPrivPtr;
30105b261ecSmrg
3026747b715Smrgextern _X_EXPORT DevPrivateKeyRec rrPrivKeyRec;
3036747b715Smrg#define rrPrivKey (&rrPrivKeyRec)
30405b261ecSmrg
3054642e01fSmrg#define rrGetScrPriv(pScr)  ((rrScrPrivPtr)dixLookupPrivate(&(pScr)->devPrivates, rrPrivKey))
30605b261ecSmrg#define rrScrPriv(pScr)	rrScrPrivPtr    pScrPriv = rrGetScrPriv(pScr)
3074642e01fSmrg#define SetRRScreen(s,p) dixSetPrivate(&(s)->devPrivates, rrPrivKey, p)
30805b261ecSmrg
30905b261ecSmrg/*
31005b261ecSmrg * each window has a list of clients requesting
31105b261ecSmrg * RRNotify events.  Each client has a resource
31205b261ecSmrg * for each window it selects RRNotify input for,
31305b261ecSmrg * this resource is used to delete the RRNotifyRec
31405b261ecSmrg * entry from the per-window queue.
31505b261ecSmrg */
31605b261ecSmrg
31705b261ecSmrgtypedef struct _RREvent *RREventPtr;
31805b261ecSmrg
31905b261ecSmrgtypedef struct _RREvent {
32005b261ecSmrg    RREventPtr  next;
32105b261ecSmrg    ClientPtr	client;
32205b261ecSmrg    WindowPtr	window;
32305b261ecSmrg    XID		clientResource;
32405b261ecSmrg    int		mask;
32505b261ecSmrg} RREventRec;
32605b261ecSmrg
32705b261ecSmrgtypedef struct _RRTimes {
32805b261ecSmrg    TimeStamp	setTime;
32905b261ecSmrg    TimeStamp	configTime;
33005b261ecSmrg} RRTimesRec, *RRTimesPtr;
33105b261ecSmrg
33205b261ecSmrgtypedef struct _RRClient {
33305b261ecSmrg    int		major_version;
33405b261ecSmrg    int		minor_version;
33505b261ecSmrg/*  RRTimesRec	times[0]; */
33605b261ecSmrg} RRClientRec, *RRClientPtr;
33705b261ecSmrg
3386747b715Smrgextern _X_EXPORT RESTYPE RRClientType, RREventType; /* resource types for event masks */
3396747b715Smrgextern _X_EXPORT DevPrivateKeyRec RRClientPrivateKeyRec;
3406747b715Smrg#define RRClientPrivateKey (&RRClientPrivateKeyRec)
3416747b715Smrgextern _X_EXPORT RESTYPE RRCrtcType, RRModeType, RROutputType;
3426747b715Smrg
3436747b715Smrg#define VERIFY_RR_OUTPUT(id, ptr, a)\
3446747b715Smrg    {\
3456747b715Smrg	int rc = dixLookupResourceByType((pointer *)&(ptr), id,\
3466747b715Smrg	                                 RROutputType, client, a);\
3476747b715Smrg	if (rc != Success) {\
3486747b715Smrg	    client->errorValue = id;\
3496747b715Smrg	    return rc;\
3506747b715Smrg	}\
3516747b715Smrg    }
3526747b715Smrg
3536747b715Smrg#define VERIFY_RR_CRTC(id, ptr, a)\
3546747b715Smrg    {\
3556747b715Smrg	int rc = dixLookupResourceByType((pointer *)&(ptr), id,\
3566747b715Smrg	                                 RRCrtcType, client, a);\
3576747b715Smrg	if (rc != Success) {\
3586747b715Smrg	    client->errorValue = id;\
3596747b715Smrg	    return rc;\
3606747b715Smrg	}\
3616747b715Smrg    }
3626747b715Smrg
3636747b715Smrg#define VERIFY_RR_MODE(id, ptr, a)\
3646747b715Smrg    {\
3656747b715Smrg	int rc = dixLookupResourceByType((pointer *)&(ptr), id,\
3666747b715Smrg	                                 RRModeType, client, a);\
3676747b715Smrg	if (rc != Success) {\
3686747b715Smrg	    client->errorValue = id;\
3696747b715Smrg	    return rc;\
3706747b715Smrg	}\
3716747b715Smrg    }
37205b261ecSmrg
3734642e01fSmrg#define GetRRClient(pClient)    ((RRClientPtr)dixLookupPrivate(&(pClient)->devPrivates, RRClientPrivateKey))
37405b261ecSmrg#define rrClientPriv(pClient)	RRClientPtr pRRClient = GetRRClient(pClient)
37505b261ecSmrg
37605b261ecSmrg/* Initialize the extension */
3776747b715Smrgextern _X_EXPORT void
37805b261ecSmrgRRExtensionInit (void);
37905b261ecSmrg
38005b261ecSmrg#ifdef RANDR_12_INTERFACE
38105b261ecSmrg/*
38205b261ecSmrg * Set the range of sizes for the screen
38305b261ecSmrg */
3846747b715Smrgextern _X_EXPORT void
38505b261ecSmrgRRScreenSetSizeRange (ScreenPtr	pScreen,
38605b261ecSmrg		      CARD16	minWidth,
38705b261ecSmrg		      CARD16	minHeight,
38805b261ecSmrg		      CARD16	maxWidth,
38905b261ecSmrg		      CARD16	maxHeight);
39005b261ecSmrg#endif
39105b261ecSmrg
39205b261ecSmrg/* rrscreen.c */
39305b261ecSmrg/*
39405b261ecSmrg * Notify the extension that the screen size has been changed.
39505b261ecSmrg * The driver is responsible for calling this whenever it has changed
39605b261ecSmrg * the size of the screen
39705b261ecSmrg */
3986747b715Smrgextern _X_EXPORT void
39905b261ecSmrgRRScreenSizeNotify (ScreenPtr	pScreen);
40005b261ecSmrg
40105b261ecSmrg/*
40205b261ecSmrg * Request that the screen be resized
40305b261ecSmrg */
4046747b715Smrgextern _X_EXPORT Bool
40505b261ecSmrgRRScreenSizeSet (ScreenPtr  pScreen,
40605b261ecSmrg		 CARD16	    width,
40705b261ecSmrg		 CARD16	    height,
40805b261ecSmrg		 CARD32	    mmWidth,
40905b261ecSmrg		 CARD32	    mmHeight);
41005b261ecSmrg
41105b261ecSmrg/*
41205b261ecSmrg * Send ConfigureNotify event to root window when 'something' happens
41305b261ecSmrg */
4146747b715Smrgextern _X_EXPORT void
41505b261ecSmrgRRSendConfigNotify (ScreenPtr pScreen);
41605b261ecSmrg
41705b261ecSmrg/*
41805b261ecSmrg * screen dispatch
41905b261ecSmrg */
4206747b715Smrgextern _X_EXPORT int
42105b261ecSmrgProcRRGetScreenSizeRange (ClientPtr client);
42205b261ecSmrg
4236747b715Smrgextern _X_EXPORT int
42405b261ecSmrgProcRRSetScreenSize (ClientPtr client);
42505b261ecSmrg
4266747b715Smrgextern _X_EXPORT int
42705b261ecSmrgProcRRGetScreenResources (ClientPtr client);
42805b261ecSmrg
4296747b715Smrgextern _X_EXPORT int
4304642e01fSmrgProcRRGetScreenResourcesCurrent (ClientPtr client);
4314642e01fSmrg
4326747b715Smrgextern _X_EXPORT int
43305b261ecSmrgProcRRSetScreenConfig (ClientPtr client);
43405b261ecSmrg
4356747b715Smrgextern _X_EXPORT int
43605b261ecSmrgProcRRGetScreenInfo (ClientPtr client);
43705b261ecSmrg
43805b261ecSmrg/*
43905b261ecSmrg * Deliver a ScreenNotify event
44005b261ecSmrg */
4416747b715Smrgextern _X_EXPORT void
44205b261ecSmrgRRDeliverScreenEvent (ClientPtr client, WindowPtr pWin, ScreenPtr pScreen);
44305b261ecSmrg
44405b261ecSmrg/* mirandr.c */
4456747b715Smrgextern _X_EXPORT Bool
44605b261ecSmrgmiRandRInit (ScreenPtr pScreen);
44705b261ecSmrg
4486747b715Smrgextern _X_EXPORT Bool
44905b261ecSmrgmiRRGetInfo (ScreenPtr pScreen, Rotation *rotations);
45005b261ecSmrg
4516747b715Smrgextern _X_EXPORT Bool
45205b261ecSmrgmiRRCrtcSet (ScreenPtr	pScreen,
45305b261ecSmrg	     RRCrtcPtr	crtc,
45405b261ecSmrg	     RRModePtr	mode,
45505b261ecSmrg	     int	x,
45605b261ecSmrg	     int	y,
45705b261ecSmrg	     Rotation	rotation,
45805b261ecSmrg	     int	numOutput,
45905b261ecSmrg	     RROutputPtr *outputs);
46005b261ecSmrg
4616747b715Smrgextern _X_EXPORT Bool
46205b261ecSmrgmiRROutputSetProperty (ScreenPtr	    pScreen,
46305b261ecSmrg		       RROutputPtr	    output,
46405b261ecSmrg		       Atom		    property,
46505b261ecSmrg		       RRPropertyValuePtr   value);
46605b261ecSmrg
4676747b715Smrgextern _X_EXPORT Bool
4684642e01fSmrgmiRROutputGetProperty (ScreenPtr	    pScreen,
4694642e01fSmrg		       RROutputPtr	    output,
4704642e01fSmrg		       Atom		    property);
4714642e01fSmrg
4726747b715Smrgextern _X_EXPORT Bool
47305b261ecSmrgmiRROutputValidateMode (ScreenPtr	    pScreen,
47405b261ecSmrg			RROutputPtr	    output,
47505b261ecSmrg			RRModePtr	    mode);
47605b261ecSmrg
4776747b715Smrgextern _X_EXPORT void
47805b261ecSmrgmiRRModeDestroy (ScreenPtr  pScreen,
47905b261ecSmrg		 RRModePtr  mode);
48005b261ecSmrg
48105b261ecSmrg/* randr.c */
48205b261ecSmrg/*
48305b261ecSmrg * Send all pending events
48405b261ecSmrg */
4856747b715Smrgextern _X_EXPORT void
48605b261ecSmrgRRTellChanged (ScreenPtr pScreen);
48705b261ecSmrg
48805b261ecSmrg/*
48905b261ecSmrg * Poll the driver for changed information
49005b261ecSmrg */
4916747b715Smrgextern _X_EXPORT Bool
4924642e01fSmrgRRGetInfo (ScreenPtr pScreen, Bool force_query);
49305b261ecSmrg
4946747b715Smrgextern _X_EXPORT Bool RRInit (void);
49505b261ecSmrg
4966747b715Smrgextern _X_EXPORT Bool RRScreenInit(ScreenPtr pScreen);
49705b261ecSmrg
4986747b715Smrgextern _X_EXPORT RROutputPtr
49905b261ecSmrgRRFirstOutput (ScreenPtr pScreen);
50005b261ecSmrg
5016747b715Smrgextern _X_EXPORT Rotation
50205b261ecSmrgRRGetRotation (ScreenPtr pScreen);
50305b261ecSmrg
5046747b715Smrgextern _X_EXPORT CARD16
50505b261ecSmrgRRVerticalRefresh (xRRModeInfo *mode);
50605b261ecSmrg
50705b261ecSmrg#ifdef RANDR_10_INTERFACE
50805b261ecSmrg/*
50905b261ecSmrg * This is the old interface, deprecated but left
51005b261ecSmrg * around for compatibility
51105b261ecSmrg */
51205b261ecSmrg
51305b261ecSmrg/*
51405b261ecSmrg * Then, register the specific size with the screen
51505b261ecSmrg */
51605b261ecSmrg
5176747b715Smrgextern _X_EXPORT RRScreenSizePtr
51805b261ecSmrgRRRegisterSize (ScreenPtr		pScreen,
51905b261ecSmrg		short			width,
52005b261ecSmrg		short			height,
52105b261ecSmrg		short			mmWidth,
52205b261ecSmrg		short			mmHeight);
52305b261ecSmrg
5246747b715Smrgextern _X_EXPORT Bool
5256747b715SmrgRRRegisterRate (ScreenPtr		pScreen,
52605b261ecSmrg		     RRScreenSizePtr	pSize,
52705b261ecSmrg		     int		rate);
52805b261ecSmrg
52905b261ecSmrg/*
53005b261ecSmrg * Finally, set the current configuration of the screen
53105b261ecSmrg */
53205b261ecSmrg
5336747b715Smrgextern _X_EXPORT void
53405b261ecSmrgRRSetCurrentConfig (ScreenPtr		pScreen,
53505b261ecSmrg		    Rotation		rotation,
53605b261ecSmrg		    int			rate,
53705b261ecSmrg		    RRScreenSizePtr	pSize);
53805b261ecSmrg
5396747b715Smrgextern _X_EXPORT Bool RRScreenInit (ScreenPtr pScreen);
54005b261ecSmrg
5416747b715Smrgextern _X_EXPORT Rotation
54205b261ecSmrgRRGetRotation (ScreenPtr pScreen);
54305b261ecSmrg
54405b261ecSmrg#endif
54505b261ecSmrg
54605b261ecSmrg/* rrcrtc.c */
54705b261ecSmrg
54805b261ecSmrg/*
54905b261ecSmrg * Notify the CRTC of some change; layoutChanged indicates that
55005b261ecSmrg * some position or size element changed
55105b261ecSmrg */
5526747b715Smrgextern _X_EXPORT void
55305b261ecSmrgRRCrtcChanged (RRCrtcPtr crtc, Bool layoutChanged);
55405b261ecSmrg
55505b261ecSmrg/*
55605b261ecSmrg * Create a CRTC
55705b261ecSmrg */
5586747b715Smrgextern _X_EXPORT RRCrtcPtr
55905b261ecSmrgRRCrtcCreate (ScreenPtr pScreen, void	*devPrivate);
56005b261ecSmrg
56105b261ecSmrg/*
56205b261ecSmrg * Set the allowed rotations on a CRTC
56305b261ecSmrg */
5646747b715Smrgextern _X_EXPORT void
56505b261ecSmrgRRCrtcSetRotations (RRCrtcPtr crtc, Rotation rotations);
56605b261ecSmrg
5674642e01fSmrg/*
5684642e01fSmrg * Set whether transforms are allowed on a CRTC
5694642e01fSmrg */
5706747b715Smrgextern _X_EXPORT void
5714642e01fSmrgRRCrtcSetTransformSupport (RRCrtcPtr crtc, Bool transforms);
5724642e01fSmrg
57305b261ecSmrg/*
57405b261ecSmrg * Notify the extension that the Crtc has been reconfigured,
57505b261ecSmrg * the driver calls this whenever it has updated the mode
57605b261ecSmrg */
5776747b715Smrgextern _X_EXPORT Bool
57805b261ecSmrgRRCrtcNotify (RRCrtcPtr	    crtc,
57905b261ecSmrg	      RRModePtr	    mode,
58005b261ecSmrg	      int	    x,
58105b261ecSmrg	      int	    y,
58205b261ecSmrg	      Rotation	    rotation,
5834642e01fSmrg	      RRTransformPtr transform,
58405b261ecSmrg	      int	    numOutputs,
58505b261ecSmrg	      RROutputPtr   *outputs);
58605b261ecSmrg
5876747b715Smrgextern _X_EXPORT void
58805b261ecSmrgRRDeliverCrtcEvent (ClientPtr client, WindowPtr pWin, RRCrtcPtr crtc);
58905b261ecSmrg
59005b261ecSmrg/*
59105b261ecSmrg * Request that the Crtc be reconfigured
59205b261ecSmrg */
5936747b715Smrgextern _X_EXPORT Bool
59405b261ecSmrgRRCrtcSet (RRCrtcPtr    crtc,
59505b261ecSmrg	   RRModePtr	mode,
59605b261ecSmrg	   int		x,
59705b261ecSmrg	   int		y,
59805b261ecSmrg	   Rotation	rotation,
59905b261ecSmrg	   int		numOutput,
60005b261ecSmrg	   RROutputPtr  *outputs);
60105b261ecSmrg
60205b261ecSmrg/*
60305b261ecSmrg * Request that the Crtc gamma be changed
60405b261ecSmrg */
60505b261ecSmrg
6066747b715Smrgextern _X_EXPORT Bool
60705b261ecSmrgRRCrtcGammaSet (RRCrtcPtr   crtc,
60805b261ecSmrg		CARD16	    *red,
60905b261ecSmrg		CARD16	    *green,
61005b261ecSmrg		CARD16	    *blue);
61105b261ecSmrg
6126747b715Smrg/*
6136747b715Smrg * Request current gamma back from the DDX (if possible).
6146747b715Smrg * This includes gamma size.
6156747b715Smrg */
6166747b715Smrg
6176747b715Smrgextern _X_EXPORT Bool
6186747b715SmrgRRCrtcGammaGet(RRCrtcPtr crtc);
6196747b715Smrg
62005b261ecSmrg/*
62105b261ecSmrg * Notify the extension that the Crtc gamma has been changed
62205b261ecSmrg * The driver calls this whenever it has changed the gamma values
62305b261ecSmrg * in the RRCrtcRec
62405b261ecSmrg */
62505b261ecSmrg
6266747b715Smrgextern _X_EXPORT Bool
62705b261ecSmrgRRCrtcGammaNotify (RRCrtcPtr	crtc);
62805b261ecSmrg
62905b261ecSmrg/*
63005b261ecSmrg * Set the size of the gamma table at server startup time
63105b261ecSmrg */
63205b261ecSmrg
6336747b715Smrgextern _X_EXPORT Bool
63405b261ecSmrgRRCrtcGammaSetSize (RRCrtcPtr	crtc,
63505b261ecSmrg		    int		size);
63605b261ecSmrg
63705b261ecSmrg/*
63805b261ecSmrg * Return the area of the frame buffer scanned out by the crtc,
63905b261ecSmrg * taking into account the current mode and rotation
64005b261ecSmrg */
64105b261ecSmrg
6426747b715Smrgextern _X_EXPORT void
64305b261ecSmrgRRCrtcGetScanoutSize(RRCrtcPtr crtc, int *width, int *height);
64405b261ecSmrg
6454642e01fSmrg/*
6464642e01fSmrg * Compute the complete transformation matrix including
6474642e01fSmrg * client-specified transform, rotation/reflection values and the crtc
6484642e01fSmrg * offset.
6494642e01fSmrg *
6504642e01fSmrg * Return TRUE if the resulting transform is not a simple translation.
6514642e01fSmrg */
6526747b715Smrgextern _X_EXPORT Bool
6534642e01fSmrgRRTransformCompute (int			    x,
6544642e01fSmrg		    int			    y,
6554642e01fSmrg		    int			    width,
6564642e01fSmrg		    int			    height,
6574642e01fSmrg		    Rotation		    rotation,
6584642e01fSmrg		    RRTransformPtr	    rr_transform,
6594642e01fSmrg
6604642e01fSmrg		    PictTransformPtr	    transform,
6614642e01fSmrg		    struct pict_f_transform *f_transform,
6624642e01fSmrg		    struct pict_f_transform *f_inverse);
6634642e01fSmrg
6644642e01fSmrg/*
6654642e01fSmrg * Return crtc transform
6664642e01fSmrg */
6676747b715Smrgextern _X_EXPORT RRTransformPtr
6684642e01fSmrgRRCrtcGetTransform (RRCrtcPtr crtc);
6694642e01fSmrg
6704642e01fSmrg/*
6714642e01fSmrg * Check whether the pending and current transforms are the same
6724642e01fSmrg */
6736747b715Smrgextern _X_EXPORT Bool
6744642e01fSmrgRRCrtcPendingTransform (RRCrtcPtr crtc);
6754642e01fSmrg
67605b261ecSmrg/*
67705b261ecSmrg * Destroy a Crtc at shutdown
67805b261ecSmrg */
6796747b715Smrgextern _X_EXPORT void
68005b261ecSmrgRRCrtcDestroy (RRCrtcPtr crtc);
68105b261ecSmrg
6824642e01fSmrg
6834642e01fSmrg/*
6844642e01fSmrg * Set the pending CRTC transformation
6854642e01fSmrg */
6864642e01fSmrg
6876747b715Smrgextern _X_EXPORT int
6884642e01fSmrgRRCrtcTransformSet (RRCrtcPtr		crtc,
6894642e01fSmrg		    PictTransformPtr	transform,
6904642e01fSmrg		    struct pict_f_transform *f_transform,
6914642e01fSmrg		    struct pict_f_transform *f_inverse,
6924642e01fSmrg		    char		*filter,
6934642e01fSmrg		    int			filter_len,
6944642e01fSmrg		    xFixed		*params,
6954642e01fSmrg		    int			nparams);
6964642e01fSmrg
69705b261ecSmrg/*
69805b261ecSmrg * Initialize crtc type
69905b261ecSmrg */
7006747b715Smrgextern _X_EXPORT Bool
70105b261ecSmrgRRCrtcInit (void);
70205b261ecSmrg
7036747b715Smrg/*
7046747b715Smrg * Initialize crtc type error value
7056747b715Smrg */
7066747b715Smrgextern _X_EXPORT void
7076747b715SmrgRRCrtcInitErrorValue (void);
7086747b715Smrg
70905b261ecSmrg/*
71005b261ecSmrg * Crtc dispatch
71105b261ecSmrg */
71205b261ecSmrg
7136747b715Smrgextern _X_EXPORT int
71405b261ecSmrgProcRRGetCrtcInfo (ClientPtr client);
71505b261ecSmrg
7166747b715Smrgextern _X_EXPORT int
71705b261ecSmrgProcRRSetCrtcConfig (ClientPtr client);
71805b261ecSmrg
7196747b715Smrgextern _X_EXPORT int
72005b261ecSmrgProcRRGetCrtcGammaSize (ClientPtr client);
72105b261ecSmrg
7226747b715Smrgextern _X_EXPORT int
72305b261ecSmrgProcRRGetCrtcGamma (ClientPtr client);
72405b261ecSmrg
7256747b715Smrgextern _X_EXPORT int
72605b261ecSmrgProcRRSetCrtcGamma (ClientPtr client);
72705b261ecSmrg
7286747b715Smrgextern _X_EXPORT int
7294642e01fSmrgProcRRSetCrtcTransform (ClientPtr client);
7304642e01fSmrg
7316747b715Smrgextern _X_EXPORT int
7324642e01fSmrgProcRRGetCrtcTransform (ClientPtr client);
7334642e01fSmrg
7344642e01fSmrgint
7354642e01fSmrgProcRRGetPanning (ClientPtr client);
7364642e01fSmrg
7374642e01fSmrgint
7384642e01fSmrgProcRRSetPanning (ClientPtr client);
7394642e01fSmrg
74005b261ecSmrg/* rrdispatch.c */
7416747b715Smrgextern _X_EXPORT Bool
74205b261ecSmrgRRClientKnowsRates (ClientPtr	pClient);
74305b261ecSmrg
74405b261ecSmrg/* rrmode.c */
74505b261ecSmrg/*
74605b261ecSmrg * Find, and if necessary, create a mode
74705b261ecSmrg */
74805b261ecSmrg
7496747b715Smrgextern _X_EXPORT RRModePtr
75005b261ecSmrgRRModeGet (xRRModeInfo	*modeInfo,
75105b261ecSmrg	   const char	*name);
75205b261ecSmrg
75305b261ecSmrg/*
75405b261ecSmrg * Destroy a mode.
75505b261ecSmrg */
75605b261ecSmrg
7576747b715Smrgextern _X_EXPORT void
75805b261ecSmrgRRModeDestroy (RRModePtr mode);
75905b261ecSmrg
76005b261ecSmrg/*
76105b261ecSmrg * Return a list of modes that are valid for some output in pScreen
76205b261ecSmrg */
7636747b715Smrgextern _X_EXPORT RRModePtr *
76405b261ecSmrgRRModesForScreen (ScreenPtr pScreen, int *num_ret);
76505b261ecSmrg
76605b261ecSmrg/*
76705b261ecSmrg * Initialize mode type
76805b261ecSmrg */
7696747b715Smrgextern _X_EXPORT Bool
77005b261ecSmrgRRModeInit (void);
7716747b715Smrg
7726747b715Smrg/*
7736747b715Smrg * Initialize mode type error value
7746747b715Smrg */
7756747b715Smrgextern _X_EXPORT void
7766747b715SmrgRRModeInitErrorValue (void);
77705b261ecSmrg
7786747b715Smrgextern _X_EXPORT int
77905b261ecSmrgProcRRCreateMode (ClientPtr client);
78005b261ecSmrg
7816747b715Smrgextern _X_EXPORT int
78205b261ecSmrgProcRRDestroyMode (ClientPtr client);
78305b261ecSmrg
7846747b715Smrgextern _X_EXPORT int
78505b261ecSmrgProcRRAddOutputMode (ClientPtr client);
78605b261ecSmrg
7876747b715Smrgextern _X_EXPORT int
78805b261ecSmrgProcRRDeleteOutputMode (ClientPtr client);
78905b261ecSmrg
79005b261ecSmrg/* rroutput.c */
79105b261ecSmrg
79205b261ecSmrg/*
79305b261ecSmrg * Notify the output of some change. configChanged indicates whether
79405b261ecSmrg * any external configuration (mode list, clones, connected status)
79505b261ecSmrg * has changed, or whether the change was strictly internal
79605b261ecSmrg * (which crtc is in use)
79705b261ecSmrg */
7986747b715Smrgextern _X_EXPORT void
79905b261ecSmrgRROutputChanged (RROutputPtr output, Bool configChanged);
80005b261ecSmrg
80105b261ecSmrg/*
80205b261ecSmrg * Create an output
80305b261ecSmrg */
80405b261ecSmrg
8056747b715Smrgextern _X_EXPORT RROutputPtr
80605b261ecSmrgRROutputCreate (ScreenPtr   pScreen,
80705b261ecSmrg		const char  *name,
80805b261ecSmrg		int	    nameLength,
80905b261ecSmrg		void	    *devPrivate);
81005b261ecSmrg
81105b261ecSmrg/*
81205b261ecSmrg * Notify extension that output parameters have been changed
81305b261ecSmrg */
8146747b715Smrgextern _X_EXPORT Bool
81505b261ecSmrgRROutputSetClones (RROutputPtr  output,
81605b261ecSmrg		   RROutputPtr  *clones,
81705b261ecSmrg		   int		numClones);
81805b261ecSmrg
8196747b715Smrgextern _X_EXPORT Bool
82005b261ecSmrgRROutputSetModes (RROutputPtr	output,
82105b261ecSmrg		  RRModePtr	*modes,
82205b261ecSmrg		  int		numModes,
82305b261ecSmrg		  int		numPreferred);
82405b261ecSmrg
8256747b715Smrgextern _X_EXPORT int
82605b261ecSmrgRROutputAddUserMode (RROutputPtr    output,
82705b261ecSmrg		     RRModePtr	    mode);
82805b261ecSmrg
8296747b715Smrgextern _X_EXPORT int
83005b261ecSmrgRROutputDeleteUserMode (RROutputPtr output,
83105b261ecSmrg			RRModePtr   mode);
83205b261ecSmrg
8336747b715Smrgextern _X_EXPORT Bool
83405b261ecSmrgRROutputSetCrtcs (RROutputPtr	output,
83505b261ecSmrg		  RRCrtcPtr	*crtcs,
83605b261ecSmrg		  int		numCrtcs);
83705b261ecSmrg
8386747b715Smrgextern _X_EXPORT Bool
83905b261ecSmrgRROutputSetConnection (RROutputPtr  output,
84005b261ecSmrg		       CARD8	    connection);
84105b261ecSmrg
8426747b715Smrgextern _X_EXPORT Bool
84305b261ecSmrgRROutputSetSubpixelOrder (RROutputPtr output,
84405b261ecSmrg			  int	      subpixelOrder);
84505b261ecSmrg
8466747b715Smrgextern _X_EXPORT Bool
84705b261ecSmrgRROutputSetPhysicalSize (RROutputPtr	output,
84805b261ecSmrg			 int		mmWidth,
84905b261ecSmrg			 int		mmHeight);
85005b261ecSmrg
8516747b715Smrgextern _X_EXPORT void
85205b261ecSmrgRRDeliverOutputEvent(ClientPtr client, WindowPtr pWin, RROutputPtr output);
85305b261ecSmrg
8546747b715Smrgextern _X_EXPORT void
85505b261ecSmrgRROutputDestroy (RROutputPtr	output);
85605b261ecSmrg
8576747b715Smrgextern _X_EXPORT int
85805b261ecSmrgProcRRGetOutputInfo (ClientPtr client);
85905b261ecSmrg
8606747b715Smrgextern _X_EXPORT int
8614642e01fSmrgProcRRSetOutputPrimary (ClientPtr client);
8624642e01fSmrg
8636747b715Smrgextern _X_EXPORT int
8644642e01fSmrgProcRRGetOutputPrimary (ClientPtr client);
8654642e01fSmrg
86605b261ecSmrg/*
86705b261ecSmrg * Initialize output type
86805b261ecSmrg */
8696747b715Smrgextern _X_EXPORT Bool
87005b261ecSmrgRROutputInit (void);
8716747b715Smrg
8726747b715Smrg/*
8736747b715Smrg * Initialize output type error value
8746747b715Smrg */
8756747b715Smrgextern _X_EXPORT void
8766747b715SmrgRROutputInitErrorValue (void);
87705b261ecSmrg
87805b261ecSmrg/* rrpointer.c */
8796747b715Smrgextern _X_EXPORT void
88005b261ecSmrgRRPointerMoved (ScreenPtr pScreen, int x, int y);
88105b261ecSmrg
8826747b715Smrgextern _X_EXPORT void
88305b261ecSmrgRRPointerScreenConfigured (ScreenPtr pScreen);
88405b261ecSmrg
88505b261ecSmrg/* rrproperty.c */
88605b261ecSmrg
8876747b715Smrgextern _X_EXPORT void
88805b261ecSmrgRRDeleteAllOutputProperties (RROutputPtr output);
88905b261ecSmrg
8906747b715Smrgextern _X_EXPORT RRPropertyValuePtr
89105b261ecSmrgRRGetOutputProperty (RROutputPtr output, Atom property, Bool pending);
89205b261ecSmrg
8936747b715Smrgextern _X_EXPORT RRPropertyPtr
89405b261ecSmrgRRQueryOutputProperty (RROutputPtr output, Atom property);
89505b261ecSmrg
8966747b715Smrgextern _X_EXPORT void
89705b261ecSmrgRRDeleteOutputProperty (RROutputPtr output, Atom property);
89805b261ecSmrg
8996747b715Smrgextern _X_EXPORT Bool
90005b261ecSmrgRRPostPendingProperties (RROutputPtr output);
90105b261ecSmrg
9026747b715Smrgextern _X_EXPORT int
90305b261ecSmrgRRChangeOutputProperty (RROutputPtr output, Atom property, Atom type,
90405b261ecSmrg			int format, int mode, unsigned long len,
90505b261ecSmrg			pointer value, Bool sendevent, Bool pending);
90605b261ecSmrg
9076747b715Smrgextern _X_EXPORT int
90805b261ecSmrgRRConfigureOutputProperty (RROutputPtr output, Atom property,
90905b261ecSmrg			   Bool pending, Bool range, Bool immutable,
91005b261ecSmrg			   int num_values, INT32 *values);
9116747b715Smrgextern _X_EXPORT int
91205b261ecSmrgProcRRChangeOutputProperty (ClientPtr client);
91305b261ecSmrg
9146747b715Smrgextern _X_EXPORT int
91505b261ecSmrgProcRRGetOutputProperty (ClientPtr client);
91605b261ecSmrg
9176747b715Smrgextern _X_EXPORT int
91805b261ecSmrgProcRRListOutputProperties (ClientPtr client);
91905b261ecSmrg
9206747b715Smrgextern _X_EXPORT int
92105b261ecSmrgProcRRQueryOutputProperty (ClientPtr client);
92205b261ecSmrg
9236747b715Smrgextern _X_EXPORT int
92405b261ecSmrgProcRRConfigureOutputProperty (ClientPtr client);
92505b261ecSmrg
9266747b715Smrgextern _X_EXPORT int
92705b261ecSmrgProcRRDeleteOutputProperty (ClientPtr client);
92805b261ecSmrg
92905b261ecSmrg/* rrxinerama.c */
9306747b715Smrg#ifdef XINERAMA
9316747b715Smrgextern _X_EXPORT void
93205b261ecSmrgRRXineramaExtensionInit(void);
9336747b715Smrg#endif
93405b261ecSmrg
93505b261ecSmrg#endif /* _RANDRSTR_H_ */
93605b261ecSmrg
93705b261ecSmrg/*
93805b261ecSmrg
93905b261ecSmrgrandr extension implementation structure
94005b261ecSmrg
94105b261ecSmrgQuery state:
94205b261ecSmrg    ProcRRGetScreenInfo/ProcRRGetScreenResources
94305b261ecSmrg	RRGetInfo
94405b261ecSmrg
94505b261ecSmrg	    • Request configuration from driver, either 1.0 or 1.2 style
94605b261ecSmrg	    • These functions only record state changes, all
94705b261ecSmrg	      other actions are pended until RRTellChanged is called
94805b261ecSmrg
94905b261ecSmrg	    ->rrGetInfo
95005b261ecSmrg	    1.0:
95105b261ecSmrg		RRRegisterSize
95205b261ecSmrg		RRRegisterRate
95305b261ecSmrg		RRSetCurrentConfig
95405b261ecSmrg	    1.2:
95505b261ecSmrg		RRScreenSetSizeRange
95605b261ecSmrg		RROutputSetCrtcs
95705b261ecSmrg		RRModeGet
95805b261ecSmrg		RROutputSetModes
95905b261ecSmrg		RROutputSetConnection
96005b261ecSmrg		RROutputSetSubpixelOrder
96105b261ecSmrg		RROutputSetClones
96205b261ecSmrg		RRCrtcNotify
96305b261ecSmrg
96405b261ecSmrg	• Must delay scanning configuration until after ->rrGetInfo returns
96505b261ecSmrg	  because some drivers will call SetCurrentConfig in the middle
96605b261ecSmrg	  of the ->rrGetInfo operation.
96705b261ecSmrg
96805b261ecSmrg	1.0:
96905b261ecSmrg
97005b261ecSmrg	    • Scan old configuration, mirror to new structures
97105b261ecSmrg
97205b261ecSmrg	    RRScanOldConfig
97305b261ecSmrg		RRCrtcCreate
97405b261ecSmrg		RROutputCreate
97505b261ecSmrg		RROutputSetCrtcs
97605b261ecSmrg		RROutputSetConnection
97705b261ecSmrg		RROutputSetSubpixelOrder
97805b261ecSmrg		RROldModeAdd	• This adds modes one-at-a-time
97905b261ecSmrg		    RRModeGet
98005b261ecSmrg		RRCrtcNotify
98105b261ecSmrg
98205b261ecSmrg	• send events, reset pointer if necessary
98305b261ecSmrg
98405b261ecSmrg	RRTellChanged
98505b261ecSmrg	    WalkTree (sending events)
98605b261ecSmrg
98705b261ecSmrg	    • when layout has changed:
98805b261ecSmrg		RRPointerScreenConfigured
98905b261ecSmrg		RRSendConfigNotify
99005b261ecSmrg
99105b261ecSmrgAsynchronous state setting (1.2 only)
99205b261ecSmrg    When setting state asynchronously, the driver invokes the
99305b261ecSmrg    ->rrGetInfo function and then calls RRTellChanged to flush
99405b261ecSmrg    the changes to the clients and reset pointer if necessary
99505b261ecSmrg
99605b261ecSmrgSet state
99705b261ecSmrg
99805b261ecSmrg    ProcRRSetScreenConfig
99905b261ecSmrg	RRCrtcSet
100005b261ecSmrg	    1.2:
100105b261ecSmrg		->rrCrtcSet
100205b261ecSmrg		    RRCrtcNotify
100305b261ecSmrg	    1.0:
100405b261ecSmrg		->rrSetConfig
100505b261ecSmrg		RRCrtcNotify
100605b261ecSmrg	    RRTellChanged
100705b261ecSmrg */
1008