randrstr.h revision 7e31ba66
105b261ecSmrg/* 205b261ecSmrg * Copyright © 2000 Compaq Computer Corporation 305b261ecSmrg * Copyright © 2002 Hewlett-Packard Company 405b261ecSmrg * Copyright © 2006 Intel Corporation 54642e01fSmrg * Copyright © 2008 Red Hat, Inc. 605b261ecSmrg * 705b261ecSmrg * Permission to use, copy, modify, distribute, and sell this software and its 805b261ecSmrg * documentation for any purpose is hereby granted without fee, provided that 905b261ecSmrg * the above copyright notice appear in all copies and that both that copyright 1005b261ecSmrg * notice and this permission notice appear in supporting documentation, and 1105b261ecSmrg * that the name of the copyright holders not be used in advertising or 1205b261ecSmrg * publicity pertaining to distribution of the software without specific, 1305b261ecSmrg * written prior permission. The copyright holders make no representations 1405b261ecSmrg * about the suitability of this software for any purpose. It is provided "as 1505b261ecSmrg * is" without express or implied warranty. 1605b261ecSmrg * 1705b261ecSmrg * THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, 1805b261ecSmrg * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO 1905b261ecSmrg * EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY SPECIAL, INDIRECT OR 2005b261ecSmrg * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, 2105b261ecSmrg * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER 2205b261ecSmrg * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE 2305b261ecSmrg * OF THIS SOFTWARE. 2405b261ecSmrg * 2505b261ecSmrg * Author: Jim Gettys, Hewlett-Packard Company, Inc. 2605b261ecSmrg * Keith Packard, Intel Corporation 2705b261ecSmrg */ 2805b261ecSmrg 2905b261ecSmrg#ifdef HAVE_DIX_CONFIG_H 3005b261ecSmrg#include <dix-config.h> 3105b261ecSmrg#endif 3205b261ecSmrg 3305b261ecSmrg#ifndef _RANDRSTR_H_ 3405b261ecSmrg#define _RANDRSTR_H_ 3505b261ecSmrg 3605b261ecSmrg#include <X11/X.h> 3705b261ecSmrg#include <X11/Xproto.h> 3805b261ecSmrg#include "misc.h" 3905b261ecSmrg#include "os.h" 4005b261ecSmrg#include "dixstruct.h" 4105b261ecSmrg#include "resource.h" 4205b261ecSmrg#include "scrnintstr.h" 4305b261ecSmrg#include "windowstr.h" 4405b261ecSmrg#include "pixmapstr.h" 4505b261ecSmrg#include "extnsionst.h" 4605b261ecSmrg#include "servermd.h" 474642e01fSmrg#include "rrtransform.h" 4805b261ecSmrg#include <X11/extensions/randr.h> 4905b261ecSmrg#include <X11/extensions/randrproto.h> 50f7df2e56Smrg#include <X11/extensions/render.h> /* we share subpixel order information */ 5105b261ecSmrg#include "picturestr.h" 5205b261ecSmrg#include <X11/Xfuncproto.h> 5305b261ecSmrg 5405b261ecSmrg/* required for ABI compatibility for now */ 5505b261ecSmrg#define RANDR_10_INTERFACE 1 5605b261ecSmrg#define RANDR_12_INTERFACE 1 57f7df2e56Smrg#define RANDR_13_INTERFACE 1 /* requires RANDR_12_INTERFACE */ 584642e01fSmrg#define RANDR_GET_CRTC_INTERFACE 1 594642e01fSmrg 60f7df2e56Smrg#define RANDR_INTERFACE_VERSION 0x0104 6105b261ecSmrg 62f7df2e56Smrgtypedef XID RRMode; 63f7df2e56Smrgtypedef XID RROutput; 64f7df2e56Smrgtypedef XID RRCrtc; 65f7df2e56Smrgtypedef XID RRProvider; 667e31ba66Smrgtypedef XID RRLease; 6705b261ecSmrg 68f7df2e56Smrgextern int RREventBase, RRErrorBase; 69f7df2e56Smrg 70f7df2e56Smrgextern int (*ProcRandrVector[RRNumberRequests]) (ClientPtr); 71f7df2e56Smrgextern int (*SProcRandrVector[RRNumberRequests]) (ClientPtr); 7205b261ecSmrg 7305b261ecSmrg/* 7405b261ecSmrg * Modeline for a monitor. Name follows directly after this struct 7505b261ecSmrg */ 7605b261ecSmrg 7705b261ecSmrg#define RRModeName(pMode) ((char *) (pMode + 1)) 78f7df2e56Smrgtypedef struct _rrMode RRModeRec, *RRModePtr; 79f7df2e56Smrgtypedef struct _rrPropertyValue RRPropertyValueRec, *RRPropertyValuePtr; 80f7df2e56Smrgtypedef struct _rrProperty RRPropertyRec, *RRPropertyPtr; 81f7df2e56Smrgtypedef struct _rrCrtc RRCrtcRec, *RRCrtcPtr; 82f7df2e56Smrgtypedef struct _rrOutput RROutputRec, *RROutputPtr; 83f7df2e56Smrgtypedef struct _rrProvider RRProviderRec, *RRProviderPtr; 84f7df2e56Smrgtypedef struct _rrMonitor RRMonitorRec, *RRMonitorPtr; 857e31ba66Smrgtypedef struct _rrLease RRLeaseRec, *RRLeasePtr; 8605b261ecSmrg 8705b261ecSmrgstruct _rrMode { 88f7df2e56Smrg int refcnt; 89f7df2e56Smrg xRRModeInfo mode; 90f7df2e56Smrg char *name; 91f7df2e56Smrg ScreenPtr userScreen; 9205b261ecSmrg}; 9305b261ecSmrg 9405b261ecSmrgstruct _rrPropertyValue { 95f7df2e56Smrg Atom type; /* ignored by server */ 96f7df2e56Smrg short format; /* format of data for swapping - 8,16,32 */ 97f7df2e56Smrg long size; /* size of data in (format/8) bytes */ 98f7df2e56Smrg void *data; /* private to client */ 9905b261ecSmrg}; 10005b261ecSmrg 10105b261ecSmrgstruct _rrProperty { 102f7df2e56Smrg RRPropertyPtr next; 103f7df2e56Smrg ATOM propertyName; 104f7df2e56Smrg Bool is_pending; 105f7df2e56Smrg Bool range; 106f7df2e56Smrg Bool immutable; 107f7df2e56Smrg int num_valid; 108f7df2e56Smrg INT32 *valid_values; 109f7df2e56Smrg RRPropertyValueRec current, pending; 11005b261ecSmrg}; 11105b261ecSmrg 11205b261ecSmrgstruct _rrCrtc { 113f7df2e56Smrg RRCrtc id; 114f7df2e56Smrg ScreenPtr pScreen; 115f7df2e56Smrg RRModePtr mode; 116f7df2e56Smrg int x, y; 117f7df2e56Smrg Rotation rotation; 118f7df2e56Smrg Rotation rotations; 119f7df2e56Smrg Bool changed; 120f7df2e56Smrg int numOutputs; 121f7df2e56Smrg RROutputPtr *outputs; 122f7df2e56Smrg int gammaSize; 123f7df2e56Smrg CARD16 *gammaRed; 124f7df2e56Smrg CARD16 *gammaBlue; 125f7df2e56Smrg CARD16 *gammaGreen; 126f7df2e56Smrg void *devPrivate; 127f7df2e56Smrg Bool transforms; 128f7df2e56Smrg RRTransformRec client_pending_transform; 129f7df2e56Smrg RRTransformRec client_current_transform; 130f7df2e56Smrg PictTransform transform; 1314642e01fSmrg struct pict_f_transform f_transform; 1324642e01fSmrg struct pict_f_transform f_inverse; 133f7df2e56Smrg 134f7df2e56Smrg PixmapPtr scanout_pixmap; 1357e31ba66Smrg PixmapPtr scanout_pixmap_back; 13605b261ecSmrg}; 13705b261ecSmrg 13805b261ecSmrgstruct _rrOutput { 139f7df2e56Smrg RROutput id; 140f7df2e56Smrg ScreenPtr pScreen; 141f7df2e56Smrg char *name; 142f7df2e56Smrg int nameLength; 143f7df2e56Smrg CARD8 connection; 144f7df2e56Smrg CARD8 subpixelOrder; 145f7df2e56Smrg int mmWidth; 146f7df2e56Smrg int mmHeight; 147f7df2e56Smrg RRCrtcPtr crtc; 148f7df2e56Smrg int numCrtcs; 149f7df2e56Smrg RRCrtcPtr *crtcs; 150f7df2e56Smrg int numClones; 151f7df2e56Smrg RROutputPtr *clones; 152f7df2e56Smrg int numModes; 153f7df2e56Smrg int numPreferred; 154f7df2e56Smrg RRModePtr *modes; 155f7df2e56Smrg int numUserModes; 156f7df2e56Smrg RRModePtr *userModes; 157f7df2e56Smrg Bool changed; 1587e31ba66Smrg Bool nonDesktop; 159f7df2e56Smrg RRPropertyPtr properties; 160f7df2e56Smrg Bool pendingProperties; 161f7df2e56Smrg void *devPrivate; 162f7df2e56Smrg}; 163f7df2e56Smrg 164f7df2e56Smrgstruct _rrProvider { 165f7df2e56Smrg RRProvider id; 166f7df2e56Smrg ScreenPtr pScreen; 167f7df2e56Smrg uint32_t capabilities; 168f7df2e56Smrg char *name; 169f7df2e56Smrg int nameLength; 170f7df2e56Smrg RRPropertyPtr properties; 171f7df2e56Smrg Bool pendingProperties; 172f7df2e56Smrg Bool changed; 173f7df2e56Smrg struct _rrProvider *offload_sink; 174f7df2e56Smrg struct _rrProvider *output_source; 175f7df2e56Smrg}; 176f7df2e56Smrg 177f7df2e56Smrgtypedef struct _rrMonitorGeometry { 178f7df2e56Smrg BoxRec box; 179f7df2e56Smrg CARD32 mmWidth; 180f7df2e56Smrg CARD32 mmHeight; 181f7df2e56Smrg} RRMonitorGeometryRec, *RRMonitorGeometryPtr; 182f7df2e56Smrg 183f7df2e56Smrgstruct _rrMonitor { 184f7df2e56Smrg Atom name; 185f7df2e56Smrg ScreenPtr pScreen; 186f7df2e56Smrg int numOutputs; 187f7df2e56Smrg RROutput *outputs; 188f7df2e56Smrg Bool primary; 189f7df2e56Smrg Bool automatic; 190f7df2e56Smrg RRMonitorGeometryRec geometry; 19105b261ecSmrg}; 19205b261ecSmrg 1937e31ba66Smrgtypedef enum _rrLeaseState { RRLeaseCreating, RRLeaseRunning, RRLeaseTerminating } RRLeaseState; 1947e31ba66Smrg 1957e31ba66Smrgstruct _rrLease { 1967e31ba66Smrg struct xorg_list list; 1977e31ba66Smrg ScreenPtr screen; 1987e31ba66Smrg RRLease id; 1997e31ba66Smrg RRLeaseState state; 2007e31ba66Smrg void *devPrivate; 2017e31ba66Smrg int numCrtcs; 2027e31ba66Smrg RRCrtcPtr *crtcs; 2037e31ba66Smrg int numOutputs; 2047e31ba66Smrg RROutputPtr *outputs; 2057e31ba66Smrg}; 2067e31ba66Smrg 20705b261ecSmrg#if RANDR_12_INTERFACE 208f7df2e56Smrgtypedef Bool (*RRScreenSetSizeProcPtr) (ScreenPtr pScreen, 209f7df2e56Smrg CARD16 width, 210f7df2e56Smrg CARD16 height, 211f7df2e56Smrg CARD32 mmWidth, CARD32 mmHeight); 212f7df2e56Smrg 213f7df2e56Smrgtypedef Bool (*RRCrtcSetProcPtr) (ScreenPtr pScreen, 214f7df2e56Smrg RRCrtcPtr crtc, 215f7df2e56Smrg RRModePtr mode, 216f7df2e56Smrg int x, 217f7df2e56Smrg int y, 218f7df2e56Smrg Rotation rotation, 219f7df2e56Smrg int numOutputs, RROutputPtr * outputs); 220f7df2e56Smrg 221f7df2e56Smrgtypedef Bool (*RRCrtcSetGammaProcPtr) (ScreenPtr pScreen, RRCrtcPtr crtc); 222f7df2e56Smrg 223f7df2e56Smrgtypedef Bool (*RRCrtcGetGammaProcPtr) (ScreenPtr pScreen, RRCrtcPtr crtc); 224f7df2e56Smrg 225f7df2e56Smrgtypedef Bool (*RROutputSetPropertyProcPtr) (ScreenPtr pScreen, 226f7df2e56Smrg RROutputPtr output, 227f7df2e56Smrg Atom property, 228f7df2e56Smrg RRPropertyValuePtr value); 229f7df2e56Smrg 230f7df2e56Smrgtypedef Bool (*RROutputValidateModeProcPtr) (ScreenPtr pScreen, 231f7df2e56Smrg RROutputPtr output, 232f7df2e56Smrg RRModePtr mode); 233f7df2e56Smrg 234f7df2e56Smrgtypedef void (*RRModeDestroyProcPtr) (ScreenPtr pScreen, RRModePtr mode); 23505b261ecSmrg 23605b261ecSmrg#endif 23705b261ecSmrg 2384642e01fSmrg#if RANDR_13_INTERFACE 239f7df2e56Smrgtypedef Bool (*RROutputGetPropertyProcPtr) (ScreenPtr pScreen, 240f7df2e56Smrg RROutputPtr output, Atom property); 241f7df2e56Smrgtypedef Bool (*RRGetPanningProcPtr) (ScreenPtr pScrn, 242f7df2e56Smrg RRCrtcPtr crtc, 243f7df2e56Smrg BoxPtr totalArea, 244f7df2e56Smrg BoxPtr trackingArea, INT16 *border); 245f7df2e56Smrgtypedef Bool (*RRSetPanningProcPtr) (ScreenPtr pScrn, 246f7df2e56Smrg RRCrtcPtr crtc, 247f7df2e56Smrg BoxPtr totalArea, 248f7df2e56Smrg BoxPtr trackingArea, INT16 *border); 249f7df2e56Smrg 250f7df2e56Smrg#endif /* RANDR_13_INTERFACE */ 251f7df2e56Smrg 252f7df2e56Smrgtypedef Bool (*RRProviderGetPropertyProcPtr) (ScreenPtr pScreen, 253f7df2e56Smrg RRProviderPtr provider, Atom property); 254f7df2e56Smrgtypedef Bool (*RRProviderSetPropertyProcPtr) (ScreenPtr pScreen, 255f7df2e56Smrg RRProviderPtr provider, 256f7df2e56Smrg Atom property, 257f7df2e56Smrg RRPropertyValuePtr value); 258f7df2e56Smrg 259f7df2e56Smrgtypedef Bool (*RRGetInfoProcPtr) (ScreenPtr pScreen, Rotation * rotations); 260f7df2e56Smrgtypedef Bool (*RRCloseScreenProcPtr) (ScreenPtr pscreen); 261f7df2e56Smrg 262f7df2e56Smrgtypedef Bool (*RRProviderSetOutputSourceProcPtr)(ScreenPtr pScreen, 263f7df2e56Smrg RRProviderPtr provider, 264f7df2e56Smrg RRProviderPtr output_source); 265f7df2e56Smrg 266f7df2e56Smrgtypedef Bool (*RRProviderSetOffloadSinkProcPtr)(ScreenPtr pScreen, 267f7df2e56Smrg RRProviderPtr provider, 268f7df2e56Smrg RRProviderPtr offload_sink); 269f7df2e56Smrg 270f7df2e56Smrg 271f7df2e56Smrgtypedef void (*RRProviderDestroyProcPtr)(ScreenPtr pScreen, 272f7df2e56Smrg RRProviderPtr provider); 27305b261ecSmrg 2747e31ba66Smrg/* Additions for 1.6 */ 2757e31ba66Smrg 2767e31ba66Smrgtypedef int (*RRCreateLeaseProcPtr)(ScreenPtr screen, 2777e31ba66Smrg RRLeasePtr lease, 2787e31ba66Smrg int *fd); 2797e31ba66Smrg 2807e31ba66Smrgtypedef void (*RRTerminateLeaseProcPtr)(ScreenPtr screen, 2817e31ba66Smrg RRLeasePtr lease); 2827e31ba66Smrg 28305b261ecSmrg/* These are for 1.0 compatibility */ 284f7df2e56Smrg 28505b261ecSmrgtypedef struct _rrRefresh { 286f7df2e56Smrg CARD16 rate; 287f7df2e56Smrg RRModePtr mode; 28805b261ecSmrg} RRScreenRate, *RRScreenRatePtr; 28905b261ecSmrg 29005b261ecSmrgtypedef struct _rrScreenSize { 291f7df2e56Smrg int id; 292f7df2e56Smrg short width, height; 293f7df2e56Smrg short mmWidth, mmHeight; 294f7df2e56Smrg int nRates; 29505b261ecSmrg RRScreenRatePtr pRates; 29605b261ecSmrg} RRScreenSize, *RRScreenSizePtr; 29705b261ecSmrg 29805b261ecSmrg#ifdef RANDR_10_INTERFACE 29905b261ecSmrg 300f7df2e56Smrgtypedef Bool (*RRSetConfigProcPtr) (ScreenPtr pScreen, 301f7df2e56Smrg Rotation rotation, 302f7df2e56Smrg int rate, RRScreenSizePtr pSize); 30305b261ecSmrg 30405b261ecSmrg#endif 305f7df2e56Smrg 306f7df2e56Smrgtypedef Bool (*RRCrtcSetScanoutPixmapProcPtr)(RRCrtcPtr crtc, PixmapPtr pixmap); 30705b261ecSmrg 3087e31ba66Smrgtypedef Bool (*RRStartFlippingPixmapTrackingProcPtr)(RRCrtcPtr, DrawablePtr, 3097e31ba66Smrg PixmapPtr, PixmapPtr, 3107e31ba66Smrg int x, int y, 3117e31ba66Smrg int dst_x, int dst_y, 3127e31ba66Smrg Rotation rotation); 3137e31ba66Smrg 3147e31ba66Smrgtypedef Bool (*RREnableSharedPixmapFlippingProcPtr)(RRCrtcPtr, 3157e31ba66Smrg PixmapPtr front, 3167e31ba66Smrg PixmapPtr back); 3177e31ba66Smrg 3187e31ba66Smrgtypedef void (*RRDisableSharedPixmapFlippingProcPtr)(RRCrtcPtr); 3197e31ba66Smrg 3207e31ba66Smrg 32105b261ecSmrgtypedef struct _rrScrPriv { 32205b261ecSmrg /* 32305b261ecSmrg * 'public' part of the structure; DDXen fill this in 32405b261ecSmrg * as they initialize 32505b261ecSmrg */ 32605b261ecSmrg#if RANDR_10_INTERFACE 327f7df2e56Smrg RRSetConfigProcPtr rrSetConfig; 32805b261ecSmrg#endif 329f7df2e56Smrg RRGetInfoProcPtr rrGetInfo; 33005b261ecSmrg#if RANDR_12_INTERFACE 331f7df2e56Smrg RRScreenSetSizeProcPtr rrScreenSetSize; 332f7df2e56Smrg RRCrtcSetProcPtr rrCrtcSet; 333f7df2e56Smrg RRCrtcSetGammaProcPtr rrCrtcSetGamma; 334f7df2e56Smrg RRCrtcGetGammaProcPtr rrCrtcGetGamma; 335f7df2e56Smrg RROutputSetPropertyProcPtr rrOutputSetProperty; 336f7df2e56Smrg RROutputValidateModeProcPtr rrOutputValidateMode; 337f7df2e56Smrg RRModeDestroyProcPtr rrModeDestroy; 33805b261ecSmrg#endif 3394642e01fSmrg#if RANDR_13_INTERFACE 340f7df2e56Smrg RROutputGetPropertyProcPtr rrOutputGetProperty; 341f7df2e56Smrg RRGetPanningProcPtr rrGetPanning; 342f7df2e56Smrg RRSetPanningProcPtr rrSetPanning; 3434642e01fSmrg#endif 344f7df2e56Smrg /* TODO #if RANDR_15_INTERFACE */ 345f7df2e56Smrg RRCrtcSetScanoutPixmapProcPtr rrCrtcSetScanoutPixmap; 346f7df2e56Smrg 3477e31ba66Smrg RRStartFlippingPixmapTrackingProcPtr rrStartFlippingPixmapTracking; 3487e31ba66Smrg RREnableSharedPixmapFlippingProcPtr rrEnableSharedPixmapFlipping; 3497e31ba66Smrg RRDisableSharedPixmapFlippingProcPtr rrDisableSharedPixmapFlipping; 3507e31ba66Smrg 351f7df2e56Smrg RRProviderSetOutputSourceProcPtr rrProviderSetOutputSource; 352f7df2e56Smrg RRProviderSetOffloadSinkProcPtr rrProviderSetOffloadSink; 353f7df2e56Smrg RRProviderGetPropertyProcPtr rrProviderGetProperty; 354f7df2e56Smrg RRProviderSetPropertyProcPtr rrProviderSetProperty; 3557e31ba66Smrg 3567e31ba66Smrg RRCreateLeaseProcPtr rrCreateLease; 3577e31ba66Smrg RRTerminateLeaseProcPtr rrTerminateLease; 3587e31ba66Smrg 35905b261ecSmrg /* 36005b261ecSmrg * Private part of the structure; not considered part of the ABI 36105b261ecSmrg */ 362f7df2e56Smrg TimeStamp lastSetTime; /* last changed by client */ 363f7df2e56Smrg TimeStamp lastConfigTime; /* possible configs changed */ 364f7df2e56Smrg RRCloseScreenProcPtr CloseScreen; 36505b261ecSmrg 366f7df2e56Smrg Bool changed; /* some config changed */ 367f7df2e56Smrg Bool configChanged; /* configuration changed */ 368f7df2e56Smrg Bool layoutChanged; /* screen layout changed */ 369f7df2e56Smrg Bool resourcesChanged; /* screen resources change */ 3707e31ba66Smrg Bool leasesChanged; /* leases change */ 37105b261ecSmrg 372f7df2e56Smrg CARD16 minWidth, minHeight; 373f7df2e56Smrg CARD16 maxWidth, maxHeight; 374f7df2e56Smrg CARD16 width, height; /* last known screen size */ 375f7df2e56Smrg CARD16 mmWidth, mmHeight; /* last known screen size */ 37605b261ecSmrg 377f7df2e56Smrg int numOutputs; 378f7df2e56Smrg RROutputPtr *outputs; 379f7df2e56Smrg RROutputPtr primaryOutput; 38005b261ecSmrg 381f7df2e56Smrg int numCrtcs; 382f7df2e56Smrg RRCrtcPtr *crtcs; 38305b261ecSmrg 38405b261ecSmrg /* Last known pointer position */ 385f7df2e56Smrg RRCrtcPtr pointerCrtc; 38605b261ecSmrg 38705b261ecSmrg#ifdef RANDR_10_INTERFACE 38805b261ecSmrg /* 38905b261ecSmrg * Configuration information 39005b261ecSmrg */ 391f7df2e56Smrg Rotation rotations; 392f7df2e56Smrg CARD16 reqWidth, reqHeight; 393f7df2e56Smrg 394f7df2e56Smrg int nSizes; 395f7df2e56Smrg RRScreenSizePtr pSizes; 396f7df2e56Smrg 397f7df2e56Smrg Rotation rotation; 398f7df2e56Smrg int rate; 399f7df2e56Smrg int size; 40005b261ecSmrg#endif 401f7df2e56Smrg Bool discontiguous; 402f7df2e56Smrg 403f7df2e56Smrg RRProviderPtr provider; 404f7df2e56Smrg 405f7df2e56Smrg RRProviderDestroyProcPtr rrProviderDestroy; 406f7df2e56Smrg 407f7df2e56Smrg int numMonitors; 408f7df2e56Smrg RRMonitorPtr *monitors; 409f7df2e56Smrg 4107e31ba66Smrg struct xorg_list leases; 41105b261ecSmrg} rrScrPrivRec, *rrScrPrivPtr; 41205b261ecSmrg 4136747b715Smrgextern _X_EXPORT DevPrivateKeyRec rrPrivKeyRec; 414f7df2e56Smrg 4156747b715Smrg#define rrPrivKey (&rrPrivKeyRec) 41605b261ecSmrg 4174642e01fSmrg#define rrGetScrPriv(pScr) ((rrScrPrivPtr)dixLookupPrivate(&(pScr)->devPrivates, rrPrivKey)) 41805b261ecSmrg#define rrScrPriv(pScr) rrScrPrivPtr pScrPriv = rrGetScrPriv(pScr) 4194642e01fSmrg#define SetRRScreen(s,p) dixSetPrivate(&(s)->devPrivates, rrPrivKey, p) 42005b261ecSmrg 42105b261ecSmrg/* 42205b261ecSmrg * each window has a list of clients requesting 42305b261ecSmrg * RRNotify events. Each client has a resource 42405b261ecSmrg * for each window it selects RRNotify input for, 42505b261ecSmrg * this resource is used to delete the RRNotifyRec 42605b261ecSmrg * entry from the per-window queue. 42705b261ecSmrg */ 42805b261ecSmrg 42905b261ecSmrgtypedef struct _RREvent *RREventPtr; 43005b261ecSmrg 43105b261ecSmrgtypedef struct _RREvent { 432f7df2e56Smrg RREventPtr next; 433f7df2e56Smrg ClientPtr client; 434f7df2e56Smrg WindowPtr window; 435f7df2e56Smrg XID clientResource; 436f7df2e56Smrg int mask; 43705b261ecSmrg} RREventRec; 43805b261ecSmrg 43905b261ecSmrgtypedef struct _RRTimes { 440f7df2e56Smrg TimeStamp setTime; 441f7df2e56Smrg TimeStamp configTime; 44205b261ecSmrg} RRTimesRec, *RRTimesPtr; 44305b261ecSmrg 44405b261ecSmrgtypedef struct _RRClient { 445f7df2e56Smrg int major_version; 446f7df2e56Smrg int minor_version; 44705b261ecSmrg/* RRTimesRec times[0]; */ 44805b261ecSmrg} RRClientRec, *RRClientPtr; 44905b261ecSmrg 450f7df2e56Smrgextern RESTYPE RRClientType, RREventType; /* resource types for event masks */ 451f7df2e56Smrgextern DevPrivateKeyRec RRClientPrivateKeyRec; 452f7df2e56Smrg 4536747b715Smrg#define RRClientPrivateKey (&RRClientPrivateKeyRec) 4547e31ba66Smrgextern _X_EXPORT RESTYPE RRCrtcType, RRModeType, RROutputType, RRProviderType, RRLeaseType; 4556747b715Smrg 4566747b715Smrg#define VERIFY_RR_OUTPUT(id, ptr, a)\ 4576747b715Smrg {\ 458f7df2e56Smrg int rc = dixLookupResourceByType((void **)&(ptr), id,\ 4596747b715Smrg RROutputType, client, a);\ 4606747b715Smrg if (rc != Success) {\ 4616747b715Smrg client->errorValue = id;\ 4626747b715Smrg return rc;\ 4636747b715Smrg }\ 4646747b715Smrg } 4656747b715Smrg 4666747b715Smrg#define VERIFY_RR_CRTC(id, ptr, a)\ 4676747b715Smrg {\ 468f7df2e56Smrg int rc = dixLookupResourceByType((void **)&(ptr), id,\ 4696747b715Smrg RRCrtcType, client, a);\ 4706747b715Smrg if (rc != Success) {\ 4716747b715Smrg client->errorValue = id;\ 4726747b715Smrg return rc;\ 4736747b715Smrg }\ 4746747b715Smrg } 4756747b715Smrg 4766747b715Smrg#define VERIFY_RR_MODE(id, ptr, a)\ 4776747b715Smrg {\ 478f7df2e56Smrg int rc = dixLookupResourceByType((void **)&(ptr), id,\ 4796747b715Smrg RRModeType, client, a);\ 4806747b715Smrg if (rc != Success) {\ 4816747b715Smrg client->errorValue = id;\ 4826747b715Smrg return rc;\ 4836747b715Smrg }\ 4846747b715Smrg } 48505b261ecSmrg 486f7df2e56Smrg#define VERIFY_RR_PROVIDER(id, ptr, a)\ 487f7df2e56Smrg {\ 488f7df2e56Smrg int rc = dixLookupResourceByType((void **)&(ptr), id,\ 489f7df2e56Smrg RRProviderType, client, a);\ 490f7df2e56Smrg if (rc != Success) {\ 491f7df2e56Smrg client->errorValue = id;\ 492f7df2e56Smrg return rc;\ 493f7df2e56Smrg }\ 494f7df2e56Smrg } 495f7df2e56Smrg 4967e31ba66Smrg#define VERIFY_RR_LEASE(id, ptr, a)\ 4977e31ba66Smrg {\ 4987e31ba66Smrg int rc = dixLookupResourceByType((void **)&(ptr), id,\ 4997e31ba66Smrg RRLeaseType, client, a);\ 5007e31ba66Smrg if (rc != Success) {\ 5017e31ba66Smrg client->errorValue = id;\ 5027e31ba66Smrg return rc;\ 5037e31ba66Smrg }\ 5047e31ba66Smrg } 5057e31ba66Smrg 5064642e01fSmrg#define GetRRClient(pClient) ((RRClientPtr)dixLookupPrivate(&(pClient)->devPrivates, RRClientPrivateKey)) 50705b261ecSmrg#define rrClientPriv(pClient) RRClientPtr pRRClient = GetRRClient(pClient) 50805b261ecSmrg 50905b261ecSmrg#ifdef RANDR_12_INTERFACE 51005b261ecSmrg/* 51105b261ecSmrg * Set the range of sizes for the screen 51205b261ecSmrg */ 5136747b715Smrgextern _X_EXPORT void 514f7df2e56Smrg 515f7df2e56SmrgRRScreenSetSizeRange(ScreenPtr pScreen, 516f7df2e56Smrg CARD16 minWidth, 517f7df2e56Smrg CARD16 minHeight, CARD16 maxWidth, CARD16 maxHeight); 51805b261ecSmrg#endif 51905b261ecSmrg 52005b261ecSmrg/* rrscreen.c */ 52105b261ecSmrg/* 52205b261ecSmrg * Notify the extension that the screen size has been changed. 52305b261ecSmrg * The driver is responsible for calling this whenever it has changed 52405b261ecSmrg * the size of the screen 52505b261ecSmrg */ 5266747b715Smrgextern _X_EXPORT void 527f7df2e56Smrg RRScreenSizeNotify(ScreenPtr pScreen); 52805b261ecSmrg 52905b261ecSmrg/* 53005b261ecSmrg * Request that the screen be resized 53105b261ecSmrg */ 5326747b715Smrgextern _X_EXPORT Bool 533f7df2e56Smrg 534f7df2e56SmrgRRScreenSizeSet(ScreenPtr pScreen, 535f7df2e56Smrg CARD16 width, CARD16 height, CARD32 mmWidth, CARD32 mmHeight); 53605b261ecSmrg 53705b261ecSmrg/* 53805b261ecSmrg * Send ConfigureNotify event to root window when 'something' happens 53905b261ecSmrg */ 5406747b715Smrgextern _X_EXPORT void 541f7df2e56Smrg RRSendConfigNotify(ScreenPtr pScreen); 542f7df2e56Smrg 54305b261ecSmrg/* 54405b261ecSmrg * screen dispatch 54505b261ecSmrg */ 5466747b715Smrgextern _X_EXPORT int 547f7df2e56Smrg ProcRRGetScreenSizeRange(ClientPtr client); 54805b261ecSmrg 5496747b715Smrgextern _X_EXPORT int 550f7df2e56Smrg ProcRRSetScreenSize(ClientPtr client); 55105b261ecSmrg 5526747b715Smrgextern _X_EXPORT int 553f7df2e56Smrg ProcRRGetScreenResources(ClientPtr client); 55405b261ecSmrg 5556747b715Smrgextern _X_EXPORT int 556f7df2e56Smrg ProcRRGetScreenResourcesCurrent(ClientPtr client); 5574642e01fSmrg 5586747b715Smrgextern _X_EXPORT int 559f7df2e56Smrg ProcRRSetScreenConfig(ClientPtr client); 56005b261ecSmrg 5616747b715Smrgextern _X_EXPORT int 562f7df2e56Smrg ProcRRGetScreenInfo(ClientPtr client); 56305b261ecSmrg 56405b261ecSmrg/* 56505b261ecSmrg * Deliver a ScreenNotify event 56605b261ecSmrg */ 5676747b715Smrgextern _X_EXPORT void 568f7df2e56Smrg RRDeliverScreenEvent(ClientPtr client, WindowPtr pWin, ScreenPtr pScreen); 569f7df2e56Smrg 570f7df2e56Smrgextern _X_EXPORT void 571f7df2e56Smrg RRResourcesChanged(ScreenPtr pScreen); 572f7df2e56Smrg 57305b261ecSmrg/* randr.c */ 574f7df2e56Smrg/* set a screen change on the primary screen */ 575f7df2e56Smrgextern _X_EXPORT void 576f7df2e56SmrgRRSetChanged(ScreenPtr pScreen); 577f7df2e56Smrg 57805b261ecSmrg/* 57905b261ecSmrg * Send all pending events 58005b261ecSmrg */ 5816747b715Smrgextern _X_EXPORT void 582f7df2e56Smrg RRTellChanged(ScreenPtr pScreen); 58305b261ecSmrg 584051b6151Schristosextern _X_EXPORT void 585051b6151SchristosRRSetChanged (ScreenPtr pScreen); 586051b6151Schristos 58705b261ecSmrg/* 58805b261ecSmrg * Poll the driver for changed information 58905b261ecSmrg */ 5906747b715Smrgextern _X_EXPORT Bool 591f7df2e56Smrg RRGetInfo(ScreenPtr pScreen, Bool force_query); 59205b261ecSmrg 593f7df2e56Smrgextern _X_EXPORT Bool RRInit(void); 59405b261ecSmrg 5956747b715Smrgextern _X_EXPORT Bool RRScreenInit(ScreenPtr pScreen); 59605b261ecSmrg 597f7df2e56Smrgextern _X_EXPORT RROutputPtr RRFirstOutput(ScreenPtr pScreen); 59805b261ecSmrg 5997e31ba66Smrgextern _X_EXPORT Bool RROutputSetNonDesktop(RROutputPtr output, Bool non_desktop); 6007e31ba66Smrg 6016747b715Smrgextern _X_EXPORT CARD16 602f7df2e56Smrg RRVerticalRefresh(xRRModeInfo * mode); 60305b261ecSmrg 604f7df2e56Smrg#ifdef RANDR_10_INTERFACE 60505b261ecSmrg/* 60605b261ecSmrg * This is the old interface, deprecated but left 60705b261ecSmrg * around for compatibility 60805b261ecSmrg */ 60905b261ecSmrg 61005b261ecSmrg/* 61105b261ecSmrg * Then, register the specific size with the screen 61205b261ecSmrg */ 61305b261ecSmrg 6146747b715Smrgextern _X_EXPORT RRScreenSizePtr 615f7df2e56SmrgRRRegisterSize(ScreenPtr pScreen, 616f7df2e56Smrg short width, short height, short mmWidth, short mmHeight); 61705b261ecSmrg 6186747b715Smrgextern _X_EXPORT Bool 619f7df2e56Smrg RRRegisterRate(ScreenPtr pScreen, RRScreenSizePtr pSize, int rate); 62005b261ecSmrg 62105b261ecSmrg/* 62205b261ecSmrg * Finally, set the current configuration of the screen 62305b261ecSmrg */ 62405b261ecSmrg 6256747b715Smrgextern _X_EXPORT void 62605b261ecSmrg 627f7df2e56SmrgRRSetCurrentConfig(ScreenPtr pScreen, 628f7df2e56Smrg Rotation rotation, int rate, RRScreenSizePtr pSize); 62905b261ecSmrg 630f7df2e56Smrgextern _X_EXPORT Rotation RRGetRotation(ScreenPtr pScreen); 631f7df2e56Smrg 632f7df2e56Smrg#endif 63305b261ecSmrg 63405b261ecSmrg/* rrcrtc.c */ 63505b261ecSmrg 63605b261ecSmrg/* 63705b261ecSmrg * Notify the CRTC of some change; layoutChanged indicates that 63805b261ecSmrg * some position or size element changed 63905b261ecSmrg */ 6406747b715Smrgextern _X_EXPORT void 641f7df2e56Smrg RRCrtcChanged(RRCrtcPtr crtc, Bool layoutChanged); 64205b261ecSmrg 64305b261ecSmrg/* 64405b261ecSmrg * Create a CRTC 64505b261ecSmrg */ 646f7df2e56Smrgextern _X_EXPORT RRCrtcPtr RRCrtcCreate(ScreenPtr pScreen, void *devPrivate); 64705b261ecSmrg 64805b261ecSmrg/* 64905b261ecSmrg * Set the allowed rotations on a CRTC 65005b261ecSmrg */ 6516747b715Smrgextern _X_EXPORT void 652f7df2e56Smrg RRCrtcSetRotations(RRCrtcPtr crtc, Rotation rotations); 65305b261ecSmrg 6544642e01fSmrg/* 6554642e01fSmrg * Set whether transforms are allowed on a CRTC 6564642e01fSmrg */ 6576747b715Smrgextern _X_EXPORT void 658f7df2e56Smrg RRCrtcSetTransformSupport(RRCrtcPtr crtc, Bool transforms); 6594642e01fSmrg 66005b261ecSmrg/* 66105b261ecSmrg * Notify the extension that the Crtc has been reconfigured, 66205b261ecSmrg * the driver calls this whenever it has updated the mode 66305b261ecSmrg */ 6646747b715Smrgextern _X_EXPORT Bool 665f7df2e56Smrg 666f7df2e56SmrgRRCrtcNotify(RRCrtcPtr crtc, 667f7df2e56Smrg RRModePtr mode, 668f7df2e56Smrg int x, 669f7df2e56Smrg int y, 670f7df2e56Smrg Rotation rotation, 671f7df2e56Smrg RRTransformPtr transform, int numOutputs, RROutputPtr * outputs); 67205b261ecSmrg 6736747b715Smrgextern _X_EXPORT void 674f7df2e56Smrg RRDeliverCrtcEvent(ClientPtr client, WindowPtr pWin, RRCrtcPtr crtc); 675f7df2e56Smrg 67605b261ecSmrg/* 67705b261ecSmrg * Request that the Crtc be reconfigured 67805b261ecSmrg */ 6796747b715Smrgextern _X_EXPORT Bool 680f7df2e56Smrg 681f7df2e56SmrgRRCrtcSet(RRCrtcPtr crtc, 682f7df2e56Smrg RRModePtr mode, 683f7df2e56Smrg int x, 684f7df2e56Smrg int y, Rotation rotation, int numOutput, RROutputPtr * outputs); 68505b261ecSmrg 68605b261ecSmrg/* 68705b261ecSmrg * Request that the Crtc gamma be changed 68805b261ecSmrg */ 68905b261ecSmrg 6906747b715Smrgextern _X_EXPORT Bool 691f7df2e56Smrg RRCrtcGammaSet(RRCrtcPtr crtc, CARD16 *red, CARD16 *green, CARD16 *blue); 69205b261ecSmrg 6936747b715Smrg/* 6946747b715Smrg * Request current gamma back from the DDX (if possible). 6956747b715Smrg * This includes gamma size. 6966747b715Smrg */ 697f7df2e56Smrg 6986747b715Smrgextern _X_EXPORT Bool 699f7df2e56Smrg RRCrtcGammaGet(RRCrtcPtr crtc); 7006747b715Smrg 70105b261ecSmrg/* 70205b261ecSmrg * Notify the extension that the Crtc gamma has been changed 70305b261ecSmrg * The driver calls this whenever it has changed the gamma values 70405b261ecSmrg * in the RRCrtcRec 70505b261ecSmrg */ 70605b261ecSmrg 7076747b715Smrgextern _X_EXPORT Bool 708f7df2e56Smrg RRCrtcGammaNotify(RRCrtcPtr crtc); 70905b261ecSmrg 71005b261ecSmrg/* 71105b261ecSmrg * Set the size of the gamma table at server startup time 71205b261ecSmrg */ 71305b261ecSmrg 7146747b715Smrgextern _X_EXPORT Bool 715f7df2e56Smrg RRCrtcGammaSetSize(RRCrtcPtr crtc, int size); 71605b261ecSmrg 71705b261ecSmrg/* 71805b261ecSmrg * Return the area of the frame buffer scanned out by the crtc, 71905b261ecSmrg * taking into account the current mode and rotation 72005b261ecSmrg */ 72105b261ecSmrg 7226747b715Smrgextern _X_EXPORT void 723f7df2e56Smrg RRCrtcGetScanoutSize(RRCrtcPtr crtc, int *width, int *height); 72405b261ecSmrg 7254642e01fSmrg/* 7264642e01fSmrg * Return crtc transform 7274642e01fSmrg */ 728f7df2e56Smrgextern _X_EXPORT RRTransformPtr RRCrtcGetTransform(RRCrtcPtr crtc); 7294642e01fSmrg 7304642e01fSmrg/* 7314642e01fSmrg * Check whether the pending and current transforms are the same 7324642e01fSmrg */ 7336747b715Smrgextern _X_EXPORT Bool 734f7df2e56Smrg RRCrtcPendingTransform(RRCrtcPtr crtc); 7354642e01fSmrg 73605b261ecSmrg/* 73705b261ecSmrg * Destroy a Crtc at shutdown 73805b261ecSmrg */ 7396747b715Smrgextern _X_EXPORT void 740f7df2e56Smrg RRCrtcDestroy(RRCrtcPtr crtc); 7414642e01fSmrg 7424642e01fSmrg/* 7434642e01fSmrg * Set the pending CRTC transformation 7444642e01fSmrg */ 7454642e01fSmrg 7466747b715Smrgextern _X_EXPORT int 747f7df2e56Smrg 748f7df2e56SmrgRRCrtcTransformSet(RRCrtcPtr crtc, 749f7df2e56Smrg PictTransformPtr transform, 750f7df2e56Smrg struct pict_f_transform *f_transform, 751f7df2e56Smrg struct pict_f_transform *f_inverse, 752f7df2e56Smrg char *filter, int filter_len, xFixed * params, int nparams); 7534642e01fSmrg 75405b261ecSmrg/* 75505b261ecSmrg * Initialize crtc type 75605b261ecSmrg */ 7576747b715Smrgextern _X_EXPORT Bool 758f7df2e56Smrg RRCrtcInit(void); 75905b261ecSmrg 7606747b715Smrg/* 7616747b715Smrg * Initialize crtc type error value 7626747b715Smrg */ 7636747b715Smrgextern _X_EXPORT void 764f7df2e56Smrg RRCrtcInitErrorValue(void); 765f7df2e56Smrg 766f7df2e56Smrg/* 767f7df2e56Smrg * Detach and free a scanout pixmap 768f7df2e56Smrg */ 769f7df2e56Smrgextern _X_EXPORT void 770f7df2e56Smrg RRCrtcDetachScanoutPixmap(RRCrtcPtr crtc); 771f7df2e56Smrg 772f7df2e56Smrgextern _X_EXPORT Bool 773f7df2e56Smrg RRReplaceScanoutPixmap(DrawablePtr pDrawable, PixmapPtr pPixmap, Bool enable); 7746747b715Smrg 7757e31ba66Smrg/* 7767e31ba66Smrg * Return if the screen has any scanout_pixmap's attached 7777e31ba66Smrg */ 7787e31ba66Smrgextern _X_EXPORT Bool 7797e31ba66Smrg RRHasScanoutPixmap(ScreenPtr pScreen); 7807e31ba66Smrg 78105b261ecSmrg/* 78205b261ecSmrg * Crtc dispatch 78305b261ecSmrg */ 78405b261ecSmrg 7856747b715Smrgextern _X_EXPORT int 786f7df2e56Smrg ProcRRGetCrtcInfo(ClientPtr client); 78705b261ecSmrg 7886747b715Smrgextern _X_EXPORT int 789f7df2e56Smrg ProcRRSetCrtcConfig(ClientPtr client); 79005b261ecSmrg 7916747b715Smrgextern _X_EXPORT int 792f7df2e56Smrg ProcRRGetCrtcGammaSize(ClientPtr client); 79305b261ecSmrg 7946747b715Smrgextern _X_EXPORT int 795f7df2e56Smrg ProcRRGetCrtcGamma(ClientPtr client); 79605b261ecSmrg 7976747b715Smrgextern _X_EXPORT int 798f7df2e56Smrg ProcRRSetCrtcGamma(ClientPtr client); 79905b261ecSmrg 8006747b715Smrgextern _X_EXPORT int 801f7df2e56Smrg ProcRRSetCrtcTransform(ClientPtr client); 8024642e01fSmrg 8036747b715Smrgextern _X_EXPORT int 804f7df2e56Smrg ProcRRGetCrtcTransform(ClientPtr client); 8054642e01fSmrg 8064642e01fSmrgint 807f7df2e56Smrg ProcRRGetPanning(ClientPtr client); 8084642e01fSmrg 8094642e01fSmrgint 810f7df2e56Smrg ProcRRSetPanning(ClientPtr client); 811f7df2e56Smrg 812f7df2e56Smrgvoid 813f7df2e56Smrg RRConstrainCursorHarder(DeviceIntPtr, ScreenPtr, int, int *, int *); 8144642e01fSmrg 81505b261ecSmrg/* rrdispatch.c */ 8166747b715Smrgextern _X_EXPORT Bool 817f7df2e56Smrg RRClientKnowsRates(ClientPtr pClient); 81805b261ecSmrg 8197e31ba66Smrg/* rrlease.c */ 8207e31ba66Smrgvoid 8217e31ba66SmrgRRDeliverLeaseEvent(ClientPtr client, WindowPtr window); 8227e31ba66Smrg 8237e31ba66Smrgextern _X_EXPORT void 8247e31ba66SmrgRRLeaseTerminated(RRLeasePtr lease); 8257e31ba66Smrg 8267e31ba66Smrgextern _X_EXPORT void 8277e31ba66SmrgRRLeaseFree(RRLeasePtr lease); 8287e31ba66Smrg 8297e31ba66Smrgextern _X_EXPORT Bool 8307e31ba66SmrgRRCrtcIsLeased(RRCrtcPtr crtc); 8317e31ba66Smrg 8327e31ba66Smrgextern _X_EXPORT Bool 8337e31ba66SmrgRROutputIsLeased(RROutputPtr output); 8347e31ba66Smrg 8357e31ba66Smrgvoid 8367e31ba66SmrgRRTerminateLease(RRLeasePtr lease); 8377e31ba66Smrg 8387e31ba66SmrgBool 8397e31ba66SmrgRRLeaseInit(void); 8407e31ba66Smrg 84105b261ecSmrg/* rrmode.c */ 84205b261ecSmrg/* 84305b261ecSmrg * Find, and if necessary, create a mode 84405b261ecSmrg */ 84505b261ecSmrg 846f7df2e56Smrgextern _X_EXPORT RRModePtr RRModeGet(xRRModeInfo * modeInfo, const char *name); 84705b261ecSmrg 84805b261ecSmrg/* 84905b261ecSmrg * Destroy a mode. 85005b261ecSmrg */ 85105b261ecSmrg 8526747b715Smrgextern _X_EXPORT void 853f7df2e56Smrg RRModeDestroy(RRModePtr mode); 85405b261ecSmrg 85505b261ecSmrg/* 85605b261ecSmrg * Return a list of modes that are valid for some output in pScreen 85705b261ecSmrg */ 858f7df2e56Smrgextern _X_EXPORT RRModePtr *RRModesForScreen(ScreenPtr pScreen, int *num_ret); 859f7df2e56Smrg 86005b261ecSmrg/* 86105b261ecSmrg * Initialize mode type 86205b261ecSmrg */ 8636747b715Smrgextern _X_EXPORT Bool 864f7df2e56Smrg RRModeInit(void); 8656747b715Smrg 8666747b715Smrg/* 8676747b715Smrg * Initialize mode type error value 8686747b715Smrg */ 8696747b715Smrgextern _X_EXPORT void 870f7df2e56Smrg RRModeInitErrorValue(void); 871f7df2e56Smrg 8726747b715Smrgextern _X_EXPORT int 873f7df2e56Smrg ProcRRCreateMode(ClientPtr client); 87405b261ecSmrg 8756747b715Smrgextern _X_EXPORT int 876f7df2e56Smrg ProcRRDestroyMode(ClientPtr client); 87705b261ecSmrg 8786747b715Smrgextern _X_EXPORT int 879f7df2e56Smrg ProcRRAddOutputMode(ClientPtr client); 88005b261ecSmrg 8816747b715Smrgextern _X_EXPORT int 882f7df2e56Smrg ProcRRDeleteOutputMode(ClientPtr client); 88305b261ecSmrg 88405b261ecSmrg/* rroutput.c */ 88505b261ecSmrg 88605b261ecSmrg/* 88705b261ecSmrg * Notify the output of some change. configChanged indicates whether 88805b261ecSmrg * any external configuration (mode list, clones, connected status) 88905b261ecSmrg * has changed, or whether the change was strictly internal 89005b261ecSmrg * (which crtc is in use) 89105b261ecSmrg */ 8926747b715Smrgextern _X_EXPORT void 893f7df2e56Smrg RROutputChanged(RROutputPtr output, Bool configChanged); 89405b261ecSmrg 89505b261ecSmrg/* 89605b261ecSmrg * Create an output 89705b261ecSmrg */ 89805b261ecSmrg 8996747b715Smrgextern _X_EXPORT RROutputPtr 900f7df2e56SmrgRROutputCreate(ScreenPtr pScreen, 901f7df2e56Smrg const char *name, int nameLength, void *devPrivate); 90205b261ecSmrg 90305b261ecSmrg/* 90405b261ecSmrg * Notify extension that output parameters have been changed 90505b261ecSmrg */ 9066747b715Smrgextern _X_EXPORT Bool 907f7df2e56Smrg RROutputSetClones(RROutputPtr output, RROutputPtr * clones, int numClones); 90805b261ecSmrg 9096747b715Smrgextern _X_EXPORT Bool 910f7df2e56Smrg 911f7df2e56SmrgRROutputSetModes(RROutputPtr output, 912f7df2e56Smrg RRModePtr * modes, int numModes, int numPreferred); 91305b261ecSmrg 9146747b715Smrgextern _X_EXPORT int 915f7df2e56Smrg RROutputAddUserMode(RROutputPtr output, RRModePtr mode); 91605b261ecSmrg 9176747b715Smrgextern _X_EXPORT int 918f7df2e56Smrg RROutputDeleteUserMode(RROutputPtr output, RRModePtr mode); 91905b261ecSmrg 9206747b715Smrgextern _X_EXPORT Bool 921f7df2e56Smrg RROutputSetCrtcs(RROutputPtr output, RRCrtcPtr * crtcs, int numCrtcs); 92205b261ecSmrg 9236747b715Smrgextern _X_EXPORT Bool 924f7df2e56Smrg RROutputSetConnection(RROutputPtr output, CARD8 connection); 92505b261ecSmrg 9266747b715Smrgextern _X_EXPORT Bool 927f7df2e56Smrg RROutputSetSubpixelOrder(RROutputPtr output, int subpixelOrder); 92805b261ecSmrg 9296747b715Smrgextern _X_EXPORT Bool 930f7df2e56Smrg RROutputSetPhysicalSize(RROutputPtr output, int mmWidth, int mmHeight); 93105b261ecSmrg 9326747b715Smrgextern _X_EXPORT void 933f7df2e56Smrg RRDeliverOutputEvent(ClientPtr client, WindowPtr pWin, RROutputPtr output); 93405b261ecSmrg 9356747b715Smrgextern _X_EXPORT void 936f7df2e56Smrg RROutputDestroy(RROutputPtr output); 93705b261ecSmrg 9386747b715Smrgextern _X_EXPORT int 939f7df2e56Smrg ProcRRGetOutputInfo(ClientPtr client); 94005b261ecSmrg 9416747b715Smrgextern _X_EXPORT int 942f7df2e56Smrg ProcRRSetOutputPrimary(ClientPtr client); 9434642e01fSmrg 9446747b715Smrgextern _X_EXPORT int 945f7df2e56Smrg ProcRRGetOutputPrimary(ClientPtr client); 9464642e01fSmrg 94705b261ecSmrg/* 94805b261ecSmrg * Initialize output type 94905b261ecSmrg */ 9506747b715Smrgextern _X_EXPORT Bool 951f7df2e56Smrg RROutputInit(void); 9526747b715Smrg 9536747b715Smrg/* 9546747b715Smrg * Initialize output type error value 9556747b715Smrg */ 9566747b715Smrgextern _X_EXPORT void 957f7df2e56Smrg RROutputInitErrorValue(void); 958f7df2e56Smrg 95905b261ecSmrg/* rrpointer.c */ 9606747b715Smrgextern _X_EXPORT void 961f7df2e56Smrg RRPointerMoved(ScreenPtr pScreen, int x, int y); 96205b261ecSmrg 9636747b715Smrgextern _X_EXPORT void 964f7df2e56Smrg RRPointerScreenConfigured(ScreenPtr pScreen); 96505b261ecSmrg 96605b261ecSmrg/* rrproperty.c */ 96705b261ecSmrg 9686747b715Smrgextern _X_EXPORT void 969f7df2e56Smrg RRDeleteAllOutputProperties(RROutputPtr output); 97005b261ecSmrg 9716747b715Smrgextern _X_EXPORT RRPropertyValuePtr 972f7df2e56SmrgRRGetOutputProperty(RROutputPtr output, Atom property, Bool pending); 97305b261ecSmrg 9746747b715Smrgextern _X_EXPORT RRPropertyPtr 975f7df2e56SmrgRRQueryOutputProperty(RROutputPtr output, Atom property); 976f7df2e56Smrg 9776747b715Smrgextern _X_EXPORT void 978f7df2e56Smrg RRDeleteOutputProperty(RROutputPtr output, Atom property); 97905b261ecSmrg 9806747b715Smrgextern _X_EXPORT Bool 981f7df2e56Smrg RRPostPendingProperties(RROutputPtr output); 982f7df2e56Smrg 9836747b715Smrgextern _X_EXPORT int 984f7df2e56Smrg 985f7df2e56SmrgRRChangeOutputProperty(RROutputPtr output, Atom property, Atom type, 986f7df2e56Smrg int format, int mode, unsigned long len, 9877e31ba66Smrg const void *value, Bool sendevent, Bool pending); 98805b261ecSmrg 9896747b715Smrgextern _X_EXPORT int 990f7df2e56Smrg 991f7df2e56SmrgRRConfigureOutputProperty(RROutputPtr output, Atom property, 992f7df2e56Smrg Bool pending, Bool range, Bool immutable, 9937e31ba66Smrg int num_values, const INT32 *values); 9946747b715Smrgextern _X_EXPORT int 995f7df2e56Smrg ProcRRChangeOutputProperty(ClientPtr client); 99605b261ecSmrg 9976747b715Smrgextern _X_EXPORT int 998f7df2e56Smrg ProcRRGetOutputProperty(ClientPtr client); 99905b261ecSmrg 10006747b715Smrgextern _X_EXPORT int 1001f7df2e56Smrg ProcRRListOutputProperties(ClientPtr client); 100205b261ecSmrg 10036747b715Smrgextern _X_EXPORT int 1004f7df2e56Smrg ProcRRQueryOutputProperty(ClientPtr client); 100505b261ecSmrg 10066747b715Smrgextern _X_EXPORT int 1007f7df2e56Smrg ProcRRConfigureOutputProperty(ClientPtr client); 100805b261ecSmrg 10096747b715Smrgextern _X_EXPORT int 1010f7df2e56Smrg ProcRRDeleteOutputProperty(ClientPtr client); 1011f7df2e56Smrg 1012f7df2e56Smrg/* rrprovider.c */ 10137e31ba66Smrg#define PRIME_SYNC_PROP "PRIME Synchronization" 1014f7df2e56Smrgextern _X_EXPORT void 1015f7df2e56SmrgRRProviderInitErrorValue(void); 101605b261ecSmrg 1017f7df2e56Smrgextern _X_EXPORT int 1018f7df2e56SmrgProcRRGetProviders(ClientPtr client); 1019f7df2e56Smrg 1020f7df2e56Smrgextern _X_EXPORT int 1021f7df2e56SmrgProcRRGetProviderInfo(ClientPtr client); 1022f7df2e56Smrg 1023f7df2e56Smrgextern _X_EXPORT int 1024f7df2e56SmrgProcRRSetProviderOutputSource(ClientPtr client); 1025f7df2e56Smrg 1026f7df2e56Smrgextern _X_EXPORT int 1027f7df2e56SmrgProcRRSetProviderOffloadSink(ClientPtr client); 1028f7df2e56Smrg 1029f7df2e56Smrgextern _X_EXPORT Bool 1030f7df2e56SmrgRRProviderInit(void); 1031f7df2e56Smrg 1032f7df2e56Smrgextern _X_EXPORT RRProviderPtr 1033f7df2e56SmrgRRProviderCreate(ScreenPtr pScreen, const char *name, 1034f7df2e56Smrg int nameLength); 1035f7df2e56Smrg 1036f7df2e56Smrgextern _X_EXPORT void 1037f7df2e56SmrgRRProviderDestroy (RRProviderPtr provider); 1038f7df2e56Smrg 1039f7df2e56Smrgextern _X_EXPORT void 1040f7df2e56SmrgRRProviderSetCapabilities(RRProviderPtr provider, uint32_t capabilities); 1041f7df2e56Smrg 1042f7df2e56Smrgextern _X_EXPORT Bool 1043f7df2e56SmrgRRProviderLookup(XID id, RRProviderPtr *provider_p); 1044f7df2e56Smrg 1045f7df2e56Smrgextern _X_EXPORT void 1046f7df2e56SmrgRRDeliverProviderEvent(ClientPtr client, WindowPtr pWin, RRProviderPtr provider); 1047f7df2e56Smrg 1048f7df2e56Smrg/* rrproviderproperty.c */ 1049f7df2e56Smrg 1050f7df2e56Smrgextern _X_EXPORT void 1051f7df2e56Smrg RRDeleteAllProviderProperties(RRProviderPtr provider); 1052f7df2e56Smrg 1053f7df2e56Smrgextern _X_EXPORT RRPropertyValuePtr 1054f7df2e56Smrg RRGetProviderProperty(RRProviderPtr provider, Atom property, Bool pending); 1055f7df2e56Smrg 1056f7df2e56Smrgextern _X_EXPORT RRPropertyPtr 1057f7df2e56Smrg RRQueryProviderProperty(RRProviderPtr provider, Atom property); 1058f7df2e56Smrg 1059f7df2e56Smrgextern _X_EXPORT void 1060f7df2e56Smrg RRDeleteProviderProperty(RRProviderPtr provider, Atom property); 1061f7df2e56Smrg 1062f7df2e56Smrgextern _X_EXPORT int 1063f7df2e56SmrgRRChangeProviderProperty(RRProviderPtr provider, Atom property, Atom type, 1064f7df2e56Smrg int format, int mode, unsigned long len, 1065f7df2e56Smrg void *value, Bool sendevent, Bool pending); 1066f7df2e56Smrg 1067f7df2e56Smrgextern _X_EXPORT int 1068f7df2e56Smrg RRConfigureProviderProperty(RRProviderPtr provider, Atom property, 1069f7df2e56Smrg Bool pending, Bool range, Bool immutable, 1070f7df2e56Smrg int num_values, INT32 *values); 1071f7df2e56Smrg 1072f7df2e56Smrgextern _X_EXPORT Bool 1073f7df2e56Smrg RRPostProviderPendingProperties(RRProviderPtr provider); 1074f7df2e56Smrg 1075f7df2e56Smrgextern _X_EXPORT int 1076f7df2e56Smrg ProcRRGetProviderProperty(ClientPtr client); 1077f7df2e56Smrg 1078f7df2e56Smrgextern _X_EXPORT int 1079f7df2e56Smrg ProcRRListProviderProperties(ClientPtr client); 1080f7df2e56Smrg 1081f7df2e56Smrgextern _X_EXPORT int 1082f7df2e56Smrg ProcRRQueryProviderProperty(ClientPtr client); 1083f7df2e56Smrg 1084f7df2e56Smrgextern _X_EXPORT int 1085f7df2e56SmrgProcRRConfigureProviderProperty(ClientPtr client); 1086f7df2e56Smrg 1087f7df2e56Smrgextern _X_EXPORT int 1088f7df2e56SmrgProcRRChangeProviderProperty(ClientPtr client); 1089f7df2e56Smrg 1090f7df2e56Smrgextern _X_EXPORT int 1091f7df2e56Smrg ProcRRDeleteProviderProperty(ClientPtr client); 109205b261ecSmrg/* rrxinerama.c */ 10936747b715Smrg#ifdef XINERAMA 10946747b715Smrgextern _X_EXPORT void 1095f7df2e56Smrg RRXineramaExtensionInit(void); 10966747b715Smrg#endif 109705b261ecSmrg 1098f7df2e56Smrgvoid 1099f7df2e56SmrgRRMonitorInit(ScreenPtr screen); 1100f7df2e56Smrg 1101f7df2e56SmrgBool 1102f7df2e56SmrgRRMonitorMakeList(ScreenPtr screen, Bool get_active, RRMonitorPtr *monitors_ret, int *nmon_ret); 1103f7df2e56Smrg 1104f7df2e56Smrgint 1105f7df2e56SmrgRRMonitorCountList(ScreenPtr screen); 1106f7df2e56Smrg 1107f7df2e56Smrgvoid 1108f7df2e56SmrgRRMonitorFreeList(RRMonitorPtr monitors, int nmon); 1109f7df2e56Smrg 1110f7df2e56Smrgvoid 1111f7df2e56SmrgRRMonitorClose(ScreenPtr screen); 1112f7df2e56Smrg 1113f7df2e56SmrgRRMonitorPtr 1114f7df2e56SmrgRRMonitorAlloc(int noutput); 1115f7df2e56Smrg 1116f7df2e56Smrgint 1117f7df2e56SmrgRRMonitorAdd(ClientPtr client, ScreenPtr screen, RRMonitorPtr monitor); 1118f7df2e56Smrg 1119f7df2e56Smrgvoid 1120f7df2e56SmrgRRMonitorFree(RRMonitorPtr monitor); 1121f7df2e56Smrg 1122f7df2e56Smrgint 1123f7df2e56SmrgProcRRGetMonitors(ClientPtr client); 1124f7df2e56Smrg 1125f7df2e56Smrgint 1126f7df2e56SmrgProcRRSetMonitor(ClientPtr client); 1127f7df2e56Smrg 1128f7df2e56Smrgint 1129f7df2e56SmrgProcRRDeleteMonitor(ClientPtr client); 1130f7df2e56Smrg 11317e31ba66Smrgint 11327e31ba66SmrgProcRRCreateLease(ClientPtr client); 11337e31ba66Smrg 11347e31ba66Smrgint 11357e31ba66SmrgProcRRFreeLease(ClientPtr client); 11367e31ba66Smrg 1137f7df2e56Smrg#endif /* _RANDRSTR_H_ */ 113805b261ecSmrg 113905b261ecSmrg/* 1140f7df2e56Smrg 114105b261ecSmrgrandr extension implementation structure 114205b261ecSmrg 114305b261ecSmrgQuery state: 114405b261ecSmrg ProcRRGetScreenInfo/ProcRRGetScreenResources 114505b261ecSmrg RRGetInfo 1146f7df2e56Smrg 114705b261ecSmrg • Request configuration from driver, either 1.0 or 1.2 style 114805b261ecSmrg • These functions only record state changes, all 114905b261ecSmrg other actions are pended until RRTellChanged is called 1150f7df2e56Smrg 115105b261ecSmrg ->rrGetInfo 115205b261ecSmrg 1.0: 115305b261ecSmrg RRRegisterSize 115405b261ecSmrg RRRegisterRate 115505b261ecSmrg RRSetCurrentConfig 115605b261ecSmrg 1.2: 115705b261ecSmrg RRScreenSetSizeRange 115805b261ecSmrg RROutputSetCrtcs 115905b261ecSmrg RRModeGet 116005b261ecSmrg RROutputSetModes 116105b261ecSmrg RROutputSetConnection 116205b261ecSmrg RROutputSetSubpixelOrder 116305b261ecSmrg RROutputSetClones 116405b261ecSmrg RRCrtcNotify 1165f7df2e56Smrg 116605b261ecSmrg • Must delay scanning configuration until after ->rrGetInfo returns 116705b261ecSmrg because some drivers will call SetCurrentConfig in the middle 116805b261ecSmrg of the ->rrGetInfo operation. 1169f7df2e56Smrg 117005b261ecSmrg 1.0: 117105b261ecSmrg 117205b261ecSmrg • Scan old configuration, mirror to new structures 1173f7df2e56Smrg 117405b261ecSmrg RRScanOldConfig 117505b261ecSmrg RRCrtcCreate 117605b261ecSmrg RROutputCreate 117705b261ecSmrg RROutputSetCrtcs 117805b261ecSmrg RROutputSetConnection 117905b261ecSmrg RROutputSetSubpixelOrder 118005b261ecSmrg RROldModeAdd • This adds modes one-at-a-time 118105b261ecSmrg RRModeGet 118205b261ecSmrg RRCrtcNotify 1183f7df2e56Smrg 118405b261ecSmrg • send events, reset pointer if necessary 1185f7df2e56Smrg 118605b261ecSmrg RRTellChanged 118705b261ecSmrg WalkTree (sending events) 1188f7df2e56Smrg 118905b261ecSmrg • when layout has changed: 119005b261ecSmrg RRPointerScreenConfigured 119105b261ecSmrg RRSendConfigNotify 1192f7df2e56Smrg 119305b261ecSmrgAsynchronous state setting (1.2 only) 119405b261ecSmrg When setting state asynchronously, the driver invokes the 119505b261ecSmrg ->rrGetInfo function and then calls RRTellChanged to flush 119605b261ecSmrg the changes to the clients and reset pointer if necessary 119705b261ecSmrg 119805b261ecSmrgSet state 119905b261ecSmrg 120005b261ecSmrg ProcRRSetScreenConfig 120105b261ecSmrg RRCrtcSet 120205b261ecSmrg 1.2: 120305b261ecSmrg ->rrCrtcSet 120405b261ecSmrg RRCrtcNotify 120505b261ecSmrg 1.0: 120605b261ecSmrg ->rrSetConfig 120705b261ecSmrg RRCrtcNotify 120805b261ecSmrg RRTellChanged 120905b261ecSmrg */ 1210