用于执行镶嵌化操作的图形处理单元及其方法转让专利

申请号 : CN201610153631.6

文献号 : CN106340054B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 丛培贵赖守仁吕彥宏蔡松芳吕坚平

申请人 : 联发科技股份有限公司

摘要 :

本发明提出一种用于执行镶嵌化操作的图形处理单元及其方法。所述方法包括以下步骤:从第一命令队列中加载顶点着色命令至着色器模块;执行顶点着色命令以计算顶点的变化,从而利用顶点作为第一输入数据;存储第一镶嵌化处理阶段命令至第二命令队列;加载第一镶嵌化处理阶段命令至着色器模块;以及执行第一镶嵌化处理阶段命令以计算第一镶嵌化处理阶段的输出,从而利用顶点的变化作为第二输入数据执行第一镶嵌化处理阶段。顶点着色命令由第一处理单元存储至第一命令队列。顶点的变化和第一镶嵌化处理阶段的输出被存储至图形处理单元的高速缓存。本发明所提供的用于执行镶嵌化操作的图形处理单元及其方法,可更加灵活和自主地处理相关的计算。

权利要求 :

1.一种执行镶嵌化操作的渲染方法,其特征在于,所述渲染方法由图形处理单元执行,所述图形处理单元包括着色器模块、非着色器模块和高速缓存器,用以执行一个或多个镶嵌化处理阶段,所述渲染方法包括以下步骤:利用多个顶点作为第一输入数据来执行顶点着色操作,其包括:

从第一命令队列中加载顶点着色命令至所述着色器模块,其中,

所述顶点着色命令由第一处理单元存储至所述第一命令队列中;以及

执行所述顶点着色命令以计算所述多个顶点的变化;和

利用所述多个顶点的变化作为第二输入数据来执行所述一个或多个镶嵌化处理阶段中的第一镶嵌化处理阶段,其包括:存储第一镶嵌化处理阶段命令至第二命令队列;

从所述第二命令队列中加载所述第一镶嵌化处理阶段命令至所述着色器模块;及执行所述第一镶嵌化处理阶段命令以计算第一镶嵌化处理阶段的输出,其中,将所述多个顶点的变化和所述第一镶嵌化处理阶段的输出存储至所述高速缓存器;

其中,执行所述第一镶嵌化处理阶段的步骤进一步包括:

至少根据所述多个顶点的变化的大小,计算所述第一镶嵌化处理阶段的输出的大小;

根据所述第一镶嵌化处理阶段的输出的大小和所述高速缓存器的容量从而确定所述第一镶嵌化处理阶段命令的数量;以及检测对所述多个顶点的变化的计算是否完成,并将完成所述多个顶点的变化的计算作为条件来触发通过内核入列的方式存储所述第一镶嵌化处理阶段命令至所述第二命令队列。

2.如权利要求1所述的执行镶嵌化操作的渲染方法,其特征在于,所述第一镶嵌化处理阶段为镶嵌化控制着色器阶段和镶嵌化图元生成器阶段的其中之一。

3.如权利要求1所述的执行镶嵌化操作的渲染方法,其特征在于,所述第一处理单元为中央处理单元和数字信号处理器的其中之一。

4.如权利要求1所述的执行镶嵌化操作的渲染方法,其特征在于,所述第一镶嵌化处理阶段命令的数量为N,而所述第一镶嵌化处理阶段的输出包括N个第一工作组,其中,所述N个第一工作组的其中之一是由所述着色器模块根据所述多个顶点的变化的至少一部分而执行所述N条第一镶嵌化处理阶段命令的其中之一计算而来,且N为正整数。

5.如权利要求4所述的执行镶嵌化操作的渲染方法,其特征在于,所述渲染方法进一步包括利用所述N个第一工作组的其中之一作为第三输入数据来执行所述多个镶嵌化处理阶段中的第二镶嵌化处理阶段,其包括:根据所述N个第一工作组的其中之一的大小和所述第二镶嵌化处理阶段的一个或多个参数从而计算第二镶嵌化处理阶段的输出的大小;

根据所述第二镶嵌化处理阶段的输出的大小和所述高速缓存器的容量从而确定第二镶嵌化处理阶段命令的数量;

检测对所述N个第一工作组的其中之一的计算是否完成;

当检测到对所述N个第一工作组的其中之一的计算完成时,通过内核入列的方式从而存储所述第二镶嵌化处理阶段命令至所述第二命令队列;

从所述第二命令队列中加载所述第二镶嵌化处理阶段命令至所述着色器模块;及执行所述第二镶嵌化处理阶段命令用以从所述N个第一工作组的其中之一计算所述第二镶嵌化处理阶段的输出,其中,所述第二镶嵌化处理阶段的输出存储至所述高速缓存器中。

6.如权利要求5所述的执行镶嵌化操作的渲染方法,其特征在于,所述第二镶嵌化处理阶段为镶嵌化图元生成器阶段和镶嵌化评估着色器阶段的其中之一,其中,所述第二镶嵌化处理阶段命令的数量为M且所述第二镶嵌化处理阶段的输出包括M个第二工作组,其中,所述M个第二工作组的其中之一是由所述着色器模块根据所述N个第一工作组的其中之一的至少一部分而执行所述M条第二镶嵌化处理命令的其中之一计算而来,且M为正整数。

7.如权利要求6所述的执行镶嵌化操作的渲染方法,其特征在于,所述第二镶嵌化处理阶段为所述镶嵌化评估着色器阶段,且所述渲染方法进一步包括:执行几何图形着色阶段以处理所述M个第二工作组,其中,对所述M个第二工作组的其中两个工作组的处理包括:依序将存储器缓冲区中的第一存储空间分配给对应于所述两个第二工作组的其中一个工作组的几何图形着色阶段的输出,并将所述存储器缓冲区中的第二存储空间分配给对应于所述两个第二工作组中另外一个工作组的几何图形着色阶段的输出;

检测对所述两个第二工作组的计算是否完成;

当检测到对所述两个第二工作组的计算完成时,通过内核入列的方式存储两条几何图形着色阶段命令至所述第二命令队列;

从所述第二命令队列中加载所述两条几何图形着色阶段命令至所述着色器模块;

