识别输入索引流中的基元的制作方法

文档序号:18061980发布日期:2019-07-03 03:08阅读:192来源:国知局
识别输入索引流中的基元的制作方法

本申请要求2016年11月17日提交的美国专利申请no.15/354,513和2016年11月24日提交的欧洲申请no.ep16200463.4的权益,所述申请以引用的方式并入,就好像在本文完全阐述一样。

所公开的实施方案大体针对于图形处理,并且具体来说,针对于识别输入索引流中的基元。



背景技术:

用于渲染三维图形的硬件接受指定向屏幕绘制的基元的输入。此输入的至少部分包括参考顶点的索引,所述顶点指定基元的形状、位置和属性。通常需要将这些索引从用户提供的格式处理成更适合于在图形硬件上使用的格式。图形硬件通常是巨量并行的,因为渲染的动作涉及大量类似但独立的操作(例如,计算不同像素的色彩值,转变不同顶点的位置等)。为了能够向巨量并行处理单元提供将要高度利用的足够的负荷,应快速且有效地处理输入索引。

附图说明

通过结合附图借助示例给出的以下描述,可以得到更详细的理解,附图中:

图1是可以在其中实施一个或多个所公开的实施方案的示例性装置的框图;

图2是根据示例的加速处理装置的框图;

图3是示出在图2中所说明的图形处理管线的额外细节的框图;

图4是根据示例的各种基元拓扑的说明;

图5是根据示例用于在给定特定基元拓扑的情况下从可以包括复位索引的一组索引中识别基元的方法的流程图;

图6说明用于从索引块识别基元的基于偏移的技术的示例性应用;

图7是根据示例用于在给定特定基元拓扑的情况下从可以包括复位索引的一组索引中识别基元的方法的流程图;以及

图8说明用于从索引块识别基元的非基于偏移的技术的示例性应用。

具体实施方式

本公开针对于用于从界定将要渲染的一组基元的索引流中移除复位索引并且识别所述索引流中的基元的技术。可以从图形卡外部的中央处理单元接收所述索引流,并且可以由在中央处理单元上执行的应用程序来指定所述索引流。所述技术涉及将所述索引流的基元拓扑分类为需要基于偏移的技术或需要非基于偏移的技术。通过根据基元拓扑确定每个后续的索引是否可以与先前的索引形成基元(例如,线带、三角形带)来完成此分类。如果每个后续的索引可以与先前的索引形成基元,那么所使用的技术是非基于偏移的技术。如果每个后续的索引不与先前的索引形成基元,而是需要至少两个索引来形成新的基元(例如,线列表、三角形列表),那么所使用的技术是基于偏移的技术。

非基于偏移的技术涉及识别索引流中的可能是基元的索引的每个分组并且移除包括复位索引的所有此类分组。基于偏移的技术更复杂并且涉及从索引流计算根据其获得输出基元的偏移。所述偏移与索引流中的复位索引的位置相关。

为了确定所述偏移,首先通过根据基元拓扑识别可能是基元的每个索引分组来识别一组初始候选基元,并且不关注复位索引的位置。随后,对于每个初始的候选基元,确定那个基元中的最新的复位索引的位置。

位置的范围是从0到基元的大小减去1,开始于最新的索引。使用这些位置来识别最终的候选基元。更具体来说,产生一组最终的候选基元,每个最终的候选基元对应于不同的初始的候选基元。向每个最终的候选基元指派等于前一初始的候选基元中的复位索引的位置的偏移,或者,如果初始的候选基元不具有复位索引,那么将所述偏移指派给前一最终的候选基元。

使用所述偏移来识别最终的候选基元的索引。更具体来说,将任何特定的最终的候选基元的索引识别为将在以下情况下产生的索引:使输入索引流中的输入索引的位置朝向更老的索引移位了等于指派给最终的候选基元的偏移的数目个索引。举例来说,如果向最终的候选基元指派偏移1,那么向最终的候选基元指派索引流的比指派给初始的候选基元的索引老一个的索引。在说明性示例中,如果索引流包括索引1、r、3、4、5、6(其中“r”是复位索引),初始的候选基元是[4,5,6],并且对应的最终的候选基元具有偏移1,那么最终的候选基元具有向初始的候选基元的索引的左边移位一的索引(其为索引3、4和5)。一旦获得最终的候选基元,移除具有复位索引的基元,并且剩余的是输出基元,输出以供在图形处理管线中使用。

图1是其中实施本公开的一个或多个方面的示例性装置100的框图。装置100包括(例如)计算机、游戏装置、手持装置、机顶盒、电视机、移动电话或平板计算机。装置100包括处理器102、存储器104、存储装置106、一个或多个输入装置108和一个或多个输出装置110。装置100还包括分别驱动输入装置108和输出装置110的输入驱动器112和输出驱动器114。应理解,装置100可以包括在图1中未示出的额外部件。

处理器102包括中央处理单元(cpu)、图形处理单元(gpu)、位于同一裸片上的cpu和gpu,或一个或多个处理器核心,其中每个处理器核心可以是cpu或gpu。存储器104位于与处理器102相同的裸片上,或者可以与处理器102分开地定位。存储器104包括易失性或非易失性存储器,例如随机存取存储器(ram)、动态ram,或缓存。

存储装置106包括固定或可移除的存储装置,例如硬盘驱动器、固态驱动器、光盘,或闪存驱动器。输入装置108包括键盘、小键盘、触摸屏、触摸垫、检测器、麦克风、加速度计、陀螺仪、生物识别扫描仪,或网络连接(例如,用于传输和/或接收无线ieee802信号的无线局域网卡)。输出装置110包括显示器、扬声器、打印机、触觉反馈装置、一个或多个灯、天线,或网络连接(例如,用于传输和/或接收无线ieee802信号的无线局域网卡)。

