First post, by swaaye
While trying to find out why Mystique and Millennium II lock up so consistently in 3D (on 815 and 440BX!), I stumbled upon something I had forgotten about from the 90s. The early days of video card drivers abusing PCI.....
It causes audio card problems.
I think Matrox was the first to play with this, but it doesn't really matter because most high performance VGA accelerator cards […]
I think Matrox was the first to play with this, but it doesn't really matter because most high performance VGA accelerator cards for the PCI bus are doing the same thing now. When a number of graphics acceleration operations need to be performed, these commands are sent from the VGA driver to the VGA card over the PCI bus. The VGA chipset has a built in queue that is capable of holding several accelerator commands. Normally the driver checks a status bit on the VGA card to tell if this queue is full or not. If the queue is full, the driver waits for the queue to have a free space before sending the next command. Matrox discovered (and everyone soon followed) that you could increase VGA performance by NOT CHECKING THIS STATUS BIT!!!!!
What happens when you write blindly to a full queue of commands on the VGA card? The bus hangs... The bus master has started a PCI transaction, but the target (the VGA card) can't accept the data yet because it has no place to put it. As soon as the VGA card has room for the data, then the transaction can complete... but until that time the PCI bus is completely locked up. No PCI or ISA transactions can happen. This can take a long time (40 or more audio cycles) if the current VGA operation is a huge BITBLT on a 24bit screen... A 256 or 512 bit FIFO just ain't gonna cut it.
The only acceptable solution to this problem is to put the queue check BACK into the VGA driver. I have been discussing this problem with some of the engineers at Matrox and Tseng labs and have some solutions for you!
Tseng labs - has released a new version of their ET6000 VGA driver that behaves nicer to the PCI bus.. this driver is now trickling down to the STB and Hercules products that use the ET6000 chip.
Hercules Dynamite 128 card... There is a new driver on the Hercules BBS (not web page... don't ask me) called DV95112 (Version 1.12) Using this driver, you need to add a special switch in your system.ini file. Under the heading [Hercules] there is a line that reads "Optimization=0" you will need to set this to "Optimization=1"... ta da, problem fixed.
Matrox - It turns out that Matrox has ALWAYS had a hidden back door switch to enable this check in the VGA driver. If you are using the Matrox Millennium, you will need to add the following lines to your system.ini file:
[mga.drv]
PCIChipset=1This almost fixes the problem completely.... you will also need to disable the "Use PowerGDI acceleration" feature in the Advanced Matrox setup (Control Panel->Display Properties->MGA Settings->Advanced->Performance) ta da... problem fixed.
For owners of Matrox Mystique: Go to screen properties (right click in main window) Go to setting tab, Click on PowerDesk button Uncheck 'Use Bus Mastering' Uncheck 'Use Automatic PCI Bus retries' On Pentium Pro machines, Uncheck 'Use Write-Combining' Click on OK
I've heard from the good folks at S3 that ALL S3 drivers for all of their VGA cards (downloaded from www.s3.com) can be fixed by adding a line in system.ini under the [display] section... After [display] add the line 'busthrottle=1'.... so (for S3 drivers):
[display]
busthrottle=1For owners of the #9 Imagine 128 series 2 It seems a new driver (version 4.102.36) is now available directly from the folks at #9 upon request..