loader/dri3: Add XRGB2101010 and ARGB2101010 support.
[mesa.git] / src / loader / loader_dri3_helper.h
index 5b8fd1d24cad4ab928f0841694d9998b181ec774..0dd37e91717e837fdeff89f0f82612cb885de17a 100644 (file)
@@ -33,6 +33,7 @@
 
 #include <GL/gl.h>
 #include <GL/internal/dri_interface.h>
+#include <c11/threads.h>
 
 enum loader_dri3_buffer_type {
    loader_dri3_buffer_back = 0,
@@ -67,8 +68,6 @@ struct loader_dri3_buffer {
    uint32_t     flags;
    uint32_t     width, height;
    uint64_t     last_swap;
-
-   enum loader_dri3_buffer_type        buffer_type;
 };
 
 
@@ -97,9 +96,6 @@ struct loader_dri3_extensions {
 struct loader_dri3_drawable;
 
 struct loader_dri3_vtable {
-   int (*get_swap_interval)(struct loader_dri3_drawable *);
-   int (*clamp_swap_interval)(struct loader_dri3_drawable *, int);
-   void (*set_swap_interval)(struct loader_dri3_drawable *, int);
    void (*set_drawable_size)(struct loader_dri3_drawable *, int, int);
    bool (*in_current_context)(struct loader_dri3_drawable *);
    __DRIcontext *(*get_dri_context)(struct loader_dri3_drawable *);
@@ -148,6 +144,7 @@ struct loader_dri3_drawable {
    struct loader_dri3_buffer *buffers[LOADER_DRI3_NUM_BUFFERS];
    int cur_back;
    int num_back;
+   int cur_blit_source;
 
    uint32_t *stamp;
 
@@ -156,9 +153,22 @@ struct loader_dri3_drawable {
    xcb_special_event_t *special_event;
 
    bool first_init;
+   int swap_interval;
 
    struct loader_dri3_extensions *ext;
-   struct loader_dri3_vtable *vtable;
+   const struct loader_dri3_vtable *vtable;
+
+   unsigned int swap_method;
+   unsigned int back_format;
+
+   /* Currently protects the following fields:
+    * event_cnd, has_event_waiter,
+    * recv_sbc, ust, msc, recv_msc_serial,
+    * notify_ust, notify_msc
+    */
+   mtx_t mtx;
+   cnd_t event_cnd;
+   bool has_event_waiter;
 };
 
 void
@@ -175,7 +185,7 @@ loader_dri3_drawable_init(xcb_connection_t *conn,
                           bool is_different_gpu,
                           const __DRIconfig *dri_config,
                           struct loader_dri3_extensions *ext,
-                          struct loader_dri3_vtable *vtable,
+                          const struct loader_dri3_vtable *vtable,
                           struct loader_dri3_drawable*);
 
 bool loader_dri3_wait_for_msc(struct loader_dri3_drawable *draw,
@@ -238,4 +248,12 @@ loader_dri3_get_buffers(__DRIdrawable *driDrawable,
                         uint32_t buffer_mask,
                         struct __DRIimageList *buffers);
 
+void
+loader_dri3_update_drawable_geometry(struct loader_dri3_drawable *draw);
+
+void
+loader_dri3_swapbuffer_barrier(struct loader_dri3_drawable *draw);
+
+void
+loader_dri3_close_screen(__DRIscreen *dri_screen);
 #endif