The Open-Source ATI Driver Is Becoming A Lot Faster
Now that the kernel mode-setting page-flipping for the ATI Radeon DRM kernel module has been merged into the Linux 2.6.38 kernel and the respective bits have been set in the xf86-video-ati DDX, we're in the process of running new open-source ATI graphics benchmarks under Linux. Our initial results (included in this article) show these latest improvements to cause some major performance boosts for the open-source ATI driver as it nears the level of performance of the proprietary Catalyst driver.
Just earlier this month we put out a big ATI Linux driver comparison including the Catalyst Linux driver, the open-source classic Mesa ATI driver, and the open-source Gallium3D ATI driver. These results on the newer generations of ATI Radeon HD graphics processors showed that the Gallium3D drivers are becoming faster than their open-source predecessors (the classic Mesa option), but that there is still room for much improvement to bring it up to performance parity with the proprietary Catalyst driver from AMD. As no R500-generation products were tested in that comparison, since AMD dropped support for the R300 through R500 ASICs after their Catalyst 9.3 driver release in early 2009, which is no longer compatible with modern Linux kernel and X.Org Server releases, we started out this Linux 2.6.38 kernel testing with these older graphics processors.
To first recap though, the major Radeon DRM change to be found in the Linux 2.6.38 kernel is KMS page-flipping support. Simply put, page-flipping is designed to allow for tear-free screen updating and noticeable performance improvements due to the pointer between the front and back buffers simply being flipped rather than copying the data between the two screen buffers. Page-flipping with the 2.6.38 Radeon DRM and xf86-video-ati (currently in Git, to be found in v6.14.0) across all Radeon GPUs with kernel mode-setting, while it's already been supported in the Intel driver since the page-flipping ioctl was introduced in the Linux kernel (circa Linux 2.6.32) and recently within the Nouveau driver too for open-source NVIDIA support, but that's currently limited to pre-NV50 hardware.
The Linux 2.6.38 kernel DRM for the Radeon hardware also provides proper PCI Express 2.0 support, which may provide some speed optimizations but at this point they would be next to minimal since there are more extreme bottlenecks elsewhere in the open-source Linux graphics stack and would be more noticeable with OpenCL/GPGPU workloads but that is not supported yet in the open-source drivers. This Direct Rendering Manager code also has open-source support for the AMD Radeon HD 6000 series (Northern Islands; non-Cayman) GPUs as well as for the Fusion Ontario GPUs.
Within the xf86-video-ati X.Org driver update that merges the kms-pflip branch there is also micro (1D) color tiling support for the R600 GPUs and newer (there's 2D macro tiling support already for the R500 ASICs and earlier) and the driver update also enables swap buffers wait by default for glXSwapBuffers and glXCopySubBufferMESA. The swap buffers wait work is another step to avoid screen tearing by making sure the display scan-line is outside of the given area before a copy swap occurs, but if disabled there is no scan-line synchronization. While tearing is avoiding, this obviously comes at a performance cost but can be toggled using the SwapbuffersWait xorg.conf option.