|
Matrox MGA videodriver history:
I am currently working on the originally FoFt V0.12 based openBeOS Matrox videodriver. I wanted to implement hardware overlay and tweak TVout a bit only, but I have expanded my work on this driver to include, well, everything. This driver was originally started by Mark Watson (FoFt). Later on, Apsed and I started to work on the driver, as Mark nolonger had time to spare to do it. The last time I had contact with Apsed he was working on implementing Millenium2 support.
Sadly, I haven't heard from Apsed since. V0.13alpha2 was based on his version of the driver (which in turn was based on Mark Watson's V0.12), V0.13alpha1 was based on Mark's V0.12 version directly. Apsed improved several things, like G200 support and logging. He also partly implemented Millenium2 support as mentioned just now.
So where does this leave us?
The current release and the next releases will be based on Apsed's version, enhanced with my own work on a lot of different aspects for Millenium I upto and including G550 cards. I am not working on support for older cards for now. I want to thank Apsed and Mark Watson for the important work they did on the driver, and I hope I will be able to keep giving my best to improve and expand it too. Hopefully for a long time. If needed.
Rudolf Cornelissen.

|
|
List of fixed items for current driver 0.20:
- G200-G550:
- Added move_overlay() so overlay (finally) works correctly in virtualscreens.
- General:
- Fixed acceleration engine management regarding sync_to_token: no more updating glitches should occur now;
- 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;
- Added one more 4:3 aspect display mode (1400x1050) which you can use by just selecting it from the Screenprefs app, except if you use the native R5 one. Use Dualhead setup instead (for example).
List of fixed items for old driver 0.16:
- G450/G550:
- fixed CRTC1 DPMS fault introduced in V0.15 (which could result in turned-off/black screen on boot)!
- General:
- Expanded modelist to include suggested modes above 1600x1200 upto 2048x1536 resolution: Done by Andrew Bachmann;
- CRTC timing restriction checking updated: Modelists exported adhere to every cards max. CRTC capability now: the oldest cards support upto and including 1600x1200, while the newest cards support upto and including 2048x1536 resolution.
List of fixed items for old driver 0.15:
- G400/G400MAX:
- Secondary head (maven) sync polarity programming fixed/implemented for monitor mode: this never worked correctly yet;
- Fixed TVout aspect ratio, size, position and distortions; also removed refreshrate dependancies. This means the PAL and NTSC Desktop modes 640x480, 800x600 and 1024x768 are fully OK now;
- Implemented the PAL and NTSC Video VCD and DVD TVout modes: being 640x480 and 720x480 for NTSC; 768x576 and 720x576 for PAL. Checkout the tools and VCD/DVD on TV stuff;
- Checked out the overscanning rubbish visible on the top of the screen on the secondary head if spaces with virtual height are used. This cannot be fixed decently for monitor mode due to a MAVEN hardware design fault; fixed TVout modes via a vertical sync 'tweak' though. Also updated the workaround code for non-virtual and virtual-width-only modes to respect RAM size and non-accelerated modes;
- Updated ProposeMode RAM and virtual width requirement checks for dualhead modes.
- G450:
- Updated ProposeMode RAM and virtual width requirement checks for dualhead modes;
- Added full DPMS support for secondary head;
- Disabled G400 MAVEN design fault workaround code as the new 'on die MAVEN' is OK.
- G550:
- Updated ProposeMode RAM and virtual width requirement checks for dualhead modes;
- Added full DPMS support for secondary head;
- Disabled G400 MAVEN design fault workaround code as the new 'on die MAVEN' is OK.
- General:
- Retrace sync fix: sync now actually happens during retrace;
- BWindowScreen R3-style function update for acceleration and page flipping/virtualscreens in apps ('Allegro' update): fixed cloning accelerants, fixed acceleration in clones;
- CRTC timing restriction checking updated;
- Kernel driver now signals abort on not being able to setup the INT routine instead of letting the machine freeze during accelerant initialisation;
- Primary head sync polarity programming fixed: this never worked correctly;
- Fixed/updated DPMS functionality on primary head as only part of it was working;
- DPMS compatibility update for use with sync_on_green: Secondary head DPMS remains operational; primary head will only blank the display while keeping it's sync in place;
- Modified the default settings file for use of the hardcursor ('hardcursor true'). It turns out BDirectWindow windowed mode needs this setting for it to be enabled ('Chart' demo app for instance). If you want a cursor on both heads using dualhead you need to change the settings file back to 'hardcursor false' yourself now.
List of fixed items for old driver 0.14:
- Millenium I:
- Enabled Millenium I support;
- Fixed the kernel driver for working Millenium I support;
- 'Pins' V1 card-config BIOS test readout implemented: This is not useable yet due to lack of info;
- Implemented hardcursor support;
- Fixed 2D acceleration: added software adress linearisation switch;
- Fixed mode setup for 800x600 in 8, 15 and 16bit color, and 1600x1200 in 8 bit color by implementing framebuffer slopspace;
- Fixed output brightness (sync_on_green error);
- Fixed ScreenPrefs refreshrate trouble;
- Tuned BWindowScreen support (MOVE_DISPLAY syncs to retrace now).
- Millenium II:
- Implemented hardcursor support;
- Fixed 2D acceleration problem: added software adress linearisation switch;
- Fixed mode setup for 800x600 in 8, 15 and 16bit color, and 1600x1200 in 8 bit color by implementing framebuffer slopspace;
- Fixed output brightness (sync_on_green error);
- Fixed ScreenPrefs refreshrate trouble;
- 2D acceleration is operational now: removed read access on a write only register;
- Tuned BWindowScreen support (MOVE_DISPLAY syncs to retrace now).
- G100:
- 2D engine update (removed read access on a write only register): acceleration also works now if card is used as secondary videocard.
- G200:
- Improved overlay support for virtual workspaces (will improve more later on).
- G400/G400MAX:
- Re-implemented videoPLL setup for monitormode;
- Re-implemented videoPLL setup for TVout mode;
- Re-implemented TVout functionality: output quality is still the same, but some handy logging is implemented for instance now. The Linux code has gone;
- Fixed the low contrast/intensity setting of the TVout picture and tuned the colorburst signal;
- Improved non-coldstarted dualhead and TVout support;
- BWindowScreen support update for dualhead and TVout use;
- Improved hardcursor support for dualhead stretch and switch modes, in standard and virtual spaces;
- Improved overlay support for virtual workspaces and dualhead switch mode with TVout enabled (will improve more later on).
- G450:
- Implemented videoPLL setup for monitor mode and TVout mode with 'on the fly' loopback filter configuration;
- Checked and updated pins readout for all VCO reported specs;
- Implemented basic TVout support;
- Fixed a small bug in all PLL's that prevented TVout color from working correctly. This bug was also responsible for 'jumping' refreshrate changes on moving the corresponding slider in Be's screenprefs panel. The refreshrates and system speed are thus set more accurately now;
- Fixed the low contrast/intensity setting of the TVout picture and tuned the colorburst signal;
- Improved/fixed non-coldstarted dualhead and TVout support;
- Setup TVout picture vertical sizing and positioning: the DVD and VCD modes are operational! (Checkout the tools and VCD/DVD on TV stuff);
- BWindowScreen support update for dualhead and TVout use;
- Improved hardcursor support for dualhead stretch and switch modes, in standard and virtual spaces;
- Improved overlay support for virtual workspaces and dualhead switch mode with TVout enabled (will improve more later on);
- Enabled sync signals to both the analog output connectors instead of not touching them. This might fix some 'secondary head non-working' problems, and some 'secondary card use' problems.
- G550:
- Implemented videoPLL setup for monitor mode and TVout mode with 'on the fly' loopback filter configuration;
- Checked and updated pins readout for all VCO reported specs;
- Implemented basic TVout support;
- Fixed a small bug in all PLL's that prevented TVout color from working correctly. This bug was also responsible for 'jumping' refreshrate changes on moving the corresponding slider in Be's screenprefs panel. The refreshrates and system speed are thus set more accurately now;
- Fixed the low contrast/intensity setting of the TVout picture and tuned the colorburst signal;
- Fixed non-coldstarted dualhead and TVout support;
- Setup TVout picture vertical sizing and positioning: the DVD and VCD modes are operational!
(Checkout the tools and VCD/DVD on TV stuff);
- BWindowScreen support update for dualhead and TVout use;
- Improved hardcursor support for dualhead stretch and switch modes, in standard and virtual spaces;
- Improved overlay support for virtual workspaces and dualhead switch mode with TVout enabled (will improve more later on);
- Enabled sync signals to both the analog output connectors instead of not touching them. This might fix some 'secondary head non-working' problems, and some 'secondary card use' problems.
- General:
- Implemented framebuffer slopspace. This 'feature' is needed for (decent) standard mode support on older cards (before G100), and also enables very flexible non-standard mode support on all cards (in horizontal pixel multiples of 8 pixels);
- Implemented support for primary head 'sync on green'. The driver config file mga.settings is used to enable/disable this function. Sync on green is functional on Millenium I upto and including G200 cards. G400, G450 and G550 cards apparantly miss the needed wiring on the videocard to actually support this;
- Shutdown kernel driver Matrox Mystique 170/220 recognition. These cards are not supported, so the driver may not interfere with possible other drivers that *do* support these cards;
- Prevented the driver from using the motherboard interrupts IRQ0, 1 or 2 if assigned to the Matrox card: otherwise the system may crash or hang on boot. Thanks to Sunlung Suen for nailing this one;
- Removed read access on a write only register. This fixes 2D acceleration on Millenium 2 cards and G100 acceleration not working if used as secondary videocard. Because this register was used incorrectly on all cards it might fix other (sporadic) problems also.
- Added BeOS BWindowScreen bug workaround ('ProposeMode limitation check' setup error): BWindowScreen is working fully in every valid configuration 'guaranteed' now!
- Fixed a MOVE_DISPLAY bug: horizontal move instructions where not correctly carried out for 16 and 32bit colormodes. for 16bit moves the X-coordinate was divided by two, for 32bit moves it was divided by four. This fix definately improves support for large virtual workspaces including BWindowScreen;
- Added BWindowScreen support for extremely large virtual spaces. Overlay can always be used (on G200 and later cards), 2D acceleration functions are only exported if they support a certain size;
- Fixed errors in displaymode list exported by the driver: corrected 1152x864 modes timing errors; modes beyond cardspecs are nolonger exported.
List of fixed items for old driver V0.13 beta2:
- Millenium II:
- G100:
- Removed another hardcursor bug that prevented it to work correctly on some occasions (bitmap trouble),
- Verified and improved coldstart support via actual use as secondary videocard.
- G200:
- Implemented 'hardware zooming' in overlay. Also fixed bottom and right-most 'line' distortions sometimes visible,
- Completed 'official' card coldstart and verified it via actual use as secondary videocard,
- Minimized 'high-resolution video on high-resolution desktop' (downscaling) distortions in overlay by setting up G200 memory access priority. Note: This is a 'known limitation' of the G200 cards, their memory bandwidth is limited. G400 and later cards do not suffer from this on overlay...
- G400/G400MAX:
- Implemented 'hardware zooming' in overlay. Also fixed bottom and right-most 'line' distortions sometimes visible,
- Completed 'official' card coldstart and verified it via actual use as secondary videocard,
- Toggled (and verified) NTSC/PAL TV output so it matches with dualheadsetup setting,
- Included TV-adapter cable detection (currently only used on cross-connecting heads),
- Modified dualhead implementation for head cross-connecting and overlay,
- Added analog amplification setting for secondary head (monitor mode: prevents analog flat-panels from being driven into saturation which resulted in bright, distorted colors).
- G450:
- Implemented 'hardware zooming' in overlay. Also fixed bottom and right-most 'line' distortions sometimes visible,
- System PLL is programmed according to pins reported specs,
- Implemented full card coldstart support: Not yet verified, but should work as secondary videocard,
- Included TV-adapter cable detection: Analog VGA output connector is automatically chosen like the card's BIOS does if the card has a primary DVI connector,
- Extended/fixed/changed dualhead implementation for cross-connecting heads, overlay use, and (coldstarted) VGA-BIOS independent functionality (not yet verified, but should work OK).
- G550:
- Implemented 'hardware zooming' in overlay. Also fixed bottom and right-most 'line' distortions sometimes visible,
- System PLL is programmed according to pins reported specs,
- Implemented full card coldstart support and verified it via actual use as secondary videocard,
- Included TV-adapter cable detection: Analog VGA output connector is automatically chosen like the card's BIOS does if the card has a primary DVI connector,
- Extended/fixed/changed dualhead implementation for cross-connecting heads, overlay use, and (coldstarted) VGA-BIOS independent functionality.
- General:
- Re-included the 'Be screenprefs Panel' lower-refreshrate limit at 48Hz, 'mistakenly' removed in V0.13 beta1,
- Verified the high-refreshrate limits, works nicely according to specs and pins. G200 for instance can do 1600x1200x32 in max. 60Hz,
- The 'mga.settings' file 'usebios' option default setting for the driver is (re)set to 'false', so the G100-G550 cards will be fully started now. Please report if you encounter problems!!
- The 'mga.settings' file 'hardcursor' option default setting is (re)set to 'false', so dualhead works OK 'out of the box'. This is a failsafe setting: if you only use singlehead mode you can manually re-enable it,
- Finally completed the 'migration' to the new PINS implementation. The old version is completely removed now! (pre G100 PINS readout will be implemented also, and some minor modifications might still be done in the future to support new features the driver will get.)
List of fixed items for old driver V0.13 beta1:
- Millenium II:
- G100:
- 'Pins' card-config BIOS readout re-implemented / expanded,
- Complete 'official' card coldstart,
- SDRAM card CAS latency tuning included,
- Hardware cursor / 2D support fixed,
- RAM amount detection fixed,
- PLL timebase detection included,
- Improved BWindowScreen support,
- System, RAM and DAC speeds more accurately set.
- G200:
- 'Pins' card-config BIOS readout re-implemented / expanded,
- More official card coldstart,
- RAM amount detection fixed,
- B_YCbCr422 (is YUY2) hardware overlay colorkeying completed,
- PLL timebase detection included,
- Improved BWindowScreen support,
- System, RAM and DAC speeds more accurately set.
- G400/G400MAX:
- 'Pins' card-config BIOS readout re-implemented / expanded,
- Improved card coldstart,
- RAM amount detection fixed,
- B_YCbCr422 (is YUY2) hardware overlay colorkeying completed,
- PLL timebase detection included,
- Improved BWindowScreen support,
- System and DAC speeds more accurately set.
- G450:
- 'Pins' card-config BIOS readout re-implemented / expanded,
- RAM amount detection fixed,
- B_YCbCr422 (is YUY2) hardware overlay colorkeying completed,
- DAC speeds more accurately set,
- PLL timebase detection included,
- Improved BWindowScreen support,
- PLL loopback filters configured 'on the fly'.
- G550:
- 'Pins' card-config BIOS readout re-implemented / expanded,
- RAM amount detection fixed,
- B_YCbCr422 (is YUY2) hardware overlay colorkeying completed,
- DAC speeds more accurately set,
- PLL timebase detection included,
- Improved BWindowScreen support,
- PLL loopback filters configured 'on the fly'.
REMARK: Re-implementing Pins is something that has it's repercussions throughout the entire driver. Most improvements are at least somewhat connected to this. Pins describes the actual specifications of your videocard. It provides info on type, amount, speed and configuration of cardRAM. It tells the driver if TVout or DVI exist on your card. It also specifies largely what the other specifications are for every individual MGA card outthere.

