struct st_framebuffer;
struct dri_context;
+#define DRI_SWAP_FENCES_MAX 4
+#define DRI_SWAP_FENCES_MASK 3
+#define DRI_SWAP_FENCES_DEFAULT 1
+
struct dri_drawable
{
struct st_framebuffer_iface base;
struct st_visual stvis;
+ struct dri_screen *screen;
+
/* dri */
__DRIdrawable *dPriv;
__DRIscreen *sPriv;
struct pipe_resource *textures[ST_ATTACHMENT_COUNT];
unsigned int texture_mask, texture_stamp;
+ struct pipe_fence_handle *swap_fences[DRI_SWAP_FENCES_MAX];
+ unsigned int cur_fences;
+ unsigned int head;
+ unsigned int tail;
+ unsigned int desired_fences;
+
/* used only by DRISW */
struct pipe_surface *drisw_surface;
void (*flush_frontbuffer)(struct dri_drawable *drawable,
enum st_attachment_type statt);
+
+ void (*update_tex_buffer)(struct dri_drawable *drawable,
+ struct dri_context *ctx,
+ struct pipe_resource *res);
};
static INLINE struct dri_drawable *
dri_drawable(__DRIdrawable * driDrawPriv)
{
- return (struct dri_drawable *)driDrawPriv->driverPrivate;
+ return (struct dri_drawable *) (driDrawPriv)
+ ? driDrawPriv->driverPrivate : NULL;
}
/***********************************************************************
boolean
dri_create_buffer(__DRIscreen * sPriv,
__DRIdrawable * dPriv,
- const __GLcontextModes * visual, boolean isPixmap);
+ const struct gl_config * visual, boolean isPixmap);
void dri_destroy_buffer(__DRIdrawable * dPriv);
enum pipe_format *format,
unsigned *bind);
-extern const __DRItexBufferExtension driTexBufferExtension;
+void
+dri_flush(__DRIcontext *cPriv,
+ __DRIdrawable *dPriv,
+ unsigned flags,
+ enum __DRI2throttleReason reason);
+extern const __DRItexBufferExtension driTexBufferExtension;
+extern const __DRI2throttleExtension dri2ThrottleExtension;
#endif
/* vim: set sw=3 ts=8 sts=3 expandtab: */