可缩放的高性能3D图形显示
技术领域
本发明涉及计算机图形领域,尤其涉及3d图形硬件加速器。
背景技术
大多数传统的通用计算机具有一些形式的硬件子系统,这些子系统能够将计算机内存储或计算的信息与一些形式的物理图像显示设备结合,作为对用户的交互可视反馈。十年以前,这些与计算机相连接的物理图像显示设备和特殊的电子设备是非常原始的,例如,闪烁的显示设备(blinking lights)、老式显示屏(“glass ttys”)或者示波器,随着时间的过去,技术更加完善了,用于驱动物理图像显示设备的硬件子系统或者图形系统已十分复杂了,尤其是凭借自身实力的计算系统。实际上,许多用于建立常规图形系统的现有的“图形芯片”比通用计算机中功能强大的单个芯片cpu包含更多的晶体管。
特别是,图形系统不只是将主机连接至物理图像显示设备。它还从主机中卸下了越来越多的渲染操作,包括2d渲染和3d渲染。用于特殊任务的硬件加速器通常比在通用计算机中完全用软件执行相同的任务具有性能和/价格优势。这当然是假定在许多市场区域中存在充分的对于频繁地执行特殊任务(即需要2d和3d计算机图形的情形)的用户需求,包括工业市场和家庭娱乐用户。
早期的图形系统只能进行简单的工作,绘制2d线条或文字,更先进的高性能图形系统能够担负从主机高水平表现三维物体,并执行大量的近似计算模拟的工作,模拟真实世界中的光子如何点亮物体组,以及这些物体的图像如何在物理摄像机或物理人眼的图像平面中形成。换言之,现代图形系统能够执行3d渲染。因此,与其用通用术语“图形系统”,不如将它们称为“3d图形硬件加速器”。最终的人造“图像平面”成为从3d图形硬件加速器向各种物理图像显示设备发送的用于由用户观看的视频输出信号。这些物理图像显示设备包括(但不限于):直观式crt、直观式lcd面板、直观式等离子面板、直观式电场发光显示器、基于led的显示器、基于crt的放映机、基于lcd的放映机、基于lcos的放映机、基于dmd的放映机、基于激光的放映机以及头盔显示器(hmd)。
功能越来越强的3d图形硬件加速器的最近的发展步调刺激了连续发展新的结构概念以建立3d图形硬件加速器的需要,3d图形硬件加速器能够产生大量比用以前的结构概念所能产生的图像更丰富的3d物体的图像。当基于功能更强的半导体芯片的新构件将得到使用时(即便在几年以后),用于建立最高性能3d图形硬件加速器的结构概念可能将不再适用。同时,假设开发不同芯片的成本也在增加,那么也期望得到具有高缩放性的3d图形硬件加速器结构,也就是说,即允许从同样小的芯片组构造在许多不同的价格/性能点的宽范围的商业可行产品。
特别是极其期望两个特性在下一个十年中支持高性能3d图形硬件加速器的价值,这两个特性是完全可编程光影和高质量抗混淆。高质量抗混淆通过减少或消除大多数现有的3d图形硬件加速器都会产生的所谓的“锯齿”产生更逼真的视觉图像。为了达到这种高质量,3d图形硬件加速器必须能够支持更复杂的帧缓冲器,在帧缓冲器中必须为正在渲染的图像中的每一个像素保持大量的样本。在某种程度上,这种结构也必须支持在产生视频输出信号之前对这些样本的有效的抗混淆滤波。
大多数用于实时交互的常规3d图形硬件加速器,要么不能提供对每个像素保持多个样本的支持,要么只能支持非常有限的样本密度,例如2个或4个,偶尔达到8个。这些系统在视频输出信号产生过程中也仅能支持对这些样本的极其有限形式的抗混淆滤波。例如,通常抗混淆滤波仅限于一个像素一个像素的箱式滤波。对于将来的系统,将极有利地支持每像素16个样本,和每像素32、48或者甚至64个样本,或者在高级情形下更高。这些样本密度必须不仅支持低分辨率视频信号格式,例如ntsc,还要支持高清晰度格式,例如hdtv和2百万像素计算机视频信号格式。期望信号处理支持至少四乘四像素的具有负半周(negative lobes)的三次方滤波抗混淆滤波,和在高级情形中更大面积的抗混淆滤波,例如,8×8像素或更高。
可编程光影是为十年使用的借助于3d软件渲染系统的技术,通用计算机每次工作几个小时或几天以产生单个最终渲染的图像。这些是产生最逼真的3d计算机图形图像的系统,而且这些图像的用处现在是在许多电影的特效创作中所必需的。观点是当大量所谓的“图形管线”已经确定了不能更改的功能时,再管线中特定的“关键”点具有对于应用要使用的特殊图形算法的选项。这支持最终渲染图像中更逼真的效果。例如,对于警察、消防队员和医护人员的事故训练,在训练场景中精确模拟降低紧急事件工作人员的可视度的烟和灰尘的效果,它可能是非常重要的。可编程光影已经作为自定义3d图形硬件加速器的视觉输出的好技术而显露出来。
用于实时交互的常规3d图形硬件加速器仅仅开始提供对可编程光影的非常有限的支持。目前市场上最复杂的3d图形硬件加速器芯片在图形管线,像素着色器中最重要的点仅能支持八个指令步,而且不允许任何条件指令步。这对于向最终用户提供他们想要的灵活性和质量都是不够的。对于将来的系统,极其期望能够支持多得多的指令步,例如,几百到几千指令步,以及条件指令步。
在常规低端3d图形硬件加速器中,例如,那些主要是针对用户家庭游戏市场的,系统结构的指令集(issues)是通过将3d图形硬件加速器的大多数指令限制在单个芯片中简化了的。在一个芯片内,总线和带宽的指令集不如芯片之间的指令集重要,而且所用的全部算法保持简单。结果,已经可能以用户市场价格建立功能适当强的系统,尽管仅限制在单个低成本芯片的处理能力。
在中等范围和高端3d图形硬件加速器中,例如,那些针对汽车和飞机设计、医疗显像、石化产品显像、普通科学显像、飞行模拟和训练、数字内容创作(动画和电影编辑)、视频广播等专业市场的,只能通过建立更复杂的3d图形硬件加速器来满足用户的需求,这比单芯片更适合。例如,它们必须使用共同在一个系统内的大量芯片的计算能力。这个市场的几乎全部系统都需要建立大量不同的自定义芯片类型,并通常使用多个不同的自定义互连或总线以将这些芯片连接在一起从而建立功能系统。建立这些多互连或总线是昂贵的,不仅是因为芯片包上日益增多的针脚的成本和印刷电路板上导线和连接点的成本,还因为几个不同的自定义工艺的互连总线协议的设计和测试成本。在正常操作条件下,这些互连或总线中只有少数是运行在峰值速率下的;其他的总线是在使用以下的。因此,这些互连或总线的全部总计带宽的许多是曾经极少使用的,并潜在地代表浪费的产品工程和/或产品成本。
由于市场上大多数是用于3d视频游戏应用的,目前的低端3d图形硬件加速器市场是非常受价格驱动的。这些3d图形硬件加速器要么是以低于$500PC的插卡出售,要么是作为低于$400游戏操纵台的主要部分。为了实现由这些价格点所暗示的低部分价格,这些市场的大多数3d图形硬件加速器结构由单个图形加速器asic构成,在其上附加有少量的dram芯片。其他的芯片(如果存在)是通用处理器或音频加速芯片,并且不直接连接包含帧缓冲器和纹理存储器的dram芯片。假设能够加到asic的针脚的数目限制在这个价格范围内,这些基于asic的单图形加速器系统的3d渲染性能的最好情形如前所述是受到约束的,这种约束是由对于3d渲染有多大带宽是可用的限制造成的,而且所用的dram芯片的带宽不多于加到asic的针脚的数目。在这些系统中,同样的附加dram用于2d纹理、渲染像素(或样本)和提取像素以通过在相同图形加速器asic上的分离的模拟和/或数字视频输出接口针脚产生视频输出信号。
目前中等范围的3d图形加速器市场仍然是有些价格敏感的,但也是更加特性和性能敏感的。对于专业PC或工作站的3d图形硬件加速器插卡的价格是在$1800到$6000的范围。为了达到更高的性能,这些3d图形硬件加速器的的结构通常将用于存储2d和3d纹理的dram芯片组从专门包含帧缓冲器的dram芯片组分开。由于对用于存储2d和3d纹理的dram和单个3d渲染asic之间的图形运算的可用带宽大小的限制,在中等范围中普遍复制3d渲染asic和附属dram的整个子系统。如果该子系统被复制n次,那么对纹理的和来自纹理的n倍的更大带宽需要用于渲染。这里,很显然,为了获得更高的性能,接受了更高价格的折中。对帧缓冲器本身的和来自其中的带宽还可能需要高于加到单个asic上的针脚所支持的带宽。已经发展了跨几个asic分配帧缓冲器的几项技术,所以不需要只用一个asic对和从帧缓冲器支持比总带宽的一小部分更多的带宽。已经发展了各种复杂的技术以制造这样的多重asic和存储子系统,它们共同工作以加速3d渲染,而且在这里不能全面详细地覆盖所有这些技术。重要的一点是这些结构全都是由跨多个asic和dram局部存储子系统的3d渲染算法的带宽消耗的需要所驱动的。产生的系统通常需要设计和制造几个不同的昂贵的asic。这些系统还通常只产生一种产品配置,典型的是,不可能使用同样的asic(没有任何变化)和构造更复杂但更快的产品,或者更慢但造价较低的产品。
目前高端的3d图形硬件加速器市场是更加由性能和特性驱动的,而非由价格驱动。对于功能最强大的3d图形硬件加速器,其价格范围可能从$6000(中等范围的最高价)到几十万美元。高端系统的结构与中等范围系统的结构相关。并行应用更多的asic和dram这些相同的技术被使用,但使用更极端的方式。假设存在相似性,这里不需要再更详细地清楚描述现有的高端系统。
在3d图形方面仍然需要提高性能的许多方法,期望的渲染帧速率最好为76Hz,期望的分辨率最好为1920×1200,深度复杂性在超过6之后就仅在缓慢提高,样本密度也同样在16上停止了增长。这意味着像素填充率在超过十亿像素每秒后就只是缓慢增长(样本填充率为160亿样本每秒)。所以可缩放的图形结构可以将像素填充率看作常数,而不是其他可衡量的东西。
另外,不能以6X视频输出信号视频格式像素速率的像素填充率写入和以相同的6X速率读出的帧缓冲存储器仍然不能用作存储器,它不能用于纹理存储器。应用程序希望所有类型的纹理在渲染中都是可以立即使用的,但是在任何给定的帧上实际只存取纹理的一个小的子集。所以如果高端结构能够与低端结构一样进行处理,例如,布置为在相同的存储体上同时具有纹理存储器和帧缓冲存储器,那么dram就能有效地利用。
发明内容
在一个实施例中,在现有技术中为两个、三个或四个或更多的不同的芯片至芯片专用数据互连,被合并到单个高速环形拓扑。为了实现这种合并,图形任务中的一些必须以跟它们在常规系统中有些微不同但功能齐全的方式进行分配。
在一个实施例中,需要两种基础芯片类型:“绘图”芯片环路绘制(LoopDraw)和“接口”芯片环路接口(LoopInterface)。这些芯片中的每一个有一组支持相同高速点对点单向输入和输出环形互连接口的针脚:环路链接(LoopLink)。环路绘制芯片使用附加的针脚以连接至几个标准的存储器(例如dram),这几个存储器形成高带宽局部存储器子系统。环路接口芯片使用附加的针脚以支持高速主机主接口、至少一个视频输出接口、并且可能还有到其他环路接口芯片(一个或多个)的附加的非局部互连。
用于帧缓冲器的存储器被跨环路绘制芯片分配;连接至每个环路绘制芯片的局部存储器子系统具有用于在特定二维隔行像素内所有样本的存储器。纹理贴图存储器优选地是在每个环路绘制的局部存储器子系统中复制。在一个实施例中,为了形成功能系统,至少一个环路接口芯片和至少四个环路绘制芯片经它们的环路链接接口连接在一起以形成简单的环。不同类型的环路(Loop)包能够绕这个环从芯片到芯片流经多个环路链接,直到满足终止条件。
图形驱动命令从主机经主接口到达环路接口芯片,该芯片自己使用到达的命令,或者将命令处理和转换为环路包放入环中。一些命令沿着环被发送至大多数的环路绘制芯片。其他的命令被发送至在环内的环路绘制芯片的特定子集。选择该子集的一种方式是经负载平衡机制,该平衡机制由环路接口芯片执行以平滑不同环路绘制芯片之间的处理。
当环路包进入环路绘制芯片时,它确定是不是该环路包的目的地(可能有其他的目的地),以及是不是已经满足该环路包的传输终止条件。如果没有满足终止条件,该该环路包就被转发出这个环路绘制芯片,否则它将不被转发。如果环路绘制芯片是该环路包的目的地,该环路绘制芯片就对该环路包数据应用适当的处理。这种处理可能产生需要发送至(分配的)帧缓冲器的像素和其他数据。如果这样,对于产生的每个像素,该环路绘制芯片就沿着环发送出绘制像素(DrawPixel)环路包。当环路绘制芯片接收到它想要的绘制像素环路包时,它取出绘制像素环路包中的像素数据并检查以确定它的局部存储子系统中合适像素的样本中的哪些(如果任何)也是在几何图形基元的边界之内的,通过图形管线的语义更新样本值。在不同的实施例中,这些测试可能包括以下测试的组合:对于包含在当前正在渲染的几何图形基元的边界内的测试、已经在帧缓冲器中的样本的z值相对于为像素中样本计算的或通过的z值的测试、帧缓冲器模板平面的测试、不同像素混合模式的测试,等等。
全屏幕抗混淆的特性优选地是通过在包含分配的帧缓冲器的环路绘制芯片中分配滤波功能来实现。为了开始视频流,环路接口芯片发送空的视频像素(VideoPixel)环路包到环路绘制芯片的环中。每个环路绘制芯片在视频像素环路包内轮流添加它拥有的样本的抗混淆作用至流动的总和。当视频像素环路包从最后的环路绘制芯片显露出来,然后进入环路接口芯片时,该流动的总和现在就包含了已完成滤波的像素部分,而且经过规范化和可选的伽马校正后,像素流作为在用于传输和在物理图像显示设备上显示的视频信号格式的视频输出信号中的最终渲染的图像从环路接口芯片的视频输出接口显露出来。
新的环路拓扑具有几种其他优点。一个是高性能图形系统现在现在能够从仅仅两个自定义芯片类型来构造。着将设计和制造自定义芯片的成本和风险最小化了。另一个优点是环路互连好衡量。能够从同样两个基本芯片类型的许多不同数量和组合来构造在不同价位和性能点的商业可行产品。
新的结构内在地提供对通用可编程光影的高速支持,以及非常高质量的抗混淆。可编程光影和抗混淆能力都由系统中的环路绘制芯片数量衡量。因此,使用更多环路绘制芯片的图形系统配置获得了功能更强大的可编程光影支持和更高的抗混淆能力。这两种计算上费力的任务跨大量(相同的)芯片被充分有效的分配,与从相同的芯片技术代构造的单芯片图形系统结构可能采用的相比,差不多允许更多数量更专用的硅支持这些重要的功能。
图形系统、帧缓冲存储器、纹理记忆存储器和显示列表存储器的不同的存储器需要合并成一个分布式存储器系统使得内在带宽以及廉价标准(例如commodity dram)存储芯片得到了有效的使用。高速环路链接互连意味着不仅纹理和显示列表的(潜在复制的)局部工作拷贝能够有效地在这些存储器中传输和存储,而且下一个等级的存储器体系非复制纹理和显示列表能够利用分布式存储的优势,并且对于当需要时快速有效拷贝工作记忆至复制存储器是容易得到的。
在一个实施例中,环路绘制芯片和与它连接的局部dram能够作为简单的子插件卡构造。然后通过将几个不同的简单母板之一与这些相同的子插件板的多个实例组装,高性能图形系统产品的范围将是容易构造的。印刷电路板的这种因子分解减少了设计成本、制造成本、制造测试成本以及存货和备件成本,并且还能简化系统维修和升级。
附图说明
图1显示具有基本环路结构互连的实施例。
图2显示环路结构的实施例的详细情况,包括包含环路绘制芯片和多个环路接口芯片的配置。
图3显示从环路接口芯片到可能的目的环路绘制芯片的单播图形命令的最长和最短路径。
图4显示从环路绘制芯片到可能的目的环路绘制芯片的绘制像素环路包的最长和最短路径。
图5显示来自特定的环路接口芯片的所有视频像素循环包用于抗混淆和产生到视频输出接口的视频输出信号所走的路径。
图6显示由特定环路绘制芯片所拥有的16个环路绘制芯片系统中的所有像素。
图7显示所有十六个视频像素环路包,其4x4卷积窗口要求包括对来自图6的环路绘制芯片的一个特定像素的处理。
图8显示六个环路绘制芯片布置的例子。
图9显示六个环路绘制芯片印刷电路子插件板布置的例子。
图10显示在边缘布置的印刷电路子插件板的例子。
图11显示在边缘“V”形布置的印刷电路子插件板的例子。
图12显示在边缘布置上放射状的印刷电路子插件板的例子。
图13(a)和图13(b)显示用于翻转的背对背环路链接连接的芯片封装的底侧和顶侧上接点的定位。
图14显示单环结构的例子。
图15显示双环结构的例子。
图16(a)-16(k)显示不同的捷径连接和形成相同连接的不同方式。
图17是图16(i)作为双简单环的重新绘图。
图18(a)显示三个环逻辑模式。
图18(b)显示一个环物理模式。
具体实施方式
A.概述
通用计算机
示出和论述了通用计算机的一个实施例。通用计算机是包含一个或多个通用处理器元件、附加主存储器和一个或多个外部输入/输出(I/O)处理器的完整系统。这些外部输入/输出处理器依次连接一个或多个外部输入/输出设备。通用计算机能够运行宽范围的程序,执行宽范围的功能。它没有最优化为执行任何窄范围的特定功能而损害其他功能的性能。
通用处理器元件
通用处理器元件是通用计算机的计算心脏。通用处理器元件通常不包含任何外部输入/输出设备或主存储器,尽管它可能包含大量的高速缓冲存储器(cache memory)。通用处理器元件(当为通用计算机的部分时)能够运行宽范围的程序,执行宽范围的功能。通用处理器元件没有最优化为执行任何窄范围的特定功能而损害大量其他功能的性能。另一个对于本发明来说具有类似意义的通用术语是中央处理器单元或cpu。
技术始终持续的发展不断地改变我们如何解释术语。许多年以前,将整个通用处理器元件装配在单个芯片中是不可能的。后来,仅仅是不可能将高性能通用处理器元件装配在单个芯片中。现在即使这种限制也不再存在了。现在,将一个以上的通用处理器元件装配在单个芯片中都是可能的。很快,技术将使得一个单独通用处理器元件同时运行多个“线程”成为可能,从而看起来像是多个通用处理器元件。这些概念的进一步明确的详细阐释对于描述本发明是不需要的。
主存储器
术语主存储器指存放在通用计算机中的普通存储器。
高速缓冲存储器
术语高速缓冲存储器指存放在通用计算机内的特殊的高速存储器,通常(但不总是)每个通用处理器元件或通用处理器元件的小子群具有它们自己的高速缓冲存储器。
外部输入/输出处理器
外部输入/输出处理器的一个例子是设计用于与外部输入/输出设备通信的硬件子系统。因此,外部输入/输出处理器充当通用计算机的其他部分与外部输入/输出设备之间的接口。在最简单的情况下,外部输入/输出处理器可能只是向和/或从通用计算机的其他部分和外部输入/输出设备传递数据,不作任何改变。在更复杂的情况下,外部输入/输出处理器是专用硬件加速器,当数据向和/或从通用计算机的其他部分和外部输入/输出设备传递时,能够对数据执行复杂的计算。在文献资料中,外部输入/输出处理器有时还指外部输入/输出控制器或外部输入/输出设备控制器。由于现在几乎所有这些设备自身都包含功能强大的计算系统,所以在本发明的说明书中,更具描述性的术语外部输入/输出处理器被用来指这些设备。
外部输入/输出处理器的例子包括能够与通用计算机系统的其他部分转换交互,以在大量标准和自定义计算机接口的任何接口上进行适当格式的通信的设备。这些接口包括(但不限于):scsi、ultra scsi、ata、ata2、ide、rs232、rs422、10BaseT ethernet、100BaseT ethernet、1000BaseT ethernet、usb、usb2、蓝牙(bluethooth)、火警线(Firewire)、Fiberchannel、Infiband、模拟和数字音频格式、模拟视频信号视频信号格式和数字视频信号视频信号格式。
本发明具体涉及是专用硬件加速器的外部输入/输出处理器,这些加速器使用模拟和数字视频信号格式以连接至物理图像显示设备种类的外部输入/输出处理器。
外部输入/输出设备
存在外部输入/输出设备的许多不同种类的实施例,它们能够经外部输入/输出处理器连接进通用计算机中。
一类外部输入/输出设备是存储设备。这一类的设备包括(但不限于):硬盘驱动器、软盘驱动器、只读光盘(cdrom)驱动器、随机光盘(cdram)驱动器、数字视频光盘只读(dvdrom)驱动器、数字视频光盘随机(dvdram)驱动器、可移动磁带存储器和可移动磁盘驱动器存储器。
另一类外部输入/输出设备是网络和网络设备。这一类的设备包括(但不限于):网络路由器、网桥、网络防火墙以及网络本身。
另一类外部输入/输出设备是用户接口设备。这一类的设备包括(但不限于):灯(light)、开关、键盘、鼠标、写字板(tablet)、游戏杆、光笔、按钮盒(button box)、滑动盒(slider box)、照相机、麦克风、电话、个人数字助理(pda)、视频会议设备、电话会议设备、包括手套和贴身衣裤的运动跟踪(motion tracking)设备、音频设备和扬声器、物理图像显示设备、战术(tactical)和触觉(力反馈)输出设备、运动平台和嗅觉输出设备。
另一类外部输入/输出设备是硬拷贝显示设备。这一类的设备包括(但不限于):激光打印机、喷墨打印机。热转印(thermal transfer)打印机、击打式打印机、印片机(film printer)、标签制作设备(labelmaker)、数字机工具和sterolithography输出设备。
主机
论述了主机的例子。从外部输入/输出处理器这一点来说,外部输入/输出设备是其中一部分的通用计算机的其他部分称为主机。通用计算机可能具有大量连接到它上面的其他外部输入/输出处理器,这些处理器依次连接任意数量的外部输入/输出设备。
与本发明相关的主机的一个实施例包括外部输入/输出处理器以连接外部输入/输出设备如键盘和鼠标、应用软件和连接至阴极射线管(crt)的图形硬件加速器,crt是外部输入/输出设备种类的子类物理图像显示设备类的例子。
应用软件在主机内的通用处理器元件上执行,可选地接受用户经键盘和/或鼠标的输入,然后使图形硬件加速器计算最终的渲染图像并且随后将该图像作为视频输出信号发送到crt用于显示。
主接口
Infiband接口是主接口的一个例子。
当任意类型的外部输入/输出处理器与主机连接时,术语主接口用来指主机和/或硬件加速器之间的形式和/或物理接口。相当常用的这种接口是一些类型的内部计算机总线,所以主接口有时称为主总线(host bus)。然而,由于需要越来越高速的电子和/或光学接口来将不同的计算子系统连接到一起,可能越来越少的主接口是具有大量导线的由插在同一个主机上的不同计算子系统共享的总线。它更可能是具有很少信号共享的点对点接口。
在讨论3d图形硬件加速器的情况下,术语主接口暗指将3d图形硬件加速器连接至主机的特定主接口。
应用软件
人、公司和组织机构通常购买通用计算机以进行有用的工作。工作部分是通过为了该任务而购买或编写的特殊的计算机程序来完成的。术语应用软件指这样的程序。
在3d图形硬件加速器的情况中,应用软件与3d图形硬件加速器通过图形api(应用程序接口)来通信。
消息
消息是从一个实体(源或发送者)向一个或多个潜在的目的地或接收者实体发送的客体。消息本身通常具有一些内容,即源向目的地发送的信息。消息的不同实施例可以明确地从消息内容的其他部分(也叫有效载荷)分出路由或目的地信息(也叫头部)。实际上,在一些实施例中,消息的“类型”本身是作为另一种独立的信息分开的。计算机科学中不同的系统以许多不同方式定义了独立的消息系统。这种定义的目的是描述由大多数消息系统共享的更抽象更高级的语义。当需要使用消息系统来描述本发明的各种实施例时,将首先定义消息系统的特别详细的例子。
单播(unicast)和多播(multicast)
考虑由多个不同的子系统组成的电子系统。假定通信系统已经组成电子系统的一部分,以便至少某个独立的子系统能够从那个子系统经将收到提交的通信系统向一个以上其他的子系统发送消息。考虑从子系统发出消息。如果消息的目的地恰好是一个其他的子系统,该消息就被称为单播消息。如果目的地是多于一个的其他子系统,该消息就被称为多播消息。对于多播消息,该消息不必被发送至所有其他子系统,只是潜在的多于一个其他子系统。实际上,如果通过该系统潜在的目的地不允许发送者子系统确实知道哪一个或多少子系统将实际上被多播消息作为目标,它可能是只有一个或甚至没有其他子系统实际上作为该多播消息的目的地结束的情况,这仍然是消息将被认为是多播消息的情况。
U
存在由许多电信、计算机、视频、科学和其他产品商业使用的标准的机架装配系统。存在标准的“机架(rack)”,在纵向围栏上以约19英寸的间隔排列有一组隔开的螺钉孔。机架围栏上的孔这样隔开使得标准宽度但是不同高度的产品能够用螺钉固定在任何这样的机架上而不留垂直缝隙。这通过将各种设备的高度“量化”为基本单位的整数倍来实现。这个基本单位是一又四分之三英寸高,该单位称为U。因此,可以用单位U来确定特定设备的高度,例如1U设备、2U设备等等。可在机架上安装的设备的深度没有固定在任何数量上,但是有一个大多数设备适合的深度范围,通常是低于16英寸或18英寸。对于在可机架安装的设备的六个面上从哪送入冷却空气和排出热的空气,没有通用的标准。但是在特定的市场或工业部门内可能存在一些标准。类似地,尽管许多市场假定大多数敷设电缆(包括电源电缆)从地板的后面和/或上面进入,这并不普遍是真的。因为空调保护的电源备用设备房屋空间每平方英尺是非常昂贵的,一些市场非常坚持他们的“非正规”标准跟着这个字母。
刀片(Blade)
在计算机设备的上下文中的术语刀片表示小的可机架安装的设备(例如,不超过少量的U的高度),这种设备从物理体积观点上将相当大数量的能力压缩进小盒子中。而且,不是成为非常复杂的设备,每一个单独的盒子应当是相对简单;复杂的系统应当是可通过将大量的刀片放置到一个或多个标准机架中实现的。
在计算机空间中目前的刀片例子是在单块主板的一个、两个或四个或更多的PC兼容的cpu,主板上带有内存,可能还有少量的低剖面(low profile)磁盘驱动器、一个或多个标准网络连接,或许还有有限数量的pci插槽,在机架可安装的底盘之内的所有元件矮至高度只有2U。多个这样的单元通常在机架上安装在一起形成web服务器和其他需要大量cpu的计算子系统,这些cpu不需要比使用标准网络连接更好的连接性。
图形板(GraphicsSlab)
术语图形板打算描述通过本发明实现的新种类的3d图形硬件加速器产品。图形板是矮高度(可能大约2到4U)的独立的盒子,能够经工业标准接口(如Infiband)连接至主机,并通过经由交叉条状开关的长线路数字视频信号通道将高质量最终渲染的图像发送到媒介内各个办公室、会议室、实验室和剧场,所述媒介是在单个自然建筑或多建筑校园内的大规模组织的。
计算机图形学术语
因为本发明涉及计算机图形学领域,尤其是3d图形硬件加速器,应当对来自这些领域的几个术语进行概括论述。
2d计算机图形学和3d计算机图形学
计算机图形学是描述计算机科学的子学科的众所周知的术语,该学科通常集中于在产生计算视觉效果中直接和间接使用电子和计算机。由于它众所周知的特性,这里不再给出精确的定义。需要定义的是以下三个术语的区别使用:计算机图形学、2d计算机图形学和3d计算机图形学。在本发明的说明书中,术语2d计算机图形学用来指集中在2d效果的子学科,2d效果如:字体、排版、图片编辑、着色系统、2d(或“细胞(cell)”)动画等等。术语3d计算机图形学用来指集中在3d效果的子学科,3d效果如:3d渲染、光线、3d模型、3d动画等等,在硬件支持的情况中,术语3d计算机图形学通常指除了2d技术还支持3d技术的能力。因为本文件的主题涉及对于图形的硬件支持,包括2d和3d技术,所以在本文件中术语3d计算机图形学被用来指所有类型的图形计算,包括2d和3d技术。通常,在本文件中,这种3d指3d和2d的习惯将被遵循,除了明确指出为其他含义的以外。当术语不包含维数的前缀时,本文件中的习惯是该术语将指同时包含3d和2d术语的含义,除了明确指出为其他含义,或者从上下文中术语有意模糊,以便它能或者指3d术语的含义或者指2d术语的含义(例如,“这种技术支持哪种形式的计算机图形学?”)。明确地,计算机图形学术语的使用允许这些习惯。为了指仅包含3d技术的计算机图形学的子学科,术语3d图形学(下面定义)明确地限制它的范围仅仅是计算机图形学领域的3d部分。注意尽管一些术语包括“3d图形学”的文字序列,这些术语不自动内在的免除包括2d技术;每个术语的定义必须明确地包括从通用规则中的选择。
在渲染(2d和3d)的定义中,将产生类似的范围问题。这个问题不仅仅是2d被3d包括,还有硬件通常称为“渲染硬件”,但是所支持的是哪一种计算机图形学技术的范围不是任何维数的渲染技术;所谓的“渲染硬件”可能还包括非渲染计算机图形学的支持。再一次,明确的定义将消除这种潜在的模糊性。
3d图形学
3d图形学是集中在为了产生这个模拟世界的静态和动态图像而使用数字计算以主要代表和模拟物理世界的方面的方法和技术上的计算机科学的子学科。这涵盖了较宽的方法范围,从活的生命的动画到在计算机内构造合成山脉或真实飞机的更好方式。对于给定问题范围,通常一定范围的分辨率是可用的,更高质量的分辨率要求相应的更大数量的数字计算。
这里定义的术语3d图形学通常不包括2d计算机图形学技术。在本文件中,在3d图形学和2d计算机图形学中定义的技术的组合称为3d计算机图形学,或者在上下文中,简单的称为计算机图形学。(注意在本文件中没有定义术语“2d图形学”)。
2d渲染和3d渲染
在本文件中,术语2d渲染指来源于计算机图形学的技术,用于面一线绘图中的绘图运算、多边形填充算法、字体(光栅光分组技术(raster ops)、一到n位扩展、概要字体例示和光栅化、字体和符号的压缩和光栅表示等等)、2d着色系统、模拟画布上颜料或墨水层的效果、成像技术等等。
术语3d渲染指2d渲染的所有技术加上明确的3d技术。这些明确的3d技术主要涉及模拟作为在照相机和人眼中产生图像的过程的一部分在真实世界中有多少光子与物理物体的表面和内部相合的近似值的各种程度。大多数情况下,模拟世界上下文中的明确的3d渲染涉及模拟世界中物体的表示(包括模拟的照相机)和产生模拟的照相机在模拟世界中“看到”的东西的近似情况的渲染图像(几乎都表示为像素的阵列)。
在本文件中,词语“渲染”的全部三种时态:渲染、正在渲染和已渲染,当它们不带前缀出现时,被定义为与术语3d渲染相同的意思,除了明确指出为其他含义,或者从上下文该术语有意含糊,以便它能够或者指3d渲染或者指2d渲染(例如,“这种技术支持哪一种形式的渲染?”)。
因为渲染处理的结果几乎总是图像,所以对于动词“渲染”,默认的名词是“图像”。词“正在渲染”是进行时态动词,例如,“计算机正在渲染图像”。词“渲染”是将来或不定时态动词,例如,“计算机将渲染图像”或“委员会将如何决定渲染哪一个图像?”。词“已渲染”是过去时态动词,例如,“计算机已渲染了图像”。
注意:词“渲染”当作为较大术语的部分使用时,可能具有附加术语的特定含义。在本文件中重要的例子是当定义包括支持渲染算法的硬件的术语时,通过明确记载硬件除了渲染还支持其他计算机图形学的算法,即使词“渲染”可能是描述该硬件的术语的一部分。
已渲染图像和最终已渲染图像
通常,执行渲染的主要结果是图像,它被称为已渲染图像。复杂的渲染能够产生中间已渲染图像,例如对于执行包括反射贴图的渲染,在最终图像已渲染之前,会执行独立的渲染以生成将成为在渲染的下一个步骤中使用的反射贴图的已渲染图像。存在许多类似的例子,包括阴影贴图(shadow mapping)。为了区分这些不同的线程的含义,术语已渲染图像用于指任何渲染的图像结果,尤其是包括中间已渲染图像。术语最终已渲染图像用于表示人(有些情况中机器)消费的最终图像。特别是,已经转换成视频输出信号并通过视频输出接口发送到物理图像显示设备的已渲染图像在几乎所有情况中都将被认为是最终已渲染图像。
正在渲染处理、渲染处理、图形渲染处理和3d图形渲染处理
因为渲染是计算处理的一种类型,当需要其他形式的动词时,我们可以将渲染的计算处理称为正在渲染处理或者渲染处理。(这比总是叫“渲染的计算处理”简短。)
在本文件中,术语正在渲染处理、渲染处理、图形渲染处理和3d图形渲染处理,除了明确指出为其他含义外,所说的渲染包括2d和3d技术。尽管存在纯粹的2d技术,这里并没有用术语对它们进行定义。带有前缀“图形”或“3d图形”的术语只是用于再次强调所说的渲染处理还包括3d技术。
渲染处理
术语“渲染处理”没有假定渲染处理是通过软件渲染还是通过硬件渲染(下面定义)。该术语还可以用来在不需要区分软件/硬件时抽象的讨论渲染处理。在其他时候,所说的是硬件渲染还是软件渲染从上下文中将是清楚的,所以不需要加上术语硬件或软件。由于本文件主要涉及硬件渲染,如果术语硬件是省略的,所论述的渲染处理就是抽象的或者是硬件渲染。当从上下文中不清楚特定含义时,将使用更明确的术语抽象渲染处理、软件渲染处理或者硬件渲染处理。术语3d图形抽象渲染处理、3d图形软件渲染处理和3d图形硬件渲染处理定义为与不带3d前缀的术语具有同样的含义;它们仅用于再次强调所说的特定形式的渲染处理还包括3d技术。
渲染系统
在计算机图形学中,渲染的概念是抽象概念。为了精确地执行渲染和生成图像,需要图形渲染系统。需要物理元件,所以图形软件渲染系统技术上是硬件/软件系统,包括硬件:通用计算机,还包括软件:软件渲染器,当在通用计算机上运行时能够执行渲染处理的程序。图形硬件渲染系统是包括主机及其软件和图形硬件加速器(下面定义的外部输入/输出处理器的类型)的系统。有时在上下文中,术语图形硬件渲染系统可能仅在论述专用图形子系统,例如图形硬件加速器。
通常的维数习惯也应用到这些术语上。由于没有术语包含前缀2d,所说的系统全都包括对2d渲染和3d渲染的支持,除非明确指出为其他含义。尤其是,术语3d软件渲染系统指包括2d渲染和3d渲染的系统。
实时
在呈现对人眼给出连贯图像的错觉的一系列图像的情况下,该序列图像需要以量级为24到84次每秒的时间速率呈现。在这种特定情况下,术语实时意味着能够以与此相符的时间速率生成新的图像输出。在本文件中,术语实时始终指这个范围的时间速率,除非明确指出为其他含义。
软件渲染
考虑到真实世界的复杂性,生成高质量最终渲染图像的清楚的渲染是计算上要求非常高的任务。渲染能够作为纯软件算法实施,例如,能够在通用计算机内的一个或多个通用处理器元件上运行的程序。这是软件渲染的例子。复杂的软件渲染差不多要花费几天来生成单个最终已渲染图像,例如,比实时慢一百万倍。不太复杂的渲染可能只需几分钟或几小时。在本文件中,术语软件渲染始终是指这种定义。有时使用术语批渲染来指不能足够快的进行以被认为是接近实时的渲染。
硬件渲染
对于使用3d渲染的许多应用(工业和消费者),以实时速率或至少接近实时的速率来生成最终已渲染图像是非常重要的。由于这种商业重要性,证明制造专用的计算硬件(外部输入/输出处理器)是适当的,这种硬件专门用于执行比软件渲染(假定相同的技术时帧)所可能达到的速率更快的渲染计算。当渲染不是由能够在通用计算机内的一个或多个通用处理器元件上运行的软件执行,而是由专门设计用于渲染的硬件执行时,这称为“硬件渲染”。
加速器
在计算机科学中,加速器、硬件加速器或专用硬件加速器是计算子系统的物理设备,所述子系统被设计用于执行特定的计算处理,这比通过在通用计算机内的通用处理器元件上运行的程序执行得更快。(这里的“更快”是假定相同的技术时帧。)这种物理设备通常连接到通用计算机,但是加速器不必然是外部输入/输出处理器,因为有许多纯计算加速器,它们的输出只是直接发送回通用计算机的数据,曾经包含外部输入/输出设备。
关于渲染的定义,前置词“硬件”可能看来是多余的,但是过去经常会加上这个词“硬件”以使其完全清楚正在论述一个单独的物理硬件。还是关于渲染的定义,前置词“专用”可能看来是多余的,但是过去经常会加上这个词“专用”以使其完全清楚正在论述一个设计为在窄的特定范围任务上表现杰出的硬件。
图形加速器
术语图形加速器和图形硬件加速器指其专用计算处理是来源于计算机图形学的一些算法的硬件加速器。在本文件中描述的多数这种设备明确地包括3d和2d渲染算法,但是这里定义的这个术语不是这样,遵循这些术语已被用于描述涉及图形算法其他子集合的加速器的较宽使用的习惯。下面定义了要支持的计算机图形学算法的更明确说明的术语,在本文件中将更通常地使用以保证确切性。
3d图形硬件加速器
在本文件中,术语3d图形硬件加速器指还是外部输入/输出处理器并被设计用于执行大量来源于计算机图形学的算法的图形硬件加速器,所述计算机图形学明确地包括(但不限于)3d渲染(明确地定义为还包括2d渲染技术)。
通常,期望3d图形硬件加速器被设计用于执行3d图形渲染处理的一些子集,如果在附加有3d图形硬件加速器的通用计算机上执行,比3d软件渲染处理更快。如果3d图形渲染处理的其他部分以与3d图形软件渲染处理相同或更慢的速度执行,是可改善的可接受的。实际上,对于3d图形硬件加速器根本不能执行3d图形渲染处理的一些子集是很常见的,而且缺少的功能将由主机取而代之纯粹以软件执行。
因为术语3d图形硬件加速器是对于一种图形硬件加速器的唯一的术语,这种图形硬件加速器还被定义为外部输入/输出处理器,并被定义为用于执行3d图形硬件渲染处理,所以这个特殊的(稍微有点长)术语将在大多数情况中使用以描述本发明涉及的图形产品种类。
图形系统
有时,在上下文中,为了简短,术语图形系统将用来指是图形硬件加速器的通用计算机的子系统。与本文件中通常的习惯明确相反,没有明确定义图形系统的支持的维数。它可以包括2d或3d或者两种技术,以及支持非渲染计算机图形算法。在一些情况中,上下文将指明维数。
有时,在上下文中,为了简短,术语3d图形系统用来指是3d图形硬件加速器的通用计算机的子系统。在这种情况中,3d图形系统被明确地定义为能够执行所有的渲染和非渲染计算机图形算法,如同由3d图形硬件加速器定义的一样。
api(应用程序接口)
术语应用程序接口或api指在计算机程序(应用软件)和一些基础软件和潜在硬件功能性之间的编程语言或系统接口,所述硬件功能性使得应用软件以标准方式可用。
图形api和计算机图形api
术语图形api和计算机图形api都是指相同的概念,即对于一些形式的图形功能性的api。这里,不带任何维数的前缀通常并不意味着支持2d和3d两种技术。在本文件中,术语图形api和计算机图形api都是抽象的,确切的特性和支持的维数仅通过图形api的特定例子来定义。
还要注意任何特定的3d图形硬件加速器将通常支持一个以上不同的计算机图形api,例如,硬件2d和3d功能性将通过不同的api来暴露;3d图形硬件加速器和api不存在一对一的关系。
渲染api
术语计算机图形渲染api指一些形式的图形渲染系统的api。在文献资料中,有时术语计算机图形硬件渲染api用来指一些形式的图形硬件渲染系统的api。因为大多数计算机图形渲染api都具有纯软件实现以及使用图形加速器的实现,所以在本文件中将不使用这个极特殊的术语。还必须记住,即使功能强大的图形加速器被用作实现计算机图形渲染api的一部分,该api总是具有至少一些作为软件在主机上实现的分量,例如,计算机图形渲染api总是纯软件系统或硬件和软件混合的系统。
术语2d计算机图形渲染api指仅支持2d渲染技术的计算机图形api。
术语3d计算机图形渲染api指仅支持3d渲染技术的计算机图形api,在这种情况中,与本文件中通常的习惯相反,只有渲染技术可以是纯3d或者是包括2d和3d两种技术的。使用这种定义是因为许多商业计算机图形渲染api实际上是纯3d的,而其他的实际上是2d和3d混合的。还要注意任何特定的3d图形硬件加速器通常将支持一个以上不同的计算机图形渲染api,例如,硬件2d和3d功能性可以通过不同的api来暴露。
2d计算机图形渲染api的具体例子包括PostScript、Java 2d、html和svg。
3d计算机图形渲染api的具体例子包括OpenGL、microsoft’sDirect3d、Java 3d、QuickDraw3d、RenderMan和mental ray。
渲染状态
渲染通常是状态完全的(state-full)过程。这意味着当应用软件使用计算机图形渲染api以使特定渲染(最终)发生时,计算机图形渲染api通常具有明确的定义上下文的状态信息,在该上下文中将解释下一个计算机图形渲染api调用(call)。这种状态上下文信息称为渲染状态。
可能的渲染状态的例子包括当前的绘图颜色、当前的转换矩阵、z缓冲(z-buffering)的实现、当前定义的光源、当前帧的抗混淆滤波等等。
显示列表
许多图形api支持显示列表的概念。显示列表是用来指出之前记录的正式api调用的集合的路径,所述api调用具有对于图形api的限制参数。大多数情况下,在集合记录期间进行的api调用被限制为由图形api支持的api调用的特定子集。在许多情况中,该子集限制为只是几何描述和渲染状态api调用。
在创建了显示列表之后(通过对图形api的调用),在较后的时间点涉及之前创建的那个显示列表的api调用可以进行,以调用该显示列表。那个调用的语义是变化的,但往往该语义是线性的,例如,调用显示列表的效果与代替重新进行用于定义显示列表的所有api调用的调用的情况是相同的。存在其他更复杂的显示列表语义,尤其是在这些语义中显示列表包含条件执行路径(例如,分支)的语义,以及在其中并非api调用的所有正式参数都限制在创建的点,而是一些参数成为显示列表本身调用的正式参数的显示列表语义。
与本发明相关的显示列表的重要属性是一旦创建,大多数显示列表都是不透明的,例如,它们的内容不能被创建显示列表的应用软件直接检查和修改。这意味着一旦创建,显示列表就能立刻从主机经主接口发送到图形加速器,在那它可以在图形加速器自己的局部存储器上快速存取。然后在将来,当应用软件调用相同的显示列表时,显示列表的内容就可以从局部得到用于高效存取。
图形驱动
将程序调用、渲染状态、默认、从应用软件载入api的数值和数据结构分解为图形硬件加速器能够处理以帮助执行渲染的形式,这是计算机图形渲染api的软件和硬件混合实现中的一半软件的工作。位于软件的其他部分和硬件之间的主机软件通常称为驱动程序。当讨论的硬件是图形硬件加速器时,该驱动程序称为图形驱动或图形硬件驱动。
纹理贴图(texture map)
在本文件中,术语纹理贴图指构成图像的像素值的2d阵列,在渲染处理过程中要使用这些图像。术语2d纹理定义为与纹理贴图相同的含义。
体素贴图(voxel map)
在本文件中,术语体素贴图指构成图像的体素值的3d阵列,在渲染处理过程中要使用这些立体图像。术语3d纹理定义为与体素贴图相同的含义。
纹理
在本文件中,术语纹理既指纹理贴图又指体素贴图。从上下文中,维数是清楚的,或者在与维数无关时是抽象级别,或者其实指二维和三维。
纹理元素
纹理元素(texel)
术语纹理元素指纹理贴图的各个像素或体素贴图的体素。使用这些术语以避免由术语“像素”既用来指在图形系统中其他地方的更传统的像素又用来指纹理中的特定的像素而可能引起的混淆。
纹理存储
纹理存储器
术语纹理存储和纹理存储器指在给定设计的实际存储器子系统中纹理贴图实际存储的地方。例如,“纹理存储与帧缓冲器存储器合并”,或者“纹理存储存在于专门为它建立的特殊存储器子系统中”。
环境贴图
环境贴图是围绕特定计算机模拟世界的背景(通常在远处)的纹理贴图或纹理贴图图像集合。在许多情况下,环境贴图是天空中云的图像和远处的山脉。在文献资料中,术语环境贴图和反射贴图没有标准的含义,而且有时可能代表相同的意思。在本文件中,术语环境贴图将专门用于描述远处背景的图像。在许多情况下,环境贴图不必重渲染每一渲染帧。
反射贴图
反射贴图是围绕特定组物体或单个物体或甚至特定物体的特定部分的特定模拟世界的纹理贴图或纹理贴图图像集合。反射贴图用来模拟在真实世界中物体具有的高发光性或部分发光性—它们“反射”(或许朦胧的)它们周围的世界。
在文献资料中,术语环境贴图和反射贴图没有标准的含义,而且有时可能代表相同的意思。在本文件中,术语反射贴图将专门用于描述包含完整背景(既有近背景又有远背景)直至涉及特定物体上的一个点的图像。在绝大多数情况下,环境贴图不必重渲染每一渲染帧。(设想两个铬黄色恐龙在沙漠中行走)
阴影贴图
阴影贴图是出射点位于虚拟光源中央的已渲染图像的z像素分量,所述虚拟光源给最终已渲染图像投下阴影。
在最终已渲染图像的渲染开始之前,为每一个期望在最终已渲染图像中投下阴影的光源执行中间渲染。对于每一个这种渲染,仅包含中间已渲染图像结果的z像素分量的图像作为纹理贴图存储在3d图形硬件加速器内。这些纹理贴图是指阴影贴图。
注意为了精确,阴影贴图的单个分量值(z值)通常必须以高的数字精度表示,例如,在一些实现中大于16位整数、定点、模块浮点或浮点精度。
在绝大多数情况下,如果有从该特定光源投下阴影的任意物体的任何运动,或者如果光源本身是运动的,对于特定光源的阴影贴图必须重渲染每一个渲染帧。
像素
很好理解的术语像素指组成图像的计算机表示的各个“图像元素”。当讨论图形硬件加速器时,必须记住对于附加的特殊数据和控制信息通常存储在像素中并被认为是像素的部分,例如,像素可能包含大量而不只是红绿蓝颜色分量。
像素交错(pixel interleave)
大多数对于像素的高性能存储器系统通常通过支持在一个时间存取一个以上的像素来增强它们的性能。对于许多实施例,这些限制与存储器系统是如何交错的(并行进行)有关,存储器的组织的技术细节称为存储器的交错。简单的例子是将帧缓冲器分解为以4×4像素交错布置的16个并行像素存储器的存储器。这意味着在y上像素的每第四条线上x处的每第四个像素存储在特定子存储器中,而且在一个时间只有一个像素能够从给存储器中存取。
子像素
术语“子像素”限制以下名词为比整数像素测量更精确的位置或区域的说明符。“子像素”不是名词,例如,你不能对“子像素”计算值,只能对“子像素区域”计算。子像素对于位置和区域的通常用处是“子像素精确位置”。
子像素的另一偶尔用处是小于单个像素的意思,例如:“三角具有子像素区域”意味着三角具有小于一个像素的区域。“子像素三角”意味着三角在直线测量上小于像素跨度,例如,三角的边界框在宽度和高度上小于一个像素。注意讨论的三角是否跨一个以上像素。
像素深度
用于代表单个像素的位数是不标准的。当讨论图形硬件加速器时,由于结构特殊的附加特殊数据和控制信息存储在像素中并被认为是像素的一部分,表示单个像素所需的位数并不总是明显的。在渲染过程的不同内部和外部阶段中像素的表示(并且因此其位数)不同也是相当常见的。当然,许多图形硬件加速器具有动态支持不同像素格式范围以及因而其位数的总大小的能力。通常(但不总是),在讨论用于在帧缓冲器和纹理缓冲器中存储像素的表示的大小的情况下,术语像素深度用来指像素的位数(或者有时信息的其他特定单位)的总大小。因为在3d图形中使用的像素经常包含z“深度”分量(或反向“深度”分量),理解“z深度”是与像素深度不同的概念是重要的。前者指像素的深度分量或者像素深度分量的值,后者指像素的所有分量的信息单位的总大小。
像素格式
术语像素格式指像素的特定结构表示。这种结构通常用多个像素分量来定义,每一个分量可以通过一定数量的位或通过它本身的子结构来限定。一些像素格式是抽象的,它们可能限定像素“包含红、绿和蓝分量”,而没有限定关于位大小的进一步细节或分量的其他子结构细节。
像素分量
术语像素分量指组成由特定像素格式定义的像素的内部结构的部分的特定数据分量。不同的3d图形硬件硬件加速器可以选择支持与其他加速器不同的像素分量。目前在几乎所有情况下,像素都至少具有通常的三种有价值的颜色分量,例如,红、绿和蓝数字值。每个需要多少位来存储这些值,或者甚至数值的数字格式可能在不同的系统之间是不同的。
除了通常的红、绿和蓝像素分量值,得到作为每个像素的一部分存储的所谓“α”分量值也是常见的。该α值能够用于大量不同的熟知的渲染技术。而且对于支持基于渲染算法的z缓冲器的3d图形硬件加速器,非常重要的像素分量是z值(或者大量其他基于距离的值中的任意值)。
其他常用像素分量包括如由OpenGLTM说明书定义的模板平面。其他的像素分量可能是快速清除平面、覆盖平面、光标平面、窗口id平面和多年来在帧缓冲器中出现的其他类似分量。
还未提及的一个问题涉及双缓冲是如何实施的。所有像素都同时具有前和后缓冲器吗?然后一些像素分量(如z)仅存在于前缓冲器中吗?不同的窗口能同时在屏幕上切换缓冲器而不影响其他窗口吗?具有为要包括在每个像素中的不同数量的分量配置3d图形硬件加速器以及配置哪些分量是单还是双缓冲的能力吗?具有对于三倍或更高缓冲的支持吗?立体视频信号格式尤其是场序制立体视频信号格式如何:如果是这样那么帧缓冲器是如何建立以支持立体的?在立体情况下,一些像素现在是四倍缓冲,或者使用另一种技术吗?所有这些帧缓冲器结构、像素分量结构折衷对于本领域的技术人员都是熟悉的,而且本领域的技术人员根据这里的说明应该理解新环路结构的这些要求的应用。
像素数据
有时需要提及像素的所有像素分量的整体集合。尽管在上下文中,术语像素能够表示这种意思,但有时使用术语像素数据来完全清楚地表示正在描述什么。
体素
尽管不如术语像素广为人知,术语体素指像素的3d延伸—“体积元素”。体素是归属于空间(通常均匀地打包为3d单元)中的小区域的分量的集合。正如2d图像通常由2d像素阵列数字表示一样,3d“图像”通常由3d体素阵列表示。类似地,“体素贴图”是体素的三维阵列。
尽管在计算机处理中有时使用四维或更高维表示,这种使用对于使用的标准术语并不是很常用,例如,目前很少有人使用像“超体素”的术语。
体素格式
术语体素格式指体素的特定结构表示。这种结构通常用多个体素分量来定义,每一个体素分量可以通过一定数量的位或通过它本身的子结构来限定。一些体素格式是抽象的,它们可能限定体素“包含红、绿和蓝分量”,而没有限定关于位大小的进一步细节或分量的其他子结构细节。
体素分量
术语体素分量指组成由特定体素格式定义的体素的内部结构的部分的特定数据分量。典型的体素分量可以是红、绿和蓝值,或者它们可以是到伪色表中的指针,或者它们可以是要求自定义着色器(customshader)的应用转换为简单颜色的更复杂的多维值。
基础图像(underlying image)
在传统的信号处理中,听说过相当多次正在处理的基础的最高质量信号。实际上,在一些情况下,了解信号的许多数学确切属性。当正在执行的运算是对用于在较低频道上表示的表示通道的一定频率的信号的重采样和低通滤波时,这种关于基础信号的信息能够被用来简化和归类这种处理。
技术上,已渲染图像的抗混淆仅是具有二维信号—图像这样的工作。问题是,计算基础图像的等价物、基础图像是非常昂贵的。技术上,在渲染的情况下,基础图像是2d图像,该2d图像是样本密度趋于无穷大时由样本阵列形成的图像的极限。这是因为大多数渲染算法建立的方式,它们只能告诉我们基础图像的值是在特定的无穷小的点,它们不能肯定地告诉我们基础图像的平均值可能在一些小的2d区域上,或者说关于图像分量的什么频率的任何其他东西可能隐藏在基础图像中。这就是为什么抗混淆(和全屏幕抗混淆)是计算机图形学中这么难的问题。还有,为了正确地描述各种抗混淆算法如何试图解决该问题,有必要在稳固的信号处理基础上讨论基础图像的概念。
样本
术语样本来自信息理论,特别是首先用于描述一些形式的信号组成的各种谨慎的测量(模拟或者数字)。信号不必是像无线电波的一维的,它可以是二维的,像在图像感应装置上的光的图案。在3d图形学中术语“样本”的使用通常指代表正在渲染的基础图像的点样本的离散数字值。样本与像素密切相关,而且常常具有相似或相同的分量值。信号处理数学指出:为了更正确地构成数字图像和避免由于在要产生的像素阵列上空间频率的基础图像中的存在引起的干扰图形,你必须首先在单个像素内许多不同的点“取样”(探测)基础图像。这是大多数高质量计算机图形学抗混淆算法所做的。在它们的数据能够被用于产生渲染过程的输出的最终像素之前,样本还需要附加的信号处理。(以下术语中的几个描述这种信号处理的其他部分。)
有些重要的是注意在简单的不抗混淆(例如,直到最近以前大多数图形硬件加速器建立的方式)的图形渲染管线中,被称为像素的实际上是以每像素一个的样本密度取样的样本。这是因为在数学上,像素应该是在该像素的二维邻域中基础图像值的一些特殊平均值的表示;样本是在2d空间中单个点所取的基础图像的特定值(不是平均值)。因此,无需抗混淆处理,技术上与这里给出的各种术语定义一致,较老的图形硬件加速器计算并向它们的帧缓冲器中存储样本而不是像素。当它们不改变的传给视频输出信号时,它们通过默认成为像素的近似值,所述视频输出信号定义为像素流。
这里刚给出的样本的特定的定义是总在本文件中使用的定义,除了明确指出为其他含义的以外。
样本位置
在正在渲染2d图像的情况下,所有的样本都是在该图像上的数学点。作为点,样本具有在正在渲染的图像上的2d位置。这种位置称为样本位置。这些位置通常具有一些明确的量,该量由限定样本的子像素精确度的位数限定。给予这些样本位置的功能是另一个概念,通常称为样本模型(sample pattern)。
样本地址
在3d图形硬件加速器的帧缓冲器(或样本缓冲器)情况中,所有的样本都明确具有帧缓冲器地址,用于标识在帧缓冲器内它们的样本分量存储在哪。这个地址称为样本地址。该地址可以用各种不同的方式分配,但是一种常用的方式是基于在样本位于其中的像素的地址上的样本地址,然后还包括从样本的线性序列数量得到的地址信息。该线性序列数量是来自包含在与讨论的样本相同的像素中的所有样本的线性顺序。
样本格式
术语样本格式指样本的特定结构的表示。这种结构通常用多个样本分量来定义,每一个样本分量可以通过一定数量的位或通过它本身的子结构来限定。一些样本格式是抽象的,它们可能限定样本“包含红、绿和蓝分量”,而没有限定关于位大小的进一步细节或分量的其他子结构细节。
样本分量
术语样本分量指组成由特定样本格式定义的样本的内部结构的部分的特定数据分量。在这里描述的高质量3d图形硬件硬件加速器中,样本有效地代替了帧缓冲器中的像素。因此,样本的分量、样本分量应该与像素的分量很相似。不同的3d图形硬件加速器可以选择支持与其他加速器不同的样本分量。目前在几乎所有情况下,样本都至少具有通常的三种有价值的颜色分量,例如,红、绿和蓝数字值。每个需要多少位来存储这些值,或者甚至数值的数字格式可能在不同的系统之间是不同的。
除了通常的红、绿和蓝样本分量值,得到作为每个样本的一部分存储的所谓“α”分量值也是常见的。该α值能够用于大量不同的熟知的渲染技术。对于支持基于渲染算法的z缓冲器的3d图形硬件加速器,非常重要的样本分量是z值(或者大量其他基于距离的值中的任意值)。
其他常用样本分量包括如由OpenGLTM说明书定义的模板平面。其他的样本分量可能是快速清除平面、覆盖平面、光标平面、窗口id平面和多年来在帧缓冲器中出现的其他类似分量。
还未提及的一个问题涉及双缓冲是如何实施的。所有样本都同时具有前和后缓冲器吗?然后一些样本分量(如z)仅存在于前缓冲器中吗?不同的窗口能同时在屏幕上切换缓冲器而不影响其他窗口吗?具有为要包括在每个样本中的不同数量的分量配置3d图形硬件加速器以及配置哪些分量是单还是双缓冲的能力吗?具有对于三倍或更高缓冲的支持吗?立体视频信号格式尤其是场序制立体视频信号格式如何:如果是这样那么帧缓冲器是如何建立以支持立体的?在立体情况下,一些样本现在是四倍缓冲,或者使用另一种技术吗?所有这些帧缓冲器结构、像素分量和样本分量结构折衷对于本领域的技术人员都是熟悉的,而且本领域的技术人员根据这里的说明应该理解新环路结构的这些要求的应用。
Rgb
术语rgb指样本或像素(取决于上下文)的红、绿和蓝样本分量。该定义没有在这些样本分量或像素分量的数字表示上施加限制。在不同实施例中,它们可以是单个位、整数、定点数、模块浮点数(其中指数被量化得比简单的连续整数范围更粗略)、浮点数、共享指数浮点数(其中单个指数值应用给全部三个分量)或其他更复杂的数字表示。
术语rgb更通常地是指颜色的光谱分量表示。在这种实施例中,四个、五个、八个、二十五个或者甚至128个分离的光谱分量可能被用于更精确地表示光的颜色和它与物理世界中实质物体的交互。有时,在上下文中,术语rgb可能用来指像素或样本的像素格式或样本格式。
Rgba
如术语像素分量和样本分量的定义所述,有时除了颜色分量,像素或样本可能具有α分量,有时用希腊字母α表示。术语rgba指像素或样本的rgb分量以及α分量。
尽管硬件中的传统是具有单个α分量,即使存在三个或更多颜色分量,语义是单个α分量与全部颜色分量相关并应用给它们。但是在软件渲染领域中,当算法要求对帧缓冲器存储α时,存在专门限制每一个颜色分量的单独的α分量是很常见的。特别是如果正在使用三种颜色分量红、绿和蓝,那么也存在三个单独的α分量:α—红、α—绿、α—蓝。在本发明的至少一个实施例中,术语rgba将指这六个α和颜色分量结构。有时,在上下文中,术语rgba可能被用来指像素或样本的像素格式或样本格式。
有时,更通用术语rgba将被用来描述像素格式或样本格式,其中至少一个实施例除了颜色分量实际还使用α分量,但是其他实施例可能不具有明确的α分量。
有时,α分量的存在对于颜色分量和z分量之外的任何附加分量是位置标志符(place holder),因而一些实施例可能包括附加的分量,用于使用远超出对α分量描述的常规分量。
Rgbz
术语rgbz指像素或样本的rgb分量以及z分量。随像素存储z值以执行z缓冲渲染的概念是计算机图形学中熟知的。但是不同的实施例可能使用不同的公式用于计算z距离相关的数值。不同的实施例可能使用不同的数字表示以代表这些z值,包括(单不限于)整数、定点、模块浮点和浮点。
有时,在上下文中,术语rgba可能被用来指像素或样本的像素格式或样本格式。
Rgbaz
术语rgbaz指像素或样本的rgba分量以及如术语rgbz的定义中描述的z分量。有时,在上下文中,术语rgbaz可能被用来指像素或样本的像素格式或样本格式。
有时,更通用术语rgbz将被用来描述像素格式或样本格式,其中至少一个实施例除了颜色和z分量实际还使用α分量,但是其他实施例可能不具有明确的α分量。
有时,α分量的存在对于颜色分量和z分量之外的任何附加分量是位置标志符,因而一些实施例可能包括附加的分量,用于使用远超出对α分量描述的常规分量。
样本缓冲器
如别处所定义的,帧缓冲器是对于包括像素的图像的数字存储器。然而,我们现在正在讨论其中明确的像素可能不实际存储但将从样本流创建的硬件,所述样本流来自于对于包括样本的图像的数字存储器。技术上存储器还可以叫做帧缓冲器,因为它保存描述视频输出信号的一个或多个帧的信息。但是由于术语帧缓冲器在计算机图形情况中已经具有两种不同的含义,例如,这个图形硬件加速器对只是像素的存储器,所以在本文件中,术语样本缓冲器有时将用来描述表示为样本的图像的存储器。
样本密度
术语样本密度用来在一些上下文中描述像素和样本之间的一些关系,例如,当讨论帧缓冲器或样本缓冲器时。特别是术语样本密度指在一个像素内包含的样本的数量。如果在大量像素情况下讨论像素中的样本平均数量,该数量可能是小数。样本密度可能甚至在空间上不是固定的。最后,因为如在视频输出信号产生之前由图形渲染管线定义的像素的大小不必与在视频输出信号步骤定义的像素的区域相同,因此,由于它们使用不同的像素定义,图形渲染管线的其余和视频输出信号步骤可能具有不同的样本密度。当需要明确时,这两种不同类型的像素将被叫做渲染像素和视频像素。样本密度的复数是多个样本密度。
条件样本更新函数
帧缓冲器的最基本的函数是读和写像素或样本的内容。(在本定义的其他部分,为了简明将使用术语样本,但是在所有情况下,定义也适用于像素。)但是在样本上定义了更复杂运算的几个更多层。通常,样本更新函数将这些作为参数,从目标样本地址提取相应的样本值,在新样本值和从样本地址提取的一个样本值上执行某一函数,然后将执行该函数的结果的样本值写回至帧缓冲器中。
样本更新函数的简单例子包括各种布尔函数,例如:与、或、异或等等。但是在3d渲染中,非常重要的函数是基于对新样本值和从样本地址提取的样本值的z样本分量的比较的样本的条件更新。尽管大多数系统允许特定的比较函数具有宽范围(例如,大于、小于、大于或等于、小于或等于、不等于、等于和其他更复杂的函数),基本观念是任何比其他样本更“接近”出射点的样本应该是现在在样本地址存储的样本。如果新样本值“获胜”,那么它的值被写进帧缓冲器,取代旧的值。否则,保持现有的值,不需要对帧缓冲器的写入操作。这种所谓的“z缓冲器更新函数”是条件样本更新函数的例子。
在3d渲染中存在其他的条件样本更新函数,包括那些是在样本的模板样本分量上的条件的函数。也存在算术样本更新函数,包括许多α混合函数,其中新样本颜色样本分量和在样本地址上包含的样本的颜色样本分量的加权总和被写回至样本地址。其他的条件样本更新函数是相当简单的各样本分量的状态变量能/不能,和/或要读或写的样本分量的位域。
3d图形加速器的实际硬件通常必须支持这里描述的所有更新函数以及更多。为了提供覆盖这些函数的所有潜在组合的简单术语,在本文件中,术语条件样本更新函数将指当要处理正被渲染进帧缓冲器的样本时所使用的普通更新函数。本发明的特定实施例可能定义它们的条件样本更新函数以包括这里描述的样本更新函数的任何特定组合,以及文献资料中描述的其他样本更新函数,或者为它们的实施例定义的新的特殊样本更新函数。
过采样(supersampling)
术语过采样指大量3d图形抗混淆算法的任意算法,这些算法通过在每个像素一个以上的点计算基础图像的值,例如,使用“样本”而非“像素”的任何抗混淆算法。在3d图形学文献资料中,有时术语“随机采样”用来与术语过采样互换。在本文件中不是这样。“随机采样”指确定在基础图像中哪个子像素位置是要计算的样本的特定种类的方法。最初这些方法被认为是最佳或近于最佳的,但是近年来经验和理论研究已经确定这些方法对于其他方法几乎总是次优的。例如,使用“随机采样”产生的最终结果抗混淆图像通常看上去比那些使用其他方法以确定基础图像的哪些子像素位置采样而产生的图像更差。
抗混淆
术语抗混淆指许多限制性假定或非限制性方法中的任意一种,用于去除由图形渲染管线产生的图像中不希望的假象,这种假象归因于基础图像的空间频率在这些图像中仍然存在,例如,去除“锯齿”。术语抗混淆既指仅在被迫的特殊情况下减少这些假象的方法(例如,仅在直线而非三角的渲染中),也指用于去除这些假象的更加不受限制的方法。
术语抗混淆是一个不带连字号的词;如果它具有连字号,那么术语“走样(aliasing)”和术语“走样渲染(aliased rendering)”将是容许的,而通常它们是不容许的。
全屏幕抗混淆
术语全屏幕抗混淆指抗混淆方法的子集,这些方法在几乎全部类型的在图像内任何地方被渲染的图形基元上起作用。这些方法通常相当普通,并且在图形渲染管线的工作上施加的限制比通过更专门的抗混淆技术所施加的更少。为了取得“全屏幕抗混淆”的资格,一种方法当它能够使用时应该具有很少限制,并且没有太多失败的情况。附加语“全屏幕”仅显示该方法必须是全面的,该方法可以在屏幕的较小区域有效,例如,仅对特定窗口,或者甚至对窗口的子区域。
卷积
术语卷积通常指对样本的2d阵列为了实施全屏幕抗混淆方法的卷积核(加权的集合)的应用。技术上卷积是同时应用抗混淆技术的“重采样”和“带通”滤波器的一种计算步骤。在本文件中,这是卷积的定义,除非明确指出为其他含义。
卷积核
术语卷积核指在卷积的计算中使用的加权值的集合。在本文件中,这些卷积计算将总是全屏幕抗混淆方法的一部分,除非明确指出为其他情况。这意味着卷积核将总是来自于组合的重采样和带通滤波器。核值本身通常是动态计算的,如通过全屏幕抗混淆方法的细节所限定的。
抗混淆滤波器
由于在本文件中所有的卷积核都指将用于为抗混淆目的执行滤波的卷积核滤波器,术语抗混淆滤波器被定义为指可能用于抗混淆的任何卷积核滤波器。
箱式滤波器(box filter)
最简单的全屏幕抗混淆重采样和带通滤波器之一是箱式滤波器。该滤波器系数的值在方形箱的情况下为一,在其他情况下为零。箱式滤波器的通常大小为一个像素。这种类型的抗混淆滤波器称为1×1箱式滤波器。对于所有系数具有简单的常数使得箱式滤波器比更一般的滤波器在计算上花费较少。它通常也比其他更一般的滤波器产生更低的质量结果。
篷式滤波器(tent filter)
术语篷式滤波器指形状像有四个边的锥体或帐篷的简单的抗混淆滤波器。
放射对称滤波器
术语放射对称滤波器指其滤波系数在一个点上仅是从滤波器中心到该点的距离的函数的任意滤波器,例如,不是从滤波器中心到该点的方向的函数。这种滤波器完全是由一个点到滤波器中心的距离的参数的单值函数确定的。这种放射函数有时也叫做滤波器的截面。
可分滤波器
术语可分滤波器指其在点x,y的值是两个一元滤波函数的乘积的任意滤波器,其中所述一元滤波函数之一仅是x坐标的函数,另一个仅是y坐标的函数。(当然,许多不同的x和y坐标表示是可能的。)当最终物理图像显示设备具有方形(或近似方形)像素或像素是在矩形网格上时,滤波器的这些形式在理论上和实际上都比放射对称滤波器具有质量优势。大多数放射对称滤波器还具有可分滤波器型式,这种附加的滤波器可以在本发明的一些实施例中使用。
高斯滤波器
术语高斯滤波器指其放射函数为高斯曲线的抗混淆滤波器的放射对称滤波器。
立方滤波器
术语立方滤波器指其放射函数为三次曲线或三次曲线段的分段连续系列的抗混淆滤波器的放射对称滤波器。
Michell-Netravali滤波器
术语Michell-Netravali滤波器指抗混淆滤波器族,这些抗混淆滤波器是用于立方滤波器的放射对称滤波器。该立方滤波器族通过两个分段三次曲线段定义,其中三次曲线段是用两个参数B和C作为参数的。
同步滤波器
术语同步滤波器指其放射函数为同步函数的抗混淆滤波器的放射对称滤波器。同步滤波器没有最大半径,它延伸至无穷大。
窗口同步滤波器
术语窗口同步滤波器指其放射函数为特定半径(窗口值)的同步函数的抗混淆滤波器的放射对称滤波器,对于大于窗口值的半径该滤波器系数总是为零。
图形管线
术语图形管线和图形渲染管线都指对图形渲染系统输入数据通过的连续管线级的集合。特定的计算机图形渲染api通常详细指定它们将实施的一组管线级。在文献资料中,这些术语可能指许多不同类型的图形渲染处理的任何处理,但是在本文件中,它们将总是特定指3d图形渲染处理。有时将使用明确的术语3d图形渲染管线。
渲染管线
在3d图形硬件加速器中,术语渲染管和渲染管线指实际实施3d图形渲染管线的硬件的一部分,而且通常不加明确的前缀“3d”
渲染管线级数
渲染管线的定义表明它是由一组连续的管线级组成的,这些不同的级可以用术语渲染管线级表示。在一些计算机图形渲染api中,存在管线级包含什么以及它们之间的边界在哪的明确的正式模型。在其他情况下,通常术语管线级不太正式地指目前讨论的一些操作集合。而且,必须注意几乎所有计算机图形渲染api渲染管线都是抽象的管线,例如,它们精确地描述完整的3d图形抽象渲染处理的语义,但是图形渲染系统的真正实施(硬件或软件)可能以实质不同的顺序和/或方式执行图形渲染系统的操作,只要最终结果依从抽象的说明。
在本文件中,论述的渲染管线级的大多数是硬件管线级或子级,而且应该按照这种意思阅读说明书。
着色器
术语着色器指专门的计算机程序,该程序在图形管线中用作特定的预定点以允许在渲染处理上的灵活控制。着色器代码在通用处理器元件上不必执行,并且可以提交给由它们在其中操作的图形管线施加的特定的限制和约束。特定类型的着色器包括(但不限于)表面着色器、光着色器、位移着色器、体积着色器、大气着色器、图像着色器、体素着色器、面片(match)着色器、几何着色器。
像素着色器
当着色器被编译为实时执行时,几个不同的着色器可以压缩为一个。这种情况最常用的例子是像素着色器,其在由着色器速率确定的频率上执行表面着色器和光着色器的组合语义,许多情况下其是每一个像素。当在图形渲染系统中讨论多数可编程着色器代码的执行时,术语像素着色器经常被用来指该代码。
可编程着色器
因为着色器实际上能够被最终用户编程,它们也称为可编程着色器。允许使用可编程着色器的图形渲染系统说是支持可编程着色。着色器速率和像素着色器速率
对于给定的着色器,例如像素着色器,特定3d图形硬件加速器在执行该着色器中的性能是指着色器速率。任何特定例子应该包括该名字并因而包括对该着色器的测量单位,例如对像素着色器,像素着色器速率以每秒着色的像素单位表示。
像素着色器能力
术语像素着色器能力指给定像素着色器的相对复杂性。在过于简单的术语中,像素着色器能力可能通过像素着色器的源代码的线(在线性路径中)数来粗略测量,或者通过在源代码(的线性路径)中的纹理参考的数量来测量。通常在给定3d图形硬件加速器上,像素着色器的相对像素着色器能力越高,该像素着色器的像素着色器速率将越慢。通常(但不总是),更高的相对像素着色器能力将产生更复杂或更真实的最终渲染图像结果。
程序贴图纹理(procedural texture)
术语程序贴图纹理指通过表面着色器(或特定的其他类型着色器)动态创建的纹理影像,其是由于需要纹理的各体素,而非如同标准纹理影像一样作为图像存储。与作为图像存储的标准纹理影像相比,程序贴图纹理具有可能实际具有无穷大的大小和无穷多的不重复细节的优点。程序贴图纹理具有每次存取来自它们的体素时它们需要大量计算的缺点,例如,它们能够相当多地减慢使用它们的表面着色器。程序贴图纹理也叫做人造纹理。
程序几何
术语程序几何指可编程地创建几何的可编程着色器,例如分形山脉发生器。程序几何在概念上与程序贴图纹理类似。
图形基元(graphics primitive)
术语图形基元和几何图形基元指直接导致样本或像素被渲染的物体的类型。几何图形基元通常是表示在真实世界中的表面或体积的部分的几何元素,所述表面或体积反光、发光、滤光或曲光,例如光对其有影响的任何物体。常见图形基元是三角,其他的例子包括线和点,以及更高阶表面表示和包括体素的各种体积表示。其他图形基元可能是更复杂的,例如,字符和文本。对于本文件来说,术语图形基元和几何图形基元之间意思没有区别。
尽管限定词“元”能够产生图形硬件加速器可以直接处理该物体而无需主机附加帮助的语义暗示,实际上它仅意味着使用图形api的应用软件不必将该物体分解为更简单的或其他基元。在主机上运行的库可以在该物体到达图形硬件加速器之前进行这种分解的一些工作。
大多数几何图形基元直接或间接对图形api被限定为顶点集合。除了该顶点数据,可能还存在特别对被限定的几何图形基元而非特别对它的控制顶点之一的数据,这是由于控制顶点可能被多个几何图形基元共享。
几何图形基元可能是二维或三维的。
位置
在计算机图形学中,术语位置指空间位置,例如特定空间(通常一般的数学二、三或四维空间)中的数学点。
顶点
在计算机图形学中,顶点是至少具有位置属性的复合对象。尽管顶点的最显著性质当然是位置,顶点可能具有许多其他属性中的任何属性。顶点(vertex)的复数形式是多个顶点(vertices)。顶点可能具有的以任何组合的附加属性包括(但不限于)法线(normal)、颜色和顶点坐标。为了强调计算机图形学中的顶点不仅是数学点的表示,术语顶点数据、顶点信息和顶点属性被用来指在顶点内可能包含的属性的整个集合。
必须限定于定义简单几何图形基元的所有顶点(如三角)都处于被限定的几何图形基元的曲面上。然而,更复杂的几何图形基元(比如贝塞尔面片或更高阶曲面)需要特定的附加数学点,而且通常,这些附加点不位于曲面上。在计算机图形学中这些附加点的表示被称为控制顶点。为了避免混淆,在本文件中,术语控制顶点将指定义几何图形基元的所有顶点。
三角
线
点
术语三角、线和点是几何图形基元的常见的具体例子。通过分别直接或间接指定3、2或1个顶点,这些基元被限定于图形api。这些图形基元也能够呈现为二维基元,而且甚至三维基元型式可以通过图形硬件加速器转换为它们的二维型式。在本文件中,这些术语总是指这些物体的三维型式,除非明确指出为其他。
注意当在三维对二维空间时,可能会存在一些混淆。当转换为屏幕空间并渲染进帧缓冲器时,这些图形基元常常被认为是二维的,即使它们作为三维图形基元进入图形硬件加速器。但是除非在渲染这些图形基元的屏幕空间型式之前z缓冲是禁止的(像许多其他渲染操作一样),这些图形基元在技术上仍然是三维的,因为它们仍然具有为它们上的所有点定义的z值。
高阶曲面
术语高阶曲面指用于表示嵌入三维空间中的几何图形基元的宽范围的方法,这些基元比三角更复杂,例如,通常曲面是弯曲的,不是平面。在本文件中,特定高阶曲面表示的明确例子是罕见的;代替的是通常将论述所有共享表示的宽范围的高阶曲面方法的问题(例如,通常它们不是平面,或容易修剪)。
高阶曲面的具体例子包括:贝塞尔面片、二次曲面、超二次(superquadric)曲面、立方面片、b样条曲面、多项式面片、非均匀有理b样条曲面(nurbs)、圆锥曲面、直纹曲面、旋转曲面、隐含曲面、细分曲面、分形曲面、基于小波的曲面和所有这些曲面的平衡和非平衡型式。
压缩几何
术语压缩几何指几何图形基元的各种编码,它们比更传统的几何图形基元表示占用更少的存储空间。压缩那可以是无损的或有损的。有损压缩仍然可以是预补偿(preceptorial)无损的。这意味着尽管压缩可能是从数字点有损的(例如,压缩之后),原始几何图形基元不能正确地按位重建,但是差异是很小的以致观察已渲染的几何图形基元的人不能可靠地说出丢失了什么。
深度复杂性
术语深度复杂性指在一帧的渲染期间条件像素(或样本)的更新函数被应用在帧缓冲器中的像素(或样本)的特定区域内的次数。假定唯一的渲染图形基元是三角,已渲染图像的深度复杂性就是覆盖在正渲染的图像中的像素(或样本)的三角的平均数。
光栅化管线级
任何3d图形硬件加速器的主要任务之一是:响应从主机或内部显示列表存储器接收图形基元,将那些图形基元渲染进它的帧缓冲器。尽管大多数图形管线定义不影响帧缓冲器的渲染的许多初始渲染管线级,实际产生将用作对在帧缓冲器中的像素或样本的条件更新函数的输入之一的像素或样本值的管线级叫做光栅化管线级,或者有时就叫光栅化。
扫描线
许多光栅化(和其他)算法以与视频信号格式定义输出像素的连续转移顺序相同的顺序渲染像素值,该顺序与大多数crt在它们的荧光屏上扫描它们的电子束的顺序相同:从左向右,并且从上到下。当从图像的一行在连续像素集上执行操作时,常说该操作在(像素的)扫描线上执行,即使该操作不直接与视频输出信号处理相结合。
填充率
像素填充率
样本填充率
3d图形硬件加速器的性能可以根据给定加速器能够执行特定任务的速率来测量。光栅化的任务就是这样一种性能。光栅化的性能可以用许多方式测量,但有两种特殊方式常用于3d图形硬件加速器的基准测试。一种是测量光栅化级的填充率。术语填充率指产生像素或样本和像素或样本的条件更新函数应用进帧缓冲器中的速率。当在术语填充率前面没有限定词时,被填充的实体通常假定为像素。当更具体时,术语像素填充率和样本填充率被“填充”的具体帧缓冲器实体。速率用单位实体每秒来测量,例如,像素填充率用单位像素每秒来测量,样本填充率用单位样本每秒来测量。注意在其帧缓冲器中使用样本代替像素的系统仍然能够具有根据每秒填充的像素表征的光栅化性能,只要具有像素填充率是以多大样本密度(例如,平均每像素具有多少样本)测量的记载。
注意填充率通常是取数速率(peek rate),例如,该速率是在每个覆盖大量像素的几何图形基元的光栅化上测量的。由于这个原因,填充率有时叫做渐近填充率。对于仅覆盖少量像素的几何图形基元,图形渲染系统在渲染该几何图形基元中的性能将不仅取决于填充率,还取决于最大几何图元速率,例如,被必须为每一个几何图形基元执行的各种开销操作影响,不管它覆盖多么少的像素。在极限情况下,例如,覆盖少于一个像素的几何图形基元,光栅化时间将不依赖于填充率,而由最大几何基元速率支配。
最大几何基元速率
最大三角速率
建立受限的三角速率
如前所述,对于覆盖少于一个像素的几何图形基元,光栅化它们所用的时间实际上不依赖于任何填充速率,而是几乎完全取决于最大几何图形基元速率。这就是一个几何图形基元在另一个之后能够通过图形渲染系统的最大速率,甚至假定每一个几何图形基元的光栅化产生很少或不产生像素或样本值,所述样本值须用作在帧缓冲器中的像素或样本的条件更新函数的输入之一。
这个速率可能对于不同的几何图形基元很不相同,所以不是使用复杂的抽象速率,通常根据特定几何图形基元(例如,三角、线、点等等)测量速率。甚至对于特定几何图形基元类型,最大速率远不简单,而是详细的;图形渲染系统的许多其他渲染状态值能够使给定几何图形基元类型的最大速率胡乱变化。能够做的最好就是何时对特定几何图形基元类型指出最大几何基元速率,如同许多影响渲染状态值的潜在速率和其他因素也应当被指出。
因为三角往往是最重要的几何图形基元,在比较或对比不同的3d图形硬件加速器中,最大三角速率具有特殊的重要性。
当进行小的帧缓冲器填充(例如,填充速率不是(主要)因素)时,在几何图形基元的渲染中的将限制性能的主要开销计算通常是3d图形渲染管线的建立阶段。因为这个阶段,往往在很大程度上决定最大几何基元速率,所以有时这个速率将明确命名为它的主要原因,例如,最大三角速率有时也叫做建立受限的三角速率。
帧缓冲器和视频术语
3d图形硬件加速器的两个重要概念是关于帧缓冲器和视频信号格式的概念。术语视频信号格式指用于传输信息至物理图像显示设备(第三重要概念)的形式接口。本段将给出与这三个领域相关的几个技术术语的定义。在本发明的说明书中使用之前,需要这些术语的具体定义。
帧缓冲器
在图形硬件加速器和计算机硬件的其他领域的定义上的区别是:图形硬件加速器涉及组织、处理和转换数字计算机信息为人能够看到的图像。(在这个定义中,图形硬件加速器还包括图像处理硬件加速器的子领域。)尽管与通用计算机连接的最早的物理图像显示设备是各种灯(lights),然后是示波器,自20世纪80年代早期以来,大多数基于计算机的图像显示器与基于帧缓冲器概念的外部输入/输出处理器(图形硬件加速器)相连接。
从主机这一点来看,帧缓冲器通常看上去像主存储器的区域。该存储器进一步组织为固定大小二进制数据(叫做像素)的2d阵列。尽管像素以最小可能的二进制数据大小(一位)开始,随着时间的过去,术语像素也用来定义可能也具有内部结构的较大的物体。基于帧缓冲器概念的的图形加速器不同于之前的图形加速器的地方在于帧缓冲器能够为2d阵列中的每一个位置存储明确的(并且等大小的)像素值。因此,有时帧缓冲器也称为存储像素帧缓冲器,以将它们进一步从没有这种明确的专用存储的替代的图形结构区别开。因为最早的帧缓冲器为每一个像素仅使用一位存储,为了强调人看到的图像中的每一个像素都通过帧缓冲器中单独的专用位来备份(例如,每一“位”被“映射”至不同的可视像素)这一点,帧缓冲器也称为位贴图显示器。
从物理图像显示设备的视频这一点,帧缓冲器是要连续转换为一定格式的视频信号(开始为模拟视频信号,现在越来越多的为数字视频信号)的像素的2d阵列,其格式与要通过视频输出接口作为视频输出信号发送到物理图像显示设备的视频信号格式一致。这就是实际所发生的。像素的2d阵列的宽度和高度成为在物理图像显示设备的屏幕上的点的光栅的宽度和高度,所述物理图像显示设备直到最近很可能是阴极射线管(crt)。
在视频技术中,术语“帧缓冲器”是能够存储(至少)一帧视频信息的设备。在计算机图形中,术语帧缓冲器最初意味着相同的东西,例如,包含用于存储由像素组成的图像的数字存储器的外部输入/输出处理器,其中外部输入/输出处理器能够通过视频输出接口以作为物理图像显示设备的输入的视频信号格式连续发送视频输出信号中帧缓冲器的内容。外部输入/输出处理器连接的主机能够以很多不同的计算机图形算法(包括渲染算法)读取和写入像素。早期的计算机图形帧缓冲器是单缓冲的,例如,它们具有用于存储像素的一个单帧的存储器,而且相同的像素被主机和视频输出子系统同时访问。
但是这些计算机图形帧缓冲器开始添加更多的特征,包括对硬件渲染的支持,并且很快从在视频文献中使用的普通定义中分离出来。在计算机图形学领域中的目前应用中,术语帧缓冲器具有两种原因的应用。一种应用是该术语仍然用来指整个物理设备,例如,指几乎任何图形硬件加速器,不管设备已变得比简单的帧存储器多多少。当图形硬件加速器的物理形式是单个印刷电路板时,在这种相同的情况下也使用术语帧缓冲板。术语帧缓冲器目前的另一种计算机图形学使用是作为较大子系统的特定部分,例如,较大图形硬件加速器系统的帧存储元件。有时这里使用术语样本缓冲器以强调该存储器存储样本而非像素(或除像素之外)。
特定的帧缓冲器能够按照它的内部像素阵列的像素的宽度和高度(也叫做帧缓冲器的分辨率)来表征,该特征还包括帧缓冲器支持的像素的位的大小。因此,用“×”分开的三个数值成为用于描述帧缓冲器的分辨率和像素大小的标准术语,例如,640×480×8是存储图像为640个像素宽480个像素高并且每个像素用8位存储的帧缓冲器。因为这种表示有三个数值,并且前两个数值指宽度和高度,像素大小有时称为像素深度,或者由于这是像素位的大小,它有时也指帧缓冲器的“位深度”。这不要与前面描述的更通用的3d概念相混淆。帧缓冲器还具有第二属性数值,其也可以包括在帧缓冲器性能的特征中,下一个最常用的属性是正在产生的最终视频信号的视频刷新速率。尽管三值特征是描述早期帧缓冲器的好的全面的方式,但由于帧缓冲器变得更加复杂,几乎所有的帧缓冲器都能支持一个像素阵列以上的分辨率、视频刷新速率,甚至一位以上大小的像素。因此,现在常见的是用它支持的最高分辨率来表征帧缓冲器,或者明确列出它能支持的所有重要的分辨率、像素大小和视频刷新速率。
帧缓冲卡
实现帧缓冲器(用于存储图像中每一个像素的单独的专用位)概念的最早的外部输入/输出处理器除此之外很少有其他作用,例如,它们不能“加速”或执行2d渲染,更不用说3d渲染了。它们仅仅是用于存储能够被主机访问和更改的图像的数字表示的存储器,并将该图像作为视频输出信号通过视频输出接口以一定的格式连续发送到crt或其他物理图像显示设备上,其格式与显示设备的视频信号格式一致。因此,这些外部输入/输出设备将主机与物理图像显示设备相结合,例如,将计算机世界中的数字图像与物理世界中的真实光子图像相结合。
因此,这些物理子系统,通常对于通用计算机的子插件卡,经常称为“帧缓冲器”或帧缓冲卡。在本文件中,不带描述词“卡”的术语“帧缓冲器”将不代表与术语帧缓冲卡相同的东西。代替的是,术语帧缓冲器为其他地方定义的含义所保留。(简而言之:较大图形硬件加速器子系统的图像存储元件。)
随着时间的过去,提供这种功能的大多数商业产品在子系统中增加了附加的计算处理。现在正在增加对于2d渲染的越来越多的支持,而且目前这种产品还包括对3d渲染的可观的支持。但是目前将通用计算机与一个或多个物理图像显示设备结合的更复杂的产品通常仍然包括简单的帧缓冲器元件,并能够通过软件方式使用。因此,由于历史的和一些功能性原因,术语帧缓冲卡常用来(有损地)指将通用计算机与物理图像显示设备结合的任何设备,即使执行这种结合的设备是复杂的3d图形硬件加速器。
物理图像显示设备
已经开发了很多种技术并投入外部输入/输出设备的生产,这些设备允许电子系统动态地产生和控制人可见的光子。用术语物理图像显示设备来指这些外部输入/输出设备。通常(尽管不总是)这些物理图像显示设备能够动态地以实时速率产生不同的2d图像序列。在文献资料中,几个常用的较短的术语被用来指(在上下文中)这一类设备,包括:显示设备、图像显示器、图像显示设备和视觉显示器。实际上因为阴极射线管(crt)直到最近是最常用的物理图像显示设备,经常使用其首字母缩略词代替这些其它的术语作为整类物理图像显示设备的类属参考。在本文件中大多数论述不是物理图像显示设备细节,所以在大多数情况下,当需要提及总体系统的这个部件时,将使用类名之一。
对于电子信号向图像的实时序列的转换的给定技术可能以一种以上的方式使用以将光子与人眼相结合。不同的结合方式导致不同的物理图像显示设备子类。三个例子包括(但不限于)直观式设备、放映设备(前面或后面)和头部安装的显示器(hmd)。而且甚至hmd设备可以内部构造为直观式、放映或在人眼视网膜上的直接图像形式。
假如这样,物理图像显示设备的种类包括(但不限于):直观式crt、直观式lcd面板、直观式等离子面板、直观式荧光显示器、基于led的显示器、基于crt的放映机、基于lcd的放映机、基于lcos的放映机、基于dmd的放映机、基于激光的放映机以及头盔显示器(hmd)。硬拷贝显示设备
存在创建和/或控制在某种程度上由人看到的光子的其他方法,但不是动态可控制的一硬拷贝显示设备。因此,纸和胶片打印机可以被认为是非实时显示设备,但这不是本发明的焦点。
视频信号
当表示2d图像序列的信息由在一些媒介中传播的信号传送,并且该信息流的速度是使图像序列以实时速率流过时,该信号称为视频信号。这种信号通常是电子的,其中信息通过电压的振幅变化来传送,媒介是电导体材料。该信号可以是电磁(无线电)波,其中信息通过该波的一些属性传送,媒介是自由大气或自由空间。该信号还可以是光学的,其中信息是通过光的强度改变来传送,媒介是光学透明材料(包括自由大气和自由空间),但它还可以是光学“传导”材料,如光纤电缆。(技术上光只是电磁辐射的较高频率形式,但是因为实际上使用不同的物理材料和设备处理光,所以通常它被认为是不同类型的信号。)
模拟视频信号
数字视频信号
压缩数字视频信号
图像信息的序列可以用许多不同的方式由视频信号表示。直接将图像的小区域的强度映射到视频信号的强度(在某种程度上)的编码称为模拟视频信号。首先将像素(作为图像轮廓的小区域)的强度映射到数字值,再将数字值的位映射到视频信号的强度(再某种程度上)的编码称为数字视频信号。在将数字值的位映射到视频信号的强度(在某种程度上)之前,首先将作为数字像素的图像序列的表示的数字信息压缩至较小尺寸的数字表示的编码称为压缩数字视频信号。
视频信号格式
对于重建包含在作为图像序列的视频信号的这些形式之一中的信息,一些结构和一套约定是必须的(这是问题的核心)。对于这些形式的视频信号中的任何一种,关于如何向和从图像序列的特定结构表示编码和解码的说明称为视频信号格式。
绝大多数用于模拟视频信号的视频信号格式直接源于在20世纪30年代和40年代标准化的第一电视视频信号格式,包括ntsc、pal、rs170、vga、svga等格式。最近使用几种用于数字视频信号的新的视频信号格式,包括d1和dvi。
还有几种用于商业使用的压缩数字视频信号的新的视频信号格式,包括对hdtv的几种不同的变化:1080i、720p、1080p、1080 24p、d10等等。
视频输出接口
视频输出信号
当由第一设备产生一个或更多视频信号,再通过任何对每一个视频信号适当的媒介传输到一个或更多附加的设备时,第一设备将每个视频信号放到物理边界然后信号在那耦接至适当的传输媒介(例如导线、同轴电缆、光纤等)的部分称为视频输出接口。通过视频输出接口传播的视频信号称为视频输出信号。
分辨率
在本文件中,术语分辨率用来指许多不同类型图像的属性,这些图像是:视频输出信号中的图像、用作纹理贴图的图像、渲染进帧缓冲器的图像等。术语分辨率本身指图像作为整体的空间带宽属性,但通常明确表示以整数像素单位测量的图像的宽度和高度。分辨率是抽象概念,它必须应用于某个其他的以有种方式处理图像的特定概念。有时在文献资料中,术语分辨率在上下文中使用而不带任何限定词。在本文件中总会使用适当的限定词。
视频分辨率
视频信号格式的一个属性是它的分辨率,通常表示为一对整数:正表示的图像的宽度和高度,以整数像素为单位描述。应该注意到这些像素可以是或不是正方形。因此,可以使用短语视频分辨率来指这一对数值。
视频信号格式的其他属性包括它的帧速率和隔行交替扫描线的使用以减小视频信号的带宽。偶尔,短语视频分辨率不仅指视频信号格式的像素宽度和高度,还指示视频信号格式是否使用隔行扫描,更少见的是视频分辨率可能包括关于帧速率的特定描述。
帧
视频格式帧
渲染帧
场
隔行扫描
术语帧用于描述当图像序列被实时发送时来自图像序列的单幅图像。当讨论视频帧走过所用的时间周期时,将使用术语视频格式帧来从正在渲染帧(叫做渲染帧)速率的倒数区分视频格式帧速率的倒数。
术语场用来描述视频信号格式的连续部分,其传送关于来自一系列帧中给定帧的图像的一些方面的全局的但是潜在的部分信息。在所谓的先进的视频信号格式中,例如那些不使用隔行扫描的格式,视频信号的每一场也就是视频信号的一帧。对于隔行扫描的视频信号格式的隔行扫描,定义是每一帧分为两个连续的场,第一场包含正传输的图像中像素的所有奇数行,第二场包含正传输的图像中像素的所有偶数行。注意这里语义是微妙的,依赖于隔行扫描的场初始是如何产生的。技术上隔行扫描电视标准规定每一场是完整的单独的图像本身,只是在帧的高度上只有一半数量的像素,从而场的像素是在帧中规定像素的两倍高。因此,快速运动物体的电视帧看上去像从不同的时间点的两个重叠的图像。在其他情况下,两场实际上只是单幅图像的分开传输。当传输初始用与现在发送所用的格式不同视频信号格式创建的视频信号时,还存在其他的复杂情况。例如,当24帧每秒的电影片必须经ntsc视频格式传输时,需要所谓的“3∶2下拉(3-2pull-down)”。
视频信号格式
场序制彩色
场序制立体(field sequential stereo)
隔行扫描的概念不是唯一的导致场与帧不是相同的东西的视频信号格式表示技术。在场序制彩色视频信号格式中,对每一帧存在三个连续的场,每一场包含独有的一种颜色分量,例如,第一场全是要发送的图像的像素的红色分量,第二场是绿色,第三场是蓝色。(当然,可以使用许多不同的顺序或颜色分量表示。)
在场序制立体视频信号格式中,每一帧存在两个连续的场。第一场为左眼传送完整的图像;第二场为右眼传送完整的图像。这两幅图像可以象发送的一样来显示,例如,以快速方式,用一些形式的快门眼镜或在人观看显示的物理图像显示设备上感知视频图像的查看空间隔离效果的偏振或图像角。在这种方式下,对人观看的左眼只有(或通常)左图像是可见的,对人观看的右眼只有(或通常)右图像是可见的,提高了立体感深度感受。替代的,左眼场和右眼场可以被发送至两个不同的物理图像显示设备,然后使用一定的机制以保证正确的图像视觉发送至观看者的合适的眼睛。在大多数hmd的情况中,每一只眼睛具有自己专有的图像显示设备,以便每一只眼睛只看到它自己的显示设备。技术上当使用两个不同的显示设备时,不是在单个物理图像显示设备上快速显示,而是将场序制立体视频信号格式多路传送并在一个视频信号上发送两个不同的图像流。
还应该注意到可以组合多个这种场技术。几种商用hmd已经使用了隔行场序制彩色视频信号格式,其中每帧有六场。
帧速率
视频格式帧速率
渲染帧速率
渲染速率
正在渲染速率
在视频信号格式上下文中,短语“帧速率”用来指特定的视频信号格式速率,当发送图像序列时以该速率发送新的图像。它以每秒发送多少帧为单位来测量。为了避免与图形渲染系统的帧速率的相似但不相同概念混淆,在本文件中通常将使用短语视频格式帧速率。视频格式帧速率通常是取决于视频信号格式的常数。该常数的值是视频信号格式的明确属性。
在图形渲染系统(2d或3d)的上下文中,短语帧速率用来指新图像被渲染的速率。该帧速率应该用每单位时间渲染的帧为单位来表示,通常用每秒渲染的帧为单位。然而,当每秒渲染的帧数低于一时,例如,要渲染的单帧花费一秒以上,那么帧速率往往用渲染每帧的时间来表示,例如,渲染每帧的秒数、分钟数、小时数或者甚至天数。这就是为什么通常硬件渲染往往用每秒渲染的帧为单位来测量,而软件渲染往往用渲染每帧所花费的时间为单位来测量。
为了避免与视频信号格式的“帧速率”的相似但不相同的概念混淆,本文件中通常将使用短语渲染帧速率。正在渲染帧速率通常不是常数,因为渲染给定帧所花费的时间通常是不确定的。然而,作为平均或目标,有时可以不精确地给出正在渲染帧速率估计。在性能关键的模拟应用中,例如飞行模拟,恒定的渲染帧速率是非常重要的目标,并且开发了多种方法来保证图形渲染系统不会在由目标帧速率分配的给定帧上花费更多的时间。还应该注意到有时(在上下文中)短语渲染速率或正在渲染速率用作正在渲染帧速率的较短用语。
场速率
视频格式场速率
在视频信号格式的上下文中,短语场速率和视频格式场速率用来指特定的视频信号格式速率,当发送帧序列时以该速率发送新场。它以每秒发送的场数为单位来测量。
视频刷新速率
再一次由于潜在的短语帧速率的混淆,在本文件中,通常将使用短语视频刷新速率来表示讨论的速率是视频信号格式的(恒定的)属性,不是图形渲染系统的非确定属性。
遗憾的是短语视频刷新速率不具有统一的使用;大多数情况它用来指视频格式场速率,但有时它用来指视频格式帧速率。
视频格式帧速率
视频格式像素速率
视频格式像素频率
在半个世纪以前的模拟视频信号格式中缺少的主要概念是像素的概念。因此当视频信号格式精细地定义垂直速率(场速率)和行速率(水平回描速率)时,没有提及像素速率。在黑白crt上,视频信号是连续的模拟信号,不存在像素或像素边界。
在许多现代的情况中,像素的概念需要添加到老的和新的视频信号格式中。在一些情况下,由于多种原因,像素被以这样的方式定义,使它们为非正方形(矩形),这在许多3d渲染算法上作用不是很好。在大多数现代视频信号格式中,像素被定义为正方形或几乎是正方形(例如在一种情况中6%是非正方形)。不管正方形,一旦像素相对于视频信号格式被定义,我们现在可以在该视频信号格式内讨论像素速率,例如,视频格式像素速率,或如所知的,相当的频率术语视频格式像素频率用Hz测量。
注意在一个视频帧的可见像素的数量和被视频格式像素频率分割的视频格式帧速率之间可能存在不同。这是因为大多数视频信号格式具有水平和垂直消隐时间,其间没有可见像素呈现。图形硬件加速器的像素频率不同部分的正两个不同定义中哪一个必须支持是复杂的折衷,涉及如何缓冲输出像素的独立扫描线的细节,而且是本领域的技术人员所熟知的。
视频格式帧大小
在视频信号格式中单帧内的像素总数是视频分辨率的宽度乘以视频分辨率的高度的结果。这个数值称为视频格式帧大小。在文献资料中,它还指屏幕大小,但是这里不使用这个术语。
物理图像显示设备真实分辨率
用于物理图像显示设备的许多当今较新的技术的图像是从离散像素建立的,例如,不是crt的有效连续的荧光表面。在文献资料中,内建像素的视频分辨率称为真实分辨率,在本文件中,为了清楚,我们将使用较长的术语物理图像显示设备真实分辨率来指相同的东西。
大多数这种设备通常具有一些电子以将具有与物理图像显示设备真实分辨率不同的视频分辨率的视频信号格式转换为不同的视频信号格式,转换后的格式具有与物理图像显示设备真实分辨率相同的视频分辨率。然而,这种转换可能会降低显示图像的质量,所以只要可能,应该规划图形硬件加速器以保证它的视频输出信号的视频信号格式的视频分辨率与物理图像显示设备真实分辨率相同。
对于3d图形硬件加速器的两个附加的非常重要的领域是ic技术和存储器芯片技术。在本发明的说明书使用之前,文件的这一部分将扩展和定义几个需要定义的重要的技术术语。
用于存储位的设备的技术
数字计算机和以前的模拟计算机之间的定义区别是数字计算机表示、存储和处理作为数字位信息的信息的能力。尽管最早的数字计算机使用真空管来存储位,随着五十年代磁心存储器的发明,大多数通用计算机转向磁心存储器用于它们主要的内部位存储需要(所谓的主存储器,现在往往还仍然称为“磁心存储器”,即使目前也使用其他设备)。停留在磁介质上的第二种存储器(磁鼓、磁盘、磁带等),以及非常频繁存取限制大小的存储器(例如寄存器)也从新发明的晶体管建造。晶体管存储器非常快,但也很昂贵;存储单个位需要几个晶体管加几个其他的器件(二极管、电阻器和电容器)。
集成电路
在六十年代早期,发明了制造电路的新技术。集成电路(ic)允许起先若干后来更多的晶体管、二极管、电阻器和其他电子器件在半导体材料的一个小的单芯片的表面上构造和用导线连接在一起。为了本文件的目的,术语ic被定义为与术语“芯片”具有相同的意思,定义如下。
ic的发明使在单个器件中存储若干位成为可能。这对于寄存器是好的,但对于主存储器使用仍然是太昂贵了。
芯片
当今的技术由日益增强的能力驱动用于将越来越复杂的集成电路放到单个硅芯片中。尽管大多数大芯片每一个被放入分开的包中,“多芯片模块”的先进封装技术和圆片规模集成以及其他可能使硅芯片与包装的一对一关系模糊。另外,尽管大多数目前的电路是在硅芯片之上制造的,现在也使用硅以外的其他材料,而且将来会看到更多的使用。因此,对于本发明来说,术语芯片不打算限制本发明的范围为只是由硅制造的芯片,或必须是单块材料。术语芯片可以(在上下文中)仅指实际的基片材料和加在它的表面上的电路,或者更经常的使用是指包括大多数芯片嵌入其中的封装的整个物理部分。
引脚
信息(包括数字和模拟)以及电源、时钟和参考电压通过许多从芯片的封装延伸的隔开的电子导线管引至单个芯片或从那引出。在日期很早的芯片封装技术中,这些电连接是各个金属引脚,例如,在真空管的底部出现的。在20世纪60年代至90年代用于芯片的大多数封装技术,以及现在仍然使用的一些技术,是金属引线框,它们在芯片封装的边缘弯曲,形成锐利的窄金属片,它们仍然称为引脚,尽管其形式已经不再总是圆柱形。更近的芯片封装技术除此之外包括所谓的“球栅阵列(ball-grid-arrays)”,其中至芯片的外部电连接是金属半球,除此之外还有其他形状。然而,这些金属片通常仍然称为引脚,尤其当讨论源于芯片形成的电子系统的整个结构设计时,以及当与封装的真三维形式的非常具体的细节不相关时。在本文件中,术语引脚将用来指连接封装内的电子至封装外的世界的各个导线管。
芯片具有的引脚数目是成本/性能的折衷。芯片中引脚越少,通常硅芯片以及封装的成本越低,并且芯片的能量消耗也将越低。但是芯片具有的引脚越多,通常入出芯片所能达到的数据带宽越高。因此,通常减少芯片间流量所需带宽的设计决定将使得允许芯片具有较少的引脚。另一方面,芯片具有的引脚越多,通常在包含该芯片的任何系统中所能达到的潜在性能越高。这些折衷的平衡通常在系统级上由系统结构来执行,作为在最小化系统的成本而最大化系统的性能的其他折衷的部分,相对于目前和预想到的将来系统产品针对的各个市场段的成本和性能敏感度。
asic
术语asic是“类用集成电路”的首字母缩写。对于本发明来说,术语asic指设计用于特定的专门目的的芯片,例如执行计算机图形算法,相对于设计用于宽范围使用的更通用芯片。术语asic不打算限于用少于“全定制”ic设计工具设计的芯片,例如门阵列、可编程门阵列等。
fifo
术语fifo是“先入先出”的首字母缩写。在电子硬件的上下文中,它指灵活存储缓冲器,其使固定大小的位组以非相关脉冲进入和离开。当发生装置以非预定的速率产生数据而消耗装置以不同的非预定速率消耗数据时,fifo缓冲器用来接合特定类型数据的发生装置和该相同类型数据的消耗装置。许多类型的fifo缓冲器在fifo缓冲器的变化的内部条件下具有发送警告信号的能力,尤其是“高水位标记”警告信号指示存储容量在特定的将要耗尽的预设限度内,例如将要溢出。
尽管初始fifo是作为独立的芯片制造的,现在,大多数fifo只不过是另一种小的电路,其可用于单个ic上较大电路的设计中任何地方。
ram
术语ram是“随机存取存储器”的首字母缩写。该术语用于区分对于不以特定的预定顺序存取它们的内容只具有极小的或没有性能损失的存储器,这种性能损失在其他类型的存储器中是存在的。在大多数情况下,将指特定类型的ram元件。
存储器芯片
ic使得制造包含一比特以上信息的单芯片成为可能。这产生了新种类的元件,用术语存储器芯片来表示。这个术语指大量设计用于存储、检索并且有时处理表示为比特的信息的通用和专用芯片。这个术语是个重要的术语,因为本发明很多涉及组织和使用存储器芯片的特殊方式。
最早的存储器芯片在芯片上具有比内部的存储位更多的引脚,因此可以直接从芯片外部或多或少的访问这些位。但是由于能够嵌入芯片的位数实质上超过可经济地附加到芯片的引脚数,需要一些形式的内部多路复用。这种多路复用技术已经设计用于基于磁芯的存储器系统:通过首先提交内部地址(不过是位串)从存储器内读取或写入数据,然后由该地址存取相关的位。这种形式的存取位意味着存储器芯片是一种类型的ram。
现代的存储器芯片出现了多种子系统,后面将论述。在说明本发明时,大多数情况下将指特定类型的存储器芯片。
局部存储器子系统
在大多数存储器芯片的应用中,使用了一个以上的存储器芯片。这种存储器芯片集合经常被认为是单个的更复杂的存储器系统。这种存储器芯片集合可以全部连接至单个控制芯片,或者控制阵列可以连接至一个以上的芯片。不论连接非存储器芯片的数目,在本文件中该集合都将指局部存储器子系统。
在简单的情况下,局部存储器子系统可以被看作复合实体,其作用很像单个存储器芯片,如果它具有较宽的字长和/或较大的存储容量。
特别地,共享除了数据输入/输出引脚的几乎全部控制线的两个相同的存储器芯片,看起来很像单个存储器芯片,具有实际存储器芯片两倍的字长,并具有两倍的存储容量。
共享包括数据输入/输出引脚的几乎全部控制线的两个相同的存储器芯片,看上去很像单个存储器芯片,具有实际存储器芯片相同的字长,但是具有两倍的存储容量。
上两段的组成技术都可以用于创建另一种类型的局部存储器子系统。四个相同的存储器芯片共享几乎全部控制线,但是只有一半存储器芯片共享数据输入/输出引脚,看上去很像单个存储器芯片,具有实际存储器芯片两倍的字长,并具有四倍的存储容量。
很清楚,这些存储器芯片组成技术可以扩展以组成局部存储器子系统,其具有实际存储器芯片的m倍字长和m×n倍存储容量,使用总计m×n个这种实际存储器芯片。这就是许多局部存储器子系统传统上是如何创建的。对于组成技术存在技术限制:在能够由另一个芯片的单个引脚驱动的存储器芯片或控制芯片上都存在芯片引脚数目的限制。还有比这里描述的更复杂的将多个相同或不相同的存储器芯片组合成局部存储器子系统的方法。
局部存储器子系统的论述与本文件相关,因为3d图形硬件加速器的结构经常包括一个或多个不同的局部存储器子系统的设计,这尤其是这里所描述的本发明的情况。
字长
在但个存储器芯片的特殊情况下,术语字长指能够并行移动至或从存储器芯片的数据位数,在大多数情况下,这是附加到存储器芯片的输入或输出数据引脚的数目。当大量存储器芯片被认为是一个整体时,如在局部存储器子系统中,短语字长指能够并行移动至或出存储器组的数据位数,并且不限于仅仅一个存储器芯片上的引脚数。
sram
尽管存储位现在都在一个存储器芯片上,每一个存储位仍然需要几个内部晶体管来存储和允许对每一位的读取和写入存取。当存在几种不同的方式建立这种存储的存储器芯片时,像这样外部存取的多位存储器芯片叫做静态随机存取存储器,或简称sram。这些存储器芯片既由它们能够内部存储的总位数来表征(例如,256K比特sram),也由提交地址后在存储器芯片引脚上可用的全部位数来表征:存储器的字长。因此一比特宽的装置也称为“256K×1sram”。这个术语可能与表征帧缓冲器分辨率的术语混淆。关键的不同在于存储器总是用一个或两个乘数来表征,例如,256K或64K×4;而帧缓冲器分辨率通常用三个乘数表示,例如,640×460×1。偶尔当像素的大小不重要时,并且从上下文清楚正在讨论帧缓冲器或视频分辨率时,可能使用两个乘数:例如,vga分辨率为640×480。
dram
在20世纪70年代早期,发明了用于存储数据位的新的电路,存储每位只需要一个晶体管。折衷是该比特只在丢失其值之前稳定地保留几分之一秒。因此这些存储器芯片必须在一秒内读取和重写或刷新所有位几次。这种新类型的存储器芯片叫做动态随机存取存储器,或简称dram。
正是相对不太昂贵(每比特存储)的dram的引入使得帧缓冲器的概念商业化成为可能。帧缓冲器的出现也促进了dram的设计;因此存储像素帧缓冲器和dram结构和技术是共生发展的。
vram
80年代中期,dram生产商(包括TI)将它们产品的很大比例卖给了专业的帧缓冲器公司。但是在从16K×1容量的dram向64K×1容量的dram过渡期间发生了一件奇怪的事情。帧缓冲器公司,通常是在直线上第一个要求得到新的dram的原型部件的,却不要求任何的64K×1的dram部件。在这个速率上,将不再销售64K×1的dram部件至这些公司用于建造高端的帧缓冲器。
dram的密度的增长已经大大快于数据存取带宽。关键测量是存储器芯片的带宽(以位每秒测量)与存储器芯片的总存储容量(以位测量)的比。
一个解决方案是具有第二组数据引脚的特殊dram,其能够并行存取内部存储器至标准数据引脚。这个观点是该第二组存储器数据引脚或第二“存储器端口”能够用来完整的并行读出视频输出信号所需的数据至dram的更标准的读写存取。因此该第二存储器端口通常称为“视频端口”。这通过增加可观的更多的(但是专用的)带宽打击了dram芯片带宽问题的中心。这些部件称作vram,是对于“视频随机存取存储器”的首字母缩写。通常它们能够内部存储像“当前”代dram一样多的位。但是vram芯片的物理尺寸通常是能存储与vram所能存储的相同位数的dram的两倍大。需要这个额外的芯片面积来支持第二存储器端口(“视频端口”)。这使得vram芯片每位存储比相当的dram部件更昂贵。然而,这些部件对于制造商建造用于图形终端或嵌入工作站的帧缓冲器是相当经济的产品,所以大多数高端计算机和显示器公司都使用它们。在80年代中期至90年代早期,PC仍然使用具有低视频格式像素速率的低像素深度vga帧缓冲器,并能够构造使用标准dram的更廉价的设计。
目前显示器技术仍然几乎独占地是基于crt的。crt的分辨率从与电视标准一样开始:640像素宽乘484像素高,每秒刷新30次,使用隔行扫描视频信号格式。这些视频信号格式要求每秒约1200万像素的视频格式像素速率。在该时间帧上,20世纪70年代后期至80年代后期,crt技术仍然在分辨率上提高。下一个分辨率目标是显示大约100万像素的图像。在这一点上,没有强的高分辨率标准,所以销售了许多不同的视频信号格式。1024像素宽1024像素高,每秒刷新30次,使用隔行扫描视频信号格式就是一个好的例子。这种视频信号格式要求约每秒4000万像素的视频格式像素速率。但是使用这些设备的大多数人不喜欢观看隔行扫描视频信号格式,因此大多数新的视频信号格式不得不使用非隔行扫描视频信号格式(现在叫逐行扫描),即使这意味着对于给定的视频分辨率,视频格式像素速率必须达到如果使用隔行扫描视频信号格式的两倍或更高。而且,较老的电子设备具有视频格式帧速率必须与美国使用的电源的60Hz(在欧洲和世界上一些其他地方是50Hz)的AC频率直接相关。现在使用帧缓冲器的人希望视频格式帧速率至少为66Hz,实际上欧洲的劳动协约要求刷新率为72Hz、76Hz,并且现在一些情况下为84Hz。所有这些意味着帧缓冲器必须支持多大的视频格式像素速率?这时一个常用的视频信号格式是1152像素宽乘900像素高,每秒刷新66次。该视频信号格式要求视频格式像素速率约为每秒8400万像素。另一种常用的视频信号格式是1280像素宽乘1024像素高,每秒刷新76次。该视频信号格式要求视频格式像素速率为约每秒13500万像素。
3dram
3dram在vram上放置了两级sram高速缓存,从传统的异步接口变成了流水线定时同步接口,总共32位宽,并将Z缓冲器比较移至vram上。目前的dram、sdram与sdram非常像:它使用同步流水线定时接口和芯片上的小sram高速缓存。3dram的不同在于具有(小芯片面积)视频输出端口用于z缓冲的特殊的算数逻辑单元(alu)和帧缓冲器OP。
3dram在可用性能上产生了大的改变。
B.几个实施例
本文件描述了用于低成本、极高性能、实时3d图形产品的可缩放结构的技术。当技术上很高的,在相对高层次上提交信息时,例如,不会给出位域名字和大小的各种细节。
引入了新的产品概念,图形板(GraphicsSlab),作为目前和将来通用计算机产品的非低端3d图形要求的解决方案。图形板是自我包含的子系统,其使用工业标准输入/输出接口以连接至一个或更多主机。图形板的物理封装将典型的是可机架安装的底架,具有小的几U高度,比如说2U。本文件描述了新的3d图形硬件结构,称为环路(Loop)结构,其非常适合建造图形板产品。环路结构对于将多个图形ic连接在一起形成高端3d渲染系统的方式提出了全新的解决方案。对于在IC设计、IC封装、IC互连和dram产品技术中由目前和计划的将来几年的趋势提出的技术限制(“实现”)以及高端3d图形应用和用户的特殊要求,由环路结构所采用的方法是完美的解决方案。
从3d图形结构和存储器技术的一些背景信息开始,环路结构本身将作为对建造高性能3d图形硬件加速器产品的主要技术问题的一系列方案来描述。
新结构的发展
当你在买dram时,你买的是存储位。但是你也买了带宽。从dram读取和写入位所花费的时间将是不同的,一定程度上取决于存取模式,但是存在测试情况的上限。
当你制造asic,并将asic的一些引脚连接至单个dram芯片的引脚时,你定义了该dram的带宽上限。
但是如果你将两个dram芯片连接至单个asic会怎样呢?该asic的可用存储器带宽上边界会是它连接的存储器芯片的两倍吗?答案是它取决于三种不同的将两个dram连接至一个asic的有用技术。
第一种技术是对于asic使用全部新的引脚连接第二个dram芯片,例如,任一个dram的引脚都不连接至asic的相同的引脚。这种方式确实使asic能够连接至dram芯片的上限带宽加倍。不利方面是必须将asic用于与dram会话的引脚数加倍。
第二种技术是对于asic只使用一组引脚与地址和两个dram的控制引脚会话,而asic使用现有的引脚与第一个dram的数据引脚会话并增加新的引脚与第二个dram的数据引脚会话。这种方法在asic上使用比第一种技术较少的引脚,并且最大带宽仍然是双倍的。然而,包含两个dram芯片的局部存储器子系统的字长是第一种技术的两倍。如果从dram芯片发送和接收时asic不需要使用该较宽字的所有位,那么有效带宽会降低。
第三种技术是对于asic与两个dram共享全部引脚(除了dram“芯片有效”引脚)。该技术将asic用于和dram芯片会话的引脚数最小化,但是asic能够用于连接dram芯片的上限带宽一点也没有提高;它停留在与单个连接dram的情况相同的带宽上。
这三种技术沿最大化可用带宽与最小化必须添加到asic的引脚数之间的折衷曲线形成了三个不同的点。但是如果我们将四个dram连接至asic会怎样呢?八个dram呢?十六个dram呢?答案是当连接两个以上的dram时上述三种技术的不同组合可以以更复杂的方式同时使用。很清楚在某点上,任何asic都将用完可能经济的添加到单个芯片的新的引脚。在大多数应用中,存在一种限制,越来越宽的字宽具有越来越少的可用位,因此可用带宽不会像字宽一样增加的那么快。还存在能将多少引脚连接在一起而不降低存储器读写速度的限制。对于这个问题没有正确的选择;选择是在较大系统的系统设计之上的较大折衷组的部分,asic和dram是该较大系统的一部分。
再一次,在任何给定的时间点,存在asic能够经济地具有的引脚数的限制。这些限制由当前的封装技术和能够用于引脚连接位置的asic芯片面积的数量共同施加。因此,在减少一些引脚而不是连接至dram之后,在给定的时间点封装和dram技术限制了单个asic与dram会话的可用带宽的最大数量。
尽管总是存在一些灵活余地,通常在算法(例如3d渲染算法)性能和存储器存储的可用带宽之间是近乎线性的关系。因此,如果你定义了具有一定数量的附加dram的像单个asic的产品,存在在可获得的最大渲染性能周围的硬包装。
根据本发明的一个实施例的新的环路结构将纹理存储和帧缓冲器存储布置在相同的存储器库中。在这个实施例中,每一个环路绘制芯片具有大量的附属标准低成本dram芯片,它们用于存储帧缓冲器的一部分以及当前纹理的完整(冗余的但是局部的)拷贝。
综述
图1显示环路结构的例子。在环路结构中,如图1所示,每个环路芯片以单向、点对点、局部方式经高速环路链接接口125连接至邻近的环路芯片。
基本环路结构互连
标记“D”的环路芯片是环路绘制芯片110。标记“M”的盒子是存储器115,例如存储器芯片。这些存储器在一个实施例中是dram,但在其他的实施例中可能是其他形式(明确包括sram)。标记“I”具有指入指出箭头的芯片是环路接口芯片105。环路接口芯片105优选地包括主接口输入/输出和环路接口输入/输出。显示的拓扑允许3d图形渲染结构。下面更详细的描述环路结构。
图2显示十六个环路绘制110芯片和两个环路接口芯片105配置的各国那详细情况。每一个环路绘制芯片110在它的局部附属dram115中包含帧缓冲器的1/16。该帧缓冲器由规则的4乘4像素网格分割,每一个环路绘制芯片在该4×4网格内对它的分配的像素执行其操作。在示意图中,以4×4模式填充的像素显示哪一个像素交错属于哪一个环路绘制芯片。也是在图2中显示的,每一个环路绘制芯片在它的局部dram中具有它专有的全部系统纹理的完整拷贝。示出了两个环路接口芯片以支持后面将描述的系统选项。
为了概括图1和图2的综述,在n个环路绘制芯片的每一个的局部存储器子系统中,帧缓冲器被分成非冗余像素交错,以便将样本填充速率最大化,提供比在单图形芯片系统上可达到的高出约n倍的样本填充速率。在n个环路绘制芯片的每一个的局部存储器子系统中复制纹理存储,以便最大化纹理提取带宽:比在单图形芯片系统上可达到的约大n倍的读取带宽。
对芯片的图形操作贴图
对环路芯片图形驱动基元的主图形驱动命令从主机经在环路芯片上的主接口进入。在处理图形驱动基元之后,环路接口芯片将它们(在其他图形命令中)转换为图形基元序列。环路接口芯片将该图形基元序列的一些子串分配给特定环路绘制芯片,然后将图形基元作为环路包沿环发送出去,其中图形基元环路包从环路芯片跃至环路芯片直到它到达它的目标环路绘制芯片。在那,该环路包被处理并不再沿环发送。状态改变被作为多播环路包沿环发送,例如,环路包将(潜在地)被环中的每一个环路绘制芯片处理,并(潜在地)被除了最后一个的全部环路绘制芯片转发。在优选实施例中,环路接口芯片使用负载平衡方法将图形基元命令分配给特定的环路绘制芯片(也叫“图形芯片”)。其他实施例使用其他适当的方法,如循环法。
从环路接口芯片至每一个可能的目标环路绘制芯片的单播图形命令环路包的路径
图3显示从环路接口芯片至可能的目标环路绘制芯片的单播图形命令环路包的最长和最短路径。圆弧302表示从环路接口芯片105到它最近的环路绘制芯片110的虚拟“直接路径”,单播图形命令环路包顺其前进。圆弧304表示从环路接口芯片105到它最远的环路绘制芯片110’的虚拟“直接路径”,单播图形命令环路包顺其前进。实际路径优选地包括多个跃距,从环路接口芯片开始并按逆时针方向继续,通过其必经的那么多的环路绘制芯片,直到到达目标环路绘制芯片。为了清楚起见,没有显示在环路接口芯片105与其他环路绘制芯片之间的路径。
注意:通常,在环路结构中,在环周围的单向数据流是任意选择总显示为按逆时针方向流动的。关于这种选择没有什么特殊的。在其他实施例中,与此相反,流动方向可以是顺时针的。实际上,后面将显示在双环中同时包含顺时针和逆时针流的一些实施例。
如果发送了多播图形命令环路包,它将沿着最长的单播环路包路径流动,例如,环路包离开环路接口芯片,进入第一环路绘制芯片110并被其处理,然后通过它到达下一个环路绘制芯片,直到到达环中最后一个绘制环路芯片110’。(单播和多播环路包及它们的控制与路由将在下面详细论述。)
图形命令包的环路绘制芯片处理
当图形基元(比如说三角)到达分配的环路绘制芯片时,环路绘制芯片将大多数3d图形渲染管线应用给它。例如,三角优选地被转换、剪辑检查(clip checked)、可选地在需要时被剪辑、顶点着色、扫描转换(光栅化),然后每个产生的像素被提交给通常包括纹理和光处理的可编程像素着色器。
投影三角的屏幕空间边界与Z的平面方程一起被多播发送至所有的环路绘制芯片。由像素着色器处理产生的各个像素然后被转变成绘制像素环路包并在环路链接上发送出去,具有分配的目标环路绘制芯片。注意特殊情况中目标环路绘制芯片是光栅化基元的芯片。在这种情况中,环路包在局部消费,不再经环路链接离开。
从环路绘制芯片至每一个可能的目标环路绘制芯片的绘制像素环路包的路径
图4显示绘制像素环路包流经的从第一环路绘制芯片至每一个其余的目标环路绘制芯片的最长和最短路径。圆弧402表示从环路绘制芯片110到它最近的环路绘制芯片110”的虚拟“直接路径”,单播图形命令环路包顺其前进。圆弧404表示从环路绘制芯片110到它最远的环路绘制芯片110’的虚拟“直接路径”,单播图形命令环路包顺其前进。实际路径优选地包括多个跃距,从第一环路绘制芯片开始并继续通过其必经的那么多的其余环路绘制芯片,直到到达目标环路绘制芯片。为了清楚起见,没有显示在环路绘制芯片110与其他环路绘制芯片之间的路径。很重要的是注意绘制像素环路包必须经过的芯片跃距平均数值是环总长度的一半。对其他的15个环路绘制芯片可以画出相似的图;它们的路径看起来是相同的,只是每一个逆时针旋转至一个后继的环路绘制芯片,并都包括沿着路线穿过两个环路接口芯片的两个跃距。
绘制像素包的环路绘制芯片处理
每一个环路绘制芯片的附属存储器包含对于帧缓冲器的像素的1/n的全部样本,其中n是在系统中的环路芯片的总数(n典型地是16)。这是帧缓冲器存储的传统2d交错。这就是特定的光栅化像素是如何分配环路绘制芯片目标的。如果合适,在多像素级上也可发生交错。
当绘制像素环路包到达它的目标环路绘制芯片时,在也在当前图形基元(在我们的例子中三角,边界是较早多播的)边界内的该像素内的所有样本被进行可能的内插计算,以确定它们在特定样本位置的值,然后提交给条件样本更新函数。内插可以在样本成分上由样本成分基执行或不执行。例如,在一个实施例中,Z样本成分值的内插值可以通过应用之前的Z的多播平面方程来计算。在一个实施例中,根本不内插颜色样本分量值,例如,它们在像素或像素的部分之内平填。条件样本更新函数是由现有的在芯片上的状态值以及在绘制像素命令内的可能的条件控制位共同控制的,例如允许和禁止Z缓冲检查和其他检查。
视频输出信号的产生
将产生视频输出信号的数据流的产生是由环路接口芯片开始的。环路接口芯片发送视频像素环路包至连接到它的第一环路绘制芯片,该第一环路绘制芯片然后以帧缓冲器的交错方式存取贡献给第一视频输出像素的样本,并发送该部分和至下一个环路绘制芯片。每一个环路绘制添加它的贡献,当全部都已贡献了时,视频输出信号从视频输出信号引脚离开(可能不同的)环路接口芯片。在一个实施例中,通过向环增加环路接口芯片的附加例子来支持多个视频输出信号。在产生视频输出信号的处理中,通过向显著大于样本的一个像素面积的面积应用高质量抗混淆滤波器来实现全屏幕抗混淆。尤其是,在全视频输出信号视频格式像素速率上,可以支持几乎任意的4×4抗混淆滤波器(例如Mitchell-Netravali滤波器族)。
从环路接口芯片经过全部环路绘制芯片并返回初始环路接口芯片的视频像素环路包的路径
图5显示从特定的环路接口芯片获得所有的视频像素环路包用于抗混淆和产生至视频输出接口的视频输出信号的路径。尽管在该示意图中,相同的环路接口芯片既开始又结束视频流的产生,但在至少一个实施例中,开始和结束环路接口芯片不是同一个物理芯片。
从渲染至多个纹理存储器拷贝的纹理的产生
纹理的产生与如何产生视频输出信号的处理相似,但当完成时不是离开环,而是像素流继续在环周围一秒钟时间以在(允许的)环路绘制芯片的每一个中局部存放。正常情况下,当这个进行时,没有新的图形命令环路包流经环,所以可由图形命令环路包和绘制像素环路包占用的带宽对于纹理装入是自由的并可用的。视频像素环路包也流动,并具有优先权。
由主机读回渲染结果
读回渲染结果与读回产生视频输出信号相似进行,除了当完整的组合像素流到达目标环路接口芯片时,结果从它的主接口而不是它的视频输出接口引脚(之一)出来。(而且,当传输至主接口时,保证视频输出信号随任何中断提供给物理图像显示设备的一些实时限制通常可以放松一些)
从主机至环路绘制芯片拷贝的纹理传输
纹理从主机经环路接口芯片进入环中,然后分发给环上每一个环路绘制芯片以将拷贝拉入局部dram存储器中。正如局部纹理产生,当进行纹理下载时,通常不进行绘制,因此对于纹理传输可用带宽不是分配给图形命令的标准带宽,而是通常分配给绘制的相当大的带宽。实际上,纹理传输与产生视频输出信号的环业务共享环带宽。
结构的优点
这一段说明环路结构的几个优点。
两芯片类型
尽管环路结构支持高端至特高端3d图形产品,在一个实施例中,环路结构仅要求设计和制造两个不同的自定义芯片来生成产品,具有绘制芯片中的大多数复杂性。这与当使用常规方法设计用于高端和特高端3d图形市场的产品时所需要的大量自定义芯片类型形成明显的对比。
全部单向、短的、局部通信
不像其他的高端结构,环路结构不需全局总线或长线就能实现。这是因为全部内部系统通信都是点对点的、单向并在使用环路链接的短的物理距离上。
着色器可用的大量并行处理
可编程着色器变得越复杂、强大和(希望的)可靠,就需要越多的程序步骤和纹理提取来执行可编程着色器。对于基于单芯片的3d图形硬件加速器,或者实际上任何基于一定数量芯片的3d图形硬件加速器,在给定复杂性之后,可编程着色器变得越强大,整个图形硬件渲染系统将变得越慢。通过对比,由于环路结构被设计成单路扩展,只要增加更多的环路绘制芯片,可编程着色器的能力就能以相同的比例增长,而没有性能损失。因为在对基于任何当代单个芯片的3d图形硬件加速器的3d图形渲染能力的可编程着色器能力中,单个环路绘制芯片将可能是最小可对比的,使用16、32或64或更多环路绘制芯片的基于环路结构的系统的能力在字面上将比那些基于当代单芯片的3d图形硬件加速器强大一到两个量级。
主机互连的多个选项
环路结构这样设计,使在(单个)环中任何地方都能定位单个环路接口芯片,代替的是,在相同的(单个)环中,两个、三个、四个或更多环路接口芯片能够进入相同的位置。由于每个环路接口芯片具有它自己专用的主接口,建造能够连接至多个主机的基于同等单环环路结构的3d图形硬件加速器是容易的。通过例子最好地说明了这种能力给予基于环路结构的3d图形硬件加速器的优点。考虑具有几个非常强大的计算机系统的3d图形硬件加速器的科学计算终端用户。他们具有的特定计算机系统越强大,具有直接与那个计算机连接的3d图形资源就越有用。但是最强大的计算机倾向于往往被分配用于执行对于单个工程的大的批处理任务,一次要运行几小时到几天。不是所有这些大的任务都需要交互式3d图形;实际上许多这样的任务使用3d图形来检查大型计算完成之后的结果。如果特高端3d图形硬件加速器一次只能物理地连接至单个计算机,当运行任何大的非使用3d图形的任务时该3d图形硬件加速器对任何使用都是不可用的。但是通过基于环路结构的3d图形产品的能力同时物理地连接至两个或更多计算机,即使一次只有一台计算机可以使用3d图形硬件加速器,该3d图形硬件加速器能够被充分利用,即使其他任务先占用了计算机(或因维护停机等)。
使用多个环路接口芯片的另一种方式是将几个不同的环连接在一起成为单个大的3d图形硬件加速器,并共享一个(或更多)主接口。这允许建造特大规模的3d图形支持系统,包括那些同时可以支持多达一打或更高分辨率的物理图像显示设备。(好的适合是具有与你具有的独立的高分辨率物理图像显示设备一样多的独立的但连接的环。)这种大规模的系统实际上是高端的基于沉浸式(immersive)投影的虚拟现实显示系统(CavesTM和Virtual PortalsTM)。
基于高质量超级采样的算法支持
当系统能够支持每像素大量采样时,3d图形硬件加速器支持几种高质量特征。首先和最重要的时对高质量抗混淆滤波器的支持。由于视频输出信号沿环组合的方式,对于小的额外带宽和内部处理,大面积的抗混淆滤波器可以被应用在视频输出信号视频格式像素速率上。动态视频调整大小的特征自然从这类视频结构中退出。如果重采样光栅像素中心位置不是简单的矩形光栅阵列,而是沿局部控制的样条曲线的点,那么各种视频图像校正操作不参与。如果使用不同的样条重采样红、绿和蓝像素,那么甚至色差失真都能在适当的预通带空间被校正。其他由到采样密度支持的效果包括各种形式的模糊(运动模糊、场深度)、特殊溶解等。
具有同样两个芯片的可能的多个差异产品
有意地,两个基础芯片环路结构类型、环路接口芯片和环路绘制芯片的设计允许使用不同数量的这些芯片来建造完整功能的3d图形硬件加速器。例如,可以用两个芯片“按现状”而不用任一个芯片需要的“重新设计”来组装不同尺寸的商业产品。只需要不同的PC板设计以生成差异产品。在当今的快速改变的市场中,这种快速和廉价的商业化具有不同成本和特征的产品的能力是重要的优点。设计3d图形硬件加速器的常规方法通常要求为了相似的市场适应性而改变主芯片本身(对市场在工程和时间上是非常昂贵的)。
即使就单个1U或2U可机架安装的封装产品,将多个图形板与外部电缆连接在一起的能力允许支持许多自定义配置而无需在基础硬件产品中的改变。
支持超大容量的纹理存储器
通过给每一个环路绘制芯片加上大量的dram,和/或向每一个环路绘制芯片分配纹理的不同区域(对体积纹理合理的进行),能够容易地支持对系统纹理贴图的较大内部。
在上述本发明的实施例的论述中使用的特定术语将在下文进行解释。
图形驱动命令
如在术语图形驱动的定义中所述的,应用软件极少直接连接图形硬件加速器。通常实现一个或更多计算机图形渲染api的附加的主机软件(图形驱动)是置于应用软件和图形硬件加速器之间的。对图形驱动软件,应用软件进行软件子程序调用,该调用遵守如由计算机图形api所述的软件接口标准(例如,语言绑定)。图形驱动软件将这些子程序调用的每一个和与该子程序调用直接或间接相关的任何数据看作是执行一些渲染或其他计算机图形相关任务的命令。然后图形驱动软件可以将隐含的任务转化为图形硬件加速器能够理解的形式。这并不是说图形驱动软件必须简讯哈由应用软件发送的每一字节数据。一些应用软件调用可能包括一个或多个对成打至几百万字节或更大尺寸数据区的指针;图形驱动软件可以只是将这些指针传给图形硬件加速器。这对可以进行主机的主存储器中数据的直接存储器存取(dma)的图形硬件加速器是相当常用的。
术语图形驱动命令指由图形驱动软件在将计算机图形渲染api调用转化为图形硬件加速器能够理解的信息时创建的所有信息的集合。
图形驱动命令信息集合被细分为两个不交叠的信息子集:图形驱动状态和图形驱动基元。注意:图形驱动命令、图形驱动状态和图形驱动基元这三个术语都指信息集合或包,当指来自这些集合之一的未命名信息时,数学上的措辞应该是“来自图形驱动命令信息集的信息”,但是习惯上使用更清楚的“图形驱动命令信息”来表示相同的东西。
图形驱动状态
术语图形驱动状态指图形驱动命令信息的子集,其成员信息变化或更改渲染状态,但本身不规定几何图形基元或在这时直接引起任何附加渲染。在一些实施例中图形驱动状态信息的例子是那些设置当前颜色、或设置当前变换矩阵之一或改变当前抗混淆滤波器的方面的信息。
图形驱动基元
术语图形驱动基元指图形驱动命令信息的子集,其成员信息规定几何图形基元和/或在这时直接引起任何附加的渲染。在一些实施例中图形驱动状态信息的例子是那些规定定义要渲染的三角的全部三个顶点、规定定义要渲染的直线的两个顶点或规定定义要渲染的点的单个顶点的信息。
环路
术语环路指作为本发明的主题的图形硬件加速器结构。将经常使用短语“在环路结构中”或类似的短语来表示这种内容。(注意本发明在它的更复杂的拓扑中超出了单环结构的拓扑,但术语环路也意欲包括这些拓扑。)
环路芯片
术语环路芯片指设计作为环路结构的实现的部分的任何自定义芯片类型。在一个实施例中,存在两种环路芯片类型:环路接口芯片和环路绘制芯片。其他的实施例可以定义附加的和/或不同的自定义芯片类型。一个替换实施例明确地定义了只有一种芯片类型组合成单个芯片,具有在两种芯片类型的实施例中定义的两种芯片的许多功能性。
环路链接
环路链接输入端口
环路链接输出端口
术语环路链接指特殊的单向高速环路芯片至环路芯片数据互连。在一个实施例中,通过两组特殊的标准化ic板驱动和封装多引脚接口支持环路链接,即环路链接输入端口和环路链接输出端口。
环路链接用于从一个环路芯片向另一个环路芯片传输数据包。在一个实施例中,在环路链接上传输的数据应该通过在传输中嵌入的纠错码(ecc)来保护。如果环路芯片类型能够链接进由环路结构定义的正式环结构之一,那么该芯片类型支持至少两个这样的端口:逆时针环路链接输出端口和顺时针环路链接输入端口。
给定的环路芯片可能不总是在以下状态:其能够接收在它的环路链接输入端口上传输到它的附加的环路包。因此,环路链接子系统的部分应该包括交换信号,其中,具有它想要经它的环路链接输出端口发送到第二环路芯片的环路链接输入端口的环路包的第一环路芯片能够提前知道是否第二环路芯片在或不在以下状态:准备好在它的环路链接输入端口上接收新的环路包。
在一个实施例中,信号交换协议用门控制通过环路链接的环路包的传输而不管环路包的类型。在另一个实施例中,环路包类型可以被分解为几个不同的环路包类型子组,并且信号交换协议将为这些子组的每一个分别显示具有作为环路包类型特定子组成员的类型的环路包是否被允许通过环路链接。
环路接口
在本发明的一个实施例中,环路接口芯片是这样一种环路芯片:具有至少一个用于连接至主机的主接口以及至少一个逆时针环路链接输出端口和一个顺时针环路链接输入端口。在一些实施例中,环路接口芯片还具有至少一个视频输出接口。使用这些约定,在简单的环中,几乎全部数据逆时针环绕环路芯片的圆周流动。特定的流动方向只是一种约定;不同的实施例可以选择不同的约定。不是所有的实施例都包含顺时针和逆时针环路链接输入端口。
在主机上,图形驱动产生图形驱动命令,它们在主接口上被发送至环路接口芯片。一旦到达,环路接口芯片处理这些图形驱动命令,在许多情况下,产生大量环路结构内部信息,它们要通过各种其他接口从环路接口芯片被发送至其他的环路芯片。
在一个实施例中,环路接口芯片还包括只是一个可编程视频信号格式定时发生器,它可以通过它的环路链接输出端口发送出一串视频像素信息环绕该环路链接输出端口连接的环。在相同的实施例中,该定时发生器的第二级能够通过环路链接输入端口接收已经流经环的视频像素信息流。在通过总计的滤波器能量取倒数的标准化处理之后,而且可能在对像素数据处理(可编程伽马校正、附加的视频定时考虑等)之后,该第二级将从环路接口发送出(可能处理后的)像素数据,作为视频输出信号通过视频输出接口连接至物理图像显示设备。
在至少一个实施例中,对视频像素信息流开始和终止于相同的环路接口芯片没有限制。
环路绘制
在本发明的一个实施例中,环路绘制芯片是这样的环路芯片:具有连接至它的局部存储器子系统以及至少一个逆时针环路链接输出端口和一个顺时针环路俩界输入端口。在一个实施例中,该局部存储器子系统由dram芯片组成,尽管可以使用任何适合的存储器。
这种局部存储器子系统能够配置为存储几种可能的数据类型的一种以上。一种可能的类型是对整个帧缓冲器的子部分的帧缓冲器像素和/或帧缓冲器样本存储。另一种可能的类型是存储所有当前起作用的纹理存储器的完整复制拷贝。另一种可能的类型是存储所有当前起作用的纹理存储器的部分、潜在地复制的拷贝。另一种可能的类型是存储当前不起作用的纹理存储器的完整或部分拷贝。另一种可能的类型是存储所有当前起作用的显示列表的完整或部分可能的复制的拷贝。
在特定实施例中,环路绘制芯片具有三种计算职责。第一种计算职责是它接受并内部处理进入它的环路链接输入端口的任何图形命令环路包,该输入端口标识该特定环路绘制芯片是图形命令环路包的目标之一。这种处理既可以导致对局部存储器子系统的存取,也潜在地使该环路绘制芯片创建附加的新环路包并从它的环路链接输出端口发送出去。这些新环路包可以包括绘制像素环路包。
第二种计算职责是它接受并内部处理进入它的环路链接输入端口的绘制像素环路包,该输入端口标识该特定环路绘制芯片是绘制像素环路包的目标之一。这种处理可以导致对局部存储器子系统的存取。
第三种计算职责是它接受并内部处理进入它的环路链接输入端口的视频像素环路包,该输入端口标识该特定环路绘制芯片是视频像素环路包的目标之一。在视频像素环路包内的信息和内部环路绘制芯片状态定义滤波器中心点,在该点要应用当前定义的抗混淆滤波器。任何抗混淆滤波器具有相对任何给定的滤波器中心点活动的区域。特定的环路绘制芯片在它的局部存储器子系统中拥有和包含组成帧缓冲器的样本子集。定义既在用于当前滤波器中心点的抗混淆滤波器活动区域又由特定环路绘制芯片所拥有的该样本子集为起作用的集。当环路绘制芯片必须处理视频像素环路包时,这意味着抗混淆滤波器被应用到起作用的集以产生部分卷积结果。特别是,这种处理可以导致以下计算发生:1)基于特定的滤波器中心点,将这个转换为样本地址,在该地址上可以执行对局部存储器子系统的读取访问以获得特定的样本分量,2)产生卷积系数,该系数与当前滤波器中心点和由步骤1中产生的样本地址标识的样本的样本位置相关,3)用在步骤2中产生的系数对从局部存储器子系统读取的样本分量卷积,4)将卷积结果与已经包含在视频像素环路包中的部分结果进行部分求和,5)用在步骤4中计算的值代替部分结果值,将视频像素环路包发送至环路绘制芯片的环路链接输出端口。注意在一些情况下该部分结果总为零,通常在如果当前环路绘制芯片是处理视频像素环路包的第一环路绘制芯片时。
环路绘制芯片有时还可以同时产生和发送先入先出状态环路包至它的环路链接输出端口,基于大量因素中的任何因素,可能包括(但不限于):保留在它的内部队列中的自由存储的数量、由之前的图形状态环路包设置的局部参数值和自该环路绘制芯片上一次发送先入先出状态环路包已过去了多长时间。在特定实施例中,局部参数值包括该特定环路绘制芯片作为其一部分的局部环的圆周的适当测量。注意在环拓扑中包含非局部环路链接连接时这种测量可能是复杂的。
包
环路包
在环路结构中,环路包或包是位的可变长度集合,由第一环路芯片在环路链接上作为原子对象发送至第二环路芯片(例如,立刻发送全部,通常全部都在发送来自下一个包的任何数据之前发送)。第一环路芯片或者最近创建了环路包,或者最近确定了来自其他地方的环路包需要被发送出去。然后第一环路芯片将在它的环路链接输出端口上将环路包发送至第二环路芯片的环路链接输入端口。第二环路芯片是在局部环中从第一环路芯片的下一个逆时针环路芯片。在本发明的一个实施例中,环路接口芯片可以不将环路包发送至它的几个非局部输出环路链接的任何链接,而是发送至另一个环路接口芯片的非局部输入环路链接的任何一个链接。
包头
包有效负载
在环路包内的数据被分成两组。第一组是包头,在一个实施例中其可以包括如包长度、目标信息和类型的信息。第二组是包有效负载,在一个实施例中其可以包括如要绘制的几何物体、或要采样的像素或完整组合的视频输出像素的信息。
图形命令
术语图形命令指所有环路包的集合,其中环路包的类型可以由环路接口芯片作为处理来自主机的图形驱动命令信息的直接或间接结构来创建。
环路包的图形命令集被细分为两个不交叠的环路包子集:图形状态和图形基元。注意:图形命令、图形状态和图形基元这三个术语都指环路包集合。当指来自这些集合之一的未命名环路包时,数学上的措辞应该是“来自图形命令环路包集合的环路包”,但是习惯上使用更清楚的“图形命令环路包”来表示相同的东西。
注意:在由主机软件发送至图形硬件加速器的可能信息集合和由环路接口芯片创建的可能环路包集合之间存在表面的类似之处,其中所述信息集合包括:图形驱动命令、图形驱动状态和图形驱动基元信息,所述环路包集合包括:图形命令、图形状态和图形基元环路包。尽管在特定实施例中可能存在相当的语义上的相似,但这不是所要求的。实际上,在许多实施例中,单主机图形驱动软件发送单个图形驱动基元信息,该信息将依次使环路接口芯片不仅产生一个或更多图形基元环路包,还潜在地在产生图形基元环路包之前和之后产生大量图形状态环路包。
为了完整性,在一个实施例中,环路接口芯片还产生视频像素环路包,所以这些环路包形式上也是环路包的图形命令集的成员。
图形状态
术语图形状态指图形命令环路包的子集,其成员环路包变化或更改渲染状态,但本身不规定几何图形基元或在这时直接引起任何附加渲染。在一些实施例中图形状态环路包的例子是那些设置当前颜色、或设置当前变换矩阵之一或改变当前抗混淆滤波器的方面的环路包。
图形基元
术语图形基元指图形命令环路包的子集,其成员环路包规定几何图形基元和/或在这时直接引起任何附加的渲染。在一些实施例中图形基元环路包的例子是那些规定定义要渲染的三角的全部三个顶点、规定定义要渲染的直线的两个顶点的环路包。
绘制像素
绘制像素是能够在环路链接上发送至大量其他环路芯片的环路结构环路包。在一个实施例中,环路绘制芯片是执行在绘制像素环路包的内容上的任何处理的唯一芯片类型,其他类型的环路芯片主要处理在绘制像素环路包中的路由和目标信息,以确定是否和如何使该包通过芯片可能具有的环路链接输出端口的任何或全部端口。在一个实施例中,能够初始创建绘制像素环路包的唯一环路芯片是环路绘制芯片。在一个实施例中,绘制像素环路包由环路绘制芯片仅仅作为处理已经由相同的环路绘制芯片接收的图形基元环路包的直接结果来创建。
在绘制像素环路包的环路包头中的目标信息指定了哪些环路绘制芯片将处理该绘制像素环路包。在一个实施例中,目标信息由整数x和y屏幕空间像素地址来规定,而且目标环路芯片是包含特定像素内的样本的一些或全部的一个或更多环路绘制芯片。在另一个实施例中,目标信息是屏幕空间的多像素区域。在另一个实施例中,目标信息是屏幕空间的子像素区域。在另一个实施例中,该组目标环路芯片经更普通的环路芯片子组标记机制来规定,该机制不直接编码为x和y地址。
绘制状态
在一个实施例中,环路绘制芯片维持将被用于实施分配给它的渲染任务的内部(在芯片上)状态数据。这种状态中的一些是全局的,例如,每个环路绘制芯片只维持一个状态拷贝。其他状态是局部的,具有特定对于每个可能的资源环路绘制芯片的状态的不同拷贝,可能向该特定环路绘制芯片发送包。两种类型的状态被绘制状态环路包的接收更改。
当环路绘制芯片已经确定它是它接收的特定绘制像素环路包的目标之一,并知道它应该在该绘制环路包的内容上执行一些处理时,它在由该特定环路绘制芯片维持的全局和局部状态上下文中进行这种处理。在一些实施例中,这些局部数据上下文的至少一个被标识为维持状态数据的那一个,所述状态数据作为从发送者环路绘制芯片接收的绘制状态环路包接收,所述发送者环路绘制芯片与接下来发送现在处理的绘制像素环路包的环路绘制芯片相同。
该(发送环路绘制芯片特定信息的)局部状态数据上下文可以包括确定由特定环路绘制芯片所拥有的帧缓冲器样本地址的候选集合(并且因而相关的样本位置和样本)所必需的任何信息,对于该特定环路绘制芯片,相应组的样本分量应该由该特定环路绘制芯片来计算。这些样本分量然后将被用作在与其值相关的样本地址上的条件样本更新函数的输入之一。哪一个条件样本更新函数将被应用也是局部数据上下文的一部分。
在一个实施例中,(发送环路绘制芯片特定)局部状态数据上下文包括组成三角形状区域的三个屏幕空间子像素精确点位置,所述局部状态数据上下文存储在特定目标环路绘制芯片上,是确定由特定环路绘制芯片所拥有的帧缓冲器样本地址的候选集合所必需的。在这个区域的内部之内的样本位置符合成为候选集合的成员的条件。可以提交附加的局部状态信息以将该区域的内部从外部区分开,并解决正好位于三角的三个边的任何边上的样本位置的束缚情况,以及正好与组成三角形状区域的三个屏幕空间子像素精确点位置之一相同的样本位置的束缚情况。这些样本集合确定上下文数据的变化和规则也可以提交给线段、抗混淆线段、点、抗混淆点、大点以及比三角更复杂的几何区域。
替换实施例在局部状态数据上下文中包含较少的信息,代替的是,每个绘制像素环路包明确地包含允许确定所有目标环路绘制芯片的帧缓冲器地址的候选集合的信息。在一个实施例中,该信息是对于在与该绘制像素环路包相关的指定屏幕空间区域内的所有样本的位串。对于给定的环路绘制芯片,由于与帧缓冲器地址相关的来自该串的位由该特定环路绘制芯片包含,位值“1”值指示帧缓冲器样本地址是候选集合的成员,位值“0”指示它不是。
现在我们转到在特定环路绘制芯片上的相同局部状态上下文的部分,该环路绘制芯片用于位作为候选集合成员的样本位置计算机样本分量。由于样本分量包括多个分量,它们包含如何为每个分量计算值的信息。一个可能的方法是使用在屏幕空间子像素精确x和y位置中的平面方程来计算在给定样本位置的样本的分量的值。使用这种方法,存储在芯片上局部状态数据上下文中的信息将是对于该平面方程的系数的值。在一个实施例中,以这种方式可选地计算z深度值。用于计算分量值的另一种方法是仅从绘制像素环路包的包有效负载部分插入常数值。在一个实施例中,以这种方式可选地计算样本分量的红、绿、蓝和可能的α值。其他用于计算样本分量值的方法是期待和可能的。来自其他之前接收的绘制像素环路包和其他之前计算的样本的高速缓冲数据内插是可能的。很清楚可以为每个样本分量分别有条件地选择任何数量的这些技术,并以任何方式混合。
视频像素
视频像素是能够在环路链接上被发送到大量其他环路芯片的环路结构环路包。在一个实施例中,环路绘制芯片和环路接口芯片是在视频像素环路包的内容上执行任何处理的环路芯片,存在的任何其他类型的芯片将处理在视频像素环路包中的路由和目标信息,以确定是否和如何使该包通过芯片可能具有的环路链接输出端口的任何或全部端口。
在一个实施例中,能够初始创建视频像素环路包的唯一环路芯片是环路接口芯片。
当视频像素环路包进入环路绘制芯片时,在它被从环路绘制芯片发送回之前它可以被进行给内部处理和更改。在一个实施例中,能够消耗视频像素环路包(例如,不是传递它)的环路芯片时环路接口芯片。在一些情况中并不总是这样的,环路接口芯片可能只是路由视频像素环路包,而不消耗它。替代地,如果第一环路接口芯片确定第一环路接口芯片是通过第一环路接口芯片的环路链接输入接口之一接收的视频像素环路包的预期的最终目标,环路包将被提交给一些内部计算,以最终将计算结果作为视频输出信号通过环路接口芯片的视频输出接口(一个或多个)(之一)发送出去结束。
先入先出状态
术语先入先出状态指由环路绘制芯片通过前面所述的机制产生的环路包。在一个实施例中,fifo环路包最终被环路接口芯片消耗,尽管并不总是由fifo环路包遇到的前几个环路接口芯片消耗。
包含在到达环路接口芯片的fifo环路包内的环路包有效负载潜在地被用于更新该环路接口芯片的关于产生fifo环路包的环路绘制芯片的相对可用性的模式,以处理该环路接口芯片可能在将来考虑发送至该特定环路绘制芯片的任何环路包,相对于其他可能的目标环路绘制芯片。
环路绘制芯片
环
简单环配置
当从环路芯片制造出3d图形硬件加速器时,在最简单的情况下,环路芯片连接在一个环中:每一个环路芯片具有它连接至环中下一个顺时针环路芯片的环路链接输入端口的环路链接输出端口。用于构造该环的环路芯片类型时一定数量的环路绘制芯片和一个或更多的环路接口芯片。环路结构的特定实现在这个芯片的确切数量上施加了一些限制,但是这些限制将与这里讨论的无关,而且本发明不期待在环路中的任何特定数量的芯片。
因此,这些芯片都连接在一起成为圆形环路。在这种简单的情况中,不形成环连接的唯一芯片接口是在环中一个或更多环路接口芯片上的三个附加的接口:环路接口芯片主接口、环路接口芯片视频输出接口和任何环路接口芯片非局部环路链接端口(在那些包括这种端口的实施例中)。
环路结构已经被设计成使简单的机构能够作为完全功能的3d图形硬件加速器执行。在以这种方式由一个环结构制造出的3d图形硬件加速器中,术语环指芯片的这一个环。用来指正好以这种方式建造的3d图形硬件加速器的术语是简单环配置。这些有时也称为简单环。
局部环
因为本发明的一些实施例包括进出环路接口芯片的附加的连接选项,可以形成比只是简单环配置更复杂的环路芯片连接集合并用作功能3d图形硬件加速器。然而,在这些更复杂的情况中,仍然存在局部环的概念,其中渲染处理的大多数操作以与它们在简单环配置中如何进行非常相似的方式进行。在这种情况下,所说的局部环或者甚至有时就是环,指组成局部环的环路结构芯片。
环业务
尽管在计算机科学中存在环连接的电子和/或计算机系统的例子,许多更复杂的互连系统的例子是基于更复杂的拓扑的。因此,可以仔细地定义应用到环路系统的拓扑。
来自包括连接系统的计算机科学的一个普通概念是业务。在一些定义中,业务是一种在连接电子和/或计算机系统中关键或特定子系统(在本文中叫节点)有多大可用带宽的度量。
相关的概念是总线业务的概念,如应用到电子和计算机系统的,其中大量子系统可能全部共享单个数据路径。总线业务只是在该共享总线上发生的任何有用的通信。
有时在系统中,作为本发明的环系统连接的是可能讨论的环总线,以及在环总线上的业务。但是不讨论单个共享的总线,技术上总线仅在不同的环路芯片之间的全部单向点对点互连出现,因而环总线业务的概念是不清楚的。
然而可以有效地定义环业务的更通用的概念。在给定的简单环或局部环中,在任何特定的环路链接上的业务在统计上都是大致相同的。因此,在单个环路链接上的平均业务是关于全部环绕环的其余部分继续进行的好的近似值。因此,可以使用相同的统计变量来定义环带宽的统计学概念。在这个环业务的概念中,可以询问在给定的时间渲染计算的哪些部分正在产生沿环的业务。该业务可以按照使用的绝对带宽,或作为环总(最大或平均)带宽的百分比来测量。在3d图形硬件渲染处理中的业务的不同资源也可以根据使用的相对带宽或相对于标称的或期望的使用特定渲染计算所使用的带宽来彼此对比。
性能
本文件的这一部分描述环路结构的一些通信和计算方面的性能包络。本描述是在关于环路结构的其他计算部分的性能的特定组假定之下进行并衡量的。这些假定不是特定的工程或市场目标;这些假定仅仅是对于本发明的特定实施例的计算能力的实例集合,使理解在环路结构中如何计算、芯片计数和带宽问题折衷。
假定
让我们假定在特定实施例中,单个环路绘制芯片具有像素着色器速率6400万像素每秒、样本填充速率千兆样本每秒,并能够处理和供应24000万视频像素环路包每秒。因此,对于包含16个环路绘制芯片的简单环,总的像素着色器速率将是每秒着色1吉像素,总的像素填充速率将是千兆像素每秒(在具有16的样本密度上),视频输出信号视频格式像素速率将是240兆像素每秒。这些吞吐量不考虑由较低频率的任务如纹理载入或纹理拷贝所花费的任何时间。
性能包络
给出以上的假定,表1显示在基于环路结构的3d图形硬件加速器中当使用的环路绘制芯片数量从1增加到64时相对可能的性能提高。对于每种数量的环路绘制芯片,以两种不同的样本密度显示性能。
标记像素着色器能力的列是像素着色器程序的相对复杂性的测量,具有由16个环路绘制芯片支持的相对像素着色器能力复杂性,任意定义为1.0。所要求的像素着色器能力的实际数量将依赖于特定应用的细节而变化。对于一些应用,低于1.0的像素着色器能力仍然是可用的,其他应用可能希望使用例如程序纹理或程序几何的特征,要求高于1.0的像素着色器能力。
3d图形软件渲染系统的经验显示低于4的样本密度不能为渲染图像增加很多质量。而且,尽管样本密度为8的渲染图像比样本密度为4的渲染图像产生了更好一些的质量,用16或更高的样本密度来渲染图像更可能产生合意的结果。对于图形硬件渲染系统存在相似的质量折衷。这意味着对于3d图形硬件加速器支持至少16或更高的样本密度将是优点。像素着色器速率限制了帧的深度复杂性的产品的最大值和像素中视频分辨率及渲染帧速率。保持深度复杂性为6,1G(千兆像素每秒)的像素着色器速率支持在76Hz的渲染帧速率上具有1920×1200像素的视频分辨率的物理图像显示设备,而1/2G(0.5×千兆像素每秒)的像素着色器速率支持在60Hz的渲染帧速率上具有1280×1024像素的视频分辨率的物理图像显示设备,或者在38Hz的渲染帧速率上具有1920×1200像素的视频分辨率的物理图像显示设备。如果深度复杂性按因子降低2至3,那么支持具有两倍的像素视频分辨率的视频信号格式或要求两倍渲染帧速率的应用(直到特定的最大值)。表2概括了对于实施例支持的包络。在所有具有a+的渲染帧速率中,系统具有比物理图像显示设备能够使用的更多的能力。
表2被在表1中最后一列显示的最大视频格式像素速率限制。具有1920×1200视频分辨率的物理图像显示设备通常仅运行在60-84Hz上,因而要求至少20000万像素每秒的视频格式像素速率。具有1280×1024的视频分辨率76Hz的物理图像显示设备仅需要10000万像素每秒的视频格式像素速率。
基于环路结构的3d图形硬件加速器能够被配置为支持从一个到两个或更多的视频输出接口。同时服务于一个以上视频输出接口的需要引入了在能够支持的视频信号格式上的附加共享资源限制。如果必须也同时执行两个不同的渲染,这也将在可达到的渲染性能上施加附加的共享资源限制。在一些实施例中,在2个视频输出接口上传送1到2个视频输出信号要求大多数资源在视频输出接口之间被分割。在一个实施例中,这是简单的具有支持的物理图像显示设备视频分辨率和/或支持的渲染帧速率,或者在一些情况中,像素着色器能力。
环路包
本文件的这一部分描述一些技术细节和在环路包上的限制、环路包的路由和队列以及对于在本发明的一个实施例中经环路链接通过环的环路包隐含的fifo缓冲器。
环路包的定义
在环路结构中,包被定义为位(bit)的变化的长度集合,所述位从一个环路芯片的内部经环路链接作为原子对象被发送至另一个环路芯片的内部。第一环路芯片具有在它内部的环路包,因为第一环路芯片创建了环路包或者因为第一环路芯片从某一其他环路芯片接收了环路包。这样的环路包通常从第一环路芯片发送出去,经第一环路芯片的环路链接输出端口至第二环路芯片的环路链接输入端口。第二环路芯片通常是与第一环路芯片逆时针直接物理相邻的环路芯片。
在本发明的一个实施例中,环路接口芯片可以代替从几个非局部输出环路链接中任何链接发送环路包至另一个环路接口芯片的非局部输入环路接口之一。
在一个实施例中,在环路包内的数据被分成两组。第一组是包头,例如包长度、目标信息和类型。第二组是包有效负载,例如要绘制的几何物体、或要采样的像素或完整组合的视频输出像素。
在一个实施例中,环路链接具有固定的位宽度;在这种情况下,环路包的位大小是该固定大小的整数倍(一些位可能不使用)。
在一个实施例中,每一个环路包的包头信息包括明确的长度字段。这种长度信息可能是冗余的信息,因为特定环路包的长度可能不直接从环路包的包头类型字段或其他字段确定。然而,在一些情况下,仅仅环路包的包头类型字段对于单独指明整个环路包的长度可能是不充分的信息。如果允许相同的环路包类型具有不同长度的包有效负载长度这可能发生。具有独立于包头类型字段的明确的包头长度字段允许低级状态机器正确地处理环路包的传输。它还允许在制造给定芯片之后引入新的环路包类型;只要较老的芯片必须与新的环路芯片进行的唯一事情是将它传递给下一个芯片,那么在也包含具有新的环路包类型的较新芯片的系统中老的芯片将仍然起作用。
环路包类型
通过环的所有环路包都被标记为多播或单播。多播环路包名义上向环上所有芯片寻址;可能代替的是目标位指示只有特定目标芯片将处理该环路包。尽管潜在地存在相当大数量的不同环路包类型,大多数环路包属于与3d图形渲染管线级的三个主要组相关的三个特定环路包集合之一。简单的说,如果环路包p是环路包集合s的成员,那么我们就说p是s环路包。这三个环路包集合和一些更重要的特定相关的环路包子集是:
图形命令环路包集合。这是将图形命令环路包从环路接口芯片传送至环路绘制芯片的所有环路包组。图形命令组中的环路包分成两个主要的环路包子组:图形状态和图形命令环路包子集。图形状态环路包通常是多播的,并改变内部渲染状态,但它们本身不产生像素。图形基元环路包通常是单播的,并且通常包含实际规定要渲染成像素的三角、线、点和其他几何基元的顶点数据。当环路绘制芯片接收图形命令环路包时,这在该环路绘制芯片内部的图形命令输入fifo缓冲器中占用空间。在(可编程)时间间隔中,环路绘制芯片将发送出先入先出状态环路包,沿环回到环路接口芯片以保持它最新具有在该特定环路绘制芯片内部保留的缓冲器存储空间的数量。
绘制像素环路包集合。该环路包集合包括由环路绘制芯片处理图形基元环路包产生的所有环路包。绘制像素环路包集合的重要子集是绘制状态环路包集合。当描述了渲染的全部细节时,将可以看出,也存在由环路绘制芯片产生的绘制状态环路包以为要绘制的像素设置合适的状态。
视频像素环路包集合。存在在环中最终将产生视频输出信号的数据如何汇集的问题。在一个实施例中,这些环路包是用初始为零的rgba总和和标准化数据通过环路接口芯片(在一个实施例中其包含视频信号格式定时发生器)产生的。这些环路包然后在环中经过所有的环路绘制芯片(沿路收集像素数据分量,在一个实施例中将其添加到视频像素环路包的rgba总和与标准化数据字段),然后重新进入环路接口芯片,用于像素数据的最终的标准化,可选的伽马校正图形管线级,和在视频输出接口引脚上输出,或在主接口上传递至主机,或绕这个或一个或更多其他环传递在后继的渲染中用作纹理贴图(或其他贴图类型)。
环路包创建
环路芯片有三种方式可以发现它自己具有需要经它的环路链接输出端口(或在其他实施例中,其他的环路包输出端口)发送出去的环路包:
环路包可以从空闲的系统接口进入。这样的例子是经环路接口芯片上的主接口进入的数据,但现在需要作为环路包发送至其他环路芯片。
环路包可以作为在芯片上处理信息的结果被创建。这样的例子是在环路绘制芯片内部光栅化处理的部分创建的绘制像素环路包。另一个例子是数据经环路接口芯片上的主接口进入,并已经由该环路接口芯片处理为更改后的数据,修改后的数据现在必须作为环路包发送至其他环路芯片。
环路包可能已通过环路链接输入端口(或在其他实施例中其他环路包输入端口)进入了环路芯片。这样的例子是刚经过的绘制像素环路包;它的目的地不是当前的环路芯片,而是环中更后面的其他环路芯片。
环路包目标类型单播
根据定义,单播环路包具有单个目标目的地。例如,绘制像素环路包将具有在沿着环某处的特定环路绘制芯片的单播目标,它是响应包含讨论的像素的xy地址的帧缓冲器存储器交错的那一个。图形基元环路包也被定义为单播环路包;它们的固定目标是环路接口芯片为了负载平衡原因已经决定将下一个图形基元发送至的环路绘制芯片。
在一个实施例中,可以从像素的xy绘制地址间接推断绘制像素环路包的目标芯片。但是在另一个实施例中,如果在所有绘制像素环路包内总是提交明确的单播目标信息,低级环路包控制信息可以被保持为冗余的和简单的。
为了能够从相同的环路芯片建造许多不同尺寸的环,对于一个环路芯片寻址另一个环路芯片的内部机制被制定为灵活的。在一个实施例中,只有在环路芯片通电之后,它才会发现它作为其一部分的系统中的物理组织和环路芯片数量是怎样的。在一个实施例中,可以通过设计环路芯片以便当环路芯片初始化时从空闲芯片资源下载动态配置信息来实现这种灵活性。例如,可以等同制造给定类型的所有环路芯片,初始配置信息可以在每一个环路芯片上相对于相同系统中所有其他环路芯片设置内部id字段为唯一值。具有该唯一id可以被用作许多可能的芯片路由和寻址机制的一部分。
环路包目标规定替换
以下段落论述规定在连接进环中的一组芯片内的单播和多播目标信息的几种方式。然而,环路接口芯片连接出去至附加的环的能力暗示了需要支持比简单环复杂得多的拓扑。然而为了清楚,将首先论述对于简单的单环拓扑的解空间的探测。
在简单环中识别哪个芯片是目标有许多方式。这些方式包括(但不限于)以下段落中的三个例子:
一:每个环路包的环路包头包含叫做跳跃数(hop-count)的小的整数字段。在通过它的环路链接输入端口接收环路包之后,环路芯片从跳跃数中减去一,如果结果是零那么环路包的目标就是这个环路芯片;否则环路包被通过该环路芯片的环路链接输出端口发送至沿环的下一个环路芯片。这是有效的资源相关机制,例如,要发送环路包至离你8个环路芯片远的环路芯片,只需将跳跃数设置为8。
二:假定在系统初始化时间,每一个环路芯片已经被分配了一个整数id,该id对于该系统中所有其他环路芯片是唯一的。进一步假定该唯一的整数id是特定的环路芯片离指定的主环路接口芯片有多少个环路芯片的量。可以通过经环发送表示初始化的环路包来初始化该唯一的整数,其中初始化环路包具有跳跃数字段,该字段在每次进入新的环路芯片时是牵连的。之后可遵循其他更复杂的寻址信息。为了说明该附加信息是如何使用的,假定第一环路芯片希望发送消息给第二环路芯片。附加的寻址信息将允许第一环路芯片根据其他数据计算第二环路芯片的唯一整数地址,所述其他数据如帧缓冲器x和y像素地址。如果每一个环路芯片具有这样唯一的id,那么目标确定就很简单了。如果你是环路芯片,并且刚进入你的环路链接输入端口的环路包中的唯一目标id与你的唯一id值匹配,那么该环路包就是给你的;否则它不是给你的,并且应该从你的环路链接输出端口发送出去,进一步搜索它的目标环路芯片。
三:与上两个相似,但代替的是在随意基础上分配唯一的芯片数。这在由比简单环更复杂的路径连接的基于环路芯片的系统中具有一定的优点。
这些例子只提到了单播环路包。多播环路包是如何处理的?再一次,例如,让我们看对于简单环情况的许多可能替换中的三个例子:
一:多播环路包被所有的环路芯片处理。
二:多播环路包被除已经具有多播环路包明确禁止的各环路芯片之外的所有环路芯片处理。这种禁止可能已经分别传达给将要禁止接收多播环路包的每个环路芯片,通过单播环路包说“你自己禁止多播”进行。
三:多播环路包头包含固定长度的位串,表示所有芯片id的位组。(这意味着在环中有固定最大量的芯片。)如果在多播包头中设置了环路芯片的整数id位,那么该环路芯片应该接受多播环路包;否则不接受。注意这种方案要求对于多播环路包的环路包头是与单播环路包的包头不同的(更长),或者在(更加常见的)单播环路包中总是存在浪费的控制位。
通过创建(固定最大量的)子组增加了间接层,每一个子组具有唯一的整数id。每一个环路芯片具有用于每一个子组的状态位,标记在叫做多播组的该特定子组中的成员。每一个多播环路包具有用于存储整数的固定字段,所述整数表示用于它正广播至的子组的唯一整数id。如果并且仅仅如果环路芯片的成员位是为环路包头中的特定子组id设置的,那么给定环路芯片是用于特定多播环路包的目标。增加所有环路芯片总是属于子组0的约定是低开销保证,以保证总有方法发送环路包至所有环路芯片。同时支持的子组的总数不一定非常大;八个组仅要求在环路包头中三位子组信息。实际上,如果单播环路包已经需要在头中n位目标信息,那么当设置多播位时可以再次使用这n位字段以支持多达2n个不同的子组。
如前面所述,之前的所有论述都在指挥环路包在简单环的简单拓扑中的假定之下。通过附加的环路接口芯片或在环路接口芯片之间的附加非局部互连将多个环连接在一起要求用于环路包目标信息的更复杂的路由信息。
实现这一点的一个实施例是仅在简单的内部环目标层之上增加简单的路由层。这将按如下工作:只要环路包被指定用于与它目前在其中传输的环不同的环,环路绘制芯片就只传递它。一旦遇到环路接口芯片,路由信息就破门而入,可能将环路包跳至不同的(并可能是最终的目标)环,或者在当前环中供应它进一步转发(寻找不同的环路接口芯片)。通常,有几种表示和处理路由信息的方式。在第一种方法中,环路接口芯片除了将非局部目标环路包传递给环中下一个环路芯片之外不做任何事情。环路接口芯片递减一个或更多计数,匹配环路芯片id,或几个其他事物中的任何事物以看多个环路链接输出端口中哪个属于该特定环路包应该发送出去的环路接口芯片。一旦环路包到达目标环之内,就可以应用前面所述的局部目标确定算法之一。这暗示了多播环路包可以这样发送,以便多播环路包的隐含范围在目标环之内。对多个环的多播是一项更复杂的事情,但是根据这里所述的教导,本领域的普通技术人员可以执行。
在对于环路包的机制和头部格式上更详细的情况将依赖于,并能够从其他限制获得,该限制在处理建立环路结构的特定实现时出现,同样根据这里所述的教导,本领域的普通技术人员可以执行。
还需要论述在环路包转发算法上的一个重要的附加限制:终止。单播环路包总是在它们的特定目的地目标终止。但是多播环路包一直继续;需要一定的机制,一旦环路包已经自始至终环绕环路一圈,就终止自动转发。(特定复杂的情况可能需要环路包在停止转发之前绕环两次或更多次。)这里的观点是通过简单的低级状态机器阻止环路包的无限循环。
再一次,存在几种阻止无限循环的方式,但是存在低级误差防火墙的附加限制,即使假定在大多数实施例中至少所有环路包头信息是纠错码(ecc)保护的。
再次在环路包头部内能够使用小的整数跳跃数字段,每次环路包进入新的环路链接输入端口时将递减。当跳跃数字段达到零时,环路包就不应再转发,不管其他头部数据说什么。如果除了递减单播目标地址字段之外还要提供组和路由信息,在多播环路包上该字段可以重新用于这个目的。另一种可能性(对于简单环)是如果芯片再次见到了它产生的环路包,就应该停止它。该方案的缺点是:a)环路包将(几乎总是)必须流经过它们另外的最后的芯片以回到它们的初始芯片,b)需要附加的用于(长)序列id和初始芯片id的位字段来使这个体制运转。
环路包优先权
希望具有相当简单的方法来保证新环路包的正常处理、转发和产生不会造成在任何环路芯片的环路链接上的死锁。在一个实施例中,通过一组一致的控制(police)可以实现死锁避免,该组控制管理不同组的环路包类型应该具有的相对优先权,当环路芯片决定目前驻留在该环路芯片上都指示它们希望被发送出环路芯片的环路链接输出端口的几个环路包中哪一个时。下面给出这样一组控制:
首先,视频像素环路包总具有最高的优先权。这样做的原因是简单的;如果视频输出信号曾经中止,大多数物理图像显示设备将出现故障。在最终渲染数据被读回至纹理存储器或主机的特殊情况下,该优先权可能被降至低于特定的其他优先权。注意如果数据被读回至主机的理由是使它能够通过不同的主接口被发送至实时或伪实时物理图像显示设备(不同的图形硬件加速器、压缩和网卡等),这可能不是降低优先权的足够好的理由。
第二,绘制像素环路包具有第二高优先权。这是有利的,因为图形基元环路包能够产生大量的绘制像素环路包(最坏的情况是单个三角基元可以结束填充整个帧缓冲器并因而可以产生多达200万绘制像素环路包)。如果绘制像素环路包在一定程度上不能暂时停止处理任何新的图形基元环路包,将可能发生死锁。注意在理论上,图形状态(改变)环路包本身不导致产生附加的环路包,因此它们不必总是给予绘制像素环路包(和视频像素环路包)优先权。然而,通常图形状态环路包后面紧跟着图形基元环路包,所以事情将无论如何相当快地停止。因此,仅仅使绘制像素环路包总具有比图形命令环路包更高的优先权是更简单的并通常不比最优差。
理论上,给定环路绘制芯片能够用绘制像素环路包超载。如果不检查,这可能导致丢失不能通过绘制像素环路包交通阻塞的视频像素环路包。在理论上,环路绘制芯片能够发送输入缓冲器状态自始至终绕着环,如同它们对图形命令环路包进行的,以便所有其他环路绘制芯片能够具有所有其他环路绘制芯片的输入缓冲器的(保守的、稍微过时的)模式。通过向不管怎样正有规律地产生的先入先出状态更新环路包增加绘制像素输入fifo缓冲器状态信息,这将适当地最好进行。但是不清楚可能在环上消耗附加带宽的机制将是必需的。如果环路链接信号交换协议指示接收环路芯片准备好接受具有几个不同组环路包类型之一的成员类型的环路包,将实现较低带宽强烈机制。以这种方式,能够允许具有较高优先权环路包类型的环路包通行,而(暂时)阻挡具有较低优先权环路包类型的环路包。
如果采用这种分级的环路包种类机制,对于调试和楔形(wedge)状态复位(例如,当由于某种原因状态机器锁上时),具有在支持的通用环路包优先权种类之上和之间的优先权的特定状态命令环路包是有用的。
环路包先入先出状态反馈
大多数环路包类型被解雇和忘记:一旦环路包已经离开了创建它的环路芯片,该环路芯片就可能忘记该环路包。视频像素环路包和绘制像素环路包就在这一类中。但是图形命令环路包必须被环路接口芯片仔细地平衡装入通过多个环路绘制芯片。这意味着环路接口芯片需要对于各种芯片内输入fifo缓冲器如何充满在每一个环路绘制芯片内的一定的可见性。为了完全避免除了至物理相邻的环路芯片之外的环中彼此之间的任何连线,应该由环路绘制芯片在各个时间将先入先出状态环路包发送回初始的环路接口芯片。
先入先出状态环路包不是作为接收图形命令环路包的环路绘制芯片的直接响应发送的。相反,它们只是在环路接口芯片的保守模式(从环路绘制芯片的角度看)将预测环路绘制芯片的输入fifo缓冲器之一要溢出之前由环路绘制芯片产生。该模式如下运转:
首先,环路接口芯片(在某一时间)最后确切知道的自由输入fifo缓冲器空间的数量是包含在由环路绘制芯片发送的最后的先入先出状态环路包中的量。
从这个数量,接下来减去由自发送fifo环路包以来接收的图形命令环路包占用的空间数量。然后减去由最坏情况数量的图形命令环路包占用的空间数量,所述图形命令环路包已经在绕环传输(但还没有被环路绘制芯片接收)或可能在潜在产生的先入先出状态环路包能够到达环路接口芯片之前被环路接口芯片发送至环中。
如果这个数量太接近零(实际阈值应该是可编程的),但是输入fifo缓冲器自由空间的实际数量显著大于保守预测,那么环路绘制芯片应该产生具有目前更准确的自由空间数量的先入先出状态环路包。(注意可能存在一定的建立迟滞效应,如果它们不使情况改变很多,不应该太频繁地发送新的先入先出状态环路包。)这里的情况是环路接口芯片具有在它将图形命令环路包发送至的每一个环路绘制芯片中自由输入fifo缓冲器存储是多小的(延迟的)“最坏情况”模式;在先入先出状态环路包从(长途环绕)各个环路绘制芯片回来时更新剩余自由存储量。先入先出状态环路包可能包括(环路绘制芯片特定)系列数量的最后图形命令,作为相对时间标志进入特定环路绘制芯片的fifo缓冲器(其他方法是可能的)。因为假定就在从环路绘制芯片的最后报告之后,再没有图形命令环路包从环路绘制的输入缓冲器排出,该模式是保守的。(这通常(但不总是)由覆盖大面积并因而花费长时间来完成的几何基元的光栅化导致。)因此,保守地,在那个环路绘制芯片的输入缓冲器中附加的“自由”空间是它在最后的先入先出状态环路包中报告的,减去由自导致先入先出状态被报告返回以来由环路接口芯片发送(至那个环路绘制芯片)的所有图形命令环路包占用的总空间。以这种方式,可以阻止在环路绘制芯片上的输入fifo缓冲器溢出(以及出现正在渲染图像的假信号)的发生。环路接口芯片使用这种最坏情况预测的环路绘制芯片图形命令输入fifo缓冲器自由空间来确定下一个单播图形命令应该被发送至哪一个环路绘制芯片(它仅在具有充足的最小空间剩余来接收整个命令的芯片中选择)。对于多播环路芯片,所有的目标环路绘制芯片必须具有充足的输入fifo缓冲器空间以接收整个多播图形命令环路包,或者环路接口芯片将只是等待而不发送数据。(更复杂的算法可能只向具有用于命令的空间的环路绘制芯片子集发送命令,跟踪哪个环路绘制芯片还没有接收到命令,当不考虑的环路绘制芯片具有接收命令的空间时快速缓冲和重新发送命令。这种复杂算法的优点是许多图形命令经常与它们的前任相等,消除了在所有环路绘制芯片中发送(和处理)它们的需要。)最后,更近的环路绘制芯片先入先出状态环路包将是是活跃的,释放足够的空间以允许再次传输图形命令环路包。
因为没有直接假定环中芯片的数量,环路包传输“阻止(hold-back)”算法具有优点。实际上,只要先入先出状态环路包能够表示比在较早芯片中呈现的更大的可用空间,即使环路绘制芯片内的图形命令输入fifo缓冲器大小也可以在将来的芯片修订中改变。
环路包传输“阻止”算法也不支持在环上任何特定位置的环路绘制芯片,因为先入先出状态环路包在沿环的其余路径上传输以回到环路接口芯片。考虑环路接口芯片的恰好下一个(下行的)环路绘制芯片与距离最远的一个(例如,正好从环路接口芯片上行连接的)。最近的下行环路绘制将具有较少的飞行中的图形命令环路包,但是比正好在上行的环路绘制芯片具有更多的(并且较老的)目前正在绕环前进的先入先出状态环路包。因此,可以使用环位置相等的优点和简单负载平衡算法。为了决定在环路绘制芯片中全都具有充足的空间以接收下一个单播基元,简单的循环算法保持事物合理。(这种类型的循环是不具有充足(预测的)输入缓冲器空间的任何环路绘制芯片都不予考虑用于接收下一个单播基元。)
然而,环路包传输“阻止”算法对环中芯片的数量有一定的间接依赖。如果环路绘制芯片上图形命令输入缓冲器的总存储大小接近或低于绕环(的长度)流动的所有传输缓冲器的总大小,那么通常将产生人工阻止(尽管系统将仍然起作用)。
普通问题:怎么“接入(Wired In)”是系统限制?
已经提出了环路结构,对其在一个实施例中相同的两个构件块环路芯片能够允许建造许多不同大小的环并适当地运行:高度可缩放的结构。
确实是真的,已经避免了很重地限制过去的3d图形硬件加速器的规模的大多数结构限制。除了电源和接地,不需要系统跨接线(即使时钟可以从主环路接口芯片转发)。将环路链接输出端口输出引脚连接至环路链接输入端口输入引脚的所有线可能都是从一个芯片到环中下一个芯片点对点的。
然而,能够在单个环中串在一起的环路绘制芯片的数量存在真实的第二上限。如目标机制论述中可见,几乎任何方案在寻址能力上都具有内在的上限。如果使用计数字段,这种限制没有太多实际影响,但是如果选择位组字段就会有。在可能最终覆盖环路芯片的内部fifo缓冲器的较大环中还存在延长延迟的问题(并因而表现设计限制,即使软件)。在特定限制之外,附加环路绘制芯片的好处主要是在用于附加样本密度和/或可编程着色器能力的系统中有用。当然,在任何物理产品示例中,在可以适合给定底架的最大尺寸的环上将存在冷却、电源和空间限制。而且最后,尽管本身的可缩放性是好事,但它几乎总是增加对于增加的灵活芯片的设计测试成本。环路结构的可测试性影响主要限制环路接口芯片,但是,附加的成本仍然带来附加的特性。
而且尽管我们已经讨论的最大值,当在特定阈值之下使用大量环路绘制芯片时在支持功能系统(例如,最小视频输出信号视频格式像素速率)上也存在限制。
考虑所有这些问题,尽管将为了目前和将来的灵活性设计结构,在设计(较后的)点上,内建限制将导致在缩放比例上建立特定的固定限制。不应该太早施加这些限制,但是作为一个例子,在该时间点上,一组缩放比例假定将把对于环中16个环路绘制芯片的甜蜜点(sweet spot)的结构设计作为目标,并支持在单个环中最大数量64以为支持扩展系统提供充足的空间。超过特定点,通过使用多个并行环更好地支持附加的渲染能力,所述多个环每一个都独立连接至主机,或者如后面将看到的,多个环连接成较大的系统,将其看作连接至一个或更多主机的一对环。
视频输出
环路结构的优点之一是能够容易地支持比以前在商业产品中出现的更复杂和丰富的视频输出处理。这一部分描述了视频输出结果然后能够实现它。
帧缓冲器存储器与视频的关系
简单起见,让我们考虑具有一个环路接口芯片和16个环路绘制芯片的简单环系统,并假定样本密度为16。每一个环路绘制芯片具有用于每等16个像素的全部16个样本的存储,因为存在16个环路绘制芯片。再一次为了使事情简单,我们假定像素的所有权在4×4矩阵上分配。
图6显示由6#环路绘制芯片拥有的显示中的全部像素,其中环路绘制芯片编号为0-15。附属于6#环路绘制芯片的dram存储器将包含用于特定像素的所有样本,在我们的例子中是每像素16个样本。其他的环路绘制芯片将拥有在4×4网格中的其他像素。例如,5#环路绘制芯片将拥有就在由5#环路绘制芯片拥有的像素左边的像素。
将此与视频输出信号相关,如果我们的抗混淆滤波器是1×1箱式滤波器,那么每一个环路绘制芯片将只参与每四个输出扫描线中的一个,并且只计算(相对于传递给另一个芯片)用于来自在环路绘制芯片参与的四个扫描线之一上的每四个像素中唯一一个的像素值。抗混淆滤波操作将提取拥有的每一个像素的16个样本(每一个样本每视频格式每视频格式帧只被提取一次),将所有的样本加在一起,然后将结果移位四位(对每一个颜色/α分量)。(这种移位只是一种对箱式滤波器的所有加权的低廉的标准化:十六个加权全都均一的是16,并且以二进制表示除以16只是右移四位,这正如本领域的技术人员所熟知的。)
现在假定抗混淆滤波器是某种稍微复杂的:4×4像素邻域的函数。现在每个环路绘制芯片都参与视频输出信号的全部扫描线,并具有添加到每个扫描线上每个输出像素的东西。这说明了关于环路绘制芯片将必须如何从帧缓冲器提取出样本的什么?现在对于16个不同的视频输出信号像素的滤波中的使用,每个像素的16个样本将必须是可得的。如果我们不希望在一个视频格式帧中必须从帧缓冲器提取样本16次,将需要一定形式的在环路绘制芯片上样本分量高速缓存机制(未示出)。如果像素的所有样本都被提取和存储用于四个连续的视频输出信号像素,每视频格式帧从帧缓冲器中提取给定16个样本的次数可以减少为每视频格式帧四次。换种方式来说,对于视频输出信号的每个扫描线现在只需要提取一次像素数据(样本),总共四次。由于存储器业务等同于在渲染侧四次被读取(不写入)的深度复杂性,这仍然是大量的过多带宽。如果增加了芯片内缓冲器像素内容(16个样本)的扫描线,现在总的存取就能降至最小:每视频格式帧每像素一次。注意在我们的例子中这个像素扫描线将只包含最高分辨率视频信号格式下每扫描线包含的像素的四分之一。(假定1920作为最大扫描线宽度(以像素计),这将是16个样本的480倍。)
图7给出了对这个论述的环境。由亮灰色方块表示的卷积窗口以视频信号格式扫描顺序继续通过帧缓冲器:从左到右,屏幕从上到下。来自属于6#环路绘制的一个特定像素的那组样本只需被提取一次,在左上角第一次使用之前的某个时间;然后在芯片上高速缓存用于重新使用,直到在图的右下角最后使用(对于该视频格式帧)。每一个不同的居中视频像素环路包将要求产生不同的卷积核系数并乘以各个样本分量值。其他15个环路绘制芯片都具有相似的卷积窗口及样本提取和高速缓存要求,虽然具有彼此不同的样本提取和高速缓存重新使用时间点。
其4×4卷积窗口要求的所有十六个视频像素环路包包括来自6#环路绘制芯片的一个特定像素的处理。
很清楚,存在许多其他替换:为什么是4×4网格,8×2或2×8网格会怎么样?如果存在8个或32个环路绘制芯片而不是16个会怎么样?如果输出滤波器要求5×5的支持而不是4×4会怎么样?这些不同的假定每一个都导致在像素存取和像素高速缓存大小中的不同的折衷,基于这里的训练,其可以由本领域的普通技术人员计算出。这些变型中的任何都落进本发明的要旨和范围内。
本论述覆盖了帧缓冲器存取,但是关于抗混淆滤波器怎么样呢?首先让我们考虑在给定像素中的样本的子像素位置是如何知道的。
这里我们假定在像素内样本的位置分布(子像素样本位置)是由硬件样本地址发生器产生的非局部重复模式。这个函数可能包括由当前像素位置种下的随机数函数,以便像素位置总产生相同的部分随机子像素偏移。可以使用该偏移的一种方式是作为基础规则网格(矩形、六边形等)的扰动。
尽管存在许多方式应用抗混淆滤波器给这些4×4矩阵像素(每一个有16个样本),为简单起见,我们将集中在一种特定的方法。这并不是要排除实现抗混淆滤波的替换实施例。
当环路接口芯片发送沿环路绘制芯片的环的视频像素环路包请求时,该请求包含要产生的输出像素的中心的子像素精确xy地址(或来自最后的δ地址,为了保存位)。假定抗混淆滤波器是辐射对称滤波器,对于给定样本的滤波器系数可以如下计算:
首先,从给定样本的xy地址减去输出像素中心的xy地址。现在平方然后对这些xy差值测量求和。结果是特定样本到视频输出位置中心(圆形对称抗混淆滤波器的中心)的距离的平方。现在这个平方后的距离能够用作在将平方后距离映射到滤波器系数的表中(例如在芯片sram中)查寻的地址。
既然已经得到了滤波器系数,接下来我们用该值乘以红、绿、蓝和α(可能还有其他的)样本分量,并将结果值与红、绿、蓝等视频像素输出分量的连续和(running sum)相加。将滤波器系数加到对于该视频输出像素的滤波器系数的连续和。环路绘制芯片为它拥有的像素的16个样本的每一个计算独立的滤波器系数,将它们全部相加成为单个连续和(每个分量,加总的滤波器能量),然后将该(仍不完整的)输出视频像素传递给环中下一个环路绘制芯片。
增加的总合计滤波器能量将最终用于标准化其他的合计滤波分量值作为产生用于输出的最终像素值的最后步骤的部分。但是注意增加的总合计滤波器能量不一定明确地与其他增加的合计滤波分量一起传输。当最终需要时可以重新计算总合计滤波器能量,例如,无论哪里发生最后的分量标准化。然而,这将包括重新计算为贡献于合计滤波分量的全部样本产生的全部滤波器系数。尽管这不要求任何(昂贵的)帧缓冲器样本分量的存取,计算量也是很大的,并采用与经过几个(在我们的例子中是16个)组合的芯片扩散的所有其他卷积电路近似大的电路!所以尽管替换实施例可能节约随所有其他总合计滤波分量值一起发送增加的总合计滤波器能量的成本,并且代替的是在某个芯片上复制滤波器系数产生,给定引脚和芯片内计算的现在的经济折衷,许多其他的实施例为每个更新的视频像素发送滤波器能量的部分和。
当环路接口芯片接收视频像素时,在已经通过并由所有的(合适的)环路绘制芯片增加之后,在最后产生视频输出信号之前像素仅要求标准化和少量更多的步骤。为此目的,环路绘制芯片首先对合计滤波器能量取倒数,然后将该值依次与每一个像素分量(红、绿、蓝等)相乘以产生最后的卷积值。大多数实施例在分量离开环路接口芯片的视频输出信号引脚之前增加一些附加的处理,在一些实施例中,这至少包括可选的将像素转换为非线性伽马空间(简单表查找)。
以上述方式执行卷积的复杂因素之一是所有(卷积的)像素分量的未标准化的部分和值经环路链接引脚从环路绘制芯片传递给环路绘制芯片。由于可贡献给最终和的大量样本与滤波器系数的高数字精确度,部分和要求比各样本分量显著更多位的精确度。位数是可能落在滤波器内的样本最大数量的log2,加上产生的系数的位数(动态范围)。例如,对于样本密度16的4×4滤波器,并且具有10位每分量,可以贡献最大约为4*4*16=256个样本,暗含八位大小,并增加至该16位滤波器系数,总和约24位被从芯片传递至芯片用于每一个视频输出像素分量。但是对此进行考查,这仍然小于由绘制像素环路包在深度复杂性为6上渲染所需的引脚带宽的一半,所以它应该被支持。
考虑这个背景,我们可以简要地描述在本发明的替换实施例中将更改什么以支持一些附加的特征。在以上描述中,样本的所有分量具有为它们计算的一个滤波器系数值。在许多情况下这是足够的。但是如果我们要在子像素级别上校正在显示视频的物理图像系统(数字微镜显示器、透镜、屏幕等)中的色差,我们需要能够为rgb分量的每一个规定不同的(子像素精确度)视频像素中心。而且,这将要求三个而不是一个滤波器能量和被从芯片传递给芯片。(这里强调三个,因为能够进行α通道失真校正通常不是对于这些类型投影系统应用的要求。)当然,使用多于三个光谱色分量的其他实施例将需要多于三个的附加滤波器部分和。这将几乎加倍每输出视频像素环路包必须从芯片传递给芯片的位数,并三倍在用于计算滤波器系数的内部电路上的计算要求。减小芯片面积对于分别对rgb视频输出像素分量的每一个进行失真校正的影响的一个可能的方式,是利用具有过剩环路绘制芯片的系统的过剩的计算能力,这可能在每环具有32或64个环路绘制芯片的高端系统中会发生。现在可能环路绘制芯片能够花费三倍长的时间去计算给定输出视频像素环路包,并且仍然支持高的视频输出信号视频格式像素速率。许多类似的折衷是可能的。
另一个复杂化因素是支持大于4×4的抗混淆滤波器。例如,即使不在像素边界x和y中心的4×4滤波器通常要求存取5×5个像素用于正确执行滤波。这种非整数调整在视频调整大小和失真校正模式中容易发生。
迄今为止,论述了每环产生单个视频输出信号。另一个复杂化因素是从一个环如何支持两个视频输出信号,即使假定视频格式像素速率的总和没有超过单通道最大视频格式?帧缓冲器是如何映射的?现在视频产生是在两个环平分单独和并行发生,或它是以某种方式混合在一起的吗?通常,不存在单个选项;存在许多不同的方式进行这项工作,整个系统结构变量必须在选项中加权决定。这些变量将是结构和系统限制,并且从本文件的教导中被本领域的技术人员很好地理解。
环路链接要求的带宽
本文件的这一部分将得出在用于不同渲染任务的环路链接的实施例中使用的几个示例带宽。这些带宽在这里提出仅为了示例,不能认为是对本发明的限制。存在能够同时发生的三种业务:
从环路接口芯片到一个或更多环路绘制芯片的图形命令环路包;
从环路绘制芯片到一个或更多其他环路绘制芯片的绘制像素环路包;
从环路接口芯片到环路绘制芯片的视频像素环路包,从一个环路绘制芯片到另一个环路绘制芯片的视频像素环路包,以及从环路绘制芯片到环路接口芯片的视频像素环路包。
注意,同时发生三种这样的业务并不是例外的情形,而是常见的情形,这是在系统的全面设计时要考虑的。
由图形命令环路包要求的带宽
与其他环路包类型的相比较,用于传递图形命令环路包所要求的相对带宽可能变化巨大。规定单个三角的图形命令环路包可能产生上至200万绘制像素环路包(全屏幕三角),但它也可能只产生单个绘制像素环路包,或者甚至根本没有。更典型的载入范围将在一个像素产品至100个像素产品变化,例如,大多数绘制操作将在一个像素非纹理三角至100像素面积纹理三角的范围内。所以除极少数情况以外,由图形命令环路包占用的带宽相对量因该远小于绘制像素环路包的带宽,并且也远小于视频像素环路包的带宽。
图形命令环路包可以由至3d图形硬件加速器的主接口(从主机的连接)的带宽限制。环路链接的带宽通常远远高于任何主接口带宽。除非应用软件已经明确发送了要在3d图形硬件加速器内高速缓存的显示列表,在给定帧上由环看见的大多数图形命令环路包是由图形驱动命令信息创建的,该图形驱动命令信息明确地由主机经主接口至3d图形硬件加速器的限制带宽发送。在这种情况下,由于主接口的位速率可能比环路链接的位速率低得多,很可能由环路接口芯片响应经环路接口芯片的主接口发送的图形驱动命令信息产生的图形命令环路包的位速率也将很可能比环路链接的位速率低得多。只有在主机已经发送了显示列表以在3d图形硬件加速器上高速缓存的情况下,对于3d图形硬件加速器看见要求在环路链接上大量带宽的图形命令环路包环业务将是可能的。
定量地说,大多数下一代主接口将可能具有最大能够支持的每秒一到二吉字节带宽范围:8到16千兆比特(位)每秒。与绘制像素环路包的大宗环路包业务和视频像素环路包的大宗环路包业务相比,图形命令环路包的大宗业务在环路链接上提出了较低带宽要求。
视频像素环路包
由绘制像素环路包要求的带宽
作为对于一个实施例中系统的例子,期望的像素填充速率是在具有16的样本密度上的一千兆像素每秒。在包括最小4个12位分量值(加上一些地址信息和包头)的绘制像素环路包中,这是最小50位,并可能再大几位。(在其他实施例中,一个以上着色分量值可能必须被发送至环路绘制芯片用于它执行像素填充。在这些实施例中,每像素填充的位数可能增加至明显多于50。)
如果所有的绘制像素环路包必须通过每个环路链接,1吉像素每秒将要求50千兆比特每秒每链接。然而,在n个环路绘制芯片的环中,只有1/n绘制像素环路包必须在被消耗之前通过全部n个环路绘制芯片,只有1/n绘制像素环路包必须在被消耗之前通过全部n-1个环路绘制芯片,等等,最后1/n绘制像素环路包从没离开产生它们的环路绘制芯片。对于这个序列的渐近值是1/2,所以要求产生m个绘制像素环路包的渲染速率在任何给定环路链接上将看见平均只有m/2个绘制像素环路包的业务。
所以在环路链接上支持我们的千兆像素填充速率的期望的业务将接近25千兆比特每秒。仍然,这些环路包在环路链接上提出了单个最大带宽要求。
由视频像素环路包要求的带宽
需要以与视频输出信号视频格式像素速率相同(如果水平回描时间也用于在环内传输数据则小一点)的速率处理视频像素环路包。所以要求的视频像素环路包速率是~135兆像素每秒至~240兆像素每秒。这些是支持范围为1280×1024@76Hz至1920×1200@76Hz的视频信号所需要的视频格式像素速率。
视频像素环路包的大小取决于每个电路采用的部分卷积函数的数字细节,但是四个24位和是好的近似值。这暗示了~13千兆比特至~23千兆比特每秒。这些环路包提出了在环路链接上的第二大带宽要求。(如果允许色差颜色校正,这些数值可能增大两倍。)
总环路链接环路包带宽
将最大数值相加,我们具有用于图形命令环路包的16千兆比特加上用于绘制像素环路包的25千兆比特加上用于视频像素环路包的23千兆比特,总和为64千兆比特每秒。然而,当你从运行在320MHz具有32位数据总线的8个并行dram芯片(8*32*320M=82千兆比特/秒)创建了局部存储器子系统时,64千兆比特每秒低于达到的实际带宽。实际上,dram带宽数值比这里所述的高,因为还存在地址和控制总线。当然,在具有用于这个dram局部存储器子系统的所有控制引脚的相同芯片上同时存在输入和输出环路链接。
任何支持单个芯片64千兆比特每秒的既输入又输出的引脚输入/输出技术是对于实现环路链接物理层的可行候选。一个这样的候选是当前的用于cmos芯片的各种高速接口的2.5千兆比特串行链接。假定多个2.5千兆比特每秒链接被应用在引脚级上,这将使用26个这样的链接,在任何环路结构芯片的输入和输出环路链接上。
2.5千兆比特数值来自2001年发货的芯片。随着制造技术进步,针对以后年分生产的产品应该能够设想更高的数值,不只是在时钟速率上,而且在每个引脚使用两种以上电压电平上。
物理连线
环路结构的环路链接的规律性和排他的点对点连线提出了对于商业环路系统的物理结构的一些迷人的新选择。本文件的这一部分将探究传统的PC板建造方法以及更具包装构思的选择。
传统方法
建造用于环路结构的帧缓冲器卡的传统方法是建造一个大的PC板,看上去就像图8所示的那样。为简单起见,只显示了六个环路绘制芯片。但是具有8、16或甚至32至64或更多环路绘制芯片的板是相似的,尽管可能具有更大数量环路绘制芯片的实现将在环的上部和下部增加一些环路绘制芯片。
这种设计具有以下优点:在单个PC板上形成,并容易具有来自几乎任何方向的气流用于冷却。然而,这个整个大而复杂的PC板非常可能被要求改变以适应在各段的几乎任何改变。
非传统方法
必须制造在单个大的PC板上单个环路绘制芯片和存储器子系统的几乎等同的复制看起来是一件憾事。如果基本环路绘制芯片和连接的dram块可以是它拥有的简单的小PC板,对于制造、测试、库存、调试、定制等将简单得多。这个小PC板将只具有少量短距离信号,这些信号将脱离该小PC板并加到环中前一个相邻和下一个相邻的板。
这个小PC板用于连接需要的环路链接互连引脚全都运行在2.5GHz上或更快。技术上,所需要的是波导,不是连线。但是,在一个实施例中,焊接在同轴连接器上应该能够执行该功能。
图9显示这种替换的物理结构:六个等同的小的简单环路绘制PC子插件板都由若干同轴电缆彼此相互连接。在图中,用一条黑线表示组成环路链接连接的这组电缆。实际上,这是约28宽的带状同轴电缆。在图9中,环路绘制芯片显示为挂在PC子插件板的边上。这在机械上是不可行的。这里的点是显示由于使用高速串行链接,将每个环路绘制芯片连接到环中必须进行的连接数量(例如,每个环路绘制芯片两个连接)是足够小的,以便能够通过替代技术提高旧的PC板和连接器的制造方法。
但是既然我们具有这些独立的PC板,没有理由要求将它们设置在单个平面上。图10显示了当翻转这些卡的侧边,每隔一个进行反转,使得相邻的板要么“顶对顶”要么“底对底”连接时,所可能的。图10显示了边缘布置的16个环路绘制、2个环路接口芯片印刷电路子插件板。这里,点对点导线直接从一个环路绘制芯片连线到下一个环路绘制芯片。这通过制造输入和输出环路链接接口镜像彼此的引脚来完成。这里显示了具有全部16个环路绘制芯片加上2个环路接口芯片的设计(连接的子插件板的总数还可以由于镜象连线累加)。气流现在可以水平越过示意图,例如,从左到右或者从右到左。
底部的导线只是粗略地绘制,但可以是最长的连接。这可以是固定的,如在下一张图(图11)中所示的,该图显示了边缘“V”形布置的16个环路绘制、2个环路接口芯片印刷电路子插件板。
图12使用与图11相同的卡和镜,但是现在以环形方式布置这些卡以显示边缘布置的16个环路绘制、2个环路接口芯片印刷电路子插件板。这种布置具有与图11的布置相同的气流优点,但是有利地减小了底部导线的长度,限制了最大导线长度。从连接长度和一致性的观点来看,这是更加最优的设计。这种设计具有更短的导线长度,但是冷却可以吹入并贯穿环,环路芯片(这可能是最需要冷却的)全都位于限制的空间。
在芯片封装上引脚位置的物理限制是重要的设计因素。对于顶对顶、底对底子插件板配置,由在封装两侧的引脚实现了最优的导线长度。 (这也将使得封装支持大量的信号引脚更容易。)图13(a)和图13(b)从两侧显示了简化的IC组件输入和输出连接器。环路链接输入端口输入引脚以2d阵列标记为“i00”等;环路链接输出端口输出引脚以2d阵列标记为“o00”等。显示了用于每一个的35个引脚以简化示例。考虑每个信号都是一个平衡对以及所需要的附近的能量和接地引脚,实际数量将更大。
用于翻转的背对背环路链接连接的芯片封装的两侧上焊接点的定位
注意所有输出引脚都出现在对输入引脚的镜像位置。因此,当芯片侧边反向时,从芯片至芯片的连线变成一组空间上非常直的导线。实际上,可以保持外部连线的长度距离不太与内部导线不同,内部导线是从硅芯片的表面上输入/输出驱动焊接点到密封的IC组件上外部(焊接)引脚的。再一次,尽管这是环路结构的第三个属性,真实世界的封装限制将决定这是否值得在产品生成中利用。一些传输线建立要求用于明确的终结用电阻器,并且这些可以是可芯片外制造的;因此,可以是外部的或嵌入封装内的。
多环支持
至今为止的例子都是对于单个环的。不脱离本发明的要旨,本领域的技术人员可以设计具有8到64个或更多环路绘制芯片的环的系统结构。但是支持一个或更多子环的环怎么样呢?这一段将说明如何能够使用主接口将多个简单环连接在一起,例如,主接口不必连接至主机,它们还可用于连接其他的简单环。本文件的下一部分将论述使用附加的非局部高速互连执行许多相同的功能。在这一段和下一部分之间的概念具有许多相似性。区别是更大程度的;这一段描述使用具有比环路链接显著更低的带宽的数据路径连接简单环;下一部分描述使用具有与环路链接相同或接近的带宽的数据路径连接简单环。实际上,在一个实施例中,附加的数据路径就是附加的环路链接。首先,让我们从图形符号转向更抽象。
简单环结构
图14以3d透视法显示了具有一个环路接口芯片I1和7个环路绘制芯片D1-7的环。没有显示连接到环路绘制芯片的dram芯片。
图15显示双环系统,第二个环经第二环路接口芯片连接进第一个环:
双环示意结构
在这些环中存在6个和7个环路绘制芯片仅为了容易示例。通常,环路绘制芯片的数量是2的幂数,不论存在的环路接口芯片的数量。
在图15中,第二环路接口芯片805已经被添加至第一个环中,以便连接至/从第二个环上的环路接口芯片810。这是可能的,因为按照定义主接口是全功能双向内部系统总线。重要的一点是主机只与第一个环直接连接。
第二个环可以是逻辑第二3d图形硬件加速器,具有它拥有的视频输出接口,并且经两个环路接口芯片的环至环链接仅用于避免具有两个主机接口。折衷是两个环系统必须共享经单个链接到/从主机的带宽。在立体支持的特殊情况下,其中一个环计算左眼视图,另一个计算右眼视图,应用软件和图形驱动能够保证从主接口发送的大多数图形驱动命令信息对于左眼视图和右眼视图的渲染是相同的。这意味着对于两个环中的一个或另一个有少量的非等同图形驱动命令信息表示,然后大量的图形驱动命令信息将只发送一次,以被两个环处理。(这在效果上是图形驱动命令信息多播而不是更通常的单播。)因此,能够通过两个并行局部环执行两个并行渲染,无需占用比单个渲染更宽的主接口带宽。
另一种替换是对于第一个环的子处理器。它能够计算阴影贴图、反射贴图等,只要对于这些渲染计算的特殊视图矩阵能够被认为是最终已渲染图像的渲染的前面的(部分)帧。
为环增加附加的环路接口芯片允许连接至在另一个环中的另一个环路接口芯片。在计算机科学连接性术语中,能够建造的结构的种类是任意连接图(也叫网络),不只是环或直接非循环图。而且由于环路接口芯片能够在任何期望的地方连接至主机,不必具有对图的单个“根”的等同物。因此,本发明的结构和封装在这一类连接结构上比能够形成的施加了很少的限制。
分成盒子
现在论述在简单环或更复杂的环集合的盒子级别上的封装。尽管复杂的多环结构能够封装在一个底架内,但是存在支持任意图的更简单的方式。暂时假定简单环(但是具有多个环路接口芯片)作为标准被封装进具有内部电源的2U机架安装盒子:2U图形板。
用于到和从图形板2U盒子内部环路接口芯片的外部输入/输出的所有信号都需要加到在盒子后部的标准连接器。这些标准连接器中的一些是视频输出接口。其他连接器是标准主接口连接器。在盒子后部的主接口连接器中的一个或更多具有插到连接器中的外部电缆,电缆的另一端连接至一个或更多主机。但是也可能在盒子后部的主接口连接器中的一个或更多具有插到连接器中的外部电缆,不过电缆的另一端不连接至另一个主机,而是连接至在相同或附近机架中另一个不同图形板盒子后部的主接口连接器。因此,仅使用单个标准产品,例如具有16个环路绘制芯片和3个环路接口芯片的2U图形板,就可以仅使用电缆连接构造环的大量不同的拓扑图。(并且当然,一些配置软件。)这些配置可以是用户自定义的,而不是工厂定制的。
捷径(shortcuts)
至今为止大多数详细论述都集中在渲染计算如何能够在连接在简单环中的大量环路芯片中分配,例如,每一个环路芯片只连接至它的逆时针顺序相邻的前一个环路芯片和后一个环路芯片。这一部分将论述前面提到的附加的非局部连接性路径如何能够实际用于提高渲染处理的一些方面的性能。
最佳环路包流
对于能够构造为流处理的计算处理,简单环连接性很好地平衡,例如,计算数据顺序流经所有计算节点(芯片)。环路接口视频像素环路包属于这一类,并可能占简单环上全部环业务的三分之一。环路结构图形状态环路包大多也属于这一类,但是通常不计入环业务的显著数量。
环路结构图形基元和绘制像素环路包不是最适合使用流格式的;在点对点传输更加最优化的连接性方案中它们将消耗更低的带宽。这两种环路包类型占简单环上全部环业务的二分之一到三分之二,当环中有更多数量的环路绘制芯片时占更大的百分比。因此,为简单环增加非局部连接性将帮助环路包类型。
捷径
各种实施例以大量不同的方式为简单环增加非局部连接性。一个实施例为所有环路绘制芯片增加非局部连接性。尽管这种方法是最直接的,但它对能够最小提供它们的环路结构芯片类型增加了附加的引脚,并且增加了比通常所需更多附加的连接性。
最“纯”的实施例将创建新环路结构芯片类型—“交叉(Cross)”芯片,该芯片将具有通常的环路链接输入端口和环路连接输出端口环路链接,但是它也将具有通常的两种之外的附加的环路链接接口引脚。这些附加的环路链接能够用于增加期望的非局部连接性。这种方法的主要限制是对于建造环路结构的商业实现所必需的工程计划它增加了另一种新的自定义芯片设计,以在系统中可支持的环业务数量的一定增长为交换。
折衷方法是代替为向标准环路接口芯片设计增加期望的附加非局部连接性的实施例。尽管环路接口芯片也已经必须支持大量的接口引脚,它不作为环路绘制芯片载入。给定系统配置将包含比环路绘制芯片更少的环路接口芯片,因此增加环路接口芯片的成本将具有少得多的总成本影响。另外,在一些实施例中,支持在环路接口芯片设计上的主接口的许多现有引脚可以在非局部连接性接口的实现中被重新用作引脚。在这些非局部接口的接口细节上一个简短注释。在一定水平上,所有这些非局部接口必须与环路链接接口兼容,因为相同的环路包类型必须通过这两种接口。但是取决于环境,因为在非局部接口之间的最期望的连接将是其他非局部接口,在一些实施例中,非局部接口不一定具有与环路链接接口相同的数据宽度和引脚接口。所以为了避免不必要的限制非局部接口与环路链接接口相同,它们将不称为环路链接接口,即使是这样一个实施例。相反它们被称为捷径,与它们在环路系统中的功能接近的名字。
增加的捷径的例子,包括不同的捷径连接和形成相同连接的不同方式
图16(a)-16(k)显示连接捷径的大量不同方式,以及在一些情况中显示形成相同捷径连接的两种不同方式。在图(a)-16(k)中的所有例子显示包含16个环路绘制芯片(用对角阴影线圆圈1602表示)和1、2或4个环路接口芯片(用空心圆圈1604表示)的环。环路接口芯片不具有任何捷径支持(例如,只具有标准的每个一个环路链接输入端口和环路链接输出端口的那些),或者新实施例中每个环路接口芯片具有一个附加的捷径输入和输出端口。在一些实施例中,允许捷径与标准环路链接接口不同,然而在一个实施例中,它们只是连接至环路接口芯片的附加的环路链接接口。(这些情况是将在一个情况接一个情况基础上指出的那些。)在所有情况中,具有箭头的黑线指示在环路链接或捷径上的数据流的方向。
图16(a)显示具有两个环路接口芯片但没有捷径的示例环。图16(b)显示具有一对捷径的环,有效允许一些单播环路包使用绕过8个环路绘制芯片的“捷径”。在图16(b)中,增加的捷径只连接至其他捷径,所以用于增加的捷径端口的接口不必与环路链接接口相同。在图16(b)中,捷径呈现为比芯片之间的环路链接连接长得多的线,但是这只是示例表示的假象。图16(c)显示与例子16(b)相同的连接性但是各芯片被不同定位以便最小化所有的连接长度。图16(c)只显示一个实施例,其中连接长度能够保持为短的。如果期望,物理芯片和印刷电路板的许多其他配置是可能的,仍然能够实现这种短的长度目标。通过这里的教导,这种替换配置对于本领域的技术人员将是明显的。
在图16(b)中,使用了两个环路接口芯片,只是为了增加一对捷径。如果增加了必须使用环路链接接口来建造捷径的限制,能够实现对于图16(b)相似的连接性。图16(d)显示具有单个环路接口芯片和没有捷径的简单环。图16(e)显示与图16(b)等同的连接性,但是仅使用一个环路接口芯片。图16(f)显示与图16(c)相似的短的连接长度实施例。
在描述了一些附加的连接实施例后,将论述在图形渲染系统的机能中量的改进。图16(g)显示具有四个环路接口芯片并具有不一定与环路链接接口相同的捷径的环。在图16(g)中,“捷径”是向前跳过四个环路绘制芯片的。图16(h)中所示的环非常相似,除了“捷径”是向后跳过四个环路绘制芯片的。当后面论述这些不同实施例的性能时,将看出向后跳过比向前跳过改善了业务流量。图16(i)是支持短的最大连接长度的替换物理布置(与图16(c)和图16(g)的观点相似)。
图16(j)显示具有与图16(h)-16(i)相同数量的芯片(例如,具有捷径的四个环路接口芯片)的另一个实施例。在图16(k)所示的实施例中,这个系统的数据流被更好地形象化。现在可以看出连接是环路绘制芯片的向前和向后的环,具有每隔四个环路绘制芯片从一个方向跳到另一个的能力。注意在图16的左侧和右侧的半个环路接口芯片是同一个环路接口芯片。
两端有箭头的虚线是表示再次实施。图16也可以画成一个有八个环路绘制芯片的外部的逆时针环和一个有八个环路绘制芯片的内部的顺时针环,在3、6、9和12点位置具有四个环路接口芯片,如图17所示。这个实施例支持比图16所示的其他实施例更高效率的带宽。
这个环结构以及它的更大的通用化将被称为双简单环。
图17是图16(i)作为双简单环的重新绘制。
所有这些示例配置都是显示包含16个环路绘制芯片的系统。这些示例配置可以通用化为包含其他数量或更多数量环路绘制芯片的实施例,其中的一些将保持相同数量的环路接口芯片,而其他的可以增加附加的环路接口芯片,或者以与增加的环路绘制芯片相同的比例,或者以不同的比例。这些实施例的一个通用种类将是图17的通用化。将n个环路绘制芯片分布为外部逆时针环有n/2个环路绘制芯片,内部顺时针环有n/2个环路绘制芯片。每m个环路绘制芯片插入一个环路接口芯片用于桥接在内部和外部环之间,其中m是介于1和n/2之间的正的整数,n/2是m的整数倍数。有些稍微不太规则的实施例可以放松在m上的限制。
一对捷径的性能
考虑图16(b)或16(e)的连接性。局部环已经具有将环连接二等分的两个增加的单向链接。现在,在一些情况中,单播环路包能够利用捷径避免环上所有环路芯片的环路链接在源和目标环路芯片之间来回移动。
假定统计上平衡的环业务,例如,所有源/目标对都相等地可能发生的单播,下一段论述向局部环增加这两个捷径的影响。影响是环路包的一些(将必须通过八个或更多环路绘制芯片的那些)将使用捷径来避免经过环路绘制芯片中的8个。
我们的名义上的假定是每一个环路绘制芯片发送相等数量的环路包至每一个其他的环路绘制芯片,包括它自己。在存在n个环路绘制芯片没有捷径的通常情况下,平均来说,对于由环路绘制芯片每秒发送的附加的每一个绘制像素环路包,在环中所有环路链接接口上每秒所需的增加的带宽以绘制像素环路包的0.5*(n-1)/n≈0.5倍位长上升。
具有了捷径,增加的部分低于0.38。
多个捷径对的性能
以下段落论述图16所示其他配置的性能上的影响。考虑双简单环(图17的通用化和图16(i))。假定每四个环路绘制芯片存在一个环路接口芯片(例如,每个方向每行只有两个环路绘制芯片)。表3显示在环中所有环路链接接口上每秒所需的增加的带宽作为绘制像素环路包的位长的倍数,对于大小为n的简单环的情况,以及对于大小为n的双简单环的情况。
能够从该表得出的几点意见
首先,分数0.5*(n-1)/n≈0.5,对于小的n是稍微低于0.5(如所示)。第二,对于小的n,双简单环不会有很大增益。对于n=8,相对简单环的增益仅为1.077。意思很清楚,在小的环中捷径具有有限的增益。第三,对于更大数值的n,增益提高了,但是对于非常大的n,提高的速率变平了。意思很清楚,因为在这种结构中的捷径是相对局部的。为了减小对于非常大数值的n的增加的带宽载荷,将增加更全局的捷径链接(例如,不再是双简单环)。
最后,对于具有64个环路绘制芯片的环,相对于简单环结构的双简单环的增益是几乎三倍。而且尽管对于视频像素和图形命令环路包每个环路绘制芯片的带宽要求是相对独立于n的,为了衡量更高的像素填充速率,单播绘制像素环路包的数量与n成比例增加,对于更大数值的n提供更大的释放。
表3只显示对于是2的幂数的n值的结果。这么做是为了更好地说明趋势。对于在这些2的幂数的之间的许多数值,通用结构也运行得很好,而且类似地衡量改进的因素。例如,对于n=48,简单环系数是0.490,双简单环系数是0.185。
以下段落论述能够如何使用更高性能的配置。至今为止的论述说明了对于环路芯片的互连的不同实施例的边缘单播包容量带宽成本中的差异。特定连接实施例的选择影响其他系统限制。利用给定连接性配置的一种方式是最小化区分环路链接接口的另一个实施例中的最大带宽,例如,减少用于实现环路链接接口的引脚数量,和/或使用更保守的数据时钟频率。
平均、模拟和动态负载平衡
如果环路链接接口不是限制因素,那么不同的连接性配置可以允许比其他的更高的最大渲染速率。在假定环路包通过的路径长度(跳过的环路绘制芯片节点数目)将在平均值左右足够快地波动以使环几乎从不处于过载或欠载的状态之下,已经给出了在不同的配置之间的相对性能,以便使用所有带宽。
第一个问题是:这种假定的有效性怎么样呢?对于任何像素面积的图形基元,绘制像素环路包的统计数字将相当均匀地分布,并且只有不正常的情况(象一个像素宽、非常高的竖直三角)才会与名义上的假定显著不同。对于具有相当小面积的图形基元,限制因素将不是绘制像素环路包的分布,而更可能是最大几何基元速率,在该情况下的论点尚在争论中。
说到这里,这些类型的系统对于还算简单但精确的数字模拟是相当经得起检验的。因此,在建造实际芯片之前,如何通过名义上的假定来接近地预测任何给定配置的可能实际的性能的问题是相当容易验证的。
最后,为了最大程度利用“捷径”,在一些配置中,如果用于确定哪些单播环路包将使用特定捷径的算法不是简单的“最短距离”算法,而是具有静态或动态调整参数的算法,则可以获得更好的性能。
静态调整参数的一个例子是存储在寄存器中的旁通百分比值,该值定义了实际允许使用捷径的合格环路包的数量。如果(比如说)只有合格环路包的80%实际使用捷径,特定连接性配置的分析可能显示达到了最好的整体性能。
动态调整参数的一个例子是与上面的静态调整参数例子相似的旁通百分比值,其中旁通百分比值是变化的并且是环业务流量的动态统计的函数。这个例子也是一种形式的动态负载平衡。
环路绘制芯片内部
本文件的这一部分描述环路绘制芯片的一些内部结构细节。
制作一种结构的文件的重要部分是有效地描述考虑它的抽象模式。因为环路结构已经将传统3d渲染结构的几乎所有传统总线和互连并入了单个环;部分未并入的模式对于理解新结构是有用的指导。
图18(a)描绘了环路绘制芯片内部块示意图,为清楚起见,好象存在三个在芯片之间运行的单独的数据传输环,每个具有它拥有的处理部件,并拥有到附属dram存储器的直接端口。
图18(b)是根据一个实施例的内部连接绘制的,具有单个物理环路链接输入端口和环路链接输出端口,用于将所有环路包带到和带出环路绘制芯片,并具有单个dram存储器控制器,用于在三个处理部件的需要之间裁决。
光栅化管线
到20世纪90年代末,应用还在为在渲染处理上的更多控制奋斗。它们期望在光栅化期间具有移动到每个像素基础的照明操作,并希望对每个顶点和每个像素操作(可编程着色)的更固定的控制。这些期望的扩展控制中的一些在最近的产品和扩展图形api中正开始显现出来。至此,已经极度限制了对每个像素可编程级中的应用可利用的控制数量。
在即将到来的几代中,应用正假定在3d图形渲染管线的可编程部分可利用更灵活和功能强大的控制。
设计了环路结构以迎头赶上(leap-frog)短期内从任何资源可用的实时3d渲染技术。在至少一个实施例中,环路绘制芯片3d光栅化管线假定:
在不降低渲染速度的情况下,高样本密度过采样总是可得到的。通过支持比竞争结构高得多的样本密度,提供更高的渲染图像质量。
提出足够的纹理存取带宽,用于在不降低渲染速度的情况下由可编程每像素着色器存取和使用几层复杂纹理。在像素着色器存取一或最多两层简单纹理之后,竞争结构典型地开始暴露。在不降低渲染速度的情况下,这些每像素着色器将支持更加逼真的效果,并支持比竞争结构高许多倍的长度和复杂性的着色器。
在不降低渲染速度的情况下,将使用比竞争结构更精确和完善的数字格式来处理这些着色器中的颜色和几何数据。
环路绘制芯片中的三个功能块每一个实现这个管线的一部分:
光栅化模块转换输入的顶点数据,并允许应用每顶点应用可编程操作。对几何基元进行剪辑检查,并且如果需要的话全部剪辑至视见区。在光栅化成像素之后,用户提供的像素着色器将被应用于纹理并点亮像素。
样本填充模块相对于几何边缘采样已着色像素,并在rgbaz值上执行条件样本更新函数进入帧缓冲器。
当产生视频输出信号像素值时,卷积模块对来自帧缓冲器的样本值在飞行中应用一种应用提供的圆形对称抗混淆滤波器。这支持非常高质量的全屏幕抗混淆。
在至少一个实施例中,用于实现这三个模块的电路可以全部包含在环路绘制芯片中。
缩放问题(Scaling Issues)
这一部分论述涉及支持各种形式的可缩放性的折衷。
抽象对实际
在这里的大多数实施例中已经假定有十六个环路绘制芯片使论述和例子简单。对于与环路结构有关的性能和规模的一些组假定,将16个环路绘制芯片放入每个局部环可能是在成本和性能之间的合理的折衷。在每个局部环中16个环路绘制芯片的适合性的这样的一个例子,在合理的视频分辨率(1920×1200)和样本密度(16样本每像素)下,16个环路绘制芯片支持全60Hz视频格式帧速率,并且也许能够支持比等效技术基于单芯片的3d图形硬件加速器复杂一个级别幅度的像素着色器。
以下段落论述如果更多的环路绘制芯片增加到局部环中附加的好处和附加的基础结构支持要求。为了得到对问题的感觉,考虑在范围的远端的例子:在局部环中有64个环路绘制芯片。名义上,这个系统具有4X多的帧缓冲器存储、4X多的像素着色器能力、4X多的抗混淆输出卷积能力,但是如果像素填充速率由环路链接限制,那么在像素填充性能上没有增加。通过将像素填充功能分解成用于4个环路绘制芯片(而不是在前面的大多数例子中的一个环路绘制芯片)的任务,每个担负一个像素的样本的四分之一,我们能够将可用的样本密度增加至64个样本每像素,而没有其他的性能上的折衷。像素填充速率没有改变,但是每像素填充的样本数量增长4,像每像素卷积的样本数量以及在给定渲染速率上可支持的像素着色器能力一样。
作为替换,如果样本密度保持在16样本每像素,但是抗混淆滤波器的直径从4像素增加到8像素,可支持4X的更大面积卷积核,而且我们也将得到4X的更大像素着色器能力。这里,4X的更大卷积能力促成了增加抗混淆滤波器的大小(在相同的样本密度上),相对于增加样本密度至4X但是保持抗混淆滤波器直径相同(在前一段中的例子)。没有使用4X的更大样本写入带宽。大于直径4的抗混淆滤波器会减小用于普通抗混淆目的的价值,但是它们可能在支持各种形式的模糊滤波器上是相当有价值的。
为了使64个环路绘制芯片局部环支持增加的样本密度,我们必须在4个不同的环路绘制芯片之间分配像素中的样本。在这些环境下,绘制像素环路包现在被多播至适合的四个一组的环路绘制芯片,而不是单播至单个特定的环路绘制芯片。如果不折衷,这不能完成;需要由环路绘制芯片支持非常小的附加电路和模式,对于小于或等于16个环路绘制芯片的局部环是不需要支持的。
稍微更大的改变是在系统中所需的附加的缓冲和工作上下文。因为现在每一个环路绘制芯片都能从64而不是16个环路绘制芯片(在两种情况中都包括它本身)之一接收绘制像素,必须存在64个而不是仅16个图形基元绘制上下文。这些上下文不是很大;在一个实施例中,三角绘制上下文包括3个定点控制顶点和用于Z的浮点平面方程,可能加上用于存储当前渲染语义设置的少量位。在缓冲侧,环系统必须准备在用于往返旅行环通信的4X的更长等待期间内工作。在实现级上,这意味着其(最佳)大小依赖于绕局部环往返旅行所用时间数量的各种内部队列将必须数量更大。
对于环路结构的特定实现,存在尺寸回报和增长的实现负担,以具有支持大于64个环路绘制芯片大小的环的能力。很可能大多数系统应用将发现:超过16至64个环路绘制芯片范围中的某处,如果附加的环路绘制芯片被用于制造较小尺寸的多个连接的局部环,而不是增加单个环的尺寸,应用可能具有更高的整体系统性能。重要的是注意这个规则是在一个实施例中对不支持单个环内像素填充带宽的缩放的深思熟虑的结构确定的结果。
前面的论述处理了多达64个环路绘制芯片环的情况。以下段落论述在16和64之间的数量。如果不是将每个像素中的样本分成四路,可以将它们分为两路或三路。这样支持像素样本密度32和48样本每像素。在这些中间大小的环系统中的其他细节和折衷与前面论述的64个环路绘制芯片大小的局部环情况的描述类似。
在上面,当使用短语“将像素的样本分为2、3或4路”时,没有包含关于如何进行分配的固定假定。例如,4路分配可以将64个样本分成像素的4个等大小的不交叠的象限。作为替换,可以由样本序列数量来进行分配,导致每个环路绘制芯片接收在系统边界内任何地方伪随机定位的样本。这个细节在分配与如下机制如何相互作用方面造成了一些小的差异,该机制是伪的随机扰乱像素中样本的分配的子像素位置。
至此,论述了从16个环路绘制芯片按比例增大系统。以下论述相反的情况:按比例缩小至8个或4个环路绘制芯片。支持较少数量环路绘制芯片的实现细节蕴含依赖于如何使用这些较小的系统。向下缩放陷入的系统实现最优化假定是dram中样本存储器的布置和计量。只要知道在像素中样本上不断执行的最小操作是“读—改—写”所有样本,基于支持的像素中样本的“已知”最小数量,dram存储器就能够具有嵌入它的操作的各种页面和高速缓存假定。(这些假定不能太严格,因为相同的存储器子系统也必须用于纹理提取。)如果最佳的“单个长环”是4或8个而不是16个样本,那么将更容易支持在环中具有4个或8个环路绘制芯片的系统。
在实施中卷积也是一个因素。使用少于16个环路绘制芯片,局部环就不再能支持抗混淆滤波器的相同的复杂性。折衷可能变复杂了,因为必须同时考虑直径4但是样本密度低于16,以及低于4的直径但是样本密度还像16一样高或更高(在较低的整体视频格式像素速率上,例如,xvga、ntsc)。
再一次,存在极少的“硬”限制,但是相反存在一系列基于由相对低级实现细节施加的限制的折衷。对于在环路绘制芯片数量上施加硬的较低限制,没有绝对理由。但是收集与环路绘制芯片的最小数量的工程决定有关的限制和折衷,在给定实施例中要全面支持的局部环配置是有用的。
从实用观点来看,存在对于环中具有少于16个环路绘制芯片的系统的合理市场。首先和首要的,如其他地方将要描述的,在一些情况中,具有16个或更多环路绘制芯片的环可能被(暂时)分成多个环部分,每一部分驱动相对低分辨率的物理图像显示设备。另外,存在少许价格敏感市场区域,仍然愿意为具有8个或4个环路绘制芯片的环路结构系统支付一些额外的费用:编辑和广播ntsc和pal应用就是一个这样的市场区域。
在3d图形结构中的缩放限制
一些技术比例变化很容易。例如,如果玩具制造商需要来自电池的更高的电压或电源,用作玩具设计的新样式的电源,所有制造商需要做的就是将电池盒扩充为容纳八节标准电池而不是四节电池。玩具制造商不必具有特殊的定制生产的更大电池并分发到世界各地。因此,可以说当前的(标准化)电池设计(A电池、AA电池等)就是高度可缩放的。其他技术不能很好的按比例缩放。例如,摩托车制造商不能通过将两个250cc发动机而不是一个250cc发动机连接到一个摩托车上来制造更有动力的摩托车。相反,摩托车制造商必须定制设计500cc发动机,尽管一些子部分可以与较小的发动机共享。历史上,3d图形硬件加速器更像摩托车发动机而不像A电池。这一部分论述在缩放通用计算机和3d图形硬件加速器上的一些限制,并指出在对3d图形硬件加速器的缩放上的限制不像一个人可能想象的那么基础(例如,本发明的实施例的教导将允许3d图形硬件加速器更像电池而不像摩托车发动机按比例缩放)。
3d图形与通用计算如何不同
编写以在通用计算机上运行的大多数计算机程序是固有地连续的,也就是说,它们在如下假定下编写,假定程序将在任何时间点由通用计算机内的单个通用处理器元件连续执行。这意味着如果通用计算机包含不只一个而是多个并行通用处理器元件,这样的计算机程序也不能运行得更快。获得计算机程序并修改它使得它能在包含多个并行通用处理器元件的通用计算机上运行得更快的行为叫并行化。如果这种修改由人执行,那么称这种行为是“手工并行化”。如果这种修改由计算机程序执行,那么称这种行为是“自动并行化”。
并行化的质量,无论是手工还是自动,都能通过如下比率来衡量,该比率是修改后的程序在包含n个并行通用处理器元件的通用计算机上运行相对于原始的未经修改的计算机程序在包含n个并行通用处理器元件的相同的通用计算机内的通用处理器元件之一单个上运行时的运行速度的n倍快多少,对于n的各个数值。这个比率称为速度比。在理想情况下,对于一定范围的n值,速度比是1.0,并且在这种情况下,在给定范围内并行化的质量称为“完全线性”。在更现实(尽管仍然很少)的情况下,对于一定范围的n值,速度比接近1.0变化,在给定范围内并行化的质量称为“近线性”。在更典型的情况下,速度比低于并且不接近1.0,并行化的质量称为“亚线性”。(在极少并且特定情况下,速度比大于1.0,并行化的质量称为“超线性”。)对于特定的n值,速度比乘以数值n得到可能的计算机程序的“加快速度(speed-up)”,如果它运行在包含n个通用处理器的通用计算机上,相对于在同一个通用计算机中单个处理器元件上运行原始计算机程序。
至今为止,已经证明实际上对于大多数计算机程序不可能实现计算机程序的自动并行化。如果期望特定的程序在包含多个并行通用处理器元件的通用计算机上运行得显著更快,那么必须由人以修改后的程序实现期望为明确的目标对原始的程序进行有效的重写。
现代的集成电路芯片技术使得将相对高性能的通用处理器元件放在单个相对低成本的集成电路芯片上成为可能。诸如这样的芯片通常用作在相对低成本通用计算机内的单个通用处理器元件。对于成本作为较小目标的更昂贵的通用计算机,将期望使用比在相对低成本通用计算机上使用的低成本通用处理器元件更快(即使更昂贵)的通用处理器元件。然而,一旦集成电路芯片技术允许将整体相对高性能的通用处理器元件放入一个相对低成本的芯片,它就已经证明了难以建造,即使是“成本不是目标”的单个通用处理器元件,该元件只比造价较低的元件快几比特。因此,现代的更高成本通用计算机是由n个不比当前的低成本通用处理器元件快多少的通用处理器元件建造。通过允许已经成功并行化的计算机程序比在造价较低的计算机上运行得更快,但也通过其他的非处理器特征,诸如增加容量的输入/输出子系统、更高的整体可靠性、支持更大数量的主存储器、更灵活的可配置性和同时运行大量甚至非并行化计算机程序的能力,这些高成本通用计算机将更高的价值交付给用户。
但是许多用户不需要这些附加的特征。他们可能不需要大量的输入/输出或主存储器容量,并且可能只需要在一个时间允许一个程序,而且这些程序大多数可能没有经过手工并行化,或不值手工并行化的成本。
因此,自动并行化的失败是为什么只包含单个通用处理器元件的相对廉价的通用计算机是用于运行许多计算机程序的优先选择的原因之一;包含一个以上通用处理器元件的内在更昂贵的通用计算机将不会运行许多程序运行得更快。
在包含一个或更多通用处理器元件的通用计算机上运行计算机程序立足于与在3d图形硬件加速器内实现工业标准3d图形渲染管线(例如OpenGlTM)相对。是否存在相同的并行化限制是自然问题;例如,一旦能够在单个相对低成本集成电路芯片上实现相对高性能标准3d图形渲染管线,那么由多个比低成本单个芯片方案将更快地运行标准3d图形渲染管线的芯片来建造标准3d图形渲染管线是可能还是不可能的呢?
实际上,用于在家庭用户设备中运行3d计算机游戏创建的新芯片中的几种:“家庭游戏”市场(家用PC的或专用3d游戏“控制台”)是标准3d图形渲染管线的相对低成本相对高性能单个芯片实现。但是其余的类推遵循吗?
答案是不。原因是对于实现标准3d图形渲染管线的特殊情况,自动并行化的等效操作是并已经通过计算机图形硬件加速器成功实现用于现在的几十年。
原因是:对于3d图形硬件加速器,切断图形数据(对标准3d图形渲染管线的正常输入)的单个连续流使之成为多段,分配给一组高并行图形处理子元件中下一个可用的,这是可能的。这种并行化是自动的并且对于标准3d图形渲染管线的用户是不可见的,而且并行化的质量是极高的:速度比0.98(全线性加快速度的98%以内)。经过多年,图形硬件加速器已经揭露了近线性加快速度成为可能的条件,以及不可能的条件。
尽管大多数最近的新3d图形芯片被设计用于家庭游戏市场,它们的内部结构仍然是给人印象深刻的。这些家庭游戏芯片(例如,在$40成本范围内)应用了大量的性能增强技术以实现高的内部速度和最小化外部引脚的使用。但遗憾的是,这些结构通过排除几乎所有的将芯片聚集在一起获得更高级别质量或性能的潜在方式来实现这种性能。通过最优化在他们的目标基于单个3d图形芯片的家庭游戏产品中使用的芯片的设计选择,当并行使用多个3d图形芯片时,已经排除了用于实现近线性自动并行化的大多数可能的技术。这些设计选择包括最小化芯片上引脚的数量(以实现低成本)、具有关于它们控制图形数据被处理的顺序的能力的明确假定的内部算法的选择(例如,没有其他芯片获得发言权)、关于用于表示图形数据所支持的数据格式的设计选择。
相反,包括媒体的高端性能市场用户对于3d图形硬件加速器更喜欢低于$1000价格点的性能和能力。因此,必须使用从根本上不同的图形芯片设置结构。这些专业市场要求3d图形硬件加速器具有家庭游戏市场的100倍的存储能力和性能。
#环路绘制芯片 |
样本密度 |
像素着色器能力 |
像素着色器速率 |
最大视频格式像素速率 |
11224488161632326464 |
1224488161632326464128 |
1/161/81/81/41/41/21/21122448 |
1G1/2G1G1/2G1G1/2G1G1/2G1G1/2G1G1/2G1G1/2G |
200M100M200M100M200M100M200M100M200M100M200M100M200M100M |
表1 环路绘制芯片数与性能
像素着色器速率 |
深度复杂性 |
物理图像显示设备尺寸(以像素计) |
渲染帧速率 |
1/2G1/2G1/2G1/2G |
3366 |
1920×12001280×10241920×12001280×1024 |
76Hz76+Hz38Hz60Hz |
1G1G1G1G |
3366 |
1920×12001280×10241920×12001280×1024 |
76+Hz76+Hz76Hz76+Hz |
表2像素着色速率与性能
n,环路绘制芯片数量8163264128256 |
简单环系数0.4380.4690.4840.4920.4960.498 |
外部/内部环系数0.4060.2890.2130.1700.1480.137 |
表3增加的带宽缩放系数