1057 lines
		
	
	
		
			27 KiB
		
	
	
	
		
			C
		
	
	
	
			
		
		
	
	
			1057 lines
		
	
	
		
			27 KiB
		
	
	
	
		
			C
		
	
	
	
/*
 | 
						|
 * Copyright © 2000 Compaq Computer Corporation
 | 
						|
 * Copyright © 2002 Hewlett-Packard Company
 | 
						|
 * Copyright © 2006 Intel Corporation
 | 
						|
 * Copyright © 2008 Red Hat, Inc.
 | 
						|
 *
 | 
						|
 * Permission to use, copy, modify, distribute, and sell this software and its
 | 
						|
 * documentation for any purpose is hereby granted without fee, provided that
 | 
						|
 * the above copyright notice appear in all copies and that both that copyright
 | 
						|
 * notice and this permission notice appear in supporting documentation, and
 | 
						|
 * that the name of the copyright holders not be used in advertising or
 | 
						|
 * publicity pertaining to distribution of the software without specific,
 | 
						|
 * written prior permission.  The copyright holders make no representations
 | 
						|
 * about the suitability of this software for any purpose.  It is provided "as
 | 
						|
 * is" without express or implied warranty.
 | 
						|
 *
 | 
						|
 * THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
 | 
						|
 * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
 | 
						|
 * EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY SPECIAL, INDIRECT OR
 | 
						|
 * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
 | 
						|
 * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
 | 
						|
 * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
 | 
						|
 * OF THIS SOFTWARE.
 | 
						|
 *
 | 
						|
 * Author:  Jim Gettys, Hewlett-Packard Company, Inc.
 | 
						|
 *	    Keith Packard, Intel Corporation
 | 
						|
 */
 | 
						|
 | 
						|
#ifdef HAVE_DIX_CONFIG_H
 | 
						|
#include <dix-config.h>
 | 
						|
#endif
 | 
						|
 | 
						|
#ifndef _RANDRSTR_H_
 | 
						|
#define _RANDRSTR_H_
 | 
						|
 | 
						|
#include <X11/X.h>
 | 
						|
#include <X11/Xproto.h>
 | 
						|
#include "misc.h"
 | 
						|
#include "os.h"
 | 
						|
#include "dixstruct.h"
 | 
						|
#include "resource.h"
 | 
						|
#include "scrnintstr.h"
 | 
						|
#include "windowstr.h"
 | 
						|
#include "pixmapstr.h"
 | 
						|
#include "extnsionst.h"
 | 
						|
#include "servermd.h"
 | 
						|
#include "rrtransform.h"
 | 
						|
#include <X11/extensions/randr.h>
 | 
						|
#include <X11/extensions/randrproto.h>
 | 
						|
#include <X11/extensions/render.h>      /* we share subpixel order information */
 | 
						|
#include "picturestr.h"
 | 
						|
#include <X11/Xfuncproto.h>
 | 
						|
 | 
						|
/* required for ABI compatibility for now */
 | 
						|
#define RANDR_10_INTERFACE 1
 | 
						|
#define RANDR_12_INTERFACE 1
 | 
						|
#define RANDR_13_INTERFACE 1    /* requires RANDR_12_INTERFACE */
 | 
						|
#define RANDR_GET_CRTC_INTERFACE 1
 | 
						|
 | 
						|
#define RANDR_INTERFACE_VERSION 0x0104
 | 
						|
 | 
						|
typedef XID RRMode;
 | 
						|
typedef XID RROutput;
 | 
						|
typedef XID RRCrtc;
 | 
						|
typedef XID RRProvider;
 | 
						|
 | 
						|
extern _X_EXPORT int RREventBase, RRErrorBase;
 | 
						|
 | 
						|
extern _X_EXPORT int (*ProcRandrVector[RRNumberRequests]) (ClientPtr);
 | 
						|
extern _X_EXPORT int (*SProcRandrVector[RRNumberRequests]) (ClientPtr);
 | 
						|
 | 
						|
/*
 | 
						|
 * Modeline for a monitor. Name follows directly after this struct
 | 
						|
 */
 | 
						|
 | 
						|
#define RRModeName(pMode) ((char *) (pMode + 1))
 | 
						|
typedef struct _rrMode RRModeRec, *RRModePtr;
 | 
						|
typedef struct _rrPropertyValue RRPropertyValueRec, *RRPropertyValuePtr;
 | 
						|
typedef struct _rrProperty RRPropertyRec, *RRPropertyPtr;
 | 
						|
typedef struct _rrCrtc RRCrtcRec, *RRCrtcPtr;
 | 
						|
typedef struct _rrOutput RROutputRec, *RROutputPtr;
 | 
						|
typedef struct _rrProvider RRProviderRec, *RRProviderPtr;
 | 
						|
 | 
						|
struct _rrMode {
 | 
						|
    int refcnt;
 | 
						|
    xRRModeInfo mode;
 | 
						|
    char *name;
 | 
						|
    ScreenPtr userScreen;
 | 
						|
};
 | 
						|
 | 
						|
struct _rrPropertyValue {
 | 
						|
    Atom type;                  /* ignored by server */
 | 
						|
    short format;               /* format of data for swapping - 8,16,32 */
 | 
						|
    long size;                  /* size of data in (format/8) bytes */
 | 
						|
    void *data;                 /* private to client */
 | 
						|
};
 | 
						|
 | 
						|
struct _rrProperty {
 | 
						|
    RRPropertyPtr next;
 | 
						|
    ATOM propertyName;
 | 
						|
    Bool is_pending;
 | 
						|
    Bool range;
 | 
						|
    Bool immutable;
 | 
						|
    int num_valid;
 | 
						|
    INT32 *valid_values;
 | 
						|
    RRPropertyValueRec current, pending;
 | 
						|
};
 | 
						|
 | 
						|
struct _rrCrtc {
 | 
						|
    RRCrtc id;
 | 
						|
    ScreenPtr pScreen;
 | 
						|
    RRModePtr mode;
 | 
						|
    int x, y;
 | 
						|
    Rotation rotation;
 | 
						|
    Rotation rotations;
 | 
						|
    Bool changed;
 | 
						|
    int numOutputs;
 | 
						|
    RROutputPtr *outputs;
 | 
						|
    int gammaSize;
 | 
						|
    CARD16 *gammaRed;
 | 
						|
    CARD16 *gammaBlue;
 | 
						|
    CARD16 *gammaGreen;
 | 
						|
    void *devPrivate;
 | 
						|
    Bool transforms;
 | 
						|
    RRTransformRec client_pending_transform;
 | 
						|
    RRTransformRec client_current_transform;
 | 
						|
    PictTransform transform;
 | 
						|
    struct pict_f_transform f_transform;
 | 
						|
    struct pict_f_transform f_inverse;
 | 
						|
 | 
						|
    PixmapPtr scanout_pixmap;
 | 
						|
};
 | 
						|
 | 
						|
