xref: /haiku/src/add-ons/kernel/drivers/graphics/nvidia/UPDATE.html (revision 4f00613311d0bd6b70fa82ce19931c41f071ea4e)
1<html>
2<head>
3<title>Changes</title>
4</head>
5<body>
6<p><h2>Changes done for each driverversion:</h2></p>
7<p><h1>nv_driver 0.67 (Rudolf)</h1></p>
8<ul>
9<li>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;
10<li>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;
11<li>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;
12<li>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;
13<li>Added detection for some ten new cards being Geforce 6600/6800 and 7800 types;
14<li>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);
15<li>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;
16<li>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);
17<li>Modified NV05M64 (TNT2-M64) watermark/burst-size programming to be executed independant of coldstart feature;
18<li>Updated acceleration engine DMA-mode initialisation code: This should fix trouble on some newer cards with acceleration, and also adds NV47 (G70) acceleration support;
19<li>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!
20<li>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.<br>
21<strong>Note please:</strong>
22<ul>
23 <li>DVI and laptop panels don't work yet with the 'usebios false' setting. Analog connected screens should work though.
24 <li>Coldstarting doesn't work on TNT1 and GeForce 6xxx/7xxx cards yet.
25</ul>
26</ul>
27<p><h1>nv_driver 0.53 (Rudolf)</h1></p>
28<ul>
29<li>Added recognition for 10-15 more newer cards: mostly GeForce 6200, 6600 and 6800 types;
30<li>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);
31<li>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;
32<li>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);
33<li>Concurrent overlay and 3D acceleration are now possible: no more acceleration engine hangs should occur now;
34<li>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;
35<li>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.
36</ul>
37<p><h1>nv_driver 0.45 (Rudolf)</h1></p>
38<ul>
39<li>Added recognition for one more card: a GeForce 6200 PCIe (ID 0x014f);
40<li>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!<br>
41Note please that this fix was only possible thanks to someone donating a 'malfunctioning' card. So: thanks again Atilla!!<br>
42Note also: with 3D add-on alpha 1-final these NV15 cards are the fastest supported ones ;-)
43<li>Fixed driver coldstart capability for pre-GeForce type cards using PINS V3-V5.15. Newer TNT2-M64 cards will now coldstart OK;
44<li>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;
45<li>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.
46</ul>
47<p><h1>nv_driver 0.43 (Rudolf)</h1></p>
48<ul>
49	<li>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;
50	<li>Added two shared_info 'flags' informing the 3D add-on about modeswitches when they happen.
51</ul>
52<p><h1>nv_driver 0.41 (Rudolf)</h1></p>
53<ul>
54	<li>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.<br>
55	<strong>Note please:</strong> On NV40 and higher only DMA mode acceleration currently works;
56	<li>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;
57	<li>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;
58	<li>Added recognition for 20 new cards: Most GeForce 6200, 6600 and 6800 types are now recognized, and some more other cards as well;
59	<li>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);
60	<li>Added DPMS support for digital flatpanels connected via DVI;
61	<li>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.
62</ul>
63<p><h1>nv_driver 0.30 (Rudolf)</h1></p>
64<ul>
65	<li>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;
66	<li>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;
67	<li>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;
68	<li>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!
69	<li>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.
70</ul>
71<p><h1>nv_driver 0.22 (Rudolf)</h1></p>
72<ul>
73	<li>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.
74	<ul>
75 	<li>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!
76	<li>Also tested video playback using bitmap output mode: CPU load drops considerably depending on desktop colordepth and size of the video output window.<br>
77	<li>2D acceleration will not speedup because it's working 'local', so within the graphics cards engine and it's RAM only.
78	</ul>
79<strong>Note please:</strong><br>
80	<ul>
81	<li>You need the new (seperate) Haiku AGP busmanager module that has been setup for this feature, without it you will remain using PCI mode as usual.
82	<li>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.
83	</ul>
84	<li>Updated CRTC modeline tuning for panels: this should fix the 'right-shifted' picture on some panels in their native modes;
85	<li>Fixed BIOS ROM dump (to file) option;
86	<li>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
87	<li>Lowered fixed refreshrate setting for panels to be 60Hz now: it turns out panels exist that are picky 'on the high side' as well;
88	<li>Added option in nv.settings to block refreshrate programming if a flatpanel is active: this should enable support on picky panels;
89	<li>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).<br>
90 	<strong>NOTE please:</strong><br>
91 	This is a tweak that you <strong>can</strong> enable, but you do so at your own risk (of course)!
92 	<li>Fixed RAM amount detection for GeForce2 and GeForce4 MX Integrated GPU boards.
93</ul>
94<p><h1>nv_driver 0.10 (Rudolf)</h1></p>
95<ul>
96	<li>Implemented laptop internal flatpanel presence and native resolution detection;
97	<li>Implemented external DVI flatpanel(s) presence and native resolution detection;
98	<li>Added flatpanel(s) refreshrate protection: it(they) is(are) always kept at 62Hz refresh (60Hz shuts off some panels);
99	<li>Added flatpanel specific CRTC modeline and DFP modeline tuning: DVI connected panels work now on both heads (if applicable);
100	<li>Added aspect correction programming for flatpanels: corrects if mode aspect differs too much from panel aspect;
101	<li>Fixed acceleration engine management regarding sync_to_token: no more updating glitches should occur now;
102	<li>Added recognition for GeForce4 MX 4000, GeForceFX 5700LE and GeForceFX 5700VE cards; also modified a few others to be more correct;
103	<li>Implemented virtualized CRTC1/DAC1 and CRTC2/DAC2 access: when one flatpanel is found on a card that panel is always primary output now;
104	<li>Dualhead switch mode is operational with flatpanels now (via the virtualized setup);
105	<li>The user has the option to select the primary output via nv.settings now (via the new 'switchhead' option);
106	<li>Modified analog type monitor detection to work the same as for digital panels (detect on bootup only);
107	<li>Added dualhead switch mode for NV11 (works via virtualized head access implemented now);
108	<li>Modified dualhead switch mode for all other cards to work via the virtualized head access also;
109	<li>Modified overlay to work correctly with the virtualized setup;
110	<li>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);
111	<li>Updated head selection code for register programming: NV11 needs a special treatment (again); NV11 dualhead modes are finally OK now, including switch mode;
112	<li>Updated secondary head specs: they are improved for nview cards (like GeForce4 and FX) in comparison to twinview cards (like GeForce2);
113	<li>Added move_overlay() so overlay (finally) works correctly in virtualscreens;
114	<li>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, <strong>except</strong> if you use the native R5 one. Use Dualhead setup instead (for example):
115		<ul>
116			<li>Added standard (4:3 aspect) mode 1400x1050 for panels and analog monitors to the modelist exported by the driver;
117			<li>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!);
118			<li>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.
119		</ul>
120	<li>Cursor update for dualhead cards: when the 'softcursor' is used, the hardcursors are <strong>both</strong> actually turned off now.
121</ul>
122<br>
123<strong>NOTE:</strong><br>
124The 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 (<strong>logfiles!</strong>) you might send to me might help me gain more info about <strong>IF</strong> we can use (or need) this, and <strong>IF</strong> it's OK to use it for a later driver release.
125<ul>
126	<li>Added flatpanel LVDS and TMDS transmitters powerup if a panel is detected (not finished: needs more feedback);
127	<li>Added flatpanel DPMS support for both heads via powerup/powerdown of LVDS and TMDS transmitters (not finished: needs more feedback).
128
129</ul>
130<p><h1>nv_driver 0.09 (Rudolf)</h1></p>
131<ul>
132	<li>Fixed NV11 trouble with repeating screen(s) on the right side of the monitor;
133	<li>Updated CRTC memory granularity code to work-around a hardware bug in older cards;
134	<li>Fixed fuzzy modes / no picture on GeForceFX 5700 cards: PLL discriminator restrictions updated.
135</ul>
136<p><h1>nv_driver 0.08 (Rudolf)</h1></p>
137<ul>
138	<li>Fixed GeForceFX 5600 and FX 5700 monitor 'refresh out of range' / shutoff fault. nVidia changed the pixelPLL for the NV31 and NV36;
139	<li>Fixed acceleration engine restrictions code to adhere to GeForceFX 5600 restrictions: those are still NV20 style for this card;
140	<li>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;
141	<li>Kernel driver now signals abort on not being able to setup the INT routine instead of letting the machine freeze during accelerant initialisation;
142	<li>BWindowScreen R3-style function update for acceleration and page flipping/virtualscreens in apps ('Allegro' update): fixed cloning accelerants;
143	<li>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;
144	<li>Expanded modelist to include suggested modes above 1600x1200 upto 2048x1536 resolution (if a card supports them): Done by Andrew Bachmann;
145	<li>Added card recognition for GeForceFX 5700, FX 5950 and some other (older) cards;
146	<li>Added 256Mb RAM detection;
147	<li>Improved startup code: this should (could) fix random trouble on some cards like for instance hardcursor trouble on especially laptops;
148	<li>Added dualhead support (use Mark Watson's 'Dualhead Setup' from BeBits for now);
149	<li>Updated mode granularity and max virtual size checking/limiting;
150	<li>Added dualhead support for 8- and 15bit colordepths;
151	<li>Fixed move_display distortions in virtualscreens especially visible in 8-bit colordepth (for both heads);
152	<li>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;
153	<li>Added dualhead switch mode (except for NV11 cards as they do not have output connector switching capability);
154	<li>Added monitor presence detection for both monitor output connectors on dualhead cards (analog type signals only);
155	<li>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).
156</ul>
157<p><h1>nv_driver 0.07 (Rudolf)</h1></p>
158<ul>
159	<li>Added card recognition for some Nvidia GeForce4 Ti 4600 cards (ID 0x0252);
160	<li>GeForce overlay activation updated: hardware should respond to the first request instead of to the second ('stampTV' update);
161	<li>Included B_YCbCr422 hardware overlay for TNT 1/2 class cards (pre NV10 architecture).
162</ul>
163<p><h1>nv_driver 0.06 (Rudolf)</h1></p>
164<ul>
165	<li>Added full 2D acceleration for TNT1 - GeForce FX cards;
166	<li>Added card recognition for GeForce FX Go and some older laptop cards;
167	<li>Implemented retrace synchronisation (INT routine);
168	<li>Geforce overlay updated: turned off ints explicitly, corrected upscaling restriction to be 8x, small speed improvement;
169	<li>Vertical timing updated: missed a register on all GeForce cards, missed another register on older cards;
170	<li>Register unlocking updated: missed a register on all supported cards.
171</ul>
172<p><h1>nv_driver 0.05 (Rudolf)</h1></p>
173<ul>
174	<li>Update on cursor move routine: pointer will nolonger accept illegal left-top positions. As a result it will nolonger vanish on some cards;
175	<li>Fixed hardware overlay on GeForce4 MX and Go series cards: disabled the embedded MPEG2 decoder engine which exist on these cards only;
176	<li>Fixed driver to adhere to the downscaling limitations of the new overlay engine existing in the GeForceFX series cards.
177</ul>
178<p><h1>nv_driver 0.04 (Rudolf)</h1></p>
179<ul>
180	<li>New cursor_move sync_to_retrace for all supported cards: now all display distortions should be gone (GeForce4 for example);
181	<li>Added hardware overlay support for the entire GeForce series cards;
182	<li>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).
183</ul>
184<p><h1>nv_driver 0.03 (Rudolf)</h1></p>
185<ul>
186	<li>Prevent system or video freeze on dragging files or so in tracker windows;
187	<li>Pre NV10 cursor sync_to_retrace: no more distortions in cursor bitmaps on moving it;
188	<li>Cursor bitmapadress setup modification for laptops: The cursor should be visible now also on 'Go' type of cards;
189	<li>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.
190</ul>
191<p><h1>nv_driver 0.02 (Rudolf)</h1></p>
192<ul>
193	<li>hardcursor support;
194	<li>virtual screens / BWindowScreen support including panning/scrolling;
195	<li>colorspace selection;
196	<li>colorpalette setup;
197	<li>refreshrate selection;
198	<li>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;
199	<li>DPMS support;
200	<li>resolution selection (CRTC setup);
201	<li>switch to 'enhanced mode' included: VESA is gone now!
202	<li>cardspecs are setup (faked PINS);
203	<li>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.
204</ul>
205<p><h1>Still todo:</h1></p>
206<ul>
207	<li>Extend TVout feature to support more encoder-types (Chrontel, Philips);
208	<li>Improve/extend various stuff when/if possible (like adding DDC/EDID, GTF).
209</ul>
210</p>
211</body>
212</html>
213