输入驱动器112与处理器102和输入装置108通信,并且准许处理器102从输入装置108接收输入。输出驱动器114与处理器102和输出装置110通信,并且准许处理器102将输出发送到输出装置110。输出驱动器114包括耦合到显示装置118的加速处理装置(“apd”)116。apd116被配置成从处理器102接受计算命令和图形渲染命令、处理那些计算和图形渲染命令,并且向显示装置118提供像素输出以供显示。

apd116包括被配置成根据单指令多数据(“simd”)范式执行计算的一个或多个并行处理单元。然而,描述成由apd116执行的功能性还可以由不根据simd范式来处理数据的处理装置执行。

图2是根据示例的加速处理装置116的框图。处理器102在系统存储器104中维持一个或多个控制逻辑模块以供处理器102执行。控制逻辑模块包括操作系统120、驱动器122和应用126。这些控制逻辑模块控制处理器102和apd116的操作的各个方面。举例来说,操作系统120直接与硬件通信并且为在处理器102上执行的其他软件提供到硬件的接口。驱动器122通过向在处理器102上执行的软件(例如,应用126)提供应用编程接口(“api”)来控制apd116的操作,以访问apd116的各种功能性。驱动器122还包括即时编译器,其编译着色器程序以供apd116的处理部件(例如,在下文进一步详细论述的simd单元138)执行。

apd116执行选定功能的命令和程序,例如可以适合于并行处理的图形操作和非图形操作。apd116可以用于执行图形管线操作,例如像素操作、几何计算,并且基于从处理器102接收的命令而向显示装置118渲染图像。apd116还基于从处理器102接收的命令或不是图形处理管线134的“正常”信息流的部分的命令而执行不与图形操作直接相关(或不相关)的计算处理操作,例如与视频、物理模拟、计算流体动力学或其他任务相关的操作。

apd116包括着色器引擎132(其在本文可以统称为“可编程处理单元202”),所述着色器引擎包括一个或多个simd单元138,所述一个或多个simd单元被配置成在处理器102的请求下根据simd范式以并行方式执行操作。simd范式是其中多个处理元件共享单个程序控制流单元和程序计数器且因此执行相同程序但能够使用不同数据来执行那个程序的simd范式。在一个示例中,每个simd单元138包括十六个分道,其中每个分道与simd单元138中的另一分道同时执行相同指令但可以使用不同数据来执行那个指令。如果不是所有分道都需要执行给定指令,那么可以通过断言来关闭分道。还可以使用断言通过散开的控制流来执行程序。更具体来说,对于具有条件性分支的程序或其中控制流是基于由个别分道执行的计算的其他指令,分道的断言对应于当前不在执行的控制流路径,并且不同控制流路径的连续执行允许跟有任意的控制流。

着色器引擎132中的基本执行单元是工作项目。每个工作项目表示将在特定分道中并行地执行的程序的单个示例化。工作项目可以作为“波前”在单个simd单元138上同时执行。多个波前可以包括在“工作组”中,所述工作组包括被指定执行相同程序的工作项目的集合。可以通过执行构成工作组的波前中的每一者来执行工作组。可以在单个simd单元138上循序地执行波前,或者在不同的simd单元138上部分或完全并行地执行波前。波前可以被视为可以在单个simd单元138上同时执行的工作项目的最大集合。因此,如果从处理器102接收的命令指示特定程序并行化到所述程序无法在单个simd单元138上同时执行的程度,那么将那个程序分解为在两个或更多个simd单元138上并行化或在相同simd单元138上串行化(或在需要时并行化且串行化)的波前。调度器136被配置成执行与在不同着色器引擎132和simd单元138上调度各种波前相关的操作。调度涉及指派在simd单元138上执行的波前;在波前已经结束时进行确定;在波前已经停止时进行确定并且所述波前将被其他波前换出;以及执行其他调度任务。

由着色器引擎132提供的并行性适合于图形相关操作,例如像素值计算、顶点转换和其他图形操作。从处理器102接受图形处理命令的图形处理管线134因此向着色器引擎132提供计算任务以并行地执行。

着色器引擎132还用于执行不与图形相关的计算任务或者不作为图形处理管线134的“正常”操作的部分(例如,为了对针对图形处理管线134的操作所执行的处理进行增补而执行的定制操作)而执行的计算任务。应用126或在处理器102上执行的其他软件向apd116传输界定此类计算任务的程序(常常称为“计算着色器程序”)以供执行。

图3是示出在图2中所说明的图形处理管线134的额外细节的框图。图形处理管线134包括输入汇编器级302、世界空间管线304和像素管线306。输入汇编器级302对从处理器102接收的输入进行处理和格式化以供图形处理管线134处理。世界空间管线304执行顶点和基元操纵,从而将在三维世界空间中界定的对象转换为在屏幕空间中界定的三角形。像素管线306处理在屏幕空间中界定的三角形以产生输出到帧缓冲器308的像素色彩。可以将输入汇编器级302、世界空间管线304和像素管线306中的每一者实施为硬件(包括固定功能和可编程硬件)与软件的组合、实施为全硬件(包括全固定功能硬件、全可编程硬件,或其组合),或完全实施为在硬件处理器上执行的软件。

输入汇编器级302从用户填充的缓冲器(例如,在由处理器102执行的软件(例如,应用126)的请求下填充的缓冲器)读取原始数据,并且将所述数据汇编为基元以供管线的剩余部分使用。输入汇编器级302可以基于在用户填充的缓冲器中包括的原始数据而产生不同类型的基元。