|
Things that are scheduled to be implemented or fixed for a later release:
- Millenium I:
- 'Pins' V1 card-config BIOS readout completion,
- PixelPLL setup re-implementation;
- Coldstart support if possible: there might be a lack of info for this;
- SystemPLL setup re-implementation;
- 1600x1200 mode hardcursor distortion fix.
- Millenium II:
- 'Pins' V2 card-config BIOS readout implementation if possible,
- PixelPLL setup re-implementation;
- Coldstart support if possible: there might be a lack of info for this;
- SystemPLL setup re-implementation;
- 1600x1200 mode hardcursor distortion fix.
- G100:
- G200:
- TVout support,
- Hardcursor distortion fix if mouse reaches top of screen,
- G200 Marvel cards apparantly have trouble displaying the desktop in other than 32bit mode. Unfortunately I do not have such a card at my disposal so I will have to fix this 'blindly', if at all possible..
UPDATE: This is a colorpalette problem. Apparantly only the upper three bits in the palette RAM adressing are working. This is used for all colorspaces...
UPDATE2: It looks like MMS cards like the HP VisualizeFX have the same problem...
UPDATE3: Due to lack of documentation and a card to test with myself this will probably not get fixed I'm afraid.
So as long as you have a 'standard' G200 card you will be OK with the driver, but with a special 'edition' of the card you might not be able to use the driver on a daily basis. (I'll try to figure it out somehow anyway, but if someone else knows how to fix this, please inform me!)
- G400/G400MAX:
- Implement RGB16 hardware overlay (not supported on earlier cards BTW),
- Add DVD-max support for TVout if possible.
- G450:
- Add DVD-max support for TVout if possible,
- Implement RGB16 hardware overlay,
- Try to setup the desktop video modes *without* overscan and with the correct aspect ratio via 2D engine downscaling,
- Setup DVI output,
- Fix the coldstart RAM initialisation error on some G450 cards (saw it on a 16Mb SDRAM card).
- G550:
- Add DVD-max support for TVout if possible,
- Implement RGB16 hardware overlay,
- Try to setup the desktop video modes *without* overscan and with the correct aspect ratio via 2D engine downscaling,
- Setup DVI output.
- General:
- Optimize the driver for speed;
- For DVD-max support, node support and having the option of different refreshrate settings on each head, modesetup will be split-up completely for both heads.
- Add B_SCREEN_TO_SCREEN_SCALED_FILTERED_BLIT function if possible. This can be used for scaling and filtering video or low-res games in BWindowScreen. Might be handy on cards that don't support overlay for instance..
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.

|