The ATI drivers for Linux were never perfect, but they worked decently. But ATI/AMD would drop support for older chips that were still in use. The open source community never provided a shim to let these older drivers work with newer builds of X.
Does open sourcing the drivers really fix the compatibility problem? To me, not building a shim suggests a general lack of caring about ATI drivers. Do we really need the source to give a future to aging ATI/AMD chips?
As of January 19 phoronix, puts the average speed of the latest available open-source driver at roughly 70% the speed of the Catalyst driver before the pre-R600 support was discontinued in early 2009. This is using composite results from the ATI Radeon X1800XL, Radeon X1800XT, and X1950PRO graphics cards being benchmarked on Nexuiz, Warsow, OpenArena, World of Padman, and Urban Terror. These cards use the R300g driver. Newer cards using the R600g driver (cards with HD in the name) are not currently anywhere near these results.
A bit of history:
A long time ago, documents describing the specifications of graphics cards were generally available under NDA to XFree86 developers. Then Nvidia started releasing binary only drivers. ATI eventually followed suite. The last series with docs available from this era is ATI's R200. The R300 released in 2002 did not have docs released for it. Following the lack of docs, driver development stagnates.
April 6, 2004 XFree86/X.org fork.
After Keith Packard was kicked out of the XFree86 core group and XFree86 switched to non-gpl compatible license a fork ensues. Project Leadership of XFree86 had been basically hostile to developers and had retarded increases in the developer base and improvements in the graphics stack for literally years. Following the fork a renaissance in X Server development begins.
July 24, 2006 AMD acquires ATI.
Speculation about open drivers begin.
May 10, 2007 Red Hat Summit
AMD's Henri Richard says something about improving the open source drivers. Speculation becomes flood of rumors.
September 06, 2007
ATI/AMD's New Open-Source Strategy Explained
AMD announces plans to contribute specification documents and code to the open source drivers. By this time successive X.org releases have seen:
- Removal of XIE, PEX and libxml
- Window translucency, XDamage, Distributed Multihead X, XFixes, Composite
- EXA, major source code refactoring. Switch to autotools build system instead of Imake
- EXA enhancements, KDrive integrated, AIGLX
- Removal of LBX and the built-in keyboard driver, X-ACE, XCB, autoconfig improvements
- Input hotplug, output hotplug (RandR 1.2), DTrace probes, PCI domain support.
September 11, 2007
XDS2007 Program
The "softpipe" talk by Keith Whitwell of Tungsten Graphics is the earliest reference I can find to Gallium3D. References to Gallium3D show up on Tungsten Graphics website at approximately the same time according to internet archive. Apparently Tungsten Graphics released a softpipe driver (gallium driver for cpu) at this time, along with a "proof of concept" i915 driver.
September 12, 2007
AMD Releases 900+ Pages Of GPU Specs
RV630 Register Reference Guide and M56 Register Reference Guide.
January 04, 2008
AMD Releases Additional R600 GPU Programming Documentation
M76 and RS690 register guide weighing in at 458 and 422 pages respectavly. Contains LVTMA and i2c information not found in previous docs. LVTMA is the second digital output block on the ATI R500/600 series and can handle TMDS and LVDS for DVI/HDMI and LCD panels, respectively.
February 22, 2008
AMD Releases 3D Programming Documentation
300 pages. This 3D programming documentation covers the R500 series and even goes back with information on the R300/400 series as well. Document contains programming guide and register specifications. Among the areas covered in this 3D guide are the command processor, vertex shaders, fragment shaders, Hyper-Z, and the various 3D registers. Previous documents have just covered R500/600 card support with mode-setting, LVTMA, TMDS, i2c, and other basic but critical elements.
February 28, 2008
AMD Updates Its 3D Programming Guide
Covers more vertex program formats than the v1.1 draft. 4 more pages than the v1.1 draft.
March 14, 2008
AMD Releases R300 3D Register Guide
Just 99 pages long but covers registers for color buffer, fog, geometry assembly, graphics backend, rasterization, clipping, setup unit, texture, fragment shaders, vertex, and Z-Buffer.
The R300 open-source support had largely been reverse-engineered and built upon the R200 open-source support, which came from documentation ATI had released to open-source developers under Non-Disclosure Agreements several years ago. The Radeon R300 series consists of such graphics cards as the Radeon 9500, 9800, X300, X550, and X600 -- both AGP and PCI Express parts.
March 19, 2008
AMD Releases Production Microcode For All Radeon GPUs
This is the microcode found in the fglrx driver and it covers the Radeon R100 to R600 product families. This microcode dump can be found in the Mesa/DRM git tree in shared-core/radeon_cp.c. This file is made up of the microcode (arrays made up of hex) for the R100, R200, R300, R420, RS600, RS690, R520, R600, RV610, and RV620. Microcode is low-level instructions for the graphics processor.
April 01, 2008
AMD Releases Revised R500 Document
Version 1.3 includes expanded coverage of the Command Processor (CP) found on the R500 graphics processors.
June 11, 2008
AMD Releases R600 GPU Documentation
This ISA (Instruction Set Architecture) documentation covers the unified shader block found on the Radeon HD 2000/3000 series and newer. This PDF document is 342 pages long and does go into detail surrounding R600 vertex and geometry shaders.
July 25, 2008
AMD Releases New AtomBIOS Parser
New AtomBIOS Parser should be small and clean enough to go into the kernel for kernel modesetting. Not going to replace parser in X. That would be work for no gain.
December 29, 2008
AMD Releases Open-Source R600/700 3D Code
Code drop. Documentation was to be released as well, but wasn't fully sanitized before holidays. Code includes a working DRM, working EXA acceleration, an initial X-Video implementation and the working r600_demo program. This code covers R600 and R700 series.
January 26, 2009
AMD Releases R600/700 3D Documentation
The R600 3D register guide is 166 pages long and covers R600 shader instructions, R700 shader instructions, shader textures, and various other registers needed to program a 3D graphics driver.
March 29, 2009
AMD Releases R700 Instruction Set Architecture
In this new R700 ISA documentation is 392 pages worth of information on various topics, particularly about the Stream processing abilities of the R700 family.
April 18, 2009
AMD Pushes Out New R600/700 3D Code
This code will allow open-source 3D acceleration on the Radeon HD 2000, 3000, and 4000 series of graphics cards.
May 07, 2009
AMD Releases R600/700 Programming Guide
This 43 page document, that is entitled "Radeon R6xx/R7xx Acceleration", provides a basic overview of the ASIC architecture and a small programming guide. This document also covers the packet definitions and information concerning synchronization and cache flushing for these newest graphics processors. Explained in detail is the second generation Superscalar Unified Shader Architecture, technical changes between the R600 and R670, technical changes between the R670 and R700 series, the R600/700 3D pipeline, and various other topics that excite graphics driver developers.
November 09, 2009
ATI R300 Gallium3D DRI Support Is "Done"
The DRI state tracker report now states "done". First R300 Gallium3d component to reach complete status. R600g driver still considered extremely early in development.
December 22, 2009
AMD Publishes Evergreen Shader Documents
362 pages. A shader instruction set documentation for the R800 "Evergreen" graphics processors. Titled "Evergreen Family Instruction Set Architecture - Instructions and Microcode."
February 01, 2010
Open-Source ATI Evergreen Support Arrives
User-space mode-setting support for the Radeon HD 5000 series GPUs. No 3d or even 2d acceleration. No kernel mode setting.
February 09, 2010
There's Evergreen KMS Support & More To Test
Includes new I2C code that supports the hardware I2C engines found on Radeon graphics cards and exposes it to user-space, a PLL algorithm rework, DRM power management support, basic Evergreen "R800" KMS support, and various other fixes and new additions. Still no 3d or even 2d acceleration.
April 08, 2010
Open-Source ATI Evergreen Acceleration Builds Up
New kernel DRM code that adds support for the command processor, interrupts, and graphics initialization on the Evergreen ASICs. New microcode. Support for power tables. Still no 3d or even 2d acceleration, but the foundation for acceleration is now laid down.
July 22, 2010
Intel's Preparing To Push Its New GLSL Compiler Into Mesa
New GL shading language compiler for Mesa dubbed "GLSL2"
August 17, 2010
Intel's GLSL2 Branch Is Merged To Mesa Master
Goal is to support current and future versions of the GL Shading Language required for OpenGL 3.x/4.x support. Current goal is GLSL 1.3 support. Also faster than previous driver and addresses tons of bugs. This compiler will be used by all drivers not just intel. Adds 85,000 lines to Mesa code-base.
August 20, 2010
Open-Source 2D, 3D For ATI Radeon HD 5000 Series GPUs
2D EXA, X-Video, and OpenGL acceleration. 332 days after the first Evergreen graphics cards were released, the public finally has the first open-source hardware-acceleration support for ATI Radeon HD 5400/5500/5600/5700/5800/5900 series ASICs. This commit ends up adding over 12,000 lines of code to the R600 DRI driver. It may be close to the same speed and feature parity as the drivers that support earlier product generations -- even the previous-generation Radeon HD 4000 series that has quite decent open-source 3D support within its classic Mesa driver. First-run opengl driver. Following this, the Evergreen register documentation that is released to the public will also be updated and released. 332 days may seem like a long time between product release and 2d/3d acceleration support but it is actually a record low. Roughly ~31 months from launch to GL2 for 6xx, ~19 months for 7xx, less than 12 months for Evergreen. New ASICs should see a lower time until 2d/3d acceleration support.
November 22, 2010
Open-Source AMD Fusion Driver For Ontario Released
This initial open-source support should be at around the same level of support and capabilities as where the open-source Radeon HD 5000 "Evergreen" support is at right now. This includes user-space mode-setting, kernel mode-setting, 2D EXA, X-Video, and 3D/OpenGL support. This support comes nearly at time of product release.
Since 2007 the radeon driver has seen the switch from the memory manager being in X to being in the kernel "GEM and/or TTM", the switch from User Mode Setting to Kernel Mode Setting, the switch from the "classic" mesa to "gallium" mesa, and the switch from DRI to DRI2. The R300g and R600g drivers that have all these changes in them have not really hit distros yet. Distro's have been shipping the R300c and R600c drivers which have some of these changes. The R300g is now more or less at feature-parity with the R300c and has better performance and should be hitting distros soon. As stated at the beginning of this post it is now running at ~70% the speed of the catalysts driver before the pre-R600 support was discontinued in early 2009. The R600g development lags behind the older, more mature R300g. The R600g only became capable of running glxgears in July 2010 is now more or less at feature-parity with the R600c. All development is now focused on the R300g/R600g drivers. Over the past 3.5 years almost all the re-archtechturing groundwork for radeon in Mesa/X/Drm/Dri is complete and specifications for the R400, R500, R600, R700, and Evergreen have been released and support for them incorporated into the drivers. Developers have been focused on implementing things correctly and only now are they beginning to do optimization work and see the payoff for the previous 3.5 years of work.
The remaining archtechture groundwork is to see Mesa's OpenGL support go from 2.1 to 3.0 to 3.1 to 3.2 to 3.3 to 4.0 to 4.1. A majority of the various GL extentions for 3.0, 3.1, 3.2, and 3.3 are done. The gl shader compiler on the other hand is going to need a ton of work. The number of intermediate representations to get from shader program to actual byte code running on the gpu is fairly large and glsl 1.3 is not yet supported.