st/dri: implement new driver hook flush_with_flags
[mesa.git] / src / gallium / state_trackers / dri / common / dri_drawable.h
index 74e662d36c456e6d9793af1cb551f511e2c5caf4..6336c81a7155a524eb1bbea22a1beec07f88ab14 100644 (file)
@@ -36,11 +36,17 @@ struct pipe_surface;
 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;
@@ -53,6 +59,12 @@ struct dri_drawable
    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;
 
@@ -65,12 +77,17 @@ struct dri_drawable
 
    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;
 }
 
 /***********************************************************************
@@ -79,7 +96,7 @@ dri_drawable(__DRIdrawable * driDrawPriv)
 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);
 
@@ -89,8 +106,14 @@ dri_drawable_get_format(struct dri_drawable *drawable,
                         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: */