世界空间管线304执行用于将从处理器102接收的输入转换为更适于渲染成屏幕像素的形式的功能性。更具体来说,世界空间管线304执行顶点阴影功能,在启用镶嵌的情况下的任选的镶嵌功能,以及在启用几何阴影的情况下的任选的几何阴影功能。

顶点阴影包括执行各种每顶点操作,例如变换、蒙皮、变形和每顶点照明。变换操作可以包括用于变换顶点的坐标的各种操作。这些操作可以包括建模变换、视角变换、投影变换、透视分割和视口变换中的一者或多者。在本文,此类变换被视为修改对其执行变换的顶点的坐标或“位置”。顶点阴影的其他操作可以修改除了坐标之外的属性。顶点阴影被部分地或完全地实施为将在一个或多个着色器引擎132上执行的顶点着色器程序。在一些示例中,顶点着色器程序是由处理器102提供并且是基于由计算机程序员预先编写的程序。驱动器122编译此类程序以产生具有适合于在着色器引擎132内执行的格式的顶点着色器程序。在其他示例中,顶点着色器程序是由驱动器122直接提供、存储在apd116内,或者通过任何其他技术上可行的手段而提供。

镶嵌通过对基元进行细分而将简单的基元转换为更复杂的基元。镶嵌涉及基于输入基元而产生用于镶嵌的小块,产生用于所述小块的一组样本,并且计算与用于所述小块的所述样本相对应的顶点的顶点位置。可以由在可编程处理单元202上执行的着色器程序部分或完全执行镶嵌。

几何阴影逐基元地执行顶点操作。可以经由几何阴影执行多种不同类型的操作,包括例如点冲刺扩展、动态粒子系统操作、毛发-翅片生成、阴影体积生成、单遍渲染到立方体图、每基元材料交换以及每基元材料设置等操作。可以由在可编程处理单元202上执行的着色器程序执行几何阴影的操作。

世界空间管线304将基元(通常为三角形)输出到像素管线306以便产生像素并且最终写入到帧缓冲器308。将帧缓冲器308的内容读出以显示于显示装置118上。像素管线306实施光栅化和像素阴影。

光栅化涉及确定哪些屏幕像素(或子像素样本)被特定基元覆盖。像素阴影涉及基于在世界空间管线304中产生的基元和光栅化的结果来确定屏幕像素的输出值。像素阴影可以包括施加来自纹理存储器的纹理。可以由在可编程处理单元202上执行的一个或多个着色器程序执行像素阴影的操作。在光栅化和阴影之后,像素管线306将结果写入到帧缓冲器308以供在显示装置118上显示。

输入汇编器级302的一个任务是识别从处理器102接收的输入索引流中的基元。所述索引是对存储在顶点缓冲器中的顶点的参考。对于输入汇编器级302进行的此分析,使用索引而不是它们参考的顶点,因为索引小于顶点并且需要处理更少的资源(例如,存储元件、电线等)。

从输入索引识别基元可能成为图形处理管线134的操作的瓶颈,因为图形处理管线134的多个部分使用识别基元的数据来用于各种目的,并且如果在特定时间量内得不到那个信息,那么管线的那些部分可能不能在那个时间期间执行有用的工作。

出于若干原因,处理从处理器102接收的输入顶点流是复杂的任务。输入顶点流作为索引流和指定基元拓扑(例如,线列表、线带、三角形列表、三角形带等)的元数据而被接收,所述基元拓扑指示索引将被解译以形成基元的方式。因此,可以基于所指定的基元拓扑来不同地解译同一组索引。另外,索引流常常包括一个或多个复位索引,所述复位索引是用于辅助解译输入索引流的特殊索引值。依据基元拓扑而以不同的方式解译复位索引。这些因素使得从输入索引流识别基元是复杂的任务。

apd116的高度并行性质进一步使此任务复杂化。更具体来说,需要输入汇编器级302并行地将基元提供给许多着色器引擎132,使得输入汇编器级302不成为多个着色器引擎132的操作的瓶颈。因此,如果输入汇编器级302消耗太多时间来识别基元,那么着色器引擎132可能不能在执行基元相关操作时满负荷。

一种用于将输入索引快速地分发到不同的着色器引擎132的技术是将输入索引流简单地划分为具有相等数目个索引的块并且将所述块发送到不同的着色器引擎132以进行处理。然而,此技术的一个问题在于,由于任何给定块中的复位索引的不同的数目和位置,由任何给定块表示的基元的实际数目可能有很大不同。后面是示例。在此示例中,基元拓扑是线列表。在此基元拓扑中,每两个索引指定不同的线。举例来说,索引1和索引2指定线,索引3和索引4指定线,索引5和索引6指定线,依此类推。如果两个索引的序列含有复位索引,那么那个序列被视为无效的基元。在此基元拓扑中,之后的索引块包括五条线:(在后面的示例中,“孤立地”示出所述块,这意味着不考虑先前的块或后续的块中的索引。然而,通常使用先前的块或后续的块来连续地解译块。换句话说,特定块的最老的索引可以与前一块的最新的索引形成基元。)

1、2、r、4、5、r、7、8、9、10、11、12

表1:索引的第一示例性块

在表1中,[1,2]是第一基元,[4,5]是第二基元(r是复位基元),[7,8]是第三基元,[9,10]是第四基元,并且[11,12]是第五条线。之后的索引块包括6个基元:

1、2、3、4、5、6、7、8、9、10、11、12

表2:索引的第二示例性块

在表2中,[1,2]是第一条线,[3,4]是第二条线,[5,6]是第三条线,[7,8]是第四条线,[9,10]是第五条线,并且[11,12]是第六条线。表1的块和表2的块都包括12个索引,但这两个块包括不同数目个基元。此差异说明将相等大小的索引块指派给不同的着色器引擎132以便执行每基元处理的方式可能会导致那些不同的着色器引擎132接收到不同量的工作,且因此一个着色器引擎132比另一着色器引擎132更空闲。

因此,本文提供用于从输入索引流快速地识别基元的技术。所述技术允许足够快速地识别基元,使得可以提取并打包所述基元以便有效并行地传输到不同的着色器引擎132进行处理。本文提供两种技术,每一种技术用于处理不同类型的基元拓扑。

在下文关于图5和图6论述的第一种技术用于对其来说每个新的索引不必与先前的索引来形成新的基元的基元拓扑。一般来说,此类型的基元拓扑包括带类型拓扑,例如线带、三角形带等,其中每个后续的索引与紧接在那个索引前面的索引形成基元。在此第一类型的基元拓扑中不包括一些带类型拓扑,例如四边形带,并且在此第一类型的基元拓扑中包括一些列表类型的拓扑,例如点列表。所述第一技术在本文可以称作“基于偏移的技术”。

在下文关于图7和图8论述的第二种技术用于对其来说索引块中的每个后续的索引具有产生新的基元的可能性的基元拓扑。一般来说,此类型的基元拓扑包括列表类型拓扑,例如线列表、线带等。所述第二种技术在本文可以称作“非基于偏移的技术”。将在下文参考本公开使这两种技术之间的差异更显而易见。

图4是根据示例的各种基元拓扑的说明。所述基元拓扑不包括每个可能的基元拓扑,而是包括许多最常用的拓扑。本领域技术人员将能够将本文描述的原理和技术应用于其他基元拓扑。所示出的每个基元拓扑说明若干顶点。针对每个顶点而说明的数字是参考所述顶点的索引。出于清楚说明基元拓扑起见,不关于图4论述复位索引。然而,在下文呈现的索引序列中包括的一个或多个复位索引将改变解译那些序列的方式。

三角形列表拓扑402是其中三个索引的每个序列界定不同三角形的拓扑。因此,索引序列0、1、2、3、4、5、6、7、8界定三个三角形:三角形[0,1,2]、三角形[3,4,5]和三角形[6,7,8]。将使用基于偏移的技术处理此基元拓扑,因为此基元拓扑的索引是按照三个(其为一个以上)索引的组进行检查来识别基元。

三角形带拓扑404是一种拓扑,其中在初始的三个索引之后,每个后续的索引与紧接在前面的两个索引形成新的三角形。因此,索引序列0、1、2、3、4、5产生四个三角形:三角形[0,1,2]、三角形[1,2,3]、三角形[2,3,4]和三角形[3,4,5]。将使用非基于偏移的技术来处理此基元拓扑,因为索引序列中的每个后续的索引具有产生新的基元的可能性。

线列表拓扑406是其中两个索引的每个序列界定不同线的拓扑。因此,索引序列0、1、2、3、4、5界定三条线:线[0,1]、线[2,3]和线[4,5]。将使用基于偏移的技术处理此基元拓扑,因为此基元拓扑的索引是按照两个索引的组进行检查。

线带拓扑408是一种拓扑,其中在初始的两个索引之后,每个后续的索引与前一索引形成新的线。因此,索引序列0、1、2、3、4产生四条线:线[0,1]、线[1,2]、线[2,3]和线[3、4]。将使用非基于偏移的技术来处理此基元拓扑,因为索引序列中的每个后续的索引具有产生新的基元的可能性。线环拓扑与线带拓扑相同,不同之处在于最后一个索引连接到第一个索引。

邻接的线列表拓扑410是其中四个索引的每个序列界定不同线的拓扑。每个序列的第二个索引和第三个索引界定线,而每个序列的第一个索引和最后一个索引界定那条所界定的线的邻接者。邻接索引指示用于几何阴影中的线的“连接性”。可以在例如轮廓检测、阴影体挤出和其他技术等技术中使用邻接。索引0、1、2、3、4、5、6、7的序列产生两条线:线[1,2](使用邻接的索引0和3)以及线[5,6](使用邻接的索引4和7)。将使用基于偏移的技术处理此基元拓扑,因为此基元拓扑的索引是按照四个索引的组进行检查。

邻接的三角形列表拓扑412是一种拓扑,其中大小索引的每个序列与邻接的索引一起界定不同的三角形。第一个索引、第三个索引和第五个索引界定三角形的顶点。第二个索引界定邻接于第一个索引和第三个索引的索引。第四个索引界定邻接于第三个索引和第五个索引的索引。第六个索引界定邻接于第一个索引和第五个索引的索引。序列0、1、2、3、4、5、6、7、8、9、10、11产生两个三角形:[0,2,4](具有邻接的顶点1、3和5)和[6,8,10](具有邻接的顶点7、9和11)。将使用基于偏移的技术处理此基元拓扑,因为此基元拓扑的索引是按照四个索引的组进行检查。

邻接的线列表拓扑414是一种拓扑,其中在初始的四个索引之后,每个后续的索引与紧接在前面的三个索引形成邻接的线。因此,序列0、1、2、3、4、5、6、7、8产生邻接的六条线:线[1,2](其中0和3作为邻接的顶点)、线[2,3](其中1和4作为邻接的顶点)、线[3,4](其中2和5作为邻接的顶点)、线[4,5](其中3和6作为邻接的顶点)、线[5,6](其中4和7作为邻接的顶点)和线[6,7](其中5和8作为邻接的顶点)。将使用非基于偏移的技术来处理此基元拓扑,因为索引序列中的每个后续的索引具有产生新的基元的可能性。