struct _rrOutput {
 | 
						|
    RROutput id;
 | 
						|
    ScreenPtr pScreen;
 | 
						|
    char *name;
 | 
						|
    int nameLength;
 | 
						|
    CARD8 connection;
 | 
						|
    CARD8 subpixelOrder;
 | 
						|
    int mmWidth;
 | 
						|
    int mmHeight;
 | 
						|
    RRCrtcPtr crtc;
 | 
						|
    int numCrtcs;
 | 
						|
    RRCrtcPtr *crtcs;
 | 
						|
    int numClones;
 | 
						|
    RROutputPtr *clones;
 | 
						|
    int numModes;
 | 
						|
    int numPreferred;
 | 
						|
    RRModePtr *modes;
 | 
						|
    int numUserModes;
 | 
						|
    RRModePtr *userModes;
 | 
						|
    Bool changed;
 | 
						|
    RRPropertyPtr properties;
 | 
						|
    Bool pendingProperties;
 | 
						|
    void *devPrivate;
 | 
						|
};
 | 
						|
 | 
						|
struct _rrProvider {
 | 
						|
    RRProvider id;
 | 
						|
    ScreenPtr pScreen;
 | 
						|
    uint32_t capabilities;
 | 
						|
    char *name;
 | 
						|
    int nameLength;
 | 
						|
    RRPropertyPtr properties;
 | 
						|
    Bool pendingProperties;
 | 
						|
    Bool changed;
 | 
						|
    struct _rrProvider *offload_sink;
 | 
						|
    struct _rrProvider *output_source;
 | 
						|
};
 | 
						|
 | 
						|
#if RANDR_12_INTERFACE
 | 
						|
typedef Bool (*RRScreenSetSizeProcPtr) (ScreenPtr pScreen,
 | 
						|
                                        CARD16 width,
 | 
						|
                                        CARD16 height,
 | 
						|
                                        CARD32 mmWidth, CARD32 mmHeight);
 | 
						|
 | 
						|
typedef Bool (*RRCrtcSetProcPtr) (ScreenPtr pScreen,
 | 
						|
                                  RRCrtcPtr crtc,
 | 
						|
                                  RRModePtr mode,
 | 
						|
                                  int x,
 | 
						|
                                  int y,
 | 
						|
                                  Rotation rotation,
 | 
						|
                                  int numOutputs, RROutputPtr * outputs);
 | 
						|
 | 
						|
typedef Bool (*RRCrtcSetGammaProcPtr) (ScreenPtr pScreen, RRCrtcPtr crtc);
 | 
						|
 | 
						|
typedef Bool (*RRCrtcGetGammaProcPtr) (ScreenPtr pScreen, RRCrtcPtr crtc);
 | 
						|
 | 
						|
typedef Bool (*RROutputSetPropertyProcPtr) (ScreenPtr pScreen,
 | 
						|
                                            RROutputPtr output,
 | 
						|
                                            Atom property,
 | 
						|
                                            RRPropertyValuePtr value);
 | 
						|
 | 
						|
typedef Bool (*RROutputValidateModeProcPtr) (ScreenPtr pScreen,
 | 
						|
                                             RROutputPtr output,
 | 
						|
                                             RRModePtr mode);
 | 
						|
 | 
						|
typedef void (*RRModeDestroyProcPtr) (ScreenPtr pScreen, RRModePtr mode);
 | 
						|
 | 
						|
#endif
 | 
						|
 | 
						|
#if RANDR_13_INTERFACE
 | 
						|
typedef Bool (*RROutputGetPropertyProcPtr) (ScreenPtr pScreen,
 | 
						|
                                            RROutputPtr output, Atom property);
 | 
						|
typedef Bool (*RRGetPanningProcPtr) (ScreenPtr pScrn,
 | 
						|
                                     RRCrtcPtr crtc,
 | 
						|
                                     BoxPtr totalArea,
 | 
						|
                                     BoxPtr trackingArea, INT16 *border);
 | 
						|
typedef Bool (*RRSetPanningProcPtr) (ScreenPtr pScrn,
 | 
						|
                                     RRCrtcPtr crtc,
 | 
						|
                                     BoxPtr totalArea,
 | 
						|
                                     BoxPtr trackingArea, INT16 *border);
 | 
						|
 | 
						|
#endif                          /* RANDR_13_INTERFACE */
 | 
						|
 | 
						|
typedef Bool (*RRProviderGetPropertyProcPtr) (ScreenPtr pScreen,
 | 
						|
                                            RRProviderPtr provider, Atom property);
 | 
						|
typedef Bool (*RRProviderSetPropertyProcPtr) (ScreenPtr pScreen,
 | 
						|
                                              RRProviderPtr provider,
 | 
						|
                                              Atom property,
 | 
						|
                                              RRPropertyValuePtr value);
 | 
						|
 | 
						|
typedef Bool (*RRGetInfoProcPtr) (ScreenPtr pScreen, Rotation * rotations);
 | 
						|
typedef Bool (*RRCloseScreenProcPtr) (ScreenPtr pscreen);
 | 
						|
 | 
						|
typedef Bool (*RRProviderSetOutputSourceProcPtr)(ScreenPtr pScreen,
 | 
						|
                                          RRProviderPtr provider,
 | 
						|
                                          RRProviderPtr output_source);
 | 
						|
 | 
						|
typedef Bool (*RRProviderSetOffloadSinkProcPtr)(ScreenPtr pScreen,
 | 
						|
                                         RRProviderPtr provider,
 | 
						|
                                         RRProviderPtr offload_sink);
 | 
						|
 | 
						|
 | 
						|
typedef void (*RRProviderDestroyProcPtr)(ScreenPtr pScreen,
 | 
						|
                                         RRProviderPtr provider);
 | 
						|
 | 
						|
/* These are for 1.0 compatibility */
 | 
						|
 | 
						|
typedef struct _rrRefresh {
 | 
						|
    CARD16 rate;
 | 
						|
    RRModePtr mode;
 | 
						|
} RRScreenRate, *RRScreenRatePtr;
 | 
						|
 | 
						|