执行所述两条几何图形着色阶段命令用以从所述两个第二工作组计算几何图形着色阶段的输出;以及将对应于所述两个第二工作组中其中一个工作组的所述几何图形着色阶段的输出存储至所述存储器缓存区的所述第一存储空间中,并将对应于所述两个第二工作组中另外一个工作组的所述几何图形着色阶段的输出存储至所述存储器缓存区的所述第二存储空间中。

8.如权利要求1所述的执行镶嵌化操作的渲染方法,其特征在于,所述加载所述顶点着色命令的步骤是由驱动程序发起的,且所述多个顶点的数量是由所述驱动程序确定的。

9.如权利要求1所述的执行镶嵌化操作的渲染方法,其特征在于,进一步包括:执行存储管理任务,以在所述高速缓存器的利用率高于特定水平时,通过暂停执行所述顶点着色命令或所述第一镶嵌化处理阶段命令,从而调节所述高速缓存器的利用率。

10.一种执行镶嵌化操作的图形处理单元,其特征在于,所述图形处理单元执行顶点着色操作和一个或多个镶嵌化处理阶段,所述图形处理单元包括:非着色器模块,用于:

在执行所述顶点着色操作的过程中,从第一命令队列中加载顶点着色命令,其中,所述顶点着色命令由第一处理单元存储至所述第一命令队列中;以及在执行所述一个或多个镶嵌化处理阶段中的第一镶嵌化处理阶段的过程中,从第二命令队列中加载第一镶嵌化处理阶段命令;

着色器模块,用于:

在执行所述顶点着色操作的过程中,执行来自所述非着色器模块的所述顶点着色命令以计算多个顶点的变化,其中,所述顶点着色操作利用所述多个顶点作为第一输入数据;

在执行所述一个或多个镶嵌化处理阶段中的所述第一镶嵌化处理阶段的过程中,存储所述第一镶嵌化处理阶段命令至所述第二命令队列;及在执行所述一个或多个镶嵌化处理阶段中的所述第一镶嵌化处理阶段的过程中,执行来自所述非着色器模块的所述第一镶嵌化处理阶段命令用以利用所述多个顶点的变化作为第二输入数据从而计算第一镶嵌化处理阶段的输出;及高速缓存器,用以存储所述多个顶点的变化和所述第一镶嵌化处理阶段的输出;

其中,所述着色器模块进一步用以在执行所述一个或多个镶嵌化处理阶段中的所述第一镶嵌化处理阶段的过程中,至少完成以下任务:至少根据所述多个顶点的变化的大小,计算所述第一镶嵌化处理阶段的输出的大小;

根据所述第一镶嵌化处理阶段的输出的大小和所述高速缓存器的容量从而确定所述第一镶嵌化处理阶段命令的数量;及检测对所述多个顶点变化的计算是否完成,并将完成所述多个顶点的变化的计算作为条件触发通过内核入列的方式存储所述第一镶嵌化处理阶段命令至所述第二命令队列。

11.如权利要求10所述的执行镶嵌化操作的图形处理单元,其特征在于,所述第一镶嵌化处理阶段为镶嵌化控制着色器阶段和镶嵌化图元生成器阶段的其中之一。

12.如权利要求10所述的执行镶嵌化操作的图形处理单元,其特征在于,所述第一处理单元为中央处理单元和数字信号处理器其中之一。

13.如权利要求10所述的执行镶嵌化操作的图形处理单元,其特征在于,所述第一镶嵌化处理阶段命令的数量为N,而所述第一镶嵌化处理阶段的输出包括N个第一工作组,其中,所述N个第一工作组的其中之一是由所述着色器模块根据所述多个顶点的变化的至少一部分而执行所述N个第一镶嵌化处理命令的其中之一计算而来,且N为正整数。

14.如权利要求13所述的执行镶嵌化操作的图形处理单元,其特征在于,所述着色器模块进一步用以在执行所述多个镶嵌化处理阶段中的第二镶嵌化处理阶段的过程中,利用所述N个第一工作组的其中之一作为第三输入数据以至少完成以下任务:根据所述N个第一工作组的其中之一的大小和所述第二镶嵌化处理阶段的一个或多个参数从而计算第二镶嵌化处理阶段的输出的大小;

根据所述第二镶嵌化处理阶段的输出的大小和所述高速缓存器的容量从而确定第二镶嵌化处理阶段命令的数量;

检测对所述N个第一工作组中的其中之一的计算是否完成;

当检测到对所述N个第一工作组中的其中之一的计算完成时,通过内核入列的方式从而存储所述第二镶嵌化处理阶段命令至所述第二命令队列;以及执行所述第二镶嵌化处理阶段命令以用从所述N个第一工作组的其中之一计算所述第二镶嵌化处理阶段的输出,其中,从所述第二命令队列加载所述第二镶嵌化处理阶段命令至所述着色器模块,且存储所述第二镶嵌化处理阶段的输出至所述高速缓存器中。

15.如权利要求14所述的执行镶嵌化操作的图形处理单元,其特征在于,所述第二镶嵌化处理阶段为镶嵌化图元生成器阶段和镶嵌化评估着色器阶段中之一,且所述第二镶嵌化处理阶段命令的数量为M,所述第二镶嵌化处理阶段的输出包括M个第二工作组,其中,所述M个第二工作组的其中之一是由所述着色器模块根据所述N个第一工作组的其中之一的至少一部分而执行所述M条第二镶嵌化处理命令的其中之一计算而来,且M为正整数。

16.如权利要求15所述的执行镶嵌化操作的图形处理单元,其特征在于,所述第二镶嵌化处理阶段为所述镶嵌化评估着色器阶段,且所述着色器模块进一步用以通过处理所述M个第二工作组从而执行几何图形着色阶段,其中,对所述M个第二工作组的其中两个工作组的处理包括:依序将存储器缓冲区中的第一存储空间分配给对应于所述两个第二工作组的其中一个工作组的几何图形着色阶段的输出,并将所述存储器缓冲区中的第二存储空间分配给对应于所述两个第二工作组中另外一个工作组的几何图形着色阶段的输出;

检测对所述两个第二工作组的计算是否完成;

当检测到对所述两个第二工作组的计算完成时,通过内核入列的方式存储两条几何图形着色阶段命令至所述第二命令队列;

执行所述两条几何图形着色阶段命令用以从所述两个第二工作组计算几何图形着色阶段的输出;以及将对应于所述两个第二工作组中其中一个工作组的所述几何图形着色阶段的输出存储至所述存储器缓存区的所述第一存储空间中,并将对应于所述两个第二工作组中另外一个工作组的所述几何图形着色阶段的输出存储至所述存储器缓存区的所述第二存储空间中。

