什么是图形加速卡(三)
原文:http://www.azillionmonkeys.com/qed/accelerator.html
作者:Paul Hsieh
-潘宏 译
-2013年2月
-email: popyy@netease.com
-weibo.com/panhong101
(译注:本文写于2000年左右,很多内容稍显过时。但作为理解GPU发展的历史性、技术性材料,本文真是不可多得)
硬件特性和主机模拟
现阶段显卡市场受三个因素影响:价格,对游戏的支持度,以及Benchmark评分。早期PC平台上的图形加速还只局限于2D(伴随着1989年IBM 8514显示标准问世)。但随着DirectDraw、Direct3D(最早叫3DDI)的出现,以及支持3D加速游戏(雷神之锤)的发展,3D显卡开始领军。
别看显卡厂商2D玩得转,面对3D可就为了难。不仅渲染需求复杂一大截,输出模式也增加不少。但幸运的是,对于PC供应商,前段时间以来(大概从1994年开始),大量SGI的3D加速领域专家,已开始由于SGI对PC市场的漠视态度而表现出强烈的不满(同时也对SGI要购买Cray超级计算机的疯狂想法不满)。再加上诸多高端图形公司(比如Kubota,ShowGraphics,以及Convex)先后倒闭,相关人才市场又开始活跃起来。
有的公司(ATI,nVidia,3DFX,Chromatic Research,Rendition)抓住了这个时机,开始招兵买马,攻城夺地,在整个图形市场掀起了一场3D大战。而另一些公司(比如Cirrus,TSENG以及Trident)则损失惨重,失败出局。
总之,很多早期的3D基本问题现今都得到了解决并产品化。下面这个次序不分先后的列表向你展示了3D行业的血泪史:
现在消费者都追捧nVidia RIVA 128这样的显卡。它完美支持D3D API,没多余特性,而对于微软的图形要求又毫不含糊。OpenGL仍是二等公民,但越来越多的显卡厂商开始采用它来支持Quake,这让微软也不得不给它留有余地(这是一个重要参考信息)。
基本上,支持透视矫正纹理映射就可以称为一块3D显卡。然而,显卡所支持的特性却越来越丰富,这主要由于厂商竞争加剧,以及大量的软件图形需求,包括:内建三角形装配,mipmap,雾化,双线性、三线性以及各向异性纹理过滤,alpha混合,(边缘)抗锯齿,图像点画/抖动,纹理压缩以及多重纹理。
这些特性在SGI架构下经常被分成一个大的3D流水线的不同阶段。流水线大致如下所示:
我同一些硬件专家进行过讨论,追求3D流水线的最高性能,其实可以归结为“靠门电路解决问题”。举个例子来说,某些特定阶段有必要多周期化(Multicycle),比如透视矫正除法。但是一个除法(或者其近似)可以通过完全流水线化的单独时钟周期来完成。所以除法阶段可以转换成多个部分的除法周期。这虽增加了等待延迟(Latency)但允许吞吐量增加到每时钟周期一个像素。
为了超越每周期一个像素的吞吐量,可以用多条流水线在每个周期计算多个像素。最简单直接的办法就是并行地计算和该像素邻接的一堆像素。这也是nVidia的TNT所使用的方法。然而有些厂商(3DFX)则采取了扫描线交错方式。该方法实际上更简单,因为它可以被分解到多个处理器中(对于后面的内存带宽分解来说也方便一些),但这种方式对于硬件的使用并非高效,因为并非所有阶段都可以被重复,或需要被重复。也就是说很多重复的门电路应该可以重新排布以提高性能。3DFX经常将其标榜为保持“扩展性”的绝佳方案,因为这是一个提高3D性能的快速方案,而不是等待公司重新设计一个架构。(这也是为什么Voodoo架构代替了RIVA成为领头羊,直到遭遇TNT架构。)
三角形装配在输出到扫描线之前,需要花费几个周期进行预计算(排序、增量计算、边界设定)。所以,很容易将其并行化,以很高的速率进行扫描线输出,并将结果缓冲到扫描线队列中。通过这种方式,前面被输出到相应扫描线的三角形就可以被后面输出到这些扫描线的三角形在必要时自然地覆盖掉。这种缓冲方式也可用于补偿未被缓存的纹理源初始访问开销。
最后一个方法,也就是粗暴地增加一个更大的纹理缓存,这只不过是“靠门电路解决问题”的另一个更贴切的例子。其实这也就是门电路数量如此简单的事儿。
硬件端不支持某个渲染特性,经常意味着软件端会在无该特性下继续运行,当然质量会降低一些。来自微软、图形厂商以及软件开发商三方的合力将会提高硬件特性的标准,并让传统桌面PC纳入到图形工作站市场。
像MPACT媒体处理器或者Rendition Verite这样的可编程架构,在产品定型后仍允许在软件中加入一些特性。可惜的是,由于市场并未大量接受这样的产品,这样的产品灵活性也并未被实现。
更新(译注:本文跨越多年,作者不断对其补充更新):ATI已经增加了多个MPEG加速组件(动态补偿以及IDCT)。nVidia已经增加了蜡板缓冲(译注:或模板缓冲,Stencil Buffer)(一种低成本的基于OpenGL的方法,以用于实现阴影或其他类型的投影)。Matrox增加了凹凸贴图。3DFX以及BitBoys将增加积累缓冲以应付抗锯齿(3DFX管它叫T-Buffer)。ATI、3DFX以及Matrox已经加入TV信号接收能力。高端市场中,3DLabs增加了板载的变换与光照处理(T&L)硬件。这些近期的硬件特性,极具代表性地体现了图形市场的不断创新精神。如3DFX的多重纹理特性所体现出地,所有这些硬件特性终归会被所有厂商所支持。
更新:nVidia和ATI增加了T&L,以及复杂的像素着色器,以支持逐像素凹凸映射以及光照效果。3DFX的T-Buffer已经出了,幸运地受到了好评(特别是对比其竞争对手们通过软件实现的该特性)。但我们还没有看到Matrox的任何动作。