typedef struct _rrScreenSize {
 | 
						|
    int id;
 | 
						|
    short width, height;
 | 
						|
    short mmWidth, mmHeight;
 | 
						|
    int nRates;
 | 
						|
    RRScreenRatePtr pRates;
 | 
						|
} RRScreenSize, *RRScreenSizePtr;
 | 
						|
 | 
						|
#ifdef RANDR_10_INTERFACE
 | 
						|
 | 
						|
typedef Bool (*RRSetConfigProcPtr) (ScreenPtr pScreen,
 | 
						|
                                    Rotation rotation,
 | 
						|
                                    int rate, RRScreenSizePtr pSize);
 | 
						|
 | 
						|
#endif
 | 
						|
 | 
						|
typedef Bool (*RRCrtcSetScanoutPixmapProcPtr)(RRCrtcPtr crtc, PixmapPtr pixmap);
 | 
						|
 | 
						|
typedef struct _rrScrPriv {
 | 
						|
    /*
 | 
						|
     * 'public' part of the structure; DDXen fill this in
 | 
						|
     * as they initialize
 | 
						|
     */
 | 
						|
#if RANDR_10_INTERFACE
 | 
						|
    RRSetConfigProcPtr rrSetConfig;
 | 
						|
#endif
 | 
						|
    RRGetInfoProcPtr rrGetInfo;
 | 
						|
#if RANDR_12_INTERFACE
 | 
						|
    RRScreenSetSizeProcPtr rrScreenSetSize;
 | 
						|
    RRCrtcSetProcPtr rrCrtcSet;
 | 
						|
    RRCrtcSetGammaProcPtr rrCrtcSetGamma;
 | 
						|
    RRCrtcGetGammaProcPtr rrCrtcGetGamma;
 | 
						|
    RROutputSetPropertyProcPtr rrOutputSetProperty;
 | 
						|
    RROutputValidateModeProcPtr rrOutputValidateMode;
 | 
						|
    RRModeDestroyProcPtr rrModeDestroy;
 | 
						|
#endif
 | 
						|
#if RANDR_13_INTERFACE
 | 
						|
    RROutputGetPropertyProcPtr rrOutputGetProperty;
 | 
						|
    RRGetPanningProcPtr rrGetPanning;
 | 
						|
    RRSetPanningProcPtr rrSetPanning;
 | 
						|
#endif
 | 
						|
    /* TODO #if RANDR_15_INTERFACE */
 | 
						|
    RRCrtcSetScanoutPixmapProcPtr rrCrtcSetScanoutPixmap;
 | 
						|
 | 
						|
    RRProviderSetOutputSourceProcPtr rrProviderSetOutputSource;
 | 
						|
    RRProviderSetOffloadSinkProcPtr rrProviderSetOffloadSink;
 | 
						|
    RRProviderGetPropertyProcPtr rrProviderGetProperty;
 | 
						|
    RRProviderSetPropertyProcPtr rrProviderSetProperty;
 | 
						|
    /*
 | 
						|
     * Private part of the structure; not considered part of the ABI
 | 
						|
     */
 | 
						|
    TimeStamp lastSetTime;      /* last changed by client */
 | 
						|
    TimeStamp lastConfigTime;   /* possible configs changed */
 | 
						|
    RRCloseScreenProcPtr CloseScreen;
 | 
						|
 | 
						|
    Bool changed;               /* some config changed */
 | 
						|
    Bool configChanged;         /* configuration changed */
 | 
						|
    Bool layoutChanged;         /* screen layout changed */
 | 
						|
    Bool resourcesChanged;      /* screen resources change */
 | 
						|
 | 
						|
    CARD16 minWidth, minHeight;
 | 
						|
    CARD16 maxWidth, maxHeight;
 | 
						|
    CARD16 width, height;       /* last known screen size */
 | 
						|
    CARD16 mmWidth, mmHeight;   /* last known screen size */
 | 
						|
 | 
						|
    int numOutputs;
 | 
						|
    RROutputPtr *outputs;
 | 
						|
    RROutputPtr primaryOutput;
 | 
						|
 | 
						|
    int numCrtcs;
 | 
						|
    RRCrtcPtr *crtcs;
 | 
						|
 | 
						|
    /* Last known pointer position */
 | 
						|
    RRCrtcPtr pointerCrtc;
 | 
						|
 | 
						|
#ifdef RANDR_10_INTERFACE
 | 
						|
    /*
 | 
						|
     * Configuration information
 | 
						|
     */
 | 
						|
    Rotation rotations;
 | 
						|
    CARD16 reqWidth, reqHeight;
 | 
						|
 | 
						|
    int nSizes;
 | 
						|
    RRScreenSizePtr pSizes;
 | 
						|
 | 
						|
    Rotation rotation;
 | 
						|
    int rate;
 | 
						|
    int size;
 | 
						|
#endif
 | 
						|
    Bool discontiguous;
 | 
						|
 | 
						|
    RRProviderPtr provider;
 | 
						|
 | 
						|
    RRProviderDestroyProcPtr rrProviderDestroy;
 | 
						|
 | 
						|
} rrScrPrivRec, *rrScrPrivPtr;
 | 
						|
 | 
						|
extern _X_EXPORT DevPrivateKeyRec rrPrivKeyRec;
 | 
						|
 | 
						|
#define rrPrivKey (&rrPrivKeyRec)
 | 
						|
 | 
						|
#define rrGetScrPriv(pScr)  ((rrScrPrivPtr)dixLookupPrivate(&(pScr)->devPrivates, rrPrivKey))
 | 
						|
#define rrScrPriv(pScr)	rrScrPrivPtr    pScrPriv = rrGetScrPriv(pScr)
 | 
						|
#define SetRRScreen(s,p) dixSetPrivate(&(s)->devPrivates, rrPrivKey, p)
 | 
						|
 | 
						|
/*
 | 
						|
 * each window has a list of clients requesting
 | 
						|
 * RRNotify events.  Each client has a resource
 | 
						|
 * for each window it selects RRNotify input for,
 | 
						|
 * this resource is used to delete the RRNotifyRec
 | 
						|
 * entry from the per-window queue.
 | 
						|
 */
 | 
						|
 | 
						|
typedef struct _RREvent *RREventPtr;
 | 
						|
 | 
						|
typedef struct _RREvent {
 | 
						|
    RREventPtr next;
 | 
						|
    ClientPtr client;
 | 
						|
    WindowPtr window;
 | 
						|
    XID clientResource;
 | 
						|
    int mask;
 | 
						|
} RREventRec;
 | 
						|
 | 
						|
