xserver

xserver with xephyr scale patch
git clone https://git.neptards.moe/u3shit/xserver.git
Log | Files | Refs | README | LICENSE

randrstr.h (31971B)


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