选择性合并部分覆盖图块以执行分层z剔除转让专利

申请号 : CN201480057719.7

文献号 : CN105659291B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 汪涛安德鲁·埃文·格鲁贝尔沙姆巴富·坎德瓦勒

申请人 : 高通股份有限公司

摘要 :

本发明描述用于在图形处理系统中执行分层z剔除的技术。在一些示例中,所述技术可包括基于用于图块位置的部分覆盖源图块的保守最远z值是否比用于所述图块位置的剔除z值更接近,将所述部分覆盖源图块选择性合并为完全覆盖合并源图块,并且使用与所述完全覆盖合并源图块相关联的保守最远z值来更新用于所述图块位置的所述剔除z值。在其它示例中,所述技术可使用不与底层存储器相关联的高速缓存单元来存储用于合并源图块的保守最远z值和覆盖掩模。所述高速缓存单元的容量可比存储渲染目标中的所有所述图块位置的合并源图块数据所需的高速缓存的大小更小。

权利要求 :

1.一种方法,包括:

基于与图块位置相关联的样本的源图块是否被对应于所述源图块的基元完全覆盖并基于所述源图块的保守最远z值是否比与所述图块位置相关联的剔除z值更接近,利用图形处理单元GPU来选择性合并所述源图块和用于所述图块位置的合并源图块,以生成所述合并源图块的经更新版本,所述剔除z值指示用于与所述图块位置对应的目标图块的所有样本的保守最远z值;以及响应于确定所述源图块被对应于所述源图块的所述基元完全覆盖,使高速缓存单元中的存储用于所述合并源图块的数据记录的高速缓存行无效。

2.根据权利要求1所述的方法,其中,选择性合并所述源图块包括:响应于确定所述源图块未被对应于所述源图块的所述基元完全覆盖和所述源图块的所述保守最远z值比与所述图块位置相关联的所述剔除z值更接近,合并所述源图块和用于所述图块位置的所述合并源图块;并且响应于确定所述源图块被对应于所述源图块的所述基元完全覆盖或所述源图块的所述保守最远z值不比与所述图块位置相关联的所述剔除z值更接近,不合并所述源图块和用于所述图块位置的所述合并源图块。

3.根据权利要求2所述的方法,其中,合并所述源图块和用于所述图块位置的所述合并源图块包括:基于用于所述源图块的所述保守最远z值和用于所述合并源图块的保守最远z值,生成用于所述合并源图块的所述经更新版本的保守最远z值。

4.根据权利要求3所述的方法,其中,合并所述源图块和用于所述图块位置的所述合并源图块进一步包括:基于用于所述源图块的覆盖掩模和用于所述合并源图块的覆盖掩模,生成用于所述合并源图块的所述经更新版本的覆盖掩模。

5.根据权利要求1所述的方法,其中,所述方法进一步包括:

在所述高速缓存单元中存储多个合并源图块数据记录,

其中,所述合并源图块数据记录中的每个包含与用于渲染目标的多个图块位置中的相应一个的合并源图块相关联的数据,并且其中,所述高速缓存单元具有小于存储N个合并源图块数据记录所需的数据量的数据容量,其中,N是在所述渲染目标中的图块位置的总数。

6.根据权利要求5所述的方法,其中,与用于所述多个图块位置中的相应一个的所述合并源图块相关联的所述数据包括用于与所述相应图块位置相关联的所述合并源图块的保守最远z值。

7.根据权利要求6所述的方法,其中,与用于所述多个图块位置中的相应一个的所述合并源图块相关联的所述数据进一步包括用于与所述相应图块位置相关联的所述合并源图块的覆盖掩模。

8.根据权利要求5所述的方法,其中,所述高速缓存单元不与底层存储器相关联。

9.根据权利要求1所述的方法,进一步包括:

在高速缓存单元中存储多个合并源图块数据记录,

其中,所述合并源图块数据记录中的每个包含与用于渲染目标的多个图块位置中的相应一个的合并源图块相关联的数据,其中,所述高速缓存单元不与底层存储器相关联,

其中,所述高速缓存单元包括多个高速缓存行,

其中,所述高速缓存行中的每个经配置以存储所述合并源图块数据记录中的相应一个,并且其中,在所述高速缓存单元中的高速缓存行的总数小于在所述渲染目标中的图块位置的总数。

10.根据权利要求1所述的方法,其进一步包括:

在高速缓存单元中存储多个合并源图块数据记录,

其中,所述合并源图块数据记录中的每个包含与用于渲染目标的多个图块位置中的相应一个的合并源图块相关联的数据,其中,所述高速缓存单元包括多个高速缓存行,

其中,所述高速缓存行中的每个经配置以存储所述合并源图块数据记录中的相应一个,其中,在所述高速缓存单元中的高速缓存行的总数小于在所述渲染目标中的图块位置的总数,其中,所述高速缓存单元经配置以向所述高速缓存单元中的高速缓存行写入与第一图块位置相关联的第一合并源图块数据记录而无需向底层存储器写入所述第一数据记录,并且其中,所述高速缓存单元经进一步配置以利用与第二图块位置相关联的第二合并源图块数据记录覆写所述第一合并源图块数据记录而无需向底层存储器写入所述第一合并源图块数据记录。

11.根据权利要求1所述的方法,进一步包括:

基于所述源图块的保守最接近z值是否比与所述图块位置相关联的所述剔除z值更远,从图形管线选择性丢弃与所述图块位置相关联的所述源图块;并且基于所述合并源图块的所述经更新版本是否被对应于所述合并源图块的所述经更新版本的一组基元完全覆盖,选择性设定所述剔除z值等于用于所述合并源图块的所述经更新版本的保守最远z值。

12.根据权利要求11所述的方法,

其中,从所述图形管线选择性丢弃所述源图块包括:

响应于确定所述源图块的所述保守最接近z值比与所述图块位置相关联的所述剔除z值更远,丢弃所述源图块;并且响应于确定所述源图块的所述保守最接近z值不比与所述图块位置相关联的所述剔除z值更远,不丢弃所述源图块,并且其中,选择性设定所述剔除z值等于用于所述合并源图块的所述经更新版本的所述保守最远z值包括:响应于确定所述合并源图块的所述经更新版本被所述组基元完全覆盖,设定所述剔除z值等于用于所述合并源图块的所述经更新版本的所述保守最远z值;并且响应于确定所述合并源图块的所述经更新版本未被所述组基元完全覆盖,不设定所述剔除z值等于用于所述合并源图块的所述经更新版本的所述保守最远z值。

13.一种装置,包括:

图形处理单元GPU,其经配置基于与图块位置相关联的样本的源图块是否被对应于所述源图块的基元完全覆盖并基于所述源图块的保守最远z值是否比与所述图块位置相关联的剔除z值更接近,来选择性合并所述源图块和用于所述图块位置的合并源图块,以生成所述合并源图块的经更新版本,所述剔除z值指示用于与所述图块位置对应的目标图块的所有样本的保守最远z值,且经配置以响应于确定所述源图块被对应于所述源图块的所述基元完全覆盖,使高速缓存单元中的存储用于所述合并源图块的数据记录的高速缓存行无效。

14.根据权利要求13所述的装置,其中,所述GPU经进一步配置以:响应于确定所述源图块未被对应于所述源图块的所述基元完全覆盖和所述源图块的所述保守最远z值比与所述图块位置相关联的所述剔除z值更接近,合并所述源图块和用于所述图块位置的所述合并源图块;并且响应于确定所述源图块被对应于所述源图块的所述基元完全覆盖或所述源图块的所述保守最远z值不比与所述图块位置相关联的所述剔除z值更接近,不合并所述源图块和用于所述图块位置的所述合并源图块。

15.根据权利要求14所述的装置,其中,所述GPU经进一步配置以:基于用于所述源图块的所述保守最远z值和用于所述合并源图块的保守最远z值生成用于所述合并源图块的所述经更新版本的保守最远z值。

16.根据权利要求15所述的装置,其中,所述GPU经进一步配置以:基于用于所述源图块的覆盖掩模和用于所述合并源图块的覆盖掩模生成用于所述合并源图块的所述经更新版本的覆盖掩模。

17.根据权利要求13所述的装置,其中,所述GPU经进一步配置以:在所述高速缓存单元中存储多个合并源图块数据记录,

其中,所述合并源图块数据记录中的每个包含与用于渲染目标的多个图块位置中的相应一个的合并源图块相关联的数据,并且其中,所述高速缓存单元具有小于存储N个合并源图块数据记录所需的数据量的数据容量,其中,N是在所述渲染目标中的图块位置的总数。

18.根据权利要求17所述的装置,其中,与用于所述多个图块位置中的相应一个的所述合并源图块相关联的所述数据包括用于与所述相应图块位置相关联的所述合并源图块的保守最远z值。

19.根据权利要求18所述的装置,其中,与用于所述多个图块位置中的相应一个的所述合并源图块相关联的所述数据进一步包括用于与所述相应图块位置相关联的所述合并源图块的覆盖掩模。

20.根据权利要求17所述的装置,其中,所述高速缓存单元不与底层存储器相关联。

21.根据权利要求13所述的装置,

其中,所述GPU经进一步配置以在高速缓存单元中存储多个合并源图块数据记录,其中,所述合并源图块数据记录中的每个包含与用于渲染目标的多个图块位置中的相应一个的合并源图块相关联的数据,其中,所述高速缓存单元不与底层存储器相关联,

其中,所述高速缓存单元包括多个高速缓存行,

其中,所述高速缓存行中的每个经配置以存储所述合并源图块数据记录中的相应一个,并且其中,在所述高速缓存单元中的高速缓存行的总数小于在所述渲染目标中的图块位置的总数。

22.根据权利要求13所述的装置,

其中,所述GPU经进一步配置以在高速缓存单元中存储多个合并源图块数据记录,其中,所述合并源图块数据记录中的每个包含与用于渲染目标的多个图块位置中的相应一个的合并源图块相关联的数据,其中,所述高速缓存单元包括多个高速缓存行,

其中,所述高速缓存行中的每个经配置以存储所述合并源图块数据记录中的相应一个,其中,在所述高速缓存单元中的高速缓存行的总数小于在所述渲染目标中的图块位置的总数,其中,所述高速缓存单元经配置以向所述高速缓存单元中的高速缓存行写入与第一图块位置相关联的第一合并源图块数据记录而无需向底层存储器写入所述第一数据记录,并且其中,所述高速缓存单元经进一步配置以利用与第二图块位置相关联的第二合并源图块数据记录覆写所述第一合并源图块数据记录而无需向底层存储器写入所述第一合并源图块数据记录。

23.根据权利要求13所述的装置,其中,所述GPU经进一步配置以:基于所述源图块的保守最接近z值是否比与所述图块位置相关联的所述剔除z值更远,从图形管线选择性丢弃与所述图块位置相关联的所述源图块;并且基于所述合并源图块的所述经更新版本是否被对应于所述合并源图块的所述经更新版本的一组基元完全覆盖,选择性设定所述剔除z值等于用于所述合并源图块的所述经更新版本的保守最远z值。

24.根据权利要求23所述的装置,其中,所述GPU经进一步配置以:响应于确定所述源图块的所述保守最接近z值比与所述图块位置相关联的所述剔除z值更远,丢弃所述源图块;

响应于确定所述源图块的所述保守最接近z值不比与所述图块位置相关联的所述剔除z值更远,不丢弃所述源图块;

响应于确定所述合并源图块的所述经更新版本被所述组基元完全覆盖,设定所述剔除z值等于用于所述合并源图块的所述经更新版本的所述保守最远z值;并且响应于确定所述合并源图块的所述经更新版本未被所述组基元完全覆盖,不设定所述剔除z值等于用于所述合并源图块的所述经更新版本的所述保守最远z值。

25.根据权利要求13所述的装置,其中,所述装置包括无线通信装置。

26.根据权利要求13所述的装置,其中,所述装置包括移动电话手持机。

27.一种设备,包括:

用于确定与图块位置相关联的样本的源图块的保守最远z值是否比与所述图块位置相关联的剔除z值更接近的装置,所述剔除z值指示用于与所述图块位置对应的目标图块的所有样本的保守最远z值;

用于基于所述源图块是否被对应于所述源图块的基元完全覆盖并且基于所述源图块的所述保守最远z值是否比与所述图块位置相关联的所述剔除z值更接近,选择性合并所述源图块和用于所述图块位置的合并源图块以生成所述合并源图块的经更新版本的装置;以及用于响应于确定所述源图块被对应于所述源图块的所述基元完全覆盖,使高速缓存单元中的存储用于所述合并源图块的数据记录的高速缓存行无效的装置。

28.一种包括指令的非暂时性计算机可读存储媒体,所述指令在由一或多个处理器执行时致使所述一或多个处理器:基于与图块位置相关联的样本的源图块是否被对应于所述源图块的基元完全覆盖并基于所述源图块的保守最远z值是否比与所述图块位置相关联的剔除z值更接近,选择性合并所述源图块和用于所述图块位置的合并源图块,以生成所述合并源图块的经更新版本,所述剔除z值指示用于与所述图块位置对应的目标图块的所有样本的保守最远z值;以及响应于确定所述源图块被对应于所述源图块的所述基元完全覆盖,使高速缓存单元中的存储用于所述合并源图块的数据记录的高速缓存行无效。

说明书 :

选择性合并部分覆盖图块以执行分层z剔除

技术领域

[0001] 本发明涉及图形处理系统,且更明确地说,涉及在图形处理系统中使用的z剔除技术。

背景技术

[0002] 图形处理单元(GPU)可由不同类型的计算装置用来加快显示器的图形数据的渲染。此些计算装置可包含例如计算机工作站、移动电话(例如,智能电话)、嵌入式系统、个人计算机、平板计算机及视频游戏控制台。
[0003] 渲染通常指代将可包含一或多个3D图形对象的三维(3D)图形场景转换为二维(2D)光栅化图像数据的过程。为渲染3D图形对象,GPU可光栅化对应于所述3D图形对象中的每个的一或多个基元,以便生成对应于所述3D图形对象中的每个的多个像素。所述像素随后可使用多种像素处理操作来处理以生成所得图像。像素处理操作可包含像素着色操作、掺合操作、纹理-映射操作、可编程像素着色器操作等。
[0004] 由于GPU已变得越来越快,增加了由GPU渲染的图形场景的复杂度。高度复杂的场景可包含大量的3D对象,这些3D对象中的每个可对应于数百或数千个像素。处理这些像素中的每个可能消耗大量的处理周期和相对大量的存储器带宽。
[0005] 3D图形对象通常在光栅化之前细分为一或多个图形基元(例如点、线、三角形)。时常,从检视区的角度,基元中的一些可能阻塞或闭塞其它基元,使得所述闭塞基元可能在所得渲染图像中是不可见的。对闭塞基元的像素执行像素处理操作可能导致执行不必要的像素操作,这可能消耗图形处理系统中的不必要的处理周期和存储器带宽。
[0006] 已有人提出处理与闭塞基元相关联的像素的不必要处理的问题的各种解决方案。一种解决方案是执行分层z剔除,这可包括在图形管线中的相对早期阶段丢弃在最终所得渲染图像中不可见的源像素,以便减小GPU的工作负荷和/或降低GPU的存储器带宽使用率。
例如,分层z剔除算法可比较像素的输入源图块的保守最小z值和与所述源图块具有相同图块位置的像素的目的地图块的保守最大z值,并在所述源图块的保守最小z值比所述图块位置的保守最大z值更大时,丢弃像素的源图块。像素的目的地图块的保守最大z值可为大于或等于像素的所述目的地图块的实际最大z值的值。
[0007] 大体而言,所述保守最大z值越接近所述目的地图块的实际最大z值(即,等于在所述目的地图块中的所有像素的最大z值的值),则在所述图形管线中可早期丢弃的不可见源像素的数量越大,并因此,通过执行分层z剔除可获得的性能好处就越大。然而,就算法复杂度、内存占用率、存储器带宽和处理器工作负荷而言,实现相对接近目的地图块的实际最大z值的保守最大z值可能是昂贵的。