typedef struct _RRTimes {
 | 
						|
    TimeStamp setTime;
 | 
						|
    TimeStamp configTime;
 | 
						|
} RRTimesRec, *RRTimesPtr;
 | 
						|
 | 
						|
typedef struct _RRClient {
 | 
						|
    int major_version;
 | 
						|
    int minor_version;
 | 
						|
/*  RRTimesRec	times[0]; */
 | 
						|
} RRClientRec, *RRClientPtr;
 | 
						|
 | 
						|
extern _X_EXPORT RESTYPE RRClientType, RREventType;     /* resource types for event masks */
 | 
						|
extern _X_EXPORT DevPrivateKeyRec RRClientPrivateKeyRec;
 | 
						|
 | 
						|
#define RRClientPrivateKey (&RRClientPrivateKeyRec)
 | 
						|
extern _X_EXPORT RESTYPE RRCrtcType, RRModeType, RROutputType, RRProviderType;
 | 
						|
 | 
						|
#define VERIFY_RR_OUTPUT(id, ptr, a)\
 | 
						|
    {\
 | 
						|
	int rc = dixLookupResourceByType((void **)&(ptr), id,\
 | 
						|
	                                 RROutputType, client, a);\
 | 
						|
	if (rc != Success) {\
 | 
						|
	    client->errorValue = id;\
 | 
						|
	    return rc;\
 | 
						|
	}\
 | 
						|
    }
 | 
						|
 | 
						|
#define VERIFY_RR_CRTC(id, ptr, a)\
 | 
						|
    {\
 | 
						|
	int rc = dixLookupResourceByType((void **)&(ptr), id,\
 | 
						|
	                                 RRCrtcType, client, a);\
 | 
						|
	if (rc != Success) {\
 | 
						|
	    client->errorValue = id;\
 | 
						|
	    return rc;\
 | 
						|
	}\
 | 
						|
    }
 | 
						|
 | 
						|
#define VERIFY_RR_MODE(id, ptr, a)\
 | 
						|
    {\
 | 
						|
	int rc = dixLookupResourceByType((void **)&(ptr), id,\
 | 
						|
	                                 RRModeType, client, a);\
 | 
						|
	if (rc != Success) {\
 | 
						|
	    client->errorValue = id;\
 | 
						|
	    return rc;\
 | 
						|
	}\
 | 
						|
    }
 | 
						|
 | 
						|
#define VERIFY_RR_PROVIDER(id, ptr, a)\
 | 
						|
    {\
 | 
						|
        int rc = dixLookupResourceByType((void **)&(ptr), id,\
 | 
						|
                                         RRProviderType, client, a);\
 | 
						|
        if (rc != Success) {\
 | 
						|
            client->errorValue = id;\
 | 
						|
            return rc;\
 | 
						|
        }\
 | 
						|
    }
 | 
						|
 | 
						|
#define GetRRClient(pClient)    ((RRClientPtr)dixLookupPrivate(&(pClient)->devPrivates, RRClientPrivateKey))
 | 
						|
#define rrClientPriv(pClient)	RRClientPtr pRRClient = GetRRClient(pClient)
 | 
						|
 | 
						|
#ifdef RANDR_12_INTERFACE
 | 
						|
/*
 | 
						|
 * Set the range of sizes for the screen
 | 
						|
 */
 | 
						|
extern _X_EXPORT void
 | 
						|
 | 
						|
RRScreenSetSizeRange(ScreenPtr pScreen,
 | 
						|
                     CARD16 minWidth,
 | 
						|
                     CARD16 minHeight, CARD16 maxWidth, CARD16 maxHeight);
 | 
						|
#endif
 | 
						|
 | 
						|
/* rrscreen.c */
 | 
						|
/*
 | 
						|
 * Notify the extension that the screen size has been changed.
 | 
						|
 * The driver is responsible for calling this whenever it has changed
 | 
						|
 * the size of the screen
 | 
						|
 */
 | 
						|
extern _X_EXPORT void
 | 
						|
 RRScreenSizeNotify(ScreenPtr pScreen);
 | 
						|
 | 
						|
/*
 | 
						|
 * Request that the screen be resized
 | 
						|
 */
 | 
						|
extern _X_EXPORT Bool
 | 
						|
 | 
						|
RRScreenSizeSet(ScreenPtr pScreen,
 | 
						|
                CARD16 width, CARD16 height, CARD32 mmWidth, CARD32 mmHeight);
 | 
						|
 | 
						|
/*
 | 
						|
 * Send ConfigureNotify event to root window when 'something' happens
 | 
						|
 */
 | 
						|
extern _X_EXPORT void
 | 
						|
 RRSendConfigNotify(ScreenPtr pScreen);
 | 
						|
 | 
						|
/*
 | 
						|
 * screen dispatch
 | 
						|
 */
 | 
						|
extern _X_EXPORT int
 | 
						|
 ProcRRGetScreenSizeRange(ClientPtr client);
 | 
						|
 | 
						|
extern _X_EXPORT int
 | 
						|
 ProcRRSetScreenSize(ClientPtr client);
 | 
						|
 | 
						|
extern _X_EXPORT int
 | 
						|
 ProcRRGetScreenResources(ClientPtr client);
 | 
						|
 | 
						|
extern _X_EXPORT int
 | 
						|
 ProcRRGetScreenResourcesCurrent(ClientPtr client);
 | 
						|
 | 
						|
extern _X_EXPORT int
 | 
						|
 ProcRRSetScreenConfig(ClientPtr client);
 | 
						|
 | 
						|
extern _X_EXPORT int
 | 
						|
 ProcRRGetScreenInfo(ClientPtr client);
 | 
						|
 | 
						|
/*
 | 
						|
 * Deliver a ScreenNotify event
 | 
						|
 */
 | 
						|
extern _X_EXPORT void
 | 
						|
 RRDeliverScreenEvent(ClientPtr client, WindowPtr pWin, ScreenPtr pScreen);
 | 
						|
 | 
						|
extern _X_EXPORT void
 | 
						|
 RRResourcesChanged(ScreenPtr pScreen);
 | 
						|
 | 
						|
/* randr.c */
 | 
						|
/* set a screen change on the primary screen */
 | 
						|
extern _X_EXPORT void
 | 
						|
RRSetChanged(ScreenPtr pScreen);
 | 
						|
 | 
						|
/*
 | 
						|
 * Send all pending events
 | 
						|
 */
 | 
						|
