summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDave Airlie <airlied@redhat.com>2012-07-19 13:46:44 +1000
committerDave Airlie <airlied@redhat.com>2012-08-17 14:54:53 +1000
commit93030f5a6b8b02ce764755daad978aaac3a7bb37 (patch)
tree3a9947057dd90f307b37c35b2c6b3cde68510976
parent1430864e14ca024af9e565c1a1aadf0dcb357d72 (diff)
nouveau: enable provider/capabilitiesprime
this adds the provider object for nouveau and enables the capabilities on it. Signed-off-by: Dave Airlie <airlied@redhat.com>
-rw-r--r--src/drmmode_display.c4
-rw-r--r--src/nv_driver.c21
2 files changed, 25 insertions, 0 deletions
diff --git a/src/drmmode_display.c b/src/drmmode_display.c
index 62838fa..803785d 100644
--- a/src/drmmode_display.c
+++ b/src/drmmode_display.c
@@ -1199,6 +1199,10 @@ Bool drmmode_pre_init(ScrnInfoPtr pScrn, int fd, int cpp)
for (i = 0; i < drmmode->mode_res->count_connectors; i++)
drmmode_output_init(pScrn, drmmode, i);
+#ifdef NOUVEAU_PIXMAP_SHARING
+ xf86ProviderSetup(pScrn, NULL, "nouveau");
+#endif
+
xf86InitialConfiguration(pScrn, TRUE);
return TRUE;
diff --git a/src/nv_driver.c b/src/nv_driver.c
index a02cef3..271f641 100644
--- a/src/nv_driver.c
+++ b/src/nv_driver.c
@@ -643,6 +643,25 @@ NVDRIGetVersion(ScrnInfoPtr pScrn)
return TRUE;
}
+static void
+nouveau_setup_capabilities(ScrnInfoPtr pScrn)
+{
+#ifdef NOUVEAU_PIXMAP_SHARING
+ NVPtr pNv = NVPTR(pScrn);
+ uint64_t value;
+ int ret;
+
+ pScrn->capabilities = 0;
+ ret = drmGetCap(pNv->dev->fd, DRM_CAP_PRIME, &value);
+ if (ret == 0) {
+ if (value & DRM_PRIME_CAP_EXPORT)
+ pScrn->capabilities |= RR_Capability_SourceOutput;
+ if (value & DRM_PRIME_CAP_IMPORT)
+ pScrn->capabilities |= RR_Capability_SourceOffload;
+ }
+#endif
+}
+
static Bool
NVPreInitDRM(ScrnInfoPtr pScrn)
{
@@ -751,6 +770,8 @@ NVPreInit(ScrnInfoPtr pScrn, int flags)
NVPreInitFail("\n");
dev = pNv->dev;
+ nouveau_setup_capabilities(pScrn);
+
pScrn->chipset = malloc(sizeof(char) * 25);
sprintf(pScrn->chipset, "NVIDIA NV%02x", dev->chipset);
xf86DrvMsg(pScrn->scrnIndex, X_PROBED, "Chipset: \"%s\"\n", pScrn->chipset);