summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDave Airlie <airlied@redhat.com>2010-03-12 16:09:23 +1000
committerDave Airlie <airlied@redhat.com>2012-08-16 10:02:10 +1000
commit6a3ac03f2b80c80655d66b31c0218754f70156de (patch)
tree56981157fcacd10d8933bd4f12773c17952a67e1
parent565a4e2a8625c79bde0eacf674a4f633151eeb0e (diff)
glx/dri2: add dri2 prime support.
This adds support for having libGL pick a different driver for prime support. DRI_PRIME env var is set to the value retrieved from the server randr provider calls, by the calling process. (generally DRI_PRIME=1 will be the right answer). Signed-off-by: Dave Airlie <airlied@redhat.com>
-rw-r--r--src/glx/dri2.c13
1 files changed, 13 insertions, 0 deletions
diff --git a/src/glx/dri2.c b/src/glx/dri2.c
index b1b5013d04..d6b99db768 100644
--- a/src/glx/dri2.c
+++ b/src/glx/dri2.c
@@ -269,6 +269,7 @@ DRI2Connect(Display * dpy, XID window, char **driverName, char **deviceName)
XExtDisplayInfo *info = DRI2FindDisplay(dpy);
xDRI2ConnectReply rep;
xDRI2ConnectReq *req;
+ char *prime;
XextCheckExtension(dpy, info, dri2ExtensionName, False);
@@ -277,7 +278,19 @@ DRI2Connect(Display * dpy, XID window, char **driverName, char **deviceName)
req->reqType = info->codes->major_opcode;
req->dri2ReqType = X_DRI2Connect;
req->window = window;
+
req->driverType = DRI2DriverDRI;
+#ifdef DRI2DriverPrimeShift
+ prime = getenv("DRI_PRIME");
+ if (prime) {
+ uint32_t primeid;
+ errno = 0;
+ primeid = strtoul(prime, NULL, 0);
+ if (errno == 0)
+ req->driverType |= ((primeid & DRI2DriverPrimeMask) << DRI2DriverPrimeShift);
+ }
+#endif
+
if (!_XReply(dpy, (xReply *) & rep, 0, xFalse)) {
UnlockDisplay(dpy);
SyncHandle();