17.如权利要求10所述的执行镶嵌化操作的图形处理单元,其特征在于,所述加载所述顶点着色命令的步骤是由驱动程序发起的,且所述多个顶点的数量是由所述驱动程序确定的。

18.如权利要求10所述的执行镶嵌化操作的图形处理单元,其特征在于,进一步包括存储管理模块,所述存储管理模块用以:执行存储管理任务,以在所述高速缓存器的利用率高于特定水平时,通过暂停执行所述顶点着色命令或所述第一镶嵌化处理阶段命令,从而调节所述高速缓存器的利用率。

说明书 :

用于执行镶嵌化操作的图形处理单元及其方法

技术领域

[0001] 本发明涉及图形处理单元和用于所述图形处理单元的操作方法,更具体地,涉及一种使用所述图形处理单元进行镶嵌化处理操作的技术。

背景技术

[0002] 图形处理单元(graphics processing unit,GPU)可执行包括镶嵌化处理(tessellation)(也称为曲面细分处理)在内的图形处理操作。为了对复杂形状进行渲染以产生用于显示的图形图像,通常需要将复杂形状转换成渲染图元的网格(mesh),例如,多个三角形。而将复杂形状转换为渲染图元的网格的处理过程被称作镶嵌化处理。换言之,镶嵌化处理是指将物体表面的一部分(称为碎片(patch))划分为多个更小的部分,并将这些更小的部分互联起来。通常,镶嵌化处理近似于将粗糙表面转换为多个图元以产生更高分辨率的表面。然而,接收高分辨率表面所包含的信息会导致带宽效率低下,因为定义高分辨率表面所需要的信息量要比定义粗糙表面所需要的信息量大得多。
[0003] 过去,CPU(central processing unit,中央处理单元)和GPU通常以主从模式协同工作。在主从模式下,CPU发送指令以利用GPU来执行特定的渲染应用程序。随着技术的进步,GPU自身可生成指令,并随后执行这些指令。例如,在OpenCL 2.0中,GPU允许将命令和/或指令加入自身的队列之中,而无需同CPU进行互动,这被称作是内核入队(kernel enqueueing)。简言之,内核入队可使内核独立地加入至单独的设备中,且内核可只依靠其自身而将代码加入队列并控制代码的执行顺序。因此,图形处理单元可以更加灵活和自主地处理相关的计算。

发明内容

[0004] 有鉴于此,本发明提出一种用于执行镶嵌化操作的图形处理单元及其方法。
[0005] 依据本发明的实施方式,提供一种执行镶嵌化操作的渲染方法。所述渲染方法由图形处理单元执行。所述图形处理单元包括着色器模块、非着色器模块和高速缓存器,用以执行一个或多个镶嵌化处理阶段。所述渲染方法包括以下步骤:利用多个顶点作为第一输入数据来执行顶点着色操作,其包括:从第一命令队列中加载顶点着色命令至所述着色器模块,其中,所述顶点着色命令由第一处理单元存储至所述第一命令队列中;以及执行所述顶点着色命令以计算所述多个顶点的变化。利用所述多个顶点的变化作为第二输入数据来执行所述一个或多个镶嵌化处理阶段中的第一镶嵌化处理阶段,其包括:存储第一镶嵌化处理阶段命令至第二命令队列;从所述第二命令队列中加载所述第一镶嵌化处理阶段命令至所述着色器模块;及执行所述第一镶嵌化处理阶段命令以计算第一镶嵌化处理阶段的输出。其中,将所述多个顶点的变化和所述第一镶嵌化处理阶段的输出存储至所述高速缓存器。
[0006] 依据本发明的另一实施方式,提供一种执行镶嵌化操作的图形处理单元。,所述图形处理单元执行顶点着色操作和一个或多个镶嵌化处理阶段。所述图形处理单元包括非着色器模块、着色器模块和高速缓存。非着色器模块,用于:在执行所述顶点着色操作的过程中,从第一命令队列中加载顶点着色命令,其中,所述顶点着色命令由第一处理单元存储至所述第一命令队列中;以及在执行所述一个或多个镶嵌化处理阶段中的第一镶嵌化处理阶段的过程中,从第二命令队列中加载第一镶嵌化处理阶段命令。着色器模块,用于:在执行所述顶点着色操作的过程中,执行来自所述非着色器模块的所述顶点着色命令以计算多个顶点的变化,其中,所述顶点着色操作利用所述多个顶点作为第一输入数据;在执行所述一个或多个镶嵌化处理阶段中的所述第一镶嵌化处理阶段的过程中,存储所述第一镶嵌化处理阶段命令至所述第二命令队列;及在执行所述一个或多个镶嵌化处理阶段中的所述第一镶嵌化处理阶段的过程中,执行来自所述非着色器模块的所述第一镶嵌化处理阶段命令用以利用所述多个顶点的变化作为第二输入数据从而计算第一镶嵌化处理阶段的输出。高速缓存,用以存储所述多个顶点的变化和所述第一镶嵌化处理阶段的输出。
[0007] 本发明所提出的用于执行镶嵌化操作的图形处理单元及其方法,可更加灵活和自主地处理相关的计算。

附图说明

[0008] 本发明可通过阅读后续的详细描述以及参照附图所作的示例,从而进行更加全面的理解。
[0009] 图1揭示了从图形处理管线的角度描述的一种图形处理单元的示意图;
[0010] 图2为本发明一实施例所揭示的一种图形处理单元的方框图;
[0011] 图3为本发明一实施例所揭示的用于镶嵌化处理操作的各种功能阶段之间的示例性输出映射关系的示意图;
[0012] 图4为本发明一实施例所揭示的用于镶嵌化处理阶段的输出的一种数据排列结构的示意图;
[0013] 图5为本发明又一实施例所揭示的用于执行镶嵌化处理操作的一种渲染方法的流程图;
[0014] 图6为本发明一实施例的一种几何图形着色阶段的输出的时序图。

具体实施方式