extern _X_EXPORT void
 | 
						|
 RRTellChanged(ScreenPtr pScreen);
 | 
						|
 | 
						|
/*
 | 
						|
 * Poll the driver for changed information
 | 
						|
 */
 | 
						|
extern _X_EXPORT Bool
 | 
						|
 RRGetInfo(ScreenPtr pScreen, Bool force_query);
 | 
						|
 | 
						|
extern _X_EXPORT Bool RRInit(void);
 | 
						|
 | 
						|
extern _X_EXPORT Bool RRScreenInit(ScreenPtr pScreen);
 | 
						|
 | 
						|
extern _X_EXPORT RROutputPtr RRFirstOutput(ScreenPtr pScreen);
 | 
						|
 | 
						|
extern _X_EXPORT CARD16
 | 
						|
 RRVerticalRefresh(xRRModeInfo * mode);
 | 
						|
 | 
						|
#ifdef RANDR_10_INTERFACE
 | 
						|
/*
 | 
						|
 * This is the old interface, deprecated but left
 | 
						|
 * around for compatibility
 | 
						|
 */
 | 
						|
 | 
						|
/*
 | 
						|
 * Then, register the specific size with the screen
 | 
						|
 */
 | 
						|
 | 
						|
extern _X_EXPORT RRScreenSizePtr
 | 
						|
RRRegisterSize(ScreenPtr pScreen,
 | 
						|
               short width, short height, short mmWidth, short mmHeight);
 | 
						|
 | 
						|
extern _X_EXPORT Bool
 | 
						|
 RRRegisterRate(ScreenPtr pScreen, RRScreenSizePtr pSize, int rate);
 | 
						|
 | 
						|
/*
 | 
						|
 * Finally, set the current configuration of the screen
 | 
						|
 */
 | 
						|
 | 
						|
extern _X_EXPORT void
 | 
						|
 | 
						|
RRSetCurrentConfig(ScreenPtr pScreen,
 | 
						|
                   Rotation rotation, int rate, RRScreenSizePtr pSize);
 | 
						|
 | 
						|
extern _X_EXPORT Rotation RRGetRotation(ScreenPtr pScreen);
 | 
						|
 | 
						|
#endif
 | 
						|
 | 
						|
/* rrcrtc.c */
 | 
						|
 | 
						|
/*
 | 
						|
 * Notify the CRTC of some change; layoutChanged indicates that
 | 
						|
 * some position or size element changed
 | 
						|
 */
 | 
						|
extern _X_EXPORT void
 | 
						|
 RRCrtcChanged(RRCrtcPtr crtc, Bool layoutChanged);
 | 
						|
 | 
						|
/*
 | 
						|
 * Create a CRTC
 | 
						|
 */
 | 
						|
extern _X_EXPORT RRCrtcPtr RRCrtcCreate(ScreenPtr pScreen, void *devPrivate);
 | 
						|
 | 
						|
/*
 | 
						|
 * Set the allowed rotations on a CRTC
 | 
						|
 */
 | 
						|
extern _X_EXPORT void
 | 
						|
 RRCrtcSetRotations(RRCrtcPtr crtc, Rotation rotations);
 | 
						|
 | 
						|
/*
 | 
						|
 * Set whether transforms are allowed on a CRTC
 | 
						|
 */
 | 
						|
extern _X_EXPORT void
 | 
						|
 RRCrtcSetTransformSupport(RRCrtcPtr crtc, Bool transforms);
 | 
						|
 | 
						|
/*
 | 
						|
 * Notify the extension that the Crtc has been reconfigured,
 | 
						|
 * the driver calls this whenever it has updated the mode
 | 
						|
 */
 | 
						|
extern _X_EXPORT Bool
 | 
						|
 | 
						|
RRCrtcNotify(RRCrtcPtr crtc,
 | 
						|
             RRModePtr mode,
 | 
						|
             int x,
 | 
						|
             int y,
 | 
						|
             Rotation rotation,
 | 
						|
             RRTransformPtr transform, int numOutputs, RROutputPtr * outputs);
 | 
						|
 | 
						|
extern _X_EXPORT void
 | 
						|
 RRDeliverCrtcEvent(ClientPtr client, WindowPtr pWin, RRCrtcPtr crtc);
 | 
						|
 | 
						|
/*
 | 
						|
 * Request that the Crtc be reconfigured
 | 
						|
 */
 | 
						|
extern _X_EXPORT Bool
 | 
						|
 | 
						|
RRCrtcSet(RRCrtcPtr crtc,
 | 
						|
          RRModePtr mode,
 | 
						|
          int x,
 | 
						|
          int y, Rotation rotation, int numOutput, RROutputPtr * outputs);
 | 
						|
 | 
						|
/*
 | 
						|
 * Request that the Crtc gamma be changed
 | 
						|
 */
 | 
						|
 | 
						|
extern _X_EXPORT Bool
 | 
						|
 RRCrtcGammaSet(RRCrtcPtr crtc, CARD16 *red, CARD16 *green, CARD16 *blue);
 | 
						|
 | 
						|
/*
 | 
						|
 * Request current gamma back from the DDX (if possible).
 | 
						|
 * This includes gamma size.
 | 
						|
 */
 | 
						|
 | 
						|
extern _X_EXPORT Bool
 | 
						|
 RRCrtcGammaGet(RRCrtcPtr crtc);
 | 
						|
 | 
						|
/*
 | 
						|
 * Notify the extension that the Crtc gamma has been changed
 | 
						|
 * The driver calls this whenever it has changed the gamma values
 | 
						|
 * in the RRCrtcRec
 | 
						|
 */
 | 
						|
 | 
						|
extern _X_EXPORT Bool
 | 
						|
 RRCrtcGammaNotify(RRCrtcPtr crtc);
 | 
						|
 | 
						|
/*
 | 
						|
 * Set the size of the gamma table at server startup time
 | 
						|
 */
 | 
						|
 | 
						|
extern _X_EXPORT Bool
 | 
						|
 RRCrtcGammaSetSize(RRCrtcPtr crtc, int size);
 | 
						|
 | 
						|
/*
 | 
						|
 * Return the area of the frame buffer scanned out by the crtc,
 | 
						|
 * taking into account the current mode and rotation
 | 
						|
 */
 | 
						|
 | 
						|
extern _X_EXPORT void
 | 
						|
 RRCrtcGetScanoutSize(RRCrtcPtr crtc, int *width, int *height);
 | 
						|
 | 
						|
