用于透明地实施z压缩的机制的制作方法

文档序号:6471831阅读:155来源:国知局
专利名称:用于透明地实施z压缩的机制的制作方法
背景技术
用于生成3D图像的标准方法从代表图像内各个对象的面的基元组开始。基元典型地为多边形,诸如可以被平铺以形成一个面的三角形或矩形。具有中等复杂形状的对象可能需要成千的基元来表示其面,并且含有多个对象的图像可能需要数万或是甚至几十万的基元。必须处理对于这些基元中的每一个基元的深度,颜色,纹理,照度或方位数据,并把它们转换成像素级数据以在显示设备上生成3D图像。
通常通过包括几何或建立阶段以及再现或扫描转换阶段的3D流水线来实施图像处理。在几何阶段中,各个基元的方位以及任何照射该基元的光源的位置都是根据一参照坐标系统而被确定并且由与该基元的顶点有关的矢量来规定。该顶点数据随后被变换到视图或摄像坐标系统并且被旋转到期望的方位上。
在扫描转换阶段中,用于图像内每个对象的图形基元被转换到提供3D图像的2D表现的一个单独的像素值组。组成2D图像的像素一般地存储在从中生成显示的帧缓冲器的项中。用于填充帧缓冲器的公知装置通过内插对于一个基元的变换顶点来为该基元的各个位置生成颜色值。由于基元位置被规定在3D空间,因此多个基元位置可以映射到该2D显示面的相同的帧缓冲器项(像素)内。根据其是否在最终的图像内可见,为基元位置所生成的颜色值存储在其映射到的该帧缓冲器项内或是被废弃。在此阶段期间,还可以为基元确定纹理数据。
一种用于确定各个基元的哪些位置是在最终的图像内可见的技术采用了z缓冲器。该z缓冲器包括用于帧缓冲器内每个像素的一个项。每个z缓冲器项被初始化为0或其它参考值。通常,该参考值表示该图像的后剪帖平面。在扫描转换期间,为基元内的每个位置确定z值并且与该基元位置所映射到的该z缓冲器中的项进行比较。如果z缓冲器中的该值比为相应的基元位置所确定的z值更接近观众,那么该基元位置在最终的图像中是不可见的,并且废弃其颜色值。如果z缓冲器中的该值比为相应的基元位置所确定的z值更远离观众,那么把用于此位置的颜色值存入帧缓冲器的适当项中。如果在扫描变换完成之前该颜色值未被替代,那么它被显示在最终的图像中。
在再现阶段期间在存储器与图形源之间传送纹理,颜色以及z数据的有效数量。由于可能存在每基元数十至数百像素,所以这些数据传送可能把有效负载放在该存储信道的带宽上。内存带宽的必然下降会降低图形系统的性能。如果图形系统是在采用统一存储器体系结构(UMA)的计算机系统内实施的话更是如此。对于基于UMA的计算机系统,中央处理器单元(CPU)以及图形引擎(graphics engine)具有对主存储器的同等访问。图形引擎所要求的存储器会降低CPU的性能。另外,该图形引擎的一个单元所需要的存储器会降低其它单元的性能。例如,用来传送用于z测试的z数据的任何带宽对于确定像素纹理的那一单元都是无效的,并且带宽的下降会降低其性能。
本发明致力于与图形系统内的内存带宽有关的这些以及其它问题。


