randrstr.h revision 9ace9065
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/* randr.c */ 445/* 446 * Send all pending events 447 */ 448extern _X_EXPORT void 449RRTellChanged (ScreenPtr pScreen); 450 451/* 452 * Poll the driver for changed information 453 */ 454extern _X_EXPORT Bool 455RRGetInfo (ScreenPtr pScreen, Bool force_query); 456 457extern _X_EXPORT Bool RRInit (void); 458 459extern _X_EXPORT Bool RRScreenInit(ScreenPtr pScreen); 460 461extern _X_EXPORT RROutputPtr 462RRFirstOutput (ScreenPtr pScreen); 463 464extern _X_EXPORT Rotation 465RRGetRotation (ScreenPtr pScreen); 466 467extern _X_EXPORT CARD16 468RRVerticalRefresh (xRRModeInfo *mode); 469 470#ifdef RANDR_10_INTERFACE 471/* 472 * This is the old interface, deprecated but left 473 * around for compatibility 474 */ 475 476/* 477 * Then, register the specific size with the screen 478 */ 479 480extern _X_EXPORT RRScreenSizePtr 481RRRegisterSize (ScreenPtr pScreen, 482 short width, 483 short height, 484 short mmWidth, 485 short mmHeight); 486 487extern _X_EXPORT Bool 488RRRegisterRate (ScreenPtr pScreen, 489 RRScreenSizePtr pSize, 490 int rate); 491 492/* 493 * Finally, set the current configuration of the screen 494 */ 495 496extern _X_EXPORT void 497RRSetCurrentConfig (ScreenPtr pScreen, 498 Rotation rotation, 499 int rate, 500 RRScreenSizePtr pSize); 501 502extern _X_EXPORT Bool RRScreenInit (ScreenPtr pScreen); 503 504extern _X_EXPORT Rotation 505RRGetRotation (ScreenPtr pScreen); 506 507#endif 508 509/* rrcrtc.c */ 510 511/* 512 * Notify the CRTC of some change; layoutChanged indicates that 513 * some position or size element changed 514 */ 515extern _X_EXPORT void 516RRCrtcChanged (RRCrtcPtr crtc, Bool layoutChanged); 517 518/* 519 * Create a CRTC 520 */ 521extern _X_EXPORT RRCrtcPtr 522RRCrtcCreate (ScreenPtr pScreen, void *devPrivate); 523 524/* 525 * Set the allowed rotations on a CRTC 526 */ 527extern _X_EXPORT void 528RRCrtcSetRotations (RRCrtcPtr crtc, Rotation rotations); 529 530/* 531 * Set whether transforms are allowed on a CRTC 532 */ 533extern _X_EXPORT void 534RRCrtcSetTransformSupport (RRCrtcPtr crtc, Bool transforms); 535 536/* 537 * Notify the extension that the Crtc has been reconfigured, 538 * the driver calls this whenever it has updated the mode 539 */ 540extern _X_EXPORT Bool 541RRCrtcNotify (RRCrtcPtr crtc, 542 RRModePtr mode, 543 int x, 544 int y, 545 Rotation rotation, 546 RRTransformPtr transform, 547 int numOutputs, 548 RROutputPtr *outputs); 549 550extern _X_EXPORT void 551RRDeliverCrtcEvent (ClientPtr client, WindowPtr pWin, RRCrtcPtr crtc); 552 553/* 554 * Request that the Crtc be reconfigured 555 */ 556extern _X_EXPORT Bool 557RRCrtcSet (RRCrtcPtr crtc, 558 RRModePtr mode, 559 int x, 560 int y, 561 Rotation rotation, 562 int numOutput, 563 RROutputPtr *outputs); 564 565/* 566 * Request that the Crtc gamma be changed 567 */ 568 569extern _X_EXPORT Bool 570RRCrtcGammaSet (RRCrtcPtr crtc, 571 CARD16 *red, 572 CARD16 *green, 573 CARD16 *blue); 574 575/* 576 * Request current gamma back from the DDX (if possible). 577 * This includes gamma size. 578 */ 579 580extern _X_EXPORT Bool 581RRCrtcGammaGet(RRCrtcPtr crtc); 582 583/* 584 * Notify the extension that the Crtc gamma has been changed 585 * The driver calls this whenever it has changed the gamma values 586 * in the RRCrtcRec 587 */ 588 589extern _X_EXPORT Bool 590RRCrtcGammaNotify (RRCrtcPtr crtc); 591 592/* 593 * Set the size of the gamma table at server startup time 594 */ 595 596extern _X_EXPORT Bool 597RRCrtcGammaSetSize (RRCrtcPtr crtc, 598 int size); 599 600/* 601 * Return the area of the frame buffer scanned out by the crtc, 602 * taking into account the current mode and rotation 603 */ 604 605extern _X_EXPORT void 606RRCrtcGetScanoutSize(RRCrtcPtr crtc, int *width, int *height); 607 608/* 609 * Compute the complete transformation matrix including 610 * client-specified transform, rotation/reflection values and the crtc 611 * offset. 612 * 613 * Return TRUE if the resulting transform is not a simple translation. 614 */ 615extern _X_EXPORT Bool 616RRTransformCompute (int x, 617 int y, 618 int width, 619 int height, 620 Rotation rotation, 621 RRTransformPtr rr_transform, 622 623 PictTransformPtr transform, 624 struct pict_f_transform *f_transform, 625 struct pict_f_transform *f_inverse); 626 627/* 628 * Return crtc transform 629 */ 630extern _X_EXPORT RRTransformPtr 631RRCrtcGetTransform (RRCrtcPtr crtc); 632 633/* 634 * Check whether the pending and current transforms are the same 635 */ 636extern _X_EXPORT Bool 637RRCrtcPendingTransform (RRCrtcPtr crtc); 638 639/* 640 * Destroy a Crtc at shutdown 641 */ 642extern _X_EXPORT void 643RRCrtcDestroy (RRCrtcPtr crtc); 644 645 646/* 647 * Set the pending CRTC transformation 648 */ 649 650extern _X_EXPORT int 651RRCrtcTransformSet (RRCrtcPtr crtc, 652 PictTransformPtr transform, 653 struct pict_f_transform *f_transform, 654 struct pict_f_transform *f_inverse, 655 char *filter, 656 int filter_len, 657 xFixed *params, 658 int nparams); 659 660/* 661 * Initialize crtc type 662 */ 663extern _X_EXPORT Bool 664RRCrtcInit (void); 665 666/* 667 * Initialize crtc type error value 668 */ 669extern _X_EXPORT void 670RRCrtcInitErrorValue (void); 671 672/* 673 * Crtc dispatch 674 */ 675 676extern _X_EXPORT int 677ProcRRGetCrtcInfo (ClientPtr client); 678 679extern _X_EXPORT int 680ProcRRSetCrtcConfig (ClientPtr client); 681 682extern _X_EXPORT int 683ProcRRGetCrtcGammaSize (ClientPtr client); 684 685extern _X_EXPORT int 686ProcRRGetCrtcGamma (ClientPtr client); 687 688extern _X_EXPORT int 689ProcRRSetCrtcGamma (ClientPtr client); 690 691extern _X_EXPORT int 692ProcRRSetCrtcTransform (ClientPtr client); 693 694extern _X_EXPORT int 695ProcRRGetCrtcTransform (ClientPtr client); 696 697int 698ProcRRGetPanning (ClientPtr client); 699 700int 701ProcRRSetPanning (ClientPtr client); 702 703/* rrdispatch.c */ 704extern _X_EXPORT Bool 705RRClientKnowsRates (ClientPtr pClient); 706 707/* rrmode.c */ 708/* 709 * Find, and if necessary, create a mode 710 */ 711 712extern _X_EXPORT RRModePtr 713RRModeGet (xRRModeInfo *modeInfo, 714 const char *name); 715 716/* 717 * Destroy a mode. 718 */ 719 720extern _X_EXPORT void 721RRModeDestroy (RRModePtr mode); 722 723/* 724 * Return a list of modes that are valid for some output in pScreen 725 */ 726extern _X_EXPORT RRModePtr * 727RRModesForScreen (ScreenPtr pScreen, int *num_ret); 728 729/* 730 * Initialize mode type 731 */ 732extern _X_EXPORT Bool 733RRModeInit (void); 734 735/* 736 * Initialize mode type error value 737 */ 738extern _X_EXPORT void 739RRModeInitErrorValue (void); 740 741extern _X_EXPORT int 742ProcRRCreateMode (ClientPtr client); 743 744extern _X_EXPORT int 745ProcRRDestroyMode (ClientPtr client); 746 747extern _X_EXPORT int 748ProcRRAddOutputMode (ClientPtr client); 749 750extern _X_EXPORT int 751ProcRRDeleteOutputMode (ClientPtr client); 752 753/* rroutput.c */ 754 755/* 756 * Notify the output of some change. configChanged indicates whether 757 * any external configuration (mode list, clones, connected status) 758 * has changed, or whether the change was strictly internal 759 * (which crtc is in use) 760 */ 761extern _X_EXPORT void 762RROutputChanged (RROutputPtr output, Bool configChanged); 763 764/* 765 * Create an output 766 */ 767 768extern _X_EXPORT RROutputPtr 769RROutputCreate (ScreenPtr pScreen, 770 const char *name, 771 int nameLength, 772 void *devPrivate); 773 774/* 775 * Notify extension that output parameters have been changed 776 */ 777extern _X_EXPORT Bool 778RROutputSetClones (RROutputPtr output, 779 RROutputPtr *clones, 780 int numClones); 781 782extern _X_EXPORT Bool 783RROutputSetModes (RROutputPtr output, 784 RRModePtr *modes, 785 int numModes, 786 int numPreferred); 787 788extern _X_EXPORT int 789RROutputAddUserMode (RROutputPtr output, 790 RRModePtr mode); 791 792extern _X_EXPORT int 793RROutputDeleteUserMode (RROutputPtr output, 794 RRModePtr mode); 795 796extern _X_EXPORT Bool 797RROutputSetCrtcs (RROutputPtr output, 798 RRCrtcPtr *crtcs, 799 int numCrtcs); 800 801extern _X_EXPORT Bool 802RROutputSetConnection (RROutputPtr output, 803 CARD8 connection); 804 805extern _X_EXPORT Bool 806RROutputSetSubpixelOrder (RROutputPtr output, 807 int subpixelOrder); 808 809extern _X_EXPORT Bool 810RROutputSetPhysicalSize (RROutputPtr output, 811 int mmWidth, 812 int mmHeight); 813 814extern _X_EXPORT void 815RRDeliverOutputEvent(ClientPtr client, WindowPtr pWin, RROutputPtr output); 816 817extern _X_EXPORT void 818RROutputDestroy (RROutputPtr output); 819 820extern _X_EXPORT int 821ProcRRGetOutputInfo (ClientPtr client); 822 823extern _X_EXPORT int 824ProcRRSetOutputPrimary (ClientPtr client); 825 826extern _X_EXPORT int 827ProcRRGetOutputPrimary (ClientPtr client); 828 829/* 830 * Initialize output type 831 */ 832extern _X_EXPORT Bool 833RROutputInit (void); 834 835/* 836 * Initialize output type error value 837 */ 838extern _X_EXPORT void 839RROutputInitErrorValue (void); 840 841/* rrpointer.c */ 842extern _X_EXPORT void 843RRPointerMoved (ScreenPtr pScreen, int x, int y); 844 845extern _X_EXPORT void 846RRPointerScreenConfigured (ScreenPtr pScreen); 847 848/* rrproperty.c */ 849 850extern _X_EXPORT void 851RRDeleteAllOutputProperties (RROutputPtr output); 852 853extern _X_EXPORT RRPropertyValuePtr 854RRGetOutputProperty (RROutputPtr output, Atom property, Bool pending); 855 856extern _X_EXPORT RRPropertyPtr 857RRQueryOutputProperty (RROutputPtr output, Atom property); 858 859extern _X_EXPORT void 860RRDeleteOutputProperty (RROutputPtr output, Atom property); 861 862extern _X_EXPORT Bool 863RRPostPendingProperties (RROutputPtr output); 864 865extern _X_EXPORT int 866RRChangeOutputProperty (RROutputPtr output, Atom property, Atom type, 867 int format, int mode, unsigned long len, 868 pointer value, Bool sendevent, Bool pending); 869 870extern _X_EXPORT int 871RRConfigureOutputProperty (RROutputPtr output, Atom property, 872 Bool pending, Bool range, Bool immutable, 873 int num_values, INT32 *values); 874extern _X_EXPORT int 875ProcRRChangeOutputProperty (ClientPtr client); 876 877extern _X_EXPORT int 878ProcRRGetOutputProperty (ClientPtr client); 879 880extern _X_EXPORT int 881ProcRRListOutputProperties (ClientPtr client); 882 883extern _X_EXPORT int 884ProcRRQueryOutputProperty (ClientPtr client); 885 886extern _X_EXPORT int 887ProcRRConfigureOutputProperty (ClientPtr client); 888 889extern _X_EXPORT int 890ProcRRDeleteOutputProperty (ClientPtr client); 891 892/* rrxinerama.c */ 893#ifdef XINERAMA 894extern _X_EXPORT void 895RRXineramaExtensionInit(void); 896#endif 897 898#endif /* _RANDRSTR_H_ */ 899 900/* 901 902randr extension implementation structure 903 904Query state: 905 ProcRRGetScreenInfo/ProcRRGetScreenResources 906 RRGetInfo 907 908 • Request configuration from driver, either 1.0 or 1.2 style 909 • These functions only record state changes, all 910 other actions are pended until RRTellChanged is called 911 912 ->rrGetInfo 913 1.0: 914 RRRegisterSize 915 RRRegisterRate 916 RRSetCurrentConfig 917 1.2: 918 RRScreenSetSizeRange 919 RROutputSetCrtcs 920 RRModeGet 921 RROutputSetModes 922 RROutputSetConnection 923 RROutputSetSubpixelOrder 924 RROutputSetClones 925 RRCrtcNotify 926 927 • Must delay scanning configuration until after ->rrGetInfo returns 928 because some drivers will call SetCurrentConfig in the middle 929 of the ->rrGetInfo operation. 930 931 1.0: 932 933 • Scan old configuration, mirror to new structures 934 935 RRScanOldConfig 936 RRCrtcCreate 937 RROutputCreate 938 RROutputSetCrtcs 939 RROutputSetConnection 940 RROutputSetSubpixelOrder 941 RROldModeAdd • This adds modes one-at-a-time 942 RRModeGet 943 RRCrtcNotify 944 945 • send events, reset pointer if necessary 946 947 RRTellChanged 948 WalkTree (sending events) 949 950 • when layout has changed: 951 RRPointerScreenConfigured 952 RRSendConfigNotify 953 954Asynchronous state setting (1.2 only) 955 When setting state asynchronously, the driver invokes the 956 ->rrGetInfo function and then calls RRTellChanged to flush 957 the changes to the clients and reset pointer if necessary 958 959Set state 960 961 ProcRRSetScreenConfig 962 RRCrtcSet 963 1.2: 964 ->rrCrtcSet 965 RRCrtcNotify 966 1.0: 967 ->rrSetConfig 968 RRCrtcNotify 969 RRTellChanged 970 */ 971