邻接的三角形带拓扑416是一种拓扑,其中在前六个顶点之后,每个额外的顶点可以与紧接在前面的五个顶点形成邻接的新的三角形。因此,序列0、1、2、3、4、5、6、7、8、9产生与1、3和6邻接的三角形0、2、4、与0、5和8邻接的三角形2、4、6,以及与2、7和9邻接的三角形4、6、8。在具有邻接拓扑416的三角形带中,每两个索引具有产生新的基元的可能性,因此使用基于偏移的技术。

四边形列表拓扑418是一种拓扑,其中四个索引的每个序列形成四边形类型基元。因此,索引0、1、2、3、4、5、6、7产生四边形[0,1,2,3]和四边形[4,5,6,7]。将使用基于偏移的技术处理此基元拓扑,因为此基元拓扑的索引是按照四个索引的组进行检查。

三角扇拓扑420是一种拓扑,其中第一个索引用作索引的后续序列的第一个索引。更具体来说,前三个索引形成第一三角形。后续的索引与所述第一个索引和紧接在所述后续的索引前面的索引形成三角形。第二个后续的索引与所述第一个索引和紧接在所述第二个后续的索引前面的索引形成三角形。因此,索引0、1、2、3、4、5产生三角形[0,1,2]、[0,2,3]、[0,3,4]和[0,4,5]。将使用非基于偏移的技术来处理此基元拓扑,因为索引序列中的每个后续的索引具有产生新的基元的可能性。

四边形带拓扑422是一种拓扑,其中在前四个索引之后,后续的每两个索引产生新的四边形基元。因此,前四个索引形成四边形,接下来的两个索引与在那接下来的两个索引前面的两个索引形成四边形,且依此类推。因此,索引0、1、2、3、4、5、6、7产生四边形[0,1,2,3]、[2,3,4,5]和[4,5,6,7]。将使用基于偏移的技术处理此基元拓扑,因为此基元拓扑的索引是按照两个索引的组进行检查。

多边形拓扑424是一种拓扑,其中一组索引形成单个多边形。此拓扑类似于被转换为一连串三角形的三角扇拓扑420。将使用非基于偏移的技术来处理此基元拓扑,因为索引序列中的每个后续的索引具有产生新的基元的可能性。

使用非基于偏移的技术来处理未示出的点列表和小块拓扑。未列出的其他拓扑将使用基于偏移的技术或非基于偏移的技术,这取决于每个后续的索引是否产生新的基元。输入汇编器级302基于每个后续的索引是否产生新的基元而确定是应用基于偏移的技术还是非基于偏移的技术。更具体来说,对于每个后续的索引产生新的基元的基元拓扑,输入汇编器级302使用非基于偏移的技术,且对于每个后续的索引不一定产生新的基元的基元拓扑,输入汇编器级302使用基于偏移的技术。

依据基元拓扑,将以上技术中的一者应用于索引序列以从索引识别基元。索引序列中的复位索引影响由那些索引界定基元的方式。在概念上并且一般来说,复位索引界定可以由其形成基元的索引的区段。复位索引还可以被视为“切割”索引流,使得可以在复位索引的任一侧上但不跨越复位索引形成基元。复位索引基于基元拓扑是列表类型还是带类型而影响由索引流界定基元的方式。

对于列表类型,通过索引的非重叠的序列形成基元,并且复位索引因此可以导致形成不完整基元的索引序列的早期终止。举例来说,被解译为三角形列表的索引序列1、2、3、4、5、r产生仅一个有效的基元:[1,2,3]。复位基元之所以防止索引4和索引5成为有效基元的部分是因为:1)以下事实:这些索引被解译为列表类型意味着索引4和索引5无法与3接合以形成另一基元;以及2)索引4和索引5不足以形成基元,因为基元拓扑(三角形类型)要求每个基元3个索引。

对于带类型,通过索引的重叠的序列形成基元,并且复位索引大体上界定可以由其形成基元的索引序列的终点。举例来说,被解译为三角形带的以上相同序列1、2、3、4、5、r将产生基元[1,2,3]、[2,3,4]和[3,4,5]。然而,一些带类型,例如四边形带,需要两个索引的序列,使得一些索引可能不能够并入到基元中。举例来说,被解译为四边形带的以上相同序列将仅产生基元[1,2,3,4]。可能形成不了额外的基元,因为基元[3,4,5,r]由于包括复位基元而无效。四边形带基元拓扑阻止了由索引2、3、4和5形成四边形。

对于带类型和列表类型基元拓扑,如果在复位索引之间存在不足数目个索引,那么那些索引形成不了基元。举例来说,被解译为三角形列表的序列r、2、r将产生不了有效的基元,因为单个索引2不足以形成三角形。

图5和图6描述用于基于基元拓扑从一组索引识别基元的基于偏移的技术。图5是根据示例用于在给定特定基元拓扑的情况下从可以包括复位索引的一组索引中识别基元的方法的流程图。虽然关于相对于图1至图3所示出和描述的系统进行描述,但应理解,在任何技术上可行的规则下,被配置成执行所述方法的任何系统属于本公开的范围。

方法500接受从索引缓冲器接收的索引块作为输入,所述索引块描述将要由图形处理管线134渲染的基元并且可以由(例如)在处理器102上执行的应用126填充。方法500还接受基元拓扑的识别作为输入,所述识别界定了索引块中的索引被解译以形成基元的方式。在一些示例中,每个块包括从索引缓冲器检索到的相等数目个索引。此外,可以在固定数目个时钟循环(例如,两个)内处理每个块,使得在给定数目个时钟循环内对大致相同数目个索引进行分析以识别基元。

