randrstr.h revision d44ca368
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 62b150493bSchristos/* All also defined in <X11/extensions/randrproto.h> */ 63b150493bSchristos#ifndef RROutput 64b150493bSchristos#define RROutput CARD32 65b150493bSchristos#define RRMode CARD32 66b150493bSchristos#define RRCrtc CARD32 67b150493bSchristos#define RRProvider CARD32 68b150493bSchristos#define RRModeFlags CARD32 69b150493bSchristos#define RRLease CARD32 70b150493bSchristos#endif 7105b261ecSmrg 72f7df2e56Smrgextern int RREventBase, RRErrorBase; 73f7df2e56Smrg 74f7df2e56Smrgextern int (*ProcRandrVector[RRNumberRequests]) (ClientPtr); 75f7df2e56Smrgextern int (*SProcRandrVector[RRNumberRequests]) (ClientPtr); 7605b261ecSmrg 7705b261ecSmrg/* 7805b261ecSmrg * Modeline for a monitor. Name follows directly after this struct 7905b261ecSmrg */ 8005b261ecSmrg 8105b261ecSmrg#define RRModeName(pMode) ((char *) (pMode + 1)) 82f7df2e56Smrgtypedef struct _rrMode RRModeRec, *RRModePtr; 83f7df2e56Smrgtypedef struct _rrPropertyValue RRPropertyValueRec, *RRPropertyValuePtr; 84f7df2e56Smrgtypedef struct _rrProperty RRPropertyRec, *RRPropertyPtr; 85f7df2e56Smrgtypedef struct _rrCrtc RRCrtcRec, *RRCrtcPtr; 86f7df2e56Smrgtypedef struct _rrOutput RROutputRec, *RROutputPtr; 87f7df2e56Smrgtypedef struct _rrProvider RRProviderRec, *RRProviderPtr; 88f7df2e56Smrgtypedef struct _rrMonitor RRMonitorRec, *RRMonitorPtr; 897e31ba66Smrgtypedef struct _rrLease RRLeaseRec, *RRLeasePtr; 9005b261ecSmrg 9105b261ecSmrgstruct _rrMode { 92f7df2e56Smrg int refcnt; 93f7df2e56Smrg xRRModeInfo mode; 94f7df2e56Smrg char *name; 95f7df2e56Smrg ScreenPtr userScreen; 9605b261ecSmrg}; 9705b261ecSmrg 9805b261ecSmrgstruct _rrPropertyValue { 99f7df2e56Smrg Atom type; /* ignored by server */ 100f7df2e56Smrg short format; /* format of data for swapping - 8,16,32 */ 101f7df2e56Smrg long size; /* size of data in (format/8) bytes */ 102f7df2e56Smrg void *data; /* private to client */ 10305b261ecSmrg}; 10405b261ecSmrg 10505b261ecSmrgstruct _rrProperty { 106f7df2e56Smrg RRPropertyPtr next; 107f7df2e56Smrg ATOM propertyName; 108f7df2e56Smrg Bool is_pending; 109f7df2e56Smrg Bool range; 110f7df2e56Smrg Bool immutable; 111f7df2e56Smrg int num_valid; 112f7df2e56Smrg INT32 *valid_values; 113f7df2e56Smrg RRPropertyValueRec current, pending; 11405b261ecSmrg}; 11505b261ecSmrg 11605b261ecSmrgstruct _rrCrtc { 117f7df2e56Smrg RRCrtc id; 118f7df2e56Smrg ScreenPtr pScreen; 119f7df2e56Smrg RRModePtr mode; 120f7df2e56Smrg int x, y; 121f7df2e56Smrg Rotation rotation; 122f7df2e56Smrg Rotation rotations; 123f7df2e56Smrg Bool changed; 124f7df2e56Smrg int numOutputs; 125f7df2e56Smrg RROutputPtr *outputs; 126f7df2e56Smrg int gammaSize; 127f7df2e56Smrg CARD16 *gammaRed; 128f7df2e56Smrg CARD16 *gammaBlue; 129f7df2e56Smrg CARD16 *gammaGreen; 130f7df2e56Smrg void *devPrivate; 131f7df2e56Smrg Bool transforms; 132f7df2e56Smrg RRTransformRec client_pending_transform; 133f7df2e56Smrg RRTransformRec client_current_transform; 134f7df2e56Smrg PictTransform transform; 1354642e01fSmrg struct pict_f_transform f_transform; 1364642e01fSmrg struct pict_f_transform f_inverse; 137f7df2e56Smrg 138f7df2e56Smrg PixmapPtr scanout_pixmap; 1397e31ba66Smrg PixmapPtr scanout_pixmap_back; 14005b261ecSmrg}; 14105b261ecSmrg 14205b261ecSmrgstruct _rrOutput { 143f7df2e56Smrg RROutput id; 144f7df2e56Smrg ScreenPtr pScreen; 145f7df2e56Smrg char *name; 146f7df2e56Smrg int nameLength; 147f7df2e56Smrg CARD8 connection; 148f7df2e56Smrg CARD8 subpixelOrder; 149f7df2e56Smrg int mmWidth; 150f7df2e56Smrg int mmHeight; 151f7df2e56Smrg RRCrtcPtr crtc; 152f7df2e56Smrg int numCrtcs; 153f7df2e56Smrg RRCrtcPtr *crtcs; 154f7df2e56Smrg int numClones; 155f7df2e56Smrg RROutputPtr *clones; 156f7df2e56Smrg int numModes; 157f7df2e56Smrg int numPreferred; 158f7df2e56Smrg RRModePtr *modes; 159f7df2e56Smrg int numUserModes; 160f7df2e56Smrg RRModePtr *userModes; 161f7df2e56Smrg Bool changed; 1627e31ba66Smrg Bool nonDesktop; 163f7df2e56Smrg RRPropertyPtr properties; 164f7df2e56Smrg Bool pendingProperties; 165f7df2e56Smrg void *devPrivate; 166f7df2e56Smrg}; 167f7df2e56Smrg 168f7df2e56Smrgstruct _rrProvider { 169f7df2e56Smrg RRProvider id; 170f7df2e56Smrg ScreenPtr pScreen; 171f7df2e56Smrg uint32_t capabilities; 172f7df2e56Smrg char *name; 173f7df2e56Smrg int nameLength; 174f7df2e56Smrg RRPropertyPtr properties; 175f7df2e56Smrg Bool pendingProperties; 176f7df2e56Smrg Bool changed; 177f7df2e56Smrg struct _rrProvider *offload_sink; 178f7df2e56Smrg struct _rrProvider *output_source; 179f7df2e56Smrg}; 180f7df2e56Smrg 181f7df2e56Smrgtypedef struct _rrMonitorGeometry { 182f7df2e56Smrg BoxRec box; 183f7df2e56Smrg CARD32 mmWidth; 184f7df2e56Smrg CARD32 mmHeight; 185f7df2e56Smrg} RRMonitorGeometryRec, *RRMonitorGeometryPtr; 186f7df2e56Smrg 187f7df2e56Smrgstruct _rrMonitor { 188f7df2e56Smrg Atom name; 189f7df2e56Smrg ScreenPtr pScreen; 190f7df2e56Smrg int numOutputs; 191f7df2e56Smrg RROutput *outputs; 192f7df2e56Smrg Bool primary; 193f7df2e56Smrg Bool automatic; 194f7df2e56Smrg RRMonitorGeometryRec geometry; 19505b261ecSmrg}; 19605b261ecSmrg 1977e31ba66Smrgtypedef enum _rrLeaseState { RRLeaseCreating, RRLeaseRunning, RRLeaseTerminating } RRLeaseState; 1987e31ba66Smrg 1997e31ba66Smrgstruct _rrLease { 2007e31ba66Smrg struct xorg_list list; 2017e31ba66Smrg ScreenPtr screen; 2027e31ba66Smrg RRLease id; 2037e31ba66Smrg RRLeaseState state; 2047e31ba66Smrg void *devPrivate; 2057e31ba66Smrg int numCrtcs; 2067e31ba66Smrg RRCrtcPtr *crtcs; 2077e31ba66Smrg int numOutputs; 2087e31ba66Smrg RROutputPtr *outputs; 2097e31ba66Smrg}; 2107e31ba66Smrg 21105b261ecSmrg#if RANDR_12_INTERFACE 212f7df2e56Smrgtypedef Bool (*RRScreenSetSizeProcPtr) (ScreenPtr pScreen, 213f7df2e56Smrg CARD16 width, 214f7df2e56Smrg CARD16 height, 215f7df2e56Smrg CARD32 mmWidth, CARD32 mmHeight); 216f7df2e56Smrg 217f7df2e56Smrgtypedef Bool (*RRCrtcSetProcPtr) (ScreenPtr pScreen, 218f7df2e56Smrg RRCrtcPtr crtc, 219f7df2e56Smrg RRModePtr mode, 220f7df2e56Smrg int x, 221f7df2e56Smrg int y, 222f7df2e56Smrg Rotation rotation, 223f7df2e56Smrg int numOutputs, RROutputPtr * outputs); 224f7df2e56Smrg 225f7df2e56Smrgtypedef Bool (*RRCrtcSetGammaProcPtr) (ScreenPtr pScreen, RRCrtcPtr crtc); 226f7df2e56Smrg 227f7df2e56Smrgtypedef Bool (*RRCrtcGetGammaProcPtr) (ScreenPtr pScreen, RRCrtcPtr crtc); 228f7df2e56Smrg 229f7df2e56Smrgtypedef Bool (*RROutputSetPropertyProcPtr) (ScreenPtr pScreen, 230f7df2e56Smrg RROutputPtr output, 231f7df2e56Smrg Atom property, 232f7df2e56Smrg RRPropertyValuePtr value); 233f7df2e56Smrg 234f7df2e56Smrgtypedef Bool (*RROutputValidateModeProcPtr) (ScreenPtr pScreen, 235f7df2e56Smrg RROutputPtr output, 236f7df2e56Smrg RRModePtr mode); 237f7df2e56Smrg 238f7df2e56Smrgtypedef void (*RRModeDestroyProcPtr) (ScreenPtr pScreen, RRModePtr mode); 23905b261ecSmrg 24005b261ecSmrg#endif 24105b261ecSmrg 2424642e01fSmrg#if RANDR_13_INTERFACE 243f7df2e56Smrgtypedef Bool (*RROutputGetPropertyProcPtr) (ScreenPtr pScreen, 244f7df2e56Smrg RROutputPtr output, Atom property); 245f7df2e56Smrgtypedef Bool (*RRGetPanningProcPtr) (ScreenPtr pScrn, 246f7df2e56Smrg RRCrtcPtr crtc, 247f7df2e56Smrg BoxPtr totalArea, 248f7df2e56Smrg BoxPtr trackingArea, INT16 *border); 249f7df2e56Smrgtypedef Bool (*RRSetPanningProcPtr) (ScreenPtr pScrn, 250f7df2e56Smrg RRCrtcPtr crtc, 251f7df2e56Smrg BoxPtr totalArea, 252f7df2e56Smrg BoxPtr trackingArea, INT16 *border); 253f7df2e56Smrg 254f7df2e56Smrg#endif /* RANDR_13_INTERFACE */ 255f7df2e56Smrg 256f7df2e56Smrgtypedef Bool (*RRProviderGetPropertyProcPtr) (ScreenPtr pScreen, 257f7df2e56Smrg RRProviderPtr provider, Atom property); 258f7df2e56Smrgtypedef Bool (*RRProviderSetPropertyProcPtr) (ScreenPtr pScreen, 259f7df2e56Smrg RRProviderPtr provider, 260f7df2e56Smrg Atom property, 261f7df2e56Smrg RRPropertyValuePtr value); 262f7df2e56Smrg 263f7df2e56Smrgtypedef Bool (*RRGetInfoProcPtr) (ScreenPtr pScreen, Rotation * rotations); 264f7df2e56Smrgtypedef Bool (*RRCloseScreenProcPtr) (ScreenPtr pscreen); 265f7df2e56Smrg 266f7df2e56Smrgtypedef Bool (*RRProviderSetOutputSourceProcPtr)(ScreenPtr pScreen, 267f7df2e56Smrg RRProviderPtr provider, 268f7df2e56Smrg RRProviderPtr output_source); 269f7df2e56Smrg 270f7df2e56Smrgtypedef Bool (*RRProviderSetOffloadSinkProcPtr)(ScreenPtr pScreen, 271f7df2e56Smrg RRProviderPtr provider, 272f7df2e56Smrg RRProviderPtr offload_sink); 273f7df2e56Smrg 274f7df2e56Smrg 275f7df2e56Smrgtypedef void (*RRProviderDestroyProcPtr)(ScreenPtr pScreen, 276f7df2e56Smrg RRProviderPtr provider); 27705b261ecSmrg 2787e31ba66Smrg/* Additions for 1.6 */ 2797e31ba66Smrg 2807e31ba66Smrgtypedef int (*RRCreateLeaseProcPtr)(ScreenPtr screen, 2817e31ba66Smrg RRLeasePtr lease, 2827e31ba66Smrg int *fd); 2837e31ba66Smrg 2847e31ba66Smrgtypedef void (*RRTerminateLeaseProcPtr)(ScreenPtr screen, 2857e31ba66Smrg RRLeasePtr lease); 2867e31ba66Smrg 28705b261ecSmrg/* These are for 1.0 compatibility */ 288f7df2e56Smrg 28905b261ecSmrgtypedef struct _rrRefresh { 290f7df2e56Smrg CARD16 rate; 291f7df2e56Smrg RRModePtr mode; 29205b261ecSmrg} RRScreenRate, *RRScreenRatePtr; 29305b261ecSmrg 29405b261ecSmrgtypedef struct _rrScreenSize { 295f7df2e56Smrg int id; 296f7df2e56Smrg short width, height; 297f7df2e56Smrg short mmWidth, mmHeight; 298f7df2e56Smrg int nRates; 29905b261ecSmrg RRScreenRatePtr pRates; 30005b261ecSmrg} RRScreenSize, *RRScreenSizePtr; 30105b261ecSmrg 30205b261ecSmrg#ifdef RANDR_10_INTERFACE 30305b261ecSmrg 304f7df2e56Smrgtypedef Bool (*RRSetConfigProcPtr) (ScreenPtr pScreen, 305f7df2e56Smrg Rotation rotation, 306f7df2e56Smrg int rate, RRScreenSizePtr pSize); 30705b261ecSmrg 30805b261ecSmrg#endif 309f7df2e56Smrg 310f7df2e56Smrgtypedef Bool (*RRCrtcSetScanoutPixmapProcPtr)(RRCrtcPtr crtc, PixmapPtr pixmap); 31105b261ecSmrg 3127e31ba66Smrgtypedef Bool (*RRStartFlippingPixmapTrackingProcPtr)(RRCrtcPtr, DrawablePtr, 3137e31ba66Smrg PixmapPtr, PixmapPtr, 3147e31ba66Smrg int x, int y, 3157e31ba66Smrg int dst_x, int dst_y, 3167e31ba66Smrg Rotation rotation); 3177e31ba66Smrg 3187e31ba66Smrgtypedef Bool (*RREnableSharedPixmapFlippingProcPtr)(RRCrtcPtr, 3197e31ba66Smrg PixmapPtr front, 3207e31ba66Smrg PixmapPtr back); 3217e31ba66Smrg 3227e31ba66Smrgtypedef void (*RRDisableSharedPixmapFlippingProcPtr)(RRCrtcPtr); 3237e31ba66Smrg 3247e31ba66Smrg 32505b261ecSmrgtypedef struct _rrScrPriv { 32605b261ecSmrg /* 32705b261ecSmrg * 'public' part of the structure; DDXen fill this in 32805b261ecSmrg * as they initialize 32905b261ecSmrg */ 33005b261ecSmrg#if RANDR_10_INTERFACE 331f7df2e56Smrg RRSetConfigProcPtr rrSetConfig; 33205b261ecSmrg#endif 333f7df2e56Smrg RRGetInfoProcPtr rrGetInfo; 33405b261ecSmrg#if RANDR_12_INTERFACE 335f7df2e56Smrg RRScreenSetSizeProcPtr rrScreenSetSize; 336f7df2e56Smrg RRCrtcSetProcPtr rrCrtcSet; 337f7df2e56Smrg RRCrtcSetGammaProcPtr rrCrtcSetGamma; 338f7df2e56Smrg RRCrtcGetGammaProcPtr rrCrtcGetGamma; 339f7df2e56Smrg RROutputSetPropertyProcPtr rrOutputSetProperty; 340f7df2e56Smrg RROutputValidateModeProcPtr rrOutputValidateMode; 341f7df2e56Smrg RRModeDestroyProcPtr rrModeDestroy; 34205b261ecSmrg#endif 3434642e01fSmrg#if RANDR_13_INTERFACE 344f7df2e56Smrg RROutputGetPropertyProcPtr rrOutputGetProperty; 345f7df2e56Smrg RRGetPanningProcPtr rrGetPanning; 346f7df2e56Smrg RRSetPanningProcPtr rrSetPanning; 3474642e01fSmrg#endif 348f7df2e56Smrg /* TODO #if RANDR_15_INTERFACE */ 349f7df2e56Smrg RRCrtcSetScanoutPixmapProcPtr rrCrtcSetScanoutPixmap; 350f7df2e56Smrg 3517e31ba66Smrg RRStartFlippingPixmapTrackingProcPtr rrStartFlippingPixmapTracking; 3527e31ba66Smrg RREnableSharedPixmapFlippingProcPtr rrEnableSharedPixmapFlipping; 3537e31ba66Smrg RRDisableSharedPixmapFlippingProcPtr rrDisableSharedPixmapFlipping; 3547e31ba66Smrg 355f7df2e56Smrg RRProviderSetOutputSourceProcPtr rrProviderSetOutputSource; 356f7df2e56Smrg RRProviderSetOffloadSinkProcPtr rrProviderSetOffloadSink; 357f7df2e56Smrg RRProviderGetPropertyProcPtr rrProviderGetProperty; 358f7df2e56Smrg RRProviderSetPropertyProcPtr rrProviderSetProperty; 3597e31ba66Smrg 3607e31ba66Smrg RRCreateLeaseProcPtr rrCreateLease; 3617e31ba66Smrg RRTerminateLeaseProcPtr rrTerminateLease; 3627e31ba66Smrg 36305b261ecSmrg /* 36405b261ecSmrg * Private part of the structure; not considered part of the ABI 36505b261ecSmrg */ 366f7df2e56Smrg TimeStamp lastSetTime; /* last changed by client */ 367f7df2e56Smrg TimeStamp lastConfigTime; /* possible configs changed */ 368f7df2e56Smrg RRCloseScreenProcPtr CloseScreen; 36905b261ecSmrg 370f7df2e56Smrg Bool changed; /* some config changed */ 371f7df2e56Smrg Bool configChanged; /* configuration changed */ 372f7df2e56Smrg Bool layoutChanged; /* screen layout changed */ 373f7df2e56Smrg Bool resourcesChanged; /* screen resources change */ 3747e31ba66Smrg Bool leasesChanged; /* leases change */ 37505b261ecSmrg 376f7df2e56Smrg CARD16 minWidth, minHeight; 377f7df2e56Smrg CARD16 maxWidth, maxHeight; 378f7df2e56Smrg CARD16 width, height; /* last known screen size */ 379f7df2e56Smrg CARD16 mmWidth, mmHeight; /* last known screen size */ 38005b261ecSmrg 381f7df2e56Smrg int numOutputs; 382f7df2e56Smrg RROutputPtr *outputs; 383f7df2e56Smrg RROutputPtr primaryOutput; 38405b261ecSmrg 385f7df2e56Smrg int numCrtcs; 386f7df2e56Smrg RRCrtcPtr *crtcs; 38705b261ecSmrg 38805b261ecSmrg /* Last known pointer position */ 389f7df2e56Smrg RRCrtcPtr pointerCrtc; 39005b261ecSmrg 39105b261ecSmrg#ifdef RANDR_10_INTERFACE 39205b261ecSmrg /* 39305b261ecSmrg * Configuration information 39405b261ecSmrg */ 395f7df2e56Smrg Rotation rotations; 396f7df2e56Smrg CARD16 reqWidth, reqHeight; 397f7df2e56Smrg 398f7df2e56Smrg int nSizes; 399f7df2e56Smrg RRScreenSizePtr pSizes; 400f7df2e56Smrg 401f7df2e56Smrg Rotation rotation; 402f7df2e56Smrg int rate; 403f7df2e56Smrg int size; 40405b261ecSmrg#endif 405f7df2e56Smrg Bool discontiguous; 406f7df2e56Smrg 407f7df2e56Smrg RRProviderPtr provider; 408f7df2e56Smrg 409f7df2e56Smrg RRProviderDestroyProcPtr rrProviderDestroy; 410f7df2e56Smrg 411f7df2e56Smrg int numMonitors; 412f7df2e56Smrg RRMonitorPtr *monitors; 413f7df2e56Smrg 4147e31ba66Smrg struct xorg_list leases; 41505b261ecSmrg} rrScrPrivRec, *rrScrPrivPtr; 41605b261ecSmrg 4176747b715Smrgextern _X_EXPORT DevPrivateKeyRec rrPrivKeyRec; 418f7df2e56Smrg 4196747b715Smrg#define rrPrivKey (&rrPrivKeyRec) 42005b261ecSmrg 4214642e01fSmrg#define rrGetScrPriv(pScr) ((rrScrPrivPtr)dixLookupPrivate(&(pScr)->devPrivates, rrPrivKey)) 42205b261ecSmrg#define rrScrPriv(pScr) rrScrPrivPtr pScrPriv = rrGetScrPriv(pScr) 4234642e01fSmrg#define SetRRScreen(s,p) dixSetPrivate(&(s)->devPrivates, rrPrivKey, p) 42405b261ecSmrg 42505b261ecSmrg/* 42605b261ecSmrg * each window has a list of clients requesting 42705b261ecSmrg * RRNotify events. Each client has a resource 42805b261ecSmrg * for each window it selects RRNotify input for, 42905b261ecSmrg * this resource is used to delete the RRNotifyRec 43005b261ecSmrg * entry from the per-window queue. 43105b261ecSmrg */ 43205b261ecSmrg 43305b261ecSmrgtypedef struct _RREvent *RREventPtr; 43405b261ecSmrg 43505b261ecSmrgtypedef struct _RREvent { 436f7df2e56Smrg RREventPtr next; 437f7df2e56Smrg ClientPtr client; 438f7df2e56Smrg WindowPtr window; 439f7df2e56Smrg XID clientResource; 440f7df2e56Smrg int mask; 44105b261ecSmrg} RREventRec; 44205b261ecSmrg 44305b261ecSmrgtypedef struct _RRTimes { 444f7df2e56Smrg TimeStamp setTime; 445f7df2e56Smrg TimeStamp configTime; 44605b261ecSmrg} RRTimesRec, *RRTimesPtr; 44705b261ecSmrg 44805b261ecSmrgtypedef struct _RRClient { 449f7df2e56Smrg int major_version; 450f7df2e56Smrg int minor_version; 45105b261ecSmrg/* RRTimesRec times[0]; */ 45205b261ecSmrg} RRClientRec, *RRClientPtr; 45305b261ecSmrg 454f7df2e56Smrgextern RESTYPE RRClientType, RREventType; /* resource types for event masks */ 455f7df2e56Smrgextern DevPrivateKeyRec RRClientPrivateKeyRec; 456f7df2e56Smrg 4576747b715Smrg#define RRClientPrivateKey (&RRClientPrivateKeyRec) 4587e31ba66Smrgextern _X_EXPORT RESTYPE RRCrtcType, RRModeType, RROutputType, RRProviderType, RRLeaseType; 4596747b715Smrg 4606747b715Smrg#define VERIFY_RR_OUTPUT(id, ptr, a)\ 4616747b715Smrg {\ 462f7df2e56Smrg int rc = dixLookupResourceByType((void **)&(ptr), id,\ 4636747b715Smrg RROutputType, client, a);\ 4646747b715Smrg if (rc != Success) {\ 4656747b715Smrg client->errorValue = id;\ 4666747b715Smrg return rc;\ 4676747b715Smrg }\ 4686747b715Smrg } 4696747b715Smrg 4706747b715Smrg#define VERIFY_RR_CRTC(id, ptr, a)\ 4716747b715Smrg {\ 472f7df2e56Smrg int rc = dixLookupResourceByType((void **)&(ptr), id,\ 4736747b715Smrg RRCrtcType, client, a);\ 4746747b715Smrg if (rc != Success) {\ 4756747b715Smrg client->errorValue = id;\ 4766747b715Smrg return rc;\ 4776747b715Smrg }\ 4786747b715Smrg } 4796747b715Smrg 4806747b715Smrg#define VERIFY_RR_MODE(id, ptr, a)\ 4816747b715Smrg {\ 482f7df2e56Smrg int rc = dixLookupResourceByType((void **)&(ptr), id,\ 4836747b715Smrg RRModeType, client, a);\ 4846747b715Smrg if (rc != Success) {\ 4856747b715Smrg client->errorValue = id;\ 4866747b715Smrg return rc;\ 4876747b715Smrg }\ 4886747b715Smrg } 48905b261ecSmrg 490f7df2e56Smrg#define VERIFY_RR_PROVIDER(id, ptr, a)\ 491f7df2e56Smrg {\ 492f7df2e56Smrg int rc = dixLookupResourceByType((void **)&(ptr), id,\ 493f7df2e56Smrg RRProviderType, client, a);\ 494f7df2e56Smrg if (rc != Success) {\ 495f7df2e56Smrg client->errorValue = id;\ 496f7df2e56Smrg return rc;\ 497f7df2e56Smrg }\ 498f7df2e56Smrg } 499f7df2e56Smrg 5007e31ba66Smrg#define VERIFY_RR_LEASE(id, ptr, a)\ 5017e31ba66Smrg {\ 5027e31ba66Smrg int rc = dixLookupResourceByType((void **)&(ptr), id,\ 5037e31ba66Smrg RRLeaseType, client, a);\ 5047e31ba66Smrg if (rc != Success) {\ 5057e31ba66Smrg client->errorValue = id;\ 5067e31ba66Smrg return rc;\ 5077e31ba66Smrg }\ 5087e31ba66Smrg } 5097e31ba66Smrg 5104642e01fSmrg#define GetRRClient(pClient) ((RRClientPtr)dixLookupPrivate(&(pClient)->devPrivates, RRClientPrivateKey)) 51105b261ecSmrg#define rrClientPriv(pClient) RRClientPtr pRRClient = GetRRClient(pClient) 51205b261ecSmrg 51305b261ecSmrg#ifdef RANDR_12_INTERFACE 51405b261ecSmrg/* 51505b261ecSmrg * Set the range of sizes for the screen 51605b261ecSmrg */ 5176747b715Smrgextern _X_EXPORT void 518f7df2e56Smrg 519f7df2e56SmrgRRScreenSetSizeRange(ScreenPtr pScreen, 520f7df2e56Smrg CARD16 minWidth, 521f7df2e56Smrg CARD16 minHeight, CARD16 maxWidth, CARD16 maxHeight); 52205b261ecSmrg#endif 52305b261ecSmrg 52405b261ecSmrg/* rrscreen.c */ 52505b261ecSmrg/* 52605b261ecSmrg * Notify the extension that the screen size has been changed. 52705b261ecSmrg * The driver is responsible for calling this whenever it has changed 52805b261ecSmrg * the size of the screen 52905b261ecSmrg */ 5306747b715Smrgextern _X_EXPORT void 531f7df2e56Smrg RRScreenSizeNotify(ScreenPtr pScreen); 53205b261ecSmrg 53305b261ecSmrg/* 53405b261ecSmrg * Request that the screen be resized 53505b261ecSmrg */ 5366747b715Smrgextern _X_EXPORT Bool 537f7df2e56Smrg 538f7df2e56SmrgRRScreenSizeSet(ScreenPtr pScreen, 539f7df2e56Smrg CARD16 width, CARD16 height, CARD32 mmWidth, CARD32 mmHeight); 54005b261ecSmrg 54105b261ecSmrg/* 54205b261ecSmrg * Send ConfigureNotify event to root window when 'something' happens 54305b261ecSmrg */ 5446747b715Smrgextern _X_EXPORT void 545f7df2e56Smrg RRSendConfigNotify(ScreenPtr pScreen); 546f7df2e56Smrg 54705b261ecSmrg/* 54805b261ecSmrg * screen dispatch 54905b261ecSmrg */ 5506747b715Smrgextern _X_EXPORT int 551f7df2e56Smrg ProcRRGetScreenSizeRange(ClientPtr client); 55205b261ecSmrg 5536747b715Smrgextern _X_EXPORT int 554f7df2e56Smrg ProcRRSetScreenSize(ClientPtr client); 55505b261ecSmrg 5566747b715Smrgextern _X_EXPORT int 557f7df2e56Smrg ProcRRGetScreenResources(ClientPtr client); 55805b261ecSmrg 5596747b715Smrgextern _X_EXPORT int 560f7df2e56Smrg ProcRRGetScreenResourcesCurrent(ClientPtr client); 5614642e01fSmrg 5626747b715Smrgextern _X_EXPORT int 563f7df2e56Smrg ProcRRSetScreenConfig(ClientPtr client); 56405b261ecSmrg 5656747b715Smrgextern _X_EXPORT int 566f7df2e56Smrg ProcRRGetScreenInfo(ClientPtr client); 56705b261ecSmrg 56805b261ecSmrg/* 56905b261ecSmrg * Deliver a ScreenNotify event 57005b261ecSmrg */ 5716747b715Smrgextern _X_EXPORT void 572f7df2e56Smrg RRDeliverScreenEvent(ClientPtr client, WindowPtr pWin, ScreenPtr pScreen); 573f7df2e56Smrg 574f7df2e56Smrgextern _X_EXPORT void 575f7df2e56Smrg RRResourcesChanged(ScreenPtr pScreen); 576f7df2e56Smrg 57705b261ecSmrg/* randr.c */ 578f7df2e56Smrg/* set a screen change on the primary screen */ 579f7df2e56Smrgextern _X_EXPORT void 580f7df2e56SmrgRRSetChanged(ScreenPtr pScreen); 581f7df2e56Smrg 58205b261ecSmrg/* 58305b261ecSmrg * Send all pending events 58405b261ecSmrg */ 5856747b715Smrgextern _X_EXPORT void 586f7df2e56Smrg RRTellChanged(ScreenPtr pScreen); 58705b261ecSmrg 588051b6151Schristosextern _X_EXPORT void 589051b6151SchristosRRSetChanged (ScreenPtr pScreen); 590051b6151Schristos 59105b261ecSmrg/* 59205b261ecSmrg * Poll the driver for changed information 59305b261ecSmrg */ 5946747b715Smrgextern _X_EXPORT Bool 595f7df2e56Smrg RRGetInfo(ScreenPtr pScreen, Bool force_query); 59605b261ecSmrg 597f7df2e56Smrgextern _X_EXPORT Bool RRInit(void); 59805b261ecSmrg 5996747b715Smrgextern _X_EXPORT Bool RRScreenInit(ScreenPtr pScreen); 60005b261ecSmrg 601f7df2e56Smrgextern _X_EXPORT RROutputPtr RRFirstOutput(ScreenPtr pScreen); 60205b261ecSmrg 6037e31ba66Smrgextern _X_EXPORT Bool RROutputSetNonDesktop(RROutputPtr output, Bool non_desktop); 6047e31ba66Smrg 6056747b715Smrgextern _X_EXPORT CARD16 606f7df2e56Smrg RRVerticalRefresh(xRRModeInfo * mode); 60705b261ecSmrg 608f7df2e56Smrg#ifdef RANDR_10_INTERFACE 60905b261ecSmrg/* 61005b261ecSmrg * This is the old interface, deprecated but left 61105b261ecSmrg * around for compatibility 61205b261ecSmrg */ 61305b261ecSmrg 61405b261ecSmrg/* 61505b261ecSmrg * Then, register the specific size with the screen 61605b261ecSmrg */ 61705b261ecSmrg 6186747b715Smrgextern _X_EXPORT RRScreenSizePtr 619f7df2e56SmrgRRRegisterSize(ScreenPtr pScreen, 620f7df2e56Smrg short width, short height, short mmWidth, short mmHeight); 62105b261ecSmrg 6226747b715Smrgextern _X_EXPORT Bool 623f7df2e56Smrg RRRegisterRate(ScreenPtr pScreen, RRScreenSizePtr pSize, int rate); 62405b261ecSmrg 62505b261ecSmrg/* 62605b261ecSmrg * Finally, set the current configuration of the screen 62705b261ecSmrg */ 62805b261ecSmrg 6296747b715Smrgextern _X_EXPORT void 63005b261ecSmrg 631f7df2e56SmrgRRSetCurrentConfig(ScreenPtr pScreen, 632f7df2e56Smrg Rotation rotation, int rate, RRScreenSizePtr pSize); 63305b261ecSmrg 634f7df2e56Smrgextern _X_EXPORT Rotation RRGetRotation(ScreenPtr pScreen); 635f7df2e56Smrg 636f7df2e56Smrg#endif 63705b261ecSmrg 63805b261ecSmrg/* rrcrtc.c */ 63905b261ecSmrg 64005b261ecSmrg/* 64105b261ecSmrg * Notify the CRTC of some change; layoutChanged indicates that 64205b261ecSmrg * some position or size element changed 64305b261ecSmrg */ 6446747b715Smrgextern _X_EXPORT void 645f7df2e56Smrg RRCrtcChanged(RRCrtcPtr crtc, Bool layoutChanged); 64605b261ecSmrg 64705b261ecSmrg/* 64805b261ecSmrg * Create a CRTC 64905b261ecSmrg */ 650f7df2e56Smrgextern _X_EXPORT RRCrtcPtr RRCrtcCreate(ScreenPtr pScreen, void *devPrivate); 65105b261ecSmrg 652d44ca368Smrg/* 653d44ca368Smrg * Tests if findCrtc belongs to pScreen or slave screens 654d44ca368Smrg */ 655d44ca368Smrgextern _X_EXPORT Bool RRCrtcExists(ScreenPtr pScreen, RRCrtcPtr findCrtc); 656d44ca368Smrg 65705b261ecSmrg/* 65805b261ecSmrg * Set the allowed rotations on a CRTC 65905b261ecSmrg */ 6606747b715Smrgextern _X_EXPORT void 661f7df2e56Smrg RRCrtcSetRotations(RRCrtcPtr crtc, Rotation rotations); 66205b261ecSmrg 6634642e01fSmrg/* 6644642e01fSmrg * Set whether transforms are allowed on a CRTC 6654642e01fSmrg */ 6666747b715Smrgextern _X_EXPORT void 667f7df2e56Smrg RRCrtcSetTransformSupport(RRCrtcPtr crtc, Bool transforms); 6684642e01fSmrg 66905b261ecSmrg/* 67005b261ecSmrg * Notify the extension that the Crtc has been reconfigured, 67105b261ecSmrg * the driver calls this whenever it has updated the mode 67205b261ecSmrg */ 6736747b715Smrgextern _X_EXPORT Bool 674f7df2e56Smrg 675f7df2e56SmrgRRCrtcNotify(RRCrtcPtr crtc, 676f7df2e56Smrg RRModePtr mode, 677f7df2e56Smrg int x, 678f7df2e56Smrg int y, 679f7df2e56Smrg Rotation rotation, 680f7df2e56Smrg RRTransformPtr transform, int numOutputs, RROutputPtr * outputs); 68105b261ecSmrg 6826747b715Smrgextern _X_EXPORT void 683f7df2e56Smrg RRDeliverCrtcEvent(ClientPtr client, WindowPtr pWin, RRCrtcPtr crtc); 684f7df2e56Smrg 68505b261ecSmrg/* 68605b261ecSmrg * Request that the Crtc be reconfigured 68705b261ecSmrg */ 6886747b715Smrgextern _X_EXPORT Bool 689f7df2e56Smrg 690f7df2e56SmrgRRCrtcSet(RRCrtcPtr crtc, 691f7df2e56Smrg RRModePtr mode, 692f7df2e56Smrg int x, 693f7df2e56Smrg int y, Rotation rotation, int numOutput, RROutputPtr * outputs); 69405b261ecSmrg 69505b261ecSmrg/* 69605b261ecSmrg * Request that the Crtc gamma be changed 69705b261ecSmrg */ 69805b261ecSmrg 6996747b715Smrgextern _X_EXPORT Bool 700f7df2e56Smrg RRCrtcGammaSet(RRCrtcPtr crtc, CARD16 *red, CARD16 *green, CARD16 *blue); 70105b261ecSmrg 7026747b715Smrg/* 7036747b715Smrg * Request current gamma back from the DDX (if possible). 7046747b715Smrg * This includes gamma size. 7056747b715Smrg */ 706f7df2e56Smrg 7076747b715Smrgextern _X_EXPORT Bool 708f7df2e56Smrg RRCrtcGammaGet(RRCrtcPtr crtc); 7096747b715Smrg 71005b261ecSmrg/* 71105b261ecSmrg * Notify the extension that the Crtc gamma has been changed 71205b261ecSmrg * The driver calls this whenever it has changed the gamma values 71305b261ecSmrg * in the RRCrtcRec 71405b261ecSmrg */ 71505b261ecSmrg 7166747b715Smrgextern _X_EXPORT Bool 717f7df2e56Smrg RRCrtcGammaNotify(RRCrtcPtr crtc); 71805b261ecSmrg 71905b261ecSmrg/* 72005b261ecSmrg * Set the size of the gamma table at server startup time 72105b261ecSmrg */ 72205b261ecSmrg 7236747b715Smrgextern _X_EXPORT Bool 724f7df2e56Smrg RRCrtcGammaSetSize(RRCrtcPtr crtc, int size); 72505b261ecSmrg 72605b261ecSmrg/* 72705b261ecSmrg * Return the area of the frame buffer scanned out by the crtc, 72805b261ecSmrg * taking into account the current mode and rotation 72905b261ecSmrg */ 73005b261ecSmrg 7316747b715Smrgextern _X_EXPORT void 732f7df2e56Smrg RRCrtcGetScanoutSize(RRCrtcPtr crtc, int *width, int *height); 73305b261ecSmrg 7344642e01fSmrg/* 7354642e01fSmrg * Return crtc transform 7364642e01fSmrg */ 737f7df2e56Smrgextern _X_EXPORT RRTransformPtr RRCrtcGetTransform(RRCrtcPtr crtc); 7384642e01fSmrg 7394642e01fSmrg/* 7404642e01fSmrg * Check whether the pending and current transforms are the same 7414642e01fSmrg */ 7426747b715Smrgextern _X_EXPORT Bool 743f7df2e56Smrg RRCrtcPendingTransform(RRCrtcPtr crtc); 7444642e01fSmrg 74505b261ecSmrg/* 74605b261ecSmrg * Destroy a Crtc at shutdown 74705b261ecSmrg */ 7486747b715Smrgextern _X_EXPORT void 749f7df2e56Smrg RRCrtcDestroy(RRCrtcPtr crtc); 7504642e01fSmrg 7514642e01fSmrg/* 7524642e01fSmrg * Set the pending CRTC transformation 7534642e01fSmrg */ 7544642e01fSmrg 7556747b715Smrgextern _X_EXPORT int 756f7df2e56Smrg 757f7df2e56SmrgRRCrtcTransformSet(RRCrtcPtr crtc, 758f7df2e56Smrg PictTransformPtr transform, 759f7df2e56Smrg struct pict_f_transform *f_transform, 760f7df2e56Smrg struct pict_f_transform *f_inverse, 761f7df2e56Smrg char *filter, int filter_len, xFixed * params, int nparams); 7624642e01fSmrg 76305b261ecSmrg/* 76405b261ecSmrg * Initialize crtc type 76505b261ecSmrg */ 7666747b715Smrgextern _X_EXPORT Bool 767f7df2e56Smrg RRCrtcInit(void); 76805b261ecSmrg 7696747b715Smrg/* 7706747b715Smrg * Initialize crtc type error value 7716747b715Smrg */ 7726747b715Smrgextern _X_EXPORT void 773f7df2e56Smrg RRCrtcInitErrorValue(void); 774f7df2e56Smrg 775f7df2e56Smrg/* 776f7df2e56Smrg * Detach and free a scanout pixmap 777f7df2e56Smrg */ 778f7df2e56Smrgextern _X_EXPORT void 779f7df2e56Smrg RRCrtcDetachScanoutPixmap(RRCrtcPtr crtc); 780f7df2e56Smrg 781f7df2e56Smrgextern _X_EXPORT Bool 782f7df2e56Smrg RRReplaceScanoutPixmap(DrawablePtr pDrawable, PixmapPtr pPixmap, Bool enable); 7836747b715Smrg 7847e31ba66Smrg/* 7857e31ba66Smrg * Return if the screen has any scanout_pixmap's attached 7867e31ba66Smrg */ 7877e31ba66Smrgextern _X_EXPORT Bool 7887e31ba66Smrg RRHasScanoutPixmap(ScreenPtr pScreen); 7897e31ba66Smrg 79005b261ecSmrg/* 79105b261ecSmrg * Crtc dispatch 79205b261ecSmrg */ 79305b261ecSmrg 7946747b715Smrgextern _X_EXPORT int 795f7df2e56Smrg ProcRRGetCrtcInfo(ClientPtr client); 79605b261ecSmrg 7976747b715Smrgextern _X_EXPORT int 798f7df2e56Smrg ProcRRSetCrtcConfig(ClientPtr client); 79905b261ecSmrg 8006747b715Smrgextern _X_EXPORT int 801f7df2e56Smrg ProcRRGetCrtcGammaSize(ClientPtr client); 80205b261ecSmrg 8036747b715Smrgextern _X_EXPORT int 804f7df2e56Smrg ProcRRGetCrtcGamma(ClientPtr client); 80505b261ecSmrg 8066747b715Smrgextern _X_EXPORT int 807f7df2e56Smrg ProcRRSetCrtcGamma(ClientPtr client); 80805b261ecSmrg 8096747b715Smrgextern _X_EXPORT int 810f7df2e56Smrg ProcRRSetCrtcTransform(ClientPtr client); 8114642e01fSmrg 8126747b715Smrgextern _X_EXPORT int 813f7df2e56Smrg ProcRRGetCrtcTransform(ClientPtr client); 8144642e01fSmrg 8154642e01fSmrgint 816f7df2e56Smrg ProcRRGetPanning(ClientPtr client); 8174642e01fSmrg 8184642e01fSmrgint 819f7df2e56Smrg ProcRRSetPanning(ClientPtr client); 820f7df2e56Smrg 821f7df2e56Smrgvoid 822f7df2e56Smrg RRConstrainCursorHarder(DeviceIntPtr, ScreenPtr, int, int *, int *); 8234642e01fSmrg 82405b261ecSmrg/* rrdispatch.c */ 8256747b715Smrgextern _X_EXPORT Bool 826f7df2e56Smrg RRClientKnowsRates(ClientPtr pClient); 82705b261ecSmrg 8287e31ba66Smrg/* rrlease.c */ 8297e31ba66Smrgvoid 8307e31ba66SmrgRRDeliverLeaseEvent(ClientPtr client, WindowPtr window); 8317e31ba66Smrg 8327e31ba66Smrgextern _X_EXPORT void 8337e31ba66SmrgRRLeaseTerminated(RRLeasePtr lease); 8347e31ba66Smrg 8357e31ba66Smrgextern _X_EXPORT void 8367e31ba66SmrgRRLeaseFree(RRLeasePtr lease); 8377e31ba66Smrg 8387e31ba66Smrgextern _X_EXPORT Bool 8397e31ba66SmrgRRCrtcIsLeased(RRCrtcPtr crtc); 8407e31ba66Smrg 8417e31ba66Smrgextern _X_EXPORT Bool 8427e31ba66SmrgRROutputIsLeased(RROutputPtr output); 8437e31ba66Smrg 8447e31ba66Smrgvoid 8457e31ba66SmrgRRTerminateLease(RRLeasePtr lease); 8467e31ba66Smrg 8477e31ba66SmrgBool 8487e31ba66SmrgRRLeaseInit(void); 8497e31ba66Smrg 85005b261ecSmrg/* rrmode.c */ 85105b261ecSmrg/* 85205b261ecSmrg * Find, and if necessary, create a mode 85305b261ecSmrg */ 85405b261ecSmrg 855f7df2e56Smrgextern _X_EXPORT RRModePtr RRModeGet(xRRModeInfo * modeInfo, const char *name); 85605b261ecSmrg 85705b261ecSmrg/* 85805b261ecSmrg * Destroy a mode. 85905b261ecSmrg */ 86005b261ecSmrg 8616747b715Smrgextern _X_EXPORT void 862f7df2e56Smrg RRModeDestroy(RRModePtr mode); 86305b261ecSmrg 86405b261ecSmrg/* 86505b261ecSmrg * Return a list of modes that are valid for some output in pScreen 86605b261ecSmrg */ 867f7df2e56Smrgextern _X_EXPORT RRModePtr *RRModesForScreen(ScreenPtr pScreen, int *num_ret); 868f7df2e56Smrg 86905b261ecSmrg/* 87005b261ecSmrg * Initialize mode type 87105b261ecSmrg */ 8726747b715Smrgextern _X_EXPORT Bool 873f7df2e56Smrg RRModeInit(void); 8746747b715Smrg 8756747b715Smrg/* 8766747b715Smrg * Initialize mode type error value 8776747b715Smrg */ 8786747b715Smrgextern _X_EXPORT void 879f7df2e56Smrg RRModeInitErrorValue(void); 880f7df2e56Smrg 8816747b715Smrgextern _X_EXPORT int 882f7df2e56Smrg ProcRRCreateMode(ClientPtr client); 88305b261ecSmrg 8846747b715Smrgextern _X_EXPORT int 885f7df2e56Smrg ProcRRDestroyMode(ClientPtr client); 88605b261ecSmrg 8876747b715Smrgextern _X_EXPORT int 888f7df2e56Smrg ProcRRAddOutputMode(ClientPtr client); 88905b261ecSmrg 8906747b715Smrgextern _X_EXPORT int 891f7df2e56Smrg ProcRRDeleteOutputMode(ClientPtr client); 89205b261ecSmrg 89305b261ecSmrg/* rroutput.c */ 89405b261ecSmrg 89505b261ecSmrg/* 89605b261ecSmrg * Notify the output of some change. configChanged indicates whether 89705b261ecSmrg * any external configuration (mode list, clones, connected status) 89805b261ecSmrg * has changed, or whether the change was strictly internal 89905b261ecSmrg * (which crtc is in use) 90005b261ecSmrg */ 9016747b715Smrgextern _X_EXPORT void 902f7df2e56Smrg RROutputChanged(RROutputPtr output, Bool configChanged); 90305b261ecSmrg 90405b261ecSmrg/* 90505b261ecSmrg * Create an output 90605b261ecSmrg */ 90705b261ecSmrg 9086747b715Smrgextern _X_EXPORT RROutputPtr 909f7df2e56SmrgRROutputCreate(ScreenPtr pScreen, 910f7df2e56Smrg const char *name, int nameLength, void *devPrivate); 91105b261ecSmrg 91205b261ecSmrg/* 91305b261ecSmrg * Notify extension that output parameters have been changed 91405b261ecSmrg */ 9156747b715Smrgextern _X_EXPORT Bool 916f7df2e56Smrg RROutputSetClones(RROutputPtr output, RROutputPtr * clones, int numClones); 91705b261ecSmrg 9186747b715Smrgextern _X_EXPORT Bool 919f7df2e56Smrg 920f7df2e56SmrgRROutputSetModes(RROutputPtr output, 921f7df2e56Smrg RRModePtr * modes, int numModes, int numPreferred); 92205b261ecSmrg 9236747b715Smrgextern _X_EXPORT int 924f7df2e56Smrg RROutputAddUserMode(RROutputPtr output, RRModePtr mode); 92505b261ecSmrg 9266747b715Smrgextern _X_EXPORT int 927f7df2e56Smrg RROutputDeleteUserMode(RROutputPtr output, RRModePtr mode); 92805b261ecSmrg 9296747b715Smrgextern _X_EXPORT Bool 930f7df2e56Smrg RROutputSetCrtcs(RROutputPtr output, RRCrtcPtr * crtcs, int numCrtcs); 93105b261ecSmrg 9326747b715Smrgextern _X_EXPORT Bool 933f7df2e56Smrg RROutputSetConnection(RROutputPtr output, CARD8 connection); 93405b261ecSmrg 9356747b715Smrgextern _X_EXPORT Bool 936f7df2e56Smrg RROutputSetSubpixelOrder(RROutputPtr output, int subpixelOrder); 93705b261ecSmrg 9386747b715Smrgextern _X_EXPORT Bool 939f7df2e56Smrg RROutputSetPhysicalSize(RROutputPtr output, int mmWidth, int mmHeight); 94005b261ecSmrg 9416747b715Smrgextern _X_EXPORT void 942f7df2e56Smrg RRDeliverOutputEvent(ClientPtr client, WindowPtr pWin, RROutputPtr output); 94305b261ecSmrg 9446747b715Smrgextern _X_EXPORT void 945f7df2e56Smrg RROutputDestroy(RROutputPtr output); 94605b261ecSmrg 9476747b715Smrgextern _X_EXPORT int 948f7df2e56Smrg ProcRRGetOutputInfo(ClientPtr client); 94905b261ecSmrg 9506747b715Smrgextern _X_EXPORT int 951f7df2e56Smrg ProcRRSetOutputPrimary(ClientPtr client); 9524642e01fSmrg 9536747b715Smrgextern _X_EXPORT int 954f7df2e56Smrg ProcRRGetOutputPrimary(ClientPtr client); 9554642e01fSmrg 95605b261ecSmrg/* 95705b261ecSmrg * Initialize output type 95805b261ecSmrg */ 9596747b715Smrgextern _X_EXPORT Bool 960f7df2e56Smrg RROutputInit(void); 9616747b715Smrg 9626747b715Smrg/* 9636747b715Smrg * Initialize output type error value 9646747b715Smrg */ 9656747b715Smrgextern _X_EXPORT void 966f7df2e56Smrg RROutputInitErrorValue(void); 967f7df2e56Smrg 96805b261ecSmrg/* rrpointer.c */ 9696747b715Smrgextern _X_EXPORT void 970f7df2e56Smrg RRPointerMoved(ScreenPtr pScreen, int x, int y); 97105b261ecSmrg 9726747b715Smrgextern _X_EXPORT void 973f7df2e56Smrg RRPointerScreenConfigured(ScreenPtr pScreen); 97405b261ecSmrg 97505b261ecSmrg/* rrproperty.c */ 97605b261ecSmrg 9776747b715Smrgextern _X_EXPORT void 978f7df2e56Smrg RRDeleteAllOutputProperties(RROutputPtr output); 97905b261ecSmrg 9806747b715Smrgextern _X_EXPORT RRPropertyValuePtr 981f7df2e56SmrgRRGetOutputProperty(RROutputPtr output, Atom property, Bool pending); 98205b261ecSmrg 9836747b715Smrgextern _X_EXPORT RRPropertyPtr 984f7df2e56SmrgRRQueryOutputProperty(RROutputPtr output, Atom property); 985f7df2e56Smrg 9866747b715Smrgextern _X_EXPORT void 987f7df2e56Smrg RRDeleteOutputProperty(RROutputPtr output, Atom property); 98805b261ecSmrg 9896747b715Smrgextern _X_EXPORT Bool 990f7df2e56Smrg RRPostPendingProperties(RROutputPtr output); 991f7df2e56Smrg 9926747b715Smrgextern _X_EXPORT int 993f7df2e56Smrg 994f7df2e56SmrgRRChangeOutputProperty(RROutputPtr output, Atom property, Atom type, 995f7df2e56Smrg int format, int mode, unsigned long len, 9967e31ba66Smrg const void *value, Bool sendevent, Bool pending); 99705b261ecSmrg 9986747b715Smrgextern _X_EXPORT int 999f7df2e56Smrg 1000f7df2e56SmrgRRConfigureOutputProperty(RROutputPtr output, Atom property, 1001f7df2e56Smrg Bool pending, Bool range, Bool immutable, 10027e31ba66Smrg int num_values, const INT32 *values); 10036747b715Smrgextern _X_EXPORT int 1004f7df2e56Smrg ProcRRChangeOutputProperty(ClientPtr client); 100505b261ecSmrg 10066747b715Smrgextern _X_EXPORT int 1007f7df2e56Smrg ProcRRGetOutputProperty(ClientPtr client); 100805b261ecSmrg 10096747b715Smrgextern _X_EXPORT int 1010f7df2e56Smrg ProcRRListOutputProperties(ClientPtr client); 101105b261ecSmrg 10126747b715Smrgextern _X_EXPORT int 1013f7df2e56Smrg ProcRRQueryOutputProperty(ClientPtr client); 101405b261ecSmrg 10156747b715Smrgextern _X_EXPORT int 1016f7df2e56Smrg ProcRRConfigureOutputProperty(ClientPtr client); 101705b261ecSmrg 10186747b715Smrgextern _X_EXPORT int 1019f7df2e56Smrg ProcRRDeleteOutputProperty(ClientPtr client); 1020f7df2e56Smrg 1021f7df2e56Smrg/* rrprovider.c */ 10227e31ba66Smrg#define PRIME_SYNC_PROP "PRIME Synchronization" 1023f7df2e56Smrgextern _X_EXPORT void 1024f7df2e56SmrgRRProviderInitErrorValue(void); 102505b261ecSmrg 1026f7df2e56Smrgextern _X_EXPORT int 1027f7df2e56SmrgProcRRGetProviders(ClientPtr client); 1028f7df2e56Smrg 1029f7df2e56Smrgextern _X_EXPORT int 1030f7df2e56SmrgProcRRGetProviderInfo(ClientPtr client); 1031f7df2e56Smrg 1032f7df2e56Smrgextern _X_EXPORT int 1033f7df2e56SmrgProcRRSetProviderOutputSource(ClientPtr client); 1034f7df2e56Smrg 1035f7df2e56Smrgextern _X_EXPORT int 1036f7df2e56SmrgProcRRSetProviderOffloadSink(ClientPtr client); 1037f7df2e56Smrg 1038f7df2e56Smrgextern _X_EXPORT Bool 1039f7df2e56SmrgRRProviderInit(void); 1040f7df2e56Smrg 1041f7df2e56Smrgextern _X_EXPORT RRProviderPtr 1042f7df2e56SmrgRRProviderCreate(ScreenPtr pScreen, const char *name, 1043f7df2e56Smrg int nameLength); 1044f7df2e56Smrg 1045f7df2e56Smrgextern _X_EXPORT void 1046f7df2e56SmrgRRProviderDestroy (RRProviderPtr provider); 1047f7df2e56Smrg 1048f7df2e56Smrgextern _X_EXPORT void 1049f7df2e56SmrgRRProviderSetCapabilities(RRProviderPtr provider, uint32_t capabilities); 1050f7df2e56Smrg 1051f7df2e56Smrgextern _X_EXPORT Bool 1052f7df2e56SmrgRRProviderLookup(XID id, RRProviderPtr *provider_p); 1053f7df2e56Smrg 1054f7df2e56Smrgextern _X_EXPORT void 1055f7df2e56SmrgRRDeliverProviderEvent(ClientPtr client, WindowPtr pWin, RRProviderPtr provider); 1056f7df2e56Smrg 1057f7df2e56Smrg/* rrproviderproperty.c */ 1058f7df2e56Smrg 1059f7df2e56Smrgextern _X_EXPORT void 1060f7df2e56Smrg RRDeleteAllProviderProperties(RRProviderPtr provider); 1061f7df2e56Smrg 1062f7df2e56Smrgextern _X_EXPORT RRPropertyValuePtr 1063f7df2e56Smrg RRGetProviderProperty(RRProviderPtr provider, Atom property, Bool pending); 1064f7df2e56Smrg 1065f7df2e56Smrgextern _X_EXPORT RRPropertyPtr 1066f7df2e56Smrg RRQueryProviderProperty(RRProviderPtr provider, Atom property); 1067f7df2e56Smrg 1068f7df2e56Smrgextern _X_EXPORT void 1069f7df2e56Smrg RRDeleteProviderProperty(RRProviderPtr provider, Atom property); 1070f7df2e56Smrg 1071f7df2e56Smrgextern _X_EXPORT int 1072f7df2e56SmrgRRChangeProviderProperty(RRProviderPtr provider, Atom property, Atom type, 1073f7df2e56Smrg int format, int mode, unsigned long len, 1074f7df2e56Smrg void *value, Bool sendevent, Bool pending); 1075f7df2e56Smrg 1076f7df2e56Smrgextern _X_EXPORT int 1077f7df2e56Smrg RRConfigureProviderProperty(RRProviderPtr provider, Atom property, 1078f7df2e56Smrg Bool pending, Bool range, Bool immutable, 1079f7df2e56Smrg int num_values, INT32 *values); 1080f7df2e56Smrg 1081f7df2e56Smrgextern _X_EXPORT Bool 1082f7df2e56Smrg RRPostProviderPendingProperties(RRProviderPtr provider); 1083f7df2e56Smrg 1084f7df2e56Smrgextern _X_EXPORT int 1085f7df2e56Smrg ProcRRGetProviderProperty(ClientPtr client); 1086f7df2e56Smrg 1087f7df2e56Smrgextern _X_EXPORT int 1088f7df2e56Smrg ProcRRListProviderProperties(ClientPtr client); 1089f7df2e56Smrg 1090f7df2e56Smrgextern _X_EXPORT int 1091f7df2e56Smrg ProcRRQueryProviderProperty(ClientPtr client); 1092f7df2e56Smrg 1093f7df2e56Smrgextern _X_EXPORT int 1094f7df2e56SmrgProcRRConfigureProviderProperty(ClientPtr client); 1095f7df2e56Smrg 1096f7df2e56Smrgextern _X_EXPORT int 1097f7df2e56SmrgProcRRChangeProviderProperty(ClientPtr client); 1098f7df2e56Smrg 1099f7df2e56Smrgextern _X_EXPORT int 1100f7df2e56Smrg ProcRRDeleteProviderProperty(ClientPtr client); 110105b261ecSmrg/* rrxinerama.c */ 11026747b715Smrg#ifdef XINERAMA 11036747b715Smrgextern _X_EXPORT void 1104f7df2e56Smrg RRXineramaExtensionInit(void); 11056747b715Smrg#endif 110605b261ecSmrg 1107f7df2e56Smrgvoid 1108f7df2e56SmrgRRMonitorInit(ScreenPtr screen); 1109f7df2e56Smrg 1110f7df2e56SmrgBool 1111f7df2e56SmrgRRMonitorMakeList(ScreenPtr screen, Bool get_active, RRMonitorPtr *monitors_ret, int *nmon_ret); 1112f7df2e56Smrg 1113f7df2e56Smrgint 1114f7df2e56SmrgRRMonitorCountList(ScreenPtr screen); 1115f7df2e56Smrg 1116f7df2e56Smrgvoid 1117f7df2e56SmrgRRMonitorFreeList(RRMonitorPtr monitors, int nmon); 1118f7df2e56Smrg 1119f7df2e56Smrgvoid 1120f7df2e56SmrgRRMonitorClose(ScreenPtr screen); 1121f7df2e56Smrg 1122f7df2e56SmrgRRMonitorPtr 1123f7df2e56SmrgRRMonitorAlloc(int noutput); 1124f7df2e56Smrg 1125f7df2e56Smrgint 1126f7df2e56SmrgRRMonitorAdd(ClientPtr client, ScreenPtr screen, RRMonitorPtr monitor); 1127f7df2e56Smrg 1128f7df2e56Smrgvoid 1129f7df2e56SmrgRRMonitorFree(RRMonitorPtr monitor); 1130f7df2e56Smrg 1131f7df2e56Smrgint 1132f7df2e56SmrgProcRRGetMonitors(ClientPtr client); 1133f7df2e56Smrg 1134f7df2e56Smrgint 1135f7df2e56SmrgProcRRSetMonitor(ClientPtr client); 1136f7df2e56Smrg 1137f7df2e56Smrgint 1138f7df2e56SmrgProcRRDeleteMonitor(ClientPtr client); 1139f7df2e56Smrg 11407e31ba66Smrgint 11417e31ba66SmrgProcRRCreateLease(ClientPtr client); 11427e31ba66Smrg 11437e31ba66Smrgint 11447e31ba66SmrgProcRRFreeLease(ClientPtr client); 11457e31ba66Smrg 1146f7df2e56Smrg#endif /* _RANDRSTR_H_ */ 114705b261ecSmrg 114805b261ecSmrg/* 1149f7df2e56Smrg 115005b261ecSmrgrandr extension implementation structure 115105b261ecSmrg 115205b261ecSmrgQuery state: 115305b261ecSmrg ProcRRGetScreenInfo/ProcRRGetScreenResources 115405b261ecSmrg RRGetInfo 1155f7df2e56Smrg 115605b261ecSmrg • Request configuration from driver, either 1.0 or 1.2 style 115705b261ecSmrg • These functions only record state changes, all 115805b261ecSmrg other actions are pended until RRTellChanged is called 1159f7df2e56Smrg 116005b261ecSmrg ->rrGetInfo 116105b261ecSmrg 1.0: 116205b261ecSmrg RRRegisterSize 116305b261ecSmrg RRRegisterRate 116405b261ecSmrg RRSetCurrentConfig 116505b261ecSmrg 1.2: 116605b261ecSmrg RRScreenSetSizeRange 116705b261ecSmrg RROutputSetCrtcs 116805b261ecSmrg RRModeGet 116905b261ecSmrg RROutputSetModes 117005b261ecSmrg RROutputSetConnection 117105b261ecSmrg RROutputSetSubpixelOrder 117205b261ecSmrg RROutputSetClones 117305b261ecSmrg RRCrtcNotify 1174f7df2e56Smrg 117505b261ecSmrg • Must delay scanning configuration until after ->rrGetInfo returns 117605b261ecSmrg because some drivers will call SetCurrentConfig in the middle 117705b261ecSmrg of the ->rrGetInfo operation. 1178f7df2e56Smrg 117905b261ecSmrg 1.0: 118005b261ecSmrg 118105b261ecSmrg • Scan old configuration, mirror to new structures 1182f7df2e56Smrg 118305b261ecSmrg RRScanOldConfig 118405b261ecSmrg RRCrtcCreate 118505b261ecSmrg RROutputCreate 118605b261ecSmrg RROutputSetCrtcs 118705b261ecSmrg RROutputSetConnection 118805b261ecSmrg RROutputSetSubpixelOrder 118905b261ecSmrg RROldModeAdd • This adds modes one-at-a-time 119005b261ecSmrg RRModeGet 119105b261ecSmrg RRCrtcNotify 1192f7df2e56Smrg 119305b261ecSmrg • send events, reset pointer if necessary 1194f7df2e56Smrg 119505b261ecSmrg RRTellChanged 119605b261ecSmrg WalkTree (sending events) 1197f7df2e56Smrg 119805b261ecSmrg • when layout has changed: 119905b261ecSmrg RRPointerScreenConfigured 120005b261ecSmrg RRSendConfigNotify 1201f7df2e56Smrg 120205b261ecSmrgAsynchronous state setting (1.2 only) 120305b261ecSmrg When setting state asynchronously, the driver invokes the 120405b261ecSmrg ->rrGetInfo function and then calls RRTellChanged to flush 120505b261ecSmrg the changes to the clients and reset pointer if necessary 120605b261ecSmrg 120705b261ecSmrgSet state 120805b261ecSmrg 120905b261ecSmrg ProcRRSetScreenConfig 121005b261ecSmrg RRCrtcSet 121105b261ecSmrg 1.2: 121205b261ecSmrg ->rrCrtcSet 121305b261ecSmrg RRCrtcNotify 121405b261ecSmrg 1.0: 121505b261ecSmrg ->rrSetConfig 121605b261ecSmrg RRCrtcNotify 121705b261ecSmrg RRTellChanged 121805b261ecSmrg */ 1219