[0015] 以下描述是实施本发明的最佳预期模式。但是,这些描述是为了说明本发明的一般原理,而并非是用来限制本发明。最佳地,本发明的范围通过所附的权利要求而确定。
[0016] 图1是从图形处理管线角度描述的图形处理单元100的示意图。图形处理单元100以图形处理管线的方式而实现,其包括多个着色阶段,例如,顶点着色器(vertex shader,VS)阶段10、镶嵌化控制着色器(tessellation control shader,TCS)阶段12、镶嵌化图元生成器(tessellation primitive generator,TPG)阶段14、镶嵌化评估着色器(tessellation evaluation shader,TES)阶段16和几何图形着色器(geometry shader,GS)阶段18。当然,图形处理单元100可包括比这里所揭示的着色阶段更多的着色阶段,或者,在一些示例中,图形处理单元100可不必包括所有上述的着色阶段。这些着色阶段可由图形处理单元100上所执行的软件或固件而定义,或者,其也可通过用来执行特定功能的硬件的固定功能单元而定义(例如,镶嵌化图元生成器阶段通常由固定功能单元实现)。图形处理单元100上所执行的软件或固件可称为着色器,其可为用户提供功能弹性,因为用户可对着色器进行设计从而以任意合理的方式来执行设计的任务。为了执行所示的着色阶段,着色器可设计成程序代码,其以顶点着色命令开始,并以几何图形着色命令结束,中间掺插着镶嵌化控制着色命令、镶嵌化图元生成器命令和镶嵌化评估着色命令,上述命令可(例如由CPU)发送至图形处理单元100,以执行相应的着色阶段。开始时,CPU可在发出顶点着色命令的同时,提供多个顶点至图形处理单元100。
[0017] 对于镶嵌化处理中的一个碎片,其相关的顶点被称为控制点。顶点着色器阶段10可对多个顶点执行逐顶点操作(per-vertex operation),例如,变换(transformation)、皮肤化(skinning)、变形(morphing)和逐顶点照明(per-vertex lighting)等。当完成了顶点着色器阶段10之后,图形处理单元100执行镶嵌化控制着色命令从而执行镶嵌化控制着色器阶段12。镶嵌化控制着色器阶段12可接收由顶点着色器阶段10所处理的碎片中的控制点,对控制点进行处理,并输出处理后的碎片中的控制点。换言之,镶嵌化控制着色器阶段12接收输入碎片,对输入碎片进行处理并输出处理后的输出碎片。此处可执行各种功能以处理该输入碎片,例如,修改控制点的坐标以改变控制点的位置,或者,添加或删除某些控制点。根据应该添加多少图元的判断,镶嵌化控制着色器阶段12可输出一些值(在Direct3D 
11应用中被称为镶嵌化因数(tessfactor)),这些值指明将要添加多少图元至碎片中。在镶嵌化控制着色器阶段12之后,图形处理单元100可执行镶嵌化图元生成器命令以执行镶嵌化图元生成器阶段14。镶嵌化图元生成器阶段14可根据镶嵌化控制着色器阶段12的输出值从而将碎片细化(例如,分割)为多个图元,并在标准坐标系(如,重心(Bary-Centric)坐标系(u,v,w))中将碎片中多个图元的顶点输出至镶嵌化评估着色器阶段16中。镶嵌化评估着色器阶段16可用来将从镶嵌化图元生成器阶段14中接收的顶点坐标映射至所述碎片上。一旦完成了镶嵌化评估着色器阶段16,图形处理单元100可转而执行几何图形着色命令以执行几何图形着色器阶段18。几何图形着色器阶段18接收由镶嵌化评估着色器阶段16添加到碎片中图元的顶点,并可进一步为图元生成额外的顶点以进一步地增大分辨率。
[0018] 本领域的熟练技术人员可知,为生成用于显示的最终图形图像,需要多个图形渲染管线阶段,以下简要地描述其中的某些阶段。光栅化阶段20从几何图形着色器阶段18中接收图元,并将图元转换为用以显示的像素。像素着色器阶段22接收由光栅化阶段20所输出的像素,并执行后期处理以分配颜色值至用于显示的每一像素。输出合并阶段24可进行任意的最终像素处理操作(例如,使用深度信息以进一步确定是否需要移除某些像素从而不显示这些像素),并可输出最终像素值至帧缓存器,其中,帧缓存器通常位于图形处理单元100之外。通常情况下,可认为镶嵌化控制着色器阶段12、镶嵌化图元生成器阶段14和镶嵌化评估着色器阶段16实现了镶嵌化处理。
[0019] 图2为本发明实施例所揭示的图形处理单元的方框示意图。图形处理单元200可用来执行顶点着色(vertex shading,VS)阶段和一个或多个镶嵌化处理阶段。图形处理单元200包括非着色器模块210、着色器模块230和高速缓存器250。非着色器模块210至少执行以下任务。第一,在执行顶点着色器阶段中,从第一命令队列Q1中加载顶点着色命令CMD1VS至着色器模块230,其中,顶点着色命令CMD1VS由第一处理单元PU1存储在第一命令队列Q1中。
第二,在执行一个或多个镶嵌化处理阶段中的第一镶嵌化处理阶段中,从第二命令队列Q2中加载第一镶嵌化处理阶段命令至着色器模块230。以下描述中,除非与上下文矛盾或者有明确说明外,可设定第一镶嵌化处理阶段即为镶嵌化控制着色器阶段,并且,这两个词语可以互相替换使用。类似地,可设定第一镶嵌化处理阶段命令为镶嵌化控制着色器阶段命令CMD1TCS、CMD2TCS、CMD3TCS和CMD4TCS(统称为CMD1-4TCS),且第一镶嵌化处理阶段的输出为WG1TCS、WG2TCS、WG3TCS和WG4TCS(统称为WG1-4TCS)。但是,这仅仅是出于描述的需要,而并非是用来限制本发明。事实上,在本发明的其他一些实施例中,第一镶嵌化处理阶段也可是镶嵌化图元生成器阶段而非镶嵌化控制着色器阶段,且镶嵌化控制着色器阶段命令也可包括4个以上或少于4个的命令。
[0020] 着色器模块230用以至少完成以下任务。第一,执行顶点着色命令CMD1VS以计算顶点着色器阶段的输出WG1VS(WG代表“工作组(workgroup)”,其将在后续详细地解释)。顶点着色器阶段的输出WG1VS可以是多个顶点VTX的变化,其中,顶点着色器阶段将多个顶点VTX作为输入数据。如前面所描述的,顶点着色命令CMD1VS可由非着色器模块210从第一命令队列Q1中加载至着色器模块230用以执行。第二,存储第一镶嵌化处理阶段命令CMD1-4TCS至第二命令队列Q2中以执行一个或多个镶嵌化处理阶段中的第一镶嵌化处理阶段。第三,在执行一个或多个镶嵌化处理阶段中的第一镶嵌化处理阶段时,着色器模块230通过将顶点着色器阶段的输出作为输入数据,从而执行第一镶嵌化处理命令CMD1-4TCS以计算第一镶嵌化处理阶段的输出WG1TCS、WG2TCS、WG3TCS和WG4TCS(统称为WG1-4TCS)。
[0021] 更具体地,第一镶嵌化处理阶段命令CMD1-4TCS相互之间的主要区别是这4条命令可对顶点着色器阶段的输出WG1VS中的不同部分进行处理(operate)从而计算出第一镶嵌化处理阶段的输出WG1-4TCS:WG1TCS从CMD1TCS计算而来,WG2TCS从CMD2TCS计算而来,以此类推。在实际中,第一镶嵌化处理阶段命令CMD1-4TCS可由着色器模块230生成并存储至第二命令队列Q2中。然后,非着色器模块210可加载镶嵌化控制着色器阶段命令CMD1-4TCS至着色器模块230,着色器模块230随后便执行镶嵌化控制着色器阶段命令以计算出第一镶嵌化处理阶段的输出WG1-4TCS。
[0022] 在本发明一实施例中,第一命令队列Q1和第二命令队列Q2(通常具有小于1K的容量)均实际地设置在图形处理单元200之外。然而,在本发明另外一个实施例中,这两个命令队列可位于图形处理单元200之内,甚至构成高速缓存器250的一部分。在本发明另一实施例中,第一处理单元PU1为中央处理单元(CPU)或数字信号处理器(DSP),其可与图形处理单元200一起构成一个异构(heterogeneous)计算系统。在本发明又一实施例中,加载顶点着色命令CMD1VS是由驱动程序发起的,且多个顶点VTX的数量(即包含多少个顶点VTX)是由驱动程序确定的。需要注意的是,除了CMD1VS以外,更多的顶点着色命令(如,CMD2VS)可由第一处理单元PU1存储至第一命令队列Q1中。举例来说,驱动程序从应用程序编程接口(如微软的DirectX 11或者OpenGL 4.X)中接收请求。然后,驱动程序触发非着色器模块210加载顶点着色命令CMD1VS,而几乎同时地,驱动程序确定多个顶点VTX的数量。相反地,加载第一镶嵌化处理阶段命令CMD1-4TCS是由着色器模块230而非驱动程序触发的。
[0023] 如前所述,着色器模块230在执行顶点着色器阶段中执行顶点着色命令CMD1VS,而在执行第一镶嵌化处理阶段中执行第一镶嵌化处理命令CMD1-4TCS。但是,顶点着色命令CMD1VS是由第一处理单元PU1存储至第一命令队列Q1中的,而第一镶嵌化处理阶段命令CMD1-4TCS是由着色器模块230通过内核入列的方式存储至第二命令队列Q2中的。对于图形处理单元200而言,第一命令队列Q1可视为软件命令队列,其内容是通过第一处理单元PU1而非图形处理单元200加入至队列中,而第二命令队列Q2可视为硬件命令队列,其内容是由图形处理单元200本身加入至队列中。
[0024] 高速缓存器250用以存储顶点着色器阶段的输出WG1VS和第一镶嵌化处理阶段的输出WG1-4TCS。在图2中,顶点着色器阶段的输出WG1VS被存储至高速缓存器250,且着色器模块230可在后续从高速缓存器250中取回顶点着色器阶段的输出WG1VS用以计算第一镶嵌化处理阶段的输出WG1-4TCS。类似的,第一镶嵌化处理阶段的输出WG1-4TCS被存储至高速缓存器
250以供进一步使用,这将在后面继续介绍。
[0025] 在一实施例中,图形处理单元200可进一步包括存储管理模块(未明确示出),其可视为非着色器模块210的一个部分,着色器模块230的一个部分或图形处理单元200的一个单独的部分。存储管理模块用以执行存储管理任务,从而当高速缓存250的利用率高于某一水平时,通过使着色器模块230停止执行顶点着色命令CMD1VS以及第一镶嵌化处理阶段命令CMD1-4TCS,以调整高速缓存250的利用率。举例来说,在着色器模块230已经执行了第一镶嵌化处理命令CMD1TCS并正要执行第一镶嵌化处理命令CMD2TCS时,如果这时存储管理模块检测到高速缓存器250的利用率高于其总容量的80%,则存储管理模块可发送警告信号至着色器模块230。然后,着色器模块230在看到这样的警告信号时,停止执行第一镶嵌化处理命令CMD2TCS。因此,高速缓存器250可免于因为执行第一镶嵌化处理命令CMD2TCS所生成的数据导致的溢出所引起的冲刷数据至系统存储器。当高速缓存器250无需继续维持第一镶嵌化处理阶段的输出WG1TCS时,存储管理模块可允许着色器模块230继续执行待处理的第一镶嵌化处理命令CMD2TCS。
[0026] 图3为本发明实施例所揭示的用于镶嵌化处理的各种功能阶段之间的数据输出关系的示意图。图3需要结合图2来理解。在图3中,每一个功能阶段的输出均被格式化为一个或多个工作组,例如,镶嵌化控制着色器阶段的输出为WG1TCS、WG2TCS、WG3TCS和WG4TCS,其可统称为镶嵌化控制着色器阶段工作组。鉴于图2中的第一命令队列Q1和第二命令队列Q2,请首先关注顶点着色器阶段和镶嵌化控制着色器阶段。顶点着色器阶段的输出WG1VS与顶点着色命令CMD1VS相关联,换言之,当着色器模块230利用多个顶点VTX作为输入数据来执行顶点着色命令CMD1VS时,其计算输出即为WG1VS。在一个示例中,包含128个顶点VTX,每一顶点均有各自的属性,而WG1VS包含128个顶点的变化或128组变化。通过将WG1VS作为镶嵌化控制着色器阶段的输入数据,着色器模块230在WG1VS的单独的部分上执行第一镶嵌化处理阶段命令CMD1-4TCS中的每一条命令,从而分别获得工作组WG1TCS、WG2TCS、WG3TCS和WG4TCS。对于包含128组变化的WG1VS而言,第一个32组变化可应用在第一镶嵌化处理命令CMD1TCS上,第二个32组变化可应用在第一镶嵌化处理命令CMD2TCS上,第三个32组变化可应用在第一镶嵌化处理命令CMD3TCS上,第四个32组变化可应用在第一镶嵌化处理命令CMD4TCS上。
[0027] 再则,WG1-4TCS中每一工作组均可包含128个控制点。如果WG1VS包含128组变化,则其意味着,一旦在WG1VS的基础上执行了镶嵌化控制着色器阶段的话,那么将从128组变化中生成4x128或512个控制点。由于高速缓存器250的容量有限且不知道用于执行镶嵌化控制着色器阶段的输入数据是否可以获得(即WG1VS是否已经生成),因此,可能需要判断将从WG1VS中生成多少个工作组(此处示例直接显示判断结果为4个镶嵌化控制着色器阶段工作组)以及何时可开始执行第一镶嵌化处理命令CMD1-4TCS。
[0028] 因此,在一实施例中,着色器模块230进一步用以在执行一个或多个镶嵌化处理阶段中的第一镶嵌化处理阶段中,至少完成以下任务。第一,至少根据第一镶嵌化处理阶段中的顶点着色器阶段的输出WG1VS的大小(即,多个顶点的变化的大小)从而计算第一镶嵌化处理阶段的输出的大小。需要注意的是,此时,并不知道第一镶嵌化处理阶段的输出会被分为多少个镶嵌化控制着色器阶段工作组。于是,根据WG1VS的大小,第一镶嵌化处理阶段的输出的大小可在执行第一镶嵌化处理阶段命令CMD1-4TCS之前获得。第二,根据第一镶嵌化处理阶段的输出的大小和高速缓存器250的容量而确定第一镶嵌化处理阶段命令的数量。以图3为例,第一镶嵌化处理阶段命令的数量被确定为4,即第一镶嵌化处理阶段命令分别为CMD1TCS、CMD2TCS、CMD3TCS和CMD4TCS。这是因为高速缓存器250可预留其容量的一部分,用来存储第一镶嵌化处理阶段的输出。如果高速缓存器250的此部分不足以同时容纳所有的第一镶嵌化处理阶段的输出,那么在WG1VS上仅仅应用一条镶嵌化处理阶段命令以计算第一镶嵌化处理阶段的输出,这是不合适的。相反地,依次执行第一镶嵌化处理阶段命令CMD1-4TCS,于是,当TCS正在被执行时,WG1TCS在高速缓存器250中是可以替换的。第三,检测对顶点着色器阶段的输出WG1VS的计算的完成,并以此作为条件来触发通过内核入列的方式存储第一镶嵌化处理阶段命令CMD1-4TCS至第二命令队列Q2中的动作。在一实施例中,这种检测可使用屏障(barrier)(即紧随顶点着色器阶段命令之后插入的指令)来实现,其中,屏障能够检测出顶点着色器阶段工作组WG1VS中的任一成分(可称为工作项目)是否已经获得。当所有的工作项目均已获得时,即可认为对顶点着色器阶段的输出WG1VS的计算已经完成。
[0029] 一般而言,第一镶嵌化处理阶段命令的数量可为正整数N(例如,第一镶嵌化处理阶段命令为CMD1-NTCS),而第一镶嵌化处理阶段的输出包括N个第一镶嵌化处理阶段工作组(例如,WG1-NTCS),其中,N个第一镶嵌化处理阶段工作组的其中一个工作组是由着色器模块230相对于顶点着色器阶段的输出WG1VS的至少一个部分而执行N条第一镶嵌化处理阶段命令的其中之一而来。
[0030] 为了进一步利用内核入列的优势来执行镶嵌化处理,建议将上述内容应用至其他镶嵌化处理阶段。请注意,图2中的镶嵌化控制着色器阶段的输出WG1TCS和镶嵌化图元生成器阶段的输出WG1TPG、WG2TPG和WG3TPG(统称为WG1-3TPG)可根据顶点着色器阶段的输出WG1VS和镶嵌化控制着色器阶段的输出WG1-4TCS之间的关系进行类似的分析。镶嵌化控制着色器阶段的输出WG1TCS可由着色器模块230利用顶点着色器阶段的输出WG1VS的一个部分作为输入数据来执行镶嵌化控制着色器阶段命令CMD1TCS从而生成。镶嵌化控制着色器阶段的输出WG1TCS可具有多个控制点,这些控制点可被用作镶嵌化图元生成器阶段的输入数据。在此,镶嵌化图元生成器阶段的输出WG1TPG、WG2TPG和WG3TPG由着色器模块230在WG1TCS的单独的部分上执行镶嵌化图元生成器阶段命令CMD1TPG、CMD2TPG、CMD3TPG(统称为CMD1-3TPG)从而生成。假设镶嵌化控制着色器阶段的输出WG1TCS包含144个控制点,那么镶嵌化图元生成器阶段命令CMD1TPG可与开头的48个控制点相关联,镶嵌化图元生成器阶段命令CMD2TPG可与随后的48个控制点相关联,镶嵌化图元生成器阶段命令CMD3TPG可与最后的48个控制点相关联。此外,每一个镶嵌化图元生成器阶段工作组WG1TPG、WG2TPG和WG3TPG均可包含128个重心(Bary-Centric)坐标,其意味着一旦执行了镶嵌化图元生成器阶段,那么144个控制点将产生384个重心坐标。由于高速缓存器250的容量有限且不知道用于执行镶嵌化图元生成器阶段的输入数据是否可以获得,因此,可能需要判断将从镶嵌化控制着色器阶段WG1TCS中产生多少个镶嵌化图元生成器阶段工作组(此处示例直接显示判断结果为3个镶嵌化图元生成器阶段工作组)以及何时可执行镶嵌化图元生成器阶段命令。
[0031] 在一实施例中,着色器模块230可进一步在执行一个或多个镶嵌化处理阶段命令中的镶嵌化图元生成器阶段中,通过将4个镶嵌化控制着色器阶段工作组中的一个(例如WG1TCS)作为输入数据(例如,第三输入数据),从而至少完成以下任务。第一,根据WG1TCS的大小和镶嵌化图元生成器阶段的一个或多个参数从而计算镶嵌化图元生成器阶段的输出的大小。在示例中,镶嵌化图元生成器阶段的一个或多个参数可为细节层次(level of detail,LOD)参数,其规定在特定表面上应该显现多少个额外点。第二,根据镶嵌化图元生成器阶段的输出的大小和高速缓存器250的容量来确定镶嵌化图元生成器阶段命令的数量。如图3所示,镶嵌化图元生成器阶段命令的数量被确定为3,其中,每一条镶嵌化图元生成器阶段命令CMD1TPG、CMD2TPG、CMD3TPG分别对应于镶嵌化图元生成器阶段工作组WG1TPG、WG2TPG和WG3TPG。这意味着着色器模块230后续会将与镶嵌化控制着色器阶段工作组WG1TCS相关联的镶嵌化图元生成器阶段命令CMD1-3TPG加入至队列。第三,检测对WG1TCS的计算是否完成,即通过执行镶嵌化控制着色器阶段命令CMD1TCS是否已经生成144个控制点(假设WG1TCS具有144个控制点)。一旦WG1TCS已经就绪,如已经检测到对镶嵌化控制着色器阶段工作组WG1TCS的计算完成时,则着色器模块230可通过内核入列的方式从而存储镶嵌化图元生成器阶段命令CMD1-3TPG至第二命令队列Q2中。然后,着色器模块230执行来自非着色器模块210的镶嵌化图元生成器阶段命令CMD1-3TPG以从镶嵌化控制着色器阶段工作组WG1TCS计算镶嵌化图元生成器阶段的输出WG1-3TPG。必须强调的是,镶嵌化图元生成器阶段命令CMD1-3TPG是从第二命令队列Q2中加载的,而镶嵌化图元生成器阶段的输出WG1-3TPG则被存储至高速缓存器250中。由于镶嵌化控制着色器阶段被视为第一镶嵌化处理阶段,则镶嵌化图元生成器阶段可被视为第二镶嵌化处理阶段。
[0032] 在实际中,镶嵌化图元生成器阶段和镶嵌化评估着色器阶段中的任一均可以作为第二镶嵌化处理阶段,而第二镶嵌化处理阶段命令的数量可为正整数M,其中,M条第二镶嵌化处理阶段命令可与N个第一镶嵌化处理阶段工作组的其中之一相关联,而N同样也为正整数。因此,在本发明另一实施例中,第二镶嵌化处理阶段为镶嵌化图元生成器阶段和镶嵌化评估着色器(TES)阶段中的其中之一,其中,第二镶嵌化处理阶段命令的数量为M且第二镶嵌化处理阶段的输出包括M个第二工作组,而M个第二工作组的其中之一是由着色器模块根据N个第一工作组中的其中之一的至少一部分而执行M条第二镶嵌化处理命令的其中之一从而计算而来,且M为正整数。
[0033] 由于镶嵌化图元生成器阶段的输出和镶嵌化评估着色器阶段的输出之间的关系可通过上面揭示的内容进行类似地理解,因此,请注意图3和图2中的镶嵌化评估着色器阶段的输出WG1TES和几何图形着色器阶段的输出WG1GS。出于几何图形着色器阶段的特性,镶嵌化评估着色器工作组WG1TES仅与几何图形着色器工作组WG1GS相关联。在一实施例中,几何图形着色器阶段的输出被存储至第一处理单元PU1可访问的存储器缓冲区中,而不是存储至高速缓存器250中。该存储器缓冲区可为系统DRAM,其容量几乎是不受限制的。这表明其与镶嵌化控制着色器、镶嵌化图元生成器和镶嵌化评估着色器阶段相反,无需利用多个几何图形着色器阶段命令来避免高速缓存器250的溢出。因而,在另外一个实施例中,着色器模块230进一步用以在执行几何图形着色器阶段中通过将镶嵌化评估着色器阶段工作组WG1TES作为输入数据从而至少完成以下任务。首先,根据镶嵌化评估着色器工作组WG1TES的大小计算几何图形着色器阶段的输出或几何图形着色器阶段工作组WG1GS的大小。然后,检测对镶嵌化评估着色器工作组WG1TES的计算是否完成。如果WG1TES具有128个顶点,那么仅当128个顶点全部被获得时,才能检测到计算的完成。着色器模块230可在检测到对镶嵌化评估着色器阶段工作组WG1TES的计算完成时,通过内核入列的方式而存储几何图形着色器阶段命令至第二命令队列Q2中。最后,着色器模块230执行来自非着色器模块210的几何图形着色器阶段命令CMDGS以从镶嵌化评估着色器阶段工作组WG1TES计算几何图形着色器阶段的输出WG1GS。
[0034] 因为图形处理单元200按照以上描述的方式来执行一个或多个镶嵌化处理阶段,因此可能存在两个需要处理的实际问题。第一个问题是将各个镶嵌化处理阶段的输出数据进行关联。这是由于图形处理单元200本身通常受益于并行处理,例如,采用单指令多数据(single-instruciton-multiple-data,SIMD)或者单指令多线程(single-instruciton-multiple-threads,SIMT)架构的并行机制。通过这种并行机制,计算结果的顺序不必维持其相应输入的顺序。举例来说,当图形处理单元200计算WG1TCS及其衍生的数据(例如,WG1-3TPG)时,可同时计算WG2TCS及其衍生的数据(即图2所示的由CMD1’TPG的执行所生成的WG1’TPG)。这些数据在时序中观察时可能混在一起,且后续的图形管线阶段可能混淆哪些数据应该相互渲染在一起。如果除了顶点着色器阶段工作组WG1VS和其衍生数据(例如,图3所示的WG1-4TCS、WG1-3TPG、WG1TES)之外,另一个顶点着色器阶段工作组WG2VS和其衍生数据(未示出)也同时在进行计算的话,那么数据混杂的情况将更为复杂。
[0035] 图4为本发明实施例所揭示的用于镶嵌化处理阶段的输出的数据排列结构的示意图。可见,当生成一个单独的镶嵌化处理阶段的输出时,可将一个或多个镶嵌化处理阶段ID与每一个工作组相关联。例如,镶嵌化图元生成器阶段的输出WG1TPG与VSID、TCSID、和TPGID相关联,其分别被分配有值1、1和1。相反地,对于从镶嵌化控制着色器阶段的输出WG2TCS所生成的镶嵌化图元生成器阶段工作组WG1’TPG,TCSID将被设置为2,以将WG1’TPG和WG1TPG区别开来。类似地,为WG2VS和其所有衍生数据的VSID分配值2可以避免与WG1VS和其衍生数据(因为它们的VSID为1)相混淆。在实际中,可利用管线数据结构(在OpenCL 2.0中所定义的)来承载每个工作组的信息和其相关ID,且管线数据结构可实际地存储在高速缓存器250(如图2所示)中。
[0036] 除了数据排列问题之外,图形处理单元200还可能需要追踪命令的执行。请再次参照图2。随着图形处理单元200对加入到第一命令队列Q1和第二命令队列Q2中的命令的执行流进行控制,必须知道的是,哪些命令已经执行,而哪些指令没有执行。要做到这一点,可通过与图4所描述的数据排列结构相类似的方式而利用某些ID与每一条命令相关联。在一实施例中,非着色器模块210可进一步包括命令ID生成器用以将命令ID与镶嵌化处理阶段的命令相关联。例如,CMD2TPG可与VSID(=1),TCSID(=1),以及TPGID(=2)相关联,从而将其自身与CMD3TPG区分开来,其中,CMD3TPG与VSID(=1)、TCSID(=1)和TPGID(=3)相关联。通过这种方式,当要执行一条命令时,命令ID生成器便为该命令生成相关的ID,并更新哪些命令已经执行。
[0037] 图5为本发明又一实施例所揭示的用于执行一个或多个镶嵌化处理阶段的渲染方法的流程图。在一实施例中,该渲染方法可由图1所示的装置执行。在步骤S502中,从第一命令队列中加载顶点着色命令至着色器模块230,其中,顶点着色命令由第一处理单元存储至第一命令队列中。然后,执行顶点着色命令以计算多个顶点的变化(步骤S504)。步骤S502和S504可理解为利用多个顶点作为第一输入数据来执行顶点着色操作。接下来,利用多个顶点的变化作为第二输入数据来执行一个或多个镶嵌化处理阶段中的第一镶嵌化处理阶段。在步骤S506中,第一镶嵌化处理阶段命令被存储至第二命令队列中。并且,从第二命令队列中加载第一镶嵌化处理阶段命令至着色器模块(步骤S508)。执行第一镶嵌化处理阶段命令用以计算第一镶嵌化处理阶段的输出,其中,多个顶点的变化和第一镶嵌化处理阶段的输出被存储至高速缓存器中(步骤S510)。
[0038] 相反地,在传统的方法中,CPU通过共享存储器与GPU协调工作以执行镶嵌化处理操作,其具有以下缺点。首先,在镶嵌化处理中,其具有从共享存储器访问中间数据流量和/或指令的连续通道,而在从共享存储器中读取数据作为下一个镶嵌化处理阶段(例如,镶嵌化图元生成器阶段14)的输入之前,需要先将前一镶嵌化处理阶段(例如,镶嵌化控制着色器阶段12)的输出写入至共享存储器。因此,存储器的带宽开销可能会比较高。其次,CPU需要不时介入以发出下一个的镶嵌化处理阶段指令,从而保持镶嵌化处理的运行。这可能会导致CPU的效率较低,其反过来又降低了整个系统的性能。而本发明可以有效地解决这两个问题。
[0039] 图6为本发明实施例所揭示的几何图形着色阶段的输出的时序图。请参照图6及图3。考虑几何图形着色(geometry shading,GS)阶段的输出工作组WG1GS(从WG1TES生成)和WG2GS(从WG2TES生成),其中,WG1TES和WG2TES是所生成的作为镶嵌化评估着色器阶段所输出的M个工作组中的两个工作组,且M>=2。因为WG1GS和WG2GS将被几何图形着色阶段之后的GPU管线阶段所访问,因此,优选地,将WG1GS和/或WG2GS的数据比特存储至实际的临近位置上(例如,DRAM中的连续地址空间)。然而,由于并行处理的特性,WG1GS和/或WG2GS可乱序输出。
换言之,WG1GS可在WG2GS之前生成,反之亦然。具体地,WG1GS中的部分可在WG2GS的部分之前生成,而WG1GS的其它部分可在WG2GS的其它部分之后生成。
[0040] 如图6所示,用于WG1GS的存储空间在时间段t1到t2中分配(或预留)。在时间段t1到t2中,着色器模块230(如图2所示)可执行基于WG1TES的分析以获知WG1GS的大小,这样,着色器模块230可获知应该分配多大的存储空间给WG1GS。然后,用于WG2GS的存储空间在时间段t2到t3中由着色器模块分配(或预留)。简言之,着色器模块230按照顺序为WG1GS和WG2GS分配存储空间。
[0041] 一旦按照顺序预留了用于WG1GS和WG2GS的存储空间,那么着色器模块230可以无序生成WG1GS和WG2GS(并将WG1GS和WG2GS写入至存储器缓存区中各自的存储空间)。请参照图6,WG1GS是在时间段t2到t4中生成的,而WG2GS则是在时间段t3到t5中生成的,这意味着WG1GS和WG2GS是在相互重叠的时间区间中生成的。通过预先分配的存储空间,则即使WG1GS和WG2GS在输出时是无序的,也可将WG1GS和WG2GS写入至存储器缓冲区中的连续条目中。
[0042] 因此,在本发明实施例中,着色器模块230依序将存储器缓冲区(例如,DRAM)中的第一存储空间分配给对应于WG1TES的几何图形着色阶段的输出(即WG1GS),并将存储器缓冲区中的第二存储空间分配给对应于WG2TES的几何图形着色阶段的输出(即WG2GS)。着色器模块230检测对WG1TES和WG2TES的计算是否完成,然后,在检测到对WG1TES和WG2TES计算的完成时,通过内核入列的方式存储两条几何图形着色阶段命令至第二命令队列中(如图2所示)。之后,着色器模块230执行这两条几何图形着色阶段命令以从WG1TES和WG2TES计算几何图形着色阶段的输出WG1GS和WG2GS。最后,着色器模块230无序地将对应于WG1TES的几何图形着色阶段的输出(即WG1GS)存储至存储器缓冲区中的第一存储空间,并将对应于WG2TES的几何图形着色阶段的输出(即WG2GS)存储至存储器缓冲区中的第二存储空间。
[0043] 尽管本发明已经通过示例以及优选实施例的方式进行描述,但是,应该理解的是,本发明并不限制于此。本领域的熟练技术人员可在不背离本发明的范畴和精神的前提下作出各种变化和修改。因此,本发明的范畴通过所附权利要求和其等效转换进行限定和保护。