summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--configure.ac2
-rw-r--r--hw/xfree86/dri2/dri2.c25
-rw-r--r--hw/xfree86/dri2/dri2.h1
3 files changed, 23 insertions, 5 deletions
diff --git a/configure.ac b/configure.ac
index f760730c3..e831d7b77 100644
--- a/configure.ac
+++ b/configure.ac
@@ -758,7 +758,7 @@ RECORDPROTO="recordproto >= 1.13.99.1"
SCRNSAVERPROTO="scrnsaverproto >= 1.1"
RESOURCEPROTO="resourceproto >= 1.2.0"
DRIPROTO="xf86driproto >= 2.1.0"
-DRI2PROTO="dri2proto >= 2.8"
+DRI2PROTO="dri2proto >= 2.9"
DRI3PROTO="dri3proto >= 1.0"
XINERAMAPROTO="xineramaproto"
BIGFONTPROTO="xf86bigfontproto >= 1.2.0"
diff --git a/hw/xfree86/dri2/dri2.c b/hw/xfree86/dri2/dri2.c
index 226d77cc2..a3b3fb47c 100644
--- a/hw/xfree86/dri2/dri2.c
+++ b/hw/xfree86/dri2/dri2.c
@@ -49,6 +49,8 @@
#include "damage.h"
#include "xf86.h"
+#include <X11/extensions/dri2proto.h> /* for parameter names */
+
CARD8 dri2_major; /* version of DRI2 supported by DDX */
CARD8 dri2_minor;
@@ -115,6 +117,7 @@ typedef struct _DRI2Screen {
unsigned int lastSequence;
int prime_id;
int scheduleSwap0;
+ int bufferAge;
DRI2CreateBufferProcPtr CreateBuffer;
DRI2DestroyBufferProcPtr DestroyBuffer;
@@ -1114,6 +1117,9 @@ DRI2SwapBuffers(ClientPtr client, DrawablePtr pDraw, CARD64 target_msc,
return BadDrawable;
}
+ if (ds->bufferAge)
+ pSrcBuffer->flags = *swap_target;
+
/* Old DDX or PRIME, just blit */
if (!ds->scheduleSwap0 || pPriv->prime_id) {
BoxRec box;
@@ -1559,6 +1565,7 @@ DRI2ScreenInit(ScreenPtr pScreen, DRI2InfoPtr info)
if (info->version >= 10) {
ds->scheduleSwap0 = info->scheduleSwap0;
+ ds->bufferAge = info->bufferAge;
}
/*
@@ -1681,10 +1688,20 @@ DRI2GetParam(ClientPtr client,
switch (high_byte) {
case 0:
- /* Parameter names whose high_byte is 0 are reserved for the X
- * server. The server currently recognizes no parameters.
- */
- goto not_recognized;
+ /* Parameter names whose high_byte is 0 are reserved for the X
+ * server.
+ */
+ switch (param) {
+ case DRI2ParamXHasBufferAge:
+ *value = ds->bufferAge;
+ break;
+ default:
+ goto not_recognized;
+ }
+
+ *is_param_recognized = TRUE;
+ return Success;
+
case 1:
/* Parameter names whose high byte is 1 are reserved for the DDX. */
if (ds->GetParam)
diff --git a/hw/xfree86/dri2/dri2.h b/hw/xfree86/dri2/dri2.h
index 1cf428828..e76f7a8ad 100644
--- a/hw/xfree86/dri2/dri2.h
+++ b/hw/xfree86/dri2/dri2.h
@@ -255,6 +255,7 @@ typedef struct {
/* added in version 10 */
int scheduleSwap0;
+ int bufferAge;
} DRI2InfoRec, *DRI2InfoPtr;
extern _X_EXPORT Bool DRI2ScreenInit(ScreenPtr pScreen, DRI2InfoPtr info);