#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 *);
- 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 *);
- __DRIscreen *(*get_dri_screen)(struct loader_dri3_drawable *);
+ __DRIscreen *(*get_dri_screen)(void);
void (*flush_drawable)(struct loader_dri3_drawable *, unsigned);
void (*show_fps)(struct loader_dri3_drawable *, uint64_t);
};
uint8_t have_back;
uint8_t have_fake_front;
uint8_t is_pixmap;
- uint8_t flipping;
/* Information about the GPU owning the buffer */
__DRIscreen *dri_screen;
/* Last received UST/MSC values from present notify msc event */
uint64_t notify_ust, notify_msc;
- /* Serial numbers for tracking wait_for_msc events */
- uint32_t send_msc_serial;
- uint32_t recv_msc_serial;
-
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;
const struct loader_dri3_vtable *vtable;
+
+ unsigned int swap_method;
+ unsigned int back_format;
+ xcb_present_complete_mode_t last_present_mode;
+
+ /* 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
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