用于交错纹理的技术的制作方法

文档序号:32434652发布日期:2022-12-06 17:29阅读:54来源:国知局
用于交错纹理的技术的制作方法

1.本公开的实施例一般涉及计算机科学和计算机图形学,更具体地说,涉及用于交错纹理的技术。


背景技术:

2.在三维(3d)计算机图形学中,光线追踪是一种流行的用于渲染图像的技术,诸如电影或视频游戏的帧。光线追踪技术追踪光线的路径,并模拟光线在虚拟场景中与虚拟对象交互的效果。
3.当通过虚拟场景追踪的光线与表示虚拟对象的几何体相交时,对与该虚拟对象相关联的一个或更多个纹理(也称为“纹理图”)进行采样,以获得一个或更多个纹理值。该一个或更多个纹理值可又用于确定渲染图像中像素的颜色。
4.通常,虚拟对象与多个纹理相关联,诸如指示对象颜色的基础纹理、指示对象光泽度的镜面纹理和/或指示对象表面法线的法线贴图。与虚拟对象关联的多个纹理通常在光线追踪期间单独存储和访问。当通过虚拟场景追踪的光线与表示此类虚拟对象的几何体相交时,在纹理高速缓存中为多个纹理中的每个纹理分配单独的高速缓存行。然后从存储器中读取与这些高速缓存行相关联的纹理数据,并用于确定纹理值。例如,可以为基础纹理分配一个高速缓存行,可以为镜面纹理分配另一个高速缓存行,可以为法线贴图分配再一条高速缓存行等,并且可以为每个分配的高速缓存行读取包含纹理数据的一个或更多个扇区。
5.上述光线追踪方法的一个缺点是,当被追踪的光线相对不相干时,为与虚拟对象相关联的每个纹理分配单独的高速缓存行并且读取与这些高速缓存行相关联的纹理数据可能是浪费的。当被追踪的光线是相干时,在追踪特定光线期间为每个纹理读取然后存储在为该纹理分配的高速缓存行中的纹理数据,通常可重新用于相邻的光线,这些相邻光线沿相同的方向传播并在与特定光线大致相同的位置与场景几何体相交。相比之下,不相干的光线(诸如在光线通过场景被追踪时产生的那些光线),在碰到场景几何体后会被反射,通常沿不同的方向传播,并与虚拟场景中的不同几何体相交,或者在不同的位置与相同的几何体相交。通常,在这种情况下,在追踪特定光线期间为每个纹理分配的高速缓存行和读取的纹理数据不能重新用于其他光线。相反,必须为与那些其他光线相交的虚拟对象相关联的纹理分配另外的高速缓存行,并读取另外的纹理数据。因此,为与虚拟对象相关联的每个纹理分配单独的高速缓存行并读取与这些高速缓存行相关联的纹理数据在计算上可能是昂贵的,并且使用相对大量的纹理带宽。
6.如上所述,本领域需要更有效的使用光线追踪来渲染图形场景的技术。


技术实现要素:

