一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

在渲染时通过几何图形分析进行几何图形的高效多GPU渲染的系统和方法与流程

2022-11-14 14:40:24 来源:中国专利 TAG:

在渲染时通过几何图形分析进行几何图形的高效多gpu渲染的系统和方法
技术领域
1.本公开涉及图形处理,并且更具体地涉及在为应用渲染图像时的多gpu协作。


背景技术:

2.近年来,在线服务不断推动,允许在云游戏服务器和通过网络连接的客户端之间以流式传输格式进行在线游戏或云游戏。由于按需提供游戏名称、执行更复杂游戏的能力、玩家之间联网以进行多玩家游戏的能力、玩家之间的资产共享、玩家和/或观众之间的即时体验共享、允许朋友观看朋友玩视频游戏、让朋友加入朋友正在进行的游戏进行等,流式传输格式越来越受欢迎。
3.云游戏服务器可以被配置为向一个或多个客户端和/或应用提供资源。也就是说,云游戏服务器可以配置有能够高吞吐量的资源。例如,单个图形处理单元(gpu)可以达到的性能是有限的。为了在生成场景时渲染更复杂的场景或使用更复杂的算法(例如材质、照明等),可能需要使用多个gpu来渲染单个图像。然而,这些图形处理单元的同等使用是难以实现的。此外,即使有多个gpu使用传统技术为应用处理图像,也无法支持对应增加的屏幕像素计数和几何图形密度(例如,四个gpu不能写入四倍的像素和/或处理图像的四倍顶点或图元)。
4.正是在这种背景下,出现了本公开的实施方案。


技术实现要素:

5.本公开的实施方案涉及使用多个gpu(图形处理单元)协作来渲染单个图像,诸如通过在渲染时执行几何图形分析以生成用于将屏幕区域动态分配到gpu来渲染图像帧的信息、和/或通过在渲染之前执行几何图形分析、和/或通过在渲染阶段期间执行时序分析以在渲染阶段期间将gpu责任的分配重新分布,从而为应用进行几何图形的多gpu渲染。
6.本公开的实施方案公开了一种用于图形处理的方法。该方法包括使用多个图形处理单元(gpu)为应用渲染图形。该方法包括使用多个gpu协作来渲染包括多个几何图形的图像帧。该方法包括在预通过渲染阶段期间,在gpu处生成关于多个几何图形及其与多个屏幕区域的关系的信息。所述方法包括基于所述信息将所述多个屏幕区域分配给所述多个gpu,以用于在随后的渲染阶段中渲染所述多个几何图形。
7.本公开的其他实施方案公开了一种计算机系统,包括处理器和存储器,所述存储器耦合到处理器并且其中存储有指令,所述指令如果由计算机系统执行,则致使计算机系统执行用于图形处理的方法。该方法包括使用多个图形处理单元(gpu)为应用渲染图形。该方法包括使用多个gpu协作来渲染包括多个几何图形的图像帧。该方法包括在预通过渲染阶段期间,在gpu处生成关于多个几何图形及其与多个屏幕区域的关系的信息。所述方法包括基于所述信息将所述多个屏幕区域分配给所述多个gpu,以用于在随后的渲染阶段中渲染所述多个几何图形。
8.本公开的其他实施方案公开了一种存储用于图形处理的计算机程序的非暂时性计算机可读介质。计算机可读介质包括用于使用多个图形处理单元(gpu)为应用渲染图形的程序指令。计算机可读介质包括用于使用多个gpu协作来渲染包括多个几何图形的图像帧的程序指令。计算机可读介质包括用于在预通过渲染阶段期间,在gpu处生成关于多个几何图形及其与多个屏幕区域的关系的信息的程序指令。计算机可读介质包括用于基于信息将多个屏幕区域分配给多个gpu,以用于在随后的渲染阶段中渲染所述多个几何图形的程序指令。
9.本公开的实施方案公开了一种用于图形处理的方法。该方法包括使用多个图形处理单元(gpu)为应用渲染图形。该方法包括在多个gpu之间划分用于在分析预通过渲染阶段期间处理图像帧的多个几何图形的责任,其中多个几何图形中的每一个被分配给对应的gpu。该方法包括在分析预通过阶段中确定多个几何图形中的每一个与多个屏幕区域中的每一个的重叠。该方法包括在多个gpu处基于多个几何图形中的每一个与多个屏幕区域中的每一个的重叠来生成关于多个几何图形及其与多个屏幕区域的关系的信息。所述方法包括基于该信息将多个屏幕区域分配给多个gpu,以用于在随后的渲染阶段期间渲染多个几何图形。
10.本公开的其他实施方案公开了一种计算机系统,包括处理器和存储器,所述存储器耦合到处理器并且其中存储有指令,所述指令如果由计算机系统执行,则致使计算机系统执行用于图形处理的方法。该方法包括使用多个图形处理单元(gpu)为应用渲染图形。该方法包括在多个gpu之间划分用于在分析预通过渲染阶段期间处理图像帧的多个几何图形的责任,其中多个几何图形中的每一个被分配给对应的gpu。该方法包括在分析预通过阶段中确定多个几何图形中的每一个与多个屏幕区域中的每一个的重叠。该方法包括在多个gpu处基于多个几何图形中的每一个与多个屏幕区域中的每一个的重叠来生成关于多个几何图形及其与多个屏幕区域的关系的信息。所述方法包括基于该信息将多个屏幕区域分配给多个gpu,以用于在随后的渲染阶段期间渲染多个几何图形。
11.本公开的其他实施方案公开了一种存储用于图形处理的计算机程序的非暂时性计算机可读介质。计算机可读介质包括用于使用多个图形处理单元(gpu)为应用渲染图形的程序指令。计算机可读介质包括用于在多个gpu之间划分用于在分析预通过渲染阶段期间处理图像帧的多个几何图形的责任的程序指令,其中多个几何图形中的每一个被分配给对应的gpu。计算机可读介质包括用于在分析预通过阶段中确定多个几何图形中的每一个与多个屏幕区域中的每一个的重叠的程序指令。计算机可读介质包括用于在多个gpu处基于多个几何图形中的每一个与多个屏幕区域中的每一个的重叠来生成关于多个几何图形及其与多个屏幕区域的关系的信息的程序指令。计算机可读介质包括用于基于信息将多个屏幕区域分配给多个gpu,以用于在随后的渲染阶段期间渲染多个几何图形的程序指令。
12.本公开的实施方案公开了一种用于图形处理的方法。该方法包括使用多个图形处理单元(gpu)为应用渲染图形。该方法包括使用多个gpu协作来渲染包括多个几何图形的图像帧。该方法包括在图像帧的渲染期间,将多个几何图形中的一个或多个细分为更小的几何图形,并且在多个gpu之间划分渲染几何图形的这些更小的部分的责任,其中几何图形的更小部分中的每一个由对应的gpu处理。该方法包括,对于那些没有被细分的几何图形,在多个gpu之间划分渲染这些几何图形的责任,其中这些几何图形中的每一个都由对应的gpu
处理。
13.本公开的其他实施方案公开了一种计算机系统,包括处理器和存储器,所述存储器耦合到处理器并且其中存储有指令,所述指令如果由计算机系统执行,则致使计算机系统执行用于图形处理的方法。该方法包括使用多个图形处理单元(gpu)为应用渲染图形。该方法包括使用多个gpu协作来渲染包括多个几何图形的图像帧。该方法包括在图像帧的渲染期间,将多个几何图形中的一个或多个细分为更小的几何图形,并且在多个gpu之间划分渲染几何图形的这些更小的部分的责任,其中几何图形的更小部分中的每一个由对应的gpu处理。该方法包括,对于那些没有被细分的几何图形,在多个gpu之间划分渲染这些几何图形的责任,其中这些几何图形中的每一个都由对应的gpu处理。
14.本公开的其他实施方案公开了一种存储用于图形处理的计算机程序的非暂时性计算机可读介质。计算机可读介质包括用于使用多个图形处理单元(gpu)为应用渲染图形的程序指令。计算机可读介质包括用于使用多个gpu协作来渲染包括多个几何图形的图像帧的程序指令。计算机可读介质包括用于在图像帧的渲染期间,将多个几何图形中的一个或多个细分为更小的几何图形,并且在多个gpu之间划分渲染几何图形的这些更小的部分的责任的程序指令,其中几何图形的更小部分中的每一个由对应的gpu处理。计算机可读介质包括用于对于那些没有被细分的几何图形,在多个gpu之间划分渲染这些几何图形的责任的程序指令,其中这些几何图形中的每一个都由对应的gpu处理。
15.根据以下结合附图理解的具体实施方式,本公开的其他方面将变得显而易见,所述附图以示例的方式示出了本公开的原理。
附图说明
16.通过参考结合附图的以下描述,可以最好地理解本公开,在附图中:
17.图1是根据本公开的实施方案的用于通过网络在一个或多个云游戏服务器之间提供游戏的系统的示意图,所述云游戏服务器被配置为实现多个gpu(图形处理单元)协作以渲染单个图像,包括通过在渲染时执行几何图形分析以生成用于将屏幕区域动态分配到gpu以用于图像帧的进一步渲染通过的信息、和/或通过在渲染阶段之前执行几何图形分析、和/或通过细分几何图形并将得到的几何图形的更小部分分配到多个gpu,从而为应用进行几何图形的多gpu渲染。
18.图2是根据本公开的一个实施方案的其中多个gpu协作以渲染单个图像的多gpu架构的示意图。
19.图3是根据本公开的实施方案的被配置用于通过在渲染时执行几何图形分析、和/或通过在渲染之前执行几何图形分析、和/或通过细分几何图形并将得到的几何图形的更小部分分配到多个gpu,从而为应用进行几何图形的多gpu渲染的多个图形处理单元资源的示意图。
20.图4是根据本公开的一个实施方案的实现被配置用于多gpu处理以使得多个gpu协作以渲染单个图像的图形流水线的渲染架构的示意图。
21.图5a是根据本公开的一个实施方案的在执行多gpu渲染时被细分为象限的屏幕的示意图。
22.图5b是根据本公开的一个实施方案的在执行多gpu渲染时被细分为多个交错区域
的屏幕的示意图。
23.图6a图示了根据本公开的一个实施方案的当多个gpu协作渲染单个图像时针对屏幕区域的对象测试。
24.图6b图示了根据本公开的一个实施方案的当多个gpu协作渲染单个图像时针对屏幕区域的对象部分的测试。
25.图7是图示了根据本公开的一个实施方案的用于图形处理的方法的流程图,该方法包括通过在渲染时执行几何图形分析来为应用进行几何图形的多gpu渲染。
26.图8是根据本公开的一个实施方案的屏幕的示意图,其图示了基于在渲染当前图像帧时执行的对当前图像帧的几何图形的分析将屏幕区域动态分配给gpu以用于几何图形渲染。
27.图9a-图9c是图示了根据本公开的一个实施方案的渲染包括四个对象的图像帧的示意图,包括渲染图像帧的z预通过阶段和几何图形阶段,执行z预通过阶段以生成用于将屏幕区域动态分配给gpu以用于图像帧的几何图形渲染的信息。
28.图10图示了根据本公开的一个实施方案的使用屏幕区域的动态分配渲染图像帧,所述屏幕区域基于整个对象或对象的部分动态分配给gpu以基于在渲染图像帧时在z预通过渲染阶段期间执行的对当前图像帧的几何图形的分析来进行几何图形渲染。
29.图11是图示了根据本公开的一个实施方案的为了执行z预通过渲染阶段以生成用于将屏幕区域动态分配给gpu以用于图像帧的几何图形渲染的信息而进行gpu分配到图像帧的几何图形的交错的示意图。
30.图12a是图示了根据本公开的一个实施方案的用于图形处理的方法的流程图,该方法包括通过在渲染之前执行几何图形分析来为应用进行几何图形的多gpu渲染。
31.图12b是图示了根据本公开的一个实施方案的在图像帧的渲染阶段之前执行的分析预通过的示意图,所述分析预通过生成用于将屏幕区域动态分配给gpu以进行图像帧的几何图形渲染的信息。
32.图13a是图示了根据本公开的一个实施方案的在执行分析预通过以生成用于将屏幕区域动态分配给gpu以进行图像帧的几何图形渲染的信息时计算一个几何图形与一个屏幕区域之间的准确重叠的示意图。
33.图13b是图示了根据本公开的一个实施方案的在执行分析预通过以生成用于将屏幕区域动态分配给gpu以进行图像帧的几何图形渲染的信息时计算一个几何图形与一个屏幕区域之间的大致重叠的一对示意图。
34.图14a是图示了根据本公开的一个实施方案的用于图形处理的方法的流程图,该方法包括通过在渲染或分析阶段期间执行时序分析以便在渲染或分析阶段期间重新分布gpu责任的分配来为应用进行几何图形的多gpu渲染,诸如在为几何图形执行z预通过阶段以生成用于将屏幕区域动态分配给gpu以用于图像帧的几何图形渲染的信息时。
35.图14b是图示了根据本公开的一个实施方案的gpu分配的各种分布的示意图,所述各种分布用于执行z预通过渲染阶段以生成用于将屏幕区域动态分配给gpu以用于图像帧的几何图形渲染的信息。
36.图15a是图示了根据本公开的一个实施方案的使用多个gpu来在屏幕区域中渲染几何图形的示意图。
37.图15b是图示了根据本公开的一个实施方案的不按照其对应的绘制调用的顺序渲染几何图形的示意图。
38.图16图示了可用于执行本公开的各种实施方案的各方面的示例装置的部件。
具体实施方式
39.虽然出于说明目的,以下详细说明包含许多具体细节,但是本领域的普通技术人员将会了解,以下细节的许多变化和更改在本公开的范围内。因此,阐明以下所描述的本公开的各个方面,而本说明书的随附权利要求书的概括性没有任何损失,并且不对此权利要求书施加任何限制。
40.一般来说,单个gpu可以达到的性能是有限的,例如从gpu可以有多大的限制中得出。要渲染更复杂的场景或使用更复杂的算法(例如材质、照明等),最好使用多个gpu协作来生成和/或渲染单个图像帧。例如,基于从图像帧中的对象和/或几何图形(例如,对象的部分、图元、多边形、顶点等)的几何图形分析确定的信息,在多个gpu之间划分渲染责任。该信息提供了几何图形和每个屏幕区域之间的关系,这些关系可以是交错的。这允许gpu更有效地渲染几何图形或完全避免渲染它。特别地,本公开的各种实施方案提供图像帧的几何图形分析,并在gpu之间动态且灵活地分配用于渲染图像帧的责任,使得每个gpu最终负责对于该图像帧是唯一的一组屏幕区域(即,下一个图像帧可能具有不同的gpu与屏幕区域的关联)。通过每个图像帧进行几何图形分析和将渲染责任动态分配给gpu,本公开的实施方案支持像素计数(即分辨率)和复杂性的增加,和/或几何图形复杂性的增加,和/或每个顶点和/或图元的处理量的增加。具体地,本公开的各种实施方案描述了被配置用于通过在渲染时执行几何图形分析以将屏幕区域动态分配给gpu以用于图像帧的几何图形渲染来为应用执行几何图形的多gpu渲染的方法和系统,其中几何图形分析基于定义要为图像帧渲染的几何图形和屏幕区域之间的关系的信息。例如,几何图形分析的信息是在渲染时生成的,诸如在几何图形渲染之前的z预通过期间。特别地,硬件被配置为使得预通过生成用于在后续渲染阶段执行几何图形时,帮助将屏幕区域智能分配给gpu的信息。本公开的其他实施方案描述了被配置用于通过在渲染阶段之前执行几何图形分析以将屏幕区域动态分配给gpu以用于图像帧的该渲染阶段来为应用执行几何图形的多gpu渲染的方法和系统,其中几何图形分析基于定义要为图像帧渲染的几何图形和屏幕区域之间的关系的信息。例如,在渲染之前执行的预通过中生成信息,诸如使用着色器(例如,软件)。该信息用于在执行几何图形渲染时将屏幕区域智能分配给gpu。本公开的其他实施方案描述了被配置用于将几何图形(例如由绘制调用处理或产生的)细分为几何图形的更小部分并将几何图形的那些更小部分分配给多个gpu用于渲染的方法和系统,其中几何图形的每个更小部分被分配给gpu。作为一个优势,例如,这允许多个gpu在相同时间量中渲染更复杂的场景和/或图像。
41.借助对各种实施方案的上述一般理解,现在将参考各种附图来描述实施方案的示例细节。
42.贯穿本说明书,对“应用”或“游戏”或“视频游戏”或“游戏应用”的引用意在表示通过执行输入命令来引导的任何类型的交互式应用。仅出于说明目的,交互式应用包括用于游戏、文字处理、视频处理、视频游戏处理等的应用。此外,上面介绍的术语是可互换的。
43.在整个说明书中,针对使用具有四个gpu的示例性架构对应用的几何图形的多gpu
处理或渲染来描述本公开的各种实施方案。然而,应当理解,在为应用渲染几何图形时,任何数量的gpu(例如,两个或更多个gpu)可以协作。
44.图1是根据本公开的一个实施方案的用于在为应用渲染图像(例如,图像帧)时执行多gpu处理的系统的示意图。该系统被配置为在一个或多个云游戏服务器之间通过网络提供游戏,更具体地,被配置用于多个gpu协作渲染应用的单个图像,诸如当在渲染时或在渲染之前执行图像帧的几何图形的几何图形分析以将屏幕区域动态分配给gpu以用于图像帧的几何图形渲染时,和/或当将几何图形(例如,由绘制调用处理或产生的)细分成几何图形的更小部分并将几何图形的这些更小部分分配给多个gpu以用于渲染时,其中根据本公开的实施方案,几何图形的每个更小部分被分配给gpu。云游戏包括在服务器上执行视频游戏以生成游戏渲染的视频帧,然后将其发送到客户端进行显示。特别地,系统100被配置用于通过在渲染之前针对交错的屏幕区域进行预测试来为应用进行几何图形的高效多gpu渲染。
45.虽然图1图示了在云游戏系统的一个或多个云游戏服务器之间实现几何图形的多gpu渲染,但是本公开的其他实施方案通过在独立系统(诸如,包括具有多个gpu的高端显卡的个人计算机或游戏控制台)内在渲染时执行区域测试为应用提供几何图形的高效多gpu渲染。
46.还应理解,在各种实施方案中(例如,在云游戏环境中或在独立系统中),几何图形的多gpu渲染可以使用物理gpu或虚拟gpu或两者的组合来执行。例如,虚拟机(例如实例)可以使用利用硬件层的一个或多个部件(诸如多个cpu、存储器模块、gpu、网络接口、通信部件等)的主机硬件(例如位于数据中心)的管理程序创建。这些物理资源可以布置在机架中,诸如cpu机架、gpu机架、存储器机架等,其中机架中的物理资源可以使用架顶交换机访问,该架顶交换机促进用于组装和访问用于实例的部件的结构(例如,在构建实例的虚拟化部件时)。通常,管理程序可以呈现配置有虚拟资源的多个实例的多个客户操作系统。即,每个操作系统可以配置有由一个或多个硬件资源(例如,位于对应的数据中心)支持的对应的一组虚拟化资源。例如,每个操作系统可以由一个虚拟cpu、多个虚拟gpu、虚拟存储器、虚拟化通信部件等支持。此外,一个实例的配置可以从一个数据中心转移到另一个数据中心中心以减少延时。为用户或游戏定义的gpu利用率可以在保存用户的游戏会话时使用。gpu利用率可以包括本文所述的任何数量的配置,以优化游戏会话的视频帧的快速渲染。在一个实施方案中,为游戏或用户定义的gpu利用率可以作为可配置设置在数据中心之间传输。传输gpu利用率设置的能力可以在用户连接到不同地理位置玩游戏的情况下,有效地将游戏进行从数据中心迁移到数据中心。
47.根据本公开的一个实施方案,系统100经由云游戏网络190提供游戏,其中远离正在玩游戏的对应用户的客户端装置110(例如,瘦客户端)执行游戏。系统100可以经由网络150以单玩家或多玩家模式通过云游戏网络190向玩一个或多个游戏的一个或多个用户提供游戏控制。在一些实施方案中,云游戏网络190可以包括在主机的管理程序上运行的多个虚拟机(vm),其中一个或多个虚拟机被配置为利用对主机的管理程序可用的硬件资源来执行游戏处理器模块。网络150可包括一种或多种通信技术。在一些实施方案中,网络150可以包括具有先进无线通信系统的第五代(5g)网络技术。
48.在一些实施方案中,可使用无线技术来促进通信。此类技术可以包括例如5g无线
通信技术。5g是第五代蜂窝网络技术。5g网络是数字蜂窝网络,其中提供商覆盖的服务区域被划分为称为小区的小地理区域。代表声音和图像的模拟信号在电话中被数字化、由模数转换器转换并作为比特流传输。通过从其他小区中重复使用的频率池中由收发器分配的频率信道,小区中的所有5g无线装置通过无线电波与小区中的本地天线阵列和小功率自动收发器(发射器和接收器)通信。本地天线通过高带宽光纤或无线回程连接与电话网络和互联网连接。与在其他小区网络中一样,从一个小区跨到另一小区的移动装置会自动转到新的小区。应当理解,5g网络只是通信网络的示例类型,并且本公开的实施方案可以利用更早一代的无线或有线通信,以及5g之后的更新一代的有线或无线技术。
49.如图所示,云游戏网络190包括提供对多个视频游戏的访问的游戏服务器160。游戏服务器160可以是云中可用的任何类型的服务器计算装置,并且可以被配置为在一个或多个主机上执行的一个或多个虚拟机。例如,游戏服务器160可管理支持为用户实例化游戏实例的游戏处理器的虚拟机。这样,与多个虚拟机相关联的游戏服务器160的多个游戏处理器被配置为执行与多个用户的游戏进行相关联的一个或多个游戏的多个实例。以这种方式,后端服务器支持向多个对应用户提供多个游戏应用的游戏进行的媒体(例如,视频、音频等)的流式传输。也就是说,游戏服务器160被配置为通过网络150将数据(例如,对应游戏进行的渲染图像和/或帧)流式传输回对应客户端装置110。以该方式,计算上复杂的游戏应用可响应于由客户端装置110接收和转发的控制器输入而在后端服务器处执行。每个服务器能够渲染图像和/或帧,然后将其编码(例如,压缩)并流式传输到对应的客户端装置以供显示。
50.例如,多个用户可使用被配置用于接收流式传输媒体的对应客户端装置110经由通信网络150访问云游戏网络190。在一个实施方案中,客户端装置110可被配置为瘦客户端,所述瘦客户端提供与被配置用于提供计算功能性(例如,包括游戏名称处理引擎111)的后端服务器(例如,云游戏网络190)的介接。在另一实施方案中,客户端装置110可配置有用于视频游戏的至少一些本地处理的游戏名称处理引擎和游戏逻辑,并且还可被利用来接收由在后端服务器处执行的视频游戏生成的流式传输内容,或由后端服务器支持提供的其他内容。对于本地处理,游戏名称处理引擎包括用于执行视频游戏和与视频游戏相关联的服务的基于基本处理器的功能。在这种情况下,游戏逻辑可以存储在本地客户端装置110上并用于执行视频游戏。
51.每个客户端装置110可以请求访问来自云游戏网络的不同游戏。例如,云游戏网络190可以执行一个或多个游戏逻辑,这些逻辑建立在游戏名称处理引擎111上,如使用游戏服务器160的cpu资源163和gpu资源365执行的。例如,与游戏名称处理引擎111合作的游戏逻辑115a可以在用于一个客户端的游戏服务器160上执行,与游戏名称处理引擎111合作的游戏逻辑115b可以在用于第二客户端的游戏服务器160上执行,并且与游戏名称处理引擎111合作的游戏逻辑115n可以在用于第n客户端的游戏服务器160上执行。
52.特别地,对应用户(未示出)的客户端装置110被配置用于通过诸如互联网的通信网络150请求访问游戏,并且用于渲染由游戏服务器160执行的视频游戏生成的显示图像(例如图像帧),其中编码图像被传送到客户端装置110以与对应的用户相关联地显示。例如,用户可以通过客户端装置110与在游戏服务器160的游戏处理器上执行的视频游戏的实例进行交互。更具体地,视频游戏的实例由游戏名称处理引擎111执行。实现视频游戏的对
应游戏逻辑(例如,可执行代码)115被存储并可通过数据存储区(未示出)访问,并用于执行视频游戏。游戏名称处理引擎111能够使用多个游戏逻辑(例如游戏应用)来支持多个视频游戏,每个游戏逻辑都可由用户选择。
53.例如,客户端装置110被配置为与和对应用户的游戏进行相关联的游戏名称处理引擎111交互,诸如通过用于驱动游戏进行的输入命令。特别地,客户端装置110可以接收来自各种类型的输入装置的输入,诸如游戏控制器、平板计算机、键盘、由摄像机捕获的手势、鼠标、触摸板等。客户端装置110可以是任何类型的至少具有存储器和能够通过网络150连接到游戏服务器160的处理器模块的计算装置。后端游戏名称处理引擎111被配置用于生成渲染图像,该渲染图像通过网络150传送以在与客户端装置110相关联的对应显示器处显示。例如,通过基于云的服务,游戏渲染图像可以由在游戏服务器160的游戏执行引擎111上执行的对应游戏(例如游戏逻辑)的实例来传送。也就是说,客户端装置110被配置用于接收编码图像(例如,从通过执行视频游戏生成的游戏渲染图像编码),并且用于在显示器11上显示渲染的图像。在一个实施方案中,显示器11包括hmd(例如,显示vr内容)。在一些实施方案中,渲染图像可以以无线或有线方式、直接从基于云的服务或经由客户端装置110(例如remote play)流式传输到智能手机或平板电脑。
54.在一个实施方案中,游戏服务器160和/或游戏名称处理引擎111包括用于执行游戏和与游戏应用相关联的服务的基于基本处理器的功能。例如,游戏服务器160包括中央处理单元(cpu)资源163和图形处理单元(gpu)资源365,它们被配置用于执行基于处理器的功能,包括2d或3d渲染、物理模拟、脚本化、音频、动画、图形处理、照明、着色、光栅化、光线追踪、阴影、剔除、变换、人工智能等。另外,cpu和gpu组可以实现用于游戏应用的服务,部分地包括存储器管理、多线程管理、服务质量(qos)、带宽测试、社交网络、社交好友管理、与朋友的社交网络通信、通信渠道、发短信、即时消息、聊天支持等。在一个实施方案中,一个或多个应用共享特定的gpu资源。在一个实施方案中,可以组合多个gpu装置来为在对应cpu上执行的单个应用执行图形处理。
55.在一个实施方案中,云游戏网络190是分布式游戏服务器系统和/或架构。特别地,执行游戏逻辑的分布式游戏引擎被配置为对应游戏的对应实例。通常,分布式游戏引擎采用游戏引擎的每个功能并将这些功能分布以供多个处理实体执行。单独的功能可以进一步分布在一个或多个处理实体上。处理实体可以被配置为不同的配置,包括物理硬件,和/或作为虚拟部件或虚拟机,和/或作为虚拟容器,其中容器不同于虚拟机,因为它虚拟化正在虚拟化操作系统上运行的游戏应用的实例。处理实体可以利用和/或依赖云游戏网络190的一个或多个服务器(计算节点)上的服务器及其底层硬件,其中服务器可以位于一个或多个机架上。对各种处理实体执行这些功能的协调、分配和管理由分布同步层执行。以这种方式,这些功能的执行由分布同步层控制,以响应于玩家的控制器输入为游戏应用生成媒体(例如,视频帧、音频等)。分布同步层能够跨分布式处理实体有效地执行(例如,通过载荷平衡)这些功能,以使得关键的游戏引擎部件/功能被分布和重新组装以进行更有效的处理。
56.图2是根据本公开的一个实施方案的其中多个gpu协作以渲染对应应用的单个图像的示例性多gpu架构200的示意图。多gpu架构200被配置为在渲染时或在渲染之前执行图像帧的几何图形的几何图形分析以将屏幕区域动态分配给gpu以用于图像帧的几何图形渲染,和/或当将几何图形(例如,由绘制调用处理或产生的)细分成几何图形的更小部分并将
几何图形的这些更小部分分配给多个gpu以用于渲染时,其中根据本公开的各种实施方案,几何图形的每个更小部分被分配给gpu。应当理解,在本公开的各种实施方案中,许多架构是可能的,其中多个gpu协作以渲染单个图像,尽管没有明确地描述或示出。例如,在渲染时通过执行区域测试来为应用进行几何图形的多gpu渲染可以在云游戏系统的一个或多个云游戏服务器之间实现,或者可以在独立系统(诸如包括具有多个gpu的高端显卡的个人计算机或游戏控制台)内实现,等等。
57.多gpu架构200包括cpu 163和多个gpu,其被配置用于为应用的单个图像(也称为“图像帧”)和/或应用的图像序列中的每个图像进行多gpu渲染。特别地,cpu 163和gpu资源365被配置用于执行基于处理器的功能,包括2d或3d渲染、物理模拟、脚本化、音频、动画、图形处理、照明、着色、光栅化、光线追踪、阴影、剔除、变换、人工智能等,如前所述。
58.例如,在多gpu架构200的gpu资源365中示出了四个gpu,尽管在为应用渲染图像时可以使用任意数量的gpu。每个gpu经由高速总线220连接到对应的专用存储器,诸如随机存取存储器(ram)。特别地,gpu-a经由总线220连接到存储器210a(例如,ram),gpu-b经由总线220连接到存储器210b(例如,ram),gpu-c经由总线220连接到存储器210c(例如,ram),和gpu-d经由总线220连接到存储器210d(例如,ram)。
59.此外,每个gpu经由总线240彼此连接,取决于架构,总线240在速度上可能大约等于或慢于用于对应gpu与其对应存储器之间的通信的总线220。例如,gpu-a经由总线240连接到gpu-b、gpu-c和gpu-d中的每一个。同样,gpu-b经由总线240连接到gpu-a、gpu-c和gpu-d中的每一个。此外,gpu-c经由总线240连接到gpu-a、gpu-b和gpu-d中的每一个。进一步,gpu-d经由总线240连接到gpu-a、gpu-b和gpu-c中的每一个。
60.cpu 163经由较低速度的总线230连接到每个gpu(例如,总线230比用于对应gpu与其对应存储器之间的通信的总线220慢)。具体地,cpu 163连接到gpu-a、gpu-b、gpu-c和gpu-d中的每一个。
61.在一些实施方案中,四个gpu是分立的gpu,每个都在它们自己的硅片上。在其他实施方案中,四个gpu可以共享一个裸片,以便利用裸片上的高速互连和其他单元。在其他实施方案中,有一个物理gpu 250可以被配置为用作单个更强大的gpu或用作四个不太强大的“虚拟”gpu(gpu-a、gpu-b、gpu-c和gpu-d)。也就是说,gpu-a、gpu-b、gpu-c和gpu-d每个都有足够的功能来操作一个图形流水线(如图4所示),芯片作为一个整体可以操作一个图形流水线(如图4所示),并且配置可以在两种配置之间灵活切换(例如在渲染通过之间)。
62.图3是根据本公开的各种实施方案的图形处理单元资源365的示意图,所述图形处理单元资源被配置用于通过在渲染时或在渲染之前执行图像帧的几何图形的几何图形分析以将屏幕区域动态分配给gpu以用于图像帧的几何图形渲染来为应用生成的图像帧进行几何图形的多gpu渲染,和/或当将几何图形(例如,由绘制调用处理或产生的)细分成几何图形的更小部分并将几何图形的这些更小部分分配给多个gpu以用于渲染时为应用生成的图像帧进行几何图形的多gpu渲染,其中几何图形的每个更小部分被分配给gpu。例如,游戏服务器160可以被配置为在图1的云游戏网络190中包括gpu资源365。如图所示,gpu资源365包括多个gpu,诸如gpu 365a、gpu 365b
……
gpu 365n。如前所述,各种架构可以包括多个gpu协作以通过在渲染时通过区域测试为应用执行几何图形的多gpu渲染来渲染单个图像,诸如在云游戏系统的一个或多个云游戏服务器之间实现几何图形的多gpu渲染,或在独立
系统(诸如包括具有多个gpu的高端显卡的个人计算机或游戏控制台)内实现几何图形的多gpu渲染,等等。
63.特别地,在一个实施方案中,游戏服务器160被配置为在渲染应用的单个图像时执行多gpu处理,使得多个gpu协作以渲染单个图像,和/或在执行应用时渲染图像序列的一个或多个图像中的每一个。例如,在一个实施方案中,游戏服务器160可以包括cpu和gpu组,其被配置为对应用的图像序列中的一个或多个图像中的每一个执行多gpu渲染,其中一个cpu和gpu组可以实现应用的图形和/或渲染流水线。cpu和gpu组可以被配置为一个或多个处理装置。如前所述,gpu和gpu组可以包括cpu 163和gpu资源365,其被配置用于执行基于处理器的功能,包括2d或3d渲染、物理模拟、脚本化、音频、动画、图形处理、照明、着色、光栅化、光线追踪、阴影、剔除、变换、人工智能等。
64.gpu资源365负责和/或配置用于渲染对象(例如,将对象像素的颜色或法线向量值写入多渲染目标-mrt)和执行同步计算内核(例如,对产生的mrt的全屏效果);要执行的同步计算和要渲染的对象由包含在gpu将执行的多个渲染命令缓冲区325中的命令指定。特别地,gpu资源365被配置为在执行来自渲染命令缓冲区325的命令时渲染对象并执行同步计算(例如,在同步计算内核的执行期间),其中命令和/或操作可以依赖于其他操作,使得它们依次执行。
65.例如,gpu资源365被配置为使用一个或多个渲染命令缓冲区325(例如渲染命令缓冲区325a、渲染缓冲区325b
……
渲染命令缓冲区325n)来执行同步计算和/或对象的渲染。在一个实施方案中,gpu资源365中的每个gpu可以具有它们自己的命令缓冲区。替代地,当每个gpu正在渲染基本上相同的一组对象时(例如,由于区域的小尺寸),gpu资源365中的gpu可以使用相同的命令缓冲区或相同的一组命令缓冲区。此外,gpu资源365中的每个gpu可以支持命令由一个gpu执行而不是由另一个gpu执行的能力。例如,绘制命令上的标志或渲染命令缓冲区中的预测允许单个gpu执行对应命令缓冲区中的一个或多个命令,而其他gpu将忽略这些命令。例如,渲染命令缓冲区325a可以支持标志330a,渲染命令缓冲区325b可以支持标志330b
……
渲染命令缓冲区325n可以支持标志330n。
66.同步计算的性能(例如同步计算内核的执行)和对象的渲染是整体渲染的一部分。例如,如果视频游戏以60hz(例如每秒60帧)运行,则图像帧的所有对象渲染和同步计算内核的执行通常必须在大约16.67毫秒(例如,60hz的一帧)内完成。如前所述,渲染对象和/或执行同步计算内核时执行的操作是有序的,使得操作可能依赖于其他操作(例如,渲染命令缓冲区中的命令可能需要在该渲染命令缓冲区中的其他命令可以执行之前完成执行)。
67.特别地,每个渲染命令缓冲区325包含各种类型的命令,包括影响对应gpu配置的命令(例如,指定渲染目标的位置和格式的命令),以及渲染对象和/或执行同步计算内核的命令。为了说明的目的,执行同步计算内核时执行的同步计算可以包括当对象全部被渲染到一个或多个对应多渲染目标(mrt)时执行全屏效果。
68.此外,当gpu资源365为图像帧渲染对象,和/或在生成图像帧时执行同步计算内核时,gpu资源365经由每个gpu 365a、365b
……
365n的寄存器进行配置。例如,gpu 365a经由其寄存器340(例如寄存器340a、寄存器340b
……
寄存器340n)配置为以某种方式执行该渲染或计算内核执行。也就是说,当执行渲染命令缓冲区325中的命令用于为图像帧渲染对象和/或执行同步计算内核时,存储在寄存器340中的值定义用于gpu 365a 365的硬件背景
(例如gpu配置或gpu状态)。gpu资源365中的每个gpu可以被类似地配置,使得gpu 365b经由其寄存器350(例如,寄存器350a、寄存器350b
……
寄存器350n)被配置为以某种方式执行该渲染或计算内核执行;
……
并且gpu 365n经由其寄存器370(例如,寄存器370a、寄存器370b
……
寄存器370n)被配置为以某种方式执行该渲染或计算内核执行。
69.gpu配置的一些示例包括渲染目标(例如mrt)的位置和格式。同样,gpu配置的其他示例包括操作程序。例如,在渲染对象时,可以通过各种方式将对象的每个像素的z值与z缓冲区进行比较。例如,仅当对象z值与z缓冲区中的值匹配时才写入对象像素。替代地,仅当对象z值等于或小于z缓冲区中的值时才可以写入对象像素。正在执行的测试类型在gpu配置中定义。
70.图4是根据本公开的一个实施方案的实现被配置用于多gpu处理以使得多个gpu协作以渲染单个图像的图形流水线400的渲染架构的简化示意图。图形流水线400说明了使用3d(三维)多边形渲染过程来渲染图像的一般过程。用于渲染图像的图形流水线400为显示器中的每个像素输出对应的颜色信息,其中颜色信息可以表示纹理和着色(例如,颜色、阴影等)。图形流水线400可以在图1和图3的客户端装置110、游戏服务器160、游戏名称处理引擎111和/或gpu资源365内实现。也就是说,各种架构可能包括多个gpu协作以通过在渲染时通过区域测试为应用执行几何图形的多gpu渲染来渲染单个图像,诸如在云游戏系统的一个或多个云游戏服务器之间实现几何图形的多gpu渲染,或在独立系统(诸如包括具有多个gpu的高端显卡的个人计算机或游戏控制台)内实现几何图形的多gpu渲染,等等。
71.如图所示,图形流水线接收输入几何图形405。例如,几何图形处理级410接收输入几何图形405。例如,输入几何图形405可以包括3d游戏世界内的顶点,以及对应于每个顶点的信息。游戏世界中的给定对象可以使用由顶点定义的多边形(例如三角形)来表示,其中对应多边形的表面然后通过图形流水线400进行处理以实现最终效果(例如颜色、纹理等)。顶点属性可以包括法线(例如,哪个方向垂直于那个位置的几何图形)、颜色(例如,rgb-红色、绿色和蓝色三元组等),以及纹理坐标/映射信息。
72.几何图形处理级410负责(并且能够进行)顶点处理(例如,经由顶点着色器)和图元处理两者。特别地,几何图形处理级410可以输出定义图元的顶点集合并将它们传递到图形流水线400的下一级,以及输出这些顶点的位置(准确地说,齐次坐标)和各种其他参数。这些位置被放置在位置高速缓存450中以供后面的着色器级访问。其他参数被放置在参数高速缓存460中,再次供后面的着色器级访问。
73.几何图形处理级410可以执行各种操作,诸如对图元和/或多边形执行光照和阴影计算。在一个实施方案中,由于几何图形级能够处理图元,它可以执行背面剔除和/或剪裁(例如,针对视锥体进行测试),从而减少下游级(例如,光栅化级420等)的负载。在另一实施方案中,几何图形级可以生成图元(例如,具有与传统几何图形着色器等效的功能)。
74.几何图形处理级410输出的图元被馈送到光栅化级420,光栅化级420将图元转换成由像素组成的光栅图像。特别地,光栅化级420被配置为将场景中的对象投影到由3d游戏世界中的观看位置(例如,相机位置、用户眼睛位置等)定义的二维(2d)图像平面。在简单的级别上,光栅化级420查看每个图元并确定哪些像素受到对应图元的影响。特别地,光栅化器420将图元分割成像素大小的片段,其中每个片段对应于显示器中的一个像素。重要的是要注意,在显示图像时,一个或多个片段可能会影响对应像素的颜色。
75.如前所述,光栅化级420还可以执行附加操作,诸如针对观看位置裁剪(识别并忽略在视锥体之外的片段)和剔除(忽略被更近的对象遮挡的片段)。关于裁剪,几何图形处理级410和/或光栅化级420可以被配置为识别和忽略在由游戏世界中的观看位置定义的视锥体之外的图元。
76.像素处理级430使用由几何图形处理级创建的参数以及其他数据来生成诸如像素的得到的颜色之类的值。特别地,像素处理级430在其核心对片段执行着色操作以确定图元的颜色和亮度如何随可用照明而变化。例如,像素处理级430可以确定每个片段的深度、颜色、法线和纹理坐标(例如,纹理细节),并且可以进一步确定片段的适当的明度、暗度和颜色水平。特别地,像素处理级430计算每个片段的特征,包括颜色和其他属性(例如,z深度表示距观看位置的距离,以及α值表示透明度)。此外,像素处理级430基于影响对应片段的可用照明将照明效果应用到片段。此外,像素处理级430可以为每个片段应用阴影效果。
77.像素处理级430的输出包括处理后的片段(例如,纹理和着色信息)并被传递到图形流水线400的下一个级中的输出合并级440。输出合并级440使用像素处理级430的输出以及诸如已经在存储器中的值等其他数据为像素生成最终颜色。例如,输出合并级440可以对从像素处理级430确定的片段和/或像素之间的值与已经写入该像素的mrt的值进行可选的混合。
78.显示器中每个像素的颜色值可以存储在帧缓冲区(未示出)中。当显示场景的对应图像时,这些值被扫描到对应的像素。特别是,显示器逐行地从左到右或从右到左、从上到下或从下到上、或以任何其他模式从每个像素的帧缓冲区中读取颜色值,并在显示图像时使用这些像素值照亮像素。
79.本公开的实施方案使用多个gpu协作生成和/或渲染单个图像帧。使用多个gpu的困难在于将相同量的工作分配给每个gpu。本公开的实施方案通过分析要渲染的几何图形的空间分布并动态(即逐帧)调整gpu对屏幕区域的责任以优化几何图形工作和像素,能够向每个gpu提供等量的工作(即近似分布工作),支持像素计数(即分辨率)和复杂性的增加,和/或几何图形复杂性的增加,和/或每个顶点和/或图元的处理量增加。这样,gpu责任的动态分配根据屏幕区域执行,如下面关于图5a-图5b和图6a-图6b进一步描述的。
80.图5a-图5b仅出于说明目的示出了被细分为区域的屏幕的渲染,其中每个区域以固定方式分配给gpu。也就是说,区域到gpu的分配不会随着图像帧的变化而变化。在图5a中,屏幕被细分为四个象限,每个象限分配给不同的gpu。在图5b中,屏幕被细分为大量交错区域,每个交错区域分配给一个gpu。下面的图5a-图5b的讨论旨在说明在对分配有多个gpu的多个屏幕区域执行多gpu渲染时出现的低效率;图8示出了根据本发明实施方案的更有效的渲染。
81.特别地,图5a是在执行多gpu渲染时被细分为象限(例如四个区域)的屏幕510a的示意图。如图所示,屏幕510a被细分为四个象限(例如a、b、c和d)。每个象限以一对一的关系被分配给四个gpu[gpu-a、gpu-b、gpu-c和gpu-d]之一。也就是说,gpu责任是通过固定区域分配被分布的,其中每个gpu具有到一个或多个屏幕区域的固定分配。例如,gpu-a分配给象限a,gpu-b分配给象限b,gpu-c分配给象限c,和gpu-d分配给象限d。
[0082]
几何图形可以被剔除。例如,cpu 163可以检查每个象限的平截头体的边界框,并请求每个gpu仅渲染与其对应平截头体重叠的对象。结果是每个gpu只负责渲染几何图形的
一部分。出于说明的目的,屏幕510示出几何图形,其中每个都是对应的对象,其中屏幕510示出对象511-517(例如几何图形)。可以理解,几何图形可以对应于整个对象或对象的一部分(例如,图元等)。gpu-a将不渲染任何对象,因为没有对象与象限a重叠。gpu-b将渲染对象515和516(由于对象515的一部分存在于象限b中,cpu的剔除测试将正确得出结论:gpu-b必须渲染它)。gpu-c将渲染对象511和512。gpu-d将渲染对象512、513、514、515和517。
[0083]
在图5a中,当屏幕510a被划分为象限a-d时,每个gpu必须执行的工作量可能非常不同,因为在某些情况下一个象限中可能存在不成比例的几何图形量。例如,象限a没有任何几何图形,而象限d具有五个几何图形,或至少五个几何图形的至少一部分。因此,分配给象限a的gpu-a将处于空闲状态,而分配给象限d的gpu-d在渲染对应图像中的对象时会异常繁忙。
[0084]
图5b图示了根据本公开的一个实施方案的在执行多gpu渲染时当将屏幕细分为区域以使得屏幕510b被细分为多个交错区域时的另一种技术。特别地,当执行单个图像或图像序列中的一个或多个图像中的每一个的多gpu渲染时,屏幕510b不是细分为象限,而是细分为多个区域。例如,屏幕510b可以被细分为对应于gpu的区域。在那种情况下,屏幕510b被细分为更多数量的区域(例如大于四个象限),同时使用相同量的gpu进行渲染(例如四个)。屏幕510a中所示的对象(511-517)也显示在屏幕510b中相同的对应位置。
[0085]
具体而言,四个gpu(例如gpu-a、gpu-b、gpu-c和gpu-d)用于为对应的应用渲染图像。每个gpu负责渲染与对应区域重叠的几何图形。也就是说,每个gpu都被分配到一组对应的区域。例如,gpu-a负责对应组中标记为a的每个区域,gpu-b负责对应组中标记为b的每个区域,gpu-c负责对应组中标记为c的每个区域,和gpu-d负责对应组中标记为d的每个区域。
[0086]
此外,这些区域以特定模式交错。由于区域的交错(和更多数量的区域),每个gpu必须执行的工作量可能会更加平衡。例如,屏幕510b的交错模式包括交替行,包括区域a-b-a-b等,以及区域c-d-c-d等。在本公开的实施方案中支持使区域交错的其他模式。例如,模式可以包括重复的区域序列、均匀分布的区域、区域的不均匀分布、区域序列的重复行、随机的区域序列、区域序列的随机行等。
[0087]
选择区域的数量很重要。例如,如果区域的分布太细(例如,区域的数量太大而无法优化),则每个gpu仍必须处理几何图形的大部分或所有。例如,可能很难针对gpu负责的所有区域检查对象边界框。此外,即使可以及时检查边界框,由于区域大小较小,结果将是每个gpu可能必须处理几何图形的大部分,因为图像中的每个对象都与每个gpu的至少一个区域重叠(例如,gpu处理整个对象,即使对象的只有一部分与分配给该gpu的一组区域中的至少一个区域重叠)。
[0088]
因此,选择区域的数量很重要。选择太少或太多区域可能会导致在执行gpu处理(例如,每个gpu处理几何图形的大部分或所有)时效率低下或不平衡(例如,一个gpu处理比另一个多得多的对象)。在这些情况下,即使有多个gpu用于渲染图像,由于这些低效率,无法支持屏幕像素计数和几何图形密度的对应增加(即四个gpu不能写入四倍的像素并处理四倍顶点或图元)。因此,在本公开的实施方案中,可以生成信息(经由“几何图形分析”)以指示在每个屏幕区域中存在哪个对象或哪些对象。可以在渲染时或渲染之前执行几何图形分析,然后可以使用所得信息将屏幕区域动态分配给gpu,以进一步渲染对应的图像帧,如下面将进一步描述的。也就是说,屏幕区域不固定到对应的gpu,而是可以动态地分配给gpu
用于渲染对应的图像帧。
[0089]
图6a-图6b示出了在本公开的各种实施方案中将图像帧内的对象分割成更小的部分以用于执行几何图形分析以便将屏幕区域动态分配给gpu以用于图像帧的整个对象和/或对象的部分的几何图形渲染的优点。具体而言,通过对屏幕中的对象执行几何图形分析,对单个图像帧执行对象的多gpu渲染。为“几何图形”生成信息,其中几何图形可以是整个对象或对象的一部分。例如,一个几何图形可以是对象610,或对象610的一部分。具体来说,gpu被分配给几何图形(例如,整个对象和/或对象的部分)以用于确定几何图形与多个屏幕区域中的每一个之间的关系。也就是说,gpu协作确定提供几何图形中的每一个和屏幕区域中的每一个之间的关系的信息。对信息进行分析,以将屏幕区域动态分配给gpu,以便随后渲染对应的图像帧。根据本公开的一个实施方案,在几何图形分析和后续渲染期间,例如几何图形渲染,如果一个对象与单个gpu关联以进行几何图形渲染(例如,将包括该对象的所有屏幕区域动态分配给单个gpu),则其他gpu可以在渲染图像帧时完全跳过该对象,这实现几何图形的高效处理。此外,在执行几何图形分析和/或渲染对应的图像帧中的几何图形时,将对象分割成更小的部分可以提高效率。
[0090]
图6a图示了根据本公开的一个实施方案的当多个gpu协作渲染对应的图像帧时对整个对象几何图形分析(即对应的绘制调用使用或生成的几何图形量)以确定对象与屏幕区域的关系。如果一个对象被整体渲染(即绘制调用使用或生成的几何图形没有被分割成多个部分),那么负责渲染与对象重叠的屏幕区域的每个gpu必须渲染整个对象。特别地,在几何图形分析期间,对象610可以被确定为与区域620a重叠并且对象610也可以被确定为与区域620b重叠。也就是说,对象610的部分610a与区域620a重叠,并且对象610的部分610b与区域620b重叠。随后,gpu-a被分配负责在屏幕区域620a中渲染对象,而gpu-b被分配负责在屏幕区域620b中渲染对象。因为对象被整体渲染,所以gpu-a的任务是完全渲染对象610,即处理对象内的所有图元,包括跨区域620a和620b两者的图元。在这个特定示例中,gpu-b的任务也有整体渲染对象610。也就是说,gpu-a和gpu-b在执行对应图像帧中的对象的几何图形渲染时可能存在重复工作。此外,如果在gpu之间分布少量对象(即绘制调用),几何图形分析本身可能难以平衡。
[0091]
图6b图示了根据本公开的一个实施方案的在多个gpu协作以渲染对应的图像帧时对对象的部分进行几何图形分析以确定对象的部分与屏幕区域的关系。如图所示,绘制调用使用或生成的几何图形被细分以创建对象的这些部分。例如,对象610可以被分割成多个,使得由绘制调用使用或生成的几何图形被细分成更小的几何图形。在那种情况下,在几何图形分析期间为那些更小的几何图形生成信息以确定更小的几何图形与每个屏幕区域之间的关系(例如重叠)。使用该信息执行几何图形分析,以在gpu之间动态分配屏幕区域渲染责任,以渲染对应图像帧的更小的几何图形。在为对应的图像帧执行渲染时,每个gpu仅渲染与其负责的屏幕区域重叠的更小的几何图形。因此,每个gpu被分配给一组屏幕区域,用于渲染对应图像帧的几何图形。也就是说,每个图像帧都有一个独特的gpu责任分配。以这种方式,在渲染对应的图像帧时效率更高,因为在执行几何图形分析和/或渲染对应图像帧中的对象的几何图形时gpu之间的重复工作可能会更少。
[0092]
在一个实施方案中,尽管命令缓冲区中的绘制调用保持不变,但在渲染时gpu将几何图形分割成多个。几何图形的大小可能与为其分配的位置高速缓存和/或参数高速缓存
的大小大致相同。每个gpu要么渲染或要么跳过这些几何图形,因此gpu仅渲染与其分配的屏幕区域重叠的几何图形。
[0093]
例如,对象610被分割成多个部分,使得用于区域测试的几何图形对应于对象610的这些更小部分。如图所示,对象610被分割成几何图形“a”、“b”、“c”、“d”、“e”和“f”。在几何图形分析之后,可以将gpu-a动态分配给屏幕区域620a,以便在渲染对应的图像帧时渲染几何图形“a”、“b”、“c”、“d”和“e”。也就是说,gpu-a可以跳过渲染几何图形“f”。此外,在几何图形分析之后,gpu-b可以被分配给屏幕区域620b,以便在渲染对应的图像帧时渲染几何图形“d”、“e”和“f”。也就是说,gpu-b可以跳过渲染几何图形“a”、“b”和“c”。如图所示,gpu-a和gpu-b之间的重复工作较少,因为不是完全渲染对象610,而是由gpu-a和gpu-b中的每一个仅渲染几何图形“d”和“e”。
[0094]
通过在渲染时执行几何图形分析来进行几何图形的多gpu渲染
[0095]
利用图1-图3的云游戏网络190(例如在游戏服务器160中)和gpu资源365的详细描述,图7的流程图700图示了根据本公开的一个实施方案的当通过在渲染时执行几何图形分析来实现由应用生成的图像帧的几何图形的多gpu渲染时的图形处理方法。特别地,许多gpu协作生成图像帧。基于每个图像帧的屏幕区域,在多个gpu之间划分对某些渲染阶段的责任。在渲染几何图形时,gpu会生成有关几何图形及其与屏幕区域关系的信息。此信息用于将gpu分配给屏幕区域,从而实现更高效的渲染。以这种方式,当执行应用时,使用多个gpu资源来高效地执行图像帧的对象的渲染。如前所述,各种架构可以包括多个gpu协作以通过在渲染时通过区域测试为应用执行几何图形的多gpu渲染来渲染单个图像,诸如在云游戏系统的一个或多个云游戏服务器内,或在独立系统(诸如包括具有多个gpu的高端显卡的个人计算机或游戏控制台)内,等等。
[0096]
在710,该方法包括使用多个gpu渲染图形,其中在某些阶段中,基于屏幕区域在多个gpu之间动态地划分渲染责任。特别地,在渲染单个图像帧和/或用于实时应用的图像帧序列中的一个或多个图像帧中的每一个时执行多gpu处理,其中每个图像帧包括多个几何图形。在某些阶段,gpu渲染责任在用于每个图像帧的多个屏幕区域之间动态分配,使得每个gpu在其分配的屏幕区域中渲染几何图形。也就是说,每个gpu都有对应的责任划分(例如对应的屏幕区域)。
[0097]
在720,该方法包括使用多个gpu协作来渲染包括多个对应几何图形的图像帧。在一个实施方案中,在渲染时执行预通过渲染阶段。在一个实施方案中,该预通过渲染阶段是z预通过,其中渲染多个几何图形。
[0098]
为了执行预通过渲染阶段,在720,该方法包括在z预通过渲染阶段期间在多个gpu之间划分处理图像帧的多个几何图形的责任。也就是说,将多个几何图形中的每一个分配给对应的gpu以执行z预通过,和/或每个gpu都分配有一组由它负责的屏幕区域。因此,在z预通过阶段中在多个gpu处渲染多个几何图形以生成一个或多个z缓冲区。特别地,每个gpu在z预通过阶段渲染对应的几何图形,以生成对应的z缓冲区。例如,对于一个对应的几何图形,z缓冲区可以包括测量从投影平面上的像素到该几何图形的距离的对应z值(例如深度值)。如本领域公知的,可以从z缓冲区中去除隐藏的几何图形或对象。
[0099]
在一个实施方案中,每个gpu可以具有专用的z缓冲区。例如,第一gpu在z预通过阶段渲染第一几何图形以生成第一z缓冲区。其他gpu在z预通过阶段渲染对应的几何图形以
生成对应的z缓冲区。在一个实施方案中,每个gpu将其在其对应z缓冲区中的数据发送到多个gpu中的每一个,使得对应的z缓冲区被更新并且大致相似以在渲染图像帧的几何图形时使用。也就是说,每个gpu被配置为合并从所有z缓冲区接收到的数据,从而类似地更新gpu的每个对应z缓冲区。
[0100]
在730,该方法包括生成关于图像帧的多个几何图形及其与多个屏幕区域的关系的信息。在一种实施方式中,该信息是在预通过渲染阶段期间生成的。例如,信息是在第一gpu处在渲染一个几何图形时生成的,其中该信息可以指示该几何图形与哪些屏幕区域重叠。如前所述,该几何图形可以是整个对象(即,由单个绘制调用使用或生成的几何图形)或对象的一部分(例如,各个图元、图元组等)。此外,该信息可以包括对应屏幕区域中一个几何图形的存在。该信息可以包括关于该几何图形在对应屏幕区域中的存在的保守近似。该信息可以包括该几何图形在屏幕区域中覆盖的像素面积或近似像素面积(例如覆盖范围)。该信息可以包括写入屏幕区域的像素的数量。该信息可以包括在z预通过渲染阶段期间每个屏幕区域的每个几何图形中写入z缓冲区的像素的数量。
[0101]
在740,该方法包括在随后将屏幕区域分配给多个gpu时使用该信息。特别地,基于该信息将每个gpu分配给对应的屏幕区域,以便在随后的渲染阶段(可能是几何图形通过)期间渲染图像帧。以这种方式,屏幕区域到gpu的分配可能因图像帧而异,也就是说它可能是动态的。
[0102]
图8是根据本公开的一个实施方案的屏幕800的示意图,其图示了基于在渲染当前图像帧时执行的对当前图像帧的几何图形的分析将屏幕区域动态分配给gpu以用于几何图形渲染(即,将几何图形渲染到mrt)。如图所示,屏幕800可以被细分为区域,为了说明的目的,每个区域的大小大致相等。在其他实施方案中,每个区域的大小和形状可以不同。例如,区域810代表屏幕800的相等细分。
[0103]
屏幕800中所示的对象和对象的位置与图5a的屏幕510a和图5b的屏幕510b中所示的对象和它们的位置相同。例如,对象511-517显示在屏幕800中。图5a示出了将屏幕510a划分为固定分配给gpu用于几何图形渲染的象限。图5b示出了将屏幕510b划分为固定分配给gpu用于几何图形渲染的区域。图8示出了用于包括对象511-517的当前图像帧的屏幕区域到gpu的动态分配。分配是按图像帧执行的。也就是说,在下一图像帧中,对象511-517可能处于不同的位置,因此,下一图像帧的屏幕区域分配可能不同于当前图像帧的分配。例如,gpu-a被分配给一组屏幕区域832,并渲染对象511和512。同样,gpu-b被分配给一组屏幕区域834,并渲染对象513、515和517。gpu-c被分配给一组屏幕区域836,并渲染对象512、513、514和517。并且gpu-d被分配给一组屏幕区域838,并渲染对象515和516。当对象被进一步划分为多个部分时,渲染的重复可能会减少,因为更小的部分可能在gpu区域之间具有更少的重叠。也就是说,通过对应命令缓冲区中的绘制调用保持不变,而在渲染时gpu将几何图形分割为多个(例如,对象的多部分),可能诸如大致与分配的位置高速缓存和/或参数高速缓存的大小相同的几何图形,并根据它们是否与分配给该gpu以进行几何图形渲染的屏幕区域重叠来渲染或跳过这些几何图形。
[0104]
在一个实施方案中,可以处理屏幕区域到gpu的分配,使得在渲染几何图形时每个gpu执行大致相等量的像素工作。这可能不一定等同于由对应对象覆盖的相同量的屏幕区域,因为与对象相关联的像素着色器的复杂性可能不同。例如,gpu d负责渲染四个区域,其
中gpu-a负责渲染6个区域,但是它们对应的像素和/或渲染工作可能大致相等。也就是说,对象可能具有不同的渲染成本,因此对于不同的对象,每个像素或图元或顶点的成本可能更高或更低。这个每像素或图元或顶点等的成本可以对每个gpu可用并且用于信息的生成,或者可以作为信息被包括在内。替代地,可以在分配屏幕区域时使用成本。
[0105]
在一个实施方案中,交叉影线区域830不包含几何图形并且可以分配给任何一个gpu。在另一实施方案中,交叉影线区域830未分配给任何gpu。在任一情况下,都不对区域830执行几何图形渲染。
[0106]
在另一个实施方案中,与对象相关联的所有区域都被分配给单个gpu。以这种方式,所有其他gpu在执行几何图形渲染时可以完全跳过该对象。
[0107]
图9a-图9c是提供对示出四个对象的图像帧的渲染的更详细描述的示意图,其中图像帧的渲染包括z预通过阶段和几何图形渲染阶段。如前所述,根据本公开的实施方案,执行z预通过阶段以生成用于将屏幕区域动态分配给gpu以用于图像帧的几何图形渲染的信息。为了说明的目的,图9a-图9c图示了使用多个gpu来渲染图像帧序列中的每一个。为图9a-图9c所示的示例选择四个gpu纯粹用于说明多gpu渲染,并且应当理解,在各种实施方案中,任何数量的gpu可以用于多gpu渲染。
[0108]
特别地,图9a图示了示出包括在图像帧内的四个对象的屏幕900a。例如,图像帧包括对象0、对象1、对象2和对象3。如图所示,屏幕900a被分割成区域。例如,屏幕900a可以被分割成四个以上的区域,每个区域被分配给对应的gpu以用于渲染当前图像帧。
[0109]
在一个实施方案中,多个gpu使用单个命令缓冲区来渲染对应的图像帧。公共渲染命令缓冲区可以包括针对每个对象的绘制调用和状态设置,以执行z预通过渲染阶段。同步(例如,同步化)操作可以包括在命令缓冲区内,以便所有gpu同时开始几何图形通过渲染阶段。命令缓冲区可以包括针对每个对象的绘制调用和状态设置,以执行几何图形通过渲染阶段。
[0110]
在一个实施方案中,公共渲染命令缓冲区支持命令由一个gpu执行但不由另一个gpu执行的能力。也就是说,公共渲染命令缓冲区的格式允许命令由多个gpu中的一个或子集执行。例如,渲染命令缓冲区中的绘制命令或预测上的标志允许单个gpu执行对应命令缓冲区中的一个或多个命令,而不受其他gpu的干扰,如前所述。
[0111]
图9b图示了根据本公开的一个实施方案的执行以生成一个或多个z缓冲区和与特定图像帧的几何图形和每个屏幕区域和/或绘制屏幕的子区域相关的信息的z预通过渲染阶段。在图9b的z预通过渲染阶段中,示出了一种策略,多个gpu可以通过该策略协作以生成一个或多个z缓冲区用于一帧渲染。可以实施其他策略来生成一个或多个z缓冲区。
[0112]
如图所示,多gpu架构中的每个gpu都分配了一部分几何图形。为了便于说明,gpu-a分配给对象0,gpu-b分配给对象1,gpu-c分配给对象2,和gpu-d分配给对象3。每个gpu在z预通过阶段中渲染对应对象,并将对应的对象渲染到它自己的z缓冲区副本中。例如,在z预通过阶段中,gpu-a将对象0渲染到其z缓冲区。屏幕921示出了由gpu-a确定并存储在其对应的z缓冲区中的对象0的像素覆盖范围。同样,gpu-b将对象1渲染到其z缓冲区,使得屏幕922示出由gpu-b确定并存储在其对应z缓冲区中的对象1的像素覆盖范围。另外,gpu-c将对象2渲染到其z缓冲区,使得屏幕923示出由gpu-c确定并存储在其对应z缓冲区中的对象2的像素覆盖范围。进一步,gpu-d将对象3渲染到其z缓冲区,使得屏幕924示出由gpu-d确定并存
储在其对应z缓冲区中的对象3的像素覆盖范围。
[0113]
此后,将与gpu对应的四个z缓冲区副本合并。也就是说,每个gpu在其自己的ram(随机存取存储器)中都有对应的z缓冲区副本。在一个实施方案中,构建一个或多个z缓冲区的策略包括让每个gpu将其完成的z缓冲区发送到其他gpu。以这种方式,每个z缓冲区的大小和格式都应该相似。特别地,每个z缓冲区中的数据被发送到所有gpu以用于合并和更新每个z缓冲区,这由屏幕925示出从而示出四个对象1-4中的每一个的像素覆盖范围并存储在gpu的每个更新的z缓冲区中。图9b中的对象是空白的,表示只有z被写入,而其他值(例如颜色)还没有为屏幕的每个像素计算。
[0114]
在另一个实施方案中,减少了合并时间。在每个gpu将对应的几何图形写入其z缓冲区时,对应的gpu会将更新的屏幕区域的z缓冲区数据发送到其他gpu,而不是在将数据发送到其他gpu之前等待对应gpu完全完成每个z缓冲区。也就是说,当第一gpu将几何图形渲染到对应的z缓冲区或其他渲染目标时,第一gpu将来自z缓冲区的数据或包括更新的屏幕区域的其他渲染目标数据发送到其他gpu。通过在发送之前不等待对应gpu的每个z缓冲区完全写入,这消除了合并z缓冲区所需的一部分时间,从而减少了合并时间。
[0115]
在另一个实施方案中,用于构建z缓冲区的另一种策略包括在多个gpu之间共享公共z缓冲区或公共渲染目标。例如,可以配置用于执行z缓冲的硬件,使得有一个公共z缓冲区或公共渲染目标由每个gpu共享和更新。也就是说,在z预通过渲染阶段中每个gpu更新公共z缓冲区同时渲染一个或多个对应的几何图形。在四gpu架构的示例中,第一gpu通过更新公共z缓冲区或公共渲染目标来将几何图形渲染到对应的z缓冲区或其他渲染目标,每个都由多个gpu共享。使用公共z缓冲区或公共渲染目标无需合并步骤。在一个实施方案中,屏幕区域被分配给gpu,从而在访问公共z缓冲区时简化了仲裁需要。
[0116]
如前所述,在渲染z缓冲区时会生成信息。在一个实施方案中,作为图4的光栅化级420的一部分执行的扫描转换器生成信息。例如,扫描转换器可以计算一个几何图形和每个屏幕区域的重叠面积。在各种实施方案中,可以以像素为单位测量重叠,诸如在一个几何图形中的每个图元与每个屏幕区域之间。此外,扫描转换器可以对重叠面积求和,以创建每个几何图形的总重叠面积(例如,按像素),如针对每个区域所测量的。
[0117]
在几何图形通过开始之前,该信息可用于将屏幕区域分配给gpu。也就是说,可以将多个gpu中的一个或多个分配给屏幕区域。在一个实施方案中,进行分配使得每个gpu的渲染责任(例如渲染几何图形)大致相等。以这种方式,在一个渲染阶段(z预通过阶段)中生成的信息用于另一个渲染阶段,诸如将屏幕区域分配给gpu用于几何图形通过渲染阶段。
[0118]
如前所述,对象可能具有不同于其他对象的渲染成本。也就是说,一个对象的每个像素或图元或顶点的成本可能高于或低于其他对象。在一些实施方案中,每像素/图元/顶点成本可供gpu使用并用于生成信息,和/或包括在信息中。在另一个实施方案中,在将屏幕区域分配给gpu时使用每像素/图元/顶点成本,以便生成的信息考虑到每个像素或图元或顶点的对应几何图形的近似渲染成本。也就是说,在几何图形渲染阶段期间,确定用于渲染图像帧的多个几何图形的多个成本。将屏幕区域分配给gpu以进行几何图形渲染时会考虑成本。例如,随后将屏幕区域分配给多个gpu会考虑每像素、图元或顶点的几何图形的近似渲染成本,从而可以以在gpu之间根据需要(相等或不相等)划分渲染成本的方式将gpu分配给屏幕区域。
[0119]
图9c图示了根据本公开的一个实施方案的为渲染特定图像帧的几何图形而执行的几何图形通过渲染阶段。在几何图形通过阶段,每个gpu将特定图像帧的对象渲染到它负责的屏幕区域(例如,基于gpu到屏幕区域的先前分配)。特别地,每个gpu将渲染所有对象,除了已知(基于信息)那些对象与分配给gpu进行几何图形渲染的屏幕区域之间没有重叠的那些对象。因此,如果一个几何图形与分配给特定gpu的屏幕区域没有重叠,则该gpu可以跳过该几何图形的渲染。
[0120]
如图所示,多gpu架构中的每个gpu被指派或分配给屏幕的一部分。为了说明的目的,gpu-a被分配给标记为931a的一个区域,并渲染对象0(如图9a中介绍的)(现在变暗以表示正在写入的其他值,例如颜色数据)。屏幕931示出在几何图形渲染之后对象0的渲染目标数据(例如像素)。同样,gpu-b被分配给标记为932a的两个区域,并渲染对象1和对象2的一部分(那些对象的相应部分变暗)。屏幕932示出了在几何图形渲染之后对象1和2的各个部分的渲染目标数据(例如像素)。此外,gpu-c被分配给标记为933a的两个区域,并渲染对象2的一部分(相应部分变暗)。屏幕933示出了在几何图形渲染之后对象2的各个部分的渲染目标数据(例如像素)。同样,gpu-d被分配给标记为934a的三个区域并渲染对象3(现在变暗以表示正在写入的其他值,例如颜色数据)。屏幕934示出在几何图形渲染之后对象3的渲染目标数据(例如像素)。
[0121]
几何图形渲染后,可能需要合并每个gpu生成的渲染目标数据。例如,执行每个gpu在几何图形通过渲染阶段期间生成的几何图形数据的合并,这由包括所有四个对象0-3的渲染目标数据(例如像素)的屏幕935示出。
[0122]
在一个实施方案中,屏幕区域到gpu的分配逐帧改变。也就是说,在比较两个连续图像帧的分配时,每个gpu可以负责不同的屏幕区域。在另一个实施方案中,屏幕区域到gpu的分配也可以在用于渲染单个帧的各个阶段中变化。也就是说,屏幕区域的分配可以在渲染阶段期间动态地改变,诸如几何图形分析阶段(例如,z预通过)或几何图形通过阶段。
[0123]
例如,当对几何图形阶段进行分配时,分配可能因此与现有分配不同。也就是说,gpu-a现在可能负责以前gpu-b负责的屏幕区域。这可能需要将z缓冲区或其他渲染目标数据从gpu-b的存储器传输到gpu a的存储器。例如,该信息可以包括命令缓冲区中将写入到屏幕区域的第一对象。该信息可用于调度dma(直接存储器访问)传输,诸如将用于屏幕区域的z缓冲区数据或其他渲染目标数据从一个gpu传输到另一个gpu。按照以上示例,来自gpu-b的存储器的数据(例如,z缓冲区或渲染目标数据)可以被传输到gpu-a的存储器。在某些情况下,在渲染图像帧时第一次使用屏幕的时间越晚,用于dma传输的时间就越长。
[0124]
在另一个实施方案中,在gpu之间的z缓冲区或其他渲染目标数据的所有更新完成后,该信息可以包括命令缓冲区中将写入到屏幕区域的最后一个对象。该信息可用于调度从渲染gpu(在z预通过渲染阶段期间执行)到其他gpu的dma传输。也就是说,该信息用于调度用于屏幕区域的z缓冲区或其他渲染目标数据从一个gpu到另一个gpu(例如渲染gpu)的传输。
[0125]
在又一个实施方案中,在gpu之间的z缓冲区或其他渲染目标数据的所有更新完成后,可以将更新的数据广播到gpu。在这种情况下,如果任何gpu需要该数据,则可以使用更新的数据。在另一个实施方案中,数据被发送到特定gpu,诸如预期接收gpu在随后的渲染阶段负责屏幕区域。
[0126]
图10图示了根据本公开的一个实施方案的基于整个对象或对象的一部分将屏幕区域动态分配给gpu以进行几何图形渲染来渲染图像帧,其中所述分配基于在渲染图像帧时执行的z预通过渲染阶段期间对当前图像帧执行的几何图形的分析。特别地,渲染时序图1000a示出了基于整个对象(即,由单独的绘制调用使用或生成的几何图形)的图像帧的渲染。相反,渲染时序图1000b示出了基于对象的一部分的图像帧的渲染。当基于对象的一部分渲染图像帧时显示的优势包括gpu之间的渲染性能更加平衡,因此渲染图像帧的时间更短。
[0127]
特别地,渲染时序图1000a图示了四个gpu(例如gpu-a、gpu-b、gpu-c和gpu-d)对四个对象0-3中的每一个的渲染,其中渲染责任以对象粒度分布在gpu之间。对象0-3先前已在图9a-图9c中介绍过。与时间线1090相关地示出了各个渲染阶段。竖直线1001a指示z预通过渲染开始。渲染时序图1000a包括z预通过渲染阶段1010a,并且还图示了示出gpu之间z缓冲数据的合并的阶段1020a。gpu空闲时间使用散列区域示出,其中合并阶段1020a可能发生在该空闲时间期间。提供同步点1030a,使得每个gpu同时开始各自的几何图形通过渲染阶段。同样,如前所述,渲染时序图1000a包括用于渲染图像帧的几何图形的渲染的几何图形通过阶段1040a。提供同步点1050a,使得每个gpu同时开始渲染下一图像帧。同步点1050a还可以指示对应图像帧的渲染的结束。渲染整个对象时渲染图像帧的总时间由时间段1070示出。处理该信息以确定每个gpu的屏幕区域责任未在图中示出,但可以假定在几何图形通过1030a开始之前结束。
[0128]
如图所示,在几何图形通过阶段1040a期间渲染时序图1000a的散列区域示出gpu空闲时间。例如,gpu-a空闲时间几乎与gpu-a用于渲染的时间相同。另一方面,gpu-b空闲时间非常少,而gpu-c没有空闲时间。
[0129]
相反,渲染时序图1000b图示了四个gpu(例如gpu-a、gpu-b、gpu-c和gpu-d)对四个对象0-3中的每一个的渲染,其中渲染责任以对象的部分的粒度而不是整个对象的粒度分布在gpu之间,诸如图6b中所示的几何图形。例如,信息(例如,与屏幕区域的重叠)是为几何图形(例如对象的一部分)而不是整个对象生成的。以这种方式,由绘制调用使用或生成的图像帧的几何图形(例如,整个对象)被细分为更小的几何图形,并且所生成的信息是针对那些几何图形的。在某些情况下,几何图形可以细分成多小是有限制的。
[0130]
与时间线1090相关地示出了各个渲染阶段。竖直线1001b指示z预通过渲染开始。渲染时序图1000b包括z预通过渲染阶段1010b,并且还图示了散列的时间段1020b,在该时间段期间执行gpu之间的z缓冲数据的合并。渲染时序图1000b中的gpu空闲时间1020b小于渲染时序图1000a中的空闲时间1020a。如图所示,每个gpu花费大约相同量的时间处理z预通过阶段,空闲时间很少或没有空闲时间。提供同步点1030b,使得每个gpu同时开始各自的几何图形通过渲染阶段。同样,如前所述,渲染时序图1000b包括用于渲染图像帧的几何图形的渲染的几何图形通过阶段1040b。提供同步点1050b,使得每个gpu同时开始渲染下一图像帧。同步点1050b还可以指示对应图像帧的渲染的结束。如图所示,每个gpu花费大约相同量的时间处理几何图形通过阶段,空闲时间很少或没有空闲时间。也就是说,z预通过渲染和几何图形渲染在gpu之间各自大致平衡。同样,渲染整个对象的一部分时渲染图像帧的总时间由时间段1075示出。处理该信息以确定每个gpu的屏幕区域责任未在图中示出,但可以假定在几何图形通过1030b开始之前结束。
[0131]
如图所示,渲染时序图1000b示出了当渲染责任以对象的一部分而不是整个对象的粒度分布在gpu之间时减少的渲染时间。例如,当以对象的一部分的粒度渲染图像帧时,示出了时间节省1077。
[0132]
此外,根据本公开的一个实施方案,该信息允许放宽渲染阶段要求和/或依赖性,这导致gpu继续到随后的渲染阶段而另一个gpu仍在处理当前的渲染阶段。例如,可以放宽在任何gpu开始几何图形阶段1040a或1040b之前必须为所有gpu完成z预通过阶段1020a或1020b的这一项要求。如图所示,渲染时序图1000a包括在开始几何图形阶段1040a之前所有gpu的同步点1020a。然而,该信息可以指示(例如)gpu a可以在其他gpu完成其对应的z预通过渲染阶段之前开始渲染其分配的区域。这可能会导致图像帧的渲染时间整体减少。
[0133]
图11是图示了根据本公开的一个实施方案的为了执行z预通过渲染阶段以生成用于将屏幕区域动态分配给gpu以用于图像帧的几何图形渲染的信息而进行gpu分配到图像帧的几何图形的交错的示意图。也就是说,图11示出了针对z预通过的多个gpu之间的渲染责任分布。如前所述,每个gpu被分配给图像帧的几何图形的对应部分,其中该部分可以进一步划分为对象、对象的部分、几何图形、几个几何图形等。
[0134]
如图11所示,对象0、1和2表示由单独绘制调用使用或生成的几何图形。在一个实施方案中,gpu将每个对象划分为更小的几何图形,诸如大致大小为被分配的位置高速缓存和/或参数高速缓存的大小的几何图形,如前所述。纯粹为了说明,对象0被分割成几何图形“a”、“b”、“c”、“d”、“e”和“f”,诸如图6b中的对象610。此外,对象1被分割为几何图形“g”、“h”和“i”。此外,对象2被分割为几何图形“j”、“k”、“l”、“m”、“n”和“o”。为了分布责任用于执行z预通过渲染阶段,可以对几何图形进行排序(例如,a-o)。
[0135]
分布1110(例如abcdabcdabcd......行)示出了在多个gpu之间执行几何图形测试的责任的均匀分布。特别地,不是让一个gpu占用几何图形的前四分之一(例如,在一个块中,诸如gpu a占用总共大约16个中的前四个,包括“a”、“b”、“c”和“d”,以用于几何图形测试),和第二gpu占用第二个四分之一,依此类推,而是对gpu的分配是交错的。也就是说,将连续的几何图形分配给不同的gpu以执行z预通过渲染阶段。例如,几何图形“a”分配给gpu-a,几何图形“b”分配给gpu-b,几何图形“c”分配给gpu-c,几何图形“d”分配给gpu-d,几何图形“e”分配给gpu-a,几何图形“f”分配给gpu-b,几何图形“g”分配给gpu-c,等等。因此,不需要知道要处理的几何图形的总数量(如果gpu-a占用几何图形的前四分之一等将出现的情况),并且z预通过渲染阶段的处理在gpu(例如,gpu-a、gpu-b、gpu-c和gpu-d)之间大致平衡。
[0136]
在其他实施方案中,在渲染一帧(例如,前一图像帧)时生成的信息可用于在后续帧(例如,当前图像帧)中将gpu分配给屏幕区域。例如,硬件可以被配置为在前一图像帧的几何图形通过渲染阶段期间生成信息,诸如在前一图像帧的几何图形通过渲染阶段期间的gpu使用情况。具体地,该信息可以包括每个屏幕区域的每个几何图形被着色的实际像素数量。在后续帧(例如渲染当前图像帧)中当将gpu分配到屏幕区域以进行渲染的几何图形通过时可以使用该信息。也就是说,将屏幕区域分配给gpu以执行当前图像帧的几何图形通过渲染阶段既考虑了从前一图像帧生成的信息,也考虑了在当前图像帧的z预通过阶段期间生成的信息(如果有的话),如前所述。因此,基于来自前一图像帧的信息(例如,gpu使用情况)和在当前图像帧的z预通过渲染阶段期间生成的信息(如果有的话),将屏幕区域分配给
gpu。
[0137]
与之前讨论的仅使用重叠面积(例如,在为当前图像帧生成信息时)或在z预通过期间仅使用每个屏幕区域的每个几何图形的写入到z缓冲区的像素数相比,来自前一帧的该信息可能会增加更多的准确性。例如,由于对象被其他对象遮挡,写入到z缓冲区的对象的像素数量可能与需要在几何图形通过中着色的像素数量不对应。使用来自前一图像帧的信息(例如,gpu使用情况)和在当前图像帧的z预通过渲染阶段期间生成的信息可能使得在用于当前图像帧的几何图形通过渲染阶段期间的更高效渲染。
[0138]
该信息还可以包括每个屏幕区域的顶点计数,其给出了由与对应屏幕区域重叠的几何图形的对应部分(例如几何图形)使用的顶点数量。因此,当稍后渲染对应的几何图形时,渲染gpu可以使用顶点计数来分配位置高速缓存和参数高速缓存中的空间。例如,在一个实施方案中,不需要的顶点没有任何分配的空间,这可以提高渲染效率。
[0139]
在其他实施方案中,可能存在与在z预通过渲染阶段期间生成信息相关联的处理开销(软件或硬件)。在这种情况下,跳过为某些几何图形生成信息可能是有益的。也就是说,可以为某些对象生成信息,但不能为其他对象生成信息。例如,可能不会为具有大图元并且可能与大量屏幕区域重叠的几何图形(例如,对象或对象的一部分)生成信息。例如,具有大图元的对象可以是天空盒或一大块地形,包括大的三角形。在这种情况下,用于图像帧的多gpu渲染的每个gpu都可能需要渲染这些几何图形,并且任何表明这一点的信息都是不必要的。因此,可以根据对应的几何图形的性质生成或不生成信息。
[0140]
通过在渲染之前执行几何图形分析进行几何图形的高效多gpu渲染的系统和方法
[0141]
利用图1-图3的云游戏网络190(例如在游戏服务器160中)和gpu资源365的详细描述,图12a的流程图1200a图示了根据本公开的一个实施方案的图形处理方法,包括通过在渲染之前执行几何图形分析来为应用进行几何图形的多gpu渲染。也就是说,不是在渲染时生成信息,如关于图7、图9和图10所描述的那样,而是在渲染之前生成信息,诸如在预通过期间(即不写入到z缓冲区或mrt的通过)。应当理解,关于在渲染期间生成信息(例如z预通过渲染阶段)描述的各种实施方案的各种特征和优点中的一个或多个同样适用于在渲染之前生成信息(例如执行几何图形分析的预通过),并且可以不在此重复以尽量减少描述中的重复。如前所述,各种架构可以包括多个gpu协作以通过在渲染时通过区域测试为应用执行几何图形的多gpu渲染来渲染单个图像,诸如在云游戏系统的一个或多个云游戏服务器内,或在独立系统(诸如包括具有多个gpu的高端显卡的个人计算机或游戏控制台)内,等等。
[0142]
特别地,gpu渲染责任针对每个图像帧在多个屏幕区域之间动态分配,使得每个gpu在其分配的屏幕区域中渲染对象。在几何图形渲染之前(例如,在图元着色器或计算着色器中)执行分析以确定图像帧中几何图形的空间分布,然后动态调整gpu对屏幕区域的责任以渲染该图像帧中的对象。
[0143]
在1210,该方法包括使用多个图形处理单元(gpu)为应用渲染图形。特别地,许多gpu协作生成图像帧。特别地,在渲染单个图像帧和/或用于实时应用的图像帧序列中的一个或多个图像帧中的每一个时执行多gpu处理。如将在下文进一步描述的,基于用于每个图像帧的屏幕区域,在多个gpu之间划分渲染责任。
[0144]
在1220,该方法包括在多个gpu之间划分用于在分析预通过期间处理图像帧的多个几何图形的责任,其中多个几何图形中的每一个被分配给对应的gpu。分析预通过在图像
帧的渲染阶段之前执行。
[0145]
在分析预通过中,对象分布在多个gpu之间。例如,在具有四个gpu的多gpu架构中,每个gpu在分析预通过期间处理大约四分之一的对象。如前所述,在一个实施方案中,将对象细分为更小的几何图形可能是有益的。此外,在其他实施方案中,每个图像帧,对象被动态地分配给gpu。当动态地将几何图形分配给gpu用于分析预通过时,可以实现处理效率。
[0146]
因为分析预通过是在渲染阶段之前执行的,所以该处理通常不在硬件中执行。也就是说,分析预通过可以在软件中执行,诸如在各种实施方案中通过使用着色器。例如,可以在分析预通过期间使用图元着色器,这样就没有对应的像素着色器。此外,z缓冲区和/或其他渲染目标不会在分析预通过期间被写入。在其他实施方案中,使用计算着色器。
[0147]
在1230,该方法包括在分析预通过阶段中确定多个几何图形中的每一个与多个屏幕区域中的每一个的重叠。如前所述,几何图形可以是对象或对象的一部分(例如,各个图元、图元组等)。在一个实施方案中,所生成的信息包括多个几何图形中的每一个与多个屏幕区域中的每一个的重叠的准确表示。在另一个实施方案中,该信息包括多个几何图形中的每一个与多个屏幕区域中的每一个的重叠的粗略估计。
[0148]
在1240,该方法包括基于多个几何图形中的每一个与多个屏幕区域中的每一个的重叠来生成关于多个几何图形及其与多个屏幕区域的关系的信息。信息可以只是存在重叠。该信息可以包括该几何图形在屏幕区域中重叠或覆盖的像素面积或近似像素面积。该信息可以包括写入屏幕区域的像素的数量。该信息可以包括与屏幕区域重叠的顶点或图元的数量或其近似值。
[0149]
在1250,该方法包括基于该信息将多个屏幕区域动态分配给多个gpu,以用于在几何图形通过渲染阶段期间渲染多个几何图形。也就是说,信息可用于随后将屏幕区域分配给多个gpu。例如,基于该信息将每个gpu分配到对应的屏幕区域。以这种方式,每个gpu具有用于渲染图像帧的对应责任划分(例如,对应的屏幕区域)。因此,屏幕区域到gpu的分配可能因图像帧而异。
[0150]
此外,该方法包括在几何图形通过阶段期间,基于从将多个屏幕区域分配给多个gpu而确定的gpu到屏幕区域分配,在多个gpu中的每一个处渲染多个几何图形。
[0151]
图12b是图示了根据本公开的一个实施方案的在渲染图像帧(例如在几何图形通过渲染阶段期间)之前执行的分析预通过的渲染时序图1200b。分析预通过专用于分析几何图形和屏幕区域之间的关系。分析预通过生成用于将屏幕区域动态分配给gpu以用于图像帧的几何图形渲染的信息。特别地,渲染时序图1200b图示了使用多个gpu来协作地渲染图像帧。基于屏幕区域在多个gpu之间划分渲染责任。如前所述,在渲染图像帧的几何图形之前,gpu会生成有关几何图形及其与屏幕区域的关系的信息。此信息用于将gpu分配给屏幕区域,从而实现更高效的渲染。例如,在渲染之前,第一gpu生成关于一个几何图形及其与屏幕区域的关系的信息,其中该信息用于将屏幕区域分配给渲染该几何图形的一个或多个“渲染gpu”。
[0152]
具体地,渲染时序图1200b图示了参考时间线1290由四个gpu(例如gpu-a、gpu-b、gpu-c和gpu-d)渲染一个或多个对象。如前所述,使用四个gpu仅仅是为了说明的目的,因此多gpu架构可以包括一个或多个gpu。竖直线1201指示图像帧的一组渲染阶段的开始。竖直线1201还指示分析预通过1210的开始。在分析预通过中,对象分布在多个gpu之间。使用四
个gpu,每个gpu处理大约四分之一的对象。提供同步点1230a,使得每个gpu同时开始各自的几何图形通过渲染阶段1220。也就是说,在一个实施方案中,同步操作1230a确保所有gpu同时开始几何图形通过。在另一个实施方案中,不使用同步操作1230a,如前所述,使得几何图形通过渲染阶段可以针对完成分析预通过的任何gpu开始,并且无需等待所有其他gpu完成它们的对应分析预通过。
[0153]
同步点1230b指示用于当前图像帧的几何图形通过渲染阶段的结束,并且还被提供以便每个gpu可以同时继续对当前帧进行后续渲染阶段,或者同时开始渲染下一帧图像帧。
[0154]
在一个实施方案中,多个gpu使用单个命令缓冲区来渲染对应的图像帧。渲染命令缓冲区可以包括设置状态的命令和执行图元着色器或计算机着色器的命令,以便执行分析预通过。同步操作可以包括在命令缓冲区中以同步gpu的各种操作的开始。例如,同步操作可用于同步gpu的几何图形通过渲染阶段的开始。因此,命令缓冲区可以包括针对每个对象的绘制调用和状态设置,以执行几何图形通过渲染阶段。
[0155]
在一个实施方案中,通过使用一个或多个专用指令来加速信息的生成。也就是说,生成信息的着色器使用一个或多个专用指令来加速关于几何图形及其与屏幕区域的关系的信息的生成。
[0156]
在一个实施方案中,该指令可以计算一个几何图形的图元与每个屏幕区域之间的准确重叠。例如,图13a是图示了根据本公开的一个实施方案的在执行分析预通过以生成用于将屏幕区域动态分配给gpu以进行图像帧的几何图形渲染的信息时计算图元1350与一个或多个屏幕区域之间的准确重叠的示意图1310。例如,图元1350被示为与三个不同区域重叠,其中针对每个区域准确地确定图元1350的各个部分的重叠。
[0157]
在其他实施方案中,为了降低指令实现的复杂性,该指令可能执行重叠面积的粗略估计,其中信息包括图元与一个或多个屏幕区域重叠的近似面积。特别地,指令可以计算一个几何图形的图元与一个或多个屏幕区域之间的近似重叠。例如,图13b是图示了根据本公开的一个实施方案的在执行分析预通过以生成用于将屏幕区域动态分配给gpu以进行图像帧的几何图形渲染的信息时计算一个几何图形与许多屏幕区域之间的近似重叠的一对示意图。
[0158]
如图13b的左手图所示,该指令可以使用图元的边界框。因此,确定图元1350的边界框与一个或多个屏幕区域的重叠。边界1320a指示通过分析边界框确定的几何图形1350的近似重叠。
[0159]
在图13b的右手图中,该指令对照图元检查屏幕区域,从而排除没有与几何图形重叠的屏幕区域,并且为与每个屏幕区域重叠的图元部分生成边界框。边界1320b指示通过边界框分析和重叠过滤确定的图元1350的近似重叠。注意图13b的右手图的边界框1320b小于图13b的左手图的边界框1320a。
[0160]
在又一些实施方案中,为了进一步降低指令的复杂性,该指令可能生成存在信息,诸如一个几何图形是否存在于屏幕区域中。例如,存在信息可以指示一个几何图形的图元是否与屏幕区域重叠。该信息可以包括对应屏幕区域中一个几何图形的近似存在。
[0161]
在另一个实施方案中,着色器不分配位置高速缓存或参数高速缓存中的空间。也就是说,着色器不执行位置高速缓存或参数高速缓存的分配,从而在执行分析预通过时允
许更高程度的并行性。这也导致分析预通过所需的时间对应减少。
[0162]
在另一个实施方案中,使用单个着色器来执行在分析预通过中执行的分析,或者在几何图形通过中的渲染。例如,生成信息的着色器可配置为输出关于几何图形及其与屏幕区域的关系的信息,或输出顶点位置和参数信息以供后面的渲染级使用。这可以通过多种方式来实现,诸如经由着色器可以检查的外部硬件状态(例如设置硬件寄存器),或者经由到着色器的输入。结果是着色器执行两个不同的功能来渲染对应的图像帧。
[0163]
如前所述,在几何图形通过渲染阶段开始之前,该信息用于将区域分配给gpu。在前一帧的渲染过程中生成的信息(例如,在渲染几何图形时被着色的实际像素计数)也可以用于将屏幕区域分配给gpu。例如,来自前一帧的信息可以包括每个屏幕区域的每个几何图形被着色的实际像素数量。也就是说,基于从前一图像帧生成的信息(例如gpu使用情况)和在分析预通过期间生成的信息,将屏幕区域分配给gpu。
[0164]
通过细分几何图形进行几何图形高效多gpu渲染的系统和方法
[0165]
利用图1-图3的云游戏网络190(例如在游戏服务器160中)和gpu资源365的详细描述,图14b的线1110图示了一种图形处理方法,包括通过细分几何图形来进行应用的多gpu渲染。对象0、1和2表示由单独绘制调用使用或生成的几何图形。gpu不是将整个对象(即绘制调用)分布到gpu-a、gpu-b、gpu-c和gpu-d,而是将每个对象划分为更小的几何图形,诸如大致与分配的位置高速缓存和/或参数高速缓存大小相同的几何图形。纯粹为了说明,对象0被分割成几何图形“a”、“b”、“c”、“d”、“e”和“f”,诸如图6b中的对象610。此外,对象1被分割为几何图形“g”、“h”和“i”。此外,对象2被分割为几何图形“j”、“k”、“l”、“m”、“n”和“o”。分布1110(例如abcdabcdabcd......行)示出了多个gpu之间的渲染(或渲染阶段)责任的均匀分布。由于这种分布比整个对象(即绘制调用)更细粒度,因此减少了gpu之间渲染时间的不平衡,并且减少了总渲染时间(或渲染阶段的时间)。图14a的流程图1400a和图14b的线1410图示了一种用于图形处理的方法,包括通过在渲染阶段执行时序分析以便在渲染阶段期间重新分布gpu责任的分配来对应用进行几何图形的多gpu渲染。应当理解,关于在图7-图13的渲染和几何图形通过渲染阶段之前和期间生成信息所描述的各种实施方案的各种特征和优点中的一个或多个同样适用于细分几何图形和/或执行时序分析,为了尽量减少描述中的重复,此处可能不再重复。如前所述,各种架构可以包括多个gpu协作以通过在渲染时通过区域测试为应用执行几何图形的多gpu渲染来渲染单个图像,诸如在云游戏系统的一个或多个云游戏服务器内,或在独立系统(诸如包括具有多个gpu的高端显卡的个人计算机或游戏控制台)内,等等。
[0166]
在一些实施方案中,gpu渲染责任针对每个图像帧在多个屏幕区域之间固定或动态分配,使得每个gpu在其分配的屏幕区域中渲染对象,如前面关于图7-图13所述的。在其他实施方案中,每个gpu渲染到它自己的z缓冲区或其他渲染目标。时序分析在一个或多个渲染阶段(例如,几何图形预通过分析、z预通过或几何图形渲染)期间执行,以便在这些阶段期间重新分布gpu责任的分配。也就是说,在一种实施方式中,为了在渲染阶段期间重新分布gpu责任的分配,在渲染阶段期间执行时序分析,渲染阶段诸如在对几何图形执行z预通过阶段以生成用于将屏幕区域动态分配给gpu以用于图像帧的几何图形渲染的信息时。例如,最初分配给一个gpu的屏幕区域可以在渲染阶段期间重新分配给另一个gpu(例如,一个gpu在该阶段期间可能落后于其他gpu)。
[0167]
在1410,该方法包括使用多个图形处理单元(gpu)为应用渲染图形。特别地,在渲染单个图像帧和/或用于实时应用的图像帧序列中的一个或多个图像帧中的每一个时执行多gpu处理。也就是说,多个gpu协作渲染包括多个几何图形的对应图像帧。
[0168]
在1420,该方法包括基于多个屏幕区域在多个gpu之间划分渲染图形的几何图形的责任。也就是说,每个gpu都有对应的责任划分(例如对应的一组屏幕区域)。
[0169]
在渲染几何图形或执行几何图形分析时,渲染或分析所花费的时间量用于调整与对象有关的责任划分。特别地,在1430,该方法包括在对图像帧进行渲染或分析的阶段期间,确定第一gpu落后于至少一个其他gpu,诸如第二gpu。在1440,该方法包括以第一gpu被分配少于第二gpu的方式动态分配几何图形。
[0170]
例如,为了说明的目的,可以在生成z缓冲区期间执行几何图形的动态分配。可以在分析预通过和/或几何图形通过渲染阶段期间执行几何图形的动态分配。在z缓冲区生成和z预通过分析期间动态分配几何图形的情况下,一个或多个z缓冲区由多个gpu生成和/或在z预通过渲染阶段期间为图像帧协作合并。特别地,几何图形在gpu之间被划分以用于处理z预通过渲染阶段,其中将多个几何图形中的每一个分配给对应的gpu。例如,代替在z预通过阶段期间使用硬件来生成用于优化对应图像帧的渲染的信息,硬件可以被配置为执行分析预通过以生成用于优化后续几何图形通过的渲染速度的信息。
[0171]
特别地,对象可以细分为更小的几何图形,如先前在图6b中描述的。如先前关于图14b的分布1110所描述的,在z预通过渲染阶段中渲染几何图形的责任以交错方式分布在gpu之间,示出了gpu分配的各种分布,用于执行z预通过渲染阶段以生成用于将屏幕区域动态分配给gpu以用于图像帧的几何图形渲染的信息。分布1110示出了针对z预通过在多个gpu之间的渲染责任分布。如前所述,每个gpu被分配给图像帧的几何图形的对应部分,其中该部分可以进一步划分为几何图形。由于连续的几何图形被分配给不同的gpu,如分布1110所示,结果是z预通过期间的渲染时间大致平衡。
[0172]
gpu之间的渲染时间的进一步平衡可以通过动态调整渲染几何图形的责任来实现,如分布1410中所示。也就是说,在执行z预通过渲染阶段时,几何图形到gpu的分布在该渲染阶段期间是动态调整的。例如,分布1410[abcdabcdbcdbbcd行]示出了在多个gpu之间执行z预通过阶段的责任的非对称分布。例如,当某些gpu被分配的几何图形大于分配给其他gpu的几何图形时,非对称分布可能是有利的,因此相对于其他gpu在z预通过中落后。
[0173]
如分布1410所示,gpu a在z预通过阶段期间渲染几何图形花费更多时间,因此在将几何图形分配给gpu时会跳过它。例如,不是让gpu-a在z预通过渲染期间处理对象1的几何图形“i”,而是分配gpu-b在z预通过阶段期间渲染该几何图形。因此,在z预通过渲染阶段期间,gpu-b比gpu-a分配了更多的几何图形。特别地,在z预通过渲染阶段期间,该几何图形从第一gpu取消分配,然后分配给第二gpu。此外,gpu b领先于其他gpu,因此它能够在z预通过阶段期间处理更多几何图形。也就是说,分布1410示出了将gpu-b重复分配给连续的几何图形以用于z预通过渲染。例如,gpu-b被分配在z预通过阶段期间处理对象2的几何图形“l”和“m”。
[0174]
尽管上述内容是根据几何图形的“动态分配”提出的,但从“分配”和“重新分配”的角度来看这一点同样有效。例如,如分布1410所示,gpu a在z预通过阶段期间花费更多时间来渲染几何图形,因此它被重新分配。例如,不是让gpu-a在z预通过渲染期间处理对象1的
几何图形“i”,而是分配gpu-b在z预通过阶段期间渲染该几何图形,其中gpu-a可以最初被分配用于渲染该几何图形。此外,gpu b领先于其他gpu,因此它能够在z预通过阶段期间处理更多几何图形。也就是说,分布1410示出了将gpu-b重复分配或重新分配给连续的几何图形以用于z预通过渲染。例如,gpu-b被分配在z预通过阶段期间处理对象2的几何图形“l”和“m”。也就是说,gpu-b被分配为对象2渲染几何图形“l”,即使该几何图形最初可能已分配给gpu-a。因此,最初分配给第一gpu的几何图形在z预通过渲染阶段期间被重新分配给第二gpu(其可能在渲染中领先)。
[0175]
尽管在z预通过阶段期间向gpu分配几何图形可能不平衡,但在z预通过阶段期间由gpu执行的处理可能会被证明是大致平衡的(例如,每个gpu花费大约相同的时间量执行z预通过渲染阶段)。
[0176]
在另一个实施方案中,可以在图像帧的几何图形通过渲染阶段期间执行几何图形的动态分配。例如,屏幕区域在几何图形通过渲染阶段期间基于z预通过或分析预通过期间生成的信息分配给gpu。在渲染阶段期间,分配给一个gpu的屏幕区域可能会重新分配给另一个gpu。这可以提高效率,因为可能会为领先于其他的gpu分配额外的屏幕区域,而那些落后于其他的gpu可能会避免分配额外的屏幕区域。特别地,多个gpu协作在z预通过渲染阶段期间为图像帧生成z缓冲区。在该z预通过期间生成关于图像帧的几何图形及其与多个屏幕区域的关系的信息。屏幕区域基于信息分配给gpu,以便在几何图形通过渲染阶段期间渲染图像帧。gpu基于gpu到屏幕区域的分配在几何图形通过渲染阶段期间渲染几何图形。在几何图形通过渲染阶段期间执行时序分析,这可能导致将最初分配给第一gpu的第一几何图形重新分配给第二gpu以在几何图形通过阶段期间进行渲染。例如,在一个实施方案中,第一gpu可能在处理几何图形通过渲染阶段方面落后。在另一个实施方案中,第二gpu可能在处理几何图形通过渲染阶段方面领先。
[0177]
图15a-图15b示出了各种屏幕区域分配策略,其可以应用于先前关于图7-图14描述的图像帧的渲染。
[0178]
特别地,图15a是图示了根据本公开的一个实施方案的使用多个gpu来在特定屏幕区域中渲染几何图形(例如,与对象0-3相关的几何图形)的示意图。也就是说,屏幕区域1510可以被分配给多个gpu用于渲染。例如,这可能会提高效率,诸如在渲染阶段内后期有非常密集的几何图形时。将屏幕区域1510分配给多个gpu通常需要细分屏幕区域,使得每个gpu可以负责屏幕区域的一部分或多个部分。
[0179]
图15b是图示了根据本公开的一个实施方案的不按照其对应的绘制调用的顺序渲染几何图形的示意图。特别地,几何图形的渲染顺序可能与它们在对应命令缓冲区中的对应绘制调用的顺序不匹配。如本示例所示,对象0在渲染命令缓冲区中位于对象1之前。但是,对象0和1相交,诸如在屏幕区域c内。在这种情况下,可能需要对区域c遵守严格的渲染顺序。也就是说,对象0必须在对象1之前在区域c中渲染。
[0180]
另一方面,区域a和区域b中的对象可以按任意顺序渲染,因为没有相交。也就是说,在渲染区域a和/或区域b时,对象1可能在对象0之前,或反之亦然。
[0181]
在又一个实施方案中,如果可以多次遍历渲染命令缓冲区,则可能在第一次遍历时渲染某些屏幕区域(例如高成本区域)并在第二次或后续遍历时渲染剩余区域(例如低成本区域)。生成的几何图形渲染顺序可能与其对应的绘制调用的顺序不匹配,诸如在第二次
遍历时渲染第一对象时。这种策略在渲染对应的图像帧时提高了效率,因为gpu之间的负载平衡对于低成本区域比对于高成本区域更容易。
[0182]
图16图示了可用于执行本公开的各种实施方案的各方面的示例装置1600的部件。例如,图16图示了根据本公开的实施方案的适于通过以下方式为应用进行几何图形的多gpu渲染的示例性硬件系统:在渲染时执行几何图形分析以将屏幕区域动态分配到gpu以用于图像帧的几何图形渲染、和/或在渲染阶段之前执行几何图形分析以将屏幕区域动态分配到gpu以用于图像帧的几何图形渲染、和/或细分几何图形并将得到的几何图形的更小部分分配到多个gpu。该框图示出了装置1600,所述装置可并入或可能是个人计算机、服务器计算机、游戏控制台、移动装置或其他数字装置,它们中的每个适合于实践本发明的实施方案。装置1600包括用于运行软件应用和可选地操作系统的中央处理单元(cpu)1602。cpu 1602可包括一个或多个同构或异构处理核心。
[0183]
根据各种实施方案中,cpu 1602是具有一个或多个处理核心的一个或多个通用微处理器。另外的实施方案可使用一个或多个cpu来实现,所述一个或多个cpu具有特别适用于诸如媒体和交互式娱乐应用等高度平行和计算密集的应用的微处理器架构,所述应用被配置用于游戏的执行期间的图形处理。
[0184]
存储器1604存储应用和数据供由cpu 1602和gpu 1616使用。存储装置1606为应用和数据提供非易失性存储装置和其他计算机可读介质并且可以包括固定磁盘驱动器、可移除磁盘驱动器、快闪存储器装置和cd-rom、dvd-rom、蓝光光碟、hd-dvd或其他光学存储装置,以及信号传输和存储介质。用户输入装置1608将用户输入从一个或多个用户传达到装置1600,所述装置的示例可包括键盘、鼠标、操纵杆、触摸板、触摸屏、静态或视频记录器/相机和/或传声器。网络接口1609允许装置1600经由电子通信网络与其他计算机系统通信,并且可包括在局域网和诸如互联网的广域网上的有线或无线通信。音频处理器1612适于从由cpu 1602、存储器1604和/或存储装置1606提供的指令和/或数据生成模拟或数字音频输出。装置1600的部件(包括cpu 1602、包括gpu 1616的图形子系统、存储器1604、数据存储装置1606、用户输入装置1608、网络接口1609和音频处理器1612)经由一根或多根数据总线1622连接。
[0185]
图形子系统1614还与数据总线1622和装置1600的部件连接。图形子系统1614包括至少一个图形处理单元(gpu)1616和图形存储器1618。图形存储器1618包括显示存储器(例如帧缓冲区),所述显示存储器用于存储输出图像的每个像素的像素数据。图形存储器1618可以集成在与gpu 1616相同的装置中、作为单独的装置与gpu 1616连接和/或实现在存储器1604内。像素数据可以直接从cpu 1602提供到图形存储器1618。替代地,cpu 1602可向gpu 1616提供定义期望输出图像的数据和/或指令,gpu 1616根据所述数据和/或指令生成一个或多个输出图像的像素数据。定义期望输出图像的数据和/或指令可以存储在存储器1604和/或图形存储器1618中。在实施方案中,gpu 1616包括3d渲染能力,用于根据定义场景的几何形状、照明、着色、纹理化、动作和/或相机参数的指令和数据生成输出图像的像素数据。gpu 1616还可包括能够执行着色器程序的一个或多个可编程执行单元。
[0186]
图形子系统1614周期性地从图形存储器1618输出图像的像素数据,以在显示装置1610上显示或由投影系统(未示出)进行投影。显示装置1610可以是能够响应于来自装置1600的信号来显示视觉信息的任何装置,包括crt、lcd、等离子体和oled显示器。装置1600
可以向显示装置1610提供例如模拟或数字信号。
[0187]
用于优化图形子系统1614的其他实施方案可以包括通过在为图像帧渲染对象之前针对交错的屏幕区域预测试几何图形来为应用进行几何图形的多gpu渲染。图形子系统1614可被配置为一个或多个处理装置。
[0188]
例如,在一个实施方案中,图形子系统1614可被配置为在渲染时通过区域测试为应用执行几何图形的多gpu渲染,其中多个图形子系统可为单个应用实现图形和/或渲染流水线。也就是说,图形子系统1614包括多个gpu,用于在执行应用时渲染图像或图像序列中的一个或多个图像中的每一个。
[0189]
在其他实施方案中,图形子系统1614包括多个gpu装置,它们被组合以为在对应的cpu上执行的单个应用执行图形处理。例如,多个gpu可以在渲染图像的对象时通过区域测试为应用执行几何图形的多gpu渲染。在其他示例中,多个gpu可执行交替形式的帧渲染,其中以顺序的帧周期,gpu 1渲染第一帧,并且gpu 2渲染第二帧,依此类推,直到到达最后一个gpu为止,于是初始gpu渲染下一个视频帧(例如,如果只有两个gpu,则gpu 1渲染第三帧)。那就是渲染帧时gpu旋转。渲染操作可重叠,其中gpu 2可在gpu 1完成渲染第一帧之前开始渲染第二帧。在另一个实施方式中,可以在渲染和/或图形流水线中为多个gpu装置分配不同的着色器操作。主gpu正在执行主渲染和合成。例如,在包括三个gpu的组中,主gpu 1可以执行主渲染(例如,第一着色器操作)和合成来自从属gpu2和从属gpu 3的输出,其中从属gpu 2可以执行第二着色器(例如流体效果,诸如河流)操作,从属gpu 3可以执行第三着色器(例如粒子烟雾)操作,其中主gpu 1合成来自gpu 1、gpu 2和gpu 3中的每一个的结果。这样,可以分配不同的gpu来执行不同的着色器操作(例如挥旗、风、烟雾生成、火等)以渲染视频帧。在又一个实施方案中,三个gpu中的每一个都可以分配给对应于视频帧的不同的对象和/或场景部分。在以上实施方案和实施方式中,可在同一帧周期(同时并行)或在不同帧周期(顺序并行)中执行这些操作。
[0190]
因此,本公开描述了被配置用于通过以下方式为应用进行几何图形的多gpu渲染的方法和系统:在渲染时执行几何图形分析以将屏幕区域动态分配到gpu以用于图像帧的几何图形渲染、和/或在渲染之前执行几何图形分析以将屏幕区域动态分配到gpu以用于图像帧的几何图形渲染、和/或细分几何图形并将得到的几何图形的更小部分分配到多个gpu。
[0191]
应理解,可使用本文公开的各种特征将本文定义的各种实施方案组合或组装成具体的实施方式。因此,所提供的示例只是一些可能的示例,不限于通过组合各种元素来定义更多的实施方式而可能的各种实施方式。在一些示例中,一些实施方式可以包括更少的元素,而不背离所公开的或等效实施方式的精神。
[0192]
本公开的实施方案可以用包括手持式装置、微处理器系统、基于微处理器的或可编程的消费电子产品、小型计算机、大型计算机等的各种计算机系统配置来实践。还可以在分布式计算环境中实践本公开的实施方案,在所述分布式计算环境中,通过基于有线或无线网络链接的远程处理装置执行任务。
[0193]
考虑到以上实施方案,应理解,本公开的实施方案可以采用涉及存储在计算机系统中的数据的各种计算机实现的操作。这些操作是需要对物理量的物理操纵的那些操作。本文描述的形成本公开的实施方案的一部分的任何操作都是有用的机器操作。本公开的实
施方案还涉及用于执行这些操作的装置或设备。可以针对所需目的专门构造所述设备,或者所述设备可以是由存储在计算机中的计算机程序选择性地激活或配置的通用计算机。具体地,各种通用机器可以与根据本文的教导编写的计算机程序一起使用,或者构造更专门的设备来执行所需的操作可能更方便。
[0194]
本公开还可以实施为计算机可读介质上的计算机可读代码。计算机可读介质是可以存储数据的任何数据存储装置,该数据随后可以由计算机系统读取。计算机可读介质的示例包括硬盘驱动器、网络附接存储装置(nas)、只读存储器、随机存取存储器、cd-rom、cd-r、cd-rw、磁带以及其他光学和非光学数据存储装置。所述计算机可读介质可以包括分布在网络耦合的计算机系统上的计算机可读有形介质,使得以分布式方式存储和执行计算机可读代码。
[0195]
尽管以具体的顺序描述了方法操作,但应理解,可在操作之间执行其他内务操作,或者可以调整操作,使得它们在略微不同的时间发生,或者可以分布在允许以与处理相关联的各种间隔发生处理操作的系统中,只要覆盖操作的处理以期望的方式执行即可。
[0196]
虽然出于清楚理解的目的相当详细地描述了前述公开内容,但显而易见的是,可在所附权利要求的范围内实践某些改变和修改。因此,本发明的实施方案被认为是说明性的而非限制性的,并且本公开的实施方案不限于本文给出的细节,而可以在所附权利要求的范围和等效物内进行修改。
再多了解一些

本文用于创业者技术爱好者查询,仅供学习研究,如用于商业用途,请联系技术所有人。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献