CN109214976B - 图形处理 - Google Patents
图形处理 Download PDFInfo
- Publication number
- CN109214976B CN109214976B CN201810734571.6A CN201810734571A CN109214976B CN 109214976 B CN109214976 B CN 109214976B CN 201810734571 A CN201810734571 A CN 201810734571A CN 109214976 B CN109214976 B CN 109214976B
- Authority
- CN
- China
- Prior art keywords
- vertex
- vertices
- memory space
- graphics processing
- shading
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
- 238000012545 processing Methods 0.000 title claims abstract description 269
- 230000015654 memory Effects 0.000 claims abstract description 493
- 238000012360 testing method Methods 0.000 claims description 93
- 238000000034 method Methods 0.000 claims description 75
- 230000004044 response Effects 0.000 claims description 19
- 238000004590 computer program Methods 0.000 claims description 6
- 239000012634 fragment Substances 0.000 abstract description 28
- 238000009877 rendering Methods 0.000 description 53
- 230000008569 process Effects 0.000 description 46
- 239000000872 buffer Substances 0.000 description 21
- 239000008186 active pharmaceutical agent Substances 0.000 description 7
- 238000004364 calculation method Methods 0.000 description 7
- 230000006870 function Effects 0.000 description 7
- 230000003111 delayed effect Effects 0.000 description 6
- 230000001960 triggered effect Effects 0.000 description 6
- 230000008901 benefit Effects 0.000 description 5
- 238000004040 coloring Methods 0.000 description 5
- 230000000903 blocking effect Effects 0.000 description 4
- 230000003287 optical effect Effects 0.000 description 4
- 238000005070 sampling Methods 0.000 description 4
- 230000003068 static effect Effects 0.000 description 4
- 238000004891 communication Methods 0.000 description 3
- 230000000694 effects Effects 0.000 description 3
- 238000013507 mapping Methods 0.000 description 3
- 229920006395 saturated elastomer Polymers 0.000 description 3
- 238000000638 solvent extraction Methods 0.000 description 3
- 238000004458 analytical method Methods 0.000 description 2
- 239000007853 buffer solution Substances 0.000 description 2
- 238000004422 calculation algorithm Methods 0.000 description 2
- 238000005516 engineering process Methods 0.000 description 2
- 230000007246 mechanism Effects 0.000 description 2
- 238000005192 partition Methods 0.000 description 2
- 230000009466 transformation Effects 0.000 description 2
- 230000005540 biological transmission Effects 0.000 description 1
- 239000002981 blocking agent Substances 0.000 description 1
- 238000013479 data entry Methods 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 230000001419 dependent effect Effects 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 238000007726 management method Methods 0.000 description 1
- 238000002156 mixing Methods 0.000 description 1
- 239000000203 mixture Substances 0.000 description 1
- ZRHANBBTXQZFSP-UHFFFAOYSA-M potassium;4-amino-3,5,6-trichloropyridine-2-carboxylate Chemical compound [K+].NC1=C(Cl)C(Cl)=NC(C([O-])=O)=C1Cl ZRHANBBTXQZFSP-UHFFFAOYSA-M 0.000 description 1
- 230000036316 preload Effects 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 230000001360 synchronised effect Effects 0.000 description 1
- 238000012546 transfer Methods 0.000 description 1
- 230000001131 transforming effect Effects 0.000 description 1
- 238000012795 verification Methods 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T15/00—3D [Three Dimensional] image rendering
- G06T15/50—Lighting effects
- G06T15/80—Shading
-
- 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
- G06T1/00—General purpose image data processing
- G06T1/60—Memory management
-
- 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
- G06T2200/00—Indexing scheme for image data processing or generation, in general
- G06T2200/28—Indexing scheme for image data processing or generation, in general involving image processing hardware
Abstract
本公开涉及图形处理。图形处理流水线(10)包括:位置着色器(11)、图块化器(12)、用于存储图元列表和顶点的顶点着色属性数据的内存池(15)、变量顶点着色器(13)、以及片段前端和着色器(14)。位置着色器(11)对将由图形处理流水线处理的一组顶点中的顶点的位置属性执行顶点着色。图块化器(12)使用顶点着色位置数据,来识别应该进一步进行处理以生成所述渲染输出的图元。当图块化器(12)确定顶点应该进一步进行处理以生成渲染输出时,其分配内存池(15)中用于存储顶点的顶点着色属性数据的内存空间。然后将顶点的顶点着色属性数据存储在内存池(15)中所分配的空间中以例如供片段前端和着色器(14)后续使用。
Description
技术领域
本发明涉及图形处理,并且具体地说,涉及执行顶点着色的图形处理流水线的操作。
背景技术
通常,图形处理首先通过把要显示的场景(例如,3-D模型)划分成多个相似的基本组件或“图元”,接着使这些图元经受期望的图形处理操作。图形“图元”通常采用简单多边形的形式,诸如,三角形。
每个图元通常由一组顶点限定并表示,其中,每个顶点通常都已经关联其与一组“属性”,即,针对顶点的一组数据值。这些属性通常会包括所讨论的顶点的位置数据和其它非位置数据(变量),例如,限定颜色、光、法线、纹理坐标等。
针对要由图形处理流水线生成的给定输出,例如,要显示的帧,通常是针对所讨论的输出而限定一组顶点。然后,要针对该输出处理的图元将被指示为,包括正被生成的图形处理输出的一组顶点中的给定顶点。通常,将全部输出,例如,要生成的帧分成更小的处理单元,称之为“绘图调用(draw call)”。每个绘图调用都会具有针对其限定的一组相应顶点,以及使用这些顶点的一组图元。
一旦生成并限定出了图元及其顶点,就可以通过图形处理流水线来处理它们,以便生成期望的图形处理输出(渲染目标),诸如,用于显示的帧。这主要涉及光栅化和渲染图元以生成图形处理输出。
这些光栅化和渲染处理使用与正在处理的图元的顶点相关联的顶点属性。为了促进该操作,在光栅化和渲染图元之前,针对给定图形处理输出(例如,绘图调用)限定的顶点的属性,通常经受初始的所谓的“顶点着色”操作。该“顶点着色”操作操作为,将针对每个顶点的属性变换成用于随后的图形处理操作的期望形式。例如,这可以包括将顶点位置属性从它们初始被限定的世界或用户空间,变换至要显示图形处理系统的输出的画面空间。
因此,图形处理流水线通常会包括顶点着色级(顶点着色器),其对针对顶点限定的初始顶点属性值执行顶点着色计算,以生成期望的一组输出顶点属性(即,恰当地“着色的”属性),以供图形处理流水线的后续处理级使用。
一旦顶点属性已经被着色,那么在处理图形处理流水线的剩余部分中的顶点(以及与其相关的图元)时使用“着色的”属性。
(通常,“输入变量”和“输出变量”是用于来自图形处理流水线中的着色器(着色级)的输入和输出的通用术语。在进行顶点着色之前,顶点是可以在顶点着色器中作为输入变量被存取的“通用顶点属性”的集合。然后顶点着色器执行产生顶点位置和通过顶点着色器明确写出的任何输出。“变量”是从顶点着色器传递到光栅化和片段着色的属性,不包括位置。(因此仅来自顶点着色器的非位置输出是“变量”))。
图形处理流水线的一种形式是所谓的基于图块(tile-based)的图形处理流水线,其中,将二维渲染输出或目标渲染为多个更小的子区域,通常称之为“图块”。分别单独地(通常一个接一个地)渲染图块。然后将渲染后的图块组合起来以提供完整的渲染输出(例如,用于显示的帧)。
(通常用于“图块化”和“基于图块的”渲染的其它术语包括“组块化(chunking)”(渲染图块被称为“组块”)和“分块(bucket)”渲染。为了方便起见,在下文中会使用术语“图块”和“图块化”,但是应该理解,这些术语旨在涵盖所有可替代的和等价的术语和技术)。
在基于图块的图形处理流水线中,正在生成的渲染输出的几何形状(图元)被分类到渲染处理对其起作用的图块中。图块化处理标识需要针对给定渲染图块进行处理的图元(例如,以避免对实际上不存在于图块中的图元进行不必要的渲染)。该图块化处理产生要针对渲染图块进行渲染的图元列表。然后,一旦为渲染图块准备好了图元列表,就通过对针对渲染图块列出的图元进行光栅化和渲染,来处理每个渲染图块。因此,基于图块的图形处理的一个重要方面是,生成图元列表以用于标识需要针对渲染图块进行处理的图元的初始处理,然后初始处理后接着的是,针对图块的主要光栅化过程和渲染过程。
因此,在基于图块的处理系统中,具有初始处理过程(实际上,把要处理的图形图元(和/或其它图形实体)分类为,渲染输出出于处理目的而被划分成的图块)。必须针对要处理的渲染输出处理单元(绘图调用)的全部几何形状(图元)等执行该初始处理过程(因为只有在全部几何形状被分类为“图块”时,才能知道需要针对给定图块处理的全部几何形状)。只有在将几何形状等分类为图块的初始处理完成了,并且实际上,在将几何形状(图元)分类为图块的初始处理完成之前“延迟”了时,才能对应地完成对图块中的几何形状(图元)的光栅化和渲染以生成渲染输出。
对应地,可以将基于图块的图形处理流水线认为是(并且称为)“延迟”的图形处理流水线(图形处理器)(并且执行“延迟”渲染)。这是因为,在为渲染输出出于处理目的而被划分成的每个图块准备了要处理的合适的图元列表之前,光栅化过程和渲染过程延迟了。
申请人已经认识到,当在基于图块的图形处理流水线的情况下执行延迟渲染时,保留(存储)已经用于初始“图块化”处理过程的几何数据(并且具体地,顶点着色顶点数据)以供后续的延迟光栅化和渲染过程使用,是可取的。这可以避免,例如,不得不在初始“图块化”处理过程与后续的延迟光栅化和渲染过程之间,再次生成顶点着色顶点数据(以对顶点“重新着色”)。
然而,这意味着有必要将几何(并且具体地,顶点)数据存储一段时间以供后续的延迟光栅化和渲染过程使用。对应地,需要分配内存以存储该数据,使得该数据可以用于后续的延迟光栅化和渲染过程。
这样做的一种方式是,(例如,基于由需要图形处理的应用输入的顶点总数)分配(可能)要处理的全部几何(顶点)数据所需的最大量的内存空间。然而,就图形处理流水线作为其一部分的数据处理系统中的内存的总体使用而言,这可能是低效的(或者,真的,可能没有充足的可用内存空间来为全部(可能的)所需数据留出空间)。确定应该分配多少内存空间也可能是相对复杂的任务。
也可以对可能的内存空间需求进行更复杂的分析,以便为了该目的试图实现更高效的内存分配,但是这可能导致驱动程序的复杂性和操作增加(和/或可以要求对图形处理器本身执行“内存分配”操作中的一些或全部)。
因此,本申请人认为对于采用顶点着色的(具体地,基于图块的)图形处理流水线来说,仍然存在改进的范围。
发明内容
根据本发明的第一方面,提供了一种操作图形处理流水线的方法,该方法包括如下步骤:
针对要由图形处理流水线处理的一组顶点,进行如下操作:
图形处理流水线的顶点着色级对所述一组顶点中的一个或多个顶点执行第一顶点着色操作,以生成针对该组中的一个或多个顶点的至少一个顶点属性的顶点着色属性数据;
针对已经经受第一顶点着色操作的一个或多个顶点中的相应顶点或顶点组,图形处理流水线的测试级确定是否应该分配用于存储该顶点或顶点组的至少一个顶点属性的顶点着色属性数据的内存空间,其中,该确定的操作包括至少部分地使用由第一顶点着色操作生成的顶点着色属性数据中的一些或全部;
响应于确定了应该为顶点或顶点组分配内存空间,测试级发送针对要分配给该顶点或顶点组的内存空间的请求;以及
响应于来自测试级的请求,内存分配器分配用于存储已经发送了请求的顶点或顶点组的顶点着色属性数据的内存空间。
根据本发明的第二方面,提供了一种图形处理系统,该图形处理系统包括:
图形处理流水线,该图形处理流水线包括:
顶点着色级,该顶点着色级可操作以对要由图形处理流水线处理的一组顶点中的一个或多个顶点执行第一顶点着色操作,以生成针对所述一组顶点中的一个或多个顶点的至少一个顶点属性的顶点着色属性数据;以及
测试级,针对已经经受第一顶点着色操作的一个或多个顶点中的相应顶点或顶点组,该测试级可操作以确定是否应该分配用于存储该顶点或顶点组的至少一个顶点属性的顶点着色属性数据的内存空间,其中,该确定的操作包括至少部分地使用由第一顶点着色操作生成的顶点着色属性数据中的一些或全部;
响应于确定了应该为顶点或顶点组分配内存空间,测试级进一步可操作以发送针对要分配给该顶点或顶点组的内存空间的请求;
该图形处理系统进一步包括:
内存分配器,响应于来自测试级的对要分配的内存空间的请求,该内存分配器可操作以分配用于存储已经发送了请求的顶点或顶点组的顶点着色属性数据的内存空间。
在本发明中,不同于常规的延迟渲染图形处理布置,在使用来自第一顶点着色操作的顶点着色数据的测试操作确定应该为顶点或顶点组分配内存空间之后,分配用于存储顶点或顶点组的顶点着色属性数据的内存空间。换言之,对顶点或顶点组的顶点着色属性数据的内存空间分配实际上是有条件地分配的,并且是根据测试级(使用通过第一顶点着色操作生成的顶点着色数据)的结果“按需”分配的。
就这一点而言,本申请人已经认识到,在许多情况下,实际上并非针对,例如,绘图调用限定的全部顶点都会用于生成期望的图形输出,例如,用于显示的帧。例如,这在一个或多个顶点位于视锥外或者在一个或多个顶点(唯一地)属于后向图元时可能发生。本申请人已经进一步认识到,实际上,对这些“未使用的”顶点的顶点着色属性数据的任何内存空间分配都是多余的(而且,如果可以的话,是希望避免的)。
本发明通过提供可以减少或避免对顶点着色属性数据的内存空间的冗余分配的系统,来解决并促进这个问题。如上文所提到的,这是通过(仅)在使用顶点的顶点着色属性数据的测试级确定是否应该分配内存空间之后,为顶点的顶点着色属性数据分配内存空间实现的。通过这种方式,并且如下面会进一步讨论的,可以仅(并且需要)分配用于存储顶点着色属性数据的减少量的内存空间,并且具体地,可以减少和/或避免对用于存储实际上“未使用的”顶点的顶点着色属性数据的内存空间的分配。因此,这促进了延迟(例如,基于图块的)渲染系统中的用于存储顶点数据(并且具体地,顶点的顶点着色属性数据)的内存的更高效的使用。
正在本发明的布置中处理的一组顶点可以是:要通过图形处理流水线处理的任何期望并合适的一组顶点。因此,这组顶点可以包括(并且在一个优选实施例中包括)针对给定图形处理输出(渲染目标),诸如,针对要显示的帧限定的全部顶点组。这还可以包括针对小于全部渲染输出限定的一组顶点,诸如,针对给定绘图调用限定的一组顶点。在优选实施例中,这组顶点是针对绘图调用限定的一组顶点。
(其中,这组顶点小于针对给定渲染输出限定的全部顶点组,然后优选地针对渲染输出的每组顶点(例如,并且优选地,每个绘图调用)用本发明的方式重复操作。对应地,优选地针对要生成的多个,并且优选地,每个渲染输出重复本发明的处理,例如,针对输出帧序列中的连续帧)。
对一组顶点中的一个或多个顶点进行处理(顶点着色)的第一顶点着色操作可以处理一组顶点中的仅一些而非全部的顶点,但是在优选实施例中处理正在处理的一组顶点中的全部顶点(即,正在处理的一组顶点中的每个顶点都经受第一顶点着色操作)。
第一顶点着色操作可以针对顶点的全部顶点属性执行顶点着色,但是优选地针对顶点的至少一个而非全部的顶点属性(即,针对该组中的一个或多个顶点的一些而非全部的顶点属性)执行顶点着色。
在第一顶点着色操作中处理的至少一个顶点属性可以是,任何一个或多个期望并合适的(多个)顶点属性。可以仅处理一个属性,或者可以处理多个属性。
在优选实施例中,在第一着色操作中处理的(多个)属性是,如果要将内存空间分配给顶点,则必须满足或依赖于一个或多个条件的(多个)属性。
在具体优选的实施例中,在第一顶点着色操作中处理的(多个)顶点属性包括顶点的一个或多个位置属性。通常仅存在单个位置属性,由(X、Y、Z、W)分量组成。在这种情况下,在第一顶点着色操作中处理的顶点属性将包括(至少)这单个位置属性。然而,还可以存在其它位置属性,诸如,点大小或者线宽(例如,当渲染点和线时)。
优选地,在第一顶点着色操作中对全部位置属性进行顶点着色,但是可以根据需要处理不到全部的位置属性,诸如,仅一个位置属性。在一个优选实施例中,在第一顶点着色操作中仅处理位置属性(因此,在优选实施例中,在第一顶点着色操作中不处理变量),但是也可能根据需要处理一个或多个其它(非位置)属性以及一个或多个位置属性。
在本发明的优选实施例中,第一顶点着色操作包括:对正在处理的组中的顶点的位置属性(位置数据)执行顶点着色计算。因此,第一顶点着色操作优选地至少变换,并且优选地仅变换正在处理的顶点的位置属性。
通过第一顶点着色操作生成的顶点着色属性数据可以包括任何期望并合适的这类数据,并且,例如,依赖于第一顶点着色操作处理的顶点属性。如上文所讨论的,通过第一顶点着色操作生成的顶点着色数据优选地包括:(至少)顶点的顶点着色位置数据(例如,变换后的几何形状)。顶点着色数据还可以包括一个或多个非位置顶点属性的顶点着色数据。
应该(并且优选地)将通过第一顶点着色操作生成的顶点着色属性数据适当存储以供图形处理流水线的测试级使用。在优选实施例中,FIFO用于将顶点着色数据从第一顶点着色操作传递到测试级。
然后针对已经经受第一顶点着色操作的一个或多个顶点中的相应顶点或顶点组确定是否应该分配用于存储该顶点(或顶点组)的顶点着色属性数据的内存空间。这可以在针对所讨论的组中的全部顶点完成了第一顶点着色操作(已经处理了要经受第一顶点着色操作的全部顶点)之后完成。然而,当在第一顶点着色操作中处理了顶点(或顶点组)之后,优选地针对该顶点(或顶点组)执行该确定。例如,这有利于再次使用为第一顶点着色操作缓存了的任何已经缓存了的顶点数据。
因此,在具体优选的实施例中,在针对顶点或顶点组完成了第一顶点着色操作之后,无需等待针对正在处理的一组顶点中的全部顶点(和,优选实施例中的其它顶点,并且优选地,任何其它顶点)完成了第一顶点着色操作,优选地执行对是否应该为该顶点或顶点组分配内存空间的确定。
优选地,针对已经经受第一顶点着色操作的全部顶点完成该确定(尽管这不是必要的,并且根据需要,仅一些并非全部的已经经受第一顶点着色操作的顶点可以经受该确定)。
第一顶点着色操作之后的对是否应该为顶点(或顶点组)分配内存空间的确定可以以任何期望并合适的方式执行,并且可以使用任何期望并合适的测试执行,以确定是否应该为顶点(或顶点组)分配内存空间。
在具体优选的实施例中,该处理确定顶点(或顶点组)是否需要生成所讨论的整个图形处理操作的输出(即,顶点是否需要贡献于图形处理操作的渲染输出(例如,帧))。
优选地,以适当保守的方式来实施该确定,以便不仅为顶点分配内存空间,利用充足的确定性可以确定这些顶点不需要生成图形处理操作的输出。
在具体优选的实施例中,该确定包括:确定顶点是否属于(要用于)在图形处理操作的输出中可见的图元(并且如果确定顶点(或顶点组)不属于(不用于)在图形处理操作的输出中可见的任何图元,那么确定该顶点(或顶点组)不需要生成图形处理操作的输出(并且不应具有(并且优选地,不具有)分配给它的任何内存空间))。
因此,在具体优选的实施例中,针对正在生成的图形处理输出的相应图元,测试级确定是否应该分配用于存储图元中的顶点的顶点着色属性数据的内存空间。对应地,针对(包括为一组顶点限定的给定图元中的顶点)一组一个或多个顶点(并且优选地,多组,并且优选地,每组),测试级优选地确定是否应该分配用于存储该顶点组(图元)的顶点着色属性数据的内存空间。对应地,确定是否应该分配用于存储其顶点着色属性数据的内存空间的每个顶点组优选地包括与要渲染的(相应)图元相对应的顶点组。
在具体优选的实施例中,如果顶点(或顶点组)属于至少部分地位于正在生成的输出的视锥内的图元和/或属于前向图元,则确定该顶点(或顶点组)需要生成图形处理操作的输出。优选地,如果确定顶点(或顶点组)属于至少部分地位于视锥内的前向图元,则确定其需要生成图形处理操作的输出(并且分配用于存储该顶点(或顶点组)的顶点着色属性数据的内存空间)。对应地,优选地确定不需要唯一地属于完全位于视锥外的图元或者后向图元的任何顶点(并且优选地,这些顶点不具有为其分配的任何内存空间)。
如上文所讨论的,对是否应该为顶点(或顶点组)分配内存空间的确定至少部分地使用来自第一顶点着色操作的顶点着色数据。如上文所讨论的,该顶点着色数据将取决于该确定的本质,但是在具体优选的实施例中,包括所讨论顶点的顶点着色位置数据(属性)(因为这是,例如,确定顶点和图元是否位于视锥内和/或是后向的所需的顶点的位置数据)。
第一顶点着色操作之后的确定是否应该为顶点(或顶点组)分配内存空间的测试级可以是:图形处理流水线中的任何期望并合适的级和元素。例如,用于执行该确定的特定测试级可以包括在图形处理流水线中。
然而,在具体优选的实施例中,该确定通过图形处理流水线的现有(处理)级执行,优选地,通过将可以用于该确定的一个或多个测试正常执行为其“正常”处理操作的一部分的级执行。
然而,在具体优选的实施例中,除了用于该确定的一个或多个测试(和/或处理级,在该处理级中,可以用于该确定的一个或多个测试是其整体处理操作的一部分,但是该级也执行其它处理操作)之外,图形处理流水线中确定是否应该为顶点或顶点组分配内存空间的测试级包括:图形处理流水线中执行图形处理流水线的另外一个或多个处理操作的级。
在具体优选的实施例中,图形处理流水线是基于图块的图形处理流水线,并且图形处理流水线中的图块化器(图块化级)(即,图形处理流水线中将图元分类为渲染输出的相应区域并且为渲染输出(例如,帧)的每个区域的处理准备适当的图元列表的级)执行对是否应该为顶点分配内存空间的确定。因此,在优选实施例中,测试级是图形处理流水线中的图块化器。
通常,图块化器会(根据顶点的顶点着色位置属性)确定图元在正在生成的渲染目标中是否是可见的,从而是否应该,例如,为其顶点分配内存空间。例如,图块化处理通常会测试图元是否(至少部分地)在视锥内,从而是否需要生成图形处理操作的输出。图块化器通常还会包括后向剔除测试(backward facing culling test)。
因此,图块化器是图形处理流水线中用于执行确定的具体优选的级,因为图块化器已经操作以对要显示的场景的图元执行“可视性”测试(诸如,视锥和/或后向测试等)。
因此,如果将图元包括在由图块化器(图块化级)列出的图块中,则可以将其视为对图元(及其顶点)可能需要生成图形处理操作的输出(确定)的指示。
因此,在优选实施例中,如果在图块化级中确定顶点(或顶点组)属于可见的图元,并且优选地,如果(当)在图块化级中其属于(要用于)的图元被包括在图元列表中,则为其顶点着色属性数据分配内存空间。
对应地,在优选实施例中,对是否应该为顶点分配内存空间的确定包括:确定该顶点是否属于(要用于)已经包括在正在执行的图形处理操作中的图元列表中的图元。
图块化器(如果不是图块化器的话,则是图块化级)可以使用任何合适并期望的方法来确定是否应该为顶点分配内存空间,诸如,基于边界框对顶点(或者对顶点属于的图元)的测试、后向确定、或者,例如,可以在图块化器中(在图块化级中)执行的任何其它合适的测试。
在具体优选的实施例中,除了,例如,上文讨论的“可视性”测试之外,对是否应该分配用于存储顶点或顶点组的顶点着色属性数据的内存空间的确定进一步包括:确定是否已经为顶点的顶点着色属性数据分配了内存空间。
因此,在优选实施例中,在为已被经确定例如“可见”(是否是单个顶点或顶点组中的一部分)的顶点分配内存空间之前,确定是否已经为该顶点的顶点着色属性数据分配了内存空间。
就这一点而言,本申请人已经认识到,例如,如果顶点是已经被分配了内存空间的早期顶点组中的一部分,则可能已经为顶点的顶点着色属性数据分配了内存空间。这可能是,例如,顶点已经被可见图元使用了的情况。在该情况下,已经为该顶点分配了内存空间,所以无需再次为该顶点分配内存空间。
因此,在优选实施例中,对是否应该分配用于存储顶点或顶点组的至少一个顶点属性的顶点着色属性数据的内存空间的确定包括:将通过第一顶点着色操作生成的顶点着色属性数据中的一些或全部用于该确定(如上文所讨论的),以及确定是否已经为所讨论的顶点或顶点组的顶点着色属性数据分配了内存空间。
对应地,在优选实施例中,本发明包括(并且图形处理流水线可操作以使)测试级,该测试级首先至少部分地使用通过第一顶点着色操作生成的顶点着色属性数据中的一些或全部,来确定是否应该分配用于存储顶点或顶点组的至少一个顶点属性的顶点着色属性数据的内存空间(通过上文讨论的方式,例如,并且优选地,使用对顶点或顶点组的“可视性”测试),然后,当该测试针对该顶点或顶点组确定应该(原则上)分配用于存储顶点或顶点组的顶点着色属性数据的内存空间时,针对顶点或顶点组中的每个顶点,确定是否已经为该顶点的顶点着色属性数据分配了内存空间,并且当确定已经为该顶点的顶点属性数据分配了内存空间时,不再进一步为该顶点的顶点着色属性数据分配内存空间,但是当尚未确定该顶点的顶点着色属性数据分配内存空间时,为该顶点的顶点着色属性数据分配内存空间。
可以通过任何合适并期望的方式来确定已经分配了用于存储顶点的顶点属性数据的内存空间。
在具体优选的实施例中,图形处理流水线被配置成对已经为顶点着色属性数据分配了内存空间的顶点和/或顶点组保持追踪。这可以通过任何适当并期望的方式实现。
在优选实施例中,维护并存储指示已经为顶点的顶点着色属性数据分配了内存空间的顶点和/或顶点组的信息。
该信息可以采取任何合适并期望的形式。例如,出于这个目的,可以使用包括相应顶点或顶点组的相应条目的(顶点)位图,位图中的每个条目都指示顶点(或顶点组)(与该位图条目相对应)是否已经具有分配给该顶点(或顶点组)的内存空间。然后可以通过例如作为位图查找的关键的元组{InstanceID,VertexID},来存取顶点位图。
然而,在优选实施例中,指示已经为顶点着色属性数据分配了内存空间的顶点或顶点组的信息包括已经将内存空间分配给该顶点或顶点组的指示(可以提供其自身的位图)以及指示哪些内存空间(内存空间的位置)已经分配给顶点或顶点组的信息(这可能全部是同一指示符的一部分)。换言之,指示已经被分配了内存空间的顶点和/或顶点组的信息优选地还指示内存空间被分配到何处。
如下面会进一步讨论的,在优选实施例中,指示已经分配给顶点或顶点组的内存空间的位置的信息包括:所分配的内部顶点ID(序列索引)(这会指示至少在全部顶点被分配在线性阵列中的情况下顶点数据在内存中的位置)。如果需要的话,可以使用诸如使用全指针(从而消除对顶点数据布局的任何限制)等其它布置。
因此,在优选实施例中,将指示已经被分配了内存空间的顶点和/或顶点组的信息存储,例如并且优选地在缓存中,该缓存包含从输入顶点标识到所分配的输出顶点标识的映射,缓存中的未命中对应地指示尚未将内存空间分配给所讨论的顶点或顶点组。
用于这个目的的缓存可以是专门分配的缓存,但是在优选实施例中,出于这个目的,使用图形处理流水线的现有缓存,诸如,并且优选地,分配以存储顶点着色属性数据(变换后的顶点)的缓存。在这种情况下,可以,并且优选地,将指示已经被分配了内存空间的顶点和/或顶点组的信息添加到变换后的顶点缓存中。在这种布置中,例如,当对顶点的位置进行着色时将该顶点加载到缓存中,然后当确定应该将内存空间分配给该顶点(例如,该顶点是可见的)时,应该(会)保证该顶点位于缓存中,并且可以将指示何处已经被分配了内存空间的适当信息添加到变换后的顶点缓存中。(只要内存空间分配映射存在于图形处理器内,它就应该是有效的。因此,如果驱赶映射信息,则优选地再次完成位置着色,并且建立新的内存空间分配)。
然后,优选地在测试级中使用指示已经为哪些顶点的顶点着色属性数据分配了内存空间的信息,来确定已经确定应该(可能)被分配了内存空间的顶点(或顶点组)是否已经被分配了内存空间。
因此,在本发明的实施例中,对是否应该为顶点(或顶点组)分配内存空间的确定(另外)包括:至少部分地通过指示已经被分配了内存空间的顶点或顶点组的信息来确定该顶点(或顶点组)之前是否已经被分配了内存空间。
因此,在具体优选的实施例中,图形处理流水线的测试级(例如,并且优选地,图块化器)可操作以通过以下方式来确定是否将内存空间分配给顶点:
首先确定生成图形处理操作的输出是否需要该顶点或者包括该顶点的顶点组(优选地,通过确定该顶点是否属于(要用于)在图形处理操作的输出中可见的图元);以及
当确定生成图形处理操作的输出需要该顶点或顶点组时:
那么根据指示已经被分配了内存空间的顶点和/或顶点组的信息,来确定该顶点是否已经被分配了内存空间;以及
当根据该信息确定该顶点已经被分配了内存空间时,那么不为该顶点分配内存空间,但是当未(不是)确定顶点已经被分配了内存空间时,那么为该顶点分配内存空间。
因此,在具体优选的实施例中,测试级,例如并且优选地,图块化器实际上包括可视性测试级,该可视性测试级确定正在生成的图形处理输出是否需要顶点或顶点组,并且当确定正在生成的图形输出(例如,并且优选地(可能)可见)需要该顶点或顶点组时,将信息提供给进一步的检查单元,然后检查指示已经被分配了内存空间的顶点或顶点组的存储信息,然后检查单元对应地为该顶点(不)分配和/或请求内存空间。
可以将指示哪些顶点(未)被分配了内存空间的信息存储在能够由图形处理流水线存取的任何合适并期望的存储部中。例如,该存储部可以是用于存储这种信息的专用内存,或者可以是用于存储除了这种信息之外的其它数据的内存的一部分。该存储部可以是任何合适并期望的信息存储部,诸如例如,一个或多个缓冲器、一个或多个缓存等。在优选实施例中,将该信息存储在本地缓存内存中,或者图形处理流水线的测试级(或者其适当的级)可以存取该信息。
一旦确定应该为顶点或顶点组的顶点着色属性数据分配内存空间,那么为该顶点或顶点组请求(并且分配)内存空间。
针对要为顶点或顶点组分配的内存空间的请求可以采取任何合适并期望的形式。在优选实施例中,该请求包括由内存为顶点或顶点组分配内存空间所需的信息。优选地,该请求包括将其标识为将内存空间分配给顶点或顶点组的请求的信息(指示符)、和/或标识该请求的标识符。该请求还优选地指示要分配的内存量。
把对内存空间的请求发送到图形处理流水线的内存分配器(内存分配器单元)。内存分配器可以是测试级之外(并且,例如,图形处理流水线之外)的单元,或者如所希望的,可以是测试级(例如,图块化器)的一部分。内存分配器可以操作以通过任何合适并期望的方式,例如,通过对所讨论的图形处理流水线中的内存空间分配请求来说的正常方式,为顶点或顶点组分配内存空间。因此,内存分配器可以使用,例如任何合适并期望的内存分配处理(算法)。
为顶点的顶点着色属性数据分配的内存空间可以是:任何合适并期望的内存空间。就这一点而言,应该注意的是,该内存空间是主内存中正由图形处理流水线及其操作用于存储数据(相反,例如,用于,例如可以用于在顶点着色级与测试级之间传递数据的FIFO中的顶点着色属性数据的暂时存储)的内存空间。
在优选实施例中,分配给(并且能够被分配给)顶点的内存空间包括:来自供图形处理流水线使用的适当的空闲内存空间(“堆”)池的内存空间。
内存空间池(堆)包括(至少)可以:存储顶点数据的内存地址空间(内存地址)的所分配的部分。其优选地包括连续内存地址的池,即,从最低(底部)内存地址开始并延伸至顶部(最高)内存地址。
因此,在优选实施例中,留出(可以使用)内存空间池(一组内存地址)来存储顶点数据,然后当确定应该分配用于存储顶点或顶点组的顶点着色属性数据的内存空间时,分配用于存储顶点或顶点组的顶点数据而留出的内存空间池的一部分内存(内存地址的子集合)。在优选实施例中,留出所选的特定的,优选地限定量的内存空间(一组内存地址),来存储一组顶点的顶点着色属性数据(以及任何其它数据,如果存在的话,诸如要“共享”同一内存空间池的图元列表)。
就这一点而言,应该注意的是,虽然最初可以留出内存空间池中的一组内存地址,但是应该并仅在确定应该将内存空间(从池中)分配给顶点时分配用于顶点的实际的单独内存地址。这与仅留出实际上要分配给可能需要针对正在生成的渲染输出处理的每个顶点的内存地址形成对照。
可以根据需要,选择留出来存储顶点数据的内存空间池。在优选实施例中,其包括比仅存储应用为渲染输出提供的全部顶点的顶点着色数据所需的内存空间更少的内存空间。例如,内存空间池可以被配置成,能够存储比应用为渲染输出提供的全部顶点更有限的顶点数量的数据。
的确,这是本发明的优点,因为当确定生成渲染输出需要这些顶点时,可以“根据需要”将内存空间分配给顶点,例如,与仅留出充足的内存空间来存储最初可以针对生成渲染输出而限定的全部顶点的布置相比,可以留出(可能显著)更少量的内存空间来存储顶点数据。例如,本申请人已经发现了,针对3D图形场景,实际上针对场景限定的图元的50-90%是不可见的(因此其顶点不需要内存空间)。
在优选实施例中,将以存储正在生成的图形处理输出的(可见顶点的)顶点着色数据所需的预期量的内存为基础的内存量留出来作为内存空间池。留出来的内存量优选地包括:大于内存空间的预期量的内存空间的附加安全界限(阈值)。
可以通过任何合适并期望的方式来确定内存空间的预期量,例如,基于对不同图形处理输出的历史分析(标杆管理)。还可以使用指示在之前生成的图形处理输出中发现的内存需求的信息(例如,通过假设在当前正在生成的图形处理输出(帧)序列中,当前图形处理输出(例如,帧)可能与对之前的图形处理输出(一个或多个帧)的需求相似)。
其它布置当然是可行的。
还可以使用更精细的内存空间池分配布置,诸如,最初在虚拟内存中分配更大的内存空间池,但是这仅是物理内存的部分备用,在该布置中,如果试图写入到不是物理内存的备用的部分虚拟内存池,那么要分配更多的物理内存。
内存空间池(堆)可以是为存储顶点着色属性数据专门留出的内存空间池(堆),但是在具体优选的实施例中,在基于图块的图形处理系统中,是从留出来存储图元列表的内存空间池(堆)中分配用于顶点的顶点着色属性数据的内存空间。换言之,在具体优选的实施例中,在基于图块的图形处理流水线的情况下,留出来存储图元列表的内存空间池(堆)也用于存储顶点着色属性数据(即,“图块化器”堆(内存池)用于图元列表和顶点着色属性数据)(存在为(用于)存储图元列表和顶点着色属性数据留出来的内存空间池(堆))。
图元列表和顶点着色顶点数据共享同一内存池(内存堆),然后可以预先确定将内存池内的相应内存空间分配给图元列表和顶点数据(使用对固定大小的顶点部分和固定大小的图元列表部分的静态分区),或者可以灵活地将内存池内的相应内存空间分配给图元列表和顶点数据(在使用时确定,因为内存池是被填充的)。优选地,图形处理系统被配置成使得能够在使用时对内存空间池进行静态和动态的分区。例如,可以优选地使用针对验证测试的静态分区或者动态分区。
在图元列表和顶点着色顶点数据共享同一内存池(内存堆)的情况下,那么尽管可以在内存空间池中交叉存取这两种类型的数据,即,使得这两种类型的数据存储在从该内存池的一端开始的下一可用空间处(在一个实施例中就是这样做的),但是在优选实施例中,从分配给该池(堆)的内存地址空间的各自相反端来逐步存储图元列表和顶点(顶点着色属性数据)。因此,在具体优选的实施例中,为图元列表分配内存空间,并且从内存空间池(堆)的一端将其存储,并且为顶点分配内存空间并从内存池(堆)的地址空间的另一端将其存储。
在优选实施例中,分配图元列表并将其从内存空间池(堆)的顶部向下存储(即,从内存空间的所分配的框中的最高内存地址开始),并且为顶点分配内存空间并从底部向上存储(即,从内存空间的所分配的总体框中的最低地址开始)。这具有可以使用连续且增加的内存地址来存储顶点的优点。
在具体优选的实施例中,确定何时用完内存空间池(不再有充足的空闲空间来容纳任何进一步的顶点(或者顶点或图元列表)数据)。这可以通过任何适当并期望的方式来确定,例如,根据另外用于作为图形处理流水线的一部分的图形处理系统和数据处理系统中的内存溢出机制。
在图元列表和顶点共享同一内存空间池并且从内存空间池的各自相反端分配并存储图元列表和顶点的情况下,可以轻易地(并且优选地)通过标识图元列表和顶点分配何时在内存空间池中相遇(开始重叠),来确定内存空间池何时用完(内存空间池中何时没有充足的空闲空间用于进一步的数据)。因此,这是这种布置的进一步的优点。
在优选实施例中,当确定已经用完整个内存空间分配池时,那么采取步骤(然后系统操作以)来寻找更多可用于顶点(例如,和图元列表)数据的内存空间。例如,这可以包括为顶点(或者图元列表和顶点)数据请求进一步的内存空间分配池。这可以,例如通过适当地将内存溢出情况发送给图形处理流水线(图形处理器)的驱动器来完成,使得驱动器可以(试图)分配更多的内存空间。
另外或者可替代地,当确定已经用完内存空间分配池时,可以触发图形处理流水线来对迄今为止已经处理了的这些图元和顶点执行光栅化和渲染过程,使得存储在内存分配池中的这些图元和顶点的数据可以被从池中释放,以便在池中腾出空间。
优选地,暂停(停止)对进一步的顶点或顶点组的处理、测试、以及内存空间的分配,同时提供附加的内存空间。然后,一旦已经将充足的空间添加到池中和/或在池中腾出充足的空间,该处理回到对进一步的顶点或顶点组的测试以及对应地为其分配内存空间。
可以根据需要来确定将内存空间池中的内存空间分配给顶点或顶点组。
在优选实施例中,当确定应该为其顶点着色属性数据分配内存空间的顶点是正在考虑的一组顶点中的第一顶点时,那么设置内存空间池的一端(并且优选地,当前的底部分配指针)的内存地址,并将其用作针对这组顶点中的该顶点(针对顶点缓冲器)存储的顶点着色属性数据的基址。
优选地,存储和/或另外处理所分配的基址(base addresss),从而使得当图形处理流水线的其它元素和部件需要时可以检索并使用这些基址(以标识用于顶点着色属性数据的基址)。
这可以通过任何合适并期望的方式完成。例如,可以将基址写入到正在处理的一组顶点的适当的描述符,诸如,当这组顶点与绘图调用相对应时的绘图调用描述符。在这种情况下,相关处理单元(例如,顶点着色器)应该读取更新的绘图调用描述符,并且从该绘图调用描述符抓取基址,而不是使用属性缓冲器。可替代地,可以将基址写入到内存中的属性缓冲器描述符,然后使用该缓冲器进行属性寻址。
在优选实施例中,基址是属性着色环境的性质(例如,图块化器将其设置为图形处理器内部性质),然后使用该性质来进行后续的属性寻址,不需要从内存中读取任何描述符(不需要通过内存)。
一旦确定了这组顶点的顶点着色属性数据的基址,那么在处理这组顶点时,优选地根据需要从该基址在增加的地址(以及渐增的地址)处将内存空间池内的内存分配给顶点。
在具体优选的实施例中,将与已经在内存空间池内被分配了空间的顶点序列中的顶点数量相对应的顶点索引,分配给在用于存储顶点着色属性数据的内存空间池内被分配了空间的顶点(因此是连续索引,该连续索引会是,优选地一个,大于分配给在内存空间池中被分配了内存空间的前述顶点的索引(在内存空间池中被分配了内存空间的第一顶点具有最小索引(在序列中)并且优选地具有索引“0”))。(换言之,会将与“n”相对应的内部顶点ID分配给被分配了内存空间的一组顶点中的第n个顶点(并且,例如,在该组中的第一顶点被分配了内部顶点ID 0的情况下分配内部顶点ID n-1))。出于这个目的,可以通过任何合适并期望的方式来对顶点进行编号(编入索引),但是优选地,使用从“0”开始增加的整数(使得n个顶点覆盖范围[0,n-1])。
此处应该注意的是,当在内存空间池内为该顶点分配空间时指派给顶点的该连续索引是所讨论的顶点的新的“内部”顶点标识符,从而不同于可能已经分配给所讨论的顶点的应用生成(API可见)的实例ID或者顶点ID。
然后,优选地使用顶点的这样指派的内部顶点ID(连续索引)来控制对顶点的数据的实际内存分配(例如,并且用于计算在内存中何处存储所讨论的顶点的顶点着色属性数据)。具体地,顶点的所指派的序列索引可以,并且优选地与内存空间池中的顶点数据的基址(并且优选地,与其的偏移)一起使用,来确定所讨论的顶点的数据应该存储的内存地址(至少在内存空间池包括用于存储顶点数据的一组连续(例如,增加)的内存地址的情况下)。
当进一步处理顶点时,优选地使用顶点的这样指派的内部顶点ID(连续索引)来标识顶点及其在内存空间池中存储的着色属性数据。
其它布置当然是可行的,并且例如,可以在非连续的内存地址中存储顶点(顶点的数据),即使在内存地址确定机制可能变得更加复杂的情况下。
针对存储了顶点着色属性数据的顶点使用内部顶点ID(序列编号),然后,在具体优选的实施例中,在图元列表中使用(编码)该内部顶点ID(顶点的连续索引)以标识当用于形成图元时的顶点。
换言之,在图元列表中对要处理的图元的编码(通常,并且优选地,参照要用于形成图元的顶点来标识图元)优选地(仅)使用已经指派给顶点的新的内部顶点ID(序列编号),来标识要用于图元列表中的每个图元的顶点(而不是,例如使用应用生成(API可见)的实例ID或顶点ID,来标识组成图元列表中的图元的顶点)。
在具体优选的实施例中,首先通过从池中分配足以存储多个顶点的顶点着色属性数据的较大块的内存空间(因此可以认为是“顶点数据包”),然后将内存空间池中的该块(“顶点数据包”)内的空间分配给各个顶点,直到该块(“顶点数据包”)饱和(在此时,如果在内存空间池中仍然存在空间,则分配进一步的块(“顶点数据包”),然后逐步填满顶点,并依此类推,直到内存空间池中没有更多的空间用于完整的“顶点数据包”),来将内存空间池内的内存空间分配给顶点。
(因此,一旦一个顶点数据包饱和了,就分配新的顶点数据包(如果在内存池中仍然存在空间),并依此类推)。
本申请人已经发现,这种布置可以,例如,通过促进使用完整的缓存线路来存取顶点数据,来促进更高效的内存存取。具体地,这可以实现这一事实,即,尽管顶点的位置属性可以被配置成,使得与完整的缓存线路恰好对齐(例如,在64字节的缓存路线和输出4xFP32坐标的4个顶点的情况下),但是其它顶点属性的数据始终无法与缓存线路适当地对齐。
来自内存池的每个框(顶点数据包)应该,并且优选地是相同大小,并且优选地,被配置成始终是整数的缓存线路(例如,整数的64字节的缓存线路),无论顶点属性的大小。这意味着,每个新框(顶点数据包)的开始的缓存线路都是对齐的。
优选地,适当地设置框(数据包)可以存储的顶点数量以便确保顶点数据包始终是整数的缓存线路。因此,优选地将框(数据包)可以存储的顶点数量设置为存储顶点数据的缓存的缓存线路中的字节数量(所以在顶点数据的缓存支持64字节的缓存线路的情况下,优选地将数据包(n)中的顶点数量设置为64)。顶点的数量可能更小,但是可以要求在框(顶点数据包)中进行填充以使下一框(数据包)中的位置与缓存线路对齐(即,使得存储顶点位置的下一数据包的开始与缓存线路对齐)。
在这种布置中,将为顶点模n(例如,64字节的缓存线路缓存的内部顶点ID模64)指派的等于0的内部顶点ID(序列索引)用作指示新的顶点框(数据包)需要进行分配的测试(至少在增加的地址中存在连续的内存空间分配的情况下)。
尽管在框(数据包)中可以一个接一个地依次存储每个顶点的全部属性(即,位置和变量),但是在具体优选的实施例中,在内存池的框(顶点数据包)内存储顶点,从而将数据包的多个顶点的位置(位置属性)一个接一个地一起存储,并且单独地将每个顶点的非位置属性(变量)再次一个接一个地一起存储。
最优选地,每个框(顶点数据包)包括(并存储)从偏移0(针对数据包中的n个顶点都有一个)开始的n个位置,然后从位置q开始的n组非位置属性(变量)乘以该框(数据包)中的n字节(即,在已经存储了全部n个顶点的全部位置数据之后立即从一个位置开始)(其中,n是框(数据包)会包含的顶点数量,并且q是顶点的位置属性会占用的字节数量(因此,在顶点具有4x FP32个位置坐标的情况下是16))。
因此,顶点的位置数据和非位置(变量)数据优选地不是(不同于)在内存空间池框(顶点数据包)中交叉存取的。
当使用这种布置时,为了存取顶点数据包,优选地使用以下寻址方案。
Address=base address+floor(internal vertex ID/n)*packet_size+(internal vertex ID%n)*attribute_stride+Attribute_offset.
在这种布置中,驱动器可以,并且优选地,通过新的“顶点数据包属性(vertexpacket attribute)”描述符来静态配置packet_size/attribute_stride/attribute_offset字段。内部顶点ID(internal vertex ID)是分配给所讨论的顶点的序列索引。n是存储在顶点数据包中的顶点数量(并且优选地,与可以存储在缓存线路的字节数量相对应),并且基址(base address)是针对整个内存池而言的存储顶点数据的基址(如上文所讨论的)。
一旦确定了顶点会用于产生渲染输出并且已经为该顶点的顶点着色属性数据分配了内存空间,那么应该,并且优选地将顶点的顶点着色属性数据存储在为所讨论的顶点的数据分配的内存空间中。
可以将顶点的任何合适并期望的顶点着色属性数据存储在所分配的内存空间中。
在具体优选的实施例中,将由第一顶点着色操作生成的顶点着色属性数据的至少一些,并且优选地全部存储在分配给顶点的内存空间中。因此,在具体优选的实施例中,至少将顶点的一个或多个顶点着色位置属性存储在分配给顶点的内存空间中。
在具体优选的实施例中,将顶点的一个或多个其它非位置属性(变量)的数据存储在所分配的内存空间中。更优选地,针对进行过顶点着色的顶点的属性中的多个,并且优选地每个来存储顶点着色属性数据。
如上文所讨论的,第一顶点着色操作可以生成顶点(需要进行顶点着色)的全部属性的顶点着色属性数据。在那种情况下,顶点的全部顶点着色属性数据都是作为第一顶点着色操作的一部分生成的,因此,一旦被分配了内存空间,就可以将其存储在所分配的内存空间中。
因此,在这种情况下,优选地将顶点着色位置(多个)属性数据从测试级(例如,图块化器)(立即)传递到内存池中为所讨论的顶点分配的内存空间。
如上文所讨论的,在具体优选的实施例中,第一顶点着色操作可操作以对顶点的一些而非全部的属性进行顶点着色(例如,并且优选地,仅对顶点的(多个)位置属性进行顶点着色)。因此,在这种情况下,如果具有进一步的顶点属性,诸如,变量,那么在第一顶点着色操作和测试操作之后,依然会对这些进一步的顶点属性进行顶点着色。
在具体优选的实施例中,响应于并且有条件地根据测试级的结果,来对应地执行这些进一步属性的顶点着色。然后,这对应地意味着应该,并且优选地(仅)针对“通过”测试级(例如,并且优选地,由测试级确定(可能)有助于正在生成的渲染输出)的这些顶点执行对,例如,并且优选地,测试级不需要的顶点属性的进一步的顶点着色操作。
因此,在具体优选的实施例中,测试级可操作以不仅确定是否应该分配用于存储顶点或顶点组的至少一个顶点属性的顶点着色属性数据的内存空间,而且确定是否应该针对顶点或顶点组执行生成至少一个(其它)顶点属性的顶点着色属性数据的第二顶点着色操作(并且根据该确定,做出请求并针对顶点或顶点组执行第二顶点着色操作)。
因此,在具体优选的实施例中,本发明的方法包括(并且图形处理流水线对应地可操作以(被配置成)):
针对要由图形处理流水线处理的一组顶点,进行如下操作:
图形处理流水线的顶点着色级对这一组顶点中的一个或多个顶点执行第一顶点着色操作,以生成针对所述一组顶点中的一个或多个顶点的至少一个并非全部的顶点属性生成顶点着色属性数据;
针对已经经受第一顶点着色操作的一个或多个顶点中的相应顶点或顶点组,图形处理流水线的测试级确定是否应该对该顶点或顶点组执行第二顶点着色操作,一生成所述一组顶点中的一个或多个顶点的多个顶点属性中的至少一个其它顶点属性的顶点着色属性数据,其中,该确定的操作包括至少部分地使用由第一顶点着色操作生成的顶点着色属性数据中的一些或全部;
响应于确定了应该对顶点或顶点组执行第二顶点着色操作,测试级发送对要对该顶点或顶点组执行的第二顶点着色操作的请求;以及
响应于来自测试级的请求,图形处理流水线的顶点着色级对已经发送了该请求的顶点或顶点组执行第二顶点着色操作,以生成所述一组顶点中的一个或多个顶点的多个顶点属性中的至少一个其它顶点属性的顶点着色属性数据。
优选地,然后将由第二顶点着色操作生成的顶点着色属性数据的至少一些,优选地全部,存储在所讨论的一个或多个顶点所分配的内存空间中。
在这种布置中,不同于常规的顶点着色布置,将顶点着色操作划分成两部分,其中,为未在正在有条件地执行的第一顶点着色操作中处理的顶点属性生成顶点着色数据的第二顶点着色操作取决于对测试级(操作)的确定。通过这种方式,仅针对可以确定实际上“未使用的”顶点执行一组减少了的顶点着色操作。
在这些布置中,测试级优选地执行相同的一个或多个测试以确定是否触发第二顶点着色操作,用于确定是否为顶点或顶点组的顶点着色属性数据分配内存空间。因此,在优选实施例中,测试级执行一次整体确定(测试)操作,并且使用该操作的结果,来确定是否为顶点或顶点组的顶点着色属性数据分配内存空间,以及是否触发第二顶点着色操作以对顶点或顶点组的进一步属性进行顶点着色。
应该,并且优选地,在测试级确定所讨论的顶点或顶点组应该经受第二顶点着色操作时,发送对要执行的第二顶点着色操作的请求。
在优选实施例中,在确定给定顶点或顶点组应该经受第二顶点着色操作时,并且在确定已经经受第一顶点着色操作的组中的另一个(并且优选地,下一个)顶点(或顶点组)是否应该经受第二顶点着色操作之前,发送请求。
对要执行的第二顶点着色操作的请求可以采取任何合适并期望的形式。在优选实施例中,该请求包括图形处理流水线能够执行第二顶点着色操作所需的信息。优选地,该请求包括:将其标识为触发第二顶点着色操作的请求的信息(指示符)、和/或标识该请求的标识符。
优选地,该请求还指示作业(任务)标识符、顶点标识符、实例标识符、和内存标识符中的一个或多个,并且优选地,全部。
优选地,作业ID标识与所讨论的顶点或顶点组相关的图形处理作业(任务),例如,并且优选地,绘图调用,并且优选地(优选地,唯一地)标识要运行(要执行)的着色器程序、和/或属性的配置和/或进程堆栈应用等、和/或运行(执行)着色器程序所需的其它信息。优选地,该信息对于整个作业(任务)(例如,绘图调用)来说是静态的。
顶点ID和实例ID信息应该是,并且优选地是,指示所讨论的作业(任务)内的顶点(或多个顶点)的应用指派的(API可见)顶点ID和实例ID。
优选地,内存ID信息能够(单独使用内存ID,或者使用其与其它信息的组合)确定内存中应该存储输出(顶点着色属性数据)的位置。在优选实施例中,出于这个目的,使用并发送新指派的内部顶点指示符(序列索引)。
如上文所讨论的,优选地,第二顶点着色操作使用作为请求的一部分的(序列索引)内部顶点ID以及packet_size/attribute_stride/attribute_offset和基址(baseaddress)来确定将其顶点着色输出写出到何处。可以将packet_size/attribute_stride/attribute_offset的值和基址以任何合适并期望的方式,诸如,并且优选地,以上文讨论的其中一种方式提供给第二顶点着色操作。
因此,在优选实施例中,对顶点着色操作的请求(以及提供给正在执行第二顶点着色操作的着色器核心的信息)包括API可见实例ID和顶点ID值(以用于读取应用提供的值)、和内部序列索引顶点ID(以用于确定将顶点着色操作的输出存储在何处供以后用)。
测试级(例如,图块化器)可以将触发第二顶点着色操作的请求发送到图形处理流水线中任何期望并合适的级,以便触发第二顶点着色操作。
例如,可以直接将请求发送到被配置成执行顶点着色操作的着色器核心。然而,在优选实施例中,将请求发送到图形处理流水线中被配置成管理(控制)图形处理流水线的一个或多个处理的级。优选地,将请求发送到图形处理流水线中接收相应的处理任务(作业)和/或将其分布到图形处理流水线的处理单元(功能单元)的级。
例如,可以(并且在一个实施例中)将请求发送到图形处理流水线中的作业(任务)管理级(作业管理器),然后图形处理流水线的管理器级可以,并且优选地例如,并且优选地通过将顶点着色操作发行到可用的着色器处理(执行)核心来针对所讨论的顶点或顶点组触发第二顶点着色操作。
可以通过任何合适并期望的方式,来触发并完成与请求相关的顶点或顶点组的第二顶点着色操作的执行。
例如,当通过执行在一个优选实施例中与请求有关的顶点的执行线程来执行第二顶点着色操作时,如果针对顶点(或顶点组)发送对第二顶点着色操作的请求,则仅生成并发行第二顶点着色操作的执行线程。
然而,在不同实施例中,在确定顶点是否应该经受第二顶点着色操作之前,针对组中的全部顶点的第二顶点着色操作创建执行线程。如果从测试级发送适当的请求,那么每个线程都优选地是“完全”执行。
第二顶点着色操作操作以对已经确定了应该经受第二顶点着色操作的顶点或顶点组的至少一个其它属性进行“顶点着色”。在优选实施例中,第二顶点着色操作对所讨论的顶点的全部剩余属性进行顶点着色。其还可以对由第一顶点着色操作处理过的属性进行顶点着色,但是这不是优选的(因为已经通过第一顶点着色操作得到了这些属性的顶点着色版本)。
第二顶点着色操作优选地操作以对顶点的变量(即,非位置属性)进行顶点着色,诸如,颜色、纹理坐标、法线等中的一个或多个,并且优选地,全部。
可以根据需要,例如,基于属性的相对处理需求,来选择顶点属性在第一顶点着色操作与第二顶点着色操作之间的分区。
优选地,借助于对顶点执行适当的顶点着色器(顶点着色程序)的顶点着色器核心来实施第一顶点着色操作和第二顶点着色操作。优选地,将要处理的每个顶点表示为执行线程,线程执行适当的顶点着色程序以实施顶点着色操作。优选地,每个要处理的顶点都有一个执行线程。
可以以任何期望并合适的方式来配置顶点执行线程针对第一顶点着色操作和第二顶点着色操作执行的顶点着色器(顶点着色程序)。优选地,它们包括针对所讨论的图形处理输出(例如,绘图调用)限定的顶点着色器的有限(例如,轻量级)版本。例如,针对每个顶点着色操作,顶点着色程序优选地包括针对所讨论的图形处理输出(例如,绘图调用)限定的顶点着色器的部分而非全部。
可以通过任何合适并期望的方式来实现第一顶点着色操作的顶点着色器(顶点着色程序)的配置。在优选实施例中,由需要进行图形处理(即,由所讨论的图形处理输出限定的)的应用提供的顶点着色器(顶点着色程序)被修改为,移除(删除)未由第一顶点着色操作处理的属性,然后对其进行重新编译。
对应地,可以通过任何合适并期望的方式来实现第二顶点着色操作的顶点着色器(顶点着色程序)的配置。在优选实施例中,由需要进行图形处理(即,由所讨论的图形处理输出限定的)的应用提供的顶点着色器(顶点着色程序)被修改为,移除(删除)未由第二顶点着色操作处理的属性,然后对其进行重新编译。
可以在图形处理流水线的单独的顶点着色执行核心中实施第一顶点着色操作和第二顶点着色操作(顶点着色级)。然而,在优选实施例中,它们被执行为同一顶点着色执行核心中的各自不同的过程。
用于得到第一顶点着色操作和第二顶点着色操作的顶点着色器(顶点着色程序)的其它布置当然是可行的。
在本发明的具体优选的实施例中,图形处理流水线被配置成对已经经受第二顶点着色操作的顶点和/或顶点组保持追踪。
这优选地通过对已经被分配了内存空间的那些顶点保持追踪的相应方式或相同方式来完成,如上文所讨论的。因此,在优选实施例中,维护并存储指示已经经受第二顶点着色操作的顶点和/或顶点组的信息,然后优选地将其使用在测试级中以确定已经确定应该(可能)经受第二顶点着色操作的顶点(或顶点组)是否已经经受第二顶点着色操作(从而是否应该经受第二顶点着色操作)。
优选地,使用单组(同组)信息来追踪已经被分配了内存空间的那些顶点以及已经经受第二顶点着色操作的那些顶点。
一旦生成要处理的顶点的完整的顶点着色属性数据,并将其存储在所分配的内存空间中(之后是否是有条件地触发的第二顶点着色操作),那么图形处理流水线的剩余级可以,并且优选地,使用顶点的完整的顶点着色属性数据(即,来自第一顶点着色操作,或第一顶点着色操作和第二顶点着色操作的顶点着色数据)以及,例如,由图块化器生成的图元列表来生成图形处理流水线的期望输出(渲染目标)。
除此之外,该处理可以包括图元(例如,三角形)设立、光栅化和渲染。可以以任何期望并合适的方式来执行这些处理,例如,取决于所讨论的图形处理流水线的本质。然后可以将图形处理操作的最终输出,例如,写出到主内存中的,例如,帧缓冲器,从该帧缓冲器可以将最终输出,例如,提供给显示器以用于显示,或者处理该最终输出。
除此之外,该处理会从存储其的所分配的内存空间(内存地址)中读取相关的顶点着色顶点数据。
如从上文所了解的,可以根据需要针对单个顶点或者顶点组执行以本发明的方式进行的操作。这可以涉及各种处理(例如,测试)操作、内存空间分配操作、顶点着色操作等。
在具体优选的实施例中,针对内存空间分配发送的(优选地,每个)请求与一组多个顶点,例如并且优选地,一组四个顶点有关(并且请求相应的内存空间分配)。优选地,这是不管是否针对单个顶点或顶点组执行实际测试和确定完成的。这具有减少需要在系统中发送的请求(以及,例如,追踪这些请求所需的资源)数量的优点,并且还有助于相关数据的更高效的缓存使用。
因此,在例如测试单个顶点的情况下,可以针对该顶点以及要分配内存空间的一个或多个其它顶点,例如,三个其它顶点(其中,请求与一组四个顶点有关)发送请求,或者系统可以等待,直到例如,已经确定四个顶点需要在针对要分配内存空间的这些,例如,四个顶点发送相应请求之前分配内存空间。
在前一种情况下,一旦确定顶点需要分配内存空间,被请求指示为要分配内存空间的其它顶点(除了所讨论的顶点之外)优选地是:可以与所讨论的顶点,诸如并且优选地,顶点索引序列中的下一顶点有关和/或相关联的顶点。
同样地,在具体优选的实施例中,针对顶点着色操作发送的(优选地,每个)请求与一组多个顶点,例如,并且优选地,一组四个顶点有关(并且请求相应的顶点着色操作)。优选地,这是不管是否针对单个顶点或顶点组执行实际测试和确定完成的。这再次具有减少需要在系统中发送的请求(以及,例如,追踪这些请求所需的资源)数量的优点,并且还有助于相关数据的更高效的缓存使用。
因此,在例如测试单个顶点的情况下,可以针对该顶点以及要经历所讨论的顶点着色操作的一个或多个其它顶点,例如,三个其它顶点(其中,请求与一组四个顶点有关)发送请求,或者系统可以等待,直到例如,已经确定四个顶点需要在针对要经受顶点着色操作的这些,例如,四个顶点发送相应请求之前经受顶点着色操作。
在前一种情况下,一旦确定顶点需要经历顶点着色操作,被请求指示为要经历该操作的其它顶点(除了所讨论的顶点之外)优选地是:可以与所讨论的顶点,诸如并且优选地,顶点索引序列中的下一顶点有关和/或相关联的顶点。
例如,本申请人之前已经在英国专利第2488668号中提出了一种布置,在该布置中,针对顶点属性,其值不受顶点着色的影响,不执行顶点着色,并且后续的图形处理级,诸如,渲染器(片段着色器)读取原始输入的属性值。
为了与本发明一起促进这类操作,在优选实施例中,提供信息(例如,“重映射”表)以使得被指派到根据本发明的顶点的内部顶点ID(序列索引)能够被映射回顶点的相应的API指派顶点ID和实例ID。
这可以通过任何合适并期望的方式来完成。
例如,可以将顶点的API可见实例ID和顶点ID存储(例如,写入到顶点数据包(分配给顶点的内存空间))为顶点的(附加)属性。然后可以使用新指派的内部顶点ID(序列索引),来从所讨论的顶点的所分配的内存空间中读取API可见实例ID和顶点ID,然后使用所读取的实例ID和顶点ID来检索输入的(多个)属性值(按照GB-B-2488668所述的方式)。
例如,在图形处理流水线通过仅存储每组四个顶点的一个实例ID和顶点ID,来对全部具有相同的实例ID和按顺序递增的顶点ID的一组四个顶点进行操作的情况下,这种编码可能会更高效(因为可以根据单组ID值来确定组中的每个顶点的实例ID和顶点ID)。
也可行的是或代替地,例如,通过在合适的描述符中编码重映射模式来使片段前端感知到重映射条目,然后使前端预加载这些值,并且将其存储在图元表以供图形处理器使用。然后这有助于相关的图形处理流水线级(例如,变量着色器)直接存取顶点的实例ID、顶点ID或内部顶点ID中的任何一个,并且能够选择这些中的任何一个以用于从内存中抓取属性值。
其它布置当然是可行的。
可以针对下一渲染输出(例如,要显示的下一帧)重复本发明的处理,并依此类推。例如,优选地,针对要显示的帧序列,并且优选地,针对要显示的帧序列中的每一帧来实施本发明。
上文描述了以本发明的方式参与操作的图形处理流水线的元素。如本领域技术人员应当清楚,该图形处理流水线可以另外包括,并且优选地包括:图形处理流水线通常包括的任一个或多个并且优选为全部处理级。因此,例如,该图形处理流水线优选地还包括图元设立级、光栅化器以及渲染器。在优选实施例中,该渲染器采用可编程片段着色器的形式,或者包括可编程片段着色器。
图形处理流水线还可以包含:该图形处理流水线可以包含的任何其它合适和希望的处理级,如深度(或深度和模板)测试器、混合器等。
在优选实施例中,该图形处理流水线包括存储在此描述的数据和/或存储用于执行在此描述的处理的软件的一个或多个存储器和/或存储器装置,和/或与这一个或多个存储器和/或存储器装置通信。该图形处理流水线还可以与主机微处理器、和/或与用于基于图形处理流水线的输出来显示图像的显示器通信。
要生成的渲染输出可以包括:要通过图形处理流水线生成的任何渲染输出。因此,这可以包括,例如,要在基于图块的图形处理系统中生成的图块、和/或输出片段数据的帧。本发明可以用于全部形式的输出,图形处理流水线可以使用该输出来生成,诸如,用于显示的帧、渲染至纹理输出等。在优选实施例中,渲染输出是输出帧。
可以通过任何种类的图形处理系统来实施本发明。然而,在优选实施例中,图形处理流水线和系统是基于图块(图块化)的图形处理流水线和系统。在这种情况下,流水线优选地还包括:图块缓冲器,该图块缓冲器用于存储采样值,和/或操作以将图块缓冲器中的数据(例如,在完成了图块缓冲器中的数据时)写出到外部(主)内存(例如,写出到帧缓冲器)的写出单元。
在具体优选的实施例中,本发明的各种功能在生成并输出所渲染片段数据(其例如被写入至用于显示装置的帧缓冲器)的单一图形处理平台上执行。
本发明可以在任何合适的系统中实现,如基于适当配置的微处理器的系统。在一些实施例中,本发明在计算机和/或基于微处理器的系统中实现。
本发明优选地在便携式装置中实现,诸如并优选地,移动电话或者平板计算机。
本发明的各种功能可以按任何希望和合适方式来执行。例如,本发明的功能可以如所希望地按硬件或软件来实现。由此,例如,本发明的各种功能性部件、级以及“装置”可以包括:合适的一个处理器或多个处理器、一个控制器或多个控制器、功能性单元、电路、处理逻辑、微处理器布置等,其可操作以执行各种功能等,如可以被编程成按希望方式操作的适当专用的硬件部件(处理电路)和/或可编程硬件部件(处理电路)。
在此,还应注意到,如本领域技术人员应当清楚,本发明的各种功能等可以在指定处理器上复制和/或并行执行。同等地,若希望的话,各种处理级可以共用处理电路等。
本领域技术人员还应清楚,本发明的全部描述实施例在合适时候,可以包括在此描述的优选和可选特征中的任一个或更多个或全部。
根据本发明的方法可以至少部分地利用软件(例如,计算机程序)来实现。由此,可以看到,当从另一些实施例看时,本发明提供:计算机软件,当安装在数据处理装置上时该计算机软件具体适于执行在此所描述的方法;计算机程序元件,该计算机程序元件包括当在数据处理装置上运行该程序元件时用于执行本文所述方法的计算机软件代码部分;以及计算机程序,该计算机程序包括当在数据处理系统上运行该程序时适于执行本文所述的方法的全部步骤的代码。该数据处理系统可以是微处理器、可编程FPGA(现场可编程门阵列)等。
本发明还扩展至包括这种软件的计算机软件载体,其在用于操作包括数据处理装置的图形处理器、渲染器或其它系统时,使与数据处理装置、处理器、渲染器或系统结合地执行本发明的方法的步骤。这种计算机软件载体可以是物理存储介质,如ROM芯片、CD ROM、RAM、闪速存储器,或磁盘,或者可以是信号,如导线传输电子信号、诸如卫星这样的光学信号或无线电信号等。
还应清楚,不是本发明的方法的所有步骤都需要通过计算机软件来执行,并由此,根据另一宽泛的实施例,本发明提供了用于执行本文所述的方法的步骤中的至少一个步骤的计算机软件和安装在计算机软件载体上的这种软件。
因此,本发明的装置可以适当地具体实施为,供与计算机系统一起使用的计算机程序产品。这种实现可以包括:在诸如计算机可读介质(例如,软盘、CD ROM、ROM、RAM、闪速存储器,或硬盘)这样的有形非暂时介质上固定的一系列计算机可读指令。其还可以包括:可通过有形介质(包括但不限于光学或模拟通信线路),或者利用无线技术(包括但不限于微波、红外线或其它传输技术)无形地,经由调制解调器或其它接口装置传送至计算机系统的一系列计算机可读指令。该系列计算机可读指令具体实施先前在此描述的全部或部分功能。
本领域技术人员应当清楚,这种计算机可读指令可以采用许多编程语言来编写,以供随许多计算机架构或操作系统一起使用。而且,这种指令可以利用当前或将来的任何存储器技术来存储,包括但不限于半导体、磁性、或光学,或者利用当前或将来的任何通信技术来传送,包括但不限于光学、红外线或微波。可设想的是,这种计算机程序产品可以部署为,具有附随打印或电子文档(例如,收缩包装软件)的可去除介质,利用计算机系统预先加载(例如,预先加载在系统ROM或固定盘上),或者通过网络(例如,因特网或万维网)从服务器或电子公告板部署。
附图说明
下面,仅通过示例的方式并且参照附图,对本发明的优选实施例进行描述,其中:
图1示意性地示出了根据本发明的实施例的图形处理流水线;
图2示意性地例示了根据本发明的实施例的图形处理流水线的各个级之间的数据流;
图3示意性地例示了根据本发明的实施例的图形处理流水线的图块化级的操作;
图4是示出了本发明的实施例中的将内存空间分配给顶点的流程图;以及
图5、图6、图7、图8、图9和图10示意性地示出了本发明的实施例中的顶点数据在内存空间池中的构成。
相同标号在合适情况下被用于图中的相同组件。
具体实施方式
图1示意性地例示了根据本发明的实施例的基于图块的图形处理流水线10。
如图1所示,图形处理流水线10包括位置着色级11、图块化器12、仅变量顶点着色级13和片段着色级14。
位置着色级11是图形处理流水线10中顶点着色级,其被配置成执行第一顶点着色操作,以仅对正在处理的顶点的位置属性进行顶点着色。图块化器12在每个顶点(或每个顶点组)的基础上,有条件地触发该第一顶点着色操作作为该操作的一部分。因此,在该实施例中,位置着色操作11与图形处理流水线10的图块化操作12并行实施。
位置着色级11可操作以接收来自需要图形处理的应用的顶点(即,与顶点的原始属性相关联的数据值)。然后位置着色级11会(例如,借助于一些变换函数)对这些顶点的位置属性执行顶点着色计算,以生成部分顶点着色数据(即,仅位置被“着色”(例如,变换)的部分着色顶点)。
然后将位置着色数据经由FIFO 314反馈给图形处理流水线10的图块化器12。
图块化器12使用该输入以及要处理的图元列表(这是根据组成每个图元的顶点的相应索引来指示的),来标识应该针对渲染输出被划分成的每个图块处理哪些图元,并且为每个图块(和/或(多组)一组图块)准备相应的图元列表(图块列表),这指示了应该针对该图块处理的图元。图块化器12可以使用对该处理来说任何期望并合适的技术,来将图元分类为图块。(此处将了解,仅图块化器生成(多个)图元列表所需的顶点着色数据是顶点着色位置数据)。
作为其操作的一部分,图块化器12将标识需要进一步处理以生成渲染输出的图元。这可以包括,例如,对图元执行视锥(view frustum)和后向剔除测试(back-faceculling test)。
在本实施例中,图块化器还操作以确定:应该为哪些顶点在已经为存储顶点着色属性数据留出空间的内存空间池15中,分配用于存储其顶点着色属性数据的内存空间。图块化器通过假设应该在内存空间池中为要包括在图元列表中的每个顶点(即,已经确定属于可见图元的每个顶点)的顶点着色属性数据分配内存空间,来做到这点。
作为该内存分配确定的一部分,图块化器还确定给定顶点是否已经在内存空间池中为其顶点着色属性分配了内存空间(并且如果确定尚未为顶点分配了内存空间,则在内存空间池15中将新的内存空间分配给该顶点)。
下面将会更详细地讨论内存空间分配操作。
在本实施例中,内存空间池15是由图形处理流水线用于其数据存储的主内存中一组连续的内存地址(内存空间)。其它布置当然是可行的。
在图块化器12已经确定应该在内存空间池15中为顶点(或顶点组)分配内存空间之后,触发图形处理流水线在内存空间池15中为该顶点或顶点组分配内存空间。
在本实施例中,图块化器还操作以确定哪些顶点应该经受第二顶点着色操作。图块化器12通过再次假设,要包括在图元列表中的每个顶点(即,已经确定属于可见图元的每个顶点)都应该经受第二顶点着色操作来做到这点。
在图块化器12确定顶点(或顶点组)应该经受第二顶点着色操作之后,触发仅变量顶点着色级13对所讨论的顶点(或顶点组)的剩余变量数据(属性)执行顶点着色计算(第二顶点着色操作)。
在本实施例中,即,当确定顶点(或顶点组)应该经受第二顶点着色操作时,变量着色级13被配置成,根据需要对顶点或顶点组执行顶点着色计算。下面将对此进行更详细的讨论。
要了解,在仅变量顶点着色级13中已经经受第二顶点着色操作的任何顶点都具有一组完整的顶点着色属性。然后可以使用该数据以及图块图元列表(由图块化器12生成的)来生成图形处理流水线的期望输出,诸如,用于显示的帧。
因此,顶点着色位置和变量数据(和图元列表)被存储在内存空间池15中所分配的内存空间中,并且图形处理流水线10的片段着色器级14从其读取顶点着色位置和变量数据(和图元列表)以用于后续处理。
片段着色器级14执行恰当的片段前端渲染(片段着色)以及片段后端处理操作。
前端操作包括图元(三角形)设立和图元的光栅化。
光栅化器会接收要进行光栅化的图元,针对采样点位置测试这些图元,并且对应地生成表示图元的要渲染的图形片段。根据需要,由光栅化器生成的每个片段可以表示(与其关联)单个采样点或者多个采样点。在优选实施例中,每个片段都表示一组多个,优选地四个(2x 2)采样点。
然后渲染器处理由光栅化器生成的片段,以针对片段表示的(覆盖)采样点生成渲染片段数据(诸如,红、绿以及蓝颜色值和“Alpha”(透明度)值),如本领域已知的。这些渲染处理可以包括,例如,片段着色、混合、纹理映射等。在本实施例中,如图1所示,渲染器采用可编程片段着色器的形式。
然后将渲染片段数据(采样位置数据)写入到图块缓冲器,随后作为像素数据写出到,例如,用于显示的帧缓冲器(未示出)(这可以包括后端片段操作,诸如,下采样,以确定要存储在帧缓冲器中的最后的像素颜色)。
要了解,当第一顶点着色级和第二顶点着色级(相应的附图标记为11和13)作为图1的图形处理流水线的单独级示出时,在优选实施例中,第一顶点着色操作和第二顶点着色操作被执行为同一顶点着色执行核心中的各自不同的过程。
下面,将参照图2对这种布置的实施例进行更详细的描述。
图2示意性地例示了根据本发明的实施例的图形处理流水线20的各个级之间的数据流,其中,由图块化器22控制位置着色操作和变量着色操作作为图块化器作业(任务)的一部分。
图2示出了图形处理流水线20的以下处理级:位置着色级21、图块化器22、仅变量顶点着色级23和片段(前端和)着色级24。图形处理流水线20还能存取用于存储要由图形处理流水线20的各个处理级处理或生成的数据的合适内存。具体地,为原始位置数据(在内存框25中)、原始变量数据(在框26中)、顶点着色(变换)位置数据(在框27中)、顶点着色(变换)变量数据(在框28中)、索引数据(在框29中)和图元列表数据(在框210中)分配内存。图块化器22被配置成,从内存框29(尽管可以使用其它来源)中,读取限定出要由图形处理流水线处理的一组顶点的索引列表。图块化器22将确定是否需要针对顶点的位置属性进行顶点着色。这通过确定顶点的已经变换后的位置数据是否已经存储在内存中,来完成。如果变换后的位置数据尚未存储在顶点(或顶点组)的内存中,则认为这是需要针对该顶点(或顶点组)进行顶点着色的指示。
如果需要进行顶点着色,则图块化器22将触发对顶点的位置属性的顶点着色。这通过图块化器22发送对位置着色级21的顶点的位置着色请求(这在图形处理流水线20的顶点着色核心(未示出)中实现)来完成。因此,若图块化操作期间需要的话,则图块化器22可操作以触发对顶点的位置属性的顶点着色。
响应于对顶点的位置着色请求,位置着色级21将从内存25中读入顶点的原始位置属性数据。然后位置着色级21会对顶点的位置属性执行顶点着色计算(例如,借助于一些变换功能),以针对顶点的位置属性生成顶点着色数据。然后将变换后的位置数据发送到可以进一步使用该位置数据的图块化器22。
图块化器22使用变换后的位置数据和索引列表,来标识针对渲染输出被划分成的每个图块应该处理哪些图元,并且为每个图块(和/或(多组)一组图块)准备(并将其存储在内存210中)相应的图元列表(图块列表),这指示了针对该图块应该处理的图元。如上文参照图1所提到的,图块化器22可以使用对该处理来说任何期望并合适的技术来将图元分类为图块。(此处将了解,图块化器22生成(多个)图元列表所需的仅顶点着色数据是顶点着色位置数据)。
作为其操作的一部分,图块化器22还将标识应该进一步处理以生成渲染输出的图元。这可以包括,例如,对图元执行可视性测试,诸如,视锥和后向剔除测试。然后当(例如,至少部分地)可见图元被包括在内存210的图元列表中时,剔除不可见图元(及其相应的顶点)。
如上文所讨论的,在本实施例中,图块化器22还操作,以确定在内存空间池15中应该为哪些顶点分配用于存储其顶点着色属性数据的内存空间。因此,如图2所示,着色位置27和着色变量28被存储在内存空间池15(如图2示意性地示出的,也存储图元列表210)中的内存中。
通过假设属于要包括在图元列表中的图元的每个顶点(即,已经确定属于(可能)可见图元的每个顶点)都应该在内存空间池15中被分配了内存空间,图块化器确定在内存空间池15中应该为哪些顶点的顶点着色属性数据分配内存空间。
如图2所示,此时,图块化器将顶点着色位置属性数据27存储在内存空间池15中所分配的内存空间中(针对确定可能可见的那些顶点,并且应该在内存空间池15中为其分配内存空间)。
如上文所讨论的,在本实施例中,图块化器22还操作,以确定哪些顶点应该经受第二变量着色、顶点着色操作23。图块化器22通过假设属于包括在图元列表中的图元的每个顶点(即,已经确定属于(可能)可见图元的每个顶点)应该经受第二变量着色、顶点着色操作来再次做到这点。
当图块化器22确定顶点(或顶点组)应该经受第二变量着色、顶点着色操作23时,图块化器22触发仅变量顶点着色级23对顶点(或顶点组)的剩余变量数据(属性)执行顶点着色操作。
在本实施例中,即,当确定(顶点或顶点组所属的)图元被包括在图元列表中时,图块化器22可操作以触发仅变量顶点着色级23根据需要执行其顶点着色计算。
这通过如下来完成:图块化器22在确定(顶点或顶点组所属的)图元被包括在图元列表中时,并且具体地,在图块化器22继续处理另一图元(以确定另外的图元是否被包括在图元列表中)之前,发送对顶点(或顶点组)的变量着色请求。
响应于来自图块化器22的对顶点(或顶点组)的变量着色请求,变量着色级23从内存26中读取顶点(或顶点组)的原始变量属性数据。然后变量着色级23对顶点(或顶点组)的变量属性执行顶点着色计算,以生成顶点(或顶点组)的变量属性的顶点着色数据。然后将着色且变换后的变量数据存储在内存28中(在内存空间池15中所分配的空间),其随后可以供图形处理流水线20使用。
针对认为落在所讨论的渲染输出内的每个图元重复该处理。
在变量着色级23为应该经受第二顶点着色操作的全部顶点的变量属性生成顶点着色数据之后,片段着色级24中的着色器核心读取这些顶点的顶点着色数据(变换后的位置和变换后的变量数据)。
在该级中,着色器核心使用变换后的位置和变量数据来根据图元列表中的一列图元渲染帧缓冲器。片段着色级24分别针对包括在图元列表中的全部顶点从内存框27和28中读取变换后的位置和变量。
然后针对下一渲染输出(例如,绘图调用)重复该处理,依此类推。
如上文所讨论的,在本实施例中,图块化器12可操作以响应于确定图元在正在生成的渲染输出中可能可见,来在内存空间池15中分配用于存储图元中的顶点的顶点着色属性数据的内存空间,并且针对图元中的顶点触发第二变量顶点着色。
图4例示了图块化器的操作。
具体地,如图4所示,图块化器将接受新图元(步骤40)并且(在该情况下,通过确定图元是否应该位于图元列表中)确定该图元是否是(可能)可见的(步骤41)。
如果图块化器确定该图元是不可见的,那么,如图4所示,该处理移到下一图元。
在另一方面,如果在步骤41中图块化器确定图元是(可能)可见的,那么其针对该图元中的每个顶点确定在内存空间池15中该顶点是否已经被分配了内存空间(步骤42)。如果图块化器确定图元中的全部顶点都已经被分配了内存空间,那么该处理转到下一图元。
在另一方面,针对在内存空间池15中尚未被分配了内存空间的图元中的任何顶点,然后在内存空间池15中为所述一个或多个顶点分配内存空间(步骤43)。
对应地,图块化器请求对所述一个或多个顶点的变量着色(步骤44)。
如图4所示,图块化器还将所述一个或多个顶点的顶点着色位置数据输出到内存空间池15中所分配的内存空间(步骤45)。
然后该处理转到正在生成的渲染输出的下一图元,依此类推。
图5至图10更详细地示出了本实施例中的在内存空间池15中为顶点和图元(多边形)列表分配内存空间。在本实施例中,存储由图块化器生成的多边形(图元)列表的图块化器堆(内存池)被用作内存池15,但是该图块化器堆用于存储顶点着色顶点数据50以及多边形列表51。
如图5所示,在本实施例中,在堆15的顶部向下分配多边形列表,并且从底部向上分配顶点(并且使用连续的、渐增的顶点地址)。如图5所示,顶点数据被分配到图块化器堆50中的空间中作为相应的“顶点数据包”。下面将会参照图9和图10对其进行更详细的讨论。
图6例示了在图块化器堆(内存空间池)15中将新的顶点数据包60从底部向上添加。图7对应地例示了将新的多边形(图元)列表箱70从内存空间池(图块化器堆)15的顶部向下添加。
图8示出了,新的内存空间分配(是否针对顶点数据包或者多边形列表箱)需要比内存空间池(图块化器堆)15中可用的空间更多的空间的“内存不足”情况的发生。当新的内存空间分配80将对应的顶部或底部分配指针移动到与其它顶部或底部分配指针重叠(从而指示内存不足的情况)时,可以标识这种情况。
响应于此,执行适当的“内存不足”操作。例如,这可以包括:(例如,经由图形处理流水线的驱动器)请求对内存空间池(图块化器堆)15的进一步内存分配、和/或通过目前存储在内存空间池(图块化器堆)15中的多边形列表和顶点数据包,来触发光栅化和渲染,以便释放内存空间池(图块化器堆)15中的空间。在解决了内存不足的情况之前,停止将新的多边形列表箱和顶点数据包添加到内存空间池(图块化器堆)15。
如图5至图8所示,首先通过从池(“顶点数据包”)中分配足以存储多个顶点的顶点着色属性数据的较大块的内存空间,来将内存空间池15内的内存空间分配给顶点。然后将内存空间池中的顶点数据包50内的内存空间分配给各个顶点,直到顶点数据包饱和(此时,如果在内存空间池15中仍然存在空间,则分配进一步的顶点数据包,然后逐步填满顶点,并依此类推,直到内存空间池中没有更多的空间用于完整的顶点数据包)。
每个框(顶点数据包)50都是相同大小的,并且都被配置为整数的缓存线路,而不管顶点属性的大小。这意味着,每个新框(顶点数据包)的开始的缓存线路都是对齐的。
图9和图10更详细地示出了顶点数据包50内顶点数据的布置。图9示出了“饱满的”顶点数据包50,并且图10示出了其中具有空闲空间的顶点数据包50(当其被顶点数据填满时)。
如图9和图10所示,每个顶点数据包50可以存储n个顶点的属性数据,并且包括(并且存储)从顶点数据包中的偏移“0”(针对数据包中的n个顶点中的每个顶点都有一个)开始的n个位置90,然后从位置(偏移)a开始的n组非位置属性(变量)乘以该框(数据包)中的n字节(即,在已经存储了全部n个顶点的全部位置数据之后立即从一个位置开始)(其中,a是顶点的位置属性占用的字节数量)。
在本实施例中,假设每个缓存线路都是64字节的,并且每个顶点都具有4x FP32个坐标。对应地,n被设置为64,以便确保顶点数据包始终是整数的缓存线路,并且a被设置为16。
在这种布置中,将为顶点模64指派的等于0的内部顶点ID(序列索引)(即,内部顶点ID%64),用作指示新的顶点数据包需要进行分配的测试。
在本实施例中,为了存取顶点数据包中的顶点数据,使用以下寻址方案:
Address=base address+floor(internal vertex ID/n)*packet_size+(internal vertex ID%n)*attribute_stride+Attribute_offset.
驱动器通过新的“顶点数据包属性(vertex packet attribute)”描述符来静态配置packet_size/attribute_stride/attribute_offset字段。内部顶点ID(internalvertex ID)是分配给所讨论的顶点的序列索引。n是可以存储在顶点数据包中的顶点数量(因此在本实施例中是64),并且基址(base address)是针对整个内存池15而言的存储顶点数据的基址(如上文所讨论的)。
图3示意性地更详细地例示了本发明的实施例中的图形处理流水线20的图块化器22的操作。
图3示出了图形处理流水线20的图块化器22、作业管理器32、着色器核心312、和图块化器堆313。位于图块化器堆313内的是:可以用于将由着色器核心312生成的顶点着色位置属性数据传递到图块化器22的先入先出内存314的框,以及用于存储从图块化器22输出的图元列表51的内存池15和用于存储顶点数据的顶点数据包50(如上文所讨论的)。
如上文所讨论的,内存池15是作为主(系统)内存中所分配的内存地址范围提供的。
FIFO 314被用作从着色器核心312发送到图块化器22的位置数据的暂时存储部。其是作为在主(系统)内存中分配的内存范围提供的,由于通过FIFO 314传递到图块化器的位置数据的寿命,这是可以接受的。可以知道的是,在需要时,该数据存在于缓存(L2缓存)中,然后在将数据从L2缓存中驱逐之前针对新位置再次使用其内存位置。
(具体地,图块化器会请求位置着色,并且着色器核心会执行位置着色,并将结果数据写入到FIFO 314中的给定位置。然后图块化器会在短期内读取该位置数据,并且从此时起,FIFO可用于来自着色器核心的一组新位置。这就产生了在处理完成之前FIFO内存区域在L2缓存中“保持警惕”并且停留在L2缓存中的效果(在处理完成之后,FIFO 314会被驱逐到主内存,但是由于FIFO的覆盖区比在其寿命期间通过其的数据量要小得多,所以这是可以接受的)。)
如上文所讨论的,在位置数据位于L2缓存中时,图块化器22从FIFO 314中读取位置数据,然后将位置数据放到顶点缓存322中,直到使用该位置数据完成了图元的处理。
在本实施例中,该顶点缓存322位于顶点抓取器36中,但是如果需要的话也可以使用其它布置。对顶点缓存的使用和操作被配置成,使得在图块化器完成了对该数据的使用(并且如果适当的话,该数据被写回到主内存中的内存池15中的顶点数据包50中的顶点)之后,由着色器核心312响应于来自图块化器的请求生成的任何着色位置数据而被从顶点缓存中驱逐。
其它布置当然是可行的。
为了确保,在图块化器需要该数据的任何处理完成了之前必要的位置数据可以用于顶点缓存322中,并且,如果必要的话,该数据被写出到主内存,优选地对缓存中的相关位置数据条目的需要进行追踪。这优选地通过引用计数方案来完成,其中,针对给定顶点的每个实例将“引用”计数增加一次,并且每当对实例的处理完成了就将“引用”计数减少一次。用于确保在需要数据时该数据存在于缓存中的其它布置当然是可行的。
如图3中可以看见的,图块化器22包括控制单元33、描述符抓取器34、顶点预取器35、顶点抓取器36、图元装配级37、边界框生成器38、图元列表器39、顶点可视性检查器单元310和接口单元311。
在图块化器22的控制单元33处,经由作业控制总线接收来自作业管理器32的图形处理作业(任务)(例如,限定出要针对帧或渲染过程处理的一组绘图调用/子任务)。然后控制单元33指示描述符抓取器34读入图块化器22,用于该图形处理作业所需的各种描述符。描述符提供图块化器22用于所讨论的图形处理作业所需的信息,诸如,要运行(要执行)的着色器程序、属性的配置、进程堆栈应用等以及运行(执行)着色器程序所需的任何其它信息。
一旦读入了描述符,图块化器22就生成针对所讨论的作业限定的顶点的顶点着色位置属性数据。为了做到这一点,控制单元33指示顶点预取器35获得顶点的位置着色属性数据。
顶点预取器35被配置成,读入索引阵列(限定出要由图形处理流水线处理的一组顶点),并且确定顶点的位置属性是否需要进行顶点着色。顶点预取器35被配置成,通过检查这组顶点的顶点着色位置属性数据是否可用于FIFO 314中来做到这点。
该操作被配置如下。如图3所示,顶点预取器35和顶点抓取器36都读取限定出要处理的一组顶点的索引阵列(索引阵列限定出使用顶点的顺序)。由于顶点预取器35在顶点抓取器36之前操作,并且顶点缓存322由顶点抓取器36维护(如上文所讨论的),所以顶点预取器35和顶点抓取器36的操作被配置成,使得顶点预取器35知道在顶点抓取器36到达索引阵列中的同一位置(到达索引阵列中顶点预取器35已经到达的当前位置,并且确定是否需要进行顶点着色)时哪些顶点在顶点缓存322中。
在本实施例中,这是通过将顶点缓存配置成使用循环替换算法(因此是决定性的)来实现的,从而使得顶点预取器35可以知道顶点抓取器36何时会得到顶点缓存中的缓存命中率和未命中率(即,在顶点缓存中是否存在所讨论的顶点的顶点着色位置数据)。然后,这使得顶点预取器35能够有效地(正确地)预测缓存内容。
对应地,顶点预取器35操作,以针对确定在顶点抓取器36处理索引阵列时会在顶点缓存中“未命中”的每个顶点(针对每次顶点位置查找)请求位置着色。由于在本实施例中该预测是确切的,所以顶点预取器35可以对应地触发对顶点的位置着色,使得在顶点抓取器36的顶点缓存查找失败时,所需的位置数据会是FIFO 314中的下一条目。
如果顶点预取器35确定在针对顶点或顶点组的顶点缓存322中存在“未命中”,即,该确定显示了在顶点抓取器36到达所讨论的顶点或顶点组时该顶点(或顶点组)的顶点着色位置属性数据未存储在顶点缓存322中,则认为这是该顶点(或顶点组)(就位置属性而言)需要进行顶点着色的指示。
对应地,顶点预取器35会触发顶点着色操作,以生成与缓存未命中相对应的全部顶点的顶点着色位置属性数据。这是通过预取器35经由接口311将对顶点(或顶点组)的位置着色请求发送到作业管理器32来完成的。作业管理器32指示可用的着色器核心312执行相关的顶点着色操作。
位置着色请求包含:是“位置着色请求”的指示,以及包括作业ID、索引ID、实例ID、请求ID和基址的信息。作业ID用于标识与作业有关的描述符。索引ID和实例ID用于标识该作业内的顶点。基址和请求ID(相对于基址的偏移)限定出,来自着色器核心312的输出(着色位置)应该存储在内存314中的地址。该地址会限定出FIFO内存314中的下一条目。
在着色器核心312生成了顶点(或顶点组)的顶点着色位置数据,将顶点着色位置数据存储在FIFO内存314中的下一条目中。
如上文所讨论的,这会产生如下的效果:当顶点抓取器36到达索引阵列中所讨论的顶点(或顶点组)时该顶点着色位置数据是FIFO 314中的下一条目(因此需要将该顶点数据加载到顶点缓存)。
如果顶点预取器35确定在针对顶点(或顶点组)的顶点缓存322中存在“命中”,即,在顶点抓取器36到达索引阵列中所讨论的顶点(或顶点组)时,顶点(或顶点组)的顶点着色位置属性数据已经存储在顶点缓存322中,那么该顶点(或顶点组)不需要进行(并且不执行)位置顶点着色操作。
如上文所讨论的,顶点抓取器36可操作以与预取器35同时接收并处理索引阵列。因此,顶点抓取器36将处理由索引阵列与预取器35一起一个接一个限定的顶点(或顶点组)。
针对正由顶点抓取器36处理的给定顶点(或顶点组),顶点抓取器36会试图抓取来自顶点缓存322的顶点着色属性数据。
在缓存“命中”的情况下,顶点抓取器会针对顶点(或顶点组)抓取来自顶点缓存的数据。
在缓存“未命中”的情况下,顶点抓取器36会检索(320)来自FIFO内存314的顶点数据,并且适当地将其加载到顶点缓存322。(如上文所讨论的,顶点预取器35和顶点抓取器36的操作是同步的,从而使得此时FIFO 314中的下一条目会是所讨论的顶点(或顶点组)的顶点着色位置属性数据)。然后顶点抓取器36可以抓取来自顶点缓存322的数据。
然后顶点抓取器36将顶点的顶点着色位置属性数据(以及限定出要处理的图元的索引阵列)发送到,建造图元以用于进一步的处理的图元装配单元37。
在图元装配单元37中已经建造了图元之后,将图元发送到边界框生成器单元38。
边界框生成器单元38可操作以确定图元的可视性,并且存储与每个图元相关联的“可视性”标志。这是通过针对每个图元生成覆盖所讨论的图元的边界框来完成的。例如,然后通过对边界框执行后向剔除、视锥和视口剔除、剪取、和/或采样感知的图块化,来测试每个边界框。
在边界框生成器38中处理了图元之后,转到顶点可视性检查器310。
顶点可视性检查器310在内存空间池(堆)15中保存了之前为其属性分配了内存空间50的顶点的记录324。该记录对应地指示了,与记录中的条目相关联的顶点的剩余(非位置)变量之前是否经受了变量着色操作。
在本实施例中,指示已经为顶点着色属性数据分配了内存空间的顶点和/或顶点组的记录324包括:指示哪些内存空间(内存空间的位置)已经被分配给顶点或顶点组的信息(如果存在的话,对应地提供已经将内存空间分配给顶点或顶点组的指示)。
将指示已经被分配了内存空间的顶点和/或顶点组的该记录(信息)存储在缓存中,该缓存包含:从输入顶点标识到所分配的输出顶点标识的映射(以及缓存中对应地指示尚未将内存空间分配给所讨论的顶点或顶点组的未命中)。
如下面会进一步讨论的,在本实施例中,所分配的输出顶点标识包括所分配的内部顶点ID(序列索引)(因为顶点被存储在线性阵列中,所以这会指示内存中的顶点数据的位置)。
当顶点可视性检查器310接收到图元时,其会检查该图元是否被标记为可见。如果该图元是不可见的,则该图元会被从进一步的处理中丢弃。然而,如果该图元是可见的,则顶点可视性检查器310会针对图元中的每个顶点确定是否应该在内存池15中为顶点分配内存空间(并且,如果适当的话,为顶点分配内存空间)。
本实施例中的图块化器堆15中的内存空间的分配完成如下。
如果该图元是正在处理的绘图调用中被认为是可见的第一图元,则通过将图块化器堆15的当前底部分配指针52设置为该绘图调用(新的顶点缓冲器)所存储的顶点数据的基址,来为该绘图调用的顶点分配内存空间。然后在处理绘图调用时根据顶点数据包(和顶点)的需要在从该基址递增的地址处分配内存。
存储和/或另外处理所分配的基址,从而使得当图形处理流水线的其它元素和部件需要时可以检索并使用这些基址(以标识用于顶点着色属性数据的基址)。
在本实施例中,基址是属性着色环境的性质(例如,图块化器将其设置为图形处理器内部性质),然后使用该性质来进行后续的属性寻址,不需要从内存中读取任何描述符(不需要通过内存)。如果需要的话,可以使用其它布置,诸如,将基址写到正在处理的一组顶点的适当的描述符,诸如,绘图调用描述符或者属性缓冲器描述符。
一旦设置了顶点缓冲器基址(或者如果已经设置了顶点缓冲器基址(其中,图元不是绘图调用中的第一个“可见”图元)),那么考虑图元中的每个顶点,并且确定是否已经在图块化器堆15中将内存空间分配给顶点。(似乎可见图元已经使用了顶点,并已经为其分配了内存,因此没有必要为其再次分配内存空间)。
这是通过如下来完成:顶点可视性检查器310检查顶点记录缓存324,以查看是否已经将内存空间池15中的内存空间分配给顶点。
如果顶点可视性检查器在顶点记录缓存324中“未命中”,则这指示了之前尚未将内存空间分配给顶点。如图3所示,顶点可视性检查器310会对应地在内存空间池15(内存空间池15中的顶点数据包中)中为顶点分配(321)内存空间。出于这个目的,顶点可视性检查器310包括可操作以按照适当方式为顶点分配内存的内存分配器323。
当确定应该将内存空间分配给顶点时,通过将内部顶点ID指派给顶点来将内存空间分配给顶点,该内部顶点ID是已经被分配了内存空间的顶点的连续索引中的顶点的位置。然后使用该内部顶点ID来控制实际的内存分配(并且将其编码为图元列表以标识顶点)。
顶点可视性检查器310还会将顶点记录缓存324中的新条目分配给顶点,这个新条目用顶点的顶点ID标记,并且存储针对顶点指派的内部顶点ID(以便指示已经为该顶点分配的内存空间)。
如果顶点记录缓存指示了之前尚未将内存空间分配给顶点,则顶点可视性检查器310还会,如图3所示,将对该顶点的变量着色请求319发送到作业管理器32。(为了避免部分写入太多以及对着色器核心的着色请求太多,在本实施例中,图块化器请求对多组多个,例如,四个顶点进行(位置和变量)着色)。
变量着色请求319包含:对这是“变量着色”请求的指示、与上文提到的位置着色请求相同的信息、和指派给顶点的新的内部顶点ID(序列索引)。(因此,作为该请求的一部分,顶点着色器给出API可见实例ID和顶点ID值,以用于读取应用提供的值,并且给出新指派的内部顶点ID(序列索引),以用于在图块化器堆15中存储变量顶点着色的输出)。
当生成顶点着色变量属性数据时,通过针对顶点接收到的内部顶点ID(序列索引)、和基址(base address)、packet_size、attribute_stride和attribute_offset(这可以从适当的(多个)描述符等中检索到),来将数据写入到内存池15中的顶点数据包50中的正确位置,如上文所讨论的。
作业管理器32保持对未解决的变量着色请求的追踪,以确定何时创建了片段着色过程所需的全部数据。
除了上文之外,顶点可视性检查器310还可操作以通知317可见顶点周围的顶点抓取器36,使得顶点抓取器36将来自顶点缓存322的可见图元的顶点着色位置数据存储(写出)318到主(系统)内存池15中的适当(分配)的顶点数据包50。使用分配给顶点的新的内部顶点ID等以及基址和顶点数据包大小,来计算在内存中存储顶点的(已经进行过顶点着色)位置属性的位置(会被图块化器用于测试所讨论的图元的可视性)。
在将可见图元的顶点着色位置数据存储在系统内存中之后,可以将数据从顶点缓存322中驱逐。
当(通过可视性标志)将图元标记为可见时,将图元发送到图元列表器39,并且将其分类为渲染输出被划分成的每个图块的相应的图元列表。将图元列表写入内存池15中,随后在图形处理流水线中使用(如上文所讨论的)。根据需要将每个图元列表的内存51从池15中分配为固定大小的块。通过指派给顶点的新的内部顶点ID(序列索引),来在图元列表中对图元的顶点进行标识(编码)。
在从顶点可视性检查器310发送变量着色请求时,顶点可视性检查器310会通过图元到达流水线中的下一级,诸如,片段着色级(未示出)。为了在图块化器作业与片段作业之间达到同步性,对变量着色的进程进行追踪。例如,这可以通过如下来完成:在图块化器22接收到对全部请求的响应之前,停止完成图块化器作业或者通过在作业管理器32中对其进行追踪。
从上文可以看出,至少在本发明的优选实施例中,本发明提供了如下系统:其避免驱动器对顶点数据进行任何预先内存分配,并且仅为实际上在图元列表中结束的顶点分配内存。除此之外,这会对应地改善性能并减少内存覆盖区。
在本发明的优选实施例中,这至少通过以下来实现:在确定了应该处理顶点以生成渲染输出(例如,可能是“可见的”)之后,仅为顶点数据分配内存空间。
Claims (21)
1.一种操作图形处理流水线的方法,所述方法包括如下步骤:
针对要由所述图形处理流水线处理的一组顶点,进行如下操作:
所述图形处理流水线的顶点着色器对所述一组顶点中的一个或多个顶点执行第一顶点着色操作,以生成所述一组顶点中的所述一个或多个顶点的至少一个顶点属性的顶点着色属性数据;
针对已经经受所述第一顶点着色操作的所述一个或多个顶点中的相应顶点或顶点组,所述图形处理流水线的测试级确定是否应该分配用于存储所述顶点或所述顶点组的至少一个顶点属性的顶点着色属性数据的内存空间,其中,所述确定的步骤包括至少部分地使用由所述第一顶点着色操作生成的所述顶点着色属性数据中的一些或全部;
响应于确定了应该为顶点或顶点组分配内存空间,所述测试级发送针对要分配给所述顶点或所述顶点组的内存空间的请求;以及
响应于来自所述测试级的所述请求,内存分配器分配用于存储已经发送了所述请求的所述顶点或所述顶点组的顶点着色属性数据的内存空间,
其中,通过分配足以存储多个顶点的顶点着色属性数据的更大的内存空间块,然后将所述内存空间块内的空间分配给各个顶点,来执行将内存空间分配给顶点,并且
所述方法还包括如下步骤:通过将所述多个顶点的位置属性一个接一个地一起存储在所述内存空间块的一端,然后将所述顶点中的每个顶点的非位置属性一个接一个地与所述位置属性分开存储,来将所述多个顶点的顶点着色属性数据存储在所述内存空间块中。
2.根据权利要求1所述的方法,其中,在所述第一顶点着色操作中被处理的所述至少一个顶点属性包括所述顶点的一个或多个位置属性。
3.根据权利要求1或2所述的方法,其中,针对已经经受所述第一顶点着色操作的所述一个或多个顶点中的相应顶点或顶点组,所述图形处理流水线的所述测试级通过如下方式来确定是否应该分配用于存储所述顶点或所述顶点组的至少一个顶点属性的顶点着色属性数据的内存空间:
确定所述相应顶点或顶点组是否要用于图元,所述图元在正执行的图形处理操作的输出中可见。
4.根据权利要求1或2所述的方法,所述方法进一步包括如下步骤:所述测试级进行如下操作:
根据指示已经被分配了内存空间的顶点和/或顶点组的信息,来确定顶点或顶点组是否已经被分配了内存空间;以及
当根据所述信息确定了所述顶点或所述顶点组已经被分配了内存空间时,则不为所述顶点或所述顶点组进一步分配内存空间;
但是当尚未确定所述顶点或所述顶点组已经被分配了内存空间时,则为所述顶点或所述顶点组分配内存空间。
5.根据权利要求1或2所述的方法,其中:
所述图形处理流水线是基于图块的图形处理流水线;以及
从要用于存储图元列表和顶点着色属性数据的内存空间池中,为顶点的顶点着色属性数据分配所述内存空间。
6.根据权利要求5所述的方法,其中,所述图元列表被分配了内存空间,并从所述内存空间池的顶部向下被存储在所述内存空间池中,并且所述顶点被分配了内存空间,并从底部向上被存储在所述内存空间池中。
7.根据权利要求1或2所述的方法,所述方法进一步包括如下步骤:
为已经被分配了用于存储其顶点着色属性数据的内存空间的顶点指派顶点索引,该顶点索引与所述顶点在已经为其顶点着色属性数据分配了内存空间的顶点的序列中的编号相对应,所指派的顶点序列索引然后被至少部分地用于确定存储所述顶点的顶点着色属性数据的内存地址。
8.根据权利要求7所述的方法,其中,所述图形处理流水线是使用图元列表的基于图块的图形处理流水线,并且为所述顶点指派的顶点序列索引用于识别所述图元列表中的顶点。
9.根据权利要求1或2所述的方法,所述方法进一步包括如下步骤:
针对已经经受所述第一顶点着色操作的所述一个或多个顶点中的相应顶点或顶点组,所述图形处理流水线的测试级确定是否应该对所述顶点或所述顶点组执行第二顶点着色操作,以生成所述一组顶点中的所述一个或多个顶点的所述多个顶点属性中的至少一个其它顶点属性的顶点着色属性数据,其中,所述确定的步骤包括至少部分地使用由所述第一顶点着色操作生成的所述顶点着色属性数据中的一些或全部;
响应于确定了应该对顶点或顶点组执行第二顶点着色操作,所述测试级发送针对要对所述顶点或所述顶点组执行的第二顶点着色操作的请求;以及
响应于来自所述测试级的所述请求,所述图形处理流水线的顶点着色器对已经被发送了所述请求的所述顶点或所述顶点组执行第二顶点着色操作,以生成所述一组顶点中的所述一个或多个顶点的所述多个顶点属性中的所述至少一个其它顶点属性的顶点着色属性数据。
10.根据权利要求1或2所述的方法,其中,所述图形处理流水线是基于图块的图形处理流水线,并且所述图形处理流水线的图块化级操作为所述测试级。
11.一种图形处理系统,所述图形处理系统包括:
图形处理流水线,所述图形处理流水线包括:
顶点着色器,所述顶点着色器可操作以对要由所述图形处理流水线处理的一组顶点中的一个或多个顶点执行第一顶点着色操作,以生成所述一组顶点中的所述一个或多个顶点的至少一个顶点属性的顶点着色属性数据;以及
测试级,针对已经经受所述第一顶点着色操作的所述一个或多个顶点中的相应顶点或顶点组,所述测试级可操作以确定是否应该分配用于存储所述顶点或所述顶点组的至少一个顶点属性的顶点着色属性数据的内存空间,其中,所述确定包括至少部分地使用由所述第一顶点着色操作生成的所述顶点着色属性数据中的一些或全部;
响应于确定了应该为顶点或顶点组分配内存空间,所述测试级进一步可操作以发送针对要分配给所述顶点或所述顶点组的内存空间的请求;
所述图形处理系统进一步包括:
内存分配器,响应于来自所述测试级的对要分配的内存空间的请求,所述内存分配器可操作以分配用于存储已经发送了所述请求的顶点或顶点组的顶点着色属性数据的内存空间,
其中,通过分配足以存储多个顶点的顶点着色属性数据的更大的内存空间块,然后将所述内存空间块内的空间分配给各个顶点,来执行将内存空间分配给顶点,并且
其中,通过将所述多个顶点的位置属性一个接一个地一起存储在所述内存空间块的一端,并且将所述顶点中的每个顶点的非位置属性一个接一个地与所述位置属性分开存储,来将所述多个顶点的顶点着色属性数据存储在内存空间块中。
12.根据权利要求11所述的图形处理系统,其中,在所述第一顶点着色操作中被处理的所述至少一个顶点属性包括所述顶点的一个或多个位置属性。
13.根据权利要求11或12所述的图形处理系统,其中,针对已经经受所述第一顶点着色操作的所述一个或多个顶点中的相应顶点或顶点组,所述图形处理流水线的所述测试级通过如下方式来确定是否应该分配用于存储所述顶点或所述顶点组的至少一个顶点属性的顶点着色属性数据的内存空间:
确定所述相应顶点或顶点组是否要用于图元,所述图元在正执行的图形处理操作的输出中可见。
14.根据权利要求11或12所述的图形处理系统,其中,所述测试级进一步可操作以进行如下操作:
根据指示已经被分配了内存空间的顶点和/或顶点组的信息,来确定顶点或顶点组是否已经被分配了内存空间;以及
当根据所述信息确定了所述顶点或所述顶点组已经被分配了内存空间时,则不为所述顶点或所述顶点组进一步分配内存空间;
但是当尚未确定所述顶点或所述顶点组已经被分配了内存空间时,则为所述顶点或所述顶点组分配内存空间。
15.根据权利要求11或12所述的图形处理系统,其中:
所述图形处理流水线是基于图块的图形处理流水线;以及
从要用于存储图元列表和顶点着色属性数据的内存空间池中,为顶点的顶点着色属性数据分配所述内存空间。
16.根据权利要求15所述的图形处理系统,其中,所述图元列表被分配了内存空间,并从所述内存空间池的顶部向下被存储在所述内存空间池中,并且所述顶点被分配了内存空间并从底部向上被存储在所述内存空间池中。
17.根据权利要求11或12所述的图形处理系统,其中,所述测试级进一步可操作以便为已经被分配了用于存储其顶点着色属性数据的内存空间的顶点指派顶点索引,该顶点索引与所述顶点在已经为其顶点着色属性数据分配了内存空间的顶点的序列中的编号相对应,所指派的顶点序列索引然后被至少部分地用于确定存储所述顶点的顶点着色属性数据的内存地址。
18.根据权利要求17所述的图形处理系统,其中,所述图形处理流水线是使用图元列表的基于图块的图形处理流水线,并且为所述顶点指派的顶点序列索引用于识别所述图元列表中的所述顶点。
19.根据权利要求11或12所述的图形处理系统,其中,所述测试级进一步可操作以执行如下操作:
针对已经经受所述第一顶点着色操作的所述一个或多个顶点中的相应顶点或顶点组,确定是否应该对所述顶点或所述顶点组执行第二顶点着色操作,以生成所述一组顶点中的所述一个或多个顶点的所述多个顶点属性中的至少一个其它顶点属性的顶点着色属性数据,其中,所述确定的操作包括至少部分地使用由所述第一顶点着色操作生成的所述顶点着色属性数据中的一些或全部;以及
响应于确定了应该对顶点或顶点组执行第二顶点着色操作,来发送针对要对所述顶点或所述顶点组执行的第二顶点着色操作的请求;
并且,
所述图形处理流水线进一步被配置成,响应于来自所述测试级的所述请求,进行如下操作:
通过所述图形处理流水线的顶点着色器,对已经被发送了所述请求的所述顶点或所述顶点组执行第二顶点着色操作,以生成所述一组顶点中的所述一个或多个顶点的所述多个顶点属性中的所述至少一个其它顶点属性的顶点着色属性数据。
20.根据权利要求11或12所述的图形处理系统,其中,所述图形处理流水线是基于图块的图形处理流水线,并且所述图形处理流水线的图块化级操作为所述测试级。
21.一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序包括计算机软件代码,用于当程序在数据处理装置上运行时,所述计算机软件代码执行根据权利要求1至10中任一项所述的方法。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
GB1710873.9 | 2017-07-06 | ||
GB1710873.9A GB2564400B (en) | 2017-07-06 | 2017-07-06 | Graphics processing |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109214976A CN109214976A (zh) | 2019-01-15 |
CN109214976B true CN109214976B (zh) | 2024-01-05 |
Family
ID=59676566
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201810734571.6A Active CN109214976B (zh) | 2017-07-06 | 2018-07-06 | 图形处理 |
Country Status (4)
Country | Link |
---|---|
US (1) | US10650580B2 (zh) |
KR (1) | KR20190005766A (zh) |
CN (1) | CN109214976B (zh) |
GB (1) | GB2564400B (zh) |
Families Citing this family (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR20180038793A (ko) * | 2016-10-07 | 2018-04-17 | 삼성전자주식회사 | 영상 데이터 처리 방법 및 장치 |
CN109919827A (zh) * | 2019-02-22 | 2019-06-21 | 搜游网络科技(北京)有限公司 | 一种图形绘制方法、装置及计算机可读介质、设备 |
CN110223216B (zh) * | 2019-06-11 | 2023-01-17 | 西安芯瞳半导体技术有限公司 | 一种基于并行plb的数据处理方法、装置及计算机存储介质 |
US11210821B2 (en) * | 2019-11-27 | 2021-12-28 | Arm Limited | Graphics processing systems |
US11216993B2 (en) | 2019-11-27 | 2022-01-04 | Arm Limited | Graphics processing systems |
US11170555B2 (en) * | 2019-11-27 | 2021-11-09 | Arm Limited | Graphics processing systems |
US11210847B2 (en) | 2019-11-27 | 2021-12-28 | Arm Limited | Graphics processing systems |
US11189073B2 (en) | 2020-03-20 | 2021-11-30 | Arm Limited | Graphics processing |
US11468633B1 (en) | 2021-03-30 | 2022-10-11 | Arm Limited | Methods and systems for tile-based graphics processing |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101470671A (zh) * | 2008-01-16 | 2009-07-01 | 威盛电子股份有限公司 | 内存系统、内存存取方法以及图形处理系统 |
CN103562897A (zh) * | 2011-06-10 | 2014-02-05 | 国际商业机器公司 | 存储存储级内存信息命令 |
CN105321199A (zh) * | 2014-07-03 | 2016-02-10 | Arm有限公司 | 图形处理 |
CN105453029A (zh) * | 2013-08-23 | 2016-03-30 | Arm有限公司 | 处理用于数据存取的存取属性 |
Family Cites Families (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6940503B2 (en) * | 2001-05-10 | 2005-09-06 | Ati International Srl | Method and apparatus for processing non-planar video graphics primitives |
GB0524804D0 (en) | 2005-12-05 | 2006-01-11 | Falanx Microsystems As | Method of and apparatus for processing graphics |
US8384728B2 (en) | 2007-09-14 | 2013-02-26 | Qualcomm Incorporated | Supplemental cache in a graphics processing unit, and apparatus and method thereof |
US8436854B2 (en) | 2009-05-29 | 2013-05-07 | Qualcomm Incorporated | Graphics processing unit with deferred vertex shading |
US20120005557A1 (en) * | 2010-06-30 | 2012-01-05 | Eitan Mardiks | Virtual copy and virtual write of data in a storage device |
US9697047B2 (en) * | 2012-09-25 | 2017-07-04 | International Business Machines Corporation | Cooperation of hoarding memory allocators in a multi-process system |
US10083541B2 (en) * | 2014-03-13 | 2018-09-25 | Imagination Technologies Limited | Object illumination in hybrid rasterization and ray traced 3-D rendering |
CN106504183B (zh) * | 2015-09-08 | 2019-09-10 | 龙芯中科技术有限公司 | 顶点属性存储的方法及装置 |
GB2546073B (en) | 2016-01-05 | 2018-09-26 | Advanced Risc Mach Ltd | Graphics processing |
US10062139B2 (en) * | 2016-07-25 | 2018-08-28 | Qualcomm Incorporated | Vertex shaders for binning based graphics processing |
-
2017
- 2017-07-06 GB GB1710873.9A patent/GB2564400B/en active Active
-
2018
- 2018-07-03 US US16/026,402 patent/US10650580B2/en active Active
- 2018-07-05 KR KR1020180077961A patent/KR20190005766A/ko not_active Application Discontinuation
- 2018-07-06 CN CN201810734571.6A patent/CN109214976B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101470671A (zh) * | 2008-01-16 | 2009-07-01 | 威盛电子股份有限公司 | 内存系统、内存存取方法以及图形处理系统 |
CN103562897A (zh) * | 2011-06-10 | 2014-02-05 | 国际商业机器公司 | 存储存储级内存信息命令 |
CN105453029A (zh) * | 2013-08-23 | 2016-03-30 | Arm有限公司 | 处理用于数据存取的存取属性 |
CN105321199A (zh) * | 2014-07-03 | 2016-02-10 | Arm有限公司 | 图形处理 |
Also Published As
Publication number | Publication date |
---|---|
GB2564400A (en) | 2019-01-16 |
CN109214976A (zh) | 2019-01-15 |
US10650580B2 (en) | 2020-05-12 |
US20190012829A1 (en) | 2019-01-10 |
GB2564400B (en) | 2020-11-25 |
KR20190005766A (ko) | 2019-01-16 |
GB201710873D0 (en) | 2017-08-23 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109214976B (zh) | 图形处理 | |
US8698828B2 (en) | Graphics processing systems | |
CN105321199B (zh) | 图形处理流水线及其操作方法与介质 | |
CN103793893B (zh) | 采用限缓冲区处理的世界和屏幕空间管线间基元重新排序 | |
US11170555B2 (en) | Graphics processing systems | |
US9342860B2 (en) | Memory management system and method | |
US20200379909A1 (en) | Cache arrangement for graphics processing systems | |
US20210158584A1 (en) | Graphics processing systems | |
US9612949B2 (en) | Memory allocation in a multi-core processing system based on a threshold amount of memory | |
US10453168B2 (en) | Techniques for maintaining atomicity and ordering for pixel shader operations | |
US11734869B2 (en) | Graphics processing | |
US9916675B2 (en) | Graphics processing systems | |
US11210847B2 (en) | Graphics processing systems | |
CN115311120A (zh) | 图形处理系统 | |
US20170116700A1 (en) | Techniques for maintaining atomicity and ordering for pixel shader operations | |
US11294817B2 (en) | Concurrent cache lookups using partial identifiers | |
US20230305963A1 (en) | Data processing | |
CN118052695A (zh) | 图形处理系统 | |
GB2598226A (en) | Cache arrangement for graphics processing system | |
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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |