CN110349074B - 边缘和深度处理硬件 - Google Patents
边缘和深度处理硬件 Download PDFInfo
- Publication number
- CN110349074B CN110349074B CN201910267068.9A CN201910267068A CN110349074B CN 110349074 B CN110349074 B CN 110349074B CN 201910267068 A CN201910267068 A CN 201910267068A CN 110349074 B CN110349074 B CN 110349074B
- Authority
- CN
- China
- Prior art keywords
- hardware
- output
- sub
- edge
- tile
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T1/00—General purpose image data processing
- G06T1/20—Processor architectures; Processor configuration, e.g. pipelining
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T15/00—3D [Three Dimensional] image rendering
- G06T15/005—General purpose rendering architectures
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T11/00—2D [Two Dimensional] image generation
- G06T11/40—Filling a planar surface by adding surface attributes, e.g. colour or texture
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T17/00—Three dimensional [3D] modelling, e.g. data description of 3D objects
- G06T17/20—Finite element generation, e.g. wire-frame surface description, tesselation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T2200/00—Indexing scheme for image data processing or generation, in general
- G06T2200/12—Indexing scheme for image data processing or generation, in general involving antialiasing
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T2210/00—Indexing scheme for image generation or computer graphics
- G06T2210/36—Level of detail
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Computer Graphics (AREA)
- Geometry (AREA)
- Software Systems (AREA)
- Image Generation (AREA)
- Image Processing (AREA)
Abstract
本申请涉及边缘和深度处理硬件。图形处理流水线包括被布置成执行边缘测试或深度计算的硬件布置。每个硬件布置包括微图块分量硬件元件、多个像素分量硬件元件、一个或更多个子采样分量硬件元件以及最终加法和比较单元。微图块分量硬件元件使用渲染空间中图块内微图块的坐标以及乘积之和来计算第一输出。每个像素分量硬件元件使用相对于微图块的原点定义的不同像素的坐标以及乘积之和来计算不同的第二输出。子采样分量硬件元件使用相对于像素的原点定义的子采样位置的坐标以及乘积之来计算第三输出。加法器对第一输出、第二输出和第三输出的不同组合进行求和,以生成相对于图块的原点定义的不同子采样位置的输出结果。
Description
技术领域
本申请涉及,但不限于,边缘和深度处理硬件。
背景
曲面细分(tessellation)是计算机图形学中使用的技术,它将一组表示场景中对象的曲面(surfaces)分成许多更小且更简单的片(称为图元),这种片通常是三角形,其更适合渲染。得到的经曲面细分的曲面通常是原始曲面的近似,但是可以通过增加生成的图元的数量来提高这种近似的精度,这反过来通常导致图元更小。曲面细分/细分(sub-division)的数量通常由细节层次(LOD)确定。因此,在需要更高的细节层次的地方(例如因为对象更靠近观察者和/或对象具有更复杂的形状),通常使用增加数量的图元。然而,使用更大数量的三角形增加了渲染场景所需的处理工作量,因此增加了执行处理的硬件的大小。此外,随着平均三角形大小的减小,混叠(aliasing)(例如,当成角度的线呈现锯齿状时)更频繁地发生,因此图形处理系统采用抗混叠技术,该技术通常涉及每像素进行几次采样并随后过滤数据。
由于生成的图元数量的增加,因此图形处理系统处理图元的能力变得更为重要。提高图形处理系统的效率的一种已知方式是以基于图块(tile)的方式渲染图像。以这种方式,图元在其中被渲染的渲染空间被分成多个(a plurality of)图块,其然后可以被彼此独立地渲染。基于图块的图形系统包括平铺图元的平铺(tiling)单元,即,对于图元,确定该图元位于渲染空间的哪个图块中。然后,当渲染单元渲染图块时,可以给出指示哪些图元应当被用于渲染图块的信息(例如按图块列表(per-tile list))。
基于图块的渲染的替代方法是即时模式渲染。在这样的系统中,没有生成按图块列表的平铺单元,并且每个图元看起来都被立即渲染;然而,即使在这样的系统中,渲染空间仍然可以被分成像素的图块,并且仍然可以逐个图块地进行每个图元的渲染,在进行到下一个图块之前处理图块中的每个像素。这样做是为了改善存储器引用的局部性。
下面描述的实施例仅以示例的方式被提供并且不是解决已知图形处理流水线的任何或所有缺点的实现方式的限制。
概述
提供本概述来以简化的形式引入在以下详细描述中将进一步描述的概念的选择。本概述不旨在标识出要求保护的主题的关键特征或必要特征,亦不旨在用于限定要求保护的主题的范围。
描述了一种图形处理流水线,其包括边缘测试和/或深度计算硬件。边缘测试和/或深度计算硬件包括一个或更多个硬件布置,其被布置成使用乘积之和(sum-of-products)来执行边缘测试或深度计算。每个硬件布置包括微图块(microtile)分量硬件元件、多个像素分量硬件元件、一个或更多个子采样(subsample)分量硬件元件以及最终加法和比较单元。微图块分量硬件元件包括硬件逻辑,该硬件逻辑被布置成使用渲染空间中图块内微图块的坐标以及乘积之和来计算第一输出。每个像素分量硬件元件包括硬件逻辑,该硬件逻辑被布置成使用对于相对于微图块的原点定义的不同像素的坐标以及乘积之和来计算多个第二输出中的一个。每个子采样分量硬件元件包括硬件逻辑,该硬件逻辑被布置成使用对于相对于像素的原点定义的不同子采样位置的坐标以及乘积之和来计算多个第三输出中的一个。多个加法器对第一输出、多个第二输出中的一个和多个第三输出中的一个的不同组合进行求和,以生成对于相对于图块的原点定义的不同子采样位置的多个输出结果。
第一方面提供了一种被布置成在渲染空间中渲染的图形处理流水线,其中,渲染空间被细分成多个图块,每个图块被细分成多个微图块,每个微图块包括像素的相同排列,并且每个像素包括一个或更多个子采样位置的排列,图形处理流水线包括边缘测试和/或深度计算硬件,并且其中边缘测试和/或深度计算硬件包括一个或更多个硬件布置,每个硬件布置被布置成使用乘积之和来执行边缘测试或深度计算,每个硬件布置包括:微图块分量硬件元件,其包括硬件逻辑,该硬件逻辑被布置成使用渲染空间中图块内微图块的坐标以及乘积之和来计算第一输出;多个像素分量硬件元件,每个像素分量硬件元件包括硬件逻辑,该硬件逻辑被布置成使用对于相对于微图块的原点定义的不同像素的坐标以及乘积之和来计算多个第二输出之一;一个或更多个子采样分量硬件元件,每个子采样分量硬件元件包括硬件逻辑,该硬件逻辑被布置成使用对于相对于像素的原点定义的子采样位置的坐标以及乘积之和来计算第三输出;多个加法器,其被布置成通过针对每个输出结果组合第一输出、多个第二输出之一和第三输出的不同组合来并行生成对于乘积之和的多个输出结果。
第二方面提供了一种在图形处理流水线中计算边缘测试输出值或深度计算值的方法,该图形处理流水线被布置成在渲染空间中进行渲染,其中,渲染空间被细分成多个图块,每个图块被细分成多个微图块,每个微图块包括像素的相同排列,并且每个像素包括一个或更多个子采样位置,该方法包括:在第一硬件元件中,基于图块内微图块的坐标来计算第一输出;在多个第二硬件元件的每一个中,基于微图块内像素的坐标来计算第二输出;在一个或更多个第三硬件元件的每一个中,基于像素内子采样的坐标来计算第三输出;以及将第一输出与第二输出和第三输出组合以生成边缘测试输出值或深度计算值。
可以在集成电路上的硬件中体现包括边缘测试和/或深度计算硬件的图形处理流水线。可以提供在集成电路制造系统处制造包括边缘测试和/或深度计算硬件的图形处理流水线的方法。可以提供集成电路定义数据集,其在集成电路制造系统中进行处理时,将该系统配置为制造包括边缘测试和/或深度计算硬件的图形处理流水线。可提供非暂时性计算机可读存储介质,在该非暂时性计算机可读存储介质上存储有集成电路的计算机可读描述,该集成电路的计算机可读描述在进行处理时,使布局处理系统生成在集成电路制造系统中使用的电路布局描述,以便制造包括边缘测试和/或深度计算硬件的图形处理流水线。
可以提供集成电路制造系统,其包括:非暂时性计算机可读存储介质,其上储存有描述包括边缘测试和/或深度计算硬件的图形处理流水线的计算机可读集成电路描述;布局处理系统,其被配置为对集成电路描述进行处理,以便生成体现包括边缘测试和/或深度计算硬件的图形处理流水线的集成电路的电路布局描述;以及集成电路生成系统,其被配置为根据电路布局描述来制造包括边缘测试和/或深度计算硬件的图形处理流水线。
可以提供用于执行本文中所描述的任何方法的计算机程序代码。可提供其上储存有计算机可读指令的非暂时性计算机可读存储介质,该计算机可读指令在计算机系统处被执行时使计算机系统执行本文中所描述的任何方法。
如对技术人员将明显的是,以上特征可酌情进行组合,并且可与本文中所描述的示例的任意方面组合。
附图说明
现在将参照附图对示例进行详细描述,在附图中:
图1是被分成图块和微图块的渲染空间的示意图;
图2是示例图形处理单元(GPU)流水线的示意图;
图3A是更详细地示出来自图2的流水线的边缘测试和/或深度计算硬件的示意图;
图3B是示出对于各种图元的边缘向量的示意图;
图4A更详细地示出了来自图3A的边缘测试硬件或深度计算硬件的第一示例实现的示意图;
图4B更详细地示出了来自图3A的边缘测试硬件或深度计算硬件的第二示例实现的示意图;
图5A和图5B分别示出了由图4A和图4B的硬件布置执行的加法的图形表示;
图6是执行边缘检测和/或深度计算的示例方法的流程图;
图7示出了计算机系统,其中实现了包括边缘测试和/或深度计算硬件的图形处理流水线;以及
图8示出了用于生成体现本文描述的包括边缘测试和/或深度计算硬件的图形处理流水线的集成电路的集成电路制造系统。
附图图示了不同的示例。技术人员将认识到,图中所示出的元件边界(例如,框、框的组、或其他形状)表示边界的一个示例。在一些示例中可以是,一个元件可以被设计为多个元件,或者多个元件可被设计为一个元件。在适当情况下,共同的参考数字在全部附图中用于指示类似的特征。
详细描述
以下的描述是通过示例的方式来呈现的,以使本领域技术人员能够进行并使用本发明。本发明不限于本文中所描述的实施例,并且对所公开的实施例的各种修改对于本领域技术人员将是明显的。
现在将仅通过示例来对实施例进行描述。
本文描述了改进的边缘处理和/或深度计算硬件。虽然下面描述的一些示例涉及执行边缘处理和深度计算的硬件,但这仅仅是作为示例。在其他示例中,硬件可以仅执行边缘处理(因此不执行深度计算),并且在其他示例中,硬件可以仅执行深度计算(因此不执行边缘处理)。可以在图形处理流水线的光栅化阶段内(例如,在图形处理单元GPU内)执行该硬件。这种改进的硬件使用可扩展的方法来执行边缘处理和深度计算,并且能够并行生成大量结果(例如,对于边缘处理和深度计算中的每一个都有64个结果),同时与已知硬件相比,减小了硬件的物理尺寸(例如,面积)和功耗。在各种示例中,可以实现(例如,用硅实现的硬件的)面积的六倍减少。
如可以参考图1描述的,本文描述的硬件依赖于渲染空间的规则细分。渲染空间100被分成多个图块102(例如,图块可以是正方形或矩形),并且每个图块又被分成规则排列的较小区域104,本文中称为“微图块”。在每个图块102内,存在预定义排列的微图块104,并且在各种示例中,所有微图块104都是相同的尺寸。虽然图1示出了图块102内5x4微图块104的排列,但是在其他示例中,在每个图块102中可以有不同数量的微图块104。每个微图块104包括相同数量(和排列)的像素106(其中这可能取决于GPU流水线的操作模式),并且在每个像素106内,存在预定义排列的子采样108,即子采样位置的预定义集合(例如,在图1所示的示例中为四个,尽管可以有更多的,例如64个子采样位置),但是取决于图形处理流水线的操作模式,并非所有的子采样位置都可以被使用。例如,一种模式(例如,其不使用任何抗混叠)可以仅使用每个像素中的子采样位置中的一个,并且另一种模式(例如,4-MSAA)可以使用每个像素中的四个子采样位置,并且又一种模式(例如,6-MSAA)可以使用每个像素中的六个子采样位置。在其中每个像素中存在多个子采样位置的示例中,图形处理流水线能够在多个不同模式中操作,并且可以在不同模式中(例如,在不同的多采样/抗混叠模式中)使用子采样位置的不同子集。与图块内微图块和微图块内像素的排列不同,像素内子采样的排列可能不在规则网格(grid)上。在各种示例中,对于所有像素,像素内子采样的排列是相同的,并且在其他示例中,对于不同的对象或边缘,子采样的排列可以不同(例如,子采样位置可以动态地变化)。
每个子采样位置的坐标参考图块中的预定义位置(原点)来定义,并且在图1示出的示例中,这是左上角110。给定图块102的细分,如上所述,子采样108的坐标X、Y(如参考图块原点110定义的)可以被分解成三个分量:微图块104相对于图块102的x偏移XUT和y偏移YUT、微图块104内的x像素位置XP和y像素位置YP(其相对于微图块的原点定义的)、以及像素106内的x子采样位置XS和y子采样位置YS(其相对于像素的原点定义的),其中:(X,Y)=(XUT+XP+XS,YUT+YP+YS)。
对于特定操作模式,多个微图块104相对于图块原点110的x和y偏移的集合对于所有图块是相同的,因为每个图块以相同的方式被细分成微图块,但是对于不同的操作模式偏移可以不同。类似地,对于特定操作模式,多个像素106相对于微图块原点(也可以被定义为左上角)的x和y偏移的集合对于(在任何图块中的)所有微图块是相同的,因为渲染空间中的每个微图块包括相同排列的像素。对于特定操作模式,像素内相对于像素原点(也可以被定义为左上角)定义的x和y子采样位置的集合对于(在任何微图块和任何图块中的)所有像素都是相同的。
如下文详细描述的,边缘处理硬件和深度计算硬件都以类似的方式进行操作,并且将执行计算的硬件分成多个子单元,每个子单元计算结果的一部分,提供单独的硬件元件来计算由边缘处理或深度计算硬件计算的函数的微图块分量、像素位置分量和子采样位置分量。多个加法器被用于以不同的组合来组合来自硬件元件的输出(使得每个分量可以在多个不同的组合中被重复使用),以生成对于不同子采样的多个输出结果。在深度计算的情况下,每个输出结果是完整乘积之和(SOP)值,并且在边缘处理的情况下(通常针对图元的每个边缘实现),每个结果都涉及比较(即,特定子采样位于图元边缘的左侧还是右侧),因此每个输出结果可以仅是SOP值的符号(例如,单个位),尽管在一些示例中可以输出完整结果(包括SOP值的所有位)。
尽管在本文描述的示例中没有示出,但是在其他示例中,可以对输出结果有附加的贡献(例如,偏置或基于图块的调整因子),并且这些可以被组合在微图块分量内或最终加法中(例如,在如图4A和图4B示出的并且在下面描述的加法和比较单元408、428中)。
除了使用加法器来组合来自硬件元件的输出之外,边缘处理硬件和/或深度计算硬件还可以包括多个多路复用器来选择被输入到加法器的输出(因此排除(gate out)不需要的任何输出),并且这使得硬件能够重新配置并以多于一种的不同的模式(例如,多于一种的不同的抗混叠模式和/或非抗混叠模式)进行操作。此外,包括多路复用器来选择哪些输出被输入到加法器使得能够针对可变数量的像素和/或采样对本文描述的硬件进行配置,并且这可以用于针对GPU流水线中其他地方出现的瓶颈来调整采样的数量。例如,在仅使用子采样位置的子集的情况下(例如,在各种示例中,例如对于非抗混叠模式,每像素仅使用单个子采样位置),由针对未被使用的子采样来计算子采样位置分量的那些硬件元件生成的结果可以被多路复用器排除(即,未被选择),并且对于未使用部件内部的寄存器的时钟也可以被排除。
如由单独的硬件部件(即,微图块分量硬件元件、像素分量硬件元件和子采样分量硬件元件)生成的特定分量结果被重复用于多个输出结果,例如,由特定微图块分量输出的结果可以用于该微图块内的所有子采样,并且由特定像素分量输出的结果可以用于不同微图块中相应像素位置中的所有子采样,并且由特定子采样分量输出的结果可以用于(在相同或不同微图块中的)不同像素中相应位置中的所有子采样。这导致硬件尺寸(例如,面积)和功耗的减小(例如,与独立地计算对于图块中每一个子采样位置的完整SOP相比,或者与独立地计算对于图块中单个微图块中每一个子采样的完整SOP,然后重复添加边缘特定系数(例如,如下所定义的A、B或C)到这些输出中的每一个以生成对于微图块中的其他像素中的子采样的结果相比),并且使得能够并行生成多个结果(例如,在各种示例中,可以并行生成单个微图块内所有像素中的所有子采样位置的结果,并且这可以随后针对多个微图块被顺序地重复)。此外,通过如本文所述构造硬件,它可以很好地扩展,即它可以被容易地扩展到更多模式和更多输出采样。
图2示出了示例图形处理单元(GPU)流水线200的示意图,其可以在GPU内的硬件中被实现,并且其使用基于图块的渲染方法。本文描述的硬件也可以用在GPU中,该GPU又使用替代的渲染方法,其中渲染处理像素组(例如,其中使用即时模式渲染)。如图2所示,流水线200包括几何处理阶段202和光栅化阶段204。由几何处理阶段202生成的数据可以直接传递到光栅化阶段204,和/或一些数据可以由几何处理阶段202写入存储器(例如参数存储器205),然后由光栅化阶段204从存储器读取。
几何处理阶段202包括顶点着色器206、曲面细分单元208和平铺单元210。在顶点着色器206和曲面细分单元(或曲面细分器)208之间可以有一个或更多个可选的外壳(hull)着色器(未在图2中示出)。几何处理阶段202还可以包括图2中未示出的其他元件,例如存储器和/或其他元件。
顶点着色器206负责执行按顶点计算。与顶点着色器不同,硬件曲面细分单元208(以及任何可选的外壳着色器)按片(per-patch)而不是按顶点进行操作。曲面细分单元208输出图元,并且在使用顶点索引的系统中,输出图元采取三个顶点索引和顶点数据(例如,对于每个顶点,一个UV坐标,以及在各种示例中,诸如位移因子和可选地父UV坐标的其他参数)的缓冲区的形式。在不使用索引的情况下,输出图元采取三个域顶点的形式,其中域顶点可以仅包括UV坐标,或者可以包括UV坐标加上其他参数(例如,位移因子以及可选地父UV坐标)。
平铺单元210生成按图块显示列表,并将这些列表输出到例如参数存储器205。对于特定图块,每个按图块显示列表标识至少部分地位于该图块内的那些图元。这些显示列表可以由平铺单元210使用平铺算法生成。GPU流水线200内的后续元件(例如光栅化阶段204)然后可以从参数存储器205读取数据。
光栅化阶段204渲染由几何处理阶段202生成的一些或所有图元。光栅化阶段204包括边缘测试和/或深度计算硬件212、粗略微图块掩模和系数生成硬件块(coarsemicrotile mask and coefficient generation hardware block)214以及可见性处理器216,并且可以包括图2中未示出的其他元件。粗略微图块掩模和系数生成硬件块214生成在边缘测试和/或深度计算硬件212中使用的系数(例如,如下所定义的A、B和C)。可见性处理器216跟踪在给定像素处可见的每个图元的身份。
光栅化阶段204中的边缘测试和/或深度计算硬件212针对每个图元(例如,按图块显示列表上的每个图元)(基于对图元的每个边缘的边缘测试结果)确定该图块内子采样位置的每一个是在该图元内部还是在该图元外部,并且附加地计算对于图元在每个子采样位置处的深度值,该深度值可以用于确定哪个图元在前面(例如,以执行隐藏曲面移除)或者用于任何其他目的(例如,通过GPU流水线内的着色器)。因此,边缘测试和/或深度计算硬件212执行两个功能:边缘测试和深度计算,并且尽管这些功能被示出在同一元件212内(因为如下面详细描述,以相同的方式实现这两个功能),但是将认识到,在各种示例中,可以独立地使用和/或实现这些功能,并且在各种示例中,在特定图形处理流水线中,可以仅实现功能中的一个。边缘测试和/或深度计算硬件212在图3A中被更详细地示出,并且包括边缘测试硬件302和深度计算硬件304的一个或更多个实例。在各种示例中,边缘测试和/或深度计算硬件212可以包括边缘测试硬件302的一个或更多个实例,而不包括深度计算硬件304的实例。在其他示例中,边缘测试和/或深度计算硬件212可以包括深度计算硬件304的一个或更多个实例,而不包括边缘测试硬件302的实例。
每个图元具有多个边缘方程和与之相关联的深度方程(即,边缘方程和深度方程定义图元)。在三角形图元31的情况下,有三个边缘方程(如图3B所示),而对于矩形图元32或平行四边形图元33,有四个边缘方程(但是在这种情况下,如下所述,对于相对边缘对的方程之间存在预定义的关系)。边缘方程的每一个都是以下形式的向量:
f(x,y)=Ax+By+C
其中,A、B和C是多边形边缘特有的恒定系数(因此可以被预先计算),并且C已经被预先调整,使得场景原点被转换成图块原点,并且这些在本文可以被称为“边缘特有系数”。
边缘测试硬件302通过针对边缘的每一个,计算f(x,y)的值或符号来确定子采样位置(具有坐标x、y)是否在图元内。这是因为:
·如果f(x,y)被计算为正(即大于零),那么子采样点在向量f的右侧
·如果f(x,y)被计算为负(即小于零),那么子采样点在向量f的左侧
·如果f(x,y)被计算正好为零,那么子采样点正好在向量f上
由于图元具有多个边缘(例如,三角形图元31有三个边缘),所以对每个边缘执行边缘测试。如果图元的边缘方程被定义为使得向量在顺时针方向上围绕图元旋转(如图3B中所图示),那么如果子采样位置位于每个边缘向量上或其右侧,则该子采样位置在图元内。因此,如果对于边缘向量的每一个,f(x,y)不是负的(即,它是零或正的),则子采样位置在图元内。因此,如果边缘测试硬件302输出单个位(例如,结果f(x,y)的最高有效位MSB),则可以使用与(AND)门来组合针对边缘(例如,三个或四个边缘)的每一个的来自边缘测试硬件302的输出,并且如果与门的输出是“1”,则子采样位置在图元内。在其他示例中,边缘测试硬件302可以输出多于单个位(例如两个位),使得它可以确定子采样位置是否正好位于图元的边缘上。
将认识到,如果边缘向量被不同地定义,那么在图元内部找到子采样的条件将是不同的(例如,如果边缘向量被定义成使得他们在逆时针方向上围绕图元旋转,那么对于边缘向量的每一个,条件是f(x,y)必须不大于零),并且用于组合针对边缘的每一个的来自边缘测试硬件302的输出的逻辑元件将是不同的。
当两个图元将共享每个边缘,可以使用规则,使得正好在边缘上(即,正好在向量f上)的采样被认为仅仅是一个图元的一部分,并且该规则可以被称为“边缘规则”。在各种示例中,如果采样刚好在图元的左侧或水平顶部边缘上,则它可以被认为在图元中,并且如果它刚好位于图元的另一边缘上,则它可以被认为不在图元中。在本文描述的边缘测试和/或深度计算硬件212中,(如下所述,由微图块分量硬件元件402生成的)微图块分量值可以(例如,基于系数)依据最低有效位的值动态地调整,以实现边缘规则。
如图3A所示,边缘测试和/或深度计算硬件212可以包括多个边缘测试硬件元件302,并且这使得能够对多个边缘并行执行边缘测试计算。在各种示例中,边缘测试和/或深度计算硬件212包括三个边缘测试硬件元件302(例如,对于三角形图元31的每个边缘一个元件)或四个边缘测试硬件元件302(例如,对于矩形图元32或平行四边形图元33的每个边缘一个元件)。
深度计算硬件304还计算以下形式的SOP:
f(x,y)=Ax+By+C,
然而,与边缘测试硬件302不同,不是仅确定结果的符号(即,执行比较操作),而是计算f(x,y)的完整值,因此输出包括多个位(例如,45位)。系数、输入和输出可以是浮点数,标准化为共同指数,并且共同指数被旁路到输出以减小硬件尺寸,这之后输出可以再次被标准化为浮点数。或者,系数、输入和输出可以是定点值。
尽管每个硬件元件302、304在图3A中被示为单独的、独立的单元(例如,边缘测试硬件302的每个实例和深度计算硬件304的单个实例被表示为没有任何重叠或互连的单独的框),但是可能有在元件之间共享的信号和/或在元件之间共享的硬件逻辑。例如,当由硬件元件的每一个使用的子采样位置(当相对于像素原点而不是图块原点定义时)是相同的(即,每个边缘依赖于像素内相同的采样模式)时,可以存在执行(如相对于像素原点定义的)子采样位置的查找(在LUT中)或计算的共享逻辑,然后可以将所得到的子采样位置数据提供给所有硬件元件302、304。另外(或在其他示例中),在使用多路复用器的情况下,硬件元件302、304的每一个中的多路复用器,或仅边缘测试硬件元件302的每一个中的多路复用器,可以由相同的多路复用器选择(或模式)信号驱动,该信号可以在硬件元件302、304之一中被生成,或者基于图形流水线的操作模式(例如,正在使用的抗混叠模式)由单独的硬件元件(图3A中未示出)生成。例如,选择信号可以被编码为独热(one-hot)信号,其中一组独热信号中的每一个对硬件的不同操作模式进行编码。
图4A和图4B更详细地示出了边缘测试硬件302或深度计算硬件304的两种不同的示例实现方式。如下文更详细描述的,硬件布置400、420都可以被实现为执行边缘测试或深度计算。
图4A示出的第一示例硬件布置400包括单个微图块分量硬件元件402、多个(例如16个)像素分量硬件元件404、一个或更多个(例如16个)子采样分量硬件元件406以及多个(例如64个)加法和比较元件(例如,其可以实现被为多个加法器)408,其中每个加法和比较元件408为同一微图块内的不同子采样位置生成输出结果。硬件布置400可以附加地包括多个多路复用器410,多路复用器410将(一个或更多个)微图块分量硬件元件402、像素分量硬件元件404和子采样分量元件406连接到加法和比较元件408。在包括多路复用器410的示例中,一个或更多个选择信号(其也可以被称为“模式信号”并且如上所述可以包括编码硬件的特定操作模式的独热信号)控制多路复用器410的操作,并且特别控制硬件元件402、404、406的哪个组合被连接到每个特定的加法和比较元件408(例如,在存在多于一个像素分量硬件元件和子采样分量硬件元件的情况下,对于每个加法和比较元件408,多个像素分量硬件元件404中的哪一个和子采样分量硬件元件406中的哪一个被连接到加法和比较元件408,其中每个加法和比较元件408也被连接到单个微图块分量硬件元件402)。
如上所述,如果边缘测试硬件302和深度计算硬件304都评估以下形式的SOP:
f(x,y)=Ax+By+C,
其中,系数A、B、C的值对于每个评估的SOP可能不同,则微图块分量硬件元件402评估:
fUT(xUT,yUT)=AxUT+ByUT+C,
其中,xUT和yUT的值(相对于图块原点110的微图块坐标)对于不同的微图块是不同的。微图块分量硬件元件402可以接收A、B、C、xUT和yUT的值作为输入,并且元件输出单个结果fUT。
像素分量硬件元件404对于xP和yP的不同值(其中,这些值对于微图块内的不同像素是不同的)评估:
fP(xP,yP)=AxP+ByP。
xP和yP的值的集合(即,如相对于微图块原点定义的,对于微图块内所有像素的xP和yP的值)对于所有微图块是相同的,并且它们可以例如由边缘测试硬件302和深度计算硬件304计算,或者可以从查找表(LUT)中访问。在各种示例中,微图块的原点可以被定义为每个微图块的左上角,并且xP和yP的值可以是整数,因此值的确定需要很少或不需要计算(因此这提供了有效的实现)。返回到图1示出的示例,其中每个微图块包括每行5个像素的四行,则xP的值的集合是{0,1,2,3,4}(也可以被写成[0,4]),并且yP的值的集合是{0,1,2,3}(也可以被写成[0,3])。每个像素分量硬件元件404接收A和B作为输入,并且还可以接收xP和yP的值的集合(例如,在这些不是整数的示例中)。每个元件404输出单个结果fP,因此fP的计算可以与被执行来确定xP和/或yP的任何计算合并。
子采样分量硬件元件406对于xS和yS的不同值(其中这些值对于像素内不同子采样是不同的)评估:
fS(xS,yS)=AxS+ByS。
xS和yS的值的集合(即,如相对于像素原点定义的,对于像素内所有子采样位置的xS和yS的值)对于所有像素可以是相同的,并且它们可以在元件406内被计算,由硬件布置400内的共享硬件逻辑集中计算,和/或可以再次由元件406或共享硬件逻辑从查找表(LUT)中访问。每个子采样分量硬件元件406接收A和B作为输入,并且还可以接收xS和yS的值,其中这些值不是在元件内被计算的。每个元件406输出单个结果fS,因此fS的计算可以与被执行来确定xS和/或yS的任何计算合并。在各种示例中(例如非抗混叠模式),每像素只有单个子采样位置,因此可能只有xS和yS的单个值。
在存在多于一个的子采样分量硬件元件406的各种示例中,子采样分量硬件元件406可以不都是相同的,而是可以有两种类型的子采样分量硬件元件406。例如,第一类型子采样分量硬件元件可以使用查找表来确定子采样坐标(即,xS和yS的值),并且第二类型子采样分量硬件元件可以使用常数乘法器来计算子采样坐标。例如,这些不同类型可以用于不同的操作模式。
加法和比较元件408评估:
f(x,y)=fUT+fP+fS
并且每个加法和比较元件408对fUT、fP和fS值的不同组合进行求和(其中,值的特定组合被提供作为加法和比较单元408的输入),并且该组合要么是固定的(即,在元件之间硬连线的),要么由一个或更多个多路复用器410(如果提供的话)选择。在硬件布置400用作边缘测试硬件302的示例中,仅输出结果(即,f(x,y))的MSB(或符号位),因此不需要由加法和比较元件408计算完整结果,并且加法和比较元件408可以执行比较而不是加法(这减小了硬件的总面积)。该MSB指示结果的符号(因为a>b===sign(b-a)),并且如上所述,这指示子采样位置是在边缘的左侧还是右侧。在硬件布置400用作深度计算硬件304的示例中,输出完整结果(即,f(x,y)的所有位,例如可以包括45位)(并且如上所述,这可以是具有直接被传递到输出的共同指数值的分量)。
可以参考使用抗混叠模式4-MSAA的示例来进一步描述图4A中的硬件布置400的操作,因此每像素有四个子采样。在这样的示例中,微图块分量硬件元件402评估与单个微图块相关的一个fUT值。如果每微图块有十六个像素(以4x4网格排列),那么像素的x坐标是0、1、2和3,并且像素的y坐标是0、1、2和3。像素分量硬件元件404的十六个实例各自评估16个按像素分量中不同的一个,对于j=[0,15]:
fP[j]=(Ax[0,3])+(Bx[0,3]),
然而第一分量fP[0]可以总是零,因此在各种示例中,在硬件布置400中可以仅提供像素分量硬件元件的十五个实例(即,比每微图块的像素数量少一个)。可以使用加法器的组合且在不需要任何乘法的情况下来实现每个像素分量硬件元件404,因此这提供了有效的硬件实现。例如,Ax 3可以简单地被实现为A+A+A。可能的被乘数的小集合有助于这种实现。
由于每像素有四个子采样,因此子采样分量硬件元件406的四个实例各自评估四个子采样分量中不同的一个,对于i=[0,3]:
fS[i]=AxS[i]+ByS[i]。
如上所述,尽管子采样不在固定网格上(不同于像素),但是它们对于每个像素都在相同的位置上,因此它们的坐标可以被存储在LUT中,并且由子采样分量硬件元件406从LUT中访问。可替换地,常数乘法器(即,其中乘法运算被代替实现为最小数量的加法,在适当的情况下使用左移位的硬件)可以被用于计算坐标,其中常数乘法器可以被提供给每个子采样分量硬件元件,但是随后可以至少部分地被合成工具合并。由常数乘法器执行的运算的示例是将运算6a+14b实现为(a<<1)+(a<<2)+(b<<4)-(b<<1),其中“<<”表示向左移位由后面的整数给出的位置数(例如,<<1表示向左移位一)。
由于存在一个微图块分量fUT、16个像素分量fP(尽管其中之一可以是零)和4个子采样分量fS,因此存在64种可能的组合(1x16x4),因此硬件布置400包括加法和比较元件408的64个实例,每个实例评估64个结果中不同的一个:
f[k]=fUT+fP[j]+fS[i],
对于i=[0,3]、j=[0,15]和k=[0,63]。
在另一示例中,其中硬件布置400被设计成在抗混叠模式4-MSAA和6-MSAA中操作,每像素有六个子采样。在这样的示例中,微图块分量硬件元件402(如前所述)评估与单个微图块相关的一个fUT值。同样,像素分量硬件元件404的16个实例各自评估16个按像素分量中不同的一个,对于j=[0,15]:
fP[j]=(A×[0,3])+(B×[0,3]),
然而如上所述,第一分量fP[0]可以总是零,因此在各种示例中,在硬件布置400中可以仅提供像素分量硬件元件的十五个实例(即,比每微图块的像素数量少一个)。
由于每像素有六个子采样,因此存在子采样分量硬件元件406的六个实例,并且每个实例评估六个子采样分量中不同的一个,对于i′=[0,5]:
fS[i′]=AxS[i′]+ByS[i′]。
在该示例中,由于有一个微图块分量fUT、16个像素分量fP(尽管其中一个可能为零)和6个子采样分量fS,因此有96种可能的组合(1x16x6)。如果硬件布置400仅包括加法和比较元件408的64个实例,并非所有组合都可以被并行计算,并且在硬件以4-MSAA模式操作的情况下,仅需要64个输出结果。因此,当在4-MSAA模式中操作时,多路复用器410用于选择64个相关组合(即,从每个像素中排除2个子采样分量),并且对于i=[0,3]、j=[0,15]和k=[0,63],每个加法和比较元件408评估所选择的64个组合中不同的一个:
f[k]=fUT+fP[j]+fS[i]。
在需要生成比硬件布置400中的加法和比较元件408更多的输出结果的其他模式(例如8-MSAA模式)中操作时,要么微图块可以被做得更小(即,使得它包含更少的像素),要么每个像素仅计算采样位置的子集。相反,对于非抗混叠(或非MSAA)模式,每像素(例如,在像素的中心处)只有单个采样,并且在这种情况下,仅使用加法和比较单元408的子集,并且除了一个子采样分量硬件元件406之外的所有子采样分量硬件元件都可以被排除。在计算了前32个输出结果之后,多路复用器然后被用于选择剩余的32个组合,从而生成所有64个输出结果。
图4B示出的第二示例硬件布置420是图4A示出的硬件布置400的变型。该第二示例硬件布置420包括单个微图块分量硬件元件402、多个(例如16个)像素分量硬件元件424(然而这些元件的操作与图4A示出的以及上面描述的元件略有不同)、一个或更多个(例如16个)子采样分量硬件元件406以及多个(例如64个)加法和比较元件(例如,可以被实现为多个加法器)428(尽管这些元件的操作与图4A示出的以及上面描述的元件略有不同),其中每个加法和比较元件428生成输出结果。类似于图4A示出的硬件布置400,图4B示出的硬件布置420可以附加地包括由选择信号控制的多个多路复用器410。
如上所述,如果边缘测试硬件302和深度计算硬件304都评估以下形式的SOP:
f(x,y)=Ax+By+C,
其中,系数A、B、C的值对于每个被评估的SOP可能不同,那么微图块分量硬件元件402如上参考图4A所述进行操作;然而,在图4B的布置420中,微图块分量硬件元件402的输出被输入到多个像素分量硬件元件424中的每一个,而不是输出被直接馈送到加法单元(如图4A所示)。一个或更多个子采样分量硬件元件406中的每一个也如上面参考图4A所述的进行操作。
图4B的布置420中的像素分量硬件元件424不以与图4A示出的方式相同的方式进行操作。它们接收来自微图块分量硬件元件402的输出fUT作为输入(除了A和B之外),并对于xP和yP的不同值(其中这些值对于微图块内不同像素是不同的)评估:
fUT(xUT,yUT)+fP(xP,yP)=fUT(xUT,yUT)+AxP+ByP。
如上所述(参考图4A),xP和yP的值(即,如相对于微图块原点定义的,对于微图块内所有像素的xP和yP的值)可以是整数,因此像素分量硬件元件424可以包括加法器的布置,以将由微图块分量硬件元件402生成的输入值fUT加上A和/或B的适当倍数,并且这可以在不使用任何乘法器的情况下被实现,并且这减小了加法和比较单元428的大小和/或功耗。每个元件424输出单个结果fUT+fP,并且如上所述,fP的计算以及因此单个结果的计算可以与被执行来确定xP和/或yP的任何计算合并。
加法和比较元件428以类似于上述加法和比较元件408的方式来评估:
f(x,y)=fUT+fP+fS;
然而,输入是不同的,因为fUT和fP的值已经在像素分量硬件元件424中被组合。每个加法和比较元件428对(fUT+fP)和fS值的不同组合进行求和(其中,值的特定组合被提供作为加法和比较单元428的输入),并且组合要么是固定的(即硬连线的),要么由一个或更多个多路复用器410(如果提供的话)选择。如上所述,在硬件布置420用作边缘测试硬件302的示例中,仅输出结果(即,f(x,y)的)MSB(或符号位),因此不需要计算完整结果。该MSB指示结果的符号,并且如上所述,这指示子采样位置是在边缘的左侧还是右侧。在硬件布置420用作深度计算硬件304的示例中,输出完整结果(即,f(x,y)的所有位)。
可以参考先前使用的示例进一步描述图4B中的硬件布置420的操作,其中使用抗混叠模式4-MSAA,因此每像素有四个子采样。在这样的示例中,微图块分量硬件元件402评估与单个微图块相关的一个fUT值。如果每微图块有十六个像素(以4x4网格排列),那么像素的x坐标是0、1、2和3,并且像素的y坐标是0、1、2和3。像素分量硬件元件424的十六个实例各自评估16个像素分量中不同的一个,对于j=[0,15]:
(fUT+fP)[j]=fUT+(A×[0,3])+(B×[0,3]),
然而第一分量(fUT+fP)[0]可以总是等于fUT,因此在各种示例中,在硬件布置420中可以仅提供像素分量硬件元件424的十五个(即,比每微图块的像素数量少一个)实例。可以使用加法器的组合且在不需要任何乘法的情况下来实现每个像素分量硬件元件424,因此这提供了有效的硬件实现,此外,在各种示例中,可以在像素分量硬件元件424之间共享中间结果。
如在该示例中,每像素有四个子采样,子采样分量硬件元件406有四个实例,并且每个实例评估四个按子采样分量中不同的一个,对于i=[0,3]:
fS[i]=AxS[i]+ByS[i]。
如上所述,尽管子采样不在固定网格上(不同于像素),但是它们对于每个像素都在相同的位置上,因此它们的坐标可以被存储在LUT中,并且由子采样分量硬件元件406从LUT中访问。可替换地,常数乘法器可以被用于计算坐标,其中常数乘法器可以被提供给每个子采样分量硬件元件,但是随后可以至少部分地被合成工具合并。
由于有来自像素分量硬件元件424的16个输出(fUT+fP)[j]和4个子采样分量fS[i],所以有64种可能的组合(16x4),因此硬件布置420包括加法和比较元件428的64个实例,对于i=[0,3]、j=[0,15]和k=[0,63],每个实例评估64个结果中不同的一个:
f[k]=(fUT+fP)[j]+fS[i]。
图4B示出的硬件布置420可以利用以下事实,即可以快速计算fP的值,或者可替换地,可以在先前的流水线阶段中执行微图块分量计算。通过使用该布置420,与图4A所示的布置400相比,硬件布置420的总面积可以减小(例如,加法和比较元件428可以比加法和比较元件408小);然而,由像素分量硬件元件424输出的结果的每一个包括比图4A示出的布置400中更多的位(例如,多大约15个位)。
尽管图4B示出了与子采样分量硬件元件406对齐的微图块分量硬件元件402,但是可以不并行执行这些计算。在各种示例中,硬件布置中的第一流水线阶段可以计算微图块分量fUT(在微图块分量硬件元件402中),并且并行执行子采样位置的查找(例如,如上所述,从LUT查找)。这最大化了第二流水线阶段中可用于计算的时间,在第二流水线阶段中,像素分量硬件元件424将像素分量fP加到微图块分量fUT,并且并行地,子采样分量硬件元件406计算子采样分量fS。
尽管图4A和图4B示出了硬件元件402、404、406、424被连接到单个加法和比较元件408、428(可选地经由多路复用器410),这仅仅是为了降低图的复杂性。如上所述,每个加法和比较元件408、428生成输出结果,并且在所有示例中,硬件布置400、420(其可以用作边缘测试硬件302或深度计算硬件304)被布置成并行计算多个结果(例如64个结果),因此包括多个加法和比较元件408、428(例如64个加法和比较元件)。
尽管图4A和图4B都仅示出了单个微图块分量元件402,使得由硬件布置400、420并行生成的所有结果都与同一微图块内的子采样位置相关,但是在其他示例中,硬件布置可以包括多个微图块分量元件402,并且在这些示例中,由硬件布置并行生成的结果可以与多于一个微图块内的子采样位置相关。
在各种示例中,并且在图4A或图4B示出的硬件布置400、420用作边缘测试硬件302的情况下,硬件布置400、420还可以包括多个快速决策单元430(也可以被称为快速失败/通过逻辑元件),每个微图块一个,并且该条件然后被应用于所有输出(例如,来自所有的多个加法和比较元件408、428的输出)。快速决策单元430接收由微图块分量硬件元件402生成的输出,并且基于接收到的输出确定来自包括像素分量硬件元件404、424和子采样分量元件406的对的任何可能的贡献是否能够改变由微图块分量硬件元件402输出的值的MSB值。
如果由微图块分量硬件元件402输出的值fUT足够正,以至于没有像素或子采样贡献可以使所得的f(x,y)为负(在考虑任何边缘规则调整之后),即,如果:
fUT>|fPmin|+|fSmin|,
其中,fPmin是fP的最小可能值(即,最负可能值),并且fSmin是fS的最小可能值(即,最负可能值),则硬件布置400、420可以确定边缘测试是通过还是失败,而不评估由像素分量硬件元件404、424和子采样分量元件406生成的输出(即,不完全评估最终总和)。
类似地,如果由微图块分量硬件元件402输出的值fUT足够负(sufficientlynegative),以至于没有像素或子采样贡献可以使所得的f(x,y)为正或零,即,如果:
|fUT|>fPmax+fSmax,
其中,fPmax是fP的最大可能值(即,最正可能值),并且fSmax是fS的最大可能值(即,最正可能值),则硬件布置400、420可以确定边缘测试是通过还是失败,而不评估由像素分量硬件元件404、424和子采样分量元件406生成的输出(即,不完全评估最终总和)。
快速决策单元430的实现减小了由每个加法和比较元件408、428执行的加法的宽度,因为来自由微图块分量硬件元件402生成的输出的多个(例如三个)MSB可以从加法中省略。可以省略的MSB的精确数量由图块中微图块的数量(即,有多少个XUT位)和系数C的精确约束来确定。这可以参考图5A和图5B中示出的示例来描述。图5A示出了由图4A中的加法和比较元件408执行的加法的图形表示,并且图5B示出了由图4B中的加法和比较单元428结合像素分量硬件元件424执行的加法的图形表示,该加法实际上只是比较器。如图5A和图5B所示,来自图4A中的子采样分量硬件元件406(输出502)、像素分量硬件元件404(输出504)和微图块分量硬件元件402(输出506)的输出当它们在不同粒度级别上操作时相对于彼此偏移。类似地,来自图4A中的子采样分量硬件元件406的输出(输出502)以及微图块分量硬件元件402和像素分量硬件元件424的组合(输出506’)当它们在不同粒度级别上操作时相对于彼此偏移。图5A和图5B中示出的偏移仅作为示例,因为它们取决于许多因素(例如,采样位置的精度、微图块中的像素数量、图块中的微图块数量等)。快速决策单元430识别fUT、fP、fS的那些组合,其中从微图块分量硬件元件402进入输出506的第一部分508的单一进位(single carry)不能改变输出值506、506’的MSB 510的值。因此,基于改变MSB 510的值所需的进入第一部分508的进位的最小数量的确定,来自微图块分量硬件元件402的输出值506或来自微图块分量硬件元件402和像素分量硬件元件424的组合的输出值506’的MSB的数量可以被排除在加法运算之外。在提供快速决策单元430的情况下,边缘测试硬件302的操作速度在某些情况下(即,在满足上述两个条件之一的情况下)也可以增加。
如上所述,硬件布置400、420都适合在使用任何渲染方法的GPU中使用,在该渲染方法中,像素组一起被处理,并且这包括基于图块的渲染和即时模式渲染。在各种示例中,如图4B所示的包括快速决策单元430的硬件布置420可以特别适合使用即时模式渲染的GPU。这是因为即时模式渲染比基于图块的渲染产生更大的微图块分量硬件元件402(因为坐标范围现在可以覆盖整个屏幕区域)。
选择哪种硬件布置400、420以在任何实现方式中使用将取决于各种因素,包括但不限于由GPU使用的渲染方法。与图4B示出的硬件的布置420相比,图4A示出的硬件布置400在用于像素分量硬件元件404的多路复用器410之前具有更少的延迟和更少的寄存器;然而,图4A中的加法和比较元件408比图4B中的加法和比较单元428更大并且使用更多的功率。因此,在具有大量加法和比较元件408(例如64个或更多)的情况下,使用图4B示出的硬件布置420可能更合适。然而,在图4B示出的硬件布置420中,如果只有微图块索引改变,则不可能排除像素分量硬件元件424,但是对于64个或更多输出,加法和比较单元428的降低的复杂性可以提供关于硬件功耗的主要影响。
图3A示出了边缘测试硬件302的三个实例,对于如图3B所示的三角形图元31的每个边缘一个。在图元具有多于三个边的示例中,例如,在图元是矩形32、平行四边形33或任何其他n边凸多边形的情况下,对于每个边缘,可以有边缘测试硬件302的各自实例。然而,在各种示例中,在对于两个或更多个边缘的边缘向量之间存在预定义关系的情况下,当对这些边缘中的每一个执行边缘测试时,可以重新使用计算的一些输出,并且这进一步减小了整个硬件的面积。例如,如图3B所示,如果图元是矩形32或平行四边形33,则在相对的边缘向量对中的系数之间存在预定义的关系,即f1和f3,f2和f4。具体地,如果:
f1(x,y)=Ax+By+C1,
则:
f3(x,y)=-Ax-By+C3。
因此,对于取反的系数,不需要复制所有像素分量硬件元件404和子采样分量硬件元件406,而是对于第一边缘的来自像素分量硬件元件404的输出可以被重复用于第二边缘,并且对于第一边缘的来自子采样分量硬件元件406的输出可以被重复用于第二边缘。
例如,这可以被实现如下:在使用图4A的硬件布置400的情况下,对于第一边缘f1的来自像素分量硬件元件404的输出:
fP(xP,yP)=AxP+ByP
可以被反转并重复用于第二边缘,其中:
fP(xP,yP)=-AxP-ByP。
类似地,对于第一边缘f1的来自子采样分量硬件元件406的输出:
fS(xS,yS)=AxS+ByS
可以被反转并重复用于第二边缘,其中:
fS(xS,yS)=-AxS-ByS。
或者可替代地,可以省略来自像素分量硬件元件404和子采样分量硬件元件406的输出的取反,而是可以修改在加法和比较单元408中执行的比较,使得对于第一边缘,比较是:
fUT1+fp+fS>0,
并且对于第二边缘,修改的比较是:
fUT2+fp+fS≤0,
(其中,fUT2是在C系数被取反的情况下计算的),并且这可以导致更有效的硬件实现(例如,在尺寸和/或功率方面)。
如上所述,对于多于一个的边缘重复使用来自各个硬件元件404、406的所有输出导致整体面积节省。例如,用于对一对相对边缘执行边缘测试的硬件的面积可以比用于对单个边缘执行边缘测试的硬件的面积小1.5倍。
上述用于边缘检测和深度计算的硬件提供了SOP的有效实现。使用上述实现方式,通过降低为实现单个结果而执行的加法运算的复杂性来降低硬件的延迟,硬件可以并行地提供许多子采样结果(例如,单个微图块内来自多达16个像素的多达64个子采样结果),并且可扩展以提供增加的并行性、增加输出的数量和/或引入附加的操作模式(例如,附加的抗混叠模式),并且硬件不仅更小(在尺寸/面积上)还具有降低的功耗。本文描述的硬件的相对小的尺寸使得将分量的每一个适配(fit)单个流水线阶段成为可能,而完整的A*Xut+pp+sp可能需要内部流水线寄存器以用于高时钟开销(clock spends),并且这些增加了面积和延迟。
图6是以有效方式(即,在硬件大小和功耗方面)对被分成图块的渲染空间执行边缘检测和/或深度计算的示例方法的流程图,并且其中,每个图块被细分成多个微图块,每个微图块包括像素的相同排列,并且每个像素包括子采样位置的相同排列。该方法使用上面描述的并且在图3A、图4A和图4B中示出的硬件,并且可以是图形处理流水线中渲染方法的一部分。
方法包括,在第一硬件元件402中,基于微图块的坐标来计算第一输出(块602)。方法还包括,在多个第二硬件元件404、424的每一个中,基于微图块内多个像素之一的坐标来计算多个第二输出之一(块604),其中,多个第二硬件元件的每一个和多个第二输出的每一个与多个像素中不同的像素相关。方法还包括,在一个或更多个第三硬件元件406的每一个中,基于每个像素内的子采样的坐标来计算第三输出(块606)。在存在多于一个第三硬件元件406(即,多个第三硬件元件406)的示例中,多个第三硬件元件中的每一个和(由多个第三硬件元件中不同的硬件元件生成的)多个第三输出中的每一个与多个子采样中不同的子采样相关。方法还包括通过使用一个或更多个加法单元将第二输出之一和第三输出的不同组合与第一输出相结合来生成多个输出值(块608),其中,每个输出值是深度计算或边缘测试输出。
如上所述,深度计算输出值包括多个位,而边缘测试输出值可以仅包括单个位(例如,三个组合的输出之和的MSB)。因此,在深度计算的情况下,一个或更多个加法单元可以包括多个加法器,并且在边缘计算的情况下,一个或更多个加法单元可以执行比较而不是完整加法。
如上所述,第一输出、第二输出和第三输出的组合(块608中)可以在多个加法和比较单元408中实现,每个加法单元接收第二输出之一和第三输出的组合以及第一输出作为输入(例如,如图4A所示以及如上所述)。可替代地,组合操作(在块608中)可以是两阶段过程,其中第一输出与第二硬件元件424内的第二输出中不同的输出组合,然后,在多个加法和比较单元428的每一个中,第三输出与来自第二硬件元件的输出之一组合。
图7示出了其中可以实现本文描述的图形处理系统的计算机系统700。计算机系统包括CPU 702、GPU 704、存储器706和诸如显示器716、扬声器718和摄像机720的其他设备714。可以在GPU 704内实现上面描述的图形处理流水线,特别是边缘测试和/或深度计算硬件212。计算机系统的部件可以经由通信总线722彼此通信。可以包括由边缘测试和/或深度计算硬件212使用的一个或更多个LUT的数据储存装置724可以被实现为存储器706的一部分。
图2、图3A、图4A和图4B示出的以及上面描述的硬件布置被示为包括多个功能块。这仅仅是示意性的,且并不旨在限定在这些实体的不同逻辑元件之间的严格区分。可以以任何合适的方式提供每个功能块。应理解的是,本文描述如由任何一个元件(例如,图4A和图4B中的任何一个元件)形成的中间值不需要在任何点处由硬件布置物理地生成,并且可以仅表示方便地描述由硬件(例如,图形处理流水线)在其输入端和输出端之间执行的处理的逻辑值。
可以在集成电路上的硬件中体现本文描述的边缘测试和/或深度计算硬件212。本文描述的边缘测试和/或深度计算硬件212可以被配置为执行本文描述的方法中的任何一个。通常,以上所描述的功能、方法、技术或部件中的任一个都能够以软件、固件、硬件(例如,固定逻辑电路)、或它们的任何组合中来实现。本文可以使用术语“模块”、“功能”、“部件”、“元件”、“单元”、“块”和“逻辑”,以一般性地表示软件、固件、硬件、或它们的任何组合。在软件实现方式的情况下,模块、功能、部件、元件、单元、块或逻辑表示当在处理器上被执行时执行特定任务的程序代码。本文描述的算法和方法可以由执行使处理器(一个/更多个)执行算法/方法的代码的一个或更多个处理器来执行。计算机可读存储介质的示例包含随机存取存储器(RAM)、只读存储器(ROM)、光盘、闪存、硬盘存储器和可以使用磁、光或其他技术来存储指令或其他数据并可以被机器访问的其他存储器设备。
如本文中所使用的术语计算机程序代码和计算机可读指令是指用于处理器的任何类型的可执行代码,包括以机器语言、解释语言或脚本语言表达的代码。可执行代码包括二进制代码、机器代码、字节码、定义集成电路的代码(诸如,硬件描述语言或网表)、以及以诸如C、Java或OpenCL的编程语言代码表达的代码。可执行代码可以是例如任何类型的软件、固件、脚本、模块或库,当其在虚拟机或其他软件环境下被适当地执行、处理、解释、编译、执行时,使支持可执行代码的计算机系统的处理器执行由代码指定的任务。
处理器、计算机、或计算机系统可以是具有处理能力使得其可以执行指令的任何类型的设备、机器或专用电路、或它们的集合或部分。处理器可以是任何类型的通用处理器或专用处理器,诸如CPU、GPU、片上系统、状态机、媒体处理器、专用集成电路(ASIC)、可编程逻辑阵列、现场可编程门阵列(FPGA)、物理处理单元(PPU)、无线电处理单元(RPU)、数字信号处理器(DSP)、通用处理器(例如,通用GPU)、微处理器、被设计为在CPU外部加速任务的任何处理单元等。计算机或计算机系统可以包括一个或更多个处理器。本领域中的技术人员将认识到,这样的处理能力被结合到很多不同的设备内,且因此术语“计算机”包括机顶盒、媒体播放器、数字无线电装置、PC、服务器、移动电话、个人数字助理和很多其它设备。
还旨在包含对如本文所描述的硬件的配置进行限定的软件,诸如HDL(硬件描述语言)软件,如用于设计集成电路、或用于配置可编程芯片以执行期望功能。也就是说,可以提供计算机可读存储介质,其具有在其上编码的以集成电路定义数据集的形式的计算机可读程序代码,其当在集成电路制造系统中被处理(即运行)时,配置系统以制造被配置成执行本文描述的方法中的任一个的图形处理流水线,或制造包括本文描述的边缘测试和/或深度计算硬件的图形处理流水线。集成电路定义数据集可以例如是集成电路描述。
因此,可以提供在集成电路制造系统处制造如本文所描述的包括边缘测试和/或深度计算硬件的图形处理流水线的方法。此外,可以提供一种集成电路定义数据集,其在集成电路制造系统中被处理时使制造包括边缘测试和/或深度计算硬件的图形处理流水线的方法被执行。
集成电路定义数据集可以是计算机代码的形式,例如,作为用于配置可编程芯片的网表、代码,作为限定任何级处的集成电路的硬件描述语言(包括作为寄存器传送级(RTL)代码),作为诸如Verilog或VHDL的高级电路表示,以及作为诸如OASIS(RTM)和GDSII的低级电路表示。在逻辑上限定集成电路的较高级的表示(诸如RTL)可以在计算机系统处被处理,该计算机系统被配置成在软件环境的背景下生成集成电路的制造定义,包括电路元件和用于组合这些元件的规则的定义,以便生成由该表示如此定义的集成电路的制造定义。如软件在计算机系统处执行以便限定机器的通常情况,可以需要一个或更多个中间用户步骤(例如,提供命令、变量等),以便被配置为生成集成电路的制造定义的计算机系统执行对集成电路进行定义的代码,从而生成该集成电路的制造定义。
现在将参考图8描述在集成电路制造系统处来处理集成电路定义数据集以便配置系统来制造图形处理流水线的示例。
图8示出了被配置为制造如本文的任何示例中所描述的包括边缘测试和/或深度计算硬件的图形处理流水线的集成电路(IC)制造系统802的示例。具体地,IC制造系统802包括布局处理系统804和集成电路生成系统806。IC制造系统802配置成接收IC定义数据集(例如,定义如在本文的任何示例中所描述的包括边缘测试和/或深度计算硬件的图形处理流水线),处理IC定义数据集,并根据IC定义数据集生成IC(例如,其体现如在本文的任何示例中所描述的包括边缘测试和/或深度计算硬件的图形处理流水线)。IC定义数据集的处理配置IC制造系统802以制造体现如在本文的任何示例中所描述的包括边缘测试和/或深度计算硬件的图形处理流水线的集成电路。
布局处理系统804被配置为接收IC定义数据集并对其进行处理以确定电路布局。根据IC定义数据集确定电路布局的方法在本领域中是已知的,且例如可涉及合成RTL代码以确定例如在逻辑部件(例如,与非(NAND)、或非(NOR)、与(AND)、或(OR)、MUX和触发器(FLIP-FLOP)部件)方面待生成的电路的门级表示。可通过确定逻辑部件的位置信息,根据电路的门级表示来确定电路布局。这可自动地或借助用户干预来完成,以便优化电路布局。当布局处理系统804已经确定电路布局时,它可以向IC生成系统806输出电路布局定义。例如,电路布局定义可以是电路布局描述。
如在本领域中已知的,IC生成系统806根据电路布局定义生成IC。例如,IC生成系统806可实现半导体器件制造过程以生成IC,这可以涉及光刻和化学处理步骤的多步骤序列,在该多步骤序列期间,电子电路逐步在由半导体材料制成的晶圆上被创建。电路布局定义可以是可以在光刻过程中使用的用于根据电路定义生成IC的掩模的形式。可选地,被提供到IC生成系统806的电路布局定义可以是计算机可读代码的形式,IC生成系统806可以使用该计算机可读代码来形成适当的掩模以在生成IC时使用。
由IC制造系统802执行的不同过程可以都在一个位置上例如由一方来实现。可选地,IC制造系统802可以是分布式系统,使得过程中的一些可以在不同的位置处被执行,并可以由不同方来执行。例如,以下阶段中的一些可在不同位置和/或由不同方执行:(i)合成表示IC定义数据集的RTL代码,以便形成要生成的电路的门级表示;(ii)基于门级表示,生成电路布局;(iii)根据电路布局,形成掩模;以及(iv)使用掩模制造集成电路。
在其它示例中,在集成电路制造系统处对集成电路定义数据集的处理可以配置系统以制造包括边缘测试和/或深度计算硬件的图形处理流水线,而无需处理IC定义数据集以便确定电路布局。例如,集成电路定义数据集可以定义可重构处理器(例如FPGA)的配置,并且该数据集的处理可以将IC制造系统配置为生成具有该定义的配置的可重构处理器(例如,通过将配置数据加载到FPGA)。
在一些实施例中,集成电路制造定义数据集在集成电路制造系统中被处理时可使集成电路制造系统生成如本文中所描述的设备。例如,集成电路制造系统以如上参考图8所描述的方式通过集成电路制造定义数据集进行的配置可以使如本文中所描述的设备得以制造。
在一些示例中,集成电路定义数据集可包括软件,该软件在数据集处定义的硬件上运行或与在数据集处定义的硬件组合运行。在图8所示的示例中,IC生成系统还可以由集成电路定义数据集配置,以在制造集成电路时,根据在集成电路定义数据集处定义的程序代码将固件加载到该集成电路上,或以其他方式向集成电路提供程序代码以用于与集成电路一起使用。
本领域中的技术人员将认识到,用于存储程序指令的存储设备可以被分布在网络中。例如,远程计算机可存储被描述为软件的过程的示例。本地或终端计算机可访问远程计算机并下载软件的一部分或全部以运行程序。可选地,本地计算机可以按需下载软件的片段,或在本地终端处执行一些软件指令而在远程计算机(或计算机网络)处执行一些软件指令。本领域中的技术人员也将认识到,通过利用本领域中的技术人员已知的常规技术,软件指令的全部或一部分可由专用电路(例如DSP、可编程逻辑阵列等)执行。
本文描述的方法可以由配置有软件的计算机执行,软件是以存储在有形存储介质上的机器可读形式,例如以包括用于配置计算机来执行所述方法的组成部分的计算机可读程序代码的计算机程序的形式,或以包括适合于当在计算机上运行程序时执行本文描述的任何方法的所有步骤的计算机程序代码方式的计算机程序的形式,并且其中计算机程序可以被体现在计算机可读存储介质上。有形(或非暂时性)存储介质的示例包括磁盘、拇指驱动器、存储卡等,且并不包括传播的信号。软件可适合于在并行处理器或串行处理器上执行,使得方法步骤可以按任何适当的顺序或同时被执行。
本文描述的硬件部件可以由在其上编码有计算机可读程序代码的非暂时性计算机可读存储介质生成。
存储在实现所公开的方面时使用的机器可执行数据的存储器可以是非暂时性介质。非暂时性介质可以是易失性的或非易失性的。易失性非暂时性介质的示例包括基于半导体的存储器,例如SRAM或DRAM。可用于实现非易失性存储器的技术的示例包括光学和磁性存储器技术、闪存、相变存储器、电阻式RAM。
对“逻辑”的特定引用是指执行一种功能或更多种功能的结构。逻辑的示例包括被布置成执行这些功能(一种/更多种功能)的电路。例如,这样的电路可包括晶体管和/或在制造过程中可用的其它硬件元件。借助示例,这样的晶体管和/或其它元件可以用于形成实现和/或包含存储器(例如寄存器、触发器、或锁存器)、逻辑运算器(例如布尔运算)、数学运算器(例如加法器、乘法器、或移位器)和互连的电路或结构。这样的元件可以作为定制电路或标准单元库、宏、或以其它抽象级被提供。可在特定的布置中将这样的元件互连。逻辑可包括固定功能的电路,且电路可被编程以执行一种功能或更多种功能;这样的编程可以由固件或软件更新或控制机构提供。被识别为执行一种功能的逻辑也可包括实现组成性功能或子过程的逻辑。在示例中,硬件逻辑具有实现固定功能操作、或多个操作、状态机或过程的电路。
当与已知的实现进行比较时,在本申请中阐述的概念在器件、装置、模块和/或系统(以及本文中所实现的方法)中的实现可以引起性能改进。性能改进可以包括增加的计算性能、减少的延迟、增加的吞吐量和/或减少的功耗中的一个或更多个。在(例如,在集成电路中)制造这样的器件、装置、模块和系统期间,性能改进可以与物理实现相折衷,从而改进制造方法。例如,性能改进可以针对布局面积进行权衡,从而与已知实现的性能匹配,但使用更少的硅。这可以例如通过以串行化方式重用功能块或在器件、装置、模块和/或系统的元件之间共享功能块来完成。相反,可以权衡在器件、装置、模块和系统的物理实现中产生改善(诸如减小的硅面积)的本申请中所阐述的概念以供改进性能。这可以通过例如在预定面积预算内制造模块的多个实例来完成。
如对技术人员将明显的是,本文给出的任何范围或设备值可以被扩展或改变而不失去所寻求的效果。
将理解的是,上面描述的益处和优点可以涉及一个实施例或可以涉及若干实施例。实施例不限于解决任何或全部所陈述的问题的那些实施例或具有任何或全部所陈述的益处和优点的那些实施例。
对“一个(an)”项目的任何引用指的是那些项目中的一个或更多个。术语“包括”在本文中用于意指包括所识别的方法块或元件,但这样的块或元件并不包括独有列表,且装置可包含额外的块或元件,并且方法可包含额外的操作或元件。此外,块、元件和操作本身并不是隐含地封闭的。
本文描述的方法的步骤可以按照任何适当的顺序被执行或在适当时同时被执行。在附图中的框之间的箭头示出方法步骤的一个示例顺序,但并不意欲排除其它顺序或多个步骤的并行执行。此外,各个块可以从任何方法中删除而不偏离本文描述的主题的精神和范围。上面描述的任何示例的方面可以与所描述的其它示例中的任一个的方面组合以形成另外的示例,而不失去所寻求的效果。在附图的元件被示为由箭头连接的场合,将认识到,这些箭头仅示出在元件之间的一个示例通信流(包括数据和控制消息)。在元件之间的流可以在任一方向上或在两个方向上。
申请人特此独立地公开了本文中所描述的每个单独特征以及两个或更多个这样的特征的任何组合,公开的程度是使得这样的特征或组合能够基于本说明书作为整体依据本领域技术人员的公知常识来实现,而无论这样的特征或特征的组合是否解决了本文中所公开的任何问题。鉴于上述描述,对于本领域技术人员明显的是,可在本发明的范围内进行各种修改。
本申请还提供了以下项目:
1.一种图形处理流水线,所述图形处理流水线被布置成在渲染空间中进行渲染,其中,所述渲染空间被细分成多个图块,每个图块被细分成多个微图块,每个微图块包括像素的相同排列,并且每个像素包括一个或更多个子采样位置的排列,
所述图形处理流水线包括边缘测试和/或深度计算硬件,并且其中,所述边缘测试和/或深度计算硬件包括一个或更多个硬件布置,每个硬件布置被布置成使用乘积之和来执行边缘测试或深度计算,每个硬件布置包括:
微图块分量硬件元件,所述微图块分量硬件元件包括被布置成使用所述渲染空间中图块内微图块的坐标和所述乘积之和来计算第一输出的硬件逻辑;
多个像素分量硬件元件,每个像素分量硬件元件包括被布置成使用相对于所述微图块的原点定义的不同像素的坐标以及所述乘积之和来计算多个第二输出之一的硬件逻辑;
一个或更多个子采样分量硬件元件,每个子采样分量硬件元件包括被布置成使用相对于像素的原点定义的子采样位置的坐标以及所述乘积之和来计算第三输出的硬件逻辑;
多个加法器,所述多个加法器被布置成通过针对每个输出结果组合所述第一输出、所述多个第二输出之一和第三输出的不同组合来并行生成所述乘积之和的多个输出结果。
2.根据项目1所述的图形处理流水线,其中,每个像素包括多个子采样位置,并且每个硬件布置包括多个子采样分量硬件元件,每个子采样分量硬件元件包括被布置成使用相对于像素的原点定义的不同子采样位置的坐标以及所述乘积之和来计算多个第三输出之一的硬件逻辑。
3.根据项目1所述的图形处理流水线,其中,所述硬件布置中的一个或更多个还包括:
多个多路复用器,所述多个多路复用器被布置成选择所述第一输出、所述多个第二输出之一和第三输出的所述不同组合。
4.根据项目1所述的图形处理流水线,其中,所述多个加法器包括:
多个加法和比较元件,每个加法和比较元件被布置成通过组合所述第一输出、所述多个第二输出之一和第三输出的不同组合来生成所述多个输出结果中不同的一个。
5.根据项目4所述的图形处理流水线,其中,每个像素包括多个子采样位置,并且每个硬件布置包括多个子采样分量硬件元件,每个子采样分量硬件元件包括被布置成使用相对于像素的原点定义的不同子采样位置的坐标以及所述乘积之和来计算多个第三输出之一的硬件逻辑,并且其中,所述硬件布置的一个或更多个还包括第一多个多路复用器,所述第一多个多路复用器中的多路复用器中的每一个具有输出端和多个输入端,其中,每个输入端被布置成从所述多个像素分量硬件元件接收所述多个第二输出中不同的一个,并且所述多路复用器被布置成选择所接收的第二输出中的一个,并且将所选择的第二输出经由所述输出端输出到所述多个加法和比较元件中的一个。
6.根据项目4所述的图形处理流水线,其中,所述硬件布置的一个或更多个还包括第二多个多路复用器,所述第二多个多路复用器中的多路复用器中的每一个具有输出端和多个输入端,其中,每个输入端被布置成从所述多个子采样分量硬件元件接收多个第三输出中不同的一个,并且所述多路复用器被布置成选择所接收的第三输出中的一个,并且将所选择的第三输出经由所述输出端输出到所述多个加法和比较元件中的一个。
7.根据项目1所述的图形处理流水线,其中,所述多个加法器包括所述多个加法器的第一子集和所述多个加法器的第二子集,
其中,所述像素分量硬件元件中的每一个还包括用于接收来自所述微图块分量硬件元件的所述第一输出的输入端,以及所述多个加法器的所述第一子集中的至少一个加法器,所述多个加法器的所述第一子集中的至少一个加法器被布置成将从所述微图块分量硬件元件接收的所述第一输出和由所述像素分量硬件元件计算的所述第二输出相加以生成中间结果,并且
其中,所述多个加法器的所述第二子集包括:
多个加法和比较元件,每个加法和比较元件被布置成通过对所述中间结果之一和第三输出的不同组合进行求和来生成所述多个输出结果中不同的一个。
8.根据项目7所述的图形处理流水线,其中,所述硬件布置的一个或更多个还包括第一多个多路复用器,所述第一多个多路复用器中的多路复用器的每一个具有输出端和多个输入端,其中,每个输入端被布置成从所述多个像素分量硬件元件接收所述中间结果中不同的一个,并且所述多路复用器被布置成选择所接收的中间结果之一,并且经由所述输出端将所选择的中间结果输出到所述多个加法和比较元件中的一个。
9.根据项目7所述的图形处理流水线,其中,每个像素包括多个子采样位置,并且每个硬件布置包括多个子采样分量硬件元件,每个子采样分量硬件元件包括被布置成使用相对于像素的原点定义的不同子采样位置的坐标以及所述乘积之和来计算多个第三输出之一的硬件逻辑,并且其中,所述硬件布置的一个或更多个还包括第二多个多路复用器,所述第二多个多路复用器中的多路复用器中的每一个具有输出端和多个输入端,其中,每个输入端被布置成从所述多个子采样分量硬件元件接收多个第三输出中不同的一个,并且所述多路复用器被布置成选择所接收的第三输出中的一个,并且将所选择的第三输出经由所述输出端输出到所述多个加法和比较元件中的一个。
10.根据项目1所述的图形处理流水线,其中,所述边缘测试和/或深度计算硬件包括被布置成执行边缘测试的至少一个硬件布置,其中,所述乘积之和对应于图元的边缘向量。
11.根据项目10所述的图形处理流水线,其中,由所述硬件布置生成的每个输出结果包括单个位。
12.根据项目11所述的图形处理流水线,其中,所述单个位包括所述第一输出、所述多个第二输出之一和第三输出之和的最高有效位。
13.根据项目10所述的图形处理流水线,其中,所述边缘测试和/或深度计算硬件包括被布置成执行边缘测试的多个硬件布置,其中,对于所述多个硬件布置中的每一个硬件布置的乘积之和对应于单个图元的不同边缘向量。
14.根据前述项目中任一项所述的图形处理流水线,还包括决策单元,所述决策单元包括硬件逻辑和用于接收来自所述微图块分量硬件元件的所述第一输出的输入端,所述决策单元的硬件逻辑被布置成确定当第二输出和第三输出的任何组合被加到所述第一输出时,是否会导致输出结果具有与所述第一输出不同的符号,并且响应于确定所述组合不能导致输出具有与所述第一输出不同的符号,输出所述第一输出的最高有效位。
15.根据项目1所述的图形处理流水线,其中,所述边缘测试和/或深度计算硬件包括被布置成执行深度计算的至少一个硬件布置,其中,所述乘积之和对应于图元的深度方程。
16.根据项目1所述的图形处理流水线,其中,所述边缘测试和/或深度计算硬件包括被布置成执行深度计算的硬件布置和被布置成执行边缘测试的多个硬件布置,其中,在被布置成执行深度计算的所述硬件布置中使用的乘积之和对应于图元的深度方程,并且在被布置成执行边缘测试的所述硬件布置中的每一个中使用的乘积之和对应于所述图元的不同边缘向量。
17.根据项目16所述的图形处理流水线,其中,所述图元包括平行边缘向量对,并且被布置成执行对应于一对平行边缘向量中的每一个边缘向量的边缘测试的两个硬件布置包括共享的像素分量硬件元件和共享的子采样分量硬件元件,使得所述第二输出和所述第三输出对于微图块内的每个像素和像素内的每个子采样各自被计算一次,并且被两个硬件布置使用。
18.根据项目1所述的图形处理流水线,其中,所述图形处理流水线以多种操作模式中的一种进行操作,每种操作模式对应于每个像素内一个或更多个子采样位置的不同排列,并且其中,所述多个加法器被布置成通过针对每个输出结果组合所述第一输出、所述多个第二输出之一和第三输出的不同组合来并行地生成对于所述乘积之和的多个输出结果,所述第三输出使用对于当前操作模式的子采样位置的排列中的子采样位置的坐标来计算。
19.一种在图形处理流水线中计算边缘测试输出值或深度计算值的方法,所述图形处理流水线被布置成在渲染空间中进行渲染,其中,所述渲染空间被细分成多个图块,每个图块被细分成多个微图块,每个微图块包括像素的相同排列,并且每个像素包括一个或更多个子采样位置,所述方法包括:
在第一硬件元件中,基于图块内微图块的坐标来计算第一输出;
在多个第二硬件元件的每一个中,基于微图块内像素的坐标来计算第二输出;
在一个或更多个第三硬件元件的每一个中,基于像素内子采样的坐标来计算第三输出;以及
将第一输出与第二输出和第三输出组合,以生成边缘测试输出值或深度计算值。
20.根据项目19所述的方法,其中,通过在多个加法和比较元件的每一个中组合所述第一输出、第二输出和第三输出的不同组合,并行生成多个边缘测试输出值或深度计算值。
21.根据项目20所述的方法,还包括:
确定所述第一输出、第二输出和第三输出的可能组合是否多于加法和比较元件;以及
响应于确定所述第一输出、第二输出和第三输出的可能组合多于加法和比较元件,选择具有减小的微图块大小的操作模式,使得微图块包括更少的像素。
22.根据项目20所述的方法,还包括:
确定所述第一输出、第二输出和第三输出的可能组合是否多于加法和比较元件;以及
响应于确定所述第一输出、第二输出和第三输出的可能组合多于加法和比较元件,在第一时钟周期中根据所述可能组合的第一子集中的每一个可能组合生成边缘测试输出值或深度计算值,并且在第二时钟周期中根据所述可能组合的第二子集中的每一个可能组合生成边缘测试输出值或深度计算值,其中,所述第一子集和第二子集不重叠。
Claims (22)
1.一种图形处理流水线(200),所述图形处理流水线(200)被布置成在渲染空间(100)中进行渲染,其中,所述渲染空间(100)被细分成多个图块(102),每个图块被细分成多个微图块(104),每个微图块包括像素(106)的相同排列,并且每个像素包括一个或更多个子采样位置(108)的排列,
所述图形处理流水线包括边缘测试和/或深度计算硬件(212),并且其中,所述边缘测试和/或深度计算硬件包括一个或更多个硬件布置(400、420),每个硬件布置(400、420)被布置成使用乘积之和来执行边缘测试或深度计算,每个硬件布置包括:
微图块分量硬件元件(402),所述微图块分量硬件元件(402)包括被布置成使用所述渲染空间中图块内微图块的坐标和所述乘积之和来计算第一输出的硬件逻辑;
多个像素分量硬件元件(404、424),每个像素分量硬件元件(404、424)包括被布置成使用相对于所述微图块的原点定义的不同像素的坐标以及所述乘积之和来计算多个第二输出之一的硬件逻辑;
一个或更多个子采样分量硬件元件(406),每个子采样分量硬件元件(406)包括被布置成使用相对于像素的原点定义的子采样位置的坐标以及所述乘积之和来计算第三输出的硬件逻辑;
多个加法器,所述多个加法器被布置成通过针对每个输出结果组合所述第一输出、所述多个第二输出之一和第三输出的不同组合来并行生成所述乘积之和的多个输出结果,并且
当执行所述边缘测试时输出所述结果的单个位或多于单个位以及当执行所述深度计算时输出完整结果。
2.根据权利要求1所述的图形处理流水线,其中,每个像素包括多个子采样位置,并且每个硬件布置包括多个子采样分量硬件元件,每个子采样分量硬件元件包括被布置成使用相对于像素的原点定义的不同子采样位置的坐标以及所述乘积之和来计算多个第三输出之一的硬件逻辑。
3.根据权利要求1所述的图形处理流水线,其中,所述硬件布置中的一个或更多个还包括:
多个多路复用器(410),所述多个多路复用器(410)被布置成选择所述第一输出、所述多个第二输出之一和第三输出的所述不同组合。
4.根据权利要求2所述的图形处理流水线,其中,所述硬件布置中的一个或更多个还包括:
多个多路复用器(410),所述多个多路复用器(410)被布置成选择所述第一输出、所述多个第二输出之一和第三输出的所述不同组合。
5.根据权利要求1所述的图形处理流水线,其中,所述多个加法器包括:
多个加法和比较元件(408),每个加法和比较元件被布置成通过组合所述第一输出、所述多个第二输出之一和第三输出的不同组合来生成所述多个输出结果中不同的一个。
6.根据权利要求5所述的图形处理流水线,其中,每个像素包括多个子采样位置,并且每个硬件布置包括多个子采样分量硬件元件,每个子采样分量硬件元件包括被布置成使用相对于像素的原点定义的不同子采样位置的坐标以及所述乘积之和来计算多个第三输出之一的硬件逻辑,并且其中,所述硬件布置的一个或更多个还包括第一多个多路复用器(410),所述第一多个多路复用器中的多路复用器中的每一个具有输出端和多个输入端,其中,每个输入端被布置成从所述多个像素分量硬件元件接收所述多个第二输出中不同的一个,并且所述第一多个多路复用器中的多路复用器中的每一个被布置成选择所接收的第二输出中的一个,并且将所选择的第二输出经由所述输出端输出到所述多个加法和比较元件中的一个。
7.根据权利要求5所述的图形处理流水线,其中,所述硬件布置的一个或更多个还包括第二多个多路复用器(410),所述第二多个多路复用器中的多路复用器中的每一个具有输出端和多个输入端,其中,每个输入端被布置成从所述多个子采样分量硬件元件接收多个第三输出中不同的一个,并且所述第二多个多路复用器中的多路复用器中的每一个被布置成选择所接收的第三输出中的一个,并且将所选择的第三输出经由所述输出端输出到所述多个加法和比较元件中的一个。
8.根据权利要求6所述的图形处理流水线,其中,所述硬件布置的一个或更多个还包括第二多个多路复用器(410),所述第二多个多路复用器中的多路复用器中的每一个具有输出端和多个输入端,其中,每个输入端被布置成从所述多个子采样分量硬件元件接收多个第三输出中不同的一个,并且所述第二多个多路复用器中的多路复用器中的每一个被布置成选择所接收的第三输出中的一个,并且将所选择的第三输出经由所述输出端输出到所述多个加法和比较元件中的一个。
9.根据权利要求1-8中任一项所述的图形处理流水线,其中,所述边缘测试和/或深度计算硬件包括被布置成执行边缘测试的至少一个硬件布置,其中,所述乘积之和对应于图元的边缘向量。
10.根据权利要求9所述的图形处理流水线,其中,由所述至少一个硬件布置生成的每个输出结果包括单个位。
11.根据权利要求10所述的图形处理流水线,其中,所述单个位包括所述第一输出、所述多个第二输出之一和第三输出之和的最高有效位。
12.根据权利要求9所述的图形处理流水线,其中,所述边缘测试和/或深度计算硬件包括被布置成执行边缘测试的多个硬件布置,其中,对于所述多个硬件布置中的每一个硬件布置的乘积之和对应于单个图元的不同边缘向量。
13.根据权利要求10所述的图形处理流水线,其中,所述边缘测试和/或深度计算硬件包括被布置成执行边缘测试的多个硬件布置,其中,对于所述多个硬件布置中的每一个硬件布置的乘积之和对应于单个图元的不同边缘向量。
14.根据权利要求11所述的图形处理流水线,其中,所述边缘测试和/或深度计算硬件包括被布置成执行边缘测试的多个硬件布置,其中,对于所述多个硬件布置中的每一个硬件布置的乘积之和对应于单个图元的不同边缘向量。
15.根据权利要求1-8和10-14中任一项所述的图形处理流水线,还包括决策单元(430),所述决策单元包括硬件逻辑和用于接收来自所述微图块分量硬件元件的所述第一输出的输入端,所述决策单元的硬件逻辑被布置成确定当第二输出和第三输出的任何组合被加到所述第一输出时,是否会导致输出结果具有与所述第一输出不同的符号,并且响应于确定所述组合不能导致输出具有与所述第一输出不同的符号,输出所述第一输出的最高有效位。
16.根据权利要求1-8和10-14中任一项所述的图形处理流水线,其中,所述边缘测试和/或深度计算硬件包括被布置成执行深度计算的至少一个硬件布置,其中,所述乘积之和对应于图元的深度方程。
17.根据权利要求1-8和10-14中任一项所述的图形处理流水线,其中,所述边缘测试和/或深度计算硬件包括被布置成执行深度计算的硬件布置和被布置成执行边缘测试的多个硬件布置,其中,在被布置成执行深度计算的所述硬件布置中使用的乘积之和对应于图元的深度方程,并且在被布置成执行边缘测试的所述硬件布置中的每一个中使用的乘积之和对应于所述图元的不同边缘向量。
18.根据权利要求17所述的图形处理流水线,其中,所述图元包括平行边缘向量对,并且被布置成执行对应于一对平行边缘向量中的每一个边缘向量的边缘测试的两个硬件布置包括共享的像素分量硬件元件和共享的子采样分量硬件元件,使得所述多个第二输出和所述第三输出对于微图块内的每个像素和像素内的每个子采样各自被计算一次,并且被两个硬件布置使用。
19.根据权利要求1-8、10-14和18中任一项所述的图形处理流水线,其中,所述图形处理流水线以多种操作模式中的一种进行操作,每种操作模式对应于每个像素内一个或更多个子采样位置的不同排列,并且其中,所述多个加法器被布置成通过针对每个输出结果组合所述第一输出、所述多个第二输出之一和第三输出的不同组合来并行地生成对于所述乘积之和的多个输出结果,所述第三输出使用对于当前操作模式的子采样位置的排列中的子采样位置的坐标来计算。
20.一种在图形处理流水线中计算边缘测试输出值或深度计算值的方法,所述图形处理流水线被布置成在渲染空间(100)中进行渲染,其中,所述渲染空间(100)被细分成多个图块(102),每个图块被细分成多个微图块(104),每个微图块包括像素(106)的相同排列,并且每个像素包括一个或更多个子采样位置(108),所述方法包括:
在第一硬件元件中,使用图块内微图块的坐标以及乘积之和来计算第一输出;
在多个第二硬件元件的每一个中,使用微图块内像素的坐标和所述乘积之和来计算第二输出;
在一个或更多个第三硬件元件的每一个中,使用像素内子采样的坐标和所述乘积之和来计算第三输出;以及
将第一输出与第二输出和第三输出组合以产生结果,以生成边缘测试输出值或深度计算值,其中所述边缘测试输出值包括所述结果的单个位或多于单个位并且所述深度计算值包括完整结果。
21.根据权利要求20所述的方法,其中,通过在多个加法和比较元件(408)的每一个中组合所述第一输出、第二输出和第三输出的不同组合,并行生成多个边缘测试输出值或深度计算值。
22.根据权利要求21所述的方法,还包括:
确定所述第一输出、第二输出和第三输出的可能组合是否多于加法和比较元件;以及
响应于确定所述第一输出、第二输出和第三输出的可能组合多于加法和比较元件,选择具有减小的微图块大小的操作模式,使得微图块包括更少的像素。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
GB1805608.5 | 2018-04-05 | ||
GB1805608.5A GB2572603B (en) | 2018-04-05 | 2018-04-05 | Edge and depth processing hardware |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110349074A CN110349074A (zh) | 2019-10-18 |
CN110349074B true CN110349074B (zh) | 2022-07-22 |
Family
ID=62202967
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910267068.9A Active CN110349074B (zh) | 2018-04-05 | 2019-04-03 | 边缘和深度处理硬件 |
Country Status (4)
Country | Link |
---|---|
US (5) | US10521950B2 (zh) |
EP (1) | EP3608878B1 (zh) |
CN (1) | CN110349074B (zh) |
GB (2) | GB2572603B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
GB2526598B (en) * | 2014-05-29 | 2018-11-28 | Imagination Tech Ltd | Allocation of primitives to primitive blocks |
GB2570172B (en) * | 2018-06-29 | 2020-02-12 | Imagination Tech Ltd | Conservative Rasterization Using Gradients |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6489966B1 (en) * | 1997-03-28 | 2002-12-03 | International Business Machines Corporation | Graphic processing device |
CN104183005A (zh) * | 2013-05-24 | 2014-12-03 | 三星电子株式会社 | 图形处理单元和基于图块的渲染方法 |
Family Cites Families (15)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5949428A (en) * | 1995-08-04 | 1999-09-07 | Microsoft Corporation | Method and apparatus for resolving pixel data in a graphics rendering system |
US6788301B2 (en) | 2001-10-18 | 2004-09-07 | Hewlett-Packard Development Company, L.P. | Active pixel determination for line generation in regionalized rasterizer displays |
JP2004056266A (ja) * | 2002-07-17 | 2004-02-19 | Ricoh Co Ltd | 像域分離装置、画像処理装置、画像形成装置、プログラム及び記憶媒体 |
US7307628B1 (en) | 2004-08-06 | 2007-12-11 | Nvidia Corporation | Diamond culling of small primitives |
GB0524804D0 (en) * | 2005-12-05 | 2006-01-11 | Falanx Microsystems As | Method of and apparatus for processing graphics |
US8861885B2 (en) * | 2009-08-26 | 2014-10-14 | Apple Inc. | Directional noise filtering |
US8836824B2 (en) * | 2011-06-02 | 2014-09-16 | Apple Inc. | Systems and methods for threshold-based luma channel noise reduction |
US10089774B2 (en) * | 2011-11-16 | 2018-10-02 | Qualcomm Incorporated | Tessellation in tile-based rendering |
GB2497302B (en) * | 2011-12-05 | 2017-04-12 | Advanced Risc Mach Ltd | Methods of and apparatus for processing computer graphics |
US9558585B2 (en) * | 2013-05-31 | 2017-01-31 | Arm Limited | Hidden surface removal in graphics processing systems |
US9536333B2 (en) * | 2013-10-17 | 2017-01-03 | Arm Limited | Method and apparatus for improved processing of graphics primitives |
JP6465563B2 (ja) * | 2014-05-14 | 2019-02-06 | キヤノン株式会社 | 画像処理装置、画像処理方法およびプログラム |
US9906981B2 (en) * | 2016-02-25 | 2018-02-27 | Nvidia Corporation | Method and system for dynamic regulation and control of Wi-Fi scans |
US10453170B2 (en) * | 2016-09-09 | 2019-10-22 | Intel Corporation | Minimum/maximum and bitwise and/or based coarse stencil test |
GB2558884B (en) * | 2017-01-12 | 2019-12-25 | Imagination Tech Ltd | Graphics processing units and methods using cost indications for sets of tiles of a rendering space |
-
2018
- 2018-04-05 GB GB1805608.5A patent/GB2572603B/en active Active
- 2018-04-05 GB GB2201516.8A patent/GB2600622B/en active Active
- 2018-05-16 US US15/981,102 patent/US10521950B2/en active Active
-
2019
- 2019-04-03 CN CN201910267068.9A patent/CN110349074B/zh active Active
- 2019-04-03 EP EP19167185.8A patent/EP3608878B1/en active Active
- 2019-12-03 US US16/702,457 patent/US10769839B2/en active Active
-
2020
- 2020-08-21 US US16/999,746 patent/US11238638B2/en active Active
-
2021
- 2021-12-21 US US17/557,227 patent/US11741654B2/en active Active
-
2023
- 2023-08-29 US US18/239,224 patent/US20230401779A1/en active Pending
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6489966B1 (en) * | 1997-03-28 | 2002-12-03 | International Business Machines Corporation | Graphic processing device |
CN104183005A (zh) * | 2013-05-24 | 2014-12-03 | 三星电子株式会社 | 图形处理单元和基于图块的渲染方法 |
Also Published As
Publication number | Publication date |
---|---|
GB2572603B (en) | 2022-03-23 |
US20230401779A1 (en) | 2023-12-14 |
US11238638B2 (en) | 2022-02-01 |
GB2600622A (en) | 2022-05-04 |
EP3608878A1 (en) | 2020-02-12 |
GB2600622B (en) | 2022-11-16 |
GB201805608D0 (en) | 2018-05-23 |
US20220114779A1 (en) | 2022-04-14 |
CN110349074A (zh) | 2019-10-18 |
US20200380759A1 (en) | 2020-12-03 |
US10769839B2 (en) | 2020-09-08 |
US20200105045A1 (en) | 2020-04-02 |
EP3608878B1 (en) | 2021-06-09 |
US10521950B2 (en) | 2019-12-31 |
US11741654B2 (en) | 2023-08-29 |
GB2572603A (en) | 2019-10-09 |
US20190311516A1 (en) | 2019-10-10 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US20230401779A1 (en) | Edge test and depth calculation in graphics processing hardware | |
US20230351653A1 (en) | Conservative rasterization | |
US20220284644A1 (en) | Conservative Rasterization Using Gradients | |
US20190311519A1 (en) | High Accuracy Texture Filtering in Computer Graphics | |
US20240005571A1 (en) | Rasterising Aliased Lines | |
EP4131143A1 (en) | Texture address generation | |
GB2606101A (en) | Edge and depth processing hardware | |
EP4134915A1 (en) | Texture address generation |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |