[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

xserver-xorg-video-nouveau: Changes to 'ubuntu'



 .gitignore               |    2 
 ChangeLog                |16944 -----------------------------------------------
 Makefile.am              |   15 
 configure.ac             |   35 
 debian/changelog         |   36 
 debian/control           |    2 
 debian/rules             |   11 
 src/Makefile.am          |   35 
 src/drmmode_display.c    |   40 
 src/nouveau_dri2.c       |   19 
 src/nouveau_xv.c         |    4 
 src/nv_accel_common.c    |    5 
 src/nv_driver.c          |  146 
 src/nv_proto.h           |    1 
 src/nv_type.h            |   14 
 src/nvc0_accel.c         |   45 
 src/nvc0_shader.h        |  444 -
 src/nve0_shader.h        |  440 -
 src/shader/.gitignore    |    1 
 src/shader/Makefile      |   30 
 src/shader/exac8nvc0.fp  |   41 
 src/shader/exac8nvc0.fpc |   22 
 src/shader/exac8nve0.fp  |   42 
 src/shader/exac8nve0.fpc |   28 
 src/shader/exacanvc0.fp  |   41 
 src/shader/exacanvc0.fpc |   25 
 src/shader/exacanve0.fp  |   43 
 src/shader/exacanve0.fpc |   30 
 src/shader/exacmnvc0.fp  |   41 
 src/shader/exacmnvc0.fpc |   25 
 src/shader/exacmnve0.fp  |   43 
 src/shader/exacmnve0.fpc |   30 
 src/shader/exas8nvc0.fp  |   37 
 src/shader/exas8nvc0.fpc |   14 
 src/shader/exas8nve0.fp  |   38 
 src/shader/exas8nve0.fpc |   20 
 src/shader/exasanvc0.fp  |   41 
 src/shader/exasanvc0.fpc |   25 
 src/shader/exasanve0.fp  |   43 
 src/shader/exasanve0.fpc |   30 
 src/shader/exascnvc0.fp  |   34 
 src/shader/exascnvc0.fpc |   11 
 src/shader/exascnve0.fp  |   35 
 src/shader/exascnve0.fpc |   14 
 src/shader/videonvc0.fp  |   47 
 src/shader/videonvc0.fpc |   37 
 src/shader/videonve0.fp  |   50 
 src/shader/videonve0.fpc |   44 
 src/shader/xfrm2nvc0.vp  |   63 
 src/shader/xfrm2nvc0.vpc |   69 
 src/shader/xfrm2nve0.vp  |   63 
 src/shader/xfrm2nve0.vpc |   70 
 52 files changed, 1522 insertions(+), 17943 deletions(-)

New commits:
commit 4f1a24481f5b7a123bbb9f042cf7683b10dcfd7e
Author: Maarten Lankhorst <maarten.lankhorst@canonical.com>
Date:   Wed Jun 12 11:30:52 2013 +0200

    release to saucy

diff --git a/debian/changelog b/debian/changelog
index 39c0682..709b3f6 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,13 @@
+xserver-xorg-video-nouveau (1:1.0.8-0ubuntu1) saucy; urgency=low
+
+  * Sync to unreleased debian experimental git.
+  * Remaining differences:
+    - Try to enable vblank if available (LP: #1019131)
+      - 100-vblank-on.diff
+  * Add support for displayless cards. (LP: #1142733)
+
+ -- Maarten Lankhorst <maarten.lankhorst@ubuntu.com>  Wed, 12 Jun 2013 11:24:18 +0200
+
 xserver-xorg-video-nouveau (1:1.0.8-1) UNRELEASED; urgency=low
 
   * New upstream release.

commit a3dd588c4392e59ea52f814f6eb80f4635465b16
Author: Maarten Lankhorst <maarten.lankhorst@canonical.com>
Date:   Wed Jun 12 11:16:38 2013 +0200

    Replace dependency on x11proto-xf86dri-dev with x11proto-dri2-dev.
    
    Upstream removed dri1 dependency.

diff --git a/debian/changelog b/debian/changelog
index 6b643e1..5d56bbc 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,6 +1,8 @@
 xserver-xorg-video-nouveau (1:1.0.8-1) UNRELEASED; urgency=low
 
   * New upstream release.
+  * Replace dependency on x11proto-xf86dri-dev with x11proto-dri2-dev.
+    - Upstream removed dri1 dependency.
 
  -- Maarten Lankhorst <maarten.lankhorst@ubuntu.com>  Wed, 12 Jun 2013 10:58:45 +0200
 
diff --git a/debian/control b/debian/control
index 4975203..486fc7e 100644
--- a/debian/control
+++ b/debian/control
@@ -15,7 +15,7 @@ Build-Depends:
  x11proto-render-dev,
  x11proto-xext-dev,
  libdrm-dev (>= 2.4.40-1),
- x11proto-xf86dri-dev,
+ x11proto-dri2-dev,
  x11proto-gl-dev,
  mesa-common-dev,
  libudev-dev,

commit dbb64a8e0cade7f8e85f75090d1f1a7ae8980ab8
Author: Maarten Lankhorst <maarten.lankhorst@canonical.com>
Date:   Wed Jun 12 10:59:11 2013 +0200

    New upstream release.

diff --git a/debian/changelog b/debian/changelog
index 84c8d87..6b643e1 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,9 @@
+xserver-xorg-video-nouveau (1:1.0.8-1) UNRELEASED; urgency=low
+
+  * New upstream release.
+
+ -- Maarten Lankhorst <maarten.lankhorst@ubuntu.com>  Wed, 12 Jun 2013 10:58:45 +0200
+
 xserver-xorg-video-nouveau (1:1.0.7-1) experimental; urgency=low
 
   [ Maarten Lankhorst ]

commit 7f20a6af25ae28452ec9c971bfa2227857e6ee93
Author: Maarten Lankhorst <maarten.lankhorst@canonical.com>
Date:   Wed Jun 12 10:46:39 2013 +0200

    bump to 1.0.8

diff --git a/configure.ac b/configure.ac
index 575f69d..bf19d3b 100644
--- a/configure.ac
+++ b/configure.ac
@@ -22,7 +22,7 @@
 
 AC_PREREQ([2.60])
 AC_INIT([xf86-video-nouveau],
-        [1.0.7],
+        [1.0.8],
         [https://bugs.freedesktop.org/enter_bug.cgi?product=xorg],
         [xf86-video-nouveau])
 

commit 1fda669c0e5a25eac7f9f1e9a743120cae50ff51
Author: Emil Velikov <emil.l.velikov@gmail.com>
Date:   Sat Feb 16 20:48:47 2013 +0000

    configure: printout the configuration info
    
    Let the bikeshedding begin
    
    Signed-off-by: Emil Velikov <emil.l.velikov@gmail.com>

diff --git a/configure.ac b/configure.ac
index 4f9f0b1..575f69d 100644
--- a/configure.ac
+++ b/configure.ac
@@ -132,3 +132,21 @@ AC_CONFIG_FILES([
 	man/Makefile
 ])
 AC_OUTPUT
+
+dnl
+dnl Output some configuration info for the user
+dnl
+echo ""
+echo "        prefix:              $prefix"
+echo "        exec_prefix:         $exec_prefix"
+echo "        libdir:              $libdir"
+echo "        includedir:          $includedir"
+
+echo ""
+echo "        CFLAGS:              $CFLAGS"
+echo "        CXXFLAGS:            $CXXFLAGS"
+echo "        Macros:              $DEFINES"
+
+echo ""
+echo "        Run '${MAKE-make}' to build xf86-video-nouveau"
+echo ""

commit 45dbcaac301efce04d0bb492337f4febf8129ed9
Author: Emil Velikov <emil.l.velikov@gmail.com>
Date:   Sat Feb 16 20:48:45 2013 +0000

    nouveau: mandate dri2 build
    
    Building nouveau without dri2 is just silly
    
    Signed-off-by: Emil Velikov <emil.l.velikov@gmail.com>

diff --git a/configure.ac b/configure.ac
index fa4a2dc..4f9f0b1 100644
--- a/configure.ac
+++ b/configure.ac
@@ -84,6 +84,7 @@ AC_SUBST(LIBDRM_NOUVEAU_CFLAGS)
 AC_SUBST(LIBDRM_NOUVEAU_LIBS)
 
 PKG_CHECK_MODULES(XORG, [xorg-server >= 1.8] xproto fontsproto libdrm $REQUIRED_MODULES)
+PKG_CHECK_MODULES(DRI2, [dri2proto >= 2.6])
 PKG_CHECK_MODULES(XEXT, [xextproto >= 7.0.99.1],
 		  HAVE_XEXTPROTO_71="yes"; AC_DEFINE(HAVE_XEXTPROTO_71, 1, [xextproto 7.1 available]),
 		  HAVE_XEXTPROTO_71="no")
diff --git a/src/nouveau_dri2.c b/src/nouveau_dri2.c
index 5511b36..3785956 100644
--- a/src/nouveau_dri2.c
+++ b/src/nouveau_dri2.c
@@ -7,9 +7,10 @@
 #include "nv_include.h"
 #ifdef DRI2
 #include "dri2.h"
+#else
+#error "This driver requires a DRI2-enabled X server"
 #endif
 
-#if defined(DRI2) && DRI2INFOREC_VERSION >= 3
 struct nouveau_dri2_buffer {
 	DRI2BufferRec base;
 	PixmapPtr ppix;
@@ -817,16 +818,3 @@ nouveau_dri2_fini(ScreenPtr pScreen)
 {
 	DRI2CloseScreen(pScreen);
 }
-#else
-Bool
-nouveau_dri2_init(ScreenPtr pScreen)
-{
-	return TRUE;
-}
-
-void
-nouveau_dri2_fini(ScreenPtr pScreen)
-{
-}
-#endif
-

commit ea8d225fe100ecabb72e3cc0a92372f16afb10b3
Author: Emil Velikov <emil.l.velikov@gmail.com>
Date:   Sat Feb 16 20:48:44 2013 +0000

    dri1: purge the final references
    
    Signed-off-by: Emil Velikov <emil.l.velikov@gmail.com>

diff --git a/configure.ac b/configure.ac
index 15a6e13..fa4a2dc 100644
--- a/configure.ac
+++ b/configure.ac
@@ -83,7 +83,7 @@ PKG_CHECK_MODULES(LIBDRM_NOUVEAU, [libdrm_nouveau >= 2.4.25])
 AC_SUBST(LIBDRM_NOUVEAU_CFLAGS)
 AC_SUBST(LIBDRM_NOUVEAU_LIBS)
 
-PKG_CHECK_MODULES(XORG, [xorg-server >= 1.8] xproto fontsproto libdrm xf86driproto $REQUIRED_MODULES)
+PKG_CHECK_MODULES(XORG, [xorg-server >= 1.8] xproto fontsproto libdrm $REQUIRED_MODULES)
 PKG_CHECK_MODULES(XEXT, [xextproto >= 7.0.99.1],
 		  HAVE_XEXTPROTO_71="yes"; AC_DEFINE(HAVE_XEXTPROTO_71, 1, [xextproto 7.1 available]),
 		  HAVE_XEXTPROTO_71="no")
diff --git a/src/nv_type.h b/src/nv_type.h
index 13b6672..e6945bc 100644
--- a/src/nv_type.h
+++ b/src/nv_type.h
@@ -4,16 +4,10 @@
 #include "colormapst.h"
 #include "xf86Cursor.h"
 #include "exa.h"
-#ifdef XF86DRI
-#define _XF86DRI_SERVER_
 #include "xf86drm.h"
-#include "dri.h"
 #include <stdbool.h>
 #include <stdint.h>
 #include "xf86Crtc.h"
-#else
-#error "This driver requires a DRI-enabled X server"
-#endif
 
 #if XF86_CRTC_VERSION >= 5
 #define NOUVEAU_PIXMAP_SHARING 1

commit b5d1a9bd269c9d2758fee37492cdcccc976fcc3b
Author: Emil Velikov <emil.l.velikov@gmail.com>
Date:   Sat Feb 16 20:48:43 2013 +0000

    nouveau: Do not load dri {sub,}module
    
    Nouveau does not use dri1, thus loading XFree86-DRI is not needed
    On the other hand, we do use dri2
    
    As a side effect, purge the 'set-but-unused' variable pLibDRMVersion
    
    Signed-off-by: Emil Velikov <emil.l.velikov@gmail.com>

diff --git a/src/nv_driver.c b/src/nv_driver.c
index a6a12ec..b83b822 100644
--- a/src/nv_driver.c
+++ b/src/nv_driver.c
@@ -651,40 +651,6 @@ NVCloseDRM(ScrnInfoPtr pScrn)
 	nouveau_device_del(&pNv->dev);
 }
 
-static Bool
-NVDRIGetVersion(ScrnInfoPtr pScrn)
-{
-	NVPtr pNv = NVPTR(pScrn);
-	int errmaj, errmin;
-	pointer ret;
-
-	ret = LoadSubModule(pScrn->module, "dri", NULL, NULL, NULL,
-			    NULL, &errmaj, &errmin);
-	if (!ret) {
-		xf86DrvMsg(pScrn->scrnIndex, X_INFO,
-				"error %d\n", errmaj);
-		LoaderErrorMsg(pScrn->name, "dri", errmaj, errmin);
-	}
-
-	if (!ret && errmaj != LDR_ONCEONLY)
-		return FALSE;
-
-	xf86DrvMsg(pScrn->scrnIndex, X_INFO, "Loaded DRI module\n");
-
-	/* Check the lib version */
-	if (xf86LoaderCheckSymbol("drmGetLibVersion"))
-		pNv->pLibDRMVersion = drmGetLibVersion(0);
-	if (pNv->pLibDRMVersion == NULL) {
-		xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
-		"NVDRIGetVersion failed because libDRM is really "
-		"way to old to even get a version number out of it.\n"
-		"[dri] Disabling DRI.\n");
-		return FALSE;
-	}
-
-	return TRUE;
-}
-
 static void
 nouveau_setup_capabilities(ScrnInfoPtr pScrn)
 {
@@ -778,7 +744,7 @@ NVPreInitDRM(ScrnInfoPtr pScrn)
 	NVPtr pNv = NVPTR(pScrn);
 	int ret;
 
-	if (!NVDRIGetVersion(pScrn))
+	if (!xf86LoadSubModule(pScrn, "dri2"))
 		return FALSE;
 
 	/* Load the kernel module, and open the DRM */
diff --git a/src/nv_type.h b/src/nv_type.h
index 9c403b5..13b6672 100644
--- a/src/nv_type.h
+++ b/src/nv_type.h
@@ -74,8 +74,6 @@ typedef struct _NVRec {
 
     CARD32              currentRop;
 
-    drmVersionPtr       pLibDRMVersion;
-
 	void *drmmode; /* for KMS */
 
 	/* DRM interface */

commit 7c3f6cd8d6b14aea561fb877f6006d339d156f35
Author: Emil Velikov <emil.l.velikov@gmail.com>
Date:   Sat Feb 16 20:48:42 2013 +0000

    nouveau: stop using dri1 function DRICreatePCIBusID
    
    Step 1 to completely rip out dri1 out of nouveau
    
    Signed-off-by: Emil Velikov <emil.l.velikov@gmail.com>

diff --git a/src/nv_driver.c b/src/nv_driver.c
index 38eddac..a6a12ec 100644
--- a/src/nv_driver.c
+++ b/src/nv_driver.c
@@ -272,11 +272,13 @@ NVHasKMS(struct pci_device *pci_dev)
 	char *busid;
 	int chipset, ret;
 
-	if (!xf86LoaderCheckSymbol("DRICreatePCIBusID")) {
-		xf86DrvMsg(-1, X_ERROR, "[drm] No DRICreatePCIBusID symbol\n");
-		return FALSE;
-	}
-	busid = DRICreatePCIBusID(pci_dev);
+#if XORG_VERSION_CURRENT >= XORG_VERSION_NUMERIC(1,9,99,901,0)
+	XNFasprintf(&busid, "pci:%04x:%02x:%02x.%d",
+		    pci_dev->domain, pci_dev->bus, pci_dev->dev, pci_dev->func);
+#else
+	busid = XNFprintf("pci:%04x:%02x:%02x.%d",
+			  pci_dev->domain, pci_dev->bus, pci_dev->dev, pci_dev->func);
+#endif
 
 	ret = drmCheckModesettingSupported(busid);
 	if (ret) {

commit 3b1a45325d5fd46f0e7fad17168742b4c9a2465a
Author: Maarten Lankhorst <maarten.lankhorst@canonical.com>
Date:   Wed Jun 12 10:30:32 2013 +0200

    update makefiles for make distcheck

diff --git a/.gitignore b/.gitignore
index 4ff1108..186b1c8 100644
--- a/.gitignore
+++ b/.gitignore
@@ -20,3 +20,4 @@ ltmain.sh
 missing
 stamp-h1
 ChangeLog
+INSTALL
diff --git a/Makefile.am b/Makefile.am
index 011c574..032be8a 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -20,11 +20,14 @@
 
 AUTOMAKE_OPTIONS = foreign
 SUBDIRS = src man
+MAINTAINERCLEANFILES = ChangeLog INSTALL
 
-EXTRA_DIST = ChangeLog
+.PHONY: ChangeLog INSTALL
 
-# Always regenerate the changelog
-CLEANFILES = ChangeLog
-ChangeLog: FORCE
-	git log > ChangeLog
-FORCE:
+INSTALL:
+	$(INSTALL_CMD)
+
+ChangeLog:
+	$(CHANGELOG_CMD)
+
+EXTRA_DIST = ChangeLog INSTALL
diff --git a/src/Makefile.am b/src/Makefile.am
index 17c6389..f54e135 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -66,6 +66,39 @@ EXTRA_DIST = hwdefs/nv_3ddefs.xml.h \
 	     hwdefs/nv50_texture.h \
 	     hwdefs/nvc0_3d.xml.h \
 	     hwdefs/nvc0_m2mf.xml.h \
+	     shader/exac8nvc0.fp \
+	     shader/exac8nvc0.fpc \
+	     shader/exac8nve0.fp \
+	     shader/exac8nve0.fpc \
+	     shader/exacanvc0.fp \
+	     shader/exacanvc0.fpc \
+	     shader/exacanve0.fp \
+	     shader/exacanve0.fpc \
+	     shader/exacmnvc0.fp \
+	     shader/exacmnvc0.fpc \
+	     shader/exacmnve0.fp \
+	     shader/exacmnve0.fpc \
+	     shader/exas8nvc0.fp \
+	     shader/exas8nvc0.fpc \
+	     shader/exas8nve0.fp \
+	     shader/exas8nve0.fpc \
+	     shader/exasanvc0.fp \
+	     shader/exasanvc0.fpc \
+	     shader/exasanve0.fp \
+	     shader/exasanve0.fpc \
+	     shader/exascnvc0.fp \
+	     shader/exascnvc0.fpc \
+	     shader/exascnve0.fp \
+	     shader/exascnve0.fpc \
+	     shader/videonvc0.fp \
+	     shader/videonvc0.fpc \
+	     shader/videonve0.fp \
+	     shader/videonve0.fpc \
+	     shader/xfrm2nvc0.vp \
+	     shader/xfrm2nvc0.vpc \
+	     shader/xfrm2nve0.vp \
+	     shader/xfrm2nve0.vpc \
+	     shader/Makefile \
 	     nouveau_local.h \
 	     nv_const.h \
 	     nv_dma.h \
diff --git a/src/shader/.gitignore b/src/shader/.gitignore
new file mode 100644
index 0000000..2460008
--- /dev/null
+++ b/src/shader/.gitignore
@@ -0,0 +1 @@
+!Makefile

commit b82aacd3e72b52240181569c8b0abb55c1f716d5
Author: Emil Velikov <emil.l.velikov@gmail.com>
Date:   Sat Feb 16 12:48:46 2013 -0800

    configure: require xorg-macros 1.8
    
    Explicitly check for xorg-macros 1.8, as a subtle hint
    to update your build deps if building your own ddx
    
    Signed-off-by: Emil Velikov <emil.l.velikov@gmail.com>

diff --git a/configure.ac b/configure.ac
index 137de9c..15a6e13 100644
--- a/configure.ac
+++ b/configure.ac
@@ -47,6 +47,18 @@ AM_INIT_AUTOMAKE([dist-bzip2])
 
 m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
 
+# Require X.Org macros 1.8 or later for MAN_SUBSTS set by XORG_MANPAGE_SECTIONS
+m4_ifndef([XORG_MACROS_VERSION],
+          [m4_fatal([must install xorg-macros 1.8 or later before running autoconf/autogen])])
+
+XORG_MACROS_VERSION(1.8)
+XORG_DEFAULT_OPTIONS
+
+# Require X.Org server macros (i.e. XORG_DRIVER_CHECK_EXT) to check for required modules
+m4_ifndef([XORG_DRIVER_CHECK_EXT],
+          [m4_fatal([must install xorg-server macros before running autoconf/autogen])])
+
+
 # Checks for programs.
 AC_DISABLE_STATIC
 LT_INIT

commit 4f667b40f41e311fbe302237efe173bcc24fb8bb
Author: Maarten Lankhorst <maarten.lankhorst@canonical.com>
Date:   Mon Jun 10 14:29:59 2013 +0200

    fix a xfree from previous patch
    
    Signed-off-by: Maarten Lankhorst <maarten.lankhorst@canonical.com>

diff --git a/src/drmmode_display.c b/src/drmmode_display.c
index 8fd1dd0..b9b7164 100644
--- a/src/drmmode_display.c
+++ b/src/drmmode_display.c
@@ -1252,7 +1252,7 @@ Bool drmmode_pre_init(ScrnInfoPtr pScrn, int fd, int cpp)
 	if (!drmmode->mode_res->count_connectors ||
 	    !drmmode->mode_res->count_crtcs) {
 		drmModeFreeResources(drmmode->mode_res);
-		xfree(drmmode);
+		free(drmmode);
 		goto done;
 	}
 

commit 2e34d11541e1f987c7ca0556592cb16f4d232299
Author: Maarten Lankhorst <maarten.lankhorst@canonical.com>
Date:   Mon Jun 10 13:06:35 2013 +0200

    nouveau: enable support for normal optimus configuration
    
    nvd7 has no display engine, only enable sink output capability
    if there is a crtc.
    
    drmmode doesn't work without crtc's, so prevent crashes by skipping
    the drmmode code in that case.
    
    Signed-off-by: Maarten Lankhorst <maarten.lankhorst@canonical.com>

diff --git a/src/drmmode_display.c b/src/drmmode_display.c
index 6033a6d..8fd1dd0 100644
--- a/src/drmmode_display.c
+++ b/src/drmmode_display.c
@@ -1129,14 +1129,17 @@ drmmode_xf86crtc_resize(ScrnInfoPtr scrn, int width, int height)
 	xf86CrtcConfigPtr xf86_config = XF86_CRTC_CONFIG_PTR(scrn);
 	ScreenPtr screen = xf86ScrnToScreen(scrn);
 	NVPtr pNv = NVPTR(scrn);
-	drmmode_crtc_private_ptr
-		    drmmode_crtc = xf86_config->crtc[0]->driver_private;
-	drmmode_ptr drmmode = drmmode_crtc->drmmode;
-	uint32_t old_width, old_height, old_pitch, old_fb_id;
+	drmmode_crtc_private_ptr drmmode_crtc = NULL;
+	drmmode_ptr drmmode = NULL;
+	uint32_t old_width, old_height, old_pitch, old_fb_id = 0;
 	struct nouveau_bo *old_bo = NULL;
 	int ret, i, pitch;
 	PixmapPtr ppix;
 
+	if (xf86_config->num_crtc) {
+		drmmode_crtc = xf86_config->crtc[0]->driver_private;
+		drmmode = drmmode_crtc->drmmode;
+	}
 	ErrorF("resize called %d %d\n", width, height);
 
 	if (scrn->virtualX == width && scrn->virtualY == height)
@@ -1145,7 +1148,8 @@ drmmode_xf86crtc_resize(ScrnInfoPtr scrn, int width, int height)
 	old_width = scrn->virtualX;
 	old_height = scrn->virtualY;
 	old_pitch = scrn->displayWidth;
-	old_fb_id = drmmode->fb_id;
+	if (drmmode)
+		old_fb_id = drmmode->fb_id;
 	nouveau_bo_ref(pNv->scanout, &old_bo);
 	nouveau_bo_ref(NULL, &pNv->scanout);
 
@@ -1162,11 +1166,13 @@ drmmode_xf86crtc_resize(ScrnInfoPtr scrn, int width, int height)
 
 	nouveau_bo_map(pNv->scanout, NOUVEAU_BO_RDWR, pNv->client);
 
-	ret = drmModeAddFB(drmmode->fd, width, height, scrn->depth,
-			   scrn->bitsPerPixel, pitch, pNv->scanout->handle,
-			   &drmmode->fb_id);
-	if (ret)
-		goto fail;
+	if (drmmode) {
+		ret = drmModeAddFB(drmmode->fd, width, height, scrn->depth,
+				  scrn->bitsPerPixel, pitch, pNv->scanout->handle,
+				  &drmmode->fb_id);
+		if (ret)
+			goto fail;
+	}
 
 	if (pNv->ShadowPtr) {
 		free(pNv->ShadowPtr);
@@ -1214,7 +1220,8 @@ drmmode_xf86crtc_resize(ScrnInfoPtr scrn, int width, int height)
 	scrn->virtualX = old_width;
 	scrn->virtualY = old_height;
 	scrn->displayWidth = old_pitch;
-	drmmode->fb_id = old_fb_id;
+	if (drmmode)
+		drmmode->fb_id = old_fb_id;
 
 	return FALSE;
 }
@@ -1241,6 +1248,14 @@ Bool drmmode_pre_init(ScrnInfoPtr pScrn, int fd, int cpp)
 
 	xf86CrtcSetSizeRange(pScrn, 320, 200, drmmode->mode_res->max_width,
 			     drmmode->mode_res->max_height);
+
+	if (!drmmode->mode_res->count_connectors ||
+	    !drmmode->mode_res->count_crtcs) {
+		drmModeFreeResources(drmmode->mode_res);
+		xfree(drmmode);
+		goto done;
+	}
+
 	for (i = 0; i < drmmode->mode_res->count_crtcs; i++) {
 		if (!xf86IsEntityShared(pScrn->entityList[0]) ||
 		     (pScrn->confScreen->device->screen == i))
@@ -1250,6 +1265,7 @@ 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);
 
+done:
 #ifdef NOUVEAU_PIXMAP_SHARING
 	xf86ProviderSetup(pScrn, NULL, "nouveau");
 #endif
@@ -1280,7 +1296,7 @@ drmmode_remove_fb(ScrnInfoPtr pScrn)
 	drmmode_crtc_private_ptr drmmode_crtc;
 	drmmode_ptr drmmode;
 
-	if (config)
+	if (config && config->num_crtc)
 		crtc = config->crtc[0];
 	if (!crtc)
 		return;
diff --git a/src/nouveau_dri2.c b/src/nouveau_dri2.c
index e462a86..5511b36 100644
--- a/src/nouveau_dri2.c
+++ b/src/nouveau_dri2.c
@@ -266,6 +266,9 @@ can_exchange(DrawablePtr draw, PixmapPtr dst_pix, PixmapPtr src_pix)
 	NVPtr pNv = NVPTR(scrn);
 	int i;
 
+	if (!xf86_config->num_crtc)
+		return FALSE;
+
 	for (i = 0; i < xf86_config->num_crtc; i++) {
 		xf86CrtcPtr crtc = xf86_config->crtc[i];
 		if (crtc->enabled && crtc->rotatedData)
diff --git a/src/nv_driver.c b/src/nv_driver.c
index 8a112db..38eddac 100644
--- a/src/nv_driver.c
+++ b/src/nv_driver.c
@@ -426,7 +426,7 @@ NVEnterVT(VT_FUNC_ARGS_DECL)
 	if (ret)
 		ErrorF("Unable to get master: %s\n", strerror(errno));
 
-	if (!xf86SetDesiredModes(pScrn))
+	if (XF86_CRTC_CONFIG_PTR(pScrn)->num_crtc && !xf86SetDesiredModes(pScrn))
 		return FALSE;
 
 	if (pNv->overlayAdaptor && pNv->Architecture != NV_ARCH_04)
@@ -559,7 +559,8 @@ NVCloseScreen(CLOSE_SCREEN_ARGS_DECL)
 	ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen);
 	NVPtr pNv = NVPTR(pScrn);
 
-	drmmode_screen_fini(pScreen);
+	if (XF86_CRTC_CONFIG_PTR(pScrn)->num_crtc)
+		drmmode_screen_fini(pScreen);
 
 	if (!pNv->NoAccel)
 		nouveau_dri2_fini(pScreen);
@@ -687,6 +688,7 @@ nouveau_setup_capabilities(ScrnInfoPtr pScrn)
 {
 #ifdef NOUVEAU_PIXMAP_SHARING
 	NVPtr pNv = NVPTR(pScrn);
+	xf86CrtcConfigPtr xf86_config = XF86_CRTC_CONFIG_PTR(pScrn);
 	uint64_t value;
 	int ret;
 
@@ -695,8 +697,11 @@ nouveau_setup_capabilities(ScrnInfoPtr pScrn)
 	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 | RR_Capability_SinkOutput;
+		if (value & DRM_PRIME_CAP_IMPORT) {
+			pScrn->capabilities |= RR_Capability_SourceOffload;
+			if (xf86_config->num_crtc)
+				pScrn->capabilities |= RR_Capability_SinkOutput;
+		}
 	}
 #endif
 }
@@ -862,8 +867,6 @@ 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);
@@ -1102,9 +1105,35 @@ NVPreInit(ScrnInfoPtr pScrn, int flags)
 	if (!xf86SetGamma(pScrn, gammazeros))
 		NVPreInitFail("\n");
 
-	/* No usable mode */
+#ifdef NOUVEAU_PIXMAP_SHARING
+	/*
+	 * The driver will not work as gpu screen without acceleration enabled.
+	 * To support this usecase modesetting ddx can be used instead.
+	 */
+	if (pNv->NoAccel || pNv->ShadowFB) {
+		/*
+		 * Optimus mode requires acceleration enabled.
+		 * So if no mode is found, or the screen is created
+		 * as a gpu screen the pre init should fail.
+		 */
+		if (pScrn->is_gpu || !pScrn->modes)
+			return FALSE;
+	}
+
+#else
+	/* No usable mode, no optimus config possible */
 	if (!pScrn->modes)
 		return FALSE;
+#endif
+
+	nouveau_setup_capabilities(pScrn);
+
+	if (!pScrn->modes) {
+		pScrn->modes = xf86ModesAdd(pScrn->modes,
+			xf86CVTMode(pScrn->display->virtualX,
+				    pScrn->display->virtualY,
+				    60, 0, 0));
+	}
 
 	/* Set the current mode to the first in the list */
 	pScrn->currentMode = pScrn->modes;
@@ -1389,7 +1418,7 @@ NVScreenInit(SCREEN_INIT_ARGS_DECL)
 	 * Initialize HW cursor layer. 
 	 * Must follow software cursor initialization.
 	 */
-	if (pNv->HWCursor) { 
+	if (xf86_config->num_crtc && pNv->HWCursor) {
 		ret = drmmode_cursor_init(pScreen);
 		if (ret != TRUE) {
 			xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
@@ -1444,7 +1473,8 @@ NVScreenInit(SCREEN_INIT_ARGS_DECL)
 	 * Initialize colormap layer.
 	 * Must follow initialization of the default colormap 
 	 */
-	if (!xf86HandleColormaps(pScreen, 256, 8, NVLoadPalette,
+	if (xf86_config->num_crtc &&
+	    !xf86HandleColormaps(pScreen, 256, 8, NVLoadPalette,
 				 NULL, CMAP_PALETTED_TRUECOLOR))
 		return FALSE;
 
@@ -1452,7 +1482,10 @@ NVScreenInit(SCREEN_INIT_ARGS_DECL)
 	if (serverGeneration == 1)
 		xf86ShowUnusedOptions(pScrn->scrnIndex, pScrn->options);
 
-	drmmode_screen_init(pScreen);
+	if (xf86_config->num_crtc)
+		drmmode_screen_init(pScreen);
+	else
+		pNv->glx_vblank = FALSE;
 	return TRUE;
 }
 

commit bf72ae1f6574c540f0afc2d7845d41df43507a8f
Author: Ben Skeggs <bskeggs@redhat.com>
Date:   Wed May 15 22:05:01 2013 +1000

    nve0: envyas isn't overly clever.. avoid short-form instructions
    
    Signed-off-by: Ben Skeggs <bskeggs@redhat.com>

diff --git a/src/shader/exac8nve0.fp b/src/shader/exac8nve0.fp
index 55cdde2..f4b4e82 100644
--- a/src/shader/exac8nve0.fp
+++ b/src/shader/exac8nve0.fp
@@ -35,8 +35,8 @@ interp mul f32 $r2 a[0x80] $r0 0x0
 tex t lauto live dfp #:#:#:$r0 t2d $t0 $s0 $r2:$r3 ()
 texbar 0x0
 mul ftz rn f32 $r3 $r0 $r1
-mov b32 $r2 $r3
-mov b32 $r1 $r3
-mov b32 $r0 $r3
-exit
+long mov b32 $r2 $r3
+long mov b32 $r1 $r3
+long mov b32 $r0 $r3
+long exit
 #endif
diff --git a/src/shader/exac8nve0.fpc b/src/shader/exac8nve0.fpc
index c7fc3bd..9e5e741 100644
--- a/src/shader/exac8nve0.fpc
+++ b/src/shader/exac8nve0.fpc
@@ -18,7 +18,11 @@
 0xf0000000,
 0x0400dc40,
 0x58000000,
-0x00309c28,
-0x00305c28,
-0x00301c28,
-0x88001dff,
+0x0c009de4,
+0x28000000,
+0x0c005de4,
+0x28000000,
+0x0c001de4,
+0x28000000,
+0x00001de7,
+0x80000000,
diff --git a/src/shader/exacanve0.fp b/src/shader/exacanve0.fp
index dc54771..edeb717 100644
--- a/src/shader/exacanve0.fp
+++ b/src/shader/exacanve0.fp
@@ -39,5 +39,5 @@ mul ftz rn f32 $r3 $r3 $r7
 mul ftz rn f32 $r2 $r2 $r6
 mul ftz rn f32 $r1 $r1 $r5
 mul ftz rn f32 $r0 $r0 $r4
-exit
+long exit
 #endif
diff --git a/src/shader/exacanve0.fpc b/src/shader/exacanve0.fpc
index 52a736d..a8320f0 100644
--- a/src/shader/exacanve0.fpc
+++ b/src/shader/exacanve0.fpc
@@ -26,4 +26,5 @@
 0x58000000,
 0x10001c40,
 0x58000000,
-0x88001dff,
+0x00001de7,
+0x80000000,
diff --git a/src/shader/exacmnve0.fp b/src/shader/exacmnve0.fp
index 5e0edfe..09d22c1 100644
--- a/src/shader/exacmnve0.fp
+++ b/src/shader/exacmnve0.fp
@@ -39,5 +39,5 @@ mul ftz rn f32 $r3 $r3 $r4
 mul ftz rn f32 $r2 $r2 $r4
 mul ftz rn f32 $r1 $r1 $r4
 mul ftz rn f32 $r0 $r0 $r4
-exit
+long exit
 #endif
diff --git a/src/shader/exacmnve0.fpc b/src/shader/exacmnve0.fpc
index 15694a0..5c2d4bf 100644
--- a/src/shader/exacmnve0.fpc
+++ b/src/shader/exacmnve0.fpc
@@ -26,4 +26,5 @@
 0x58000000,
 0x10001c40,
 0x58000000,
-0x88001dff,
+0x00001de7,
+0x80000000,
diff --git a/src/shader/exas8nve0.fp b/src/shader/exas8nve0.fp
index 9f96236..8626d9c 100644
--- a/src/shader/exas8nve0.fp
+++ b/src/shader/exas8nve0.fp
@@ -31,8 +31,8 @@ interp mul f32 $r1 a[0x84] $r0 0x0
 interp mul f32 $r0 a[0x80] $r0 0x0
 tex t lauto live dfp #:#:#:$r0 t2d $t0 $s0 $r0:$r1 ()
 texbar 0x0
-mov b32 $r3 $r0
-mov b32 $r2 $r0
-mov b32 $r1 $r0
-exit
+long mov b32 $r3 $r0
+long mov b32 $r2 $r0
+long mov b32 $r1 $r0
+long exit
 #endif
diff --git a/src/shader/exas8nve0.fpc b/src/shader/exas8nve0.fpc
index 2e487f5..ed4793c 100644
--- a/src/shader/exas8nve0.fpc
+++ b/src/shader/exas8nve0.fpc
@@ -10,7 +10,11 @@
 0x80120000,
 0x00001de6,
 0xf0000000,
-0x0000dc28,
-0x00009c28,
-0x00005c28,
-0x88001dff,
+0x0000dde4,
+0x28000000,
+0x00009de4,
+0x28000000,
+0x00005de4,
+0x28000000,
+0x00001de7,
+0x80000000,
diff --git a/src/shader/exasanve0.fp b/src/shader/exasanve0.fp
index 4ec257b..dea8eab 100644
--- a/src/shader/exasanve0.fp
+++ b/src/shader/exasanve0.fp
@@ -39,5 +39,5 @@ mul ftz rn f32 $r3 $r3 $r4
 mul ftz rn f32 $r2 $r2 $r4
 mul ftz rn f32 $r1 $r1 $r4
 mul ftz rn f32 $r0 $r0 $r4
-exit
+long exit
 #endif
diff --git a/src/shader/exasanve0.fpc b/src/shader/exasanve0.fpc
index 6a4d54b..efc701e 100644
--- a/src/shader/exasanve0.fpc
+++ b/src/shader/exasanve0.fpc
@@ -26,4 +26,5 @@
 0x58000000,
 0x10001c40,
 0x58000000,
-0x88001dff,
+0x00001de7,
+0x80000000,
diff --git a/src/shader/exascnve0.fp b/src/shader/exascnve0.fp
index 5ec8496..355b894 100644
--- a/src/shader/exascnve0.fp
+++ b/src/shader/exascnve0.fp
@@ -31,5 +31,5 @@ interp mul f32 $r1 a[0x84] $r0 0x0
 interp mul f32 $r0 a[0x80] $r0 0x0
 tex t lauto live dfp $r0:$r1:$r2:$r3 t2d $t0 $s0 $r0:$r1 ()
 texbar 0x0
-exit
+long exit
 #endif
diff --git a/src/shader/exascnve0.fpc b/src/shader/exascnve0.fpc
index 5bbd150..24ca7bc 100644
--- a/src/shader/exascnve0.fpc
+++ b/src/shader/exascnve0.fpc
@@ -10,4 +10,5 @@
 0x8013c000,
 0x00001de6,
 0xf0000000,
-0x88001dff,
+0x00001de7,
+0x80000000,
diff --git a/src/shader/videonve0.fp b/src/shader/videonve0.fp
index a6675c9..f761bd5 100644
--- a/src/shader/videonve0.fp
+++ b/src/shader/videonve0.fp
@@ -46,5 +46,5 @@ fma ftz rn f32 $r5 $r0 c0[0x18] $r5
 fma ftz rn f32 $r0 $r1 c0[0x1c] $r3
 fma ftz rn f32 $r2 $r1 c0[0x24] $r5
 fma ftz rn f32 $r1 $r1 c0[0x20] $r4
-exit
+long exit
 #endif
diff --git a/src/shader/videonve0.fpc b/src/shader/videonve0.fpc
index c4f1b09..4df540b 100644
--- a/src/shader/videonve0.fpc
+++ b/src/shader/videonve0.fpc
@@ -40,4 +40,5 @@
 0x300a4000,
 0x80105c40,
 0x30084000,
-0x88001dff,
+0x00001de7,
+0x80000000,
diff --git a/src/shader/xfrm2nve0.vp b/src/shader/xfrm2nve0.vp
index 4e39f53..c949ea6 100644
--- a/src/shader/xfrm2nve0.vp
+++ b/src/shader/xfrm2nve0.vp


Reply to: