显卡和 DirectX 简史(三)显卡发展概览

硬件技术概览

本部分主要是对A brief overview on the history of 3D graphics hardware的翻译和补充。

史前时期(CGA/EGA/VGA)

从 80 年代 PC 的崛起,到 90 年代初期,这个时期的 3D 渲染完全由 CPU 完成。尽管 90 年代初的一些显卡能渲染直线甚至多边形,它们的卖点还是「Windows 加速器」,用来加速 2D 的窗口绘制。因此,这个时期的显卡就只是一个「帧缓冲」(framebuffer),像素值完全由 CPU 来填充。

这个时期比较流行的是 IBM 制定的 CGA、EGA、VGA 等标准,还有各厂商推出的扩展 Super VGA,以及 Hercules 公司的单色显示标准。

黎明时期

在 90 年代中期,随着 3D 渲染的需求增加和 DRAM 价格的下降,许多显卡厂商都加入了 3D 加速卡的研发和竞争中。这个时期的显卡通常能加速三角形填充的内循环,即「光栅化」(rasterization),也能加速基本的纹理映射和着色。不过三角形的斜率计算(一般称为 triangle setup?)需要由 CPU 完成。

这个时期还没有统一的图形 API,很多厂商都推出了自己的专有 API,Direct3D 也仍在萌芽阶段。

D3D5 时期

这个时期的显卡除了光栅化,还支持三角形斜率计算的加速。也就是说,CPU 可以直接将屏幕空间的三角形顶点坐标传给显卡,显卡会完成三角形的绘制。

GPU 的出现(D3D7 时期)

GPU 一词是 NVIDIA 发明的,因为在 2000 年前后的显卡支持了硬件加速 T&L(transform and lighting),也就是说,CPU 可以直接将世界空间的三角形顶点坐标、变换矩阵和光照参数传给显卡,显卡会从头到尾完成三角形的绘制。因此,显卡获得了和 CPU 同等的地位。

如图是 NVIDIA 宣传硬件 T&L 的示意图,展示了 90 年代后期显卡技术的发展,逐步取代了 CPU 的功能。

可编程着色器(D3D8 时期)

到目前为止,显卡的硬件加速功能都是固定的,如果需要增加一种新的效果,就需要修改硬件。而且支持很多功能让固定管线变得异常复杂。着色器的出现,使得显卡能够支持更多的效果,而且不需要修改硬件。早期的着色器使用汇编编程。

统一着色器和 GPGPU(D3D10 时期)

除了上一篇文章已经提到的「统一着色器」,D3D10 时期还伴随着 GPGPU 的出现。GPGPU 使用 GPU 来完成通用计算,其中最具有影响力的框架就是 NVIDIA 的 CUDA,一直沿用至今。当然那是另一个故事了。

显卡发展概览

为了更好展现早期的百家争鸣,这里按照芯片厂商来分组。注意:这是一个非常简略的概览,只是为了让读者对显卡发展有一个大致的了解。还有一些我了解比较少的厂商也没有列举,欢迎补充。

3dfx

3dfx 由前 SGI 员工创立,SGI 是 OpenGL 的提出者。在 3D 加速卡的早期,3dfx Voodoo 是最具有影响力的显卡。最早的 Voodoo 1 于 1995 年底就问世了,在 1996 到 1997 年间获得了许多游戏的支持,包括 GLQuake 和古墓丽影等重量级游戏,一跃成为了 3D 加速卡的代名词。Voodoo 是仅 3D 加速的显卡,需要搭配 2D 显卡使用。Voodoo 使用专有的 Glide API,不过也有为兼容 Quake 系而提供的 MiniGL,同时也兼容 Direct3D。

Voodoo 2 于 1998 年推出,支持 2 个纹理单元和双卡 SLI,不过仍然是仅 3D 卡。接下来推出的 Voodoo Banshee 是 3dfx 第一张靠谱的 2D/3D 整合卡,但 3D 性能一般,关注度不那么高。1999 年推出的 Voodoo 3 开始都是整合卡了,性能也依然领先,不过在功能上已经落后于 NVIDIA 了,例如其只支持 16 位色和最高 256x256 的纹理大小。

