#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>
#include "picturestr.h"
#include <X11/Xfuncproto.h>
#define RANDR_10_INTERFACE 1
#define RANDR_12_INTERFACE 1
#define RANDR_13_INTERFACE 1
#define RANDR_GET_CRTC_INTERFACE 1
#define RANDR_INTERFACE_VERSION 0x0103
typedef XID RRMode;
typedef XID RROutput;
typedef XID RRCrtc;
extern _X_EXPORT int RREventBase, RRErrorBase;
extern _X_EXPORT int (*ProcRandrVector[RRNumberRequests])(ClientPtr);
extern _X_EXPORT int (*SProcRandrVector[RRNumberRequests])(ClientPtr);
#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;
struct _rrMode {
int refcnt;
xRRModeInfo mode;
char *name;
ScreenPtr userScreen;
};
struct _rrPropertyValue {
Atom type;
short format;
long size;
pointer data;
};
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;
};
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;
};
#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
typedef Bool (*RRGetInfoProcPtr) (ScreenPtr pScreen, Rotation *rotations);
typedef Bool (*RRCloseScreenProcPtr) ( int i, ScreenPtr pscreen);
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 struct _rrScrPriv {
#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
TimeStamp lastSetTime;
TimeStamp lastConfigTime;
RRCloseScreenProcPtr CloseScreen;
Bool changed;
Bool configChanged;
Bool layoutChanged;
CARD16 minWidth, minHeight;
CARD16 maxWidth, maxHeight;
CARD16 width, height;
CARD16 mmWidth, mmHeight;
int numOutputs;
RROutputPtr *outputs;
RROutputPtr primaryOutput;
int numCrtcs;
RRCrtcPtr *crtcs;
RRCrtcPtr pointerCrtc;
#ifdef RANDR_10_INTERFACE
Rotation rotations;
CARD16 reqWidth, reqHeight;
int nSizes;
RRScreenSizePtr pSizes;
Rotation rotation;
int rate;
int size;
#endif
} 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)
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;
} RRClientRec, *RRClientPtr;
extern _X_EXPORT RESTYPE RRClientType, RREventType;
extern _X_EXPORT DevPrivateKeyRec RRClientPrivateKeyRec;
#define RRClientPrivateKey (&RRClientPrivateKeyRec)
extern _X_EXPORT RESTYPE RRCrtcType, RRModeType, RROutputType;
#define VERIFY_RR_OUTPUT(id, ptr, a)\
{\
int rc = dixLookupResourceByType((pointer *)&(ptr), id,\
RROutputType, client, a);\
if (rc != Success) {\
client->errorValue = id;\
return rc;\
}\
}
#define VERIFY_RR_CRTC(id, ptr, a)\
{\
int rc = dixLookupResourceByType((pointer *)&(ptr), id,\
RRCrtcType, client, a);\
if (rc != Success) {\
client->errorValue = id;\
return rc;\
}\
}
#define VERIFY_RR_MODE(id, ptr, a)\
{\
int rc = dixLookupResourceByType((pointer *)&(ptr), id,\
RRModeType, 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)
extern _X_EXPORT void
RRExtensionInit (void);
#ifdef RANDR_12_INTERFACE
extern _X_EXPORT void
RRScreenSetSizeRange (ScreenPtr pScreen,
CARD16 minWidth,
CARD16 minHeight,
CARD16 maxWidth,
CARD16 maxHeight);
#endif
extern _X_EXPORT void
RRScreenSizeNotify (ScreenPtr pScreen);
extern _X_EXPORT Bool
RRScreenSizeSet (ScreenPtr pScreen,
CARD16 width,
CARD16 height,
CARD32 mmWidth,
CARD32 mmHeight);
extern _X_EXPORT void
RRSendConfigNotify (ScreenPtr pScreen);
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);
extern _X_EXPORT void
RRDeliverScreenEvent (ClientPtr client, WindowPtr pWin, ScreenPtr pScreen);
extern _X_EXPORT void
RRTellChanged (ScreenPtr pScreen);
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 Rotation
RRGetRotation (ScreenPtr pScreen);
extern _X_EXPORT CARD16
RRVerticalRefresh (xRRModeInfo *mode);
#ifdef RANDR_10_INTERFACE
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);
extern _X_EXPORT void
RRSetCurrentConfig (ScreenPtr pScreen,
Rotation rotation,
int rate,
RRScreenSizePtr pSize);
extern _X_EXPORT Bool RRScreenInit (ScreenPtr pScreen);
extern _X_EXPORT Rotation
RRGetRotation (ScreenPtr pScreen);
#endif
extern _X_EXPORT void
RRCrtcChanged (RRCrtcPtr crtc, Bool layoutChanged);
extern _X_EXPORT RRCrtcPtr
RRCrtcCreate (ScreenPtr pScreen, void *devPrivate);
extern _X_EXPORT void
RRCrtcSetRotations (RRCrtcPtr crtc, Rotation rotations);
extern _X_EXPORT void
RRCrtcSetTransformSupport (RRCrtcPtr crtc, Bool transforms);
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);
extern _X_EXPORT Bool
RRCrtcSet (RRCrtcPtr crtc,
RRModePtr mode,
int x,
int y,
Rotation rotation,
int numOutput,
RROutputPtr *outputs);
extern _X_EXPORT Bool
RRCrtcGammaSet (RRCrtcPtr crtc,
CARD16 *red,
CARD16 *green,
CARD16 *blue);
extern _X_EXPORT Bool
RRCrtcGammaGet(RRCrtcPtr crtc);
extern _X_EXPORT Bool
RRCrtcGammaNotify (RRCrtcPtr crtc);
extern _X_EXPORT Bool
RRCrtcGammaSetSize (RRCrtcPtr crtc,
int size);
extern _X_EXPORT void
RRCrtcGetScanoutSize(RRCrtcPtr crtc, int *width, int *height);
extern _X_EXPORT Bool
RRTransformCompute (int x,
int y,
int width,
int height,
Rotation rotation,
RRTransformPtr rr_transform,
PictTransformPtr transform,
struct pict_f_transform *f_transform,
struct pict_f_transform *f_inverse);
extern _X_EXPORT RRTransformPtr
RRCrtcGetTransform (RRCrtcPtr crtc);
extern _X_EXPORT Bool
RRCrtcPendingTransform (RRCrtcPtr crtc);
extern _X_EXPORT void
RRCrtcDestroy (RRCrtcPtr crtc);
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);
extern _X_EXPORT Bool
RRCrtcInit (void);
extern _X_EXPORT void
RRCrtcInitErrorValue (void);
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);
extern _X_EXPORT Bool
RRClientKnowsRates (ClientPtr pClient);
extern _X_EXPORT RRModePtr
RRModeGet (xRRModeInfo *modeInfo,
const char *name);
extern _X_EXPORT void
RRModeDestroy (RRModePtr mode);
extern _X_EXPORT RRModePtr *
RRModesForScreen (ScreenPtr pScreen, int *num_ret);
extern _X_EXPORT Bool
RRModeInit (void);
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);
extern _X_EXPORT void
RROutputChanged (RROutputPtr output, Bool configChanged);
extern _X_EXPORT RROutputPtr
RROutputCreate (ScreenPtr pScreen,
const char *name,
int nameLength,
void *devPrivate);
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);
extern _X_EXPORT Bool
RROutputInit (void);
extern _X_EXPORT void
RROutputInitErrorValue (void);
extern _X_EXPORT void
RRPointerMoved (ScreenPtr pScreen, int x, int y);
extern _X_EXPORT void
RRPointerScreenConfigured (ScreenPtr pScreen);
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,
pointer 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);
#ifdef XINERAMA
extern _X_EXPORT void
RRXineramaExtensionInit(void);
#endif
#endif