CN118052695A - 图形处理系统 - Google Patents
图形处理系统 Download PDFInfo
- Publication number
- CN118052695A CN118052695A CN202311536010.2A CN202311536010A CN118052695A CN 118052695 A CN118052695 A CN 118052695A CN 202311536010 A CN202311536010 A CN 202311536010A CN 118052695 A CN118052695 A CN 118052695A
- Authority
- CN
- China
- Prior art keywords
- vertex
- primitive
- vertices
- assembled
- groupings
- 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 383
- 230000001960 triggered effect Effects 0.000 claims abstract description 43
- 238000000034 method Methods 0.000 claims description 207
- 239000000872 buffer Substances 0.000 claims description 184
- 230000008569 process Effects 0.000 claims description 176
- 230000004044 response Effects 0.000 claims description 15
- 238000004590 computer program Methods 0.000 claims description 6
- 230000011664 signaling Effects 0.000 claims description 3
- 238000009877 rendering Methods 0.000 description 63
- 230000015654 memory Effects 0.000 description 38
- 239000012634 fragment Substances 0.000 description 29
- 238000004040 coloring Methods 0.000 description 8
- 230000006870 function Effects 0.000 description 8
- 238000003860 storage Methods 0.000 description 7
- 230000007246 mechanism Effects 0.000 description 5
- 238000005516 engineering process Methods 0.000 description 4
- 230000003287 optical effect Effects 0.000 description 4
- 238000005070 sampling Methods 0.000 description 4
- 238000004891 communication Methods 0.000 description 3
- 230000008859 change Effects 0.000 description 2
- 230000000694 effects Effects 0.000 description 2
- 238000002360 preparation method Methods 0.000 description 2
- 230000001172 regenerating effect Effects 0.000 description 2
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000008901 benefit Effects 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 238000010304 firing Methods 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 238000012432 intermediate storage Methods 0.000 description 1
- 238000013507 mapping Methods 0.000 description 1
- 230000008447 perception Effects 0.000 description 1
- 238000012805 post-processing Methods 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 238000012360 testing method Methods 0.000 description 1
- 230000009466 transformation Effects 0.000 description 1
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
- G06T11/00—2D [Two Dimensional] image generation
- G06T11/40—Filling a planar surface by adding surface attributes, e.g. colour or texture
Landscapes
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Image Generation (AREA)
Abstract
当通过基于为输出提供的基元配置信息从为该输出提供的顶点索引集合组装待处理的一个或多个基元的序列来生成图形处理输出时,使用该经组装基元的该顶点索引来生成一个或多个顶点分组,每个顶点分组包括该经组装基元的多个顶点。在已将阈值数量的顶点分配给顶点分组之后,触发针对该顶点分组的该顶点的顶点属性处理,以由此生成包括该顶点分组的该顶点的经处理顶点属性的顶点分组。该经组装基元和所生成的顶点分组然后提供到该图形处理流水线的稍后期级以供处理。
Description
本发明涉及图形处理系统,并且具体地涉及用于准备将在图形处理系统中渲染输出时处理的基元的方法和装置。
计算机图形系统通常通过处理所谓的基元来产生其输出(诸如用于显示的帧),该基元通常是简单多边形(诸如三角形)。每个基元通常由顶点集合(例如,在三角形基元的情况下为三个顶点)定义。
通常,将用于给定图形处理输出(例如,用于显示的帧)的顶点集合将被存储为定义顶点(例如,顶点中的每一者的相关属性)的顶点数据集合。
虽然可以简单地依次存储要用于待生成的每个基元的顶点(使得实际上顶点集合将对应地定义待处理的基元),但还已知的是,根据引用顶点数据集合中的顶点的索引集合来分别定义基元。例如,这然后可避免重复顶点数据集合中的顶点的需要,因为顶点集合中的单个顶点条目(顶点)可通过重用索引集合中的相关索引而被引用多次。
因此,在典型图形处理流水线的情况下,待生成的输出的最初提供的数据将尤其包括待使用且进行处理以用于生成输出的顶点集合,以及引用顶点集合的索引集合(序列)(以实际上定义将如何使用顶点以便形成将在生成输出时处理的基元集合)。
每个顶点将具有与其相关联的表示该顶点的数据集合(诸如位置、颜色、纹理和其他属性)。然后当处理包括顶点的基元时,使用该“顶点数据”以便生成图形处理系统的期望输出。
一旦已生成了用于输出的顶点和顶点索引集合,它们可由图形处理器处理以生成期望的图形处理输出(渲染目标),诸如用于显示的帧。
这将尤其包括基于顶点索引的集合(序列)使用顶点来“组装”基元,并且然后处理如此组装的基元。
例如,基元处理可涉及确定与待处理的输出面积相关联的采样点阵列中的哪些采样点被基元覆盖,并且然后确定每个采样点应具有的外观(例如,就其颜色等而言)以表示该采样点处的基元。这些过程通常分别被称为光栅化和渲染。
光栅化和渲染过程使用与正被处理的基元的顶点相关联的顶点属性。为了有利于该操作,在例如光栅化和渲染基元之前,针对给定图形处理输出定义的顶点的至少一些属性通常经受初始的所谓的“顶点着色”(顶点处理)操作。该“顶点着色”操作进行操作以将顶点的属性变换成用于后续图形处理操作的期望形式。这可包括例如将顶点位置属性从它们最初被限定于的模型或用户空间转换到待在其中显示图形处理的输出的屏幕空间。
因此,由图形处理器执行的图形处理流水线将通常包括顶点处理级(顶点着色器),该顶点处理级对针对顶点定义的初始顶点属性值执行顶点处理(着色)计算以便生成期望的输出顶点属性集合(即,适当“着色”属性)以用于在图形处理流水线的后续处理级中使用。
然后,将存在适当的“基元组装”操作,该操作从所提供的索引和顶点“组装”将由图形处理流水线处理的基元,例如根据将使用所提供的索引和顶点来组装的一个或多个定义基元类型。
如此组装的基元然后将被处理,例如被光栅化和渲染。
图1示出了在生成输出时的该图形处理序列。
如图1所示,对于待生成的输出,提供了场景数据11的集合,尤其包括顶点集合和索引集合,该索引集合定义要针对输出进行处理的基元并且引用顶点集合。
然后,顶点经历适当的顶点处理(着色)12,例如以将顶点的位置从“模型”空间变换到“屏幕”空间。
然后存在基元组装级13,其取得索引和经处理顶点,并且使用索引和顶点来组装基元以用于处理,例如根据指示将如何使用索引来组装基元的信息(例如,应当生成以简单三角形、三角形线条还是三角形扇等的形式的基元以用于处理)。
经组装基元然后被光栅化14以生成用于处理的适当图形片段,并且由光栅化器生成的片段然后被适当地处理(渲染)15以提供最终输出,例如图像16。
申请人相信,对此类图形处理的操作仍然存在改进的范围。
根据本发明的第一方面,提供了一种操作图形处理器的方法,所述图形处理器执行图形处理流水线以生成输出,其中提供了将用于在生成所述输出时将处理的基元的顶点集合,每个顶点具有与其相关联的一个或多个顶点属性的集合,以及引用所述顶点集合中的顶点的顶点索引集合和指示如何将所述顶点索引组装到基元中以用于在生成所述输出时处理的基元配置信息;所述方法包括:
基于为所述输出提供的所述基元配置信息组装将在从为所述输出提供的所述顶点索引集合生成所述输出时处理的一个或多个基元的序列,所述经组装基元序列的每个经组装基元包括所述基元的标识符和所述基元的一个或多个顶点索引的集合;
使用所述经组装基元的所述顶点索引来生成一个或多个顶点分组,每个顶点分组包括所述经组装基元的多个顶点;
其中所述使用所述经组装基元的所述顶点索引来生成一个或多个
顶点分组包括:
将经组装基元的顶点分配给顶点分组,直到已将阈值数量的顶点分配给所述顶点分组;以及
触发针对所述顶点分组的所述顶点的顶点属性处理,以由此生成包括所述顶点分组的所述顶点的经处理顶点属性的顶点分组;
以及
向正由所述图形处理器执行的所述图形处理流水线的稍后期级提供所述经组装基元和包括所述经处理顶点属性的所生成的顶点分组以用于处理。
根据本发明的第二方面,提供了一种图形处理器,所述图形处理器可操作以执行图形处理流水线以便生成输出;所述图形处理器包括:
基元组装电路,所述基元组装电路被配置为基于为所述输出提供的基元配置信息来生成将在从为所述输出提供的顶点索引集合生成输出时处理的一个或多个基元的序列,所述顶点索引集合引用为所述输出提供的顶点集合中的顶点,每个顶点具有与其相关联的一个或多个顶点属性的集合,所述基元配置信息指示将如何将所述顶点索引组装到基元中以用于在生成所述输出时处理,所述经组装基元序列的每个经组装基元包括所述基元的标识符和所述基元的一个或多个顶点索引的集合;
顶点分组生成电路,所述顶点分组生成电路被配置为使用所述经组装基元的所述顶点索引来生成一个或多个顶点分组,每个顶点分组包括所述经组装基元的多个顶点;
其中所述顶点分组生成电路被配置为通过以下步骤使用所述经组
装基元的所述顶点索引来生成一个或多个顶点分组:
将经组装基元的顶点分配给顶点分组,直到已将阈值数量的顶点分配给所述顶点分组;以及
触发针对所述顶点分组的所述顶点的顶点属性处理,以由此生成包括所述顶点分组的所述顶点的经处理顶点属性的顶点分组;
和
处理电路,所述处理电路被配置为向正由所述图形处理器执行的所述图形处理流水线的稍后期级提供所述经组装基元和包括所述经处理顶点属性的所生成的顶点分组以用于处理。
本发明涉及图形处理器和图形处理,其中尤其从针对待生成的输出定义的顶点索引集合组装用于处理的图形基元。
在本发明中,经组装基元的顶点被组织到相应顶点分组中,并且针对经组装基元的多个顶点的相应分组一起触发顶点属性处理(着色)(相比之下,例如,在逐个单独顶点的基础上被触发)。
因此,在本发明中,并且与如图1所示且如上文所讨论的常规图形处理流水线相比,例如,待处理的基元的顶点属性在基元已被组装之后(并且基于经组装基元的顶点索引)被处理(着色)。
例如,这可避免针对实际上将不用于经组装基元的顶点执行顶点属性处理(并且因此实际上将不需要针对所讨论的输出进行处理)。
对应地,提供包括顶点分组的多个顶点的经处理(经着色)顶点属性的顶点分组以供图形处理流水线的稍后期级使用。
如将在下文进一步讨论,此接着允许在图形处理流水线的后续级中在逐个分组的基础上跟踪和管理经处理顶点属性,而非例如必须跟踪和管理单独顶点。例如,不是必须跟踪顶点分组中的单独顶点的寿命,而是可跟踪作为整体的分组的寿命。这然后可显著减小在该方面需要的处理和资源。
可以任何合适且期望的方式提供将用于在生成输出时将处理的基元的顶点集合、引用顶点集合中的顶点的顶点索引集合,以及指示在生成输出时将如何将顶点索引组装到基元中以供处理的基元配置信息(在本发明中使用和提供该基元)。例如,它们可由需要所讨论的图形处理的应用程序提供,和/或由图形处理器的驱动器生成并然后提供,例如并且优选地,响应于从需要图形处理的应用程序接收的命令和数据。
顶点、顶点索引和基元配置信息可以任何合适且期望的方式对于图形处理器可用。例如且优选地,顶点和顶点索引至少可(例如且优选地,作为适当阵列)存储在存储器中,接着可由图形处理器从该存储器中获取该顶点和顶点索引以供使用。基元配置信息可同样存储在存储器中以供图形处理器使用。例如,它可以与待生成的输出相关联并用于该输出的描述符的形式提供。
正在处理的顶点和顶点索引的集合可以是将在生成输出时处理的任何期望且合适的顶点和顶点索引的集合。因此,顶点和顶点索引的集合可包括(并且在一个优选实施方案中确实包括)针对给定图形处理输出(诸如针对待显示的帧)定义的整个顶点集合和整个顶点索引集合。其还可包括针对少于整个输出而定义的顶点集合和顶点索引集合,诸如针对给定绘制调用和/或针对待生成的图块(在基于图块的图形处理器和图形处理流水线中)定义的顶点集合和顶点索引集合。在优选实施方案中,顶点集合和顶点索引集合是针对绘制调用定义的顶点集合和顶点索引集合。
对应地,正生成的输出可包括整个(完整)的总输出(例如,帧),或者仅包括总输出(例如,帧)的一部分(诸如(渲染)图块)。
在顶点和顶点索引的集合小于针对给定输出定义的顶点和顶点索引的整个集合的情况下,则优选地针对输出的顶点和顶点索引的每个集合(例如并且优选地针对每个绘制调用和/或图块)重复以本发明的方式的操作。对应地,针对待生成的多个输出并且优选地针对每个输出,例如针对输出帧序列中的连续帧,和/或针对构成总输出(例如,帧)的每个图块,优选地重复本发明的过程。
顶点集合中的每个顶点将具有与其相关联的一个或多个顶点属性(顶点属性数据(值))的集合。这些顶点属性可以是可与顶点相关联的任何合适且期望的属性,诸如位置(例如,顶点的x、y、z、w坐标/值)、颜色(例如,顶点的RGB值)、透明度(顶点的α值)等中的一者或多者,并且优选地为全部。在优选实施方案中,每个顶点具有与其相关联的位置(位置数据)和一个或多个其他非位置属性(数据)(变动),例如定义所讨论的顶点的颜色、光、法线、纹理坐标等。
还可存在为“每基元”的一些属性(但其在顶点着色器中以相同方式确定(每顶点)),其中来自“激发”顶点的属性接着用于基元。这些类型的属性的示例是:基元ID;层ID;点尺寸;和基元可变速率着色值。本发明可以并且优选地以相同方式处理此类“基元”属性(在适当的情况下这样做)。
待生成的输出的顶点索引集合中的每个顶点索引将识别(索引)在输出的顶点集合中提供的对应顶点。因此,顶点将各自可由(唯一地)识别顶点集合中的顶点的对应索引来识别。优选地,索引是在顶点的任何处理之前(例如,由应用程序/驱动器)提供的顶点的“输入”索引。
相同顶点索引可在输出的顶点索引集合中出现一次以上,和/或情况可能是输出的顶点集合中的一些顶点实际上将不被包括在输出的索引集合中。
待生成的输出的顶点索引集合优选地作为顶点索引的适当序列被提供给基元组装过程,按照索引将用于输出的基元的顺序。
为输出提供的基元配置信息可以是指示并定义如何将顶点索引用于基元(配置到基元中)以用于为输出处理的任何合适且期望的信息。在特别优选的实施方案中,基元配置信息指示要使用顶点索引序列来组装的基元的类型,即,基元应当以例如三角形、三角形线条、三角形扇的形式还是其他配置形式(诸如线或点)。
本发明中的基元组装操作和电路可使用针对正生成的输出定义的顶点索引集合以及基元配置信息来组装基元,该基元然后将在以任何合适且期望的方式生成输出时被处理。
在优选实施方案中,基元组装过程和电路通过为输出定义的顶点索引序列(按照顶点索引序列顺序)来工作,并且基于配置信息从中组装基元,其中每个基元包括来自用于输出的顶点索引序列的适当索引序列(用于所需的基元配置)。
因此,基元组装过程/电路应当并且优选地确实以顶点索引的(期望)序列次序从顶点索引集合(阵列)获取顶点索引,并且基于基元配置信息“组装”对应于基元的所获取的顶点索引的相应子序列。对应地,基元组装过程优选地包括以下步骤:从顶点的集合(阵列)获取顶点索引,并且按照(期望的)顶点索引顺序将顶点作为顶点流输出到基元组装过程以用于组装到基元中。对应地,图形处理器以及优选地基元组装电路优选地包括索引获取器(索引获取电路),该索引获取器可操作用于从(存储的)索引集合(从索引阵列)读取和获取索引并且输出索引序列(流)以用于组装到基元中。
例如,在基元配置指示会指示应生成以三角形形式的基元的情况下,基元组装过程和电路将输出来自顶点索引序列的三个连续索引的相应集合(由此提供三角形序列以供处理)。对于三角形线条,经组装基元的序列将再次包括来自顶点索引序列的三个索引的相应集合,但在该情况下,每个连续三角形将再使用先前三角形中的最后两个索引(并且索引次序将例如反转)。将对应地配置其他基元类型。
基元组装操作(电路)优选地被配置为仅输出“完整”基元(即,仅用于“完整”基元的顶点索引序列)。因此,在只有“不完整”或“退化”基元可从来自索引序列的给定索引集合进行组装的情况下,优选地,基元组装过程/电路不输出基元。
因此,优选地在基元组装级处“移除”任何“有故障”(不完整或退化)基元,由此避免对仅包括在退化或不完整基元中的顶点执行顶点(属性)获取和处理。
对应地,基元组装操作(电路)优选地能够识别并丢弃任何“有故障”(不完整或退化)基元,使得其随后将仅输出完整基元以供进一步处理。这可例如并且优选地根据所讨论的图形API来完成。
在特别优选的实施方案中,基元组装操作/电路被配置为并且可操作以输出“简单”基元,诸如三角形、线或点。最优选地,基元组装操作/电路可操作以将更复杂的基元(诸如线条、线条链、三角形线条、三角形扇、四边形、四边形线条、相邻线、相邻线条、相邻三角形和相邻三角形线条)转换成更简单基元,诸如并且优选地为以下中的一者或多者:三角形、线或点(这些“更简单”的基元然后由基元组装过程/电路输出以供进一步处理)。
基元组装过程(电路)的输出是待处理的(多个)基元的序列,其中从基元组装过程输出的每个基元包括基元的标识符和基元的顶点索引的序列。
每个输出基元的标识符可以是任何合适的和期望的标识符,其可用于唯一地识别例如并且优选地在所讨论的基元集合(例如,所讨论的输出的基元集合)内的基元。在一个优选实施方案中,基元被简单地按顺序编号(有基元组装过程/电路),其中每个基元的序列号充当其标识符。当然,其他布置将是可能的。
在优选实施方案中,例如由于顶点(属性)处理,由基元组装过程(电路)分配的基元标识符可被为所讨论的基元生成和/或分配给所讨论的基元的稍后期标识符覆盖。在优选的此类实施方案中,由基元组装过程(电路)输出的基元还可具有与其相关联的标志以指示由基元组装过程分配给基元的标识符是否可被另一个(例如,稍后期)基元标识符覆盖。
如果需要,基元组装过程(电路)还可输出一个(和每个)基元的其他信息(例如,状态)。(然而,在该级处,基元组装过程(电路)不应当输出并且优选地不输出与经组装基元相关联的任何顶点属性。)
因此,在特别优选的实施方案中,本发明的基元组装过程包括(并且基元组装电路被对应地配置为)从针对以顶点索引序列顺序生成的输出定义的顶点索引序列获取索引,基于基元配置信息将所获取的顶点索引组织(例如,划分)成对应于完整基元的顶点索引的相应子序列,并且输出对应于完整基元的顶点索引的每个相应子序列作为至少与基元的标识符相关联的经组装基元(在优选实施方案中,该标识符是基元的相应序列号)。
在本发明中,如上所讨论,除了为所生成的输出组装完整基元之外,还生成包括经组装基元的顶点的顶点分组。在这方面,每个顶点分组应当且优选地确实包括经组装基元的多个顶点(例如,除了在存在待分配给新顶点分组的最终单个顶点的情况下)。顶点分组可包括任何合适且期望数量的(多个)顶点。
在优选实施方案中,一个(和每个)顶点分组还具有与其相关联的顶点分组的适当标识符(其至少唯一地识别顶点分组集合内的针对所讨论的渲染输出的顶点分组),诸如并且优选地针对顶点分组的适当索引(例如,序列号)。最优选地,还为顶点分组内的每个顶点分配顶点分组内的顶点的标识符(其至少唯一地识别顶点分组的顶点集合内的顶点),诸如并且优选地为针对顶点分组内的顶点的适当索引(例如,序列号)。
将顶点添加到顶点分组直到顶点的阈值数量。因此,顶点的阈值数量应当并且优选地确实对应于可分配给顶点分组(包括在顶点分组中)的顶点的最大许可数量。(对应地,一旦阈值数量的顶点已经被添加到顶点分组,(优选地)没有另外的顶点被添加到顶点分组。)
在优选实施方案中,每个顶点分组可包括多达相同阈值(许可最大)数量的顶点,例如16、32或64个顶点。
在这方面将了解的是,虽然通常将顶点分配给顶点分组直到已将阈值数量的顶点分配给顶点分组(即,顶点分组“已满”),但可能存在以下情况:对于正以本发明的方式针对给定输出生成的最终(最后)顶点分组,将没有足够的顶点(在顶点序列中剩余,例如用于绘制调用)分配给该最终顶点分组以使其达到阈值数量的顶点。因此,在实施方案中,优选地当在待处理的顶点序列中剩余的顶点少于“已满”分组的顶点的阈值数量时,可以允许生成具有少于阈值数量的顶点的分组。
经组装基元的顶点可以任何合适且期望的方式分配给顶点分组(并且分配给多个顶点分组)。
在优选实施方案中,经组装基元的顶点被一个接一个地依次分配给顶点分组,直到对于所讨论的顶点分组达到顶点的阈值数量,在此之后接着对于经组装基元的任何另外顶点开始新顶点分组。优选地,基于(根据)经组装基元的顶点出现在经组装基元的序列中的顺序来将它们分配给分组。
因此,在特别优选的实施方案中,使用经组装基元的顶点索引来生成顶点分组包括将经组装基元的顶点分配给第一顶点分组直到阈值数量的顶点已被分配给第一顶点分组,并且一旦阈值数量的顶点已被分配给第一顶点分组,在此之后开始新顶点分组(并且将经组装基元的任何其他顶点分配给新顶点分组)(再次直到该顶点分组“已满”)(以此类推)。
可以在组装基元时简单地将经组装基元的顶点分配给顶点分组,使得顶点在它们出现在经组装基元中时被简单地分配给顶点分组。
然而,在特别优选的实施方案中,将经组装基元的顶点分配给顶点分组(以及多个顶点分组)被配置为试图避免至少在相同顶点分组内的顶点的重复。
在这点上,申请人已经认识到,针对渲染输出组装的基元序列中的基元可使用相同顶点,使得在用于不同经组装基元的顶点集合中可能存在顶点的重复。在这方面,可以简单地在顶点分组中对应地重复经组装基元中的重复顶点,但是在优选实施方案中,优选地(试图)避免顶点分组中(以及至少相同顶点分组中)的顶点的重复。
因此,在特别优选的实施方案中,顶点分组的生成包括(并且顶点分组生成电路被对应地配置为),当经组装基元的新顶点要被分配给顶点分组时,首先确定顶点是否已经存在于顶点分组中(已经被分配给顶点分组)。对应地,在优选实施方案中,当确定顶点尚未存在于(分配给)顶点分组中时,将顶点分配(添加)给(当前)顶点分组,但是当确定顶点已经存在于顶点分组中时,不将顶点分配(添加)给(当前)顶点分组(除此之前)。
这然后将有助于避免所生成的顶点分组内的顶点的重复。
为了有利于该操作,相应地且对应地优选跟踪哪些顶点已经被包括在顶点分组中。因此,在特别优选的实施方案中,顶点分组的生成包括(并且顶点分组生成电路对应地被配置为)跟踪已分配给顶点分组的顶点,并且优选地使用该跟踪来确定(潜在地)待分配给顶点分组的顶点是否已存在于顶点分组中。
因此,在特别优选的实施方案中,顶点分组的生成还包括将指示已经被分配给顶点分组的顶点的跟踪信息与顶点分组相关联。
用于(试图)避免顶点分组中的顶点的重复的跟踪信息可采取任何合适且期望的形式并且可以任何合适且期望的方式使用。在特别优选的实施方案中,跟踪使用顶点索引(顶点的索引)(其已经被包括在经组装基元中),使得例如并且优选地,针对顶点分组维持已经被包括在顶点分组中的所有顶点的索引的记录,并且然后将要(潜在地)分配给顶点分组的新顶点的索引与已经存在于顶点分组中的顶点索引的记录进行比较以确定顶点是否已经存在于顶点分组中。
因此,在特别优选的实施方案中,一个(和每个)顶点分组至少最初具有与其相关联的已经分配给分组的顶点的索引(并且顶点分组生成对应地优选包括,当顶点已经被分配给顶点分组时,还将经分配顶点的顶点索引与顶点分组相关联)。
然后优选地在顶点分组中“查找”(检查)由基元组装操作输出的经组装基元的顶点(以及优选地经组装基元的顶点的索引),并且当被查找的顶点(索引)已经存在于(已检查)顶点分组中时,顶点将被分配给(当前)顶点分组(但是当被查找的顶点(索引)已经存在于(已检查)顶点分组中时,(新)重复顶点(具有相同索引)将不被分配给(当前)顶点分组(当前正在生成的顶点分组))。
在这方面,可简单地检查要(潜在地)分配给顶点分组的新顶点是否已经存在于“当前”顶点分组(当前正在生成的顶点分组)中(并且在一个实施方案中,就是这样做的)。因此,在这种情况下,将确定经组装基元的顶点是否已经被包括在单个(当前)顶点分组中。
在特别优选的实施方案中,顶点是否已经被分配给顶点分组的确定考虑了多个顶点分组(即,确定顶点是否已经被分配给多个顶点分组中的任一者)。例如并且优选地,在这方面,分配过程可考虑当前正在生成的分组以及紧接在前的一个或多个顶点分组。
在一个优选实施方案中,考虑了当前顶点分组和一个或多个紧接在前的顶点分组。在优选实施方案中,在这方面,可考虑多达例如并且优选地四个顶点分组(例如,当前顶点分组和紧接在前的三个顶点分组)。当然,其他布置将是可能的。
因此,在这种情况下,将对应地跟踪哪些顶点已经被分配给多个顶点分组(优选地当前顶点分组和一个或多个先前顶点分组),然后使用该跟踪信息来确定新顶点是否已经被分配给那些现有顶点分组中的一者。
在这方面,申请人已认识到,可能相对可能的是,在经组装基元的序列中彼此接近的经组装基元将共享顶点,使得其顶点将被分配到“邻近”顶点分组的基元可能共享顶点,使得可能在邻近顶点分组之间存在顶点的重复,使得尝试跟踪并避免此重复是有益的。
然而,对于在该序列中进一步分开的经组装基元序列中的经组装基元,那些基元使用相同顶点的可能性可能较小,使得对于在经组装基元的序列中进一步间隔开的基元而言,设法避免顶点分组中的顶点的重复并非如此有效或必要。因此,在相对于多个顶点分组执行顶点“重复”检查的情况下,优选地仍然仅跨越并针对顶点分组序列中的更有限数量的顶点分组执行该顶点“重复”检查,诸如并且优选地针对顶点分组序列中的不多于四个顶点分组。
对应地,可以是这样的情况:如果在从顶点先前出现时起落在顶点分组“跟踪窗口”之外的经组装基元序列中的经组装基元中再次使用顶点,则顶点将再次被包括在顶点分组中(但是如上所讨论,申请人相信这可能是相对不常见的,并且使用例如多达四个顶点分组的更有限的“跟踪窗口”应当足以避免所生成的顶点分组内的顶点的大多数(或至少足够的)重复)。
优选地,保证任何特定的经组装基元将其顶点存储在例如四个顶点分组的顶点分组“跟踪窗口”内(优选地,使得保证任何特定的基元将其顶点存储在一个或多个特定的、优选选择的、优选预定的(最大)数量(例如,四个)的连续顶点分组内)。
在优选实施方案中(例如,为了帮助跟踪哪些顶点已被分配给“跟踪窗口”内的分组,并且避免“跟踪窗口”内的顶点的重复),维持多个顶点分组的队列,同时经组装基元的顶点正被分配给顶点分组,其中队列中的分组依次生成。优选地,队列包括特定的、优选地选择的、优选地预定最大数量的分组(例如,对应于“跟踪窗口”,例如四个分组)。顶点是否已经被分配给顶点分组的(任何)确定优选地考虑队列中的所有顶点分组。
在特别优选的实施方案中,当开始新顶点分组时(例如且优选地,因为先前顶点分组已达到经分配顶点的阈值数量),将该新顶点分组添加到队列的末尾,接着从队列移除最旧顶点分组(在队列的头部处)并且发送其以用于顶点属性处理。
对应地,顶点是否已经被分配给顶点分组的任何确定优选地考虑队列中的所有顶点分组(而不是已经从队列发送(逐出)的任何顶点分组)。
当然,其他布置将是可能的。
在本发明中,针对(每个)顶点分组的顶点触发顶点属性处理,以由此生成包括顶点分组的顶点的经处理顶点属性的顶点分组(每个顶点分组)。
如上文所讨论,在图形处理中,可能且通常可能存在以下情况:顶点的初始定义的属性值中的至少一些在其由图形处理器在生成输出时使用之前需要以某种方式处理。例如,针对顶点定义的位置可能需要从其中最初定义它们的(例如,模型)空间变换到将针对(并且相对于)其生成输出的(例如,屏幕)空间。顶点属性的此处理通常可被称为“顶点着色”。
在本发明中,针对相应顶点分组执行并触发顶点属性的(适当)顶点处理(顶点着色)。
因此,针对经组装基元的顶点的属性的顶点(属性)处理(顶点着色)在逐个顶点分组的基础上且仅针对分配给顶点分组的顶点而触发。
对应地,在特别优选的实施方案中,在将顶点分配到顶点分组中之前不执行顶点属性处理,即,使得仅针对已分配到顶点分组的那些顶点执行任何顶点属性处理。
然后,这全部将具有基于并且取决于顶点是否被包括在顶点分组中(并且因此被包括在经组装基元中)来有条件地并且“按需”执行针对顶点的属性的任何顶点属性处理(顶点着色)的效果。
在顶点分组“已满”(已达到顶点的阈值数量)并且已完成该顶点分组的生成之后,将有可能执行并触发对作为整体的顶点分组的顶点处理。例如并且在实施方案中,对顶点分组的(所有或至少一些)顶点的顶点属性处理可随着并且在阈值数量的顶点已被分配给顶点分组时(例如,立即)被触发(并且在一个实施方案中,就是这样做的)。因此,在此情况下,当达到顶点的阈值数量的最终顶点被分配给顶点分组时,将接着在该点处触发对顶点分组的顶点的顶点属性处理(即,将响应于顶点分组变为“已满”而触发对顶点分组的顶点的顶点属性处理)。
另选地,可在稍后时间点触发对“满”顶点分组的顶点的处理(并且并非立即(响应于)顶点分组变满)。例如,可响应于另一个顶点分组变满(达到经分配顶点的阈值数量)而触发对顶点分组的顶点的处理。换句话说,在一个实施方案中,并非响应于顶点分组到达顶点的阈值数量而触发对顶点分组的顶点的顶点属性处理,而是响应于另一个不同顶点分组到达顶点的阈值数量而触发对顶点分组的顶点的顶点属性处理。在此类实施方案中,可维持准备用于顶点分组的顶点的顶点属性处理的“已满”顶点分组的队列,其中当新顶点分组添加到队列时,例如且优选地接着触发针对队列中的顶点分组的顶点的顶点属性处理,使得当队列中的最新顶点分组变满时(响应于队列中的最新顶点分组变满),接着触发针对队列中的最旧顶点分组的顶点的顶点属性处理(并且从队列中逐出该顶点分组)。
这些布置可以任何合适且期望的方式来实现和执行。如上所述,情况可能是(例如,对于以本发明的方式为给定输出生成的最终(结束)顶点分组而言),将没有足够的顶点被分配给该最终顶点分组以使其达到顶点的阈值数量一百年在此之后触发对该顶点分组的顶点的顶点属性处理。因此,在不再有顶点留下来以分配给顶点分组(用于所讨论的渲染输出)的情况下,也可以触发(并且在一实施方案中触发)针对顶点分组的顶点的顶点属性处理。因此,在实施方案中,针对顶点分组的顶点的顶点属性处理在顶点分组(不管是相同还是不同顶点分组)达到所分配顶点的阈值数量之后被触发,或不再有顶点要分配给顶点分组以用于渲染输出。
因此,在顶点分组“已满”(已达到顶点的阈值数量)或者没有更多的顶点被留下来以分配给分组并且已完成该顶点分组的生成之后(并且在实施方案中这被完成),将有可能执行并触发对作为整体的顶点分组的顶点处理。
然而,在优选实施方案中,在分组的生成期间(同时分组仍然被分组生成电路跟踪),并且优选地在顶点分组的生成已经完成之前(在顶点分组“已满”之前),针对分配给分组的顶点(附加地或另选地)执行和触发(并且优选地至少开始)顶点处理。这可允许比在执行和触发顶点处理之前等待直到分组“已满”更快地(以较少延迟)执行对分组的顶点的顶点处理。这可因此降低阻止进一步处理(例如,将使用顶点分组对基元执行并且需要经处理顶点属性的处理)的可能性。
例如且优选地,可在已将特定、优选地选定、优选地预定数量的顶点已被分配给顶点分组(例如且对应于图形处理系统可同时处理的顶点的数量,例如对应于用于执行顶点属性处理的执行线程的数量,例如16)之后触发(并且执行)顶点处理。在这方面,针对分配给分组的顶点的子集(每个子集包括特定的、优选地选择的、优选地预定数量的顶点,例如并且对应于用于执行顶点属性处理的执行线程的数量),可触发(并且执行)(并且在实施方案中触发了)顶点处理。针对顶点分组的顶点触发的顶点属性处理(一旦顶点分组已满)可包括可针对顶点分组的顶点执行的任何合适且期望的顶点属性处理。在特别优选的实施方案中,针对顶点分组的顶点触发的顶点属性处理包括针对顶点分组的顶点的一个或多个属性执行顶点属性处理。
在此级处针对顶点处理的顶点属性可为任何合适且期望的顶点属性(与顶点分组的顶点集合中的顶点相关联的属性)。在这方面,将有可能处理与每个顶点相关联的所有属性(所有属性的数据值),或在此级仅可处理顶点的一些属性的子集而非所有属性(例如且优选地,在此级未被处理的属性接着在图形处理流水线的稍后期级处被处理)。
在特别优选的实施方案中,在将经组装基元连同顶点分组一起向前发送以供处理之前,针对顶点分组的顶点仅处理属性中的一些(但并非全部)(例如,一者),其中顶点分组(经组装基元)的顶点的一个或多个其他属性接着在图形处理流水线的稍后期级处进行处理。
在该级处针对顶点分组的顶点仅处理一些而不是全部顶点属性的情况下,则优选地至少处理位置。在特别优选的实施方案中,针对顶点仅处理位置属性(位置)。
通常仅存在由(X,Y,Z,W)分量组成的单个位置属性。在此情况下,所处理的顶点属性将包括(至少且优选地仅)该单个位置属性。然而,如果需要,还可存在也可被处理的其他位置属性,诸如点大小或线宽度(例如,当渲染点和线时)。
因此,在优选实施方案中,在该级处仅处理位置属性(并且因此在优选实施方案中,在该级处不处理变动),但如果需要,将有可能处理一个或多个其他(非位置)属性以及一个或多个位置属性。例如,这种(非位置)属性可以是以下中的一者或多者或全部:线宽/点尺寸;基元着色速率;层ID;和基元ID。
(对于在该级处未处理的任何属性(在该级处未经受任何顶点着色),那些属性可以经受且优选地在稍后时间经受任何所需顶点着色,例如在其被获取以供使用时(在图形处理流水线的适当稍后期级,例如其中它们被获取以供使用)。)
在这方面触发且执行的顶点属性处理(顶点着色)可为任何合适且期望的顶点属性处理(顶点着色),例如且优选地取决于正被处理的顶点属性。
因此,如上文所讨论,在针对顶点处理位置的情况下,则优选地使位置(位置属性)经受适当处理(顶点着色),例如且优选地将位置从其中初始定义它的(例如,模型)空间变换到用于正生成的输出的适当(例如,屏幕)空间。因此,在特别优选的实施方案中,正被处理的顶点的(任何)位置经受适当的处理(顶点着色)操作。
当顶点属性经受顶点处理(顶点着色)时,则属性的处理优选地提供经处理(着色)属性值或值本身以及可由于顶点处理(顶点着色)而生成的任何其他数据值(诸如状态信息)两者。例如并且优选地,在对位置进行顶点着色(位置着色)的情况下,位置着色操作还可例如生成一个或多个参数(值),诸如以下中的一者或多者:可变速率着色参数值、点大小、线宽和/或层ID等。在这种情况下,这些附加参数优选也与“经处理”位置一起提供。当然,其他布置将是可能的。
实际顶点属性(例如,位置)处理(着色)可以任何合适且期望的方式执行。
在优选实施方案中,图形处理器包括并执行适当顶点属性处理级(顶点属性处理电路),该顶点属性处理级可操作且被配置为处理针对渲染输出定义的顶点的顶点属性,其执行期望的顶点属性处理。因此,在优选实施方案中,顶点属性处理级(电路)可操作且被配置(至少)为处理(变换)顶点的顶点位置。
在优选实施方案中,顶点属性处理级(电路)可操作且被配置为执行适当顶点着色器(例如,位置着色器)以执行顶点属性处理(着色),其中接着针对顶点(例如且优选地在存储器中)存储该顶点着色(例如,位置着色)操作的结果。
因此,在特别优选的实施方案中,图形处理器还包括一个或多个执行单元(电路)(着色器核),该执行单元可操作以执行着色器程序(包括顶点着色器程序)以对输入数据值执行处理操作,并且顶点属性处理(着色)由执行适当顶点着色程序的一个或多个执行单元(着色器核)执行。
用于顶点分组的顶点的顶点属性处理应当尤其识别待处理的顶点,以及那些顶点所需的顶点属性处理。优选地,发送对顶点属性处理的一个或多个适当请求以触发期望的顶点属性处理。
因此,在优选实施方案中,触发对顶点分组的顶点属性处理包括触发适当顶点着色器(程序)(例如,位置着色器)的执行以执行顶点着色,例如且优选地通过发送一个或多个顶点(例如,位置)着色请求以触发针对所讨论的顶点的属性的适当顶点(例如,位置)着色操作,以及将经处理顶点属性(例如,位置)(以及由顶点着色生成的任何其他数据)存储在例如存储器中。
对要执行的顶点属性处理的请求可采取任何合适且期望的形式。在优选实施方案中,请求包括图形处理器能够执行顶点属性处理操作所需的信息,例如且优选地(至少)待处理的顶点的身份以及待执行的处理的指示(例如,待执行的着色器程序)。优选地,请求包括将其识别为触发顶点属性处理操作的请求的信息(指示符),和/或识别请求的标识符。请求还可指示和/或允许确定输出(经处理/顶点着色属性)数据应存储于的存储器中的位置。
相应地,对顶点分组的顶点属性处理的请求优选地使用顶点分组的顶点的顶点索引(来自为所讨论的输出初始提供的顶点索引集合)来识别这些顶点(以及相应地其对应顶点属性)以用于顶点处理。这可以并且优选地使用指示哪些顶点已经被分配给顶点分组的相关联顶点索引(如以上所讨论的)。
因此,顶点属性的处理(顶点着色)优选地使用顶点分组中的顶点的索引以识别和确定将针对顶点分组处理的顶点(和顶点属性),该索引可(例如且优选地)从与顶点分组相关联的跟踪信息确定(当顶点分组被组装以跟踪哪些顶点存在于顶点分组中时)。
对顶点属性处理的请求可被直接发送到被配置为执行顶点着色操作的执行单元(着色器核)。然而,在优选实施方案中,请求被发送到图形处理器的管理电路,该管理电路例如可操作以接收相应处理任务(作业)和/或将其分配到图形处理器的处理单元(功能单元)(该管理单元接着将向可用着色器处理(执行)核发出顶点着色操作)。
在优选实施方案中,一次对多个顶点执行顶点属性处理(顶点着色)。例如且优选地,在图形处理器的执行单元可操作以一起执行针对多个顶点的顶点着色程序作为一组(执行针对多个执行线程的相应组(索)的着色器程序,其中每个执行线程表示给定顶点)的情况下,接着优选地针对作为整体的相应线程组(索)发出对顶点分组的顶点的顶点着色请求,使得顶点分组的顶点作为一个或多个相应(全)线程组(索)来进行处理。
顶点属性处理本身可以任何合适且期望的方式执行。例如且优选地,其将包括从顶点分组的顶点存储于存储器中的位置获取顶点分组的顶点的相关属性(例如,位置)(例如,并且优选地基于且使用所讨论的顶点分组的顶点的顶点索引),适当地处理那些顶点属性(例如,并且优选地使其经受适当的顶点着色),并且接着将顶点分组的顶点的经处理属性(例如,位置)彼此相关联地(一起)存储于例如存储器中,以由此提供包括顶点分组的顶点的经处理顶点属性的所生成的顶点分组。
一旦已针对顶点分组的顶点执行适当顶点属性处理(顶点着色),将已生成包括顶点分组的顶点的经适当处理的属性(例如,经变换位置)的顶点分组并且将其存储于例如且优选存储器中(并且接着可从该存储器检索顶点分组的顶点的经适当处理的顶点属性(例如,经变换位置)并且由图形处理流水线的稍后期级使用该顶点属性)。
还可以仍然在该级处维持顶点分组中的顶点的顶点索引的跟踪信息(来自所讨论的输出的初始提供的顶点索引集合)。然而,在优选实施方案中,至少在(并且优选地仅在)不对顶点执行进一步顶点着色的情况下,不进行此操作,并且一旦最初提供的顶点索引已用于(例如并且优选地)触发所讨论的顶点的适当处理(顶点着色)(一旦顶点分组已被“发送”以用于顶点属性处理),可以且优选地丢弃(清除)分配给该顶点分组的顶点的顶点索引的相关联记录,即使得在此之后不再维持顶点分组中的顶点的(原始)顶点索引的记录。在此情况下,优选地通过参考顶点所属的顶点分组及其在该顶点分组内的标识符(例如,索引(位置))来识别顶点。
这于是具有以下效果:当顶点分组被组装时并且在针对顶点分组的顶点的顶点属性处理被触发之前,顶点将在顶点分组中被单独地跟踪,但是一旦针对顶点分组的顶点的顶点属性处理已经被触发,(优选地)不再执行对顶点分组内的单独顶点的跟踪。
在这方面,申请人已经认识到,一旦已经生成了顶点分组,可以并且有可能针对作为整体的分组跟踪该顶点分组中的顶点的使用和处理,而不是仍然必须针对顶点分组内的各个顶点来这样做。因此,一旦顶点分组已经“完成”,顶点分组的单独顶点跟踪信息就可以并且优选地被丢弃(并且不再使用或执行),并且例如且优选地不再期望考虑是否存在相对于顶点分组的顶点的任何重复。
如下文将更详细讨论,这样接着减少在初始基元组装和顶点分组生成过程之后对单独顶点的“跟踪”要求。
向正由图形处理器执行的图形处理流水线的稍后期级提供经组装基元和包括经处理顶点属性的所生成的顶点分组以用于处理。这可以按任何合适且所需的方式来完成。
提供给图形处理流水线的稍后期级以供处理的经组装基元可基于基元配置信息以它们从为输出提供的顶点索引集合组装的形式提供到图形处理流水线的稍后期级(并且接着在生成顶点分组时使用)(并且在一个优选实施方案中,就是这样做的)。
因此,在此情况下,提供给图形处理流水线的稍后期级的每个经组装基元将包括基元的标识符和基元的一个或多个顶点索引的集合,该顶点索引是来自为输出(最初)提供的顶点索引的集合(并且在其中)的索引(并且基元最初从该集合进行组装)。
在特别优选的实施方案中,在已生成顶点分组之后提供给图形处理的稍后期级的经组装基元已经被生成,并非使用来自(最初)为输出提供的顶点索引集合的顶点索引(并且参考其定义),而是使用相对于所生成的顶点分组且具体地在单独顶点分组内对顶点进行索引(并且参考顶点)的顶点索引来定义并且使用该顶点索引。
因此,在优选实施方案中,提供到图形处理流水线的稍后期级的一个(和每个)经组装基元包括(优选地除了基元的标识符之外)基元的顶点索引集合,但其中顶点集合中的每个顶点索引对所生成的顶点分组内(并且相对于该顶点分组)的索引进行索引并且指示该索引(而不是来自(最初)为输出提供的顶点集合的顶点索引)。最优选地,提供到图形处理流水线的稍后期级的经组装基元的每个顶点索引包括(顶点所属于(在其内)的顶点分组的)顶点的顶点分组的(的标识符)的指示,以及所讨论的顶点分组内的该顶点的标识符(例如,该顶点的位置(索引))。
如上文所讨论,在特别优选的实施方案中,针对渲染输出生成的顶点分组优选地全部被分配有标识符,该标识符(唯一地)识别针对输出的所生成的顶点分组的集合内的分组。此顶点分组标识符可(例如且优选地)为顶点分组的适当索引,并且(例如且优选地)通过以顶点分组生成的顺序对顶点分组进行编号而生成。
对应地,分配给顶点分组的每个顶点优选地具有(唯一地)识别顶点分组内的顶点的对应标识符。同样,在优选实施方案中,给定顶点分组内的顶点标识符优选地包括顶点分组内的顶点的索引,并且优选地通过在顶点分组内按顺序对顶点进行编号来在顶点分组内对顶点进行索引。
(当然,其他布置将是可能的。)
因此,在此情况下并且在优选实施方案中,提供到图形处理流水线的稍后期级(在已生成顶点分组之后)的经组装基元将包括基元的标识符和基元的一个或多个顶点索引的集合,其中基元的每个顶点索引包括顶点分组标识符(索引)和所讨论的顶点分组中的顶点的标识符(索引)。
对应地,在特别优选的实施方案中,一旦经组装基元已基于期基元配置信息从为输出提供的顶点索引集合来生成,并且那些顶点已被添加到顶点分组,基于顶点已被分配给的顶点分组来重新索引经组装基元的顶点,其中新的、基于顶点分组的索引然后被用作经组装基元的顶点索引。
可以任何合适且期望的方式实现经组装基元的顶点的这种重新索引。在优选实施方案中,当经组装基元的顶点被分配给顶点分组时,该顶点的“基于分组的”索引然后与经组装基元相关联,以由此变成经组装基元(中)的所讨论的顶点的顶点索引。以此方式,经组装基元的适当基于分组的顶点索引可已且优选地在顶点被分配给顶点分组时生成。
对应地,在其中检查经组装基元的顶点是否已经存在于顶点分组中的优选实施方案中,在确定经组装基元的顶点已经存在于顶点分组中(使得顶点不被再次分配给(当前)顶点分组)的情况下,则在该情况下,然后与经组装基元相关联的该顶点的“基于分组的”索引将指示该顶点在顶点分组中的已经存在的实例(即,该顶点被确定为已经存在于的顶点分组的顶点分组标识符(索引),以及所讨论的顶点分组中的该顶点的现有实例的标识符(索引))。
如下文将进一步讨论,使用基于顶点分组的索引将经组装基元的顶点索引提供到图形处理流水线的稍后期级尤其促进跟踪图形处理流水线的稍后期级对顶点分组的使用,并且具体地且优选地识别何时已由图形处理流水线的稍后期级适当地处理顶点分组中的所有顶点,由此减少和/或避免单独地跟踪图形处理流水线的稍后期级对顶点的使用的需要。
可以任何合适且期望的方式将经组装基元提供到图形处理流水线的稍后期级。例如,在针对顶点分组生成过程对经组装基元进行组装时(优选地如上文所讨论对其顶点索引进行重新索引),可将经组装基元自身提供到图形处理流水线的稍后期级。在一个优选实施方案中,就是这样做的。
在此情况下,为了允许用于经组装基元的顶点的顶点属性处理的时间(在所生成的顶点分组中),并且为了在处理经组装基元时适当地获取该数据以供使用,优选地存在某种形式的延迟隐藏延迟机制,诸如且优选地队列(例如,FIFO),经组装基元在其到达图形处理流水线的下一级之前通过该队列以供处理。此接着将起作用以在经组装基元将由图形处理流水线的稍后期(例如,下一)级处理之前实际上隐藏基元的初始组装、顶点分组的生成与顶点属性处理之间的任何延迟。
因此,在一个优选实施方案中,将经组装基元提供到图形处理流水线的稍后期级包括在基元被传递到图形处理流水线的下一级以供处理之前,首先使基元通过延迟隐藏缓冲区(诸如队列,诸如FIFO)。
在另一个优选实施方案中,图形处理器和图形处理流水线可操作并被配置为(并且包括被配置为进行以下的电路)在稍后时间“重新生成”经组装基元的序列(其用以生成顶点分组),而非使用经组装基元(来自顶点分组生成过程)通过的延迟隐藏缓冲区(诸如队列)。
因此,在此情况下,将存在用于出于生成顶点分组且触发对顶点分组中的顶点的顶点属性处理(以上文所讨论的方式)的目的而组装基元序列的初始基元组装过程,但接着将存在第二稍后期基元组装过程,其将重复较早期基元组装过程以实际上重新生成经组装基元的(相同)序列,其中该重新生成的经组装基元的(第二)序列然后被发送到图形处理流水线的稍后期级(并且借此提供用以生成顶点分组的经组装基元)。
在此情况下,稍后期的第二基元组装过程(用于重新生成经组装基元)可以(并且优选地)在稍后时间(例如且优选地)被发起和触发以便允许并且(试图)隐藏顶点属性处理及顶点分组的经处理顶点属性的生成中的任何延迟(例如,以(试图)使将经组装基元提供到图形处理流水线的稍后期级与所生成顶点分组的可用性同步)。
在这方面,例如,在执行稍后期的第二基元组装过程(以重新生成经组装基元)之前(并且在一个优选实施方案中,就是这样做的),等待直到已经针对所讨论的输出的所有生成的顶点分组触发顶点属性处理(并且优选地直到顶点属性处理已经完成)。
另选地,可在“第一”基元组装顶点分组生成过程已经生成了所有经组装基元和顶点分组之前开始稍后期的第二基元组装过程(以重新生成经组装基元),但是在“第一”基元组装过程中的组装基元与在第二稍后期的基元组装过程中的组装该基元之间存在一些延迟,以便作为第一基元组装过程的一部分,一旦已经触发(并且优选地已经完成)了针对该基元的顶点的顶点属性处理,则尝试确保仅在第二基元组装过程中再次组装基元。在这方面可使用任何合适且期望的布置。
在本发明的这些实施方案中,用于生成顶点分组且触发对顶点分组的顶点的顶点属性处理的一个或多个经组装基元的序列的初始组装实际上且优选地可视为“预取”操作,该操作进行操作以触发且执行对经处理顶点属性(以顶点分组的形式)的“预取”(预准备),其中接着在稍后时间执行用于渲染输出的期望“基元组装”(优选地,一旦已完成“预取”),以由此组装基元并且使用“预取”经处理顶点属性来触发其处理。
因此,在优选实施方案中,本发明的方法包括(并且图形处理器对应地被配置为)在执行第一基元组装过程之后(并且作为生成一个或多个顶点分组的第一基元组装过程的一部分,如上所讨论),在此之后执行第二基元组装过程,该第二基元组装过程包括:基于为输出提供的基元配置信息来组装将在从为输出提供的顶点索引集合生成输出时处理的一个或多个基元的序列,经组装基元序列的每个经组装基元包括基元的标识符和基元的一个或多个顶点索引的集合;以及将来自第二基元组装过程的经组装基元和包括从第一基元组装过程生成的经处理顶点属性的已生成顶点分组提供给图形处理流水线的稍后期级以供处理。
第二基元组装过程(其中在已生成顶点分组并且已触发对顶点分组的顶点的顶点属性处理之后再次执行(重复)基元的组装)可操作以组装基元以用于以任何合适且期望的方式供应到图形处理流水线的稍后期级。
该第二、稍后期的基元组装操作应当是这样的以便组装相同的基元序列(如同为了生成顶点分组的目的而组装),并且应当且优选地以旨在被提供给图形处理流水线的稍后期级的适当形式生成经组装基元。
因此,在经组装基元使用来自(最初)为输出提供的顶点索引集合的顶点索引的情况下,稍后期的(第二)基元组装过程可以(并且优选地确实)简单地包括(再次)基于输出的基元配置信息组装将在从为输出提供的顶点集合生成输出时处理的一个或多个基元的序列(其中经组装基元序列的每个经组装基元接着包括基元的标识符和基元的一个或多个顶点索引(来自为输出提供的顶点索引集合)的集合)。
另一方面,在期望将基于顶点分组的索引系统用于经组装基元的顶点以供图形处理流水线的稍后期级对其的处理(如上文所讨论)的情况下,则第二基元组装过程(用于重新生成经组装基元的序列)应当并且优选地可操作并被配置为生成使用基于顶点分组的索引方案来定义的经组装基元的序列。
因此,在这种情况下,稍后期的(第二)基元组装过程应当并且优选地包括:基于输出的基元配置信息(再次)组装将在从为输出提供的顶点集合生成输出时处理的一个或多个基元的序列,其中经组装基元序列的每个经组装基元包括基元的标识符以及指示要用于基元的顶点的一个或多个基于顶点分组的顶点索引的集合(并且最优选地,其中经组装基元的每个顶点索引包括顶点所属于(在其中)的顶点分组的指示以及该顶点在所讨论的顶点分组内的身份(位置(索引)))。
在此情况下,可在第二稍后期基元组装过程中以任何合适且期望的方式(重新)生成基于顶点分组的索引的经组装基元。最优选地,这是通过第二稍后期基元组装过程来完成,该第二稍后期基元组装过程再次可操作以使用经组装基元的顶点索引来生成适当顶点分组(并且因此生成与第一基元组装过程所生成的顶点分组相同的顶点分组集合,接着针对该顶点分组触发顶点属性处理),以便由此能够确定针对经组装基元的顶点的适当的基于顶点分组的索引。
然而,在这种情况下,虽然为了索引目的而重新生成顶点分组以便确定经组装基元的索引将属于哪个或哪些顶点分组(以及所讨论的顶点分组内的顶点的索引/位置),但第二、稍后期的基元组装过程不应当并且优选地不触发针对顶点分组的顶点的任何顶点属性处理(与第一基元组装和顶点分组生成过程不同)。
在此情况下,优选地将经组装基元的顶点分配给顶点分组,并且优选地以与第一基元组装过程相同的方式生成顶点分组(即,使得在第二、稍后期基元组装过程中使用基于顶点分组的索引方案来生成相同的顶点分组且因此生成经组装基元的相同序列,如在第一基元组装过程中(其用于触发对基元的顶点的顶点属性处理)生成)。
因此,在特别优选的实施方案中,本发明的方法包括(并且图形处理器被对应地配置为)(并且包括被对应地配置为进行以下的处理电路):
执行第一基元组装过程以基于为所述输出提供的所述基元配置信息组装将在从为所述输出提供的所述顶点索引集合生成所述输出时处理的一个或多个基元的序列;
使用所述经组装基元的所述顶点索引来生成一个或多个顶点分组,每个顶点分组包括所述经组装基元的多个顶点;
其中所述使用所述经组装基元的所述顶点索引来生成一个或多个
顶点分组包括:
将经组装基元的顶点分配给顶点分组,直到已将阈值数量的顶点分配给所述顶点分组;以及
触发针对所述顶点分组的所述顶点的顶点属性处理,以由此生成包括所述顶点分组的所述顶点的经处理顶点属性的顶点分组;
以及
在此之后:
执行第二基元组装过程以基于为所述输出提供的所述基元配置信息组装将在从为所述输出提供的所述顶点索引集合生成所述输出时处理的一个或多个基元的所述(相同)序列;
使用来自所述第二基元组装过程的所述经组装基元的所述顶点索引来生成一个或多个顶点分组,每个顶点分组包括所述经组装基元的多个顶点;
其中所述使用来自所述第二基元组装过程的所述经组装基元的所
述顶点索引来生成一个或多个顶点分组包括:
将经组装基元的顶点分配给顶点分组,直到已将阈值数量的顶点分配给所述顶点分组;
以及
向正由所述图形处理器执行的所述图形处理流水线的稍后期级提供来自所述第二基元组装过程的所述经组装基元和包括所述经处理顶点属性的所生成的顶点分组以用于处理。
如上文所讨论,在本发明的这些实施方案中,使用来自第二顶点组装过程的经组装基元的顶点索引来生成顶点分组不应当包括并且优选地不包括触发或执行针对顶点分组的顶点的任何顶点属性处理。而是且优选地,优选简单地使用在第二基元组装过程之后生成的顶点分组以便允许第二基元组装过程输出经组装基元,其将基于顶点分组的索引方案用于经组装基元。
因此,在本发明的这些实施方案中,方法优选地包括(并且图形处理器被对应地配置为,并且包括被对应地配置为进行以下的处理电路):使用该使用来自第二基元组装过程的经组装基元来生成的顶点分组以生成由第二基元组装过程组装的基元的基于顶点分组的索引,由此第二基元组装过程提供待处理的一个或多个经组装基元的序列,其中来自第二基元组装过程的经组装基元的序列的每个经组装基元包括基元的标识符和基元的一个或多个基于顶点分组的顶点索引的集合。
顶点分组的顶点的经处理顶点属性(一旦其已被生成且适当地存储)可以任何合适且期望的方式提供到图形处理流水线的稍后期级。在特别优选的实施方案中,经处理顶点属性从它们被存储的地方(例如,在(主)存储器中)获取以用作正由图形处理器执行的图形处理的一部分(以及对于经组装基元)。
在特别优选的实施方案中,将经处理顶点属性获取到本地(中间)存储装置(诸如且优选地,被配置为存储经处理顶点属性的缓冲区(“顶点缓冲区”))中以供使用。
因此,在特别优选的实施方案中,图形处理器包括存储所获取的经处理顶点属性的缓冲区(顶点缓冲区)(并且使用来自该缓冲区的经处理顶点属性以执行使用经处理顶点属性的处理)。
对应地,在特别优选的实施方案中,图形处理器包括适当处理的顶点属性获取器(获取电路),其可操作且被配置为获取顶点分组的经处理顶点属性以供使用,并且优选地获取到适当的本地(中间)存储装置(诸如且优选地顶点缓冲区(如上文所讨论))中。
在优选实施方案中,经处理顶点属性可例如且优选地从例如顶点缓冲区逐出以便为新的经处理顶点属性释放例如顶点缓冲区中的空间。
针对顶点获取(到顶点缓冲区中)的经处理顶点属性应当并且优选地为已针对且在生成顶点分组时处理的那些顶点属性,并且因此优选地包括顶点的属性中的仅一些但非全部(例如,一个),并且优选地(仅)包括顶点的位置属性(位置)。
所生成的顶点分组中的顶点的经处理顶点属性可以任何合适且期望的方式获取到例如顶点缓冲区中。例如,当单独顶点将用于经组装基元时,可为这些单独顶点获取它们。
在特别优选的实施方案中,将所生成的顶点分组的经处理顶点属性获取到顶点缓冲区中以供在逐个顶点分组的基础上使用。因此,在特别优选的实施方案中,包括顶点分组的顶点的经处理顶点属性的顶点分组作为整体被获取(例如,到顶点缓冲区中),即使得顶点分组的所有顶点的经处理顶点属性将被获取(到顶点缓冲区中)以供一起使用(同时)(而不是例如在任何给定时间获取顶点分组的仅一些但并非所有顶点的经处理顶点属性)。
对应地,在特别优选的实施方案中,获取顶点分组的顶点的经处理顶点属性包括将整个生成的顶点分组获取到顶点缓冲区中,并且顶点缓冲区被配置和进行操作以存储(并且优选地仅存储)“整数”个顶点分组(即,不存储仅一些但并非全部(部分)的顶点分组)。
对应地,当要从顶点缓冲区逐出经处理顶点属性时,优选地从顶点缓冲区逐出整个顶点分组,而不是例如逐出顶点分组的顶点的经处理顶点属性中的仅一些而不是全部。
因此,在特别优选的实施方案中,经处理顶点属性获取器(获取电路)被配置为且可操作以控制将(整个)顶点分组获取到例如顶点缓冲区中(以及从例如顶点缓冲区逐出(整个)顶点分组)。
中间存储装置(例如,顶点缓冲区)可被配置为仅存储单个顶点分组(单个顶点分组的顶点的经处理顶点属性),但在特别优选的实施方案中可存储多个顶点分组(诸如且优选地多达特定、优选地选定、优选地预定的多个顶点分组)(其经处理顶点属性)。例如,顶点缓冲区可被配置为在任何给定时间存储多达四个或六个顶点分组(多达四个或六个顶点分组的经处理顶点属性)。
同时在例如顶点缓冲区中存储一个以上完整顶点分组将有助于促进适当处理的顶点属性可用于经组装基元,因为它们需要其经处理顶点属性而非例如经组装基元在其对应经处理顶点属性加载到顶点缓冲区中时必须等待。
在优选实施方案中,尤其根据且基于顶点分组的顶点的经处理顶点属性的生成的完成来控制将顶点分组的经处理顶点属性获取到顶点缓冲区中。因此,当完成顶点分组的顶点的顶点属性的处理(使得完成的顶点分组被存储于存储器中)时,优选地适当地用信号通知该处理,使得可接着视情况将顶点分组加载到顶点缓冲区中。例如且优选地,可将顶点分组的生成的完成用信号通知给适当顶点分组获取器(获取电路),该顶点分组获取器接着将可操作以将完成的顶点分组加载到顶点缓冲区中(在适当时间)。
对应地,顶点分组优选地在它们变得就绪时被加载到顶点缓冲区中(并且达到顶点缓冲区的容量)。因此,顶点分组优选地被依次加载到顶点缓冲区中,优选地按照它们被生成的顺序(次序)(随着基元被组装)。这将意味着将顶点分组加载到顶点缓冲区中将遵循经组装基元的序列,使得相关顶点分组应当以待处理的经组装基元的序列的适当顺序存在于顶点缓冲区中。
在顶点分组准备就绪时将顶点分组加载到顶点缓冲区中优选地被配置成使得当将使用顶点分组的顶点的对应经组装基元将使用来自顶点分组的顶点来进行处理(即,将需要来自顶点缓冲区的经处理顶点属性)时,包含相关经处理顶点属性的顶点分组将存在于顶点缓冲区中。如上文所讨论,优选地存在适当延迟隐藏机制,其用于延迟将经组装基元发送到稍后期基元组装过程,直到已准备相关顶点分组并且将相关顶点分组获取到顶点缓冲区中。
对应地,当经组装基元将被处理并且需要来自顶点缓冲区的经处理顶点属性时,优选地确定(例如且优选地根据基元顶点的基于顶点分组的索引)包含所讨论的基元的顶点的经处理顶点属性的对应顶点分组以确定基元的经处理顶点属性存储于(顶点缓冲区中的)哪个(哪些)顶点分组中。(在所需的顶点分组尚未存在于顶点缓冲区中的情况下,则应当并且优选地适当地停止对所讨论的基元的处理,直到已经将相关顶点分组获取到顶点缓冲区中。)
对应地,优选地依次从顶点缓冲区逐出顶点分组,优选地按照它们被获取到顶点缓冲区中的顺序(次序)。
因此,优选地以先入先出的顺序将顶点分组加载到例如顶点缓冲区中、使用该顶点分组并且然后从该顶点缓冲区中逐出该顶点分组。
顶点分组逐出操作(从例如顶点缓冲区)优选地被配置成使得一旦(已经确定)顶点缓冲区中的顶点分组中的顶点将不再被要求用于经组装基元的期望处理,顶点分组应当仅(并且将仅)从顶点缓冲区逐出(例如,使得它可被另一个顶点分组替换)。
可控制顶点分组从例如顶点缓冲区的逐出,使得一旦将不再需要来自顶点缓冲区的顶点分组中的顶点,顶点分组应当仅从顶点缓冲区逐出,从而以任何合适且期望的方式处理经组装基元。
在特别优选的实施方案中,跟踪经组装基元的顶点分组的使用,并且一旦从该跟踪确定针对(任何)经组装基元将不再需要来自例如顶点缓冲区的顶点分组中的经处理顶点,则允许从顶点缓冲区逐出顶点分组(但是不允许顶点分组)(除了允许从顶点缓冲区逐出之外,除非并且直到跟踪顶点分组中的顶点的使用确定了可(安全地)从顶点缓冲区中逐出顶点分组)。
可以任何合适且期望的方式跟踪针对经组装基元的来自顶点缓冲区的顶点分组的使用。例如并且优选地,使用顶点分组的最后基元可在经组装基元的序列中被适当地指示(例如,通过使用适当的标志)。
在优选实施方案中,跟踪顶点分组的使用(以有利于从顶点缓冲区中逐出它们)包括(至少)跟踪和确定何时不再有经组装基元将使用包括在特定顶点分组中的顶点(即,使用顶点分组中的顶点的所有基元已经被组合)。
在顶点被简单地依次添加到顶点分组直到顶点分组已满或者仅尝试避免相同顶点分组内的顶点的重复的情况下,这可以并且优选地基于识别何时针对经组装基元的顶点开始新顶点分组来确定(因为当开始新顶点分组时,可假设将使用先前的、现在完成的顶点分组的所有经组装基元已经被组装)。
如上所讨论,在当生成顶点分组时维持多个顶点分组的例如队列以便试图避免多个顶点分组内和跨多个顶点分组的顶点的重复的情况下,则优选地跟踪和识别何时不再检查顶点分组以避免顶点分组中的经组装基元的顶点的重复(“离开”重复检查队列),因为在该点处,可再次假设稍后的经组装基元将不使用来自所讨论的顶点分组的顶点(将使用所讨论的顶点分组的所有经组装基元已经被组装)。
一旦已确定了将使用顶点分组的所有经组装基元已被组装(并且包括在经组装基元的序列中),则优选地将其指示(用信号通知)给正由图形处理流水线的图形处理器执行的图形处理流水线的稍后期级,该稍后期级是将使用来自例如顶点缓冲区的顶点分组中的顶点属性的图形处理流水线的最后级或在其之后,使得该稍后期级可识别将使用特定顶点分组的所有经组装基元何时已被处理到和/或直到包括图形处理流水线的该稍后期级。这将接着允许图形处理流水线的稍后期级识别使用给定顶点分组的所有经组装基元何时已被处理直到(和/或由)图形处理流水线的该稍后期级,使得(例如且优选地)接着可确定在顶点缓冲区中不再需要所讨论的顶点分组(并且因此可安全地从顶点缓冲区逐出)。
将使用顶点分组的所有经组装基元已被组装的信号可以任何合适且期望的方式提供到图形处理流水线的稍后期级。在特别优选的实施方案中,适当信号(指示)(例如,顶点分组“引退”指示)与经组装基元的序列相关联(例如,被包括在经组装基元的序列中)(例如,是在使用分组的最后期基元中设置的标志或者在将使用所讨论的顶点分组的最后经组装基元之后(并且优选地紧接在最后经组装基元之后)提供的指示),使得当关于经组装基元的序列看到该顶点分组“引退”指示时,则可知道不再有经组装基元的序列中的经组装基元将使用来自顶点缓冲区的所讨论的顶点分组(并且因此所讨论的顶点分组可安全地从顶点缓冲区逐出)。
当其看到(接收)顶点分组的顶点分组“引退”信号时,图形处理流水线的稍后期级优选地接着例如且优选地将适当顶点分组“逐出”信号发送到顶点分组获取过程(获取电路),该顶点分组获取过程(获取电路)控制顶点分组到例如顶点缓冲区中的获取以及顶点分组从例如顶点缓冲区的逐出,以指示所讨论的顶点分组可(安全地)从例如顶点缓冲区逐出(如可假设在该点处,没有进一步经组装基元将需要来自顶点缓冲区的所讨论的顶点分组)。
该顶点分组“引退”信号优选地由基元组装过程提供并且作为基元组装过程的一部分,因此在仅存在单个“早期”基元组装过程的情况下,其由该过程提供,或者在重复“早期”基元组装过程以重新生成组装基元序列的情况下(如上所讨论),其由“早期”基元组装过程的第二实例提供,该第二实例操作以重新生成经组装基元的序列以供处理。
因此,在特别优选的实施方案中,基元组装过程跟踪经组装基元的顶点分组的使用,并且向经组装基元序列提供序列中何时不再有(不再有另外)经组装基元将使用特定顶点分组中所包括的顶点的指示(即使用顶点分组中的顶点的所有基元已经被组装并且包括在经组装基元的序列中)。
顶点分组“引退”信号应当并且优选适当地识别所讨论的顶点分组,例如并且优选地通过使用顶点分组的适当标识符。
响应于来自图形处理流水线的稍后期级的“顶点分组逐出”信号,可立即从顶点缓冲区逐出顶点分组,或可简单地将其注为能够被逐出,并且接着在需要用于新顶点分组的空间时以及如果需要用于新顶点分组的空间时被逐出。例如,顶点分组获取和逐出处理(电路)可以并且优选地维持可被逐出的那些顶点分组的记录,以便能够根据需要以及在需要时逐出顶点分组。
所生成的顶点分组的经处理顶点属性应当并且优选地从例如顶点缓冲区用于经组装基元的至少一些处理,但一旦已完成将来自顶点缓冲区的那些属性用于该处理,则将不再需要来自顶点缓冲区的相关顶点属性。因此,在特别优选的实施方案中,顶点分组“逐出”信号的发送在图形处理序列(流水线)中的来自顶点缓冲区的经处理顶点属性已用于经组装基元(并且针对经组装基元将不再需要来自顶点缓冲区)的点之后的适当点处且优选地在该点处执行。
因此,顶点分组逐出信号应当并且优选地仅在和一旦顶点分组将不再需要从顶点缓冲区用于经组装基元时被发送。因此,其优选地从图形处理级发送,在此之后,针对任何经组装基元将不再需要来自顶点缓冲区的顶点分组中的经处理顶点属性。(对应地,顶点分组“引退”信号优选地通过直到并且包含图形处理级(点)的图形处理流水线发送,在此之后,针对任何经组装基元将不再需要来自顶点缓冲区的顶点分组中的经处理顶点属性,使得处理级接着可看到顶点分组“引退”信号并且响应于此而发送适当顶点分组“逐出”信号。)
这可在经组装基元的处理中的任何合适且期望的级处进行。
例如,在经组装基元的处理中可存在使用来自顶点缓冲区的经处理顶点属性的级,例如其中经处理顶点属性与经组装基元自身相关联。顶点分组优选地不(能够)从顶点缓冲区中逐出,至少直到使用顶点分组的所有经组装基元已经通过经组装基元的处理中的这个级,例如经组装基元的处理中的一个级,其中经处理顶点属性与经组装基元本身相关联。
在特别优选的实施方案中,在确定经组装基元是否可见(并且因此应当被进一步处理)之后,在经组装基元的处理中的点处发送顶点分组“逐出”信号。
例如,在基于图块的图形处理的情况下,可存在且通常将存在某种形式的剔除(例如,可见性),检查经组装基元以确定经组装基元实际上应添加到基元列表并且包括在基元列表中(或以其他方式被剔除且不包括在基元列表中)。该剔除可以并且优选地基于基元的潜在可见性,并且因此可包括以下中的一者或多者或全部:正面/背面剔除、视锥体剔除、样本感知剔除等。
在优选实施方案中,在图形处理器执行基于图块的处理并且包括这种(可见性)剔除过程作为拼接(tiling)过程的一部分的情况下,在该剔除确定级之后(并且优选地紧接在该剔除确定级之后)执行顶点分组逐出信号的发送以从例如顶点缓冲区逐出顶点分组,使得一旦使用给定顶点分组的所有经组装基元已经受剔除确定,发送顶点分组“逐出”信号。
使用对来自顶点缓冲区的顶点分组的使用的跟踪来从顶点缓冲区逐出顶点分组可以任何合适且期望的方式来执行。在优选实施方案中,如上文所讨论,存在适当顶点分组获取器(获取电路),其可操作并被配置为将顶点分组加载到顶点缓冲区中并且从顶点缓冲区逐出顶点分组,并且顶点分组使用跟踪在确定(响应于确定)不再需要来自顶点缓冲区的顶点分组时将适当顶点分组“逐出”信号发送到顶点分组获取器,使得顶点分组获取器接着可在需要时从顶点缓冲区逐出顶点分组。
当然,其他布置将是可能的。
将顶点分组作为整体加载到例如顶点缓冲区中和从所述顶点缓冲区逐出顶点分组,并且在逐个顶点分组的基础上跟踪经组装基元的经处理顶点属性的使用意味着仅需要跟踪和管理作为整体的顶点分组的使用和寿命(而非必须例如跟踪和管理顶点缓冲区中的单独顶点的寿命和使用)。然后,这可显著地减小和简化对经组装基元的经处理顶点的跟踪和管理以及对经组装基元的顶点的经处理顶点属性数据的使用。
在特别优选的实施方案中,例如并且优选地,适当地跟踪存储在例如顶点缓冲区中的顶点分组以便跟踪以下中的一者或多者并且优选地跟踪全部:缓冲区中的最旧顶点分组(其然后将优选地是要逐出的下一个分组)、缓冲区中的“当前”顶点分组(其顶点当前正由经组装基元使用的顶点分组)、以及接下来要使用的顶点分组。对顶点缓冲区中的顶点分组的这种跟踪可以任何合适且期望的方式实现,诸如通过维护指向缓冲区中的不同顶点分组的位置的适当指针。
一旦已将包括经组装基元的经处理顶点属性的顶点分组获取到例如顶点缓冲区中,则可以且优选地使用尤其从顶点缓冲区获取的经处理顶点分组来处理经组装基元。该处理可以是对经组装基元的任何且期望的处理。
在特别优选的实施方案中,图形处理器还包括(逻辑上)在顶点分组获取级(电路)之后的“后期”基元组装过程(级)(和电路),其可操作并被配置为输出待处理的一个或多个经组装基元的序列(对应于提供给顶点分组获取级(电路)的经组装基元的序列),在这种情况下(并且在该级处),经组装基元的序列的每个经组装基元包括(至少)基元的标识符和经组装基元的每个顶点的(并且对应于每个顶点的)一个或多个经处理顶点属性的集合。
因此,该后期基元组装级(电路)优选地可操作并被配置为将从顶点缓冲区获取的经处理顶点属性(和任何其他获取的数据)与相关经组装基元相关联,并且将包括适当获取的经处理顶点属性的经组装基元序列输出到图形处理流水线的稍后期级以供执行。
因此,在特别优选的实施方案中,本发明的方法包括(并且图形处理器对应地包括)“早期”基元组装级(电路),该“早期”基元组装级(电路)可操作以基于基元配置信息(如上所讨论)从顶点索引组装基元,该“早期”基元组装级(电路)跟随有在经处理顶点属性(顶点分组)获取之后的“后期”基元组装级(电路),该后期基元组装过程(电路)输出待处理的经组装基元的序列,其中该级的每个经组装基元包括基元的标识符和经组装基元的每个顶点(并且对应于每个顶点)的一个或多个经处理顶点属性的集合(基于从早期基元组装级(电路)输出的经组装基元的所指示的顶点索引)。
因此,“后期”基元组装过程(电路)优选地接收(和/或获取)来自初始(早期)基元组装级(电路)的经组装基元(的序列)和来自顶点分组(在顶点缓冲区中)的经处理顶点属性(和任何其他获取的数据)作为输入,并且基于并使用那些输入来输出经组装基元的(对应)序列,该序列针对每个基元包括所讨论的基元的顶点的一个或多个经处理顶点属性。后期基元组装过程(电路)应当并且优选地输出与由初始(早期)基元组装过程(电路)输出的经组装基元序列相同的经组装基元序列(并且以相同的基元(序列)顺序)。
后期基元组装过程(电路)将基于基元的顶点索引而针对每个基元输出该基元的一个或多个对应经处理顶点属性(和任何其他数据)。因此,在上面讨论的优选实施方案中,所处理的顶点属性是每个索引(顶点)的位置,后期基元组装过程(电路)将针对每个经组装基元输出基元的(优选地适当变换的)位置的适当集合,即所讨论的基元的每个索引(顶点)的(经变换)位置。
稍后期基元组装级(电路)优选地基于从较早期基元组装级(电路)接收的经组装基元的索引来确定要用于经组装基元的顶点(顶点属性)。因此,在优选实施方案中,当来自早期基元组装级(电路)的经组装基元使用基于顶点分组的索引方案来指示其顶点时,后期基元组装级(电路)将根据经组装基元的顶点索引、顶点分组以及所讨论的顶点的经处理属性在顶点分组内的位置/索引来识别。
因此,应当理解,在本发明的优选实施方案中,至少当由后期基元组装级(电路)接收到经组装基元时,将在顶点缓冲区中查找所讨论的基元的所指示的顶点以检索这些顶点的对应的经处理顶点属性。在经组装基元的顶点的经处理顶点属性存储在顶点缓冲区中的情况下,可简单地从该顶点缓冲区检索经处理顶点属性。
另一方面,当确定基元的顶点当前未存储在顶点缓冲区中时,则应停止对所讨论的基元的处理,直到其经处理顶点属性在例如顶点缓冲区中可用。(如上所讨论,期望至少在本发明的优选实施方案中,特别是在多个顶点分组可被存储在顶点缓冲区中的情况下,经组装基元的经处理顶点属性应当并且通常将在需要它们时在顶点缓冲区中可用。)
为了有利于该操作,优选地跟踪顶点缓冲区中的(当前存储的)顶点。这可以任何合适且期望的方式完成,例如并且优选地,通过维持和存储指示哪些顶点当前由顶点缓冲区存储的信息。优选地,跟踪哪些顶点分组当前被存储在顶点缓冲区中(而不是跟踪哪些单独顶点被存储在顶点缓冲区中)。
例如,在使用基于顶点分组的索引来指示经组装基元的顶点的情况下,可通过维持并存储指示哪些顶点分组索引与当前存储在顶点缓冲区中的顶点分组相关的信息来跟踪哪些顶点分组当前存储在顶点缓冲区中。此类顶点分组跟踪信息可采取任何合适且期望的形式。例如,包括每个顶点分组(索引)的相应条目的(顶点分组)位图可用于指示和跟踪给定顶点分组当前是否被存储在顶点缓冲区中。
另选地,可能不需要基于顶点分组索引来跟踪哪些特定顶点分组当前存储在顶点缓冲区中。在先入先出(FIFO)的基础上将分组加载到顶点缓冲区中的实施方案(诸如上文所描述的实施方案)中,情况可能如此,其中从顶点缓冲区逐出分组允许分配下一分组(其已生成并且已针对其执行顶点处理)并且将下一分组加载到缓冲区中(使得将根据分组被生成的(已知)次序将分组加载到顶点缓冲区中以及从顶点缓冲区逐出分组)。因此,在优选实施方案中,跟踪顶点分组(其已生成并且已针对其执行顶点处理)是否已经(还)存储(获取)在顶点缓冲区中(但是不跟踪哪些特定顶点分组当前存储在顶点缓冲区中)。一旦(由后期基元组装级(电路))已经组装了包括相关获取(和着色)的顶点属性(例如并且优选地经着色顶点位置)的经组装基元,则(优选地)将如此经组装基元(包括其获取的顶点属性)提供给图形处理器执行以进行处理的图形处理流水线的稍后期级。
因此,包括其获取的顶点属性的经组装基元向前传递以用于适当的进一步处理,以便在生成输出时处理那些基元。
(经组装)基元的处理可包括可在生成输出时执行的任何合适且期望的基元处理。
基元的处理优选地至少包括渲染基元以生成例如并且优选地用于基元的渲染输出数据。可通过例如将基元光栅化成片段并且然后渲染(片段着色)如此生成的片段来执行渲染。除此之外或另选地,可使用光线跟踪或混合光线跟踪技术来渲染基元。
对应地,在一个实施方案中,图形处理器还包括光栅化器(光栅化电路)和渲染器(渲染电路)(优选地以可编程片段着色器的形式)。
经组装基元的处理(诸如经组装基元的光栅化和渲染)可以任何期望且适当的方式执行,例如并且优选地,取决于和根据所讨论的图形处理器和图形处理流水线。一般而言,并且优选地,如对于所讨论的图形处理器和图形处理流水线通常所做的那样,对经组装基元进行光栅化和/或渲染等(因为一旦以本发明的方式组装基元,该基元与以任何其他方式组装的基元没有不同)。
包括经处理顶点属性的经组装基元应当并且优选地传递到正由图形处理器执行的图形处理流水线的下一级(电路)。此可以是图形处理流水线的任何合适且期望的级,其(例如,立即)跟随基元组装级的完成。例如,在立即模式渲染器的情况下,经组装、完整的基元可传递到例如光栅化器以进行处理。
在图形处理器是基于图块的图形处理器的情况下,具有其顶点属性的经组装基元优选地被传递到图形处理器和图形处理流水线的拼接器(拼接级)以用于“拼接”。
因此,在特别优选的实施方案中,图形处理器是基于图块的图形处理器(并且图形处理器执行的图形处理流水线对应地执行基于图块的图形处理),并且包括其相关联的获取(和处理)的顶点数据(属性)的经组装完整基元首先被提供给图形处理器和图形处理流水线的拼接过程(拼接器电路)以用于生成适当基元列表,之后相应基元随后被进一步处理(例如,光栅化和渲染)。
本发明的这些实施方案中的拼接过程和操作可以任何合适且期望的方式来执行,诸如并且优选地根据针对所讨论的图形处理器和图形处理流水线的正常方式来执行。
因此,拼接过程应当并且优选地包括确定渲染输出已经为了拼接过程被划分到多个区域中的哪个区域或哪些区域,相应基元落入其中,并且然后将基元添加到所讨论的一个或多个区域的相应基元列表。此过程可例如且优选地包括确定表示基元在输出内的位置的边界框,并且接着将该边界框的位置与可为其准备基元列表的相应区域进行比较以确定基元应被包括(列出)在哪个或哪些基元列表中。
在优选实施方案中,拼接过程包括基元剔除过程,例如且优选地基于基元的潜在可见性来剔除基元(如上文所讨论)。
(拼接过程的)剔除和边界框生成过程的输出优选对应地是基元集合以及其对应边界框。这优选地包括基元的标识符、基元的顶点索引、以及基元的边界框(边界框信息)的指示(优选地根据基元落入哪些基元列表区域(例如,渲染图块)(处于其分辨率))。
然后,优选地使用来自边界框生成等过程的边界框来确定对应基元应当包括在(写入)哪些基元列表中。这优选地由图形处理器和图形处理流水线的适当分格级(电路)完成,该分格级输出基元序列以及针对每个基元的基元应被包括在其中的基元列表的指示。
一旦已确定给定基元(无论是组合基元还是单独基元)应当包括在哪个基元列表或哪些基元列表中,则优选地将基元适当地写入到一个或多个适当基元列表中,例如写入在存储器中。该过程可以并且优选地包括适当地压缩基元列表,例如当它们被写入时。
然后,可以任何合适且期望的方式来进行对基元的剩余处理。例如,可存在基元列表读取器,该基元列表读取器读取基元列表以确定待针对渲染图块处理的基元,并且接着将用于处理的那些基元提供给例如又一顶点属性获取级/电路,该又一顶点属性获取级/电路被配置为获取光栅化和渲染过程将需要的经组装基元的顶点属性,改又一顶点属性获取级/电路然后是基元(三角形)设置级/电路。
在基元(三角形)设置级之后,然后可向前发送经组装基元的序列以用于光栅化和渲染(或者在非基于光栅化的渲染器的情况下用于渲染)。
光栅化(如果有的话)和渲染过程可以任何合适且期望的方式来执行,并且优选地根据所讨论的图形处理器和图形处理流水线的正常光栅化和渲染过程来完成。
一旦基元已经被(光栅化和)渲染,则该处理的输出可然后例如并且优选地被写入例如主存储器中的例如帧缓冲区,然后可从该帧缓冲区例如将其提供给显示器以进行显示,或者以其他方式进行处理。在基于图块的渲染的情况下,这优选地经由图块缓冲区来完成。
如上文所讨论,在优选实施方案中,在(早期)基元组装过程处针对顶点分组执行的顶点属性处理触发了对每个顶点的仅一些属性而非所有属性的处理。因此,在此情况下,在图形处理序列中的稍后点处(例如,在需要所讨论的顶点属性的图形处理流水线的适当稍后期级处),在必要时,可在基元的后续处理期间且针对基元的后续处理来处理(顶点着色)基元的顶点的其他属性。
因此,在这种情况下,除了在组装顶点分组时发生的顶点属性处理之外,将存在对于经组装基元的其他顶点属性的进一步处理(顶点着色)。
因此,在优选实施方案中,在定点分组的生成触发的顶点属性处理之后,本发明的方法还包括(并且图形处理器包括一个或多个处理电路,该处理电路可操作并被配置为)处理(顶点着色)经组装基元的顶点的其他属性。
可在图形处理流水线的任何合适且期望的稍后期级处执行经组装基元的其他顶点属性(变动)的此进一步处理(顶点着色)。在基于图块的图形处理的情况下,这优选地在经组装基元通过作为拼接过程的一部分而执行的剔除测试(如上文所讨论)的点处触发且执行,即使得一旦确定基元将包括在基元列表中,就触发经组装基元的其他顶点属性(变动)的任何所需的进一步处理(顶点着色)。
对应地,在针对经组装基元执行其他顶点属性的进一步处理(顶点着色)的情况下,优选地将经组装基元的顶点的那些经进一步处理的顶点属性适当地包括在顶点分组中,使得在该点处,顶点分组将针对其所涉及的顶点存储经适当处理(顶点着色)的位置和经适当处理(顶点着色)的所讨论的顶点的一个或多个其他顶点属性。
以上描述了以本发明的方式进行的操作所涉及的图形处理器和图形处理流水线的主元件。如本领域技术人员将理解的,图形处理器可另外包括和执行并且优选地确实包括并执行图形处理器和图形处理流水线可(通常)包括的其他处理级和电路中的任一者或一者或多者以及优选地全部。因此,例如,图形处理器还可包括基元设置电路、光栅化器电路和渲染器电路(优选地呈可编程片段着色器的形式或包括该可编程片段着色器)、深度(或深度及模板)测试器、混合器、图块缓冲区、写出电路等。
在一个优选的些实施方案中,图形处理器包括存储本文所述的数据和/或存储用于执行本文所述的过程的软件的一个或多个存储器和/或存储器设备,和/或与该一个或多个存储器和/或存储器设备通信。图形处理器还可与主机微处理器通信,和/或与用于基于图形处理器的输出来显示图像的显示器通信。
待生成的输出可包括可以且将由图形处理器和处理流水线生成的任何输出。因此,其可包括例如将在基于图块的图形处理系统中生成的图块和/或输出片段数据的帧。本发明可用于图形处理器和处理流水线可用以生成的所有形式的输出,诸如用于显示的帧、渲染到纹理输出等。在一个优选的实施方案中,输出为输出帧,并且优选地为图像。
在一个特别优选的实施方案中,本发明的各种功能在单个图形处理平台上执行,该单个图形处理平台生成和输出(渲染的)数据,该数据例如被写入到用于显示设备的帧缓冲区。
可以任何期望且合适的方式来执行本发明的各种功能。例如,除非另外指明,否则本发明的功能在本文可根据需要以硬件或软件来实现。因此,例如,除非另外指明,否则本发明的各种功能元件、级和“装置”可包括合适的一个或多个处理器、一个或多个控制器、功能单元、电路系统、电路、处理逻辑部件、微处理器布置等,这些部件可被配置为执行各种功能等,诸如适当专用硬件元件(处理电路/电路系统)和/或可编程硬件元件(处理电路/电路系统),这些部件可被编程用于以期望的方式操作。
在这里还应注意,如本领域技术人员将了解,可在给定的处理器上并行地重复和/或执行本发明的各种功能等。同样,如果需要,各种处理级可共享处理电路系统/电路等。
此外,除非另外指明,否则本发明的处理级中的任何一个或多个或所有处理级可体现为例如呈一个或多个固定功能单元(硬件)(处理电路)的形式和/或呈可被编程为执行期望的操作的可编程的处理电路的形式的处理级电路。同样,本发明的处理级和处理级电路中的任何一者或多者可作为独立的电路元件提供给其他处理级或处理级电路中的任何一者或多者,和/或处理级和处理级电路中的任何一者或多者或全部可至少部分地由共享处理电路形成。
在执行上面所讨论的特定功能所需的任何硬件的条件下,图形处理器可另外包括图形处理器所包括的任何一个或多个或所有通常的功能单元等。
本领域的技术人员还应当理解,本发明的全部所述实施方案可视情况在一个实施方案中包括本文所述特征中的任何一者或多者或全部。
根据本发明的方法可以至少部分地使用软件例如计算机程序来实现。因此,可以看出,本发明的实施方案在本文可提供计算机软件,该计算机软件特别适于在安装在数据处理器上时执行本文所述的方法;计算机程序元件,该计算机程序元件包括用于当该程序元件在数据处理器上运行时执行本文所述方法的计算机软件代码部分;和计算机程序,该计算机程序包括适于当该程序在数据处理系统上运行时执行本文所述的一个或多个方法的所有步骤的代码。该数据处理器可以是微处理器系统、可编程FPGA(现场可编程门阵列)等。
本发明还扩展至计算机软件载体,该计算机软件载体包括在用于操作显示控制器或包括数据处理器的微处理器系统时,使与该数据处理器、该控制器或系统结合以执行本发明的方法的步骤的此类软件。此类计算机软件载体可以是物理存储介质,诸如ROM芯片、CD ROM、RAM、闪存存储器或磁盘,或者可以是信号,诸如通过导线的电子信号、光信号或无线电信号,诸如到卫星的信号等。
还将了解,不是本发明的方法的所有步骤都需要由计算机软件执行,并且因此根据更广的实施方案,本发明提供安装在计算机软件载体上的用于执行本文陈述的方法的步骤中的至少一个步骤的计算机软件和此类软件。
本发明因此可合适地体现为用于与计算机系统一起使用的计算机程序产品。此类具体实施可包括固定在有形非暂时性介质上的一系列计算机可读指令,诸如计算机可读介质,例如磁盘、CDROM、ROM、RAM、闪存存储器或硬盘。其还可包括一系列计算机可读指令,这些计算机可读指令能够经由调制解调器或其他接口设备通过有形介质(包括但不限于光通信线路或模拟通信线路)或者无源地使用无线技术(包括但不限于微波、红外或其他传输技术)传输到计算机系统。该系列计算机可读指令体现了本文先前所述的功能的全部或部分。
本领域的技术人员将会理解,此类计算机可读指令可以多种编程语言编写,以与许多计算机架构或操作系统一起使用。此外,此类指令可使用目前或将来的任何存储器技术(包括但不限于半导体、磁性或光学技术)来存储,或者使用目前或将来的任何通信技术(包括但不限于光学、红外或微波技术)来传输。可以设想的是,此类计算机程序产品可作为带有附随的印刷或电子文档(例如,收缩包装软件)的可移动介质进行分发,可与计算机系统一起预加载在例如系统ROM或固定磁盘上,或者可经由网络(例如,互联网或万维网)从服务器或电子公告板进行分发。
现在将仅以举例的方式并参考附图来描述本发明的优选实施方案,其中:
图1示出了图形处理的示例性序列;
图2示出了其中可实现本发明的示例性数据处理系统;
图3示意性地示出了可根据本发明操作的图形处理器;
图4示出了在一个实施方案中的图3的图形处理器的操作的某些部分;
图5更详细地示出了图4所示的操作的某些部分;
图6示出了本发明的实施方案中的示例性顶点分组;
图7示出了在一个实施方案中的图3的图形处理器的操作的另外部分;
图8示出了本发明的实施方案中的顶点缓冲区的示例性内容;
图9和图10示出了在一个实施方案中的顶点缓冲区操作的各方面;
图11示出了本发明的实施方案中的示例性顶点分组;
图12示出了在另一个实施方案中的图3的图形处理器的操作的某些部分;并且
图13更详细地示出了图12所示的操作的某些部分。
相似的附图标号用于附图中的相似特征(在适当的情况下)。
现在将描述本发明的优选实施方案。
图2示出了示例性片上系统(SoC)图形处理系统8,其包括主机处理器,该主机处理器包括中央处理单元(CPU)1、图形处理器(GPU)2、显示处理器3和存储器控制器5。示例性数据处理系统还可包括视频引擎(图2中未示出)。如图2所示,这些单元经由互连器4进行通信并且具有对片外存储器6的访问权限。在该系统中,图形处理器2将渲染待显示的帧(图像),然后显示处理器3将这些帧提供给显示面板7以用于显示。
在该系统的使用中,在一个或多个主机处理器(CPU)1上执行的应用程序9诸如游戏将例如需要在显示面板7上显示帧。为此,应用程序将向例如在CPU 1上执行的图形处理器2的驱动器10提交适当的命令和数据。驱动器10然后将生成适当的命令和数据,以使图形处理器2渲染适当的帧以用于显示并将那些帧存储在适当的帧缓冲器中,例如存储在主存储器6中。然后,显示处理器3将这些帧读取到用于显示的缓冲器中,然后从该缓冲器中读取这些帧并将其显示在显示器的显示面板7上。
在本发明的实施方案中,图形处理器2在生成输出(诸如用于显示的图像)时执行处理图形基元(诸如三角形)的图形处理流水线。图形处理流水线包括并执行与图1所示的图形处理序列中示出的那些操作类似的操作,但是在本发明的实施方案中,并且如下面将进一步讨论的,基元组装过程还以本发明的方式生成包括经组装基元的顶点的“顶点分组”。
图3示意性地示出了本发明的实施方案中的图形处理器2以及在生成输出时由图形处理器2执行的图形处理流水线的处理序列。
图3示出了主要元件和流水线级/电路。如本领域的技术人员将理解的,可存在图形处理器和处理流水线的在图3中未示出的其他元件。此处还应该指出的是,图3仅是示意性的,并且例如在实践中,即使所示的功能单元和流水线级在图3中被示意性地示为单独级,但它们也可共享重要的硬件电路。还应当理解,除非另外指示,如图3所示的图形处理器和处理流水线的阶段、元件和单元等中的每一者可根据需要来实现,并且将相应地包括例如用于执行所需的操作和功能的适当电路和/或处理逻辑部件等。
如图3所示,再次针对待生成的输出,将场景数据30的集合提供到图形处理器(例如且优选地通过将该场景数据存储在存储器6中,然后图形处理器2可从该存储器读取该场景数据),该场景数据的集合尤其包括顶点集合(其中每个顶点具有与其相关联的一个或多个属性,诸如位置、颜色等)、引用顶点集合中的顶点的索引集合、以及指示将如何将顶点索引组装到基元中以用于在生成输出时处理的基元配置信息。
该场景数据可由需要待生成的输出的应用程序(和/或响应于来自应用程序的命令的驱动器)提供,并且可例如包括针对所讨论的输出的顶点、索引等的完整集合,或者例如包括例如针对将为了所讨论的输出进行处理的相应绘制调用的相应不同顶点集合、索引集合等。当然,其他布置将是可能的。
然后,在本发明的实施方案中,“早期”基元组装级(电路)31操作以基于所提供的基元配置信息使用所提供的引用顶点的索引集合来组装基元以用于处理,以生成经组装基元的序列,每个基元在此级处包括基元的标识符和基元的一个或多个顶点索引的集合。下文将更详细地讨论该操作。
来自基元组装级(电路)31的经组装基元然后用于触发对经组装基元的顶点的属性的获取和顶点处理(着色)32。在本发明的实施方案中,在该级触发并执行顶点位置的获取以及顶点的位置从例如“模型”空间(其中初始定义顶点位置)到例如“屏幕”空间(其中生成输出图像)的变换(但是在图形处理的稍后期级处触发并执行任何其他顶点属性的获取和着色)。再次,下面将更详细地讨论该操作。
然后存在“后期”基元组装级(电路)33,该基元组装级通过将由早期基元组装级(电路)31输出的基元与来自顶点处理32的对应已获取和着色的顶点属性相关联来从由早期基元组装级(电路)31输出的基元序列组装基元以用于进一步处理(并且具体地使用那些基元的索引),以提供经组装基元的序列,每个基元包括基元的标识符和用于基元的顶点的相关已获取(和着色)顶点属性(位置)(以及任何其他已获取数据)。再次,下文将更详细地讨论该操作。所需要的其他顶点属性(变动)诸如颜色、透明度等将稍后在流水线中被获取(并且在必要时被“顶点着色”),例如在拼接级(拼接器)处。
来自后期基元组装32的具有已获取和处理的顶点属性(位置)的组装基元首先被传递给拼接器(拼接电路)34以进行处理。(就这一点而言,假设本发明的实施方案中的图形处理器2是基于图块的图形处理器,并且因此生成将彼此分离地生成的总体输出(例如,帧)的相应输出图块,其中用于总体输出的图块集合然后被适当地组合以提供最终的总体输出。)
拼接器34执行“拼接”的过程以将经组装基元分配给相应渲染输出区域(面积)的基元列表,该基元列表然后用于识别应针对待渲染的每个图块渲染的基元以生成输出数据(其可例如是将被渲染以用于显示的帧)。例如,可使用基元列表构建单元来实现拼接器34,该基元列表构建单元将经组装基元作为其输入、使用该数据来构建基元列表并且将基元列表存储在存储器中。拼接器还可剔除不可见的某些基元。
光栅化级(电路)(光栅化器)35将来自被渲染的图块的基元列表的基元(包括其顶点)作为其输入,将基元光栅化为片段,并且将片段提供到片段处理级(电路)36,该片段处理级(电路)在此实施方案中包括着色器执行引擎(着色器核)。着色器执行引擎是通过针对从光栅化引擎35接收的片段执行片段着色软件例程(程序)来执行片段着色的可编程执行单元。
被着色的每个图形“片段”可对应于最终显示中的单个像素(图片元素)(因为像素是最终显示中的奇点,因此图形处理器所操作(渲染)的“片段”与显示的像素之间可存在一对一映射)。然而,可能存在片段与显示器像素之间不存在一一对应的情况,例如,在显示最终图像之前对经渲染的图像执行诸如下采样之类的特定形式的后处理的情况下。
每个片段将通过一个或多个执行线程来进行处理,该一个或多个执行线程将执行针对所考虑的片段所考虑的着色器程序的指令。通常,将存在各自同时(并行)执行的多个执行线程。
片段处理36的输出(经渲染片段)被写入到图块缓冲区37。一旦完成了对所讨论的图块的处理,则图块将被写入存储器中的输出数据阵列38,并且处理下一个块,以此类推,直到已经生成了完整的输出数据阵列。然后过程将继续移动到下一个输出数据阵列(例如帧)等。
输出数据阵列38通常可以是旨在用于在显示设备诸如屏幕或打印机上显示的帧的图像,但也可例如包括旨在用于稍后渲染遍历的中间渲染数据(也称为“渲染到纹理”输出)、或用于延期渲染、或用于混合光线跟踪等。
如以上所讨论的,本发明和本发明的实施方案具体涉及基元组装过程,并且具体涉及生成顶点分组作为基元组装过程的一部分的思想。
图4示出了该操作的实施方案,并且具体地更详细地示出了在本发明的实施方案中的图3所示的图形处理器2的早期基元组装级(电路)31及其操作。
如图4所示,早期基元组装过程和电路31包括索引获取器(索引获取电路)40,其从针对所生成的输出定义和提供的(所存储的)顶点索引阵列中获取并输出索引序列(流)41。
(如图4所示,相同顶点索引可在用于输出的索引序列41中出现多于一次。也可以是这样的情况:用于输出的顶点集合中的一些顶点实际上将不被包括在用于输出的索引序列中。)
索引获取器40向早期基元组装级(电路)31提供索引序列41,该早期基元组装级(电路)根据定义要组装的基元的类型(例如,经组装基元是三角形、三角形线条、三角形扇、点还是线等的形式)的基元配置信息53从由索引获取器40提供的索引流41组装完整基元43。该基元配置信息(基元类型定义)53可例如作为正在生成的输出的描述符(元数据)的一部分来提供。
早期基元组装级(电路)31可操作以根据所定义的基元类型从输入索引流41输出完整组装基元的序列43。在此阶段,由早期基元组装电路31输出的每个(完整)基元包括呈基元的序列号的形式的针对基元的标识符,以及来自输入索引顶点流的顶点索引的序列,其对应于将用于基元的顶点的索引。
在本发明的实施方案中,早期基元组装电路31可操作以在此阶段丢弃任何退化或不完整基元,使得将仅输出完整基元(对应于期望的基元类型)。如果需要,早期基元组装电路31还可操作以将更复杂的基元细分成较简单基元(诸如三角形、线或点)以用于输出。
还应当注意,在这个阶段,只有提供给早期基元组装电路(阶段)的索引和基元配置信息已经从存储器中获取。在过程中的这一点,没有顶点属性被获取或处理(顶点着色)。
如图4所示,来自早期基元组装级(电路)31的完整组装基元序列43被提供给顶点分组生成器级(电路)400。
顶点分组生成器400操作以生成包括经组装基元的顶点的顶点分组401。
因此,如图4所示,顶点分组生成器400将依次将从较早期基元组装器31接收的经组装基元的顶点分配给相应顶点分组401。在本发明的实施方案中,每个顶点分组401具有顶点的最大允许容量,诸如64个顶点,并且一旦达到该容量,就开始新的顶点分组。
图4示出了图4所示的基元0-5的序列43的顶点分组401的示例性内容。将理解,随着更多基元被组装,更多顶点将被添加到顶点分组401直到它被填满。
在本发明的实施方案中,为了尝试避免顶点分组内的顶点的重复,顶点分组生成过程跟踪已添加到顶点分组的顶点,并且使用该顶点跟踪信息来检查新基元的顶点是否已经被包括在顶点分组中。在本发明的实施方案中,针对多个(例如,四个)顶点分组跟踪用于顶点分组生成过程的顶点分组中的顶点的包括,使得将不仅检查顶点是否已包括在当前顶点分组中,还将确定顶点是否已包括在多至三个紧接在前的顶点分组中。
在本发明的实施方案中,经组装基元的顶点被依次添加到顶点分组(经受避免顶点分组中的顶点的任何重复),因为它们出现在经组装基元中。一旦给定顶点分组已满(已达到其顶点阈值(最大容量)数量),则开始新顶点分组。
在本发明的实施方案中,并且如图4所示,顶点分组生成器400还触发已包括在顶点分组中的顶点的位置属性402的顶点着色。
顶点分组生成器400还重新索引经组装基元的顶点的索引以便为经组装基元的顶点提供“基于顶点分组的”索引。因此,如图4所示,顶点分组生成器400还将输出经组装基元403的序列,但其中每个基元包括顶点索引集合,该顶点索引各自识别顶点存在于其中的顶点分组以及所讨论的顶点分组中的该顶点的位置(索引)。因此,例如且如图4所示,顶点分组生成器将针对包括顶点0、10、2(来自最初提供的顶点索引集合)的第一基元(具有基元索引0)输出指示其顶点的基于顶点分组的索引0(p0)、1(p0)、2(p0)的对应集合。
为了有利于这一点,由顶点分组生成器400生成的顶点分组以它们被生成的顺序被对应地索引,由此为不同顶点分组提供适当标识符(索引)(并且其可用于识别和跟踪不同顶点分组)。
图5更详细地示出了本发明的实施方案中的顶点分组生成器400的该操作。
对于图5所示的操作,假设针对相应绘制调用组装基元,并且针对渲染输出的每个相应绘制调用,将组装和处理基元的单独序列。
因此,如图5所示,一旦开始新绘制调用(步骤500),顶点分组生成器400将依次从早期基元组装器31接收501用于绘制调用的经组合基元,并且对于每个基元,在用于跟踪哪些顶点已包括在顶点分组中的跟踪信息(标签)中查找基元的顶点索引(步骤502)。
如图5所示,对于基元的每个顶点索引,确定该顶点是否已经存在于顶点分组中(步骤503),并且如果顶点已经存在于顶点分组中,则输出针对所讨论的顶点的对应分组ID和分组本地索引(步骤504),以用于使用基于顶点分组的索引方案来提供经组装基元。另一方面,当在步骤503处确定基元的顶点尚未存在于顶点分组中时,则确定当前顶点分组是否已满(已达到其阈值最大顶点容量)(步骤505)。
在当前顶点分组未满时,则将顶点添加到当前顶点分组,并且将所添加的顶点的(初始的、不基于顶点分组的)索引添加到所讨论的顶点分组的顶点跟踪信息(标签)(步骤506)。然后再次为所讨论的顶点输出对应的顶点分组ID和分组本地索引(步骤504)。
另一方面,当在步骤505中确定当前顶点分组已满(即,使得应开始新顶点分组)时,则针对刚变满的分组发送适当位置着色请求(步骤507)。
然后,在清除最旧顶点分组的顶点索引跟踪信息(标签)之后,开始新分组(步骤507)。
(如以上在本发明的实施方案中所讨论的,针对例如四个顶点分组的队列执行顶点分组顶点跟踪,其中新顶点分组(当需要时)被添加到队列的末尾,并且对应地最旧顶点分组被从队列的头部逐出。一旦将分组从队列中逐出,就不再对其进行跟踪和检查稍后组装的基元是否包括该逐出顶点分组内的顶点。相反,如果稍后组装的基元再次包括已被逐出的顶点分组中的顶点,则该顶点将被简单地再次添加到当前顶点分组。)如前所述,将新顶点的索引添加到新顶点分组的跟踪信息(步骤506),并且输出所讨论的顶点的新顶点分组ID和分组本地索引(步骤504)以用于与经组装基元相关联。
如上文所讨论,在开始发送顶点着色请求之前可能不必等待直到分组已满。顶点着色请求可(另外地或附加地)在正生成分组的同时被发送(例如,响应于预定数量的顶点被添加到当前正生成的分组)。例如,在预定数量的“未命中”发生(例如对应于着色器核的执行线程的数量,例如16)之后,可以(并且优选地)针对当前分组(在步骤503处具有“未命中”的顶点被添加到该分组)触发着色请求。
优选地不针对被确定为已经存在于正被跟踪的顶点分组(例如,四个顶点分组)中的那些顶点执行(重复)顶点着色,即针对其在步骤503处发生“命中”的顶点,因为已经对那些顶点执行了着色。
针对绘制调用内的所有基元重复图5所示的此操作,直到到达绘制调用的结束(步骤508),此时清除所有顶点跟踪信息(步骤509),使得可针对下一个绘制调用(如果有的话)再次开始过程。
针对待生成的渲染输出的每个绘制调用(以及针对后续渲染输出,视情况而定)重复该过程。
顶点分组的位置着色请求402将触发针对顶点分组中的顶点的适当位置着色,由此生成包括顶点分组的顶点的经顶点着色(经变换)位置的顶点分组并将其存储在存储器中。
将顶点分组的位置着色请求402发送到适当位置着色级(位置着色器(电路))47(图形处理器的适当执行(着色器)核),该适当位置着色级执行针对顶点的位置(位置属性)的适当位置着色程序,以将位置从其“模型”空间定义变换到正相对于其生成输出的适当“屏幕”空间。
顶点分组的顶点的位置着色请求将尤其指示来自最初提供的索引集合的用于顶点分组中的顶点的绘制调用的索引,使得可识别待针对顶点分组进行位置着色的适当顶点。请求还可指示(例如且优选地)待执行的位置着色操作(待执行的位置着色器),以及顶点分组(包含顶点分组的顶点的经着色位置)应被存储于何处。
每个顶点将通过一个或多个执行线程来进行处理(位置着色),该一个或多个执行线程将执行针对所考虑的顶点所考虑的(位置)着色器程序的指令。通常,将存在各自同时(并行)执行的多个执行线程。
位置着色过程(位置着色器)47在图形处理器2的相应可编程处理(执行)核(着色器核)上执行位置着色程序。
在图形处理器的一个或多个执行(着色器)核可操作以将多个执行线程(每个线程表示单独顶点)作为一组(索)一起执行的情况下,则优选地通过作为或针对一个或多个线程组(索)执行位置着色来执行顶点分组的位置着色。例如,在顶点分组具有64个顶点的容量并且执行核可操作以执行16个线程的组(索)的情况下,则将通过发出供执行的四个相应线程组(索)以执行该位置着色来执行给定顶点分组的位置着色。
包含经着色(经变换)位置的经处理顶点分组被存储50在存储器中的变换后位置缓冲区48中,然后可从该缓冲区获取经处理顶点分组以供使用。
图6示出了包括其所有顶点的经变换位置的示例性顶点分组,如将例如在位置着色过程之后生成并存储。
除了生成顶点的适当变换位置之外,如果需要,位置着色还可生成其他参数,诸如以下中的一者或多者:可变速率着色参数值、点大小、线宽和/或层ID等。在此情况下,这些附加参数优选地也与经变换位置一起存储在顶点分组变换后位置缓冲区48中。图11示出了这一点并且示出了“扩展”顶点分组,该顶点分组包含其所涉及的顶点的位置和其他属性。
一旦已生成顶点分组(包括顶点分组的顶点的经变换顶点位置)并且将其存储在存储器中,则可在处理经组装基元时并且为了处理经组装基元而使用顶点分组。
图7示出了本发明的实施方案中的这种操作的各方面。
图7具体地示出了图形处理流水线的下一级,其在本发明的实施方案中包括图形处理流水线的拼接级。
在这点上,本发明的实施方案涉及并使用所谓的“基于图块的”渲染。在基于图块的渲染中,二维渲染输出(即,渲染过程的输出,诸如待显示的输出帧)被渲染为多个较小面积的区域,通常称为“渲染图块”。在此类布置中,渲染输出通常被划分(按面积)为规则大小和形状的渲染图块(它们通常为矩形,例如正方形)。(通常用于“拼接”和“基于图块”的渲染的其他术语包括“分块”(渲染图块被称为“组块”)和“存储桶”渲染。下文将出于方便使用术语“图块”和“拼接”,但应理解,这些术语旨在涵盖所有另选和等效的术语和技术,其中渲染输出被渲染为多个较小面积区域。)
在基于图块的图形处理流水线中,将正产生的渲染输出的几何(基元)分类到渲染输出面积的区域中,以便允许标识针对渲染输出的给定区域需要进行处理的几何(基元)。该分类允许标识针对渲染输出的给定区域需要进行处理的基元(以便例如避免不必要地渲染实际上不存在于区域中的基元)。该分类过程产生了针对渲染输出的不同区域待渲染的基元列表(本文称为“基元”列表,但也通常称为“多边形”或“图块”列表)。
针对其准备基元列表的渲染输出区域可以是单个渲染图块,或一组多个渲染图块等。
一旦已准备了基元列表,则基元列表可然后由图形处理器使用以执行渲染图块的实际渲染,其中存储在基元列表中的信息用于在生成期望的渲染输出(例如,以显示帧)时识别待针对每个渲染图块处理的基元。
针对渲染输出的区域准备基元列表的过程因此基本上涉及确定应当针对给定渲染输出区域处理的基元。该过程通常通过确定(以期望的精度水平)与所讨论的渲染输出区域相交(即,将(至少部分地)出现在其中)的基元,然后准备这些基元的列表以供图形处理系统将来使用来执行。因此,对于待处理的每个基元,图形处理器使用每个基元的经着色顶点位置以确定基元至少部分地覆盖(并且因此应被渲染用于)的渲染输出的哪一个(哪些)区域。
如下文将更详细讨论,在本发明的实施方案中,拼接级尤其使用来自所生成的顶点分组的经组装基元的顶点的经变换位置来确定经组装基元在正生成的输出内是否(潜在地)可见(并且因此应针对正生成的输出进一步处理),并且对应地将确定为在拼接级处(潜在地)可见的任何基元适当地添加到基元列表,随后可从该基元列表读取该基元并进一步处理该基元。
如图7所示,经由FIFO 700(其充当延迟隐藏机制以允许针对包含经组装基元的顶点的顶点分组完成对应位置着色的时间)将来自顶点分组生成器400的经组装基元403(即,使用基于顶点分组的索引方案来索引其顶点)提供到后期基元组装级/电路33。
后期基元组装级33将经变换位置添加到由早期基元组装级/电路31输出的经组装基元,并且将如此组装的基元提供到拼接过程的后续级。如图7所示,出于此目的,后期基元组装级33从顶点缓冲区54获取经组装基元的经变换位置,该顶点缓冲区存储经组装基元的顶点的经变换位置以供后期基元组装级33然后使用。
在本发明的实施方案中,顶点缓冲区54被配置为存储多个整个生成的顶点分组(包括经变换位置)。例如,顶点缓冲区54可存储多达七个顶点分组。当然,其他布置将是可能的。
为了促进此操作,如图7所示,图形处理器还包括适当分组获取器(分组获取电路)701,其如图7所示被配置为将顶点分组(当其就绪时)从系统存储器702(其中它们将在由顶点分组生成器400触发的位置着色之后被存储)加载到顶点缓冲区54中以供后期基元组装过程33使用。分组获取器701被配置为在需要且准备好顶点分组时将顶点分组加载到顶点缓冲区54中,并且对应地在顶点缓冲区54中不再需要顶点分组时从顶点缓冲区54逐出顶点分组(以为新顶点分组提供空间)。
为此,如图7所示,分组获取器701尤其从顶点分组生成器400接收指示何时已完成顶点分组且执行对应位置着色的信号703,使得其准备好在需要时从存储器加载。具体地,顶点分组生成器400请求位置着色(如上文所讨论)并且等待直到接收到来自着色器47(执行核)的响应。一旦对分组的所有未完成着色请求已经完成,顶点分组生成器旧将“分组就绪”信号703发送到分组获取器。
如图7所示,分组获取器701还从可见顶点分组生成器级/电路705接收适当顶点分组逐出信号704,其指示顶点分组何时在顶点缓冲区54中不再需要并且因此可从顶点缓冲区54逐出。这将在下面更详细地讨论。
顶点分组获取器701被一般配置并且可操作以在顶点缓冲区54中维持顶点分组的集合,使得当待处理的经组装基元落入由后期基元组装级33处理时,将预期待处理的经组装基元的所需经变换位置存在于顶点缓冲区54中。如上文所讨论,基元FIFO 700实际上通过延迟将经组装基元提供到后期基元组合件33来对此进行辅助,以借此允许执行必要顶点位置着色,并且允许在需要顶点分组中的顶点的基元将由后期基元组装级33接收并处理之前将如此生成的顶点分组加载到顶点缓冲区54中。
图8、图9和图10示出了顶点缓冲区54和分组获取器701的此操作。
图8将顶点缓冲区54的示例性布局示为包括多个顶点分组的集合,其中最旧顶点分组800被指定为“可逐出”并且因此能够被逐出以允许新顶点分组被加载,以及然后是可用于经组装基元的顶点分组801的序列,并且其中的最旧分组将是下一个要被逐出的分组。接着存在尚未使用但正在准备并且因此一旦准备好旧可被预加载到顶点缓冲区中的顶点分组802。
图9示出了用于将顶点分组加载到顶点缓冲区中的操作。因此,如图9所示,分组获取器701将等待顶点缓冲区中存在可用于新顶点分组的存储(步骤900)。然后,如果必要的话,将等待下一个顶点分组在存储器中可用(即,完成其位置着色)(步骤901),并且一旦下一个分组可用,就将该顶点分组加载到顶点缓冲区中(步骤902)。
图10示出了对应的顶点分组“逐出”过程。在此情况下,顶点获取器701将等待“分组逐出”消息(步骤1000),并且响应于此而释放顶点缓冲区中的用于所讨论的顶点分组的存储(使得其可用于顶点新包)(步骤1001)。
如上所讨论,来自早期基元组装级(电路)31的完整组装基元序列43被提供(经由FIFO 700)给后期基元组装级(电路)33。
在此阶段还可检查包含经组装基元的顶点的所需顶点分组是否存在于顶点缓冲区54中(并且在必要时,如果经组装基元的顶点不存在于顶点缓冲区54中,则停止对经组装基元的序列的处理)。此检查可基于(例如且优选地)经组装基元的顶点存在于哪些顶点分组中的指示及哪些分组存储在顶点缓冲区中的指示。优选地,跟踪顶点分组(其已经生成并且已经针对其执行顶点处理)是否已经(尚未)被存储(获取)在顶点缓冲区中(从跟踪开始,因为分组以它们生成的顺序被加载到顶点缓冲区54中并且从顶点缓冲区逐出,并且因为顶点缓冲区54存储有限数量的分组,所以可确定哪些分组存在于缓冲区中)。另选地,可维持已存储在顶点缓冲区54中的那些顶点分组的记录(诸如位图)以促进此检查。
(如上文所讨论,预期顶点分组到顶点缓冲区54中的加载应能够充分提前完成,使得包含经组装基元的顶点的顶点分组应当在经组装基元即将由较后期基元组装级(电路)33处理时存在于顶点缓冲区54中。)
后期基元组装级/电路33将序列43中的每个经组装基元与来自顶点缓冲区54的所讨论基元的顶点的对应经变换位置相关联,并且因此输出经组装基元的对应序列,在此级处,该基元现在各自包括基元标识符和序列中的基元的着色(经变换)位置的序列。然后,如此组装的基元被发送到拼接过程的下一级以用于拼接(以及随后的光栅化和渲染,如以上参考图3所讨论的)。
如图7所示,拼接过程首先包括剔除和边界框生成器级/电路61,其后是可见顶点分组生成器705,其后是分格器和迭代器级/电路62。然后存在基元(多边形)列表写入电路63,其将基元写入到例如存储器中的基元列表中以供将来使用。
剔除和边界框生成器61针对由后期基元组装级/电路33输出的经组装基元生成适当边界框,并且还操作以在其(潜在)可见性的基础上来识别可从进一步处理剔除的任何基元。该剔除可包括例如正面/背面剔除、视锥体剔除、和/或样本感知剔除等。
边界框生成使用所提供的经组装基元的位置以生成基元的适当边界框。在本发明的实施方案中,使用处于输出为了渲染目的而被划分成的单独图块的分辨率的边界框,但是其他布置当然也是可能的。
剔除过程确定基元是否(潜在地)可见。对于被确定为不可见的任何基元,挑选基元,但否则基元被保留并被传递以用于处理。
来自剔除和边界框生成的输出针对每个基元包括基元的标识符、基元的顶点索引集合和基元的边界框信息(在本情况下,以该基元落入哪个或哪些渲染图块的形式)。
接着将具有其边界框的基元传递到可见顶点分组生成器705,该顶点分组生成器在存储器中存储顶点分组,该顶点分组包含通过剔除级61的基元的顶点(并且基于已通过剔除级的基元的顶点)的经变换位置和经顶点着色其他属性(变动)两者(使得该数据可供用于拼接过程之外的图形处理的稍后期级)。当基元可见时,可见顶点分组生成器检查顶点是否已被添加到分组中。如果它在分组中,则它将用内部ID来替换顶点ID,在访问顶点的数据时使用该内部ID。如果它不在分组中,则可见顶点分组生成器为分组中的顶点分配存储并且生成用于访问该顶点的内部ID。然后,它将向顶点缓冲区发回信号,该顶点缓冲区将位置写入分组中的适当位置。它还将发出变动着色请求,其中着色的输出被直接写入分组。
因此,如图7所示,可见顶点分组生成器705针对属于已经通过剔除过程的基元的顶点的任何剩余(非位置)属性(变动)触发顶点属性处理(顶点着色)706。
再次,通过将用于该处理的适当请求发送到图形处理器的适当顶点着色过程来执行其他顶点属性(变动)的此进一步顶点着色。(将顶点索引从分组生成沿流水线向下发送到可见顶点分组生成器以有利于此。)如先前针对位置着色所描述,这些变动着色请求被累加并且以16个顶点的组(1个索)发送。
经处理的其他顶点属性(变动)然后被适当地添加到所生成的顶点分组,使得顶点分组接着存储经变换位置和其所涉及的顶点的其他经处理顶点属性(变动)两者。
如图7所示,可见顶点分组生成器705还将适当顶点分组逐出信号704发送到分组获取器701以指示何时可从顶点缓冲区54(安全地)逐出顶点分组。(一旦已经处理了使用来自最旧分组的顶点的最后基元,并且位置数据从顶点缓冲区写入存储器中的顶点分组,则可逐出分组。)
为了促进此操作,顶点分组生成过程包括何时不再有经组装基元将使用特定顶点分组的指示(在将使用顶点分组的所有经组装基元已被包括在经组装基元的序列中之后)与经组装基元的序列。在图7所示的实施方案中,当顶点分组正被组装且发送以用于顶点着色(即,在图5中的步骤507处)时从顶点分组“队列”逐出顶点分组时,此指示由顶点分组生成器400提供。
当可见顶点分组生成器看到不再有将使用顶点分组的经组装基元将在经组装基元序列中跟随的指示时,则其可确定将使用特定顶点分组的所有经组装基元已通过后期基元组装级,并且尤其是剔除和边界框生成级,使得将不再有将需要来自顶点缓冲区的顶点分组的基元。因此,其接着将顶点分组逐出信号704发送到分组获取器701以指示可从顶点缓冲区54安全地逐出所讨论的顶点分组。
接着将具有其边界框的基元传递到分格迭代器级/电路62,该分格迭代器级/电路操作以使用基元的边界框来识别基元应在哪些基元列表中列出(通过将基元的边界框与相应基元列表区域进行比较),并且输出相应基元和其目标基元列表(分格)。
然后,基元(多边形)列表写入级/电路63将基元写入707到存储器中的相应基元(多边形)列表中。如图7所示,基元列表可在被写入存储器之前被压缩。
图7中的直到并且包括基元列表707的准备和写入的上述处理可被认为是当生成输出时执行的整个图形处理序列和图形处理流水线的适当几何处理(几何级)的序列。
如将理解的,然后将存在一旦已经准备好基元列表就执行的后续处理级(并且其可对应地被认为是在生成输出时执行的片段处理级(片段级)的序列)。
由于本发明的实施方案使用基于图块的渲染,因此将针对单独生成的输出的相应图块执行这些片段级。
这些“片段级”可例如并且优选地以基元(多边形)列表读取器级/电路开始,该基元(多边形)列表读取器级/电路读取应用于正被处理的图块的一个或多个基元列表并且输出(向后续处理级提供)要针对所讨论的图块处理的基元序列。
接着可存在顶点获取器级,其可操作以获取由基元列表读取器针对正被处理的图块提供的基元的顶点属性,并且具体地为适当顶点着色位置。
然后可将基元序列提供到三角形(基元)设置级/电路,其执行任何期望基元(三角形)设置处理,诸如针对基元的边缘导出线等式。
一旦已针对基元执行基元(三角形)设置,可将基元提供到光栅化器以用于光栅化成图形片段,接着将所述片段提供到流水线的适当渲染(片段处理)级/电路。执行的渲染(片段处理)可包括可针对图形处理流水线执行的任何合适且期望的渲染(片段处理)。其优选地包括至少执行片段的片段着色。
光栅化器和渲染(片段处理)可以任何合适且期望的方式来执行,诸如并且优选地以针对所讨论的图形处理器和图形处理流水线的正常方式来执行。
然后,所渲染的片段数据被适当地输出到存储器,然后可从存储器使用该片段数据,例如用于显示或其他目的。(当图形处理器和流水线执行基于图块的图形处理时,经处理片段数据将经由适当的图块缓冲区被写出到存储器。)
图12和图13示出了本发明的另选实施方案,其中不是经由FIFO将经组装基元从早期基元组装级提供到后期基元组装作为延迟隐藏机制,而是实际上在稍后时间重复早期基元组装过程以重新生成经组装基元的序列以便提供适当延迟隐藏机制。
因此,在此情况下,如图12所示,仍将存在早期基元组装过程120,其如上文参考图4、图5、图6和图7所描述的那样操作以触发针对经组装基元的适当位置着色顶点以及顶点分组的对应生成和在存储器中的存储,并且在其就绪时将其获取到顶点缓冲区54中。
在此实施方案中,此操作可有效地视为“预取”操作,其触发顶点分组的生成并将其获取到顶点缓冲区54中。
然而,如图12所示,不是向后期基元组装级33提供由该第一早期基元组装操作120生成的经组装基元序列,而是执行第二早期基元组装序列121以重新生成经组装基元序列并且由此向后期基元组装级33提供该(重新生成的)经组装基元序列122。
在本发明的实施方案中,两个早期基元组装过程同时开始并且尽可能快地运行。由于基元将在顶点缓冲区的输入上停滞(因为顶点分组尚未准备好且尚未加载),因此第二早期基元组装过程将归因于背压而停滞,直到顶点分组被处理和加载并且后期基元组装可进行,由此有效地确保在经组装基元被处理之前完成预取。
另选地,第二、稍后的早期基元组装过程121可在正执行的该过程与触发顶点分组的生成并将顶点分组获取到正执行的顶点缓冲区54中的第一、早期基元组装过程120之间以适当延迟来执行,以便(试图)确保由第二早期基元组装过程121组装的基元将不被处理,直到一个或多个对应顶点分组已被生成并获取到顶点缓冲区54中。该延期(延迟隐藏)可以任何合适且期望的方式实现。
第二、稍后的早期基元组装过程121基本上以针对第一基元组装过程120的相同方式操作,但是不触发顶点分组的任何顶点着色(如“预取”、第一早期基元组装过程120已经进行的)。
基元如图12所示,第二早期基元组装过程和电路121包括索引获取器(索引获取电路)40,其从针对所生成的输出定义和提供的(所存储的)顶点索引阵列中获取并输出索引序列(流)。
索引获取器40'再次向早期基元组装级(电路)31'提供索引序列,该早期基元组装级(电路)根据定义要组装的基元的类型的基元配置信息从由索引获取器提供的索引流组装完整基元。
再次,早期基元组装级(电路)31'可操作以输出完整组装基元的序列(以及丢弃任何退化或不完整基元等)。
如图12所示,来自早期基元组装级(电路)31'的完整组装的基元序列被再次提供给顶点分组生成器级(电路)400',其操作以生成包括经组装基元的顶点的顶点分组并且重新索引经组装基元的顶点的索引以便为经组装基元的顶点提供“基于顶点分组的”索引,其方式与以上参考图4至图7所讨论的方式相同。
然而,此第二、稍后的早期基元组装过程121的顶点分组生成器400'也不触发已包括在顶点分组中的顶点的位置属性的顶点着色(如已由“预取”早期基元组装过程120进行)。
图13更详细地示出了第二早期基元组装过程121中的顶点分组生成器400'的操作。
从图13可看出,第二早期基元组装过程121中的顶点分组生成器400'的操作非常类似于以上参考图5描述的顶点分组生成过程(并且因此与参考图5描述的步骤相同的步骤将不在这里再次描述)。
然而,如图13所示,在第二早期基元组装过程121的情况下,当在步骤505中确定当前顶点分组已满(即,应开始新顶点分组)时,则开始新顶点分组,但与图5所示的操作不同,不是发送针对为其维持跟踪信息的最旧顶点分组(其现在正从“队列”逐出)的适当位置着色请求,而是仅顶点分组“引退”指示与为其维持顶点跟踪信息的该最旧顶点分组的基元的经组装序列相关联(步骤507')。
(如上文所讨论,顶点分组“引退”指示接着由可见顶点分组生成器705(参见图12)使用以识别并发信号通知何时可从顶点缓冲区54逐出顶点分组。)
如图12所示,然后以与关于图7所描述的方式相同的方式执行(重新生成的)经组装基元序列的处理。
这里应当注意,尽管为了清楚的目的,附图仅示出了几个基元、顶点、索引、位置等,但是对于给定输出的基元、顶点、索引的数量可为并且通常将为显著更高的。
如所属领域的技术人员将了解,本发明至少在其优选实施方案中可提供更有效的图形处理流水线,尤其是相对于正被处理的基元的顶点属性的处理和处置。在本发明的优选实施方案中,这至少通过以下方式来实现:基于经组装基元中包括的顶点来生成顶点分组,并且在逐个顶点分组的基础上执行顶点属性处理以及获取并使用经处理顶点属性以用于基元的处理。
Claims (21)
1.一种操作图形处理器的方法,所述图形处理器执行图形处理流水线以生成输出,其中提供了将用于在生成所述输出时将处理的基元的顶点集合,每个顶点具有与其相关联的一个或多个顶点属性的集合,以及提供了引用所述顶点集合中的顶点的顶点索引集合和指示如何将所述顶点索引组装到基元中以用于在生成所述输出时进行处理的基元配置信息;所述方法包括:
基于为所述输出提供的所述基元配置信息组装将在从为所述输出提供的所述顶点索引集合生成所述输出时处理的一个或多个基元的序列,所述经组装基元序列的每个经组装基元包括所述基元的标识符和所述基元的一个或多个顶点索引的集合;
使用所述经组装基元的所述顶点索引来生成一个或多个顶点分组,每个顶点分组包括所述经组装基元的多个顶点;
其中所述使用所述经组装基元的所述顶点索引来生成一个或多个顶点分组包括:
将经组装基元的顶点分配给顶点分组,直到已将阈值数量的顶点分配给所述顶点分组;以及
触发针对所述顶点分组的所述顶点的顶点属性处理,以由此生成包括所述顶点分组的所述顶点的经处理顶点属性的顶点分组;
以及
向正由所述图形处理器执行的所述图形处理流水线的稍后期级提供所述经组装基元和包括所述经处理顶点属性的所生成的顶点分组以用于处理。
2.根据权利要求1所述的方法,还包括:
针对多个顶点分组中的每一者,跟踪哪些顶点已被分配给所述顶点分组;以及
使用所述跟踪信息来确定新顶点是否已经被分配给那些现有顶点分组中的一者。
3.根据权利要求1或2所述的方法,包括:
响应于特定数量的顶点被添加到顶点分组而针对所述顶点分组的所述顶点触发所述顶点属性处理。
4.根据权利要求1或2所述的方法,其中针对顶点分组的所述顶点触发的所述顶点属性处理包括仅处理所述顶点分组的所述顶点的位置。
5.根据权利要求1或2所述的方法,还包括为经组装基元提供所述基元的标识符和所述基元的一个或多个顶点索引的集合,其中所述基元的每个顶点索引包括顶点分组标识符和所述顶点分组中的所述顶点的标识符。
6.根据权利要求1或2所述的方法,包括:
执行第一基元组装过程,以基于为所述输出提供的所述基元配置信息组装将在从为所述输出提供的所述顶点索引集合生成所述输出时处理的一个或多个基元的序列;
使用所述经组装基元的所述顶点索引来生成一个或多个顶点分组,每个顶点分组包括所述经组装基元的多个顶点;
其中所述使用所述经组装基元的所述顶点索引来生成一个或多个顶点分组包括:
将经组装基元的顶点分配给顶点分组,直到已将阈值数量的顶点分配给所述顶点分组;以及
触发针对所述顶点分组的所述顶点的顶点属性处理,以由此生成包括所述顶点分组的所述顶点的经处理顶点属性的顶点分组;
以及
在此之后:
执行第二基元组装过程,以基于为所述输出提供的所述基元配置信息组装将在从为所述输出提供的所述顶点索引集合生成所述输出时处理的一个或多个基元的所述相同序列;
使用来自所述第二基元组装过程的所述经组装基元的所述顶点索引来生成一个或多个顶点分组,每个顶点分组包括所述经组装基元的多个顶点;
其中所述使用来自所述第二基元组装过程的所述经组装基元的所述顶点索引来生成一个或多个顶点分组包括:
将经组装基元的顶点分配给顶点分组,直到已将阈值数量的顶点分配给所述顶点分组;
以及
向正由所述图形处理器执行的所述图形处理流水线的稍后期级提供来自所述第二基元组装过程的所述经组装基元和由所述第一基元组装过程生成的包括所述经处理顶点属性的所生成的顶点分组以用于处理。
7.根据权利要求1或2所述的方法,还包括将所述顶点分组存储在顶点缓冲区中以供所述图形处理流水线的稍后期级使用,并且其中在逐个顶点分组的基础上将所生成的顶点分组获取到所述顶点缓冲区中以供使用并且将所生成的顶点分组从所述顶点缓冲区中逐出。
8.根据权利要求7所述的方法,还包括:
跟踪针对经组装基元的所述顶点缓冲区中的顶点分组的使用,并且在根据所述跟踪确定了针对任何经组装基元将不再需要来自所述顶点缓冲区的顶点分组中的经处理顶点之后,从所述顶点缓冲区逐出所述顶点分组。
9.根据权利要求7所述的方法,包括:
一旦已经确定了将使用顶点分组的所有的所述经组装基元已经被组装并且被包括在所述经组装基元序列中,将这一点的指示与所述经组装基元序列相关联;以及
所述图形处理流水线的稍后期级在它看到对顶点分组的所述指示时,向顶点分组逐出过程发信号通知能够从所述顶点缓冲区逐出所述顶点分组。
10.根据权利要求9所述的方法,其中所述图形处理器执行基于图块的处理并且执行剔除过程作为所述拼接过程的一部分,并且在所述剔除过程之后执行所述向所述顶点分组逐出过程发信号以从所述顶点缓冲区逐出顶点分组。
11.一种图形处理器,所述图形处理器能够操作以执行图形处理流水线以便生成输出;所述图形处理器包括:
基元组装电路,所述基元组装电路被配置为基于为所述输出提供的基元配置信息来生成将在从为所述输出提供的顶点索引集合生成输出时处理的一个或多个基元的序列,所述顶点索引集合引用为所述输出提供的顶点集合中的顶点,每个顶点具有与其相关联的一个或多个顶点属性的集合,所述基元配置信息指示将如何将所述顶点索引组装到基元中以用于在生成所述输出时进行处理,所述经组装基元序列的每个经组装基元包括所述基元的标识符和所述基元的一个或多个顶点索引的集合;
顶点分组生成电路,所述顶点分组生成电路被配置为使用所述经组装基元的所述顶点索引来生成一个或多个顶点分组,每个顶点分组包括所述经组装基元的多个顶点;
其中所述顶点分组生成电路被配置为通过以下步骤使用所述经组装基元的所述顶点索引来生成所述一个或多个顶点分组:
将经组装基元的顶点分配给顶点分组,直到已将阈值数量的顶点分配给所述顶点分组;以及
触发针对所述顶点分组的所述顶点的顶点属性处理,以由此生成包括所述顶点分组的所述顶点的经处理顶点属性的顶点分组;
和
处理电路,所述处理电路被配置为向正由所述图形处理器执行的所述图形处理流水线的稍后期级提供所述经组装基元和包括所述经处理顶点属性的所生成的顶点分组以用于处理。
12.根据权利要求11所述的图形处理器,其中所述顶点分组生成电路被配置为:
针对多个顶点分组中的每一者,跟踪哪些顶点已被分配给所述顶点分组;以及
使用所述跟踪信息来确定新顶点是否已经被分配给那些现有顶点分组中的一者。
13.根据权利要求11或12所述的图形处理器,其中所述顶点分组生成电路被配置为:
响应于特定数量的顶点被添加到顶点分组而针对所述顶点分组的所述顶点触发所述顶点属性处理。
14.根据权利要求11或12所述的图形处理器,其中针对顶点分组的所述顶点触发的所述顶点属性处理包括仅处理所述顶点分组的所述顶点的位置。
15.根据权利要求11或12所述的图形处理器,其中为经组装基元提供了所述基元的标识符和所述基元的一个或多个顶点索引的集合,其中所述基元的每个顶点索引包括顶点分组标识符和所述顶点分组中的所述顶点的标识符。
16.根据权利要求11或12所述的图形处理器,其中所述图形处理器被配置为:
执行第一基元组装过程,以基于为所述输出提供的所述基元配置信息组装将在从为所述输出提供的所述顶点索引集合生成所述输出时处理的一个或多个基元的序列;
使用所述经组装基元的所述顶点索引来生成一个或多个顶点分组,每个顶点分组包括所述经组装基元的多个顶点;
其中所述使用所述经组装基元的所述顶点索引来生成一个或多个顶点分组包括:
将经组装基元的顶点分配给顶点分组,直到已将阈值数量的顶点分配给所述顶点分组;以及
触发针对所述顶点分组的所述顶点的顶点属性处理,以由此生成包括所述顶点分组的所述顶点的经处理顶点属性的顶点分组;
以及
在此之后:
执行第二基元组装过程,以基于为所述输出提供的所述基元配置信息组装将在从为所述输出提供的所述顶点索引集合生成所述输出时处理的一个或多个基元的所述相同序列;
使用来自所述第二基元组装过程的所述经组装基元的所述顶点索引来生成一个或多个顶点分组,每个顶点分组包括所述经组装基元的多个顶点;
其中所述使用来自所述第二基元组装过程的所述经组装基元的所述顶点索引来生成一个或多个顶点分组包括:
将经组装基元的顶点分配给顶点分组,直到已将阈值数量的顶点分配给所述顶点分组;
以及
向正由所述图形处理器执行的所述图形处理流水线的稍后期级提供来自所述第二基元组装过程的所述经组装基元和由所述第一基元组装过程生成的包括所述经处理顶点属性的所生成的顶点分组以用于处理。
17.根据权利要求11或12所述的图形处理器,还包括:
顶点缓冲区,所述顶点缓冲区用于存储所生成的顶点分组以供所述图形处理流水线的稍后期级使用;和
顶点分组获取电路,所述顶点分组获取电路被配置为在逐个顶点分组的基础上将顶点分组获取到所述顶点缓冲区中以供使用,并且从所述顶点缓冲区逐出顶点分组。
18.根据权利要求17所述的图形处理器,被配置为:
跟踪针对经组装基元的所述顶点缓冲区中的顶点分组的使用,并且在根据所述跟踪确定了针对任何经组装基元将不再需要来自所述顶点缓冲区的顶点分组中的经处理顶点之后,从所述顶点缓冲区逐出所述顶点分组。
19.根据权利要求17所述的图形处理器,其中:
所述顶点分组生成电路被配置为,一旦已经确定了将使用顶点分组的所有的所述经组装基元已经被组装并且被包括在所述经组装基元序列中,将这一点的指示与所述经组装基元序列相关联;并且
所述图形处理流水线的稍后期级被配置为,在它看到对顶点分组的所述指示时,向所述顶点分组获取电路发信号通知能够从所述顶点缓冲区逐出所述顶点分组。
20.根据权利要求19所述的图形处理器,其中所述图形处理器执行基于图块的处理并且执行剔除过程作为所述拼接过程的一部分,并且在所述剔除过程之后执行所述向所述顶点分组获取电路发信号以从所述顶点缓冲区逐出顶点分组。
21.一种包括计算机软件代码的计算机程序,所述计算机软件代码用于当所述程序在一个或多个数据处理器上运行时执行根据权利要求1或权利要求2所述的方法。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
GBGB2217231.6A GB202217231D0 (en) | 2022-11-17 | 2022-11-17 | Graphics processing systems |
GB2217231.6 | 2022-11-17 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN118052695A true CN118052695A (zh) | 2024-05-17 |
Family
ID=84889210
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202311536010.2A Pending CN118052695A (zh) | 2022-11-17 | 2023-11-17 | 图形处理系统 |
Country Status (3)
Country | Link |
---|---|
US (1) | US20240169464A1 (zh) |
CN (1) | CN118052695A (zh) |
GB (1) | GB202217231D0 (zh) |
-
2022
- 2022-11-17 GB GBGB2217231.6A patent/GB202217231D0/en not_active Ceased
-
2023
- 2023-10-31 US US18/499,029 patent/US20240169464A1/en active Pending
- 2023-11-17 CN CN202311536010.2A patent/CN118052695A/zh active Pending
Also Published As
Publication number | Publication date |
---|---|
US20240169464A1 (en) | 2024-05-23 |
GB202217231D0 (en) | 2023-01-04 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN105321199B (zh) | 图形处理流水线及其操作方法与介质 | |
US10255718B2 (en) | Graphics processing | |
JP5053857B2 (ja) | 3次元グラフィックス処理装置および方法 | |
US10607400B2 (en) | Graphics processing systems using a vertex shader to render plural images | |
US8922572B2 (en) | Occlusion queries in graphics processing | |
US10650580B2 (en) | Graphics processing | |
US9535700B2 (en) | Data processing systems | |
US9153070B2 (en) | Hidden surface removal in graphics processing systems | |
KR20140078568A (ko) | 그래픽 처리 시스템에서 히든 표면의 제거 | |
US10432914B2 (en) | Graphics processing systems and graphics processors | |
US11734869B2 (en) | Graphics processing | |
US20230298249A1 (en) | Graphics Processing | |
US11790479B2 (en) | Primitive assembly and vertex shading of vertex attributes in graphics processing systems | |
CN116777726A (zh) | 图形处理 | |
CN115311120A (zh) | 图形处理系统 | |
CN118052695A (zh) | 图形处理系统 | |
US20240169465A1 (en) | Graphics processing systems | |
US20240169474A1 (en) | Graphics processing | |
US20240169639A1 (en) | Graphics processors | |
US20240037692A1 (en) | Graphics processing | |
US20240037853A1 (en) | Graphics processing | |
US20240169647A1 (en) | Graphics processors | |
CN118052696A (zh) | 图形处理系统 | |
GB2624428A (en) | Graphics processors |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication |