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

经由基于物理的渲染引擎的加速处理的制作方法

2023-04-09 20:16:22 来源:中国专利 TAG:

经由基于物理的渲染引擎的加速处理


背景技术:

1.各种实施例的领域
2.本公开的实施例总体上涉及计算机科学和架构,并且更具体地涉及经由基于物理的渲染引擎的加速处理。
3.相关技术说明
4.在计算机图形中,光线追踪技术经常用于渲染三维场景的二维图像。光线追踪涉及将光线从特定视点透射到三维场景中并且确定光线在三维场景中与不同对象的表面相交的不同点。对光线与特定对象的表面相交的每个位置执行材料着色操作以确定二维图像中的对应像素的颜色。
5.为了产生看起来更逼真的结果,三维场景内的对象表面经常使用不同的材料特性层(仅举几例,如抛光、反射率、漫射行为、半透明度和透明度)来建模。然后可基于用于对对象表面建模的不同材料特性层来生成定义三维场景内的对象表面的材料特性的图形结构。除其他之外,图形结构基于对象表面的材料属性以及对象表面的材料属性之间的关系来指示光如何与三维场景内的对象表面交互。当渲染三维场景的二维图像时,将材料图形编译成多个材料着色器程序,其由处理器执行以执行相关材料着色操作。
6.为了加速图形渲染,通常将图形处理计算卸载到图形处理单元(gpu)。以高度并行化的方式配置典型的gpu,其中多个处理核心利用simd(相同指令,多个数据)或simt(相同指令,多个线程)执行模型同时跨多个不同线程组处理图形数据或其他卸载数据。利用simd或simt处理,线程组中的不同线程基于相同指令处理不同数据,这允许gpu内的处理核心快速且高效地执行高度并行处理操作,以显著增加总处理吞吐量。
7.然而,光线追踪的一个常见问题是光线追踪操作通常不能以高度并行的方式使用gpu来执行,因为每个单独的光线典型地涉及不同的输入和不同的计算。例如,如果两个不同的光线将与三维场景内的两个不同的表面相交,则将需要针对每条光线执行不同的材料着色器程序。由于这个原因,光线不容易使它们自己用于使用simd或simt执行模型的高效并行处理。相反,光线通常需要根据材料类型进一步分类,使得可以使用simd或simt来处理原本不相关的光线的组。因此,作为一般问题,常规gpu的高度并行架构不能容易地被利用来加速光线追踪操作。
8.使gpu和其他类型的并行处理器能够更高效地执行光线追踪操作和其他串行处理任务的一种方式将是将更多的晶体管添加到这些处理器。然而,为了增加处理器内的晶体管的数量,管芯尺寸将必须增加,晶体管将必须被更密集地封装,或者晶体管将必须更小。增加管芯尺寸通常是不希望的。进一步,因为晶体管尺寸减小和晶体管密度增大的速率正在减慢,所以将大量晶体管添加到处理器将可能导致较大的处理器,如先前所述,这将是不期望的。因而,在执行光线追踪操作和其他串行处理任务时向gpu和其他类型的并行处理器添加晶体管以便改进处理性能不是可行的解决方案。
9.如上所述,本领域需要更有效的方式来在并行处理器上执行光线追踪操作和其他串行处理任务。


技术实现要素:

