struct dri3_buffer {
__DRIimage *image;
+ __DRIimage *linear_buffer;
uint32_t pixmap;
/* Synchronization between the client and X server is done using an
{
__GLXDRIdisplay base;
- const __DRIextension *loader_extensions[8];
+ const __DRIextension **loader_extensions;
/* DRI3 bits */
int dri3Major;
const __DRI2flushExtension *f;
const __DRI2configQueryExtension *config;
const __DRItexBufferExtension *texBuffer;
+ const __DRI2rendererQueryExtension *rendererQuery;
const __DRIconfig **driver_configs;
void *driver;
int fd;
+ int is_different_gpu;
- Bool show_fps;
+ int show_fps_interval;
};
struct dri3_context
__DRIcontext *driContext;
};
-#define DRI3_MAX_BACK 3
+#define DRI3_MAX_BACK 4
#define DRI3_BACK_ID(i) (i)
#define DRI3_FRONT_ID (DRI3_MAX_BACK)
uint8_t is_pixmap;
uint8_t flipping;
+ /* Present extension capabilities
+ */
+ uint32_t present_capabilities;
+
/* SBC numbers are tracked by using the serial numbers
* in the present request and complete events
*/
uint64_t send_sbc;
uint64_t recv_sbc;
- /* Last received UST/MSC values */
+ /* Last received UST/MSC values for pixmap present complete */
uint64_t ust, msc;
+ /* 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;
xcb_present_event_t eid;
xcb_gcontext_t gc;
xcb_special_event_t *special_event;
+
+ /* LIBGL_SHOW_FPS support */
+ uint64_t previous_ust;
+ unsigned frames;
};
+
+
+_X_HIDDEN int
+dri3_query_renderer_integer(struct glx_screen *base, int attribute,
+ unsigned int *value);
+
+_X_HIDDEN int
+dri3_query_renderer_string(struct glx_screen *base, int attribute,
+ const char **value);