1 /**************************************************************************
3 Copyright 1998-1999 Precision Insight, Inc., Cedar Park, Texas.
6 Permission is hereby granted, free of charge, to any person obtaining a
7 copy of this software and associated documentation files (the
8 "Software"), to deal in the Software without restriction, including
9 without limitation the rights to use, copy, modify, merge, publish,
10 distribute, sub license, and/or sell copies of the Software, and to
11 permit persons to whom the Software is furnished to do so, subject to
12 the following conditions:
14 The above copyright notice and this permission notice (including the
15 next paragraph) shall be included in all copies or substantial portions
18 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
19 OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
20 MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
21 IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR
22 ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
23 TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
24 SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
26 **************************************************************************/
30 * Jens Owen <jens@tungstengraphics.com>
34 /* Prototypes for DRI functions */
38 #include "scrnintstr.h"
41 typedef int DRISyncType
;
47 typedef int DRIContextType
;
49 typedef struct _DRIContextPrivRec DRIContextPrivRec
, *DRIContextPrivPtr
;
51 typedef enum _DRIContextFlags
53 DRI_CONTEXT_2DONLY
= 0x01,
54 DRI_CONTEXT_PRESERVED
= 0x02,
55 DRI_CONTEXT_RESERVED
= 0x04 /* DRI Only -- no kernel equivalent */
58 #define DRI_NO_CONTEXT 0
59 #define DRI_2D_CONTEXT 1
60 #define DRI_3D_CONTEXT 2
62 typedef int DRISwapMethod
;
64 #define DRI_HIDE_X_CONTEXT 0
65 #define DRI_SERVER_SWAP 1
66 #define DRI_KERNEL_SWAP 2
68 typedef int DRIWindowRequests
;
70 #define DRI_NO_WINDOWS 0
71 #define DRI_3D_WINDOWS_ONLY 1
72 #define DRI_ALL_WINDOWS 2
75 typedef void (*ClipNotifyPtr
)( WindowPtr
, int, int );
76 typedef void (*AdjustFramePtr
)(int scrnIndex
, int x
, int y
, int flags
);
80 * These functions can be wrapped by the DRI. Each of these have
81 * generic default funcs (initialized in DRICreateInfoRec) and can be
82 * overridden by the driver in its [driver]DRIScreenInit function.
85 ScreenWakeupHandlerProcPtr WakeupHandler
;
86 ScreenBlockHandlerProcPtr BlockHandler
;
87 WindowExposuresProcPtr WindowExposures
;
88 CopyWindowProcPtr CopyWindow
;
89 ValidateTreeProcPtr ValidateTree
;
90 PostValidateTreeProcPtr PostValidateTree
;
91 ClipNotifyProcPtr ClipNotify
;
92 AdjustFramePtr AdjustFrame
;
93 } DRIWrappedFuncsRec
, *DRIWrappedFuncsPtr
;
97 * Prior to Xorg 6.8.99.8, the DRIInfoRec structure was implicitly versioned
98 * by the XF86DRI_*_VERSION defines in xf86dristr.h. These numbers were also
99 * being used to version the XFree86-DRI protocol. Bugs #3066 and #3163
100 * showed that this was inadequate. The DRIInfoRec structure is now versioned
101 * by the DRIINFO_*_VERSION defines in this file. - ajax, 2005-05-18.
104 * 4.1.0 and earlier: DRIQueryVersion returns XF86DRI_*_VERSION.
105 * 4.2.0: DRIQueryVersion begins returning DRIINFO_*_VERSION.
106 * 5.0.0: frameBufferPhysicalAddress changed from CARD32 to pointer.
109 #define DRIINFO_MAJOR_VERSION 5
110 #define DRIINFO_MINOR_VERSION 4
111 #define DRIINFO_PATCH_VERSION 0
113 typedef unsigned long long (*DRITexOffsetStartProcPtr
)(PixmapPtr pPix
);
114 typedef void (*DRITexOffsetFinishProcPtr
)(PixmapPtr pPix
);
117 /* driver call back functions
119 * New fields should be added at the end for backwards compatibility.
120 * Bump the DRIINFO patch number to indicate bugfixes.
121 * Bump the DRIINFO minor number to indicate new fields.
122 * Bump the DRIINFO major number to indicate binary-incompatible changes.
124 Bool (*CreateContext
)(ScreenPtr pScreen
,
126 drm_context_t hHWContext
,
127 void* pVisualConfigPriv
,
128 DRIContextType context
);
129 void (*DestroyContext
)(ScreenPtr pScreen
,
130 drm_context_t hHWContext
,
131 DRIContextType context
);
132 void (*SwapContext
)(ScreenPtr pScreen
,
133 DRISyncType syncType
,
134 DRIContextType readContextType
,
135 void* readContextStore
,
136 DRIContextType writeContextType
,
137 void* writeContextStore
);
138 void (*InitBuffers
)(WindowPtr pWin
,
141 void (*MoveBuffers
)(WindowPtr pWin
,
142 DDXPointRec ptOldOrg
,
145 void (*TransitionTo3d
)(ScreenPtr pScreen
);
146 void (*TransitionTo2d
)(ScreenPtr pScreen
);
148 void (*SetDrawableIndex
)(WindowPtr pWin
, CARD32 indx
);
149 Bool (*OpenFullScreen
)(ScreenPtr pScreen
);
150 Bool (*CloseFullScreen
)(ScreenPtr pScreen
);
152 /* wrapped functions */
153 DRIWrappedFuncsRec wrap
;
157 char* clientDriverName
;
159 int ddxDriverMajorVersion
;
160 int ddxDriverMinorVersion
;
161 int ddxDriverPatchVersion
;
162 pointer frameBufferPhysicalAddress
;
163 long frameBufferSize
;
164 long frameBufferStride
;
166 int maxDrawableTableEntry
;
167 int ddxDrawableTableEntry
;
169 DRISwapMethod driverSwapMethod
;
170 DRIWindowRequests bufferRequests
;
174 Bool createDummyCtxPriv
;
176 /* New with DRI version 4.1.0 */
177 void (*TransitionSingleToMulti3D
)(ScreenPtr pScreen
);
178 void (*TransitionMultiToSingle3D
)(ScreenPtr pScreen
);
180 /* New with DRI version 5.1.0 */
181 void (*ClipNotify
)(ScreenPtr pScreen
, WindowPtr
*ppWin
, int num
);
183 /* New with DRI version 5.2.0 */
187 /* New with DRI version 5.3.0 */
188 DRITexOffsetStartProcPtr texOffsetStart
;
189 DRITexOffsetFinishProcPtr texOffsetFinish
;
191 /* New with DRI version 5.4.0 */
192 int dontMapFrameBuffer
;
193 drm_handle_t hFrameBuffer
; /* Handle to framebuffer, either
194 * mapped by DDX driver or DRI */
196 } DRIInfoRec
, *DRIInfoPtr
;
199 extern Bool
DRIOpenDRMMaster(ScrnInfoPtr pScrn
, unsigned long sAreaSize
,
201 const char *drmDriverName
);
203 extern Bool
DRIScreenInit(ScreenPtr pScreen
,
207 extern void DRICloseScreen(ScreenPtr pScreen
);
209 extern Bool
DRIExtensionInit(void);
211 extern void DRIReset(void);
213 extern Bool
DRIQueryDirectRenderingCapable(ScreenPtr pScreen
,
216 extern Bool
DRIOpenConnection(ScreenPtr pScreen
,
217 drm_handle_t
* hSAREA
,
220 extern Bool
DRIAuthConnection(ScreenPtr pScreen
, drm_magic_t magic
);
222 extern Bool
DRICloseConnection(ScreenPtr pScreen
);
224 extern Bool
DRIGetClientDriverName(ScreenPtr pScreen
,
225 int* ddxDriverMajorVersion
,
226 int* ddxDriverMinorVersion
,
227 int* ddxDriverPatchVersion
,
228 char** clientDriverName
);
230 extern Bool
DRICreateContext(ScreenPtr pScreen
,
233 drm_context_t
* pHWContext
);
235 extern Bool
DRIDestroyContext(ScreenPtr pScreen
, XID context
);
237 extern Bool
DRIContextPrivDelete(pointer pResource
, XID id
);
239 extern Bool
DRICreateDrawable(ScreenPtr pScreen
,
241 DrawablePtr pDrawable
,
242 drm_drawable_t
* hHWDrawable
);
244 extern Bool
DRIDestroyDrawable(ScreenPtr pScreen
,
246 DrawablePtr pDrawable
);
248 extern Bool
DRIDrawablePrivDelete(pointer pResource
,
251 extern Bool
DRIGetDrawableInfo(ScreenPtr pScreen
,
252 DrawablePtr pDrawable
,
260 drm_clip_rect_t
** pClipRects
,
263 int* numBackClipRects
,
264 drm_clip_rect_t
** pBackClipRects
);
266 extern Bool
DRIGetDeviceInfo(ScreenPtr pScreen
,
267 drm_handle_t
* hFrameBuffer
,
274 extern DRIInfoPtr
DRICreateInfoRec(void);
276 extern void DRIDestroyInfoRec(DRIInfoPtr DRIInfo
);
278 extern Bool
DRIFinishScreenInit(ScreenPtr pScreen
);
280 extern void DRIWakeupHandler(pointer wakeupData
,
284 extern void DRIBlockHandler(pointer blockData
,
288 extern void DRIDoWakeupHandler(int screenNum
,
290 unsigned long result
,
293 extern void DRIDoBlockHandler(int screenNum
,
298 extern void DRISwapContext(int drmFD
,
302 extern void *DRIGetContextStore(DRIContextPrivPtr context
);
304 extern void DRIWindowExposures(WindowPtr pWin
,
308 extern Bool
DRIDestroyWindow(WindowPtr pWin
);
310 extern void DRICopyWindow(WindowPtr pWin
,
311 DDXPointRec ptOldOrg
,
314 extern int DRIValidateTree(WindowPtr pParent
,
318 extern void DRIPostValidateTree(WindowPtr pParent
,
322 extern void DRIClipNotify(WindowPtr pWin
,
326 extern CARD32
DRIGetDrawableIndex(WindowPtr pWin
);
328 extern void DRIPrintDrawableLock(ScreenPtr pScreen
, char *msg
);
330 extern void DRILock(ScreenPtr pScreen
, int flags
);
332 extern void DRIUnlock(ScreenPtr pScreen
);
334 extern DRIWrappedFuncsRec
*DRIGetWrappedFuncs(ScreenPtr pScreen
);
336 extern void *DRIGetSAREAPrivate(ScreenPtr pScreen
);
338 extern unsigned int DRIGetDrawableStamp(ScreenPtr pScreen
,
339 CARD32 drawable_index
);
341 extern DRIContextPrivPtr
DRICreateContextPriv(ScreenPtr pScreen
,
342 drm_context_t
* pHWContext
,
343 DRIContextFlags flags
);
345 extern DRIContextPrivPtr
DRICreateContextPrivFromHandle(ScreenPtr pScreen
,
346 drm_context_t hHWContext
,
347 DRIContextFlags flags
);
349 extern Bool
DRIDestroyContextPriv(DRIContextPrivPtr pDRIContextPriv
);
351 extern drm_context_t
DRIGetContext(ScreenPtr pScreen
);
353 extern void DRIQueryVersion(int *majorVersion
,
357 extern void DRIAdjustFrame(int scrnIndex
, int x
, int y
, int flags
);
359 extern void DRIMoveBuffersHelper(ScreenPtr pScreen
,
366 extern char *DRICreatePCIBusID(pciVideoPtr PciInfo
);
368 extern int drmInstallSIGIOHandler(int fd
, void (*f
)(int, void *, void *));
369 extern int drmRemoveSIGIOHandler(int fd
);
370 extern int DRIMasterFD(ScrnInfoPtr pScrn
);
372 extern void *DRIMasterSareaPointer(ScrnInfoPtr pScrn
);
374 extern drm_handle_t
DRIMasterSareaHandle(ScrnInfoPtr pScrn
);
376 extern void DRIGetTexOffsetFuncs(ScreenPtr pScreen
,
377 DRITexOffsetStartProcPtr
*texOffsetStartFunc
,
378 DRITexOffsetFinishProcPtr
*texOffsetFinishFunc
);