randrstr.h revision 6747b715
105b261ecSmrg/* 205b261ecSmrg * Copyright © 2000 Compaq Computer Corporation 305b261ecSmrg * Copyright © 2002 Hewlett-Packard Company 405b261ecSmrg * Copyright © 2006 Intel Corporation 54642e01fSmrg * Copyright © 2008 Red Hat, Inc. 605b261ecSmrg * 705b261ecSmrg * Permission to use, copy, modify, distribute, and sell this software and its 805b261ecSmrg * documentation for any purpose is hereby granted without fee, provided that 905b261ecSmrg * the above copyright notice appear in all copies and that both that copyright 1005b261ecSmrg * notice and this permission notice appear in supporting documentation, and 1105b261ecSmrg * that the name of the copyright holders not be used in advertising or 1205b261ecSmrg * publicity pertaining to distribution of the software without specific, 1305b261ecSmrg * written prior permission. The copyright holders make no representations 1405b261ecSmrg * about the suitability of this software for any purpose. It is provided "as 1505b261ecSmrg * is" without express or implied warranty. 1605b261ecSmrg * 1705b261ecSmrg * THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, 1805b261ecSmrg * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO 1905b261ecSmrg * EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY SPECIAL, INDIRECT OR 2005b261ecSmrg * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, 2105b261ecSmrg * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER 2205b261ecSmrg * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE 2305b261ecSmrg * OF THIS SOFTWARE. 2405b261ecSmrg * 2505b261ecSmrg * Author: Jim Gettys, Hewlett-Packard Company, Inc. 2605b261ecSmrg * Keith Packard, Intel Corporation 2705b261ecSmrg */ 2805b261ecSmrg 2905b261ecSmrg#ifdef HAVE_DIX_CONFIG_H 3005b261ecSmrg#include <dix-config.h> 3105b261ecSmrg#endif 3205b261ecSmrg 3305b261ecSmrg#ifndef _RANDRSTR_H_ 3405b261ecSmrg#define _RANDRSTR_H_ 3505b261ecSmrg 3605b261ecSmrg#include <X11/X.h> 3705b261ecSmrg#include <X11/Xproto.h> 3805b261ecSmrg#include "misc.h" 3905b261ecSmrg#include "os.h" 4005b261ecSmrg#include "dixstruct.h" 4105b261ecSmrg#include "resource.h" 4205b261ecSmrg#include "scrnintstr.h" 4305b261ecSmrg#include "windowstr.h" 4405b261ecSmrg#include "pixmapstr.h" 4505b261ecSmrg#include "extnsionst.h" 4605b261ecSmrg#include "servermd.h" 474642e01fSmrg#include "rrtransform.h" 4805b261ecSmrg#include <X11/extensions/randr.h> 4905b261ecSmrg#include <X11/extensions/randrproto.h> 5005b261ecSmrg#include <X11/extensions/render.h> /* we share subpixel order information */ 5105b261ecSmrg#include "picturestr.h" 5205b261ecSmrg#include <X11/Xfuncproto.h> 5305b261ecSmrg 5405b261ecSmrg/* required for ABI compatibility for now */ 5505b261ecSmrg#define RANDR_10_INTERFACE 1 5605b261ecSmrg#define RANDR_12_INTERFACE 1 574642e01fSmrg#define RANDR_13_INTERFACE 1 /* requires RANDR_12_INTERFACE */ 584642e01fSmrg#define RANDR_GET_CRTC_INTERFACE 1 594642e01fSmrg 604642e01fSmrg#define RANDR_INTERFACE_VERSION 0x0103 6105b261ecSmrg 6205b261ecSmrgtypedef XID RRMode; 6305b261ecSmrgtypedef XID RROutput; 6405b261ecSmrgtypedef XID RRCrtc; 6505b261ecSmrg 666747b715Smrgextern _X_EXPORT int RREventBase, RRErrorBase; 6705b261ecSmrg 686747b715Smrgextern _X_EXPORT int (*ProcRandrVector[RRNumberRequests])(ClientPtr); 696747b715Smrgextern _X_EXPORT int (*SProcRandrVector[RRNumberRequests])(ClientPtr); 7005b261ecSmrg 7105b261ecSmrg/* 7205b261ecSmrg * Modeline for a monitor. Name follows directly after this struct 7305b261ecSmrg */ 7405b261ecSmrg 7505b261ecSmrg#define RRModeName(pMode) ((char *) (pMode + 1)) 7605b261ecSmrgtypedef struct _rrMode RRModeRec, *RRModePtr; 7705b261ecSmrgtypedef struct _rrPropertyValue RRPropertyValueRec, *RRPropertyValuePtr; 7805b261ecSmrgtypedef struct _rrProperty RRPropertyRec, *RRPropertyPtr; 7905b261ecSmrgtypedef struct _rrCrtc RRCrtcRec, *RRCrtcPtr; 8005b261ecSmrgtypedef struct _rrOutput RROutputRec, *RROutputPtr; 8105b261ecSmrg 8205b261ecSmrgstruct _rrMode { 8305b261ecSmrg int refcnt; 8405b261ecSmrg xRRModeInfo mode; 8505b261ecSmrg char *name; 8605b261ecSmrg ScreenPtr userScreen; 8705b261ecSmrg}; 8805b261ecSmrg 8905b261ecSmrgstruct _rrPropertyValue { 9005b261ecSmrg Atom type; /* ignored by server */ 9105b261ecSmrg short format; /* format of data for swapping - 8,16,32 */ 9205b261ecSmrg long size; /* size of data in (format/8) bytes */ 9305b261ecSmrg pointer data; /* private to client */ 9405b261ecSmrg}; 9505b261ecSmrg 9605b261ecSmrgstruct _rrProperty { 9705b261ecSmrg RRPropertyPtr next; 9805b261ecSmrg ATOM propertyName; 9905b261ecSmrg Bool is_pending; 10005b261ecSmrg Bool range; 10105b261ecSmrg Bool immutable; 10205b261ecSmrg int num_valid; 10305b261ecSmrg INT32 *valid_values; 10405b261ecSmrg RRPropertyValueRec current, pending; 10505b261ecSmrg}; 10605b261ecSmrg 10705b261ecSmrgstruct _rrCrtc { 10805b261ecSmrg RRCrtc id; 10905b261ecSmrg ScreenPtr pScreen; 11005b261ecSmrg RRModePtr mode; 11105b261ecSmrg int x, y; 11205b261ecSmrg Rotation rotation; 11305b261ecSmrg Rotation rotations; 11405b261ecSmrg Bool changed; 11505b261ecSmrg int numOutputs; 11605b261ecSmrg RROutputPtr *outputs; 11705b261ecSmrg int gammaSize; 11805b261ecSmrg CARD16 *gammaRed; 11905b261ecSmrg CARD16 *gammaBlue; 12005b261ecSmrg CARD16 *gammaGreen; 12105b261ecSmrg void *devPrivate; 1224642e01fSmrg Bool transforms; 1234642e01fSmrg RRTransformRec client_pending_transform; 1244642e01fSmrg RRTransformRec client_current_transform; 1254642e01fSmrg PictTransform transform; 1264642e01fSmrg struct pict_f_transform f_transform; 1274642e01fSmrg struct pict_f_transform f_inverse; 12805b261ecSmrg}; 12905b261ecSmrg 13005b261ecSmrgstruct _rrOutput { 13105b261ecSmrg RROutput id; 13205b261ecSmrg ScreenPtr pScreen; 13305b261ecSmrg char *name; 13405b261ecSmrg int nameLength; 13505b261ecSmrg CARD8 connection; 13605b261ecSmrg CARD8 subpixelOrder; 13705b261ecSmrg int mmWidth; 13805b261ecSmrg int mmHeight; 13905b261ecSmrg RRCrtcPtr crtc; 14005b261ecSmrg int numCrtcs; 14105b261ecSmrg RRCrtcPtr *crtcs; 14205b261ecSmrg int numClones; 14305b261ecSmrg RROutputPtr *clones; 14405b261ecSmrg int numModes; 14505b261ecSmrg int numPreferred; 14605b261ecSmrg RRModePtr *modes; 14705b261ecSmrg int numUserModes; 14805b261ecSmrg RRModePtr *userModes; 14905b261ecSmrg Bool changed; 15005b261ecSmrg RRPropertyPtr properties; 15105b261ecSmrg Bool pendingProperties; 15205b261ecSmrg void *devPrivate; 15305b261ecSmrg}; 15405b261ecSmrg 15505b261ecSmrg#if RANDR_12_INTERFACE 15605b261ecSmrgtypedef Bool (*RRScreenSetSizeProcPtr) (ScreenPtr pScreen, 15705b261ecSmrg CARD16 width, 15805b261ecSmrg CARD16 height, 15905b261ecSmrg CARD32 mmWidth, 16005b261ecSmrg CARD32 mmHeight); 16105b261ecSmrg 16205b261ecSmrgtypedef Bool (*RRCrtcSetProcPtr) (ScreenPtr pScreen, 16305b261ecSmrg RRCrtcPtr crtc, 16405b261ecSmrg RRModePtr mode, 16505b261ecSmrg int x, 16605b261ecSmrg int y, 16705b261ecSmrg Rotation rotation, 16805b261ecSmrg int numOutputs, 16905b261ecSmrg RROutputPtr *outputs); 17005b261ecSmrg 17105b261ecSmrgtypedef Bool (*RRCrtcSetGammaProcPtr) (ScreenPtr pScreen, 17205b261ecSmrg RRCrtcPtr crtc); 17305b261ecSmrg 1746747b715Smrgtypedef Bool (*RRCrtcGetGammaProcPtr) (ScreenPtr pScreen, 1756747b715Smrg RRCrtcPtr crtc); 1766747b715Smrg 17705b261ecSmrgtypedef Bool (*RROutputSetPropertyProcPtr) (ScreenPtr pScreen, 17805b261ecSmrg RROutputPtr output, 17905b261ecSmrg Atom property, 18005b261ecSmrg RRPropertyValuePtr value); 18105b261ecSmrg 18205b261ecSmrgtypedef Bool (*RROutputValidateModeProcPtr) (ScreenPtr pScreen, 18305b261ecSmrg RROutputPtr output, 18405b261ecSmrg RRModePtr mode); 18505b261ecSmrg 18605b261ecSmrgtypedef void (*RRModeDestroyProcPtr) (ScreenPtr pScreen, 18705b261ecSmrg RRModePtr mode); 18805b261ecSmrg 18905b261ecSmrg#endif 19005b261ecSmrg 1914642e01fSmrg#if RANDR_13_INTERFACE 1924642e01fSmrgtypedef Bool (*RROutputGetPropertyProcPtr) (ScreenPtr pScreen, 1934642e01fSmrg RROutputPtr output, 1944642e01fSmrg Atom property); 1954642e01fSmrgtypedef Bool (*RRGetPanningProcPtr) (ScreenPtr pScrn, 1964642e01fSmrg RRCrtcPtr crtc, 1974642e01fSmrg BoxPtr totalArea, 1984642e01fSmrg BoxPtr trackingArea, 1994642e01fSmrg INT16 *border); 2004642e01fSmrgtypedef Bool (*RRSetPanningProcPtr) (ScreenPtr pScrn, 2014642e01fSmrg RRCrtcPtr crtc, 2024642e01fSmrg BoxPtr totalArea, 2034642e01fSmrg BoxPtr trackingArea, 2044642e01fSmrg INT16 *border); 2054642e01fSmrg 2064642e01fSmrg#endif /* RANDR_13_INTERFACE */ 2074642e01fSmrg 20805b261ecSmrgtypedef Bool (*RRGetInfoProcPtr) (ScreenPtr pScreen, Rotation *rotations); 20905b261ecSmrgtypedef Bool (*RRCloseScreenProcPtr) ( int i, ScreenPtr pscreen); 21005b261ecSmrg 21105b261ecSmrg/* These are for 1.0 compatibility */ 21205b261ecSmrg 21305b261ecSmrgtypedef struct _rrRefresh { 21405b261ecSmrg CARD16 rate; 21505b261ecSmrg RRModePtr mode; 21605b261ecSmrg} RRScreenRate, *RRScreenRatePtr; 21705b261ecSmrg 21805b261ecSmrgtypedef struct _rrScreenSize { 21905b261ecSmrg int id; 22005b261ecSmrg short width, height; 22105b261ecSmrg short mmWidth, mmHeight; 22205b261ecSmrg int nRates; 22305b261ecSmrg RRScreenRatePtr pRates; 22405b261ecSmrg} RRScreenSize, *RRScreenSizePtr; 22505b261ecSmrg 22605b261ecSmrg#ifdef RANDR_10_INTERFACE 22705b261ecSmrg 22805b261ecSmrgtypedef Bool (*RRSetConfigProcPtr) (ScreenPtr pScreen, 22905b261ecSmrg Rotation rotation, 23005b261ecSmrg int rate, 23105b261ecSmrg RRScreenSizePtr pSize); 23205b261ecSmrg 23305b261ecSmrg#endif 23405b261ecSmrg 23505b261ecSmrg 23605b261ecSmrgtypedef struct _rrScrPriv { 23705b261ecSmrg /* 23805b261ecSmrg * 'public' part of the structure; DDXen fill this in 23905b261ecSmrg * as they initialize 24005b261ecSmrg */ 24105b261ecSmrg#if RANDR_10_INTERFACE 24205b261ecSmrg RRSetConfigProcPtr rrSetConfig; 24305b261ecSmrg#endif 24405b261ecSmrg RRGetInfoProcPtr rrGetInfo; 24505b261ecSmrg#if RANDR_12_INTERFACE 24605b261ecSmrg RRScreenSetSizeProcPtr rrScreenSetSize; 24705b261ecSmrg RRCrtcSetProcPtr rrCrtcSet; 24805b261ecSmrg RRCrtcSetGammaProcPtr rrCrtcSetGamma; 2496747b715Smrg RRCrtcGetGammaProcPtr rrCrtcGetGamma; 25005b261ecSmrg RROutputSetPropertyProcPtr rrOutputSetProperty; 25105b261ecSmrg RROutputValidateModeProcPtr rrOutputValidateMode; 25205b261ecSmrg RRModeDestroyProcPtr rrModeDestroy; 25305b261ecSmrg#endif 2544642e01fSmrg#if RANDR_13_INTERFACE 2554642e01fSmrg RROutputGetPropertyProcPtr rrOutputGetProperty; 2564642e01fSmrg RRGetPanningProcPtr rrGetPanning; 2574642e01fSmrg RRSetPanningProcPtr rrSetPanning; 2584642e01fSmrg#endif 25905b261ecSmrg 26005b261ecSmrg /* 26105b261ecSmrg * Private part of the structure; not considered part of the ABI 26205b261ecSmrg */ 26305b261ecSmrg TimeStamp lastSetTime; /* last changed by client */ 26405b261ecSmrg TimeStamp lastConfigTime; /* possible configs changed */ 26505b261ecSmrg RRCloseScreenProcPtr CloseScreen; 26605b261ecSmrg 26705b261ecSmrg Bool changed; /* some config changed */ 26805b261ecSmrg Bool configChanged; /* configuration changed */ 26905b261ecSmrg Bool layoutChanged; /* screen layout changed */ 27005b261ecSmrg 27105b261ecSmrg CARD16 minWidth, minHeight; 27205b261ecSmrg CARD16 maxWidth, maxHeight; 27305b261ecSmrg CARD16 width, height; /* last known screen size */ 27405b261ecSmrg CARD16 mmWidth, mmHeight; /* last known screen size */ 27505b261ecSmrg 27605b261ecSmrg int numOutputs; 27705b261ecSmrg RROutputPtr *outputs; 2784642e01fSmrg RROutputPtr primaryOutput; 27905b261ecSmrg 28005b261ecSmrg int numCrtcs; 28105b261ecSmrg RRCrtcPtr *crtcs; 28205b261ecSmrg 28305b261ecSmrg /* Last known pointer position */ 28405b261ecSmrg RRCrtcPtr pointerCrtc; 28505b261ecSmrg 28605b261ecSmrg#ifdef RANDR_10_INTERFACE 28705b261ecSmrg /* 28805b261ecSmrg * Configuration information 28905b261ecSmrg */ 29005b261ecSmrg Rotation rotations; 29105b261ecSmrg CARD16 reqWidth, reqHeight; 29205b261ecSmrg 29305b261ecSmrg int nSizes; 29405b261ecSmrg RRScreenSizePtr pSizes; 29505b261ecSmrg 29605b261ecSmrg Rotation rotation; 29705b261ecSmrg int rate; 29805b261ecSmrg int size; 29905b261ecSmrg#endif 30005b261ecSmrg} rrScrPrivRec, *rrScrPrivPtr; 30105b261ecSmrg 3026747b715Smrgextern _X_EXPORT DevPrivateKeyRec rrPrivKeyRec; 3036747b715Smrg#define rrPrivKey (&rrPrivKeyRec) 30405b261ecSmrg 3054642e01fSmrg#define rrGetScrPriv(pScr) ((rrScrPrivPtr)dixLookupPrivate(&(pScr)->devPrivates, rrPrivKey)) 30605b261ecSmrg#define rrScrPriv(pScr) rrScrPrivPtr pScrPriv = rrGetScrPriv(pScr) 3074642e01fSmrg#define SetRRScreen(s,p) dixSetPrivate(&(s)->devPrivates, rrPrivKey, p) 30805b261ecSmrg 30905b261ecSmrg/* 31005b261ecSmrg * each window has a list of clients requesting 31105b261ecSmrg * RRNotify events. Each client has a resource 31205b261ecSmrg * for each window it selects RRNotify input for, 31305b261ecSmrg * this resource is used to delete the RRNotifyRec 31405b261ecSmrg * entry from the per-window queue. 31505b261ecSmrg */ 31605b261ecSmrg 31705b261ecSmrgtypedef struct _RREvent *RREventPtr; 31805b261ecSmrg 31905b261ecSmrgtypedef struct _RREvent { 32005b261ecSmrg RREventPtr next; 32105b261ecSmrg ClientPtr client; 32205b261ecSmrg WindowPtr window; 32305b261ecSmrg XID clientResource; 32405b261ecSmrg int mask; 32505b261ecSmrg} RREventRec; 32605b261ecSmrg 32705b261ecSmrgtypedef struct _RRTimes { 32805b261ecSmrg TimeStamp setTime; 32905b261ecSmrg TimeStamp configTime; 33005b261ecSmrg} RRTimesRec, *RRTimesPtr; 33105b261ecSmrg 33205b261ecSmrgtypedef struct _RRClient { 33305b261ecSmrg int major_version; 33405b261ecSmrg int minor_version; 33505b261ecSmrg/* RRTimesRec times[0]; */ 33605b261ecSmrg} RRClientRec, *RRClientPtr; 33705b261ecSmrg 3386747b715Smrgextern _X_EXPORT RESTYPE RRClientType, RREventType; /* resource types for event masks */ 3396747b715Smrgextern _X_EXPORT DevPrivateKeyRec RRClientPrivateKeyRec; 3406747b715Smrg#define RRClientPrivateKey (&RRClientPrivateKeyRec) 3416747b715Smrgextern _X_EXPORT RESTYPE RRCrtcType, RRModeType, RROutputType; 3426747b715Smrg 3436747b715Smrg#define VERIFY_RR_OUTPUT(id, ptr, a)\ 3446747b715Smrg {\ 3456747b715Smrg int rc = dixLookupResourceByType((pointer *)&(ptr), id,\ 3466747b715Smrg RROutputType, client, a);\ 3476747b715Smrg if (rc != Success) {\ 3486747b715Smrg client->errorValue = id;\ 3496747b715Smrg return rc;\ 3506747b715Smrg }\ 3516747b715Smrg } 3526747b715Smrg 3536747b715Smrg#define VERIFY_RR_CRTC(id, ptr, a)\ 3546747b715Smrg {\ 3556747b715Smrg int rc = dixLookupResourceByType((pointer *)&(ptr), id,\ 3566747b715Smrg RRCrtcType, client, a);\ 3576747b715Smrg if (rc != Success) {\ 3586747b715Smrg client->errorValue = id;\ 3596747b715Smrg return rc;\ 3606747b715Smrg }\ 3616747b715Smrg } 3626747b715Smrg 3636747b715Smrg#define VERIFY_RR_MODE(id, ptr, a)\ 3646747b715Smrg {\ 3656747b715Smrg int rc = dixLookupResourceByType((pointer *)&(ptr), id,\ 3666747b715Smrg RRModeType, client, a);\ 3676747b715Smrg if (rc != Success) {\ 3686747b715Smrg client->errorValue = id;\ 3696747b715Smrg return rc;\ 3706747b715Smrg }\ 3716747b715Smrg } 37205b261ecSmrg 3734642e01fSmrg#define GetRRClient(pClient) ((RRClientPtr)dixLookupPrivate(&(pClient)->devPrivates, RRClientPrivateKey)) 37405b261ecSmrg#define rrClientPriv(pClient) RRClientPtr pRRClient = GetRRClient(pClient) 37505b261ecSmrg 37605b261ecSmrg/* Initialize the extension */ 3776747b715Smrgextern _X_EXPORT void 37805b261ecSmrgRRExtensionInit (void); 37905b261ecSmrg 38005b261ecSmrg#ifdef RANDR_12_INTERFACE 38105b261ecSmrg/* 38205b261ecSmrg * Set the range of sizes for the screen 38305b261ecSmrg */ 3846747b715Smrgextern _X_EXPORT void 38505b261ecSmrgRRScreenSetSizeRange (ScreenPtr pScreen, 38605b261ecSmrg CARD16 minWidth, 38705b261ecSmrg CARD16 minHeight, 38805b261ecSmrg CARD16 maxWidth, 38905b261ecSmrg CARD16 maxHeight); 39005b261ecSmrg#endif 39105b261ecSmrg 39205b261ecSmrg/* rrscreen.c */ 39305b261ecSmrg/* 39405b261ecSmrg * Notify the extension that the screen size has been changed. 39505b261ecSmrg * The driver is responsible for calling this whenever it has changed 39605b261ecSmrg * the size of the screen 39705b261ecSmrg */ 3986747b715Smrgextern _X_EXPORT void 39905b261ecSmrgRRScreenSizeNotify (ScreenPtr pScreen); 40005b261ecSmrg 40105b261ecSmrg/* 40205b261ecSmrg * Request that the screen be resized 40305b261ecSmrg */ 4046747b715Smrgextern _X_EXPORT Bool 40505b261ecSmrgRRScreenSizeSet (ScreenPtr pScreen, 40605b261ecSmrg CARD16 width, 40705b261ecSmrg CARD16 height, 40805b261ecSmrg CARD32 mmWidth, 40905b261ecSmrg CARD32 mmHeight); 41005b261ecSmrg 41105b261ecSmrg/* 41205b261ecSmrg * Send ConfigureNotify event to root window when 'something' happens 41305b261ecSmrg */ 4146747b715Smrgextern _X_EXPORT void 41505b261ecSmrgRRSendConfigNotify (ScreenPtr pScreen); 41605b261ecSmrg 41705b261ecSmrg/* 41805b261ecSmrg * screen dispatch 41905b261ecSmrg */ 4206747b715Smrgextern _X_EXPORT int 42105b261ecSmrgProcRRGetScreenSizeRange (ClientPtr client); 42205b261ecSmrg 4236747b715Smrgextern _X_EXPORT int 42405b261ecSmrgProcRRSetScreenSize (ClientPtr client); 42505b261ecSmrg 4266747b715Smrgextern _X_EXPORT int 42705b261ecSmrgProcRRGetScreenResources (ClientPtr client); 42805b261ecSmrg 4296747b715Smrgextern _X_EXPORT int 4304642e01fSmrgProcRRGetScreenResourcesCurrent (ClientPtr client); 4314642e01fSmrg 4326747b715Smrgextern _X_EXPORT int 43305b261ecSmrgProcRRSetScreenConfig (ClientPtr client); 43405b261ecSmrg 4356747b715Smrgextern _X_EXPORT int 43605b261ecSmrgProcRRGetScreenInfo (ClientPtr client); 43705b261ecSmrg 43805b261ecSmrg/* 43905b261ecSmrg * Deliver a ScreenNotify event 44005b261ecSmrg */ 4416747b715Smrgextern _X_EXPORT void 44205b261ecSmrgRRDeliverScreenEvent (ClientPtr client, WindowPtr pWin, ScreenPtr pScreen); 44305b261ecSmrg 44405b261ecSmrg/* mirandr.c */ 4456747b715Smrgextern _X_EXPORT Bool 44605b261ecSmrgmiRandRInit (ScreenPtr pScreen); 44705b261ecSmrg 4486747b715Smrgextern _X_EXPORT Bool 44905b261ecSmrgmiRRGetInfo (ScreenPtr pScreen, Rotation *rotations); 45005b261ecSmrg 4516747b715Smrgextern _X_EXPORT Bool 45205b261ecSmrgmiRRCrtcSet (ScreenPtr pScreen, 45305b261ecSmrg RRCrtcPtr crtc, 45405b261ecSmrg RRModePtr mode, 45505b261ecSmrg int x, 45605b261ecSmrg int y, 45705b261ecSmrg Rotation rotation, 45805b261ecSmrg int numOutput, 45905b261ecSmrg RROutputPtr *outputs); 46005b261ecSmrg 4616747b715Smrgextern _X_EXPORT Bool 46205b261ecSmrgmiRROutputSetProperty (ScreenPtr pScreen, 46305b261ecSmrg RROutputPtr output, 46405b261ecSmrg Atom property, 46505b261ecSmrg RRPropertyValuePtr value); 46605b261ecSmrg 4676747b715Smrgextern _X_EXPORT Bool 4684642e01fSmrgmiRROutputGetProperty (ScreenPtr pScreen, 4694642e01fSmrg RROutputPtr output, 4704642e01fSmrg Atom property); 4714642e01fSmrg 4726747b715Smrgextern _X_EXPORT Bool 47305b261ecSmrgmiRROutputValidateMode (ScreenPtr pScreen, 47405b261ecSmrg RROutputPtr output, 47505b261ecSmrg RRModePtr mode); 47605b261ecSmrg 4776747b715Smrgextern _X_EXPORT void 47805b261ecSmrgmiRRModeDestroy (ScreenPtr pScreen, 47905b261ecSmrg RRModePtr mode); 48005b261ecSmrg 48105b261ecSmrg/* randr.c */ 48205b261ecSmrg/* 48305b261ecSmrg * Send all pending events 48405b261ecSmrg */ 4856747b715Smrgextern _X_EXPORT void 48605b261ecSmrgRRTellChanged (ScreenPtr pScreen); 48705b261ecSmrg 48805b261ecSmrg/* 48905b261ecSmrg * Poll the driver for changed information 49005b261ecSmrg */ 4916747b715Smrgextern _X_EXPORT Bool 4924642e01fSmrgRRGetInfo (ScreenPtr pScreen, Bool force_query); 49305b261ecSmrg 4946747b715Smrgextern _X_EXPORT Bool RRInit (void); 49505b261ecSmrg 4966747b715Smrgextern _X_EXPORT Bool RRScreenInit(ScreenPtr pScreen); 49705b261ecSmrg 4986747b715Smrgextern _X_EXPORT RROutputPtr 49905b261ecSmrgRRFirstOutput (ScreenPtr pScreen); 50005b261ecSmrg 5016747b715Smrgextern _X_EXPORT Rotation 50205b261ecSmrgRRGetRotation (ScreenPtr pScreen); 50305b261ecSmrg 5046747b715Smrgextern _X_EXPORT CARD16 50505b261ecSmrgRRVerticalRefresh (xRRModeInfo *mode); 50605b261ecSmrg 50705b261ecSmrg#ifdef RANDR_10_INTERFACE 50805b261ecSmrg/* 50905b261ecSmrg * This is the old interface, deprecated but left 51005b261ecSmrg * around for compatibility 51105b261ecSmrg */ 51205b261ecSmrg 51305b261ecSmrg/* 51405b261ecSmrg * Then, register the specific size with the screen 51505b261ecSmrg */ 51605b261ecSmrg 5176747b715Smrgextern _X_EXPORT RRScreenSizePtr 51805b261ecSmrgRRRegisterSize (ScreenPtr pScreen, 51905b261ecSmrg short width, 52005b261ecSmrg short height, 52105b261ecSmrg short mmWidth, 52205b261ecSmrg short mmHeight); 52305b261ecSmrg 5246747b715Smrgextern _X_EXPORT Bool 5256747b715SmrgRRRegisterRate (ScreenPtr pScreen, 52605b261ecSmrg RRScreenSizePtr pSize, 52705b261ecSmrg int rate); 52805b261ecSmrg 52905b261ecSmrg/* 53005b261ecSmrg * Finally, set the current configuration of the screen 53105b261ecSmrg */ 53205b261ecSmrg 5336747b715Smrgextern _X_EXPORT void 53405b261ecSmrgRRSetCurrentConfig (ScreenPtr pScreen, 53505b261ecSmrg Rotation rotation, 53605b261ecSmrg int rate, 53705b261ecSmrg RRScreenSizePtr pSize); 53805b261ecSmrg 5396747b715Smrgextern _X_EXPORT Bool RRScreenInit (ScreenPtr pScreen); 54005b261ecSmrg 5416747b715Smrgextern _X_EXPORT Rotation 54205b261ecSmrgRRGetRotation (ScreenPtr pScreen); 54305b261ecSmrg 54405b261ecSmrg#endif 54505b261ecSmrg 54605b261ecSmrg/* rrcrtc.c */ 54705b261ecSmrg 54805b261ecSmrg/* 54905b261ecSmrg * Notify the CRTC of some change; layoutChanged indicates that 55005b261ecSmrg * some position or size element changed 55105b261ecSmrg */ 5526747b715Smrgextern _X_EXPORT void 55305b261ecSmrgRRCrtcChanged (RRCrtcPtr crtc, Bool layoutChanged); 55405b261ecSmrg 55505b261ecSmrg/* 55605b261ecSmrg * Create a CRTC 55705b261ecSmrg */ 5586747b715Smrgextern _X_EXPORT RRCrtcPtr 55905b261ecSmrgRRCrtcCreate (ScreenPtr pScreen, void *devPrivate); 56005b261ecSmrg 56105b261ecSmrg/* 56205b261ecSmrg * Set the allowed rotations on a CRTC 56305b261ecSmrg */ 5646747b715Smrgextern _X_EXPORT void 56505b261ecSmrgRRCrtcSetRotations (RRCrtcPtr crtc, Rotation rotations); 56605b261ecSmrg 5674642e01fSmrg/* 5684642e01fSmrg * Set whether transforms are allowed on a CRTC 5694642e01fSmrg */ 5706747b715Smrgextern _X_EXPORT void 5714642e01fSmrgRRCrtcSetTransformSupport (RRCrtcPtr crtc, Bool transforms); 5724642e01fSmrg 57305b261ecSmrg/* 57405b261ecSmrg * Notify the extension that the Crtc has been reconfigured, 57505b261ecSmrg * the driver calls this whenever it has updated the mode 57605b261ecSmrg */ 5776747b715Smrgextern _X_EXPORT Bool 57805b261ecSmrgRRCrtcNotify (RRCrtcPtr crtc, 57905b261ecSmrg RRModePtr mode, 58005b261ecSmrg int x, 58105b261ecSmrg int y, 58205b261ecSmrg Rotation rotation, 5834642e01fSmrg RRTransformPtr transform, 58405b261ecSmrg int numOutputs, 58505b261ecSmrg RROutputPtr *outputs); 58605b261ecSmrg 5876747b715Smrgextern _X_EXPORT void 58805b261ecSmrgRRDeliverCrtcEvent (ClientPtr client, WindowPtr pWin, RRCrtcPtr crtc); 58905b261ecSmrg 59005b261ecSmrg/* 59105b261ecSmrg * Request that the Crtc be reconfigured 59205b261ecSmrg */ 5936747b715Smrgextern _X_EXPORT Bool 59405b261ecSmrgRRCrtcSet (RRCrtcPtr crtc, 59505b261ecSmrg RRModePtr mode, 59605b261ecSmrg int x, 59705b261ecSmrg int y, 59805b261ecSmrg Rotation rotation, 59905b261ecSmrg int numOutput, 60005b261ecSmrg RROutputPtr *outputs); 60105b261ecSmrg 60205b261ecSmrg/* 60305b261ecSmrg * Request that the Crtc gamma be changed 60405b261ecSmrg */ 60505b261ecSmrg 6066747b715Smrgextern _X_EXPORT Bool 60705b261ecSmrgRRCrtcGammaSet (RRCrtcPtr crtc, 60805b261ecSmrg CARD16 *red, 60905b261ecSmrg CARD16 *green, 61005b261ecSmrg CARD16 *blue); 61105b261ecSmrg 6126747b715Smrg/* 6136747b715Smrg * Request current gamma back from the DDX (if possible). 6146747b715Smrg * This includes gamma size. 6156747b715Smrg */ 6166747b715Smrg 6176747b715Smrgextern _X_EXPORT Bool 6186747b715SmrgRRCrtcGammaGet(RRCrtcPtr crtc); 6196747b715Smrg 62005b261ecSmrg/* 62105b261ecSmrg * Notify the extension that the Crtc gamma has been changed 62205b261ecSmrg * The driver calls this whenever it has changed the gamma values 62305b261ecSmrg * in the RRCrtcRec 62405b261ecSmrg */ 62505b261ecSmrg 6266747b715Smrgextern _X_EXPORT Bool 62705b261ecSmrgRRCrtcGammaNotify (RRCrtcPtr crtc); 62805b261ecSmrg 62905b261ecSmrg/* 63005b261ecSmrg * Set the size of the gamma table at server startup time 63105b261ecSmrg */ 63205b261ecSmrg 6336747b715Smrgextern _X_EXPORT Bool 63405b261ecSmrgRRCrtcGammaSetSize (RRCrtcPtr crtc, 63505b261ecSmrg int size); 63605b261ecSmrg 63705b261ecSmrg/* 63805b261ecSmrg * Return the area of the frame buffer scanned out by the crtc, 63905b261ecSmrg * taking into account the current mode and rotation 64005b261ecSmrg */ 64105b261ecSmrg 6426747b715Smrgextern _X_EXPORT void 64305b261ecSmrgRRCrtcGetScanoutSize(RRCrtcPtr crtc, int *width, int *height); 64405b261ecSmrg 6454642e01fSmrg/* 6464642e01fSmrg * Compute the complete transformation matrix including 6474642e01fSmrg * client-specified transform, rotation/reflection values and the crtc 6484642e01fSmrg * offset. 6494642e01fSmrg * 6504642e01fSmrg * Return TRUE if the resulting transform is not a simple translation. 6514642e01fSmrg */ 6526747b715Smrgextern _X_EXPORT Bool 6534642e01fSmrgRRTransformCompute (int x, 6544642e01fSmrg int y, 6554642e01fSmrg int width, 6564642e01fSmrg int height, 6574642e01fSmrg Rotation rotation, 6584642e01fSmrg RRTransformPtr rr_transform, 6594642e01fSmrg 6604642e01fSmrg PictTransformPtr transform, 6614642e01fSmrg struct pict_f_transform *f_transform, 6624642e01fSmrg struct pict_f_transform *f_inverse); 6634642e01fSmrg 6644642e01fSmrg/* 6654642e01fSmrg * Return crtc transform 6664642e01fSmrg */ 6676747b715Smrgextern _X_EXPORT RRTransformPtr 6684642e01fSmrgRRCrtcGetTransform (RRCrtcPtr crtc); 6694642e01fSmrg 6704642e01fSmrg/* 6714642e01fSmrg * Check whether the pending and current transforms are the same 6724642e01fSmrg */ 6736747b715Smrgextern _X_EXPORT Bool 6744642e01fSmrgRRCrtcPendingTransform (RRCrtcPtr crtc); 6754642e01fSmrg 67605b261ecSmrg/* 67705b261ecSmrg * Destroy a Crtc at shutdown 67805b261ecSmrg */ 6796747b715Smrgextern _X_EXPORT void 68005b261ecSmrgRRCrtcDestroy (RRCrtcPtr crtc); 68105b261ecSmrg 6824642e01fSmrg 6834642e01fSmrg/* 6844642e01fSmrg * Set the pending CRTC transformation 6854642e01fSmrg */ 6864642e01fSmrg 6876747b715Smrgextern _X_EXPORT int 6884642e01fSmrgRRCrtcTransformSet (RRCrtcPtr crtc, 6894642e01fSmrg PictTransformPtr transform, 6904642e01fSmrg struct pict_f_transform *f_transform, 6914642e01fSmrg struct pict_f_transform *f_inverse, 6924642e01fSmrg char *filter, 6934642e01fSmrg int filter_len, 6944642e01fSmrg xFixed *params, 6954642e01fSmrg int nparams); 6964642e01fSmrg 69705b261ecSmrg/* 69805b261ecSmrg * Initialize crtc type 69905b261ecSmrg */ 7006747b715Smrgextern _X_EXPORT Bool 70105b261ecSmrgRRCrtcInit (void); 70205b261ecSmrg 7036747b715Smrg/* 7046747b715Smrg * Initialize crtc type error value 7056747b715Smrg */ 7066747b715Smrgextern _X_EXPORT void 7076747b715SmrgRRCrtcInitErrorValue (void); 7086747b715Smrg 70905b261ecSmrg/* 71005b261ecSmrg * Crtc dispatch 71105b261ecSmrg */ 71205b261ecSmrg 7136747b715Smrgextern _X_EXPORT int 71405b261ecSmrgProcRRGetCrtcInfo (ClientPtr client); 71505b261ecSmrg 7166747b715Smrgextern _X_EXPORT int 71705b261ecSmrgProcRRSetCrtcConfig (ClientPtr client); 71805b261ecSmrg 7196747b715Smrgextern _X_EXPORT int 72005b261ecSmrgProcRRGetCrtcGammaSize (ClientPtr client); 72105b261ecSmrg 7226747b715Smrgextern _X_EXPORT int 72305b261ecSmrgProcRRGetCrtcGamma (ClientPtr client); 72405b261ecSmrg 7256747b715Smrgextern _X_EXPORT int 72605b261ecSmrgProcRRSetCrtcGamma (ClientPtr client); 72705b261ecSmrg 7286747b715Smrgextern _X_EXPORT int 7294642e01fSmrgProcRRSetCrtcTransform (ClientPtr client); 7304642e01fSmrg 7316747b715Smrgextern _X_EXPORT int 7324642e01fSmrgProcRRGetCrtcTransform (ClientPtr client); 7334642e01fSmrg 7344642e01fSmrgint 7354642e01fSmrgProcRRGetPanning (ClientPtr client); 7364642e01fSmrg 7374642e01fSmrgint 7384642e01fSmrgProcRRSetPanning (ClientPtr client); 7394642e01fSmrg 74005b261ecSmrg/* rrdispatch.c */ 7416747b715Smrgextern _X_EXPORT Bool 74205b261ecSmrgRRClientKnowsRates (ClientPtr pClient); 74305b261ecSmrg 74405b261ecSmrg/* rrmode.c */ 74505b261ecSmrg/* 74605b261ecSmrg * Find, and if necessary, create a mode 74705b261ecSmrg */ 74805b261ecSmrg 7496747b715Smrgextern _X_EXPORT RRModePtr 75005b261ecSmrgRRModeGet (xRRModeInfo *modeInfo, 75105b261ecSmrg const char *name); 75205b261ecSmrg 75305b261ecSmrg/* 75405b261ecSmrg * Destroy a mode. 75505b261ecSmrg */ 75605b261ecSmrg 7576747b715Smrgextern _X_EXPORT void 75805b261ecSmrgRRModeDestroy (RRModePtr mode); 75905b261ecSmrg 76005b261ecSmrg/* 76105b261ecSmrg * Return a list of modes that are valid for some output in pScreen 76205b261ecSmrg */ 7636747b715Smrgextern _X_EXPORT RRModePtr * 76405b261ecSmrgRRModesForScreen (ScreenPtr pScreen, int *num_ret); 76505b261ecSmrg 76605b261ecSmrg/* 76705b261ecSmrg * Initialize mode type 76805b261ecSmrg */ 7696747b715Smrgextern _X_EXPORT Bool 77005b261ecSmrgRRModeInit (void); 7716747b715Smrg 7726747b715Smrg/* 7736747b715Smrg * Initialize mode type error value 7746747b715Smrg */ 7756747b715Smrgextern _X_EXPORT void 7766747b715SmrgRRModeInitErrorValue (void); 77705b261ecSmrg 7786747b715Smrgextern _X_EXPORT int 77905b261ecSmrgProcRRCreateMode (ClientPtr client); 78005b261ecSmrg 7816747b715Smrgextern _X_EXPORT int 78205b261ecSmrgProcRRDestroyMode (ClientPtr client); 78305b261ecSmrg 7846747b715Smrgextern _X_EXPORT int 78505b261ecSmrgProcRRAddOutputMode (ClientPtr client); 78605b261ecSmrg 7876747b715Smrgextern _X_EXPORT int 78805b261ecSmrgProcRRDeleteOutputMode (ClientPtr client); 78905b261ecSmrg 79005b261ecSmrg/* rroutput.c */ 79105b261ecSmrg 79205b261ecSmrg/* 79305b261ecSmrg * Notify the output of some change. configChanged indicates whether 79405b261ecSmrg * any external configuration (mode list, clones, connected status) 79505b261ecSmrg * has changed, or whether the change was strictly internal 79605b261ecSmrg * (which crtc is in use) 79705b261ecSmrg */ 7986747b715Smrgextern _X_EXPORT void 79905b261ecSmrgRROutputChanged (RROutputPtr output, Bool configChanged); 80005b261ecSmrg 80105b261ecSmrg/* 80205b261ecSmrg * Create an output 80305b261ecSmrg */ 80405b261ecSmrg 8056747b715Smrgextern _X_EXPORT RROutputPtr 80605b261ecSmrgRROutputCreate (ScreenPtr pScreen, 80705b261ecSmrg const char *name, 80805b261ecSmrg int nameLength, 80905b261ecSmrg void *devPrivate); 81005b261ecSmrg 81105b261ecSmrg/* 81205b261ecSmrg * Notify extension that output parameters have been changed 81305b261ecSmrg */ 8146747b715Smrgextern _X_EXPORT Bool 81505b261ecSmrgRROutputSetClones (RROutputPtr output, 81605b261ecSmrg RROutputPtr *clones, 81705b261ecSmrg int numClones); 81805b261ecSmrg 8196747b715Smrgextern _X_EXPORT Bool 82005b261ecSmrgRROutputSetModes (RROutputPtr output, 82105b261ecSmrg RRModePtr *modes, 82205b261ecSmrg int numModes, 82305b261ecSmrg int numPreferred); 82405b261ecSmrg 8256747b715Smrgextern _X_EXPORT int 82605b261ecSmrgRROutputAddUserMode (RROutputPtr output, 82705b261ecSmrg RRModePtr mode); 82805b261ecSmrg 8296747b715Smrgextern _X_EXPORT int 83005b261ecSmrgRROutputDeleteUserMode (RROutputPtr output, 83105b261ecSmrg RRModePtr mode); 83205b261ecSmrg 8336747b715Smrgextern _X_EXPORT Bool 83405b261ecSmrgRROutputSetCrtcs (RROutputPtr output, 83505b261ecSmrg RRCrtcPtr *crtcs, 83605b261ecSmrg int numCrtcs); 83705b261ecSmrg 8386747b715Smrgextern _X_EXPORT Bool 83905b261ecSmrgRROutputSetConnection (RROutputPtr output, 84005b261ecSmrg CARD8 connection); 84105b261ecSmrg 8426747b715Smrgextern _X_EXPORT Bool 84305b261ecSmrgRROutputSetSubpixelOrder (RROutputPtr output, 84405b261ecSmrg int subpixelOrder); 84505b261ecSmrg 8466747b715Smrgextern _X_EXPORT Bool 84705b261ecSmrgRROutputSetPhysicalSize (RROutputPtr output, 84805b261ecSmrg int mmWidth, 84905b261ecSmrg int mmHeight); 85005b261ecSmrg 8516747b715Smrgextern _X_EXPORT void 85205b261ecSmrgRRDeliverOutputEvent(ClientPtr client, WindowPtr pWin, RROutputPtr output); 85305b261ecSmrg 8546747b715Smrgextern _X_EXPORT void 85505b261ecSmrgRROutputDestroy (RROutputPtr output); 85605b261ecSmrg 8576747b715Smrgextern _X_EXPORT int 85805b261ecSmrgProcRRGetOutputInfo (ClientPtr client); 85905b261ecSmrg 8606747b715Smrgextern _X_EXPORT int 8614642e01fSmrgProcRRSetOutputPrimary (ClientPtr client); 8624642e01fSmrg 8636747b715Smrgextern _X_EXPORT int 8644642e01fSmrgProcRRGetOutputPrimary (ClientPtr client); 8654642e01fSmrg 86605b261ecSmrg/* 86705b261ecSmrg * Initialize output type 86805b261ecSmrg */ 8696747b715Smrgextern _X_EXPORT Bool 87005b261ecSmrgRROutputInit (void); 8716747b715Smrg 8726747b715Smrg/* 8736747b715Smrg * Initialize output type error value 8746747b715Smrg */ 8756747b715Smrgextern _X_EXPORT void 8766747b715SmrgRROutputInitErrorValue (void); 87705b261ecSmrg 87805b261ecSmrg/* rrpointer.c */ 8796747b715Smrgextern _X_EXPORT void 88005b261ecSmrgRRPointerMoved (ScreenPtr pScreen, int x, int y); 88105b261ecSmrg 8826747b715Smrgextern _X_EXPORT void 88305b261ecSmrgRRPointerScreenConfigured (ScreenPtr pScreen); 88405b261ecSmrg 88505b261ecSmrg/* rrproperty.c */ 88605b261ecSmrg 8876747b715Smrgextern _X_EXPORT void 88805b261ecSmrgRRDeleteAllOutputProperties (RROutputPtr output); 88905b261ecSmrg 8906747b715Smrgextern _X_EXPORT RRPropertyValuePtr 89105b261ecSmrgRRGetOutputProperty (RROutputPtr output, Atom property, Bool pending); 89205b261ecSmrg 8936747b715Smrgextern _X_EXPORT RRPropertyPtr 89405b261ecSmrgRRQueryOutputProperty (RROutputPtr output, Atom property); 89505b261ecSmrg 8966747b715Smrgextern _X_EXPORT void 89705b261ecSmrgRRDeleteOutputProperty (RROutputPtr output, Atom property); 89805b261ecSmrg 8996747b715Smrgextern _X_EXPORT Bool 90005b261ecSmrgRRPostPendingProperties (RROutputPtr output); 90105b261ecSmrg 9026747b715Smrgextern _X_EXPORT int 90305b261ecSmrgRRChangeOutputProperty (RROutputPtr output, Atom property, Atom type, 90405b261ecSmrg int format, int mode, unsigned long len, 90505b261ecSmrg pointer value, Bool sendevent, Bool pending); 90605b261ecSmrg 9076747b715Smrgextern _X_EXPORT int 90805b261ecSmrgRRConfigureOutputProperty (RROutputPtr output, Atom property, 90905b261ecSmrg Bool pending, Bool range, Bool immutable, 91005b261ecSmrg int num_values, INT32 *values); 9116747b715Smrgextern _X_EXPORT int 91205b261ecSmrgProcRRChangeOutputProperty (ClientPtr client); 91305b261ecSmrg 9146747b715Smrgextern _X_EXPORT int 91505b261ecSmrgProcRRGetOutputProperty (ClientPtr client); 91605b261ecSmrg 9176747b715Smrgextern _X_EXPORT int 91805b261ecSmrgProcRRListOutputProperties (ClientPtr client); 91905b261ecSmrg 9206747b715Smrgextern _X_EXPORT int 92105b261ecSmrgProcRRQueryOutputProperty (ClientPtr client); 92205b261ecSmrg 9236747b715Smrgextern _X_EXPORT int 92405b261ecSmrgProcRRConfigureOutputProperty (ClientPtr client); 92505b261ecSmrg 9266747b715Smrgextern _X_EXPORT int 92705b261ecSmrgProcRRDeleteOutputProperty (ClientPtr client); 92805b261ecSmrg 92905b261ecSmrg/* rrxinerama.c */ 9306747b715Smrg#ifdef XINERAMA 9316747b715Smrgextern _X_EXPORT void 93205b261ecSmrgRRXineramaExtensionInit(void); 9336747b715Smrg#endif 93405b261ecSmrg 93505b261ecSmrg#endif /* _RANDRSTR_H_ */ 93605b261ecSmrg 93705b261ecSmrg/* 93805b261ecSmrg 93905b261ecSmrgrandr extension implementation structure 94005b261ecSmrg 94105b261ecSmrgQuery state: 94205b261ecSmrg ProcRRGetScreenInfo/ProcRRGetScreenResources 94305b261ecSmrg RRGetInfo 94405b261ecSmrg 94505b261ecSmrg • Request configuration from driver, either 1.0 or 1.2 style 94605b261ecSmrg • These functions only record state changes, all 94705b261ecSmrg other actions are pended until RRTellChanged is called 94805b261ecSmrg 94905b261ecSmrg ->rrGetInfo 95005b261ecSmrg 1.0: 95105b261ecSmrg RRRegisterSize 95205b261ecSmrg RRRegisterRate 95305b261ecSmrg RRSetCurrentConfig 95405b261ecSmrg 1.2: 95505b261ecSmrg RRScreenSetSizeRange 95605b261ecSmrg RROutputSetCrtcs 95705b261ecSmrg RRModeGet 95805b261ecSmrg RROutputSetModes 95905b261ecSmrg RROutputSetConnection 96005b261ecSmrg RROutputSetSubpixelOrder 96105b261ecSmrg RROutputSetClones 96205b261ecSmrg RRCrtcNotify 96305b261ecSmrg 96405b261ecSmrg • Must delay scanning configuration until after ->rrGetInfo returns 96505b261ecSmrg because some drivers will call SetCurrentConfig in the middle 96605b261ecSmrg of the ->rrGetInfo operation. 96705b261ecSmrg 96805b261ecSmrg 1.0: 96905b261ecSmrg 97005b261ecSmrg • Scan old configuration, mirror to new structures 97105b261ecSmrg 97205b261ecSmrg RRScanOldConfig 97305b261ecSmrg RRCrtcCreate 97405b261ecSmrg RROutputCreate 97505b261ecSmrg RROutputSetCrtcs 97605b261ecSmrg RROutputSetConnection 97705b261ecSmrg RROutputSetSubpixelOrder 97805b261ecSmrg RROldModeAdd • This adds modes one-at-a-time 97905b261ecSmrg RRModeGet 98005b261ecSmrg RRCrtcNotify 98105b261ecSmrg 98205b261ecSmrg • send events, reset pointer if necessary 98305b261ecSmrg 98405b261ecSmrg RRTellChanged 98505b261ecSmrg WalkTree (sending events) 98605b261ecSmrg 98705b261ecSmrg • when layout has changed: 98805b261ecSmrg RRPointerScreenConfigured 98905b261ecSmrg RRSendConfigNotify 99005b261ecSmrg 99105b261ecSmrgAsynchronous state setting (1.2 only) 99205b261ecSmrg When setting state asynchronously, the driver invokes the 99305b261ecSmrg ->rrGetInfo function and then calls RRTellChanged to flush 99405b261ecSmrg the changes to the clients and reset pointer if necessary 99505b261ecSmrg 99605b261ecSmrgSet state 99705b261ecSmrg 99805b261ecSmrg ProcRRSetScreenConfig 99905b261ecSmrg RRCrtcSet 100005b261ecSmrg 1.2: 100105b261ecSmrg ->rrCrtcSet 100205b261ecSmrg RRCrtcNotify 100305b261ecSmrg 1.0: 100405b261ecSmrg ->rrSetConfig 100505b261ecSmrg RRCrtcNotify 100605b261ecSmrg RRTellChanged 100705b261ecSmrg */ 1008