10.本公开的一个实施例阐述了一种用于并行地处理光线追踪操作的计算机实现的方法。该方法包括:接收多条光线以及相应的材料着色指令集,所述相应的材料着色指令集用于处理包括在多条光线中的每条光线,其中,每条光线表示从光源到三维(3d)环境内的至少一个点的路径,以及每个相应的材料着色指令集至少部分地基于与包括在所述3d环境中的至少一个对象的至少一个表面相关联的一个或更多个材料属性。该方法还包括:将包括在该多条光线中的每条光线分配给包括在多个处理核心中的不同处理核心。另外,该方法包括对于包括在多条光线中的每条光线,使分配给该光线的处理核心对该光线执行相应的材料着色指令集以生成颜色。
11.所公开的技术的至少一个技术优点在于,提供了一种渲染引擎,该渲染引擎被专门设计成用于以相对于现有技术解决方案而言提高的效率来执行光线追踪操作和其他串行处理任务。因而,渲染引擎可并入到gpu或其他并行处理单元中,且不能在gpu或其他并行处理单元内的常规处理元件上有效地并行化的处理任务可卸载到渲染引擎,此增加总体处理性能和处理量。对此,在渲染引擎内实现多个mimd(多输入、多个数据)处理核心,其中每个处理核心被配置成异步地处理不同的光线或其他串行处理工作的单元,这使得光线追踪操作和其他串行处理任务能够跨不同的处理核心被大量并行地执行。此外,为了进一步提高总体处理吞吐量,渲染引擎包括被设计成执行某些专用处理任务的多个管线。在操作期间,处理核心可将专用处理任务卸载到不同管线,并且驻留在渲染引擎内的调度器被配置成以优化的方式跨不同管线调度所卸载的任务。这些技术优点提供了优于现有技术方法的一个或更多个技术进步。
附图说明
12.为了更详细地理解上述各种实施例的相关特征,可以通过参考各种实施例(其中一些已在附图中说明)对上述简要概括的本发明概念进行更具体的描述。但是,需要注意的是,所附的附图只说明发明概念的典型实施例,因此并不是以任何方式限制范围,还存在其他同样有效的实施例。
13.图1是示出被配置为实现各个实施例的一个或更多个方面的计算机系统的框图;
14.图2是根据一个实施例的图1的并行处理子系统中包括的并行处理单元的框图;
15.图3是根据一个实施例的图2的并行处理单元的通用处理集群的框图;
16.图4是根据一个实施例的图3的纹理处理单元中包括的渲染引擎的框图;
17.图5a-b是示出了根据一个实施例的用于使用图4的渲染引擎执行光线的材料着色的数据流的框图;
18.图6是根据一个实施例的使用图4的渲染引擎对光线执行材料着色的方法步骤的流程图;
19.图7是根据一个实施例的用于使用图4的渲染引擎执行材料着色指令集的方法步骤的流程图;
20.图8是示出根据一个实施例的用于使用图4的渲染引擎的固定功能管线来执行流式多处理器的操作的数据流的框图;
21.图9是根据一个实施例的用于使用图4的渲染引擎的固定功能管线来执行流式多
处理器的操作的方法步骤的流程图;
22.图10a-c是示出了根据一个实施例的用于使用图4的渲染引擎从压缩的纹理块中提取单个纹理元素的数据流的框图;
23.图11a是根据一个实施例的用于确定目标纹理块的地址的方法步骤的流程图;
24.图11b是根据一个实施例的用于从纹理块中提取目标纹理元素而不解压缩或提取纹理块中的其他纹理元素的方法步骤的流程图;
25.图12是示出根据一个实施例的用于使用图4的渲染引擎对光线执行重要性采样的数据流的框图;
26.图13a是根据一个实施例的使用图4的渲染引擎对光线执行重要性采样的方法步骤的流程图;
27.图13b是根据一个实施例的用于使用图4的渲染引擎执行重要性采样指令集的方法步骤的流程图;
28.图14是示出被配置为实现各实施例的一个或更多个方面的计算设备的框图;
29.图15是示出根据一个实施例的示例材料图表的概念图;以及
30.图16是根据一个实施例的用于将材料图形编译成字节代码指令的方法步骤的流程图。
具体实施方式
31.在下面的描述中,阐述了大量的具体细节,以提供对各个实施例的更全面理解。然而,对于本领域技术人员来说,可以在没有一个或更多个这些具体细节的情况下实践这些发明概念。
32.系统概述
33.图1为示出被配置为实现各个实施例的一个或更多个方面的计算机系统100的框图。如图所示,计算机系统100包括但不限于中央处理单元(cpu)102、系统存储器104,其经由存储器桥105和通信路径113耦连至并行处理子系统112。存储器桥105进一步地经由通信路径106耦连至i/o(输入/输出)桥107,i/o桥107又耦连至交换机116。
34.在操作中,i/o桥107被配置为从输入设备108(诸如键盘或鼠标)接收用户输入信息,并经由通信路径106和存储器桥105将输入信息转发给cpu 102进行处理。交换机116被配置为在i/o桥107和计算机系统100的其他组件(如网络适配器118和各种附加卡120和121)之间提供连接。
35.还如图所示,i/o桥107耦合至系统盘114,系统盘114可以被配置为存储内容、应用程序和数据,以供cpu 102和并行处理子系统112使用。一般来说,系统盘114为应用程序和数据提供非易失性存储器,可包括固定的或可移除的硬盘驱动器、闪存设备和cd-rom(光盘只读存储器)、dvd-rom(数字多功能盘-rom)、蓝光、hd-dvd(高清dvd)或其他磁、光或固态存储设备。最后,虽然未明确示出,其他组件(诸如通用串行总线或其他端口连接、光盘驱动器、数字多功能盘驱动器、胶片录制设备等)也可以连接到i/o桥107。
36.在各个实施例中,存储器桥105可以是北桥芯片,i/o桥107可以是南桥芯片。此外,可以用任何技术上合适的协议(包括但不限于agp(加速图形端口)、超文本传输(hypertransport)或本领域公知的任何其他总线或点对点通信协议)在计算机系统100内
实现通信路径106和113以及其他通信路径。
37.在一些实施例中,并行处理子系统112包括图形子系统,该图形子系统向显示设备110输送像素,该显示设备可以是任何常规的阴极光线管、液晶显示器、发光二极管显示器等。在这种实施例中,并行处理子系统112合并了针对图形和视频处理优化的电路,包括例如视频输出电路。如下图2中更详细地描述的,此类电路可以跨并行处理子系统112中包括的一个或更多个并行处理单元(ppu)合并。在其他实施例中,并行处理子系统112合并了针对通用和/或计算处理而优化的电路。同样,此类电路可以跨并行处理子系统112中包括的一个或更多个ppu合并,这些ppu被配置为执行此类通用和/或计算操作。在其他实施例中,并行处理子系统112中包括的一个或更多个ppp可配置为执行图形处理、通用处理和计算处理操作。系统存储器104包括至少一个设备驱动器103,该驱动程序配置为管理并行处理子系统112中的一个或更多个ppu的处理操作。系统存储器104还包括在cpu102上执行的软件应用125,并且可发出控制ppu的操作的命令。
38.在各种实施例中,并行处理子系统112可与图1的一个或更多个其他元素集成,以形成单个系统。例如,并行处理子系统112可以与cpu102和其他连接电路集成在单个芯片上,以形成片上系统(soc)。
39.应理解,本文所示的系统是说明性的,并且变化和修改是可能的。连接拓扑(包括网桥的数量和布置、cpu 102的数量和并行处理子系统112的数量)可以根据需要进行修改。例如,在一些实施例中,系统存储器104可以直接连接到cpu 102,而不是通过存储器桥105连接到cpu102,并且其他设备将经由存储器桥105和cpu 102与系统存储器104进行通信。在其他替代拓扑中,并行处理子系统112可以连接到i/o桥107或直接连接到cpu 102,而不是连接到存储器桥105。在其他实施例中,i/o桥107和存储器桥105可以集成到单个芯片中,而不是作为一个或更多个分立器件存在。最后,在某些实施例中,图1所示的一个或更多个组件可以不存在。例如,可以淘汰交换机116,网络适配器118和附加卡120、121会直接连接到i/o桥107。
40.图2是根据一个实施例的图1的并行处理子系统112中包括的并行处理单元(ppu)202的框图。尽管图2描述了一个ppu 202,如上文所述,但并行处理子系统112可以包括任意数量的ppu 202。如图所示,ppu 202耦合到本地并行处理(pp)存储器204。ppu 202和pp存储器204可采用一个或更多个集成电路器件实现,例如可编程处理器、应用专用集成电路(asic)或存储器设备,或者任何其他技术上可行的方式。
41.一些实施例中,ppu 202包括图形处理单元(gpu),该gpu可配置为实现图形渲染管线,以基于cpu 102和/或系统存储器104提供的图形数据执行与生成像素数据相关的各种操作。在处理图形数据时,pp存储器204可用作存储一个或更多个常规帧缓冲区(如果需要,还可以存储一个或更多个其他渲染目标)的图形存储器。除其他事项外,pp存储器204可用于存储和更新像素数据,并将最终像素数据或显示帧传输至显示设备110以进行显示。在一些实施例中,ppu 202也可以配置为通用处理和计算操作。
42.在操作中,cpu 102是计算机系统100的主处理器,控制和协调其他系统组件的操作。特别是,cpu 102发出控制ppu 202操作的命令。在一些实施例中,cpu 102将用于ppu 202的命令流写入数据结构(图1或图2未明确示出)中,该数据结构可以位于系统存储器104、pp存储器204或cpu 102和ppu 202两者可访问的另一个存储位置。指向数据结构的指
针被写入推送缓冲区以启动对数据结构中命令流的处理。ppu 202从推送缓冲区读取命令流,然后相对于cpu 102的操作异步地执行命令。在生成多个推送缓冲区的实施例中,应用程序可以经由设备驱动器103为每个推送缓冲区指定执行优先级,以控制不同推送缓冲区的调度。
43.还如图所示,ppu 202包括i/o(输入/输出)单元205,其经由通信路径113和存储器桥105与计算机系统100的其余部分进行通信。i/o单元205生成数据包(或其他信号)以在通信路径113上传输,并且还从通信路径113接收所有传入数据包(或其他信号),将传入数据包定向到ppu202的相应组件。例如,与处理任务相关的命令可定向到主机接口206,而与存储器操作相关的命令(例如,从pp存储器204读取或写入pp存储器204)可以定向到交叉开关单元210。主机接口206读取每个推送缓冲区,并将存储在推送缓冲区中的命令流发送到前端212。
44.如上结合图1所述,ppu 202与计算机系统100的其余部分的连接可以变化。在一些实施例中,并行处理子系统112(其包括至少一个ppu 202)作为附加卡实现,其可插入计算机系统100的扩展槽中。在其他实施例中,ppu 202可采用总线桥集成在单个芯片上,诸如存储器桥105或i/o桥107。同样,在其他实施例中,ppu 202的一些或全部元件可与cpu 102一起被包括在单个集成电路或片上系统(soc)中。
45.在操作中,前端212将从主机接口206接收的处理任务发送到任务/工作单元207内的工作分配单元(未示出)。工作分配单元接收指向处理任务的指针,这些任务被编码为任务元数据(“tmd”)并存储在存储器中。指向tmd的指针包括在命令流中,该命令流存储为推送缓冲区,并由前端单元212从主机接口206接收。可以编码为tmd的处理任务包括与要处理的数据相关联的索引,以及定义如何处理数据的状态参数和命令。例如,状态参数和命令可以定义要对数据执行的程序。任务/工作单元207从前端212接收任务,并确保在启动每个tmd指定的处理任务之前将通用处理集群(gpc)208配置为有效状态。可以为每个tmd指定优先级,该优先级用于调度处理任务的执行。处理任务也可以从处理集群阵列230接收。可选地,tmd可以包括控制是否将tmd添加到处理任务列表(或指向处理任务的指针列表)的头部或尾部,从而提供对执行优先级的另一级控制的参数。
46.ppu 202基于处理集群阵列230有利地实现了高度并行处理体系架构,处理集群阵列230包括一组c个通用处理集群(gpc)208,其中c≥1。每个gpc 208能够同时执行大量(例如数百或数千个)线程,其中每个线程都是程序的实例。在各种应用中,可以分配不同的gpc 208来处理不同类型的程序或执行不同类型的计算。gpc 208的分配可根据每种类型的程序或计算产生的工作负载而不同。
47.存储器接口214包括一组d个分区单元215,其中d≥1。每个分区单元215耦合到驻留在ppm存储器204内的一个或更多个动态随机存取存储器(dram)220。在一个实施例中,分区单元215的数量等于dram 220的数量,每个分区单元215耦合到不同的dram 220。在其他实施例中,分区单元215的数量可以与dram 220的数量不同。本领域普通技术人员可以认识到,dram 220可更换为任何其他技术上合适的存储设备。在操作中,各种渲染目标(诸如纹理映射和帧缓冲区)可以跨dram 220存储,允许分区单元215并行写入每个渲染目标的部分,从而有效地使用pp存储器204的可用带宽。
48.给定的gpc 208可以处理要写入pp存储器204中的任何dram 220的数据。交叉开关
单元210被配置为将每个gpc 208的输出路由到任何分区单元215的输入或任何其他gpc 208以进行进一步处理。gpc 208经由交叉开关单元210与存储器接口214通信,以从各个dram 220读取或写入各个dram 220。在一个实施例中,交叉开关单元210除了经由存储器接口214连接到pp存储器204之外,还连接到i/o单元205,从而使不同gpc 208中的处理核心能够与系统存储器104或非ppu 202本地的其他存储器进行通信。在图2的实施例中,交叉开关单元210与i/o单元205直接连接。在各种实施例中,交叉开关单元210可以使用虚拟通道分隔gpc 208和分区单元215之间的业务流。
49.同样,gpc 208可以被编程为执行与各种应用相关的处理任务,包括但不限于线性和非线性数据变换、视频和/或音频数据的过滤、建模操作(例如,应用物理定律以确定对象的位置、速度和其他属性)、图像渲染操作(例如,曲面细分着色程序、顶点着色程序、几何着色程序和/或像素/片段着色程序)、通用计算操作等。在操作中,ppu 202被配置为将数据从系统存储器104和/或pp存储器204传输到一个或更多个片上存储器单元,处理该数据,并将结果数据写回系统存储器104和/或pp存储器204。然后,其他系统组件(包括cpu 102、并行处理子系统112中的另一ppu 202或计算机系统100中的另一并行处理子系统112)可以访问该结果数据。
50.如上所述,并行处理子系统112中可包括任意数量的ppu 202。例如,单个附加卡上可提供多个ppu 202,或者多个附加卡可以连接到通信路径113,或者一个或更多个ppu 202可以集成到桥芯片中。多ppu系统中的ppu 202可彼此相同或不同。例如,不同的ppu 202可能具有不同数量的处理核心和/或不同数量的pp存储器204。在存在多个ppu 202的实现方式中,这些ppu可以并行操作,以比采用单个ppu 202所可能的吞吐量更高的吞吐量处理数据。包括一个或更多个ppu 202的系统可以以各种配置和形式因素实现,包括但不限于台式机、笔记本电脑、手持式个人计算机或其他手持设备、服务器、工作站、游戏机、嵌入式系统等。
51.图3是根据一个实施例的图2的ppu 202中包括的gpc 208的框图。如图3所示,每个gpc208包括用于处理任务的多个硬件单元。在一个实施例中,每个gpc208包括管线管理器305、一个或更多个纹理处理集群(tpc)310、存储器管理单元(mmu)345、预光栅操作单元(prerop)355和工作分配交叉开关360。应当理解,代替或除了图3所示的单元之外,图3的gpc208可包括其他硬件单元。
52.在操作中,gpc 208可以被配置为并行执行大量线程以执行图形、通用处理和/或计算操作。如本文所用,“线程”是指在特定输入数据集上执行的特定程序的实例。在一些实施例中,单指令、多数据(simd)指令发出技术用于支持大量线程的并行执行,而无需提供多个独立的指令单元。在其他实施例中,单指令、多线程(simt)技术用于使用被配置为向gpc 208中的一组处理引擎发出指令的通用指令单元来支持大量通常同步的线程的并行执行。与simd执行体系(其中所有处理引擎通常执行相同的指令)不同,simt执行允许不同的线程更容易通过给定程序遵循不同的执行路径。本领域普通技术人员应当认识到,simd处理体系表示simt处理体系的功能子集。
53.gpc208的操作由管线管理器305控制。管线管理器305管理一个或更多个tpc310的配置以用于处理分配给gpc208的任务。管线管理器305还可经配置以将从任务/工作单元207内的工作分配单元(未示出)接收的数据路由到gpc208内的适当逻辑单元,例如路由到
一个或更多个tpc310以供图元引擎320或sm325处理。管线管理器305还可经配置以通过指定由tpc310输出的目的地经处理数据来控制工作分配交叉开关360。
54.每个tpc310包括m管线控制器(mpc)315、图元引擎320、一个或更多个流式多处理器(sm)325、树遍历单元(ttu)330、渲染引擎(pbru)335和一个或更多个纹理单元340。
55.mpc315控制tpc310的操作,将从管线管理器305接收的数据路由到tpc310中的适当单元。例如,可将与顶点相关联的数据路由到图元引擎320,所述图元引擎经配置以从存储器204提取与所述顶点相关联的顶点属性。相比之下,与着色器程序相关联的数据可传送到sm325。
56.sm325包括一个或更多个可编程的流处理器,其被配置为处理由多个线程表示的任务。每一sm325是多线程的且经配置以并发地执行来自特定线程群组的多个线程(例如,32个线程)。在一个实施例中,sm325实现simd(单指令、多数据)架构,其中,一组线程(即,线程束)中的每个线程被配置为基于相同的指令集来处理不同的数据集合。线程组中的所有线程执行相同的指令。在另一个实施例中,sm325实现simt(单指令、多线程)架构,其中线程组中的每个线程被配置成基于相同指令集来处理不同数据集,但是其中允许线程组中的各个线程在执行期间分叉。换句话说,当用于线程群组的指令被分派用于执行时,线程群组中的一些线程可为活动的,进而执行指令,而线程群组中的其他线程可为不活动的,进而执行无操作(nop)而非执行指令。
57.此外,每个sm 325包括一组功能执行单元(未示出),诸如执行单元和加载存储单元。特定于任何功能执行单元的处理操作都可以是管线化的,这样就使得能够在前面的指令完成执行之前发出新的指令以执行。可以提供给定sm 325中功能执行单元的任何组合。在各种实施例中,功能执行单元可被配置为支持各种不同的操作,包括整数和浮点算术(例如,加法和乘法)、比较运算、布尔运算(and、or、xor)、位移位,以及计算各种代数函数(例如,平面插值和三角函数、指数函数和对数函数)。有利的是,相同的功能执行单元可以被配置为执行不同的操作。
58.尽管图3未示出,但每个sm 325包括一级(l1)高速缓存,或使用sm 325外部的相应l1高速缓存中的空间来支持执行单元执行的加载和存储操作等。每个sm 325还可以访问在ppu 202中的所有gpc 208之间共享的二级(l2)高速缓存(未示出)。l2高速缓存可用于在线程之间传输数据。最后,sm 325还可以访问片外“全局”存储器,其可包括pp存储器204和/或系统存储器104。需要理解的是,ppu 202外部的任何存储器都可以用作全局存储器。此外,gpc 208中可包括1.5级(l1.5)高速缓存(未示出),并且其被配置为接收和保存sm 325经由存储器接口214从存储器请求的数据。这种数据可以包括但不限于指令、统一数据和常量数据。在gpc 208内具有多个sm 325的实施例中,sm 325可以有益地共享高速缓存在l1.5高速缓存中的公共指令和数据。
59.如图3中所示,sm325耦合到树遍历单元(ttu)330、渲染引擎(pbru)335和一个或更多个纹理单元340。在一些实施例中,ttu330、pbru335或纹理单元340中的一个或更多个可包含于sm325中或实施于ppu202内且由一个或更多个gpc208或由一个或更多个sm325共享。
60.在一些实施例中,ttu 330被配置为执行树遍历操作。可以在例如计算机图形中的光线追踪算法中利用树遍历操作。然而,ttu 330可以被优化用于一般树遍历操作,并且具体地不限于光线追踪技术。
61.树遍历操作可以包括通过遍历树数据结构的节点执行的任何操作。树数据结构可以包括但不限于二叉树、八叉树、四叉树、k-d树、二叉树空间分割(bsp)树和边界体层级(bvh)树。在一个实施例中,树遍历操作包括用于将查询形状与树相交的多个指令。查询形状可以是例如光线、边界框、截头体、圆锥体、球体等。在不同实施例中,查询形状可由查询数据结构指定。查询数据结构可以包括用于指定查询形状以与树相交的任何技术上可行的技术。例如,查询数据结构可以使用两个三坐标向量来指定光线的起点和终点。在另一示例中,查询数据结构可以使用六个32位浮点坐标来指定轴对齐的边界框的六个平面。不同查询数据结构可以包括用于指定查询形状的属性的任何数量的字段。
62.可以优化ttu 330的一种类型的树遍历操作是使光线与bvh数据结构相交,bvh数据结构表示表示3d场景或3d模型中的对象的每个几何基元。ttu330在光线追踪应用中可能特别有用,其中数百万或甚至数十亿的光线与由bvh数据结构表示的3d模型的几何图元相交。
63.在一些实施例中,pbru335是被配置为并行执行光线追踪操作和其他串行处理任务的渲染引擎。串行处理任务是通常涉及不同输入和不同计算的任务,并且因此不能由sm325并行处理。如下面进一步详细描述的,pbru335包括多个mimd(多个输入、多个数据)处理核心,其中每个处理核心被配置为异步地处理不同的光线或其他单位的串行处理工作。由此,多个处理核心可以很大程度上并行地处理多条光线或其他串行处理任务集合。如图3所示,pbru335耦合到sm325和ttu330。sm325和/或ttu330向pbru335卸载光线处理或其他串行处理任务,以便由pbru335更有效地执行。
64.作为实例,可以优化pbru335以执行的一种类型的光线追踪操作是材料着色。在标识了光线与3d场景中的对象之间的相交的位置之后,执行材料着色以确定与该相交位置处的对象的表面相对应的颜色。材料着色计算基于针对对象的表面定义的多个不同的材料属性。由此,可以对具有不同材料属性的不同表面执行不同的材料着色计算。作为另一示例,pbru335可以被优化以执行的第二类型的光线追踪操作是重要性采样。执行重要性采样以确定当光线与3d场景中的对象的表面相交时产生的次要光线的方向。类似于材料着色,重要性采样计算基于针对对象的表面定义的多个不同的材料属性,并且可以针对具有不同材料属性的不同表面执行不同的重要性采样计算。因而,pbru335可能对于材料着色和重要性采样应用特别有用,其中数百万或数十亿光线与3d场景中的对象的交集正被评估以分别生成对应的颜色和方向。
65.在一些实施例中,纹理单元340经配置以从存储器204加载纹理图(例如,纹理元素的2d阵列),且对纹理图进行取样以产生经取样纹理值以供在由sm325执行的着色器程序中使用。纹理单元340实施纹理操作,例如使用多级渐远纹理图(mip-map)(即,不同细节级别的纹理图)的滤波操作。在一个实施例中,每个tpc310包括两个(2)纹理单元340。
66.每个tpc 310将经处理的任务发送到工作分配交叉开关330,以便将经处理的任务提供给另一gpc 208以进行进一步处理,或将经处理的任务存储在l2高速缓存(未示出)、并行处理存储器204中或经由交叉开关单元210存储在系统存储器104中。此外,预光栅操作(prerop)单元325被配置为接收由tpc 310生成的数据,将数据定向到分区单元215中的一个或更多个光栅操作(rop)单元,执行颜色混合的优化,组织像素颜色数据,并执行地址转换。
67.应理解,本文描述的核心架构是说明性的,并且可以进行变型和修改。除其他事项外,gpc 208中可包括任意数量的处理单元,诸如tpc 310、sm 325、ttu 330、pbru 335、纹理单元340或prerop单元355。此外,如上结合图2所述,ppu 202可以包括任意数量的gpc 208,这些gpc 208被配置为在功能上彼此相似,使得执行行为不依赖于哪个gpc 208接收特定的处理任务。此外,每个gpc 208独立于ppu 202中的其他gpc 208操作,以执行一个或更多个应用程序的任务。鉴于上述情况,本领域普通技术人员应理解,图1-图3中描述的架构绝不限制本发明的范围。
68.图4是根据一个实施例的包括在图3的tpc310中的pbru335的框图。pbru335是被设计成并行执行光线追踪操作和其他串行处理任务的mimd渲染引擎。如图4所示,pbru335包括l0高速缓存410、核心调度器420、多个处理核心430以及多个管线440。
69.核心调度器420被配置为尤其从sm325和ttu330接收数据;将任务分配给处理核心430;将与所分配的任务相关联的数据发送给处理核心430;从处理核心430接收请求;将来自处理核心430的请求调度和分布到适当单元,例如到管线440和到sm325的l1高速缓冲存储器;从处理核心430接收经处理的数据;以及将经处理的数据发送到sm325和ttu330。
70.在一些实施例中,核心调度器420从sm325和/或ttu330接收多条光线。每条光线表示从光源朝3d场景或3d环境内的方向延伸的路径。另外,对于每条光线,核心调度器420接收对应于有待对该光线执行的光线追踪操作的一组指令或对应于该组指令的地址。例如,核心调度器420可以接收光线和对应于光线相交的3d场景或环境内的对象的表面的材料着色指令集。材料着色指令基于与对象的表面相关联的一个或更多个材料属性,并且当被执行时,生成与光线与对象的表面的相交相关联的颜色。作为另一示例,核心调度器420可以接收光线和对应于3d场景或环境内的光线相交的对象的表面的重要性采样指令的集合。所述重要性采样指令还基于与所述物体的表面相关联的一个或更多个材料特性,并且当被执行时,生成由所述光线与所述物体的表面的相交所产生的二次光线的方向。
71.核心调度器420将每个光线分配给多个处理核心430中的不同处理核心430。处理核心430包括多个mimd处理核心。每个处理核心430从其他处理核心430自主地操作。处理核心430各自针对其所分配的光线执行指令集以生成一个或更多个结果的对应集。
72.每个处理核心430将其结果集发送到核心调度器420。核心调度器420从处理核心430接收不同的结果集,并且将不同的结果集发送回sm325和/或ttu330以供进一步处理。作为示例,处理核心430可以执行材料着色指令集以生成对应于光线的颜色。处理核心430向核心调度器420发送光线和颜色,并且核心调度器420向sm325和/或ttu330传送光线和颜色。
73.处理核心430访问lo高速缓存410。如图4中所示,l0高速缓存410包括指令高速缓存412和纹理高速缓存414。指令高速缓存412存储正由处理核心430执行的指令。每个处理核心430接收相应指令集以执行指令高速缓存412中的相应指令集并将相应指令集高速缓存在指令高速缓存412中。在一些实施例中,每组指令是固定大小,诸如32字节。另外,指令集可以是要由处理核心430执行的较大指令集的子集。
74.在处理核心430完成执行指令集之后,处理核心430请求包括在较大指令集中的下一指令集。在一些实施例中,处理核心430向核心调度器420发送请求。核心调度器420从sm325的l1高速缓存请求下一组指令。sm325将所请求的指令集传送给核心调度器420。在一
些实施例中,当核心调度器420接收所请求的指令集时,核心调度器420将所请求的指令集发送到处理核心430。在一些实施例中,核心调度器420将所请求的指令集存储在指令高速缓存412中,并且通知处理核心430所请求的指令集在指令高速缓存412中可用。
75.纹理高速缓存414存储由处理核心430在执行指令时使用的纹理块。纹理块包含含有可应用于3d对象的表面的颜色数据的纹理像素(纹理元素)阵列。在一些实施例中,纹理块包括使用一个或更多个纹理压缩技术生成的经压缩的纹理块。当执行指令集时,处理核心430可以加载经压缩的纹理块,将经压缩的纹理块高速缓存在纹理高速缓存414中,并且从经压缩的纹理块提取或解码一个或更多个纹理元素。高速缓存的纹理块可以由需要相同纹理块的其他处理核心430访问。
76.在一些实施例中,如果处理核心430要求不在l0高速缓存410中的纹理块,则处理核心430向核心调度器420发送请求。核心调度器420从sm325的l1高速缓存请求纹理块。sm325将所请求的纹理块传送到核心调度器420。在一些实施例中,当核心调度器420接收所请求的纹理块时,核心调度器420将所请求的纹理块发送到处理核心430。在一些实施例中,核心调度器420将所请求的纹理块存储到纹理高速缓存414,并且通知处理核心430所请求的纹理块在纹理高速缓存414中是可用的。
77.当处理核心430发送对纹理块或指令集的请求时,纹理块或指令集可能不在sm325的l1高速缓存中,即,高速缓存未命中。如果所请求的纹理块或指令集不在l1高速缓存中,则处理核心430可以等待长时间(例如,数百个时钟周期)以便发送回所请求的纹理块或指令集。在一些实施例中,在等待阈值数量的时钟周期之后,处理核心430自己发出光线停止指令。在一些实施例中,核心调度器420检测到发生高速缓存未命中,或由sm325通知发生了高速缓存未命中,并且向处理核心430发出光线停止指令。响应于接收到光线停止指令,处理核心430停止处理该光线,并将该光线发送到核心调度器420。
78.在一些实施例中,发送光线包括:发送由处理核心430执行的最新指令集的地址、由处理核心430执行的最后指令的最新指令集内的索引、以及与光线相关联的堆栈。核心调度器420将该光线发送到ttu 330。在一些实施例中,ttu 330存储光线的临时阵列。ttu 330接收该光线并且将该光线存储在临时阵列中。当所请求的数据在sm325的l1缓存中可用时,ttu330发送光线回到pbru335。由于该光线包括针对该光线执行的最新指令集的地址,最后执行的指令的索引和堆栈,当光线被发送回pbru335并被分配给处理核心430时,处理核心430可以恢复在由索引指示的位置处执行最新指令集。由此,处理核心430可以被分配另一条光线以在等待所请求的数据的同时工作,并且在下一组指令或纹理块变得可用之后重试对下一组指令或纹理块的请求。
79.处理核心430共享对多个管线440的访问。每个管线440是对应于特定固定功能的cisc(复杂指令集计算机)管线。每一管线440经配置以接收与对应固定功能相关联的输入,且对所述输入执行对应固定功能以产生对应输出。在一些实施例中,每个固定函数是与评估材料图有关的函数,诸如确定纹理块的地址、从纹理块提取纹理元素、或执行诸如反射、镜面反射、光亮等的计算。
80.如图4所示,管线440包括一个或更多个astc_a(地址)管线442,一个或更多个astc_dp(数据路径)管线444、一个或更多个ggx管线446、一个或更多个oren-nayar管线448、一个或更多个施利克菲涅尔(schlick fresnel)管线450、一个或更多个光泽管线452、
一个或更多个子表面管线454和一个或更多个基于单元的发光管线456。虽然图4中图解说明特定类型的固定功能管线,但管线440可包含对应于任何类型的固定功能的任何数目和/或类型的管线。
81.在一些实施例中,固定功能对应于多个管线440,包含执行固定功能以产生用于材料着色的一个或更多个输出的一个或更多个第一管线440,例如颜色,以及一个或更多个第二管线440,其执行固定功能以产生用于重要性采样的一个或更多个输出,例如,二次光线的方向。
82.在指令集的执行期间,处理核心430确定指令对应于与管线440相关联的固定功能且将请求发送到对应管线440以执行所述指令。在一些实施例中,将请求发送到对应管线440包含将固定功能的一个或更多个输入发送到对应管线440。处理核心430将用于固定函数的一个或更多个输入从其堆栈弹出,并且将一个或更多个输入和对应管线440的请求发送到核心调度器420。核心调度器420将请求和一个或更多个输入发送到管线440。管线440基于一个或更多个输入生成一个或更多个输出,并将该一个或更多个输出发送给核心调度器420。核心调度器420确定该一个或更多个输出与发送该请求的处理核心430相关联,并将该一个或更多个输出发送回处理核心430。处理核心430将一个或更多个输出推送到其栈的顶部上并继续其指令集中的下一指令。
83.作为示例,处理核心430可以执行指令集,其包括确定纹理块的地址的指令。处理核心430确定用于确定纹理块的地址的指令对应于astc_a管线442。响应于确定该指令对应于astc_a管线442,处理核心430将与确定纹理块的地址相关联的一个或更多个输入发送到核心调度器420,该核心调度器420将该一个或更多个输入发送到astc_a管线442。astc_a管线442基于一个或更多个输入产生纹理块的地址,且将纹理块的地址发送到核心调度器420。核心调度器420从astc_a管线442接收地址,确定该地址与发送对astc_a管线442的请求的处理核心430相关联,并将该地址发送到处理核心430。处理核心430将纹理块的地址推送到其堆栈上。
84.在一些实施例中,管线440还经配置以直接从sm325接收请求。在执行其自身的指令集时,sm325可确定指令可利用管线440中的一者。sm325向管线440发送用于对应于管线440的固定功能的一个或更多个输入以用于同步执行。管线440基于该一个或更多个输入生成一个或更多个输出,并将该一个或更多个输出发送给sm325。在一些实施例中,管线440将一个或更多个输出直接发送到发送请求的sm325。在一些实施例中,管线440将一个或更多个输出发送到核心调度器420。核心调度器420确定该一个或更多个输出与sm325相关联,并将该一个或更多个输出传送给sm325。
85.在一些实施例中,核心调度器420从多个处理核心430接收对管线440的多个请求。核心调度器420确定来自每个处理核心430的请求何时可以被发送到适当的管线440。在一些实施例中,核心调度器420在每个时钟周期向每个管线440发送一个请求,例如,一个或更多个astc_a管线442、一个或更多个astc_dp管线444中的每一个、一个或更多个ggx管线446、一个或更多个奥伦-纳亚尔(oren-nayar)管线448、一个或更多个施利克菲涅耳管线450、一个或更多个光泽管线452,一个或更多个子表面管线454和一个或更多个基于单元的发光管线456。核心调度器420可以实施用于选择传输到管线440的特定请求的任何技术上可行的装置,例如循环调度算法。
86.在一些实施例中,来自sm325的对管线440的请求优先于来自处理核心430的请求。当sm325向管线440传送请求时,核心调度器420被通知管线440已经从sm325接收到请求。响应于接收到该通知,核心调度器420不从处理核心430向管线440发送该时钟周期的请求。
87.尽管本文中参考材料着色和重要性采样操作来描述实施例,但是pbru335可以用于执行其他光线追踪操作和/或其他类型的串行处理任务。另外,虽然这里参照发送和接收光线来描述实施例,但是可以在pbru335、sm325和ttu330之间以及在pbru335的元件之间传输任何类型的技术上可行的数据。
88.使用渲染引擎的材料着色
89.当渲染3d场景的二维图像时,产生源自特定光源且朝向3d场景中的不同方向延伸的多条光线。对于每条光线,标识出该光线与该3d场景中的对象的表面之间的交点。在该交点处进行材料着色以确定在该交点处与该物体的表面相对应的颜色。由材料着色产生的颜色表示物体表面在被来自光源的光(例如,由光线表示的光束)撞击时的颜色。
90.使用指示光如何与对象的表面相互作用的不同材料特性层(诸如抛光、反射率、漫射行为、半透明度、透明度等)来建模对象表面。每种材料特性使用一个或更多个计算和/或函数来定义,这些计算和/或函数是基于由一个或更多个其他材料特性产生的一个或更多个变量和/或一个或更多个值来评估的。
91.材料图可以用于表示与对象表面相关联的不同材料属性以及不同材料属性之间的关系。当执行材料着色时,基于光线的特性来评估不同材料特性的计算和/或功能,如光线到达的方向和光线在该交点处的宽度,以及对象的表面的属性,诸如表面法线,该交点对应的着色法线、归一化的切线和/或uv坐标。如下面在图14-16中更详细描述的,为了使用pbru335评估材料图,将材料图编译成可以由pbru335执行的材料着色指令集。
92.图5a是示出根据一个实施例的用于使用pbru335执行光线的材料着色的数据流的框图。
93.如图5a所示,sm325向ttu330发送光线510用于处理。ttu 330执行一个或更多个树遍历操作以确定光线510与3d场景内的对象的表面之间的交点。
94.ttu330向pbru335发送光线510,以对光线510执行材料着色。在一些实施例中,光线510包括用于标识光线510的光线标识符。通常,光线追踪涉及识别数百、数千或甚至数百万光线与3d场景中的对象的交集。光线标识符提供了一种在光线由ttu 330和pbru 335处理时追踪和标识该光线的方式。在一些实施例中,ttu 330计算与光线510相关联的一个或更多个变量的值,诸如对应于交点的一个或更多个uv坐标、交点处uv覆盖的分数,该对象表面的法向量,该法向量用于着色该对象表面,光线510的方向、入射光的方向等。ttu330包括在向pbru335发送光线510时的一个或更多个变量值。在一些实施例中,当光线510从sm 325发送到ttu 330时,一个或更多个变量的值由sm 325计算并且包括在光线510中。ttu330可以包括当向pbru335发送光线510时由sm325计算的变量值中的一个或更多个。
95.在一些实施例中,ttu330基于交叉点来确定对应于对象在交叉点处的表面的材料着色指令集520。材料着色指令集520包括字节代码指令,当由pbru335执行时,所述字节代码指令评估在对象表面的材料图中定义的不同材料属性,以生成对应于光线510和交叉点的颜色。在一些实施例中,交叉点与指示在交叉点处对应于对象的表面的材料的数据和/或指示材料着色指令集520的地址的数据相关联。ttu330基于与交叉点相关联的数据确定该
材料着色指令集520。
96.在一些实施例中,ttu330用光线510向pbru335发送材料着色指令集520或其一部分。在一些实施例中,ttu330发送对应于该材料着色指令集520的地址。另外,ttu330可以发送索引值,其指示在材料着色指令集520内要执行的下一指令的位置。例如,ttu330可以发送指示pbru335应当在材料着色指令集520中的第一指令处开始执行的索引值0。
97.在一些实施例中,发送光线510包括发送对应于光线510的光线数据结构。光线数据结构存储光线标识符、材料着色指令集520的地址、材料着色指令集520内的起始指令的索引以及包括与光线相关联的一个或更多个变量的堆栈。
98.pbru335接收光线510和材料着色指令集520,并且执行该材料着色指令集520以生成与光线510相关联的颜色530。如图5a所示,pbru335向ttu330发送光线510和颜色530用于进一步处理。在一些实施例中,pbru335将颜色530存储在与光线510相关联的堆栈中。向ttu 330发送光线510和颜色530包括发送与光线510相关联的堆栈。ttu330可以从堆栈中读取颜色530的值。在一些实施例中,在接收光线510和颜色530之后,ttu 330将光线510和颜色530发送回sm 325用于进一步处理。
99.图5b是示出根据一个实施例的用于使用pbru335执行光线的材料着色的数据流的框图。
100.如图5b所示,sm325向ttu330发送光线510用于处理。ttu 330执行一个或更多个树遍历操作以确定光线510与3d场景内的对象的表面之间的交点540。不是将光线510发送到pbru335,ttu330将光线510和交点540发送回sm325。sm325然后将光线510发送到pbru335,以便为光线510执行材料着色。在一些实施例中,sm325执行一个或更多个操作以确定交点540,而不是将光线510发送到ttu330进行处理。
101.在一些实施例中,光线510包括用于标识光线510的光线标识符。在一些实施例中,ttu 330计算与光线510相关联的一个或更多个变量的值,诸如对应于交点540的一个或更多个uv坐标,交点540处的uv覆盖的分数、物体表面的法向量,用于着色物体表面的法向量、光线510的方向、入射光的方向等等。当向sm325发送光线510时,ttu330包括一个或更多个可变值,当向pbru335发送光线510时,sm325包括一个或更多个可变值。在一些实施例中,sm325或者在确定交点540之后或者在从ttu330接收光线510和交点540之后计算与光线510相关联的一个或更多个变量的值。当将光线510发送到pbru335时,sm325包括一个或更多个变量值。
102.在一些实施例中,sm325基于交点540来确定对应于交点540处的对象的表面的材料着色指令集520。在一些实施例中,sm325利用光线510向pbru335发送材料着色指令集520或者其一部分。在一些实施例中,sm325发送对应于该材料着色指令集520的地址。另外,sm325可以发送指示要在材料着色指令集520内执行的下一指令的位置的索引值。例如,sm325可以发送指示pbru335应当在材料着色指令集520中的第一指令处开始执行的索引值0。
103.在一些实施例中,发送光线510包括发送对应于光线510的光线数据结构。光线数据结构存储光线标识符、材料着色指令集520的地址、材料着色指令集520内的起始指令的索引以及包括与光线510相关联的一个或更多个变量的堆栈。
104.pbru335接收光线510和该材料着色指令集520,并且执行该材料着色指令集520以
生成与光线510相关联的颜色530。如图5b所示,pbru335发送光线510和颜色530到sm325用于进一步处理。在一些实施例中,pbru335将颜色530存储在与光线510相关联的堆栈中。向sm325发送光线510和颜色530包括发送与光线510相关联的堆栈。sm325可从堆栈读取颜色530的值。
105.将了解,本文中所描述的操作和数据流是说明性的,且变化和修改是可能的。例如,sm325或ttu330可以确定3d场景中光线与对象之间的交叉点,计算与该光线相关联的变量值,确定对应于该交点的材料着色指令集,将所述光线发送到pbru335,和/或将所述材料着色指令集发送到pbru335。类似地,pbru335可以向sm325或ttu330传送一个或更多个材料着色结果,而不管哪一个将光线发送到pbru335。
106.图6是根据一个实施例的用于使用pbru为光线执行材料着色的方法步骤的流程图。尽管结合图1-4的系统描述了方法步骤,但是本领域技术人员将理解,被配置为以任意顺序执行方法步骤的任意系统落入本公开的范围内。
107.在步骤602中,pbru的核心调度器从sm或ttu接收光线。例如,核心调度器420从sm 325或ttu 330接收光线510。在一些实施例中,核心调度器420还从sm325或ttu330接收材料着色指令集。核心调度器420将该材料着色指令集存储到指令高速缓存412。在一些实施例中,核心调度器420从sm325或ttu330接收对应于材料着色指令集的地址。
108.在一些实施例中,核心调度器420接收表示光线510的光线数据结构。光线数据结构包括例如与光线510相对应的光线标识符、材料着色指令集的地址、材料着色指令集内的起始指令的索引520、以及包括与光线510相关联的一个或更多个变量的堆栈。
109.在步骤604中,核心调度器将光线分配给处理核心。例如,核心调度器420向多个处理核心430中的特定处理核心430分配光线510。在一些实施例中,核心调度器420确定哪些处理核心430没有指派光线,并且选择当前没有指派任何光线的处理核心430。在一些实施例中,每个处理核心430可处理多条光线。核心调度器420为每个处理核心430确定分配给每个核的光线的数目,并选择具有分配的最低光线数目的处理核心430。
110.在步骤606中,处理核心基于该光线执行该材料着色指令集以生成颜色。例如,处理核心430基于光线510执行该材料着色指令集520以生成颜色530。
111.图7是根据一个实施例的用于执行材料着色指令集的方法步骤的流程图。尽管结合图1-4的系统描述了方法步骤,但是本领域技术人员将理解,被配置为以任意顺序执行方法步骤的任意系统落入本公开的范围内。
112.在步骤702中,pbru的处理核心从核心调度器接收光线。例如,处理核心430从核心调度器420接收光线510。在一些实施例中,接收光线510包括接收对应于光线510的光线标识符、对应于材料着色指令集520的地址、该材料着色指令集内的起始指令的索引、以及包括与光线510相关联的一个或更多个变量的堆栈。
113.在步骤704中,处理核心430请求下一个材料着色指令集。在一些实施例中,处理核心430向核心调度器420发送对在用光线510接收的指令地址处的材料着色指令集的请求。核心调度器420接收该请求并从指令地址处的sm325的l1高速缓存读取或检索指令集。
114.处理核心430等待从核心调度器420接收所述材料着色指令集或者从核心调度器420接收所述材料着色指令集在指令高速缓存412中可用的指示。在一些实施例中,多条光线被分配给处理核心430。处理核心430可以在等待接收该材料着色指令集或接收该材料着
色指令集可用的指示的同时开始处理不同的光线。在接收要执行的下材料着色指令集或者接收下材料着色指令集在指令高速缓存412中的指示之后,方法前进到步骤706。
115.在一些实施例中,如果核心调度器420用光线510接收到材料着色指令集,则核心调度器420将该材料着色指令集存储在指令高速缓存412中或者用光线510将该材料着色指令集发送到处理核心430。处理核心430可以确定下材料着色指令集可用,并且前进到步骤706而不请求任何附加指令。
116.在步骤706中,处理核心430对该材料着色指令集中的下一指令进行解码。另外,处理核心430对跟随下一指令的任何立即数进行解码。在一些实施例中,处理核心430基于指示材料着色指令集内的下一指令的索引值来确定材料着色指令集中的下一指令。处理核心430对由索引值指示的材料着色指令集内的位置处的指令进行解码。处理核心430根据下一指令执行一个或更多个不同的动作。
117.如果下一指令是光线停止指令,则在步骤708中,处理核心停止执行光线的材料着色指令,并将光线发送到核心调度器。例如,处理核心430向核心调度器420发送光线510。如果处理核心430生成颜色530,则处理核心430还将颜色530发送到核心调度器420。
118.在一些实施例中,向核心调度器420发送光线510包括发送光线510的堆栈。如果处理核心430生成颜色530,则颜色530被存储在光线510的堆栈的顶部。如果处理核心430尚未生成颜色530,则栈反映已经针对光线510完成的计算。
119.在一些实施例中,发送光线510包括发送表示光线510的更新的光线数据结构。更新后的光线数据结构包括例如与光线510相对应的光线标识符;由处理核心430执行的最新材料着色指令集的地址;由处理核心430执行的最近材料着色指令集内的最后指令的索引;以及与光线510相关联的堆栈。
120.如果下一指令是可以由处理核心本地执行的指令,则在步骤710中,处理核心在本地执行指令,而不涉及核心调度器。可本地执行的指令包括(例如)堆栈运算(例如,推送、加载和存储)和固定点运算(例如,加法、乘法和插值)。在本地执行指令之后,如果可用,则处理核心进行到下一指令。
121.如果下一指令不是可由处理核心本地执行的指令,则在步骤712中,处理核心向核心调度器发送请求。
122.作为示例,如果指令对应于固定函数,诸如纹理地址、纹理数据路径、ggx、oren-nayar、schlick-fresnel、光泽等,则处理核心430将对相应管线440的请求发送到核心调度器420。将请求发送到核心调度器420可包含将固定函数的一个或更多个自变量弹出堆栈,且将所述一个或更多个自变量与所述请求包含。核心调度器420将请求和一个或更多个自变量发送到对应的管线440。管线440接收一个或更多个自变量作为一个或更多个输入,且对一个或更多个输入执行对应的固定函数以产生固定函数的一个或更多个输出。管线440将一个或更多个输出传送回核心调度器420,并且核心调度器420将一个或更多个输出发送到处理核心430。
123.作为另一示例,如果指令是读取纹理块,则处理核心430向核心调度器420发送读取纹理块的请求。将请求发送到核心调度器420可包含将纹理块的地址从堆栈弹出且将纹理块的地址包含于请求中。核心调度器420在指定地址处从sm325的l1高速缓存请求纹理块。在一些实施例中,核心调度器420将纹理块发送到处理核心430。在一些实施例中,核心
调度器420将纹理块高速缓存在纹理高速缓存414中,并且向处理核心430发送纹理块在l0高速缓存410中可用的指示。
124.在一些实施例中,发送请求包括与请求一起发送对应于光线510的标识符。在一些实施例中,对应于光线510的标识符包括对应于光线510的光线标识符。在一些实施例中,对应于光线510的标识符包括对应于处理核心430的标识符。如果多条光线被分配给处理核心430,则该标识符还包括与光线510在分配给处理核心430的多条光线内的索引相对应的索引值。当一个或更多个输出被发送到核心调度器420时,标识符与一个或更多个输出一起被包括。核心调度器420使用该标识符来确定该一个或更多个输出应当被发送到处理核心430。
125.在向核心调度器420发送请求之后,处理核心430等待,直到在步骤714,处理核心430从核心调度器420接收一个或更多个结果。在一些实施例中,处理核心430被分配多条光线。处理核心430可以在等待接收一个或更多个结果的同时开始处理不同的光线,并且在从核心调度器420接收一个或更多个结果之后返回到步骤714。如果一个或更多个结果包括一个或更多个值,诸如由管线440生成的一个或更多个值,则处理核心430将该一个或更多个值推送到栈上。如果该一个或更多个结果包括纹理块,则处理核心430将该纹理块高速缓存在纹理高速缓存414中。在从核心调度器420接收到一个或更多个结果之后,处理核心430进行到下一指令(如果可用)。
126.如果在指令集中没有剩余指令,但是处理核心430还没有到达光线停止指令并且停止执行光线的指令,则该方法返回到步骤704,其中处理核心430请求执行下一组指令。处理核心430请求利用光线510接收的指令地址处的下材料着色指令集,其增加所执行的最后指令的索引。
127.如果在指令集中剩余指令,则该方法返回到步骤706,其中处理核心430解码指令集中的下一指令。在一些实施例中,光线510包括指示指令集内的下一指令的索引值,并且在返回到步骤706之前递增索引值。
128.返回图6,在处理核心完成执行材料着色指令集之后,在步骤608中,核心调度器从处理核心接收光线和颜色。例如,核心调度器420从处理核心430接收光线510和颜色530。在一些实施例中,核心调度器420从处理核心430接收光线510的栈,其中颜色530存储在栈的顶部。在一些实施例中,核心调度器420从处理核心430接收表示光线510的更新的光线数据结构。更新后的光线数据结构包括例如与光线510相对应的光线标识符;由处理核心430执行的最新材料着色指令集的地址;由处理核心430执行的最近材料着色指令集内的最后指令的索引;以及与光线510相关联的堆栈。
129.在步骤610中,核心调度器向sm和/或ttu发送光线和颜色以供进一步处理。例如,核心调度器420向sm325和/或ttu330发送光线510和颜色530。
130.在一些实施例中,在生成颜色530之前,处理核心430停止执行光线510的指令。例如,如下面详细讨论的,如果编译器确定函数不能由pbru335执行,则编译器可以生成与函数相对应的、可以由sm325执行的指令集,并且在材料着色指令集中生成光线停止指令。当sm325接收光线510时,sm325执行对应于函数的指令集。例如,sm325可基于存储在光线510的堆栈中的值执行用户定义的函数。在一些实施例中,在sm325完成执行对应于函数的指令集之后,sm325可以将结果推送到光线510的堆栈上,增加要执行的下一指令的索引值,并且
将光线510发送回pbru335。核心调度器420接收光线510并将光线510分配给处理核心430以继续执行。
131.在操作中,核心调度器420从sm 325和/或ttu 330接收多条光线。核心调度器420可以同时接收多条光线,并且还可以随着时间继续接收附加光线。针对由核心调度器420接收的每条光线,重复以上在图6和7中讨论的步骤。因此,在任何给定时间,多个处理核心430中的每个处理核心可以执行用于分配的光线的相应的材料着色指令集。
132.使用固定功能管线
133.在一些实施例中,除了向pbru335发送任务以便pbru335异步地处理之外,sm325还可以直接向pbru335的管线440发送同步请求。每个管线440对应于特定的固定功能。每一固定函数对应于可由pbru335执行的不同字节代码指令。另外,每一固定功能可对应于可由sm325执行的不同指令。当sm325执行对应于管线440的指令时,sm325可向管线440发送请求。在一些实施例中,发送请求包括从sm325的寄存器读取固定函数的一个或更多个自变量,并且将一个或更多个自变量与请求包括。例如,如果sm325正在执行需要计算光泽的操作,则sm325可以向光泽管线452发送请求并且使光泽管线452执行计算。sm325等待将由光泽管线452返回的结果。光泽(sheen)管线452处理来自sm325的请求,并将结果发送回sm325。sm325接收从光泽管线452接收的结果并恢复操作。在一些实施例中,sm325被分配多个线程组,并且sm325可以切换到执行用于不同线程组的指令,同时等待由管线440返回的结果。
134.在一些实施例中,来自sm325的请求接收优于来自pbru335的处理核心430的请求的优先级。管线440在接收和处理来自处理核心430的请求之前接收并处理来自sm325的请求。在一些实施例中,如果sm325向管线440发送请求并且核心调度器420从处理核心430接收对同一管线440的请求,则核心调度器420在从处理核心430向管线440发送请求之前等待。
135.在一些实施例中,sm325耦合到调度器(未示出),该调度器调度从sm325到管线440的请求。如果多个sm325具有对同一管线440的请求,则调度器确定多个sm325向管线440发送请求的次序。
136.图8是示出根据一个实施例的用于使用管线440来执行sm325的操作的数据流的框图。
137.如图8所示,sm325向管线440发送管线请求810(1)。管线请求810(1)包括与由管线440实现的固定功能相对应的一个或更多个输入。
138.核心调度器420从处理核心430接收管线请求810(2)。管线请求810(2)还针对管线440。来自sm325的管线请求810(1)具有优于来自处理核心430的管线请求810(2)的优先级。
139.在一些实施例中,当sm325向管线440发送管线请求810(1)时,核心调度器420被通知管线440已经从sm325接收到请求。例如,sm325和/或管线440可以向核心调度器420发送信号或其他指示。作为另一实例,核心调度器420可监视管线440以确定管线440何时接收请求。在一些实施例中,当sm325向管线440发送请求时,sm325还向管线440发送有效信号。核心调度器420监视管线,并且如果有效信号被设置为1,则核心调度器420确定请求被发送到管线440。响应于被通知管线440已经从sm325接收到请求,核心调度器420在向管线440发送管线请求810(2)之前等待预定时间量,例如一个时钟周期。
140.在一些实施例中,如果管线440接收到来自sm325的额外请求,那么额外请求还从处理核心430接收优于请求的优先级。核心调度器420继续等待向管线440发送管线请求810(2),直到sm325没有向管线440发送请求时的时钟周期。在一些实施例中,sm325可调度管线请求,使得来自处理核心430的请求可周期性地发送到管线440。例如,sm325可在到管线440的每个请求之间等待一段时间。
141.管线440对随管线请求810(1)包含的一个或更多个输入执行固定功能以产生管线输出820(1)。如图8所示,管线440将管线输出820(1)发送到核心调度器420。核心调度器420确定管线输出820(1)与sm325相关联,并将管线输出820(1)发送到sm325。在一些实施例中,每个管线输出包括标识符或与标识符相关联,该标识符诸如光线标识符、与处理核心430相关联的标识符或与sm325相关联的标识符。核心调度器420基于与管线输出820(1)一起包括的或与管线输出820(1)相关联的标识符来确定管线输出820(1)与sm325相关联。例如,与处理核心430相关联的管线输出可以包括光线标识符或与对应于处理核心430的标识符相关联,而与sm 325相关联的管线输出可包括标识符或与标识符相关联,该标识符与光线标识符或处理核心标识符不是相同的类型或格式,或者可以根本不包括任何标识符或者与任何标识符相关联。
142.在一些实施例中,不是将管线输出820(1)发送到核心调度器420,而是管线440将管线输出820(1)直接发送回sm325。在一些实施例中,管线440将管线输出820(1)写入到sm325的寄存器文件。
143.管线440对随管线请求810(2)包含的一个或更多个输入执行固定功能以产生管线输出820(2)。管线440将管线输出820(2)发送到核心调度器420。核心调度器420确定管线输出820(2)与处理核心430相关联,并将管线输出820(2)发送到处理核心430。在一些实施例中,每个管线输出包括标识符或与标识符相关联,该标识符诸如光线标识符、与处理核心430相关联的标识符、或与sm325相关联的标识符。核心调度器420基于与管线输出820(2)一起包括的或与管线输出820(2)相关联的标识符来确定管线输出820(2)与处理核心430相关联。例如,管线输出820(2)可以包括特定光线标识符或与该特定光线标识符相关联,并且核心调度器420确定对应于该特定光线标识符的光线被分配给处理核心430。作为另一示例,管线输出820(2)可包括处理核心标识符或与处理核心标识符相关联,并且核心调度器420确定该处理核心标识符对应于处理核心430。
144.图9是根据一个实施例的用于使用pbru的管线来执行sm的操作的方法步骤的流程图。尽管结合图1-4的系统描述了方法步骤,但是本领域技术人员将理解,被配置为以任意顺序执行方法步骤的任意系统落入本公开的范围内。
145.在步骤902中,管线440从sm325接收请求。管线440对应于特定的固定功能,并且来自sm325的请求包括对应于该特定的固定功能的一个或更多个第一输入。
146.在步骤904中,核心调度器420被通知管线440接收到来自sm325的请求。在一些实施例中,sm325和/或管线440向核心调度器420发送信号或其他通知,以指示管线440从sm325接收到请求。在一些实施例中,核心调度器420监控管线440以检测管线440何时接收请求。在一些实施例中,当sm325向管线440发送请求时,sm325还向管线440发送有效信号。核心调度器420监视管线,并且如果有效信号被设置为1,则核心调度器420确定请求被发送到管线440。在确定管线440从sm325接收到请求之后,如果核心调度器420从处理核心430接
收到对相同管线440的请求,则核心调度器420将等待向管线440传送该请求。
147.在步骤906中,管线440从处理核心430接收请求。来自处理核心430的请求包括对应于固定功能的一个或更多个第二输入。在一些实施例中,经由核心调度器420接收来自处理核心430的请求。如上所述,核心调度器420从处理核心430接收请求,并确定何时从处理核心430向管线440发送请求。
148.在步骤908,管线440处理来自sm325的请求以生成一个或更多个结果的第一集合。处理来自sm325的请求包括对来自sm325的请求中包括的一个或更多个第一输入执行固定功能。
149.在步骤910,管线440向sm325发送一个或更多个结果的第一集合。在一些实施例中,管线440将第一组结果发送到核心调度器420。核心调度器420确定第一结果集与sm325相关联,并将第一结果集传送给sm325。在一些实施例中,管线440将第一组结果直接传输到sm325。在一些实施例中,管线440将第一组结果写入sm325的寄存器文件。
150.在步骤912,管线440处理来自处理核心430的请求以生成一个或更多个结果的第二组。处理来自处理核心430的请求包括对来自处理核心430的请求中包括的一个或更多个第二输入执行固定功能。
151.在步骤914,管线440向处理核心430发送第二组一个或更多个结果。在一些实施例中,管线440将第二组结果发送到核心调度器420。核心调度器420确定第二组结果与处理核心430相关联,并将第二组结果传送给处理核心430。在一些实施例中,管线440将第二组结果直接传输到处理核心430。
152.从纹理块提取单个纹理元素
153.评估物体表面的不同材料性质包含对针对材料性质界定的纹理进行取样且基于所取样的纹理执行一个或更多个计算。将对象表面的纹理存储为多个纹理块。每一纹理块包含含有可应用于对象表面的颜色数据的纹理元素的阵列。在一些实施例中,每个纹理块对应于特定的多级渐远纹理(mip)级别,其中每个mip级别对应于纹理的不同大小和分辨率。
154.为了减少多个纹理块所需的存储和存储器空间的量,使用一个或更多个纹理压缩技术来压缩每一纹理块。在一些实施例中,使用astc(自适应可缩放纹理压缩)压缩并存储每个纹理块。当需要包含在纹理块中的纹理元素的值时,纹理块被解压缩。通常,经配置以加载和处理纹理块的执行单元(例如,纹理单元340)解压缩整个经压缩纹理块以获得经压缩纹理块中含有的纹理元素的值。然而,由于由pbru325执行的操作(例如,材料着色)基于单个交叉点,所以操作通常仅需要来自单个纹理元素的值。
155.图10a-c是示出根据一个实施例的用于使用pbru335从压缩的纹理块提取单个纹理元素的数据流的框图。虽然本文关于astc格式的经压缩纹理块描述实例,但可使用任何经压缩或未经压缩纹理块格式。用于提取单个纹理元素的特定步骤可以取决于特定纹理块格式而变化。另外,由于读取操作的最小粒度,可以读取围绕单个纹理元素的一个或更多个纹理元素,但是可以在读取之后立即丢弃该一个或更多个纹理元素。
156.如图10a所示,处理核心430向核心调度器420发送地址请求1010。处理核心430响应于执行纹理地址指令而发送地址请求1010。在一些实施例中,处理核心430将一个或更多个值从其堆栈弹出并且将该一个或更多个值包括在地址请求1010中。该一个或更多个值对
应于在确定纹理块地址和/或纹理元素位置时使用的变量,诸如对应于光线与物体表面的交点的uv坐标以及在交点处的uv覆盖的分数。
157.核心调度器420将地址请求1010发送到纹理地址管线,例如astc_a管线442。astc_a管线442经配置以执行固定函数,其基于地址请求1010中所包含的一个或更多个值确定目标纹理块的块地址1020。在一些实施例中,astc_a管线442还被配置成基于包括在地址请求1010中的一个或更多个值来确定目标纹理元素在纹理块内的坐标。在一些实施例中,一个或更多个其他管线440被配置成确定目标纹理元素的坐标。
158.astc_a管线442将块地址1020发送到核心调度器420。在一些实施例中,astc_a管线442还向核心调度器420发送纹理元素的坐标。
159.核心调度器420从astc_a管线442接收块地址1020。另外,核心调度器420还可以从astc_a管线442接收纹理元素坐标。核心调度器420确定块地址1020和纹理元素坐标与处理核心430相关联,并将块地址1020和纹理元素坐标发送给处理核心430。在一些实施例中,在接收到块地址1020和纹理元素坐标之后,处理核心430将块地址1020和纹理元素坐标推送到其栈上。
160.在处理核心430接收到块地址1020之后,处理核心430继续执行其所分配的指令集中的下一指令。当处理核心430执行纹理读取指令时,处理核心430发送对位于块地址1020处的纹理块1040的请求。
161.如果纹理块1040被高速缓存在lo高速缓存410的纹理高速缓存414中,则处理核心430跳过纹理读取指令并且继续执行其所指派的指令集中的下一指令。
162.如果纹理块1040不在纹理高速缓存414中,则处理核心430从sm325的l1高速缓存请求纹理块1040。如图10b所示,处理核心430向核心调度器420发送块请求1030。在一些实施例中,当处理核心430接收块地址1020时,处理核心430将块地址1020推送到其栈上。当执行纹理读取指令时,处理核心430将块地址1020从其堆栈弹出并且包括具有块请求1030的块地址1020。
163.核心调度器420向sm325发送块请求1030和块地址1020。响应于接收块请求1030,sm325将存储在块地址1020处的纹理块1040发送到核心调度器420。核心调度器420接收纹理块1040并确定纹理块1040与处理核心430相关联。如图10b所示,核心调度器420将纹理块1040发送到处理核心430。处理核心430将纹理块1040存储在lo高速缓冲存储器410的纹理高速缓冲存储器414中,且接着继续执行其经指派指令集中的下一指令。在一些实施例中,核心调度器420将纹理块1040存储在纹理高速缓存414中,并且通知处理核心430纹理块1040在纹理高速缓存414中可用。处理核心430接收该通知并且继续执行其分配的指令集中的下一指令。
164.当处理核心430执行纹理数据路径指令时,处理核心430发送对位于纹理块1040内的纹理元素坐标(即,子坐标)处的纹理元素1060的请求。如图10c所示,处理核心430向核心调度器420发送纹理元素请求1050。处理核心430从纹理高速缓存414读取纹理块1040,并将纹理块1040与纹理元素请求1050一起包括。另外,处理核心430将纹理元素1060的坐标从其堆栈弹出并且包括具有纹理元素请求1050的纹理元素坐标。
165.核心调度器420向纹理元素提取管线(诸如astc_dp管线444)发送纹理元素请求1050。astc_dp管线444被配置成执行固定功能,该固定功能基于包括在纹理元素请求1050
中的纹理元素坐标来从包括在纹理元素请求中的纹理块1040提取解压缩的纹理元素1060。
166.astc_dp管线444向核心调度器420发送纹理元素1060。在一些实施例中,提取纹理像素1060包括提取对应于纹理像素1060的解压缩的rgba(红、绿、蓝和阿尔法)值。astc_dp444将对应于纹理元素1060的rgba值发送到核心调度器420。
167.核心调度器420从astc_dp管线444接收纹理元素1060。在一些实施例中,接收纹理像素1060包括接收对应于纹理像素1060的rgba值。核心调度器420确定纹理元素1060与处理核心430相关联并且向处理核心430发送纹理元素1060。在一些实施例中,在接收纹理元素1060之后,处理核心430将纹理元素1060推送到其堆栈上。
168.图11a是根据一个实施例的用于确定目标纹理块的地址的方法步骤的流程图。尽管结合图1-4的系统描述了方法步骤,但是本领域技术人员将理解,被配置为以任意顺序执行方法步骤的任意系统落入本公开的范围内。
169.在步骤1102中,astc_a管线442接收对应于交点的uv坐标集和交点处的uv覆盖的部分。在一些实施例中,astc_a管线442接收对应于uv覆盖的部分的平方根的值,而不是对应于uv覆盖的部分的值。
170.在一些实施例中,astc_a管线442还接收确定纹理块地址所需的一个或更多个其他变量,例如对应于纹理的一组纹理块的开始地址,其中所述纹理块集合中的每一纹理块对应于所述纹理的不同mip级别,以及纹理的尺寸。
171.在步骤1104中,astc_a管线442确定对应于交叉点的细节级别。在一些实施例中,astc_a管线442基于交点处的光线的大小来确定细节层次。如果光线较窄,则需要更高级别的细节来向纹理提供更多的分辨率。如果光线较宽,则其覆盖更多的纹理,因此需要较低级别的细节。
172.在步骤1106中,astc_a管线442识别对应于细节级别的目标纹理块。在一些实施例中,确定细节水平包括确定目标mip水平。目标纹理块是在纹理块集合内的对应于目标mip级别的纹理块。
173.在步骤1108中,astc_a管线442确定目标纹理块的地址。在一些实施例中,确定目标纹理块的地址基于包括目标纹理块的纹理块集合的开始地址。astc_a管线442基于目标mip层级计算偏移值,且通过将偏移值应用于开始地址来确定目标纹理块的地址。
174.在步骤1110中,astc_a管线442确定目标纹理块内的目标纹理元素的坐标。在一些实施例中,astc_a管线442基于对应于交叉点和目标mip级的uv坐标来确定目标纹理元素的坐标。astc_a管线442修改基于原始纹理的大小的uv坐标,以产生基于目标mip层级处的纹理块的大小的经修改的uv坐标。
175.在一些实施例中,astc_a管线442在确定目标纹理块和目标纹理元素的坐标时的操作(如以上关于步骤1104-1110所描述的)可由以下伪代码表示:
176.width_of_footprint=int(sqrt_fraction_uv_coverage*sqrt_texture_area);
177.mip_level=min(log2(width_of_footprint),coarsest_mip_level);
178.mip_block_offset=offset of first block for chosen mip level;
179.modified_u=int(u*mip_xsize);
180.modified_v=int(v*mip_ysize);
181.bx=modified_u/block_dimension_x;
182.by=modified_v/block_dimension_y;
[0183][0184]
根据以上伪代码,astc_a管线442基于uv覆盖的分数和纹理的大小来计算光线的覆盖区的宽度。基于足迹的大小确定目标mip水平。如上述伪代码所示,所选的mip级别不能小于最粗的mip级别。基于所述组块的所述地址、对应于所述mip级别的所述偏移值、所述纹理块在所述目标mip级别的维度以及所述原始纹理的维度来确定所述目标纹理块的块地址。另外,astc_a管线442基于经修改的uv坐标、目标mip级别处的纹理块的维度以及原始纹理的维度来计算目标纹理元素的x和y坐标。
[0185]
在步骤1112中,astc_a管线442生成包括目标纹理块的地址和目标纹理元素的目标纹理块内的坐标的输出。
[0186]
图11b是根据一个实施例的用于从纹理块中提取目标纹理元素而不解压缩或提取纹理块中的其他纹理元素的方法步骤的流程图。尽管结合图1-4的系统描述了方法步骤,但是本领域技术人员将理解,被配置为以任意顺序执行方法步骤的任意系统落入本公开的范围内。
[0187]
在步骤1120中,astc_dp管线444接收纹理块和与目标纹理元素相对应的一组纹理元素坐标。例如,astc_dp管线444从核心调度器420接收纹理块1050和纹理元素坐标。
[0188]
在一些实施例中,astc_dp管线444还接收纹理块的标头信息。在一些实施例中,astc_dp管线444读取纹理块且从纹理块提取标头信息。头部信息包括用于提取纹理块的目标纹理元素的元数据,诸如块模式、权重的位置、分区的位置、颜色端点模式等。从纹理块中提取目标纹理元素所需的报头信息可以取决于特定纹理块而变化。
[0189]
在一些实施例中,如果块被标记为“空隙程度”,则纹理块存储恒定颜色。astc_dp管线444输出存储于块中的恒定颜色。
[0190]
在步骤1124中,astc_dp管线444识别纹理块内与目标纹理元素相对应的纹理块分区。在一些实施例中,astc_dp管线444基于目标纹理元素的坐标来确定纹理块分区。
[0191]
在步骤1126中,astc_dp管线444确定纹理块分区的颜色端点。在一些实施例中,astc_dp管线444基于纹理块的标头信息中所包含的元数据来确定对应于分区的颜色端点模式。元数据指示用于纹理块的颜色端点模式。astc_dp管线444基于颜色端点模式解码纹理块分区的颜色端点。
[0192]
在步骤1128中,astc_dp管线444为目标纹理元素确定一个或更多个颜色通道权重。在一些实施例中,确定颜色通道权重是基于包括在纹理块的头部信息中的元数据。元数据指示一个或更多个颜色通道权重在纹理块内的位置。另外,元数据可以包括权重量化元数据,其指示如何从纹理块中提取一个或更多个颜色通道权重。astc_dp管线444基于权重量化元数据从所指示的位置提取一个或更多个颜色通道权重。
[0193]
在一些实施例中,astc_dp管线444确定两个颜色通道权重,并且astc_dp管线444进一步确定哪个颜色通道(红色、绿色、蓝色或阿尔法)对应于这两个颜色通道权重中的哪
个。
[0194]
在步骤1130中,基于颜色端点和颜色通道权重来计算目标纹理元素的rgba值。在一些实施例中,在计算目标纹理元素的rgba值时astc_dp管线444的操作可由以下伪代码表示:
[0195][0196]
根据以上伪代码,astc_dp管线444计算rgba颜色通道中的每一者的值。astc_dp管线444基于在以上步骤1126和1128中确定的颜色通道权重和颜色端点来计算每一颜色通道的值。如果srgb正被使用,那么astc_dp管线444将所述值转换为rgba。如果astc_dp管线444不执行srgb转换,那么astc_dp管线444将0与0xffff之间的数字转换成0与1之间的值。
[0197]
在步骤1132中,astc_dp管线444生成包括目标纹理元素的rgba值的输出。
[0198]
所公开的技术相对于现有技术的至少一个技术优点是所公开的技术可以从纹理块提取单个纹理元素,而无需解压缩整个纹理块。因为仅需要针对目标纹理元素执行计算,并且纹理块中的其他纹理元素未被解压缩,所以pbru与需要执行单元解压缩整个纹理块的现有方法相比可以更有效地提取单个纹理元素。
[0199]
虽然以上步骤是相对于astc格式的经压缩纹理块来描述的,但可使用任何经压缩或未经压缩纹理块格式。提取单个纹理元素的特定步骤可以取决于特定纹理块格式而变化。例如,如果纹理块是未压缩的纹理块,则可以直接从对应于特定纹理元素的存储器位置读取特定纹理元素,而不从存储器读取纹理块中的周围纹理元素。
[0200]
使用渲染引擎的重要性采样
[0201]
当渲染3d场景的二维图像时,产生源自特定光源且朝向3d场景中的不同方向延伸的多条光线。对于每条光线,标识出该光线与该3d场景中的对象的表面之间的交点。在交点处执行重要性采样以生成与通过光线和物体表面的交点产生的二次光线相对应的方向。次光线源自交点并且朝着通过重要性采样生成的方向延伸。次级光线可表示例如当物体表面被来自光源的光(例如,由该光线表示的光束)撞击或被其他次级光线撞击时产生的着色、反射、折射等。
[0202]
如上文所论述,使用指示光如何与对象的表面相互作用的不同材料性质层(例如,抛光、反射率、漫射行为、半透明度、透明度等)来模型化对象表面。每种材料特性使用一个或更多个计算和/或函数来定义,这些计算和/或函数是基于由一个或更多个其他材料特性
产生的一个或更多个变量和/或一个或更多个值来评估的。
[0203]
材料图可以用于表示与对象表面相关联的不同材料属性以及不同材料属性之间的关系。当执行重要性采样时,从不同的材料特性中随机地选择特定的材料特性,并且评估特定的材料特性的计算和/或函数以生成二次光线的方向。如下面在图14-16中更详细描述的,为了使用pbru335基于材料图执行重要性采样,将材料图编译成可以由pbru335执行的重要性采样指令的集合。
[0204]
图12是示出根据一个实施例的用于使用pbru335对光线执行重要性采样的数据流的框图。
[0205]
如图12所示,sm325向pbru335发送光线1210,以对光线1210执行重要性采样。在一些实施例中,光线1210包括用于识别光线1210的光线标识符。在一些实施例中,sm 325计算或接收与光线1210相关联的一个或更多个变量的值。当向pbru335发送光线1210时,sm325包括一个或更多个变量值。
[0206]
在一些实施例中,sm325基于光线1210与3d场景中的对象的表面之间的交叉点来确定对应于该交点处的对象的表面的重要性采样指令1220的集合。在一些实施例中,sm325用光线1210将重要性采样指令集1220或其一部分发送给pbru335。在一些实施例中,sm325发送对应于重要性采样指令集1220的地址。另外,sm325可发送索引值,其指示在重要性采样指令集1220内要执行的下一指令的位置。例如,sm325可发送索引值0,其指示pbru335应在重要性采样指令集合1220中的第一指令处开始执行。
[0207]
在一些实施例中,发送光线1210包括发送对应于光线1210的光线数据结构。光线数据结构存储光线标识符、重要性采样指令集1220的地址、重要性采样指令集1220内的开始指令的索引、以及包括与光线1210相关联的一个或更多个变量的堆栈。
[0208]
pbru335接收光线1210和重要性采样指令集1220,并且执行重要性采样指令集1220以生成与光线相关联的次方向1230。如图12所示,pbru335可以向sm325或ttu330发送次方向1230以供进一步处理。
[0209]
在一些实施例中,sm325和/或ttu330基于次方向1230生成源自交点并且朝向次方向1230延伸的次光线。sm325和/或ttu330可以确定次级光线与3d场景中的对象的表面之间的第二交叉点,并且将次级光线发送回pbru335用于材料着色和/或重要性采样。
[0210]
将了解,本文中所描述的操作和数据流是说明性的,且变化和修改是可能的。例如,sm325或ttu330可以确定3d场景中光线与对象之间的交叉点,计算与所述光线相关联的变量值,确定对应于所述交叉点的一重要性采样指令集,将所述光线发射到pbru335,和/或将所述重要性采样指令集发射到pbru335。类似地,pbru335可以向sm325或ttu330传送次方向,而不管哪一个发送光线到pbru335。
[0211]
图13a是根据一个实施例的用于使用pbru对光线执行重要性采样的方法步骤的流程图。尽管结合图1-4的系统描述了方法步骤,但是本领域技术人员将理解,被配置为以任意顺序执行方法步骤的任意系统落入本公开的范围内。
[0212]
在步骤1302,pbru的核心调度器从sm接收光线。例如,核心调度器420从sm 325接收光线1210。在一些实施例中,核心调度器420还从sm325接收一重要性采样指令集。核心调度器420将重要性采样指令的集合存储到指令高速缓存412。在一些实施例中,核心调度器420从sm325接收对应于一重要性采样指令集的地址。
[0213]
在一些实施例中,核心调度器420接收表示光线1210的光线数据结构。光线数据结构包括例如对应于光线1210的光线标识符、重要性采样指令集1220的地址、重要性采样指令集1220内的开始指令的索引、以及包括与光线1210相关联的一个或更多个变量的堆栈。
[0214]
在步骤1304中,核心调度器将光线分配给处理核心。例如,核心调度器420向多个处理核心430中的特定处理核心430分配光线1210。核心调度器420可确定哪些处理核心430没有指派光线,并选择当前没有指派任何光线的处理核心430。
[0215]
在步骤1306中,处理核心基于该光线执行该重要性采样指令集,以生成二次光线的方向。例如,处理核心430基于光线1210执行重要性采样指令集1220以产生方向1230。
[0216]
图13b是根据一个实施例的用于执行重要性采样指令集的方法步骤的流程图。尽管结合图1-4的系统描述了方法步骤,但是本领域技术人员将理解,被配置为以任意顺序执行方法步骤的任意系统落入本公开的范围内。
[0217]
在步骤1322中,pbru的处理核心从核心调度器接收光线。例如,处理核心430从核心调度器420接收光线1210。在一些实施例中,接收光线1210包括接收对应于光线1210的光线标识符、对应于重要性采样指令集1220的地址、重要性采样指令集1220内的起始指令的索引和包括与光线1210相关联的一个或更多个变量的堆栈。
[0218]
在步骤1324中,处理核心430请求下一重要性采样指令集。在一些实施例中,处理核心430向核心调度器420发送对在用光线1210接收的指令地址处的重要性采样指令集的请求。处理核心430等待从核心调度器420接收重要性采样指令集或从核心调度器420接收重要性采样指令集在指令高速缓存412中可用的指示。在接收到要执行的下一重要性采样指令集或接收到下一重要性采样指令集在指令高速缓存412中的指示之后,该方法前进到步骤706。
[0219]
在一些实施例中,如果核心调度器420用光线1210接收到一重要性采样指令集,则核心调度器420将该重要性采样指令集存储在指令高速缓存412中或者用光线1210将该重要性采样指令集发送到处理核心430。处理核心430可以确定下一重要性采样指令集可用,并且前进到步骤706,而不请求额外的指令。
[0220]
在步骤1326中,处理核心430解码重要性采样指令集中的下一指令。另外,处理核心430对跟随下一指令的任何立即数进行解码。处理核心430根据下一指令执行一个或更多个不同的动作。
[0221]
如果下一指令是光线停止指令,则在步骤1328中,处理核心停止执行针对光线的重要性采样指令,并且向核心调度器发送光线。例如,处理核心430向核心调度器420发送光线1210。如果处理核心430生成次要方向1230,则处理核心430还将次要方向1230发送给核心调度器420。
[0222]
在一些实施例中,向核心调度器420发送光线1210包括发送光线1210的堆栈。如果处理核心430生成了次方向1330,则次方向1230被存储在光线1210的堆栈的顶部。如果处理核心430尚未生成次方向1230,则栈反映已经针对光线1210完成的计算。
[0223]
在一些实施例中,发送光线1210包括发送表示光线1210的更新后的光线数据结构。更新后的光线数据结构包括例如与光线1210相对应的光线标识符;由处理核心430执行的最新的重要性采样指令集的地址;由处理核心430执行的重要性采样指令的最新集合内的最后指令的索引;以及与光线1210相关联的堆栈。
[0224]
如果下一指令是可由处理核心本地执行的指令,则在步骤1330中,处理核心本地执行指令。可本地执行的指令包括(例如)堆栈运算(例如,推、加载和存储)和固定点运算(例如,加法、乘法和lerp)。在本地执行指令之后,如果可用,则处理核心进行到下一指令。
[0225]
在一些实施例中,重要性采样指令的集合包括多个情况和从多个情况选择特定情况来执行的随机选择指令。如果下一指令是随机选择指令,则处理核心执行随机选择指令以选择要执行的特定情况。在一些实施例中,执行随机选择指令包括:将多个权重从栈中弹出,其中每个权重对应于多个情况中的不同情况;以及基于多个权重随机选择情况编号。例如,假设第一情况对应于权重w0,第二情况对应于权重w1,第三情况对应于权重w2。执行随机选择指令包括将权重w0、w1和w2相加并且生成0与权重之和之间的随机数。如果随机数在0与w0之间,则选择第一种情况。如果随机数在w0与w0和w1之和之间,则选择第二种情况。最后,如果随机数在w0与w1之和与所有权重之和之间,则选择第三种情况。
[0226]
处理核心跳到对应于所选案例编号的多个案例中的特定案例,并且继续执行在特定案例内的下一指令。在一些实施例中,每种情况由情况指令和结束情况指令表示。处理核心可以重复地前进到下一指令并且跳过下一指令的执行,直到正确数量的情况和结束情况指令对已经被跳过(即,所选择的情况数量减1)。
[0227]
如果下一指令不是可以由处理核心本地执行的指令,则在步骤1332中,处理核心向核心调度器发送请求。例如,如果指令用于固定函数,诸如纹理地址(ttex_a)、纹理数据路径(ttex_dp)、ggx、oren-nayar、schlick-fresnel、sheen等,则处理核心430将对相应管线440的请求发送到核心调度器420。对于重要性采样,指令可针对固定函数的方向版本,其包含与常规固定函数相同的计算但产生方向而非颜色。将请求发送到核心调度器420可包含将固定函数的一个或更多个自变量弹出堆栈,且将所述一个或更多个自变量与所述请求包含。核心调度器420将请求和一个或更多个自变量发送到对应的管线440。管线440接收一个或更多个自变量作为一个或更多个输入,且对一个或更多个输入执行对应的固定函数以产生固定函数的一个或更多个输出。管线440将一个或更多个输出传送回核心调度器420,并且核心调度器420将一个或更多个输出发送到处理核心430。
[0228]
在一些实施例中,发送请求包括与请求一起发送对应于光线1210的标识符。在一些实施例中,对应于光线1210的标识符包括对应于光线1210的光线标识符。在一些实施例中,对应于光线1210的标识符包括对应于处理核心430的标识符。如果多条光线被指派给处理核心430,则该标识符还包括索引值,该索引值对应于被指派给处理核心430的多条光线内的光线1210的索引。当一个或更多个输出被发送到核心调度器420时,标识符与一个或更多个输出一起被包括。核心调度器420使用该标识符来确定该一个或更多个输出应当被发送到处理核心430。
[0229]
在向核心调度器420发送请求之后,处理核心430等待,直到在步骤1334,处理核心430从核心调度器420接收一个或更多个结果。如果一个或更多个结果包括一个或更多个值,诸如由管线440生成的一个或更多个值,则处理核心430将该一个或更多个值推送到栈上。在从核心调度器420接收到一个或更多个结果之后,处理核心430进行到下一指令(如果可用)。
[0230]
如果在指令集中不剩余指令,但是处理核心430尚未到达光线停止指令并且停止针对光线执行指令,则该方法返回至步骤1324,在该步骤中,处理核心430请求执行下一指
令集。处理核心430请求利用光线510接收的指令地址处的下一重要性采样指令集,其增加所执行的最后指令的索引。
[0231]
如果在指令集中剩余指令,则该方法返回到步骤706,其中处理核心430解码指令集中的下一指令。
[0232]
返回至图13a,在处理核心完成执行重要性采样指令集之后,在步骤1308,核心调度器从处理核心接收光线和次方向。例如,核心调度器420从处理核心430接收光线1210和次方向1230。在一些实施例中,核心调度器420从处理核心430接收光线1210的栈,其中次方向1230被存储在栈的顶部。在一些实施例中,核心调度器420从处理核心430接收表示光线1210的更新后的光线数据结构。更新后的光线数据结构包括例如与光线1210相对应的光线标识符;由处理核心430执行的最新的重要性采样指令集的地址;由处理核心430执行的重要性采样指令的最新集合内的最后指令的索引;以及与光线1210相关联的堆栈。
[0233]
在步骤1310中,核心调度器向sm和/或ttu发送光线和次方向以供进一步处理。例如,核心调度器420向sm325和/或ttu330发送光线1210和次方向1230。
[0234]
编译材料图
[0235]
图14是说明经配置以实施不同实施例的一个或更多个方面的计算设备1410的框图。如图所示,计算设备1410包括一个或更多个处理器1412、存储装置1414和存储器1416。在一些实施例中,计算设备1410是与ppu202(包括pbru335)驻留在其上的计算设备分开的计算设备。在其他实施例中,计算设备1410可以是ppu202和pbru335驻留在其上的相同计算设备,诸如图1中所示的计算设备100。
[0236]
计算设备1410包括服务器计算机、台式计算机、膝上型计算机、智能电话、个人数字助理(pda)、平板计算机、或被配置成接收输入、处理数据并且可选地显示图像的任何其他类型的计算设备,并且适合于实践一个或更多个实施例。本文中描述的计算设备1410是说明性的,并且任何其他技术上可行的配置落在本公开的范围内。
[0237]
一个或更多个处理器1412包括被实现为中央处理单元(cpu)的任何合适的处理器,图形处理单元(gpu)、专用集成电路(asic)、现场可编程门阵列(fpga),人工智能(ai)加速器,诸如张量处理单元(tpu)、任何其他类型的处理单元,或不同处理单元的组合,例如经配置以结合gpu操作的cpu。一般来说,一个或更多个处理器1412可为能够处理数据和/或执行软件应用程序的任何技术上可行的硬件单元。进一步,在本公开的上下文中,计算设备1410中示出的计算元件可对应于物理计算系统(例如,数据中心中的系统)或者可以是在计算云内执行的虚拟计算实施例。
[0238]
存储装置1414包括用于应用和数据的非易失性存储装置,并且可以包括固定或可移动磁盘驱动器、闪存设备、以及cd-rom、dvd-rom、蓝光、hd-dvd或其他磁性、光学或固态存储设备。材料图1418和编译器1420可被存储在存储114中并在执行期间被加载到存储器1416中。
[0239]
存储器1416包括随机存取存储器(ram)模块、闪存单元、或任何其他类型的存储器单元或其组合。一个或更多个处理器1412被配置成从存储器1416读取数据和向存储器1416写入数据。存储器1416包括可以由一个或更多个处理器1412执行的不同软件程序和与所述软件程序(包括编译器1420)相关联的应用数据。
[0240]
如上文所论述,材料图是用以表示对象表面的不同材料性质和不同材料性质之间
的关系的图结构。
[0241]
图15示出了示例材料图表1418。如图所示,材料图1418包括多个节点。该多个节点包括限定材料特性(如α切口、抛光、发光、金属、玻璃等)的多个材料属性节点1510。尽管图15中未示出,但每个材料属性节点1510可包括多个附加节点,这些节点进一步定义与材料属性节点1510相关联的一个或更多个变量以及对这些变量执行以计算对应于材料属性节点1510的一个或更多个值的一个或更多个计算。
[0242]
另外,多个节点包括定义材料属性之间的关系的多个关系节点1520。例如,关系节点1522指示材料属性扩散应当与材料属性皮肤组合。尽管图15中未示出,但每一关系节点1522定义基于对应于关系节点1522的子节点的值执行的一个或更多个计算以产生对应于关系节点1522的一个或更多个值。
[0243]
当对与物体的表面相交的光线执行材料着色和/或重要性采样时,基于该光线评估不同的材料特性和不同的材料特性之间的关系。例如,基于光线来评估每个材料属性节点1510以生成对应于材料属性节点1510的一个或更多个值,并且基于针对材料属性节点1510生成的一个或更多个值来评估每个关系节点1522以生成对应于关系节点1522的一个或更多个值。
[0244]
通常,可将材料图编译成多个不同着色器程序,其中每一着色器程序对应于所述材料图的不同部分和/或所述不同材料性质的不同参数集。着色器程序可以由诸如cpu102或sm325的处理器执行。然而,由于着色器程序被编译成用于在各种处理器上执行的通用机器语言,所以着色器程序包含显著的开销。另外,由于材料图形的不同部分和/或具有不同材料属性参数的材料图形被编译成不同着色器程序,因此需要编译来渲染3d场景的着色器程序的数目与3d场景中不同类型的对象表面的数目相比可呈指数增长。例如,参见图15,每个材料属性节点1510可对应于不同的着色器程序。
[0245]
编译器1420基于材料图而产生字节代码指令的一个或更多个集合,而不是将材料图编译成多个着色器程序。字节代码指令的每一集合包括可由基于硬件的渲染引擎(例如,pbru335)执行的字节代码。当由pbru执行时,字节代码指令的每个集合使得pbru评估由材料图定义的不同材料属性以及不同材料属性之间的关系。
[0246]
如图所示,编译器1420接收材料图1418并且基于材料图1418生成材料着色指令集1422和重要性采样指令集1424。材料着色指令集1422在由pbru执行时使pbru生成与光线与对象表面的交集相关联的颜色,该对象表面具有由材料图表1418定义的材料属性。重要性采样指令集1424在由pbru执行时使pbru生成当主光线与具有由材料图表1418定义的材料属性的物体表面相交时生成的次光线的方向。
[0247]
在一些实施例中,编译器1420接收材料图1418的文本表示。编译器1420解析材料图1418的文本表示以生成表达式树,诸如后缀表达式树。对于材料图1418的每个节点,表达式树包括与该节点对应的一个或更多个表达。在一些实施例中,一个或更多个表达式对应于由节点定义的一个或更多个计算。包括在表达式树中的每个表达被表示为表达式树中的一个或更多个节点的集合。
[0248]
在一些实施例中,编译器1420检查表达式树的语义完整性以确定表达式树中是否包括任何错误。检查表达式树的语义完整性包括例如确定在使用变量之前变量是否在表达式树中定义和/或确定函数是否包括正确数量的自变量。如果编译器1420确定表达式树包
括错误,则编译器1420不继续生成字节代码指令集。
[0249]
在一些实施例中,编译器1420简化表达式树中的一个或更多个表达或子表达。简化一个或更多个表达式或子表达式可包括例如:删除未使用的变量,折叠常数(例如,用对应于60的单个节点替换对应于5*12的节点集合),简化表达式(例如,x 0,x*0,x 1,x/1,0/x),确定纹理函数是否能够用恒定颜色替换,用常数替换评估为常数的函数调用(例如,当粗糙度等于0时,用值1/pi替换oren-nayar函数),或删除仅被使用一次的变量的存储。可基于包括在材料图1418中的不同函数和变量在表达式树上执行任何技术上可行的简化和/或优化。
[0250]
在一些实施例中,如果编译器1420生成重要性采样指令,则编译器1420移除不影响方向和/或权重的表达式树的一个或更多个部分,诸如对应于纹理函数的一些节点。
[0251]
在一些实施例中,如果编译器1420正在生成重要性采样指令,则编译器1420创建包括在表达式树中包括的多个叶节点的列表。编译器1420在多个叶节点上方生成随机选择节点,并用该随机选择节点替换表达式树的根。为了重要性采样而修改的表达式树包括作为根节点的随机选择节点和随机选择节点下的多个叶节点。
[0252]
对于多个叶节点中的每个叶节点,编译器1420确定与叶节点相关联的权重。编译器1420将与叶节点相关联的权重分配给叶节点。在一些实施例中,向叶节点分配权重包括向表达式树添加定义权重值和/或对应于与计算权重值相关联的指令的一个或更多个节点。如下面所讨论的,分配给叶节点的权重可以是特定权重,或者该权重可通过执行对应于与叶节点相关联的材料图的部分的一个或更多个指令来动态地生成。一个或更多个节点被添加到随机选择节点上方的表达式树,使得相应的指令在执行随机选择指令之前被执行。
[0253]
在一些实施例中,多个叶节点中的每个叶节点被分配相等的权重。例如,编译器1420可计算值i除以离开节点的数量,并将该值分配给多个叶节点中的每个叶节点。
[0254]
在一些实施例中,材料图1418指定对应于每个叶节点的权重。编译器1420确定针对每个叶节点指定的权重,并将该权重分配给该叶节点。
[0255]
在一些实施例中,每个叶节点的权重基于叶节点对材料图1418的贡献。即,每个叶节点的权重基于叶节点在材料图1418中如何被加权。例如,与贡献较大值的第二叶节点相比,贡献较小值的第一叶节点可被指派较小权重。在一些实施例中,编译器1420评估材料图1418以确定每个叶节点贡献于由材料图1418生成的总体结果的量。编译器1420基于所述量确定每一叶节点的权重。
[0256]
编译器1420将由叶节点引用的函数调用转换为方向函数调用。例如,如果叶节点调用oren-nayar函数,则编译器1420修改叶节点以调用oren-nayar方向函数。另外,编译器1420基于方向函数调用来修改叶节点的自变量。参考以上实例,常规oren-nayar函数可包含对应于相交光线的方向和粗糙度的自变量。oren-nayar方向函数不需要那些自变量来计算方向,因此编译器1420从表达式树移除那些自变量。
[0257]
编译器1420基于表达式树或经处理的表达式树来生成字节代码指令集。在一些实施例中,编译器1420遍历表达式树,并且对于表达式树的每个节点,生成与该节点对应的一个或更多个字节代码指令。例如,如果表达式树的节点定义变量的值,则编译器1420生成将变量的值推送到栈上的字节代码指令。作为另一实例,pbru经配置以执行多个内置功能,例如由pbru335的管线440实施的固定功能。如果表达式树的节点包括对内置函数的调用,则
编译器1420生成调用该函数的字节代码指令。
[0258]
在一些情况下,材料图1418和相应的表达式树可包括不能被转换成字节代码指令的函数或操作。例如,表达式树的节点可包括对函数的调用,该函数不是内置函数或不能使用可用字节代码指令来表达。在一些实施例中,如果编译器1420确定函数不能被转换成字节代码指令,则编译器1420可生成光线停止指令以替换该函数。另外,在一些实施例中,编译器1420可生成对应于可由处理器(例如sm325)而非由pbru执行的函数的额外指令集。
[0259]
在一些实施例中,编译器1420使用自底向上遍历来遍历表达式树。然而,对于随机选择节点,编译器1420执行自顶向下遍历。对于随机选择节点,编译器1420生成对应于随机选择函数的字节代码指令。对于随机选择节点下的每个叶节点,编译器1420生成案例指令、对应于叶节点的一个或更多个字节码指令和结束案例字节码指令。由编译器1420生成的重要性采样指令1424包括多个情况,每个情况由情况和结束情况字节代码指令表示,并且随机选择函数从多个情况选择特定情况来执行。
[0260]
在一些实施例中,在基于表达式树生成字节代码指令集之后,编译器1420在字节代码指令集的结尾处添加光线停止指令。在一些实施例中,表达式树包括对应于光线停止指令的一个或更多个节点,并且编译器1420在基于表达式树生成字节代码指令的同时生成(一个或更多个)光线停止指令。如果字节代码指令集以光线停止指令结束,则编译器1420不在字节代码指令集的结束处添加另一光线停止指令。
[0261]
由于由编译器1420产生的字节代码指令以pbru为目标,因此与着色器程序所需的开销相比,字节代码指令集所需的开销低得多。另外,由于每一字节代码指令仅占据一个字节,因此存储和执行对应于材料图形的字节代码指令集所需的存储装置和存储器的量远小于存储和执行所述多个着色器程序所需的存储装置和存储器的量。
[0262]
作为实例,着色器程序包含if-语句,但sm在分支处不好。由此,不是在单个着色器程序中包括分支,而是可以编译着色器程序的不同版本,其各自采用着色器程序内的不同分支,并且包括附加代码以确定着色器程序的哪个版本需要被执行。照此,使用常规技术,单个材料图可对应于大量着色器程序。相比之下,利用所揭示技术,仅需要产生和执行字节代码指令的一个集合。
[0263]
图16是根据一个实施例的用于编译材料图形的方法步骤的流程图。尽管结合图14的计算设备描述了方法步骤,但是本领域技术人员将理解,被配置为以任意顺序执行方法步骤的任意计算设备或系统落入本公开的范围内。
[0264]
在步骤1602中,编译器解析材料图以生成表达式树。例如,编译器1420解析材料图1418以生成对应于材料图1418的表达式树。对于材料图1418的每个节点,表达式树包括与该节点对应的一个或更多个表达式。在一些实施例中,一个或更多个表达式对应于由节点定义的一个或更多个计算。包括在表达式树中的每个表达被表示为表达式树中的一个或更多个节点的集合。
[0265]
在步骤1604中,编译器1420处理表达式树以生成经处理的表达式树。以类似于以上关于编译器1420所公开的方式来执行对表达式树的处理。
[0266]
在一些实施例中,编译器1420检查表达式树的语义完整性以确定表达式树中是否包括任何错误。检查表达式树的语义完整性包括例如确定在使用变量之前变量是否在表达式树中定义和/或确定函数是否包括正确数量的自变量。如果编译器1420确定表达式树包
括错误,则编译器1420不继续生成字节代码指令集。
[0267]
在一些实施例中,编译器1420简化了表达式树中的一个或更多个表达式或子表达式。简化一个或更多个表达式或子表达式可包括例如:删除未使用的变量,折叠常数(例如,用对应于60的单个节点替换对应于5*12的节点集合),简化表达式(例如,x 0,x*0,x 1,x/1,0/x),确定纹理函数是否能够用恒定颜色替换,用常数替换评估为常数的函数调用(例如,当粗糙度等于0时,用值1/pi替换oren-nayar函数),或删除仅被使用一次的变量的存储。
[0268]
在一些实施例中,如果编译器1420生成重要性采样指令,则编译器1420移除不影响方向和/或权重的表达式树的一个或更多个部分,诸如对应于纹理函数的一些节点。编译器1420针对每个节点确定是否需要该节点来计算叶节点的权重。如果不需要节点来计算叶节点的权重,则编译器1420移除该节点。
[0269]
在一些实施例中,如果编译器1420生成重要性采样指令,则编译器1420移除表达式树的定义不用于方向函数的变量或自变量的一个或更多个部分。例如,规则(材料着色)oren-nayar函数可包括对应于相交光线的方向和粗糙度的自变量,但oren-nayar方向函数不包括那些自变量,因为不需要自变量来计算方向。编译器1420从表达式树去除对应于相交光线的方向和粗糙度的节点。
[0270]
如果编译器1420正在生成材料着色指令,则方法进行到下面的步骤1614,其中编译器1420基于经处理的表达式树生成字节代码指令。
[0271]
如果编译器1420正在生成重要性采样指令,则方法进行到步骤1606。在步骤1606中,编译器1420在经处理的表达式树中生成叶节点的列表。在一些实施例中,每个叶节点对应于函数调用,诸如ggx、oren-nayar、sheen等。
[0272]
在步骤1608,编译器1420在多个叶节点上方生成随机选择节点。随机选择节点对应于随机选择函数,该随机选择函数从多个案例中随机选择要执行的案例。在一些实施例中,多个案例中包括的每种案例对应于叶节点列表中的叶节点。编译器1420用随机选择节点替换每个叶节点的母节点。另外,编译器1420用随机选择节点替换表达式树的根。为了重要性采样而修改的表达式树包括作为根节点的随机选择节点和作为随机选择节点的子节点的多个叶节点。
[0273]
在步骤1610,编译器计算每个叶节点的权重并且将该权重分配给叶节点。计算每个叶节点的权重以与以上关于编译器1420所公开的方式类似的方式来执行。
[0274]
在一些实施例中,包括在多个叶节点中的每个叶节点被分配相等的权重。例如,编译器1420可计算值i除以叶节点的数目,且将所述值指派给所述多个叶节点中的每一叶节点。
[0275]
在一些实施例中,材料图1418指定对应于每个叶节点的权重。编译器1420确定针对每个叶节点指定的权重,并将该权重分配给该叶节点。
[0276]
在一些实施例中,每个叶节点的权重基于叶节点对材料图1418的贡献。即,每个叶节点的权重基于叶节点在材料图1418中如何被加权。例如,与贡献较大值的第二叶节点相比,贡献较小值的第一叶节点可被指派较小权重。在一些实施例中,编译器1420评估材料图1418以确定每个叶节点贡献于由材料图1418生成的总体结果的量。编译器1420基于所述量确定每一叶节点的权重。
[0277]
在步骤1612,编译器用对方向指令的引用将对颜色指令的引用转换。在一些实施例中,每个叶节点对应于函数调用,诸如ggx、oren-nayar、sheen等。编译器1420将每一叶节点中的函数调用替换为对所述函数的方向版本的调用。例如,ggx的函数调用被替换为ggx_direction的函数调用。
[0278]
在步骤1612,编译器基于经处理的表达式树生成字节代码指令。生成字节代码指令以类似于以上关于编译器1420所公开的方式来执行。
[0279]
在一些实施例中,编译器1420遍历表达式树,并且对于表达式树的每个节点,生成与该节点对应的一个或更多个字节代码指令。例如,如果表达式树的节点定义变量的值,则编译器1420生成将变量的值推送到栈上的字节代码指令。作为另一实例,pbru经配置以执行多个内置功能,例如由pbru335的管线440实施的固定功能。如果表达式树的节点包括对内置函数的调用,则编译器1420生成调用该函数的字节代码指令。
[0280]
在一些情况下,材料图1418和相应的表达式树可包括不能被转换成字节代码指令的函数或操作。例如,表达式树的节点可包括对函数的调用,该函数不是内置函数或不能使用可用字节代码指令来表达。在一些实施例中,如果编译器1420确定函数不能被转换成字节代码指令,则编译器1420可生成光线停止指令以替换该函数。另外,在一些实施例中,编译器1420可生成对应于可由处理器(例如sm325)而非由pbru执行的函数的额外指令集。例如,如果该函数对应于用户定义的函数,则编译器1420可被配置成生成指令,这些指令在由诸如sm325之类的处理器执行时调用该用户定义的函数。
[0281]
在一些实施例中,编译器1420使用自底向上遍历来遍历表达式树。然而,对于随机选择节点,编译器1420执行自顶向下遍历。对于随机选择节点,编译器1420生成对应于随机选择函数的字节代码指令。对于随机选择节点下的每个叶节点,编译器1420生成案例指令、对应于叶节点的一个或更多个字节码指令和结束案例字节码指令。由编译器1420生成的重要性采样指令1424包括多个情况,每个情况由情况和结束情况字节代码指令表示,并且随机选择函数从多个情况选择特定情况来执行。
[0282]
在一些实施例中,在基于表达式树生成字节代码指令集之后,如果光线停止指令不存在于字节代码指令集的结尾处,则编译器1420在字节代码指令集的结尾处添加光线停止指令。
[0283]
总之,所公开的技术使得能够对用于材料着色的材料图形进行有效评估。可编程渲染引擎耦合到一个或更多个树遍历单元和一个或更多个流式多处理器。渲染引擎包括多个mimd处理核心和在多个处理核心之间共享的多个管线。每个管线是固定功能单元,其被配置为执行与材料图相关联的特定复杂函数或评估。将材料图编译成用于渲染引擎的汇编语言指令集。
[0284]
当渲染引擎接收光线时,渲染引擎将该光线分配给该多个处理核心中的处理核心。处理核心基于光线和交叉表面执行编译的材料图。当处理核心执行管线对应的指令时,处理核心向管线发送操作参数,并接收管线产生的相应输出。
[0285]
在一种方法中,流式多处理器向树遍历单元提供光线以供评估。树遍历单元确定与光线相交的表面,并将光线和表面发送给渲染引擎进行素材着色。可替代地,流式多处理器可以向渲染引擎发送光线和表面以用于材料着色。渲染引擎执行编译后的材料图,并向树遍历单元或流式多处理器返回相应的颜色。
[0286]
在一个方法中,流式多处理器利用渲染引擎的多个管线来执行与管线相关联的功能或评估。所述流式多处理器将输入发送到所述多个管线中的特定管线,而非发送到所述渲染引擎,以供指派给处理核心。管线对输入执行相关联的功能或评估,并将输出发送到流式多处理器。
[0287]
在一种方法中,流式多处理器向渲染引擎提供光线以供重要性采样。除了生成用于执行材料图的汇编语言指令集之外,编译器还生成用于基于材料图执行重要性采样的汇编语言指令集。渲染引擎基于光线执行重要性采样指令,并将用于辅助光线的方向返回到流式多处理器。
[0288]
所公开的技术的至少一个技术优点在于,提供了一种渲染引擎,该渲染引擎被专门设计成用于以相对于现有技术解决方案而言提高的效率来执行光线追踪操作和其他串行处理任务。因而,渲染引擎可并入到gpu或其他并行处理单元中,且不能在gpu或其他并行处理单元内的常规处理元件上有效地并行化的处理任务可卸载到渲染引擎,此增加总体处理性能和处理量。对此,在渲染引擎内实现多个mimd(多输入、多个数据)处理核心,其中每个处理核心被配置成异步地处理不同的光线或其他串行处理工作的单元,这使得光线追踪操作和其他串行处理任务能够跨不同的处理核心被大量并行地执行。此外,为了进一步提高总体处理吞吐量,渲染引擎包括被设计成执行某些专用处理任务的多个管线。在操作期间,处理核心可将专用处理任务卸载到不同管线,并且驻留在渲染引擎内的调度器被配置成以优化的方式跨不同管线调度所卸载的任务。此外,可优化由管线执行的专门处理任务,以改进个别处理任务的处理吞吐量。
[0289]
另一个技术优点是每个材料图被编译成用于渲染引擎的单一组汇编语言指令。与现有技术方法不同,材料属性和材料属性参数的不同排列不需要被分开编译成多个材料着色器程序。此外,在编译期间,编译器可以基于材料图语义、不同的材料属性参数和渲染引擎的硬件架构来优化指令。
[0290]
1.在一些实施例中,一种用于并行处理光线追踪操作的计算机实现的方法包括:接收多条光线以及相应的材料着色指令集,所述材料着色指令集用于处理包括在所述多条光线中的每条光线,其中,每条光线表示从光源到三维(3d)环境内的至少一个点的路径,以及每个相应的材料着色指令集至少部分地基于与包括在所述3d环境中的至少一个对象的至少一个表面相关联的一个或更多个材料属性;将包括在所述多条光线中的每条光线分配给包括在多个处理核心中的不同处理核心;以及包括在所述多条光线中的每条光线,使分配给所述光线的所述处理核心对所述光线执行所述相应的材料着色指令集以生成颜色。
[0291]
2.如条款1所述的方法,其中多条光线包括从树遍历单元接收的一条或更多条光线。
[0292]
3.如条款1或2所述的方法,其中,多条光线包括从处理单元接收的一条或更多条光线。
[0293]
4.如条款1-3中任一项所述的方法,还包括:对于包括在所述多条光线中的每条光线,从分配给所述光线的所述处理核心接收所述颜色。
[0294]
5.如条款1-4中任一项所述的方法,其还包括:对于包括在所述多条光线中的每条光线,将所述颜色传送至树遍历单元或处理单元之一。
[0295]
6.如条款1-5中任一项所述的方法,其中,接收该多条光线包括:对于包括在该多
条光线中的每条光线,接收对应于该光线的第一数据结构,其中,该第一数据结构存储与该光线相关联的一个或更多个第一值。
[0296]
7.如条款1-6中任一项所述的方法,还包括:对于包括在该多条光线中的每条光线,从分配给该光线的该处理核心接收对应于该光线的第二数据结构,其中,该第二数据结构存储与该光线相关联的一个或更多个第二值。
[0297]
8.如条款1-7中任一项所述的方法,其中所述一个或更多个第二值包括所述颜色。
[0298]
9.如条款1-8中任一项所述的方法,其还包括:将所述第二数据结构传送至树遍历单元或处理单元之一。
[0299]
10.如条款1-9中任一项所述的方法,还包括:从包括在所述多个处理核心中的第一处理核心接收第一请求;基于所述第一请求确定所述第一请求的目标目的地;以及将所述第一请求传送到所述目标目的地。
[0300]
11.如条款1-10中任一项所述的方法,其中所述第一请求是对纹理块的请求。
[0301]
12.如条款1-11中任一项所述的方法,其中所述第一请求是对光线的第二对应材料着色指令集的请求。
[0302]
13.如条款1-12中任一项所述的方法,其中所述第一请求是向固定功能管线发布指令的请求。
[0303]
14.如条款1-13中任一项所述的方法,还包括:从包括在所述多个处理核心中的第二处理核心接收第二请求;确定所述第二请求的目标目的地与所述第一请求的目标目的地相同;确定用于将所述第一请求和所述第二请求发送到所述目标目的地的顺序;以及基于所述顺序将所述第一请求和所述第二请求发送到所述目标目的地。
[0304]
15.如条款1-14中任一项所述的方法,还包括:从所述目标目的地接收对所述第一请求的一个或更多个响应;确定所述一个或更多个响应与所述第一处理核心相关联;以及将所述一个或更多个响应传送到所述第一处理核心。
[0305]
16.在一些实施例中,计算系统包括:中央处理单元;并行处理单元,其从中央处理单元接收工作;以及执行单元,其从所述并行处理单元接收所述工作的一部分,并且至少部分地并行地对与所述工作的所述部分相关联的不同数据执行不同指令。
[0306]
17.如条款16所述的计算系统,其中来自所述并行处理单元的所述工作的所述部分包括多条光线追踪操作。
[0307]
18.如条款16或17所述的计算系统,其中与所述工作的所述部分相关联的所述不同数据包括多条光线,其中每条光线表示从光源到三维(3d)环境内的至少一个点的路径。
[0308]
19.如条款16至18中任一项所述的计算系统,其中所述不同指令包括一个或更多个不同的材料着色指令集。
[0309]
20.如条款16至19中任一项所述的计算系统,其中所述不同指令包括一个或更多个不同的重要性采样指令集。
[0310]
以任何方式记载在任何权利要求中的任何权利要求元素和/或本技术中描述的任何元素的任何和所有组合均落入本发明和保护的范围内。
[0311]
出于说明目的已经呈现了各个实施例的描述,但并不意图穷尽为或限制为所公开的实施例。在不偏离所述实施例的范围和精神的情况下,对于本领技术人员来讲,许多修改和变化将是显而易见的。
[0312]
本实施例的方面可体现为系统、方法或计算机程序产品。因此,本公开的方面可采取完全硬件实施例、完全软件实施例(包括固件、常驻软件、微代码等)或组合软件和硬件方面的实施例的形式,本文中全部统称为“模块”、“系统”或“计算机”。此外,本公开描述的任何硬件和/或软件技术、工艺、功能、组件、引擎、模块或系统都可以作为电路或一组电路实现。此外,本公开的方面可采用一种或多种计算机可读介质中体现的计算机程序产品的形式,该计算机可读介质上包含计算机可读程序代码。
[0313]
可以使用一种或更多种计算机可读介质的任意组合。计算机可读介质可以是计算机可读信号介质或计算机可读存储介质。例如,计算机可读存储介质包括但不限于电子、磁、光、电磁、红外或半导体系统、装置或设备,或上述任何适当的组合。计算机可读存储介质的更具体的示例(非穷尽列举)可包括:具有一根或更多根电线的电气连接、便携式计算机磁盘、硬盘、随机存取存储器(ram)、只读存储器(rom)、可擦除可编程只读存储器(eprom或闪存)、光纤、便携式光盘只读存储器(cd-rom)、光存储设备、磁存储设备或上述任何合适的组合。在本文档的上下文中,计算机可读存储介质可以是任何有形介质,其可以包括或存储程序,以供指令执行系统、装置或设备使用或与指令执行系统、装置或设备结合使用。
[0314]
本公开的方面参照根据本公开的实施例的方法、装置(系统)和计算机程序产品的流程图和/或框图进行了描述。应理解,流程图和/或框图中的每个框,以及流程图和/或框图中的框的组合,都可以由计算机程序指令实现。这些计算机程序指令可以提供给通用计算机、专用计算机或其他可编程数据处理装置的处理器,以产生机器。该指令在由计算机或其他可编程数据处理装置的处理器执行时,使得能够实现流程图和/或框图的一个或更多个框中指定的功能/动作。此类处理器可以是但不限于通用处理器、专用处理器、特定于应用程序的处理器或现场可编程门阵列。
[0315]
图中的流程图和框图示出了根据本公开的各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这方面,流程图或框图中的每个框可以表示代码的模块、段或部分,代码包括用于实现一个或更多个指定逻辑功能的一个或更多个可执行指令。还应指出,在一些替代实施例中,框中指出的功能可不按图中指出的顺序发生。例如,连续显示的两个框实际上可以大致同时执行,或者这些框有时可以相反的顺序执行,这取决于所涉及的功能。还应注意,框图和/或流程图中的每个框,以及框图和/或流程图中框的组合,可以由基于专用硬件的系统实现,该基于专用硬件的系统执行指定功能或动作或专用硬件和计算机指令的组合。
[0316]
虽然前述内容是针对本公开的实施例,本公开的其他和进一步实施例可以在不偏离其基本范围的情况下设计,其范围由所附权利要求确定。
再多了解一些

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

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

相关文献