图1是表示在基元位置与像素级数据块之间的一映射的框图。
图2是适于把基元数据扫描转换为像素数据的图形流水线的简略表示。
图3是实施本发明z压缩机制的计算机系统的一实施例的方框图。
图4是其中z数据块及其相关状态数据被分配在本地高速缓存与主存储器之间的z压缩系统的一实施例的方框图。
图5A是用来存储z数据值和相关的状态值的本地高速缓存系统的一实施例的方框图。
图5B是表示在TLB未命中时用于更新图5A的本地高速缓存系统的机制的方框图。
图6A是用来存储z数据值和相关的状态值的本地高速缓存系统的另一实施例的简略表示。
图6B是表示用于图6A的本地高速缓存的项的状态变化的状态机。
图6C是在TLB未命中时用于更新图6A的本地高速缓存系统的机制的简略表示。
图7是适于在线性存储区内存储用于数据块的状态值的内存映像的一个实施例。
图8A和8B表示可使用本发明机制来压缩的16位及32位z数据格式的实施例。
图9表示可能被实施本发明的系统使用的用于z数据的被压缩格式的一个实施例。
图10A-10C是表示用于实施对于z数据块的存储器读,存储器写,以及状态更新的方法的一个实施例的流程图。
图11是表示用于透明实施z压缩的方法的一个实施例的流程图。
图12是表示用于透明实施对z缓冲器的访问的方法的一个实施例的流程图。
图13A-13C是表示用于透明清除z缓冲器的不同方法的实施例的流程图。
发明的详细说明下面的论述陈述了许多具体细节以提供对本发明的透彻理解。然而,本领域的那些普通技术人员,得益于本公开内容,将懂得无需这些具体细节而可以实施本发明。另外,没有对各种公知方法,程序,元件,以及电路进行详细描述以便把注意力集中在本发明的特征上。
图1是图形基元100和数据块110(a),110(b)(一般地,“数据块110”)的子集的简略表示,在视觉坐标系统中基元100中的相应位置(x,y)被映射到该子集。多个图形基元100被用来近似将被显示在一图像中的对象的表面。当图形基元100被示作为三角形时,众所周知任何类型的多边形都可用来表示对象的表面。类似地,参照含有4×4像素(跨度)阵列的数据块110来说明本发明的实施例,但是也可以使用其它的数据块结构。
颜色,纹理坐标,以及深度(c,t,z)均与基元100的顶点120(a),120(b),120(c)有关。还可以把其它属性,诸如灰雾及阿尔法(未示出)分配给顶点。之后把这些顶点特性插入以给会被映射到数据块110的像素内的所有基元位置(x,y)提供值。对于该公开的表示,数据块110(b)为跨度,所有组成部份的像素为了所述跨度而被从基元100之中的位置映射。数据块110(a)为跨度,像素值为了所述跨度而被从跨在基元100的一个或多个边界上的位置映射。即,不是所有数据块110(a)的像素均对应于基元100之中的位置。
图2表示实施扫描变换的图形处理流水线200的一个实施例。在210从一给定基元所映射到的z缓冲器项中读取Z数据。在220插入该基元的顶点数据以便为每个基元位置生成,例如颜色,纹理以及z数据。例如,对于基元的各个位置(x,y)的z数据可以如下所述,利用建立z=C0+Cx·x+Cy·y的表面函数从该基元的顶点数据中生成。在此阶段同样可以为每个位置生成颜色值以及纹理坐标。
在流水线200的随后阶段中,在230可以执行图像改进技术,诸如纹理映射,凹凸映射,阿尔法重叠等等。在240,z测试确定该基元的哪一位置,如果有的话,把其颜色值提供给帧缓冲器,即基元的哪些部分将在2D图像中是可见的。如果为一位置确定的z值通过了z测试,那么分别用该基元位置的颜色以及z值来更新该帧内的适当项以及z缓冲器。否则,废弃该值。
图形引擎与帧及z缓冲器内的存储单元之间的图形数据传送降低了可用内存带宽。对于象UMA这样的存储器体系结构,这种降低能够对计算机系统的整体性能具有不利影响。已经提出用各种方法来减少纹理数据传送的带宽影响。本发明提供了用于减少深度缓冲及其相关数据传送对系统性能的影响的一种机制。
图3是实施本发明z压缩的计算机系统300的一个实施例的框分层图。计算机系统300包括处理器内核310,图形内核320以及存储系统330。处理器内核310和图形内核320耦合于总线或存储信道340上以把数据从存储系统330传出或把数据传入存储系统330。虚线表示对于计算机系统300的一实施例的集成电路模片370的边界,其中处理器内核310和图形内核320集成在一单芯片上。计算机系统300的这一实施例可能实施统一存储器体系结构(UMA),对于该体系结构本发明的特征可以提供显著的优点。然而,本发明并不限于采用集成的图形及处理器内核或UMA的计算机系统。
对于计算机系统300的该公开实施例,存储系统330被示为跨接在模片370上以表示它可以包括片内或片外元件。例如,存储系统330一般包括一个或多个位于电路模片370上的高速缓冲存储器以及一个位于另外的电路模片上的主存储器。存储系统330进一步含有z缓冲器350以及z状态表(ZST)360,该表内的一部分可被分布在片内与片外存储器结构之间(图4)。如下所更为详细论述的,ZST 360为z缓冲器350内的相关项提供状态信息。该状态信息可用于减少或消除存储信道340上的数据传送。
ZST 360的一个实施例包括跟踪对于存储在z缓冲器350内的各个z数据块的当前状态。该状态表示相应的z数据块是被如何存储的并且可被用于管理图形内核320与存储器330之间的数据传送。该状态可以表示,例如,用于一特定跨度的z数据是否处于被压缩格式或是未被压缩格式,或者它是否具有可被从本地存储单元,诸如寄存器供给的一参考值。可以用比未被压缩数据更为低的对存储信道340的带宽影响来传送压缩的z数据。此外,在例如,本地寄存器内有效的z数据根本不必耗费任何内存带宽。图形内核320的一个或多个元件使用ZST 350来更为有效地、并对存储信道的带宽产生更低影响地管理z数据传送。
对于ZST 360的一个实施例,每个项存储一个两位的状态码以表示对于相应数据块的数据状态。表1归纳了可采用的4位状态码的一个集合。
表1
例如,在被清除状态(00)可以用z缓冲器350的所有项来初始化各个图像。在扫描转换期间更新ZST 360中可被调整为z缓冲器内的初始值的状态值。根据该状态码,可以正常执行z缓冲器访问,可以实施被压缩z缓冲器访问或可以完全避免z缓冲器访问。后两个选项减少了z数据访问对存储信道带宽的影响。
在下面的论述中,把其中每个z值代表一恒定参考深度的z数据块称作为“被清除”。该深度可与图像空间内的背景剪贴板一致。由于该值为常数,因此它可以存储在图形内核320的本地寄存器内。当一项访问把具有被清除数据状态(00)的跨度作为目标时,能够从该本地寄存器读出该被清除值,消除z缓冲器访问并保存存储信道带宽。如果一项访问把被指定为被压缩(10)的数据块作为目标,那么可以以压缩格式检索该目标z数据并解压缩该目标z数据以便使用。如下所述,压缩减小了为例如,z测试而传送的数据块的大小,它节省了存储信道带宽。如果一项访问把被指定为未被压缩(01)的数据块作为目标,那么该访问传送一未被压缩的z数据块并且不执行解压缩。
Z压缩不必统一地应用于存储在z缓冲器350内的所有数据。例如,部分地,通过参考要被写的数据块与映射到该数据块的基元位置之间的关系可以作出以被压缩格式或不被压缩格式把数据写入z缓冲器350的决定。表示在基元100的边界内的位置的数据块110(b)通常能够被压缩。如下所述,如果z值还包括模板字段或者如果某些剪贴或饱和条件占优势,那么就会出现例外。跨在基元边界上的位置所映射到的数据块110(a)通常不被压缩。若通过表面函数(Eq.I)实施压缩,对于该基元边界不同侧上的位置的z值可以由不同的表面函数控制。如果使用仅仅适合于该基元内的位置的表面公式来压缩基元外的位置,那么这一z压缩方案会产生错误的结果。
图4表示可用来实施本发明的z压缩系统400的一个实施例。压缩系统400包括读/写单元410,本地高速缓存430,主存储器440,以及本地寄存器490。对于存储系统330的一个实施例,主存储器440和本地高速缓存430分别表示,例如,片外和片内元件。根据与被该访问定为目标的数据块有关的状态信息,读/写单元410执行源于图形内核320的各种单元的存储器访问请求。本地高速缓存430含有用于处理存储器访问的状态以及z数据块的本地副本。从本地高速缓存430不能够被满足的请求被从主存储器440满足。
对于存储器读访问,读/写单元410从目标数据块的状态确定该数据块是否处于被压缩、未被压缩,或被清除状态,并通过适合于所表示状态的传送从本地高速缓存430,主存储器440或本地寄存器490中检索该目标数据。对于存储器写访问,读/写单元410利用有关目标数据的信息来确定是否以被压缩、不被压缩,或被清除状态来存储它,并且它相应地更新相关的数据状态。
图4还示出了可以给z压缩系统400的实施例提供输入以实施数据访问的颜色计算单元(CCC)450和插入单元(ITU)460。例如,CCU450从顶点数据确定颜色值,并向读/写单元410指示数据块是否可被压缩。ITU 460从基元顶点数据确定像素级z值并向读/写单元410提供可用于压缩/解压缩数据块的参数。
图5A是示出存储了z数据以及用于被缓存数据块项的数据状态信息的本地高速缓存系统500的一个实施例的方框图。在同一高速缓存中存储z数据以及用于数据块的数据状态允许更有效地处理存储器访问,其形式随数据状态信息而定。
本地高速缓存系统500的该公开实施例包括读/写单元410,本地高速缓存430以及变换单元510。变换单元510包括z状态高速缓存(ZSTC)520以及z变换后备缓冲器(ZTLB)530。ZTLB 530存储用于z数据的逻辑至物理存储器地址的变换。ZSTC 520存储用于ZTLB 530所指向的z数据的状态信息。对于高速缓存系统500的一个实施例,ZTLB 530的各个项存储用于分配给z缓冲器的物理存储器的页面的变换,并且ZSTC 520存储对于存储在该页面上的z项的状态数据。如下所更为详细论述的,来自ZSTC 520的状态信息被用来控制向主存储器440读和写的z数据的大小。
本地高速缓存430的该公开实施例包括标记阵列564,数据阵列568以及命中/未命中单元570。各个项560包括存储在标记阵列564内的标记字段(TAG),状态字段(STATUS),以及存储在数据阵列568内的数据字段(DATA)。TAG存储可用于实施查找本地高速缓存430的逻辑地址(或其中的部分)。STATUS存储用于由TAG索引的数据块的状态位,以及DATA存储z数据值块。读/写单元410的该公开实施例包括读单元540和写单元550。图5中还示出了主存储器440以及存储信道340。
对于系统500的一个实施例,响应于存储器访问而触发本地高速缓存430的查找。例如,命中/未命中单元570比较由读访问指定的逻辑地址(或其中的部分)与项560的标记字段。如果该访问命中,那么把STATUS内的值提供给读单元540,该值确定了适当的数据检索流程。对于被压缩数据(STATUS=10)以及未被压缩数据(STATUS=01),读单元540使用适当分级的传送来从命中项中检索数据。被压缩的(CMP)数据被解压缩并送到请求者,对于系统500的该公开实施例,该请求者可以是CCU 450。未被压缩的(UNC)数据被送到该请求者而不必解压缩。对于被清除的数据(STATUS=00),读单元540把该被清除的数据从本地寄存器490供给该请求者。
对于本地高速缓存系统的一个实施例,命中/未命中单元570考虑STATUS与TAG以确定在本地高速缓存430内访问是否“命中”或“未命中”。例如,根据以下标准,把未被压缩的数据定为目标的访问可以在本地高速缓存430内整个或部分地命中Hit=Tag_Match & No_Blocking & [(UNC & QW_Match|CMP|CLEAR]Partial_Hit=Tag_Match & No_Blocking & (UNC &!QW_Match)Miss=!Tag_Match这里,Tag_Match表示识别要被访问的地址的标记是否与该高速缓存内的标记匹配,No_Blocking表示另一个访问是否阻止当前的访问,以及QW_Match表示数据的哪一部分将要在该高速缓存线内或由该标记识别的数据块内被寻找。QW_Match可用于允许数据块的QW被单独访问的本地高速缓存430的实施例。当为该高速缓存内的标记(Tag_Match)分配一个线但是被寻找的特殊四倍长字不在该高速缓存内时,就出现部分命中。
如果命中/未命中单元570确定在本地高速缓存430内未命中读访问,那么对变换单元510启动查找。对于替换单元510的该公开实施例,ZTLB 530的项包括由逻辑地址标记字段索引的逻辑-物理地址变换,并且ZSTC 520存储用于在ZTLB 530内被跟踪的各个数据块的状态位。如果在变换单元510内该寻找命中,那么该状态位表示在主存储器440内所指示的物理地址上的数据块的状态。如果STATUS=被清除,那么该“被清除”数据块的z值被从本地寄存器490提供,并且在存储信道340上不产生通信量。如果STATUS=被压缩或未被压缩,那么通过分别执行部分提取或全部提取,数据块被从主存储器440检索到指定的物理地址。根据z数据格式,例如32位或16位,部分提取使用全部提取所用带宽的1/2至1/4。
图5B表示在ZTLB 530内寻找没有命中(“TLB-未命中”)的事件中用于更新变换单元510的机制。对于该公开实施例,使用图形变换表(GTT)574把例如增强图形端口(AGP)存储器的4K字节页面变换成物理地址。GTT 574包括用于Z缓冲器350和用于ZST 360的项。ZSTC指针表(ZPT)578存储指向ZST 360内位置的指针。也就是,ZPT578象TLB对ZST 360一样操作。
在初始TLB-未命中时,GTT 574向ZTLB 530提供未被命中的TLB变换。来自GTT 574的指针也被读入ZPT 578,并且与该未被命中的TLB项有关的指针被用来从ZST 360内检索相应的状态数据。根据该被更新的状态数据,该被更新的变换被用来检索主存储器440内的目标数据块。分别用检索到的z数据及其状态更新数据阵列568和标记阵列564。一般地,每当数据块的状态被改变时就更新ZSTC 520。当ZTLB 530内的项被替换时,把ZSTC 520内的相应项写回存储器。
图6A是包括一物理寻址的本地高速缓存430的本地高速缓存系统600的实施例的方框图。本地高速缓存430的该公开实施例包括变换单元610,标记阵列620,数据阵列624,命中/未命中单元630,替换单元634,以及输出选择单元638。读/写单元410把数据移入和移出本地高速缓存430及寄存器490。为了送到数据阵列624以及从数据阵列624送出,CMPRS和DCMPRS分别压缩及解压缩数据。数据阵列624存储由物理地址(或其中的一部分)索引的数据块,这些物理地址存储在标记阵列620内。通过逻辑地址,诸如基元或该数据块的跨度坐标(x,y)来指定被存储器访问定为目标的数据块。
变换单元610提供允许从本地高速缓存430寻找被存储器访问定为目标数据的逻辑-物理地址变换。变换单元610包括ZSTC 614和ZLTB618,它们提供与ZSTC 520和ZLTB 530所提供的功能相类似的功能。当在ZLTB 618内地址命中时,命中项提供该逻辑地址所映射到的物理地址,以及ZSTC 614的相应项提供用于数据的状态。高速缓存系统600的实施例可以用对于该项的状态数据来更新标记阵列。命中/未命中单元630比较该物理地址与标记阵列620内的项。
对于在标记阵列620内未命中的访问,替换单元634确定当前项中的哪一项将被指配为接收从更高的存储器结构返回的数据。对于在标记阵列620内命中的访问,输出选择单元638向数据阵列624指示该命中项并且来自标记阵列620的状态信息确定了如何检索数据。对于每高速缓存线存储一个跨度的实施例,如果压缩目标数据,那么高速缓存线的一半被从数据阵列660检索,解压缩,并送给请求者。如果该目标数据是未压缩的,那么整个高速缓存线被从数据阵列660检索并送给请求者而无需解压缩。如果该目标数据被清除,那么从本地寄存器490检索数据并送给请求者。
读/写单元410包括在读单元640内的MUX 644用以提供响应于其相关状态的数据。写单元650内的MUX 648向被写入本地高速缓存430的数据提供类似的支持。把状态信息耦合到读/写单元410以指示被传送的数据应当被怎样处理。
图6B示出表示对于数据阵列624的项的可能状态变化的状态机的一个实施例。在该项被分配之前,它处于无效状态654。当该项被分配给一数据块时,根据该项被分配到的数据块的状态,其状态被更新为被清除(CLR 658),被压缩(CMP 660),未被压缩(UNC 664)或全部未被压缩(UNC_A 668)。对于该公开实施例,由ZSTC 614内的相应项来表示该状态。对于允许装入少于数据的全部线的高速缓存,UNC和UNC_A的区别在于分别用数据而部分填充或全部填充的高速缓存线。以CLR 658或CMP 660存储数据块的项在先前被清除或被压缩的数据块被以未被压缩状态写回到该高速缓存中时可以变换到UNC_A 668。由于仅仅全部数据块可以是CLR 658或CMP 660,因此在这些状态与UNC 664之间不提供变换。
如果已经被变更的数据块被从本地高速缓存430逐出,那么该被逐出的数据块的状态表示了将被执行的操作。例如,如果处于状态CLR658的数据块被逐出,那么没有任何东西被写回到较高的存储器级,并且数据块被从中逐出的项的状态被更新为表示新数据块的状态。如果处于状态CMP 660的数据块被逐出,那么存储了被压缩数据的高速缓存线的一部分,例如该高速缓存线的一半被写回到存储器中。如果处于状态UNC 664的数据块被逐出,那么被变更的字节被写回到存储器中,以及如果处于状态UNC_A的数据块被逐出,那么全部高速缓存线被写回到存储器中。在每种情况下,项的状态在ZSTC内被更新以跟踪被逐出的数据块的状态。当项被从ZTLB 618内逐出时,ZSTC 614的相应位被写回到ZST 360。图6C表示如果在ZTLB 618内逻辑地址未命中时用于更新变换单元610的机制。对于该公开实施例,未命中触发了对页面表690的读,该表提供由访问所指示的TLB项。ZTLB 618被用新的TLB项更新,并且ZSTC 614被用该页上的所有数据块的状态数据更新。目标高速缓存线被从Z缓冲器330内的指定地址装入到数据阵列624,并且标记阵列624内的状态被更新以反映该数据块的(存储)状态。
图5A,5B以及6A-6C举例说明了适合于处理混合状态及数据信息的高速缓存系统的两个实施例的各种特征。对于这两个实施例,数据阵列可以以压缩或不压缩格式存储数据(或根本不存储,在被清除项的情况下)。高速缓存管理逻辑根据其有关状态而把数据移入或移出该数据阵列,并根据该状态控制对外部存储器的操作。TLB提供对z数据块及其有关状态的访问。在每一数据块把状态存入标记阵列,以及在每一内存页面把状态存入变换单元(ZSTC)。虽然已经把这些高速缓存系统作为z压缩机制的部件进行了描述,但是它们也可以用在需要跟踪各种类型的数据的其它系统中。
图形内核320的各种功能单元以其UNC(或UNC_A)形式对数据进行操作。因此,数据块可以以压缩(或再压缩)或是不被压缩状态被写回到本地高速缓存430或存储器440内,或者如果该数据状态被清除,那么可以完全避免上述写。对于本地高速缓存系统500的一个实施例,写单元550根据为被上述写定为目标的数据块而确定的状态来处理写访问。下面更为详细地论述用于数据块是否可被压缩或用一被清除值来表示的标准。
图7是表示在存储器330的线性部分存储状态数据的内存映像700的一个实施例的方框图。对于映像700,各个状态项,Sx,y,与代表4×4像素阵列(跨度)的数据块有关。这里,Sx,y,表示用于在跨度地址(x,y)上的数据块的状态数据。对于16和32位Z模式的跨度地址的一个可能表示示于图7的下部。
对于这一数据块定义,可以用512×512跨度栅格来表示2048×2048像素帧缓冲器。内存映像700把该跨度组织成每个均为512个字节的组,并且每个字节存储用于4个跨度列的状态位。当一个把在跨度坐标(x,y)上的数据块定为目标的访问在本地高速缓存430内未命中时,其状态位,Sx,y,可以在内存地址上的字节[Byte_Index]的位Y[1∶0]上被访问Status_Bits_Base_Address+PageY·512+PageX·Entry_Size,其中Entry_Size=16位Z模式? 32∶16PageX=16位Z模式?X[8∶5]∶X[8∶4]PageY=Y[8∶2]Byte_Index=16位Z模式?X[4∶0]∶X[3∶0]使z压缩变得复杂的一个因素是压缩对于某些跨度会是不希望的或是不可行的。ZST 360为确定是否以压缩状态存储要被读的跨度以及要被写的跨度在其被写之前是否可被压缩提供了便捷的跟踪机制。如上所指出的,可以应用各种标准来确定是否为了存入存储系统而压缩一特定的跨度。这些标准包括,例如,该跨度是否完全落入基元内,即是否通过特定操作来写跨度的所有像素,以及,如果该跨度包括模板值,那么该基元内的所有跨度都具有相同的模板值。例如,如果跨度处于被清除状态,那么对于该帧内的所有像素该被清除值都为常数,并且可存入更容易地可访问的寄存器内。鉴于数据块存储所依据的各种未被压缩或压缩格式,可以更好地构想到其它的标准。
图8A和8B是分别表示当z数据被存储作为跨度时用于16位和32位z数据的未被压缩格式810及850的框图。对于16位格式810,每一行对应于数据(4×16位)的一个四倍长字(QW),对于32位格式850,每一行对应于数据(4×32位)的一个双四倍长字(DQW)。跨度内的16个像素的z值被标记为Z0.0-Z3.3。对于32位格式850的一个实施例,每个32位值可以包括一24位z值和一8位模板值。模板值被用来表示屏幕的一部分,对于这一部分不必进行绘图更新。例如,被窗口边框遮掩的像素可以包括替代像素值而要被写的模板值。对于本发明的一个实施例,其像素与不同模板值有关的跨度可以不被压缩。
图9表示被压缩数据块900的一个实施例,可以从未被压缩格式810,850或其它的未被压缩格式生成该数据块。被压缩数据块900为一个DQW,它是16位格式810的大小的50%,是32位格式950大小的25%。可以通过无损压缩方法生成被压缩格式900的该公开实施例。一种方式是基于用于基元的z值函数表达式,诸如被内插器460用来从顶点值为基元位置确定z值的表达式。
对于一种压缩方法,用于一给定基元的z值被表示为(Eq.I)Z(x,y)=+C0+Cx·x+Cy·y其中C0表示在一参考点上的Z值,例如x=y=0,Cx表示在x方向上的(线性化的)z依从关系,Cy表示在y方向上的线性化z依从关系。当通过Z(x,y)或类似的函数参数化用于跨度的像素z值时,该Z值可以用系数C0,Cy,以及Cy来表示,而不是通过它们自身存储z值。被压缩数据块900能够存储16个24位z值以及一个8位模板值(4DQW)作为3个40位系数以及一个8位模板值(1DQW),假如所有16个像素都具有相同的模板值的话。
用于压缩对于跨度的z值的另一种机制存储该跨度的一个像素的z值以及此z值与该跨度的其它像素的z值之间的差异。由于希望这些差异很小,所以可以用较少位来表示它们。例如,对于16位z值,可以把参考z值存作为16位值并且可以把剩余15个像素的差异存作为7位值。另一方面,可以用7位的差值来指定接近于该参考值的8个像素,以及用8位值来指定剩余的7位。在这种基于差异的压缩机制上的其它变化是可能存在的。这些机制不被承认为是无损的,这是因为该差异会要求比由固定位所提供的分辨率更高的分辨率。如果似乎该压缩将不是无损的话,那么该机制的实施例可以绕过对数据块进行压缩。
图10A表示本发明用于处理对存储器的读访问的方法1000的一个实施例。可以例如,采用图3的系统或其它任何提供跟踪被读的数据块的状态(被压缩,未被压缩,被清除)的机制的系统来实施方法1000。根据方法1000,在1010检测读访问,以及在1012确定被读取定为目标的数据块的状态。在系统400内,例如,根据在本地高速缓存430内该读是否命中或未命中,分别用本地高速缓存430或存储器440内的项来表示该状态。
如果在1014确定该状态为“被清除”,那么在1016把该被清除值从本地寄存器中读出并在1026把它送给请求者。不向存储系统发出任何提取。如果在1018确定该状态为“未被压缩”,那么通过在1020执行完全提取来检索数据,并且在1026把检索出的数据送给请求者。对于该公开实施例,完全提取为16位z数据的各个块传送4个4倍长字(QW)以及为32位z数据的各个块传送4个双4倍长字(DQW)。对于允许QW或DQW粒状读取的本地高速缓存430的实施例,“完全提取”意指未被压缩形式的目标数据的提取。
如果在1018确定该状态为“被压缩”,那么通过在1022执行部分提取来检索数据。对于该公开实施例,部分提取为32或16位z数据的各个块传送一个DQW。在1024解压缩检索出的数据并在1026把它送给请求者。可以暂时保存该被压缩数据的副本。如果请求者不修改送来的数据,那么所保存的该被压缩数据的副本保持有效并可以被返回到本地高速缓存430或存储器440。对于系统400,分别根据在本地高速缓存430内该读是否命中或未命中,可以从本地高速缓存430或存储器440内取出被压缩/未被压缩的数据。
图10B表示本发明用于处理对存储器的写访问的方法1004的一个实施例。也可以用系统400或提供类似支持跟踪z数据块的状态(被压缩,未被压缩,被清除)的系统来实施方法1004。根据方法1004,在1030检测写访问以及在1032为被写访问定为目标的数据块,即要被写的数据块确定状态。结合图10C论述用于确定状态的方法。
如果在1034确定状态为“被清除”,那么已经用参考值来表示块值,并且任何数据写都不是必需(做)的。在1036,可以在本地高速缓存430的适当区域或反映该写的“被清除”状态的存储器440的项内更新该状态。如果在1038确定状态为未被压缩,那么在1040执行完全写以把数据按其未被压缩形式写入存储系统,并且如果需要,在1036更新该状态。对于该公开实施例,完全写为32位数据的各个块传送4个DQW以及为16位数据的各个块传送4个QW。对于允许QW或DQW粒状访问的本地高速缓存430的实施例,“完全写”意指该指定QW(s)或DQW(s)按照未被压缩形式被写。
如果在1038确定状态为“未被压缩”,那么在1042压缩它,在1044执行部分写以把数据写入存储系统,并且如果需要,在1036更新该状态。对于该公开实施例,部分写为32位或16位数据的各个块传送一个DQW。对于系统400,根据在本地高速缓存430内该访问是否命中或未命中可以把数据块写入本地高速缓存430或存储器440。
图10C表示本发明用于为16位数据块确定状态的方法1008的一个实施例。结合表3论述用于32位数据块的状态更新。对于方法1008,在1060确定是否更新用于一数据块内的所有像素的z值。例如,来自图1的数据块110(b)的所有像素都落入一基元内,并在当基元被处理时,所有像素都被更新。数据块110(a)内的像素不都被更新,这是由于有些像素落在该基元外。在1060如果块内的所有像素值不被更新,那么在1064把数据块状态设置为未被压缩。
在1060如果块内的所有像素值被更新,那么在1068考虑各种超越条件。“超越条件”是可以排除z值的准确压缩或解压缩的条件。例如,某些图形算法给所有z值提供z偏移。尽管相对稀少,但是如果遭到超出范围的z值,那么可以改变z偏移值。由于某些z压缩/解压缩方法依赖于该z偏移值,所以如果把不同的z偏移值用于压缩及解压缩,这些方法将提供错误的结果。因此,当通过调整z偏移值而把z值箝制在允许的范围时,可以表示一个超越条件。另外,潜在的超越条件可归因于z值被插入所依据的精度,它能够产生落在图像的最大/最小z值外的z值。如果在1068检测这些或其它的超越条件,那么把状态设置成未被压缩。
如果在1068表示无超越条件,那么在1070确定是否该数据块的所有像素都具有被清除值。如果在1070所有像素都被清除,那么在1074把状态设置成清除。若否,则在1080把状态设置成被压缩。
所公开的32位z数据格式(图8B),包括模板和z数据,并且状态分配考虑该两个元素。例如,被压缩格式900对一数据块的所有像素使用一单一的模板值。因此,即使一个块的z数据可能被压缩,如果像素具有不同的模板值,格式900也不允许压缩。表2概括了根据正被更新的数据的类型及其先前的状态而适合于32位格式的状态更新。
表2
*使用图10C的方法或类似的方法可以确定Z数据的可压缩性#z数据和模板数据(如果存在)都符合可压缩性标准^z数据或模板数据或二者都未能符合可压缩性标准上述z压缩/解压缩机制可以把z缓冲器存储数据留在被压缩及解压缩状态。这能够对允许某些指令直接读或写z缓冲器-即绕过系统400的读/写单元-的系统内的编程者造成问题。用于支持这些指令的可供选择的方法包括要求编程者相应地掌握深度压缩及写代码的细节或者使z压缩对编程者透明。后一种可供选择的方法使编程者不知道该机制的细节并确保了数据将被适当地处理。可以,例如,通过把系统状态扩展为适应一些状态变量(SV)以控制图形系统的操作,提供一个或多个指令来适当管理这些SV,以及当所选指令被检测时修改图形驱动器来干预而实施这种透明。对于本发明的一个实施例,定义了一组图形指令来设置和更新该图形状态的适当位,并且当检测到访问Z缓冲器的指令时设计该驱动器来进行干预。
表3表示本发明的可用于控制/配置图形系统的一个实施例的所选择的状态位。说明了各种位并指出了位的大小。
表3
图11是表示用于透明地实施z压缩的方法1100的一个实施例的流程图。可以,例如,对于基础图形硬件,用一个解释来自3D编程环境,诸如Win3D的指令的图形驱动器来实施方法1100。
最初,在1110分配一z缓冲器并在1120确定是否应当执行z压缩。例如,如果平铺式存储器对于z缓冲器无效或是如果存在不足的线性存储器来调节支持该z缓冲器的z状态表,那么可以不执行z压缩。如果在1120不执行z压缩,那么在1124输入非压缩模式。
如果在1120将要执行z压缩,那么在1130为z状态表(ZST)分配存储器并且在1134清除该表的项。可以,例如,通过把0块传送(BLITing)到ZST的项来清除ZST。在1140更新图形上下文以表示允许z压缩。对于方法1100的一个实施例,利用一适当的指令来设置诸如表3所示出的状态变量。一旦在1140图形上下文被更新,那么在当方法1100为所选事件监控图形操作时,在1144再现结果。用通过块1150,1160,以及1170的循环来指示该监控活动。
如果在1150检测到z缓冲器清除事件,那么在1154执行改进的清除操作。如果在1160检测到某些z缓冲器访问事件,那么在1164执行改进的访问操作。下面将更为详细地论述改进的清除及访问操作。如果在1170检测到上下文转换,那么在1174检索用于新的上下文的状态变量并在1140更新图形上下文。1144的再现以及1150,1160,1170的监控根据新的处理进行。如果在1170未检测到上下文转换,那么依旧按当前处理进行监控。
图12是表示用于透明地处理对z缓冲器的选定访问(在1164的改进访问)的方法1200的一实施例的流程图。该选定访问包括,例如,通过用户应用程序试图读取Z缓冲器或试图当允许z压缩时锁定Z缓冲器。方法1200在该选定访问进行之前解压缩z缓冲器的内容。
对于方法1200的该公开实施例,在1210保存当前的图形状态,在1220设置一个位以允许对于指定基元内的像素的快速读/写处理(“强制解压缩”),并在1224调整该图形状态以便解压缩。对于一个实施例,图形状态调整包括允许z-写及阿尔法测试,把阿尔法测试功能设置成NEVER,并禁止帧缓冲器写。在1230,把围绕将被用户应用程序所访问的区域的一个基元发送到图形引擎。当强制解压缩位被设置在此状态中时,读取该指定基元内的每个像素,解压缩(如果需要),并写回到其存储单元。在1240恢复被保存的图形状态并在1150实施用户访问。
跟随解压缩而恢复图形状态意指再次允许z压缩。因此,随后,可以压缩对z缓冲器的非用户启动的写访问,如果目标块符合压缩标准的话。
图13A是表示用于当允许z压缩时,透明地实施清除操作的方法1300的一个实施例的流程图。当清除整个Z缓冲器时(下面论述部分清除),通过BLIT操作实施方法1300。对于该公开实施例,在1320通过把0块传送到ZST的项来清除ZST并在1324更新被清除的模板及z值。有意义地,当允许z压缩时方法1300不访问z缓冲器来实施这一清除。仅当ZST表示其状态被清除,即状态=00时,读取对于数据块的状态变量(被清除的z及模板值)。
图13B是表示用于当允许Z压缩时,透明地实施Z缓冲器清除的另一种方法1304的一实施例的流程图。当清除整个z缓冲器时,通过clear( )函数调用来实施方法1304。该清除操作取决于是否z值、模板值或是二者都被清除。如果在1330模板及z值都被清除(或者如果该系统操作于16位模式,其不支持模板),那么可以通过经由方法1300块传送ZST来实施清除。如果在1330仅清除z或仅清除模板值,那么把基元写入z缓冲器以更新该值。由于这些操作改变了图形状态,所以在1334保存当前的图形状态(或将被改变的部分)。另外,禁止各种按像素测试。
如果在1340仅清除z值,那么在1344允许z写入并禁止模板更新功能。在1348再现按大小被排列进z缓冲器(或有关区域,对于部分清除)并具有与被清除的z值相等的一顶点z值的基元。对该基元的再现清除了z缓冲器内的项而无需更新模板值。在1360恢复清除之前的图形状态。
如果在1340仅清除模板值,那么在1354禁止z写入并允许模板更新功能。在1358再现按大小排列进z缓冲器(或它的有关区域,对于部分清除)的基元。被更新的模板值即为由该被清除的模板状态变量确定的模板值。由于禁止z写入因而不修改Z值。在1358的基元再现之后,在1360恢复该图形状态。
图13C是表示当允许Z压缩时实施Z缓冲器的部分清除的方法1308的一实施例的流程图。在下面的论述中,把要被清除的Z缓冲器区域称为“目标区域”,把Z缓冲器其余区域称为“非目标区域”。
对于该公开实施例,在1370确定覆盖目标及非目标区域的基元。在1372为了准备再现,保存图形状态信息,禁止按像素测试,允许z及模板写,以及把模板更新功能设置成“替换”。清除方法1308的操作取决于为该目标区域指定的新的被清除值(新被清除值)是否与为该非目标区域指定的被清除值(旧被清除值)相同。
在1374如果新被清除值与旧被清除值相同,那么设置一“清除位”(表3)并使用该被清除值来再现覆盖整个z缓冲器的基元。在此情形中,把一个统一的被清除值提供给z缓冲器的所有项,与它们是否驻留在目标区域或非目标区域内无关。可以,例如,通过把0块传送到ZST的相应项来进行清除。被清除值可以被更新,但是,由于它们与旧被清除值相同,因此可以绕过这一更新。
在1374如果新被清除值与旧被清除值不同,那么不一起处理目标区域和非目标区域。对于该公开实施例,在1380使用新被清除值来再现覆盖目标区域的基元。
由此已经公开了降低服务于z缓冲器所需的内存带宽部分的一种机制,增加了对其它存储器操作有效的带宽。可以把Z数据指定为被压缩,不被压缩,或具有一参考值。对于一个实施例,数据状态表示对于各个数据块的该指定,并且在实施对数据块的访问之前检验这一指定。由于仅传送一个被压缩的数据块,因此以被压缩数据块为目标的访问就消耗较少的带宽,并且通过参考存储在一本地寄存器内的z值可以满足以“被清除的”数据块为目标的访问。而且还为压缩z数据以及使这些压缩/解压缩操作对用户应用程序透明提供了机制,并提供了适合于支持这些机制的高速缓存体系结构。
已经提供了这些公开实施例用于说明本发明的各种特征。图形处理领域的技术人员得益于这一公开,将认识到这些公开实施例的变化和更改,它们依然落入附带的权利要求书的精神及范围之内。例如,z缓冲是被称作深度缓冲的较普通技术的一种特殊形式。其它形式包括W缓冲,它跟踪像素的z坐标,或在不同参考系统例如视觉空间内的这些坐标的函数。本发明可以应用于深度缓冲的这些以及其它形式。
权利要求
1.一种用于处理数据的方法,包括把数据块存入第一存储单元组,每个数据块以被清除,被压缩,或不被压缩数据状态中的一种状态存储;为一选定操作监控对该第一存储单元的操作;以及如果检测到该选定操作,则实施一种掩蔽了数据块的数据状态之间的差异的该选定操作的修改版本。
2.权利要求1的方法,其中该选定操作是指定数据块的读,并且实施该修改的读包括把被清除或被压缩状态的指定数据块中的任何一个转换成不被压缩状态;以及根据被转换数据块的存储状态读取该被转换的数据块。
3.权利要求2的方法,其中转换包括保存一当前的处理器状态;根据指定数据块的数据状态读取该指定数据块;以及以不被压缩状态把读取的数据写回其第一存储单元。
4.权利要求1的方法,其中该选定操作是第一存储单元组的清除,并且实施该清除包括把第一存储单元组中的数据块的状态设置成被清除状态。
5.权利要求4的方法,进一步包括更新在当前处理器状态中的被清除状态变量。
6.权利要求1的方法,其中该选定操作是第一存储单元组的数据块的指定部分的清除,并且实施该清除包括如果该指定部分是整个数据块,则把该数据块的数据状态设置成被清除状态;以及如果该指定部分不是整个数据块,则把一基元写入该第一存储单元组。
7.权利要求6的方法,其中该指定部分可以是数据块的深度或模板部分。
8.一种处理z数据的方法,包括确定是否实施z压缩;如果不实施z压缩,则实施一选定操作;以及如果实施z压缩,则实施该选定操作的一修改形式。
9.权利要求8的方法,其中确定是否实施z压缩包括分配第一存储区以存储z数据;确定存储系统是否能够支持z压缩;以及如果该存储系统能够支持深度压缩,则分配第二存储区以存储用于该z数据的状态位。
10.权利要求9的方法,其中把z数据组织成为多个数据块,并且该状态位表示一相关的数据块被压缩,不被压缩,或被清除。
11.权利要求10的方法,其中该选定操作是由应用程序对该第一存储区的读取,并且实施该选定操作的一修改形式包括根据数据块的状态位读取该第一存储区内的数据块,并以不被压缩存储状态把读取的数据块写回到该第一存储区内;以及在不被压缩存储状态上执行该读取操作。
12.权利要求10的方法,其中该选定操作是该第一存储区的清除,并且实施该清除的一修改形式包括把第二存储区内的状态位设置成表示相关数据处于被清除状态的一个值。
13.一种机器可读介质,其上存储了可被执行以实施一种方法的指令,该方法包括检测一指令以清除z数据块,每个z数据块都具有由相关状态字段所表示的数据状态;把这些状态字段设置成表示相关z数据块处于被清除状态的一个值;以及把被清除状态值更新成表示z数据块的一个被清除值。
14.权利要求13的机器可读介质,其中设置状态字段包括把0块传送到该状态字段。
15.一种机器可读介质,其上存储了可被实施以执行一种方法的指令,该方法包括通过z数据块的应用程序检测读取或锁定,每个z数据块都具有由相关状态字段所表示的数据状态;保存处理器状态;把z数据块转换成不被压缩数据状态;恢复该处理器状态;以及执行该读取或锁定。
16.权利要求14的机器可读介质,其中把z数据块转换成不被压缩数据状态包括根据z数据块的数据状态读取该z数据块;以及以不被压缩状态写被读取的数据块并相应地更新其状态字段。
17.一种计算机系统,包括一处理器内核;一数据缓冲器;与该数据缓冲器有关的一状态表,以表示该数据缓冲器的各个项的状态值;以及一机器可读介质,其上存储了可由该处理器内核执行以实施一种方法的指令,该方法包括截取在该数据缓冲器上运行的选定指令;修改该数据缓冲器及状态表,如果需要,以按照该选定指令所期望的状态把数据放入该数据缓冲器;以及执行被截取的指令。
18.权利要求17的计算机系统,其中该选定指令是清除指令并且修改该数据缓冲器包括根据与项有关的状态值读取该数据缓冲器的项;如果需要,解压缩读取的项;以及以不被压缩形式把该读取的项写入该数据缓冲器。
19.权利要求18的计算机系统,进一步包括更新状态表内的该读取的项的状态值。
20.权利要求18的计算机系统,其中读取该数据缓冲器的项包括为一个具有被清除状态值的项从本地寄存器内读取被清除值。
21.权利要求20的计算机系统,进一步包括把该被清除值写入该数据缓冲器并更新该状态表。
全文摘要
本发明提供了一种用于按照对用户透明的方式实施Z压缩的机制。为选定的操作而监控与Z数据缓冲器内的存储单元有关的Z数据块。这些操作可以包括清除或锁定操作。如果检测到选定的操作,则实施该选定操作的一修改版本以掩蔽数据块存储状态之间的差异。
文档编号G06T15/10GK1449544SQ01814880
公开日2003年10月15日 申请日期2001年6月21日 优先权日2000年6月30日
发明者D·奥伦斯蒂恩, Z·斯佩尔伯, G·萨夫兰斯基, G·佩勒德 申请人:英特尔公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1