#ifndef DRI_STRUCT_H
#define DRI_STRUCT_H
#include "xf86drm.h"
#include "xf86Crtc.h"
#define DRI_DRAWABLE_PRIV_FROM_WINDOW(pWin) ((DRIDrawablePrivPtr) \
dixLookupPrivate(&(pWin)->devPrivates, DRIWindowPrivKey))
#define DRI_DRAWABLE_PRIV_FROM_PIXMAP(pPix) ((DRIDrawablePrivPtr) \
dixLookupPrivate(&(pPix)->devPrivates, DRIWindowPrivKey))
typedef struct _DRIDrawablePrivRec
{
drm_drawable_t hwDrawable;
int drawableIndex;
ScreenPtr pScreen;
int refCount;
int nrects;
} DRIDrawablePrivRec, *DRIDrawablePrivPtr;
struct _DRIContextPrivRec
{
drm_context_t hwContext;
ScreenPtr pScreen;
Bool valid3D;
DRIContextFlags flags;
void** pContextStore;
};
#define DRI_SCREEN_PRIV(pScreen) ((DRIScreenPrivPtr) \
(dixPrivateKeyRegistered(DRIScreenPrivKey) ? \
dixLookupPrivate(&(pScreen)->devPrivates, DRIScreenPrivKey) : NULL))
#define DRI_SCREEN_PRIV_FROM_INDEX(screenIndex) ((DRIScreenPrivPtr) \
dixLookupPrivate(&screenInfo.screens[screenIndex]->devPrivates, \
DRIScreenPrivKey))
#define DRI_ENT_PRIV(pScrn) \
((DRIEntPrivIndex < 0) ? \
NULL: \
((DRIEntPrivPtr)(xf86GetEntityPrivate((pScrn)->entityList[0], \
DRIEntPrivIndex)->ptr)))
typedef struct _DRIScreenPrivRec
{
Bool directRenderingSupport;
int drmFD;
drm_handle_t hSAREA;
XF86DRISAREAPtr pSAREA;
drm_context_t myContext;
DRIContextPrivPtr myContextPriv;
DRIContextPrivPtr lastPartial3DContext;
void** hiddenContextStore;
void** partial3DContextStore;
DRIInfoPtr pDriverInfo;
int nrWindows;
int nrWindowsVisible;
int nrWalked;
drm_clip_rect_t private_buffer_rect;
DrawablePtr fullscreen;
drm_clip_rect_t fullscreen_rect;
DRIWrappedFuncsRec wrap;
DestroyWindowProcPtr DestroyWindow;
DrawablePtr DRIDrawables[SAREA_MAX_DRAWABLES];
DRIContextPrivPtr dummyCtxPriv;
Bool createDummyCtx;
Bool createDummyCtxPriv;
Bool grabbedDRILock;
Bool drmSIGIOHandlerInstalled;
Bool wrapped;
Bool windowsTouched;
int lockRefCount;
drm_handle_t hLSAREA;
XF86DRILSAREAPtr pLSAREA;
int* pLockRefCount;
int* pLockingContext;
xf86_crtc_notify_proc_ptr xf86_crtc_notify;
} DRIScreenPrivRec, *DRIScreenPrivPtr;
typedef struct _DRIEntPrivRec {
int drmFD;
Bool drmOpened;
Bool sAreaGrabbed;
drm_handle_t hLSAREA;
XF86DRILSAREAPtr pLSAREA;
unsigned long sAreaSize;
int lockRefCount;
int lockingContext;
ScreenPtr resOwner;
Bool keepFDOpen;
int refCount;
} DRIEntPrivRec, *DRIEntPrivPtr;
#endif