CN115311120A - 图形处理*** - Google Patents
图形处理*** Download PDFInfo
- Publication number
- CN115311120A CN115311120A CN202210419802.0A CN202210419802A CN115311120A CN 115311120 A CN115311120 A CN 115311120A CN 202210419802 A CN202210419802 A CN 202210419802A CN 115311120 A CN115311120 A CN 115311120A
- Authority
- CN
- China
- Prior art keywords
- tile
- primitive
- processing
- primitives
- rendered
- 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.)
- Pending
Links
- 238000012545 processing Methods 0.000 title claims abstract description 684
- 238000009877 rendering Methods 0.000 claims abstract description 138
- 238000000034 method Methods 0.000 claims description 128
- 230000008569 process Effects 0.000 claims description 44
- 239000003550 marker Substances 0.000 claims description 25
- 239000012634 fragment Substances 0.000 description 88
- 239000000872 buffer Substances 0.000 description 80
- 230000015654 memory Effects 0.000 description 42
- 230000004044 response Effects 0.000 description 16
- 238000005516 engineering process Methods 0.000 description 12
- 230000006870 function Effects 0.000 description 12
- 230000001960 triggered effect Effects 0.000 description 9
- 239000013598 vector Substances 0.000 description 9
- 238000005070 sampling Methods 0.000 description 7
- 238000012360 testing method Methods 0.000 description 7
- 238000004590 computer program Methods 0.000 description 5
- 230000000694 effects Effects 0.000 description 4
- 230000003287 optical effect Effects 0.000 description 4
- 230000036316 preload Effects 0.000 description 4
- 238000004891 communication Methods 0.000 description 3
- 238000002156 mixing Methods 0.000 description 3
- 238000002360 preparation method Methods 0.000 description 3
- 239000008186 active pharmaceutical agent Substances 0.000 description 2
- 230000008901 benefit Effects 0.000 description 2
- 230000003139 buffering effect Effects 0.000 description 2
- 238000013507 mapping Methods 0.000 description 2
- 230000007246 mechanism Effects 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 238000013468 resource allocation Methods 0.000 description 2
- 230000009471 action Effects 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 230000008030 elimination Effects 0.000 description 1
- 238000003379 elimination reaction Methods 0.000 description 1
- 238000003780 insertion Methods 0.000 description 1
- 230000037431 insertion Effects 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 230000002123 temporal effect Effects 0.000 description 1
- 230000009466 transformation Effects 0.000 description 1
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
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5027—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
-
- 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
- G06T17/00—Three dimensional [3D] modelling, e.g. data description of 3D objects
- G06T17/10—Constructive solid geometry [CSG] using solid primitives, e.g. cylinders, cubes
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T7/00—Image analysis
- G06T7/10—Segmentation; Edge detection
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T2207/00—Indexing scheme for image analysis or image enhancement
- G06T2207/20—Special algorithmic details
- G06T2207/20021—Dividing image into blocks, subimages or windows
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Geometry (AREA)
- Computer Graphics (AREA)
- General Engineering & Computer Science (AREA)
- Computer Vision & Pattern Recognition (AREA)
- Image Processing (AREA)
- Image Generation (AREA)
Abstract
本发明题为图形处理***。当使用基于图块的渲染来生成渲染输出时,在提供给图像处理流水线的一个或多个后续处理阶段以用于处理的渲染图块的序列的基元的序列中包括将触发整个图块的图形处理操作的执行的基元,比要触发整个该图块的图形处理操作的该基元所涉及的该图块提前至少一个图块。然后,如果在开始执行整个该图块的处理操作的该基元的该处理之后,确定将不针对执行整个该图块的处理操作的该基元所涉及的该图块处理其他基元,则致使该图形处理流水线的该一个或多个后续处理阶段中的至少一个后续处理阶段停止关于执行整个该图块的处理操作的该基元执行处理。
Description
背景技术
本文所述的技术涉及图形处理***,并且具体地讲,涉及基于图块的图形处理***。
通常通过首先将待显示的场景分割成多个类似的基本分量或“基元”来执行图形处理,这些基元然后经受期望的图形处理操作。图形“基元”通常为简单多边形的形式,诸如三角形。
每个基元在该阶段由顶点集合限定并表示为顶点集合。基元的每个顶点与表示该顶点的数据集合(诸如位置、颜色、纹理和其他属性数据)相关联。然后使用该数据(例如,当光栅化和渲染顶点涉及的基元时),以便生成图形处理***的期望渲染输出。
一旦已经生成并限定了基元及其顶点,它们就可以由图形处理器处理以生成期望的渲染输出,诸如用于显示的帧。
该过程基本上涉及确定覆盖待处理的输出区域的采样点阵列中的哪些采样点被基元覆盖,并且然后确定每个采样点应具有的外观(例如,就其颜色等而言)以表示该采样点处的基元。这些过程通常分别被称为光栅化和渲染。
光栅化过程确定应用于基元的采样位置(即,待用于表示渲染输出中的基元的采样点的(x,y)位置,例如待显示的帧)。这通常使用基元的顶点的位置来完成。
渲染过程然后导出数据,诸如表示采样点处的基元(即,在每个采样点处“着色”)所需的红色、绿色和蓝色(RGB)色值和“α”(透明度)值。这可以涉及应用纹理、混合采样点数据值等。
图1示出了典型的计算机图形处理***,其包括主机处理器(CPU)1、图形处理单元(GPU)3以及用于存储主机处理器1和图形处理器3所需和/或生成的数据的存储器5。
当正在主机处理器1上执行的应用程序需要来自图形处理器的图形处理(诸如待显示的帧)时,应用程序2将向正在主机处理器1上运行的图形处理器的驱动器4发送适当的命令和数据。
驱动器4然后将向图形处理器3发送适当的命令和数据以使其生成应用程序2所需的渲染输出。驱动器4通过写入存储器5中的数据结构6来将命令和数据发送到图形处理器3,这些数据结构6然后由图形处理器3读取。
由驱动器4提供的命令和数据将尤其包括用于“绘制”将被渲染以用于待由图形处理器3生成的渲染输出的基元的命令,以及表示待用于渲染输出的基元的顶点的相关联顶点数据。
发送到图形处理器3的命令致使图形处理器3尤其读取和处理顶点数据以生成渲染输出。图形处理器3通常将使用基元的顶点数据以将该基元光栅化为一个或多个片段,每个片段(潜在地)应用于渲染输出的区域。然后将渲染这些片段。
完成的渲染输出(例如,帧)可被写入存储器5中的帧缓冲区7中,可例如从该帧缓冲区提供完成的渲染输出以用于在显示设备诸如屏幕或打印机上显示。
一些图形处理***使用所谓的“基于图块的”渲染。在基于图块的渲染中,二维渲染输出(即,渲染过程的输出,诸如待显示的输出帧)被渲染为多个较小面积的子区域,通常称为“图块”。图块各自被单独渲染(通常一个接一个地)。然后重组渲染的图块以提供完整渲染输出(例如,用于显示的帧)。在此类布置中,渲染输出通常被划分(按区域)为规则大小和形状的渲染图块(它们通常为例如正方形或矩形)。
通常用于“拼接”“基于图块”的渲染的其他术语包括“分块”(渲染图块被称为“组块”)和“存储桶”渲染。下文将出于方便使用术语“图块”和“拼接”,但应理解,这些术语旨在涵盖所有另选和等效的术语和技术。
在基于图块的图形处理中,生成的渲染输出的几何形状(基元)被分类到渲染输出的相应区域中。该过程识别需要针对渲染输出的给定区域(并且因此渲染图块)处理的基元(例如,以避免不必要地渲染不是图块中实际上存在的基元),并且产生要针对渲染输出的相应区域处理(渲染)的基元的列表。然后,一旦已针对渲染输出区域准备了基元列表,每个渲染图块就通过光栅化和渲染针对涵盖渲染图块的区域列出的基元来处理。渲染输出的可针对其准备基元列表的区域可对应于例如单个渲染图块或多个渲染图块集合。
附图说明
现在将仅以举例的方式并参考附图来描述本文所述的技术的各种实施方案,其中:
图1示出了可根据本文所述技术的实施方案操作的示例性图形处理***;
图2示出了本文所述技术的实施方案中的驱动器和存储器数据结构;
图3示出了可根据本文所述技术的实施方案操作的示例性图形处理器和图形处理流水线;
图4示出了基于图块的渲染;
图5示出了图3的图形处理器和图形处理流水线的操作的示例;并且
图6至图9示出了一个实施方案中的图3的图形处理器和图形处理流水线的操作。
在附图中适当的情况下,类似的附图标号用于类似的部件。
具体实施方式
申请人相信,对于基于图块的图形处理和处理器仍然存在的改进的范围。
本文所述技术的第一实施方案包括一种在使用基于图块的渲染来生成渲染输出时操作图形处理器的方法,其中正在生成的渲染输出的多个图块被单独渲染,并且所述渲染图块被组合以形成所述渲染输出,所述图形处理器可操作以执行图形处理流水线,所述图形处理流水线至少包括基元提供阶段和一个或多个后续处理阶段,其中所述基元提供阶段可操作以向所述一个或多个后续处理阶段提供要针对渲染图块的序列中的相应渲染图块处理的基元以用于处理,并且所述一个或多个后续处理阶段可操作以关于由所述基元提供阶段提供以用于处理的基元执行一个或多个处理操作;所述方法包括:
当向所述图形处理流水线的所述一个或多个后续处理阶段提供要针对多个渲染图块的序列中的相应图块处理的基元以用于处理时,所述基元提供阶段:
对于所述多个渲染图块的序列中的图块,在提供给所述图形处理流水线的所述一个或多个后续处理阶段以用于处理的所述渲染图块的序列的基元的序列中包括基元,所述基元将触发整个所述图块的图形处理操作的执行,并且与使得应该仅当要针对要触发整个所述图块的所述图形处理操作的所述基元所涉及的所述图块处理另一个基元时才执行要针对整个所述图块执行的所述图形处理操作的条件相关联;
在所述渲染图块的序列的所述基元的序列中包括将触发整个所述图块的所述图形处理操作的所述执行的所述基元,比要触发整个所述图块的图形处理操作的所述基元所涉及的图块提前至少一个图块;
所述方法还包括:
所述图形处理流水线的后续处理阶段处理所述基元,所述基元将触发所述基元所涉及的整个所述图块的所述图形处理操作的所述执行,而不等待是否要针对该图块处理任何其他基元的任何确定;以及
当在开始执行整个所述图块的处理操作的所述基元的所述处理之后,确定将不针对执行整个所述图块的处理操作的所述基元所涉及的所述图块处理其他基元时,致使所述图形处理流水线的所述一个或多个后续处理阶段中的至少一个后续处理阶段停止关于执行整个所述图块的处理操作的所述基元执行处理。
本文所述技术的第二实施方案包括一种可操作以使用基于图块的渲染来生成渲染输出的图形处理器,其中正在生成的渲染输出的多个图块被单独渲染,并且所述渲染的图块被组合以形成所述渲染输出,所述图形处理器可操作以执行图形处理流水线;
由所述图形处理器执行的所述图形处理流水线包括:
基元提供电路,所述基元提供电路被配置为向所述图形处理流水线的一个或多个后续处理阶段提供要针对渲染图块的序列中的相应渲染图块处理的基元以用于处理;和
在所述基元提供电路之后的一个或多个处理阶段,所述一个或多个处理阶段可操作以关于由所述基元提供电路提供以用于处理的基元执行一个或多个处理操作;
其中:
当向所述图形处理流水线的所述一个或多个后续处理阶段提供要针对多个渲染图块的序列中的相应图块处理的基元以用于处理时,所述基元提供阶段可操作以:
对于所述多个渲染图块的序列中的图块,在提供给所述图形处理流水线的所述一个或多个后续处理阶段以用于处理的所述渲染图块的序列的基元的序列中包括基元,所述基元将触发整个所述图块的图形处理操作的执行,并且与使得应该仅当要针对要触发整个所述图块的所述图形处理操作的所述基元所涉及的所述图块处理另一个基元时才执行要针对整个所述图块执行的所述图形处理操作的条件相关联;以及
在所述渲染图块的序列的所述基元的序列中包括将触发整个所述图块的所述图形处理操作的所述执行的所述基元,比要触发整个所述图块的图形处理操作的所述基元所涉及的图块提前至少一个图块;并且所述图形处理器被配置为使得:
所述图形处理流水线的后续处理阶段在接收到要触发基元所涉及的整个所述图块的所述图形处理操作的所述执行的所述基元时将处理所述基元,所述基元将触发所述基元所涉及的整个所述图块的所述图形处理操作的所述执行,而不等待是否将针对所述图块处理任何其他基元的任何确定;
以及使得:
当在开始执行整个所述图块的处理操作的基元的所述处理之后,确定将不针对执行整个所述图块的处理操作的所述基元所涉及的所述图块处理其他基元时,将致使所述图形处理流水线的所述一个或多个后续处理阶段中的至少一个后续处理阶段停止关于执行整个所述图块的处理操作的所述基元执行处理。
本文所述技术涉及基于图块的图形处理和图形处理器,其中图块(和那些图块的基元)的序列被发送通过图形处理流水线以用于处理(使得图块将例如一个接一个地生成)。因此,在本文所述技术中,多个图块(以及那些图块的基元)的序列被传递到并通过图形处理流水线,以便生成渲染的输出图块的对应序列。
在本文所述的技术中,可以提供触发整个渲染图块的图形处理操作的执行的基元。例如,这可能用于预加载然后在渲染图块的“实际”基元时将使用的图块的数据值。例如,可能期望提前填充图块的深度(Z)和/或模版(S)缓冲区,例如通过默认值和/或先前确定值的集合。触发整个图块的操作(诸如深度值的加载)的单基元的使用会促进以更有效的方式执行此类“预加载”操作。
申请人已经认识到,虽然此类“完整图块”基元可用于已更有效的方式执行针对图块的一些初始操作,但实际上可能存在完整图块操作可能实际上不需要的情况,例如,因为实际上可能不要针对图块处理“实际”基元(其可以是相对常见的发生)。在此类情况下,响应于“完整图块”基元的“完整图块”操作的任何执行将是不必要和冗余的。因此,本文所述技术允许“完整图块”基元被“有条件地”处理,即被设置为应该仅当要针对图块处理其他基元时才执行“完整图块”基元操作。
在这方面,申请人已经进一步认识到,在其中此类“条件”完整图块基元在基元实际上所涉及的图块的开始处发布的情况下,然后将相对简单的是等待并且查看是否也开始针对图块处理任何“实际”基元,然后触发“完整图块”基元处理。因此,在该情况下,“完整图块”基元可简单地在图形处理流水线中的适当点处停滞,直到要被处理的另一个“实际”基元到达。
然而,在这方面,申请人进一步认识到,在由“完整图块”基元触发的操作涉及例如预加载图块所需的数据的情况下,将期望的是发布和处理在基元所涉及的实际图块之前的基元(即,使得在所讨论的图块的任何“实际”基元开始被处理之前,应当(有希望)已经加载预加载的数据)。因此,在该情况下,可在基元应用于的实际图块之前的一个或多个图块发布“完整图块”基元。因此,在该情况下,如果“完整图块”基元然后停滞直到诸如基元所涉及的图块的实际基元开始被处理的时间,也可能潜在地使一个或多个中间图块的基元停滞(并且需要其的缓冲),这将是不期望的。
为了允许这一点,在本文所述技术中,并非使“条件”完整图块基元停滞直到确定了完整图块基元所涉及的图块的实际基元将被处理,代替地以任何方式处理完整图块基元而不等待任何其他基元是否需要针对所讨论的图块进行处理的任何确定,但此后,在可确定将不需要针对完整图块基元所涉及的图块处理基元的情况下,然后(尝试)停止涉及完整图块基元的剩余处理(其将因此为冗余的)。
这样做的效果然后是在等待确定是否实际上需要完整图块基元的处理时,无需缓冲和停滞大量基元(例如,针对中间图块),但另一方面,***然后可仍然在可稍后确定该基元的处理是不必要的情况下适时地剔除和停止针对完整图块基元的任何剩余处理。此外,并且如下文将进一步讨论的,申请人相信,通常应当合理地可能的是稍后确定在充分的时间中不需要完整图块基元的处理(其中这是情况)来停止针对完整图块基元的相对大量的任何不必要的处理,尽管已经允许进行完整图块基元的处理。因此,本文所述技术仍然可至少实现针对完整图块基元的不必要处理的合理消除(其中不需要执行),但不需要例如停滞和/或缓冲图形处理流水线中的大量基元和处理。
本文所述技术中的正在生成的渲染输出可以是将由图形处理器生成(渲染)的任何合适和期望的输出。待由图形处理器生成(渲染)的渲染输出通常可以是旨在用于在显示设备诸如屏幕或打印机上显示的帧,但也可以例如包括旨在用于稍后渲染遍历的中间数据(也称为“渲染到纹理”输出)等。
渲染输出通常将被表示为采样位置的(矩形)阵列,例如表示图像,其中生成(渲染)渲染输出包括图形处理器确定要用于渲染输出(帧)的每个采样位置的颜色(或灰度)值。
本文所述技术涉及基于图块的图形处理。因此,渲染输出(区域)被分为多个渲染图块以出于渲染目的((由图形处理器)在图块基础上对图块进行处理)。
渲染输出可出于渲染目的而被划分成的图块可以是任何合适和期望的此类图块。每个图块应当并且在一个实施方案中确实对应于渲染输出的相应区域。渲染图块的大小和形状通常可由图形处理器被配置为使用和处理的图块配置决定。
在一个实施方案中,渲染图块全部是相同的大小和形状(即,规则设定尺寸和成形的图块在所使用的实施方案中),尽管这不是必需的。图块在一个实施方案中是矩形的并且在一个实施方案中是正方形的。可根据需要选择图块的大小和数量。在一个实施方案中,每个图块的大小为16×16或32×32个采样位置(其中渲染输出随后被分为许多此类图块,如使用的渲染输出大小和形状所需的那么多)。
在本文所述技术中,基元提供阶段(电路)向图形处理流水线的后续处理阶段提供要针对多个渲染图块的序列中的相应图块处理的基元以用于处理。因此,例如,并且在一个实施方案中,基元提供阶段(电路)将向图形处理流水线的后续处理阶段提供待处理的第一图块的基元的集合(序列),然后是待处理的下一个图块的基元的集合(序列),然后是待处理的下一个图块的基元的集合(序列)等。
在一个实施方案中,序列中的每个图块的开始和结束被指示为图形处理流水线的后续处理阶段中的一者或多者。这可以任何合适和期望的方式完成,例如,并且在一个实施方案中,通过在由基元提供阶段(电路)提供的基元序列中包括适当的“图块开始”和/或“图块结束”指示(标记,例如命令)来完成。在这方面可使用显式(和不同)的图块开始和图块结束标记,或者例如,可存在用于表示图块之间的边界的(单个)指示,诸如仅使用图块开始标记或仅使用图块结束标记来指示图块的开始/结束(以及相应地,先前图块的结束/下一个图块的开始)。
因此,在一个实施方案中,基元提供阶段(电路)还在其向图形处理流水线的后续处理阶段发送的基元序列中包括图块开始标记和/或图块结束标记。
在一个实施方案中,显式(和不同)的图块开始和图块结束标记两者以及仅单个标记(例如,开始标记)可用于表示和分离序列中的图块。在一个实施方案中,序列中的一种类型的图块使用显式的图块开始和结束标记来表示(并且使用这写标记),但序列中的另一种类型的图块仅使用单个标记来表示此类图块。在一个实施方案中,包括从基元列表读取的基元的图块使用序列中的图块开始和图块结束标记来表示,但包括将触发整个图块的图形处理操作的执行的基元的图块仅使用图块开始标记来表示序列中的此类图块的存在。当然,其他布置将是可能的。
基元提供阶段(电路)可以是可提供向图形处理流水线的后续处理阶段提供用于处理的基元的任何合适和期望的(图形处理流水线的)图形处理阶段(电路)。
在一个实施方案中,基元提供阶段(电路)至少部分地包括基元列表读取阶段(电路),该基元列表读取阶段可以并且被配置为读取针对正在生成的渲染输出的相应区域准备的基元的列表以确定要针对渲染图块处理的基元,并且然后将渲染图块的基元传递到图形处理流水线的一个或多个(后续)阶段以用于相应地处理。
对应地,在一个实施方案中,图形处理器和图形处理流水线包括(在基元提供阶段(电路)之前)基元列表准备阶段(电路)(“拼接器”),其准备渲染输出的相应区域的基元列表,并且基元列表读取器然后读取由基元列表准备阶段(“拼接器”)准备的基元列表,并且将这些读取的基元传递到图形处理流水线的一个或多个(后续)阶段以用于处理。
在该情况下,在一个实施方案中,基元列表准备阶段(“拼接器”)可准备基元列表的渲染输出的区域可对应于单个渲染图块和/或多个渲染图块的集合(例如,在“层级拼接”布置的情况下)。因此,取决于如何列出基元,基元列表读取器可从单个基元列表或多个基元列表读取任何特定渲染图块的基元。
基元列表准备存储(“拼接器”)可根据需要使用例如精确分箱或边界框分箱。
在一个实施方案中,基元提供阶段(电路)还包括资源分配器(资源分配电路),该资源分配器可操作以及被配置为从基元列表读取器接收基元,分配用于处理那些基元的图形处理器和图形处理流水线的必要资源,并且然后向图形处理流水线的一个或多个后续阶段提供基元以用于处理。
在本文所述技术中,以及向图形处理流水线的一个或多个后续处理阶段提供要针对多个渲染图块的序列中的相应图块处理的基元的序列以用于处理(例如,并且在一个实施方案中,基于对应于正在生成的渲染输出的相应区域(例如,渲染图块)的基元列表),基元提供阶段(电路)还能够并且可操作以在提供给图形处理流水线的一个或多个后续处理阶段以用于处理的渲染图块的序列的基元的序列中包括触发整个渲染图块的图形处理操作的执行的基元。
“完整图块”基元针对整个图块执行的图形处理操作可以是任何合适和期望的图形处理操作。
它应是在处理所讨论的图块的任何“实际”基元之前将执行的操作(因为它在所讨论的图块的任何“实际”基元之前***图块和基元的序列中),但另外可以是在处理图块(以及以其整体的图块)的实际基元之前将执行的任何合适和期望的操作。
在一个实施方案中,完整图块基元执行的图形处理操作是加载(设置)整个图块的数据值的操作(即,它是“预加载”图块的数据值的操作)。这些数据值可以是图块的任何合适和期望的数据值,诸如在处理图块的其他基元时将使用的数据值和/或直接影响图块的输出的数据值。
在一个实施方案中,图形处理操作(直接)影响(写入)渲染输出的采样位置。
例如,图形处理操作可以是将图块的每个采样位置的值设置为相应的特定(在所选实施方案中、在预定实施方案中)值的操作。在该情况下,图块的采样位置可被设置为彼此不同的值,或者图块的每个采样位置可被设置为相同值(作为每个其他采样位置的值)。
这可例如用于背景加载操作,其中加载用于整个图块的背景图像或图案。
在一个实施方案中,图形处理操作设置与渲染输出相关联的数据值,但关于图块的整个区域(对于图块中的所有采样位置),其不是渲染输出自身。在该情况下,在一个实施方案中,图形处理操作是设置深度值和/或模板值和/或图形处理器用于生成渲染输出的其他值的操作。(在此类实施方案中,“完整图块”图形处理操作相应地将间接影响渲染输出)。
因此,在一个实施方案中,“完整图块”基元执行的图形处理操作是用于加载随后在渲染图块的“实际”基元(如果有的话)时将使用的数据值的操作。在该情况下,操作可例如用于加载先前确定的数据值(例如,从先前的渲染遍历)的集合和/或预定义值(例如,默认值)的集合。如果需要,它也可用于在处理图块之前“清除”数据值的集合。
在一个实施方案中,图形处理操作用于加载所讨论的图块的深度值和/或模板值,即在针对图块处理的“实际”基元之前利用图块的值集合来填充深度和/或模板缓冲区。因此,在一个实施方案中,图形处理器和图形处理流水线可操作以在深度和/或模板缓冲区中存储图块的深度和/或模板值,并且由“完整图块”基元执行的图形处理操作包括将深度和/或模板值加载到深度和/或模板缓冲区中。
可以在本文所述技术中包括针对给定渲染输出(例如,帧)渲染的图块的序列中的仅单个图块的“完整图块”基元(并且在一个实施方案中,即做了什么)。
然而,在一个实施方案中,在针对给定渲染输出(例如,帧)渲染的图块的序列中包括多个渲染图块的“完整图块”基元。因此,在该情况下,多个“完整图块”基元包括在渲染输出的渲染图块序列的基元序列中,每个基元例如涉及序列中的相应稍后渲染图块。
在一个实施方案中,发布“完整图块”基元,并且针对渲染输出(所讨论的渲染输出)(例如,帧)的每个渲染图块包括“完整图块”基元。因此,在该情况下,对于构成所讨论的渲染输出(例如,帧)的每个图块将发布(一个)完整图块基元。这可例如在图形处理操作将应用于(针对以下执行)作为整体(对于整个渲染输出(例如,帧))的渲染输出(例如,帧)的情况下完成,例如在期望预加载深度或帧的其他值的情况下。
将触发整个渲染图块的图形处理操作的执行的基元可通过基元提供阶段(电路)的任何合适且期望的元件(例如,部件)包括在渲染图块序列的基元序列中。
在基元提供阶段(电路)包括资源分配器的情况下,然后在一个实施方案中,资源分配器操作以(并且被配置为)在提供给图形处理流水线的一个或多个后续处理阶段的渲染图块的序列的基元的序列中包括将触发整个图块的图形处理操作的执行的基元。因此,在该情况下,资源分配器将例如并且在一个实施方案中接收图块和要针对那些图块渲染的基元的序列(例如并且在一个实施方案中从基元列表读取器接收),并且然后在该接收的图块和基元的序列之前和中的适当位置处***“完整图块”基元。
将触发整个渲染图块的图形处理操作的执行的基元可包括在渲染图块序列的基元序列中的任何合适和期望的位置处。如上所讨论,将触发整个渲染图块的图形处理操作的执行的基元应当并且在一个实施方案中在所讨论的渲染图块的任何“实际”基元之前包括在图块序列的基元序列中(因为其应当并且在一个实施方案中触发要在渲染所讨论的图块的任何“实际”基元前(之前)执行的图形处理操作)。除此之外,“完整图块”基元可包括在渲染图块序列的基元序列中的任何合适和期望的位置处。例如,其可包括在给定(不同)渲染图块的基元序列的开始处,例如并且在一个实施方案中,在从渲染图块的基元列表读取的任何基元之前,并且在一个实施方案中紧接在图块开始/先前图块结束标记(如果有的话)之后。
在一个实施方案中,将触发整个渲染图块的图形处理操作的执行的(至少一个)基元包括在渲染图块的序列的基元的序列中,这是通过在序列中将其包括序列中的其他(不同)渲染图块之间(即,在“完整图块”基元不涉及的渲染图块之间)。因此,在该情况下,“完整图块”基元将通过将其包括在序列中的相应渲染图块之间而包括在渲染图块的序列中。
在一个实施方案中,“完整图块”基元包括在渲染图块的序列中并且作为单独图块(作为独立图块)(其将简单地触发完整图块基元的渲染),即使得渲染图块的序列包括待渲染的不同图块,其中针对其的待渲染的基元是完整图块基元,与序列中的其他图块分开(例如,在其间)。因此,在该情况下,可能存在指示先前图块结束的图块边界,然后是“完整图块”基元的图块,然后是指示“完整图块”基元图块与序列中的下一个图块之间的边界的指示。例如,并且在一个实施方案中,可在图块开始标记之后***完整图块基元,该图块开始标记识别与完整图块基元相关联的图块的开始,并且然后是序列中的下一个图块的图块开始标记。
因此,在一个实施方案中,“附加”图块***在与完整图块基元相关联(并且指示完整图块基元应用于的图块)的渲染图块的序列中。在一个实施方案中,用于触发完整图块基元的处理的序列中的该附加图块仅与完整图块基元相关联(仅包含完整图块基元)(并且不与任何其他基元相关联或包括任何其他基元(无论是针对完整图块基元所涉及的图块还是以其他方式的图块))。
因此,在一个实施方案中,在要针对图块处理“完整图块”基元的情况下,在一个实施方案中将在渲染图块的序列中***附加图块,该附加图块用于触发所讨论的图块的完整图块基元的处理,其然后将是序列中的另一个图块,该图块将触发(并为其列出)要针对图块处理的任何其他基元(例如,并且在一个实施方案中,如从所讨论的图块的一个或多个基元列表读取)。在该情况下,并且在一个实施方案中,一个或多个中间图块在序列中应介于完整图块基元的图块以及完整图块基元所涉及的图块的其他基元(如果有的话)的稍后图块之间。
因此,在该情况下,实际上并且在一个实施方案中,完整图块基元所涉及的图块的两个实例将包括在渲染图块的序列中,即仅触发图块的“完整图块”基元的处理的图块的较早实例,以及然后将包括和触发从所讨论的图块的基元列表中读取的任何基元的处理的序列中的图块的稍后实例。
因此,在一个实施方案中,本文所述技术的方法包括(并且基元提供阶段(电路)被配置为),当完整图块基元要用于图块时,在提供给图形处理流水线的后续阶段的渲染图块的序列中包括该图块两次,其中图块的第一实例触发图块的完整图块基元的处理,并且然后图块的稍后(第二)实例触发从所讨论的图块的基元列表读取的任何基元的处理。
要触发完整图块基元的处理的图块的实例应当并且在一个实施方案中确实仅列出图块的完整图块基元(即,将不包括或触发从所讨论的图块(或任何其他图块)的基元列表读取的任何基元的处理)。
在一个实施方案中,渲染输出(例如,待显示的帧)的每个图块具有识别渲染输出中的图块的相应标识符(例如,图块索引)。因此,在该情况下,在给定图块的两个实例包括在渲染输出的渲染图块序列中的情况下,两个实例即仅触发图块的“完整图块”基元的处理的图块的较早实例,以及然后用于触发从所讨论的图块的基元列表读取的任何基元的处理的图块的稍后实例,图块的两个实例将用相同的图块索引(标识符)来索引以指示它们涉及渲染输出的相同图块,但包括在图块的每个不同实例的序列中的基元将是不同的。
当然,其他布置将是可能的。
在本文所述技术中,将触发整个渲染图块的图形处理操作的执行的基元(在可能的情况下)包括在渲染图块序列的基元序列中,在其所涉及(即,将被处理用于)的渲染图块之前,即使得其将存在于渲染图块序列的基元序列中,在从所讨论的渲染图块的基元列表读取的任何基元之前。
将触发整个渲染图块的图形处理操作的执行的基元应当并且在一个实施方案中包括在渲染图块序列的基元序列中,比该“完整图块”基元实际应用于的渲染图块提前至少一个图块,即使得渲染图块序列的基元序列将包括“完整图块”基元,然后是“完整图块”基元不涉及的一个或多个其他图块(以及这些图块的任何基元),然后是“完整图块”基元所涉及的渲染图块。
换句话说,完整图块基元将由后续处理阶段接收以用于在所讨论的图块的其他基元(如果有的话)之前处理,并且后续处理阶段将接收“完整图块”基元,然后是一个或多个不同图块(其基元),之后接收“完整图块”基元所涉及的图块(其任何其他(另外的)基元)。
在提供给图形处理流水线的一个或多个后续处理阶段的渲染图块的序列中,至少一个“中间”图块应存在于“完整图块”基元和其所涉及的图块之间。以这种方式可能仅存在单个中间图块,但在一个实施方案中存在多个中间块。
通常,在一个实施方案中,“完整图块”基元包括在渲染图块的序列中,在其所涉及的图块之前充分远,以便(尝试)隐藏完整图块基元执行的(例如,预加载)操作的任何延迟(即,使得当包含图块的“实际”基元的图块的第二实例到达时,所有的期望数据都应被预加载,使得所讨论的图块的实际基元的处理的停滞应(希望)被避免)。这可取决于许多因素,诸如任何中间图块的任何处理可花费的时间(例如,在那些图块中存在多少实际基元以及它们要经历的处理(例如,片段着色))。
通常,优选尝试在渲染输出的图块序列中尽可能早地***任何“完整图块”基元图块。
在一个实施方案中,存在对于在任何给定时间可发布(“飞行中”)的“完整图块”基元图块的数量的限制。
因此,在一个实施方案中,在所选实施方案中并且在预定义实施方案中,存在可在任何给定时间活动的“完整图块”基元图块的特定最大数量,并且基元提供阶段(电路)被配置为(尝试)通过一旦已达到此类图块的最大数量就不将任何另外的“完整图块”基元图块发布到序列中来确保不超过“完整图块”基元图块的最大数量)(例如并且在一个实施方案中),除非并且直到较早发布的“完整图块”基元图块已经完成(例如,因为其已经完成其处理或以其他方式已被丢弃,例如以本文所述技术的方式)。
这可帮助例如避免在具有早期“完整图块基元”图块的“实际”基元的图块不能例如获得对图块缓冲区的访问的情况下发生的死锁,因为在图块缓冲区中不存在用于其的空间,使得较早“完整图块”基元图块将永远不会被释放。因此,在一个实施方案中,“活动”完整图块基元图块的最大允许数量是基于相关缓冲区的(最大)容量并根据该容量来设置,该相关缓冲区将存储将由完整图块“预加载”的数据,诸如关于图形处理器和图形处理流水线支持(例如,针对所讨论的渲染输出)的缓冲区(例如,ZS缓冲区)的数量。
此处还应注意,“完整图块基元”图块与触发渲染图块序列中的该图块的实际基元的渲染的图块之间的中间图块可以是其他“完整图块”基元图块或将触发“实际”基元(即,如从基元列表读取)的渲染的其他图块。因此,例如,实际上存在触发不同渲染图块的序列的“完整图块”基元处理的“完整图块”基元图块的序列,然后是用于触发那些图块的“实际”基元的渲染的那些图块的第二实例,和/或可存在“完整图块”基元图块,然后是一个或多个“实际”基元图块,然后是另一个“完整图块”基元图块,然后是一个或多个“实际”基元图块等。这也可以并且在一个实施方案中在给定渲染输出的渲染图块的序列内变化。
例如,并且在一个实施方案中,当首先开始给定渲染输出(例如,待显示的帧)时,在序列的开始可存在两个或更多个“完整图块”基元图块的序列(例如,多至此类图块的最大允许数量),其然后是它们的对应“实际”基元图块,其中另外的“完整图块”基元图块(渲染输出的其他图块)包括在序列中(在序列中的稍后“位置”),例如并且在一个实施方案中,如以及在较早“完整图块”基元图块(并且具体地由那些图块使用的缓冲区(例如,ZS缓冲区))的一者(或多者)被完成(不再需要)时。
对应地,本文所述技术(以及基元提供电路,例如资源分配器)的方法在一个实施方案中可以并且在一个实施方案中确实操作以在包含来自多边形列表读取器的渲染输出的“实际”基元的接收图块之前***“完整图块”基元(触发“完整图块”基元操作的图块)。
当然,其他布置将是可能的。
可以任何合适的和期望的方式向基元提供阶段(电路)指示在渲染输出的渲染图块序列的基元序列中包括“完整图块”基元的需要。在一个实施方案中,这通过图形处理器的驱动器来实现,该驱动器提供适当的命令和/或数据以触发在渲染图块的渲染图块序列的基元序列中包括“完整图块”基元,作为驱动器向图形处理器提供以触发所讨论的渲染输出的生成的命令和数据的一部分。
例如,驱动器可在被提供以致使图形处理器生成渲染输出的命令序列中包括用于触发包括一个或多个期望“完整图块”基元的一个或多个适当命令。驱动器还可对应地提供适当数据,其将用于确定如何处理一个或多个“完整图块”基元(例如,并且在一个实施方案中,根据其要执行的图形处理操作)。
在一个实施方案中,发布渲染输出的图块的“完整图块”基元的需要通过所讨论的渲染输出的适当描述符(例如,帧缓冲区描述符)来指示。例如,并且在一个实施方案中,描述要针对渲染输出(即,作为整体的渲染输出的状态等)执行的整体处理的描述符(帧缓冲区描述符)可用于指示将针对渲染输出发布完整图块基元(在期望的情况下)。
在一个实施方案中,要针对渲染输出的一个(和每个)完整图块基元执行的实际处理也由渲染输出的描述符(由帧缓冲区描述符)指示。
如上文所讨论,一个或多个“完整图块”基元还与仅当开始针对“完整图块”基元所涉及的图块处理其他基元时才处理基元的条件相关联。再次,在一个实施方案中,这可由驱动器以任何合适和期望的方式指示,例如作为状态信息和/或其他元数据(例如,与“完整图块”基元相关联的描述符)的一部分。
在一个实施方案中,驱动器还指示例如并且在一个实施方案中可安全地预加载(在任一次的飞行中)的“完整图块”基元图块的最大数量(如上所讨论)作为描述符的一部分。
在一个实施方案中,存在渲染输出的描述符(例如,帧缓冲区描述符),该描述符指示针对所讨论的渲染输出启用(应进行)“完整图块”基元的使用,以及完整图块基元要执行的操作的类型(其是“条件”)。在一个实施方案中,该描述符也指示可安全地预加载多少“完整图块”基元图块。
该配置数据(描述符)可例如并且在一个实施方案中由驱动器适当地存储在存储器中,其中图形处理器然后在生成所讨论的渲染输出时从存储器读取该配置数据(描述符)。
在一个实施方案中,基元提供阶段(电路)(例如并且在一个实施方案中,资源分配器)然后使用该信息来确定是否要针对所讨论的渲染输出发布“完整图块”基元(和图块)以及发布哪些。在一个实施方案中,基元提供阶段(电路)(例如,资源分配器)还在图块到达之前从基元列表读取器接收关于将针对渲染输出分配的图块的信息,使得其可在包含渲染输出的实际基元的图块之前安全地***适当(和适当数量的)完整图块基元。
当然,其他布置将是可能的。
当以任何合适和期望的方式生成渲染输出时,驱动器可对应地识别触发图形处理器的一个或多个“完整图块”基元的发布的需要。例如,这可响应于来自需要图形处理的应用程序的显式API函数调用,和/或驱动器可以能够根据应用程序请求的图形处理确定在生成渲染输出时使用一个或多个“完整图块”基元将是期望的(并且对应地,然后向图形处理器发出适当的命令和/或数据以在生成渲染输出时触发一个或多个“完整图块”基元的使用)。
当然,其他布置将是可能的。
如上所讨论,由基元提供阶段提供(发布)的基元(包括任何完整图块基元)被提供(发布)到图形处理器执行的图形处理流水线的后续处理阶段。
图形处理流水线的一个或多个(后续)处理阶段可以是任何合适的和期望的图形处理阶段(电路),其可处理被提供用于由基元提供阶段(电路)(例如,基元列表读取器)处理的基元。
在一个实施方案中,一个或多个后续处理阶段至少包括光栅化器和渲染器(在一个实施方案中,包括一个或多个片段处理阶段(电路))。
在该情况下,在一个实施方案中,光栅化器接收来自基元提供阶段(电路)(例如,基元列表读取器)的基元,将那些基元光栅化为片段,并且将片段提供给渲染器(提供给一个或多个片段处理阶段(电路)(中的第一者))以用于处理。在一个实施方案中,渲染器(一个或多个片段处理阶段(电路))接收来自光栅化器的片段,并且可操作以对那些片段执行一个或多个片段处理(例如,渲染)步骤(操作)以生成渲染的片段数据,该渲染的片段数据可例如写入图块缓冲区。
光栅化器可以任何合适和期望的方式将由基元提供阶段(电路)(例如,基元列表读取器)提供的基元光栅化为片段。由光栅化器生成的每个片段可根据需要表示单个采样点或多个采样点(与单个采样点或多个采样点相关联)。在一个实施方案中,每个片段表示复数个(,在一个实施方案中四个(2×2))采样点的集合。
在一个实施方案中,光栅化器被配置为执行“层级光栅化”。因此,在一个实施方案中,光栅化器可操作以测试(例如并且在一个实施方案中)要以迭代方式对渲染输出区域的逐渐变小的贴片(区域)进行光栅化的基元。光栅化器的其他布置将是可能的。例如,在其他实施方案中,光栅化器以非层级方式将基元光栅化成片段。
在一个实施方案中,在基元提供阶段(电路)与光栅化器之间存在一个或多个另外的后续处理阶段。在一个实施方案中,这些阶段包括以下中的一者或多者,并且在一个实施方案中包括以下中的多个,并且在一个实施方案中包以下的全部:顶点加载阶段(电路)(顶点加载器);三角形设置阶段(电路);和光栅化器(例如,重新排序)缓冲区(其可操作并且被配置为缓冲基元,并且在一个实施方案中还对基元重新排序以提供给光栅化器)。
通常,多至并且包括光栅化器的后续处理阶段可被视为“每个基元”处理阶段,因为它们对基元(在基元级别)而不是对单独片段操作。光栅化器后的片段处理阶段(渲染器)然后将是“每个片段”处理阶段。
如上所讨论,光栅化器在一个实施方案之后是渲染流水线,在一个实施方案中包括一个或多个片段处理阶段(电路),并且在一个实施方案中包括多个片段处理阶段(电路)。
光栅化器后的一个或多个片段处理阶段(电路)可以是任何合适和期望的图形处理流水线阶段,其可关于由光栅化器生成的片段执行片段处理(例如,渲染)步骤(操作)。
跟随光栅化器的一个或多个片段处理阶段可包括例如以下中的一者或多者,并且在一个实施方案中包括以下中的多个,并且在一个实施方案中包以下的全部:片段缓冲区,其可操作以将片段发布到图形处理流水线的下一个阶段;早深度和/或模板测试阶段(电路),其可操作以执行深度和/或模板测试;渲染器(渲染电路),其可操作以渲染片段以生成渲染的片段数据(片段渲染可包括例如纹理映射、混合、片段着色、射线跟踪等);晚深度和/或模板测试阶段(电路),其可操作以执行深度和/或模板测试;一个或多个图块缓冲区;和写出阶段(电路),其可操作以将数据从图块缓冲区(等)写入其他存储装置,诸如(主)存储器。
一旦基元提供电路(阶段)已经发布了“完整图块”基元,则该基元将由图形处理流水线的后续处理阶段处理,而不等待任何其他基元是否将针对所讨论的图块进行处理的任何确定。
在一个实施方案中,“完整图块”基元以与所讨论的图形处理器和图形处理流水线的任何其他基元相同的方式进行处理。
因此,在一个实施方案中,首先使“完整图块”基元经受(在一个实施方案中,三角形设置单元中的)三角形(基元)设置操作,例如,以生成用于改变内插的重心函数和/或针对基元的边缘函数的集合。
在一个实施方案中,“完整图块”基元然后被光栅化为图形片段,并且然后相应地处理(渲染)那些图形片段以执行期望的图形处理操作。在一个实施方案中,完整图块基元与片段着色操作(片段着色器)相关联并且触发片段着色操作,其执行期望的图形处理操作。
在这方面,将理解的是,虽然图形处理流水线的至少一个后续处理阶段将开始处理完整图块基元而不等待何时将针对所讨论的图块处理其他基元的任何确定,但不必是所有后续处理阶段在这方面处理完整图块基元的情况(并且确实地,本文所述技术的目的是尝试在可进行完整图块基元的处理时避免后续处理阶段处理完整图块基元,尽管完整图块基元的处理总是开始的)。
因此,将存在开始处理完整图块基元的图形处理流水线的至少一个后续处理阶段,但可存在例如仅一个后续处理阶段,如果该基元的处理可被确定为足够早地停止,则其那样做。在一个实施方案中,完整图块基元至少开始由光栅化器(以及基元提供阶段(电路)和光栅化器之间的任何中间阶段)进行处理(而不等待任何其他基元是否将针对其所涉及的图块进行处理的任何确定)。
应当理解,至少完整时间基元的处理的方面将需要并使用用于完整图块基元的顶点的集合。可显式地向相关处理阶段指示完整图块基元的顶点,例如通过导出和提供数据(诸如那些顶点的位置)的图形处理器的驱动器,或者图形处理器可例如基于完整图块基元将占据整个图块的假设而间接确定完整图块基元的顶点,例如,通过假设顶点位于图块和/或整个渲染输出的拐角处。
当然,其他布置将是可能的。
如上所讨论,尽管在本文所述技术中开始完整图块基元的处理而不等待任何其他基元是否将针对完整图块基元所涉及的图块进行处理的任何确定,但当随后确定将不针对所讨论的图块处理其他基元时,然后(尝试)停止完整图块基元的处理。
可以任何合适和期望的方式确定,将不针对完整图块基元所涉及的图块处理其他基元(在完整图块基元的处理已经开始之后)。
例如,可确定图块的任何其他基元是否到达光栅化器和/或光栅化器(重新排序)缓冲区,并且如果所讨论的图块的结束被看到而没有任何其他基元到达光栅化器和/或光栅化器缓冲区,则可对应地确定将不针对完整图块基元所涉及的图块处理其他基元。(此处应注意,本文所述技术仅在针对完整图块基元所涉及的图块将根本不处理其他基元的情况下停止完整图块基元的处理。如果至少一个其他基元到达光栅化器和/或重新排序缓冲区,则将完全且以适当方式处理完整图块基元)。
在这方面,申请人已经认识到,可能的情况是,图块的其他基元可能实际上不会到达光栅化器和/或光栅化器缓冲区,因为尽管由基元提供电路发布,但它们可例如随后在它们到达光栅化器和/或光栅化器缓冲区之前被剔除,例如因为可确定它们落在所讨论的图块和/或视锥体之外。因此,可能的情况是,尽管发布了“实际”基元以用于潜在渲染图块(例如,来自包括图块的相应基元列表),实际上那些基元中的任一个基元都不会开始被渲染用于图块(并且可早期在流水线中充分认识到这种情况)。
在一个实施方案中,响应于看到没有(其他)基元将开始被发布用于图块,确定将不针对完整图块基元所涉及的图块处理其他基元的事实。在一个实施方案中,该事件由基元提供阶段(电路)确定,即通过该阶段(电路)确定针对所讨论的图块不发布基元(即,其不具有并且将不发布所讨论的图块的任何基元)。基元提供电路(阶段)可以任何适当和期望的方式确定这一点,例如通过识别何时已经到达图块的结束(并且自从图块开始以来未发出基元)。
在一个实施方案中,当渲染图块的基元列表中没有列出基元(待光栅化和渲染)时,确定(识别)“空”渲染图块(也就是说,缺乏要针对渲染图块处理的任何基元(除完整图块基元外))。
因此,在一个实施方案中,响应于所讨论的图块的基元列表中没有基元(和/或没有待读取的基元列表)(即,在由基元列表读取器针对图块读取的基元列表中没有待处理的任何基元),基元提供电路(阶段)确定将不针对完整图块基元所涉及的图块处理其他基元。
在一个实施方案中,这种情况由资源分配器识别,该资源分配器识别其仅从基元列表读取器接收到所讨论的图块的图块开始和图块结束标记。换句话说,如果由基元列表读取器输出的图块的命令列表仅包含图块开始和图块结束标记(即,没有实际基元),则图块被认为是空的(即,不包含用于渲染的任何实际基元)。在该情况下,在一个实施方案中,然后例如并且在一个实施方案中由资源分配器检查是否已经针对所讨论的图块发出“完整图块”基元,并且如果是,则然后触发用于停止完整图块基元的任何进一步处理的适当操作(在可能的情况下)。
当然,用于确定针对已经对于其发布“完整图块”基元以用于处理的图块不处理基元的其他布置是可能的。
因此,在一个实施方案中,本文所述技术的方法包括(并且图形处理器被配置为),确定针对执行整个图块的处理操作的(较早)基元所涉及的图块是否将处理任何其他基元,并且当确定将不针对执行整个图块的处理操作的基元所涉及的图块处理其他基元时,致使图形处理流水线的一个或多个后续处理阶段中的至少一个后续处理阶段停止关于执行整个图块的处理操作的基元执行处理(以及当没有(当不是)确定针对执行整个图块的处理操作的基元所涉及的图块将不处理其他基元时,不会致使(不致使)关于执行整个图块的处理操作的基元的处理停止(即,允许关于执行整个图块的处理操作的基元的处理继续(并且在一个实施方案,以适当的方式完成))。
在一个实施方案中,基元提供阶段(电路)执行针对完整图块基元所涉及的图块是否将处理任何(不是其他)基元的确定(并且相应地致使图形处理流水线的一个或多个后续处理阶段中的至少一个后续处理阶段在适当的情况下(尝试)停止关于该图块的完整图块基元执行处理)。
当确定将不针对图块处理其他基元时,致使至少一个后续处理阶段停止处理所讨论的完整图块基元。这可以任何合适和期望的方式并且使用任何合适和期望的机制来完成。
在一个实施方案中,向后续处理阶段提供适当的指示以指示应停止完整图块基元的该处理。
在一个实施方案中,由处理阶段(电路)/元件将指示发送到后续处理阶段以停止完整图块基元的处理,其中进行(识别)将不针对所讨论的图块处理其他基元的确定。因此,例如,在基元提供电路(阶段)(例如,该阶段(电路)的资源分配器)执行针对完整图块基元所涉及的图块不处理基元的确定的情况下,基元提供阶段(电路)(例如,资源分配器)将对应地将适当指示提供给图形处理的一个或多个后续处理阶段以指示应停止对应完整图块基元的处理。
对应地,在某个稍后处理阶段(诸如三角形设置阶段(电路))确定将不针对图块处理基元的情况下,该阶段(电路)将对应地向图形处理流水线的一个或多个后续处理阶段提供“停止处理”指示。
因此,在一个实施方案中,确定针对完整图块基元所涉及的图块将不存在“实际”基元的处理阶段可操作并且被配置为通过向后续处理阶段提供指示关于完整图块基元的处理应停止的指示来致使后续处理阶段停止处理完整图块基元,其中后续处理阶段然后可操作并且被配置为响应于接收到指示不需要执行关于完整图块基元的处理(可停止)的此类指示而停止执行处理。
发送到后续处理阶段以使其停止完整图块基元的任何处理的指示可采取任何合适和期望的形式。例如,它可包括其所涉及的完整图块基元的适当指示(例如,以允许识别(确定)待消灭的基元的标识符的形式)和/或“消灭”完整图块基元的指示。
在一个实施方案中,通过识别“消灭”指示所涉及的图块(例如,使用图块索引)来提供要“消灭”的完整图块基元的指示(因为其将然后允许所识别的图块的对应完整图块基元(如果有的话)被确定)。
在一个实施方案中,指示包括设置位以便针对所讨论的图块指示该图块的任何“完整图块”基元应当被“消灭”,例如并且在一个实施方案中,在具有表示所讨论的渲染输出的每个图块的位的相应集合的信号中,以指示所讨论的图块的任何“完整图块”基元“应被消灭”。因此,在一个实施方案中,例如,资源分配器将针对图块(和每个图块)的图块索引设置位,针对其在广播“完整图块基元消灭”向量(每个图块具有一位的向量)中将要消灭任何“完整图块”基元,该向量然后被广播到图形处理流水线的一个过多个后续阶段。
接收完整图块基元“消灭”指示的后续处理阶段可对应地操作并且被配置为以任何合适和期望的方式识别对应完整图块基元的指示并且停止其处理。例如,取决于后续处理阶段执行的处理(例如,其是否对整个基元还是对片段执行处理),其可操作以识别所讨论的基元(例如,在待处理的基元的序列中),并且例如将基元标记为不再进行处理。
在一个实施方案中,后续处理阶段(其对完整图块基元“消灭”指示做出响应)可操作以使用“消灭”指示所涉及的图块的指示(例如,图块索引)和对应的指定基元类型(即指示条件“完整图块”基元)来确定其正在处理的图块是否应被“消灭”。其他基元类型或来自未被指示为要消灭的其他图块的基元然后将不会被消灭。
因此,在其中使用如上文所讨论的“完整图块基元消灭”向量的实施方案中,适当的后续处理阶段将使用该向量来检查其是否具有任何“消灭”图块的特定基元类型的任何基元(即“完整图块基元”),并且如果如此消灭那些基元,但不消灭来自未指示为“被消灭”的其他图块的其他基元类型的任何“消灭”的图块或基元。
因此,在一个实施方案中,基于基元类型(即,确定其为待消灭的适当类型的完整图块基元)以及基元是否涉及被指示为“消灭”的图块来确定完整图块基元的处理的停止。
当然,其他布置将是可能的。
因此,在一个实施方案中,一个或多个后续处理阶段(例如,光栅化器)可以并且确实跟踪其正在处理的基元和其处理的基元所涉及的图块的类型,并且将检查其当前处理的任何基元的基元类型和图块两者,以确定其当前处理的“完整图块”基元(如果有的话)是否应“被消灭”或哪些应“被消灭”。
在一个实施方案中,当后续处理阶段要处理“完整图块”基元时,检查待消灭的任何“完整图块”基元的广播指示以确定完整图块基元实际上是否应被处理。
可以任何合适和期望的方式向后续处理阶段提供完整图块基元“消灭”指示。
在一个实施方案中,这通过向一个或多个后续处理阶段发送(广播)适当信号以指示应停止完整图块基元的处理来完成。因此,在该情况下,例如基元发布级(电路)将向一个或多个后续处理阶段广播信号以指示应停止完整图块基元的处理。
在另一个实施方案中,通过设置(例如,更新)后续处理阶段在处理基元时(和之前)查询的元数据来提供应停止“完整图块”基元的处理的指示。
在该情况下,在一个实施方案中,后续处理阶段中的一者或多者相应地可操作并且被配置为在关于(完整图块)基元执行后续处理步骤(例如,操作)之前,确定针对基元存储的元数据是否指示不需要执行对基元的处理,并且当确定针对基元存储的元数据指示不需要执行基元的处理时,停止基元的处理(不处理基元)。
根据需要,可将停止关于完整图块基元执行处理的指示发送到图形处理流水线的仅单个后续处理阶段或多个后续处理阶段。在一个实施方案中,其至少被发送到光栅化器(光栅化阶段)(并且在一个实施方案中,仅发送到光栅化器)。
在一个实施方案中,致使后续处理阶段停止关于完整图块基元执行处理的指示被发送到光栅化器并且发送到基元提供阶段(电路)与光栅化器之间的一个或多个另外的处理阶段。在该情况下,在一个实施方案中,指示被发送到以下中的一者或多者,并且在一个实施方案中发送到以下中的多个,并且在一个实施方案中发送到以下的全部:顶点加载器、三角形设置阶段(电路)和图形处理流水线的重新排序缓冲区(光栅化器缓冲区)。在一个实施方案中,其被发送到三角形设置阶段(电路)和光栅化器。当然,其他布置将是可能的。
如果需要,也可以向光栅化器之后的处理阶段(例如,向一个或多个片段处理阶段)发送停止处理完整图块基元的指示。然而,在一个实施方案中,指示不会被发送超出光栅化器。在这方面,申请人已经认识到,在典型的操作中,向光栅化器发送停止处理完整图块基元的指示至少将在大多数情况下用于减小完整图块基元的冗余处理,使得该指示的超出光栅化器的任何发送将不可能具有任何显著的进一步益处。
响应于停止完整图块基元的处理的指示,所讨论的处理阶段应(尝试)停止指示所涉及的完整图块基元的处理。相应地,后续处理阶段将尝试停止其关于完整图块基元执行的任何剩余处理。这可包括例如不开始关于完整图块基元的任何进一步处理(其中对于待执行的基元仍存在一些处理),但完成已经进行中的完整图块基元的任何处理,和/或还停止已经进行中的完整图块基元的任何处理。
在一个实施方案中,从进一步处理中丢弃(剔除)完整图块基元(即,响应于停止处理该基元的指示而被消灭)。这可任何适当和合适的方式进行,例如以正常方式进行以用于从所讨论的图形处理器和图形处理流水线中的进一步处理丢弃(例如,剔除)基元。
对应地,在一个实施方案中,接收停止对完整图块基元的处理的指示的后续处理阶段操作以并且被配置为不会将其处理将被停止的完整图块基元发送到图形处理流水线的任何另外阶段(例如,下一个阶段)。因此,例如并且在一个实施方案中,响应于停止对完整图块基元的处理的指示,光栅化器将操作以停止发布基元的片段(不会把基元的任何另外的片段发送到片段处理流水线以用于处理)。
应当理解,后续处理阶段可仅在其已经完成其对完整图块基元的处理之后接收停止对完整图块基元的处理的指示。因此,以本文所述技术的方式的操作将致使后续处理阶段(尝试)停止其具有的对完整图块基元的任何剩余处理。
(对应地,处理完整图块基元或接收完整图块基元以用于处理的任何后续处理阶段(停止处理完整图块基元的指示不被发送到其)将简单地继续执行开始进行的完整图块基元的任何剩余处理)。
在一个实施方案中,即使在确定针对图块不将处理“实际”基元,并且对图块的完整图块基元的处理应停止的情况下,向后续处理阶段指示图块已经“结束”(针对图块将没有更多处理)的“图块结束”标记(指示)在一个实施方案中仍然通过所讨论的图块的图形处理流水线(例如,以正常方式)(即,即使完整图块基元被剔除或丢弃也被发送通过流水线并且不存要针对图块处理的其他基元)。
申请人已经认识到,然后,这将有助于“清理”随后被丢弃的完整图块基元的任何处理,例如在确定不需要完整图块基元的处理之前,完整图块基元已经部分传递到图形处理流水线的后续阶段(例如,超出光栅化器)的情况下。通过仍然使所讨论的图块的图块结束标记穿过流水线,任何后续处理阶段都可正确完成应当必须的其对完整图块基元的处理。因此,在一个实施方案中,使用对完整图块基元的处理可被停止的指示的后续处理阶段被配置为并且操作以在任何事件中不会剔除与所讨论的图块相关联的任何图块结束指示(标记),并且仍然将图块结束指示传递到下一个处理阶段。
在一个实施方案中,当随后确定将不针对执行整个图块的处理操作的基元所涉及的图块处理其他基元时,适当图块结束标记被向前发送通过所讨论的图块的流水线。因此,在一个实施方案中,将不针对执行整个图块的处理操作的基元所涉及的图块处理其他基元的确定还触发在发送到图形处理流水线的后续处理阶段的图块和基元的序列中包括所讨论的图块的适当图块结束标记(指示)。
因此,在一个实施方案中,以及当确定将不针对执行整个图块的处理操作的基元所涉及的图块处理其他基元时,致使图形处理流水线的一个或多个后续处理阶段中的至少一个后续处理阶段停止关于执行整个图块的处理操作的基元执行处理,图块结束指示(标记)也被***所讨论的图块的图块和基元的序列中,以便触发关于所讨论的图块的任何期望的“清理”处理(并且具体地涉及该图块的较早完整图块基元)。
因此,在一个实施方案中,当基元提供阶段(电路)(并且具体地,资源分配器)确定图块是“空的”(不包含待渲染的任何实际基元)(如上所讨论)以及提供“完整图块基元”“消灭”指示时,基元提供阶段(电路)(例如,并且在一个实施方案中,资源分配器)在向前发送到图形处理流水线的后续处理阶段的图块和基元的序列中***所讨论的图块的“清理”的图块结束指示(标记),该图块结束指示然后适当地穿过图形处理流水线,以向图形处理流水线的阶段指示针对所讨论的图块没有进一步处理(所讨论的图块已完成)。
优选的是,为此目的仅***图块结束指示(即,也不需要***图块开始标记(以及在一个实施方案中,这不进行))。
当然,其他布置将是可能的。
根据以本文关于完整图块基元所述技术的方式进行的特定操作,图形处理器和图形处理流水线可以任何合适和期望的方式另外操作,例如并且在一个实施方案中,以针对所讨论的图形处理器和图形处理流水线的正常方式。因此,图形处理器将另外渲染给定渲染输出的渲染图块的序列中的每个渲染图块,并且输出相应渲染图块(例如,输出到存储器中的帧缓冲区)以用于后续使用(例如,用于显示)。
在一个实施方案中,每个渲染图块被分别处理和渲染,即独立、单独图块一个接一个地(渲染)(即,在逐图块基础上)。此渲染可任何期望的方式执行,例如,通过以连续或并行的方式渲染单独图块,并且例如,将每个图块的输出存储在帧缓冲区中(在(该)存储器中),例如用于显示。
对应地,要针对渲染图块渲染的任何(正常)基元可以并且在一个实施方案中以所讨论的图形处理器和图形处理流水线的正常方式渲染(但要针对给定渲染输出的图块处理的任何完整图块基元将以本文所述技术的方式处理)。
以及上文特别参考以本文所述技术的方式的操作描述的特定元件、阶段、电路等,图形处理器和图形处理流水线可另外包括图形处理器和图形处理流水线可通常包括的任何合适和期望的元件、电路、处理阶段等。
因此,例如,图形处理器应当并且在一个实施方案中确实包括一个或多个图块缓冲区,该一个或多个图块缓冲区存储正在渲染的渲染图块的渲染数据,直到渲染图块的渲染已经完成。
对应地,在一个实施方案中,图形处理器包括写出电路,该写出电路耦接到图块缓冲区以用于将完成的渲染图块写入其他存储装置(诸如外部存储器中的帧缓冲区)以供使用。
此外将理解的是,本文所述技术的图形处理器可以是总体图形处理***的一部分,该总体图形处理***包括(例如,并且在一个实施方案中)主机处理器(例如,CPU),该主机处理器例如执行需要由图形处理器处理的应用程序。该主机处理器将向图形处理器发送适当的命令和数据,以控制该图形处理器来执行图形处理操作并产生在主机处理器上执行的应用所需的图形处理输出。为了促进这一点,主机处理器应当并且在一个实施方案中的确还执行图形处理器的驱动器。主机处理器还可执行一个或多个编译器,其用于编译待由图形处理器(例如,其可编程处理阶段(着色器))执行的程序。
该图形处理器还可包括存储本文所述的数据和/或由图形处理器生成的输出数据,并且/或者存储用于执行本文所述的过程的软件(例如,程序)的一个或多个存储器和/或存储器设备,并且/或者与该一个或多个存储器和/或存储器设备通信。图形处理器还可与主机微处理器通信,并且/或者与用于基于由图形处理器生成的数据来显示图像的显示器通信。
本文所述的技术可用于图形处理器可用于生成的所有形式的输出。例如,图形处理器可以生成用于显示、渲染到纹理输出等的帧。在一个实施方案中,来自处理流水线的输出数据值被导出到外部(例如,主存储器)以用于存储和使用,诸如导出到用于显示的帧缓冲区。
在一个实施方案中,本文所述技术的各种功能在单个图形处理平台上执行,该单个图形处理平台生成和输出数据(诸如写入帧缓冲区的渲染片段数据),例如用于显示设备。
本文所述的技术可在任何合适的***(诸如能够适当地操作的基于微处理器的***)中实现。在一些实施方案中,本文所述的技术在基于计算机和/或微处理器的***中实现。
在一个实施方案中,本文所述的技术在便携式设备(诸如在一个实施方案中,移动电话或平板电脑)中实现。
本文所述技术的各种功能可以任何期望且合适的方式执行。例如,本文所述技术的功能可根据需要以硬件或软件实现。因此,例如,本文所述技术的各种功能元件、阶段、单元和“装置”可包括能够操作为执行各种功能等的一个或多个合适的处理器、一个或多个控制器、功能单元、电路***、电路、处理逻辑、微处理器布置等,诸如适当专用的硬件元件(处理电路)和/或可被编程为以期望方式操作的可编程硬件元件(处理电路)。
此处还应当指出的是,本文所述技术的各种功能等可在给定处理器上复制和/或并行执行。同样,如果需要,各种处理阶段可共享处理电路/电路等。
此外,本文所述的技术的任何一个或多个或所有处理阶段或单元可体现为处理阶段或单元电路,例如,以一个或多个固定功能单元(硬件)(处理电路)的形式,和/或以可被编程以执行所需操作的可编程处理电路的形式。同样,本文所述的技术的处理阶段或单元和处理阶段或单元电路中的任何一者或多者可作为独立的电路元件提供给其他处理阶段或单元或处理阶段或单元电路中的任何一者或多者,和/或处理阶段或单元和处理阶段或单元电路中的任何一者或多者或全部可至少部分地由共享处理电路形成。
本领域的技术人员还应当理解,本文所述的技术的全部所述实施方案可视情况包括本文所述特征中的任何一者或多者或全部。
根据本文所述技术的方法可至少部分地使用软件例如计算机程序来实现。因此,本文所述技术的另外实施方案包括:计算机软件,该计算机软件特别适于在安装在数据处理器上时执行本文所述的方法;计算机程序元件,该计算机程序元件包括用于当该程序元件在数据处理器上运行时执行本文所述方法的计算机软件代码部分;和计算机程序,该计算机程序包括适于当该程序在数据处理***上运行时执行本文所述的一个或多个方法的所有步骤的代码。数据处理***可以是微处理器、可编程FPGA(现场可编程门阵列)等。
本文所述的技术还扩展到包括此类软件的计算机软件载体,该软件在用于操作图形处理器、渲染器或包括数据处理器的其他***时,致使所述处理器、渲染器或***结合所述数据处理器执行本文所述的技术的方法的步骤。此类计算机软件载体可以是物理存储介质,诸如ROM芯片、CD ROM、RAM、闪存存储器或磁盘,或者可以是信号,诸如通过导线的电子信号、光信号或无线电信号,诸如到卫星的信号等。
还应当理解,并非本文所述技术的方法的所有步骤都需要由计算机软件执行,因此本文所述技术的另外的实施方案包括计算机软件和安装在计算机软件载体上的用于执行本文所述方法的步骤中的至少一个步骤的此类软件。
因此,本文所述的技术可适当地体现为与计算机***一起使用的计算机程序产品。此类具体实施可包括固定在有形非暂态介质上的一系列计算机可读指令,诸如计算机可读介质,例如磁盘、CD ROM、ROM、RAM、闪存存储器或硬盘。其还可包括可经由调制解调器或其他接口设备、通过有形介质(包括但不限于光通信线路或模拟通信线路)、或者使用无线技术(包括但不限于微波、红外或其他传输技术)无形地传输到计算机***的一系列计算机可读指令。该系列计算机可读指令体现了本文先前所述的功能的全部或部分。
本领域的技术人员将会理解,此类计算机可读指令可以多种编程语言编写,以与许多计算机架构或操作***一起使用。此外,此类指令可使用目前或将来的任何存储器技术(包括但不限于半导体、磁性或光学技术)来存储,或者使用目前或将来的任何通信技术(包括但不限于光学、红外或微波技术)来传输。可以设想的是,此类计算机程序产品可作为带有附随的印刷或电子文档(例如,收缩包装软件)的可移动介质进行分发,可与计算机***一起预加载在例如***ROM或固定磁盘上,或者可经由网络(例如,互联网或万维网)从服务器或电子公告板进行分发。
现在将参考附图描述本文所述技术的实施方案。
本文所述技术的实施方案涉及针对由图形处理***的图形处理器生成的渲染输出(在一个实施方案中,用于显示的帧)的整个区域执行图形处理操作。
此类***可如图1所示(并且上文所述)的那样配置。图1示出了典型的计算机图形处理***,其包括主机处理器(CPU)1、图形处理单元(GPU)3以及用于存储主机处理器(CPU)1和图形处理单元(GPU)3所需和/或生成的数据的存储器5。
存储器5可与GPU 3和/或CPU 1在“芯片上”,或者可以是可由GPU 3和/或CPU 1访问的外部存储器。
当正在CPU 1上执行的应用程序2需要来自GPU 3的图形处理(诸如待显示的帧)时,应用程序2可向正在CPU 1上运行的GPU 3的驱动器4发送适当的命令和数据。
驱动器4然后可向GPU 3发送适当的命令和数据以致使其生成应用程序2所需的图形输出。由驱动器4提供的命令和数据通过包括用于“绘制”将被渲染以用于待由GPU 3生成的渲染输出(帧)的基元的命令,以及表示待用于渲染输出(帧)的基元的顶点的相关联顶点数据。
驱动器4可通过写入存储器5中的数据结构6来将命令和数据发送到GPU 3,这些数据结构6然后可由GPU 3读取。通常,CPU 1还写入定义要绘制到存储器5的基元的顶点的顶点数据。
发送到GPU 3的命令然后通常将致使GPU 3读取和处理存储在存储器5中的顶点数据以生成渲染输出(帧)。GPU 3通常将使用基元的顶点数据来光栅化基元以便确定基元应用于的渲染输出(帧)的区域,并且然后为该区域渲染基元。
一旦要针对渲染输出(帧)渲染的所有基元已经被渲染,完成的渲染输出(帧)可被写入存储器5中的帧缓冲区7,可从该帧缓冲区提供完成的渲染输出以用于在显示设备诸如屏幕或打印机上显示。
在本实施方案中,图形处理***使用所谓的“基于图块的”渲染。换句话说,如图4所示,生成的渲染输出(例如,帧60)被细分成以及处理为相应图块61,这些图块一起构成整体渲染输出60。(如图4所示,给定渲染输出中的每个图块61将具有相应图块索引62,其识别输出中的图块(例如,其在渲染输出中的位置))。
图2更详细地示出了本实施方案中的基于图块的图形处理***的驱动器4的操作。如图2所示,响应于从应用程序2接收的命令和数据,驱动器4可写入存储器5中的数据结构6。在该阶段,数据结构6可包括待针对帧处理的命令8A,以及状态描述符9的列表。
状态描述符9可包括用于配置GPU 3以处理命令的数据,诸如以下面中的任何一者或多者的形式的数据:“绘制呼叫描述符”(“DCD”)、“帧缓冲区描述符”(“FBD”)、“渲染器目标描述符”(“RTD”)、“混合描述符”、“剪刀盒描述符”、“着色器程序描述符”、“纹理描述符”和描述渲染器状态的其他描述符。通常,基元列表中的每个命令8A包括指示要用于处理所讨论的命令的状态描述符9的数据的一个或多个索引。存储器6还可存储定义待渲染的基元的顶点的顶点数据。
如上所讨论,在基于图块的渲染中,二维渲染输出(帧)被渲染为多个较小面积的子区域,通常称为“图块”。图块各自被单独渲染(通常一个接一个地)。然后重组渲染的图块以提供完整渲染输出(例如,用于显示的帧)。在此类布置中,渲染输出通常被划分(按区域)为规则大小和形状的渲染图块(它们通常为例如正方形或矩形)。
此类基于图块的渲染的优点是不适用于给定图块的图形处理命令(基元)不必针对该图块进行处理,因此在处理该图块时可被忽略。这允许减小给定渲染输出所需的图形处理的总量。
在基于图块的渲染***中,因此通常期望能够识别和知道实际应用于给定渲染图块的那些命令(基元),以便例如避免不必要地处理实际上不应用于该图块的命令和基元。
为了便于这一点,在本实施方案中,GPU 3为每个渲染图块准备要针对该渲染图块处理(例如,将应用于图块)的基元的列表,这是通过将由驱动器4产生的基元列表中的基元(用于绘制基元的命令)8A布置到识别要针对所讨论的图块处理的基元(例如,通过参考基元指示符)的相应“基元列表”(其也可被称为“图块列表”或“多边形列表”)中。
在一个实施方案中,GPU 3仅针对单渲染图块准备基元列表(针对每个单渲染图块有一个基元列表)。然而,在另一个实施方案中,GPU 3准备针对单渲染图块的基元列表,以及针对包括多于一个图块的输出帧区域的基元列表(即,涵盖待生成的帧的多于一个渲染图块(并且由此实际上较大区域)的基元列表)。换句话说,以及准备仅专用于单渲染图块的基元的列表,可制备并且制备了可用于和将用于共同的多个渲染图块的基元列表。
当接收到绘制基元的命令以用于由GPU 3处理时,将基元置于适当的基元列表中(存储在存储器5中的数据结构6中)。这通常通过以下方式来完成:读取和处理基元(来自存储器5)的顶点数据以确定基元的位置,将基元的位置与针对其准备基元列表的帧区域的位置进行比较,以及然后基于比较将基元分配到基元列表。例如,这可使用边界框分箱技术或精确分箱技术来完成。
一旦已经针对每个单渲染图块(以及针对包括多于一个图块的帧区域,根据具体情况)准备了待处理的基元的列表(基元列表),就可存储基元列表以用于存储器5中的数据结构6中,例如,以允许GPU 3识别当渲染所讨论的图块时需要考虑(和处理)哪些基元。
然后,当渲染图块时,GPU 3将读取所讨论的图块的基元列表,并且处理列表中列出的每个基元以生成图块的输出帧区域。GPU 3通常将通过使基元光栅化为片段并且然后处理(渲染)片段来处理每个命令以绘制基元。
继而可以该方式渲染每个图块,并且将所有图块的输出帧区域组合以生成整个输出帧,该整个输出帧可存储在存储器5中的帧缓冲区7中,例如用于显示。
图3更详细地示意性地示出了本实施方案的图形处理器3。
图3所示的图形处理器3是基于图块的图形处理器,其执行基于图块的图形处理流水线,并且因此将产生渲染输出数据阵列的渲染图块,诸如要生成的输出帧。
渲染输出通常可以是旨在用于在显示设备诸如屏幕或打印机上显示的输出帧,但也可以例如包括旨在用于稍后渲染遍历的中间数据(也称为“渲染到纹理”输出)等。
图3示出了由图形处理器3执行的基于图块的图形处理流水线的主要元素和流水线阶段。如本领域的技术人员将理解的,可以存在图形处理流水线的在图3中未示出的其他元件。此处还应当指出的是,图3仅是示意性的,并且例如在实践中,即使所示的功能单元和流水线阶段在图3中被示意性地示出为独立阶段,但它们也可共享重要的硬件电路。还应当理解,如图3所示的图形处理流水线的阶段、元件和单元等中的每一者可根据需要来实现,并且将相应地包括例如用于执行所需的操作和功能的适当电路和/或处理逻辑部件等。
如图3所示,图形处理器3可访问存储器5,诸如图形处理器3是其部分的整体数据处理***的主存储器。
尤其并且如图3所示,存储器5存储原始几何数据41的集合(如上文所讨论,其由图形处理器驱动器4或在主机***(微处理器)1上运行的API提供)、经变换的几何数据42的集合(其是对原始几何数据41执行的各种变换和处理操作的结果)和基元列表8B的集合。如上所讨论,基元列表包含待渲染的相应基元的数据和命令等。经变换的几何数据42包括例如经变换的顶点(顶点数据)等。
如上所讨论,存储器还存储以描述符9的形式的状态信息的集合,该状态信息的集合提供用于在渲染给定渲染输出时使用的状态和配置信息,以及存储正在生成的渲染输出的帧缓冲区7。
如图3所示,图形处理器尤其包括可编程顶点着色器39和拼接器40。顶点着色器39将存储在存储器5中的原始几何数据41作为其输入,并且处理该数据以提供经变换的几何数据42(其然后存储在存储器5中),包括以准备好在渲染输出(例如,待显示的帧)中进行2D放置的形式的几何数据。
然后,拼接器40执行“拼接”的过程以将基元分配给基元列表,该基元列表然后用于识别应针对待渲染的每个渲染图块渲染的基元以生成渲染输出(例如,用于显示的帧)。为此,拼接器40将来自顶点着色器39的经变换和处理的顶点(几何)数据42(即帧中的基元的位置)作为输入,使用该数据来构建基元列表,并且然后将那些列表作为基元列表8B存储在存储器5中。拼接器40可例如针对该过程使用精确或边界框分箱。
一旦给定渲染输出的所有基元列表已由拼接器40准备,则可处理(渲染)渲染输出。
如图3所示,在本实施方案中,出于此目的,GPU 3包括基元列表读取器(电路)31、资源分配/状态加载单元(电路)32、顶点加载器(电路)33、三角形设置单元(电路)34、光栅化器(电路)35和片段处理单元(电路)36。
一旦已经准备了渲染输出的基元列表,就在“片段着色器端点”(控制器)46的控制下执行渲染输出的处理,该片段着色器端点接收待执行的片段处理任务(基本上具有指向定义待执行的处理的描述符的指针的相应图块)。片段着色器端点46将任务分成单独图块并且为每个图块分配图块索引。在分配后,将图块发送到基元列表读取器31以用于列表读取。
因此,渲染输出(帧缓冲区)被分成任务并且任务被发送到片段着色器端点46。然后,片段着色器端点46加载帧缓冲区描述符并且为任务分配图块索引(或多个索引)。
基元列表读取器31确定要针对待渲染的每个图块处理哪些基元,并且向资源分配器32提供那些基元(在逐块基础上)。其通过以下方式来执行这一点:考虑存储在存储器5中的基元列表8B,以及从那些列表中选择要针对图块处理的基元。基元列表读取器31读取已被确定为应用于所讨论的图块的存储的基元列表8B,并且向资源分配器32提供要针对图块处理的基元的序列(如根据基元列表8B确定)。
这是对于要针对所讨论的渲染输出渲染的每个图块进行的,使得基元列表读取器31将向资源分配器32发送渲染图块序列的基元序列。序列中的每个新图块由基元列表读取器31通过包括在序列中的一个或多个适当标记表示,诸如图块开始之前的图块标记的开始和图块结束时的图块标记的结束。如果需要,其他布置(诸如仅使用单个公共标记来表示图块之间的边界)也将是可能的。
资源分配器32操作以将图形处理器3和图形处理流水线的各种元件配置用于渲染来自基元列表读取器31的基元。例如,资源分配器32适当地配置片段处理阶段36以用于渲染基元。
如图3所示,为了能够进行这一点,以及从基元列表读取器31接收图块和图块的基元的序列,资源分配器32也能够从存储器9读取适当的状态描述符(包含适当的状态和配置信息)。由资源分配器32读取的描述符可针对并且涉及作为整体的渲染输出(例如,帧),针对渲染输出的特定绘制呼叫等。
资源分配器32使用存储在描述符9中的配置数据来配置由图形处理器3执行以处理所讨论的图块等的图形处理流水线的后续阶段。
然后,资源分配器32向图形处理流水线的后续阶段提供图块的序列(和图块的基元的序列)。
因此,基元列表读取器31和资源分配器32一起形成基元提供阶段(电路),其向图形处理流水线的后续阶段提供渲染图块和那些渲染图块的基元的序列以用于处理。
图5示出了这一情况并且示意性地示出了资源分配器32将包括适当的图块开始(SOT)和图块结束(EOT)标记的图块和基元的序列50(PRIM)传递到图形处理流水线的后续阶段,包括光栅化器缓冲区44和光栅化器35(这些阶段将在下文进一步讨论)。如图5所示,每个图块的各种命令等与所讨论的图块的对应索引相关联以表示它们应用于哪个图块。
(为了清楚起见,图5(和图6至图9)仅示出了图块和基元的序列中的几个图块和每个图块的几个基元,该图块和基元序列从多边形列表读取器发送到资源分配器并且从资源分配器发送到图形处理流水线的后续阶段。如本领域技术人员将理解的,对于给定渲染输出,在序列中将通常存在更大数量的图块,并且每个图块通常将包含比图5至图9所示的基元更多的许多基元)。
如图3所示,首先由资源分配器32向顶点加载器33提供图块和图块的基元的序列。顶点加载器读取针对要从存储器5渲染的基元的从资源分配器接收的基元的适当经处理顶点数据,并且将基元(包括其经处理顶点数据)提供给三角形设置单元34。
三角形设置单元34执行基元设置操作以设置待渲染的基元。例如,这包括确定表示基元边缘的边缘信息(例如,根据基元的顶点),导出用于改变基元的内插的重心函数等。
然后将这样的“设置”基元存储在光栅化器缓冲区44中,在基元被发送到光栅化器35以用于光栅化之前,该光栅化器缓冲区缓冲基元。该缓冲区还可有利于基元序列中的基元的重新排序(例如,针对给定图块),因为可以与在该缓冲区中接收基元的顺序不同的顺序从光栅化器缓冲区44发出基元。
然后将基元从光栅化器缓冲区44传递到光栅化器35以用于光栅化。光栅化器35被配置为将基元光栅化为采样点并且生成具有用于渲染其接收的基元的适当位置(表示适当采样位置)的一个或多个图形片段。例如,出于此目的,它可使用表示基元边缘的信息。
然后将由光栅化器35产生的片段传递到流水线36的一个或多个片段处理阶段。对从光栅化器接收的片段执行的片段处理可包括可针对基元片段执行的任何合适和期望的处理。因此,例如,这可包括(片段表示的采样点的)片段的早晚深度和/或模板测试中的一者或两者、片段数据的混合、纹理映射等。
在本实施方案中,片段处理包括至少执行片段着色以生成基元片段的输出数据值。要对给定基元(以及因此片段)执行的适当片段着色可由资源分配器32基于对应状态描述符配置和指示,例如用于基元所属的绘制呼叫。
如果需要,也可或替代地执行其他片段处理步骤。
此外,如图3所示,片段处理36具有对深度和模版(ZS)缓冲区45的访问,该深度和模板(ZS)缓冲区存储分别用于深度和模板测试的深度和/或模板值。
来自片段处理36的渲染片段(渲染片段的数据)被适当地写入图块缓冲区37。
图块缓冲区37可被提供为位于图形处理器3(芯片)上(本地)的RAM的一部分。图块缓冲区37存储颜色缓冲区,该颜色缓冲区针对缓冲区表示的每个采样点(本质上针对正被处理的图块的每个采样点)存储适当的颜色(以及任何其他适当数据)。
一旦图块已被处理,其数据从图块缓冲区37向外写入38存储器5(例如,写入存储器5中的帧缓冲区7)以用于存储,并且然后处理下一个图块,以此类推,直到已处理所有的图块以生成整个渲染输出(例如,待显示的帧(图像))。
然后针对下一个渲染输出(例如,帧)重复该过程,以此类推。
当然,图形处理器3和其执行的图形处理流水线的其他布置将是可能的。
以上描述了在渲染图块序列(以及那些图块的基元)以生成渲染输出时的本实施方案中的图形处理器和图形处理流水线的基本操作。
如上所讨论,本文所述技术具体地涉及在渲染图块的任何“实际”基元之前存在要针对整个渲染图块执行的图形处理操作的情况。现在将参考图6至图9更详细地描述在本实施方案中完成该操作的方式。
(图6至图9示出了与此操作相关的图形处理流水线的元件。因此,它们示出了从基元列表读取器31接收图块和那些图块的基元的资源分配器32、缓冲将被发送到光栅化器35的基元的光栅化器缓冲区44、光栅化器35,以及示意性地,资源分配器和光栅化器缓冲区之间的中间处理阶段60(诸如顶点加载器和三角形设置)。)
在这方面,申请人已经认识到例如可存在期望针对生成的整个渲染输出执行图形处理操作的情况。此类操作可例如并且在本实施方案中的确包括将深度和/或模板值加载到用于渲染输出的深度和/或模板缓冲区中,然后渲染该输出,例如用默认和/或先前确定的深度和/或模板值的集合预加载深度和/或模板缓冲区。
在本实施方案中,这通过致使基元提供电路43(并且具体地资源分配器32)包括适当基元来进行,该适当基元将触发提供给图形处理流水线的后续阶段(即顶点加载器等)的基元和渲染图块的序列中的整个图块的期望图形处理操作的执行。
此外,在本实施方案中,触发基元所涉及的整个图块的图形处理操作的执行的基元与使得应该仅当要针对要触发整个图块的图形处理操作的基元所涉及的图块处理另一个基元时才执行要针对整个图块执行的图形处理操作的条件相关联。
此外,在本实施方案中,资源分配器32被触发以在基元所涉及的实际渲染图块之前(即,在要针对图块渲染的“实际”基元(其将从基元列表中读取)(如果有的话)之前)包括此类“完整图块”基元。
在本实施方案中,通过以下方式来触发将此类“完整图块”基元包括在将由资源分配器32渲染的基元和图块的序列中:提供指示正在生成的渲染输出的适当描述符(帧缓冲区描述符)中需要此类操作的状态(配置)信息。然后,当资源分配器32读取正在生成的渲染输出的帧缓冲区描述符时,其对应地认识到它应当操作以在完整图块基元所涉及的实际图块之前***所讨论的渲染输出的每个图块的适当完整图块基元。
具体地,给定渲染输出的帧缓冲区描述符包括字段(值),该字段在设置为特定值时向资源分配器指示在涉及所讨论的渲染输出的每个图块前,其应包括基元,该基元将触发整个图块的图形处理操作的执行,并且与使得应该仅当要针对要触发整个图块的图形处理操作的基元所涉及的图块处理另一个基元时才执行要针对整个图块执行的图形处理操作的条件相关联。帧缓冲区描述符还指示可在任何给定时间在飞行中的此类基元的最大数量。
如上所讨论,通过以及响应于片段着色器端点46分配图块并且针对待生成的给定渲染输出发布用于处理的图块,触发了本实施方案中并且如图6至图9所示的操作。
在本实施方案中,一旦图块已经由片段着色器端点分配图块索引,以及将图块发送到用于列表读取的基元列表读取器31,片段着色器端点46还向资源分配器32通知已经分配了图块。然后,资源分配器32检查正在生成的渲染输出的帧缓冲区描述符以确定是否应针对所讨论的图块发布完整图块基元。如果是,则资源分配器32操作以发布附加图块,该附加图块与所讨论的完整图块基元相关联,以触发分配图块的“完整图块”处理操作,之后基元列表读取器读取基元列表以确定是否要针对所讨论图块处理任何实际基元。然后,这将允许在所讨论的图块开始通过基元列表读取器31之前开始处理图块的完整图块基元。
如上所讨论,为渲染输出分配的每个图块将具有对应图块索引,从而识别该图块,并且因此在序列中提前***以用于处理图块的完整图块基元的附加图块将具有所讨论的图块的索引(并且因此后面将是该图块的第二实例,其具有相同的图块索引,但然后包含针对所讨论的图块的由基元列表读取器31读取的任何基元)。
通常,一旦针对渲染输出完成拼接(基元列表已写入存储器),将执行适当的“运行片段”命令以触发输出的光栅化和渲染。响应于此,渲染输出(帧缓冲区)将被分成任务并且任务被发送到片段着色器端点46。然后,片段着色器端点将加载所讨论的渲染输出的帧缓冲区描述符并且为任务分配一个或多个图块索引。在该情况下,假设帧缓冲区描述符指示启用了早“完整图块”处理。然后,这将触发资源分配器32在包含待渲染的“实际”基元的图块之前发布“完整图块”基元。
因此,一旦片段着色器端点已经为任务分配第一图块,它将指示对资源分配器的图块分配并且将该第一图块发送到基元列表读取器以用于基元列表读取。响应于描述符指示需要完整图块基元操作,资源分配器然后将发布第一图块的第一实例以执行完整图块基元操作。
然后,片段着色器端点将分配针对渲染输出的序列中的第二图块,并且因此指示对资源分配器的该图块分配并且将该第二图块发送到基元列表读取器以用于基元列表读取。然后,资源分配器将发布序列中的第二图块的另一个完整图块基元图块。
然后,片段着色器端点可分配针对渲染输出的序列中的第三图块,并且对应地指示对资源分配器的该图块分配并且将图块发送到基元列表读取器以用于读取,其中资源分配器然后再次发布针对该第三图块的完整图块基元图块。
这将(潜在地)继续直到针对第一图块的基元列表读取已由基元列表读取器完成,此时“第一图块”与待渲染的其实际基元(如果有的话)将被发送到资源分配器。此时,资源分配器将在提供给后续图形处理阶段的图块和基元的序列中包括第一“实际图块”(即,序列中的第一图块的实际图块),例如遵循若干“完整图块基元”图块的序列。
然后,此过程将继续,因为序列中的“实际”图块准备好进行处理(已完成其基元列表读取)并且当序列中的“实际”图块准备好进行处理(已完成其基元列表读取)时,并且因为序列中的其他图块的“完整图块”基元开始被发布。
在本实施方案中,如上所讨论,帧缓冲区描述符包括并且设置对于在任一时间可在飞行中(激活)的“完整图块”基元图块的最大数量的限制。因此,资源分配器还控制其对渲染输出的图块的“完整图块”基元的发布以确保不超过最大值,例如通过在发布用于处理的新“完整图块”基元之前等待较早“完整图块”基元完成(例如,其处理完成或其被完全丢弃),视情况而定。
图6至图9示出了以上过程。为了便于说明,图6至图9简单地示出了涉及关于所讨论的渲染输出的一个特定渲染图块的完整图块基元的操作的示例性情况,但如本领域技术人员将理解的,对应操作可以并且将会针对渲染输出的每个相应渲染图块执行,其中应针对输出的每一个渲染图块执行要针对整个渲染图块执行的图形处理操作。
如图6所示,响应于读取指示需要包括完整图块基元的针对正在生成的渲染输出的帧缓冲区描述符71,资源分配器32(实际上)将附加图块72***从基元列表读取器接收的图块序列中,该附加图块与所讨论的完整图块基元73相关联(其将针对所讨论的图块触发整个图块的图形处理操作)(当然,其他“完整图块”操作将是可能的)。(要针对完整图块基元执行的处理(并且因此如何配置图形处理流水线以执行该处理)由资源分配器32根据帧缓冲区描述符71对应地确定)。
该附加图块72将具有与其所涉及的渲染输出的图块相同的图块索引(在图6至图9所示的示例中,针对其发布“完整图块”基元的图块的图块索引为(2,0))。如图6所示,在本实施方案中,触发完整图块基元处理的附加图块72仅使用“图块开始”标记来表示(不同于涉及(包括)从基元列表读取的基元(即,待渲染的“实际”基元)的图块,如图所示,其使用图块开始标记和图块结束标记两者来表示)。
在本实施方案中,由完整图块基元触发的图形处理操作是所讨论的图块的深度和模板值的早加载(预加载)(当然,其他“完整图块”操作将是可能的)。
因此,如图6所示,资源分配器32将在它向流水线的后续处理阶段(向顶点加载器等)发送的图块和基元的序列50中***图块开始标记(SOT)74,之后是将触发“完整图块”操作的条件完整图块基元(EZSI)73。
因此,实际上,这将附加图块***到向图形处理流水线的后续处理阶段发送的图块序列中以用于处理,这触发针对所讨论的图块的完整图块基元的处理。
如图6所示,触发完整图块基元的处理的该附加图块然后后面将是构成所讨论的渲染输出的图块序列中的另外图块(以及那些图块的“实际”基元的序列)(这些图块通过适当的图块开始标记和图块结束标记在序列中表示)。
一旦资源分配器32以这种方式发布了“完整图块”基元,则该基元由图形处理流水线的后续处理阶段处理,而不等待任何其他基元是否将针对完整图块基元所涉及的图块进行处理的任何确定。
“完整图块”基元以与所讨论的图形处理器和图形处理流水线的任何其他基元相同的方式进行处理。
因此,在本实施方案中,首先使“完整图块”基元经受三角形设置单元34中的三角形设置操作,例如,以生成用于改变内插的重心函数和/或针对基元的边缘函数的集合,然后传递到光栅化器缓冲区44。
尽管可向相关处理阶段显式地指示这些(和其他)过程的完整图块基元的顶点,但在本实施方案中,基于完整图块基元将占据整个图块的假设来确定完整图块基元的顶点,例如通过假设顶点位于图块和/或整个渲染输出的拐角处。
序列中的图块的基元(以及在存在的情况下,图块开始标记和图块结束标记)由光栅化器缓冲区44缓冲,然后被发送到光栅化器35以进行处理。因此,如从图7可见,完整图块基元(和完整图块基元73)的图块从光栅化器缓冲区发送到光栅化器以用于在向光栅化器发送的图块和基元的序列中轮到其时进行处理。
然后,光栅化器35将“完整帧”基元光栅化为覆盖正被处理的区域(图块)的整个面积的片段,并且将这些片段提供给片段处理单元36以用于渲染。然后,片段处理单元36对片段执行期望的图形处理操作。
在本实施方案中,完整图块基元与片段着色操作(片段着色器)相关联并且触发该片段着色操作,该片段着色操作执行期望的图形处理操作(在该情况下,其将会从存储器获取深度和模板值并将值加载到ZS缓冲区45中)。
在正在生成的渲染输出的图块序列中的稍后某个时间,基元列表读取器将读取较早完整图块基元所涉及的图块的基元列表并且将这些基元提供给资源分配器,再次通过适当的图块开始标记和图块结束标记来识别。
然后,资源分配器32将发布所讨论的图块的第二实例(即,具有与触发“完整图块”操作的附加图块72相同的图块索引)以触发对所讨论的图块的实际基元(如果有的话)的处理。
在要针对完整图块基元所涉及的图块处理“实际”基元的情况下,则那些基元将及时到达光栅化器缓冲区44和光栅化器35以用于处理,并且至少最初使用较早完整图块基元先前已加载的深度和模板值以正常方式进行处理。
图8示出了这一点,并且示出了完整图块基元73所涉及的图块的“实际”基元80到达光栅化器缓冲区44(并且因此然后被传递到光栅化器35以用于处理)。
因此,在该情况下,所讨论的图块的较早“完整图块”基元73将通过图形处理流水线被完全处理。
另一方面,在没有要针对较早完整图块基元所涉及的图块处理其他基元的情况下,则资源分配器被配置为识别其没有从基元列表读取器接收到用于处理的图块的任何基元(即,图块不包含要处理的任何“实际”基元),并且在该事件中发信号通知图形处理流水线的稍后阶段停止处理图块的较早完整图块基元。
在本实施方案中,当资源分配器从基元列表读取器接收到图块的图块开始和结束标记(那些标记之间不存在任何中间基元)时,资源分配器识别其没有从基元列表读取器接收到图块的任何基元。
具体地,如果资源分配器从基元列表读取器接收仅包含图块开始标记和图块结束标记的图块的列表,则确定图块是“空的”(即不包含待渲染的任何实际基元),并且然后检查其是否已经发布了针对所讨论的图块的条件“完整图块”基元。
图9示出了这一点,并且示出了资源分配器32接收图块的图块开始100和图块结束101标记,针对该图块的较早完整图块基元73已经通过图形处理流水线向前发送,而不存在由基元列表读取器提供的图块的任何“实际”基元。
如果资源分配器确实确定其已发布“空”图块的条件“完整图块”基元,则响应于此类确定,如图9所示,资源分配器32将信号102广播到光栅化器35以及资源分配器和光栅化器中间的一个或多个处理阶段70以在它们能够停止的范围内停止图块的完整图块基元的任何进一步处理(如果它们已经接收到完整图块基元以用于处理)。然后,当稍后确定对该基元的处理事实上不必要时,这具有剔除较早完整图块基元的处理的影响。
发送到光栅化器等以致使其停止完整图块基元的任何处理的信号包括其所涉及的完整图块基元的适当指示(其在本实施方案中指示该基元的图块的索引),以及“消灭”该完整图块基元的指示。
当然,其他布置将是可能的。
在本实施方案中,此指示(信号)呈“基元消灭”向量的形式,该向量针对渲染输出的每个图块具有一位。然后,资源分配器设置该向量中的针对图块的图块索引的位,针对该图块应当停止完整帧基元的处理(针对该图块将“消灭”完整图块基元)。
被配置为从资源分配器接收任何“完整图块基元消灭”向量的后续处理阶段(诸如光栅化器)被配置为在它们处理任何条件“完整图块”基元时检查该向量以确定是否应消灭基元。为了执行这一点,光栅化器等考虑它当前与完整图块基元消灭向量一起处理的基元中的每一者的基元类型和图块索引,以确定其是否处理“完整图块”消灭向量指示其应当被消灭的图块的“完整图块”基元。如果是,则光栅化器(或所讨论的其他处理阶段)尝试停止其关于所讨论的图块的完整图块基元执行的任何剩余处理。(其他基元类型,即使针对与被指示为要针对“完整图块”基元处理消灭的图块相同的图块,或者来自未指示要被消灭的其他图块的基元,不被消灭并且继续以正常方式处理)。
响应于用于停止完整图块基元的处理的信号,通过从任何进一步的处理中丢弃(剔除)完整图块基元,光栅化器(或所讨论的其他处理阶段)尝试停止其关于完整图块基元执行的任何剩余处理。这以正常方式进行以用于从所讨论的图形处理器和图形处理流水线中的进一步处理丢弃(例如,剔除)基元。
接收用于停止处理完整图块基元的信号的处理阶段(例如,光栅化器)还操作以便不会将其处理将被停止的完整图块基元发送到图形处理流水线的任何另外阶段(例如,下一个阶段)。因此,例如响应于用于停止处理完整图块基元的信号,光栅化器将停止发布基元的片段(将不会把基元的任何另外的片段发送到片段处理流水线以用于处理)。
在本实施方案中,如图9所示,即使在确定应停止完整图块基元的处理的情况下,针对该完整帧基元所涉及的图块的图块结束标记75仍然通过图形处理流水线。然后,这将有助于“清理”随后被丢弃的完整图块基元的任何处理,例如在确定不需要完整图块基元的处理之前,完整图块基元已经部分传递到图形处理流水线的后续阶段(例如,超出光栅化器)的情况下。
在本实施方案中,这是由资源分配器完成的,当其确定图块是“空的”(不包含待渲染的任何实际基元)(如上所讨论)时,以及提供“完整图块基元”“消灭”指示,还有在其向前发送到图形处理流水线的后续处理阶段的图块和基元的序列中***所讨论的图块的“清理”的图块结束指示(标记)75,该图块结束指示然后适当地穿过图形处理流水线,以向图形处理流水线的阶段指示针对所讨论的图块没有进一步处理(所讨论的图块已完成)。仅出于该目的***图块结束指示(不使用图块开始标记)。
尽管上文已经通过说明在渲染输出的渲染图块的序列中***和执行单渲染图块的完整图块基元来描述本实施方案,但如上所讨论,在典型情况下,将发布“完整图块”基元并且针对渲染输出的每个渲染图块包括“完整图块”基元。因此,在该情况下,对于构成所讨论的渲染输出(例如,帧)的每个图块将发布(提前)一个完整图块基元。
因此,图形处理器和图形处理流水线将处理序列中的每个渲染图块,包括渲染输出的“完整图块”基元渲染图块,直到输出的所有单独渲染图块已被渲染(并且被写出到帧缓冲区7)。然后可针对待生成的下一个渲染输出(例如,帧)重复该过程,以此类推。
从以上将理解,本文所述技术在其实施方案中至少可提供用于处理基元的更有效机制,该基元将触发渲染图块和/或渲染输出的整体的图形处理操作,并且具体地在仅当要针对所讨论的图块处理另一个基元时才需要执行处理操作的情况下。在本文所述技术的实施方案中,这至少通过以下方式来实现:开始处理“完整图块”基元而不等待是否将针对所讨论的图块处理任何其他基元的任何确定,但然后,如果随后确定将不针对完整图块基元所涉及的图块处理其他基元,则从进一步处理中剔除(消灭)“完整图块”基元。
虽然已出于说明和描述的目的呈现了前述详细描述,但并非旨在穷举或将本文所述技术限制为所公开的精确形式。按照上述教导内容,许多修改形式和变型形式是可能的。选择所述实施方案以便最好地解释本文所述的技术及其实际应用的原理,从而使得本领域的其他技术人员能够在各种实施方案中并且通过适合于所设想的特定用途的各种修改最好地利用本文所述的技术。本发明的范围旨在由所附权利要求限定。
Claims (20)
1.一种在使用基于图块的渲染来生成渲染输出时操作图形处理器的方法,其中正在生成的渲染输出的多个图块被单独渲染,并且所述渲染图块被组合以形成所述渲染输出,所述图形处理器能够操作以执行图形处理流水线,所述图形处理流水线至少包括基元提供阶段和一个或多个后续处理阶段,其中所述基元提供阶段能够操作以向所述一个或多个后续处理阶段提供要针对渲染图块的序列中的相应渲染图块处理的基元以用于处理,并且所述一个或多个后续处理阶段能够操作以关于由所述基元提供阶段提供以用于处理的基元执行一个或多个处理操作;所述方法包括:
当向所述图形处理流水线的所述一个或多个后续处理阶段提供要针对多个渲染图块的序列中的相应图块处理的基元以用于处理时,所述基元提供阶段:
对于所述多个渲染图块的序列中的图块,在提供给所述图形处理流水线的所述一个或多个后续处理阶段以用于处理的所述渲染图块的序列的基元的序列中包括基元,所述基元将触发整个所述图块的图形处理操作的执行,并且与使得应该仅当要针对要触发整个所述图块的所述图形处理操作的所述基元所涉及的所述图块处理另一个基元时才执行要针对整个所述图块执行的所述图形处理操作的条件相关联;
在所述渲染图块的序列的所述基元的序列中包括将触发整个所述图块的所述图形处理操作的所述执行的所述基元,比要触发整个所述图块的图形处理操作的所述基元所涉及的图块提前至少一个图块;
所述方法还包括:
所述图形处理流水线的后续处理阶段处理所述基元,所述基元将触发所述基元所涉及的整个所述图块的所述图形处理操作的所述执行,而不等待是否要针对该图块处理任何其他基元的任何确定;以及
当在开始执行整个所述图块的处理操作的所述基元的所述处理之后,确定将不针对执行整个所述图块的处理操作的所述基元所涉及的所述图块处理其他基元时,致使所述图形处理流水线的所述一个或多个后续处理阶段中的至少一个后续处理阶段停止关于执行整个所述图块的处理操作的所述基元执行处理。
2.根据权利要求1所述的方法,其中所述基元提供阶段指示其向所述图形处理流水线的所述后续处理阶段提供的所述图块的序列中的每个图块的开始。
3.根据权利要求1所述的方法,其中所述基元提供阶段包括基元列表读取阶段,所述基元列表读取阶段读取针对正在生成的渲染输出的相应区域准备的基元的列表以确定要针对渲染图块处理的基元。
4.根据权利要求1所述的方法,其中将触发整个所述图块的所述图形处理操作的所述执行的所述基元针对整个所述图块执行的所述图形处理操作是用于加载随后当渲染所述图块的其他基元时将使用的数据值的操作。
5.根据权利要求1所述的方法,其中:
所述基元提供阶段包括:
基元列表读取阶段,所述基元列表读取阶段读取针对正在生成的渲染输出的相应区域准备的基元的列表以确定要针对渲染图块处理的基元;和
资源分配器,所述资源分配器从所述基元列表读取器接收基元,并且然后向所述图形处理流水线的所述一个或多个后续阶段提供所述基元以用于处理;
并且
所述资源分配器在提供给所述图形处理流水线的所述一个或多个后续处理阶段的所述渲染图块的序列的所述基元的序列中包括将触发整个所述图块的所述图形处理操作的所述执行的所述基元。
6.根据权利要求1所述的方法,包括通过在所述渲染图块的序列中包括附加图块,在所述渲染图块的序列的所述基元的序列中包括将触发整个所述图块的所述图形处理操作的所述执行的所述基元,所述附加图块包括将触发整个所述图块的所述图形处理操作的所述执行的所述基元。
7.根据权利要求1所述的方法,包括在开始执行整个所述图块的处理操作的所述基元的所述处理之后,确定当所述渲染图块的所述基元列表中没有列出任何基元时,将不针对执行整个所述图块的处理操作的所述基元所涉及的所述图块处理其他基元。
8.根据权利要求1所述的方法,其中致使所述图形处理流水线的所述一个或多个后续处理阶段中的至少一个后续处理阶段停止关于执行整个所述图块的处理操作的所述基元执行处理的所述步骤包括向所述后续处理阶段提供指示以指示应停止执行整个所述图块的处理操作的所述基元的执行。
9.根据权利要求8所述的方法,包括向所述图形处理流水线的光栅化器提供所述指示。
10.根据权利要求1所述的方法,包括当停止关于执行整个所述图块的处理操作的所述基元执行处理时,仍然使执行整个所述图块的图形处理操作的所述基元所涉及的所述图块的图块结束标记通过所述图形处理流水线。
11.一种能够操作以使用基于图块的渲染来生成渲染输出的图形处理器,其中正在生成的渲染输出的多个图块被单独渲染,并且所述渲染的图块被组合以形成所述渲染输出,所述图形处理器能够操作以执行图形处理流水线;
由所述图形处理器执行的所述图形处理流水线包括:
基元提供电路,所述基元提供电路被配置为向所述图形处理流水线的一个或多个后续处理阶段提供要针对渲染图块的序列中的相应渲染图块处理的基元以用于处理;和
在所述基元提供电路之后的一个或多个处理阶段,所述一个或多个处理阶段能够操作以关于由所述基元提供电路提供以用于处理的基元执行一个或多个处理操作;
其中:
当向所述图形处理流水线的所述一个或多个后续处理阶段提供要针对多个渲染图块的序列中的相应图块处理的基元以用于处理时,所述基元提供阶段能够操作以:
对于所述多个渲染图块的序列中的图块,在提供给所述图形处理流水线的所述一个或多个后续处理阶段以用于处理的所述渲染图块的序列的基元的序列中包括基元,所述基元将触发整个所述图块的图形处理操作的执行,并且与使得应该仅当要针对要触发整个所述图块的所述图形处理操作的所述基元所涉及的所述图块处理另一个基元时才执行要针对整个所述图块执行的所述图形处理操作的条件相关联;以及
在所述渲染图块的序列的所述基元的序列中包括将触发整个所述图块的所述图形处理操作的所述执行的所述基元,比要触发整个所述图块的图形处理操作的所述基元所涉及的图块提前至少一个图块;
并且所述图形处理器被配置为使得:
所述图形处理流水线的后续处理阶段在接收到要触发基元所涉及的整个所述图块的所述图形处理操作的所述执行的所述基元时将处理所述基元,所述基元将触发所述基元所涉及的整个所述图块的所述图形处理操作的所述执行,而不等待是否将针对所述图块处理任何其他基元的任何确定;
以及使得:
当在开始执行整个所述图块的处理操作的基元的所述处理之后,确定将不针对执行整个所述图块的处理操作的所述基元所涉及的所述图块处理其他基元时,将致使所述图形处理流水线的所述一个或多个后续处理阶段中的至少一个后续处理阶段停止关于执行整个所述图块的处理操作的所述基元执行处理。
12.根据权利要求11所述的图形处理器,其中所述基元提供电路被配置为指示其向所述图形处理流水线的所述后续处理阶段提供的图块的序列中的每个图块的开始。
13.根据权利要求11所述的图形处理器,其中所述基元提供电路包括基元列表读取电路,所述基元列表读取电路被配置为读取针对正在生成的渲染输出的相应区域准备的基元的列表以确定要针对渲染图块处理的基元。
14.根据权利要求11所述的图形处理器,其中将触发整个所述图块的所述图形处理操作的所述执行的所述基元针对整个所述图块执行的所述图形处理操作是用于加载随后当渲染所述图块的其他基元时将使用的数据值的操作。
15.根据权利要求11所述的图形处理器,其中:
所述基元提供电路包括:
基元列表读取电路,所述基元列表读取电路被配置为读取针对正在生成的渲染输出的相应区域准备的基元的列表以确定要针对渲染图块处理的基元;和
资源分配器电路,所述资源分配器电路被配置为从所述基元列表读取电路接收基元,并且向所述图形处理流水线的所述一个或多个后续阶段提供所述基元以用于处理,
并且
所述资源分配器电路被配置为在提供给所述图形处理流水线的所述一个或多个后续处理阶段的渲染图块的序列的所述基元的序列中包括将触发整个所述图块的所述图形处理操作的所述执行的所述基元。
16.根据权利要求11所述的图形处理器,其中所述基元提供电路被配置为通过在渲染图块的序列中包括附加图块,在所述渲染图块的序列的基元的序列中包括将触发整个所述图块的所述图形处理操作的所述执行的基元,所述附加图块包括将触发整个所述图块的所述图形处理操作的所述执行的所述基元。
17.根据权利要求11所述的图形处理器,其中所述图形处理器被配置为确定当所述渲染图块的所述基元列表中没有列出任何基元时,将不针对执行整个所述图块的处理操作的基元所涉及的图块处理其他基元。
18.根据权利要求11所述的图形处理器,其中所述图形处理器被配置为通过向所述后续处理阶段提供指示以指示应停止执行整个所述图块的处理操作的所述基元的执行,致使所述图形处理流水线的所述一个或多个后续处理阶段中的至少一个后续处理阶段停止关于执行整个所述图块的处理操作的所述基元执行处理。
19.根据权利要求11所述的图形处理器,其中所述图形处理器被配置为当停止关于执行整个所述图块的处理操作的所述基元执行处理时,仍然使执行整个所述图块的图形处理操作的所述基元所涉及的所述图块的图块结束标记通过所述图形处理流水线。
20.一种非暂态计算机可读存储介质,所述非暂态计算机可读存储介质包括计算机软件代码,所述计算机软件代码在至少一个处理器上执行时执行在使用基于图块的渲染来生成渲染输出时操作图形处理器的方法,其中正在生成的渲染输出的多个图块被单独渲染,并且所述渲染图块被组合以形成所述渲染输出,所述图形处理器能够操作以执行图形处理流水线,所述图形处理流水线至少包括基元提供阶段和一个或多个后续处理阶段,其中所述基元提供阶段能够操作以向所述一个或多个后续处理阶段提供要针对渲染图块的序列中的相应渲染图块处理的基元以用于处理,并且所述一个或多个后续处理阶段能够操作以关于由所述基元提供阶段提供以用于处理的基元执行一个或多个处理操作;所述方法包括:
当向所述图形处理流水线的所述一个或多个后续处理阶段提供要针对多个渲染图块的序列中的相应图块处理的基元以用于处理时,所述基元提供阶段:
对于所述多个渲染图块的序列中的图块,在提供给所述图形处理流水线的所述一个或多个后续处理阶段以用于处理的所述渲染图块的序列的基元的序列中包括基元,所述基元将触发整个所述图块的图形处理操作的执行,并且与使得应该仅当要针对要触发整个所述图块的所述图形处理操作的所述基元所涉及的所述图块处理另一个基元时才执行要针对整个所述图块执行的所述图形处理操作的条件相关联;
在所述渲染图块的序列的所述基元的序列中包括将触发整个所述图块的所述图形处理操作的所述执行的所述基元,比要触发整个所述图块的图形处理操作的所述基元所涉及的图块提前至少一个图块;
所述方法还包括:
所述图形处理流水线的后续处理阶段处理所述基元,所述基元将触发所述基元所涉及的整个所述图块的所述图形处理操作的所述执行,而不等待是否要针对该图块处理任何其他基元的任何确定;以及
当在开始执行整个所述图块的处理操作的所述基元的所述处理之后,确定将不针对执行整个所述图块的处理操作的所述基元所涉及的所述图块处理其他基元时,致使所述图形处理流水线的所述一个或多个后续处理阶段中的至少一个后续处理阶段停止关于执行整个所述图块的处理操作的所述基元执行处理。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US17/313,968 | 2021-05-06 | ||
US17/313,968 US11361400B1 (en) | 2021-05-06 | 2021-05-06 | Full tile primitives in tile-based graphics processing |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115311120A true CN115311120A (zh) | 2022-11-08 |
Family
ID=81944059
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210419802.0A Pending CN115311120A (zh) | 2021-05-06 | 2022-04-21 | 图形处理*** |
Country Status (2)
Country | Link |
---|---|
US (1) | US11361400B1 (zh) |
CN (1) | CN115311120A (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20240005601A1 (en) * | 2022-06-29 | 2024-01-04 | Advanced Micro Devices, Inc. | Hierarchical depth data generation using primitive fusion |
Family Cites Families (36)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20050066149A1 (en) | 2003-09-22 | 2005-03-24 | Codito Technologies Private Limited | Method and system for multithreaded processing using errands |
US8799882B2 (en) | 2005-12-07 | 2014-08-05 | Microsoft Corporation | Compiler support for optimizing decomposed software transactional memory operations |
US8074224B1 (en) | 2005-12-19 | 2011-12-06 | Nvidia Corporation | Managing state information for a multi-threaded processor |
US8275942B2 (en) | 2005-12-22 | 2012-09-25 | Intel Corporation | Performance prioritization in multi-threaded processors |
US7617384B1 (en) | 2006-11-06 | 2009-11-10 | Nvidia Corporation | Structured programming control flow using a disable mask in a SIMD architecture |
US8060482B2 (en) | 2006-12-28 | 2011-11-15 | Intel Corporation | Efficient and consistent software transactional memory |
US20090138683A1 (en) | 2007-11-28 | 2009-05-28 | Capps Jr Louis B | Dynamic instruction execution using distributed transaction priority registers |
US8140823B2 (en) | 2007-12-03 | 2012-03-20 | Qualcomm Incorporated | Multithreaded processor with lock indicator |
US8055856B2 (en) | 2008-03-24 | 2011-11-08 | Nvidia Corporation | Lock mechanism to enable atomic updates to shared memory |
US8392669B1 (en) | 2008-03-24 | 2013-03-05 | Nvidia Corporation | Systems and methods for coalescing memory accesses of parallel threads |
US8214833B2 (en) | 2008-05-12 | 2012-07-03 | Oracle America, Inc. | Systems and methods for supporting software transactional memory using inconsistency-aware compilers and libraries |
WO2009145917A1 (en) | 2008-05-30 | 2009-12-03 | Advanced Micro Devices, Inc. | Local and global data share |
US8561044B2 (en) | 2008-10-07 | 2013-10-15 | International Business Machines Corporation | Optimized code generation targeting a high locality software cache |
US8694974B2 (en) | 2009-04-29 | 2014-04-08 | Hewlett-Packard Development Company, L.P. | Load-checking atomic section |
US9223578B2 (en) | 2009-09-25 | 2015-12-29 | Nvidia Corporation | Coalescing memory barrier operations across multiple parallel threads |
US8549504B2 (en) | 2010-09-25 | 2013-10-01 | Intel Corporation | Apparatus, method, and system for providing a decision mechanism for conditional commits in an atomic region |
US9830156B2 (en) | 2011-08-12 | 2017-11-28 | Nvidia Corporation | Temporal SIMT execution optimization through elimination of redundant operations |
US10387324B2 (en) | 2011-12-08 | 2019-08-20 | Intel Corporation | Method, apparatus, and system for efficiently handling multiple virtual address mappings during transactional execution canceling the transactional execution upon conflict between physical addresses of transactional accesses within the transactional execution |
US9280348B2 (en) | 2012-03-28 | 2016-03-08 | International Business Machines Corporation | Decode time instruction optimization for load reserve and store conditional sequences |
US9747107B2 (en) | 2012-11-05 | 2017-08-29 | Nvidia Corporation | System and method for compiling or runtime executing a fork-join data parallel program with function calls on a single-instruction-multiple-thread processor |
US9678897B2 (en) | 2012-12-27 | 2017-06-13 | Nvidia Corporation | Approach for context switching of lock-bit protected memory |
US20140310484A1 (en) | 2013-04-16 | 2014-10-16 | Nvidia Corporation | System and method for globally addressable gpu memory |
US9256466B2 (en) | 2013-06-07 | 2016-02-09 | Arm Limited | Data processing systems |
US9459876B2 (en) | 2013-07-18 | 2016-10-04 | Nvidia Corporation | System, method, and computer program product for managing divergences and synchronization points during thread block execution by using a double sided queue for token storage |
US9946666B2 (en) | 2013-08-06 | 2018-04-17 | Nvidia Corporation | Coalescing texture access and load/store operations |
US9092345B2 (en) | 2013-08-08 | 2015-07-28 | Arm Limited | Data processing systems |
US11055097B2 (en) | 2013-10-08 | 2021-07-06 | Nvidia Corporation | Dynamically detecting uniformity and eliminating redundant computations to reduce power consumption |
US9547530B2 (en) | 2013-11-01 | 2017-01-17 | Arm Limited | Data processing apparatus and method for processing a plurality of threads |
US10061591B2 (en) | 2014-06-27 | 2018-08-28 | Samsung Electronics Company, Ltd. | Redundancy elimination in single instruction multiple data/thread (SIMD/T) execution processing |
GB2528056B (en) | 2014-07-08 | 2021-06-16 | Advanced Risc Mach Ltd | A data processing apparatus and method for performing lock-protected processing operations for multiple threads |
US9619937B2 (en) * | 2015-03-05 | 2017-04-11 | Arm Limited | Methods and apparatus for processing computer graphics primitives in tile-based graphics rendering system |
GB2537659B (en) * | 2015-04-22 | 2019-05-01 | Imagination Tech Ltd | Tiling a primitive in a graphics processing system |
GB2537661B (en) * | 2015-04-22 | 2018-09-26 | Imagination Tech Ltd | Tiling a primitive in a graphics processing system |
GB2539958B (en) | 2015-07-03 | 2019-09-25 | Advanced Risc Mach Ltd | Data processing systems |
US10768935B2 (en) | 2015-10-29 | 2020-09-08 | Intel Corporation | Boosting local memory performance in processor graphics |
US10223528B2 (en) | 2016-09-27 | 2019-03-05 | Intel Corporation | Technologies for deterministic code flow integrity protection |
-
2021
- 2021-05-06 US US17/313,968 patent/US11361400B1/en active Active
-
2022
- 2022-04-21 CN CN202210419802.0A patent/CN115311120A/zh active Pending
Also Published As
Publication number | Publication date |
---|---|
US11361400B1 (en) | 2022-06-14 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10755473B2 (en) | Graphics processing system | |
CN105321199B (zh) | 图形处理流水线及其操作方法与介质 | |
TWI637346B (zh) | 圖形處理系統 | |
CN105023233B (zh) | 图形处理***及其操作方法、计算机存储介质 | |
US9767595B2 (en) | Graphics processing systems | |
JP5053857B2 (ja) | 3次元グラフィックス処理装置および方法 | |
KR102674513B1 (ko) | 그래픽 처리 | |
KR102623693B1 (ko) | 그래픽 처리 시스템 | |
US9070200B2 (en) | Graphics processing systems | |
US11861760B2 (en) | Tile-based graphics processing | |
KR20210066727A (ko) | 그래픽 처리 시스템 | |
CN115311120A (zh) | 图形处理*** | |
US11189073B2 (en) | Graphics processing | |
US20230298249A1 (en) | Graphics Processing | |
CN116777726A (zh) | 图形处理 | |
US20230401667A1 (en) | Graphics processing systems | |
US20240169474A1 (en) | Graphics processing | |
US11132835B1 (en) | Suspending and resuming operations in graphics processing systems | |
US20240193719A1 (en) | Graphics processing | |
US20240193718A1 (en) | Graphics processor | |
US11127188B1 (en) | Suspending and resuming operations in graphics processing systems | |
CN118052690A (zh) | 图形处理器 | |
CN118052695A (zh) | 图形处理*** | |
KR20240072941A (ko) | 그래픽 프로세서 | |
GB2475375A (en) | Dynamic Graphics Rendering Process |
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 |