发明内容

[0008] 本发明描述用于在图形处理系统中执行分层z剔除的技术。在一些示例中,用于执行分层z剔除的技术可包括基于用于与图块位置相关联的部分覆盖源图块的保守最远z值是否比用于图块位置的剔除z值更接近,将部分覆盖源图块选择性合并为完全覆盖合并的源图块,并使用与所述完全覆盖合并源图块相关联的保守最远z值来更新用于所述图块位置的所述剔除z值。所述剔除z值可用于形成所述图块位置的剔除确定,并可指示与所述图块位置对应的目的地图块的所有样本的保守最远z值。部分覆盖的源图块的所述合并可在以下意义上是选择性的:用于图块位置的具有比用于所述图块位置的所述剔除z值更接近所述检视区的保守最远z值的部分覆盖源图块可被合并,而用于所述图块位置的其它部分覆盖的源图块可不被合并。以此方式的选择性合并源图块可提高用于执行分层z剔除的剔除z值的质量,这可提高z剔除算法的拒绝效率。以此方式,可提高执行分层z剔除的图形处理器的性能和/或存储器带宽使用率。
[0009] 在一个示例中,本发明描述一种方法,其包含基于与图块位置相关联的样本的源图块是否被对应于所述源图块的基元完全覆盖并基于所述源图块的保守最远z值是否比与图块位置相关联的剔除z值更接近,利用图形处理单元(GPU)选择性合并源图块和用于所述图块位置的合并源图块,以生成所述合并源图块的经更新版本。所述剔除z值指示用于与所述图块位置对应的目的地图块的所有样本的保守最远z值。
[0010] 在另一示例中,本发明描述一种装置,其包含图形处理单元(GPU),所述图形处理单元(GPU)经配置基于与图块位置相关联的样本的源图块是否被对应于所述源图块的基元完全覆盖并基于所述源图块的保守最远z值是否比与图块位置相关联的剔除z值更接近,选择性合并源图块和用于所述图块位置的合并源图块,以生成所述合并源图块的经更新版本。所述剔除z值指示用于与所述图块位置对应的目的地图块的所有样本的保守最远z值。
[0011] 在另一示例中,本发明描述一种设备,其包含用于确定与图块位置相关联的样本的源图块的保守最远z值是否比与所述图块位置相关联的剔除z值更接近的装置。所述剔除z值指示用于与所述图块位置对应的目的地图块的所有样本的保守最远z值。所述设备进一步包含用于基于源图块是否被对应于所述源图块的基元完全覆盖并基于所述源图块的保守最远z值是否比与所述图块位置相关联的剔除z值更接近,选择性合并所述源图块和用于所述图块位置的合并源图块以生成所述合并源图块的经更新版本的装置。
[0012] 在另一示例中,本发明描述一种计算机可读存储媒体存储指令,其在被执行时,致使一或多个处理器基于与图块位置相关联的样本的源图块是否被对应于所述源图块的基元完全覆盖并基于所述源图块的保守最远z值是否比与所述图块位置相关联的剔除z值更接近,选择性合并源图块和用于所述图块位置的合并源图块,以生成所述合并源图块的经更新版本。所述剔除z值指示用于与所述图块位置对应的目的地图块的所有样本的保守最远z值。
[0013] 在附图和以下描述中阐明本发明的一或多个示例的细节。本发明的其它特征、目标和优点将从所述描述和附图以及权利要求书而显而易见。

附图说明

[0014] 图1为说明可用于实施本发明的分层z剔除技术的示例计算装置的框图。
[0015] 图2为更详细说明在图1中示出的计算装置的CPU、GPU和存储器的框图。
[0016] 图3为说明可用于实施本发明的分层z剔除技术的示例图形管线的框图。
[0017] 图4为根据本发明的说明用于执行分层z剔除的示例技术的流程图。
[0018] 图5为根据本发明的说明在执行分层z剔除时,用于合并部分覆盖源图块的示例技术的流程图。
[0019] 图6为根据本发明的说明待渲染的示例基元组和与示例基元组的渲染相关联的对应合并高速缓存状态的原理图。

具体实施方式

[0020] 本发明描述用于在图形处理系统中执行分层z剔除的技术。在一些示例中,用于执行分层z剔除的技术可包括基于用于部分覆盖源图块的保守最远z值是否比用于图块位置的剔除z值更接近,将与图块位置相关联的部分覆盖源图块选择性合并为完全覆盖合并的源图块,并使用与所述完全覆盖合并源图块相关联的保守最远z值来更新用于所述图块位置的剔除z值。所述剔除z值可用于形成所述图块位置的剔除确定,并可指示与所述图块位置对应的目的地图块的所有样本的保守最远z值。所述部分覆盖的源图块的合并可在以下意义上是选择性的:用于图块位置的具有比用于所述图块位置的所述剔除z值更接近检视区的保守最远z值的部分覆盖源图块可被合并,而用于所述图块位置的其它部分覆盖的源图块可不被合并。以此方式的选择性合并源图块可提高用于执行分层z剔除的剔除z值的质量,这可提高z剔除算法的拒绝效率。以此方式,可提高执行分层z剔除的图形处理器的性能和/或存储器带宽使用率。
[0021] 在其它示例中,用于执行分层z剔除的技术可使用高速缓存单元来存储所累积的保守最远z值和所累积的用于合并源图块的覆盖掩模。所述高速缓存单元的容量可比存储所累积的保守最远z值和用于在渲染目标中的所有图块位置的所累积的覆盖掩模所需的高速缓存的大小更小。另外,所述高速缓存单元可不与底层存储器相关联。也就是说,所述高速缓存单元可充当用于合并源图块数据的主数据存储,非仅充当用于存储初次存储在另一个底层存储器中的数据的复本的被高速缓存的数据存储。使用以上述方式配置的高速缓存来存储所累积的保守最远z值和所累积的覆盖掩模可提高GPU的存储器带宽使用率的性能和/或GPU的存储器占用面积,所述GPU基于所累积的与合并源图块相关联的保守最远z值执行分层z剔除。
[0022] 在另外示例中,在用于所述图块位置的剔除z值响应于处理用于所述图块位置的完全覆盖的非合并源图块而被更新时,用于执行分层z剔除的技术可使高速缓存单元的存储用于图块位置的合并源图块数据的高速缓存行无效。例如,响应于确定用于所述图块位置的源图块被对应于所述源图块的基元完全覆盖和所述源图块的保守最远z值比与所述图块位置相关联的剔除z值更接近,用于执行分层z剔除的技术可使与图块位置相关联的高速缓存行无效。在响应于处理用于图块位置的完全覆盖的非合并源图块已更新剔除z值之后,在一些情况下,对应于所述图块位置的所述合并源图块可具有保守最远z值,其比所述已更新剔除z值更远。如果所述剔除z值经更新等于比已经使用的剔除z值更远的保守最远z值,则可减少被剔除样本的量,借此降低所述分层z剔除算法的效率。使存储用于此些图块位置的所述合并源图块数据的高速缓存行无效可确保存储在所述合并高速缓存中的保守最远z值并不随后用于更新所述剔除z值。以此方式清除出所述合并高速缓存可提高所得剔除z值的质量,借此提高所述分层z剔除算法的丢弃效率。
[0023] 分层z剔除可由GPU用于在所述图形管线中在相对早期阶段丢弃在最终所得渲染图像中不可见的源样本,以便减小GPU的工作负荷和/或降低GPU的存储器带宽使用率。在一些示例中,分层z剔除可使用用于在渲染目标中的图块位置中的每个的剔除z值以确定不可见并因此可以丢弃的源样本。剔除z值可指示用于与所述图块位置对应的目的地图块的所有样本的保守最远z值。用于目的地图块的保守最远z值可为与在所述样本的目的地图块中的最远z值至少一样远或比所述最远z值更远的z值。用于图块中的个别样本的z值可以指指示在所述样本和垂直于相机(例如检视区)的方向的平面之间的距离的值,其中,所述相机与包含所述样本的渲染图形帧相关联。样本可以指像素或像素的子样本。
[0024] 一种分层z剔除算法可比较样本的输入源图块的保守最接近z值和样本的目的地图块的剔除z值,并在所述源图块的所述保守最接近z值与所述目的地图块的剔除z值相比更远时,丢弃样本的源图块。这类分层z剔除技术使用表示用于目的地图块中所有样本的保守最远z值的图块宽剔除z值,而不管在所述目的地图块中的样本是否被基元覆盖。例如,在向所述目的地图块渲染任何基元之前,在所述剔除z值经初始化用于所述目的地图块时,所述剔除z值可设定成用于所述系统的最远可能z剔除值。只要在不被基元覆盖的所述目的地图块中存在至少一个样本,所述剔除z值就可保持在所述最远的可能z剔除值。相对于使用表示仅用于在目的地图块中被基元覆盖的那些样本的保守最远z值的剔除z值,使用表示用于在目的地图块中的所有样本的保守最远z值的图块宽剔除z值而不管所述样本是否被基元覆盖可降低在分层z剔除期间所执行的丢弃比较的复杂度,借此提高实施分层z剔除技术的图形系统的性能。
[0025] 对于如上文所论述的使用并不在覆盖样本和未覆盖样本之间区别的剔除z值的分层z剔除算法而言,如果用于输入源图块的保守最远z值比用于所述目的地图块的剔除z值更接近,并且所述输入源图块被对应于所述输入源图块的基元完全覆盖,则用于所述目的地图块的剔除z值可利用用于所述输入源图块的保守最远z值来更新。然而,如果所述输入源图块仅被对应于所述源图块的基元部分覆盖而不是完全覆盖,则所述剔除z值可不始终能够以类似方式更新,因为使用所述保守最远z值用于所述部分覆盖源图块是否将产生用于所述全部目的地图块的保守最远z值是不确定的。这可产生用于所述目的地图块的不太理想的保守最远z值,这可能减少早期在所述图形管线中可以丢弃的样本的数量。
[0026] 一种用于允许部分覆盖图块影响用于目的地图块的保守最远z值的更新的技术是将具有相同图块位置的部分覆盖源图块合并为完全覆盖的图块,并且使用与所述合并的完全覆盖图块相关联的所累积的保守最远z值来更新在相同图块位置的用于目的地图块的剔除z值。使用与所述合并的源图块相关联的所累积的保守最远z值来更新用于目的地图块的所述保守最远z值可减小在所述保守最远z值和用于所述目的地图块的实际最远z值之间的差,借此允许丢弃另外的源样本。以此方式,可提高执行分层z剔除的GPU的性能。
[0027] 一种用于合并部分覆盖的源图块的方法包括合并用于特定图块位置的所有部分覆盖的源图块,而不管待合并的所述源图块的保守最远z值是否大于或小于所述目的地图块的保守最远z值。此方法可产生用于图块位置的合并的源图块,其具有比用于所述图块位置的所述剔除z值距离所述检视区更远的保守最远z值。用于合并源图块的保守最远z值可为与用于所述合并源图块的所有覆盖样本的最远z值至少一样远或比所述最远z值更远的z值。利用比所述剔除z值距离所述检视区更远的保守最远z值替换所述剔除z值可减少被所述分层z剔除算法丢弃的样本的量,借此减少通过执行分层z剔除获得的性能好处。
[0028] 对于其中用于合并源图块的保守最远z值比用于所述图块位置的对应剔除z值距离所述检视区更远的所述合并源图块而言,用于形成所述合并源图块的所述部分覆盖源图块中的一些可包含比剔除z值更接近所述检视区的保守最远z值。将部分覆盖源图块彼此无差别地合并,而不管用于此些源图块的所述保守最远z值相对于所述剔除z值的取向的系统可阻止比所述剔除z值更接近所述检视区的部分覆盖源图块正面影响所述剔除z值的质量,借此潜在减少被所述分层z剔除算法丢弃的样本的量。
[0029] 根据本发明的一些方面,所描述的技术是基于用于部分覆盖源图块的保守最远z值是否比所述图块位置的剔除z值更接近,用于将与所述图块位置相关联的所述部分覆盖源图块选择性合并为用于所述图块位置的完全覆盖的合并源图块。部分覆盖的源图块的合并可在以下意义上是选择性的:用于图块位置的具有比用于所述图块位置的所述剔除z值更接近的保守最远z值的部分覆盖源图块可被合并,而用于所述图块位置的其它部分覆盖的源图块可不被合并。以此方式选择性合并源图块可提高用于执行z剔除的剔除z值的质量,这可提高所述z剔除算法的丢弃率。以此方式,可提高执行分层z剔除的图形处理器的性能和/或存储器带宽使用率。
[0030] 现将描述根据上述方法更新目的地图块的保守最远z值的过程。在完全覆盖的输入源图块被处理并且所述输入源图块的保守最远z值比具有与所述输入源图块相同图块位置的所述目的地图块的保守最远z值更接近时,则用于所述目的地图块的保守最远z值利用所述输入源图块的保守最远z值来更新。如果所述完全覆盖输入源图块的保守最远z值并不比所述目的地图块的保守最远z值更接近,则用于所述目的地图块的保守最远z值并不被更新。
[0031] 在部分覆盖输入源图块被处理时,用于所述输入源图块的保守最远z值可与所述剔除z值相比。如果用于所述输入源图块的保守最远z值并不比所述剔除z值更接近所述检视区,则所述部分覆盖的源图块可不被合并。另一方面,如果用于所述输入源图块的保守最远z值比所述剔除z值更接近所述检视区,则所述部分覆盖的输入图块可与此前已被合并用于相同图块位置的任何部分覆盖的输入源图块合并。
[0032] 如果所述合并操作产生完全覆盖的合并图块,则用于所述图块位置的所述剔除z值利用所述完全覆盖的合并图块的最远z值来更新。另外,如果所述合并操作并不产生完全覆盖的图块,则用于所述目的地图块的保守最远z值并不更新,但定义所述合并源图块的数据可经存储用于后续的合并操作。
[0033] 一种用于存储定义合并源图块的数据的方法在存储器中为渲染目标的图块位置中的每个分配存储器条目,并在存储器条目中的每个中存储用于所述图块位置中的相应一个的所累积的覆盖掩模和所累积的保守最远z值。用于特定图块位置的所累积覆盖掩模可对应于已被合并用于该特定图块位置的用于所述部分覆盖源图块中的每个的所述覆盖掩模的合并版本。用于源图块的覆盖掩模可包含用于所述源图块中的所述样本中的每个的位,其中,所述位中的每个表示对应于所述源图块的基元是否覆盖对应于相应位的样本。如果样本的源图块响应于光栅化基元而生成,则所述基元可对应于样本的所述源图块。多个覆盖掩模的合并版本可对应于相对于所有多个覆盖掩模执行的逐位“或”运算的结果。所累积的用于特定图块位置的保守最远z值可与已被合并用于该特定图块位置的用于所述部分覆盖输入图块中的每个的保守最远z值的最远z值对应。
[0034] 在利用此前已被合并用于相同图块位置的部分覆盖源图块合并部分覆盖的源图块之后,所述累积的覆盖掩模可经检测以确定所述合并源图块是否为完全覆盖的合并源图块或部分覆盖的合并源图块。对于完全覆盖的合并源图块而言,所述覆盖掩模可将所有位设定成表示在所述合并源图块中的所述样本中的每个被将在所述渲染目标上显示的至少一个基元覆盖。对于部分覆盖的源图块合并而言,所述覆盖掩模可具有被设定的一些位和未设定的一些位,所述未设定的一些位表明所述合并源图块所述样本中的一些未被基元覆盖。
[0035] 渲染目标可包含大量的用于执行分层z剔除的不同图块位置。存储用于所述不同图块位置中的每个的所累积覆盖掩模和所累积最远z值会消耗大量的存储器。此外,存取用于所述不同图块位置中的每个的所累积覆盖掩模和所累积最远z值会消耗大量的存储器带宽。另外,存储合并源图块数据所需的存储器的量可能需要在与存取所述数据的GPU不同的芯片(即,芯片外)上实施的存储器。在存取此些数据时由所述GPU执行的大量芯片外存储器存取可能导致大量的处理延迟。
[0036] 根据本发明的一些方面,存储器单元可用于存储在执行分层z剔除时可用于合并部分覆盖源图块的所累积的覆盖掩模和所累积的最远z值。所述存储器单元的大小可比存储用于渲染目标中的所有图块位置的所累积的覆盖掩模和所累积的最远z值所需的存储器的大小更小。这可减小存储所累积的覆盖掩模和所累积的最远z值所需的存储器占用面积。设定大小相对较小的存储器单元也可允许所述存储器单元在与所述GPU相同的芯片上实施,借此减少存取所述数据所需的芯片外存储器带宽的量。另外,允许存储器在与所述GPU相同的芯片上实施可减小存取所述数据所需的延迟的量,借此提高分层z剔除操作的性能。
[0037] 因为用于存储所累积的覆盖掩模和所累积的最远z值的所述存储器单元可比存储用于渲染目标中的所有图块位置的所累积覆盖掩模和所累积最远z值所需的存储器的大小更小,所以在两个不同图块位置映射到相同存储器条目的情况下,用于两个不同图块位置的数据可彼此覆写是有可能的。虽然这会降低所述保守最远z值的质量(即,所述保守最远z值如何接近实际最远z值),但是在一些情况下,通过使用芯片上存储器实现的性能好处可比由于数据覆写造成的任何性能下降更重要。
[0038] 在一些示例中,所述存储器单元可为高速缓存单元。所述高速缓存单元的大小可比存储用于渲染目标中的所有图块位置的所累积的覆盖掩模和所累积的最远z值所需的高速缓存的大小更小。另外,所述高速缓存单元可不与底层存储器相关联。也就是说,所述高速缓存单元可充当用于所合并的源图块数据的主数据存储而非仅充当用于存储初次存储在其它地方的数据的复本的高速缓存数据存储。高速缓存单元通常经设计存储比此些高速缓存单元为其提供高速缓冲存储服务的所述底层存储器空间更少量的数据。因此,高速缓存单元往往实施多种映射策略(例如,导向映射、组相联、完全相联等)和替代策略(例如,最近最少使用、最不频繁使用、随机等)以确定数据将被存储在所述高速缓存中的什么地方和哪些数据将在所述高速缓存中被覆写。使用高速缓存单元作为用于存储合并源图块数据的主存储装置单元可允许图形系统充分利用这些内置式机理来确定数据被存储在高速缓存单元中的什么地方和哪些数据在高速缓存单元中被覆写,即使所述高速缓存单元并不在所述底层存储器中保持额外复本。这可简化实施用于存储合并源图块数据的存储器单元所需的面积的设计和/或减小所述面积的量。
[0039] 在用于存储合并源图块数据的存储器被实施为高速缓存单元时,所述高速缓存单元可包含多个不同的高速缓存行,其中,所述高速缓存行中的每个存储用于所述渲染目标的所述图块位置中的相应一个的数据。例如,所述高速缓存行中的每个可经配置存储标记、用于图块位置的所累积覆盖掩模和用于所述图块位置的所累积保守最远z值。对应于存储在特定高速缓存行中的数据的所述图块位置(例如,所述图块的屏座标)可用作该高速缓存行的标记。
[0040] 在部分覆盖输入源图块被处理时,所述高速缓存可被存取以查看是否存在包含与所述部分覆盖输入源图块的图块位置相关联的数据的高速缓存行。如果所述高速缓存行中的一个的确含有与所述部分覆盖输入源图块的图块位置相关联的数据,则用于所述输入源图块的所述覆盖掩模和所述保守最远z值与包含于所述高速缓存中的所累积覆盖掩模和所累积保守最远z值合并。否则的话,生成用于所述图块位置的新高速缓存条目,并且所累积的覆盖掩模和所累积的保守最远z值被设定成分别等于所述输入源图块的所述覆盖掩模和所述保守最远z值。如果所述合并操作的运行产生完全覆盖的合并图块,则与所述完全覆盖合并图块相关联的高速缓存行可以是无效的。
[0041] 如上文所论述,在完全覆盖的输入源图块被处理,并且所述输入源图块的保守最远z值比具有与所述输入源图块相同的图块位置的所述目的地图块的保守最远z值更接近时,则用于所述目的地图块的保守最远z值利用所述输入源图块的保守最远z值来更新。在一些情况下,在所述完全覆盖输入源图块被处理时,一或多个部分覆盖的源图块可已经被合并,并且与所述合并源图块相关联的数据可以存储在合并高速缓存单元中。
[0042] 一种用于处理所述合并源图块的方法是在所述合并高速缓存中保持所述图块,并保持合并部分覆盖源图块和所述合并源图块直到所述合并源图块被完全覆盖。然而,这种方法可能不保证用于所得完全覆盖合并源图块的所述保守最远z值比已经在使用的所述剔除z值更接近。如果所述剔除z值被不是比已经在使用的所述剔除z值更接近的保守最远z值代替,则可减小被所述分层z剔除算法丢弃的样本的量,借此降低所述算法的效率。
[0043] 根据本发明的一些方面,在用于图块位置的所述剔除z值响应于处理用于所述图块位置的完全覆盖的非合并源图块而被更新时,高速缓存单元的存储用于所述图块位置的合并源图块数据的高速缓存行可以是无效的。例如,响应于确定用于所述图块位置的源图块被对应于所述源图块的所述基元完全覆盖和所述源图块的保守最远z值比与所述图块位置相关联的所述剔除z值更接近,与图块位置相关联的高速缓存行可以是无效的。以此方式使高速缓存行无效可阻止所述剔除z值被不比已经在使用的所述剔除z值更接近的保守最远z值代替。以此方式,可提高所得剔除z值的质量,借此提高所述分层z剔除算法的丢弃效率。
[0044] 图1为说明可用于实施本发明的分层z剔除技术的示例计算装置2的框图。计算装置2可为例如,个人计算机、台式计算机、膝上型计算机、计算机工作站、视频游戏平台或控制台、无线通信装置(诸如,例如,移动电话、蜂窝式电话、卫星电话和/或移动电话手持机)、陆线电话、因特网电话、手持式装置(诸如,便携式视频游戏装置或个人数字助理(PDA))、个人音乐播放器、视频播放器、显示装置、电视机、电视机顶盒、服务器、中间网络装置、主机计算机,或处理和/或显示图形数据的任何其它类型的装置。
[0045] 如图1的示例中所说明,计算装置2包含用户接口4、CPU 6、存储器控制器8、存储器10、图形处理单元(GPU)12、显示器接口14、显示器16和总线18。用户接口4、CPU 6、存储器控制器8、GPU 12和显示器接口14可使用总线18彼此通信。应注意,包含于图1的计算装置2中的特定组件和在图1中示出的组件的配置仅是示例性的,且在所述相同或不同配置中具有相同或不同组件的其它类型的计算装置和/或其它图形处理系统可用于实施本发明的技术。
[0046] CPU 6可为控制计算装置2的操作的通用或专用处理器。用户可将输入提供到计算装置2以致使CPU 6执行一或多个软件应用程序。在CPU 6上执行的所述软件应用程序可包含例如,图形应用程序、字处理器应用程序、电子邮件应用程序、总分析表应用程序、媒体播放器应用程序、视频游戏应用程序、图形用户接口应用程序、操作系统或使用GPU 12来渲染图形图像的任何类型的程序。用户可经由一或多个输入装置(未图示),诸如,键盘、鼠标、麦克风、触摸垫或经由用户接口4耦合接至计算装置2的另一输入装置将输入提供到计算装置2。
[0047] 在CPU 6上执行的软件应用程序可包含一或多个图形渲染指令,其发指令给GPU 12以向用于在显示器16上显示的帧缓冲渲染图形数据。在一些示例中,所述图形渲染指令可符合图形应用程序编程接口(API),诸如,例如,DirectX API、Direct3D API、开放图形库API、开放图形库嵌入式系统(OpenGL ES)API、X3D API、RenderMan API、WebGL API或任何其它公共或专属标准图形API。为了处理所述图形渲染指令,CPU 6可向GPU 12发出一或多个图形渲染命令以致使GPU 12渲染所述图形数据中的一些或全部。在一些示例中,待渲染的图形数据可包含例如点、线、三角形、四边形、三角形带等图形基元的列表。
[0048] 存储器控制器8有助于数据进出存储器10的传送。例如,存储器控制器8可接收存储器读取和写入命令,以及并关于存储器10服务于此些命令,以便为计算装置2中的组件提供存储器服务。存储器控制器8通信耦接至存储器10。虽然存储器控制器8在图1的示例计算装置2中被说明为与CPU 6和存储器10均不同的处理模块,但是在其它示例中,存储器控制器8的功能中的一些或全部可在CPU 6和存储器10中的一或两个上实施。
[0049] 存储器10可存储可被CPU 6存取用于执行的程序模块和/或指令和/或被在CPU 6上执行的程序使用的数据。例如,存储器10可存储程序代码和与在CPU 6上执行的应用程序相关联的图形数据。存储器10可另外存储被计算装置2的其它组件使用和/或生成的信息。例如,存储器10可充当GPU 12的装置存储器并可存储被GPU 12运行的数据以及从GPU 12执行的操作所得的数据。例如,存储器10可存储顶点缓冲器、纹理缓冲器、深度缓冲器、模板缓冲器、帧缓冲器、渲染目标等等的任何组合。另外,存储器10可存储被GPU 12处理的命令流。
存储器10可包含一或多个易失性或非易失性存储器或存储装置,诸如例如,随机存取存储器(RAM)、静态RAM(SRAM)、动态RAM(DRAM)、只读存储器(ROM)、可擦除可编程ROM(EPROM)、电可擦除可编程ROM(EEPROM)、快闪存储器、磁性数据媒体或光学储存媒体。
[0050] GPU 12可经配置执行由CPU 6发布至GPU 12的命令。由GPU 12执行的命令可包含图形命令、绘制调用命令、GPU状态编程命令、存储器传送命令、通用计算命令、内核执行命令等。
[0051] GPU 12可经配置执行图形操作以渲染至显示器16的一或多个图形基元。在此些示例中,在CPU 6上执行的软件应用程序中的一个需要图形处理时,CPU 6可向GPU 12提供图形数据并向GPU 12发出一或多个图形命令。所述图形命令可包含例如,绘制调用命令、GPU状态编程命令、存储器传送命令、传图命令等。所述图形数据可包含顶点缓冲器、纹理数据、表面数据等。在一些示例中,通过向存储器10写入可被GPU 12存取的命令和图形数据,CPU 6可向GPU 12提供所述命令和图形数据。
[0052] 在一些情况下,GPU 12可内置有高度并行的结构,其提供比CPU 6更有效的对向量运算的处理。例如,GPU 12可包含经配置以并行方式对多个顶点、控制点、像素和/或其它数据操作的多个处理元件。在一些情况下,GPU 12的高度并行本质可允许GPU 12比使用CPU 6渲染图像更快地将图形图像(例如,GUI和二维(2D)和/或三维(3D)图形场景)渲染到显示器16上。另外,GPU 12的高度并行本质可允许GPU 12比CPU 6更快地处理用于通用计算应用程序的某些类型向量和矩阵运算。
[0053] 在一些情况下,GPU 12可集成到计算装置2的母板中。在其它情况下,GPU 12可存在于安装在计算装置2的母板中的端口中的图形卡上或以其它方式可并入在经配置以与计算装置2交互操作的外围装置内。在进一步例子中,GPU 12可与CPU 6位于同一微芯片上从而形成芯片上系统(SoC)。GPU 12可包含一或多个处理器,诸如一或多个微处理器、专用集成电路(ASIC)、现场可编程门阵列(FPGA)、数字信号处理器(DSP)或其它等效的集成或分立逻辑电路。
[0054] 在一些示例中,GPU 12可包含GPU高速缓存,其可为存储器10的全部或一部分提供高速缓冲存储服务。在此些示例中,GPU 12可使用本地存储装置而不是片外存储器,使用所述高速缓存来本地处理数据。这允许GPU 12通过减少GPU 12经由总线18存取存储器10的需要而以更有效的方式运行,其中,经由总线运行可使总线经受繁重的业务量。然而,在一些示例中,GPU 12可不包含独立的高速缓存,而是经由总线18利用存储器10。所述GPU高速缓存可包含一或多个易失性或非易失性存储器或存储装置,诸如例如,随机存取存储器(RAM)、静态RAM(SRAM)、动态RAM(DRAM)等。
[0055] CPU 6和/或GPU 12可在存储器10内分派的帧缓冲器中存储光栅化图像数据。显示器接口14可从所述帧缓冲器检索所述数据并配置显示器16以显示由所述光栅化图像数据表示的所述图像。在一些示例中,显示器接口14可包含数/模转换器(DAC),其经配置以将从帧缓冲器检索的数字值转换为可由显示器16耗用的模拟信号。在其它示例中,显示器接口14可将数字值直接传递到显示器16以进行处理。
[0056] 显示器16可包含监视器、电视机、投影装置、液晶显示器(LCD)、等离子体显示器面板、发光二极管(LED)阵列、阴极射线管(CRT)显示器、电子纸、表面传导电子发射显示器(SED)、激光电视机显示器、纳米晶体显示器或另一类型的显示单元。显示器16可集成在计算装置2内。举例来说,显示器16可为移动电话手持机或平板计算机的屏幕。或者,显示器16可为经由有线或无线通信链路而耦接至计算装置2的独立装置。举例来说,显示器16可为经由电缆或无线链路而连接至个人计算机的计算机监视器或平板显示器。
[0057] 总线18可使用包含第一、第二和第三代总线结构和协议、共享总线结构和协议、点对点总线结构和协议、单向总线结构和协议以及双向总线结构和协议的总线结构和总线协议的任何组合来实施。可用于实施总线18的不同总线结构和协议的示例包含例如超传输总线、InfiniBand总线、高级图形端口总线、外围部件互连标准(PCI)总线、PCI Express总线、高级微控制器总线架构(AMBA)高级高性能总线(AHB)、AMBA高级外围总线(APB)以及AMBA高级可扩展接口(AXI)总线。也可使用其它类型的总线结构和协议。
[0058] 根据本发明,GPU 12可经配置执行本发明中描述的所述分层z剔除技术中的任一个。例如,GPU 12可经配置以基于用于所述部分覆盖的源图块的保守最远z值是否比用于图块位置的剔除z值更接近,选择性合并与所述图块位置相关联的样本的部分覆盖源图块。以此方式选择性合并源图块可提高用于执行z剔除的剔除z值的质量,这可提高所述z剔除算法的丢弃率。以此方式,可提高执行分层z剔除的图形处理器的性能和/或存储器带宽使用率。
[0059] 作为另一示例,GPU 12可使用存储器单元来存储所累积的覆盖掩模和定义合并源图块的所累积的最远z值。所述合并源图块可用于更新用于执行分层z剔除的剔除z值。所述存储器单元可在与GPU 12相同的芯片上或在另一个芯片(例如,存储器10)上形成。所述存储器单元的大小可比存储用于渲染目标中的所有图块位置的所累积的覆盖掩模和所累积的最远z值所需的存储器的大小更小。这可减小存储所累积的覆盖掩模和所累积的最远z值所需的存储器占用面积。大小相对较小的存储器单元也可允许所述存储器单元在与GPU 12相同的芯片上实施,借此减少存取所述数据所需的片外存储器带宽的量。另外,允许存储器在与GPU 12相同的芯片上实施可减小存取所述数据所需的执行延迟的量,借此提高分层z剔除操作的性能。
[0060] 因为用于存储所累积的覆盖掩模和所累积的最远z值的所述存储器单元可比存储用于渲染目标中的所有图块位置的所累积覆盖掩模和所累积最远z值所需的存储器的大小更小,所以在两个不同图块位置映射到相同存储器条目的情况下,用于两个不同图块位置的数据可彼此覆写是有可能的。虽然这可能会降低所述保守最远z值的质量(即,所述保守最远z值在多大程度上接近实际最远z值),但是在一些情况下,通过使用芯片上存储器实现的性能好处可比由于数据覆写造成的任何性能下降更重要。
[0061] 在一些示例中,所述存储器单元可为高速缓存单元。所述高速缓存单元的大小可比存储用于渲染目标中的所有图块位置的所累积的覆盖掩模和所累积的最远z值所需的高速缓存的大小更小。另外,所述高速缓存单元可不与底层存储器相关联。也就是说,所述高速缓存单元可充当用于所合并的源图块数据的主数据存储装置而非仅充当用于存储主要存储在其它地方的数据的复本的高速缓存数据存储装置。高速缓存单元通常经设计存储比此些高速缓存单元为其提供高速缓冲存储服务的所述底层存储器空间更少量的数据。因此,高速缓存单元往往实施多种映射策略(例如,直接映射、组相联、完全相联等)和替代策略(例如,最近最少使用、最不频繁使用、随机等)以确定数据将被存储在所述高速缓存中的什么地方和哪些数据将在所述高速缓存中被覆写。使用高速缓存单元作为用于存储合并源图块数据的主存储装置单元可允许图形系统充分利用这些内置式机构来确定数据被存储在高速缓存单元中的什么地方和哪些数据在高速缓存单元中被覆写,即使所述高速缓存单元并不在所述底层存储器中保持额外复本。这可简化实施用于存储合并源图块数据的存储器单元所需的面积的设计和/或减小所述面积的量。
[0062] 作为可由GPU 12执行的所述分层z剔除技术的另一示例,在GPU 12在高速缓存单元中存储所合并的源图块数据时,在用于图块位置的所述剔除z值响应于处理用于图块位置的完全覆盖的非合并源图块而被更新时,GPU 12可使所述高速缓存单元的用于所述图块位置的高速缓存行无效。例如,响应于确定用于图块位置的源图块被对应于所述源图块的基元完全覆盖和所述源图块的保守最远z值比与所述图块位置相关联的剔除z值更接近,GPU 12可使与所述图块位置相关联的高速缓存行无效。在响应于处理用于图块位置的完全覆盖的非合并源图块已更新所述剔除z值之后,对应于所述图块位置的所述合并源图块可具有比所述已更新剔除z值更远的保守最远z值。如果所述剔除z值经更新等于比已经使用的剔除z值更远的保守最远z值,则可减少被剔除样本的量,借此降低所述分层z剔除算法的效率。使存储用于此图块位置的所述合并源图块数据的高速缓存行无效可确保存储在所述合并高速缓存中的保守最远z值并不随后用于更新所述剔除z值。以此方式清除出所述合并高速缓存可提高所得剔除z值的质量,借此提高所述分层z剔除算法的丢弃效率。
[0063] 图2是进一步详细说明图1中的计算装置2的CPU 6、GPU 12和存储器10的框图。如图2中所示,CPU 6通信耦接至GPU 12和存储器10,且GPU 12通信耦接至CPU 6和存储器10。在一些示例中,GPU 12可与CPU 6集成到母板上。在其它示例中,GPU 12可在安装于包含在CPU 6的母板的端口中的图形卡上实施。在其它示例中,GPU 12可并入在经配置以与CPU 6交互操作的外围装置内。在其它示例中,GPU 12可与CPU 6位于同一微芯片上从而形成芯片上系统(SoC)。
[0064] CPU 6可包含一或多个处理器(例如微处理器),其经配置执行软件应用程序24、图形API 26、GPU驱动程序28和操作系统30中的任一个。在一些示例中,CPU 6可经配置执行致使CPU 6的一或多个处理器执行本发明中描述的技术中的任一个的全部或部分的指令。
[0065] GPU 12包含命令引擎32、一或多个处理单元34和存储器36。一或多个处理单元34可经配置形成3D图形渲染管线。命令引擎32和处理单元34可包含专门硬件单元、固件、软件和处理器的任何组合,其经配置以执行归于此些组件的功能。在一些示例中,GPU 12可经配置以执行指令,所述指令致使GPU 12的一或多个处理器执行本发明中描述的技术中的任一个的全部或部分。
[0066] 存储器10可存储一或多个命令38和基元数据40。在一些示例中,存储器10也可存储指令,当所述指令被执行时,致使一或多个处理器执行本发明中描述的技术中的任一个的全部或部分。
[0067] 软件应用程序24可为图形应用程序,其使用GPU 12将一或多个3D图形场景和/或3D图形对象渲染到待在显示器上显示的图像中。软件应用程序24可包含致使GPU 12光栅化和渲染一组3D图形基元的指令。软件应用程序24可经由图形API 26向GPU驱动程序28发出所述指令。图形API 26可为将从软件应用程序24接收的所述指令转换为可由GPU驱动程序
28耗用的格式的运行时间服务。
[0068] GPU驱动程序28经由图形API 26从软件应用程序24接收指令,并控制GPU 12的操作以服务所述指令。例如,GPU驱动器28可调配一或多个命令38,将命令38放置到存储器10中,且指示GPU 12执行命令38。在一些示例中,GPU驱动器28可将命令38放置到存储器10中且经由操作系统30,例如经由一或多个系统调用与GPU 12通信。
[0069] 操作系统30可提供软件应用程序24、图形API 26和GPU驱动程序28可在上面执行的软件平台。操作系统30可管理在CPU 6、存储器10和GPU 12之间传送和传递数据的硬件细节。
[0070] 命令38可包含一或多个状态命令和/或一或多个绘制调用命令。状态命令可发指令给GPU 12以改变GPU 12中的状态变量中的一或多个,例如基元类型。绘制调用命令可发指令给GPU 12以渲染由存储在存储器10中的一组一或多个顶点定义的几何形状(例如,在顶点缓冲器中定义的)。在一些示例中,所述由所述组的一或多个顶点定义的几何形状可对应于待渲染的多个基元(例如,基元数据40)。一般而言,绘制调用命令可调用GPU 12以渲染存储在存储器10的所定义区段(例如缓冲器)中的所有顶点。换句话说,一旦GPU 12接收所述绘制调用命令,则用于渲染由在存储器10的所定义区段(例如缓冲器)中的所述顶点表示的所述几何形状和基元的控制被传递给GPU 12。
[0071] 命令引擎32经配置以检索和执行存储在存储器10中的命令38。命令引擎32可处理GPU 12的渲染状态、控制处理单元34的操作,使得处理单元34实施图形渲染管线并致使图形数据经由所述图形渲染管线被渲染为渲染目标。
[0072] 响应于接收到状态命令,命令引擎32可经配置以基于所述状态命令将GPU中的一或多个状态寄存器设定到特定值,和/或基于所述状态命令配置固定功能处理单元34中的一或多个。响应于接收绘制调用命令,命令引擎32可经配置以致使处理单元34渲染由存储器10中的顶点表示的所述几何形状(例如,由基元数据40表示的所述几何形状)。命令引擎32还可接收着色器程序绑定命令,并基于所述着色器程序绑定命令将特定着色器程序加载到可编程处理单元34中的一或多个中。
[0073] 处理单元34可包含一或多个处理单元,其中的每一者可为可编程处理单元或固定功能处理单元。可编程处理单元可包含例如可编程着色器单元,其经配置执行从CPU 6下载到GPU 12上的一或多个着色器程序。在一些示例中,着色器程序可为以高级着色语言,诸如例如高级着色语言(HLSL)、OpenGL着色语言(GLSL)、用于图形的C(Cg)着色语言等编写的程序的编译版本。
[0074] 在一些示例中,可编程着色器单元可包含多个处理单元,其经配置以并行运行例如单指令多数据(SIMD)管线。可编程着色器单元可具有存储着色器程序指令的程序存储器和执行状态寄存器,例如指示程序存储器中正执行的当前指令或待提取的下一指令的程序计数器寄存器。处理单元34中的可编程着色器单元可包含例如顶点着色器单元、像素着色器单元、几何形状着色器单元、壳着色器单元、域着色器单元、计算着色器单元和/或统一着色器单元。
[0075] 固定功能处理单元可包含经硬连线以执行某些功能的硬件。虽然固定功能硬件可经由一或多个控制信号而配置例如以执行不同功能,但所述固定功能硬件通常并不包含能够接收用户编译程序的程序存储器。在一些示例中,处理单元34中的固定功能处理单元可包含例如执行光栅操作,诸如例如深度测试、剪刀测试、α掺合等的处理单元。
[0076] 存储器36可经配置以存储在执行分层z剔除时所使用的合并源图块数据。所述合并源图块数据可包含用于渲染目标中的不同图块位置的所累积的保守最远z值和/或所累积的覆盖掩模。用于特定图块位置的所累积覆盖掩模可对应于已被合并用于该特定图块位置的用于所述部分覆盖输入图块中的每个的所述覆盖掩模的合并版本。用于输入图块的覆盖掩模可包含用于所述输入图块中的每个样本的位,其中,所述位中的每个表示对应于所述输入图块的基元是否覆盖对应于相应位的样本。如果样本的输入图块响应于光栅化基元而生成,则所述基元可对应于所述样本的输入图块。多个覆盖掩模的合并版本可对应于相对于所有多个覆盖掩模执行的逐位“或”运算的结果。用于特定图块位置的所累积保守最远z值可对应于已被合并用于该特定图块位置的用于所述部分覆盖输入图块中的每个的所述最远z值的最大者。
[0077] 用于特定图块位置的所累积保守最远z值可替代地被称为用于所述特定图块位置的保守最远z值,或被称为用于对应于所述图块位置的合并源图块的保守最远z值。类似地,用于特定图块位置的所累积覆盖掩模可替代地被称为用于所述特定图块位置的覆盖掩模,或被称为用于对应于所述图块位置的合并源图块的覆盖掩模。
[0078] 在一些示例中,存储器36可经配置以存储多个合并源图块数据记录。所述合并源图块数据记录中的每个可包含与用于渲染目标的多个图块位置中的相应一个的合并源图块相关联的数据。换句话说,与特定图块位置相关联的(即,与特定合并源图块相关联的)所述合并源图块数据可被称为用于所述图块位置的合并源图块数据记录。在此些示例中,存储器可在一些示例中具有比存储N个合并源图块数据记录必需的数据量更小的数据容量,其中,N是在所述渲染目标中的所述图块位置的总数。
[0079] 在一些示例中,与包含于用于图块位置的数据记录中的所述合并源图块相关联的所述数据可包含用于与所述图块位置相关联的所述合并源图块的保守最远z值。在其它示例中,与包含于用于图块位置的数据记录中的所述合并源图块相关联的所述数据可包含用于与所述图块位置相关联的所述合并源图块的覆盖掩模。在其它示例中,与包含于用于图块位置的数据记录中的所述合并源图块相关联的所述数据可包含用于与所述图块位置相关联的所述合并源图块的保守最远z值和用于与所述图块位置相关联的所述合并源图块的覆盖掩模两者。
[0080] 存储器36可包含一或多个易失性或非易失性存储器或存储装置,诸如例如,随机存取存储器(RAM)、静态RAM(SRAM)、动态RAM(DRAM)、高速缓存单元等。在一些示例中,存储器36可为芯片上存储器。芯片上缓冲存储器是指与GPU 12在其上形成、位于和/或设置的微芯片、集成电路和/或晶粒相同的微芯片、集成电路和/或晶粒上形成、位于和/或设置的存储器。
[0081] 在其它示例中,存储器36可为高速缓存单元(例如,芯片上高速缓存单元)。在此些示例中,所述高速缓存单元可不与底层存储器相关联。所述高速缓存单元可不与底层存储器相关联,在这个意义上说,所述高速缓存单元可服务所有读取和写入请求而无需存取底层存储器。此外,如果所述高速缓存单元中没有可供用于存储与合并源图块相关联的输入数据的足够映射存储器空间,则所述高速缓存单元可利用所述输入数据覆写与另一个合并源图块相关联的数据。例如,存储器36可经配置以向所述高速缓存单元中的高速缓存行写入与第一图块位置相关联的第一合并源图块数据记录而无需向底层存储器写入所述第一合并源图块数据记录,并利用与第二图块位置相关联的第二合并源图块数据记录覆写所述第一合并源图块数据记录而无需向所述底层存储器写入所述第一合并源图块数据记录。
[0082] 存储器36可充当用于合并源图块数据的主数据存储,而非仅充当用于存储初次存储在另一个底层存储器中的数据的复本的高速缓存的数据存储。然而,所述主数据存储并不保证在所述数据存储中保留所述数据,因为所述高速缓存单元可覆写数据而无需向正存取所述高速缓存的所述分层z剔除算法通告。
[0083] 基元数据40可包含指示待渲染的一或多个基元的数据。在一些情况下,基元数据40可几何学上定义待渲染的基元。几何学上定义基元可指代由一组顶点(或控制点)和对应顶点属性定义基元。在一些示例中,基元数据40可采取多个顶点、顶点列表和/或顶点缓冲器的形式。在其它示例中,基元数据40可采取顶点缓冲器与索引缓冲器组合的形式。在此些示例中,顶点缓冲器可定义顶点,且索引缓冲器可指定哪些顶点用于定义所述基元中的每个。
[0084] 包含于基元数据40中的顶点中的每个可包含一或多个属性,诸如例如,位置座标、简正座标、纹理座标等。所述顶点可在概念上对应于几何基元(例如,点、线、三角形等)的顶点和/或对应于高阶基元(例如,高阶表面,诸如贝塞尔表面)的控制点。在一些情况下,所述顶点中的每个可分组到一或多个顶点的群组中,并且这些顶点群组中的每个可对应于单一基元。
[0085] 在一些示例中,几何学上所定义基元的形状可由不一定包含于基元数据40中的另外数据定义。所述另外数据可包含来自一组一或多个预定基元类型、一或多个数学函数和/或一或多个曲面细分技术的指定基元类型中的一或多个。
[0086] 在一些示例中,所述指定基元类型可作为渲染状态变量存储在GPU 12中并可由软件应用程序24配置。在一些情况下,所述指定基元类型可定义所得渲染基元(例如,点、线、三角形等)的形状和/或包含于基元数据40中的所述顶点的连通性(例如,三角形条带、三角形扇形物等)。在一些示例中,不同基元类型可对应于由处理单元34实施的图形管线能够处理的一组基元拓扑。在其它示例中,不同基元类型可对应于由图形API 26定义且可供软件应用程序24使用的所述组基元拓扑。
[0087] 所述一或多个数学函数和/或所述一或多个曲面细分技术可在经配置以在GPU 12的一或多个着色器单元(例如,壳着色器单元和/或域着色器单元)上执行的一或多个着色器程序中指定。数学函数可用于定义具有曲线和/或曲面表面的基元。所述一或多个曲面细分技术可用于通过接近于输入基元的形状和/或曲率的多个曲面细分的基元来定义基元。
[0088] 在运行期间,在CPU 6上执行的软件应用程序24(例如,图形应用程序)可将基元数据40放置在存储器10中,并向GPU 12发出一或多个绘制调用。基元数据40可几何学上定义待渲染的一或多个图形基元。响应于收到所述一或多个绘制调用,命令引擎32致使由处理单元34实施的3D图形管线来渲染所述基元。所述3D图形管线可包含处理由基元数据40定义的所述基元的所述顶点的几何形状处理级,生成对应于所述基元的光栅化版本的一或多个样本(例如,像素)的光栅化器级,以及处理所述样本以生成用于由基元数据40定义的所述基元的所得渲染图像的一或多个像素处理级。
[0089] 根据本发明,由处理单元34实施的所述3D图形管线可包含执行本发明中描述的所述分层z剔除技术中的任一个的分层z剔除级。在一些示例中,所述分层z剔除级可安置于在所述光栅化器之后以及在所述像素处理级中的一或多个之前的所述3D图形管线中。在一些示例中,本发明中描述的所述分层z剔除技术可提高用于执行分层z剔除的z剔除值的质量,借此提高分层z剔除级的丢弃率。此外,在一些示例中,与其它系统相比,本发明中描述的所述分层z剔除技术可能能够使用相对较小的存储器单元或高速缓存单元来存储所合并的源图块数据,借此减少实现相对高分层z剔除丢弃比率所需的存储器占用面积和/或存储器带宽。以此方式,本发明的技术可用于提高由GPU 12使用的存储器带宽使用率和/或存储器占用面积的性能。
[0090] 图3为说明可用于实施本发明的分层z剔除技术的示例图形管线50的框图。图形管线50包含一或多个几何形状处理级52、光栅化器级54、z剔除级56、一或多个像素处理级58、低分辨率z缓冲器(LRZ缓冲器)60以及合并高速缓存62。在一些示例中,图形管线50可在图2所示的GPU 12中实施。在此些示例中,几何形状处理级52、光栅化器级54、z剔除级56以及像素处理级58可在一些示例中由GPU 12的处理单元34中的一或多个实施。而且,在此些示例中,LRZ缓冲器60可在一些示例中在计算装置2的存储器10中实施。而且,在此些示例中,合并高速缓存62可在一些示例中在GPU 12的存储器36中实施。
[0091] 几何形状处理级52经配置以接收输入基元,并基于所述输入基元生成光栅化基元。为生成所述光栅化基元,几何形状处理级52可基于所述输入基元执行几何形状处理操作。几何形状处理操作可包含例如,顶点着色、顶点变换,光照、硬件曲面细分、壳着色、域着色、几何形状着色等。
[0092] 输入基元可指能够由图形渲染管线的所述几何形状处理级处理的基元。在一些示例中,输入基元可由通过图形管线50实施的图形API定义。例如,输入基元可对应于在Microsoft DirectX 11API中的输入基元拓扑。输入基元可包含点、线、线列表、三角形、三角带、斑点等。在一些示例中,所述输入基元可对应于几何学上定义待渲染的输入基元的多个顶点。在其它示例中,所述输入基元可对应于存储在图2的存储器10中的基元数据40。
[0093] 光栅化基元可对应于能够由光栅化器级54处理的基元。在一些示例中,所述光栅化基元可包含点、线、三角形、线流、三角形流等。在其它示例中,每个输入基元可对应于多个光栅化基元。例如,斑点可曲面细分为多个光栅化基元。在一些示例中,所述光栅化基元可对应于几何学上定义待渲染的光栅化基元的多个顶点。
[0094] 光栅化器级54经配置以接收光栅化基元,并基于所述光栅化基元生成一或多个源图块。所述源图块中的每个可表示在多个图块位置中的相应一个处的所述基元的光栅化版本。对于收到的所述光栅化基元中的每个而言,光栅化器级54可光栅化所述基元以生成用于所述相应基元的一或多个源图块。
[0095] 渲染目标可细分为多个图块(例如区域),其中,所述图块中的每个包含多个样本。样本可指像素或另选地指像素的子样本。像素可指与用于光栅化图像的一组采样点中的特定采样点相关联的数据,其中,所述组采样点具有与显示相同的分辨率。像素的子样本可指与用于光栅化图像的一组采样点中的特定采样点相关联的数据,其中,所述组采样点具有比所述显示的分辨率更大的分辨率。与所述样本中的每个相关联的数据可包含例如,色彩数据(例如,红色、绿色、蓝色(RGB))、透明度数据(例如,α值)和深度数据(例如,z值)。
[0096] 目标样本可指已被处理用于特定样本位置的一或多个源样本的复合版本。目标样本可对应于存储在用于特定样本位置的渲染目标(例如,帧缓冲器或分格缓冲器)中的样本数据,并且可被更新为被处理场景中的所述基元中的每个。目标样本可包含来自与不同基元相关联的多个源样本的复合样本数据。相比而言,源样本可指与单一几何基元相关联并且尚未与用于相同样本位置的其它源样本合成的样本数据。在一些示例中,源样本可由光栅化器生成并在与对应目标样本合并和/或合成之前由一或多个像素处理级处理。
[0097] 类似地,目的地图块可指与渲染目标的特定区域相关联的多个目标样本。目的地图块可为多个源图块的复合版本,所述源图块中的每个可对应于不同基元。目的地图块可更新为被处理场景中的所述基元中的每个。源图块可指与渲染目标的特定区域相关联的多个源样本。源图块可与单一几何基元相关联并且尚未与用于相同样本位置的其它源图块合成。在一些示例中,源图块可由光栅化器生成并在与对应目的地图块合并和/或合成之前由一或多个像素处理级处理。
[0098] 在所述源和目的地图块中的每个中的样本可对应于渲染目标的区域的样本。所述渲染目标的区域的位置可被称为图块位置。与相同图块区域相关联的两个图块可被称为处于相同位置的图块。一般而言,未被剔除的源图块可合成和/或合并为处于相同位置的目的地图块。
[0099] 为了光栅化基元,光栅化器级54可确定渲染目标的哪些图块位置被所述基元覆盖,并生成用于被所述基元覆盖的所述图块位置中的每个的源图块。如果基元的边缘或内部覆盖与图块位置相关联的所述样本中的至少一个,则所述图块位置可被所述基元覆盖。如果基元的区域包含所述样本位置,则样本可被所述基元覆盖。
[0100] 所述源图块中的每个可包含指示在多个采样点采样的基元的数据。由包含于源图块中的所述数据指示的所述基元可为光栅化器级54光栅化以便生成所述源图块的所述基元,并且可称为对应于所述源图块。所述基元在其被采样的采样点可对应于所述源图块的图块位置。
[0101] 在一些示例中,对于由光栅化器级54生成的所述源图块中的每个而言,光栅化器级54也可生成以下中的一或多个:用于所述源图块的覆盖掩模、指示所述源图块是否被完全覆盖(即,彻底地覆盖)的信息、用于所述源图块的保守最接近z值以及用于所述源图块的保守最远z值。
[0102] 用于所述源图块的所述覆盖掩模可指示所述源图块中的哪些样本被对应于所述源图块的所述基元覆盖。例如,所述覆盖掩模可包含多个位,其中,所述位中的每个对应于与所述覆盖掩模对应的源图块中的多个样本中的相应一个。所述位中的每个的所述值可表示所述源图块中所述样本中的相应一个是否被对应于所述源图块的所述基元覆盖。例如,用于所述覆盖掩模中特定位的值“1”可表示对应于该位的所述样本被覆盖,而用于所述覆盖掩模中所述特定位的值“0”可表示对应于该位的所述样本未被覆盖。
[0103] 指示所述源图块是否被完全覆盖的所述信息可表示在源图块中的所有样本是否被对应于所述源图块的基元覆盖。在一些示例中,根据所有样本是否被覆盖,指示所述源图块是否被完全覆盖的所述信息可为等于两个不同值中的一个的一或多个位。如果包含于源图块中的所有样本被对应于所述源图块的所述基元覆盖,则所述源图块可称为被完全覆盖。另外,如果包含于源图块中的不到全部的所述样本被对应于所述源图块的所述基元覆盖,则所述源图块可称为不被完全覆盖。如果所述源图块中的所述样本中的至少一个被对应于所述源图块的所述基元覆盖,但并不是所有的样本被覆盖,则所述图块可称为部分覆盖的图块。换句话说,部分覆盖的图块可指不是被完全覆盖,但具有被对应于所述源图块的所述基元覆盖的至少一个样本的图块。
[0104] 用于源图块的保守最接近z值可指与用于所述源图块中的所有覆盖样本的最接近z值同样接近或比所述最接近z值更接近的值。一般而言,所述源图块中所述样本中的每个可具有相关联的z值。用于图块中的个别样本的所述z值可指指示在所述样本和垂直于相机(例如检视区)的方向的平面之间的距离的值,其中,所述相机与包含所述样本的渲染图形帧相关联。用于所述源图块的所述保守最接近z值可为与最接近与所述渲染图形帧相关联的相机的用于所述样本的所述z值同样接近或比所述z值更接近的值。在一些示例中,用于所述源图块的所述保守最接近z值可等于用于所述源图块的所述最接近z值。在此情况下,用于所述源图块的所述保守最接近z值可被称为用于所述源图块的所述最接近z值。
[0105] 用于源图块的保守最远z值可指与用于所述源图块中的所有覆盖样本的所述最远z值同样远或比所述最远z值更远的值。在一些示例中,用于所述源图块的所述保守最远z值可等于用于所述源图块的所述最远z值。在此情况下,用于所述源图块的所述保守最远z值可被称为用于所述源图块的所述最远z值。
[0106] 不同图形系统可使用用于生成z值的不同类型的坐标系。一些图形系统可生成随着所述样本离开所述相机的距离而增大的z值。对于此些系统而言,不论何时本发明提及最接近z值或保守最接近z值,此些参考也可被分别称为最小z值和保守最小z值。类似地,对于此些系统而言,不论何时本发明提及最远z值或保守最远z值,此些参考也可被分别称为最大z值和保守最大z值。
[0107] 其它图形系统可生成随着所述样本离开所述相机的距离而减小的z值。对于此些系统而言,不论何时本发明提及最接近z值或保守最接近z值,此些参考也可被分别称为最大z值和保守最大z值。类似地,对于此些系统而言,不论何时本发明提及最远z值或保守最远z值,此些参考也可被分别称为最小z值和保守最小z值。
[0108] 如果本发明提及最小或最大z值或保守最小或最大z值,则此些z值应理解为是指在特定z坐标系内的最小和最大z值,其中,z值随着离开所述相机的距离或增大或减小。还应当理解,为了利用另一种z坐标系实施本发明的技术,则提及最小和最大z值的角色可能需要互换。一般而言,如果最小或最大z值在本发明中被提及但不指定所述z坐标系是增大还是减小的坐标系,则应理解这些z值是指在增大的z坐标系内的最小或最大z值,其中,所述z值随着离开所述相机的距离增大而增大。
[0109] Z剔除级56从光栅化器级54接收一或多个源图块、用于所述源图块中的每个的覆盖掩模、指示所述源图块中的每个是否被完全覆盖的信息、用于所述源图块中的每个的保守最接近z值和用于所述源图块中的每个的保守最远z值,并基于所收到的信息剔除所述源图块以生成剔除源图块。所述剔除源图块被提供给像素处理级58。
[0110] 为了生成所述剔除源图块,z剔除级56可基于所述源图块的保守最接近z值是否比与所述图块位置相关联的剔除z更远,从图形管线50选择性丢弃与图块位置相关联的样本的源图块。所述剔除z值可指示用于与所述图块位置对应的目的地图块的所有样本的保守最远z值。例如,响应于确定所述源图块的所述保守最接近z值比与所述图块位置相关联的所述剔除z值更远,z剔除级56可丢弃源图块,以及响应于确定所述源图块的所述保守最接近z值并不比与所述图块位置相关联的所述剔除z值更远,不丢弃所述源图块。
[0111] 丢弃源图块可包括不将所述源图块传送到一或多个后续像素处理级58上。换句话说,如果源图块被丢弃,则剔除级56可在所述组剔除源图块中不包含所述源图块。不丢弃所述源图块可包括将所述源图块传送到一或多个后续像素处理级58上。换句话说,如果源图块未被丢弃,则z剔除级56可在所述组剔除源图块中包含所述源图块。
[0112] LRZ缓冲器60可存储一组剔除z值。所述组剔除z值可包含用于渲染目标中所述图块位置中的每个的剔除z值。所述剔除z值中的每个可指示用于在多个目的地图块中的对应一个中的所有样本的保守最远z值。如果与剔除z值相关联的所述图块位置与用于目的地图块的所述图块位置相同,则所述目的地图块可对应于所述剔除z值。
[0113] 在一些示例中,LRZ缓冲器60可为芯片外存储器,也就是说,位于与图形管线50在其上形成的微芯片不同的微芯片上。例如,在图1和2所示的计算装置2中,LRZ缓冲器60可位于存储器10中。在其它示例中,LRZ缓冲器60可为芯片上存储器,其位于和/或形成于与图形管线50在其上形成的微芯片(例如,GPU 12在其上形成的微芯片)相同的微芯片上。LRZ缓冲器60可包含一或多个易失性存储器或存储装置,诸如例如,随机存取存储器(RAM)、静态RAM(SRAM)、动态RAM(DRAM)等。
[0114] 应注意,虽然所述剔除z值可指示对应目的地图块的保守最远z值,但目的地图块可不实际上由z剔除级56生成。而是目的地图块改为可由图形管线50中的像素处理级58生成,并且z剔除级56可不必存取所述实际目的地图块。然而,z剔除级56可以以保证所述剔除z值将至少与目的地图块中随后由像素处理级58生成的所述最远z值一样远的方式来更新所述剔除z值。
[0115] Z剔除级56可基于与对应于图块位置的源图块相关联的覆盖掩模、指示所述源图块是否被完全覆盖的信息、用于所述源图块的保守最远z值、用于所述源图块的保守最接近z值以及用于所述图块位置的剔除z值中的一或多个来更新用于所述图块位置的剔除z值。每次源图块被z剔除级56处理,z剔除级56可确定用于对应于所述源图块的图块位置的剔除z值是否要被更新。在一些示例中,如果z剔除级56确定所述源图块要被丢弃,则z剔除级56可确定所述剔除z值不要被更新。如果z剔除级56确定所述源图块不要被丢弃,则z剔除级56可根据所述源图块是被完全覆盖还是部分覆盖,确定用于对应于所述源图块的所述图块位置的所述剔除z值是否要使用一或多种技术来更新。
[0116] 对于完全覆盖源图块而言,z剔除级56可确定用于所述源图块的保守最远z值是否比用于对应于所述源图块的所述图块位置的所述剔除z值更接近。如果用于所述源图块的所述保守最远z值比所述剔除z值更接近,则z剔除级56可设定所述剔除z值等于用于所述源图块的所述保守最远z值。如果用于所述源图块的所述保守最远z值不比所述剔除z值更接近,则z剔除级56可保持先前剔除z值(即,不更新所述剔除z值)。
[0117] 根据本发明,对于部分覆盖源图块而言,z剔除级56可基于所述源图块的保守最远z值是否比与所述图块位置相关联的所述剔除z值更接近,选择性合并所述源图块和用于所述图块位置的合并源图块以生成所述合并源图块的经更新版本。例如,响应于确定所述源图块的所述保守最远z值比与所述图块位置相关联的所述剔除z值更接近,z剔除级56可合并所述源图块和用于所述图块位置的所述合并源图块,以及响应于确定所述源图块的所述保守最远z值不比与所述图块位置相关联的所述剔除z值更接近,不合并所述源图块和用于所述图块位置的所述合并源图块。
[0118] 以此方式选择性合并源图块可提高用于执行z剔除的剔除z值的质量,这可提高由z剔除级56执行的所述z剔除算法的拒绝效率。提高由z剔除级56执行的所述z剔除算法的拒绝效率可减轻由像素处理级58执行所需的处理工作负荷和/或降低像素处理级58所使用的存储器带宽。以此方式,本发明中描述的用于选择性合并源图块的技术可提高执行分层z剔除的图形处理器的性能和/或存储器带宽使用率。
[0119] 合并源图块可在概念上对应于与渲染目标的特定区域相关联的多个合并样本。所述合并样本中的每个可与相应样本位置相关联,并且在概念上对应于在用于所有部分覆盖源图块的所述相应样本位置处的所述样本的合并版本,所述部分覆盖源图块对应于所述合并源图块。在所述相应样本位置的所述样本的合并版本可对应于在所述相应样本位置的所述样本的复合版本。如果部分覆盖源图块被合并为合并源图块,则所述部分覆盖源图块可对应于所述合并源图块。
[0120] 虽然合并源图块可在概念上对应于多个合并样本,但在一些示例中,用于所述合并源图块的特定样本数据不一定要被存储、跟踪和/或合成。而是在此些示例中,图形管线50可在一些示例中改为存储用于所述合并源图块的保守最远z值和/或覆盖掩模。
[0121] 用于合并源图块的保守最远z值可指与用于所述合并源图块中的所有覆盖样本的最远z值同样远或比所述最远z值更远的值。在一些示例中,用于所述合并源图块的所述保守最远z值可等于用于所述合并源图块中所有覆盖样本的所述最远z值。在此情况下用于所述合并源图块的所述保守最远z值可被称为用于所述合并源图块的所述最远z值。
[0122] 应注意,虽然用于合并源图块的所述保守最远z值可指示与用于所述合并源图块中所有覆盖样本的所述最远z值一样远或比所述最远z值更远的值,但这不一定意味着用于所述合并源图块的任何特定样本z值被实际跟踪和存储。而是,所述保守最远z值可以改为以保证所述值将与用于所述合并源图块的所有覆盖样本的所述最远z值至少一样远的方式来更新。以此方式,在一些示例中,用于所述合并源图块的特定样本z值不被跟踪和存储。
[0123] 用于合并源图块的覆盖掩模可指示所述合并源图块的哪些样本被对应于所述合并源图块的所述基元覆盖。例如,所述覆盖掩模可包含多个位,其中,所述位中的每个对应于与所述覆盖掩模对应的合并源图块中的多个样本中的相应一个。所述位中的每个的所述值可表示所述合并源图块中所述样本中的相应一个是否被对应于所述源图块的所述基元覆盖。例如,用于所述覆盖掩模中特定位的值“1”可表示对应于该位的所述样本被覆盖,而用于所述覆盖掩模中所述特定位的值“0”可表示对应于该位的所述样本未被覆盖。
[0124] 用于所述合并源图块的覆盖样本可指被对应于所述合并源图块的所述基元中的至少一个覆盖的样本。如果基元用于生成被合并为所述合并源图块的部分覆盖源图块,则所述基元可对应于所述合并源图块。
[0125] 如上文所论述,在合并部分覆盖源图块时,z剔除级56可合并所述部分覆盖源图块和用于对应于所述源图块的所述图块位置的合并源图块。如果所述源图块是待处理的第一部分覆盖源图块,则所述合并源图块可为默认合并源图块。在一些示例中,所述合并源图块可由用于所述合并源图块的保守最远z值和用于所述合并源图块的覆盖掩模定义。在此些示例中,所述默认合并源图块可具有设定成被所述图形系统使用的最远z值的默认保守最远z值和表示所述合并源图块中的样本未被覆盖的默认覆盖掩模。在此些示例中,用于所述默认合并源图块的另外数据不一定需要被存储。例如,用于所述合并源图块中的个别样本的色彩分量、α分量和深度分量不一定需要被计算或存储来用于所述默认合并源图块。
[0126] 在一些示例中,为合并部分覆盖源图块和合并源图块,z剔除级56可基于用于所述源图块的覆盖掩模和用于所述合并源图块的当前版本的覆盖掩模生成用于所述合并源图块的所述经更新版本的覆盖掩模。例如,z剔除级56可利用用于所述合并源图块的所述覆盖掩模对用于所述部分覆盖源图块的所述覆盖掩模执行逐位“或”运算,以生成用于所述源图块的所述经更新版本的覆盖掩模。
[0127] 在一些示例中,为合并所述部分覆盖源图块和合并源图块,z剔除级56也可基于所述源图块的保守最远z值和用于所述合并源图块的当前版本的保守最远z值来生成用于所述合并源图块的所述经更新版本的所述保守最远z值。例如,z剔除级56可从包含用于所述部分覆盖源图块的所述保守最远z值和用于所述合并源图块的所述保守最远z值的z值组确定最远z值,以便生成用于所述合并源图块的所述经更新版本的所述保守最远z值。
[0128] 在一些示例中,如果被所述合并源图块覆盖的所有样本也被所述源图块覆盖,并且如果用于所述源图块的所述保守最远z值比用于所述合并源图块的所述保守最远z值更接近,则用于所述合并源图块的所述经更新版本的所述保守最远z值可以以与上文所论述的不同方式来确定。在此些示例中,用于所述合并源图块的所述经更新版本的所述保守最远z值可设定成等于用于所述源图块的所述保守最远z值。在此情况下,用于所述合并源图块的所述经更新版本的所述保守最远z值可以设定成用于所述源图块的所述保守最远z值,因为在所述合并源图块的所述当前版本中的所有样本将被所述源图块中的所述样本遮挡。因为在此情况下,用于所述源图块的所述保守最远z值比用于所述源图块的所述保守最远z值和所述合并源图块的所述当前版本中的最大值更接近所述相机,所以可获得用于所述合并源图块的较好质量保守最远z值,这可产生所述图块位置的较好质量剔除z值。较好质量剔除z值可提高所述z剔除算法的丢弃率。
[0129] 在合并部分覆盖源图块和用于图块位置的合并源图块之后,如果所述合并源图块的所述经更新版本被完全覆盖,则z剔除级56可利用用于所述合并源图块的所述经更新版本的所述保守最远z值来更新所述剔除z值。否则的话,z剔除级56可保持相同的剔除z值(即,不更新所述剔除z值),并在后续合并操作中存储所述合并源图块的所述经更新版本以供将来使用。
[0130] 换句话说,z剔除级56可基于所述合并源图块的经更新版本是否被对应于所述合并源图块的所述经更新版本的一组基元完全覆盖,选择性设定所述剔除z值等于用于所述合并源图块的所述经更新版本的保守最远z值。例如,响应于确定所述合并源图块的所述经更新版本被对应于所述合并源图块的所述经更新版本的一组基元完全覆盖,z剔除级56可设定所述剔除z值等于用于所述合并源图块的所述经更新版本的所述保守最远z值,以及响应于确定所述合并源图块的所述经更新版本未被所述组基元完全覆盖,不设定所述剔除z值等于用于所述合并源图块的所述经更新版本的所述保守最远z值。
[0131] 对应于所述合并源图块的所述经更新版本的所述组基元可包含与被合并到所述合并源图块的所述经更新版本中的所述部分覆盖源图块中的每个对应的所述基元。如果所述部分覆盖的源图块响应于光栅化所述基元而生成,则所述基元可对应于部分覆盖的源图块。
[0132] 合并高速缓存62可存储指示用于一或多个图块位置的合并源图块的数据。在一些示例中,指示所述合并源图块的所述数据可包含用于所述合并源图块的覆盖掩模以及用于所述合并源图块的保守最远z值。在一些示例中,渲染目标中的每个图块位置可与至多一个合并源图块相关联。
[0133] 在一些示例中,合并高速缓存62可对应于如上文关于图2所论述的存储器36。在一些示例中,合并高速缓存62可实施为具有实施本发明中描述的所述映射和覆写技术的控制功能的存储器单元。在其它示例中,合并高速缓存62可实施为硬件高速缓存单元。在此些示例中,所述高速缓存单元的内置式映射和覆写功能中的一些或全部可在一些示例中用于实施本发明中描述的所述映射和覆写技术。
[0134] 在一些示例中,所述合并高速缓存62的数据容量可小于存储用于渲染目标中的所有图块位置的合并源图块数据所需的数据容量。在此些示例中,部分覆盖但是未完全覆盖的合并源图块可在所述合并源图块变成完全覆盖之前被来自另一个图块位置的合并源图块覆写是有可能的。如果所述合并源图块在将来变得完全被覆盖,则这可阻止所述覆写合并源图块被用于将所述剔除z值更新至潜在更有利的值。虽然这具有降低剔除z值的质量的可能性(即,所述剔除z值如何接近所述实际z值),但在一些情况下,通过使用相对较小的存储器实现的好处可比由于数据覆写造成的剔除性能的任何下降更重要。
[0135] 在一些示例中,z剔除级56可在合并高速缓存62中存储多个合并源图块数据记录。所述合并源图块数据记录中的每个可包含与用于渲染目标的多个图块位置中的相应一个的合并源图块相关联的数据。在此些示例中,合并高速缓存62可具有比存储N个合并源图块数据记录必需的数据量更小的数据容量,其中,N是在所述渲染目标中的图块位置的总数。
[0136] 在一些示例中,与包含于用于图块位置的数据记录中的所述合并源图块相关联的所述数据可包含用于与所述图块位置相关联的所述合并源图块的保守最远z值。在其它示例中,包含于用于图块位置的数据记录中的与所述合并源图块相关联的所述数据可包含用于与所述图块位置相关联的所述合并源图块的覆盖掩模。在其它示例中,与包含于用于图块位置的数据记录中的所述合并源图块相关联的所述数据可包含用于与所述图块位置相关联的所述合并源图块的保守最远z值和用于与所述图块位置相关联的所述合并源图块的覆盖掩模两者。
[0137] 合并高速缓存62可包含一或多个易失性或非易失性存储器或存储装置,诸如例如随机存取存储器(RAM)、静态RAM(SRAM)、动态RAM(DRAM)、高速缓存单元等。在一些示例中,存储器36可为芯片上存储器,其位于与图形管线50在其上形成的微芯片相同的微芯片上(例如,与GPU 12相同的微芯片)。
[0138] 在其它示例中,合并高速缓存62可为高速缓存单元(例如,芯片上高速缓存单元)。在此些示例中,合并高速缓存62可不与底层存储器相关联。合并高速缓存62可不与底层存储器相关联,在这个意义上说,合并高速缓存62可服务所有读取和写入请求而无需存取底层存储器。此外,如果合并高速缓存62中没有可供用于存储与合并源图块相关联的输入数据的足够映射存储器空间,则合并高速缓存62可利用所述输入数据覆写与另一个合并源图块相关联的数据。例如,合并高速缓存62可经配置将与第一图块位置相关联的第一数据记录写入至合并高速缓存62中的高速缓存行而无需将所述第一数据记录写入至底层存储器,并利用与第二图块位置相关联的第二数据记录覆写所述第一数据记录而无需将所述第一数据记录写入至底层存储器。
[0139] 在合并高速缓存62被实施为高速缓存单元的示例中,z剔除级56可在一些示例中在合并高速缓存62中存储多个合并源图块数据记录。所述合并源图块数据记录中的每个可包含与用于渲染目标的多个图块位置中的相应一个的合并源图块相关联的数据。在此些示例中,合并高速缓存62可包含多个高速缓存行,并且所述高速缓存行中的每个可经配置以存储所述数据记录中的相应一个。在此些示例中,在合并高速缓存62中的高速缓存行的总数可小于所述渲染目标中的图块位置的总数。
[0140] 合并高速缓存62可充当用于合并源图块数据的主数据存储,而非仅充当用于存储初次存储在另一个底层存储器中的数据的复本的高速缓存的数据存储。高速缓存单元通常经设计存储比此些高速缓存单元为其提供高速缓冲存储服务的所述底层存储器空间更少量的数据。因此,高速缓存单元往往实施多种映射策略(例如,导向映射、组相联、完全相联等)和替代策略(例如,最近最少使用、最不频繁使用、随机等)以确定数据将被存储在所述高速缓存中的什么地方和哪些数据将在所述高速缓存中被覆写。使用高速缓存单元作为用于存储合并源图块数据的主存储装置单元可允许图形系统充分利用这些内置式机理来确定数据被存储在高速缓存单元中的什么地方和哪些数据在高速缓存单元中被覆写,即使所述高速缓存单元并不在所述底层存储器中保持额外复本。这可简化实施用于存储合并源图块数据的存储器单元的所需的面积的设计和/或减小所述面积的量。
[0141] 在一些示例中,渲染目标中的所述图块位置中的每个可对应于合并高速缓存62的地址空间中的多个地址中的相应一个。合并高速缓存62可将地址空间中的地址映射至合并高速缓存62中的存储槽组。合并高速缓存62可具有比用于合并高速缓存62的所述地址空间中的地址更小的存储槽。因此,合并高速缓存62可将多个地址映射至相同存储槽或相同存储槽组。在一些示例中,如果合并高速缓存62是高速缓存单元,则合并高速缓存62可使用将地址映射至存储槽的导向映射方案、集合关联映射方案和完全关联映射方案中的任一个。
[0142] 为了合并部分覆盖源图块和合并源图块,z剔除级56可向合并高速缓存62发出读取请求,以便获得用于具有和所述部分覆盖源图块相同的图块位置的合并源图块的所述合并源图块数据(例如,覆盖掩模和保守最远z值)。Z剔除级56可包含对应于所述部分覆盖源图块的所述图块位置的用于所述读取请求的地址。在一些情况下,所述地址可等于所述部分覆盖源图块的所述图块位置。
[0143] 响应于收到所述读取请求,合并高速缓存62可搜索合并高速缓存62中的所述存储槽以确定在所述存储槽中是否存在与通过利用所述读取请求收到的所述地址所指示的所述图块位置对应的条目(例如,数据记录)。如果发现对应于所述图块位置的条目,则合并高速缓存62可传回包含于所述条目中的数据(例如,覆盖掩模和保守最远z值)。如果未发现条目,则合并高速缓存62可传回未发现条目的指示。
[0144] 如果在合并高速缓存62中发现用于对应于所述部分覆盖源图块的所述图块位置的条目,则z剔除级56可合并所述部分覆盖源图块和所述合并源图块以生成所述部分覆盖源图块的经更新版本。例如,z剔除级56可使用本发明中描述的技术生成用于所述合并源图块的所述经更新版本的覆盖掩模和保守最远z值。
[0145] 如果所述合并源图块的所述经更新版本被完全覆盖,则z剔除级56可利用用于所述合并源图块的所述保守最远z值来更新所述剔除z值,并致使合并高速缓存62使对应于所述图块位置的所述合并源图块数据无效。如果所述合并源图块的所述经更新版本未被完全覆盖,则z剔除级56可利用对应于所述图块位置的地址向合并高速缓存62发出写入请求。有待于利用所述写入请求而被写入的所述数据可包含用于所述合并源图块的所述经更新版本的所述覆盖掩模和所述保守最远z值。响应于收到所述写入请求,合并高速缓存62可将所述地址映射至存储槽,并向所述存储槽写入所述数据。在一些示例中,合并高速缓存62可利用用于所述合并源图块的所述经更新版本的所述数据覆写用于所述合并源图块的先前版本的存储在所述存储槽中的所述数据。
[0146] 如果在处理用于对应于所述部分覆盖源图块的所述图块位置的所述读取请求时未在合并高速缓存62中未发现条目,则z剔除级56可生成用于所述合并源图块的所述经更新版本的覆盖掩模和保守最远z值,使得用于所述合并源图块的所述经更新版本的所述覆盖掩模和所述保守最远z值分别等于用于所述部分覆盖源图块的所述覆盖掩模和所述保守最远z值。以此方式生成用于所述合并源图块的所述经更新版本的所述覆盖掩模和所述保守最远z值可对应于合并所述部分覆盖源图块和默认合并源图块,其中,所述默认合并源图块包含表示无样本被覆盖的默认最远保守最远z值和默认覆盖掩模。
[0147] 因为未在合并高速缓存62中发现条目,所以z剔除级56可致使合并高速缓存62在合并高速缓存62中分配存储所述合并源图块数据的新存储槽。例如,z剔除级56可利用对应于所述图块位置的地址向合并高速缓存62发出写入请求,这可致使合并高速缓存62在合并高速缓存62中分配存储所述合并源图块数据的存储槽。有待于利用所述写入请求而被写入的所述数据可包含用于所述合并源图块的所述经更新版本的所述覆盖掩模和所述保守最远z值。
[0148] 响应于收到所述写入请求,合并高速缓存62可基于利用所述写入请求收到的所述地址和一或多个映射规则来确定用于存储所述合并源图块数据的存储槽。如果映射到所收到的地址的所有存储槽被填充,则合并高速缓存62可基于通过合并高速缓存62实施的替代策略来选择要覆写的存储槽。示例替代策略包含最近最少使用(LRU)替代策略、最不频繁使用(LFU)替代策略和随机替代策略。
[0149] 如果合并高速缓存62是高速缓存单元,则合并高速缓存62可包含多个高速缓存行。在一些示例中,所述高速缓存行中的每个可充当用于与相应合并源图块相关联的合并源图块数据的存储槽。例如,所述高速缓存行中的每个可细分为覆盖掩模字段和保守最远z值字段。
[0150] 根据所述映射方案,所述高速缓存行中的每个还可包含标记字段。所述标记字段可含有与所述合并源图块相关联的所述地址的一或多个位。在其中所述合并源图块的所述地址等于所述图块位置的示例中,所述标记可在一些示例中含有指示所述图块位置的一或多个位。在一些示例中,用于图块的所述图块位置可对应于用于所述图块的屏座标(例如(x,y)座标)。
[0151] 在其中合并高速缓存62是高速缓存单元并且所述高速缓存行包含标记字段的示例中,为了在所述高速缓存单元中搜索特定合并源图块,合并高速缓存62可根据所述映射规则将利用所述读取或写入请求收到的所述地址映射至一或多个高速缓存行。则,合并高速缓存62可比较所述地址位中的一些或全部和包含于用于高速缓存行的所述标记字段中的所述位,以确定用于所述高速缓存行的所述标记字段是否匹配所述地址字段。如果用于所述高速缓存行的所述标记字段匹配所述地址字段,则合并高速缓存62可检索用于读取请求的所述数据或覆写用于写入请求的所述数据。否则的话,如果用于所述高速缓存行的所述标记字段并不匹配所述地址字段,则合并高速缓存62可搜索用于所希望的条目的其它高速缓存行。如果未发现用于读取请求的匹配高速缓存行,则合并高速缓存62可传回未在所述高速缓存中发现用于特定图块读取请求的合并源图块数据的指示。如果未发现用于写入请求的匹配高速缓存行,则合并高速缓存62可分配用于所述写入数据的新高速缓存行,或如果高速缓存行不可用,则合并高速缓存62可覆写与另一个合并源图块相关联的另一个高速缓存行。
[0152] 如果合并高速缓存62是高速缓存单元,则通过致使合并高速缓存62使对应于所述合并源图块数据的所述高速缓存行无效,z剔除级56可致使合并高速缓存62使所述合并源图块数据无效。使所述高速缓存行无效可致使合并高速缓存62不响应于读取请求传回存储在所述无效的高速缓存行中的数据,即使存储在所述高速缓存行中的所述标记匹配所述地址。
[0153] 像素处理级58可从z剔除级56接收所述剔除源图块并对所述剔除源图块执行像素处理以生成目的地图块。像素处理可包含例如像素着色操作、掺合操作、纹理映射操作、可编程像素着色器操作等。在一些示例中,像素处理级58中的一些或全部可在一起处理在源图块中的所述样本。在其它示例中,像素处理级58中的一些或全部可彼此独立处理源图块中的所述样本中的每个。在一些示例中,像素处理级58可包含将源图块合并或合成为处于相同位置的目的地图块(即,具有与所述源图块相同的位置的目的地图块)的输出合并级。在一些情况下,由像素处理级58生成的所述目的地图块可被放置在渲染目标中(例如,帧缓冲器或分格缓冲器)中。
[0154] 图4为根据本发明的说明用于执行分层z剔除的示例技术的流程图。在一些示例中,如图4所示的技术可在图1和2的GPU 12中和/或在图3的z剔除级56中实施。出于描述之目的,所述技术将描述为通过GPU 12来执行,虽然应理解,所述技术可通过其它部件或装置或在其它类型的图形处理系统中执行。
[0155] 如图4所示的技术采用增大z坐标系,其中,所述z值随着离开所述相机的距离增大而增大。因此,在如图4所示的大于或小于比较的情况下,应理解在减小z坐标系中,其中,所述z值随着离开所述相机的距离增大而减小,此些比较应被颠倒。也就是说,大于或小于比较应被互换。
[0156] GPU 12可响应于从图形管线中的光栅化器或另一个处理级收到源图块而开始所述源图块技术的过程。在一些示例中,光栅化器级54可生成所述源图块,以及z剔除级56可从光栅化器级54接收所述源图块。在其它示例中,光栅化器级54也可生成并且z剔除级56可从光栅化器级54接收以下中的一或多个:用于所述源图块的覆盖掩模(即,Src_Mask)、指示所述源图块是否被完全覆盖(即,彻底地覆盖)的信息、用于所述源图块的保守最接近z值(即,Z_Src_Near)和用于所述源图块的保守最远z值(即,Z_Src_Far)。
[0157] 响应于收到要处理的源图块,GPU 12可获得对应于所述源图块的图块位置的用于所述图块位置的剔除z值(即,Culling_Z)。在一些示例中,GPU 12可从存储剔除z值的存储器或缓冲器(例如LRZ缓冲器60)获得所述剔除z值。所述剔除z值可指示对应于所述源图块的所述图块位置的用于目的地图块的所有样本的保守最远z值。
[0158] GPU 12确定用于所述源图块的所述保守最接近z值是否大于所述剔除z值(100)(即,比所述剔除z值更远)。响应于确定用于所述源图块的所述保守最接近z值大于所述剔除z值(即,比所述剔除z值更远),GPU 12丢弃所述源图块(102)并且结束用于所述源图块的处理。丢弃所述源图块可包含不将所述源图块传送到图形管线的一或多个后续级(例如,图形管线50的像素处理级58)上。在GPU 12丢弃所述源图块时,因为在所述源图块中的所有z值比已经在使用的所述剔除z值更远,所以出于更新所述剔除z值之目的,GPU 12并不进一步分析所述源图块。
[0159] 返回到决策块100,响应于确定用于所述源图块的所述保守最接近z值不大于所述剔除z值(即,不比所述剔除z值更远),GPU 12并不丢弃所述源图块(104)。不丢弃所述源图块可包含将所述源图块传送到图形管线的一或多个后续级(例如,图形管线50的像素处理级58)上以供进一步处理。在GPU 12并不丢弃所述源图块时,GPU 12对所述源图块执行进一步分析,以基于所述源图块来确定所述剔除z值是否应被更新和/或以确定是否合并所述源图块和用于所述图块位置的合并源图块。
[0160] 更具体地说,如果所述源图块并未丢弃,则GPU 12确定用于所述源图块的所述保守最远z值是否小于所述剔除z值(即,比所述剔除z值更接近)(106)。响应于确定用于所述源图块的所述保守最远z值并不小于所述剔除z值(即,不比所述剔除z值更接近),GPU 12并不合并所述源图块和用于所述图块位置的所述合并源图块(108)。GPU 12也并不更新所述剔除z值。而是因为用于所述源图块的所述保守最远z值比已经在使用的所述剔除z值更远,改为GPU 12结束所述源图块的处理以确定是否更新所述剔除z值。然而,所述图形管线的后续级(例如,图形管线50的像素处理级58)可对所述源图块执行另外的像素处理。
[0161] 返回到决策块106,响应于确定用于所述源图块的所述保守最远z值小于所述剔除z值(即,比所述剔除z值更接近),GPU 12确定所述源图块是否被完全覆盖(110)。在源图块的所有样本被对应于所述源图块的基元覆盖时,所述源图块可被完全覆盖。如果基元的区域包含所述样本位置,则所述样本可被所述基元覆盖。如果所述源图块响应于光栅化基元而生成,则所述基元可对应于所述源图块。
[0162] 响应于确定所述源图块被完全覆盖,GPU 12并不合并所述源图块(112)。而是GPU 12基于所述完全覆盖源图块的所述保守最远z值来更新所述剔除z值(114)。例如,GPU 12可设定所述剔除z值等于所述完全覆盖源图块的所述保守最远z值。GPU 12使与所述源图块的所述图块位置相关联的合并高速缓存行(如果存在的话)无效(116)。用于分层z剔除目的的所述源图块的所述处理结束。然而,所述图形管线的后续级(例如,图形管线50的像素处理级58)可对所述源图块执行另外的像素处理。
[0163] 返回到决策块110,响应于确定所述源图块并不被完全覆盖(即,所述源图块被部分覆盖),GPU 12合并所述源图块和用于所述图块位置的合并源图块以生成所述合并源图块的经更新版本(118)。关于所述合并操作的进一步细节在下文中关于图5讨论。
[0164] 在合并所述源图块之后,GPU 12确定所述合并源图块的所述经更新版本是否被完全覆盖(120)。在所述合并源图块的所述经更新版本的所有样本被对应于所述合并源图块的所述经更新版本的一组基元覆盖时,所述合并源图块的所述经更新版本可被完全覆盖。对应于所述合并源图块的所述经更新版本的所述组基元可包含对应于被合并到所述合并源图块的所述经更新版本中的所述部分覆盖源图块中的每个的所述基元。如果部分覆盖的源图块响应于光栅化基元而生成,则所述基元可对应于所述部分覆盖的源图块。
[0165] 响应于确定所述合并源图块的所述经更新版本被完全覆盖,GPU 12基于所述完全覆盖合并源图块的所述保守最远z值来更新所述剔除z值(122)。例如,GPU 12可设定所述剔除z值等于所述完全覆盖合并源图块的所述保守最远z值。则GPU 12使与所述源图块的所述图块位置相关联的所述合并高速缓存行无效(124)。用于分层z剔除目的的所述源图块的所述处理结束。然而,所述图形管线的后续级(例如,图形管线50的像素处理级58)可对所述源图块执行另外的像素处理。
[0166] 响应于确定所述合并源图块的所述经更新版本未被完全覆盖,GPU 12并不更新所述剔除z值。而是GPU 12存储供在处理后续源图块时使用的所述合并源图块数据。用于分层z剔除目的的所述源图块的所述处理结束。然而,所述图形管线的后续级(例如,图形管线50的像素处理级58)可对所述源图块执行另外的像素处理。
[0167] 图5为根据本发明的说明在执行分层z剔除时,用于合并部分覆盖源图块的示例技术的流程图。在一些示例中,如图5所示的技术可在图1和2的GPU 12中和/或在图3的z剔除级56中实施。出于描述之目的,所述技术将描述为通过GPU 12来执行,虽然应理解,所述技术可通过其它部件或装置或在其它类型的图形处理系统中执行。
[0168] 在一些示例中,如图5所示的技术可用于实施图4中的过程块118。类似于图4,如图5所示的技术采用增大z坐标系,其中,所述z值随着离开所述相机的距离增大而增大。因此,在如图5所示的大于或小于比较的情况下,应理解在减小z坐标系中,其中,所述z值随着离开所述相机的距离增大而减小,此些比较应被颠倒。也就是说,大于或小于比较应被互换。
类似地,在减小z坐标系中,最大值函数应被替换为最小值函数。
[0169] 响应于收到部分覆盖的源图块,GPU 12可开始如图5所示的所述合并源图块技术。在一些示例中,响应于确定源未被完全覆盖并响应于确定用于所述源图块的所述保守最远z值小于如图4中的决策块106和110所示的所述剔除z值(即,比所述剔除z值更接近),GPU 
12可开始如图5所示的所述合并源图块技术。
[0170] GPU 12在高速缓存单元(例如,合并高速缓存62)中搜索具有对应于所述部分覆盖源图块的图块位置的合并源图块(140)。GPU 12确定在所述高速缓存单元中是否发现用于所述图块位置的合并源图块(142)。换句话说,GPU 12确定所述高速缓存中是否存在用于所述图块位置的命中。
[0171] 响应于确定未发现所述合并源图块,GPU 12在所述高速缓存单元中分配用于与对应于所述部分覆盖源图块的所述图块位置相关联的合并源图块的新高速缓存行(144)。在一些示例中,所述高速缓存单元的所述映射方案可将所述图块位置(例如,地址)中的每个映射至一组一或多个高速缓存行。在一些示例中,如果没有所述图块位置可映射的高速缓存行可用,则所述高速缓存单元可利用与当前处理的图块位置相关联的所述合并源图块数据覆写存储在映射到所述图块位置的所述组高速缓存行中的用于另一图块位置的所述合并源图块数据。
[0172] GPU 12设定用于所述合并源图块的所述保守最远z值(即,Z_Merge)等于用于所述源图块的所述保守最远z值(即,Z_Src_Far)(146)。GPU 12设定用于所述合并源图块的所述覆盖掩模(即,Merge_Mask)等于用于所述部分覆盖源图块的所述覆盖掩模(即,Src_Mask)。GPU 12设定合并完全变量为假以表示所述合并源图块未被完全覆盖、输出所述合并完全变量(150),并结束所述合并过程。所述合并完全变量可被图4中的技术(例如,决策块120)用于确定所述合并源图块的所述经更新版本是否被完全覆盖。
[0173] 返回到决策块142,响应于确定发现所述合并源图块,GPU 12从所述高速缓存单元获得所述合并源图块数据。所述合并源图块数据可包含用于所述合并源图块的保守最远z值(即,Z_Merge)和用于所述合并源图块的覆盖掩模(即,Merge_Mask)。
[0174] GPU 12确定被所述合并源图块覆盖的所有样本位置是否也被所述部分覆盖源图块覆盖(152)。在一些示例中,为执行此操作,GPU 12可对用于所述合并源图块的所述覆盖掩模和用于所述部分覆盖源图块的所述覆盖掩模执行逐位“与”运算,并确定所述逐位“与”运算的结果是否等于用于所述合并源图块的所述覆盖掩模。如果所述逐位“与”运算的结果等于用于所述合并源图块的所述覆盖掩模,则被所述合并源图块覆盖的所有样本位置也被所述部分覆盖源图块覆盖。
[0175] 响应于确定被所述合并源图块覆盖的所有样本位置也被所述部分覆盖源图块覆盖,GPU 12确定用于所述源图块的所述保守最远z值(即,Z_Src_Far)是否小于用于所述合并源图块的所述保守最远z值(即,Z_Merge)(即,比用于所述合并源图块的所述保守最远z值更接近)(154)。响应于确定用于所述源图块的所述保守最远z值小于用于所述合并源图块的所述保守最远z值(即,比用于所述合并源图块的所述保守最远z值更接近),GPU 12设定用于所述合并源图块的所述经更新版本的所述保守最远z值(即,Z_Merge)等于用于所述源图块的所述保守最远z值(即,Z_Src_Far)(156)。GPU 12也设定用于所述合并源图块的所述经更新版本的所述覆盖掩模等于用于所述源图块的所述覆盖掩模(即,Src_Mask)和用于所述合并源图块的先前版本的所述覆盖掩模(即,Merge_Mask_Prev)的逐位“或”运算的结果(160)。所述合并源图块的所述先前版本可对应于在所述合并源图块的所述经更新版本之前的所述合并源图块的所述版本,并且在一些示例中,可以替代地被称为所述合并源图块的当前版本。
[0176] 在此情况下,用于所述合并源图块的所述经更新版本的所述保守最远z值可以设定成用于所述源图块的所述保守最远z值,因为在所述合并源图块中的所述先前版本的所有样本将被所述源图块中的所述样本遮挡。因为在此情况下,用于所述源图块的所述保守最远z值比用于所述源图块的所述保守最远z值和所述合并源图块的所述当前版本中的最大值更接近所述相机,可获得用于所述合并源图块的较好质量保守最远z值,这可产生用于所述图块位置的较好质量剔除z值。较好质量剔除z值可提高所述z剔除算法的丢弃率。
[0177] 返回到决策块152和154,响应于确定被所述合并源图块覆盖的所有样本位置也未被所述部分覆盖源图块覆盖,或响应于确定用于所述源图块的所述保守最远z值并不小于用于所述合并源图块的所述保守最远z值(即,不比用于所述合并源图块的所述保守最远z值更接近),GPU 12设定用于所述合并源图块的所述经更新版本的所述保守最远z值(即,Z_Merge)等于用于所述源图块的所述保守最远z值(即,Z_Src_Far)和用于所述合并源图块的所述先前版本的所述保守最远z值(即,Merge_Mask_Prev)中的最大值(即,最远值)(158)。GPU 12也设定用于所述合并源图块的所述经更新版本的所述覆盖掩模等于用于所述源图块的所述覆盖掩模(即,Src_Mask)和用于所述合并源图块的所述先前版本的所述覆盖掩模(即,Merge_Mask_Prev)的逐位“或”运算的结果(160)。
[0178] GPU 12确定所述合并源图块是否被完全覆盖(162)。在所述合并源图块中的所有样本被对应于所述合并源图块的所述组基元覆盖时,所述合并源图块可被完全覆盖。对应于所述合并源图块的所述组基元可包含对应于先前被合并到所述合并源图块中的所述部分覆盖源图块中的每个的所述基元。
[0179] 响应于确定所述合并源图块被完全覆盖,GPU 12设定所述合并完全传回变量为真,以表示所述合并源图块被完全覆盖(164)。所述合并完全变量可被图4中的技术(例如,决策块120)用于确定所述合并源图块的所述经更新版本是否被完全覆盖。GPU 12也输出用于所述合并源图块的所述经更新版本的所述保守最远z值(即,Z_Merge)(166)。用于所述合并源图块的所述经更新版本的所述保守最远z值可被图4中的技术(例如过程块114和122)用于更新所述剔除z值。GPU 12结束所述合并过程。
[0180] 返回到决策块162,响应于确定所述合并源图块未被完全覆盖,GPU 12设定所述合并完全变量为假,以表示所述合并源图块未被完全覆盖,输出所述合并完全变量(168)并结束所述合并过程。此外,所述合并完全变量可被图4中的技术(例如,决策块120)用于确定所述合并源图块的所述经更新版本是否被完全覆盖。
[0181] 需要指出,虽然图5中的决策块152和154被示为独立的决策,但在其它示例中,在决策块152和154中列出的所述标准可在一起评估。在此些示例中,如果满足两个标准,则处理可前进到过程块156,以及如果不满足两个标准,则处理可前进到过程块158。
[0182] 如图5所述的部分覆盖源图块合并技术被描述为使用无需底层存储器(出于示例性目的)运行的高速缓存单元。应理解,除了或代替无需底层存储器运行的高速缓存单元,如图5所述的技术还可使用其它类型的存储器装置、存储器单元和/或存储器子系统。
[0183] 如图4和5所示,基于所述源图块的保守最接近z值是否比与所述图块位置相关联的剔除z值更远,GPU 12从图形管线50选择性丢弃与所述图块位置相关联的样本的源图块(100、102、104)。例如,响应于确定所述源图块的所述保守最接近z值比与所述图块位置相关联的所述剔除z值更远,GPU 12丢弃所述源图块(100-是、102),以及响应于确定所述源图块的所述保守最接近z值并不比与所述图块位置相关联的所述剔除z值更远,GPU 12不丢弃所述源图块(100-否104)。
[0184] 如图4和5所进一步示出,GPU 12基于源图块是否被对应于所述源图块的基元完全覆盖以及基于所述源图块的保守最远z值是否小于与图块位置相关联的所述剔除z值,选择性合并与所述图块位置相关联的样本的所述源图块和用于所述图块位置的合并源图块,以生成所述合并源图块的经更新版本(106、108、110、112、118)。例如,响应于确定所述源图块未被对应于所述源图块的所述基元完全覆盖以及所述源图块的所述保守最远z值小于与所述图块位置相关联的所述剔除z值,GPU 12合并所述源图块和用于所述图块位置的所述合并源图块(106-是;110-否;118),以及响应于确定所述源图块被对应于所述源图块的所述基元完全覆盖或所述源图块的所述保守最远z值不小于与所述图块位置相关联的所述剔除z值,GPU 12不合并所述源图块和用于所述图块位置的所述合并源图块(106-否,108;110-是;112)。
[0185] 如图4和5所进一步示出,GPU 12基于所述合并源图块的所述经更新版本是否被对应于所述合并源图块的所述经更新版本的一组基元完全覆盖,选择性设定所述剔除z值等于用于所述合并源图块的所述经更新版本的保守最远z值(120、122)。例如,响应于确定所述合并源图块的所述经更新版本被所述组基元完全覆盖,GPU 12设定所述剔除z值等于用于所述合并源图块的所述经更新版本的所述保守最远z值(120-是、122),以及响应于确定所述合并源图块的所述经更新版本未被所述组基元完全覆盖,GPU 12不设定所述剔除z值等于用于所述合并源图块的所述经更新版本的所述保守最远z值(120-否)。
[0186] 如图4和5所进一步示出,GPU 12基于所述源图块的所述保守最远z值以及用于所述合并源图块的先前版本的保守最远z值生成用于所述合并源图块的经更新版本的保守最远z值(158)。例如,GPU 12可设定用于所述合并源图块的所述经更新版本的所述保守最远z值等于所述源图块的所述保守最远z值和用于所述合并源图块的先前版本的所述保守最远z值之中的最大值(即,最远的)。
[0187] 如图4和5所进一步示出,GPU 12基于用于所述源图块的覆盖掩模和用于所述合并源图块的先前版本的覆盖掩模生成用于所述合并源图块的所述经更新版本的覆盖掩模(160)。例如,GPU 12可利用用于所述合并源图块的所述覆盖掩模对用于所述部分覆盖源图块的所述覆盖掩模执行逐位“或”运算,以生成用于所述合并源图块的所述经更新版本的覆盖掩模。
[0188] 如图4和5所进一步示出,GPU 12基于所述源图块是否被对应于所述源图块的所述基元完全覆盖,选择性使存储用于所述合并源图块的数据记录的高速缓存单元中的高速缓存行无效(110、116、120、124)。例如,响应于确定源图块被对应于所述源图块的所述基元完全覆盖,GPU 12使高速缓存行无效(110-是、116)。作为另一示例,基于所述合并源图块的所述经更新版本是否被对应于所述合并源图块的所述经更新版本的所述组基元完全覆盖,响应于确定所述源图块未被对应于所述源图块的所述基元完全覆盖,GPU 12选择性使所述高速缓存行无效(120、124)。例如,响应于确定所述合并源图块的所述经更新版本被所述组基元完全覆盖,GPU 12使所述高速缓存行无效(120-是、124),以及响应于确定所述合并源图块的所述经更新版本未被所述组基元完全覆盖,GPU 12并不使所述高速缓存行无效(120-否)。
[0189] 图6为根据本发明的说明待渲染的示例基元组和与示例基元组的渲染相关联的对应合并高速缓存状态的原理图。如图6所示,所述渲染目标包含四个图块位置(A、B、C、D)以及三个三角形基元(1、2和3)。在此示例中所述基元以数字顺序被渲染。所述图块位置中的每个可对应于目的地图块、一或多个源图块以及合并源图块。
[0190] 基元1完全覆盖源图块A并且部分覆盖源图块B、C和D。未在所述合并高速缓存中生成用于所述完全覆盖源图块A的高速缓存行。而是,用于源图块A的所述保守最大z值可用于直接更新用于图块位置A的所述剔除z值(即,用于目的地图块A的所述保守最大z值)而无需任何合并。在所述合并高速缓存中生成用于部分覆盖源图块B、C和D中的每个的高速缓存行。如图6所示,在渲染基元1之后,所述合并高速缓存包含用于合并源图块B、C和D的高速缓存行。
[0191] 所述高速缓存行中的每个可存储高速缓存标记、所累积的覆盖掩模和用于相应合并源图块的所累积的保守最大z值。因为基元1是待渲染的第一基元,所以用于所述高速缓存行中的每个的所累积覆盖掩模被设定成等于所述对应源图块的所述覆盖掩模,以及用于所述高速缓存行中的每个的所累积保守最大z值被设定成等于所述对应源图块的所述保守最大z值。例如,用于高速缓存行B的所累积源掩模被设定成等于用于源图块B的在渲染基元1时所生成的所述覆盖掩模(即,表示源图块B中的哪些样本被基元1覆盖的覆盖掩模)。类似地,用于高速缓存行B的所述保守最大z值被设定成等于用于源图块B的在渲染基元1时所生成的所述保守最大z值(即,大于或等于用于包含在被基元1覆盖的源图块B中的样本的所述保守最大z值的值)。
[0192] 在基元1完成渲染之后,基元2被渲染。基元2部分覆盖源图块B、C和D。部分覆盖源图块B、C和D中的每个与存储在所述合并高速缓存中的对应合并源图块合并。例如,用于基元2的部分覆盖源图块C与存储在所述合并高速缓存的高速缓存行C中的所述合并源图块合并。所得所累积覆盖掩模表示图块C中的哪些样本被基元1和/或基元2覆盖。用于合并源图块C的所得所累积保守最大z值表示包含于被基元1和/或基元2覆盖的合并源图块C中的所述样本的所述保守最大z值。
[0193] 在渲染基元2之后,合并源图块B变成完全覆盖的图块。因此,高速缓存行B是无效的,这有效地从所述合并高速缓存去除合并源图块B。用于合并源图块B的所述保守最大z值可用于更新用于图块位置B的所述剔除z值(即,用于目的地图块B的所述保守最大z值)。
[0194] 在渲染基元2之后,合并源图块C和合并源图块D保持部分覆盖。因此,高速缓存行C和D保持在所述合并高速缓存中。
[0195] 在渲染基元3之后,合并源图块C变成完全覆盖的合并源图块以及合并源图块D保持为部分覆盖的图块。因此,高速缓存行C是无效的,以及高速缓存行D保持在所述合并高速缓存中。因为合并源图块C现在是完全被覆盖,因此用于合并源图块C的所述保守最大z值可用于更新用于图块位置C的所述剔除z值(即,用于目的地图块C的所述保守最大z值)。
[0196] 在一些示例中,在执行分层z测试时,本发明的技术可使用用于合并部分覆盖图块的高速缓存。在图形硬件中,分层z操作(或者,低分辨率z操作)可被执行以减小样本Z操作工作负荷。在图块具有多个样本时,每图块的z值(即,hierZ)可存储于分层z缓冲器中的存储器中。在处理新图块时,可从存储器读取一个目标z值(即,hierZ)以执行所述分层z测试。如果所述分层z测试是“合格”或“不合格”,则每样本z值可不一定需要从存储器读取以用于每样本z测试。此解决方案可降低内存占用率并提高性能。例如,在处理新图块时,先前已处理的所有样本的最大z值可用作该图块的分层z值。如果所述新图块的所述最小z值大于所述分层z值,则所述新图块可在所述旧图块后面。在此情况下,所有样本的所述z测试将不合格并且每样本z测试并不需要被执行。然而,在一些示例中,仅在所述图块被基元完全覆盖时,一些系统可更新分层z值,因为所述分层z值记录在该图块中的所有样本的所述最大z值。这可能降低分层z测试的效率,因为在对象由许多较小三角形组成时,大多数图块不被完全覆盖。
[0197] 一种解决方案是在存储器中的分层z缓冲器中存储多个z值和每样本掩模,而不是作为所述分层z值的单一最大z值。此解决方案可能能够更新用于部分覆盖图块的分层z值以提高分层z测试效率。然而,此解决方案可能消耗大量的存储器带宽。
[0198] 在一些示例中,本发明的技术使用芯片上高速缓存来合并部分覆盖的图块。在此些示例中,每图块的一个分层z值可储存在存储器中。如果图块被完全覆盖并且图块的新最大z值(即,tileZ)小于所述分层z值(即,hierZ),则所述分层z值可被更新以等于用于所述输入图块的最大z值(即,tileZ)。如果图块被部分覆盖,则用于所述输入图块的每样本掩模tileZ和图块座标可以被发送给高速缓存。所述图块的所述屏座标可用作高速缓存标记,以及所述每图块分层z值(即,hierZ)和样本掩模可以被存储在所述高速缓存行中。
[0199] 在发生高速缓存命中时,所述旧样本掩模可与所述新样本掩模合并,以及用于所述图块的所述分层z值可设定成等于所述当前分层z值和用于所述输入图块的所述最大z值中的最大值(即,hierZ=max(hierZ,tileZ))。在合并之后,如果所述图块被完全覆盖,则在存储器中的所述分层z值(即,hierZ)可被更新,以及所述高速缓存行可被复位以使所述状态无效。在发生高速缓存未命中时,一个高速缓存行可被分派用于所述新tileZ和样本掩模。这种方案可在分层z缓冲器中存储多个z值和样本掩模时实现类似的分层z拒绝率,但是它可使用更小的存储器带宽。
[0200] 在一些示例中,低分辨率z缓冲器(即,LRZ缓冲器)存储每图块LRZ值。在此些示例中,所述每图块LRZ值可为16位。在此些示例中,对于完全覆盖图块而言,如果用于所述输入源图块的所述最远z值(即,srcZFar)小于用于所述目的地图块的所述最远z值(即,dstZFar)(即,srcZFar
[0201] 在其它示例中,如果使用基于图块的渲染,则所述合并操作可在LRZ构造级期间出现在分格传递中。在此些示例中,在所述渲染传递迭代期间,可能不一定需要出现所述合并操作。
[0202] 本发明中所描述的技术可至少部分在硬件、软件、固件或它们的任何组合中实施。例如,所描述技术的各种方面可在一或多个处理器内实施,包含一或多个微处理器、数字信号处理器(DSP)、专用集成电路(ASIC)、现场可编程门阵列(FPGA),或任何其它等效集成或分立逻辑电路,以及此些组件的任何组合。术语“处理器”或“处理电路”可大体上指前述逻辑电路中的任一者(单独或组合其它逻辑电路)或诸如执行处理的分立硬件的任何其它等效电路。
[0203] 此些硬件、软件和固件可在相同装置内或单独装置内实施以支持本发明中所描述的各种操作和功能。另外,所描述单元、模块或组件中的任一者可一起实施或单独作为分立但可互操作逻辑装置而实施。将不同特征描述为模块或单元意在强调不同功能方面并且未必暗示此些模块或单元必须由单独硬件或软件组件实现。实际上,与一或多个模块或单元相关联的功能性可由单独硬件、固件和/或软件组件执行,或集成到共同或单独硬件或软件组件内。
[0204] 本发明中所描述的技术也可存储、实施或编码于计算机可读媒体(诸如,存储指令的计算机可读存储媒体)中。嵌入或编码于计算机可读媒体中的指令可致使一或多个处理器执行本文中所描述的技术(例如,当由一或多个处理器执行指令时)。在一些示例中,计算机可读媒体可为非暂时性计算机可读存储媒体。计算机可读存储媒体可包含随机存取存储器(RAM)、只读存储器(ROM)、可编程只读存储器(PROM)、可擦除可编程只读存储器(EPROM)、电子可擦除可编程只读存储器(EEPROM)、快闪存储器、硬盘、CD-ROM、软盘、卡盒、磁性媒体、光学媒体或其它有形计算机可读存储媒体。
[0205] 计算机可读媒体可包含计算机可读存储媒体,其对应于例如上文所列的那些的有形存储媒体。计算机可读媒体还可包括通信媒体,其包含促进计算机程序从一个地点到另一地点的传送(例如,根据通信协议)的任何媒体。以此方式,短语“计算机可读媒体”大体上可对应于(1)非暂时性有形计算机可读存储媒体,和(2)诸如暂时性信号或载波的非有形计算机可读通信媒体。
[0206] 已描述各种方面和示例。然而,可在不脱离所附权利要求书的范围的情况下对本发明的结构或技术作出修改。