xref: /OK3568_Linux_fs/external/xserver/randr/randrstr.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /*
2*4882a593Smuzhiyun  * Copyright © 2000 Compaq Computer Corporation
3*4882a593Smuzhiyun  * Copyright © 2002 Hewlett-Packard Company
4*4882a593Smuzhiyun  * Copyright © 2006 Intel Corporation
5*4882a593Smuzhiyun  * Copyright © 2008 Red Hat, Inc.
6*4882a593Smuzhiyun  *
7*4882a593Smuzhiyun  * Permission to use, copy, modify, distribute, and sell this software and its
8*4882a593Smuzhiyun  * documentation for any purpose is hereby granted without fee, provided that
9*4882a593Smuzhiyun  * the above copyright notice appear in all copies and that both that copyright
10*4882a593Smuzhiyun  * notice and this permission notice appear in supporting documentation, and
11*4882a593Smuzhiyun  * that the name of the copyright holders not be used in advertising or
12*4882a593Smuzhiyun  * publicity pertaining to distribution of the software without specific,
13*4882a593Smuzhiyun  * written prior permission.  The copyright holders make no representations
14*4882a593Smuzhiyun  * about the suitability of this software for any purpose.  It is provided "as
15*4882a593Smuzhiyun  * is" without express or implied warranty.
16*4882a593Smuzhiyun  *
17*4882a593Smuzhiyun  * THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
18*4882a593Smuzhiyun  * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
19*4882a593Smuzhiyun  * EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY SPECIAL, INDIRECT OR
20*4882a593Smuzhiyun  * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
21*4882a593Smuzhiyun  * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
22*4882a593Smuzhiyun  * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
23*4882a593Smuzhiyun  * OF THIS SOFTWARE.
24*4882a593Smuzhiyun  *
25*4882a593Smuzhiyun  * Author:  Jim Gettys, Hewlett-Packard Company, Inc.
26*4882a593Smuzhiyun  *	    Keith Packard, Intel Corporation
27*4882a593Smuzhiyun  */
28*4882a593Smuzhiyun 
29*4882a593Smuzhiyun #ifdef HAVE_DIX_CONFIG_H
30*4882a593Smuzhiyun #include <dix-config.h>
31*4882a593Smuzhiyun #endif
32*4882a593Smuzhiyun 
33*4882a593Smuzhiyun #ifndef _RANDRSTR_H_
34*4882a593Smuzhiyun #define _RANDRSTR_H_
35*4882a593Smuzhiyun 
36*4882a593Smuzhiyun #include <X11/X.h>
37*4882a593Smuzhiyun #include <X11/Xproto.h>
38*4882a593Smuzhiyun #include "misc.h"
39*4882a593Smuzhiyun #include "os.h"
40*4882a593Smuzhiyun #include "dixstruct.h"
41*4882a593Smuzhiyun #include "resource.h"
42*4882a593Smuzhiyun #include "scrnintstr.h"
43*4882a593Smuzhiyun #include "windowstr.h"
44*4882a593Smuzhiyun #include "pixmapstr.h"
45*4882a593Smuzhiyun #include "extnsionst.h"
46*4882a593Smuzhiyun #include "servermd.h"
47*4882a593Smuzhiyun #include "rrtransform.h"
48*4882a593Smuzhiyun #include <X11/extensions/randr.h>
49*4882a593Smuzhiyun #include <X11/extensions/randrproto.h>
50*4882a593Smuzhiyun #include <X11/extensions/render.h>      /* we share subpixel order information */
51*4882a593Smuzhiyun #include "picturestr.h"
52*4882a593Smuzhiyun #include <X11/Xfuncproto.h>
53*4882a593Smuzhiyun 
54*4882a593Smuzhiyun /* required for ABI compatibility for now */
55*4882a593Smuzhiyun #define RANDR_10_INTERFACE 1
56*4882a593Smuzhiyun #define RANDR_12_INTERFACE 1
57*4882a593Smuzhiyun #define RANDR_13_INTERFACE 1    /* requires RANDR_12_INTERFACE */
58*4882a593Smuzhiyun #define RANDR_GET_CRTC_INTERFACE 1
59*4882a593Smuzhiyun 
60*4882a593Smuzhiyun #define RANDR_INTERFACE_VERSION 0x0104
61*4882a593Smuzhiyun 
62*4882a593Smuzhiyun typedef XID RRMode;
63*4882a593Smuzhiyun typedef XID RROutput;
64*4882a593Smuzhiyun typedef XID RRCrtc;
65*4882a593Smuzhiyun typedef XID RRProvider;
66*4882a593Smuzhiyun typedef XID RRLease;
67*4882a593Smuzhiyun 
68*4882a593Smuzhiyun extern int RREventBase, RRErrorBase;
69*4882a593Smuzhiyun 
70*4882a593Smuzhiyun extern int (*ProcRandrVector[RRNumberRequests]) (ClientPtr);
71*4882a593Smuzhiyun extern int (*SProcRandrVector[RRNumberRequests]) (ClientPtr);
72*4882a593Smuzhiyun 
73*4882a593Smuzhiyun /*
74*4882a593Smuzhiyun  * Modeline for a monitor. Name follows directly after this struct
75*4882a593Smuzhiyun  */
76*4882a593Smuzhiyun 
77*4882a593Smuzhiyun #define RRModeName(pMode) ((char *) (pMode + 1))
78*4882a593Smuzhiyun typedef struct _rrMode RRModeRec, *RRModePtr;
79*4882a593Smuzhiyun typedef struct _rrPropertyValue RRPropertyValueRec, *RRPropertyValuePtr;
80*4882a593Smuzhiyun typedef struct _rrProperty RRPropertyRec, *RRPropertyPtr;
81*4882a593Smuzhiyun typedef struct _rrCrtc RRCrtcRec, *RRCrtcPtr;
82*4882a593Smuzhiyun typedef struct _rrOutput RROutputRec, *RROutputPtr;
83*4882a593Smuzhiyun typedef struct _rrProvider RRProviderRec, *RRProviderPtr;
84*4882a593Smuzhiyun typedef struct _rrMonitor RRMonitorRec, *RRMonitorPtr;
85*4882a593Smuzhiyun typedef struct _rrLease RRLeaseRec, *RRLeasePtr;
86*4882a593Smuzhiyun 
87*4882a593Smuzhiyun struct _rrMode {
88*4882a593Smuzhiyun     int refcnt;
89*4882a593Smuzhiyun     xRRModeInfo mode;
90*4882a593Smuzhiyun     char *name;
91*4882a593Smuzhiyun     ScreenPtr userScreen;
92*4882a593Smuzhiyun };
93*4882a593Smuzhiyun 
94*4882a593Smuzhiyun struct _rrPropertyValue {
95*4882a593Smuzhiyun     Atom type;                  /* ignored by server */
96*4882a593Smuzhiyun     short format;               /* format of data for swapping - 8,16,32 */
97*4882a593Smuzhiyun     long size;                  /* size of data in (format/8) bytes */
98*4882a593Smuzhiyun     void *data;                 /* private to client */
99*4882a593Smuzhiyun };
100*4882a593Smuzhiyun 
101*4882a593Smuzhiyun struct _rrProperty {
102*4882a593Smuzhiyun     RRPropertyPtr next;
103*4882a593Smuzhiyun     ATOM propertyName;
104*4882a593Smuzhiyun     Bool is_pending;
105*4882a593Smuzhiyun     Bool range;
106*4882a593Smuzhiyun     Bool immutable;
107*4882a593Smuzhiyun     int num_valid;
108*4882a593Smuzhiyun     INT32 *valid_values;
109*4882a593Smuzhiyun     RRPropertyValueRec current, pending;
110*4882a593Smuzhiyun };
111*4882a593Smuzhiyun 
112*4882a593Smuzhiyun struct _rrCrtc {
113*4882a593Smuzhiyun     RRCrtc id;
114*4882a593Smuzhiyun     ScreenPtr pScreen;
115*4882a593Smuzhiyun     RRModePtr mode;
116*4882a593Smuzhiyun     int x, y;
117*4882a593Smuzhiyun     Rotation rotation;
118*4882a593Smuzhiyun     Rotation rotations;
119*4882a593Smuzhiyun     Bool changed;
120*4882a593Smuzhiyun     int numOutputs;
121*4882a593Smuzhiyun     RROutputPtr *outputs;
122*4882a593Smuzhiyun     int gammaSize;
123*4882a593Smuzhiyun     CARD16 *gammaRed;
124*4882a593Smuzhiyun     CARD16 *gammaBlue;
125*4882a593Smuzhiyun     CARD16 *gammaGreen;
126*4882a593Smuzhiyun     void *devPrivate;
127*4882a593Smuzhiyun     Bool transforms;
128*4882a593Smuzhiyun     RRTransformRec client_pending_transform;
129*4882a593Smuzhiyun     RRTransformRec client_current_transform;
130*4882a593Smuzhiyun     PictTransform transform;
131*4882a593Smuzhiyun     struct pict_f_transform f_transform;
132*4882a593Smuzhiyun     struct pict_f_transform f_inverse;
133*4882a593Smuzhiyun 
134*4882a593Smuzhiyun     PixmapPtr scanout_pixmap;
135*4882a593Smuzhiyun     PixmapPtr scanout_pixmap_back;
136*4882a593Smuzhiyun };
137*4882a593Smuzhiyun 
138*4882a593Smuzhiyun struct _rrOutput {
139*4882a593Smuzhiyun     RROutput id;
140*4882a593Smuzhiyun     ScreenPtr pScreen;
141*4882a593Smuzhiyun     char *name;
142*4882a593Smuzhiyun     int nameLength;
143*4882a593Smuzhiyun     CARD8 connection;
144*4882a593Smuzhiyun     CARD8 subpixelOrder;
145*4882a593Smuzhiyun     int mmWidth;
146*4882a593Smuzhiyun     int mmHeight;
147*4882a593Smuzhiyun     RRCrtcPtr crtc;
148*4882a593Smuzhiyun     int numCrtcs;
149*4882a593Smuzhiyun     RRCrtcPtr *crtcs;
150*4882a593Smuzhiyun     int numClones;
151*4882a593Smuzhiyun     RROutputPtr *clones;
152*4882a593Smuzhiyun     int numModes;
153*4882a593Smuzhiyun     int numPreferred;
154*4882a593Smuzhiyun     RRModePtr *modes;
155*4882a593Smuzhiyun     int numUserModes;
156*4882a593Smuzhiyun     RRModePtr *userModes;
157*4882a593Smuzhiyun     Bool changed;
158*4882a593Smuzhiyun     Bool nonDesktop;
159*4882a593Smuzhiyun     RRPropertyPtr properties;
160*4882a593Smuzhiyun     Bool pendingProperties;
161*4882a593Smuzhiyun     void *devPrivate;
162*4882a593Smuzhiyun };
163*4882a593Smuzhiyun 
164*4882a593Smuzhiyun struct _rrProvider {
165*4882a593Smuzhiyun     RRProvider id;
166*4882a593Smuzhiyun     ScreenPtr pScreen;
167*4882a593Smuzhiyun     uint32_t capabilities;
168*4882a593Smuzhiyun     char *name;
169*4882a593Smuzhiyun     int nameLength;
170*4882a593Smuzhiyun     RRPropertyPtr properties;
171*4882a593Smuzhiyun     Bool pendingProperties;
172*4882a593Smuzhiyun     Bool changed;
173*4882a593Smuzhiyun     struct _rrProvider *offload_sink;
174*4882a593Smuzhiyun     struct _rrProvider *output_source;
175*4882a593Smuzhiyun };
176*4882a593Smuzhiyun 
177*4882a593Smuzhiyun typedef struct _rrMonitorGeometry {
178*4882a593Smuzhiyun     BoxRec box;
179*4882a593Smuzhiyun     CARD32 mmWidth;
180*4882a593Smuzhiyun     CARD32 mmHeight;
181*4882a593Smuzhiyun } RRMonitorGeometryRec, *RRMonitorGeometryPtr;
182*4882a593Smuzhiyun 
183*4882a593Smuzhiyun struct _rrMonitor {
184*4882a593Smuzhiyun     Atom name;
185*4882a593Smuzhiyun     ScreenPtr pScreen;
186*4882a593Smuzhiyun     int numOutputs;
187*4882a593Smuzhiyun     RROutput *outputs;
188*4882a593Smuzhiyun     Bool primary;
189*4882a593Smuzhiyun     Bool automatic;
190*4882a593Smuzhiyun     RRMonitorGeometryRec geometry;
191*4882a593Smuzhiyun };
192*4882a593Smuzhiyun 
193*4882a593Smuzhiyun typedef enum _rrLeaseState { RRLeaseCreating, RRLeaseRunning, RRLeaseTerminating } RRLeaseState;
194*4882a593Smuzhiyun 
195*4882a593Smuzhiyun struct _rrLease {
196*4882a593Smuzhiyun     struct xorg_list list;
197*4882a593Smuzhiyun     ScreenPtr screen;
198*4882a593Smuzhiyun     RRLease id;
199*4882a593Smuzhiyun     RRLeaseState state;
200*4882a593Smuzhiyun     void *devPrivate;
201*4882a593Smuzhiyun     int numCrtcs;
202*4882a593Smuzhiyun     RRCrtcPtr *crtcs;
203*4882a593Smuzhiyun     int numOutputs;
204*4882a593Smuzhiyun     RROutputPtr *outputs;
205*4882a593Smuzhiyun };
206*4882a593Smuzhiyun 
207*4882a593Smuzhiyun #if RANDR_12_INTERFACE
208*4882a593Smuzhiyun typedef Bool (*RRScreenSetSizeProcPtr) (ScreenPtr pScreen,
209*4882a593Smuzhiyun                                         CARD16 width,
210*4882a593Smuzhiyun                                         CARD16 height,
211*4882a593Smuzhiyun                                         CARD32 mmWidth, CARD32 mmHeight);
212*4882a593Smuzhiyun 
213*4882a593Smuzhiyun typedef Bool (*RRCrtcSetProcPtr) (ScreenPtr pScreen,
214*4882a593Smuzhiyun                                   RRCrtcPtr crtc,
215*4882a593Smuzhiyun                                   RRModePtr mode,
216*4882a593Smuzhiyun                                   int x,
217*4882a593Smuzhiyun                                   int y,
218*4882a593Smuzhiyun                                   Rotation rotation,
219*4882a593Smuzhiyun                                   int numOutputs, RROutputPtr * outputs);
220*4882a593Smuzhiyun 
221*4882a593Smuzhiyun typedef Bool (*RRCrtcSetGammaProcPtr) (ScreenPtr pScreen, RRCrtcPtr crtc);
222*4882a593Smuzhiyun 
223*4882a593Smuzhiyun typedef Bool (*RRCrtcGetGammaProcPtr) (ScreenPtr pScreen, RRCrtcPtr crtc);
224*4882a593Smuzhiyun 
225*4882a593Smuzhiyun typedef Bool (*RROutputSetPropertyProcPtr) (ScreenPtr pScreen,
226*4882a593Smuzhiyun                                             RROutputPtr output,
227*4882a593Smuzhiyun                                             Atom property,
228*4882a593Smuzhiyun                                             RRPropertyValuePtr value);
229*4882a593Smuzhiyun 
230*4882a593Smuzhiyun typedef Bool (*RROutputValidateModeProcPtr) (ScreenPtr pScreen,
231*4882a593Smuzhiyun                                              RROutputPtr output,
232*4882a593Smuzhiyun                                              RRModePtr mode);
233*4882a593Smuzhiyun 
234*4882a593Smuzhiyun typedef void (*RRModeDestroyProcPtr) (ScreenPtr pScreen, RRModePtr mode);
235*4882a593Smuzhiyun 
236*4882a593Smuzhiyun #endif
237*4882a593Smuzhiyun 
238*4882a593Smuzhiyun #if RANDR_13_INTERFACE
239*4882a593Smuzhiyun typedef Bool (*RROutputGetPropertyProcPtr) (ScreenPtr pScreen,
240*4882a593Smuzhiyun                                             RROutputPtr output, Atom property);
241*4882a593Smuzhiyun typedef Bool (*RRGetPanningProcPtr) (ScreenPtr pScrn,
242*4882a593Smuzhiyun                                      RRCrtcPtr crtc,
243*4882a593Smuzhiyun                                      BoxPtr totalArea,
244*4882a593Smuzhiyun                                      BoxPtr trackingArea, INT16 *border);
245*4882a593Smuzhiyun typedef Bool (*RRSetPanningProcPtr) (ScreenPtr pScrn,
246*4882a593Smuzhiyun                                      RRCrtcPtr crtc,
247*4882a593Smuzhiyun                                      BoxPtr totalArea,
248*4882a593Smuzhiyun                                      BoxPtr trackingArea, INT16 *border);
249*4882a593Smuzhiyun 
250*4882a593Smuzhiyun #endif                          /* RANDR_13_INTERFACE */
251*4882a593Smuzhiyun 
252*4882a593Smuzhiyun typedef Bool (*RRProviderGetPropertyProcPtr) (ScreenPtr pScreen,
253*4882a593Smuzhiyun                                             RRProviderPtr provider, Atom property);
254*4882a593Smuzhiyun typedef Bool (*RRProviderSetPropertyProcPtr) (ScreenPtr pScreen,
255*4882a593Smuzhiyun                                               RRProviderPtr provider,
256*4882a593Smuzhiyun                                               Atom property,
257*4882a593Smuzhiyun                                               RRPropertyValuePtr value);
258*4882a593Smuzhiyun 
259*4882a593Smuzhiyun typedef Bool (*RRGetInfoProcPtr) (ScreenPtr pScreen, Rotation * rotations);
260*4882a593Smuzhiyun typedef Bool (*RRCloseScreenProcPtr) (ScreenPtr pscreen);
261*4882a593Smuzhiyun 
262*4882a593Smuzhiyun typedef Bool (*RRProviderSetOutputSourceProcPtr)(ScreenPtr pScreen,
263*4882a593Smuzhiyun                                           RRProviderPtr provider,
264*4882a593Smuzhiyun                                           RRProviderPtr output_source);
265*4882a593Smuzhiyun 
266*4882a593Smuzhiyun typedef Bool (*RRProviderSetOffloadSinkProcPtr)(ScreenPtr pScreen,
267*4882a593Smuzhiyun                                          RRProviderPtr provider,
268*4882a593Smuzhiyun                                          RRProviderPtr offload_sink);
269*4882a593Smuzhiyun 
270*4882a593Smuzhiyun 
271*4882a593Smuzhiyun typedef void (*RRProviderDestroyProcPtr)(ScreenPtr pScreen,
272*4882a593Smuzhiyun                                          RRProviderPtr provider);
273*4882a593Smuzhiyun 
274*4882a593Smuzhiyun /* Additions for 1.6 */
275*4882a593Smuzhiyun 
276*4882a593Smuzhiyun typedef int (*RRCreateLeaseProcPtr)(ScreenPtr screen,
277*4882a593Smuzhiyun                                     RRLeasePtr lease,
278*4882a593Smuzhiyun                                     int *fd);
279*4882a593Smuzhiyun 
280*4882a593Smuzhiyun typedef void (*RRTerminateLeaseProcPtr)(ScreenPtr screen,
281*4882a593Smuzhiyun                                         RRLeasePtr lease);
282*4882a593Smuzhiyun 
283*4882a593Smuzhiyun /* These are for 1.0 compatibility */
284*4882a593Smuzhiyun 
285*4882a593Smuzhiyun typedef struct _rrRefresh {
286*4882a593Smuzhiyun     CARD16 rate;
287*4882a593Smuzhiyun     RRModePtr mode;
288*4882a593Smuzhiyun } RRScreenRate, *RRScreenRatePtr;
289*4882a593Smuzhiyun 
290*4882a593Smuzhiyun typedef struct _rrScreenSize {
291*4882a593Smuzhiyun     int id;
292*4882a593Smuzhiyun     short width, height;
293*4882a593Smuzhiyun     short mmWidth, mmHeight;
294*4882a593Smuzhiyun     int nRates;
295*4882a593Smuzhiyun     RRScreenRatePtr pRates;
296*4882a593Smuzhiyun } RRScreenSize, *RRScreenSizePtr;
297*4882a593Smuzhiyun 
298*4882a593Smuzhiyun #ifdef RANDR_10_INTERFACE
299*4882a593Smuzhiyun 
300*4882a593Smuzhiyun typedef Bool (*RRSetConfigProcPtr) (ScreenPtr pScreen,
301*4882a593Smuzhiyun                                     Rotation rotation,
302*4882a593Smuzhiyun                                     int rate, RRScreenSizePtr pSize);
303*4882a593Smuzhiyun 
304*4882a593Smuzhiyun #endif
305*4882a593Smuzhiyun 
306*4882a593Smuzhiyun typedef Bool (*RRCrtcSetScanoutPixmapProcPtr)(RRCrtcPtr crtc, PixmapPtr pixmap);
307*4882a593Smuzhiyun 
308*4882a593Smuzhiyun typedef Bool (*RRStartFlippingPixmapTrackingProcPtr)(RRCrtcPtr, DrawablePtr,
309*4882a593Smuzhiyun                                                      PixmapPtr, PixmapPtr,
310*4882a593Smuzhiyun                                                      int x, int y,
311*4882a593Smuzhiyun                                                      int dst_x, int dst_y,
312*4882a593Smuzhiyun                                                      Rotation rotation);
313*4882a593Smuzhiyun 
314*4882a593Smuzhiyun typedef Bool (*RREnableSharedPixmapFlippingProcPtr)(RRCrtcPtr,
315*4882a593Smuzhiyun                                                     PixmapPtr front,
316*4882a593Smuzhiyun                                                     PixmapPtr back);
317*4882a593Smuzhiyun 
318*4882a593Smuzhiyun typedef void (*RRDisableSharedPixmapFlippingProcPtr)(RRCrtcPtr);
319*4882a593Smuzhiyun 
320*4882a593Smuzhiyun 
321*4882a593Smuzhiyun typedef struct _rrScrPriv {
322*4882a593Smuzhiyun     /*
323*4882a593Smuzhiyun      * 'public' part of the structure; DDXen fill this in
324*4882a593Smuzhiyun      * as they initialize
325*4882a593Smuzhiyun      */
326*4882a593Smuzhiyun #if RANDR_10_INTERFACE
327*4882a593Smuzhiyun     RRSetConfigProcPtr rrSetConfig;
328*4882a593Smuzhiyun #endif
329*4882a593Smuzhiyun     RRGetInfoProcPtr rrGetInfo;
330*4882a593Smuzhiyun #if RANDR_12_INTERFACE
331*4882a593Smuzhiyun     RRScreenSetSizeProcPtr rrScreenSetSize;
332*4882a593Smuzhiyun     RRCrtcSetProcPtr rrCrtcSet;
333*4882a593Smuzhiyun     RRCrtcSetGammaProcPtr rrCrtcSetGamma;
334*4882a593Smuzhiyun     RRCrtcGetGammaProcPtr rrCrtcGetGamma;
335*4882a593Smuzhiyun     RROutputSetPropertyProcPtr rrOutputSetProperty;
336*4882a593Smuzhiyun     RROutputValidateModeProcPtr rrOutputValidateMode;
337*4882a593Smuzhiyun     RRModeDestroyProcPtr rrModeDestroy;
338*4882a593Smuzhiyun #endif
339*4882a593Smuzhiyun #if RANDR_13_INTERFACE
340*4882a593Smuzhiyun     RROutputGetPropertyProcPtr rrOutputGetProperty;
341*4882a593Smuzhiyun     RRGetPanningProcPtr rrGetPanning;
342*4882a593Smuzhiyun     RRSetPanningProcPtr rrSetPanning;
343*4882a593Smuzhiyun #endif
344*4882a593Smuzhiyun     /* TODO #if RANDR_15_INTERFACE */
345*4882a593Smuzhiyun     RRCrtcSetScanoutPixmapProcPtr rrCrtcSetScanoutPixmap;
346*4882a593Smuzhiyun 
347*4882a593Smuzhiyun     RRStartFlippingPixmapTrackingProcPtr rrStartFlippingPixmapTracking;
348*4882a593Smuzhiyun     RREnableSharedPixmapFlippingProcPtr rrEnableSharedPixmapFlipping;
349*4882a593Smuzhiyun     RRDisableSharedPixmapFlippingProcPtr rrDisableSharedPixmapFlipping;
350*4882a593Smuzhiyun 
351*4882a593Smuzhiyun     RRProviderSetOutputSourceProcPtr rrProviderSetOutputSource;
352*4882a593Smuzhiyun     RRProviderSetOffloadSinkProcPtr rrProviderSetOffloadSink;
353*4882a593Smuzhiyun     RRProviderGetPropertyProcPtr rrProviderGetProperty;
354*4882a593Smuzhiyun     RRProviderSetPropertyProcPtr rrProviderSetProperty;
355*4882a593Smuzhiyun 
356*4882a593Smuzhiyun     RRCreateLeaseProcPtr rrCreateLease;
357*4882a593Smuzhiyun     RRTerminateLeaseProcPtr rrTerminateLease;
358*4882a593Smuzhiyun 
359*4882a593Smuzhiyun     /*
360*4882a593Smuzhiyun      * Private part of the structure; not considered part of the ABI
361*4882a593Smuzhiyun      */
362*4882a593Smuzhiyun     TimeStamp lastSetTime;      /* last changed by client */
363*4882a593Smuzhiyun     TimeStamp lastConfigTime;   /* possible configs changed */
364*4882a593Smuzhiyun     RRCloseScreenProcPtr CloseScreen;
365*4882a593Smuzhiyun 
366*4882a593Smuzhiyun     Bool changed;               /* some config changed */
367*4882a593Smuzhiyun     Bool configChanged;         /* configuration changed */
368*4882a593Smuzhiyun     Bool layoutChanged;         /* screen layout changed */
369*4882a593Smuzhiyun     Bool resourcesChanged;      /* screen resources change */
370*4882a593Smuzhiyun     Bool leasesChanged;         /* leases change */
371*4882a593Smuzhiyun 
372*4882a593Smuzhiyun     CARD16 minWidth, minHeight;
373*4882a593Smuzhiyun     CARD16 maxWidth, maxHeight;
374*4882a593Smuzhiyun     CARD16 width, height;       /* last known screen size */
375*4882a593Smuzhiyun     CARD16 mmWidth, mmHeight;   /* last known screen size */
376*4882a593Smuzhiyun 
377*4882a593Smuzhiyun     int numOutputs;
378*4882a593Smuzhiyun     RROutputPtr *outputs;
379*4882a593Smuzhiyun     RROutputPtr primaryOutput;
380*4882a593Smuzhiyun 
381*4882a593Smuzhiyun     int numCrtcs;
382*4882a593Smuzhiyun     RRCrtcPtr *crtcs;
383*4882a593Smuzhiyun 
384*4882a593Smuzhiyun     /* Last known pointer position */
385*4882a593Smuzhiyun     RRCrtcPtr pointerCrtc;
386*4882a593Smuzhiyun 
387*4882a593Smuzhiyun #ifdef RANDR_10_INTERFACE
388*4882a593Smuzhiyun     /*
389*4882a593Smuzhiyun      * Configuration information
390*4882a593Smuzhiyun      */
391*4882a593Smuzhiyun     Rotation rotations;
392*4882a593Smuzhiyun     CARD16 reqWidth, reqHeight;
393*4882a593Smuzhiyun 
394*4882a593Smuzhiyun     int nSizes;
395*4882a593Smuzhiyun     RRScreenSizePtr pSizes;
396*4882a593Smuzhiyun 
397*4882a593Smuzhiyun     Rotation rotation;
398*4882a593Smuzhiyun     int rate;
399*4882a593Smuzhiyun     int size;
400*4882a593Smuzhiyun #endif
401*4882a593Smuzhiyun     Bool discontiguous;
402*4882a593Smuzhiyun 
403*4882a593Smuzhiyun     RRProviderPtr provider;
404*4882a593Smuzhiyun 
405*4882a593Smuzhiyun     RRProviderDestroyProcPtr rrProviderDestroy;
406*4882a593Smuzhiyun 
407*4882a593Smuzhiyun     int numMonitors;
408*4882a593Smuzhiyun     RRMonitorPtr *monitors;
409*4882a593Smuzhiyun 
410*4882a593Smuzhiyun     struct xorg_list leases;
411*4882a593Smuzhiyun } rrScrPrivRec, *rrScrPrivPtr;
412*4882a593Smuzhiyun 
413*4882a593Smuzhiyun extern _X_EXPORT DevPrivateKeyRec rrPrivKeyRec;
414*4882a593Smuzhiyun 
415*4882a593Smuzhiyun #define rrPrivKey (&rrPrivKeyRec)
416*4882a593Smuzhiyun 
417*4882a593Smuzhiyun #define rrGetScrPriv(pScr)  ((rrScrPrivPtr)dixLookupPrivate(&(pScr)->devPrivates, rrPrivKey))
418*4882a593Smuzhiyun #define rrScrPriv(pScr)	rrScrPrivPtr    pScrPriv = rrGetScrPriv(pScr)
419*4882a593Smuzhiyun #define SetRRScreen(s,p) dixSetPrivate(&(s)->devPrivates, rrPrivKey, p)
420*4882a593Smuzhiyun 
421*4882a593Smuzhiyun /*
422*4882a593Smuzhiyun  * each window has a list of clients requesting
423*4882a593Smuzhiyun  * RRNotify events.  Each client has a resource
424*4882a593Smuzhiyun  * for each window it selects RRNotify input for,
425*4882a593Smuzhiyun  * this resource is used to delete the RRNotifyRec
426*4882a593Smuzhiyun  * entry from the per-window queue.
427*4882a593Smuzhiyun  */
428*4882a593Smuzhiyun 
429*4882a593Smuzhiyun typedef struct _RREvent *RREventPtr;
430*4882a593Smuzhiyun 
431*4882a593Smuzhiyun typedef struct _RREvent {
432*4882a593Smuzhiyun     RREventPtr next;
433*4882a593Smuzhiyun     ClientPtr client;
434*4882a593Smuzhiyun     WindowPtr window;
435*4882a593Smuzhiyun     XID clientResource;
436*4882a593Smuzhiyun     int mask;
437*4882a593Smuzhiyun } RREventRec;
438*4882a593Smuzhiyun 
439*4882a593Smuzhiyun typedef struct _RRTimes {
440*4882a593Smuzhiyun     TimeStamp setTime;
441*4882a593Smuzhiyun     TimeStamp configTime;
442*4882a593Smuzhiyun } RRTimesRec, *RRTimesPtr;
443*4882a593Smuzhiyun 
444*4882a593Smuzhiyun typedef struct _RRClient {
445*4882a593Smuzhiyun     int major_version;
446*4882a593Smuzhiyun     int minor_version;
447*4882a593Smuzhiyun /*  RRTimesRec	times[0]; */
448*4882a593Smuzhiyun } RRClientRec, *RRClientPtr;
449*4882a593Smuzhiyun 
450*4882a593Smuzhiyun extern RESTYPE RRClientType, RREventType;     /* resource types for event masks */
451*4882a593Smuzhiyun extern DevPrivateKeyRec RRClientPrivateKeyRec;
452*4882a593Smuzhiyun 
453*4882a593Smuzhiyun #define RRClientPrivateKey (&RRClientPrivateKeyRec)
454*4882a593Smuzhiyun extern _X_EXPORT RESTYPE RRCrtcType, RRModeType, RROutputType, RRProviderType, RRLeaseType;
455*4882a593Smuzhiyun 
456*4882a593Smuzhiyun #define VERIFY_RR_OUTPUT(id, ptr, a)\
457*4882a593Smuzhiyun     {\
458*4882a593Smuzhiyun 	int rc = dixLookupResourceByType((void **)&(ptr), id,\
459*4882a593Smuzhiyun 	                                 RROutputType, client, a);\
460*4882a593Smuzhiyun 	if (rc != Success) {\
461*4882a593Smuzhiyun 	    client->errorValue = id;\
462*4882a593Smuzhiyun 	    return rc;\
463*4882a593Smuzhiyun 	}\
464*4882a593Smuzhiyun     }
465*4882a593Smuzhiyun 
466*4882a593Smuzhiyun #define VERIFY_RR_CRTC(id, ptr, a)\
467*4882a593Smuzhiyun     {\
468*4882a593Smuzhiyun 	int rc = dixLookupResourceByType((void **)&(ptr), id,\
469*4882a593Smuzhiyun 	                                 RRCrtcType, client, a);\
470*4882a593Smuzhiyun 	if (rc != Success) {\
471*4882a593Smuzhiyun 	    client->errorValue = id;\
472*4882a593Smuzhiyun 	    return rc;\
473*4882a593Smuzhiyun 	}\
474*4882a593Smuzhiyun     }
475*4882a593Smuzhiyun 
476*4882a593Smuzhiyun #define VERIFY_RR_MODE(id, ptr, a)\
477*4882a593Smuzhiyun     {\
478*4882a593Smuzhiyun 	int rc = dixLookupResourceByType((void **)&(ptr), id,\
479*4882a593Smuzhiyun 	                                 RRModeType, client, a);\
480*4882a593Smuzhiyun 	if (rc != Success) {\
481*4882a593Smuzhiyun 	    client->errorValue = id;\
482*4882a593Smuzhiyun 	    return rc;\
483*4882a593Smuzhiyun 	}\
484*4882a593Smuzhiyun     }
485*4882a593Smuzhiyun 
486*4882a593Smuzhiyun #define VERIFY_RR_PROVIDER(id, ptr, a)\
487*4882a593Smuzhiyun     {\
488*4882a593Smuzhiyun         int rc = dixLookupResourceByType((void **)&(ptr), id,\
489*4882a593Smuzhiyun                                          RRProviderType, client, a);\
490*4882a593Smuzhiyun         if (rc != Success) {\
491*4882a593Smuzhiyun             client->errorValue = id;\
492*4882a593Smuzhiyun             return rc;\
493*4882a593Smuzhiyun         }\
494*4882a593Smuzhiyun     }
495*4882a593Smuzhiyun 
496*4882a593Smuzhiyun #define VERIFY_RR_LEASE(id, ptr, a)\
497*4882a593Smuzhiyun     {\
498*4882a593Smuzhiyun         int rc = dixLookupResourceByType((void **)&(ptr), id,\
499*4882a593Smuzhiyun                                          RRLeaseType, client, a);\
500*4882a593Smuzhiyun         if (rc != Success) {\
501*4882a593Smuzhiyun             client->errorValue = id;\
502*4882a593Smuzhiyun             return rc;\
503*4882a593Smuzhiyun         }\
504*4882a593Smuzhiyun     }
505*4882a593Smuzhiyun 
506*4882a593Smuzhiyun #define GetRRClient(pClient)    ((RRClientPtr)dixLookupPrivate(&(pClient)->devPrivates, RRClientPrivateKey))
507*4882a593Smuzhiyun #define rrClientPriv(pClient)	RRClientPtr pRRClient = GetRRClient(pClient)
508*4882a593Smuzhiyun 
509*4882a593Smuzhiyun #ifdef RANDR_12_INTERFACE
510*4882a593Smuzhiyun /*
511*4882a593Smuzhiyun  * Set the range of sizes for the screen
512*4882a593Smuzhiyun  */
513*4882a593Smuzhiyun extern _X_EXPORT void
514*4882a593Smuzhiyun 
515*4882a593Smuzhiyun RRScreenSetSizeRange(ScreenPtr pScreen,
516*4882a593Smuzhiyun                      CARD16 minWidth,
517*4882a593Smuzhiyun                      CARD16 minHeight, CARD16 maxWidth, CARD16 maxHeight);
518*4882a593Smuzhiyun #endif
519*4882a593Smuzhiyun 
520*4882a593Smuzhiyun /* rrscreen.c */
521*4882a593Smuzhiyun /*
522*4882a593Smuzhiyun  * Notify the extension that the screen size has been changed.
523*4882a593Smuzhiyun  * The driver is responsible for calling this whenever it has changed
524*4882a593Smuzhiyun  * the size of the screen
525*4882a593Smuzhiyun  */
526*4882a593Smuzhiyun extern _X_EXPORT void
527*4882a593Smuzhiyun  RRScreenSizeNotify(ScreenPtr pScreen);
528*4882a593Smuzhiyun 
529*4882a593Smuzhiyun /*
530*4882a593Smuzhiyun  * Request that the screen be resized
531*4882a593Smuzhiyun  */
532*4882a593Smuzhiyun extern _X_EXPORT Bool
533*4882a593Smuzhiyun 
534*4882a593Smuzhiyun RRScreenSizeSet(ScreenPtr pScreen,
535*4882a593Smuzhiyun                 CARD16 width, CARD16 height, CARD32 mmWidth, CARD32 mmHeight);
536*4882a593Smuzhiyun 
537*4882a593Smuzhiyun /*
538*4882a593Smuzhiyun  * Send ConfigureNotify event to root window when 'something' happens
539*4882a593Smuzhiyun  */
540*4882a593Smuzhiyun extern _X_EXPORT void
541*4882a593Smuzhiyun  RRSendConfigNotify(ScreenPtr pScreen);
542*4882a593Smuzhiyun 
543*4882a593Smuzhiyun /*
544*4882a593Smuzhiyun  * screen dispatch
545*4882a593Smuzhiyun  */
546*4882a593Smuzhiyun extern _X_EXPORT int
547*4882a593Smuzhiyun  ProcRRGetScreenSizeRange(ClientPtr client);
548*4882a593Smuzhiyun 
549*4882a593Smuzhiyun extern _X_EXPORT int
550*4882a593Smuzhiyun  ProcRRSetScreenSize(ClientPtr client);
551*4882a593Smuzhiyun 
552*4882a593Smuzhiyun extern _X_EXPORT int
553*4882a593Smuzhiyun  ProcRRGetScreenResources(ClientPtr client);
554*4882a593Smuzhiyun 
555*4882a593Smuzhiyun extern _X_EXPORT int
556*4882a593Smuzhiyun  ProcRRGetScreenResourcesCurrent(ClientPtr client);
557*4882a593Smuzhiyun 
558*4882a593Smuzhiyun extern _X_EXPORT int
559*4882a593Smuzhiyun  ProcRRSetScreenConfig(ClientPtr client);
560*4882a593Smuzhiyun 
561*4882a593Smuzhiyun extern _X_EXPORT int
562*4882a593Smuzhiyun  ProcRRGetScreenInfo(ClientPtr client);
563*4882a593Smuzhiyun 
564*4882a593Smuzhiyun /*
565*4882a593Smuzhiyun  * Deliver a ScreenNotify event
566*4882a593Smuzhiyun  */
567*4882a593Smuzhiyun extern _X_EXPORT void
568*4882a593Smuzhiyun  RRDeliverScreenEvent(ClientPtr client, WindowPtr pWin, ScreenPtr pScreen);
569*4882a593Smuzhiyun 
570*4882a593Smuzhiyun extern _X_EXPORT void
571*4882a593Smuzhiyun  RRResourcesChanged(ScreenPtr pScreen);
572*4882a593Smuzhiyun 
573*4882a593Smuzhiyun /* randr.c */
574*4882a593Smuzhiyun /* set a screen change on the primary screen */
575*4882a593Smuzhiyun extern _X_EXPORT void
576*4882a593Smuzhiyun RRSetChanged(ScreenPtr pScreen);
577*4882a593Smuzhiyun 
578*4882a593Smuzhiyun /*
579*4882a593Smuzhiyun  * Send all pending events
580*4882a593Smuzhiyun  */
581*4882a593Smuzhiyun extern _X_EXPORT void
582*4882a593Smuzhiyun  RRTellChanged(ScreenPtr pScreen);
583*4882a593Smuzhiyun 
584*4882a593Smuzhiyun /*
585*4882a593Smuzhiyun  * Poll the driver for changed information
586*4882a593Smuzhiyun  */
587*4882a593Smuzhiyun extern _X_EXPORT Bool
588*4882a593Smuzhiyun  RRGetInfo(ScreenPtr pScreen, Bool force_query);
589*4882a593Smuzhiyun 
590*4882a593Smuzhiyun extern _X_EXPORT Bool RRInit(void);
591*4882a593Smuzhiyun 
592*4882a593Smuzhiyun extern _X_EXPORT Bool RRScreenInit(ScreenPtr pScreen);
593*4882a593Smuzhiyun 
594*4882a593Smuzhiyun extern _X_EXPORT RROutputPtr RRFirstOutput(ScreenPtr pScreen);
595*4882a593Smuzhiyun 
596*4882a593Smuzhiyun extern _X_EXPORT Bool RROutputSetNonDesktop(RROutputPtr output, Bool non_desktop);
597*4882a593Smuzhiyun 
598*4882a593Smuzhiyun extern _X_EXPORT CARD16
599*4882a593Smuzhiyun  RRVerticalRefresh(xRRModeInfo * mode);
600*4882a593Smuzhiyun 
601*4882a593Smuzhiyun #ifdef RANDR_10_INTERFACE
602*4882a593Smuzhiyun /*
603*4882a593Smuzhiyun  * This is the old interface, deprecated but left
604*4882a593Smuzhiyun  * around for compatibility
605*4882a593Smuzhiyun  */
606*4882a593Smuzhiyun 
607*4882a593Smuzhiyun /*
608*4882a593Smuzhiyun  * Then, register the specific size with the screen
609*4882a593Smuzhiyun  */
610*4882a593Smuzhiyun 
611*4882a593Smuzhiyun extern _X_EXPORT RRScreenSizePtr
612*4882a593Smuzhiyun RRRegisterSize(ScreenPtr pScreen,
613*4882a593Smuzhiyun                short width, short height, short mmWidth, short mmHeight);
614*4882a593Smuzhiyun 
615*4882a593Smuzhiyun extern _X_EXPORT Bool
616*4882a593Smuzhiyun  RRRegisterRate(ScreenPtr pScreen, RRScreenSizePtr pSize, int rate);
617*4882a593Smuzhiyun 
618*4882a593Smuzhiyun /*
619*4882a593Smuzhiyun  * Finally, set the current configuration of the screen
620*4882a593Smuzhiyun  */
621*4882a593Smuzhiyun 
622*4882a593Smuzhiyun extern _X_EXPORT void
623*4882a593Smuzhiyun 
624*4882a593Smuzhiyun RRSetCurrentConfig(ScreenPtr pScreen,
625*4882a593Smuzhiyun                    Rotation rotation, int rate, RRScreenSizePtr pSize);
626*4882a593Smuzhiyun 
627*4882a593Smuzhiyun extern _X_EXPORT Rotation RRGetRotation(ScreenPtr pScreen);
628*4882a593Smuzhiyun 
629*4882a593Smuzhiyun #endif
630*4882a593Smuzhiyun 
631*4882a593Smuzhiyun /* rrcrtc.c */
632*4882a593Smuzhiyun 
633*4882a593Smuzhiyun /*
634*4882a593Smuzhiyun  * Notify the CRTC of some change; layoutChanged indicates that
635*4882a593Smuzhiyun  * some position or size element changed
636*4882a593Smuzhiyun  */
637*4882a593Smuzhiyun extern _X_EXPORT void
638*4882a593Smuzhiyun  RRCrtcChanged(RRCrtcPtr crtc, Bool layoutChanged);
639*4882a593Smuzhiyun 
640*4882a593Smuzhiyun /*
641*4882a593Smuzhiyun  * Create a CRTC
642*4882a593Smuzhiyun  */
643*4882a593Smuzhiyun extern _X_EXPORT RRCrtcPtr RRCrtcCreate(ScreenPtr pScreen, void *devPrivate);
644*4882a593Smuzhiyun 
645*4882a593Smuzhiyun /*
646*4882a593Smuzhiyun  * Set the allowed rotations on a CRTC
647*4882a593Smuzhiyun  */
648*4882a593Smuzhiyun extern _X_EXPORT void
649*4882a593Smuzhiyun  RRCrtcSetRotations(RRCrtcPtr crtc, Rotation rotations);
650*4882a593Smuzhiyun 
651*4882a593Smuzhiyun /*
652*4882a593Smuzhiyun  * Set whether transforms are allowed on a CRTC
653*4882a593Smuzhiyun  */
654*4882a593Smuzhiyun extern _X_EXPORT void
655*4882a593Smuzhiyun  RRCrtcSetTransformSupport(RRCrtcPtr crtc, Bool transforms);
656*4882a593Smuzhiyun 
657*4882a593Smuzhiyun /*
658*4882a593Smuzhiyun  * Notify the extension that the Crtc has been reconfigured,
659*4882a593Smuzhiyun  * the driver calls this whenever it has updated the mode
660*4882a593Smuzhiyun  */
661*4882a593Smuzhiyun extern _X_EXPORT Bool
662*4882a593Smuzhiyun 
663*4882a593Smuzhiyun RRCrtcNotify(RRCrtcPtr crtc,
664*4882a593Smuzhiyun              RRModePtr mode,
665*4882a593Smuzhiyun              int x,
666*4882a593Smuzhiyun              int y,
667*4882a593Smuzhiyun              Rotation rotation,
668*4882a593Smuzhiyun              RRTransformPtr transform, int numOutputs, RROutputPtr * outputs);
669*4882a593Smuzhiyun 
670*4882a593Smuzhiyun extern _X_EXPORT void
671*4882a593Smuzhiyun  RRDeliverCrtcEvent(ClientPtr client, WindowPtr pWin, RRCrtcPtr crtc);
672*4882a593Smuzhiyun 
673*4882a593Smuzhiyun /*
674*4882a593Smuzhiyun  * Request that the Crtc be reconfigured
675*4882a593Smuzhiyun  */
676*4882a593Smuzhiyun extern _X_EXPORT Bool
677*4882a593Smuzhiyun 
678*4882a593Smuzhiyun RRCrtcSet(RRCrtcPtr crtc,
679*4882a593Smuzhiyun           RRModePtr mode,
680*4882a593Smuzhiyun           int x,
681*4882a593Smuzhiyun           int y, Rotation rotation, int numOutput, RROutputPtr * outputs);
682*4882a593Smuzhiyun 
683*4882a593Smuzhiyun /*
684*4882a593Smuzhiyun  * Request that the Crtc gamma be changed
685*4882a593Smuzhiyun  */
686*4882a593Smuzhiyun 
687*4882a593Smuzhiyun extern _X_EXPORT Bool
688*4882a593Smuzhiyun  RRCrtcGammaSet(RRCrtcPtr crtc, CARD16 *red, CARD16 *green, CARD16 *blue);
689*4882a593Smuzhiyun 
690*4882a593Smuzhiyun /*
691*4882a593Smuzhiyun  * Request current gamma back from the DDX (if possible).
692*4882a593Smuzhiyun  * This includes gamma size.
693*4882a593Smuzhiyun  */
694*4882a593Smuzhiyun 
695*4882a593Smuzhiyun extern _X_EXPORT Bool
696*4882a593Smuzhiyun  RRCrtcGammaGet(RRCrtcPtr crtc);
697*4882a593Smuzhiyun 
698*4882a593Smuzhiyun /*
699*4882a593Smuzhiyun  * Notify the extension that the Crtc gamma has been changed
700*4882a593Smuzhiyun  * The driver calls this whenever it has changed the gamma values
701*4882a593Smuzhiyun  * in the RRCrtcRec
702*4882a593Smuzhiyun  */
703*4882a593Smuzhiyun 
704*4882a593Smuzhiyun extern _X_EXPORT Bool
705*4882a593Smuzhiyun  RRCrtcGammaNotify(RRCrtcPtr crtc);
706*4882a593Smuzhiyun 
707*4882a593Smuzhiyun /*
708*4882a593Smuzhiyun  * Set the size of the gamma table at server startup time
709*4882a593Smuzhiyun  */
710*4882a593Smuzhiyun 
711*4882a593Smuzhiyun extern _X_EXPORT Bool
712*4882a593Smuzhiyun  RRCrtcGammaSetSize(RRCrtcPtr crtc, int size);
713*4882a593Smuzhiyun 
714*4882a593Smuzhiyun /*
715*4882a593Smuzhiyun  * Return the area of the frame buffer scanned out by the crtc,
716*4882a593Smuzhiyun  * taking into account the current mode and rotation
717*4882a593Smuzhiyun  */
718*4882a593Smuzhiyun 
719*4882a593Smuzhiyun extern _X_EXPORT void
720*4882a593Smuzhiyun  RRCrtcGetScanoutSize(RRCrtcPtr crtc, int *width, int *height);
721*4882a593Smuzhiyun 
722*4882a593Smuzhiyun /*
723*4882a593Smuzhiyun  * Return crtc transform
724*4882a593Smuzhiyun  */
725*4882a593Smuzhiyun extern _X_EXPORT RRTransformPtr RRCrtcGetTransform(RRCrtcPtr crtc);
726*4882a593Smuzhiyun 
727*4882a593Smuzhiyun /*
728*4882a593Smuzhiyun  * Check whether the pending and current transforms are the same
729*4882a593Smuzhiyun  */
730*4882a593Smuzhiyun extern _X_EXPORT Bool
731*4882a593Smuzhiyun  RRCrtcPendingTransform(RRCrtcPtr crtc);
732*4882a593Smuzhiyun 
733*4882a593Smuzhiyun /*
734*4882a593Smuzhiyun  * Destroy a Crtc at shutdown
735*4882a593Smuzhiyun  */
736*4882a593Smuzhiyun extern _X_EXPORT void
737*4882a593Smuzhiyun  RRCrtcDestroy(RRCrtcPtr crtc);
738*4882a593Smuzhiyun 
739*4882a593Smuzhiyun /*
740*4882a593Smuzhiyun  * Set the pending CRTC transformation
741*4882a593Smuzhiyun  */
742*4882a593Smuzhiyun 
743*4882a593Smuzhiyun extern _X_EXPORT int
744*4882a593Smuzhiyun 
745*4882a593Smuzhiyun RRCrtcTransformSet(RRCrtcPtr crtc,
746*4882a593Smuzhiyun                    PictTransformPtr transform,
747*4882a593Smuzhiyun                    struct pict_f_transform *f_transform,
748*4882a593Smuzhiyun                    struct pict_f_transform *f_inverse,
749*4882a593Smuzhiyun                    char *filter, int filter_len, xFixed * params, int nparams);
750*4882a593Smuzhiyun 
751*4882a593Smuzhiyun /*
752*4882a593Smuzhiyun  * Initialize crtc type
753*4882a593Smuzhiyun  */
754*4882a593Smuzhiyun extern _X_EXPORT Bool
755*4882a593Smuzhiyun  RRCrtcInit(void);
756*4882a593Smuzhiyun 
757*4882a593Smuzhiyun /*
758*4882a593Smuzhiyun  * Initialize crtc type error value
759*4882a593Smuzhiyun  */
760*4882a593Smuzhiyun extern _X_EXPORT void
761*4882a593Smuzhiyun  RRCrtcInitErrorValue(void);
762*4882a593Smuzhiyun 
763*4882a593Smuzhiyun /*
764*4882a593Smuzhiyun  * Detach and free a scanout pixmap
765*4882a593Smuzhiyun  */
766*4882a593Smuzhiyun extern _X_EXPORT void
767*4882a593Smuzhiyun  RRCrtcDetachScanoutPixmap(RRCrtcPtr crtc);
768*4882a593Smuzhiyun 
769*4882a593Smuzhiyun extern _X_EXPORT Bool
770*4882a593Smuzhiyun  RRReplaceScanoutPixmap(DrawablePtr pDrawable, PixmapPtr pPixmap, Bool enable);
771*4882a593Smuzhiyun 
772*4882a593Smuzhiyun /*
773*4882a593Smuzhiyun  * Return if the screen has any scanout_pixmap's attached
774*4882a593Smuzhiyun  */
775*4882a593Smuzhiyun extern _X_EXPORT Bool
776*4882a593Smuzhiyun  RRHasScanoutPixmap(ScreenPtr pScreen);
777*4882a593Smuzhiyun 
778*4882a593Smuzhiyun /*
779*4882a593Smuzhiyun  * Crtc dispatch
780*4882a593Smuzhiyun  */
781*4882a593Smuzhiyun 
782*4882a593Smuzhiyun extern _X_EXPORT int
783*4882a593Smuzhiyun  ProcRRGetCrtcInfo(ClientPtr client);
784*4882a593Smuzhiyun 
785*4882a593Smuzhiyun extern _X_EXPORT int
786*4882a593Smuzhiyun  ProcRRSetCrtcConfig(ClientPtr client);
787*4882a593Smuzhiyun 
788*4882a593Smuzhiyun extern _X_EXPORT int
789*4882a593Smuzhiyun  ProcRRGetCrtcGammaSize(ClientPtr client);
790*4882a593Smuzhiyun 
791*4882a593Smuzhiyun extern _X_EXPORT int
792*4882a593Smuzhiyun  ProcRRGetCrtcGamma(ClientPtr client);
793*4882a593Smuzhiyun 
794*4882a593Smuzhiyun extern _X_EXPORT int
795*4882a593Smuzhiyun  ProcRRSetCrtcGamma(ClientPtr client);
796*4882a593Smuzhiyun 
797*4882a593Smuzhiyun extern _X_EXPORT int
798*4882a593Smuzhiyun  ProcRRSetCrtcTransform(ClientPtr client);
799*4882a593Smuzhiyun 
800*4882a593Smuzhiyun extern _X_EXPORT int
801*4882a593Smuzhiyun  ProcRRGetCrtcTransform(ClientPtr client);
802*4882a593Smuzhiyun 
803*4882a593Smuzhiyun int
804*4882a593Smuzhiyun  ProcRRGetPanning(ClientPtr client);
805*4882a593Smuzhiyun 
806*4882a593Smuzhiyun int
807*4882a593Smuzhiyun  ProcRRSetPanning(ClientPtr client);
808*4882a593Smuzhiyun 
809*4882a593Smuzhiyun void
810*4882a593Smuzhiyun  RRConstrainCursorHarder(DeviceIntPtr, ScreenPtr, int, int *, int *);
811*4882a593Smuzhiyun 
812*4882a593Smuzhiyun /* rrdispatch.c */
813*4882a593Smuzhiyun extern _X_EXPORT Bool
814*4882a593Smuzhiyun  RRClientKnowsRates(ClientPtr pClient);
815*4882a593Smuzhiyun 
816*4882a593Smuzhiyun /* rrlease.c */
817*4882a593Smuzhiyun void
818*4882a593Smuzhiyun RRDeliverLeaseEvent(ClientPtr client, WindowPtr window);
819*4882a593Smuzhiyun 
820*4882a593Smuzhiyun extern _X_EXPORT void
821*4882a593Smuzhiyun RRLeaseTerminated(RRLeasePtr lease);
822*4882a593Smuzhiyun 
823*4882a593Smuzhiyun extern _X_EXPORT void
824*4882a593Smuzhiyun RRLeaseFree(RRLeasePtr lease);
825*4882a593Smuzhiyun 
826*4882a593Smuzhiyun extern _X_EXPORT Bool
827*4882a593Smuzhiyun RRCrtcIsLeased(RRCrtcPtr crtc);
828*4882a593Smuzhiyun 
829*4882a593Smuzhiyun extern _X_EXPORT Bool
830*4882a593Smuzhiyun RROutputIsLeased(RROutputPtr output);
831*4882a593Smuzhiyun 
832*4882a593Smuzhiyun void
833*4882a593Smuzhiyun RRTerminateLease(RRLeasePtr lease);
834*4882a593Smuzhiyun 
835*4882a593Smuzhiyun Bool
836*4882a593Smuzhiyun RRLeaseInit(void);
837*4882a593Smuzhiyun 
838*4882a593Smuzhiyun /* rrmode.c */
839*4882a593Smuzhiyun /*
840*4882a593Smuzhiyun  * Find, and if necessary, create a mode
841*4882a593Smuzhiyun  */
842*4882a593Smuzhiyun 
843*4882a593Smuzhiyun extern _X_EXPORT RRModePtr RRModeGet(xRRModeInfo * modeInfo, const char *name);
844*4882a593Smuzhiyun 
845*4882a593Smuzhiyun /*
846*4882a593Smuzhiyun  * Destroy a mode.
847*4882a593Smuzhiyun  */
848*4882a593Smuzhiyun 
849*4882a593Smuzhiyun extern _X_EXPORT void
850*4882a593Smuzhiyun  RRModeDestroy(RRModePtr mode);
851*4882a593Smuzhiyun 
852*4882a593Smuzhiyun /*
853*4882a593Smuzhiyun  * Return a list of modes that are valid for some output in pScreen
854*4882a593Smuzhiyun  */
855*4882a593Smuzhiyun extern _X_EXPORT RRModePtr *RRModesForScreen(ScreenPtr pScreen, int *num_ret);
856*4882a593Smuzhiyun 
857*4882a593Smuzhiyun /*
858*4882a593Smuzhiyun  * Initialize mode type
859*4882a593Smuzhiyun  */
860*4882a593Smuzhiyun extern _X_EXPORT Bool
861*4882a593Smuzhiyun  RRModeInit(void);
862*4882a593Smuzhiyun 
863*4882a593Smuzhiyun /*
864*4882a593Smuzhiyun  * Initialize mode type error value
865*4882a593Smuzhiyun  */
866*4882a593Smuzhiyun extern _X_EXPORT void
867*4882a593Smuzhiyun  RRModeInitErrorValue(void);
868*4882a593Smuzhiyun 
869*4882a593Smuzhiyun extern _X_EXPORT int
870*4882a593Smuzhiyun  ProcRRCreateMode(ClientPtr client);
871*4882a593Smuzhiyun 
872*4882a593Smuzhiyun extern _X_EXPORT int
873*4882a593Smuzhiyun  ProcRRDestroyMode(ClientPtr client);
874*4882a593Smuzhiyun 
875*4882a593Smuzhiyun extern _X_EXPORT int
876*4882a593Smuzhiyun  ProcRRAddOutputMode(ClientPtr client);
877*4882a593Smuzhiyun 
878*4882a593Smuzhiyun extern _X_EXPORT int
879*4882a593Smuzhiyun  ProcRRDeleteOutputMode(ClientPtr client);
880*4882a593Smuzhiyun 
881*4882a593Smuzhiyun /* rroutput.c */
882*4882a593Smuzhiyun 
883*4882a593Smuzhiyun /*
884*4882a593Smuzhiyun  * Notify the output of some change. configChanged indicates whether
885*4882a593Smuzhiyun  * any external configuration (mode list, clones, connected status)
886*4882a593Smuzhiyun  * has changed, or whether the change was strictly internal
887*4882a593Smuzhiyun  * (which crtc is in use)
888*4882a593Smuzhiyun  */
889*4882a593Smuzhiyun extern _X_EXPORT void
890*4882a593Smuzhiyun  RROutputChanged(RROutputPtr output, Bool configChanged);
891*4882a593Smuzhiyun 
892*4882a593Smuzhiyun /*
893*4882a593Smuzhiyun  * Create an output
894*4882a593Smuzhiyun  */
895*4882a593Smuzhiyun 
896*4882a593Smuzhiyun extern _X_EXPORT RROutputPtr
897*4882a593Smuzhiyun RROutputCreate(ScreenPtr pScreen,
898*4882a593Smuzhiyun                const char *name, int nameLength, void *devPrivate);
899*4882a593Smuzhiyun 
900*4882a593Smuzhiyun /*
901*4882a593Smuzhiyun  * Notify extension that output parameters have been changed
902*4882a593Smuzhiyun  */
903*4882a593Smuzhiyun extern _X_EXPORT Bool
904*4882a593Smuzhiyun  RROutputSetClones(RROutputPtr output, RROutputPtr * clones, int numClones);
905*4882a593Smuzhiyun 
906*4882a593Smuzhiyun extern _X_EXPORT Bool
907*4882a593Smuzhiyun 
908*4882a593Smuzhiyun RROutputSetModes(RROutputPtr output,
909*4882a593Smuzhiyun                  RRModePtr * modes, int numModes, int numPreferred);
910*4882a593Smuzhiyun 
911*4882a593Smuzhiyun extern _X_EXPORT int
912*4882a593Smuzhiyun  RROutputAddUserMode(RROutputPtr output, RRModePtr mode);
913*4882a593Smuzhiyun 
914*4882a593Smuzhiyun extern _X_EXPORT int
915*4882a593Smuzhiyun  RROutputDeleteUserMode(RROutputPtr output, RRModePtr mode);
916*4882a593Smuzhiyun 
917*4882a593Smuzhiyun extern _X_EXPORT Bool
918*4882a593Smuzhiyun  RROutputSetCrtcs(RROutputPtr output, RRCrtcPtr * crtcs, int numCrtcs);
919*4882a593Smuzhiyun 
920*4882a593Smuzhiyun extern _X_EXPORT Bool
921*4882a593Smuzhiyun  RROutputSetConnection(RROutputPtr output, CARD8 connection);
922*4882a593Smuzhiyun 
923*4882a593Smuzhiyun extern _X_EXPORT Bool
924*4882a593Smuzhiyun  RROutputSetSubpixelOrder(RROutputPtr output, int subpixelOrder);
925*4882a593Smuzhiyun 
926*4882a593Smuzhiyun extern _X_EXPORT Bool
927*4882a593Smuzhiyun  RROutputSetPhysicalSize(RROutputPtr output, int mmWidth, int mmHeight);
928*4882a593Smuzhiyun 
929*4882a593Smuzhiyun extern _X_EXPORT void
930*4882a593Smuzhiyun  RRDeliverOutputEvent(ClientPtr client, WindowPtr pWin, RROutputPtr output);
931*4882a593Smuzhiyun 
932*4882a593Smuzhiyun extern _X_EXPORT void
933*4882a593Smuzhiyun  RROutputDestroy(RROutputPtr output);
934*4882a593Smuzhiyun 
935*4882a593Smuzhiyun extern _X_EXPORT int
936*4882a593Smuzhiyun  ProcRRGetOutputInfo(ClientPtr client);
937*4882a593Smuzhiyun 
938*4882a593Smuzhiyun extern _X_EXPORT int
939*4882a593Smuzhiyun  ProcRRSetOutputPrimary(ClientPtr client);
940*4882a593Smuzhiyun 
941*4882a593Smuzhiyun extern _X_EXPORT int
942*4882a593Smuzhiyun  ProcRRGetOutputPrimary(ClientPtr client);
943*4882a593Smuzhiyun 
944*4882a593Smuzhiyun /*
945*4882a593Smuzhiyun  * Initialize output type
946*4882a593Smuzhiyun  */
947*4882a593Smuzhiyun extern _X_EXPORT Bool
948*4882a593Smuzhiyun  RROutputInit(void);
949*4882a593Smuzhiyun 
950*4882a593Smuzhiyun /*
951*4882a593Smuzhiyun  * Initialize output type error value
952*4882a593Smuzhiyun  */
953*4882a593Smuzhiyun extern _X_EXPORT void
954*4882a593Smuzhiyun  RROutputInitErrorValue(void);
955*4882a593Smuzhiyun 
956*4882a593Smuzhiyun /* rrpointer.c */
957*4882a593Smuzhiyun extern _X_EXPORT void
958*4882a593Smuzhiyun  RRPointerMoved(ScreenPtr pScreen, int x, int y);
959*4882a593Smuzhiyun 
960*4882a593Smuzhiyun extern _X_EXPORT void
961*4882a593Smuzhiyun  RRPointerScreenConfigured(ScreenPtr pScreen);
962*4882a593Smuzhiyun 
963*4882a593Smuzhiyun /* rrproperty.c */
964*4882a593Smuzhiyun 
965*4882a593Smuzhiyun extern _X_EXPORT void
966*4882a593Smuzhiyun  RRDeleteAllOutputProperties(RROutputPtr output);
967*4882a593Smuzhiyun 
968*4882a593Smuzhiyun extern _X_EXPORT RRPropertyValuePtr
969*4882a593Smuzhiyun RRGetOutputProperty(RROutputPtr output, Atom property, Bool pending);
970*4882a593Smuzhiyun 
971*4882a593Smuzhiyun extern _X_EXPORT RRPropertyPtr
972*4882a593Smuzhiyun RRQueryOutputProperty(RROutputPtr output, Atom property);
973*4882a593Smuzhiyun 
974*4882a593Smuzhiyun extern _X_EXPORT void
975*4882a593Smuzhiyun  RRDeleteOutputProperty(RROutputPtr output, Atom property);
976*4882a593Smuzhiyun 
977*4882a593Smuzhiyun extern _X_EXPORT Bool
978*4882a593Smuzhiyun  RRPostPendingProperties(RROutputPtr output);
979*4882a593Smuzhiyun 
980*4882a593Smuzhiyun extern _X_EXPORT int
981*4882a593Smuzhiyun 
982*4882a593Smuzhiyun RRChangeOutputProperty(RROutputPtr output, Atom property, Atom type,
983*4882a593Smuzhiyun                        int format, int mode, unsigned long len,
984*4882a593Smuzhiyun                        const void *value, Bool sendevent, Bool pending);
985*4882a593Smuzhiyun 
986*4882a593Smuzhiyun extern _X_EXPORT int
987*4882a593Smuzhiyun 
988*4882a593Smuzhiyun RRConfigureOutputProperty(RROutputPtr output, Atom property,
989*4882a593Smuzhiyun                           Bool pending, Bool range, Bool immutable,
990*4882a593Smuzhiyun                           int num_values, const INT32 *values);
991*4882a593Smuzhiyun extern _X_EXPORT int
992*4882a593Smuzhiyun  ProcRRChangeOutputProperty(ClientPtr client);
993*4882a593Smuzhiyun 
994*4882a593Smuzhiyun extern _X_EXPORT int
995*4882a593Smuzhiyun  ProcRRGetOutputProperty(ClientPtr client);
996*4882a593Smuzhiyun 
997*4882a593Smuzhiyun extern _X_EXPORT int
998*4882a593Smuzhiyun  ProcRRListOutputProperties(ClientPtr client);
999*4882a593Smuzhiyun 
1000*4882a593Smuzhiyun extern _X_EXPORT int
1001*4882a593Smuzhiyun  ProcRRQueryOutputProperty(ClientPtr client);
1002*4882a593Smuzhiyun 
1003*4882a593Smuzhiyun extern _X_EXPORT int
1004*4882a593Smuzhiyun  ProcRRConfigureOutputProperty(ClientPtr client);
1005*4882a593Smuzhiyun 
1006*4882a593Smuzhiyun extern _X_EXPORT int
1007*4882a593Smuzhiyun  ProcRRDeleteOutputProperty(ClientPtr client);
1008*4882a593Smuzhiyun 
1009*4882a593Smuzhiyun /* rrprovider.c */
1010*4882a593Smuzhiyun #define PRIME_SYNC_PROP         "PRIME Synchronization"
1011*4882a593Smuzhiyun extern _X_EXPORT void
1012*4882a593Smuzhiyun RRProviderInitErrorValue(void);
1013*4882a593Smuzhiyun 
1014*4882a593Smuzhiyun extern _X_EXPORT int
1015*4882a593Smuzhiyun ProcRRGetProviders(ClientPtr client);
1016*4882a593Smuzhiyun 
1017*4882a593Smuzhiyun extern _X_EXPORT int
1018*4882a593Smuzhiyun ProcRRGetProviderInfo(ClientPtr client);
1019*4882a593Smuzhiyun 
1020*4882a593Smuzhiyun extern _X_EXPORT int
1021*4882a593Smuzhiyun ProcRRSetProviderOutputSource(ClientPtr client);
1022*4882a593Smuzhiyun 
1023*4882a593Smuzhiyun extern _X_EXPORT int
1024*4882a593Smuzhiyun ProcRRSetProviderOffloadSink(ClientPtr client);
1025*4882a593Smuzhiyun 
1026*4882a593Smuzhiyun extern _X_EXPORT Bool
1027*4882a593Smuzhiyun RRProviderInit(void);
1028*4882a593Smuzhiyun 
1029*4882a593Smuzhiyun extern _X_EXPORT RRProviderPtr
1030*4882a593Smuzhiyun RRProviderCreate(ScreenPtr pScreen, const char *name,
1031*4882a593Smuzhiyun                  int nameLength);
1032*4882a593Smuzhiyun 
1033*4882a593Smuzhiyun extern _X_EXPORT void
1034*4882a593Smuzhiyun RRProviderDestroy (RRProviderPtr provider);
1035*4882a593Smuzhiyun 
1036*4882a593Smuzhiyun extern _X_EXPORT void
1037*4882a593Smuzhiyun RRProviderSetCapabilities(RRProviderPtr provider, uint32_t capabilities);
1038*4882a593Smuzhiyun 
1039*4882a593Smuzhiyun extern _X_EXPORT Bool
1040*4882a593Smuzhiyun RRProviderLookup(XID id, RRProviderPtr *provider_p);
1041*4882a593Smuzhiyun 
1042*4882a593Smuzhiyun extern _X_EXPORT void
1043*4882a593Smuzhiyun RRDeliverProviderEvent(ClientPtr client, WindowPtr pWin, RRProviderPtr provider);
1044*4882a593Smuzhiyun 
1045*4882a593Smuzhiyun /* rrproviderproperty.c */
1046*4882a593Smuzhiyun 
1047*4882a593Smuzhiyun extern _X_EXPORT void
1048*4882a593Smuzhiyun  RRDeleteAllProviderProperties(RRProviderPtr provider);
1049*4882a593Smuzhiyun 
1050*4882a593Smuzhiyun extern _X_EXPORT RRPropertyValuePtr
1051*4882a593Smuzhiyun  RRGetProviderProperty(RRProviderPtr provider, Atom property, Bool pending);
1052*4882a593Smuzhiyun 
1053*4882a593Smuzhiyun extern _X_EXPORT RRPropertyPtr
1054*4882a593Smuzhiyun  RRQueryProviderProperty(RRProviderPtr provider, Atom property);
1055*4882a593Smuzhiyun 
1056*4882a593Smuzhiyun extern _X_EXPORT void
1057*4882a593Smuzhiyun  RRDeleteProviderProperty(RRProviderPtr provider, Atom property);
1058*4882a593Smuzhiyun 
1059*4882a593Smuzhiyun extern _X_EXPORT int
1060*4882a593Smuzhiyun RRChangeProviderProperty(RRProviderPtr provider, Atom property, Atom type,
1061*4882a593Smuzhiyun                        int format, int mode, unsigned long len,
1062*4882a593Smuzhiyun                        void *value, Bool sendevent, Bool pending);
1063*4882a593Smuzhiyun 
1064*4882a593Smuzhiyun extern _X_EXPORT int
1065*4882a593Smuzhiyun  RRConfigureProviderProperty(RRProviderPtr provider, Atom property,
1066*4882a593Smuzhiyun                              Bool pending, Bool range, Bool immutable,
1067*4882a593Smuzhiyun                              int num_values, INT32 *values);
1068*4882a593Smuzhiyun 
1069*4882a593Smuzhiyun extern _X_EXPORT Bool
1070*4882a593Smuzhiyun  RRPostProviderPendingProperties(RRProviderPtr provider);
1071*4882a593Smuzhiyun 
1072*4882a593Smuzhiyun extern _X_EXPORT int
1073*4882a593Smuzhiyun  ProcRRGetProviderProperty(ClientPtr client);
1074*4882a593Smuzhiyun 
1075*4882a593Smuzhiyun extern _X_EXPORT int
1076*4882a593Smuzhiyun  ProcRRListProviderProperties(ClientPtr client);
1077*4882a593Smuzhiyun 
1078*4882a593Smuzhiyun extern _X_EXPORT int
1079*4882a593Smuzhiyun  ProcRRQueryProviderProperty(ClientPtr client);
1080*4882a593Smuzhiyun 
1081*4882a593Smuzhiyun extern _X_EXPORT int
1082*4882a593Smuzhiyun ProcRRConfigureProviderProperty(ClientPtr client);
1083*4882a593Smuzhiyun 
1084*4882a593Smuzhiyun extern _X_EXPORT int
1085*4882a593Smuzhiyun ProcRRChangeProviderProperty(ClientPtr client);
1086*4882a593Smuzhiyun 
1087*4882a593Smuzhiyun extern _X_EXPORT int
1088*4882a593Smuzhiyun  ProcRRDeleteProviderProperty(ClientPtr client);
1089*4882a593Smuzhiyun /* rrxinerama.c */
1090*4882a593Smuzhiyun #ifdef XINERAMA
1091*4882a593Smuzhiyun extern _X_EXPORT void
1092*4882a593Smuzhiyun  RRXineramaExtensionInit(void);
1093*4882a593Smuzhiyun #endif
1094*4882a593Smuzhiyun 
1095*4882a593Smuzhiyun void
1096*4882a593Smuzhiyun RRMonitorInit(ScreenPtr screen);
1097*4882a593Smuzhiyun 
1098*4882a593Smuzhiyun Bool
1099*4882a593Smuzhiyun RRMonitorMakeList(ScreenPtr screen, Bool get_active, RRMonitorPtr *monitors_ret, int *nmon_ret);
1100*4882a593Smuzhiyun 
1101*4882a593Smuzhiyun int
1102*4882a593Smuzhiyun RRMonitorCountList(ScreenPtr screen);
1103*4882a593Smuzhiyun 
1104*4882a593Smuzhiyun void
1105*4882a593Smuzhiyun RRMonitorFreeList(RRMonitorPtr monitors, int nmon);
1106*4882a593Smuzhiyun 
1107*4882a593Smuzhiyun void
1108*4882a593Smuzhiyun RRMonitorClose(ScreenPtr screen);
1109*4882a593Smuzhiyun 
1110*4882a593Smuzhiyun RRMonitorPtr
1111*4882a593Smuzhiyun RRMonitorAlloc(int noutput);
1112*4882a593Smuzhiyun 
1113*4882a593Smuzhiyun int
1114*4882a593Smuzhiyun RRMonitorAdd(ClientPtr client, ScreenPtr screen, RRMonitorPtr monitor);
1115*4882a593Smuzhiyun 
1116*4882a593Smuzhiyun void
1117*4882a593Smuzhiyun RRMonitorFree(RRMonitorPtr monitor);
1118*4882a593Smuzhiyun 
1119*4882a593Smuzhiyun int
1120*4882a593Smuzhiyun ProcRRGetMonitors(ClientPtr client);
1121*4882a593Smuzhiyun 
1122*4882a593Smuzhiyun int
1123*4882a593Smuzhiyun ProcRRSetMonitor(ClientPtr client);
1124*4882a593Smuzhiyun 
1125*4882a593Smuzhiyun int
1126*4882a593Smuzhiyun ProcRRDeleteMonitor(ClientPtr client);
1127*4882a593Smuzhiyun 
1128*4882a593Smuzhiyun int
1129*4882a593Smuzhiyun ProcRRCreateLease(ClientPtr client);
1130*4882a593Smuzhiyun 
1131*4882a593Smuzhiyun int
1132*4882a593Smuzhiyun ProcRRFreeLease(ClientPtr client);
1133*4882a593Smuzhiyun 
1134*4882a593Smuzhiyun #endif                          /* _RANDRSTR_H_ */
1135*4882a593Smuzhiyun 
1136*4882a593Smuzhiyun /*
1137*4882a593Smuzhiyun 
1138*4882a593Smuzhiyun randr extension implementation structure
1139*4882a593Smuzhiyun 
1140*4882a593Smuzhiyun Query state:
1141*4882a593Smuzhiyun     ProcRRGetScreenInfo/ProcRRGetScreenResources
1142*4882a593Smuzhiyun 	RRGetInfo
1143*4882a593Smuzhiyun 
1144*4882a593Smuzhiyun 	    • Request configuration from driver, either 1.0 or 1.2 style
1145*4882a593Smuzhiyun 	    • These functions only record state changes, all
1146*4882a593Smuzhiyun 	      other actions are pended until RRTellChanged is called
1147*4882a593Smuzhiyun 
1148*4882a593Smuzhiyun 	    ->rrGetInfo
1149*4882a593Smuzhiyun 	    1.0:
1150*4882a593Smuzhiyun 		RRRegisterSize
1151*4882a593Smuzhiyun 		RRRegisterRate
1152*4882a593Smuzhiyun 		RRSetCurrentConfig
1153*4882a593Smuzhiyun 	    1.2:
1154*4882a593Smuzhiyun 		RRScreenSetSizeRange
1155*4882a593Smuzhiyun 		RROutputSetCrtcs
1156*4882a593Smuzhiyun 		RRModeGet
1157*4882a593Smuzhiyun 		RROutputSetModes
1158*4882a593Smuzhiyun 		RROutputSetConnection
1159*4882a593Smuzhiyun 		RROutputSetSubpixelOrder
1160*4882a593Smuzhiyun 		RROutputSetClones
1161*4882a593Smuzhiyun 		RRCrtcNotify
1162*4882a593Smuzhiyun 
1163*4882a593Smuzhiyun 	• Must delay scanning configuration until after ->rrGetInfo returns
1164*4882a593Smuzhiyun 	  because some drivers will call SetCurrentConfig in the middle
1165*4882a593Smuzhiyun 	  of the ->rrGetInfo operation.
1166*4882a593Smuzhiyun 
1167*4882a593Smuzhiyun 	1.0:
1168*4882a593Smuzhiyun 
1169*4882a593Smuzhiyun 	    • Scan old configuration, mirror to new structures
1170*4882a593Smuzhiyun 
1171*4882a593Smuzhiyun 	    RRScanOldConfig
1172*4882a593Smuzhiyun 		RRCrtcCreate
1173*4882a593Smuzhiyun 		RROutputCreate
1174*4882a593Smuzhiyun 		RROutputSetCrtcs
1175*4882a593Smuzhiyun 		RROutputSetConnection
1176*4882a593Smuzhiyun 		RROutputSetSubpixelOrder
1177*4882a593Smuzhiyun 		RROldModeAdd	• This adds modes one-at-a-time
1178*4882a593Smuzhiyun 		    RRModeGet
1179*4882a593Smuzhiyun 		RRCrtcNotify
1180*4882a593Smuzhiyun 
1181*4882a593Smuzhiyun 	• send events, reset pointer if necessary
1182*4882a593Smuzhiyun 
1183*4882a593Smuzhiyun 	RRTellChanged
1184*4882a593Smuzhiyun 	    WalkTree (sending events)
1185*4882a593Smuzhiyun 
1186*4882a593Smuzhiyun 	    • when layout has changed:
1187*4882a593Smuzhiyun 		RRPointerScreenConfigured
1188*4882a593Smuzhiyun 		RRSendConfigNotify
1189*4882a593Smuzhiyun 
1190*4882a593Smuzhiyun Asynchronous state setting (1.2 only)
1191*4882a593Smuzhiyun     When setting state asynchronously, the driver invokes the
1192*4882a593Smuzhiyun     ->rrGetInfo function and then calls RRTellChanged to flush
1193*4882a593Smuzhiyun     the changes to the clients and reset pointer if necessary
1194*4882a593Smuzhiyun 
1195*4882a593Smuzhiyun Set state
1196*4882a593Smuzhiyun 
1197*4882a593Smuzhiyun     ProcRRSetScreenConfig
1198*4882a593Smuzhiyun 	RRCrtcSet
1199*4882a593Smuzhiyun 	    1.2:
1200*4882a593Smuzhiyun 		->rrCrtcSet
1201*4882a593Smuzhiyun 		    RRCrtcNotify
1202*4882a593Smuzhiyun 	    1.0:
1203*4882a593Smuzhiyun 		->rrSetConfig
1204*4882a593Smuzhiyun 		RRCrtcNotify
1205*4882a593Smuzhiyun 	    RRTellChanged
1206*4882a593Smuzhiyun  */
1207