summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDave Airlie <airlied@redhat.com>2012-02-16 19:41:40 +0000
committerDave Airlie <airlied@redhat.com>2012-02-17 15:54:14 +0000
commit2fb4879ffd4e78f69ad628bb7dd6b6e678a63181 (patch)
tree4d88405d289a14d721513beef12085f0920d3033
parent2777730a1d2fb5282732986d39b80ff862ff7b64 (diff)
use a cap to decide if shadow is preferred or not.
-rw-r--r--src/driver.c14
1 files changed, 13 insertions, 1 deletions
diff --git a/src/driver.c b/src/driver.c
index 7ce1ac1..8af9a9f 100644
--- a/src/driver.c
+++ b/src/driver.c
@@ -59,6 +59,10 @@
#include "driver.h"
+#ifndef DRM_CAP_DUMB_PREFER_SHADOW
+#define DRM_CAP_DUMB_PREFER_SHADOW 4
+#endif
+
static void AdjustFrame(int scrnIndex, int x, int y, int flags);
static Bool CloseScreen(int scrnIndex, ScreenPtr pScreen);
static Bool EnterVT(int scrnIndex, int flags);
@@ -380,6 +384,9 @@ PreInit(ScrnInfoPtr pScrn, int flags)
EntityInfoPtr pEnt;
EntPtr msEnt = NULL;
char *BusID, *devicename;
+ Bool prefer_shadow = TRUE;
+ uint64_t value = 0;
+ int ret;
if (pScrn->numEntities != 1)
return FALSE;
@@ -480,7 +487,12 @@ PreInit(ScrnInfoPtr pScrn, int flags)
ms->drmmode.sw_cursor = TRUE;
}
- ms->shadow_enable = xf86ReturnOptValBool(ms->Options, OPTION_SHADOW_FB, TRUE);
+ ret = drmGetCap(ms->fd, DRM_CAP_DUMB_PREFER_SHADOW, &value);
+ if (!ret) {
+ prefer_shadow = !!value;
+ }
+
+ ms->shadow_enable = xf86ReturnOptValBool(ms->Options, OPTION_SHADOW_FB, prefer_shadow);
ms->drmmode.fd = ms->fd;
if (drmmode_pre_init(pScrn, &ms->drmmode, pScrn->bitsPerPixel / 8) == FALSE) {