由于 3dfx 后期不及预期的产品、新架构研发失败、不合时宜的收购以及来自 NVIDIA 的激烈竞争,3dfx 逐渐走向衰落。最后一代 Voodoo 4/5 于 2000 年推出,但性能不及 GeForce。最终 3dfx 最终于 2000 年底宣布破产,并被 NVIDIA 收购。

关于这段精彩的历史,详情可以参考极客湾的视频。

NVIDIA

NVIDIA 是我们今天熟知的显卡巨头,但 NVIDIA 的崛起也不是一帆风顺的。1995 年推出的 NV1 虽然包含了完整的多媒体方案,但价格较高,更不幸的是,NV1 使用四边形而不是三角形渲染,很难兼容 OpenGL 和 Direct3D,最终没什么影响力。而 NV2 更是中途放弃了。1997 年推出的基于 NV3 的 Riva 128 是 NVIDIA 第一个成功的产品,完全兼容 Direct3D,支持当时先进的 AGP 接口,而且是整合卡。性能上与 Voodoo 1 有些差距,但已经相当不错了。

1998 年到 1999 年推出的 Riva TNT/TNT2 与 Voodoo 2/3 正面竞争,虽然 TNT 不支持 SLI,但具有更多的功能,一定程度上动摇了 3dfx 的地位。不过 1999 年下半年推出的 GeForce 256 基本形成了压倒性的优势,不但在性能上大幅超越 TNT2,而且还是最早支持硬件 T&L 的显卡。GeForce 产品线也一直沿用至今。

GeForce 2 是对初代 GeForce 的改进,两者都支持 D3D7 和 T&L,但不可编程。GeForce 3/4 Ti 带来了第一代可编程着色器,对应支持 D3D8。GeForce FX 进入了 D3D9 和 SM 2 的时代,开始使用四位数命名(例如 FX 5200),不过这是比较失败的一代,不及 ATI 同期产品。GeForce 6/7 支持 SM 3。

GeForce 8 又是比较划时代的,2006 年推出的 GeForce 8800 是最早支持统一着色器和 D3D10 的显卡,同时也是第一代支持 CUDA 的产品。之前的文章已经提到过,FL 10_0 以上的显卡在今天仍然能运行很多游戏。GeForce 8/9 以及 200 系列(100 系列 OEM 专用,后面跳过的系列都是 OEM 或移动端专用)都使用 Tesla 架构,支持 FL 10_0(200 系列低端卡例如 GeForce 210 支持 FL 10_1)。

接下来,GeForce 400/500 系列开始使用 Fermi 架构,耗电高,温度也高。费米架构支持 D3D11,也是 NVIDIA 最低支持现代的 D3D12(当然是 FL 11_0)和 Vulkan 的显卡了。GeForce 600/700 系列开始使用更节能的 Kepler 架构,部分低端仍然使用费米架构,仍然支持 D3D11 和「虚假」的 D3D12。GeForce 900 系列开始使用 Maxwell 架构,包括某些 700 系列型号(例如传奇的 GTX 750 Ti),基本支持了 D3D12。

后面的 10 系、16 系、20 系、30 系以及最新的 40 系相信大家都比较熟悉了,RTX、DLSS 等词汇应该也耳熟能详,就不再赘述了。具体可以参考 Wikipedia:

https://en.wikipedia.org/wiki/List_of_Nvidia_graphics_processing_units

ATI

ATI 是传统的 2D 显卡厂商,其进军 3D 的过程也比较坎坷。早期的 Rage 系列性能并不十分突出,而且还伴随延期问题。不过 ATI 比较受 OEM 青睐,某些低端产品例如 Rage XL 在服务器上广为使用,再加上 ATI 比较擅长视频解码和采集,因此仍然能有一定的竞争力。和后期的 Voodoo 一样,ATI 也尝试了 Rage Fury MAXX 双芯显卡,但显然结果并不理想。

ATI 在 2000 年终于推出了全新的 Radeon 系列(R100),支持硬件 T&L,其 Pixel Tapestry 架构支持较为先进的 EMBM 和 DP3(实现了部分 PS 的功能),HyperZ 用于提高显存带宽效率,比初代 GeForce 要更先进一些。当然其性能不及随后发布的 GeForce 2,但也是不错的开始。Radeon 产品线也一直沿用至今,第一代 Radeon 后来被重命名为 Radeon 7000 系列。下一代 Radeon 8000 系列和部分 9000 系列(9500 前)使用 R200 核心,支持 D3D8。

