randrstr.h revision b150493b
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 65205b261ecSmrg/* 65305b261ecSmrg * Set the allowed rotations on a CRTC 65405b261ecSmrg */ 6556747b715Smrgextern _X_EXPORT void 656f7df2e56Smrg RRCrtcSetRotations(RRCrtcPtr crtc, Rotation rotations); 65705b261ecSmrg 6584642e01fSmrg/* 6594642e01fSmrg * Set whether transforms are allowed on a CRTC 6604642e01fSmrg */ 6616747b715Smrgextern _X_EXPORT void 662f7df2e56Smrg RRCrtcSetTransformSupport(RRCrtcPtr crtc, Bool transforms); 6634642e01fSmrg 66405b261ecSmrg/* 66505b261ecSmrg * Notify the extension that the Crtc has been reconfigured, 66605b261ecSmrg * the driver calls this whenever it has updated the mode 66705b261ecSmrg */ 6686747b715Smrgextern _X_EXPORT Bool 669f7df2e56Smrg 670f7df2e56SmrgRRCrtcNotify(RRCrtcPtr crtc, 671f7df2e56Smrg RRModePtr mode, 672f7df2e56Smrg int x, 673f7df2e56Smrg int y, 674f7df2e56Smrg Rotation rotation, 675f7df2e56Smrg RRTransformPtr transform, int numOutputs, RROutputPtr * outputs); 67605b261ecSmrg 6776747b715Smrgextern _X_EXPORT void 678f7df2e56Smrg RRDeliverCrtcEvent(ClientPtr client, WindowPtr pWin, RRCrtcPtr crtc); 679f7df2e56Smrg 68005b261ecSmrg/* 68105b261ecSmrg * Request that the Crtc be reconfigured 68205b261ecSmrg */ 6836747b715Smrgextern _X_EXPORT Bool 684f7df2e56Smrg 685f7df2e56SmrgRRCrtcSet(RRCrtcPtr crtc, 686f7df2e56Smrg RRModePtr mode, 687f7df2e56Smrg int x, 688f7df2e56Smrg int y, Rotation rotation, int numOutput, RROutputPtr * outputs); 68905b261ecSmrg 69005b261ecSmrg/* 69105b261ecSmrg * Request that the Crtc gamma be changed 69205b261ecSmrg */ 69305b261ecSmrg 6946747b715Smrgextern _X_EXPORT Bool 695f7df2e56Smrg RRCrtcGammaSet(RRCrtcPtr crtc, CARD16 *red, CARD16 *green, CARD16 *blue); 69605b261ecSmrg 6976747b715Smrg/* 6986747b715Smrg * Request current gamma back from the DDX (if possible). 6996747b715Smrg * This includes gamma size. 7006747b715Smrg */ 701f7df2e56Smrg 7026747b715Smrgextern _X_EXPORT Bool 703f7df2e56Smrg RRCrtcGammaGet(RRCrtcPtr crtc); 7046747b715Smrg 70505b261ecSmrg/* 70605b261ecSmrg * Notify the extension that the Crtc gamma has been changed 70705b261ecSmrg * The driver calls this whenever it has changed the gamma values 70805b261ecSmrg * in the RRCrtcRec 70905b261ecSmrg */ 71005b261ecSmrg 7116747b715Smrgextern _X_EXPORT Bool 712f7df2e56Smrg RRCrtcGammaNotify(RRCrtcPtr crtc); 71305b261ecSmrg 71405b261ecSmrg/* 71505b261ecSmrg * Set the size of the gamma table at server startup time 71605b261ecSmrg */ 71705b261ecSmrg 7186747b715Smrgextern _X_EXPORT Bool 719f7df2e56Smrg RRCrtcGammaSetSize(RRCrtcPtr crtc, int size); 72005b261ecSmrg 72105b261ecSmrg/* 72205b261ecSmrg * Return the area of the frame buffer scanned out by the crtc, 72305b261ecSmrg * taking into account the current mode and rotation 72405b261ecSmrg */ 72505b261ecSmrg 7266747b715Smrgextern _X_EXPORT void 727f7df2e56Smrg RRCrtcGetScanoutSize(RRCrtcPtr crtc, int *width, int *height); 72805b261ecSmrg 7294642e01fSmrg/* 7304642e01fSmrg * Return crtc transform 7314642e01fSmrg */ 732f7df2e56Smrgextern _X_EXPORT RRTransformPtr RRCrtcGetTransform(RRCrtcPtr crtc); 7334642e01fSmrg 7344642e01fSmrg/* 7354642e01fSmrg * Check whether the pending and current transforms are the same 7364642e01fSmrg */ 7376747b715Smrgextern _X_EXPORT Bool 738f7df2e56Smrg RRCrtcPendingTransform(RRCrtcPtr crtc); 7394642e01fSmrg 74005b261ecSmrg/* 74105b261ecSmrg * Destroy a Crtc at shutdown 74205b261ecSmrg */ 7436747b715Smrgextern _X_EXPORT void 744f7df2e56Smrg RRCrtcDestroy(RRCrtcPtr crtc); 7454642e01fSmrg 7464642e01fSmrg/* 7474642e01fSmrg * Set the pending CRTC transformation 7484642e01fSmrg */ 7494642e01fSmrg 7506747b715Smrgextern _X_EXPORT int 751f7df2e56Smrg 752f7df2e56SmrgRRCrtcTransformSet(RRCrtcPtr crtc, 753f7df2e56Smrg PictTransformPtr transform, 754f7df2e56Smrg struct pict_f_transform *f_transform, 755f7df2e56Smrg struct pict_f_transform *f_inverse, 756f7df2e56Smrg char *filter, int filter_len, xFixed * params, int nparams); 7574642e01fSmrg 75805b261ecSmrg/* 75905b261ecSmrg * Initialize crtc type 76005b261ecSmrg */ 7616747b715Smrgextern _X_EXPORT Bool 762f7df2e56Smrg RRCrtcInit(void); 76305b261ecSmrg 7646747b715Smrg/* 7656747b715Smrg * Initialize crtc type error value 7666747b715Smrg */ 7676747b715Smrgextern _X_EXPORT void 768f7df2e56Smrg RRCrtcInitErrorValue(void); 769f7df2e56Smrg 770f7df2e56Smrg/* 771f7df2e56Smrg * Detach and free a scanout pixmap 772f7df2e56Smrg */ 773f7df2e56Smrgextern _X_EXPORT void 774f7df2e56Smrg RRCrtcDetachScanoutPixmap(RRCrtcPtr crtc); 775f7df2e56Smrg 776f7df2e56Smrgextern _X_EXPORT Bool 777f7df2e56Smrg RRReplaceScanoutPixmap(DrawablePtr pDrawable, PixmapPtr pPixmap, Bool enable); 7786747b715Smrg 7797e31ba66Smrg/* 7807e31ba66Smrg * Return if the screen has any scanout_pixmap's attached 7817e31ba66Smrg */ 7827e31ba66Smrgextern _X_EXPORT Bool 7837e31ba66Smrg RRHasScanoutPixmap(ScreenPtr pScreen); 7847e31ba66Smrg 78505b261ecSmrg/* 78605b261ecSmrg * Crtc dispatch 78705b261ecSmrg */ 78805b261ecSmrg 7896747b715Smrgextern _X_EXPORT int 790f7df2e56Smrg ProcRRGetCrtcInfo(ClientPtr client); 79105b261ecSmrg 7926747b715Smrgextern _X_EXPORT int 793f7df2e56Smrg ProcRRSetCrtcConfig(ClientPtr client); 79405b261ecSmrg 7956747b715Smrgextern _X_EXPORT int 796f7df2e56Smrg ProcRRGetCrtcGammaSize(ClientPtr client); 79705b261ecSmrg 7986747b715Smrgextern _X_EXPORT int 799f7df2e56Smrg ProcRRGetCrtcGamma(ClientPtr client); 80005b261ecSmrg 8016747b715Smrgextern _X_EXPORT int 802f7df2e56Smrg ProcRRSetCrtcGamma(ClientPtr client); 80305b261ecSmrg 8046747b715Smrgextern _X_EXPORT int 805f7df2e56Smrg ProcRRSetCrtcTransform(ClientPtr client); 8064642e01fSmrg 8076747b715Smrgextern _X_EXPORT int 808f7df2e56Smrg ProcRRGetCrtcTransform(ClientPtr client); 8094642e01fSmrg 8104642e01fSmrgint 811f7df2e56Smrg ProcRRGetPanning(ClientPtr client); 8124642e01fSmrg 8134642e01fSmrgint 814f7df2e56Smrg ProcRRSetPanning(ClientPtr client); 815f7df2e56Smrg 816f7df2e56Smrgvoid 817f7df2e56Smrg RRConstrainCursorHarder(DeviceIntPtr, ScreenPtr, int, int *, int *); 8184642e01fSmrg 81905b261ecSmrg/* rrdispatch.c */ 8206747b715Smrgextern _X_EXPORT Bool 821f7df2e56Smrg RRClientKnowsRates(ClientPtr pClient); 82205b261ecSmrg 8237e31ba66Smrg/* rrlease.c */ 8247e31ba66Smrgvoid 8257e31ba66SmrgRRDeliverLeaseEvent(ClientPtr client, WindowPtr window); 8267e31ba66Smrg 8277e31ba66Smrgextern _X_EXPORT void 8287e31ba66SmrgRRLeaseTerminated(RRLeasePtr lease); 8297e31ba66Smrg 8307e31ba66Smrgextern _X_EXPORT void 8317e31ba66SmrgRRLeaseFree(RRLeasePtr lease); 8327e31ba66Smrg 8337e31ba66Smrgextern _X_EXPORT Bool 8347e31ba66SmrgRRCrtcIsLeased(RRCrtcPtr crtc); 8357e31ba66Smrg 8367e31ba66Smrgextern _X_EXPORT Bool 8377e31ba66SmrgRROutputIsLeased(RROutputPtr output); 8387e31ba66Smrg 8397e31ba66Smrgvoid 8407e31ba66SmrgRRTerminateLease(RRLeasePtr lease); 8417e31ba66Smrg 8427e31ba66SmrgBool 8437e31ba66SmrgRRLeaseInit(void); 8447e31ba66Smrg 84505b261ecSmrg/* rrmode.c */ 84605b261ecSmrg/* 84705b261ecSmrg * Find, and if necessary, create a mode 84805b261ecSmrg */ 84905b261ecSmrg 850f7df2e56Smrgextern _X_EXPORT RRModePtr RRModeGet(xRRModeInfo * modeInfo, const char *name); 85105b261ecSmrg 85205b261ecSmrg/* 85305b261ecSmrg * Destroy a mode. 85405b261ecSmrg */ 85505b261ecSmrg 8566747b715Smrgextern _X_EXPORT void 857f7df2e56Smrg RRModeDestroy(RRModePtr mode); 85805b261ecSmrg 85905b261ecSmrg/* 86005b261ecSmrg * Return a list of modes that are valid for some output in pScreen 86105b261ecSmrg */ 862f7df2e56Smrgextern _X_EXPORT RRModePtr *RRModesForScreen(ScreenPtr pScreen, int *num_ret); 863f7df2e56Smrg 86405b261ecSmrg/* 86505b261ecSmrg * Initialize mode type 86605b261ecSmrg */ 8676747b715Smrgextern _X_EXPORT Bool 868f7df2e56Smrg RRModeInit(void); 8696747b715Smrg 8706747b715Smrg/* 8716747b715Smrg * Initialize mode type error value 8726747b715Smrg */ 8736747b715Smrgextern _X_EXPORT void 874f7df2e56Smrg RRModeInitErrorValue(void); 875f7df2e56Smrg 8766747b715Smrgextern _X_EXPORT int 877f7df2e56Smrg ProcRRCreateMode(ClientPtr client); 87805b261ecSmrg 8796747b715Smrgextern _X_EXPORT int 880f7df2e56Smrg ProcRRDestroyMode(ClientPtr client); 88105b261ecSmrg 8826747b715Smrgextern _X_EXPORT int 883f7df2e56Smrg ProcRRAddOutputMode(ClientPtr client); 88405b261ecSmrg 8856747b715Smrgextern _X_EXPORT int 886f7df2e56Smrg ProcRRDeleteOutputMode(ClientPtr client); 88705b261ecSmrg 88805b261ecSmrg/* rroutput.c */ 88905b261ecSmrg 89005b261ecSmrg/* 89105b261ecSmrg * Notify the output of some change. configChanged indicates whether 89205b261ecSmrg * any external configuration (mode list, clones, connected status) 89305b261ecSmrg * has changed, or whether the change was strictly internal 89405b261ecSmrg * (which crtc is in use) 89505b261ecSmrg */ 8966747b715Smrgextern _X_EXPORT void 897f7df2e56Smrg RROutputChanged(RROutputPtr output, Bool configChanged); 89805b261ecSmrg 89905b261ecSmrg/* 90005b261ecSmrg * Create an output 90105b261ecSmrg */ 90205b261ecSmrg 9036747b715Smrgextern _X_EXPORT RROutputPtr 904f7df2e56SmrgRROutputCreate(ScreenPtr pScreen, 905f7df2e56Smrg const char *name, int nameLength, void *devPrivate); 90605b261ecSmrg 90705b261ecSmrg/* 90805b261ecSmrg * Notify extension that output parameters have been changed 90905b261ecSmrg */ 9106747b715Smrgextern _X_EXPORT Bool 911f7df2e56Smrg RROutputSetClones(RROutputPtr output, RROutputPtr * clones, int numClones); 91205b261ecSmrg 9136747b715Smrgextern _X_EXPORT Bool 914f7df2e56Smrg 915f7df2e56SmrgRROutputSetModes(RROutputPtr output, 916f7df2e56Smrg RRModePtr * modes, int numModes, int numPreferred); 91705b261ecSmrg 9186747b715Smrgextern _X_EXPORT int 919f7df2e56Smrg RROutputAddUserMode(RROutputPtr output, RRModePtr mode); 92005b261ecSmrg 9216747b715Smrgextern _X_EXPORT int 922f7df2e56Smrg RROutputDeleteUserMode(RROutputPtr output, RRModePtr mode); 92305b261ecSmrg 9246747b715Smrgextern _X_EXPORT Bool 925f7df2e56Smrg RROutputSetCrtcs(RROutputPtr output, RRCrtcPtr * crtcs, int numCrtcs); 92605b261ecSmrg 9276747b715Smrgextern _X_EXPORT Bool 928f7df2e56Smrg RROutputSetConnection(RROutputPtr output, CARD8 connection); 92905b261ecSmrg 9306747b715Smrgextern _X_EXPORT Bool 931f7df2e56Smrg RROutputSetSubpixelOrder(RROutputPtr output, int subpixelOrder); 93205b261ecSmrg 9336747b715Smrgextern _X_EXPORT Bool 934f7df2e56Smrg RROutputSetPhysicalSize(RROutputPtr output, int mmWidth, int mmHeight); 93505b261ecSmrg 9366747b715Smrgextern _X_EXPORT void 937f7df2e56Smrg RRDeliverOutputEvent(ClientPtr client, WindowPtr pWin, RROutputPtr output); 93805b261ecSmrg 9396747b715Smrgextern _X_EXPORT void 940f7df2e56Smrg RROutputDestroy(RROutputPtr output); 94105b261ecSmrg 9426747b715Smrgextern _X_EXPORT int 943f7df2e56Smrg ProcRRGetOutputInfo(ClientPtr client); 94405b261ecSmrg 9456747b715Smrgextern _X_EXPORT int 946f7df2e56Smrg ProcRRSetOutputPrimary(ClientPtr client); 9474642e01fSmrg 9486747b715Smrgextern _X_EXPORT int 949f7df2e56Smrg ProcRRGetOutputPrimary(ClientPtr client); 9504642e01fSmrg 95105b261ecSmrg/* 95205b261ecSmrg * Initialize output type 95305b261ecSmrg */ 9546747b715Smrgextern _X_EXPORT Bool 955f7df2e56Smrg RROutputInit(void); 9566747b715Smrg 9576747b715Smrg/* 9586747b715Smrg * Initialize output type error value 9596747b715Smrg */ 9606747b715Smrgextern _X_EXPORT void 961f7df2e56Smrg RROutputInitErrorValue(void); 962f7df2e56Smrg 96305b261ecSmrg/* rrpointer.c */ 9646747b715Smrgextern _X_EXPORT void 965f7df2e56Smrg RRPointerMoved(ScreenPtr pScreen, int x, int y); 96605b261ecSmrg 9676747b715Smrgextern _X_EXPORT void 968f7df2e56Smrg RRPointerScreenConfigured(ScreenPtr pScreen); 96905b261ecSmrg 97005b261ecSmrg/* rrproperty.c */ 97105b261ecSmrg 9726747b715Smrgextern _X_EXPORT void 973f7df2e56Smrg RRDeleteAllOutputProperties(RROutputPtr output); 97405b261ecSmrg 9756747b715Smrgextern _X_EXPORT RRPropertyValuePtr 976f7df2e56SmrgRRGetOutputProperty(RROutputPtr output, Atom property, Bool pending); 97705b261ecSmrg 9786747b715Smrgextern _X_EXPORT RRPropertyPtr 979f7df2e56SmrgRRQueryOutputProperty(RROutputPtr output, Atom property); 980f7df2e56Smrg 9816747b715Smrgextern _X_EXPORT void 982f7df2e56Smrg RRDeleteOutputProperty(RROutputPtr output, Atom property); 98305b261ecSmrg 9846747b715Smrgextern _X_EXPORT Bool 985f7df2e56Smrg RRPostPendingProperties(RROutputPtr output); 986f7df2e56Smrg 9876747b715Smrgextern _X_EXPORT int 988f7df2e56Smrg 989f7df2e56SmrgRRChangeOutputProperty(RROutputPtr output, Atom property, Atom type, 990f7df2e56Smrg int format, int mode, unsigned long len, 9917e31ba66Smrg const void *value, Bool sendevent, Bool pending); 99205b261ecSmrg 9936747b715Smrgextern _X_EXPORT int 994f7df2e56Smrg 995f7df2e56SmrgRRConfigureOutputProperty(RROutputPtr output, Atom property, 996f7df2e56Smrg Bool pending, Bool range, Bool immutable, 9977e31ba66Smrg int num_values, const INT32 *values); 9986747b715Smrgextern _X_EXPORT int 999f7df2e56Smrg ProcRRChangeOutputProperty(ClientPtr client); 100005b261ecSmrg 10016747b715Smrgextern _X_EXPORT int 1002f7df2e56Smrg ProcRRGetOutputProperty(ClientPtr client); 100305b261ecSmrg 10046747b715Smrgextern _X_EXPORT int 1005f7df2e56Smrg ProcRRListOutputProperties(ClientPtr client); 100605b261ecSmrg 10076747b715Smrgextern _X_EXPORT int 1008f7df2e56Smrg ProcRRQueryOutputProperty(ClientPtr client); 100905b261ecSmrg 10106747b715Smrgextern _X_EXPORT int 1011f7df2e56Smrg ProcRRConfigureOutputProperty(ClientPtr client); 101205b261ecSmrg 10136747b715Smrgextern _X_EXPORT int 1014f7df2e56Smrg ProcRRDeleteOutputProperty(ClientPtr client); 1015f7df2e56Smrg 1016f7df2e56Smrg/* rrprovider.c */ 10177e31ba66Smrg#define PRIME_SYNC_PROP "PRIME Synchronization" 1018f7df2e56Smrgextern _X_EXPORT void 1019f7df2e56SmrgRRProviderInitErrorValue(void); 102005b261ecSmrg 1021f7df2e56Smrgextern _X_EXPORT int 1022f7df2e56SmrgProcRRGetProviders(ClientPtr client); 1023f7df2e56Smrg 1024f7df2e56Smrgextern _X_EXPORT int 1025f7df2e56SmrgProcRRGetProviderInfo(ClientPtr client); 1026f7df2e56Smrg 1027f7df2e56Smrgextern _X_EXPORT int 1028f7df2e56SmrgProcRRSetProviderOutputSource(ClientPtr client); 1029f7df2e56Smrg 1030f7df2e56Smrgextern _X_EXPORT int 1031f7df2e56SmrgProcRRSetProviderOffloadSink(ClientPtr client); 1032f7df2e56Smrg 1033f7df2e56Smrgextern _X_EXPORT Bool 1034f7df2e56SmrgRRProviderInit(void); 1035f7df2e56Smrg 1036f7df2e56Smrgextern _X_EXPORT RRProviderPtr 1037f7df2e56SmrgRRProviderCreate(ScreenPtr pScreen, const char *name, 1038f7df2e56Smrg int nameLength); 1039f7df2e56Smrg 1040f7df2e56Smrgextern _X_EXPORT void 1041f7df2e56SmrgRRProviderDestroy (RRProviderPtr provider); 1042f7df2e56Smrg 1043f7df2e56Smrgextern _X_EXPORT void 1044f7df2e56SmrgRRProviderSetCapabilities(RRProviderPtr provider, uint32_t capabilities); 1045f7df2e56Smrg 1046f7df2e56Smrgextern _X_EXPORT Bool 1047f7df2e56SmrgRRProviderLookup(XID id, RRProviderPtr *provider_p); 1048f7df2e56Smrg 1049f7df2e56Smrgextern _X_EXPORT void 1050f7df2e56SmrgRRDeliverProviderEvent(ClientPtr client, WindowPtr pWin, RRProviderPtr provider); 1051f7df2e56Smrg 1052f7df2e56Smrg/* rrproviderproperty.c */ 1053f7df2e56Smrg 1054f7df2e56Smrgextern _X_EXPORT void 1055f7df2e56Smrg RRDeleteAllProviderProperties(RRProviderPtr provider); 1056f7df2e56Smrg 1057f7df2e56Smrgextern _X_EXPORT RRPropertyValuePtr 1058f7df2e56Smrg RRGetProviderProperty(RRProviderPtr provider, Atom property, Bool pending); 1059f7df2e56Smrg 1060f7df2e56Smrgextern _X_EXPORT RRPropertyPtr 1061f7df2e56Smrg RRQueryProviderProperty(RRProviderPtr provider, Atom property); 1062f7df2e56Smrg 1063f7df2e56Smrgextern _X_EXPORT void 1064f7df2e56Smrg RRDeleteProviderProperty(RRProviderPtr provider, Atom property); 1065f7df2e56Smrg 1066f7df2e56Smrgextern _X_EXPORT int 1067f7df2e56SmrgRRChangeProviderProperty(RRProviderPtr provider, Atom property, Atom type, 1068f7df2e56Smrg int format, int mode, unsigned long len, 1069f7df2e56Smrg void *value, Bool sendevent, Bool pending); 1070f7df2e56Smrg 1071f7df2e56Smrgextern _X_EXPORT int 1072f7df2e56Smrg RRConfigureProviderProperty(RRProviderPtr provider, Atom property, 1073f7df2e56Smrg Bool pending, Bool range, Bool immutable, 1074f7df2e56Smrg int num_values, INT32 *values); 1075f7df2e56Smrg 1076f7df2e56Smrgextern _X_EXPORT Bool 1077f7df2e56Smrg RRPostProviderPendingProperties(RRProviderPtr provider); 1078f7df2e56Smrg 1079f7df2e56Smrgextern _X_EXPORT int 1080f7df2e56Smrg ProcRRGetProviderProperty(ClientPtr client); 1081f7df2e56Smrg 1082f7df2e56Smrgextern _X_EXPORT int 1083f7df2e56Smrg ProcRRListProviderProperties(ClientPtr client); 1084f7df2e56Smrg 1085f7df2e56Smrgextern _X_EXPORT int 1086f7df2e56Smrg ProcRRQueryProviderProperty(ClientPtr client); 1087f7df2e56Smrg 1088f7df2e56Smrgextern _X_EXPORT int 1089f7df2e56SmrgProcRRConfigureProviderProperty(ClientPtr client); 1090f7df2e56Smrg 1091f7df2e56Smrgextern _X_EXPORT int 1092f7df2e56SmrgProcRRChangeProviderProperty(ClientPtr client); 1093f7df2e56Smrg 1094f7df2e56Smrgextern _X_EXPORT int 1095f7df2e56Smrg ProcRRDeleteProviderProperty(ClientPtr client); 109605b261ecSmrg/* rrxinerama.c */ 10976747b715Smrg#ifdef XINERAMA 10986747b715Smrgextern _X_EXPORT void 1099f7df2e56Smrg RRXineramaExtensionInit(void); 11006747b715Smrg#endif 110105b261ecSmrg 1102f7df2e56Smrgvoid 1103f7df2e56SmrgRRMonitorInit(ScreenPtr screen); 1104f7df2e56Smrg 1105f7df2e56SmrgBool 1106f7df2e56SmrgRRMonitorMakeList(ScreenPtr screen, Bool get_active, RRMonitorPtr *monitors_ret, int *nmon_ret); 1107f7df2e56Smrg 1108f7df2e56Smrgint 1109f7df2e56SmrgRRMonitorCountList(ScreenPtr screen); 1110f7df2e56Smrg 1111f7df2e56Smrgvoid 1112f7df2e56SmrgRRMonitorFreeList(RRMonitorPtr monitors, int nmon); 1113f7df2e56Smrg 1114f7df2e56Smrgvoid 1115f7df2e56SmrgRRMonitorClose(ScreenPtr screen); 1116f7df2e56Smrg 1117f7df2e56SmrgRRMonitorPtr 1118f7df2e56SmrgRRMonitorAlloc(int noutput); 1119f7df2e56Smrg 1120f7df2e56Smrgint 1121f7df2e56SmrgRRMonitorAdd(ClientPtr client, ScreenPtr screen, RRMonitorPtr monitor); 1122f7df2e56Smrg 1123f7df2e56Smrgvoid 1124f7df2e56SmrgRRMonitorFree(RRMonitorPtr monitor); 1125f7df2e56Smrg 1126f7df2e56Smrgint 1127f7df2e56SmrgProcRRGetMonitors(ClientPtr client); 1128f7df2e56Smrg 1129f7df2e56Smrgint 1130f7df2e56SmrgProcRRSetMonitor(ClientPtr client); 1131f7df2e56Smrg 1132f7df2e56Smrgint 1133f7df2e56SmrgProcRRDeleteMonitor(ClientPtr client); 1134f7df2e56Smrg 11357e31ba66Smrgint 11367e31ba66SmrgProcRRCreateLease(ClientPtr client); 11377e31ba66Smrg 11387e31ba66Smrgint 11397e31ba66SmrgProcRRFreeLease(ClientPtr client); 11407e31ba66Smrg 1141f7df2e56Smrg#endif /* _RANDRSTR_H_ */ 114205b261ecSmrg 114305b261ecSmrg/* 1144f7df2e56Smrg 114505b261ecSmrgrandr extension implementation structure 114605b261ecSmrg 114705b261ecSmrgQuery state: 114805b261ecSmrg ProcRRGetScreenInfo/ProcRRGetScreenResources 114905b261ecSmrg RRGetInfo 1150f7df2e56Smrg 115105b261ecSmrg • Request configuration from driver, either 1.0 or 1.2 style 115205b261ecSmrg • These functions only record state changes, all 115305b261ecSmrg other actions are pended until RRTellChanged is called 1154f7df2e56Smrg 115505b261ecSmrg ->rrGetInfo 115605b261ecSmrg 1.0: 115705b261ecSmrg RRRegisterSize 115805b261ecSmrg RRRegisterRate 115905b261ecSmrg RRSetCurrentConfig 116005b261ecSmrg 1.2: 116105b261ecSmrg RRScreenSetSizeRange 116205b261ecSmrg RROutputSetCrtcs 116305b261ecSmrg RRModeGet 116405b261ecSmrg RROutputSetModes 116505b261ecSmrg RROutputSetConnection 116605b261ecSmrg RROutputSetSubpixelOrder 116705b261ecSmrg RROutputSetClones 116805b261ecSmrg RRCrtcNotify 1169f7df2e56Smrg 117005b261ecSmrg • Must delay scanning configuration until after ->rrGetInfo returns 117105b261ecSmrg because some drivers will call SetCurrentConfig in the middle 117205b261ecSmrg of the ->rrGetInfo operation. 1173f7df2e56Smrg 117405b261ecSmrg 1.0: 117505b261ecSmrg 117605b261ecSmrg • Scan old configuration, mirror to new structures 1177f7df2e56Smrg 117805b261ecSmrg RRScanOldConfig 117905b261ecSmrg RRCrtcCreate 118005b261ecSmrg RROutputCreate 118105b261ecSmrg RROutputSetCrtcs 118205b261ecSmrg RROutputSetConnection 118305b261ecSmrg RROutputSetSubpixelOrder 118405b261ecSmrg RROldModeAdd • This adds modes one-at-a-time 118505b261ecSmrg RRModeGet 118605b261ecSmrg RRCrtcNotify 1187f7df2e56Smrg 118805b261ecSmrg • send events, reset pointer if necessary 1189f7df2e56Smrg 119005b261ecSmrg RRTellChanged 119105b261ecSmrg WalkTree (sending events) 1192f7df2e56Smrg 119305b261ecSmrg • when layout has changed: 119405b261ecSmrg RRPointerScreenConfigured 119505b261ecSmrg RRSendConfigNotify 1196f7df2e56Smrg 119705b261ecSmrgAsynchronous state setting (1.2 only) 119805b261ecSmrg When setting state asynchronously, the driver invokes the 119905b261ecSmrg ->rrGetInfo function and then calls RRTellChanged to flush 120005b261ecSmrg the changes to the clients and reset pointer if necessary 120105b261ecSmrg 120205b261ecSmrgSet state 120305b261ecSmrg 120405b261ecSmrg ProcRRSetScreenConfig 120505b261ecSmrg RRCrtcSet 120605b261ecSmrg 1.2: 120705b261ecSmrg ->rrCrtcSet 120805b261ecSmrg RRCrtcNotify 120905b261ecSmrg 1.0: 121005b261ecSmrg ->rrSetConfig 121105b261ecSmrg RRCrtcNotify 121205b261ecSmrg RRTellChanged 121305b261ecSmrg */ 1214