/*
 | 
						|
 * Return crtc transform
 | 
						|
 */
 | 
						|
extern _X_EXPORT RRTransformPtr RRCrtcGetTransform(RRCrtcPtr crtc);
 | 
						|
 | 
						|
/*
 | 
						|
 * Check whether the pending and current transforms are the same
 | 
						|
 */
 | 
						|
extern _X_EXPORT Bool
 | 
						|
 RRCrtcPendingTransform(RRCrtcPtr crtc);
 | 
						|
 | 
						|
/*
 | 
						|
 * Destroy a Crtc at shutdown
 | 
						|
 */
 | 
						|
extern _X_EXPORT void
 | 
						|
 RRCrtcDestroy(RRCrtcPtr crtc);
 | 
						|
 | 
						|
/*
 | 
						|
 * Set the pending CRTC transformation
 | 
						|
 */
 | 
						|
 | 
						|
extern _X_EXPORT int
 | 
						|
 | 
						|
RRCrtcTransformSet(RRCrtcPtr crtc,
 | 
						|
                   PictTransformPtr transform,
 | 
						|
                   struct pict_f_transform *f_transform,
 | 
						|
                   struct pict_f_transform *f_inverse,
 | 
						|
                   char *filter, int filter_len, xFixed * params, int nparams);
 | 
						|
 | 
						|
/*
 | 
						|
 * Initialize crtc type
 | 
						|
 */
 | 
						|
extern _X_EXPORT Bool
 | 
						|
 RRCrtcInit(void);
 | 
						|
 | 
						|
/*
 | 
						|
 * Initialize crtc type error value
 | 
						|
 */
 | 
						|
extern _X_EXPORT void
 | 
						|
 RRCrtcInitErrorValue(void);
 | 
						|
 | 
						|
/*
 | 
						|
 * Detach and free a scanout pixmap
 | 
						|
 */
 | 
						|
extern _X_EXPORT void
 | 
						|
 RRCrtcDetachScanoutPixmap(RRCrtcPtr crtc);
 | 
						|
 | 
						|
extern _X_EXPORT Bool
 | 
						|
 RRReplaceScanoutPixmap(DrawablePtr pDrawable, PixmapPtr pPixmap, Bool enable);
 | 
						|
 | 
						|
/*
 | 
						|
 * Crtc dispatch
 | 
						|
 */
 | 
						|
 | 
						|
extern _X_EXPORT int
 | 
						|
 ProcRRGetCrtcInfo(ClientPtr client);
 | 
						|
 | 
						|
extern _X_EXPORT int
 | 
						|
 ProcRRSetCrtcConfig(ClientPtr client);
 | 
						|
 | 
						|
extern _X_EXPORT int
 | 
						|
 ProcRRGetCrtcGammaSize(ClientPtr client);
 | 
						|
 | 
						|
extern _X_EXPORT int
 | 
						|
 ProcRRGetCrtcGamma(ClientPtr client);
 | 
						|
 | 
						|
extern _X_EXPORT int
 | 
						|
 ProcRRSetCrtcGamma(ClientPtr client);
 | 
						|
 | 
						|
extern _X_EXPORT int
 | 
						|
 ProcRRSetCrtcTransform(ClientPtr client);
 | 
						|
 | 
						|
extern _X_EXPORT int
 | 
						|
 ProcRRGetCrtcTransform(ClientPtr client);
 | 
						|
 | 
						|
int
 | 
						|
 ProcRRGetPanning(ClientPtr client);
 | 
						|
 | 
						|
int
 | 
						|
 ProcRRSetPanning(ClientPtr client);
 | 
						|
 | 
						|
void
 | 
						|
 RRConstrainCursorHarder(DeviceIntPtr, ScreenPtr, int, int *, int *);
 | 
						|
 | 
						|
/* rrdispatch.c */
 | 
						|
extern _X_EXPORT Bool
 | 
						|
 RRClientKnowsRates(ClientPtr pClient);
 | 
						|
 | 
						|
/* rrmode.c */
 | 
						|
/*
 | 
						|
 * Find, and if necessary, create a mode
 | 
						|
 */
 | 
						|
 | 
						|
extern _X_EXPORT RRModePtr RRModeGet(xRRModeInfo * modeInfo, const char *name);
 | 
						|
 | 
						|
/*
 | 
						|
 * Destroy a mode.
 | 
						|
 */
 | 
						|
 | 
						|
extern _X_EXPORT void
 | 
						|
 RRModeDestroy(RRModePtr mode);
 | 
						|
 | 
						|
/*
 | 
						|
 * Return a list of modes that are valid for some output in pScreen
 | 
						|
 */
 | 
						|
extern _X_EXPORT RRModePtr *RRModesForScreen(ScreenPtr pScreen, int *num_ret);
 | 
						|
 | 
						|
/*
 | 
						|
 * Initialize mode type
 | 
						|
 */
 | 
						|
extern _X_EXPORT Bool
 | 
						|
 RRModeInit(void);
 | 
						|
 | 
						|
/*
 | 
						|
 * Initialize mode type error value
 | 
						|
 */
 | 
						|
extern _X_EXPORT void
 | 
						|
 RRModeInitErrorValue(void);
 | 
						|
 | 
						|
extern _X_EXPORT int
 | 
						|
 ProcRRCreateMode(ClientPtr client);
 | 
						|
 | 
						|
extern _X_EXPORT int
 | 
						|
 ProcRRDestroyMode(ClientPtr client);
 | 
						|
 | 
						|
extern _X_EXPORT int
 | 
						|
 ProcRRAddOutputMode(ClientPtr client);
 | 
						|
 | 
						|
extern _X_EXPORT int
 | 
						|
 ProcRRDeleteOutputMode(ClientPtr client);
 | 
						|
 | 
						|
/* rroutput.c */
 | 
						|
 | 
						|
/*
 | 
						|
 * Notify the output of some change. configChanged indicates whether
 | 
						|
 * any external configuration (mode list, clones, connected status)
 | 
						|
 * has changed, or whether the change was strictly internal
 | 
						|
 * (which crtc is in use)
 | 
						|
 */
 | 
						|
extern _X_EXPORT void
 | 
						|
 RROutputChanged(RROutputPtr output, Bool configChanged);
 | 
						|
 | 
						|
/*
 | 
						|
 * Create an output
 | 
						|
 */
 | 
						|
 | 
						|
extern _X_EXPORT RROutputPtr
 | 
						|
