--- /dev/null
+diff --git a/hw/xfree86/common/xf86xv.c b/hw/xfree86/common/xf86xv.c
+index 92d0f6d..a33366a 100644
+--- a/hw/xfree86/common/xf86xv.c
++++ b/hw/xfree86/common/xf86xv.c
+@@ -234,7 +234,7 @@ xf86XVScreenInit(ScreenPtr pScreen, XF86VideoAdaptorPtr * adaptors, int num)
+ XF86XVScreenPtr ScreenPriv;
+ XvScreenPtr pxvs;
+
+- if (num <= 0 || noXvExtension)
++ if (num <= 0 || noXvExtension || pScreen->isGPU)
+ return FALSE;
+
+ if (Success != XvScreenInit(pScreen))
+diff --git a/hw/xfree86/common/xf86xvmc.c b/hw/xfree86/common/xf86xvmc.c
+index 78a32bf..a0f6fcd 100644
+--- a/hw/xfree86/common/xf86xvmc.c
++++ b/hw/xfree86/common/xf86xvmc.c
+@@ -148,11 +148,15 @@ xf86XvMCScreenInit(ScreenPtr pScreen,
+ {
+ XvMCAdaptorPtr pAdapt;
+ xf86XvMCScreenPtr pScreenPriv;
+- XvScreenPtr pxvs = (XvScreenPtr) dixLookupPrivate(&pScreen->devPrivates,
+- XF86XvScreenKey);
++ XvScreenPtr pxvs;
+ int i, j;
+
+- if (noXvExtension)
++ if (noXvExtension || pScreen->isGPU || !XF86XvScreenKey)
++ return FALSE;
++
++ pxvs = (XvScreenPtr) dixLookupPrivate(&pScreen->devPrivates,
++ XF86XvScreenKey);
++ if (!pxvs)
+ return FALSE;
+
+ if (!(pAdapt = malloc(sizeof(XvMCAdaptorRec) * num_adaptors)))