AGP指南
(原文来自intel站点

导言

    本指南提供AGP接口技术的介绍。在这个指南中我们将回顾目前在PC机上常用的3D图形处理方法以及存在的一些有关问题。然后,我们将讨论AGP是如何处理这些问题以及如何提高主流PC机处理极其复杂的3D图形应用的性能。我们还将探索AGP对软件发展的潜在作用。
    我们假设读者了解PC机的基本结构和3D图形流水线的功能。PC基本结构的背景信息可以在一些很好的PC技术的文件中找到,比如Peter Norton's Inside the PC,第六版,SAMA出版。Intel的图形站点提供了3D图形技术的深入浅出地介绍。

目录

第一章:当前PC机上的3D图形

第二章:PC机上的下一代3D图形

第三章:AGP数据的传输模式

第四章:AGP的内存映象

第五章:AGP的优点概览

第六章:对软件发展意味着什么

第一章 当前PC机上的3D图形

        AGPPC平台上一种能充分改善对3D图形和全运动视频的处理的新型接口。为了全面了解AGP技术所带来的影响,有必要首先回顾一下当前在没有AGP技术的情况下PC平台是如何支持3D图形显示的。
        逼真的,活动的3D图形显示要求有高性能的协处理器,用以进行定义3维空间中物体的位置的一系列连续的几何运算。通常,这种几何运算是由PC机的处理器完成的,因为它适合于做这种浮点运算。同时,图形控制器必须为产生3D图象的逼真表面和阴影而处理纹理数据。3D图形处理中最重要的方面是对纹理图的处理。所谓纹理图就是一种描绘3维物体表面细节的位图。纹理图的处理包括从一个位图中取出124、或8个纹理象素;按照最终图象的需要,依据在一个或几个位图中的位置的数学近似值取得它们的平均值;然后将计算后的点写到帧缓冲中。从3D的角度以及要贴上位图的物体的几何角度上看,纹理象素的坐标计算是很重要的功能。
        图1所示的是目前的PC系统是如何支持纹理图处理的。从图上可以看到,有5个基本步骤:

  1. 在它们被使用之前,纹理图被从硬盘或光盘中读进内存。数据在进入内存之前,先通过IDE总线和芯片组。

  2. 一个场景需要某个纹理数据的时候,该纹理数据从内存中读入到处理器中。处理器在纹理图中处理视点转换并将结果存储到CACHE中。

  3. 之后,CACHE中的数据进行照明和视点转换的操作,结果写回内存。

  4. 图形控制器将转换好的纹理从内存中读到自己的局部显存中(也叫图形控制器存储器,帧缓冲或离屏(off-screenRAM)。在现在的系统中,这些数据必须经过PCI总线才能传到图形控制器中。

  5. 图形控制器随后对纹理加上从帧缓冲中读取的2维颜色信息,用于对在2维显示器屏幕上显示的帧着色。结果被写回帧缓冲。系统的数模转换器将读取帧,并将其转换成模拟信号以驱动显示器。

       大家可能已经注意到当前纹理处理方法中的几个问题。首先纹理必须存放在内存和帧缓冲两个地方,多一个拷贝降低了存储资源的效率。第二,在帧缓冲中存放纹理,哪怕是临时地存放,都需要纹理大小的存储空间。纹理越细致,就越需要硬件厂商在他们的系统中设计更多的帧缓冲。然而这种存储器是非常贵的,因此这不是理想的处理方法。最后,PCI总线132MB/s的带宽限制了纹理图传输到图形子系统中的速度。此外,在典型的系统中,PCI总线上的几个I/O设备必须共享可用带宽。另外一些高速设备如Ultra DMA硬盘驱动和100MB/s局域网卡的引入,都增加了总线的拥挤。显而易见,PCI总线的拥挤限制了PC机上3D图形设备性能的发挥。
     目前,应用系统使用多种方法来补偿当前PC机固有的局限性。应用系统利用CACHE或“交换”算法来决定哪个纹理需要存储到帧缓冲中。典型的,应用系统预留一部分离屏局部存储器作为“帧到帧”纹理的交换空间,预留的离屏存储器包含一些常规的纹理(固定纹理存储器),比如在飞行模拟器中的云和海。
       如果硬件能够只从局部显存中获得纹理,算法通常企图将每一个帧或场景中所需的纹理预取到局部显存中。如果没有预取,那么当所需纹理交换到局部显存或者更糟(比如需从磁盘到内存后再到局部显存)的时候,用户将明显地看到场景的暂停,就好象软件停止绘图。通常如果为取得更好的效果而进行过硬件压缩的纹理在初始化装入时,会引起更长时间的暂停。
      应用系统预留一部分局部存储器作为交换空间,并将其一部分作为永久保留区来存放固定的常规纹理。根据每一帧的纹理数,算法将改变用于存放纹理交换和固定纹理的存储单元的大小。包含大量纹理的场景总是将其中一些纹理进行再应用。这些受益于大的纹理交换空间。

第二章:PC机上的下一代3D图形

         3D图形显然得益于PC平台的几个新技术的发展。首先也是最重要的是系统的核心换成了Pentium II处理器。PII处理器能够更好处理3D流水线的几何部件(如每秒绘制更多的三角形)。PII处理器包含一个带有L2 CACHE的内核封装。PII处理器仍然具有双独立总线(DIB)结构的特性,双独立总线将内核连接到L2 CACHEPC的系统总线上。实际上,两个总线的同时操作大大提高了处理器的性能,因为处理器能同时运行L2 CACHE外的指令和与外设通信。
        当然,AGP的引入是提高PC平台3D图形处理的另一个重要原因。AGP通过直接在芯片组和图形控制器之间增加一个新的高速专用总线来减低图形处理中的瓶颈问题。这样就去掉了PCI总线约束下的带宽,增强3D和视频交换。作为补充,AGP允许在着色期间直接从内存获取纹理数据,而且比预取到局部显存还要好。根据图形控制器的应用情况内存段能够被操作系统动态地保存,这部分内存被作为AGP存储器或非局部显存。这样的结构带来的结果是图形控制器只需要在局部存储器保留少量的纹理图。局部存储器越少,意味着整个系统的成本就越低。这一创新也去掉了局部显存对存放纹理图大小的限制,因此允许应用软件使用更大的纹理图和更精致逼真的图象质量。最后,AGP的使用将图形和视频数据的离线装载脱离PCI总线,这使得紧张的带宽中能有更多的空间为其他的高速设备服务。

2显示下一代PC机和AGP上的纹理数据流:

        AGP是一个具有和PCI类似的连接装置的部件,它有32根线用作数据和地址信号传输,另外有附加的8根线作为边带(sideband)地址。这将在下一章中介绍。
        局部显存通常比内存要贵得多,并且当它在图形处理中是空闲的时候,也不可能被操作系统用到别的地方。图形控制器需要为屏幕刷新、Z-buffer和象素(前后缓冲)操作而快速存取局部显存。为此,程序员总是期望通过AGP系统存储器获得更多的纹理存储空间。让纹理脱离帧缓冲,能够允许更大的屏幕分辨率或者允许更大屏幕显示的Z-buffer。通过AGP,很多应用软件能够得到2-16MB的纹理存储空间。

第三章:AGP数据的传输模式

        PCI总线支持最高132MB/s的传输速率,而AGP-2X在66MHz可以达到533MB/s的峰值。之所以能达到此速率在于AGP66MHz时钟信号的上升沿和下降沿均传输数据,在这种数据传输模式下会得到更高的效率(实际的吞吐量要视不同的系统和应用软件有所变化,但通常在实际传输中能达到大约50%~80%的峰值速率)。
        AGP提供两种图形控制器从内存直接存取纹理图的模式:流水线操作和“边带”地址。AGP将第n请求的存储器或总线存取与后续请求(n+1……n=2请求)的存取重叠进行。在PCI总线中,请求n+1不能在请求n结束之前开始。AGPPCI都能采取爆发式(在响应某个单一请求时连续不断地传输多道数据项),这种爆发式传输只能部分减轻PCI在非流水线时的状况。AGP流水线操作的深度依赖于实现方法,它对应用软件是透明。

3显示非流水线操作的PCI和流水线操作的AGP

        在“边带”地址模式中,AGP利用8个附加的“边带”地址线,它们允许图形控制器在数据因上次的请求而在32位数据/地址线上传输的同时发出新的地址和请求。

第四章AGP存储器映象

        所谓的AGP存储器只是为了图形控制器能快速存取而动态申请的内存。存取的速度来自于内置在440LX芯片组中译码地址的硬件。它允许图形控制器和它的软件在页面呈现杂乱无章的时候能看到内存中相临的空间。因此,图形控制器能象存取简单实体那样的处理诸如纹理图(通常有1KB~128KB)这样的大的数据结构。这个内置于芯片组中的硬件称作为GARTGraphics Address Remapping Table,图形地址再映射表),类似于CPU中的页面机制。

        处理器线性虚拟地址由页面机制转换成物理地址。这些物理地址用来存取内存,局部帧缓冲和AGP存储器。CPU用和图形控制器同样的地址存取局部帧缓冲和AGP存储器。
        操作
AGP存储器时,图形控制器和CPU用几兆字节的相邻区域,而GRAT将这些区域转换到内存中几个不同的,甚至可能是杂乱分布的4KB页面地址上。PCI设备也通过GRAT来存取AGP存储区域,比如在动态视频捕捉时。

第五章:AGP的优点概览

        我们来看一下AGP的主要优点:
        具有更高的速度。得益于流水线、“边带”地址以及在时钟的上升沿和下降沿都进行数据传送等技术,AGP的带宽峰值比PCI总线高4倍。
        内存中的纹理图直接操作。AGP能够使图形控制器直接高速存取内存纹理数据,这比将纹理数据预取到局部视频存储器中的方法要好得多。
        数据拥挤程度低于PCI总线。PCI总线上挂接了多种I/O设备,比如磁盘控制器,局域网络芯片以及视频捕捉系统。AGP能够独立于PCI并与其并行操作。更进一步,CPU能够在图形控制器存取AGP存储器的同时存取内存数据。
       改善了PC性能的平衡性。当图形芯片在处理内存中的纹理数据的时候,PentiumII处理器可以处理其他的事务。

第六章:对软件发展意味着什么

        对于AGP的出现,应用软件应该做些什么呢?有两种可能性:1)什么都不做。2)AGP进行优化。这两种情况下,AGP的最大好处是在不失去实时性的前提下,更多和更大的纹理能应用到3D图形实现中。现在的应用系统往往限制它们的图形硬件控制器使用的纹理,使他们小于2MBAGP将改变这一切,假设应用程序包含了尖端纹理内容的升级。此外,除了新的系统以外,某些现有的系统在AGP上进行无需AGP特殊作用的写操作时也将快得多。
        真“AGP适应”的硬件能够确实使应用软件简单。但是带有AGPPC硬件将达到3个类型,这都是软件希望支持的。
        类型一:这种硬件具有AGP接口,但是却没有开发AGP纹理特性。它只不过比PCI设备有更快的数据传输速率。它或许还没有开发流水线能力或“边带”寻址。
        类型二:这种硬件自AGP存储器中渲染纹理,因此应用系统无须将纹理交换到局部存储器中。硬件可以,也可以不必从局部存储器中处理纹理。当无须从局部存储器中进行纹理操作时,这种硬件将执行的更快。这是由于没有在局部存储器中进行写点、屏幕刷新、读文字和Z-值的存取操作带来的冲突。
        类型三:这种硬件同时开发局部存储器和AGP存储器的纹理处理,可以得到最佳的处理效果。频繁使用的纹理或者小的纹理最好驻留在局部存储器中而不常用的,大的纹理驻留在内存中。因此主存的带宽消耗是最小的,减少了CPU和图形控制器之间的冲突。