RROutputCreate(ScreenPtr pScreen,
 | 
						|
               const char *name, int nameLength, void *devPrivate);
 | 
						|
 | 
						|
/*
 | 
						|
 * Notify extension that output parameters have been changed
 | 
						|
 */
 | 
						|
extern _X_EXPORT Bool
 | 
						|
 RROutputSetClones(RROutputPtr output, RROutputPtr * clones, int numClones);
 | 
						|
 | 
						|
extern _X_EXPORT Bool
 | 
						|
 | 
						|
RROutputSetModes(RROutputPtr output,
 | 
						|
                 RRModePtr * modes, int numModes, int numPreferred);
 | 
						|
 | 
						|
extern _X_EXPORT int
 | 
						|
 RROutputAddUserMode(RROutputPtr output, RRModePtr mode);
 | 
						|
 | 
						|
extern _X_EXPORT int
 | 
						|
 RROutputDeleteUserMode(RROutputPtr output, RRModePtr mode);
 | 
						|
 | 
						|
extern _X_EXPORT Bool
 | 
						|
 RROutputSetCrtcs(RROutputPtr output, RRCrtcPtr * crtcs, int numCrtcs);
 | 
						|
 | 
						|
extern _X_EXPORT Bool
 | 
						|
 RROutputSetConnection(RROutputPtr output, CARD8 connection);
 | 
						|
 | 
						|
extern _X_EXPORT Bool
 | 
						|
 RROutputSetSubpixelOrder(RROutputPtr output, int subpixelOrder);
 | 
						|
 | 
						|
extern _X_EXPORT Bool
 | 
						|
 RROutputSetPhysicalSize(RROutputPtr output, int mmWidth, int mmHeight);
 | 
						|
 | 
						|
extern _X_EXPORT void
 | 
						|
 RRDeliverOutputEvent(ClientPtr client, WindowPtr pWin, RROutputPtr output);
 | 
						|
 | 
						|
extern _X_EXPORT void
 | 
						|
 RROutputDestroy(RROutputPtr output);
 | 
						|
 | 
						|
extern _X_EXPORT int
 | 
						|
 ProcRRGetOutputInfo(ClientPtr client);
 | 
						|
 | 
						|
extern _X_EXPORT int
 | 
						|
 ProcRRSetOutputPrimary(ClientPtr client);
 | 
						|
 | 
						|
extern _X_EXPORT int
 | 
						|
 ProcRRGetOutputPrimary(ClientPtr client);
 | 
						|
 | 
						|
/*
 | 
						|
 * Initialize output type
 | 
						|
 */
 | 
						|
extern _X_EXPORT Bool
 | 
						|
 RROutputInit(void);
 | 
						|
 | 
						|
/*
 | 
						|
 * Initialize output type error value
 | 
						|
 */
 | 
						|
extern _X_EXPORT void
 | 
						|
 RROutputInitErrorValue(void);
 | 
						|
 | 
						|
/* rrpointer.c */
 | 
						|
extern _X_EXPORT void
 | 
						|
 RRPointerMoved(ScreenPtr pScreen, int x, int y);
 | 
						|
 | 
						|
extern _X_EXPORT void
 | 
						|
 RRPointerScreenConfigured(ScreenPtr pScreen);
 | 
						|
 | 
						|
/* rrproperty.c */
 | 
						|
 | 
						|
extern _X_EXPORT void
 | 
						|
 RRDeleteAllOutputProperties(RROutputPtr output);
 | 
						|
 | 
						|
extern _X_EXPORT RRPropertyValuePtr
 | 
						|
RRGetOutputProperty(RROutputPtr output, Atom property, Bool pending);
 | 
						|
 | 
						|
extern _X_EXPORT RRPropertyPtr
 | 
						|
RRQueryOutputProperty(RROutputPtr output, Atom property);
 | 
						|
 | 
						|
extern _X_EXPORT void
 | 
						|
 RRDeleteOutputProperty(RROutputPtr output, Atom property);
 | 
						|
 | 
						|
extern _X_EXPORT Bool
 | 
						|
 RRPostPendingProperties(RROutputPtr output);
 | 
						|
 | 
						|
extern _X_EXPORT int
 | 
						|
 | 
						|
RRChangeOutputProperty(RROutputPtr output, Atom property, Atom type,
 | 
						|
                       int format, int mode, unsigned long len,
 | 
						|
                       void *value, Bool sendevent, Bool pending);
 | 
						|
 | 
						|
extern _X_EXPORT int
 | 
						|
 | 
						|
RRConfigureOutputProperty(RROutputPtr output, Atom property,
 | 
						|
                          Bool pending, Bool range, Bool immutable,
 | 
						|
                          int num_values, INT32 *values);
 | 
						|
extern _X_EXPORT int
 | 
						|
 ProcRRChangeOutputProperty(ClientPtr client);
 | 
						|
 | 
						|
extern _X_EXPORT int
 | 
						|
 ProcRRGetOutputProperty(ClientPtr client);
 | 
						|
 | 
						|
extern _X_EXPORT int
 | 
						|
 ProcRRListOutputProperties(ClientPtr client);
 | 
						|
 | 
						|
extern _X_EXPORT int
 | 
						|
 ProcRRQueryOutputProperty(ClientPtr client);
 | 
						|
 | 
						|
extern _X_EXPORT int
 | 
						|
 ProcRRConfigureOutputProperty(ClientPtr client);
 | 
						|
 | 
						|
extern _X_EXPORT int
 | 
						|
 ProcRRDeleteOutputProperty(ClientPtr client);
 | 
						|
 | 
						|
/* rrprovider.c */
 | 
						|
extern _X_EXPORT void
 | 
						|
RRProviderInitErrorValue(void);
 | 
						|
 | 
						|
extern _X_EXPORT int
 | 
						|
ProcRRGetProviders(ClientPtr client);
 | 
						|
 | 
						|
extern _X_EXPORT int
 | 
						|
ProcRRGetProviderInfo(ClientPtr client);
 | 
						|
 | 
						|
extern _X_EXPORT int
 | 
						|
ProcRRSetProviderOutputSource(ClientPtr client);
 | 
						|
 | 
						|
extern _X_EXPORT int
 | 
						|
ProcRRSetProviderOffloadSink(ClientPtr client);
 | 
						|
 | 
						|
extern _X_EXPORT Bool
 | 
						|
RRProviderInit(void);
 | 
						|
 | 
						|
extern _X_EXPORT RRProviderPtr
 | 
						|
RRProviderCreate(ScreenPtr pScreen, const char *name,
 | 
						|
                 int nameLength);
 | 
						|
 | 
						|