接下来,Radeon 9500 以上的产品使用 R300,进入了 D3D9 和 SM 2 的时代。接下来 X 开头的命名比较复杂,但 X1000 以前仍然只支持 SM 2,X1000 系列支持 SM 3。后面就进入了 HD 纪元,ATI 与 AMD 合并,开始使用 TeraScale 架构,HD 2000/3000/4000 系列支持 FL 10_0/10_1,HD 5000/6000 以及重新包装的 HD 7000/8000 乃至 R5 200 系列还是只支持 D3D11,使用老旧的 TeraScale 架构。

HD 7700 以上使用了全新的 GCN 架构,带来了 D3D12 的支持。结果 GCN 又用了很多年,从 HD 7000/8000 到 200/300/400/500 乃至 RX Vega/Radeon VII 系列,在 APU 中则一直用到了 Ryzen 5600G/5700G。此后的 RX 5000/6000/7000 系列相信大家也比较熟悉了,分别对应 RDNA 1/2/3 代架构。

详见https://en.wikipedia.org/wiki/List_of_AMD_graphics_processing_units

S3

S3 也是传统 2D 显卡厂商,比较早涉足 3D 加速市场。不过其第一代产品 S3 Virge 系列性能很差,被戏称为「3D 减速卡」,在很多情况下还不如软件渲染,而且也有渲染错误。其专有 API S3d 也不太成功,总共只有大约 20 个游戏支持 S3d。不过 Virge 的 2D 性能还是不错的,比较受 OEM 欢迎,还是比较普及的。

接下来推出的 Savage 系列也比较一般,虽然有 S3TC 纹理压缩这样好的功能,但性能和驱动问题影响了其普及程度。Savage 2000 的 T&L 实现 S3TL 也不成功,会造成渲染错误,性能提升却不明显。后来 S3 被 VIA 收购,推出了集成显卡产品 Chrome 系列,逐渐退出了 3D 显卡市场。

Intel

Intel 在 1998 年推出其第一代 3D 加速卡 i740,希望借此普及 Pentium II 开始支持的 AGP 接口。虽然跑分比较好,但实际性能落后于当时的 Voodoo 2 和 TNT,没能取得多少成功。后来 Intel 就放弃了独立显卡市场,转而专注于集成显卡。Intel 的集显包含在主板芯片组中,性能非常一般,而且很晚才支持硬件 VS。不过在整合到 CPU 中成为核显之后,对于 D3D 的支持相对比较积极。

二代酷睿(Sandy Bridge)及以前的核显支持 D3D10,六代(Skylake)开始支持 FL 12_1(光追短期内估计不行),中间的则是 D3D11。显然 CPU 型号比独显多很多,因此读者可自行参考

https://en.wikipedia.org/wiki/List_of_Intel_graphics_processing_units

时隔 24 年,Intel 在去年推出了第一代 Arc 独显,期待能给显卡市场带来新活力。

Matrox

Matrox 主要以极高的 2D 画质著称,但更加偏向于专业市场,对于玩家不是特别友好。G200 和 G400 解决了渲染错误,但性能不及竞争者。

SiS

SiS 是台湾的芯片组厂商,但也推出了一些显卡和集显产品,中文名是矽统科技。SiS 6326 是比较有名的入门级显卡,虽然性能一般,但没有渲染错误,而且价格便宜。后来的 SiS 300 和 315 其实也不差,后者甚至支持 T&L,但驱动应该不太行。很多独显也被集成到了芯片组中。

详见https://en.wikipedia.org/wiki/Silicon_Integrated_Systems

Rendition

Rendition 也是早期的 3D 探索者,推出的 Vérité 系列非常特殊,使用 RISC 架构的处理器来加速 3D 渲染,是 D3D 开发早期的参考硬件。然而其不支持硬件 Z 缓冲,VQuake 的开发非常困难,很快被新兴的 Voodoo 盖过了。V2000 系列虽然提高了一些性能,但仍然无法令人满意。