So, you just went out and purchased for yourself a new AGP bus based video card to replace your aging 2Mb PCI adapter and you were disappointed with the results. This could be the reason why.
In order to understand what I'm about to reveal, first a little history lesson is required.
The 'traditional' PCI bus that we are all very familiar with is rated to a maximum speed of 33 MHz. (without overclocking). The PCI bus standard, however, allowed for an optional extension of the design (with a longer connector) which operates at 66 MHz. This optional extension of the standard was very rarely ever implemented by anyone, even though it offered a theoretical doubling of PCI performance. (I saw it once on a Gigabyte board, I think, but I've never seen a 66 MHz card, ever).
When the AGP standard was designed, very little was altered from the PCI standard (which AGP is based on). The main changes that AGP implemented were to finally recommend the utilization the optional 66 MHz extension offered by the PCI standard, and for some reason the connector was also changed physically (electrical signal-wise it's virtually identical). AGP also introduced a new host bridge standard that removed some of the bottlenecks between the AGP bus and system memory, which in itself accounts for some speed improvements on 3D cards, but really doesn't help things any for text or 2D graphics. (It was mainly put in place to allow fast updating of textures on 3D accelerators).
The downfall of this simplistic 're-hashing' of PCI to create AGP was that the standard was actually too flexible. Rather than making 66 MHz mode a requirement, it was left optional (just like in the PCI standard)!! What all this means that a hardware designer can take an existing PCI design and re-hash it to work on AGP in a very short space of time, with virtually no alteration of the design at all. Think about that for a moment. It may physically be an AGP card, but it doesn't have to support 66 MHz. If it isn't running at 66 MHz, it must be running at 33 MHz; the exact same speed as a PCI card!!! In other words, there is ZERO percent improvement over a PCI based adapter!!!
Granted, the AGP bridge may offer some improvement by way of bottleneck reduction, but this improvement is probably negated by the fact that the same software drivers, unaltered, are undoubtedly also in use. If the drivers aren't optimized for AGP, then there is a huge wasted potential since all the 'extra' features of AGP can't be called on: i.e. AGP 2x mode, sidebanding, fastwrite transfers, etc etc.
How I discovered this information
Using my PCI exploration program I was able to dump the configuration data for several popular AGP graphic cards. At the time I wasn't looking for reasons for lousy performance; rather I was just learning the programming interfaces and stumbled upon this information quite as a side-effect. It was not my goal to defame certain AGP cards, but since performance issues are always of interest to me, I couldn't help but create this page to relay my discoveries o the world.
Testing & results
By examining the reported configuration data,
you can see if an unknown AGP graphic card supports the '66 MHz' and 'AGP
Capabilities' features. Also, you can see if the AGP bridge's Capabilities
show AGP as enabled and a valid bus speed selected. Cheap cards that are
nothing more than PCI re-hashes won't have any of those features or capabilities
present or enabled.
Here is the screen-dump for my 'crappy' S3 Trio3D AGP card, which is no more than a PCI chipset stuck on an AGP PCB. Note that the PCI bridge clearly reports AGP as Disabled, the AGP card clearly doesn't report that it has 66 MHz or AGP Capabilities.
Vendor 8086h Intel
Device 7190h 82443BX 440BX/82443ZX
440ZX PCI-Host Bridge (AGP Enabled)
Command 0006h, Status 2210h (capabilities
list present, received master abort)
Rev. 02h, SelfTest 00h, Header 00h,
Medium Timing, Latency 40h, BusMaster
PCI Class Bridge Subclass PCI-to-HOST
Interface 00h
Address 0 is a Memory Address (anywhere
in 0-4Gb, Prefetchable) : E8000000h
Capabilities List Information :
AGP Capabilities, Version 1.0
AGP Speed(s) Supported : 1x 2x
FW Transfers Supported : No
>4Gb Address Space Supported : No
Sideband Addressing Supported : Yes
Maximum Command Queue Length : 32
bytes
AGP Speed Selected : None Selected
FW Transfers Enabled : No
>4Gb Address Space Enabled : No
AGP Enabled : No
Sideband Addressing Enabled : No
Current Command Queue Length : 1 byte
Vendor 5333h S3 Inc
Device 8904h Trio3D
Command 0007h, Status 0210h (capabilities
list present)
Rev. 01h, SelfTest 00h, Header 00h,
Medium Timing, Latency 40h, BusMaster
PCI Class Display Subclass VGA Interface
00h
Subsystem ID 89045333h 86C365 Trio3D
AGP
Subsystem Vendor 5333h S3 Inc
Address 0 is a Memory Address (anywhere
in 0-4Gb) : E0000000h
System IRQ 11, INT# A
Capabilities List Information :
Power Management Capabilities
PM Capabilities : 0221h
PM Status : 0000h
PM Bridge Extensions : 00h
PM Data Register : 00h
Vendor 1106h VIA Technologies Inc
Device 0598h VT82C598AT MVP3 System
Controller
Command 0006h, Status 0290h (capabilities
list present, capable of back-to-back transactions)
Rev. 04h, SelfTest 00h, Header 00h,
Medium Timing, Latency 10h, BusMaster
PCI Class Bridge Subclass PCI-to-HOST
Interface 00h
Address 0 is a Memory Address (anywhere
in 0-4Gb, Prefetchable) : E3000000h
Capabilities List Information :
AGP Capabilities, Version 1.0
AGP Speed(s) Supported : 1x
FW Transfers Supported : No
>4Gb Address Space Supported : No
Sideband Addressing Supported : Yes
Maximum Command Queue Length : 8 byte(s)
AGP Speed Selected : 1x
FW Transfers Enabled : No
>4Gb Address Space Enabled : No
AGP Enabled : Yes
Sideband Addressing Enabled : Yes
Current Command Queue Length : 1 byte(s)
Vendor 8086h Intel
Device 7800h Intel740 AGP Graphics
Accelerator
Command 0007h, Status 02B0h (capabilities
list present, capable of 66 MHz, capable of back-to-back transactions)
Rev. 21h, SelfTest 00h, Header 00h,
Medium Timing, Latency 00h, BusMaster
PCI Class Display Subclass VGA Interface
00h
Subsystem ID FFFF8086h Unknown
Subsystem Vendor 8086h Intel
Address 0 is a Memory Address (anywhere
in 0-4Gb, Prefetchable) : E2000000h
Address 1 is a Memory Address (anywhere
in 0-4Gb) : E1000000h
System IRQ 10, INT# A
Capabilities List Information :
AGP Capabilities, Version 1.0
AGP Speed(s) Supported : 1x 2x
FW Transfers Supported : No
>4Gb Address Space Supported : No
Sideband Addressing Supported : Yes
Maximum Command Queue Length : 32
byte(s)
AGP Speed Selected : 1x
FW Transfers Enabled : No
>4Gb Address Space Enabled : No
AGP Enabled : Yes
Sideband Addressing Enabled : Yes
Current Command Queue Length : 8 byte(s)
Power Management Capabilities
PM Capabilities : 0221h
PM Status : 0000h
PM Bridge Extensions : 00h
PM Data Register : 00h
"If I wanted PCI level performance, I'd buy a PCI card. I expect better from an AGP card. An AGP card with no AGP features: surely that is very close to deliberate deception?". Don't let yourself be caught out! Use the PCI program to check out the potential cards you have in mind. Look for the following settings on the AGP bridge and AGP card:
Hey, fellow programmers: Be sure to visit my PCI Information page to learn more about PCI programming & PCI related info!
Finally, I would like very much to hear from anyone
who has anything further to add on this discussion. In particular, I would
love to hear about cards you've tested and the results you obtained. I
may be contacted by email here.