9 /* TODO: Bring in DRI XML options */
11 typedef struct dri_version
18 typedef struct dri_screen
22 dri_version_t ddx
, dri
, drm
;
32 typedef struct dri_drawable
34 drm_drawable_t drm_drawable
;
36 unsigned int sarea_index
;
37 unsigned int *sarea_stamp
;
38 unsigned int last_sarea_stamp
;
41 int num_cliprects
, num_back_cliprects
;
42 drm_clip_rect_t
*cliprects
, *back_cliprects
;
43 dri_screen_t
*dri_screen
;
44 unsigned int refcount
;
48 typedef struct dri_context
51 drm_context_t drm_context
;
52 dri_screen_t
*dri_screen
;
56 typedef struct dri_framebuffer
58 drm_handle_t drm_handle
;
59 int base
, size
, stride
;
64 int driCreateScreen(Display
*display
, int screen
, dri_screen_t
**dri_screen
, dri_framebuffer_t
*dri_framebuf
);
65 int driDestroyScreen(dri_screen_t
*dri_screen
);
66 int driCreateDrawable(dri_screen_t
*dri_screen
, Drawable drawable
, dri_drawable_t
**dri_drawable
);
67 int driUpdateDrawableInfo(dri_drawable_t
*dri_drawable
);
68 int driDestroyDrawable(dri_drawable_t
*dri_drawable
);
69 int driCreateContext(dri_screen_t
*dri_screen
, Visual
*visual
, dri_context_t
**dri_context
);
70 int driDestroyContext(dri_context_t
*dri_context
);
72 #define DRI_VALIDATE_DRAWABLE_INFO_ONCE(dri_drawable) \
75 if (*(dri_drawable->sarea_stamp) != dri_drawable->last_sarea_stamp) \
76 driUpdateDrawableInfo(dri_drawable); \
79 #define DRI_VALIDATE_DRAWABLE_INFO(dri_screen, dri_drawable) \
82 while (*(dri_drawable->sarea_stamp) != dri_drawable->last_sarea_stamp) \
84 register unsigned int hwContext = dri_screen->sarea->lock.lock & \
85 ~(DRM_LOCK_HELD | DRM_LOCK_CONT); \
86 DRM_UNLOCK(dri_screen->fd, &dri_screen->sarea->lock, hwContext); \
88 DRM_SPINLOCK(&dri_screen->sarea->drawable_lock, dri_screen->draw_lock_id); \
89 DRI_VALIDATE_DRAWABLE_INFO_ONCE(dri_drawable); \
90 DRM_SPINUNLOCK(&dri_screen->sarea->drawable_lock, dri_screen->draw_lock_id); \
92 DRM_LIGHT_LOCK(dri_screen->fd, &dri_screen->sarea->lock, hwContext); \