7.本公开的一个实施例阐述了一种用于渲染一个或更多个图形图像的计算机实现的方法。该方法包括基于多个纹理生成交错的纹理。所述交错的纹理包括来自所述多个纹
理的纹理数据。所述方法还包括基于所述交错的纹理来渲染一个或更多个图形图像。
8.所公开的技术相对于现有技术的至少一个技术优势在于,所公开的技术可以为交错的纹理分配单个高速缓存行,并读取相关联的纹理数据,而不是为多个纹理中的每一个纹理分配单独的高速缓存行(诸如与通过虚拟场景被追踪的光线相交的虚拟对象相关联的多个纹理)并读取与这些高速缓存行相关联的纹理数据。因此,可以减少纹理带宽使用,并且可以提高计算性能。此外,所公开的技术可以使用多个纹理头来实现,这些纹理头使得交错的纹理对软件应用程序和用户不透明。这些技术优势代表了相对于现有技术方法的一项或更多项技术改进。
9.为了能够详细理解各种实施例的上述特征,可以通过参考各种实施例(其中一些在附图中示出)对上述简要总结的发明概念进行更具体的描述。然而,应当注意,附图仅示出了本发明概念的典型实施例,因此不应被视为以任何方式限制范围,并且存在其他同样有效的实施例。
附图说明
10.图1是示出被配置为实现本实施例的一个或更多个方面的计算机系统的框图;
11.图2是根据各种实施例的在图1的并行处理子系统中包括的并行处理单元的框图;
12.图3是根据各种实施例的在图2的并行处理单元中包括的通用处理集群的框图;
13.图4是根据各种实施例更详细地示出图3的纹理单元的框图;
14.图5是示出了根据各种实施例的示例性云计算系统的框图;
15.图6a-6b示出了根据各种实施例的纹理和相关联纹理头的示例性交错;
16.图7a-7b示出了根据各种实施例的纹理和相关联纹理细化(mipmap)级别的示例性交错;
17.图8示出了根据各种实施例的用于交错纹理的示例格式;
18.图9a-9c示出了根据各种实施例的与交错纹理相关联的示例扇区和高速缓存行;
19.图10是根据各种实施例的用于生成交错的纹理的方法步骤的流程图;以及
20.图11是根据各种实施例的用于使用一个或更多个交错的纹理执行光线追踪的方法步骤的流程图。
具体实施方式
21.在以下描述中,阐述了许多具体细节以提供对各种实施例的更透彻的理解。然而,对于本领域的技术人员将显而易见的是,可以在没有一个或更多个这些具体细节的情况下实践本发明构思。
22.总体概述
23.本公开的实施例提供用于交错纹理的技术。纹理交错技术有许多实际应用,包括视频游戏、电影制作渲染以及可以使用纹理渲染图像或视频帧的任何其他应用。在所公开的技术中,以其他方式将被单独访问的多个纹理被交错成可用于一起访问多个纹理的单个交错的纹理。对于从多个纹理中获取相同坐标的工作负载,尤其是在不相干模式中,对于相对于多个纹理的交错纹理,可以在高速缓存中分配更少的高速缓存行,并且可以从存储器中读取更少的纹理数据。使用交错的纹理可以提高计算性能并减少纹理带宽的使用。
24.在一些实施例中,交错的纹理可以包括来自多个纹理的交替块。当多个纹理正被加载到存储器中时,可以生成这样的交错的纹理。在一些实施例中,可以使用与交错的纹理中的不同纹理相关联的多个纹理头来访问交错的纹理。在这种情况下,每个纹理头都包括一个跨步,该跨步指示来自交错的纹理中的同一纹理的两个块之间的距离。在其他实施例中,可以使用单个纹理头来访问交错的纹理。
25.本公开的纹理交错技术具有许多实际应用。例如,纹理交错技术可用于光线追踪,以有效地渲染视频游戏中的图像和/或帧。作为特定示例,纹理交错技术可以由基于云的图形处理平台执行,诸如基于云的游戏平台,该平台执行视频游戏并将游戏会话的视频流式传输到客户端设备。所公开的纹理交错技术允许以比传统光线追踪技术使用更少纹理带宽的计算上更高效的方式来执行光线追踪,尤其是在追踪非相干光线时。
26.作为另一个示例,纹理交错技术可以用于电影的制作质量渲染。动画电影以及真人电影中的计算机生成图像(cgi)和特效的制作通常需要对这些电影的帧进行高质量渲染。所公开的纹理交错技术可用于比传统光线追踪技术更有效地渲染电影的帧,尤其是在追踪非相干光线时。
27.以上示例不以任何方式旨在限制。如本领域技术人员将理解的,一般而言,本文描述的纹理交错技术可以在当前采用常规纹理的任何应用中实现,包括但不限于光线追踪技术。
28.系统总览
29.图1是示出被配置为实现本实施例的一个或更多个方面的计算机系统100的框图。如本领域技术人员将理解的,计算机系统100可以是任何类型的技术上可行的计算机系统,包括但不限于服务器机器、服务器平台、台式机、膝上型计算机、手持/移动设备或可穿戴设备。在一些实施例中,计算机系统100是在数据中心或云计算环境中操作的服务器机器,其通过网络提供可伸缩计算资源作为服务。
30.在各种实施例中,计算机系统100包括但不限于经由存储器桥(memory bridge)105和通信路径113耦合到并行处理子系统112的中央处理单元(cpu)102和系统存储器104。存储器桥105经由通信路径106进一步耦合到i/o(输入/输出)桥107,并且i/o桥107又耦合到交换机116。
31.在一个实施例中,i/o桥107被配置为从任选的输入设备108(诸如键盘或鼠标)接收用户输入信息,并且将输入信息经由通信路径106和存储器桥105转发到cpu 102以进行处理。在一些实施例中,计算机系统100可以是云计算环境中的服务器机器。在这些实施例中,计算机系统100可以不具有输入设备108。相反,计算机系统100可以通过接收通过网络传输并经由网络适配器118接收的消息形式的命令来接收等效的输入信息。在一个实施例中,交换机116被配置为提供i/o桥107和计算机系统100的其他组件之间的连接,诸如网络适配器118和各种插件卡120和121。
32.在一个实施例中,i/o桥107耦合到系统盘114,系统盘114可以被配置为存储内容、应用程序和数据,以供cpu 102和并行处理子系统112使用。在一个实施例中,系统盘114提供应用程序和数据的非易失性存储,并可包括固定或可移动硬盘驱动器、闪存设备和cd-rom(光盘只读存储器)、dvd-rom(数字多功能光盘-rom)、蓝光、hd-dvd(高清dvd)或其他磁性、光学或固态存储设备。在各种实施例中,诸如通用串行总线或其他端口连接、光盘驱动
器、数字多功能光盘驱动器、胶片记录设备等的其他组件也可以连接到i/o桥107。
33.在各种实施例中,存储器桥105可以是北桥(northbridge)芯片,并且i/o桥107可以是南桥(southbridge)芯片。此外,通信路径106和113以及计算机系统100内的其他通信路径可以使用任何技术上合适的协议来实现,包括但不限于agp(加速图形端口)、超级传输(hypertransport)或本领域已知的任何其他总线或点对点通信协议。
34.在一些实施例中,并行处理子系统112包括图形子系统,该图形子系统将像素传送到任选的显示设备110,该显示设备110可以是任何常规阴极射线管、液晶显示器、发光二极管显示器等。在这些实施例中,并行处理子系统112结合了针对图形和视频处理优化的电路,包括例如视频输出电路。如以下在图2-3中更详细地描述的,这种电路可以跨并行处理子系统112内包括的一个或更多个并行处理单元(ppu)(本文也称为并行处理器)合并。在其他实施例中,并行处理子系统112包括为通用和/或计算处理而优化的电路。同样,这种电路可跨并行处理子系统112内包括的一个或更多个ppu被合并,其被配置为执行此类通用和/或计算操作。在又一其它实施例中,并行处理子系统112内包括的一个或更多个ppu可被配置为执行图形处理、通用处理和计算处理操作。系统存储器104包括至少一个设备驱动器,其被配置为管理并行处理子系统112内的一个或更多个ppu的处理操作。此外,系统存储器104包括渲染应用程序130,该渲染应用程序130与一个或更多个ppu通信,设备驱动器103提供到ppu的接口。渲染应用程序130可以是使用本文公开的交错的纹理渲染虚拟3d场景的任何技术上可行的应用。例如,渲染应用程序130可以是游戏应用程序或在电影制作中使用的渲染应用程序。尽管本文主要针对渲染应用程序130进行了描述,但本文公开的技术也可以全部或部分地在其他软件和/或硬件中实现,诸如在并行处理子系统112中。
35.在各种实施例中,并行处理子系统112可以与图1的一个或更多个其他元件集成以形成单个系统。例如,并行处理子系统112可以与cpu 102和其他连接电路集成在单个芯片上,以形成片上系统(soc)。
36.在一个实施例中,cpu 102是计算机系统100的主处理器,用于控制和协调其他系统组件的操作。在一个实施例中,cpu 102发出控制ppu的操作的命令。在一些实施例中,如本领域已知的,通信路径113是pci express链路,在该链路中,将专用通道分配给每个ppu。也可以使用其他通信路径。ppu有利地实现了高度并行处理体系结构。ppu可以配备有任意数量的本地并行处理存储器(pp存储器)。
37.应当理解,本文所示的系统是说明性的,并且可以进行变更和修改。可以根据需要修改连接拓扑,包括桥的数量和布置、cpu 102的数量以及并行处理子系统112的数量。例如,在一些实施例中,系统存储器104可以直接连接到cpu 102,而不是通过存储器桥105,并且其他设备将经由存储器桥105和cpu 102与系统存储器104通信。在其他实施例中,并行处理子系统112可以连接到i/o桥107或直接连接到cpu 102,而不是连接到存储器桥105。在其他实施例中,i/o桥107和存储器桥105可以集成到单个芯片中,而不是作为一个或更多个分立设备存在。在某些实施例中,可能不存在图1中所示的一个或更多个组件。例如,可以去掉交换机116,并且网络适配器118和插件卡120、121将直接连接到i/o桥107。最后,在某些实施例中,图1中所示的一个或更多个组件可被实现为虚拟计算环境(诸如云计算环境)中的虚拟化资源。具体地,在一些实施例中,并行处理子系统112可以被实现为虚拟化并行处理子系统。例如,并行处理子系统112可以被实现为虚拟图形处理单元(gpu),该虚拟图形处理
单元在虚拟机(vm)上渲染图形,所述虚拟机在其gpu和其他物理资源跨多个vm共享的服务器机器上执行。
38.图2是根据各种实施例的在图1的并行处理子系统112中包括的并行处理单元(ppu)202的框图。尽管图2描绘了一个ppu 202,但如上所述,并行处理子系统112可以包括任意数量的ppu 202。如图所示,ppu 202耦合到本地并行处理(pp)存储器204。ppu 202和pp存储器204可以是使用一个或更多个集成电路设备(诸如可编程处理器、专用集成电路(asic)或存储设备)实现,或以任何其他技术上可行的方式来实现。
39.在一些实施例中,ppu 202包括gpu,可被配置为实现图形渲染管线,以执行与基于由cpu 102和/或系统存储器104提供的图形数据生成像素数据相关的各种操作。当处理图形数据时,pp存储器204可用作图形存储器,其存储一个或更多个常规帧缓冲区以及(如果需要)还存储一个或更多个其他渲染目标。除其他事项外,pp存储器204可用于存储和更新像素数据,并将最终像素数据或显示帧传送到任选的显示设备110以供显示。在一些实施例中,ppu 202还可以被配置用于通用处理和计算操作。在一些实施例中,计算机系统100可以是云计算环境中的服务器机器。在这些实施例中,计算机系统100可以不具有显示设备110。相反,计算机系统100可以通过经由网络适配器118在网络上发送消息形式的命令来生成等效的输出信息。
40.在一些实施例中,cpu 102是计算机系统100的主处理器,控制和协调其他系统组件的操作。在一个实施例中,cpu 102发出控制ppu 202的操作的命令。在一些实施例中,cpu 102将用于ppu 202的命令流写入数据结构(图1或图2中未明确示出),该数据结构可位于系统存储器104、pp存储器204或cpu 102和ppu 202均可访问的另一存储位置。指向数据结构的指针被写入在本文也称为推送缓冲区(pushbuffer)的命令队列,以启动对数据结构中命令流的处理。在一个实施例中,ppu 202从命令队列读取命令流,然后相对于cpu 102的操作异步地执行命令。在生成多个推送缓冲区的实施例中,应用程序可以经由设备驱动器为每个推送缓冲区指定执行优先级,以控制不同推送缓冲区的调度。
41.在一个实施例中,ppu 202包括i/o(输入/输出)单元205,该单元经由通信路径113和存储器桥105与计算机系统100的其余部分通信。在一个实施例中,i/o单元205生成用于在通信路径113上传输的分组(或其他信号),并且还从通信路径113接收所有传入分组(或其他信号),将传入分组定向到ppu 202的适当组件。例如,与处理任务相关的命令可以被定向到主机接口206,而与存储器操作(例如,从pp存储器204读取或写入)相关的命令可以被定向到交叉开关单元210。在一个实施例中,主机接口206读取每个命令队列,并将存储在命令队列中的命令流发送到前端212。
42.如上文结合图1所述,ppu 202与计算机系统100的其余部分的连接可以改变。在一些实施例中,包括至少一个ppu 202的并行处理子系统112被实现为可以插入到计算机系统100的扩展槽中的插件卡。在其他实施例中,ppu 202可以集成在具有总线桥的单个芯片上,例如存储器桥105或i/o桥107。同样,在其他实施例中,ppu 202的部分或全部元件可以与cpu 102一起被包括在单个集成电路或芯片系统(soc)中。
43.在一个实施例中,前端212将从主机接口206接收的处理任务发送到任务/工作单元207内的工作分配单元(未示出)。在一个实施例中,工作分配单元接收指向处理任务的指针,这些任务被编码为任务元数据(tmd)并存储在存储器中。指向tmd的指针被包括在命令
流中,该命令流存储为命令队列并由前端单元212从主机接口206接收。可以被编码为tmd的处理任务包括与要处理的数据相关联的索引以及定义如何处理数据的状态参数和命令。例如,状态参数和命令可以定义要在数据上执行的程序。此外,例如,tmd可以指定cta集合的数量和配置。通常,每个tmd对应一个任务。任务/工作单元207从前端212接收任务,并确保gpc 208被配置为在启动由每个tmd指定的处理任务之前的有效状态。可以为用于调度处理任务的执行的每个tmd指定优先级。还可以从处理集群阵列230接收处理任务。可选地,tmd可以包括一个参数,该参数控制tmd是添加到处理任务列表的头部还是尾部(或指向处理任务的指针列表),从而提供对执行优先级的另一级控制。
44.在一个实施例中,ppu202实现基于处理集群阵列230的高度并行处理体系结构,该处理集群阵列230包括一组c个通用处理集群(gpc)208,其中c≥1。每个gpc 208能够同时执行大量(例如数百或数千)线程,其中每个线程都是程序的一个实例。在各种应用中,可以分配不同的gpc208来处理不同类型的程序或执行不同类型的计算。gpc 208的分配可以根据每种类型的程序或计算产生的工作负载而变化。
45.在一个实施例中,存储器接口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的可用带宽。
46.在一个实施例中,给定的gpc 208可以处理要写入到pp存储器204内的任何dram 220的数据。在一个实施例中,交叉开关单元210被配置为将每个gpc 208的输出路由到任何分区单元215的输入,或路由到任何其他gpc 208以进行进一步处理。gpc 208经由交叉开关单元210与存储器接口214通信,以从各种dram 220读取或写入数据。在一些实施例中,交叉开关单元210具有到i/o单元205的连接,还有经由存储器接口214到pp存储器204的连接,从而使得不同gpc 208内的处理核能够与系统存储器104或非ppu 202本地的其他存储器通信。在图2的实施例中,交叉开关单元210与i/o单元205直接连接。在各种实施例中,交叉开关单元210可以使用虚拟信道来分离gpc 208和分区单元215之间的业务流。
47.在一个实施例中,gpc 208可以被编程为执行与多种应用相关的处理任务,包括但不限于线性和非线性数据变换、视频和/或音频数据的过滤、建模操作(例如,应用物理定律来确定物体的位置、速度和其他属性)、图像渲染操作(例如,曲面细分着色器、顶点着色器、几何着色器和/或像素/片段着色器程序)、通用计算操作等。在操作中,ppu 202被配置为将数据从系统存储器104和/或pp存储器204传输到一个或更多个片上存储器单元,处理数据,并将结果数据写回系统存储器104和/或pp存储器204。结果数据随后可由其他系统组件访问,所述其他系统组件包括cpu 102、并行处理子系统112内的另一个ppu 202或计算机系统100内的另一个并行处理子系统112。
48.在一个实施例中,并行处理子系统112中可以包括任意数量的ppu 202。例如,可以在单个插件卡上提供多个ppu 202,或者多个插件卡可以连接到通信路径113,或者一个或更多个ppu 202可以集成到桥接芯片中。多ppu系统中的ppu 202可以彼此相同或不同。例
如,不同的ppu 202可以具有不同数量的处理核和/或不同数量的pp存储器204。在存在多个ppu 202的实施方式中,这些ppu可以并行操作,以比单个ppu 202可能更高的吞吐量来处理数据。包含一个或更多个ppu 202的系统可以以各种配置和形式因素来实现,包括但不限于台式机、笔记本电脑、手持个人计算机或其他手持设备、可穿戴设备、服务器、工作站、游戏控制台、嵌入式系统等。
49.图3是根据各种实施例的在图2的并行处理单元(ppu)202中包括的通用处理集群(gpc)208的框图。如图所示,gpc 208包括但不限于管线管理器305、一个或更多个纹理单元315、prerop单元325、工作分配交叉开关330和l1.5高速缓存335。
50.在一个实施例中,gpc 208可以被配置为并行执行大量线程,以执行图形、通用处理和/或计算操作。如本文所用,“线程”是指在特定的一组输入数据上执行的特定程序的实例。在一些实施例中,单指令多数据(simd)指令发布技术用于支持大量线程的并行执行而无需提供多个独立的指令单元。在其他实施例中,使用单指令多线程(simt)技术来支持并行执行大量一般同步的线程,这使用了公共指令单元,该公共指令单元配置成向gpc 208内的一组处理引擎发出指令。与所有处理引擎通常执行相同指令的simd执行机制不同,simt执行允许不同的线程更容易地遵循通过给定程序的不同的执行路径。本领域普通技术人员将理解,simd处理机制表示simt处理机制的功能子集。
51.在一个实施例中,gpc 208的操作经由管线管理器305进行控制,管线管理器305将从任务/工作单元207内的工作分配单元(未示出)接收的处理任务分配给一个或更多个流式多处理器(sm)310。管线管理器305还可以被配置为通过指定由sm 310输出的处理数据的目的地来控制工作分配交叉开关330。
52.在各种实施例中,gpc 208包括一组m个sm 310,其中m≥1。此外,每个sm 310包括一组功能执行单元(未示出),诸如执行单元和加载存储单元。特定于任何功能执行单元的处理操作可以是流水线化的,这使得能够在前一条指令完成执行之前发出新指令以供执行。可以提供给定sm 310内的功能执行单元的任何组合。在各种实施例中,功能执行单元可以被配置为支持各种不同的运算,包括整数和浮点运算(例如,加法和乘法)、比较运算、布尔运算(和、或、异或)、位移位和各种代数函数的计算(例如,平面插值和三角函数、指数函数和对数函数等)。有利的是,相同的功能执行单元可以被配置为执行不同的运算。
53.在一个实施例中,每个sm 310被配置为处理一个或更多个线程组。如本文所使用的,“线程组”或“线程束”是指在不同输入数据上同时执行同一程序的一组线程,组中的一个线程被分配给sm 310内的不同执行单元。线程组可以包括比sm 310内的执行单元的数量更少的线程,在这种情况下,一些执行可能在正在处理该线程组的周期期间空闲。线程组还可以包括比sm 310内的执行单元的数量更多的线程,在这种情况下,处理可以在连续的时钟周期内进行。由于每个sm 310可以同时支持多达g个线程组,因此可以在任何给定时间在gpc 208中执行多达g*m个线程组。
54.此外,在一个实施例中,多个相关线程组可以在sm 310内同时处于活动状态(在不同的执行阶段)。该线程组的集合在本文中被称为“协作线程阵列”(“cta”)或“线程阵列”。特定cta的大小等于m*k,其中k是线程组中同时执行的线程的数量,其通常是sm 310内的执行单元的数量的整数倍,m是sm 310内同时处于活动状态的线程组数。在一些实施例中,单个sm 310可以同时支持多个cta,其中此类cta处于工作被分配给sm 310的粒度。
55.在一个实施例中,每个sm 310都包含一级(l1)高速缓存或使用sm 310外部的对应l1高速缓存中的空间,以支持由执行单元执行的加载和存储操作等。每个sm 310还可以访问二级(l2)高速缓存(未显示),所述二级(l2)高速缓存在ppu 202中的所有gpc 208之间共享。l2高速缓存可以用于在线程之间传输数据。最后,sm 310还可以访问片外“全局”存储器,其可以包括pp存储器204和/或系统存储器104。应当理解,ppu 202外部的任何存储器均可用作全局存储器。此外,如图3所示,1.5级(l1.5)高速缓存335可以被包括在gpc 208内,并且被配置为接收和保存由sm310经由存储器接口214从存储器请求的数据。这样的数据可以包括,但不限于指令、统一数据和常量数据。在gpc 208内具有多个sm 310的实施例中,sm 310可以有益地共享缓存在l1.5高速缓存335中的公共指令和数据。
56.在一个实施例中,每个gpc 208可以具有相关联的存储器管理单元(mmu)320,其被配置为将虚拟地址映射到物理地址。在各种实施例中,mmu 320可驻留在gpc 208内或存储器接口214内。mmu 320包括一组页表条目(pte),该页表条目用于将虚拟地址映射到块或存储器页的物理地址,并且可选地高速缓存行索引。mmu 320可包括地址转换后备缓冲区(tlb)或高速缓存,其可驻留在sm 310内、一个或更多个l1高速缓存内或gpc 208内。
57.在一个实施例中,在图形和计算应用程序中,gpc 208可以被配置为使得每个sm 310耦合到纹理单元315,以用于执行纹理映射操作,诸如确定纹理样本位置、读取纹理数据和过滤纹理数据。
58.在一个实施例中,每个sm 310向工作分配交叉开关330发送已处理任务,以便将已处理的任务提供给另一gpc 208以供进一步处理,或将已处理的任务存储在l2高速缓存(未示出)、并行处理存储器204中或经由交叉开关单元210的系统存储器104中。此外,预光栅操作(prerop)单元325被配置为从sm 310接收数据、将数据定向到分区单元215内的一个或更多个光栅操作(rop)单元、执行颜色混合优化、组织像素颜色数据以及执行地址转换。
59.应当理解,本文描述的架构是说明性的,并且可以进行变更和修改。除其他事项外,任何数量的处理单元(诸如sm 310、纹理单元315或prerop单元325)可被包括在gpc 208内。此外,如上文结合图2所述,ppu 202可包括任意数量的gpc 208,这些gpc 208被配置为在功能上彼此相似,以便执行行为不依赖于哪个gpc 208接收特定处理任务。此外,每个gpc 208独立于ppu 202中的其他gpc 208操作,以执行一个或更多个应用程序的任务。
60.图4是根据各种实施例更详细地示出图3的纹理单元315的框图。如上所述,纹理单元315执行纹理映射操作,诸如确定纹理样本位置、读取纹理数据和过滤纹理数据。在一些实施例中,纹理单元315包括一个或更多个纹理地址单元,该纹理地址单元将纹素(texel)映射到像素并且支持各种纹理寻址模式。此外,在一些实施例中,纹理单元315可以包括执行纹理过滤的纹理过滤单元。
61.如图所示,纹理单元315包括纹理高速缓存404,其可以存储从pp存储器204读取的纹理数据。在一些实施例中,纹理单元315可以从pp存储器204读取固定大小的纹理数据,并将纹理数据存储在纹理高速缓存404中分配的高速缓存行中。例如,在一些实施例中,纹理单元315可以分配大小为128字节(b)的高速缓存行,并从pp存储器204读取大小均为32b的纹理数据的扇区。在这种情况下,纹理单元315可以仅读取包括正在执行的纹理采样所需的纹理数据的那些扇区。如本文所使用的,纹理采样可以包括从一个或更多个纹理检索纹理数据和/或执行纹理过滤操作,诸如双线性查找。
62.尽管本文主要针对纹理高速缓存404进行了描述,但是在一些实施例中,可以通过通用的共享高速缓存层次结构来访问纹理。例如,代替纹理高速缓存404,一些实施例可以利用与纹理单元315不同的单个高速缓存和竞争高速缓存中的空间的两个单独的地址空间(全局存储器与“纹理空间”)。
63.尽管本文主要针对从存储器(诸如pp存储器204)中读取进行描述,但实施例还可以实现除纹理高速缓存404之外的高速缓存。说明性地,ppu 202包括2级(l2)高速缓存406,其可以存储纹理数据和/或从pp存储器204读取的其他数据。高速缓存在l2高速缓存406中的纹理数据可以直接从l2高速缓存406读取,这通常比从pp存储器204读取更快。
64.在光线追踪期间,渲染应用程序130可以通过虚拟场景追踪非相干光线,该渲染应用程序130通过设备驱动器103与ppu 202通信。如上所述,常规光线追踪技术要求纹理单元315(1)在纹理高速缓存404内为与光线在虚拟场景中相交的虚拟对象相关联的每个纹理分配单独的高速缓存行,以及(2)从存储器读取与这些高速缓存行相关联的纹理数据。然而,为每个纹理分配单独的高速缓存行并读取相关联的纹理信息在计算上可能是昂贵的,并且使用相对大量的纹理带宽。
65.在一些实施例中,被交错的纹理用于一起读取多个纹理,如下面结合图6-11详细描述的。对于相对于多个不同纹理的交错的纹理,可以在纹理高速缓存404内分配更少的高速缓存行,并且可以从存储器读取更少的纹理数据,这可以提高计算性能并减少纹理带宽使用。在一些实施例中,当应被交错的多个纹理正被加载到存储器(例如,pp存储器204)中时,由设备驱动器103生成交错的纹理。在其他实施例中,可以以任何技术上可行的方式生成交错的纹理。
66.图5是示出了根据各种实施例的示例性云计算系统的框图。如图所示,计算系统500包括经由网络506与客户端设备504通信的(一个或更多个)服务器502。每个服务器502可以包括与如上文结合图1-4所述的示例计算机系统100类似的组件、特征和/或功能。每个服务器502可以是任何技术上可行的计算机系统类型,其包括但不限于服务器机器或服务器平台。每个客户端设备502还可以包括与计算机系统100类似的组件、特征和/或功能,除了每个客户端设备504执行客户端应用程序522而不是渲染应用程序130。每个客户端设备504可以是任何技术上可行的计算机系统类型,包括但不限于台式机、膝上型计算机、手持/移动设备和/或可穿戴设备。在一些实施例中,服务器502和/或客户端设备504中的一个或更多个可以被一个或更多个虚拟化处理环境替换,诸如由一个或更多个vm提供的一个或更多个虚拟化处理环境和/或在一个或更多个底层硬件系统上执行的容器。一个或更多个网络506可以包括任何类型的一个或更多个网络,诸如一个或更多个局域网(lan)和/或广域网(wan)(例如,因特网)。
67.在一些实施例中,一个或更多个服务器500可以被包括在云计算系统中,诸如公共云、私有云或混合云和/或分布式系统中。例如,一个或更多个服务器500可以实现提供游戏流服务的基于云的游戏平台,有时也称为“云游戏”、“按需游戏”或“游戏即服务”。在这种情况下,在一个或更多个服务器500上存储和执行的游戏作为视频经由在客户端设备504上运行的客户端应用程序522而流式传输到客户端设备504。在游戏会话期间,客户端应用程序522处理用户输入,并将这些输入发送到服务器500,以用于游戏内执行。尽管本文将基于云的游戏平台描述为参考示例,但是本领域技术人员将理解,作为一般事项,一个或更多个服
务器500可以执行任何技术上可行的一个或更多个应用类型,诸如设计应用。
68.如图所示,一个或更多个客户端设备504中的每一个包括一个或更多个输入设备526、客户端应用程序522、通信接口520和显示器524。一个或更多个输入设备526可以包括用于接收用户输入的任何类型的一个或更多个设备,诸如键盘、鼠标、操纵杆和/或游戏控制器。客户端应用程序522响应于用户在一个或更多个输入设备526处的输入而接收输入数据,经由通信接口520(例如,网络接口控制器)和通过一个或更多个网络506(例如,互联网)将输入数据发送到一个或更多个服务器502之一,从服务器502接收编码的显示数据,以及解码并使显示数据显示在显示器524上(例如,阴极射线管、液晶显示器、发光二极管显示器等)。因此,可以将计算强度更高的计算和处理卸载到一个或更多个服务器502。例如,游戏会话可以从一个或更多个服务器502流式传输到一个或更多个客户端设备504,从而降低一个或更多个客户端设备504对图形处理和渲染的要求。
69.如图所示,一个或更多个服务器502中的每一个包括通信接口518、一个或更多个cpu 508、并行处理子系统510、渲染组件512、渲染捕获组件514和编码器516。由客户端设备504发送到一个或更多个服务器502之一的输入数据经由通信接口518(例如,网络接口控制器)被接收,并且经由该服务器502中包括的一个或更多个cpu 508和/或并行处理子系统510进行处理,该服务器502分别对应于上面结合图1-4描述的计算机系统100的cpu 102和并行处理子系统112。在一些实施例中,一个或更多个cpu 508可以接收输入数据,处理输入数据,并将数据发送到并行处理子系统510。反过来,并行处理子系统510基于传输的数据渲染一个或更多个独立图像和/或图像帧,诸如视频游戏的帧。
70.举例来说,渲染组件512采用并行处理子系统112来渲染处理输入数据的结果,并且渲染捕获组件514捕获渲染作为显示数据(例如,作为捕获独立图像和/或图像帧的图像数据)。由渲染组件512执行的渲染可以包括使用服务器502的一个或更多个并行处理单元(诸如gpu,其可以进一步使用一个或更多个专用硬件加速器或处理核来执行光线或路径追踪技术)计算的光线或路径追踪照明和/或阴影效果。在一些实施例中,渲染组件512使用本文公开的交错的纹理来执行渲染。此后,编码器516对捕获渲染的显示数据进行编码,以生成经编码的显示数据,该显示数据通过一个或更多个网络506经由通信接口518发送到一个或更多个客户端设备504以显示给一个或更多个用户。在一些实施例中,渲染组件512、渲染捕获组件514和编码器516可以被包括在渲染应用程序130中,如上文结合图1所述。
71.回到云游戏的示例,在游戏会话期间,由一个或更多个服务器502之一接收到的输入数据可以表示用户角色在游戏中的移动、发射武器、重新加载、传球、转动车辆等。在这种情况下,渲染组件512可以生成表示输入数据的结果的游戏会话的渲染,并且渲染捕获组件514可以捕获游戏会话的渲染作为显示数据(例如,作为捕获游戏会话的渲染帧的图像数据)。并行处理(例如,gpu)资源可以专用于每个游戏会话,或者可以采用资源调度技术来跨多个游戏会话共享并行处理资源。此外,可以使用本文公开的交错技术来渲染游戏会话。然后,可以由编码器516对渲染的游戏会话进行编码,以生成经编码的显示数据,该显示数据通过一个或更多个网络506传输到一个或更多个客户端设备504中的一个以解码,并且经由该客户端设备504的显示器524进行输出。
72.应当理解,本文描述的架构是说明性的,并且可以进行变更和修改。除其他事项外,任何数量的处理单元,诸如如上文结合图3所述的sm 310、纹理单元315或prerop单元
325,可被包括在gpc 208内。
73.交错纹理
74.图6a-6b示出了根据各种实施例的纹理和相关纹理头的示例性交错。图6a示出了未交错的两个示例性纹理600和620。纹理600和620是与同一虚拟对象相关联的不同纹理。例如,纹理600和620中的每一个都可以是指示对象颜色的基础纹理、指示对象的光泽度的镜面纹理、或指示对象表面处的法线的法线贴图。在一些实施例中,纹理(例如,纹理600和620)可以是非压缩的或经由任何技术上可行的压缩格式压缩的。以下公开假设纹理以4x4像素的块压缩,并且每个块使用8b或16b存储。例如,支持块压缩(bcn)纹理压缩格式bc1-7。bc1和bc4在8b块中存储(压缩的)纹理数据,而bc2、bc3、bc5、bc6h和bc7在16b块中存储(压缩的)纹理数据。
75.如图所示,纹理600和620可以分别作为块602i(在本文中单独称为块602并且统称为块602)和622i(在本文中单独称为块622,并统称为块622)被访问(例如,从pp存储器204或l2高速缓存406)。还示出了可以分别用于访问纹理600和620的纹理头610和630。纹理头610包括指向纹理600中的块的起始地址612。类似地,纹理头630包括指向纹理620中的块的起始地址632。在一些实施例中,每个纹理头还可以包括其他信息,诸如对应纹理的尺寸、纹理格式、分辨率等。此外,纹理600和620中的块的大小可以明确。对于被压缩的纹理,可以使用被压缩纹理的被压缩块大小作为块大小。对于非压缩纹理,块大小可以例如在对应的纹理头中指定或经由规则集提供,诸如要求非压缩纹理的块具有特定大小的规则集。
76.应用程序(诸如渲染应用程序130)可以使用纹理头来访问特定纹理,这可以包括在渲染期间使用纹理坐标对纹理进行采样。然而,在一些实施例中,纹理头中包括的信息,诸如地址612和632,可能对应用程序是不透明的。
77.如上所述,当追踪非相干光线时,传统光线追踪技术需要(1)在纹理高速缓存404内为与光线在虚拟场景中相交的虚拟对象相关联的每个纹理分配高速缓存行,以及(2)从存储器读取与高速缓存行相关联的纹理数据。通常,为特定光线分配的高速缓存行和读取的纹理数据不能重新用于其他光线。举例来说,纹理单元315可以为纹理600分配高速缓存行604,并且读取被包括在高速缓存行604中的四个块602中的纹理数据。此外,纹理单元315可以为纹理620分配另一个高速缓存行624,并且读取被包括在高速缓存行624中的四个块622中的纹理数据。虽然关于读取被包括在高速缓存行602和624中的所有块602和622作为参考示例进行了描述,但是在一些情况下,纹理单元315可以仅读取包括纹理采样所需的纹理数据的高速缓存行中的扇区,如下面结合图9所述。为纹理600和620中的每一个分配高速缓存行以及相关联纹理数据的读取在计算上可能是昂贵的,并且使用大量的纹理带宽。此外,压缩纹理600和620只能提供有限的性能改进。这种方法的一个缺点是必须将一个完整的高速缓存行(或至少一个完整的扇区)读入高速缓存行,即使只有一个或几个像素正在被访问,诸如在追踪相对不相干的光线时。
78.图6b示出了可以从纹理600和620生成的示例性交错的纹理640。如图所示,交错的纹理640包括块642i(这里单独称为块642并统称为块642),该块642i在来自纹理600的块和来自纹理620的块之间交替。下面结合图8更详细地描述可以在一些实施例中使用的另外的交错格式。被交错的纹理可以是非压缩的,或使用相同或不同的压缩格式进行压缩。返回directx的示例,bc1-bc3和bc7可以包括无符号普通整数(unorm)或unorm以及标准红、绿、
蓝(srgb)值,并且bc6h可以包括uf_16(无符号fp 16浮点)或sf-f16(有符号fp 16浮点)值。可以被交错的压缩格式的示例包括bc1_unorm(8b)与bc1_unorm_srgb(8b)、bc2_unorm(16b)与一个bc1_unorm(8b)和bc4_snorm(8b)等。
79.交错的纹理(诸如交错的纹理640)可以由任何技术上可行的软件和/或硬件离线或在运行时生成。在一些实施例中,与并行处理单元相关联的设备驱动器(例如,设备驱动器103)在运行时通过分析应用程序的代码来分析应用程序,以确定交错纹理是否可以提高应用程序的性能,如下面结合图10详细描述的。在这种情况下,当设备驱动器确定(1)交错纹理可以提高性能并且(2)纹理具有用于交错的兼容格式和大小时,设备驱动器可以交错与虚拟场景中的一个或更多个虚拟对象相关联的纹理。在一些实施例中,当多个纹理与同一虚拟对象相关联时,设备驱动器将候选纹理识别为具有用于交错的兼容格式和尺寸。尽管本文主要针对交错与同一虚拟对象相关联的多个纹理进行描述,但在一些实施例中也可以交错不与同一虚拟对象相关联的纹理。例如,具有相同大小(例如,行数、列数、mip级别等)和兼容格式但与不同虚拟对象相关联的纹理可以被交错。
80.在其他实施例中,可以离线分析应用程序,并且可以在运行之前基于分析而生成交错的纹理。在进一步的实施例中,渲染应用程序130或用户可以指定特定的纹理将经由例如应用程序编程接口(api)被交错。
81.如图所示,纹理头650和660可分别用于访问交错的纹理640中的不同纹理600和620。每个纹理头650和660分别包括起始地址652和662,其指向交错的纹理640中的对应纹理的第一块。每个纹理头650和660还分别包括跨步654和664,其指示来自同一纹理的两个块之间的以字节为单位的距离。该跨步可以设置为任何技术上可行的值,诸如8、16、32或64。在一些实施例中,纹理头中可以仅包括跨步,并且可以将上述起始地址组合成基地址。为了能够对8、16、32和64的跨步进行编码,只需要两个额外的位,因为只有四个不同跨步。例如,00可以指示8的跨步,01可以指示16的跨步,等等。回到8b块的示例,纹理头650和660可以包括使用两位编码的8的跨步。在一些实施例中,跨步654和664对于不知道交错的纹理640的应用程序和用户来说是不透明的。在这种情况下,应用程序可以使用纹理头610和630以与应用程序访问单独纹理600和620相同的方式来访问交错的纹理640。
82.在一些实施例中,纹理头650和660还可以包括其他信息,诸如指定分辨率、交错的纹理650的尺寸、压缩格式等的信息。此外,交错的纹理640中的块的大小应该是明确的。对于被压缩纹理的交错,可以使用被压缩纹理的被压缩块大小作为交错的纹理的块大小。对于非压缩纹理的交错,交错的纹理的块大小可以例如在对应的纹理头中指定或经由规则集提供,例如要求非压缩交错的纹理的块具有特定尺寸的规则集。
83.使用由渲染应用程序130提供的起始地址652和662、跨步654和664以及纹理坐标,并行处理单元中的纹理单元(例如,纹理单元315)可以为交错的纹理640中的不同纹理600和620确定要访问的存储器地址。在其他实施例中,单个纹理头(诸如对多种压缩格式编码的纹理头)可用于访问交错的纹理。在这种情况下,应用程序和/或用户可能需要追踪纹理是否被交错,以及要访问交错的纹理中的哪些纹理。
84.与上文结合图6a所述的为纹理600和620中的每一个在纹理高速缓存404内分配不同的高速缓存行,以及从存储器读取相关联的纹理数据相比,纹理单元315可以为交错的纹理640在纹理高速缓存404内分配单个高速缓存行646,并从存储器读取与高速缓存行646相
关联的纹理数据。如图所示,被读取的高速缓存行646包括来自纹理600和620两者的块。因此,为高速缓存行646读取的纹理数据可用于对纹理600和620两者进行采样。尽管关于读取整个高速缓存行646作为参考示例进行了描述,但在某些情况下,纹理单元315可以仅读取高速缓存行646中的包括纹理采样所需的纹理数据的扇区,如下面结合图9所述。因为只分配单个高速缓存行并且从存储器中只读取与该高速缓存行相关联的纹理数据,所以相对于分配两个高速缓存行并读取与这些高速缓存行相关联的纹理数据,纹理带宽使用可以减少50%。当交错的纹理包括来自多于两个的纹理的纹理数据时,纹理带宽使用可以进一步减少。例如,当交错的纹理包括来自四个纹理的纹理数据时,纹理带宽使用可以减少75%。在某些情况下,诸如当执行需要来自位于不同高速缓存行的多个块的纹理数据的2x2像素的双线性查找时,可以分配多于一个的高速缓存行,并且读取与分配的高速缓存行相关联的纹理数据,即使在使用交错的纹理时也是如此。
85.图7a-7b示出了根据各种实施例的纹理和相关联的纹理细化(mipmap)级别的示例性交错。图7a示出了两个示例性16x16像素纹理700和702。如图所示,纹理700和702可以存储为4x4压缩块,每个压缩块包括4x4像素。
86.纹理700和702中的每一个都可以用作纹理细化级别0,即纹理细化的基础级别。如图所示,在一些实施例中,对纹理细化级别0纹理700进行低通过滤和下采样以生成纹理细化级别1 710,该纹理细化级别1 710又进行低通过滤和下采样以生成纹理细化级别2 720。类似地,对于纹理702,纹理细化级别0纹理702经过低通过滤和下采样以生成纹理细化级别1 712,该纹理细化级别1 712又经过低通过滤和下采样以生成纹理细化级别2 722。在其他实施例中,可以通过除低通过滤和下采样之外的其他手段来创建纹理细化层次结构。例如,纹理细化层次结构中的每个图像都可以手动绘制。不同级别的纹理细化可用于抗锯齿纹理过滤。
87.图7b示出了示例性交错的纹理730,其宽度是纹理700和702中的每一个的两倍。如图所示,交错的纹理730中的交替块来自纹理700和纹理702。交错的纹理730不能进行低通过滤和下采样以用作纹理细化级别1 710,因为这样做将混合来自纹理700和702的纹理数据,这可能会降低压缩质量。在一些实施例中,单独压缩纹理700和702中的每一个及其纹理细化级别710、720、712和722。然后,将压缩的纹理交错在一起以生成纹理细化级别1 740和纹理细化级别2 750。
88.图8示出了根据各种实施例的用于交错纹理的示例格式。假设每个高速缓存行的大小为32b。如图所示,用于通过交错两个纹理生成的纹理的32b高速缓存行800可以包括来自两个纹理中的每一个的交替的8b块。或者,用于通过交错两个纹理生成的纹理的32b高速缓存行802可以包括来自这两个纹理中的每一个的两个16b块。
89.通过交错四个纹理生成的32b高速缓存行804可以包括来自四个纹理中的每个纹理的8b块。此外,通过交错三个纹理生成的32b高速缓存行806可以包括来自三个纹理中的两个纹理的8b块和来自三个纹理中的剩余一个纹理的16b块。在这种情况下,对于相同数量的像素,使用16b块的第三个纹理可以存储前两个纹理中存储的数据量的两倍。
90.四个16b块不能交错以适合32b高速缓存行。然而,用于通过交错四个纹理生成的纹理的两个32b高速缓存行808和810可以各自包括来自四个纹理中的两个纹理的两个16b块。或者,可以使用64b高速缓存行来存储来自通过交错四个纹理生成的纹理的四个16b块。
91.图9a-9c示出了根据各种实施例的与交错的纹理相关联的示例性扇区和高速缓存行。图9a示出了两个纹理900和910,其分别包括块902(在本文中单独称为块902,并统称为块902)和912(在本文中单独称为块912,并统称为块912)。例如,块902和912可以是大小为8b并包括压缩纹理数据的4x4块。
92.图9b示出了纹理900和910的示例性交错。图9b-9c假设每个高速缓存行的大小为128b。此外,图9b假设纹理900和910包括8b块。如图所示,交错对纹理可以被划分为32b扇区930i(在本文中单独称为扇区930,并且统称为扇区930),每个扇区包括四个块。此外,四个扇区930可以被包括在四个128b高速缓存行920、922、924和926中的每一个中。例如,假设4x4像素存储在8b的每个块902和912中。在这种情况下,32b扇区930可以包括来自纹理900和910中的每一个的4x8像素,并且高速缓存行920、922、924和926中的每一个可以包括来自纹理900和910中的每一个的16x8像素。由于块0位于块8之上,以此类推,分辨率为4x8像素。此外,在每个高速缓存行中存储四个这样的对,从而从纹理900和910中的每一个产生总共16x8像素。
93.在渲染期间,可以在纹理高速缓存404内分配高速缓存行,并且可以从存储器中读取高速缓存行中的一个或更多个扇区。值得注意的是,每个扇区930包括来自纹理900和910两者的块。因此,可以分配单个高速缓存行,并且该高速缓存行中的对纹理900和910两者进行纹理采样所需的扇区可以从交错的纹理中读取,而不是为纹理900和910中的每一个分配单独的高速缓存行并从纹理900和910两者中读取扇区。
94.如上所述,在某些情况下,诸如当正在执行需要来自位于不同高速缓存行中的多个块的纹理数据的双线性查找时,即使在使用交错的纹理时,也可以在纹理高速缓存404内分配多于一个的单个高速缓存行并且读取那些高速缓存行中的扇区。在一些实施例中,为了在执行一些纹理过滤操作(例如,双线性查找)时提高高速缓存命中率,位于每个扇区中的像素区域可以具有正方形,诸如图9b和9c中所示的正方形扇区930或尽可能接近正方形。正方形或类似正方形的形状的使用在纹理高速缓存404中提供了相对相等的局部性概率,而与遍历的方向无关。更一般地,在实施例中可以使用块、扇区和/或高速缓存行的任何技术上可行的布局。请注意,在扇区930中,每个纹理每个扇区930存储4x8像素。
95.图9c示出了纹理的另一个示例性交错。图9c假设正被交错的纹理包括16b块。如图所示,分别包括两个块的四个32b扇区962i(在本文单独称为扇区962并统称为扇区962)可以被包括在八个高速缓存行940、942、944、946、948、950、952和954的每一个中。例如,每个32b扇区962可以包括来自每个16b纹理的4x4像素,并且每个高速缓存行可以包括来自每个16b纹理的8x8像素。类似于以上结合图9b的描述,可以为交错的纹理分配高速缓存行,并且可以从存储器中读取高速缓存行中的一个或更多个扇区,而不是为16b纹理中的每一个分配单独的高速缓存行并从这两种纹理中读取扇区。
96.应当注意,高速缓存行940、942、944、946、948、950、952和954中的被交错块被绘制为垂直邻居而不是水平邻居。纹理通常根据坐标进行处理。在一些实施例中,根据艺术选择,交错的坐标可以用水平邻居或垂直邻居(或者甚至两者,在4向交错的纹理的情况下)绘制。可以使用垂直坐标而不是水平坐标的偏移和缩放来解决被绘制为垂直邻居的交错块。
97.图10是根据各种实施例的用于生成交错的纹理的方法步骤的流程图。尽管结合图1-5的系统描述了方法步骤,但是本领域技术人员将理解,被配置为以任何顺序执行这些方
法步骤的任何系统都落在本实施例的范围内。
98.如图所示,方法1000开始于步骤1002,其中设备驱动器103从渲染应用程序130接收请求以将纹理加载到存储器中,诸如上文结合图3-4描述的pp存储器204。例如,当渲染应用程序130开始时,当正在加载包括与纹理相关联的对象的游戏中的新关卡等时,渲染应用程序可以请求将纹理加载到存储器中。尽管图10是针对将纹理加载到存储器中的请求进行的描述,但在其他实施例中,可以在运行之前基于例如渲染应用程序130的离线分析而生成交错的纹理。在其他实施例中,渲染应用程序130或用户可以请求通过例如api来交错特定的纹理。
99.在步骤1004,设备驱动器103确定是否可以交错加载到存储器中的任何纹理。在一些实施例中,设备驱动器103配置渲染应用程序130以确定交错是否可以提高访问纹理时的性能。例如,设备驱动器103可以分析渲染应用程序130的代码,以确定渲染应用程序130是否访问相同纹理坐标处的多个纹理,这在一些光线追踪技术中发生。更一般地,当在相同的纹理坐标处同时访问纹理时并且当这些访问是稀疏的时,交错纹理可以提供更大的性能改进。在一些实施例中,设备驱动器103可以基于纹理是否在相同纹理坐标处被同时访问以及访问是否稀疏来确定纹理是否可以被交错。在一些实施例中,设备驱动器103还基于纹理是否具有用于交错的兼容格式和尺寸来确定纹理是否可以被交错,例如上面结合图6b和图9描述的那些。在这种情况下,在一些实施例中,设备驱动器103可以基于与同一虚拟对象相关联的那些纹理,将候选纹理识别为具有用于交错的兼容格式和尺寸。
100.如果设备驱动器103确定没有纹理能够被交错,则方法1000继续到步骤1006,其中设备驱动器103将非交错的纹理加载到存储器中。另一方面,如果设备驱动器103确定一个或更多个纹理可以被交错,则方法1000继续到步骤1004,其中设备驱动器103将与同一虚拟对象相关联并且可以被交错的纹理进行交错。例如,设备驱动器103可以交错基础纹理、镜面反射贴图、法线贴图和/或与同一虚拟对象相关联并且具有用于交错的兼容格式和尺寸的其他纹理。更一般地,对象可以与n个纹理相关联,并且设备驱动器103可以确定这些纹理的全部或子集可以被交错。在某些情况下,在与对象相关联的n个纹理中,一些纹理(例如,两个纹理)可以交错成一个交错的纹理,而其他纹理(例如,另外两个纹理)可以交错成一个或更多个其他交错的纹理。在一些实施例中,在一些情况下也可以交错与同一虚拟对象不相关联的纹理。例如,具有相同大小(例如,行数、列数、mip级别等)和兼容格式但与不同虚拟对象相关联的纹理可以被交错。在一些实施例中,生成的每个交错的纹理包括来自被交错的多个纹理的交替块。上面结合图8描述了各种交错格式的示例。
101.在步骤1006,设备驱动器103将交错的纹理和不能交错的纹理(如果有的话)加载到存储器(例如,上面结合图3-4描述的pp存储器204)中。
102.图11是根据各种实施例的用于使用一个或更多个交错的纹理执行光线追踪的方法步骤的流程图。尽管结合图1-5的系统描述了方法步骤,但本领域技术人员将理解,被配置为以任何顺序执行方法步骤的任何系统都属于本实施例的范围内。尽管针对追踪单条光线进行了描述,但是在渲染图像时可以重复该方法步骤以追踪多条光线。
103.如图所示,方法1100开始于步骤1102,其中渲染应用程序130追踪穿过场景的光线,直到所述光线在命中点处与所述场景内的几何体相交。特别是,光线可以通过屏幕空间中的像素追踪到场景中,直到光线在命中点与几何体中的三角形相交。
104.在步骤1104,如果在命中点处的几何体表面被纹理化,则在步骤1106,渲染应用程序130请求纹理单元315在命中点对多个纹理采样。在一些实施例中,对纹理进行采样可以包括从那些纹理中检索纹理数据。在一些实施例中,对纹理进行采样还包括执行纹理过滤操作,诸如双线性查找。当交错的纹理对渲染应用程序130不透明时,渲染应用程序130可以请求纹理单元315对多个纹理进行采样。例如,渲染应用程序130可以请求在特定的纹理坐标处对与对应的纹理头(例如,纹理头650和660)相关联的多个纹理进行采样。在其他实施例中,交错的纹理可暴露给渲染应用程序130,而不是对渲染应用程序130不透明。在这种情况下,渲染应用程序130可以请求纹理单元在命中点处对交错的纹理进行采样。
105.在步骤1108,纹理单元315分配一个或更多个高速缓存行,并从存储器中提取与该一个或更多个高速缓存行相关联的交错的纹理中的纹理数据。例如,纹理单元316可以在纹理高速缓存(例如,纹理高速缓存404)中分配单个高速缓存行,并从存储器中提取高速缓存行中的包括纹理采样所需的纹理数据的一个或更多个扇区。存储器可以是pp存储器(例如,pp存储器204)或另一高速缓存(例如,l2高速缓存406)。尽管针对单个交错的纹理进行了描述,但如上文结合图10所述,如果光线击中的对象与多个交错的纹理相关联(和/或可针对一个或更多个非交错纹理执行类似步骤),则可以重复步骤1108-1110。
106.在步骤1110,纹理单元315使用从存储器获取的纹理数据在命中点处对交错的纹理进行采样。在一些实施例中,对交错的纹理进行采样包括基于对应的纹理头对交错的纹理中的不同纹理进行采样,如上文结合图6所述。在其他实施例中,对交错的纹理进行采样包括基于单个纹理头对交错的纹理中的不同纹理进行采样。
107.在步骤1112,纹理单元315向渲染应用程序130返回纹理值。纹理值表示与屏幕空间中的像素相关联的纹理颜色,光线在步骤1102通过该像素被追踪。
108.在步骤1114,渲染应用程序130应用或累积纹理值到在步骤1102追踪光线所通过的像素。被应用或累积的纹理值对渲染图像中的像素的颜色有贡献。如上所述,渲染图像可以是例如视频游戏或电影中的图像或帧等。尽管本文中关于将纹理值应用或累积到像素进行了描述,但在其他实施例中,可以以任何技术上可行的方式使用纹理值。
109.在步骤1116,如果渲染应用程序130确定不继续追踪光线,则方法1100结束,并且渲染应用程序130可以执行其他操作。另一方面,如果渲染应用程序130确定继续追踪光线,则方法1100返回到步骤1102,其中渲染应用程序130追踪另一条光线穿过场景,直到另一条光线再次与场景内的几何体相交在另一个命中点。例如,如果在步骤1102处光路相交的几何体的表面是反射的,或者如果几何体与漫反射材质相关联,则渲染应用程序130可以确定继续追踪光线。
110.尽管本文主要针对二维(2d)纹理进行描述,但本文公开的技术也可以被应用于交错2d纹理或3d纹理的阵列的层。在这种情况下,像素可以按立方体或类似立方体的形状分组,而不是上面结合图9描述的正方形和类似正方形的形状。
111.尽管本文主要针对压缩纹理进行了描述,但本文公开的技术也可以被应用于非压缩纹理。例如,如果非压缩纹理使用4b(每个组件一个字节)存储每个像素,则来自两个非压缩纹理的2x2像素可以在32b扇区中被交错。
112.尽管本文主要针对光线追踪进行了描述,但本文公开的技术也可被应用于生成由不执行光线追踪的应用程序使用的交错的纹理。在这种情况下,交错的纹理中的多个纹理
有时可以单独被访问,而不是被同时访问。
113.尽管本文主要针对从交错的纹理读取进行描述,但本文公开的技术也可用于生成可以写入的交错的纹理。
114.总之,在所公开的技术中,将在光线追踪期间单独访问的多个纹理被交错成单个、交错的纹理,该纹理可用于一起访问多个纹理。对于从多个纹理(尤其是在非相干模式中)获取相同坐标的工作负载,对于相对于多个纹理的交错纹理,可以在高速缓存中分配更少的高速缓存行,并且可以从存储器中读取更少的纹理数据。在一些实施例中,交错的纹理包括来自多个纹理的交替块。在一些实施例中,当多个纹理被加载到存储器中时,设备驱动器生成交错的纹理。在一些实施例中,可以使用与交错纹理中的不同纹理相关联的多个纹理头来访问交错的纹理。在这种情况下,多个纹理头中的每一个都包括一个跨步,该跨步指示来自交错纹理中的同一纹理的两个块之间的距离。在其他实施例中,可以使用单个纹理头来访问交错的纹理。
115.本文所公开的技术相对于现有技术的至少一个技术优势在于,所公开的技术通常可以为交错的纹理分配单个高速缓存行并读取关联的纹理数据,而不是为多个纹理中的每个分配单独的高速缓存行(诸如与通过虚拟场景追踪的光线相交的虚拟对象相关联的多个纹理)并且读取与这些高速缓存行相关联的纹理数据。因此,可以减少纹理带宽的使用,并且可以提高计算性能。此外,所公开的技术可以使用多个纹理头来实现,这些纹理头使得交错的纹理对软件应用程序和用户不透明。这些技术优势代表了相对于现有技术方法的一项或更多项技术改进。
116.任何权利要求中记载的任何权利要求要素和/或本技术中描述的任何要素的任何和所有组合,以任何方式都落于本公开和保护的预期范围内。
117.为了说明的目的,已经给出了各种实施例的描述,但并不旨在穷举或限于所公开的实施例。在不脱离所描述实施例的范围和精神的情况下,许多修改和变化对于本领域普通技术人员来说将是显而易见的。
118.本实施例的各个方面可以实现为系统、方法或计算机程序产品。因此,本公开的方面可以采用完全硬件实施例、完全软件实施例(包括固件、驻留软件、微代码等)或结合软件和硬件方面的实施例的形式,这些方面在本文中通常被称为“模块”或“系统”。此外,本公开的方面可以采用包含在一个或更多个计算机可读介质中的计算机程序产品的形式,该计算机可读介质具有包含在其上的计算机可读程序代码。
119.可以利用一种或更多种计算机可读介质的任何组合。计算机可读介质可以是计算机可读信号介质或计算机可读存储介质。计算机可读存储介质可以是,例如,但不限于,电子、磁性、光学、电磁、红外或半导体系统、装置或设备,或上述的任何适当组合。计算机可读存储介质的更具体示例(非详尽列表)将包括以下内容:具有一根或更多根电线的电气连接、便携式计算机软盘、硬盘、随机存取存储器(ram)、只读存储器(rom)、可擦除可编程只读存储器(eprom或闪存)、光纤、便携式光盘只读存储器(cd-rom)、光存储设备、磁存储设备或上述任何适当组合。在本文档的上下文中,计算机可读存储介质可以是任何有形介质,其可以包含或存储供指令执行系统、装置或设备使用或与之相关联的程序。
120.上文参考根据本公开的实施例的方法、装置(系统)和计算机程序产品的流程图和/或框图描述了本公开的各个方面。应当理解,流程图和/或框图的每个块,以及流程图
和/或框图中的块的组合,可以通过计算机程序指令来实现。这些计算机程序指令可以提供给通用计算机、专用计算机或其他可编程数据处理设备的处理器以生产机器。指令当通过计算机或其他可编程数据处理设备的处理器执行时,启用流程图和/或框图块或块中指定的功能/动作的实现。此类处理器可以是但不限于通用处理器、专用处理器、专用处理器或现场可编程门阵列。
121.图中的流程图和框图示出了根据本公开的各种实施例的系统、方法和计算机程序产品的可能实现的架构、功能和操作。就这一点而言,流程图或框图中的每个块可表示模块、段或代码的一部分,其包括用于实现指定逻辑功能的一个或更多个可执行指令。还应当注意的是,在一些替代实施方式中,在块中标注的功能可以不按照图中标注的顺序出现。例如,根据所涉及的功能,连续示出的两个块实际上可以基本上同时执行,或者有时可以以相反的顺序执行这些块。还将注意到,框图和/或流程图示出的每个块,以及框图和/或流程图示出的块组合,可以由执行指定功能或动作的基于专用硬件的系统或者专用硬件和计算机指令的组合来实现。
122.虽然前述内容针对本公开的实施例,但是在不脱离其基本范围的情况下,可以设计本公开的其他和进一步的实施例,并且其范围由随后的权利要求确定。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1