randrstr.h revision 051b6151
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/* randr.c */ 44505b261ecSmrg/* 44605b261ecSmrg * Send all pending events 44705b261ecSmrg */ 4486747b715Smrgextern _X_EXPORT void 44905b261ecSmrgRRTellChanged (ScreenPtr pScreen); 45005b261ecSmrg 451051b6151Schristosextern _X_EXPORT void 452051b6151SchristosRRSetChanged (ScreenPtr pScreen); 453051b6151Schristos 45405b261ecSmrg/* 45505b261ecSmrg * Poll the driver for changed information 45605b261ecSmrg */ 4576747b715Smrgextern _X_EXPORT Bool 4584642e01fSmrgRRGetInfo (ScreenPtr pScreen, Bool force_query); 45905b261ecSmrg 4606747b715Smrgextern _X_EXPORT Bool RRInit (void); 46105b261ecSmrg 4626747b715Smrgextern _X_EXPORT Bool RRScreenInit(ScreenPtr pScreen); 46305b261ecSmrg 4646747b715Smrgextern _X_EXPORT RROutputPtr 46505b261ecSmrgRRFirstOutput (ScreenPtr pScreen); 46605b261ecSmrg 4676747b715Smrgextern _X_EXPORT Rotation 46805b261ecSmrgRRGetRotation (ScreenPtr pScreen); 46905b261ecSmrg 4706747b715Smrgextern _X_EXPORT CARD16 47105b261ecSmrgRRVerticalRefresh (xRRModeInfo *mode); 47205b261ecSmrg 47305b261ecSmrg#ifdef RANDR_10_INTERFACE 47405b261ecSmrg/* 47505b261ecSmrg * This is the old interface, deprecated but left 47605b261ecSmrg * around for compatibility 47705b261ecSmrg */ 47805b261ecSmrg 47905b261ecSmrg/* 48005b261ecSmrg * Then, register the specific size with the screen 48105b261ecSmrg */ 48205b261ecSmrg 4836747b715Smrgextern _X_EXPORT RRScreenSizePtr 48405b261ecSmrgRRRegisterSize (ScreenPtr pScreen, 48505b261ecSmrg short width, 48605b261ecSmrg short height, 48705b261ecSmrg short mmWidth, 48805b261ecSmrg short mmHeight); 48905b261ecSmrg 4906747b715Smrgextern _X_EXPORT Bool 4916747b715SmrgRRRegisterRate (ScreenPtr pScreen, 49205b261ecSmrg RRScreenSizePtr pSize, 49305b261ecSmrg int rate); 49405b261ecSmrg 49505b261ecSmrg/* 49605b261ecSmrg * Finally, set the current configuration of the screen 49705b261ecSmrg */ 49805b261ecSmrg 4996747b715Smrgextern _X_EXPORT void 50005b261ecSmrgRRSetCurrentConfig (ScreenPtr pScreen, 50105b261ecSmrg Rotation rotation, 50205b261ecSmrg int rate, 50305b261ecSmrg RRScreenSizePtr pSize); 50405b261ecSmrg 5056747b715Smrgextern _X_EXPORT Bool RRScreenInit (ScreenPtr pScreen); 50605b261ecSmrg 5076747b715Smrgextern _X_EXPORT Rotation 50805b261ecSmrgRRGetRotation (ScreenPtr pScreen); 50905b261ecSmrg 51005b261ecSmrg#endif 51105b261ecSmrg 51205b261ecSmrg/* rrcrtc.c */ 51305b261ecSmrg 51405b261ecSmrg/* 51505b261ecSmrg * Notify the CRTC of some change; layoutChanged indicates that 51605b261ecSmrg * some position or size element changed 51705b261ecSmrg */ 5186747b715Smrgextern _X_EXPORT void 51905b261ecSmrgRRCrtcChanged (RRCrtcPtr crtc, Bool layoutChanged); 52005b261ecSmrg 52105b261ecSmrg/* 52205b261ecSmrg * Create a CRTC 52305b261ecSmrg */ 5246747b715Smrgextern _X_EXPORT RRCrtcPtr 52505b261ecSmrgRRCrtcCreate (ScreenPtr pScreen, void *devPrivate); 52605b261ecSmrg 52705b261ecSmrg/* 52805b261ecSmrg * Set the allowed rotations on a CRTC 52905b261ecSmrg */ 5306747b715Smrgextern _X_EXPORT void 53105b261ecSmrgRRCrtcSetRotations (RRCrtcPtr crtc, Rotation rotations); 53205b261ecSmrg 5334642e01fSmrg/* 5344642e01fSmrg * Set whether transforms are allowed on a CRTC 5354642e01fSmrg */ 5366747b715Smrgextern _X_EXPORT void 5374642e01fSmrgRRCrtcSetTransformSupport (RRCrtcPtr crtc, Bool transforms); 5384642e01fSmrg 53905b261ecSmrg/* 54005b261ecSmrg * Notify the extension that the Crtc has been reconfigured, 54105b261ecSmrg * the driver calls this whenever it has updated the mode 54205b261ecSmrg */ 5436747b715Smrgextern _X_EXPORT Bool 54405b261ecSmrgRRCrtcNotify (RRCrtcPtr crtc, 54505b261ecSmrg RRModePtr mode, 54605b261ecSmrg int x, 54705b261ecSmrg int y, 54805b261ecSmrg Rotation rotation, 5494642e01fSmrg RRTransformPtr transform, 55005b261ecSmrg int numOutputs, 55105b261ecSmrg RROutputPtr *outputs); 55205b261ecSmrg 5536747b715Smrgextern _X_EXPORT void 55405b261ecSmrgRRDeliverCrtcEvent (ClientPtr client, WindowPtr pWin, RRCrtcPtr crtc); 55505b261ecSmrg 55605b261ecSmrg/* 55705b261ecSmrg * Request that the Crtc be reconfigured 55805b261ecSmrg */ 5596747b715Smrgextern _X_EXPORT Bool 56005b261ecSmrgRRCrtcSet (RRCrtcPtr crtc, 56105b261ecSmrg RRModePtr mode, 56205b261ecSmrg int x, 56305b261ecSmrg int y, 56405b261ecSmrg Rotation rotation, 56505b261ecSmrg int numOutput, 56605b261ecSmrg RROutputPtr *outputs); 56705b261ecSmrg 56805b261ecSmrg/* 56905b261ecSmrg * Request that the Crtc gamma be changed 57005b261ecSmrg */ 57105b261ecSmrg 5726747b715Smrgextern _X_EXPORT Bool 57305b261ecSmrgRRCrtcGammaSet (RRCrtcPtr crtc, 57405b261ecSmrg CARD16 *red, 57505b261ecSmrg CARD16 *green, 57605b261ecSmrg CARD16 *blue); 57705b261ecSmrg 5786747b715Smrg/* 5796747b715Smrg * Request current gamma back from the DDX (if possible). 5806747b715Smrg * This includes gamma size. 5816747b715Smrg */ 5826747b715Smrg 5836747b715Smrgextern _X_EXPORT Bool 5846747b715SmrgRRCrtcGammaGet(RRCrtcPtr crtc); 5856747b715Smrg 58605b261ecSmrg/* 58705b261ecSmrg * Notify the extension that the Crtc gamma has been changed 58805b261ecSmrg * The driver calls this whenever it has changed the gamma values 58905b261ecSmrg * in the RRCrtcRec 59005b261ecSmrg */ 59105b261ecSmrg 5926747b715Smrgextern _X_EXPORT Bool 59305b261ecSmrgRRCrtcGammaNotify (RRCrtcPtr crtc); 59405b261ecSmrg 59505b261ecSmrg/* 59605b261ecSmrg * Set the size of the gamma table at server startup time 59705b261ecSmrg */ 59805b261ecSmrg 5996747b715Smrgextern _X_EXPORT Bool 60005b261ecSmrgRRCrtcGammaSetSize (RRCrtcPtr crtc, 60105b261ecSmrg int size); 60205b261ecSmrg 60305b261ecSmrg/* 60405b261ecSmrg * Return the area of the frame buffer scanned out by the crtc, 60505b261ecSmrg * taking into account the current mode and rotation 60605b261ecSmrg */ 60705b261ecSmrg 6086747b715Smrgextern _X_EXPORT void 60905b261ecSmrgRRCrtcGetScanoutSize(RRCrtcPtr crtc, int *width, int *height); 61005b261ecSmrg 6114642e01fSmrg/* 6124642e01fSmrg * Compute the complete transformation matrix including 6134642e01fSmrg * client-specified transform, rotation/reflection values and the crtc 6144642e01fSmrg * offset. 6154642e01fSmrg * 6164642e01fSmrg * Return TRUE if the resulting transform is not a simple translation. 6174642e01fSmrg */ 6186747b715Smrgextern _X_EXPORT Bool 6194642e01fSmrgRRTransformCompute (int x, 6204642e01fSmrg int y, 6214642e01fSmrg int width, 6224642e01fSmrg int height, 6234642e01fSmrg Rotation rotation, 6244642e01fSmrg RRTransformPtr rr_transform, 6254642e01fSmrg 6264642e01fSmrg PictTransformPtr transform, 6274642e01fSmrg struct pict_f_transform *f_transform, 6284642e01fSmrg struct pict_f_transform *f_inverse); 6294642e01fSmrg 6304642e01fSmrg/* 6314642e01fSmrg * Return crtc transform 6324642e01fSmrg */ 6336747b715Smrgextern _X_EXPORT RRTransformPtr 6344642e01fSmrgRRCrtcGetTransform (RRCrtcPtr crtc); 6354642e01fSmrg 6364642e01fSmrg/* 6374642e01fSmrg * Check whether the pending and current transforms are the same 6384642e01fSmrg */ 6396747b715Smrgextern _X_EXPORT Bool 6404642e01fSmrgRRCrtcPendingTransform (RRCrtcPtr crtc); 6414642e01fSmrg 64205b261ecSmrg/* 64305b261ecSmrg * Destroy a Crtc at shutdown 64405b261ecSmrg */ 6456747b715Smrgextern _X_EXPORT void 64605b261ecSmrgRRCrtcDestroy (RRCrtcPtr crtc); 64705b261ecSmrg 6484642e01fSmrg 6494642e01fSmrg/* 6504642e01fSmrg * Set the pending CRTC transformation 6514642e01fSmrg */ 6524642e01fSmrg 6536747b715Smrgextern _X_EXPORT int 6544642e01fSmrgRRCrtcTransformSet (RRCrtcPtr crtc, 6554642e01fSmrg PictTransformPtr transform, 6564642e01fSmrg struct pict_f_transform *f_transform, 6574642e01fSmrg struct pict_f_transform *f_inverse, 6584642e01fSmrg char *filter, 6594642e01fSmrg int filter_len, 6604642e01fSmrg xFixed *params, 6614642e01fSmrg int nparams); 6624642e01fSmrg 66305b261ecSmrg/* 66405b261ecSmrg * Initialize crtc type 66505b261ecSmrg */ 6666747b715Smrgextern _X_EXPORT Bool 66705b261ecSmrgRRCrtcInit (void); 66805b261ecSmrg 6696747b715Smrg/* 6706747b715Smrg * Initialize crtc type error value 6716747b715Smrg */ 6726747b715Smrgextern _X_EXPORT void 6736747b715SmrgRRCrtcInitErrorValue (void); 6746747b715Smrg 67505b261ecSmrg/* 67605b261ecSmrg * Crtc dispatch 67705b261ecSmrg */ 67805b261ecSmrg 6796747b715Smrgextern _X_EXPORT int 68005b261ecSmrgProcRRGetCrtcInfo (ClientPtr client); 68105b261ecSmrg 6826747b715Smrgextern _X_EXPORT int 68305b261ecSmrgProcRRSetCrtcConfig (ClientPtr client); 68405b261ecSmrg 6856747b715Smrgextern _X_EXPORT int 68605b261ecSmrgProcRRGetCrtcGammaSize (ClientPtr client); 68705b261ecSmrg 6886747b715Smrgextern _X_EXPORT int 68905b261ecSmrgProcRRGetCrtcGamma (ClientPtr client); 69005b261ecSmrg 6916747b715Smrgextern _X_EXPORT int 69205b261ecSmrgProcRRSetCrtcGamma (ClientPtr client); 69305b261ecSmrg 6946747b715Smrgextern _X_EXPORT int 6954642e01fSmrgProcRRSetCrtcTransform (ClientPtr client); 6964642e01fSmrg 6976747b715Smrgextern _X_EXPORT int 6984642e01fSmrgProcRRGetCrtcTransform (ClientPtr client); 6994642e01fSmrg 7004642e01fSmrgint 7014642e01fSmrgProcRRGetPanning (ClientPtr client); 7024642e01fSmrg 7034642e01fSmrgint 7044642e01fSmrgProcRRSetPanning (ClientPtr client); 7054642e01fSmrg 70605b261ecSmrg/* rrdispatch.c */ 7076747b715Smrgextern _X_EXPORT Bool 70805b261ecSmrgRRClientKnowsRates (ClientPtr pClient); 70905b261ecSmrg 71005b261ecSmrg/* rrmode.c */ 71105b261ecSmrg/* 71205b261ecSmrg * Find, and if necessary, create a mode 71305b261ecSmrg */ 71405b261ecSmrg 7156747b715Smrgextern _X_EXPORT RRModePtr 71605b261ecSmrgRRModeGet (xRRModeInfo *modeInfo, 71705b261ecSmrg const char *name); 71805b261ecSmrg 71905b261ecSmrg/* 72005b261ecSmrg * Destroy a mode. 72105b261ecSmrg */ 72205b261ecSmrg 7236747b715Smrgextern _X_EXPORT void 72405b261ecSmrgRRModeDestroy (RRModePtr mode); 72505b261ecSmrg 72605b261ecSmrg/* 72705b261ecSmrg * Return a list of modes that are valid for some output in pScreen 72805b261ecSmrg */ 7296747b715Smrgextern _X_EXPORT RRModePtr * 73005b261ecSmrgRRModesForScreen (ScreenPtr pScreen, int *num_ret); 73105b261ecSmrg 73205b261ecSmrg/* 73305b261ecSmrg * Initialize mode type 73405b261ecSmrg */ 7356747b715Smrgextern _X_EXPORT Bool 73605b261ecSmrgRRModeInit (void); 7376747b715Smrg 7386747b715Smrg/* 7396747b715Smrg * Initialize mode type error value 7406747b715Smrg */ 7416747b715Smrgextern _X_EXPORT void 7426747b715SmrgRRModeInitErrorValue (void); 74305b261ecSmrg 7446747b715Smrgextern _X_EXPORT int 74505b261ecSmrgProcRRCreateMode (ClientPtr client); 74605b261ecSmrg 7476747b715Smrgextern _X_EXPORT int 74805b261ecSmrgProcRRDestroyMode (ClientPtr client); 74905b261ecSmrg 7506747b715Smrgextern _X_EXPORT int 75105b261ecSmrgProcRRAddOutputMode (ClientPtr client); 75205b261ecSmrg 7536747b715Smrgextern _X_EXPORT int 75405b261ecSmrgProcRRDeleteOutputMode (ClientPtr client); 75505b261ecSmrg 75605b261ecSmrg/* rroutput.c */ 75705b261ecSmrg 75805b261ecSmrg/* 75905b261ecSmrg * Notify the output of some change. configChanged indicates whether 76005b261ecSmrg * any external configuration (mode list, clones, connected status) 76105b261ecSmrg * has changed, or whether the change was strictly internal 76205b261ecSmrg * (which crtc is in use) 76305b261ecSmrg */ 7646747b715Smrgextern _X_EXPORT void 76505b261ecSmrgRROutputChanged (RROutputPtr output, Bool configChanged); 76605b261ecSmrg 76705b261ecSmrg/* 76805b261ecSmrg * Create an output 76905b261ecSmrg */ 77005b261ecSmrg 7716747b715Smrgextern _X_EXPORT RROutputPtr 77205b261ecSmrgRROutputCreate (ScreenPtr pScreen, 77305b261ecSmrg const char *name, 77405b261ecSmrg int nameLength, 77505b261ecSmrg void *devPrivate); 77605b261ecSmrg 77705b261ecSmrg/* 77805b261ecSmrg * Notify extension that output parameters have been changed 77905b261ecSmrg */ 7806747b715Smrgextern _X_EXPORT Bool 78105b261ecSmrgRROutputSetClones (RROutputPtr output, 78205b261ecSmrg RROutputPtr *clones, 78305b261ecSmrg int numClones); 78405b261ecSmrg 7856747b715Smrgextern _X_EXPORT Bool 78605b261ecSmrgRROutputSetModes (RROutputPtr output, 78705b261ecSmrg RRModePtr *modes, 78805b261ecSmrg int numModes, 78905b261ecSmrg int numPreferred); 79005b261ecSmrg 7916747b715Smrgextern _X_EXPORT int 79205b261ecSmrgRROutputAddUserMode (RROutputPtr output, 79305b261ecSmrg RRModePtr mode); 79405b261ecSmrg 7956747b715Smrgextern _X_EXPORT int 79605b261ecSmrgRROutputDeleteUserMode (RROutputPtr output, 79705b261ecSmrg RRModePtr mode); 79805b261ecSmrg 7996747b715Smrgextern _X_EXPORT Bool 80005b261ecSmrgRROutputSetCrtcs (RROutputPtr output, 80105b261ecSmrg RRCrtcPtr *crtcs, 80205b261ecSmrg int numCrtcs); 80305b261ecSmrg 8046747b715Smrgextern _X_EXPORT Bool 80505b261ecSmrgRROutputSetConnection (RROutputPtr output, 80605b261ecSmrg CARD8 connection); 80705b261ecSmrg 8086747b715Smrgextern _X_EXPORT Bool 80905b261ecSmrgRROutputSetSubpixelOrder (RROutputPtr output, 81005b261ecSmrg int subpixelOrder); 81105b261ecSmrg 8126747b715Smrgextern _X_EXPORT Bool 81305b261ecSmrgRROutputSetPhysicalSize (RROutputPtr output, 81405b261ecSmrg int mmWidth, 81505b261ecSmrg int mmHeight); 81605b261ecSmrg 8176747b715Smrgextern _X_EXPORT void 81805b261ecSmrgRRDeliverOutputEvent(ClientPtr client, WindowPtr pWin, RROutputPtr output); 81905b261ecSmrg 8206747b715Smrgextern _X_EXPORT void 82105b261ecSmrgRROutputDestroy (RROutputPtr output); 82205b261ecSmrg 8236747b715Smrgextern _X_EXPORT int 82405b261ecSmrgProcRRGetOutputInfo (ClientPtr client); 82505b261ecSmrg 8266747b715Smrgextern _X_EXPORT int 8274642e01fSmrgProcRRSetOutputPrimary (ClientPtr client); 8284642e01fSmrg 8296747b715Smrgextern _X_EXPORT int 8304642e01fSmrgProcRRGetOutputPrimary (ClientPtr client); 8314642e01fSmrg 83205b261ecSmrg/* 83305b261ecSmrg * Initialize output type 83405b261ecSmrg */ 8356747b715Smrgextern _X_EXPORT Bool 83605b261ecSmrgRROutputInit (void); 8376747b715Smrg 8386747b715Smrg/* 8396747b715Smrg * Initialize output type error value 8406747b715Smrg */ 8416747b715Smrgextern _X_EXPORT void 8426747b715SmrgRROutputInitErrorValue (void); 84305b261ecSmrg 84405b261ecSmrg/* rrpointer.c */ 8456747b715Smrgextern _X_EXPORT void 84605b261ecSmrgRRPointerMoved (ScreenPtr pScreen, int x, int y); 84705b261ecSmrg 8486747b715Smrgextern _X_EXPORT void 84905b261ecSmrgRRPointerScreenConfigured (ScreenPtr pScreen); 85005b261ecSmrg 85105b261ecSmrg/* rrproperty.c */ 85205b261ecSmrg 8536747b715Smrgextern _X_EXPORT void 85405b261ecSmrgRRDeleteAllOutputProperties (RROutputPtr output); 85505b261ecSmrg 8566747b715Smrgextern _X_EXPORT RRPropertyValuePtr 85705b261ecSmrgRRGetOutputProperty (RROutputPtr output, Atom property, Bool pending); 85805b261ecSmrg 8596747b715Smrgextern _X_EXPORT RRPropertyPtr 86005b261ecSmrgRRQueryOutputProperty (RROutputPtr output, Atom property); 86105b261ecSmrg 8626747b715Smrgextern _X_EXPORT void 86305b261ecSmrgRRDeleteOutputProperty (RROutputPtr output, Atom property); 86405b261ecSmrg 8656747b715Smrgextern _X_EXPORT Bool 86605b261ecSmrgRRPostPendingProperties (RROutputPtr output); 86705b261ecSmrg 8686747b715Smrgextern _X_EXPORT int 86905b261ecSmrgRRChangeOutputProperty (RROutputPtr output, Atom property, Atom type, 87005b261ecSmrg int format, int mode, unsigned long len, 87105b261ecSmrg pointer value, Bool sendevent, Bool pending); 87205b261ecSmrg 8736747b715Smrgextern _X_EXPORT int 87405b261ecSmrgRRConfigureOutputProperty (RROutputPtr output, Atom property, 87505b261ecSmrg Bool pending, Bool range, Bool immutable, 87605b261ecSmrg int num_values, INT32 *values); 8776747b715Smrgextern _X_EXPORT int 87805b261ecSmrgProcRRChangeOutputProperty (ClientPtr client); 87905b261ecSmrg 8806747b715Smrgextern _X_EXPORT int 88105b261ecSmrgProcRRGetOutputProperty (ClientPtr client); 88205b261ecSmrg 8836747b715Smrgextern _X_EXPORT int 88405b261ecSmrgProcRRListOutputProperties (ClientPtr client); 88505b261ecSmrg 8866747b715Smrgextern _X_EXPORT int 88705b261ecSmrgProcRRQueryOutputProperty (ClientPtr client); 88805b261ecSmrg 8896747b715Smrgextern _X_EXPORT int 89005b261ecSmrgProcRRConfigureOutputProperty (ClientPtr client); 89105b261ecSmrg 8926747b715Smrgextern _X_EXPORT int 89305b261ecSmrgProcRRDeleteOutputProperty (ClientPtr client); 89405b261ecSmrg 89505b261ecSmrg/* rrxinerama.c */ 8966747b715Smrg#ifdef XINERAMA 8976747b715Smrgextern _X_EXPORT void 89805b261ecSmrgRRXineramaExtensionInit(void); 8996747b715Smrg#endif 90005b261ecSmrg 90105b261ecSmrg#endif /* _RANDRSTR_H_ */ 90205b261ecSmrg 90305b261ecSmrg/* 90405b261ecSmrg 90505b261ecSmrgrandr extension implementation structure 90605b261ecSmrg 90705b261ecSmrgQuery state: 90805b261ecSmrg ProcRRGetScreenInfo/ProcRRGetScreenResources 90905b261ecSmrg RRGetInfo 91005b261ecSmrg 91105b261ecSmrg • Request configuration from driver, either 1.0 or 1.2 style 91205b261ecSmrg • These functions only record state changes, all 91305b261ecSmrg other actions are pended until RRTellChanged is called 91405b261ecSmrg 91505b261ecSmrg ->rrGetInfo 91605b261ecSmrg 1.0: 91705b261ecSmrg RRRegisterSize 91805b261ecSmrg RRRegisterRate 91905b261ecSmrg RRSetCurrentConfig 92005b261ecSmrg 1.2: 92105b261ecSmrg RRScreenSetSizeRange 92205b261ecSmrg RROutputSetCrtcs 92305b261ecSmrg RRModeGet 92405b261ecSmrg RROutputSetModes 92505b261ecSmrg RROutputSetConnection 92605b261ecSmrg RROutputSetSubpixelOrder 92705b261ecSmrg RROutputSetClones 92805b261ecSmrg RRCrtcNotify 92905b261ecSmrg 93005b261ecSmrg • Must delay scanning configuration until after ->rrGetInfo returns 93105b261ecSmrg because some drivers will call SetCurrentConfig in the middle 93205b261ecSmrg of the ->rrGetInfo operation. 93305b261ecSmrg 93405b261ecSmrg 1.0: 93505b261ecSmrg 93605b261ecSmrg • Scan old configuration, mirror to new structures 93705b261ecSmrg 93805b261ecSmrg RRScanOldConfig 93905b261ecSmrg RRCrtcCreate 94005b261ecSmrg RROutputCreate 94105b261ecSmrg RROutputSetCrtcs 94205b261ecSmrg RROutputSetConnection 94305b261ecSmrg RROutputSetSubpixelOrder 94405b261ecSmrg RROldModeAdd • This adds modes one-at-a-time 94505b261ecSmrg RRModeGet 94605b261ecSmrg RRCrtcNotify 94705b261ecSmrg 94805b261ecSmrg • send events, reset pointer if necessary 94905b261ecSmrg 95005b261ecSmrg RRTellChanged 95105b261ecSmrg WalkTree (sending events) 95205b261ecSmrg 95305b261ecSmrg • when layout has changed: 95405b261ecSmrg RRPointerScreenConfigured 95505b261ecSmrg RRSendConfigNotify 95605b261ecSmrg 95705b261ecSmrgAsynchronous state setting (1.2 only) 95805b261ecSmrg When setting state asynchronously, the driver invokes the 95905b261ecSmrg ->rrGetInfo function and then calls RRTellChanged to flush 96005b261ecSmrg the changes to the clients and reset pointer if necessary 96105b261ecSmrg 96205b261ecSmrgSet state 96305b261ecSmrg 96405b261ecSmrg ProcRRSetScreenConfig 96505b261ecSmrg RRCrtcSet 96605b261ecSmrg 1.2: 96705b261ecSmrg ->rrCrtcSet 96805b261ecSmrg RRCrtcNotify 96905b261ecSmrg 1.0: 97005b261ecSmrg ->rrSetConfig 97105b261ecSmrg RRCrtcNotify 97205b261ecSmrg RRTellChanged 97305b261ecSmrg */ 974