extern _X_EXPORT void
 | 
						|
RRProviderDestroy (RRProviderPtr provider);
 | 
						|
 | 
						|
extern _X_EXPORT void
 | 
						|
RRProviderSetCapabilities(RRProviderPtr provider, uint32_t capabilities);
 | 
						|
 | 
						|
extern _X_EXPORT Bool
 | 
						|
RRProviderLookup(XID id, RRProviderPtr *provider_p);
 | 
						|
 | 
						|
extern _X_EXPORT void
 | 
						|
RRDeliverProviderEvent(ClientPtr client, WindowPtr pWin, RRProviderPtr provider);
 | 
						|
 | 
						|
/* rrproviderproperty.c */
 | 
						|
 | 
						|
extern _X_EXPORT void
 | 
						|
 RRDeleteAllProviderProperties(RRProviderPtr provider);
 | 
						|
 | 
						|
extern _X_EXPORT RRPropertyValuePtr
 | 
						|
 RRGetProviderProperty(RRProviderPtr provider, Atom property, Bool pending);
 | 
						|
 | 
						|
extern _X_EXPORT RRPropertyPtr
 | 
						|
 RRQueryProviderProperty(RRProviderPtr provider, Atom property);
 | 
						|
 | 
						|
extern _X_EXPORT void
 | 
						|
 RRDeleteProviderProperty(RRProviderPtr provider, Atom property);
 | 
						|
 | 
						|
extern _X_EXPORT int
 | 
						|
RRChangeProviderProperty(RRProviderPtr provider, Atom property, Atom type,
 | 
						|
                       int format, int mode, unsigned long len,
 | 
						|
                       void *value, Bool sendevent, Bool pending);
 | 
						|
 | 
						|
extern _X_EXPORT int
 | 
						|
 RRConfigureProviderProperty(RRProviderPtr provider, Atom property,
 | 
						|
                             Bool pending, Bool range, Bool immutable,
 | 
						|
                             int num_values, INT32 *values);
 | 
						|
 | 
						|
extern _X_EXPORT Bool
 | 
						|
 RRPostProviderPendingProperties(RRProviderPtr provider);
 | 
						|
 | 
						|
extern _X_EXPORT int
 | 
						|
 ProcRRGetProviderProperty(ClientPtr client);
 | 
						|
 | 
						|
extern _X_EXPORT int
 | 
						|
 ProcRRListProviderProperties(ClientPtr client);
 | 
						|
 | 
						|
extern _X_EXPORT int
 | 
						|
 ProcRRQueryProviderProperty(ClientPtr client);
 | 
						|
 | 
						|
extern _X_EXPORT int
 | 
						|
ProcRRConfigureProviderProperty(ClientPtr client);
 | 
						|
 | 
						|
extern _X_EXPORT int
 | 
						|
ProcRRChangeProviderProperty(ClientPtr client);
 | 
						|
 | 
						|
extern _X_EXPORT int
 | 
						|
 ProcRRDeleteProviderProperty(ClientPtr client);
 | 
						|
/* rrxinerama.c */
 | 
						|
#ifdef XINERAMA
 | 
						|
extern _X_EXPORT void
 | 
						|
 RRXineramaExtensionInit(void);
 | 
						|
#endif
 | 
						|
 | 
						|
#endif                          /* _RANDRSTR_H_ */
 | 
						|
 | 
						|
/*
 | 
						|
 
 | 
						|
randr extension implementation structure
 | 
						|
 | 
						|
Query state:
 | 
						|
    ProcRRGetScreenInfo/ProcRRGetScreenResources
 | 
						|
	RRGetInfo
 | 
						|
 
 | 
						|
	    • Request configuration from driver, either 1.0 or 1.2 style
 | 
						|
	    • These functions only record state changes, all
 | 
						|
	      other actions are pended until RRTellChanged is called
 | 
						|
 
 | 
						|
	    ->rrGetInfo
 | 
						|
	    1.0:
 | 
						|
		RRRegisterSize
 | 
						|
		RRRegisterRate
 | 
						|
		RRSetCurrentConfig
 | 
						|
	    1.2:
 | 
						|
		RRScreenSetSizeRange
 | 
						|
		RROutputSetCrtcs
 | 
						|
		RRModeGet
 | 
						|
		RROutputSetModes
 | 
						|
		RROutputSetConnection
 | 
						|
		RROutputSetSubpixelOrder
 | 
						|
		RROutputSetClones
 | 
						|
		RRCrtcNotify
 | 
						|
 
 | 
						|
	• Must delay scanning configuration until after ->rrGetInfo returns
 | 
						|
	  because some drivers will call SetCurrentConfig in the middle
 | 
						|
	  of the ->rrGetInfo operation.
 | 
						|
 
 | 
						|
	1.0:
 | 
						|
 | 
						|
	    • Scan old configuration, mirror to new structures
 | 
						|
 
 | 
						|
	    RRScanOldConfig
 | 
						|
		RRCrtcCreate
 | 
						|
		RROutputCreate
 | 
						|
		RROutputSetCrtcs
 | 
						|
		RROutputSetConnection
 | 
						|
		RROutputSetSubpixelOrder
 | 
						|
		RROldModeAdd	• This adds modes one-at-a-time
 | 
						|
		    RRModeGet
 | 
						|
		RRCrtcNotify
 | 
						|
 
 | 
						|
	• send events, reset pointer if necessary
 | 
						|
 
 | 
						|
	RRTellChanged
 | 
						|
	    WalkTree (sending events)
 | 
						|
 
 | 
						|
	    • when layout has changed:
 | 
						|
		RRPointerScreenConfigured
 | 
						|
		RRSendConfigNotify
 | 
						|
 
 | 
						|
Asynchronous state setting (1.2 only)
 | 
						|
    When setting state asynchronously, the driver invokes the
 | 
						|
    ->rrGetInfo function and then calls RRTellChanged to flush
 | 
						|
    the changes to the clients and reset pointer if necessary
 | 
						|
 | 
						|
Set state
 | 
						|
 | 
						|
    ProcRRSetScreenConfig
 | 
						|
	RRCrtcSet
 | 
						|
	    1.2:
 | 
						|
		->rrCrtcSet
 | 
						|
		    RRCrtcNotify
 | 
						|
	    1.0:
 | 
						|
		->rrSetConfig
 | 
						|
		RRCrtcNotify
 | 
						|
	    RRTellChanged
 | 
						|
 */
 |