如所示,方法500开始于步骤502,其中输入汇编器级302基于基元拓扑而划分输入的顶点块以形成初始的候选基元。更具体来说,输入汇编器级302确定索引的什么集合可能是基元并且将那些索引识别为初始的候选基元。对于其中可能是基元的索引集合不会重叠的基元拓扑,输入汇编器级302将由基元拓扑指定的大小的索引的连续序列识别为初始的候选基元。在一个示例中,基元拓扑是三角形列表。在三角形列表中,形成三角形的索引不会重叠。因此,输入汇编器级302将各自表示三角形列表的三角形的三个索引的连续索引序列识别为初始的候选基元。对于其中可以形成基元的索引会重叠的基元拓扑,输入汇编器级302将由基元拓扑指定的大小的重叠的索引序列识别为初始的候选基元。在一个示例中,基元拓扑是四边形带。在此基元拓扑中,在前两个索引之后,每两个额外的索引与紧接在前面的两个索引形成新的四边形。在此情形中,输入汇编器级302将被两个索引间隔开的四个索引的重叠的序列识别为初始的候选基元。应注意,此步骤未关注复位索引。初始的候选基元可以包括复位索引,在稍后步骤剔除所述复位索引。

在步骤504处,输入汇编器级302识别初始的候选基元中的每一者中的复位索引位置。在每个块中,索引按照最老的索引到最新的索引进行排序。同样地,每个初始的候选基元具有从最老的索引到最新的索引进行排序的索引。步骤504涉及识别具有复位索引的初始的候选基元中的最新的复位索引的位置。“位置”的范围是从0到s-1,其中“s”是每个初始的候选基元的大小(初始的候选基元中的索引的数目)。因此,对于三角形列表,位置的范围是从0到2。初始的候选基元中的最新的索引具有此范围中的最低的位置(即,0),并且初始的候选基元中的最老的索引具有此范围中的最高的位置。如果初始的候选基元具有复位索引,那么复位索引位置是最新的复位索引的位置。因此,如果初始的候选基元仅具有一个复位索引,那么最新的复位索引的位置是单个复位索引的位置。如果初始的候选基元具有两个或更多个复位索引,那么最新的复位索引的位置是所述复位索引的所述位置之外的最低编号的位置。如果初始的候选基元不具有复位索引,那么将复位索引位置记录为特殊值,在本文被称作“x”或“无复位索引”值。

在步骤506处,输入汇编器级302基于初始的候选基元中的复位索引的位置而确定用于产生最终的候选基元的偏移。更具体来说,输入汇编器级302产生初始的候选基元中的每一者的最终的候选基元。输入汇编器级302基于初始的候选基元的复位索引位置而将偏移指派给每个最终的候选基元。

将偏移指派给特定最终的候选基元的方式取决于比对应的初始的候选基元(还称为“前一初始的候选基元”)老一个基元的初始的候选基元是否包括复位索引。如果最终的候选基元和初始的候选基元处于索引块中的相同排序的位置(例如,最老的初始的候选基元对应于最老的最终的候选基元,第二最老的候选基元对应于第二最老的最终的候选基元,且依此类推),那么所述最终的候选基元对应于所述初始的候选基元。如果前一初始的候选基元包括复位基元,那么输入汇编器级302将指派给与前一初始的候选基元相对应的最终的候选基元的相同偏移值指派给所述最终的候选基元。如果前一初始的候选基元不包括复位基元,那么输入汇编器级302指派前一初始的候选基元的最新的复位索引的位置作为最终的候选基元的偏移。对于块的最老的最终的候选基元,所述前一初始的候选基元是前一块的最新的初始的候选基元。

在步骤508处,输入汇编器级302基于所确定的偏移而从索引块识别出应归入最终的候选基元的索引。每个最终的候选基元的索引包括所述块的与在“更老”的方向(例如,朝向所述块中的较老的索引)上移位了等于指派给那个最终的候选基元的偏移的数目个索引的对应的初始的候选基元相对应的索引。在一个示例中,块包括索引0、r、2、3、4、5。初始的候选基元包括[0,r,2]和[3,4,5]。第一个此类基元的复位索引位置是1并且第二个基元的复位索引位置是x。最终的候选基元包括[0,r,2]而不是[3,4,5]、[2,3,4],因为第二最终的候选基元的偏移是1(从第一初始的候选基元指派)。此偏移致使最终的候选基元的索引的位置朝向所述块的“更老”端移位1个位置。

在步骤508处,输入汇编器级302移除包括复位索引的最终的候选基元。剩下的最终的候选基元是由索引块根据指定的基元拓扑而界定的基元。继续以上示例,最终的候选基元[0,r,2]因为不是有效基元而被移除。将这些最终的候选基元提供给世界空间管线304进行处理,所述世界空间管线使用基元识别信息,例如镶嵌、几何着色器、基元剔除等。

图6说明用于从索引块识别基元的基于偏移的技术的示例性应用。示出了索引块602,并且所述索引块按照从最老到最新(1是最老,21是最新)的次序包括索引1、2、3、r、5、6、7、r、9、10、11、12、13、r、r、16、17、18、19、20、21。首先(步骤502),输入汇编器级302基于三角形列表的基元拓扑来划分块602以产生初始的候选基元604,其中三个索引的每个后续的集合形成不同的三角形。因此,输入汇编器级302产生包括索引[1,2,3]的初始的候选基元604(1)、包括索引[r,5,6]的初始的候选基元604(2)、包括索引[7,r,9]的初始的候选基元604(3)、包括索引[10,11,12]的初始的候选基元604(4)、包括索引[13,r,r]的初始的候选基元604(5)、包括索引[16,17,18]的初始的候选基元604(6),以及包括索引[19,20,21]的初始的候选基元604(7)。