DOS应用软件

        当然,纹理的直接存储器执行需要GART,因为在当今的操作系统中使用了虚拟地址结构。然而应用软件如果运行在过去的无虚拟地址空间的操作系统(DOS)中,GART服务器就无用了。旧的,运行在DOS下的应用软件要想看到AGP的高速的好处,就需要一些驱动程序使得图形控制器具有直接在内存中存取纹理的能力。

Windows应用软件

        无须修改,Windows应用软件就能得到AGP的好处,因为操作系统和DirectDraw经过细微的修改,能够在缺省的情况下支持AGP了。详细的资料可以参考微软的AGP站点。

        在目前的硬件执行中,操作系统使得AGP存储器象其他显存那样是非高速缓存式,所以不存在CPU cache和图形控制器要用的数据之间的数据一致性问题。否则,图形控制器存取AGP存储器需要查询CPU cache,这将使得在某些情况下运行出现延迟。CPU从非高速缓存中读数据的速度比较慢,所以算法需要避免CPU既从AGP主存中读又从图形局部存储器中读。
        注意在基于Pentium II处理器的系统中,这种非高速缓存式图形存储器由操作系统作为“联合写(Write Combining)”(WC)而产生,与CPU直接的非cacheable(UC)写操作相比,它的CPU写操作速度明显加快。WC存储区域在总线有效时,通过使用内建于芯片中的专用写缓冲,让CPU将多个离散的写操作在存储总线上联合到一个爆发式写内。除了速度快外,WC对应用软件是透明的。然而,对于WC来说,CPU的读速度并不比UC快,UC存储器的使用将引起Pentium II处理器的连续执行,这将有可能减慢执行速度。多个写操作在进入CPU前能够合并的事实能在硬件设备驱动中得到一些压缩,这依赖于多个连续的写是对相同的地址进行。以及存储器写的“强有序(strong ordering)”。

