Haiku Unified Nvidia graphics driver
nVidia TNT/GeForce videodriver history:
In 2002 Bruno van Dooren wanted to setup a nVidia graphics driver for openBeOS (now Haiku). He actually worked on this, using the Matrox MGA driver as a starting point. Unfortunately it turned out he had not enough time to work on it because of 'reallife' issues.
So where does this leave us?
Because I already have some experience with nVidia graphics cards (see BeTVOut) and also with writing BeOS graphicscard drivers I decided I wanted to work on the Haiku nVidia driver too. So Bruno turned the driver and it's development over to me. Unfortunately the work he had done already has become 'aged' because in the meantime the MGA driver has improved a lot. Because of this, and because no real functionality had yet been built in, I decided to start over 'from scratch' with the latest version of the Matrox driver (0.14) to begin with.
Rudolf Cornelissen.
Current nVidia driver features:
- Hardware cursor support (on both heads on dualhead cards);
- Full 2D acceleration;
- Basic 3D acceleration for older cards: see the seperately available 3D accelerant's documentation for details;
- Full BWindowScreen support (used for hardware pageflipping, scrolling/panning and acceleration in applications/games);
- DPMS support for both DVI and most laptop panels, and for analog connected screens (on both heads on dualhead cards), but not (yet?) for external DVI panels on laptops;
- B_YCbCr422 hardware overlay support on both TNT and GeForce series cards, except for GeForce 6xxx and 7xxx series (GeForce 6800 works though). Overlay output 'follows head' in dualhead stretch/switch modes;
- Dualhead support on GeForce dualhead cards (use 'Dualhead Setup' or Haiku native ScreenPrefs panel (with limitations));
- DVI and laptop panel support;
- Widescreen mode support (all screens must be widescreen type;
- Basic AGP mode support on AGP cards, using the new (seperate) Haiku AGP busmanager;
- Basic ('legacy') PCIe support;
- Coldstart support for analog connected screens on most cards except TNT1, GeForce 6xxx and 7xxx series;
- TVout support on cards with Brooktree BT868/BT869 and Conexant CX25870/CX25871 encoders (use 'Dualhead Setup' 0.05 from this site for now);
- DDC/EDID support for monitor capability detection.
Supported cards (as far as is known):
- TNT 1/2;
- TNT 2-M64;
- Vanta/Aladdin TNT2;
- GeForce 256;
- GeForce 2 MX/Ti/GTS/Go;
- GeForce 2 Integrated GPU (Nforce);
- GeForce 3 (Ti);
- GeForce 4 MX/Ti/Go;
- GeForce 4 Integrated GPU (Nforce 2);
- GeForce (4 MX) PCX 4300;
- GeForce FX/PCX 5xxx/Go;
- GeForce FX/PCX 6xxx/Go;
- GeForce FX/PCX 7xxx/Go;
- Quadro (2/4/FX/PCX/Go);
Known limitations:
- If you want BScreen 'Sync_to_Retrace' capability make sure you enabled 'assign IRQ to VGA card' in your system BIOS (if available);
- If the driver seems to create 'random' trouble make sure you have a fully functional VGA BIOS, or system BIOS for embedded cards (check for updates on the manufacturor's site). Make sure you mail me if you still have trouble but also if this version fixed that!
- If on a laptop the internal panel doesn't work when you connect an external monitor, make sure you set 'output device selection' to 'internal' (instead of 'auto') in the system BIOS if it has such an option. If you have this symptom on a normal card, or on a laptop without that BIOS option then you are probably out of luck for dualhead support;
- NV40 architecture cards: (GeForce 6xxx, but 6800 AGP seems to be OK)
We can't control very well to which connector the card's output gets routed (lack of specs). This means you might have to experiment a bit with the way you connect your monitor to the card.
Fixes for current nVidia driver 1.10 (Haiku repository):
- Fixed driver assuming enabling AGP mode succeeded on some occasions if it did not block it itself. Blocking AGP mode completely via the AGP busmanager (option 'block_agp') resulted in a crashing acceleration engine because it was setup for AGP transfers instead of using PCI transfers. Error was solved with help from user kraton.
- Fixed shared_info struct problem occuring when 3D 'accelerant' is used (tested Alpha 4.1): the TVencoder type definition list apparantly gets some memory assigned these days when done inside the definition of shared_info. Moved encoder list outside the shared_info definition.
- Updated naming for some previous unknown cards, added some 20 new cards for support/recognition in the kernel driver and accelerant, being GF 6xxx and 7xxx types. Also two more nforce 6100 cards are recognized now. All non GF 8xxx cards listed in nvidia's official april 2007 ID list are now recognized. GF 8xxx and later cards will not be supported by this driver as their architecture is quite different from before.
- Modified two default settings for the driver:
- 'pgm_panel' is now preset to 'false' since this will probably increase chances of a good picture on panels outthere.
- 'force_ws' is (re-enabled and) preset to 'false' since automatic widescreen detection now works for both analog and digital screens (thanks to added DDC/EDID processing).
Note please:
'force_ws' was hardcoded to setting 'true' some time ago by the Haiku team because of lacking analog monitor widescreen autodetection.
- Added 'block_acc' option in nvidia.settings to completely disable the acceleration engine. Use this as a work-around if the acceleration engine misbehaves.
- Fixed card/system hanging after trying to log LVDS/TMDS distinction info. This (at least) fixes one NV34 trying to startup after a failed kernel VESA modeswitch without using the driver's coldstart option. Might very well help on other type cards too.
- HDTV video upto/including 1920x1080p can now be played back using overlay on Geforce cards where overlay is supported. On TNT1/TNT2/TNT2-M64 this can't be done and bitmap output is used.
- Added DDC/EDID support: detecting connected screens, doing widescreen autodetection, checking max. resolutions when setting a mode, returning full EDID info to the app_server when requested (implemented new haiku-specific driverhook GET_EDID_INFO). Haiku's screen preferences panel should now only offer screen-compatible modes.
- Added confirmed support for laptop card with ID 0x01d7: Quadro NVS 110M/GeForce 7300 Go. Also fixed support for laptop card with ID 0x01d8: GeForce 7400 Go: the 'laptop' definition was missing here.
- Fixed acceleration engine crashes on at least G72 cards (Geforce 7300/7400/7500) by powering up new part(s) of the acceleration engines too..
- Modified GPU PTimer programming which according to the Nouveau project fixes LVDS panel programming in some cases.
- Corrected/Added detection of third I2C bus on cards that support it. The old detection method for a third and (non-existing) fourth bus was faulty. The driver uses I2C channels for monitor DDC/EDID and TVencoder communications.
- DDC/EDID fetching now also works on GCC4 binaries due to a fixed fault in the accelerants/common code (which is used for that function);
- Added support for Haiku specific driverhook GET_PREFERRED_DISPLAY_MODE. Laptops should now also startup in native mode automatically at first system boot;
- Rewrote framebuffer memory detection. Accelerant now only uses the amount of RAM mapped by the kerneldriver as maximum. This fixes black screen at app_server startup on a number of GF6xxx and GF7xxx cards;
- Finally(!) fixed PLL selection trouble on NV40 architecture (Geforce 6xxx and 7xxx) cards. Now dualhead should (almost) always work OK, and now low-res bootscreens should nolonger result in 'frequency out of range' messages on DVI connected screens;
- Fixed shivering display on some systems (confirmed a Geforce 5200 laptop): Pixelclocks should never be setup for spread spectrum on analog connections;
- Added full HDTV mode (1920x1080p) to exported modelist: Haiku's Screen preflet allows you to set this mode now if your screen supports it;
- Improved modeline scaling for digitally connected screens: this fixes missing SYNC pulses on some setups. The screen nolonger shows shifted pictures (this happened mostly on 640x480 resolution);
- Modified head selection code on NV40 architecture cards except for NV40, NV41 and NV45. The cards affected have differently behaving BIOSes. This should fix black or disabled screens if the secondary connector was used for VGA while the first one was not connected;
- Added dithering for laptop panels (if they are connected to DAC1 only for now). Gradients should now display much more fluently on 18bit depth panels (no more 'colorbands');
- Fixed black screen on (some?) NV44 cards like Geforce 6100, 6150 and 6200 types;
- Modified 'force_ws' option to force aspect 16:9 instead of 16:10 so both aspect widescreen modes are settable;
- Added basic support for Haiku's native ScreenPrefs panel for dualhead modes. No TVout currently, and switched dualhead mode is not remembered over reboots nor is it coupled with workspaces (so unlike as it is with Dualhead Setup);
- Added new nv.setting called 'check_edid' that forces higher resolution modes to be available on monitors that don't report their EDID info correctly (if option is set to 'false'). Only use this new option if appropriate of course, too high resolution modes will not be liked by your monitor(s)!
Fixes for old nVidia driver 0.80:
Fixes/enhancements; short description:
- Increased 3D rendering speed (you'll need 3D driver Alpha 4.1):
- TNT2 style cards: upto 104% speed of original alpha 4 3D driver;
- GeForce style cards: upto 200% speed of original alpha 4 3D
driver (most cards upto 140%, except for GeForce2Ti which reaches
200%.).
- Added a new nv.setting to force widescreen support when the driver doesn't recognize a WS screen for what it really is;
- Added support for G71, G72, G73 and NFORCE4 cards;
- Fixed more coldstarting problems: now executing coldstarts in
'forced' PCI mode. Note please that you need AGP busmanager V0.02 for
the most reliable results!
Fixes/enhancements; in detail:
- Improved 3D speed related initialisation programming for NV11 and
NV15: NV11 just gained 44% rendering speed, NV15 gained 21% speed. The
GeForce2Ti (NV15) is the new winner: Quake 2 timedemo 1 runs at 28.3fps
in 1024x768x32 mode @ 75Hz refreshrate (P4 2.8Ghz, fsb 533Mhz, AGP4x),
while on the GeForce4MX (NV18) it keeps running at 26.3fps. The
GeForce2MX (NV11) now runs at 18.9fps.
- Improved 3D speed related initialisation programming again.
This time confirmed for NV11, NV15 and NV18 (so works on probably all
NV1x cards): NV11 just gained another 43% rendering speed, NV15 gained
another 60% speed, and NV18 gained 41% speed. The GeForce2Ti (NV15) is
the definate winner: Quake 2 timedemo 1 runs at 45.4fps in 1024x768x32
mode @ 75Hz refreshrate (P4 2.8Ghz, fsb 533Mhz, AGP4x), while on the
GeForce4MX (NV18) it now runs at 37.0fps. The GeForce2MX (NV11) now runs
at 27.1fps.
- Improved 3D speed related initialisation programming for TNT2
and TNT2-M64 card types, TNT1 speed remains unchanged. The speed
improvement depends on colorspace and exact card type: there's a 1-4%
gain. TNT2 runs Quake 2 timedemo 1 at about 17fps in 1024x768x32 mode @
75Hz refreshrate, while TNT2-M64 is at 10.2fps (P4 2.8Ghz, fsb 533Mhz,
AGP mode).
- Added new nv.setting called 'force_ws' that forces all your
connected screens to be treated as being widescreen types. This enables
listing of the widescreen modes in most screen preference panels and the
use of these modes. Only use this new option if appropriate of course,
non-widescreen monitors might not like them!
- Added support for 23 new cards in the GeForce 6xxx and 7xxx
range (7300 - G72; 7600 - G73; 7900 - G71), along with support for
nVidia's latest IGP Nforce4 (GeForce 6100/6150 - NV44). All new ID's
come from nVidia's own March 2006 ID release, except for one which was
reported by a BeOS user.
- Fixed coldstart trouble on a number of cards probably
(confirmed GeForce4 MX4000): Coldstarting must be performed in PCI mode
as some cards reset their AGP PLL during this action. The driver now
forces PCI mode before attempting a coldstart; AGP mode is re-enabled
after that (if used).
Note please:
- Forcing PCI mode doesn't work reliably with AGP busmanager V0.01. Please upgrade to AGP busmanager V0.02!!
Fixes for old nVidia driver 0.74:
Fixes/enhancements; short description:
- Added several fixes and 2D acceleration support 'for video
playback': Be's defined version of Screen_to_screen_scaled_filtered_blit
should work on all cards. Note that you need special software to be
able to use this function, like a video consumer node. With such a node
you'd need to have multiple graphicscards in a system though;
- Fix for failing Sync_to_retrace functionality if you used the card's secondary output as primary one (on dualhead cards);
- Added three new 'tweak' options for 3D use: force_sync, gpu_clk
and ram_clk. You need 3D add-on driver Alpha-4 to be able to use it
(which only works on TNT1 (NV04) upto/including GeForce 4MX (NV18) cards
though).
Fixes/enhancements; in detail:
- The overlay engine code now respects the B_OVERLAY_COLOR_KEY flag instead of forcing keying ON;
- Hook GET_ACCELERANT_DEVICE_INFO now returns much more detailed info about the card in use;
- Hooks INIT_ACCELERANT and CLONE_ACCELERANT now enforce their correct use; returning error B_NOT_ALLOWED in case of errors;
- Improved coldstart RAM tests for NV10 and higher: they could
fail to correctly program the card on 'high-voltage' AGP 1.0 slots
(confirmed a NV11);
- Added support for acceleration engine 2D command SCREEN_TO_SCREEN_SCALED_FILTERED_BLIT (as defined by Be) for all cards;
- Fixed driver not always finding it's VGA BIOS when started and stopped more than once per system uptime 'session';
- Fixed 'BScreen Sync-to-Retrace not working' bug that appeared
on all dualhead cards when CRTC2 was used as primary CRTC. On some
systems outthere this bug might have shown itself as a 'system (or app)
hanging' error occuring while using apps that feature explicit retrace
sync. Completely rewrote interrupt handling to now handle retrace syncs
on both CRTC1 and CRTC2, although only the CRTC used as primary will be
enabled (for now);
- Modified hardware 3D rendering colorspace setting for 32bit
depth: this gives us upto some 11% gain on accelerated 3D rendering
speed using the 3D accelerant;
- Added new nv.setting called 'force_sync': this option (if
enabled) forces accelerated 3D rendering to be synchronized to the
screen's vertical retrace (refreshrate). This option is disabled by
default;
- Added new nv.setting called 'gpu_clk': this TWEAK! option (if
enabled) forces the requested GPU clockspeed, as long as it's within
certain sanity limits. This option might be handy for 3D application
developers for determining bottlenecks (via underclocking), and it might
be handy for hardcore gamers to overclock their graphics card. Be
carefull with overclocking though: it might DESTROY your computer!!
- Added new nv.setting called 'ram_clk': this TWEAK! option (if
enabled) forces the requested card-memory clockspeed, as long as it's
within certain sanity limits. This option might be handy for 3D
application developers for determining bottlenecks (via underclocking),
and it might be handy for hardcore gamers to overclock their graphics
card. Be carefull with overclocking though: it might DESTROY your
computer!!
Fixes for old nVidia driver 0.67:
Fixes/enhancements; short description:
- Multiple error fixes for newer cards (GeForce 6xxx);
- Added GeForce 7800 support;
- Added recognition for several new(er) cards;
- Added TVout support for mostly older cards (TNT1-GeForce3 probably, using Brooktree or Conexant TVencoders);
- Added two TVout related nv.settings options;
- Added a multiple card related nv.setting option;
- Driver now also works on systems without (usable) INT assigned to the card.
Fixes/enhancements; in detail:
- Added capability to driver to run without an INT assigned. Driver
will now automatically disable the 'Sync_to_Retrace' function if no INT
was assigned instead of not loading/running at all;
- Fixed PLL reference recognition (used for refreshrate
calculations) and dualhead detection for a number of 'newer' cards: most
notably for a lot of GeForce 6200 types! Code is rewritten so it's much
less breakable when new cards are added to the supported list in the
future;
- Added TVout support for Brooktree BT868/BT869 and Conexant
CX25870/CX25871 TV encoders: NTSC and PAL 640x480 and 800x600 Desktop
modes are supported, NTSC VCD 640x480 and DVD 720x480 Video modes are
supported, PAL VCD 768x576 and DVD 720x576 Video modes are supported;
- Added 'force TV output signal type' (called tv_output) to
nv.settings: Now you can select Y/C or CVBS output manually in case
autodetection fails for your TV set. That might happen in case the TV
and/or card manufacturor didn't adhere to the impedance specs that exist
for these signals;
- Added detection for some ten new cards being Geforce 6600/6800 and 7800 types;
- Added 'force VGA output ON while TVout enabled' (called
'vga_on_tv') to nv.settings: Now the VGA (or DVI) screen is disabled by
default for a head outputting to TV. You can turn it on however using
this new preset setting. Note though: doing that is considered a tweak
which might damage your screen (if it's an old one);
- Added custom modeflag for users to be able to select TVout head
on a 'per mode' basis. The Dualhead Setup preference panel needs to be
updated (to a version newer than 0.03a) to correctly issue this flag;
- Added rudimentary NV11 CRTC2 FIFO watermark/burst-size
programming to remove/minimize vertical distortion stripes occuring on
some cards due to data fetching errors (because of limited bandwidth);
- Modified NV05M64 (TNT2-M64) watermark/burst-size programming to be executed independant of coldstart feature;
- Updated acceleration engine DMA-mode initialisation code: This
should fix trouble on some newer cards with acceleration, and also adds
NV47 (G70) acceleration support;
- Added preliminary laptop panel DPMS support (except for NV11):
currently only in use when no external DVI panels are connected. Please
provide feedback on this item if you have a laptop (send a logfile
along): only then can this feature be expanded/finalized!
- Added new nv.setting ("primary") to force a certain card to be
primary card in a system with multiple graphics cards: so it will
display your desktop. To enable this (hack) feature uncomment this item
and fill in the exact name of the card that is to be primary (as
exported by the kerneldriver in /dev/graphics/). If you are going to
select a card other than the one displaying your system's POST messages
at bootup, make sure you also set 'usebios false' as otherwise the
card(s) aren't coldstarted by the driver.
Note please:
- DVI and laptop panels don't work yet with the 'usebios false' setting. Analog connected screens should work though.
- Coldstarting doesn't work on TNT1 and GeForce 6xxx/7xxx cards yet.
Fixes for old nVidia driver 0.53:
- Added recognition for 10-15 more newer cards: mostly GeForce 6200, 6600 and 6800 types;
- Added 3D initialisation and updated 2D/3D command setup (defines and hash) for DMA acceleration (pre-NV40 only, 3D confirmed functional on TNT1 upto/including GeForce2Ti and GeForce4MX types: MX440 and MX4000 confirmed);
- Moved the DMA command buffer from graphics memory to main system memory, plus expanded it's size from 32kB to 1Mb. Buffer is mapped using MTRR-WC where available (confirmed speedups for both modifications; pre-NV40 only). Note that all TNT1 cards will be much faster with DMA acceleration now: the new mode is 'officially' working on them, while the old mode used a 'nasty' workaround;
- Graphics engine is now using AGP transfers for fetching commands from the DMA buffer where available. Note that direct memory accesses are used: GART and AGP aperture (scatter-gather) are not in use. (confirmed speedup for this modification);
- Concurrent overlay and 3D acceleration are now possible: no more acceleration engine hangs should occur now;
- Added shared_info flag to inform 3D add-on that it should reload it's rendering state whenever 2D commands are executed. This makes room for further speed improvements for 3D as it can minimize reloading rendering states;
- Added more shared_info flags to support upto 32 3D accelerants in a simple fashion. Texture memory allocation sharing support isn't there yet though.
Fixes for old nVidia driver 0.45:
- Added recognition for one more card: a GeForce 6200 PCIe (ID 0x014f);
- Fixed long-standing trouble with NV15 cards (GeForce 2 Ti/GTS/pro/ultra, Quadro 2 pro), and maybe also for other singlehead cards. RAM access trouble is now fixed so the screen output nolonger distorts and engine hangs are gone. This error was 'introduced' in nVidia driver V0.10: V0.09 was the last previous version working correctly on some of these cards!
Note please that this fix was only possible thanks to someone donating a 'malfunctioning' card. So: thanks again Atilla!!
Note also: with 3D add-on alpha 1-final these NV15 cards are the fastest supported ones ;-)
- Fixed driver coldstart capability for pre-GeForce type cards using PINS V3-V5.15. Newer TNT2-M64 cards will now coldstart OK;
- Added pre-PINS V5.16 coldstart RAM-size check and correction code. This feature was still lacking and possibly solves coldstart trouble on pre-GeForce type cards;
- Added rudimentary CRTC1 FIFO watermark/burst-size programming for TNT2-M64 cards (if coldstarted). This minimizes output distortions on high resolutions. Note please that these distortions can't be completely removed: the RAM bandwidth these cards have is too limited: Bandwidth in increasing order: TNT2-M64, TNT1, TNT2 original, all GeForce types. With the TNT2-M64 watermark/burst-size programming in place it performs still less good than a TNT1 in this respect.
Fixes for old nVidia driver 0.43:
- Updated 3D specific engine initialisation for PIO mode to make the 3D add-on work on pre-NV10 cards. It now works on NV04-NV18 (although NV18 is slow) if you select PIO mode acceleration;
- Added two shared_info 'flags' informing the 3D add-on about modeswitches when they happen.
Fixes for old nVidia driver 0.41:
- Added new acceleration method using DMA command fetching. You can now choose beween (the old) PIO mode and (the new) DMA mode acceleration via a new switch in nv.settings (DMA mode is now the default). DMA acceleration is say 2-3 times as fast as PIO mode acceleration on systems with relative fast CPU's (above 2Ghz or so). On relative slow CPU's (500Mhz or lower) there is no speedgain left and both methods match about up.
Note please: On NV40 and higher only DMA mode acceleration currently works;
- Execution of acceleration commands (DMA mode) has been optimized (compared to PIO mode): now the top-level acceleration functions are incorporated in the engine, and the engine's command execution itself is also optimized. This further increases DMA mode acceleration with upto a factor of 2-3, independant of CPU speed;
- Execution of acceleration commands (PIO mode) is re-setup. Now it should be possible to use more engine commands than there are FIFO channels for them, by doing on-the-fly reconfiguring (DMA mode can do this also). This should be especially usefull when 3D acceleration is going to be setup later on;
- Added recognition for 20 new cards: Most GeForce 6200, 6600 and 6800 types are now recognized, and some more other cards as well;
- Modified cursor to be hardware synchronized to the screen's vertical retrace. This fixes the high CPU load on moving the mouse especially while being on the bottom of the screen (all GeForce series cards);
- Added DPMS support for digital flatpanels connected via DVI;
- Updated 'extended PLL' VCO limits: this (could) fix PLL locking trouble (shivering image / too low refreshrate) on NV31 (FX 5600), NV36 (FX/PCX 57xx) and NV40 and up (FX/PCX 6200, 6600 and 6800). Confirmed NV36, on a PCX 5750 for PCIe.
Fixes for old nVidia driver 0.30:
- Overlay fix for GeForce2 and GeForce4 MX Integrated GPU boards: updated RAM amount detection. The last 64Kb RAM is used for the card's BIOS or something so it's not available to the graphicsdriver;
- Enabled coldstart switch setting (called 'usebios' in nv.settings) in drivercode. Changed the default setting to keep the driver working in the same way it did before;
- Added recognition for 25 new cards including the first PCI-express (PCX) cards: FX/PCX 6800, FX 6600, PCX 5300/5750/5900, PCX Quadro. New 'old style' cards: Quadro FX 700, Quadro FX 1000 Go, FX 5100 and FX 5700 Go. While FX6800 still seems to be non-functional, a Quadro4 280 NVS PCIe (GeForce PCX 5300 PCIe) has been confirmed working OK already;
- Card coldstarts should now be operational (if enabled in nv.settings) on most cards, except TNT1, GeForce 6600 and GeForce 6800. Tested successfully on TNT2/TNT2-M64 (NV05), GeForce2 MX400 (NV11), GeForce4 MX440 (NV18), GeForce4 Ti4200 (NV28) and GeForce FX5200 (NV34). Note however that laptop panels and DVI panels will not work via coldstarting yet!
- The 'bandwidth trouble' existing on older cards, especially on some GeForce2 types, should be fixed now if you enable card coldstarting for these cards. Note that this problem existed because of a fault in these card's BIOSes (they missed some specific register programming). Confirmed a NV15 working OK now.
Fixes for old nVidia driver 0.22:
- Added AGP mode capability on AGP cards along with the option to block it in nv.settings. No GART and AGP aperture support; but if your card and system AGP host bridge support the 'fastwrite' (FW) feature, you'll notice a nice speedup of unaccelerated graphics.
- Tested Quake 2 in software rendering mode over here using timedemo1 with demo1.dm2: framerates jumped up to 140% of the 'original' in AGP2.0 4X mode!
- Also tested video playback using bitmap output mode: CPU load drops considerably depending on desktop colordepth and size of the video output window.
- 2D acceleration will not speedup because it's working 'local', so within the graphics cards engine and it's RAM only.
Note please:
- You need the new (seperate) (open)BeOS AGP busmanager module that has been setup for this feature, without it you will remain using PCI mode as usual.
- If you have trouble with AGP, you have the option to shut it off by setting 'force_pci true' in nv.settings. You are adviced however to tweak the AGP busmanager settings file instead, as this might enable you to keep using AGP mode, be it in a slower setting.
- Updated CRTC modeline tuning for panels: this should fix the 'right-shifted' picture on some panels in their native modes;
- Fixed BIOS ROM dump (to file) option;
- Fixed GET_TIMING_CONSTRAINTS and GET_ACCELERANT_DEVICE_INFO accelerant hooks to return valid data; updated modeline checking and modification code (used by ProposeDisplayMode) to adhere to one more timing constraint
- Lowered fixed refreshrate setting for panels to be 60Hz now: it turns out panels exist that are picky 'on the high side' as well;
- Added option in nv.settings to block refreshrate programming if a flatpanel is active: this should enable support on picky panels;
- Added option in nv.settings to 'unhide' fastwrite support in AGP cards. Some older cards support FW even though normally they don't show it so it won't get activated (confirmed GeForce2 MX400, NV11).
NOTE please:
This is a tweak that you can enable, but you do so at your own risk (of course)!
- Fixed RAM amount detection for GeForce2 and GeForce4 MX Integrated GPU boards.
Fixes for old nVidia driver 0.10:
- Implemented laptop internal flatpanel presence and native resolution detection;
- Implemented external DVI flatpanel(s) presence and native resolution detection;
- Added flatpanel(s) refreshrate protection: it(they) is(are) always kept at 62Hz refresh (60Hz shuts off some panels);
- Added flatpanel specific CRTC modeline and DFP modeline tuning: DVI connected panels work now on both heads (if applicable);
- Added aspect correction programming for flatpanels: corrects if mode aspect differs too much from panel aspect;
- Fixed acceleration engine management regarding sync_to_token: no more updating glitches should occur now;
- Added recognition for GeForce4 MX 4000, GeForceFX 5700LE and GeForceFX 5700VE cards; also modified a few others to be more correct;
- Implemented virtualized CRTC1/DAC1 and CRTC2/DAC2 access: when one flatpanel is found on a card that panel is always primary output now;
- Dualhead switch mode is operational with flatpanels now (via the virtualized setup);
- The user has the option to select the primary output via nv.settings now (via the new 'switchhead' option);
- Modified analog type monitor detection to work the same as for digital panels (detect on bootup only);
- Added dualhead switch mode for NV11 (works via virtualized head access implemented now);
- Modified dualhead switch mode for all other cards to work via the virtualized head access also;
- Modified overlay to work correctly with the virtualized setup;
- Added output-devices/heads matrix setup: the driver now selects the right head for primary output and dualhead should work for all cards with all monitor-types now (if connected before boot);
- Updated head selection code for register programming: NV11 needs a special treatment (again); NV11 dualhead modes are finally OK now, including switch mode;
- Updated secondary head specs: they are improved for nview cards (like GeForce4 and FX) in comparison to twinview cards (like GeForce2);
- Added move_overlay() so overlay (finally) works correctly in virtualscreens;
- You can now select upto one more 4:3 aspect, and 6 new 16:10 aspect modes by just selecting them from the Screenprefs app, except if you use the native R5 one. Use Dualhead setup instead (for example):
- Added standard (4:3 aspect) mode 1400x1050 for panels and analog monitors to the modelist exported by the driver;
- Added widescreen (16:10 aspect) modes 800x500, 1024x640, 1280x800, 1440x900, 1680x1050 and 1920x1200 for panel(s) to the modelist exported by the driver if only widescreen panel(s) is (are) connected (so also no analog monitors may be connected!);
- Added blocking of modes above panel (with lowest) native resotution: this includes blocking of all widescreen modes if a non-widescreen (analog) screen is detected.
- Cursor update for dualhead cards: when the 'softcursor' is used, the hardcursors are both actually turned off now.
NOTE:
The features below are shutdown because they are possibly dangerous without feedback: No documentation on this exists, so this was setup by me tested on my cards only. Feedback (logfiles!) you might send to me might help me gain more info about IF we can use (or need) this, and IF it's OK to use it for a later driver release.
- Added flatpanel LVDS and TMDS transmitters powerup if a panel is detected (not finished: needs more feedback);
- Added flatpanel DPMS support for both heads via powerup/powerdown of LVDS and TMDS transmitters (not finished: needs more feedback).
Fixes for old nVidia driver 0.09:
- Fixed NV11 trouble with repeating screen(s) on the right side of the monitor;
- Updated CRTC memory granularity code to work-around a hardware bug in older cards;
- Fixed fuzzy modes / no picture on GeForceFX 5700 cards: PLL discriminator restrictions updated.
Fixes for old nVidia driver 0.08:
- Fixed GeForceFX 5600 and FX 5700 monitor 'refresh out of range' / shutoff fault. nVidia changed the pixelPLL for the NV31 and NV36;
- Fixed acceleration engine restrictions code to adhere to GeForceFX 5600 restrictions: those are still NV20 style for this card;
- Fixed overlay scaling restriction code to adhere to GeForceFX 5600 restrictions: engine is still the NV10/NV20 one, so it can downscale to 1/8 of the picture size;
- Kernel driver now signals abort on not being able to setup the INT routine instead of letting the machine freeze during accelerant initialisation;
- BWindowScreen R3-style function update for acceleration and page flipping/virtualscreens in apps ('Allegro' update): fixed cloning accelerants;
- Now only programming options head select register on dualhead cards. This fixes driver hanging on integrated GeForce2 cards (ID 0x01a0), and maybe also on some other cards;
- Expanded modelist to include suggested modes above 1600x1200 upto 2048x1536 resolution (if a card supports them): Done by Andrew Bachmann;
- Added card recognition for GeForceFX 5700, FX 5950 and some other (older) cards;
- Added 256Mb RAM detection;
- Improved startup code: this should (could) fix random trouble on some cards like for instance hardcursor trouble on especially laptops;
- Added dualhead support (use Mark Watson's 'Dualhead Setup' from BeBits for now);
- Updated mode granularity and max virtual size checking/limiting;
- Added dualhead support for 8- and 15bit colordepths;
- Fixed move_display distortions in virtualscreens especially visible in 8-bit colordepth (for both heads);
- Added 'overlay follows head' for dualhead stretch and switch modes: if more than half the overlay output window is on a screen, that screen gets the overlay output;
- Added dualhead switch mode (except for NV11 cards as they do not have output connector switching capability);
- Added monitor presence detection for both monitor output connectors on dualhead cards (analog type signals only);
- Added 'output follows monitor' for all modes: it does not matter on which connector you connect your monitor, the output will go there after setting a mode; like the card's BIOS does (except for NV11 cards as they do not have output connector switching capability).
Fixes for old nVidia driver 0.07:
- Added card recognition for some nVidia GeForce4 Ti 4600 cards (ID 0x0252);
- GeForce overlay activation updated: hardware should respond to the first request instead of to the second ('stampTV' update);
- Included B_YCbCr422 hardware overlay for TNT 1/2 class cards (pre NV10 architecture).
Fixes for old nVidia driver 0.06:
- Full 2D acceleration for TNT1 - GeForce FX cards;
- Added card recognition for GeForce FX Go and some older laptop cards;
- Implemented retrace synchronisation (INT routine);
- Geforce overlay updated: turned off ints explicitly, corrected upscaling restriction to be 8x, small speed improvement;
- Vertical timing updated: missed a register on all GeForce cards, missed another register on older cards;
- Register unlocking updated: missed a register on all supported cards.
Fixes for old nVidia driver 0.05:
- Update on cursor move routine: pointer will nolonger accept illegal left-top positions. As a result it will nolonger vanish on some cards;
- Fixed hardware overlay on GeForce4 MX and Go series cards: disabled the embedded MPEG2 decoder engine which exist on these cards only;
- Fixed driver to adhere to the downscaling limitations of the new overlay engine existing in the GeForceFX series cards.
Fixes for old nVidia driver 0.04:
- New cursor_move sync_to_retrace for all supported cards: now all display distortions should be gone (GeForce4 for example);
- Added hardware overlay support for the entire GeForce series cards;
- Now powering up all card function blocks: dualhead cards should now switch to the connected head (by it's BIOS) instead of hanging the system on boot (tested on a dualhead GeForce4 with a DVI and a VGA connector).
Fixes for old nVidia driver 0.03:
- prevent system or video freeze on dragging files or so in tracker windows;
- pre NV10 cursor sync_to_retrace: no more distortions in cursor bitmaps on moving it;
- cursor bitmapadress setup modification for laptops: The cursor should be visible now also on 'Go' type of cards;
- BWindowScreen / Sync_to_retrace fix: prevent apps from crashing on endless waiting for retrace. Wait_for_retrace is temporary disabled now until it's actually implemented;
- logging is now set to minimal by default.
With the 0.03 release most people should be able to use the driver for day to day use. My advice: use the lowest colordepth you can live with: this increases speed a lot! Meanwhile acceleration and overlay will hopefully be setup. Stay tuned! ;-)
Fixes for old nVidia driver 0.02:
- hardcursor support;
- virtual screens / BWindowScreen support including panning/scrolling;
- colorspace selection;
- colorpalette setup;
- refreshrate selection;
- 85 cards of 4 brands are detected now: These are all TNT1 - GeForce FX5900 Ultra cards as far as I know. Hopefully all those cards will actually work OK with the driver;
- DPMS support;
- resolution selection (CRTC setup);
- switch to 'enhanced mode' included: VESA is gone now!
- cardspecs are setup (faked PINS);
- several small fixes done to get the driver working correctly on all four of my cards: PCI TNT1, AGP TNT1, AGP TNT2 and AGP GeForce2MX400.
Things that are scheduled to be implemented or fixed:
- Extend TVout feature to support more encoder-types (Chrontel, Philips);
- Improve/extend various stuff when/if possible.
NOTE PLEASE: This list is kind of a forward looking statement. So I don't know if any or all of this stuff will ever get implemented. I will keep working on the driver for as long as it makes sense and only as long as I have time for it to spare.
Rudolf.
(Page last updated on May 3, 2016)