接下来(步骤504),输入汇编器级302确定初始的候选基元604中的每一者中的复位索引的最新的位置。初始的候选基元604(1)不具有复位索引并且因此被指派“x”作为复位索引位置。初始的候选基元604(2)在位置2处具有最新的复位索引。(索引5和6分别处于位置1和0。)因此,初始的候选基元604(2)被指派“2”作为复位索引位置。初始的候选基元604(3)在位置1处具有最新的复位索引并且因此被指派“1”作为复位索引位置。初始的候选基元604(4)不具有复位索引并且因此被指派复位索引位置“x”。初始的候选基元604(5)具有两个复位索引,但最新的复位索引处于位置0。因此,初始的候选基元604(5)被指派复位索引位置“0”。初始的候选基元604(6)和初始的候选基元604(7)都不具有复位索引并且因此被指派复位索引位置“x”。可以使用适当的逻辑门(例如,比较器等)来实现硬件对复位索引位置的指派。

使用一连串多路复用器608来识别最终的候选基元614的偏移。提供不同的2:1多路复用器608来用于且对应于初始的候选基元604中的不同者,并且因此对应于最终的候选基元614中的不同者。每个多路复用器608根据与所述多路复用器608相关联的初始的候选基元604的复位索引位置以及从前一多路复用器608接收的偏移值而选择转发到紧接在后面的多路复用器608的偏移值。所述选择是基于与所述多路复用器608相关联的初始的候选基元604的复位索引位置是否等于x。如果复位索引位置等于x,那么多路复用器608选择转发来自前一多路复用器608的值。对于块的最老的初始的候选基元604,前一多路复用器608是前一块的最后一个多路复用器608。如果复位索引位置不等于x,那么多路复用器608选择转发与所述多路复用器608相关联的初始的候选基元604的复位索引位置。如果多路复用器608处于多路复用器608的序列中的与初始的候选基元604在初始的候选基元604的序列中相同的位置,那么所述多路复用器608与初始的候选基元604相关联。因此,第一多路复用器608(1)与第一初始的候选基元604(1)相关联,第二多路复用器608(2)与第二初始的候选基元604(2)相关联,且依此类推。

在图6中说明的示例中,第一多路复用器608(1)选择转发来自前一块的最后一个多路复用器的最后一个多路复用器608的复位索引位置,因为初始的候选基元604(1)的复位索引位置等于x。第二多路复用器608(2)选择转发初始的候选基元604(2)(示出为606(2))的等于“2”的复位索引位置。第三多路复用器608(3)选择转发等于“1”的初始的候选基元604(3)的复位索引位置。第四多路复用器608(4)选择相同的值“1”。第五多路复用器、第六多路复用器和第七多路复用器608选择转发“0”、“0”和“0”,如图示。

针对任何特定的最终的候选基元614而选择的偏移(在元件610中示出)(步骤506)是与最终的候选基元614相关联的多路复用器608从与前一最终的候选基元614相关联的多路复用器608接收到的复位索引位置。

在图6中说明的示例中,第一最终的候选基元614(1)的偏移是从前一多路复用器608接收到的偏移。第二最终的候选基元614(2)的偏移是从前一多路复用器608(1)接收到的等于“0”的偏移。第三偏移值、第四偏移值、第五偏移值、第六偏移值和第七偏移值分别是“2”、“1”、“1”、“0”和“0”。

输入汇编器级302基于所述偏移来确定最终的候选基元614的索引(步骤508)。更具体来说,任何特定的最终的候选基元614的索引被选择为将在以下情况下产生的索引:对应的初始的候选基元604曾朝向块602中的较老的索引移位了最终的候选基元614的偏移。

在图6中说明的示例中,在最终的候选基元614的索引612的集合内,前两个最终的候选基元614包括与对应的初始的候选基元604相同的顶点,因为前两个最终的候选基元的偏移是“0”。第三最终的候选基元614(3)具有偏移“2”。第三最终的候选基元614(3)中的索引被选择为将通过以下操作而产生的索引:使第三初始的候选基元604(3)朝向块602的更老的端移位等于第三最终的候选基元614(3)的偏移的数目个索引。因此,第三最终的候选基元614(3)具有通过使对应于第三初始的候选基元604(3)的“窗口”向左移位两个索引而获得的索引[5,6,7],而不是[7,r,9]。通过类似的方式,第四最终的候选基元614(4)具有通过使第四初始的候选基元604(4)的“窗口”向左移位一个索引而获得的索引(因为第四最终的候选基元614(4)的偏移是“1”),所述索引包括索引[9,10,11]。第五最终的候选基元614(5)也具有通过使第五初始的候选基元604(5)的窗口向左移位1而获得的索引,从而获得[12,13,r]。第六最终的候选基元614(6)和第七最终的候选基元614(7)具有与对应的初始的候选基元604相同的索引,因为那些最终的候选基元614的偏移值是0。

输入汇编器级302检查块602的最终的候选基元集合620中的最终的候选基元614中的每一者。包括复位索引的最终的候选基元614被作为无效基元624而丢弃。不包括复位索引的最终的候选基元614被视为输出基元622,并且经过组织和转发到世界空间管线304以供世界空间管线304的对基元信息进行操作的部分处理。

可以在一个或两个计算机时钟循环内执行基于偏移的技术,这取决于块602是否包括任何复位基元。如果块不包括复位基元,那么初始的候选基元604被视为输出基元622并且可以被转发到世界空间管线304进行处理。

如果存在复位基元,那么在一些实现方式中,在与识别最终的候选基元614中的索引不同的时钟循环内确定初始的候选基元604中的复位索引位置。将数据串行地传递穿过多路复用器608,但可以有效地实施2:1多路复用器,使得跨越用于块602的所有多路复用器608的总延迟小到足以符合在单个时钟循环内。可以基于基元拓扑来改变块的大小,以确保所使用的多路复用器608的数目不超过与一个时钟循环相对应的时间。