缺省的DirectDraw存储器分配

        除非应用程序有特殊的要求,否则Microsoft DirectDraw将在缺省情况下,按以下顺序为纹理分配存储器:局部图形控制器存储器、AGP主存储器、系统存储器。如果图形控制器不能从AGP存储器中取得纹理呢?在这种情况下,DirectDraw能够阻止为纹理分配任何非局部显存。图形控制器的驱动程序向操作系统和DirectDraw报告它的情况,如果图形控制器不能直接存取系统存储器,DirectDraw将仅分配局部显存和系统存储器给应用程序。类似的,如果图形芯片不能够在局部显存中处理纹理,DirectDraw将不分配任何局部纹理。
       如果DirectDraw同意分配的AGP内存不能够容纳所有的纹理,那么应用程序最终必须从磁盘上拷贝g更多的纹理到AGP存储器中。非常现实的,飞行模拟器和其它一些需要大量纹理的应用系统需要从磁盘或者网络中将纹理拷进AGP存储器中,不管DirectDraw给了它们多少存储空间。
    应用软件将因为在AGP中使用MIP-图而得到好处,MIP-图(预过滤,多解析纹理图)会在操作纹理期间增加存储器存取的“位置”。也就是说,低分辨率版本适合于一个小的系统存储器区域,就象图形芯片将纹理放到远离视点物体上,它在一个小的存储区域处理所有纹理的抽样版本。没有MIP图映射,芯片将越过很多单分辨率大纹理的字节以找到每一个点的正确值,这样就增加了地址跳转的距离,存储器带宽也降低了。

CopyRight © 2003