The nVIDIA documentation is actually really wonderful, as are the nvidia-glx, nvidia-kernel, and nvidia-settings ebuilds. They're just great and they got me up and running with 3D acceleration in no time flat. A problem occurs on MTRR systems (like the amd64), however, that is worthy of note. I am using a dual Opteron system, and after enabling the 'nvidia' module in xorg.conf, 3D worked flawlessly, but the 2D performance was so abysmal as to make the system very difficult to use. This has been discussed at length on various forums, and it appears that nVIDIA uses their own 2D acceleration architecture instead of XAA, which causes the problem. Although no errors are given in Xorg.0.log that would indicate this, the problem is that the MTRR is unable to set up write-combining ranges (warnings are shown in the log when using 'nv', but not when using 'nvidia', and 'nv' 2D acceleration works just fine without write-combining). I know how to fix this and am proposing that the solution be added to the documentation. Reproducible: Always Steps to Reproduce: 1. Look at nVIDIA documentation 2. Discover loads of good stuff, but nothing on 2D acceleration 3. Search Google Groups and various other locations looking for answers Actual Results: Found lots of irate users, no answers. Expected Results: Since this is a problem that others are having, I think it would be good to add a note to the documentation for amd64 users, or anyone with an MTRR machine (machines equipped to handle more than 4 GB of RAM). The way to fix the nVIDIA 2D acceleration is to change a BIOS setting that allows write-combining to work. Here are my extremely rough notes on how to solve the problem. First, if you are using a 64-bit machine, you must have MTRR support in your kernel. You can find this out in a variety of ways. If you have the configuration built into your kernel, you can do this: > zcat /proc/config.gz | grep CONFIG_MTRR If not, you can just check that /proc/mtrr exists. If it doesn't, you need to add CONFIG_MTRR=y to your kernel config and recompile. Now, if you are having troubles with the nVIDIA driver's 2D acceleration, it is likely that it is unable to set up a write-combining range. Cat out /proc/mtrr. If you are able to use write-combining, you should see no entries with the 'uncachable' type in them. Everything should either be 'write-back' or 'write-combining'. If you do see an entry (especially near the top) with the 'uncachable' type, it is probably blocking write-combining for the entire lower 4GB address space, which is where PCI and AGP get assigned. You will need to reboot the computer and go into the BIOS settings to fix this. Once in the BIOS settings, you need to find the settings for MTRR. On my dual Opteron machine (with a Tyan motherboard), it is under the CPU settings. The MTRR setting has two possible values on my system: 'continuous' and 'discrete'. My BIOS defaulted to 'continuous', which marks the entire lower 4GB range as uncachable. Setting it to 'discrete' leaves it unassigned, allowing the operating system to assign types to that space. The setting you want is 'discrete', or whatever corresponds to leaving that space unassigned so that Linux can do the assigning. If your Xorg server is all set up to run with 'nvidia', you should just save your changes and reboot, and you'll find that 2D acceleration magically works again. Just to be sure, cat out /proc/mtrr and see if there are write-combining ranges there (AFTER starting Xorg). If there are, you are golden. Gentoo Base System version 1.4.16 Portage 2.0.50-r10 (default-amd64-2004.2, gcc-3.3.4, glibc-2.3.4.20040619-r1, 2.6.7-gentoo-r14) ================================================================= System uname: 2.6.7-gentoo-r14 x86_64 5 Autoconf: sys-devel/autoconf-2.59-r4 Automake: sys-devel/automake-1.8.5-r1 ACCEPT_KEYWORDS="amd64" AUTOCLEAN="yes" CFLAGS="-pipe -O2" CHOST="x86_64-pc-linux-gnu" COMPILER="" CONFIG_PROTECT="/etc /usr/X11R6/lib/X11/xkb /usr/kde/2/share/config /usr/kde/3.2/share/config /usr/kde/3/share/config /usr/share/config /usr/share/texmf/dvipdfm/config/ /usr/share/texmf/dvips/config/ /usr/share/texmf/tex/generic/config/ /usr/share/texmf/tex/platex/config/ /usr/share/texmf/xdvi/ /var/qmail/control" CONFIG_PROTECT_MASK="/etc/gconf /etc/terminfo /etc/env.d" CXXFLAGS="-pipe -O2" DISTDIR="/usr/portage/distfiles" FEATURES="autoaddcvs ccache" GENTOO_MIRRORS="ftp:///ftp-stud.fht-esslingen.de/pub/Mirrors/gentoo/ ftp://mirror.pudas.net/gentoo http://gentoo.ccccom.com ftp://gentoo.ccccom.com" MAKEOPTS="-j3" PKGDIR="/usr/portage/packages" PORTAGE_TMPDIR="/var/tmp" PORTDIR="/usr/portage" PORTDIR_OVERLAY="" SYNC="rsync://rsync.gentoo.org/gentoo-portage" USE="X alsa amd64 apm arts avi berkdb cdr crypt cups encode esd foomaticdb gdbm gif gnome gpm gtk gtk2 imlib jpeg kde ldap libg++ libwww mikmod motif mpeg ncurses nls nogcj oggvorbis opengl oss pam pdflib perl png python qt quicktime readline sdl slang spell ssl tcltk tcpd tetex truetype xml2 xmms xv zlib"
I've added a troubleshooting chapter to the guide with information on 2D for 4Gb+ systems.