通过调整初始的候选基元604和最终的候选基元614的大小来适应使用关于图5和图6所描述的基于偏移的技术的不同的基元拓扑。举例来说,线列表将使用具有两个索引的候选基元,四边形列表将使用具有四个索引的候选基元,且依此类推。对于特定基元拓扑,候选基元可以重叠。举例来说,四边形带具有四个索引大小的候选基元,但这些基元可以重叠(例如,输入顶点0、1、2、3、4、5产生四边形[0,1,2,3]和[2,3,4,5])。

图7和图8描述用于基于基元拓扑从一组索引识别基元的非基于偏移的技术。图7是根据示例用于在给定特定基元拓扑的情况下从可以包括复位索引的一组索引中识别基元的方法的流程图。虽然关于相对于图1至图3所示出和描述的系统进行描述,但应理解,在任何技术上可行的规则下被配置成执行所述方法的任何系统属于本公开的范围。

如所示,方法700开始于步骤702,其中输入汇编器级302基于基元拓扑来划分索引以形成候选基元。更具体来说,对于使用非基于偏移的技术的基元拓扑,初始数目个索引形成第一基元,其中所述数目是基于基元拓扑。随后,每个后续的索引与紧接在前面的索引形成基元。在一个示例中,基元拓扑是三角形带。在此基元拓扑中,前三个索引形成第一三角形。下一个索引与第一三角形的最后两个索引形成另一三角形,且依此类推。候选基元包括以此方式识别的所有基元。

在步骤704处,输入汇编器级302删除包括复位索引的所有候选基元。剩余的候选基元是输出到世界空间管线304进行处理的最终基元。

在图8的示例中,示出了包括索引1、2、3、r、5、6、7、r、9、10、11、12、13、r、r、16、17、18、19、20和21的索引块802。基元拓扑在此示例中是三角形带。输入汇编器级302根据前三个索引[1,2,3]形成第一候选基元806(1)。输入汇编器级302形成每个后续的索引的新的候选基元。因此,输入汇编器级302根据索引[2,3,r]形成第二候选基元806(2)。第三候选基元806(3)包括索引[3,r,5]。第四候选基元806(4)包括索引[r,5,6]。第五候选基元806(5)包括索引[5,6,7],且依此类推。输出基元808包括不包括复位顶点的所有候选基元806。这些输出基元808被传输到世界空间管线304进行处理。

本文提供了一种用于从一组索引识别基元的方法。所述方法包括识别所述一组索引的基元拓扑,其中所述基元拓扑指定在基元中包括的索引的数目。所述方法还包括从所述一组索引识别候选基元,所述候选基元各自包括在基元中包括的根据所述基元拓扑的所述数目个索引。所述方法还包括丢弃包括复位基元的候选基元以获得输出基元。所述方法还包括将所述输出基元转发到世界空间管线以进行每基元处理。

还提供了一种加速处理装置。所述加速处理装置包括一个或多个着色器引擎和图形处理管线,所述图形处理管线包括世界空间管线和输入汇编器级。所述输入汇编器级被配置成:通过识别一组索引的基元拓扑而从所述一组索引识别基元拓扑,其中所述基元拓扑指定在基元中包括的索引的数目;从所述一组索引识别候选基元,所述候选基元各自包括在基元中包括的根据所述基元拓扑的所述数目个索引;丢弃包括复位基元的候选基元以获得输出基元;以及将所述输出基元转发到世界空间管线以进行每基元处理。

还提供了一种计算机系统。所述计算机系统包括处理器和加速处理装置。所述加速处理装置包括一个或多个着色器引擎和图形处理管线,所述图形处理管线包括世界空间管线和输入汇编器级。所述输入汇编器级被配置成:通过识别一组索引的基元拓扑而从所述一组索引识别基元拓扑,其中所述基元拓扑指定在基元中包括的索引的数目;从所述一组索引识别候选基元,所述候选基元各自包括在基元中包括的根据所述基元拓扑的所述数目个索引;丢弃包括复位基元的候选基元以获得输出基元;以及将所述输出基元转发到世界空间管线以进行每基元处理。

应理解,基于本文公开内容,许多变化是可能的。虽然特征和元件在上文以特定组合进行描述,但是每个特征或元件可以在不具有其他特征和元件的情况下单独使用,或者在具有或不具有其他特征和元件的情况下以各种组合来使用。

可以在通用计算机、处理器或处理器核心中实施所提供的方法。举例来说,合适的处理器包括通用处理器、专用处理器、常规处理器、数字信号处理器(dsp)、多个微处理器、与dsp核心联合的一个或多个微处理器、控制器、微控制器、专用集成电路(asic)、现场可编程门阵列(fpga)电路、任何其他类型的集成电路(ic)和/或状态机。可以通过使用经过处理的硬件描述语言(hdl)指令的结果以及包括网表的其他中间数据(所述指令能够存储在计算机可读介质上)来配置制造过程而制造所述处理器。此类处理的结果可以是集成电路布图设计,其随后用于半导体制造过程中来制造实施实施方案的各方面的处理器。

本文提供的方法或流程图可以实施于计算机程序、软件或固件中,所述计算机程序、软件或固件并入非暂时性计算机可读存储介质中以供通用计算机或处理器执行。非暂时性计算机可读存储介质的示例包括只读存储器(rom)、随机存取存储器(ram)、寄存器、高速缓冲存储器、半导体存储器装置、磁性介质(例如内部硬盘和可装卸盘、磁光介质)以及光学介质,例如cd-rom盘和数字多功能盘(dvd)。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1