#include <GL/gl.h>
#include <GL/internal/dri_interface.h>
+#include <c11/threads.h>
enum loader_dri3_buffer_type {
loader_dri3_buffer_back = 0,
uint32_t flags;
uint32_t width, height;
uint64_t last_swap;
-
- enum loader_dri3_buffer_type buffer_type;
};
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 *);
struct loader_dri3_buffer *buffers[LOADER_DRI3_NUM_BUFFERS];
int cur_back;
int num_back;
+ int cur_blit_source;
uint32_t *stamp;
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
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,
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