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