diff options
Diffstat (limited to 'nx-X11/programs/Xserver/randr/randrstr.h')
-rw-r--r-- | nx-X11/programs/Xserver/randr/randrstr.h | 1220 |
1 files changed, 774 insertions, 446 deletions
diff --git a/nx-X11/programs/Xserver/randr/randrstr.h b/nx-X11/programs/Xserver/randr/randrstr.h index bab784b8f..1bd0b9535 100644 --- a/nx-X11/programs/Xserver/randr/randrstr.h +++ b/nx-X11/programs/Xserver/randr/randrstr.h @@ -2,6 +2,7 @@ * 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 @@ -32,6 +33,10 @@ #ifndef _RANDRSTR_H_ #define _RANDRSTR_H_ +#ifndef NXAGENT_SERVER +#include "list.h" +#endif + #include <nx-X11/X.h> #include <nx-X11/Xproto.h> #include "misc.h" @@ -43,170 +48,240 @@ #include "pixmapstr.h" #include "extnsionst.h" #include "servermd.h" -#ifndef NXAGENT_SERVER -#include <nx-X11/extensions/randr.h> -#include <nx-X11/extensions/randrproto.h> -#else +#include "rrtransform.h" #include "randr.h" #include "randrproto.h" -#endif -#ifdef RENDER -#include <nx-X11/extensions/render.h> /* we share subpixel order information */ +#include <nx-X11/extensions/render.h> /* we share subpixel order information */ #include "picturestr.h" -#endif #include <nx-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_15_INTERFACE 1 +#define RANDR_GET_CRTC_INTERFACE 1 + +#define RANDR_INTERFACE_VERSION 0x0104 -typedef XID RRMode; -typedef XID RROutput; -typedef XID RRCrtc; +typedef XID RRMode; +typedef XID RROutput; +typedef XID RRCrtc; +typedef XID RRProvider; -extern int RREventBase, RRErrorBase; +extern int RREventBase, RRErrorBase; + +extern int (*ProcRandrVector[RRNumberRequests]) (ClientPtr); +extern int (*SProcRandrVector[RRNumberRequests]) (ClientPtr); -extern int (*ProcRandrVector[RRNumberRequests])(ClientPtr); -extern 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 _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; +typedef struct _rrMonitor RRMonitorRec, *RRMonitorPtr; struct _rrMode { - int refcnt; - xRRModeInfo mode; - char *name; - ScreenPtr userScreen; + 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 */ + 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; + 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; + 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; + 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; +}; + +typedef struct _rrMonitorGeometry { + BoxRec box; + CARD32 mmWidth; + CARD32 mmHeight; +} RRMonitorGeometryRec, *RRMonitorGeometryPtr; + +struct _rrMonitor { + Atom name; + ScreenPtr pScreen; + int numOutputs; + RROutput *outputs; + Bool primary; + Bool automatic; + RRMonitorGeometryRec geometry; }; #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 (*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); +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 -typedef Bool (*RRGetInfoProcPtr) (ScreenPtr pScreen, Rotation *rotations); -typedef Bool (*RRCloseScreenProcPtr) ( int i, ScreenPtr pscreen); +#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; + CARD16 rate; + RRModePtr mode; } RRScreenRate, *RRScreenRatePtr; typedef struct _rrScreenSize { - int id; - short width, height; - short mmWidth, mmHeight; - int nRates; + 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); +typedef Bool (*RRSetConfigProcPtr) (ScreenPtr pScreen, + Rotation rotation, + int rate, RRScreenSizePtr pSize); #endif - + +typedef Bool (*RRCrtcSetScanoutPixmapProcPtr) (RRCrtcPtr crtc, PixmapPtr pixmap); typedef struct _rrScrPriv { /* @@ -214,60 +289,87 @@ typedef struct _rrScrPriv { * as they initialize */ #if RANDR_10_INTERFACE - RRSetConfigProcPtr rrSetConfig; + RRSetConfigProcPtr rrSetConfig; #endif - RRGetInfoProcPtr rrGetInfo; + RRGetInfoProcPtr rrGetInfo; #if RANDR_12_INTERFACE - RRScreenSetSizeProcPtr rrScreenSetSize; - RRCrtcSetProcPtr rrCrtcSet; - RRCrtcSetGammaProcPtr rrCrtcSetGamma; - RROutputSetPropertyProcPtr rrOutputSetProperty; - RROutputValidateModeProcPtr rrOutputValidateMode; - RRModeDestroyProcPtr rrModeDestroy; + 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; + 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 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 */ + CARD16 minWidth, minHeight; + CARD16 maxWidth, maxHeight; + CARD16 width, height; /* last known screen size */ + CARD16 mmWidth, mmHeight; /* last known screen size */ - int numOutputs; - RROutputPtr *outputs; + int numOutputs; + RROutputPtr *outputs; + RROutputPtr primaryOutput; - int numCrtcs; - RRCrtcPtr *crtcs; + int numCrtcs; + RRCrtcPtr *crtcs; /* Last known pointer position */ - RRCrtcPtr pointerCrtc; + RRCrtcPtr pointerCrtc; #ifdef RANDR_10_INTERFACE /* * Configuration information */ - Rotation rotations; - CARD16 reqWidth, reqHeight; - - int nSizes; - RRScreenSizePtr pSizes; - - Rotation rotation; - int rate; - int size; + Rotation rotations; + CARD16 reqWidth, reqHeight; + + int nSizes; + RRScreenSizePtr pSizes; + + Rotation rotation; + int rate; + int size; #endif + Bool discontiguous; + + RRProviderPtr provider; + + RRProviderDestroyProcPtr rrProviderDestroy; + + int numMonitors; + RRMonitorPtr *monitors; + } rrScrPrivRec, *rrScrPrivPtr; #ifndef NXAGENT_SERVER +extern _X_EXPORT DevPrivateKeyRec rrPrivKeyRec; + +#define rrPrivKey (&rrPrivKeyRec) extern DevPrivateKey rrPrivKey; #else extern int rrPrivIndex; @@ -275,17 +377,17 @@ extern int rrPrivIndex; #ifndef NXAGENT_SERVER -#define rrGetScrPriv(pScr) ((rrScrPrivPtr)dixLookupPrivate(&(pScr)->devPrivates, rrPrivKey)) -#define rrScrPriv(pScr) rrScrPrivPtr pScrPriv = rrGetScrPriv(pScr) +#define rrGetScrPriv(pScr) ((rrScrPrivPtr)dixLookupPrivate(&(pScr)->devPrivates, rrPrivKey)) +#define rrScrPriv(pScr) rrScrPrivPtr pScrPriv = rrGetScrPriv(pScr) #define SetRRScreen(s,p) dixSetPrivate(&(s)->devPrivates, rrPrivKey, p) -#else +#else /* !defined(NXAGENT_SERVER) */ -#define rrGetScrPriv(pScr) ((rrScrPrivPtr) (pScr)->devPrivates[rrPrivIndex].ptr) -#define rrScrPriv(pScr) rrScrPrivPtr pScrPriv = rrGetScrPriv(pScr) +#define rrGetScrPriv(pScr) ((rrScrPrivPtr) (pScr)->devPrivates[rrPrivIndex].ptr) +#define rrScrPriv(pScr) rrScrPrivPtr pScrPriv = rrGetScrPriv(pScr) #define SetRRScreen(s,p) ((s)->devPrivates[rrPrivIndex].ptr = (void *) (p)) -#endif +#endif /* !defined(NXAGENT_SERVER) */ /* * each window has a list of clients requesting @@ -298,72 +400,161 @@ extern int rrPrivIndex; typedef struct _RREvent *RREventPtr; typedef struct _RREvent { - RREventPtr next; - ClientPtr client; - WindowPtr window; - XID clientResource; - int mask; + RREventPtr next; + ClientPtr client; + WindowPtr window; + XID clientResource; + int mask; } RREventRec; typedef struct _RRTimes { - TimeStamp setTime; - TimeStamp configTime; + TimeStamp setTime; + TimeStamp configTime; } RRTimesRec, *RRTimesPtr; typedef struct _RRClient { - int major_version; - int minor_version; + int major_version; + int minor_version; /* RRTimesRec times[0]; */ } RRClientRec, *RRClientPtr; -extern RESTYPE RRClientType, RREventType; /* resource types for event masks */ +extern RESTYPE RRClientType, RREventType; /* resource types for event masks */ + #ifndef NXAGENT_SERVER extern DevPrivateKey RRClientPrivateKey; #else -extern int RRClientPrivateIndex; +extern int RRClientPrivateIndex; #endif -extern RESTYPE RRCrtcType, RRModeType, RROutputType; + +extern _X_EXPORT RESTYPE RRCrtcType, RRModeType, RROutputType, RRProviderType; + +#ifdef NXAGENT_SERVER #define LookupOutput(client,id,a) ((RROutputPtr) \ - (SecurityLookupIDByType (client, id, \ - RROutputType, a))) + (SecurityLookupIDByType (client, id, \ + RROutputType, a))) #define LookupCrtc(client,id,a) ((RRCrtcPtr) \ - (SecurityLookupIDByType (client, id, \ - RRCrtcType, a))) + (SecurityLookupIDByType (client, id, \ + RRCrtcType, a))) #define LookupMode(client,id,a) ((RRModePtr) \ - (SecurityLookupIDByType (client, id, \ - RRModeType, a))) -#ifndef NXAGENT_SERVER - -#define GetRRClient(pClient) ((RRClientPtr)dixLookupPrivate(&(pClient)->devPrivates, RRClientPrivateKey)) -#define rrClientPriv(pClient) RRClientPtr pRRClient = GetRRClient(pClient) - -#else - -#define GetRRClient(pClient) ((RRClientPtr) (pClient)->devPrivates[RRClientPrivateIndex].ptr) -#define rrClientPriv(pClient) RRClientPtr pRRClient = GetRRClient(pClient) + (SecurityLookupIDByType (client, id, \ + RRModeType, a))) +#define LookupProvider(client,id,a) ((RRProviderPtr) \ + (SecurityLookupIDByType (client, id, \ + RRProviderType, a))) #define DixUnknownAccess SecurityUnknownAccess -#define DixReadAccess SecurityReadAccess -#define DixWriteAccess SecurityWriteAccess +#define DixReadAccess SecurityReadAccess +#define DixWriteAccess SecurityWriteAccess +#define DixSetAttrAccess SecurityWriteAccess +#define DixUseAccess SecurityWriteAccess #define DixDestroyAccess SecurityDestroyAccess #endif +#ifndef NXAGENT_SERVER + +#define RRClientPrivateKey (&RRClientPrivateKeyRec) +#define GetRRClient(pClient) ((RRClientPtr)dixLookupPrivate(&(pClient)->devPrivates, RRClientPrivateKey)) + +#else /* !defined/NXAGENT_SERVER) */ + +#define GetRRClient(pClient) ((RRClientPtr) (pClient)->devPrivates[RRClientPrivateIndex].ptr) + +#endif /* !defined(NXAGENT_SERVER) */ +#define rrClientPriv(pClient) RRClientPtr pRRClient = GetRRClient(pClient) + /* Initialize the extension */ void -RRExtensionInit (void); + RRExtensionInit(void); + +#ifndef NXAGENT_SERVER +#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;\ + }\ + } +#else /* !defined(NXAGENT_SERVER) */ +#define VERIFY_RR_OUTPUT(id, ptr, a)\ + {\ + ptr = LookupOutput(client, id, a);\ + if (!ptr) {\ + client->errorValue = id;\ + return RRErrorBase + BadRROutput;\ + }\ + } + +#define VERIFY_RR_CRTC(id, ptr, a)\ + {\ + ptr = LookupCrtc (client, id, a);\ + if (!ptr) {\ + client->errorValue = id;\ + return RRErrorBase + BadRRCrtc;\ + }\ + } + +#define VERIFY_RR_MODE(id, ptr, a)\ + {\ + ptr = LookupMode (client, id, a);\ + if (!ptr) {\ + client->errorValue = id;\ + return RRErrorBase + BadRRMode;\ + }\ + } + +#define VERIFY_RR_PROVIDER(id, ptr, a)\ + {\ + ptr = LookupProvider (client, id, a);\ + if (!ptr) {\ + client->errorValue = id;\ + return RRErrorBase + BadRRProvider;\ + }\ + } +#endif /* !defined(NXAGENT_SERVER) */ #ifdef RANDR_12_INTERFACE /* * Set the range of sizes for the screen */ -void -RRScreenSetSizeRange (ScreenPtr pScreen, - CARD16 minWidth, - CARD16 minHeight, - CARD16 maxWidth, - CARD16 maxHeight); +extern _X_EXPORT void + +RRScreenSetSizeRange(ScreenPtr pScreen, + CARD16 minWidth, + CARD16 minHeight, CARD16 maxWidth, CARD16 maxHeight); #endif /* rrscreen.c */ @@ -372,111 +563,80 @@ RRScreenSetSizeRange (ScreenPtr pScreen, * The driver is responsible for calling this whenever it has changed * the size of the screen */ -void -RRScreenSizeNotify (ScreenPtr pScreen); +extern _X_EXPORT void + RRScreenSizeNotify(ScreenPtr pScreen); /* * Request that the screen be resized */ -Bool -RRScreenSizeSet (ScreenPtr pScreen, - CARD16 width, - CARD16 height, - CARD32 mmWidth, - CARD32 mmHeight); +extern _X_EXPORT Bool + +RRScreenSizeSet(ScreenPtr pScreen, + CARD16 width, CARD16 height, CARD32 mmWidth, CARD32 mmHeight); /* * Send ConfigureNotify event to root window when 'something' happens */ -void -RRSendConfigNotify (ScreenPtr pScreen); - +extern _X_EXPORT void + RRSendConfigNotify(ScreenPtr pScreen); + /* * screen dispatch */ -int -ProcRRGetScreenSizeRange (ClientPtr client); +extern _X_EXPORT int + ProcRRGetScreenSizeRange(ClientPtr client); -int -ProcRRSetScreenSize (ClientPtr client); +extern _X_EXPORT int + ProcRRSetScreenSize(ClientPtr client); -int -ProcRRGetScreenResources (ClientPtr client); +extern _X_EXPORT int + ProcRRGetScreenResources(ClientPtr client); -int -ProcRRSetScreenConfig (ClientPtr client); +extern _X_EXPORT int + ProcRRGetScreenResourcesCurrent(ClientPtr client); -int -ProcRRGetScreenInfo (ClientPtr client); +extern _X_EXPORT int + ProcRRSetScreenConfig(ClientPtr client); + +extern _X_EXPORT int + ProcRRGetScreenInfo(ClientPtr client); /* * Deliver a ScreenNotify event */ -void -RRDeliverScreenEvent (ClientPtr client, WindowPtr pWin, ScreenPtr pScreen); - -/* mirandr.c */ -Bool -miRandRInit (ScreenPtr pScreen); - -Bool -miRRGetInfo (ScreenPtr pScreen, Rotation *rotations); +extern _X_EXPORT void + RRDeliverScreenEvent(ClientPtr client, WindowPtr pWin, ScreenPtr pScreen); -Bool -miRRGetScreenInfo (ScreenPtr pScreen); - -Bool -miRRCrtcSet (ScreenPtr pScreen, - RRCrtcPtr crtc, - RRModePtr mode, - int x, - int y, - Rotation rotation, - int numOutput, - RROutputPtr *outputs); - -Bool -miRROutputSetProperty (ScreenPtr pScreen, - RROutputPtr output, - Atom property, - RRPropertyValuePtr value); - -Bool -miRROutputValidateMode (ScreenPtr pScreen, - RROutputPtr output, - RRModePtr mode); - -void -miRRModeDestroy (ScreenPtr pScreen, - RRModePtr mode); +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 */ -void -RRTellChanged (ScreenPtr pScreen); +extern _X_EXPORT void + RRTellChanged(ScreenPtr pScreen); /* * Poll the driver for changed information */ -Bool -RRGetInfo (ScreenPtr pScreen); +extern _X_EXPORT Bool + RRGetInfo(ScreenPtr pScreen, Bool force_query); -Bool RRInit (void); +extern _X_EXPORT Bool RRInit(void); -Bool RRScreenInit(ScreenPtr pScreen); +extern _X_EXPORT Bool RRScreenInit(ScreenPtr pScreen); -RROutputPtr -RRFirstOutput (ScreenPtr pScreen); +extern _X_EXPORT RROutputPtr RRFirstOutput(ScreenPtr pScreen); -Rotation -RRGetRotation (ScreenPtr pScreen); +extern _X_EXPORT CARD16 + RRVerticalRefresh(xRRModeInfo * mode); -CARD16 -RRVerticalRefresh (xRRModeInfo *mode); - -#ifdef RANDR_10_INTERFACE +#ifdef RANDR_10_INTERFACE /* * This is the old interface, deprecated but left * around for compatibility @@ -486,39 +646,26 @@ RRVerticalRefresh (xRRModeInfo *mode); * Then, register the specific size with the screen */ -RRScreenSizePtr -RRRegisterSize (ScreenPtr pScreen, - short width, - short height, - short mmWidth, - short mmHeight); +extern _X_EXPORT RRScreenSizePtr +RRRegisterSize(ScreenPtr pScreen, + short width, short height, short mmWidth, short mmHeight); -Bool RRRegisterRate (ScreenPtr pScreen, - RRScreenSizePtr pSize, - int rate); +extern _X_EXPORT Bool + RRRegisterRate(ScreenPtr pScreen, RRScreenSizePtr pSize, int rate); /* * Finally, set the current configuration of the screen */ -void -RRSetCurrentConfig (ScreenPtr pScreen, - Rotation rotation, - int rate, - RRScreenSizePtr pSize); +extern _X_EXPORT void -Bool RRScreenInit (ScreenPtr pScreen); -Rotation -RRGetRotation (ScreenPtr pScreen); +RRSetCurrentConfig(ScreenPtr pScreen, + Rotation rotation, int rate, RRScreenSizePtr pSize); -int -RRSetScreenConfig (ScreenPtr pScreen, - Rotation rotation, - int rate, - RRScreenSizePtr pSize); +extern _X_EXPORT Rotation RRGetRotation(ScreenPtr pScreen); -#endif +#endif /* rrcrtc.c */ @@ -526,58 +673,66 @@ RRSetScreenConfig (ScreenPtr pScreen, * Notify the CRTC of some change; layoutChanged indicates that * some position or size element changed */ -void -RRCrtcChanged (RRCrtcPtr crtc, Bool layoutChanged); +extern _X_EXPORT void + RRCrtcChanged(RRCrtcPtr crtc, Bool layoutChanged); /* * Create a CRTC */ -RRCrtcPtr -RRCrtcCreate (ScreenPtr pScreen, void *devPrivate); +extern _X_EXPORT RRCrtcPtr RRCrtcCreate(ScreenPtr pScreen, void *devPrivate); /* * Set the allowed rotations on a CRTC */ -void -RRCrtcSetRotations (RRCrtcPtr crtc, Rotation rotations); +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 */ -Bool -RRCrtcNotify (RRCrtcPtr crtc, - RRModePtr mode, - int x, - int y, - Rotation rotation, - int numOutputs, - RROutputPtr *outputs); +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); -void -RRDeliverCrtcEvent (ClientPtr client, WindowPtr pWin, RRCrtcPtr crtc); - /* * Request that the Crtc be reconfigured */ -Bool -RRCrtcSet (RRCrtcPtr crtc, - RRModePtr mode, - int x, - int y, - Rotation rotation, - int numOutput, - RROutputPtr *outputs); +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 */ -Bool -RRCrtcGammaSet (RRCrtcPtr crtc, - CARD16 *red, - CARD16 *green, - CARD16 *blue); +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 @@ -585,102 +740,158 @@ RRCrtcGammaSet (RRCrtcPtr crtc, * in the RRCrtcRec */ -Bool -RRCrtcGammaNotify (RRCrtcPtr crtc); +extern _X_EXPORT Bool + RRCrtcGammaNotify(RRCrtcPtr crtc); /* * Set the size of the gamma table at server startup time */ -Bool -RRCrtcGammaSetSize (RRCrtcPtr crtc, - int size); +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 */ -void -RRCrtcGetScanoutSize(RRCrtcPtr crtc, int *width, int *height); +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 */ -void -RRCrtcDestroy (RRCrtcPtr crtc); +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 */ -Bool -RRCrtcInit (void); +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 */ -int -ProcRRGetCrtcInfo (ClientPtr client); +extern _X_EXPORT int + ProcRRGetCrtcInfo(ClientPtr client); -int -ProcRRSetCrtcConfig (ClientPtr client); +extern _X_EXPORT int + ProcRRSetCrtcConfig(ClientPtr client); -int -ProcRRGetCrtcGammaSize (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 -ProcRRGetCrtcGamma (ClientPtr client); + ProcRRGetPanning(ClientPtr client); int -ProcRRSetCrtcGamma (ClientPtr client); + ProcRRSetPanning(ClientPtr client); + +void + RRConstrainCursorHarder( +#ifndef NXAGENT_SERVER + DeviceIntPtr, +#endif /* !defined(NXAGENT_SERVER) */ + ScreenPtr, int, int *, int *); /* rrdispatch.c */ -Bool -RRClientKnowsRates (ClientPtr pClient); +extern _X_EXPORT Bool + RRClientKnowsRates(ClientPtr pClient); /* rrmode.c */ /* * Find, and if necessary, create a mode */ -RRModePtr -RRModeGet (xRRModeInfo *modeInfo, - const char *name); - -void -RRModePruneUnused (ScreenPtr pScreen); +extern _X_EXPORT RRModePtr RRModeGet(xRRModeInfo * modeInfo, const char *name); /* * Destroy a mode. */ -void -RRModeDestroy (RRModePtr mode); +extern _X_EXPORT void + RRModeDestroy(RRModePtr mode); /* * Return a list of modes that are valid for some output in pScreen */ -RRModePtr * -RRModesForScreen (ScreenPtr pScreen, int *num_ret); - +extern _X_EXPORT RRModePtr *RRModesForScreen(ScreenPtr pScreen, int *num_ret); + /* * Initialize mode type */ -Bool -RRModeInit (void); - -int -ProcRRCreateMode (ClientPtr client); +extern _X_EXPORT Bool + RRModeInit(void); -int -ProcRRDestroyMode (ClientPtr client); +/* + * Initialize mode type error value + */ +extern _X_EXPORT void + RRModeInitErrorValue(void); -int -ProcRRAddOutputMode (ClientPtr client); +extern _X_EXPORT int + ProcRRCreateMode(ClientPtr client); -int -ProcRRDeleteOutputMode (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 */ @@ -690,143 +901,260 @@ ProcRRDeleteOutputMode (ClientPtr client); * has changed, or whether the change was strictly internal * (which crtc is in use) */ -void -RROutputChanged (RROutputPtr output, Bool configChanged); +extern _X_EXPORT void + RROutputChanged(RROutputPtr output, Bool configChanged); /* * Create an output */ -RROutputPtr -RROutputCreate (ScreenPtr pScreen, - const char *name, - int nameLength, - void *devPrivate); +extern _X_EXPORT RROutputPtr +RROutputCreate(ScreenPtr pScreen, + const char *name, int nameLength, void *devPrivate); /* * Notify extension that output parameters have been changed */ -Bool -RROutputSetClones (RROutputPtr output, - RROutputPtr *clones, - int numClones); +extern _X_EXPORT Bool + RROutputSetClones(RROutputPtr output, RROutputPtr * clones, int numClones); -Bool -RROutputSetModes (RROutputPtr output, - RRModePtr *modes, - int numModes, - int numPreferred); +extern _X_EXPORT Bool -int -RROutputAddUserMode (RROutputPtr output, - RRModePtr mode); +RROutputSetModes(RROutputPtr output, + RRModePtr * modes, int numModes, int numPreferred); -int -RROutputDeleteUserMode (RROutputPtr output, - RRModePtr mode); +extern _X_EXPORT int + RROutputAddUserMode(RROutputPtr output, RRModePtr mode); -Bool -RROutputSetCrtcs (RROutputPtr output, - RRCrtcPtr *crtcs, - int numCrtcs); +extern _X_EXPORT int + RROutputDeleteUserMode(RROutputPtr output, RRModePtr mode); -Bool -RROutputSetConnection (RROutputPtr output, - CARD8 connection); +extern _X_EXPORT Bool + RROutputSetCrtcs(RROutputPtr output, RRCrtcPtr * crtcs, int numCrtcs); -Bool -RROutputSetSubpixelOrder (RROutputPtr output, - int subpixelOrder); +extern _X_EXPORT Bool + RROutputSetConnection(RROutputPtr output, CARD8 connection); -Bool -RROutputSetPhysicalSize (RROutputPtr output, - int mmWidth, - int mmHeight); +extern _X_EXPORT Bool + RROutputSetSubpixelOrder(RROutputPtr output, int subpixelOrder); -void -RRDeliverOutputEvent(ClientPtr client, WindowPtr pWin, RROutputPtr output); +extern _X_EXPORT Bool + RROutputSetPhysicalSize(RROutputPtr output, int mmWidth, int mmHeight); -void -RROutputDestroy (RROutputPtr output); +extern _X_EXPORT void + RRDeliverOutputEvent(ClientPtr client, WindowPtr pWin, RROutputPtr output); -int -ProcRRGetOutputInfo (ClientPtr client); +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 */ -Bool -RROutputInit (void); - +extern _X_EXPORT Bool + RROutputInit(void); + +/* + * Initialize output type error value + */ +extern _X_EXPORT void + RROutputInitErrorValue(void); + /* rrpointer.c */ -void -RRPointerMoved (ScreenPtr pScreen, int x, int y); +extern _X_EXPORT void + RRPointerMoved(ScreenPtr pScreen, int x, int y); -void -RRPointerScreenConfigured (ScreenPtr pScreen); +extern _X_EXPORT void + RRPointerScreenConfigured(ScreenPtr pScreen); /* rrproperty.c */ -void -RRDeleteAllOutputProperties (RROutputPtr output); +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); -RRPropertyValuePtr -RRGetOutputProperty (RROutputPtr output, Atom property, 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 -RRPropertyPtr -RRQueryOutputProperty (RROutputPtr output, Atom property); - void -RRDeleteOutputProperty (RROutputPtr output, Atom property); + RRMonitorInit(ScreenPtr screen); Bool -RRPostPendingProperties (RROutputPtr output); - -int -RRChangeOutputProperty (RROutputPtr output, Atom property, Atom type, - int format, int mode, unsigned long len, - void * value, Bool sendevent, Bool pending); -int -RRConfigureOutputProperty (RROutputPtr output, Atom property, - Bool pending, Bool range, Bool immutable, - int num_values, INT32 *values); -int -ProcRRChangeOutputProperty (ClientPtr client); +RRMonitorMakeList(ScreenPtr screen, Bool get_active, RRMonitorPtr * monitors_ret, int *nmon_ret); int -ProcRRGetOutputProperty (ClientPtr client); + RRMonitorCountList(ScreenPtr screen); -int -ProcRRListOutputProperties (ClientPtr client); +void + RRMonitorFreeList(RRMonitorPtr monitors, int nmon); + +void + RRMonitorClose(ScreenPtr screen); + +RRMonitorPtr +RRMonitorAlloc(int noutput); int -ProcRRQueryOutputProperty (ClientPtr client); + RRMonitorAdd(ClientPtr client, ScreenPtr screen, RRMonitorPtr monitor); + +void + RRMonitorFree(RRMonitorPtr monitor); int -ProcRRConfigureOutputProperty (ClientPtr client); + ProcRRGetMonitors(ClientPtr client); int -ProcRRDeleteOutputProperty (ClientPtr client); + ProcRRSetMonitor(ClientPtr client); -/* rrxinerama.c */ -void -RRXineramaExtensionInit(void); +int + ProcRRDeleteMonitor(ClientPtr client); -#endif /* _RANDRSTR_H_ */ +#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 @@ -841,15 +1169,15 @@ Query state: 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 @@ -859,16 +1187,16 @@ Query state: 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 |