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