在扩展的图形处理管线中表示和处理几何形状的技术的制作方法

文档序号:18323533发布日期:2019-08-03 10:44阅读:154来源:国知局
在扩展的图形处理管线中表示和处理几何形状的技术的制作方法

本发明的实施例总地涉及图形处理,并且更具体地,涉及用于在扩展图形处理管线中表示和处理几何形状的技术。



背景技术:

传统的图形处理管线通常包括称为图元分配器的单个固定功能硬件单元。图元分配器从前端单元收集与高阶表面、图形基元等相关联的顶点数据,并构造相应的批量工作,其中每批工作包括定义多个图元的顶点数据。然后,批量工作由也包括在图形处理管线中的可编程执行单元处理。在执行期间,批量工作分布在一组流式多处理器上,这些流式多处理器被配置为并行执行大量线程以基于编程模型对顶点数据执行图形操作。通常,根据编程,给定批量工作中包括的每个顶点由不同的线程独立地处理。

传统图形处理管线的一个限制是图形处理管线的吞吐量受到图元分配器的吞吐量的限制。更具体地,图元分配器通常是具有固定吞吐量和有限可扩展性的固定功能硬件单元。因此,随着存储器带宽和流式多处理器的数量增加,图元分配器限制了图形处理管线的整体性能。例如,如果图元分配器在每个时钟周期具有16个图元的吞吐量,则图形处理管线的总吞吐量限制为每个时钟周期16个图元,而与存储器带宽和/或支持图形管线的流式多处理器的数量无关。

传统图形处理管线的另一个限制是适用的编程模型是不灵活的。除此之外,编程模型不允许应用程序在管线中更早地执行某些操作,以使整体执行更有效。例如,如上所述,编程模型经常强制顶点和线程之间的一对一对应,其中一批工作中包括的每个顶点由不同的线程独立地处理。因为给定线程独立于由其他线程处理的顶点处理给定顶点,所以没有好的方法来编程顶点处理单元以执行剔除操作以丢弃图形处理管线的顶点处理阶段处的不可见图元。例如,处理包含在给定三角形图元中的单个顶点的线程不能确定三角形图元在最终图像中是否可见,因为由两个其他线程处理的另外两个顶点需要参与该确定。因为顶点处理单元不能被编程为剔除不可见的图元,所以图形处理管线中的下游单元最终对那些不可见的图元执行不必要的图形操作,从而浪费处理资源和能源。

如前所述,本领域需要的是用于处理图像数据的更有效的技术。



技术实现要素:

本发明的一个实施例阐述了一种用于处理图像数据的方法。该方法包括使第一组执行线程对输入网格执行任务着色程序,以生成指定第一网格着色器计数的第一任务着色器输出;生成第一组网格着色器标识符,其中第一组网格着色器标识符中包括的网格着色器标识符的总数等于第一网格着色器计数;对于包括在第一组网格着色器标识符中的每个网格着色器标识符,基于网格着色器标识符和第一任务着色器输出调用网格着色器以生成与网格着色器标识符相关联的几何形状;并且对与第一组网格着色器标识符相关联的几何形状执行一个或更多个操作以生成第一渲染图像。

所公开的技术的一个优点是图形处理管线可以实现这些技术,而不是实现图元分配器、顶点处理单元和几何着色单元。结果,图形处理管线的性能不受图元分配器的固定吞吐量的限制。此外,因为多个协作线程执行任务着色程序,所以图形处理管线可以相对于传统图形处理管线更早且更有效地执行某些操作。

附图说明

因此,可以详细地理解本发明的上述特征的方式,可以通过参考实施例获得上面简要概述的本发明的更具体的描述,其中一些实施例在附图中描述。然而,应注意,附图仅示出了本发明的典型实施例,因此不应视为限制本发明的范围,因为本发明可允许其他同等有效的实施例。

图1是示出被配置为实现本发明的一个或更多个方面的计算机系统的框图;

图2是根据本发明的各种实施例的包括在图1的并行处理子系统中的并行处理器的更详细框图;

图3a是根据本发明的各种实施例的包括在图2的并行处理器中的通用处理集群的更详细的框图;

图3b是根据本发明的各种实施例的在图2的并行处理器内实现的图形处理管线的概念图;

图4是根据本发明的各种实施例的图3b的网格单元(meshlet)的更详细的框图;

图5是根据本发明的各种实施例的用于经由图形处理管线处理图像数据的方法步骤的流程图;

图6是根据本发明的各种其他实施例的可以在图2的并行处理器内实现的扩展图形处理管线的概念图;

图7是根据本发明的各种实施例的当支持应用程序数据缓冲器时网格着色器输入和图6的网格着色器之间的交互的更详细的图示;

图8a-8b阐述了根据本发明的各种实施例的用于经由扩展的图形处理管线处理图像数据的方法步骤的流程图;

图9a-9b示出了根据本发明的各种实施例的图1的去重应用程序如何生成着色器批处理;以及

图10a-10b阐述了根据本发明的各种实施例的用于预处理索引缓冲器以用于在图形处理管线中使用的方法步骤的流程图。

具体实施方式

在以下描述中,阐述了许多具体细节以提供对本发明的更透彻的理解。然而,对于本领域技术人员显而易见的是,可以在没有这些具体细节中的一个或更多个的情况下实践本发明。

系统总览

图1是示出被配置为实现本发明的一个或更多个方面的计算机系统100的框图。如图所示,计算机系统100包括但不限于中央处理单元(cpu)102和经由内存桥105和通信路径113耦合到并行处理子系统112的系统存储器104。在一些实施例中,计算机系统100是一个游戏控制台。内存桥105还经由通信路径106耦合到i/o(输入/输出)桥107,并且i/o桥107又耦合到交换机116。

在操作中,i/o桥107被配置为从输入设备108(诸如键盘或鼠标)接收用户输入信息,并且将输入信息转发到cpu102以经由通信路径106和内存桥105进行处理。交换机116被配置为在i/o桥107与计算机系统100的其他组件之间提供连接,例如网络适配器118和各种附加卡120和121。

还如图所示,i/o桥107耦合到系统盘114,系统盘114可以被配置为存储内容和应用程序以及数据以供cpu102和并行处理子系统112使用。一般而言,系统盘114提供用于应用程序和数据的非易失性存储装置,可包括固定或可移除硬盘驱动器、闪存设备和cd-rom(光盘只读存储器)、dvd-rom(数字通用盘rom)、蓝光、hd-dvd(高清dvd)或其他磁、光或固态存储设备。最后,虽然未明确示出,但是其他组件,例如通用串行总线或其他端口连接、光盘驱动器、数字通用盘驱动器、胶片记录设备等,也可以连接到i/o桥107。

在各种实施例中,内存桥105可以是北桥芯片,并且i/o桥107可以是南桥芯片。另外,通信路径106和113以及计算机系统100内的其他通信路径可以使用任何技术上合适的协议来实现,包括但不限于agp(加速图形端口),超传输(hypertransport)或本领域已知的任何其他总线或点对点通信协议。

在一些实施例中,并行处理子系统112包括将像素传送到显示设备110的图形子系统,显示设备110可以是任何传统的阴极射线管、液晶显示器、发光二极管显示器等。在这样的实施例中,并行处理子系统112包含针对图形和视频处理而优化的电路,包括例如视频输出电路。如下面在图2中更详细描述的,这种电路可以并入并行处理子系统112内包括的一个或更多个并行处理器(pp)上。在其他实施例中,并行处理子系统112包含为通用和/或计算处理而优化的电路。同样,这种电路可以并入并行处理子系统112内包括的一个或更多个pp中,其被配置为执行通用和/或计算操作。在其他实施例中,并行处理子系统112内包括的一个或更多个pp可以被配置为执行图形处理、通用处理和计算处理操作。系统存储器104包括至少一个设备驱动器103,其被配置为管理并行处理子系统112内的一个或更多个pp的处理操作。

如图所示,系统存储器104包括但不限于设备驱动器103、用户应用程序190和网格着色库180。用户应用程序190包括但不限于网格着色程序192和任务着色程序194。如结合图3-8b所描述的,在各种实施例中,网格着色程序192和/或任务着色程序194在一个或更多个pp上作为图形处理管线的一部分(图1中未示出)执行。通常,网格着色库180包括网格着色程序192可以执行的任何数量的应用程序。如图所示,网格着色库180包括但不限于去重应用程序182。结合图9-10描述去重应用程序182。

在各种实施例中,用户应用程序190可以包括任何数量(包括0)的网格着色程序192和任务着色程序194中的每一个。例如,用户应用程序190可以包括网格着色程序192并且不包括任务着色程序194。在相同或其他实施例中,计算机系统100可以省略网格着色库180,或者网格着色库180可以省略去重应用程序182。

在可选实施例中,系统存储器104可以包括任何数量(包括0)的设备驱动器103、用户应用程序190和网格单元库180中的每一个。此外,任何数量的设备驱动器103、用户应用程序190和网格着色库180可以存储在处理器112可访问的任何数量和类型的外部存储器中。例如但不限于,外部存储器可以包括安全数字卡、外部闪存存储器、便携式光盘只读存储器(cd-rom)、光学存储设备、磁存储设备或前述的任何合适的组合。此外,外部存储器可以在云或任何其他类型的分布式系统中实现。

在各种实施例中,并行处理子系统112可以与图1的一个或更多个其他元件集成以形成单个系统。例如,并行处理子系统112可以与cpu102和单个芯片上的其他连接电路集成以形成片上系统(soc)。

应当理解,本文所示的系统是说明性的,并且可以进行变化和修改。可以根据需要修改连接拓扑,包括桥的数量和布置、cpu102的数量以及并行处理子系统112的数量。例如,在一些实施例中,系统存储器104可以直接连接到cpu102而不是通过内存桥105,并且其他设备将经由内存桥105和cpu102与系统存储器104通信。在其他可选拓扑中,并行处理子系统112可以连接到i/o桥107或直接连接到cpu102,而不是连接到内存桥105。在其他实施例中,i/o桥107和内存桥105可以集成到单个芯片中而不是作为一个或更多个分立器件存在。最后,在某些实施例中,可能不存在图1中所示的一个或更多个组件。例如,可以去除交换机116,并且网络适配器118和附加卡120、121将直接连接到i/o桥107。

图2是根据本发明的各种实施例的包括在图1的并行处理子系统112中的并行处理器202的更详细框图。尽管图2描绘了一个pp202,如上所述,并行处理子系统112可包括任何数量的pp202。如图所示,pp202耦合到本地并行处理(pp)存储器204。pp202和pp存储器204可以使用一个或更多个集成电路设备(例如可编程处理器、专用集成电路(asic)或存储器设备或任何其他技术上可行的方式)实现。

在一些实施例中,pp202包括图形处理单元(gpu),其可被配置为实现图形渲染管线以基于由cpu102和/或系统存储器104提供的图形数据执行与生成像素数据相关的各种操作。当处理图形数据时,pp存储器204可以用作存储一个或更多个传统帧缓冲器并且如果需要还可以存储一个或更多个其他渲染目标的图形存储器。除此之外,pp存储器204可用于存储和更新像素数据并将最终像素数据或显示帧传送到显示设备110以供显示。在一些实施例中,pp202还可以被配置用于通用处理和计算操作。

在操作中,cpu102是计算机系统100的主处理器,控制和协调其他系统组件的操作。特别地,cpu102发出控制pp202的操作的命令。在一些实施例中,cpu102将用于pp202的命令流写入可位于系统存储器104、pp存储器204或cpu102和pp202两者可访问的另一个存储位置中的数据结构(未在图1或图2中明确示出)。指向数据结构的指针被写入推送缓冲器以启动数据结构中的命令流的处理。pp202从推送缓冲器读取命令流,然后相对于cpu102的操作异步地执行命令。在生成多个推送缓冲器的实施例中,可以由应用程序190经由设备驱动器103为每个推送缓冲器指定执行优先级以控制不同的推送缓冲器的调度。

还如图所示,pp202包括i/o(输入/输出)单元205,其经由通信路径113和内存桥105与计算机系统100的其余部分通信。i/o单元205生成分组(或其他信号)用于在通信路径113上传输,并且还从通信路径113接收所有输入分组(或其他信号),将输入分组引导到pp202的适当组件。例如,与处理任务相关的命令可以指向主机接口206,而可以将与存储器操作相关的命令(例如,从pp存储器204读取或向pp存储器204写入)指向交叉开关单元210。主机接口206读取每个推送缓冲器并将存储在推送缓冲器中的命令流发送到前端212。

如上面结合图1所述,可以改变pp202与计算机系统100的其余部分的连接。在一些实施例中,包括至少一个pp202的并行处理子系统112被实现为可以插入计算机系统100的扩展槽中的附加卡。在其他实施例中,pp202可以与总线桥集成在单个芯片上,例如内存桥105或i/o桥107。此外,在另一个实施例中,pp202的一些或所有元件可以与cpu102一起包括在单个集成电路或芯片系统(soc)中。

在操作中,前端212将从主机接口206接收的处理任务发送到任务/工作单元207内的工作分配单元(未示出)。工作分配单元接收指向编码为任务元数据(tmd)并存储在存储器中的处理任务的指针。指向tmd的指针包括在命令流中,该命令流被存储为推送缓冲器并由前端单元212从主机接口206接收。可被编码为tmd的处理任务包括与要处理的数据相关联的索引以及状态参数和命令,其定义如何处理数据。例如,状态参数和命令可以定义要对数据执行的程序。任务/工作单元207从前端212接收任务,并确保在启动由每个tmd指定的处理任务之前gpc208被配置为有效状态。可以为用于调度处理任务的执行的每个tmd指定优先级。处理任务也可以从处理集群阵列230接收。可选地,tmd可以包括控制tmd是否被添加到处理任务列表的头部或尾部的参数(或者指向处理任务的指针列表),从而提供对执行优先级的另一级控制。

pp202有利地基于处理集群阵列230实现高度并行处理架构,处理集群阵列230包括一组c个通用处理集群(gpc)208,其中c≥1。每个gpc208能够同时执行大量(例如,数百或数千个)线程,其中每个线程是程序的实例。在各种应用中,可以分配不同的gpc208用于处理不同类型的程序或用于执行不同类型的计算。gpc208的分配可以根据每种类型的程序或计算产生的工作负载而变化。

存储器接口214包括一组d个分区单元215,其中d≥1。如图所示,每个分区单元215包括但不限于二级(l2)高速缓存260。每个l2高速缓存260包括任何数量的l2切片(slice)270。每个分区单元215耦合到驻留在ppm存储器204内的一个或更多个动态随机存取存储器(dram)220。在一个实施例中,分区单元215的数量等于dram220的数量,并且每个分区单元215耦合到不同的dram220。在其他实施例中,分区单元215的数量可以与dram220的数量不同。本领域普通技术人员将理解,dram220可以用任何其他技术上合适的存储设备替换。在操作中,各种渲染目标(例如纹理映射和帧缓冲器)可以跨dram220存储,允许分区单元215并行地写入每个渲染目标的部分,以有效地使用pp存储器204的可用带宽。

给定gpc208可以处理要写入pp存储器204内的任何dram220的数据。交叉开关单元210被配置为将每个gpc208的输出路由到任何分区单元215或任何其他gpc208的输入用于进一步处理。gpc208经由交叉开关单元210与存储器接口214通信以从各种dram220读取或写入各种dram220。在一个实施例中,除了经由存储器接口214与pp存储器204的连接之外,交叉开关单元210还具有到i/o单元205的连接,从而使得不同gpc208内的处理核能够与系统存储器104或非pp202本地的其他存储器通信。在图2的实施例中,交叉开关单元210与i/o单元205直接连接。在各种实施例中,交叉开关单元210可以使用虚拟信道来分离gpc208和分区单元215之间的业务流。

此外,gpc208可以被编程为执行与各种各样的应用程序有关的处理任务,包括但不限于线性和非线性数据变换、视频和/或音频数据的过滤、建模操作(例如,应用用于确定物体的位置、速度和其他属性的物理定律)、图像渲染操作(例如,曲面细分着色器、顶点着色器、几何着色器和/或像素/片段着色程序)、通用计算操作等。在操作中,pp202是配置成将数据从系统存储器104和/或pp存储器204传输到一个或更多个片上存储器单元,处理数据并将结果数据写回系统存储器104和/或pp存储器204。结果数据可以是由其他系统组件访问,包括cpu102、并行处理子系统112内的另一个pp202,或计算机系统100内的另一个并行处理子系统112。

如上所述,任何数量的pp202可以包括在并行处理子系统112中。例如,可以在单个附加卡(add-incard)上提供多个pp202,或者可以将多个附加卡连接到通信路径113,或者一个或更多个pp202可以集成到桥芯片中。多pp系统中的pp202可以彼此相同或不同。例如,不同的pp202可以具有不同数量的处理核和/或不同数量的pp存储器204。在存在多个pp202的实现方式中,那些pp可以并行操作以比采用单个pp202可能达到的更高的吞吐量处理数据。包含一个或更多个pp202的系统可以以各种配置和形式因素实现,包括但不限于台式机、膝上型计算机、手持式个人计算机或其他手持设备、服务器、工作站、游戏控制台、嵌入式系统等等。

图3a是根据本发明的各种实施例的包括在图2的并行处理器202中的通用处理集群(gpc)208的更详细框图。在操作中,gpc208可以被配置为并行执行大量线程以执行图形处理、通用处理和/或计算操作。如本文所使用的,“线程”指的是在特定输入数据集上执行的特定程序的实例。在一些实施例中,单指令、多数据(simd)指令发布技术用于支持大量线程的并行执行,而无需提供多个独立指令单元。在其他实施例中,单指令、多线程(simt)技术用于使用被配置为向gpc208内的一组处理引擎发出指令的公共指令单元支持大量通常同步的线程的并行执行。与simd的执行机制不同,其中所有处理引擎通常执行相同的指令,simt执行允许不同的线程通过给定程序更容易地遵循不同执行路径。本领域普通技术人员将理解,simd处理机制表示simt处理机制的功能子集。

经由管线管理器305控制gpc208的操作,管线管理器305将从任务/工作单元207内的工作分配单元(未示出)接收的处理任务分配给一个或更多个流式多处理器(sm)310。管线管理器305也可以被配置为通过指定sm310输出的处理数据的目的地来控制工作分配交叉开关330。

在一个实施例中,gpc208包括一组m个sm310,其中m≥1。此外,每个sm310包括一组功能执行单元(未示出),例如执行单元和加载存储单元。特定于任何功能执行单元的处理操作可以是管线化的,这使得能够在先前指令完成执行之前发出新指令以供执行。可以提供给定sm310内的功能执行单元的任何组合。在各种实施例中,功能执行单元可以被配置为支持各种不同的操作,包括整数运算和浮点运算(例如,加法和乘法)、比较运算、布尔运算(and、or、xor)、比特移位和各种代数函数(例如,平面插值和三角函数、指数函数和对数函数等)的计算。有利地,相同的功能执行单元可以被配置为执行不同的操作。

在操作中,每个sm310被配置为处理一个或更多个线程组。如本文所使用的,“线程组”或“线程束(warp)”指的是对不同的输入数据同时执行相同程序的一组线程,其中该组的一个线程被指派给sm310内的不同执行单元。线程组可以包括比sm310内的执行单元的数量更少的线程,在这种情况下,在处理该线程组的周期期间一些执行可以是空闲的。线程组还可以包括比sm310内的执行单元的数量更多的线程,在这种情况下,处理可以在连续的时钟周期上发生。由于每个sm310可以同时支持多达g个线程组,因此可以在任何给定时间在gpc208中执行多达g*m个线程组。

另外,在sm310内多个相关线程组可以同时是活动的(在执行的不同阶段中)。该线程组集合在本文中称为“协作线程阵列”(“cta”)或“线程阵列”。特定cta的大小等于m*k,其中k是线程组中同时执行线程的数量,通常是sm310内执行单元数量的整数倍,m是sm310内同时活动的线程组的数量。

尽管未在图3a中示出,但是每个sm310包含一级(l1)高速缓存或使用sm310外部的对应l1高速缓存中的空间来支持由执行单元执行的加载和存储操作等。每个sm310还可以访问在pp202中的所有gpc208之间共享的二级(l2)高速缓存。l2高速缓存可以用于在线程之间传输数据。最后,sm310还可以访问片外“全局”存储器,其可以包括pp存储器204和/或系统存储器104。应当理解,pp202外部的任何存储器都可以用作全局存储器。另外,如图3a所示,一点五级(l1.5)高速缓存335可以包括在gpc208内,并且被配置为接收和保持由sm310经由存储器接口214从存储器请求的数据。这样的数据可以包括但不限于,指令、统一数据和恒定数据。在gpc208内具有多个sm310的实施例中,sm310可以有益地共享在l1.5高速缓存335中高速缓存的公共指令和数据。

每个gpc208可以具有相关联的存储器管理单元(mmu)320,其被配置为将虚拟地址映射到物理地址。在各种实施例中,mmu320可以驻留在gpc208内或存储器接口214内。mmu320包括用于将图块(tile)或存储器页以及可选地高速缓存行索引的虚拟地址映射到物理地址的一组页表条目(pte)。mmu320可以包括可以驻留在sm310内、一个或更多个l1高速缓存或gpc208内的地址转换后备缓冲器(tlb)或高速缓存。

在图形和计算应用中,gpc208可以被配置为使得每个sm310耦合到纹理单元315,用于执行纹理映射操作,诸如确定纹理样本位置、读取纹理数据和过滤纹理数据。

在操作中,每个sm310将经处理的任务发送到工作分配交叉开关330,以便将经处理的任务提供给另一个gpc208用于进一步处理或经由交叉开关单元210将经处理的任务存储在l2高速缓存260、并行处理存储器204或系统存储器104之一中。此外,预光栅操作(prerop)单元325被配置为从sm310接收数据,将数据引导至分区单元215内的一个或更多个光栅操作(rop)单元,执行颜色混合的优化、组织像素颜色数据和执行地址转换。

应当理解,本文描述的核心架构是说明性的,并且可能进行变化和修改。除此之外,任何数量的处理器(例如sm310、纹理单元315或prerop单元325)可以包括在gpc208内。此外,如上面结合图2所述,pp202可以包括任何数量的gpc208,其被配置为在功能上彼此相似,使得执行行为不依赖于哪个gpc208接收特定处理任务。此外,每个gpc208独立于pp202中的其他gpc208操作,以执行一个或更多个应用程序的任务。鉴于前述内容,本领域普通技术人员将理解,图1-3a中描述的架构决不限制本发明的范围。

实现图形处理管线

图3b是根据本发明一个实施例的在图2的并行处理器202内实现的图形处理管线320的概念图。如本领域技术人员将认识到的,传统的图形处理管线通常包括称为图元分配器的单个固定功能硬件单元。图元分配器从前端单元收集与高阶表面、图形基元等相关联的顶点数据,并构造相应的批量工作,其中每批工作包括定义多个图元的顶点数据。然后,批量工作由也包括在传统图形处理管线中的可编程执行单元处理。在执行期间,批量工作在一组流式多处理器上分配,所述流式多处理器被配置为并行执行大量线程以基于编程模型对顶点数据执行图形操作。通常,根据编程,给定批量工作中包括的每个顶点由不同的线程独立地处理。

传统图形处理管线的一个限制是图形处理管线的吞吐量受到图元分配器的吞吐量的限制。更具体地,图元分配器通常是具有固定吞吐量和有限扩展性的固定功能硬件单元。因此,随着存储器带宽和流式多处理器的数量增加,图元分配器限制了传统图形处理管线的整体性能。例如,如果图元分配器在每个时钟周期具有16个图元的吞吐量,那么传统图形处理管线的总吞吐量限制为每个时钟周期16个图元,而不管存储器带宽和/或支持图形管线的流式多处理器的数量。

传统图形处理管线的另一个限制是适用的编程模型是不灵活的。除此之外,编程模型不允许应用程序在管线中更早地执行某些操作,以使整体执行更有效。例如,如上所述,编程模型经常强制顶点和线程之间的一对一对应,其中一批工作中包括的每个顶点由不同的线程独立地处理。因为给定的线程独立于由其他线程处理的顶点处理给定顶点,所以没有好的方法来编程顶点处理单元以执行剔除操作以便在传统图形处理管线的顶点处理阶段丢弃不可见的图元。例如,处理包含在给定三角形图元中的单个顶点的线程不能确定三角形图元在最终图像中是否可见,因为由两个其他线程处理的另外两个顶点需要参与该确定。因为顶点处理单元不能被编程为剔除不可见的图元,所以传统图形处理管线中的下游单元最终对那些不可见图元执行不必要的图形操作,从而浪费处理资源和能源。

为了改善图形处理管线320相对于传统图形处理管线的性能和灵活性,图形处理管线320提供用于接收和处理图形数据的更灵活的机制。特别地,图形处理管线320包括但不限于网格着色器生成器330和任何数量的网格着色器350,其替换包括在传统图形处理管线中的图元分配器、顶点着色单元和几何着色单元。

每个网格着色器350包括一组线程,其基于关联的网格着色标识符(id)340协作地执行网格着色程序192以生成网格单元(meshlet)360。每个网格单元360是包括在与网格着色id340相关联的输入网格的一部分中的几何形状的管内表示。一般而言,“管内(in-pipe)”数据是指存储在图形处理管线320可访问的片上存储器中的数据。例如,网格单元360可以存储在l1.5高速缓存335或l1高速缓存中,但不能存储在pp存储器204中。如结合图4更详细地描述的,每个网格单元360实现固定格式,其使得图形处理管线230中的后续单元能够与网格单元360适当地接口并解释网格单元360。

如图所示,图形处理管线320包括但不限于网格着色器生成器330、任意数量的网格着色器标识符(id)340、任意数量的网格着色器350、任意数量的网格单元360、光栅化器370、像素着色单元380和光栅操作处理器(rop)390。仅出于解释的目的,图形处理管线320中的每个组件在本文中也称为“单元”,其实现图形处理管线320中的“阶段”。

网格着色器生成器330是固定功能处理单元,其从用户应用程序190接收网格着色器线程计数312和网格着色器计数314。网格着色器线程计数312指定每个网格着色器350中包括的线程数量。网格着色器计数314指定网格着色器生成器330要调用的网格着色器350的总数。为了调用每个网格着色器350,网格着色器生成器330向不同的线程组提供不同的网格着色器id340,并配置线程组以协作地执行网格着色程序192。每组中的线程总数等于网格着色器线程计数312。网格着色器id340是范围从0到n-1(包括)的连续整数,其中n是网格着色器计数314。

在一些实施例中,网格着色器350中的每一个负责输入网格的不同部分。网格着色器id340(i)使网格着色器350(i)能够定位网格着色器350(i)负责的输入网格部分的图形数据。例如,网格着色程序192可以配置网格着色器350(i)以基于基本图像地址和网格着色器id340(i)定位与输入网格的左上部分相关联的图形基元的属性和拓扑。在可选实施例中,网格着色器350(i)可以基于网格着色器id340(i)而不是输入网格的一部分来读取和处理任何类型的数据。

网格着色器编程模型定义包括网格着色器350的线程如何执行网格着色程序192。网格着色器编程模型指定包括网格着色器350(i)的线程接收单个输入、网格着色器id340(i),并且协同地生成单个输出—网格单元360(i)。值得注意的是,网格着色器编程模型允许网格着色程序192定义顶点和线程之间的任何关系以及图形基元和线程之间的任何关系。

网格着色器编程模型允许网格着色程序192在片上存储器中分配共享网格单元缓冲器352。当调用网格着色器350(i)时,网格着色器350(i)在片上存储器中分配共享网格单元缓冲器352(i)。当网格着色器350执行时,共享网格单元缓冲器352(i)促进包括网格着色器350(i)的线程之间的通信。当网格着色器350(i)终止时,释放共享网格单元缓冲器352(i)。

网格着色器编程模型还定义网格着色程序192可以配置网格着色器350执行的操作。一般而言,网格着色器350可以执行协作线程阵列(cta)可用的任何操作。网格着色器350可以执行的操作的示例包括但不限于读取/加载操作、通用计算操作、顶点着色操作、几何着色操作和写入/存储操作。重要的是,网格着色器350还可以在包括网格着色器350的线程之间执行任何数量的同步操作,例如屏障(barrier)操作。此外,包括网格着色器250的线程可以执行指令,例如匹配指令,其在不访问共享存储器的情况下跨线程执行一个或更多个协作操作。

例如,在一些实施例中,网格着色器350实现三阶段计算过程。在第一阶段,每个线程从片外存储器中取出一个或更多个顶点的位置,对顶点执行变换操作,并将变换后的顶点位置写入网格单元360。在第二阶段,在所有线程完成执行第一阶段之后,每个线程从片外存储器中取出图形基元的拓扑,并基于变换后的顶点位置评估是否剔除图形基元。然后线程将未被剔除的图形基元的拓扑写入网格单元360。在第三阶段中,在所有线程完成执行第二阶段之后,每个线程取出包括在未被剔除的图形基元中的一个或更多个顶点的附加属性,处理顶点的属性,并将处理后的顶点属性写入网格单元360。

值得注意的是,包括网格着色器350的线程的数量不一定等于网格着色器350处理的顶点的数量。此外,网格着色器350获取其图形数据的顶点的数量不一定等于网格着色器350描述网格单元360中的顶点的数量。类似地,包括网格着色器350的线程的数量不一定等于网格着色器350处理的图形基元的数量。此外,网格着色器350获取其图形数据的图形基元的数量不一定等于网格着色器350描述网格单元360中的图形基元的数量。

通常,网格着色器350符合与图形处理管线320、pp202和片上存储器相关联的任何数量的约束。例如,在一些实施例中,由网格着色器350处理并在网格单元360中描述的图形基元(例如,三角形、线、点)的类型由与图形处理管线320相关联的状态定义。在相同或者其他实施例中,网格着色器线程计数312被约束为最多32个线程。

网格着色器id340定义网格单元360的处理顺序。更具体地,图形处理管线320中的后续单元基于网格着色器id340处理网格单元360。例如,在一些实施例中,图形处理管线320基于网格着色器id340的升序将网格单元360馈送到光栅化器370。

光栅化器370读取网格单元360、扫描图形基元并将片段和覆盖数据发送到像素着色单元380。另外,光栅化器385可以被配置为执行z剔除和其他基于z的优化。

像素着色单元380是可编程执行单元,其被配置为执行片段着色程序、变换从光栅化器370接收的片段,如片段着色程序所指定的。片段着色程序可以以像素级粒度对片段进行着色,其中这种着色程序可以称为像素着色程序。可选地,片段着色程序可以以样本级粒度对片段进行着色,其中每个像素包括多个样本,并且每个样本代表像素的一部分。可选地,片段着色程序可以根据编程的采样率以任何其他技术上可行的粒度对片段进行着色。

在各种实施例中,像素着色单元380可以被编程为执行操作(诸如透视校正、纹理映射、着色、混合等),以产生被发送到rop390的着色片段。像素着色单元380可以读取存储在共享存储器中的数据。

rop390是执行光栅操作(例如,模板(stencil)、z测试、混合等)的处理单元,并且将像素数据作为经处理的图形数据发送以经由存储器接口214存储在图形存储器中,其中图形存储器通常被构造为一个或更多个渲染目标。经处理的图形数据可以存储在图形存储器、并行处理存储器204或系统存储器104中,用于在显示设备110上显示或者由cpu102或并行处理子系统112进一步处理。在一些实施例中,rop390被配置为压缩z数据或颜色数据,其被写入存储器并解压缩从存储器中读取的z数据或颜色数据。在各种实施例中,rop390可以位于存储器接口214中、gpc208中、gpc208外部的处理集群阵列230中或者位于pp202内的单独单元(未示出)中。

图形处理管线320可以由pp202内的任何一个或更多个处理元件实现。例如,图3a的sm310之一可以被配置为执行像素着色单元390的功能。网格着色器生成器320、光栅化器370和rop390的功能也可以通过处理与相应的分区单元215结合的特定gpc208内的处理元件来执行。可选地,图形处理管线320可以使用用于处理上面列出的一个或更多个功能的专用固定-功能处理元件来实现。在各种实施例中,pp202可以被配置为实现一个或更多个图形处理管线320。

如本文所使用的,一组操作被定义为由单个线程、线程组或由一致行动的多个线程组执行的一个或更多个指令。请注意,如本文所使用的,对共享存储器的引用可以包括任何一个或更多个技术上可行的存储器,包括但不限于由一个或更多个sm310共享的本地存储器,或者经由存储器接口214访问的存储器,诸如高速缓存存储器、并行处理存储器204或系统存储器104。请注意,如本文所使用的,对高速缓存存储器的引用可以包括任何一个或更多个技术上可行的存储器,包括但不限于l1高速缓存、l1.5高速缓存和l2高速缓存。

应当理解,本文示出的图形处理管线320是说明性的,并且可以进行变化和修改。例如,在各种实施例中,可以实现图形处理管线320中的任何数量的单元,而可以以任何技术上可行的方式省略或替换其他元件。此外,视口缩放、剔除和裁剪单元(vpc)、图块拼接(tiling)单元和设置单元中的任何一个可以包括在图形处理管线320中。

注意,本文描述的技术是说明性的而不是限制性的,并且可以在不脱离本发明的更广泛的精神和范围的情况下进行改变。在不脱离所描述的实施例的范围和精神的情况下,对网格着色器生成器330、网格着色器350和网格着色器编程模型提供的功能的许多修改和变化对于本领域普通技术人员将是显而易见的。例如,在各种实施例中,可以实现任何数量的技术和/或约束,而可以以任何技术上可行的方式省略或替换其他技术和/或约束。在各种实施例中,网格着色器350可以以任何技术上可行的方式被调用和编程。

图4是根据本发明的各种实施例的图3b的网格单元360的更详细的框图。尽管图4描述了单个网格单元360,但是网格单元编程模型对所有网格单元340强制执行相关的体系结构和约束。如图所示,网格单元360包括但不限于图元计数410、图元拓扑区段(section)420、每顶点属性区段430、每图元属性区段440和网格单元数据区段450。

图元计数410和图元拓扑区段420统称为“网格单元报头”。相反,每顶点属性区段430、每图元属性区段440和网格单元数据区段450被统称为“网格单元体”。在替代实施例中,网格单元360可包括任何数量的区段,而其他区段可以以任何方式被省略或替换,其为图形处理管线320中的后续组件提供一致的界面。

在各种实施例中,网格单元体的尺寸和/或组成以及包括在网格单元360中的每个区段受到约束。例如,在一些实施例中,共享网格单元缓冲器352和网格单元体的组合大小被限制为最大16千字节(kb)。此外,每顶点属性区段430的大小限制为16kb,并且每图元属性区段440的大小限制为16kb。为每顶点属性区段430中的每个顶点指定的属性的总数限于32个矢量属性或128个标量属性,并且为每图元属性区段440中的每个图元指定的属性的总数限制为32个矢量属性或128个标量属性。

在操作中,作为强制与网格单元360相关联的约束的一部分,网格单元编程模型允许开发者表达可在网格单元360中描述的最大顶点数和最大图形基元数。在确保最大顶点数和最大图形基元数符合任何现有约束之后,网格单元编程模型定义了网格单元报头的总大小和格式。更确切地说,网格单元报头的总大小是基于最大顶点数、每顶点属性的数量、图形基元的最大数量和每图元属性的数量来定义的。

图元计数410指定在网格单元360中描述的图形基元的总数。图元计数410可以等于零,以指定网格着色器330已经剔除由网格着色器330处理的所有图形基元。图元拓扑区段420指定包括在图形基元中的顶点。图形基元的类型以及因此包括在每个图形基元中的顶点的数量由图形处理管线320的状态指定。在可选实施例中,图形基元的类型可以变化,并且每个图形基元的类型可以以任何技术上可行的方式指定。

对于包括在图元拓扑区段420中的每个顶点,每顶点属性区段430包括用于任何数量的顶点属性中的每一个的值。顶点属性的示例包括但不限于表面法线、颜色、位置、透明度值等。对于在图元拓扑区段430中描述的每个图元,每图元属性区段440包括用于任何数量的图元属性中的每一个的值。图元属性的示例包括但不限于表面法线、颜色、纹理映射坐标、视口阵列掩码等。视口阵列掩码指示应通过比特向其发送图元的视口,其中每个比特代表一个视口。如本领域技术人员将认识到的,与通过图形基元的“激发(provoking)顶点”间接地关联图元属性的值的传统图形处理管线不同,网格单元360直接将图元属性的值与图形基元相关联。

网格单元数据区段450可包括与网格单元360相关联的任何数量和类型的信息。例如,在各种实施例中,网格单元数据区段450可包括任何数量的每网格单元属性。每网格单元属性的示例包括但不限于边界框、帧缓冲器内的地址和曲面细分补丁的特征。

图5是根据本发明的各种实施例的用于经由图形处理管线处理图像数据的方法步骤的流程图。尽管结合图1-4的系统描述了方法步骤,但是本领域技术人员将理解,配置成以任何顺序执行方法步骤的任何系统都落入本发明的范围内。

如图所示,方法500开始于步骤502,其中网格着色器生成器330接收网格着色器线程计数312和网格着色器计数314。在步骤504,网格着色器生成器330调用网格着色器350,其中网格着色器350的总数等于网格着色器计数314。为了调用每个网格着色器350,网格着色器生成器330向不同的线程组提供不同的网格着色器id340并配置该线程组以协作地执行网格着色程序192。每个线程组中的线程总数等于网格着色器线程计数312。网格着色器id340是从0到n-1(包括)的连续整数,其中n是网格着色器计数314。在步骤506,根据网格着色程序192,每个网格着色器350在片上存储器中分配不同的共享网格单元缓冲器352。

在步骤508,对于每个网格着色器350,包括网格着色器350的线程基于网格着色器id340协作地读取并处理与输入网格的一部分相关联的图形数据。作为步骤508的一部分,网格着色器350可以执行可用于协作线程阵列(cta)的任何数量和类型的操作。网格着色器350可以执行的操作的示例包括但不限于读取/加载操作、通用计算操作、顶点着色操作、几何着色操作、同步操作和写入/存储操作。在可选实施例中,网格着色器350可以基于网格着色器id340而不是输入网格的一部分来读取和处理任何类型的数据。

在步骤510,每个网格着色器350完成写入相关联的网格单元360并终止。值得注意的是,每个网格单元360存储在片上存储器中并且在关联网格着色器350终止之后持续存在。相反,当给定网格着色器350终止时,释放相关联的共享网格单元缓冲器352。在步骤512,图形处理管线320中的后续单元读取并处理网格单元360以生成从输入网格导出的渲染图像。

如本领域技术人员将认识到的,网格着色器360中的每一个可以与其他网格着色器360同时、顺序或其任何组合执行。因此,在任何给定时间,任何数量的网格着色器360可以独立地执行方法步骤506-510,基本上与任何数量的其他网格着色器360并行。如本文所述,当并行处理器202基于网格着色器程序192和两个或更多个网格着色器标识符340执行不同的操作时,两个或更多个网格着色器192“基本上并行”执行,并且不同操作的至少部分在时间上部分地或完全地重叠。然而,如结合图3b所描述的,网格着色器id340定义网格单元360的处理顺序,其由图形处理管线320中的后续单元维护,作为步骤512的一部分。

实现扩展图形处理管线

在一些实施例中,为了进一步增加图形处理管线320的灵活性,图形处理管线320被扩展为包括一个或更多个附加着色器生成器和进行网格着色器生成器330的任何数量的附加着色器。每个附加着色器包括多个线程,这些线程协作地执行着色程序以生成相应的着色器输出。着色器输出指定后续着色器生成器调用的多个着色器以及任何格式的任何数量的附加数据。网格着色器生成器330和网格着色器350被修改为基于从前面的附加着色器接收的着色器输出进行操作。

图6是根据本发明的各种其他实施例的可以在图2的并行处理器202内实现的扩展图形处理管线620的概念图。如图所示,扩展图形处理管线620包括但不限于任务着色器生成器630、任意数量的任务着色器标识符(id)640、任意数量的任务着色器650、网格着色器生成器330、任意数量的任务着色器输出660、任意数量的网格着色器标识符(id)340、任意数量的网格着色器输入670、任意数量的网格着色器350、任意数量的网格单元360、光栅化器370、像素着色单元380和rop390。

任务着色器生成器630是固定功能处理单元,其从用户应用程序190接收任务着色器线程计数612和任务着色器计数614。任务着色器线程计数612指定每个任务着色器650要包括的线程数量。任务着色器计数614指定任务着色器生成器630要调用的任务着色器650的总数。为了调用每个任务着色器650,任务着色器生成器630向不同的线程组提供不同的任务着色器id640,并配置该线程组以协作地执行任务着色程序394。每个线程组中的线程总数等于任务着色器线程计数612。任务着色器id640是范围从0到n-1(包括)的连续整数,其中n是任务着色器计数614。

任务着色器编程模型定义包括任务着色器650的线程如何执行任务着色程序194。任务着色器编程模型指定包括任务着色器650的线程接收单个输入、任务着色器id340,以及协同生成单个输出、任务输出660,其存储在片上存储器中。值得注意的是,任务着色器编程模型允许任务着色程序194定义顶点和线程之间的任何关系,以及图形基元和线程之间的任何关系。

如图所示,任务着色器输出660包括但不限于网格着色器计数314和通用数据662。网格着色器计数314指定网格着色器计数314。通用数据662指定任何格式的附加数据。任务着色器650可以以任何技术上可行的方式确定网格着色器计数314和通用数据662。

例如,作为动态细节水平(lod)实例化的一部分,任务着色器650可以基于基本图像地址和任务着色器id640定位与输入网格的一部分相关联的图形数据。任务着色器650可以基于图形数据和视图确定lod。然后,任务着色器650可以基于lod计算网格着色器计数314。然后,任务着色器650可以生成通用数据662,该通用数据662包括但不限于与对应于输入网格和lod的部分的预先计算的网格相关联的地址。

任务着色器编程模型允许任务着色程序194在片上存储器中分配共享任务缓冲器652。当调用任务着色器650(i)时,任务着色器350(i)在片上存储器中分配共享任务缓冲器652(i)。当任务着色器650执行时,共享任务缓冲器652(i)促进包括任务着色器650(i)的线程之间的通信。当任务着色器650(i)终止时,释放共享任务缓冲器652(i)。

任务着色器编程模型还定义了任务着色程序194可以配置网格着色器650以执行的操作。一般而言,任务着色器650可以执行协作线程阵列(cta)可用的任何操作。任务着色器650可以执行的操作的示例包括但不限于读取/加载操作、通用计算操作、顶点着色操作、曲面细分操作、几何着色操作和写入/存储操作。重要的是,任务着色器650还可以在包括任务着色器650的线程之间执行任何数量的同步操作,例如屏障操作。此外,包括任务着色器650的线程可以执行指令,例如匹配指令,其在不访问共享存储器的情况下跨线程执行一个或更多个协作操作。

通常,任务着色器650和任务着色器输出660符合与图形处理管线320、pp208和片上存储器相关联的任何数量的约束。例如,在一些实施例中,任务着色器线程计数314被约束为最多32个线程。在相同或其他实施例中,对于每个任务着色器输出660,任务着色器输出660和共享任务缓冲器652的组合大小被限制为最大16kb。

网格着色器生成器330从用户应用程序190接收网格着色器线程计数312。网格着色器线程计数312指定要包括在每个网格着色器350中的线程的数量。此外,对于每个任务着色器650(i),网格着色器生成器330接收任务输出660(i)。任务着色器id340定义任务着色器输出660的处理顺序。具体地,网格着色器生成器330处理任务着色器输出660的顺序基于任务着色器id640。例如,在一些实施例中,图形处理管线320基于任务着色器id640的升序将任务着色器输出660馈送到网格着色器生成器330。

对于每个任务输出660,网格着色器生成器330调用一个或更多个网格着色器350。更精确地,对于任务输出660(i),网格着色器生成器330生成关联网格着色器id340。关联网格着色器id340是范围从0到n-1(包括)的连续整数,其中n是在任务输出660(i)中指定的网格着色器计数314。对于每个网格着色器id340,网格着色器生成器330然后生成网格着色器输入670,其包括网格着色器id340、网格着色器314的总数以及任务输出660(i)中包括的通用数据662。在一些实施例中,为了生成网格着色器输入670,网格着色器生成器330可以生成任务输出660(i)的n个副本,然后修改每个副本以指定网格着色器id340中的不同的一个。

网格着色器id340(i)使得网格着色器350(i)能够定位适用于网格着色器350(i)负责的输入网格的部分的数据。例如,网格着色程序192可以配置网格着色器350(i)以将网格着色器id340(i)作为索引应用于关联网格着色器输入670中包括的通用数据662。

任务着色器生成器、任务着色器、网格着色器生成器和网格着色器可以替换包括在传统图形处理管线中的图元分配器、顶点着色器、外壳着色单元、曲面细分器、域着色单元和几何着色单元。有利地,由扩展图形处理管线660提供的灵活性使得能够管内生成、扩展和选择几何形状。

如本领域技术人员将认识到的,几何形状的管内操纵对于动态lod实例化、适应于位移映射的可编程曲面细分图案、程序几何、等表面提取、分层剔除等是有用的。在分层剔除中,在第一阶段中执行冒名顶替者(例如,边界框或法线圆锥体)的评估,并且在第二阶段中执行图形基元的更精细评估。

在基于特定任务着色器输出660调用的网格着色器350完成执行之后,可以释放任务着色器输出660。然而,网格单元360保持通过图形处理管线360的其余部分。光栅化器370、像素着色单元380和rop390处理每个网格单元360,如结合图3b所描述的,以生成渲染图像。重要的是,图形处理管线320中的后续单元处理网格单元360的顺序基于任务着色器id640和网格着色器id340。例如,在一些实施例中,图形处理管线320基于任务着色器id640的升序将网格单元360馈送到光栅化器370,并且基于网格着色器id340的升序馈送每个任务着色器id640。

扩展图形处理管线320可以由pp202内的任何一个或更多个处理元件实现。例如,图3a的sm310之一可以被配置为执行像素着色单元390的功能。网格着色器生成器320、任务着色器生成器620,光栅化器370和rop390的功能也可以通过结合相应的分区单元215处理特定gpc208内的元件来执行。可选地,图形处理管线320可以使用针对上面列出的一个或更多个功能的专用的固定功能处理元件来实现。在各种实施例中,pp202可以被配置为实现一个或更多个图形处理管线320。

应当理解,本文示出的扩展图形处理管线620是说明性的,并且可以进行变化和修改。例如,在各种实施例中,可以实现扩展图形处理管线620中的任何数量的单元,而可以以任何技术上可行的方式省略或替换其他单元。此外,视口缩放、剔除和裁剪单元(vpc)、图块拼接单元和设置单元中的任何一个可以包括在扩展图形处理管线620中。

注意,本文描述的技术是说明性的而非限制性的,并且可以在不脱离本发明的更广泛的精神和范围的情况下进行改变。在不脱离所描述的实施例的范围和精神的情况下,由任务着色器生成器630、任务着色器650、网格着色器生成器330、网格着色器350、网格着色器编程模型和任务着色器编程模型提供的功能的许多修改和变化对于本领域普通技术人员将是显而易见的。例如,在各种实施例中,可以实现任何数量的技术和/或约束,而可以以任何技术上可行的方式省略或替换其他技术和/或约束。

在各种实施例中,可以以任何技术上可行的方式调用和编程任务着色器650和网格着色器350。在一些实施例中,用户应用程序190可以指定最大数量的飞行中(in-flight)网格着色器输入670,并且可以相应地修改网格着色器生成器330的功能。

图7是根据本发明的各种实施例的当支持应用数据缓冲器760时图6的网格着色器输入670和网格着色器650之间的交互的更详细的图示。应用数据缓冲器760使得能够在任务着色器650之一和关联网格着色器350之间传输相对大量的数据(例如,超过16kb)。

在操作中,用户应用程序190动态地分配应用程序管理的存储器720的一部分以存储应用数据缓冲器760。如图所示,应用数据缓冲器760包括引用计数762。在可选实施例中,引用计数762可以存储在用户应用程序190可访问的任何存储器中。当任务着色器650生成任务着色器输出660时,任务着色器660指定通用数据662中的缓冲器地址712。缓冲器地址712指定应用数据缓冲器760的地址并因此可用于定位应用数据缓冲器760。任务着色器650还将引用计数762初始化为网格着色器计数314。

如结合图6所描述的,作为生成网格着色器输入670的一部分,网格着色器生成器330将通用数据662从任务着色器输出660复制到网格着色器输入670。因此,网格着色器350可以经由缓冲地址712访问应用数据缓冲器760。在网格着色器350完成从应用数据缓冲器760读取数据之后,网格着色器350以原子方式(例如,使用原子指令)递减引用计数762。在由任务着色器650调用的所有网格着色器350已经完成执行之后,引用计数762等于零。在检测到引用计数762等于零时,用户应用程序190释放应用数据缓冲器760。

图8a-8b阐述了根据本发明的各种实施例的用于经由扩展图形处理管线处理图像数据的方法步骤的流程图。尽管结合图1-3a、6和7的系统描述了方法步骤,但是本领域技术人员将理解,被配置为以任何顺序执行方法步骤的任何系统都落入本发明的范围内。

如图所示,方法800开始于步骤802,其中任务着色器生成器630接收任务着色器线程计数612和任务着色器计数614。在步骤804,任务着色器生成器630生成任务着色器id640。任务着色器id640是范围从0到n-1(包括)的连续整数,其中n是任务着色器计数614。任务着色器生成器630然后选择第一任务着色器id640。

在步骤806,任务着色器生成器630调用与所选任务着色器id640相关联的任务着色器650。更具体地,任务着色器生成器630将所选任务着色器id640提供给一线程组并配置该线程组以协作地执行任务着色程序194。该线程组中的线程的总数等于任务着色器线程计数612。当调用任务着色器650时,根据任务着色程序194,任务着色器650将关联的共享任务缓冲器652分配到片上存储器中。

在步骤810,根据线程着色程序194,任务着色器650生成任务着色器输出660。任务着色器输出660指定网格着色器计数314并存储在片上存储器中。在生成任务着色器输出660之后,任务着色器650终止并且释放关联的共享任务缓冲器652。在步骤812,网格着色器生成器330从任务着色器650接收任务着色器输出660,并从用户应用程序190接收网格着色器线程计数312。

在步骤814,网格着色器生成器330基于任务着色器输出660生成网格着色器输入670。网格着色器输入670的总数等于网格着色器计数314。除了不同的网格着色器id340之外,每个网格着色器输入670还包括在任务着色器输出660中指定的数据。网格着色器id340是范围从0到m-1(包括)的连续整数,其中m是网格着色器计数314。

在步骤816,网格着色器生成器330调用网格着色器350,其中网格着色器350的总数等于网格着色器计数314。为了调用每个网格着色器350,网格着色器生成器330向不同的线程组提供不同的网格着色器输入670,并配置线程组以协作地执行网格着色程序192。每个线程组中的线程的总数等于网格着色器线程计数312。根据网格着色程序192,在网格着色器350(i)被调用时,网格着色器350(i)将共享网格单元缓冲器352(i)分配到片上存储器中。

在步骤818,对于每个网格着色器350,包括网格着色器350的线程基于网格着色器id340协作地读取并处理网格着色器输入670。在步骤820,每个网格着色器350结束写入关联的网格单元360并终止。值得注意的是,每个网格单元360存储在片上存储器中并且在关联网格着色器350终止之后持续存在。相反,当给定网格着色器350终止时,释放相关联的共享网格单元缓冲器352。

在步骤822,任务着色器生成器630确定所选择的任务id640是否是最后的任务id640。如果在步骤822,任务着色器生成器630确定所选择的任务id640不是最后的任务id,则方法800进行到步骤824。在步骤824,任务着色器生成器630选择下一个任务id640,并且方法800返回到步骤806,其中任务着色器生成器630调用另一个任务着色器650。

然而,如果在步骤822,任务着色器生成器630确定所选择的任务id640是最后的任务id640,则方法800直接进行到步骤826。在步骤826,图形处理管线320中的后续单元读取并处理网格单元360以生成从输入网格导出的渲染图像。

如本领域技术人员将认识到的,每个任务着色器660可以与其他任务着色器660同时、顺序或其任何组合执行。因此,在任何给定时间,任意数量的任务着色器660可以基本上与任意数量的其他任务着色器660并行地独立执行方法步骤808-810。如本文所述,当并行处理器202基于任务着色器程序194和两个或更多个任务着色器标识符640执行不同操作时,两个或更多个任务着色器660“基本上并行地”执行,并且不同操作的至少一部分在时间上部分地或完全地重叠。

然而,如结合图6所描述的,任务着色器id640定义由图形处理管线320中的后续单元维护的任务着色器输出660的处理顺序。此外,图形处理管线中的后续单元可以在生成其他网格单元360之前、期间或之后处理网格单元360,并且相应地修改方法步骤822-826。

去重索引缓冲器

图9a-9b示出了根据本发明的各种实施例的图1的去重应用182如何生成着色器批处理990。在传统的图形处理管线中,图元分配器基于索引缓冲器940生成批量工作,索引缓冲器940指定构成多个图形基元的顶点。每批工作表示索引缓冲器940的不同部分,并由包括在传统图形处理管线中的后续可编程单元处理。

为了减少存储索引缓冲器940所需的内存,图元分配器通常在形成批量工作时执行传输中(on-the-fly)去重操作。图元分配器不是存储相同顶点标识符的多个副本,而是生成包括唯一顶点标识符的顶点缓冲器992,以及引用顶点缓冲器992中的条目的间接索引缓冲器994。例如,如果索引缓冲器940包含顶点标识符576、324、129、129、324、23,则顶点缓冲器992将包含顶点标识符576、324、129、23,并且间接索引缓冲器994将包含间接索引0、1、2、2、1、3。

在图形处理管线320的一些实施例中,网格着色程序192可以基于网格着色器id340为每个网格着色器350定义工作的着色器批处理990。类似地,在扩展图形处理管线620的一些实施例中,任务着色程序194可以基于任务着色器id640为每个任务着色器650定义着色器批处理990。着色器批处理990中的每一个与索引缓冲器940的不同部分相关联。

为了减少存储着色器批处理990所需的内存,计算机系统100包括去重应用程序182。通常,去重应用程序182对索引缓冲器940执行去重操作以生成优化的着色器批处理990。值得注意的是,去重应用程序182基于在pp202上执行的match.any(匹配任何)指令920执行去重操作。在可选实施例中,去重应用程序182可以基于任何技术上可行方式的任何指令或任何匹配算法来执行去重操作。

通常,match.any指令920对与线程组中包括的每个线程910相关联(即,加载到其中)的值执行比较操作。对于通过输入谓词(inputpredicate)912指定的每个线程910,match.any920执行与其他线程910的穷举比较操作并生成匹配掩码930。对于每个谓词(predicated)线程910(x),如果包括在匹配掩码930(x)中的前导索引位于比特x处,则与线程910(x)相关联的值不由任何线程910(y)指定,其中y小于x。因此,一组唯一值由一组线程910(x)指定,其具有包括在匹配掩码930(x)中的位于比特x处的前导索引。对于非谓词(non-predicated)线程910,match.any指令920不执行穷举比较操作并且不生成匹配掩码930。然而,对于每个非谓词线程910(x),match.any指令920在非谓词线程910(x)和谓词线程910之间执行穷举比较操作。在可选实施例中,match.any指令920不支持输入谓词912,并且match.any指令920执行线程组中包括的所有线程910之间的穷举比较并生成线程组中包括的所有线程910的匹配掩码930。

match.any指令920操作的线程组的大小随pp202的实现而变化。例如,在一些实施例中,match.any指令920可以对包括32个线程910的线程组进行操作。在可选实施例中,match.any指令930操作的线程910的数量可以基于硬件能力、软件能力、用户偏好等而变化。

仅出于解释的目的,图9a描绘了match.any指令920在包括线程910(7)-910(0)的线程组上的示例性执行。线程910(7)-910(0)分别指定值137、423、137、53、423、9、97和53。输入谓词912指定线程910(5)-910(0)。仅出于解释的目的,非谓词线程910被描绘为填充框。基于所得到的匹配掩码930,包括在谓词线程910中的唯一值是53、9和97。

仅出于解释的目的,图9b描绘了将索引缓冲器940转换为着色器批处理990作为一系列编号气泡所涉及的一系列事件。图9b中所示的match.any指令920在包括4个线程910的线程组上操作并且支持输入谓词912。着色器批处理990遵循批处理约束,每个着色器批处理990包括最多4个顶点和最多4个图形基元。与输入缓冲器940相关联的图元类型是三角形942,其中每个三角形942在索引缓冲器940中表示为三个顶点。

在一些实施例中,match.any指令920可以跨线程组操作,所述线程组包含除4之外的多个线程。在相同或其他实施例中,match.any指令920可能不支持输入谓词912。在一些可选实施例中,去重应用程序182基于除match.any指令920之外的指令执行去重操作。在各种实施例中,与着色器批处理990相关联的约束的数量和类型可基于硬件能力、软件能力、用户偏好等而变化。

在接收到索引缓冲器940时,去重应用程序182识别包括线程组的线程910(3)-910(0),并生成空顶点缓冲器992和空间接索引缓冲器994。如编号为1的气泡所示,去重应用程序182执行加载操作945(1),其将顶点从索引缓冲器940加载到线程910(3)-910(0)中。更具体地,去重应用程序182将索引缓冲器940中指定的四个最左侧顶点123、457、789和123分别加载到线程910(3)、910(2)、910(1)和910(0)。

如编号为2的气泡所示,去重应用程序182然后基于match.any指令920跨线程910(3)-910(0)执行匹配操作950(1),其中所有线程910(3)-910(0)在输入谓词912中指定。在执行匹配操作950(1)之后,线程910(3)-910(0)的值指定与包括在索引缓冲器940中的最左边的四个顶点相关联的间接索引。更具体地,为了使线程910(3)-910(0)指定间接索引,去重应用程序182应用match.any指令920,然后在结果掩码中找到前导索引。如图所示,线程910(3)-910(0)的值是0、1、2、0,表明包括在索引缓冲器940中的四个最左侧顶点包括三个独特顶点。

随后,如编号为3的气泡所示,去重应用程序182执行更新顶点缓冲器992和间接索引缓冲器994的映射操作960(1)。为了更新顶点缓冲器994,去重应用程序182将三个新识别的独特顶点附加至顶点缓冲器992。为了更新间接索引缓冲器994,去重应用程序182将新识别的间接索引附加至间接索引缓冲器994。

如编号为4的气泡所示,然后去重应用程序182执行压缩操作970(1),其将独特顶点的间接索引合并到线程910中,其对应于匹配掩码930中的最高位比特。作为压缩操作970(1)的一部分,去重应用程序182选择与独特顶点不关联的线程910,并设置输入谓词912以指定所选择的线程910。仅出于解释的目的,未选择的线程910被描绘为填充框。

尽管未示出,然后去重应用程序182基于批处理约束确定着色器批处理990尚未满。具体地,去重应用程序182确定在顶点缓冲器992中指定的独特顶点的数量小于4,并且在间接索引缓冲器994中指定的图形基元的数量小于4。

因此,去重应用程序182迭代地重复加载操作945、匹配操作950、映射操作960和压缩操作970。如编号为5的气泡所示,去重应用程序182执行加载操作945(2)。对于未选择的线程910(3)-910(1),去重应用程序182加载在顶点缓冲器992中指定的顶点。相反,对于所选择的线程910(0),去重应用程序182加载在索引缓冲器940中指定的第一个未处理顶点(789)。

如气泡编号6所示,然后去重应用程序182基于match.any指令920跨线程910(3)-910(0)执行匹配操作950(2),其中线程910(0)经由输入谓词912进行断言。如粗框所示,匹配操作950(2)的结果是间接索引2,指示顶点789是先前识别的独特顶点的副本。

随后,如气泡编号7所示,去重应用程序182执行映射操作960(2),其将新识别的间接索引2附加到间接索引缓冲器994。通常,作为映射操作960的一部分,去重应用程序182还将任何新识别的独特顶点附加到顶点缓冲器992。然而,因为没有新识别的独特顶点,所以去重应用程序182不修改顶点缓冲器992。

如编号为8的气泡所示,然后去重应用程序182执行压缩操作970(2),其将独特索引合并到线程910中,其对应于匹配掩码930中的最高位比特。作为压缩操作970(2)的一部分,去重应用程序182选择与独特顶点不关联的线程910,并设置输入谓词912以指定所选择的线程910。

尽管未示出,去重应用程序182然后基于批处理约束确定着色器批处理990尚未满。具体地,去重应用程序182确定在顶点缓冲器992中指定的独特顶点的数量小于4,并且在间接索引缓冲器994中指定的图形基元的数量小于4。

因此,如编号为9、10、11和12的气泡所示,去重应用程序182迭代地重复加载945、匹配950、映射操作960和压缩操作970。随后,因为在顶点缓冲器992中指定的独特顶点的数量大于4,因此去重应用程序182确定着色器批处理990已满。

如编号为13的气泡所示,去重应用程序182然后执行生成着色器批处理990的批处理操作980(1)。着色器批处理990包括但不限于顶点缓冲器992和间接索引缓冲器994。去重应用程序182然后重复包括加载操作945(3)、匹配操作950(3)、映射操作960(3)和压缩操作970(3)的迭代过程以生成新的着色器批处理990,直到去重应用程序182已经完成处理索引缓冲器940。

注意,本文描述的技术是说明性的而非限制性的,并且可以在不脱离本发明的更广泛的精神和范围的情况下进行改变。在不脱离所描述的实施例的范围和精神的情况下,对去重应用程序182和match.any指令920提供的功能的许多修改和变化对于本领域普通技术人员将是显而易见的。例如,在一些可选实施例中,去重应用程序182可以生成着色器批处理,其包括间接索引缓冲器994的偏移量而不是间接索引缓冲器994和顶点缓冲器990的偏移量。偏移量指定与着色器批处理990相关联的索引缓冲器940的部分的开始。在这样的实施例中,间接索引缓冲器994和顶点缓冲器992可以在任何数量的着色器批处理990之间共享。

在可选实施例中,去重应用程序182实现非迭代算法以基于任意数量的非谓词match.any指令920生成着色器批处理990。在操作中,去重应用程序182选择m个大小为t的线程组,并且将(m*t)个顶点的值从索引缓冲器加载到(m*t)个线程910。去重应用程序182然后执行m个match.any指令920,其中每个match.any指令920对不同的线程组进行操作。随后,对于每个match.any指令920,去重应用程序182基于所得到的匹配掩码930识别一组独特顶点。

在识别m组独特顶点之后,去重应用程序182比较m组独特顶点中指定的顶点总数和相关联的图形基元的数量,以确定是否满足批处理约束。如果满足批处理约束,则去重应用程序182基于m组独特顶点生成单个着色器批处理990。然而,如果不满足批处理约束,则去重应用程序182对m组独特顶点进行分区以生成多个着色器批处理990,其中每个着色器批处理990满足批处理约束。去重应用程序182以这种方式继续,直到去重应用程序182处理了索引缓冲器940中指定的所有顶点。

有利地,在去重应用程序182生成着色器批处理990之后,着色器批处理990可用于渲染从输入网格导出的帧,直到输入网格的拓扑发生变化。在各种实施例中,用户应用程序190在渲染每个帧之前确定输入网格的拓扑是否已经改变。如果输入网格的拓扑没有改变,则应用程序190重新使用着色器批处理990。然而,如果输入网格的拓扑已经改变,则应用程序190重新执行去重应用程序192以生成新的着色器批处理990。相比之下,作为渲染每个帧的一部分,图元分配器重新执行去重操作并重新生成批量工作,而不管输入网格的拓扑是否发生变化。

图10a-10b示出了根据本发明的各种实施例的用于在图形处理管线中使用的针对预处理索引缓冲器的方法步骤的流程图。尽管结合图1-3b和9的系统描述了方法步骤,但是本领域技术人员将理解,被配置为以任何顺序执行方法步骤的任何系统都落入本发明的范围内。

如图所示,方法1000开始于步骤1002,其中去重应用程序182接收索引缓冲器940,生成空顶点缓冲器992和空间接索引缓冲器994,并选择包括在一个或更多个线程组中的线程910。注意,每个线程组中包括的线程910的数量与match.any指令920操作的线程的数量相匹配。如果去重应用程序182实现迭代去重算法,则去重算法182通常选择包括在一个线程组中的线程910。相反,如果去重应用程序182实现非迭代去重算法,则去重算法182通常选择包括在多个线程组(例如,三个线程组)中的线程910,以降低任何着色器批处理990未被填充的可能性。

在步骤1004,对于每个所选线程,去重应用程序182加载在索引缓冲器940中指定的未处理顶点。在步骤1006,对于每个线程组,去重应用程序182基于match.any指令920跨所选择的线程执行匹配操作950,其中在输入谓词912中指定所选线程。对于每个线程组,然后去重应用程序182将新识别的独特顶点附加到顶点缓冲器992。在步骤1008,对于每个所选线程910,去重应用程序182将对应的间接索引附加到间接索引缓冲器994。

在步骤1010,去重应用程序182确定去重应用程序182是否正在执行迭代去重算法。在步骤1010,如果去重应用程序182确定去重应用程序182正在执行迭代去重算法,则方法1000前进到步骤1012。

在步骤1012,去重应用程序182跨线程组执行压缩970操作。压缩970操作将独特顶点的间接索引合并到线程910中,其对应于匹配掩码930中的最高位比特。作为执行压缩操作970的一部分,去重应用程序182选择与独特顶点不关联的线程910,并设置输入谓词912以指定所选择的线程910。

在步骤1014,去重应用程序182评估批处理约束以确定批处理是否已满。如果在步骤1014,去重应用程序182确定批处理未满,则方法100返回到步骤1004,其中去重应用程序182将未处理的顶点从索引缓冲器加载到所选择的线程1010中。然而,在步骤1014,如果去重应用程序182确定批处理已满,然后方法1000前进到步骤1016。

现在返回步骤1010,如果去重应用程序182确定去重应用程序182并未执行迭代去重算法,则方法1000直接进行到步骤1016。在步骤1016,去重应用程序182基于顶点缓冲器992和间接索引缓冲器994生成一个或更多个网格着色器批处理990。

在步骤1018,去重应用程序182确定索引缓冲器910是否包括任何未处理的顶点。如果在步骤1018,去重应用程序182确定索引缓冲器910包括未处理的顶点,则方法1000前进到步骤1020。在步骤1020,去重应用程序182选择线程组中包括的所有线程910,并生成空顶点缓冲器992和空间接索引缓冲器994。然后,方法1000返回到步骤1004,其中去重应用程序182将未处理的顶点从索引缓冲器940加载到所选择的线程910中。

然而,如果在步骤1018,去重应用程序182确定索引缓冲器910不包括任何未处理的顶点,则方法1000直接进行到步骤1022。在步骤1022,图形处理管线320或扩展图形处理管线620生成从与输入缓冲器940相关联的输入网格导出的渲染图像帧,直到输入网格的拓扑改变为止。然后方法1000终止。

总之,在各种实施例中,将网格单元引入图形处理管线中以提供更灵活的方式来构造和处理由管线的开始阶段中的不同线程组生成的图形数据。为了实现网格单元,图形处理管线包括固定功能硬件网格着色器生成器和任意数量的可编程网格着色器,其替换传统图形处理管线中包括的图元分配器、顶点着色单元和几何着色单元。每个网格着色器包括不同的协作线程组,其负责处理输入网格中包括的不同顶点集合以生成对应的网格单元。

在操作中,用户应用程序指定包括网格着色器的线程组中包括的线程的数量和网格着色器的总数。网格着色器生成器为每个线程组指派不同的网格标识符,并通过关联的线程组执行网格着色程序。更具体地,如由网格着色程序所指定的,每个线程组基于所指派的网格标识符对帧缓冲器执行读取操作,以确定线程组负责的顶点集合。值得注意的是,线程组中包括的线程的数量不一定等于顶点集合中包括的顶点的数量。此外,线程组中包括的每个线程可以与线程组中的其他线程通信。如由网格着色程序所指定的,然后线程组对该顶点集合执行一个或更多个变换操作以生成关联的网格单元。随后,包括在图形处理管线中的后续处理单元访问不同的网格单元以执行图形处理、通用处理和/或计算操作以生成最终输出数据。

各种实施例实现扩展图形处理管线,其包括固定功能任务着色器生成器和在固定功能网格单元生成器之前执行的任何数量的可编程任务着色器。在操作中,用户应用程序指定协作线程组(包括任务着色器)中包括的线程的数量和任务着色器的总数。任务着色器生成器为每个线程组指派不同的任务标识符,并通过关联的线程组执行任务着色程序。每个任务着色器生成一个不同的任务输出,其至少指定网格着色器的总数。对于每个任务输出,网格着色器生成器根据指定不同网格着色器标识符的任务输出的副本配置网格着色器的总数。每个网格着色器基于任务输出生成不同的网格单元。任务着色器生成器、任务着色器、网格着色器生成器和网格着色器一起替换传统图形处理管线中包含的图元分配器、顶点着色器、外壳着色单元、曲面细分器、域着色单元和几何着色单元。

在各种实施例中,为了改善图形处理管线的性能,用户应用程序执行去重应用程序,该去重应用程序预处理与输入网格相关联的索引缓冲器。索引缓冲器基于顶点定义图形基元。对于每个网格着色器,去重应用程序通过在并行处理器上执行的匹配指令识别包含在索引缓冲器中的一组独特顶点。然后,去重应用程序生成顶点缓冲器,该顶点缓冲器仅包含一组独特顶点。顶点缓冲器定义网格着色器负责的顶点。以互补的方式,对于每个顶点缓冲器,去重应用程序生成相应的间接索引缓冲器,其引用顶点缓冲器中的条目以定义与网格着色器相关联的图形基元。对于每个帧,如果输入网格缓冲器的拓扑没有改变,则网格着色器重新使用顶点缓冲器和图元缓冲器。但是,如果输入网格的拓扑确实发生了变化,则用户应用程序会重新执行去重应用程序以预处理新的索引缓冲器。

有利地,因为包括网格着色器的图形处理管线不包括图元分配器,所以图形处理管线的吞吐量基于存储器带宽和/或支持图形管线的流式多处理器的数量而缩放。此外,因为网格着色器可以以协作方式处理多个顶点,所以图形处理管线可以被编程为相对于传统图形处理管线更早且更有效地执行某些操作(例如,图元剔除操作)。最后,用户应用程序可以在索引缓冲器上执行去重应用程序,以生成网格着色器可以重复使用的顶点缓冲器和间接索引缓冲器,直到输入网格的拓扑发生变化。通常,输入网格的拓扑不经常变化。因此,顶点缓冲器和间接索引缓冲器的重复使用消除了重复的去重操作,这些操作在传统的图形处理管线中浪费了处理资源和能源两者。

1.在一些实施例中,一种用于处理图像数据的方法,包括使第一多个执行线程对输入网格执行任务着色程序,以生成指定第一网格着色器计数的第一任务着色器输出;生成第一多个网格着色器标识符,其中包括在第一多个网格着色器标识符中的网格着色器标识符的总数等于所述第一网格着色器计数;对于包括在所述第一多个网格着色器标识符中的每个网格着色器标识符,基于所述网格着色器标识符和所述第一任务着色器输出调用网格着色器以生成与所述网格着色器标识符相关联的几何形状;以及对与所述第一多个网格着色器标识符相关联的所述几何形状执行一个或更多个操作以生成第一渲染图像。

2.如条款1所述的方法,其中,所述任务着色程序指定要对所述输入网格执行的一个或更多个曲面细分操作。

3.如条款1或2所述的方法,其中,使所述第一多个执行线程执行所述任务着色程序包括提供与所述输入网格的第一部分相关联的第一任务标识符作为所述任务着色程序的输入。

4.如条款1-3中任一项所述的方法,其中,当所述第一任务标识符被输入到所述任务着色程序中时,所述第一多个执行线程基于所述第一任务标识符确定第一细节级别(lod)并基于所述第一lod计算所述第一网格着色器计数。

5.如条款1-4中任一项所述的方法,其中,使所述第一多个执行线程执行所述任务着色程序包括:基于所述输入网格生成应用数据缓冲器;将所述应用数据缓冲器存储在第一存储器中;以及将第一网格着色器计数和与所述应用数据缓冲器相关联的地址存储在片上存储器中作为所述第一任务着色器输出的至少一部分。

6.如条款1-5中任一项所述的方法,还包括:将包括在所述应用数据缓冲器中的引用计数设置为等于所述第一网格着色器计数。

7.如条款1-6中任一项所述的方法,其中基于所述网格着色器标识符和所述第一任务着色器调用所述网格着色器包括:从所述片上存储器读取与所述应用数据缓冲器相关联的所述地址;基于与所述应用数据缓冲器相关联的所述地址和所述网格着色器标识符访问包括在所述应用数据缓冲器中的数据,以生成与所述网格着色器标识符相关联的几何形状;以及递减存储在所述应用数据缓冲器中的所述引用计数。

8.如条款1-7中任一项所述的方法,其中,当执行所述任务着色程序时,所述第一多个执行线程对包括在所述输入网格中的第一多个顶点执行一个或更多个变换操作,并且包括在所述第一多个执行线程中的执行线程的数量不等于包括在所述第一多个顶点中的顶点的数量。

9.如条款1-8中任一项所述的方法,其中基于所述网格着色器标识符和所述第一任务着色器输出来调用所述网格着色器包括:修改所述第一任务着色器输出以生成指定所述网格着色器标识符的网格着色器输入;将所述网格着色器输入存储在片上存储器中;以及随后使第二多个执行线程基于所述网格着色器输入执行网格着色程序,并生成与所述网格着色器标识符相关联的几何形状。

10.如条款1-9中任一项所述的方法,其中,当执行所述网格着色程序时,所述第二多个执行线程对包括在所述输入网格中的第一多个图形基元执行一个或更多个变换操作,并且包括在所述第二多个执行线程中的执行线程的数量不等于包括在所述第一多个图形基元中的图形基元的数量。

11.在一些实施例中,一种系统包括:存储任务着色程序的片外存储器;以及并行处理器,其:使第一多个执行线程对输入网格执行所述任务着色程序,以生成指定第一网格着色器计数的第一任务着色器输出;生成第一多个网格着色器标识符,其中包括在所述第一多个网格着色器标识符中的网格着色器标识符的总数等于所述第一网格着色器计数;对于包括在所述第一多个网格着色器标识符中的每个网格着色器标识符,基于所述网格着色器标识符和所述第一任务着色器输出调用网格着色器以生成与所述网格着色器标识符相关联的几何形状,其中所述几何形状存储在片上存储器中;以及对与所述第一多个网格着色器标识符相关联的所述几何形状执行一个或更多个操作,以生成第一渲染图像。

12.如条款11所述的系统,其中,所述任务着色程序指定要对所述输入网格执行的一个或更多个曲面细分操作。

13.如条款11或12所述的系统,其中,使所述第一多个执行线程执行所述任务着色程序包括:提供与所述输入网格的第一部分相关联的第一任务标识符作为所述任务着色程序的输入。

14.如条款11-13中任一项所述的系统,其中,所述处理器使所述第一多个执行线程通过以下步骤执行所述任务着色程序:基于所述输入网格生成应用数据缓冲器;将所述应用数据缓冲器存储在片外存储器中;以及将所述第一网格着色器计数和与所述应用数据缓冲器相关联的地址存储在所述片上存储器中作为所述第一任务着色器输出的至少一部分。

15.如条款11-14中任一项所述的系统,其中,所述处理器将包括在所述应用数据缓冲器中的引用计数设置为等于所述第一网格着色器计数。

16.如条款11-15中任一项所述的系统,其中所述处理器基于所述网格着色器标识符和所述第一任务着色器通过以下步骤调用所述网格着色器:从所述片上存储器读取与所述应用数据缓冲器相关联的所述地址;基于与所述应用数据缓冲器相关联的所述地址和所述网格着色器标识符访问包括在所述应用数据缓冲器中的数据,以生成与所述网格着色器标识符相关联的所述几何形状;以及递减存储在所述应用数据缓冲器中的所述引用计数。

17.如条款11-16中任一项所述的系统,其中,当执行所述任务着色程序时,所述第一多个执行线程对包括在所述输入网格中的第一多个顶点执行一个或更多个变换操作,并且包括在所述第一多个执行线程中的执行线程的数量不等于所述第一多个顶点中包括的顶点的数量。

18.如条款11-17中任一项所述的系统,其中所述处理器基于所述网格着色器标识符和所述第一任务着色器输出通过以下步骤来调用所述网格着色器:修改所述第一任务着色器输出以生成指定所述网格着色器标识符的网格着色器输入;将所述网格着色器输入存储在片上存储器中;以及随后使第二多个执行线程基于所述网格着色器输入执行网格着色程序,以生成与所述网格着色器标识符相关联的所述几何形状。

19.如条款11-18中任一项所述的系统,其中,所述处理器通过将所述网格着色器输入作为输入提供至所述网格着色程序,使所述第二多个执行线程执行所述网格着色程序。

20.在一些实施例中,一种用于处理图像数据的方法包括:使第一多个执行线程对输入网格执行任务着色程序,以生成指定第一网格着色器计数的第一任务着色器输出,其中所述第一任务着色器输出与第一任务着色器标识符相关联;生成第一多个网格着色器标识符,其中包括在所述第一多个网格着色器标识符中的网格着色器标识符的总数等于所述第一网格着色器计数;对于包括在所述第一多个网格着色器标识符中的每个网格着色器标识符,基于所述网格着色器标识符和所述第一任务着色器输出调用网格着色器,以生成与所述网格着色器标识符相关联的几何形状;基于所述第一多个网格着色器标识符和所述第一任务着色器标识符确定处理顺序;以及基于所述处理顺序对与所述第一多个网格着色器标识符相关联的所述几何形状执行一个或更多个光栅化操作以生成第一渲染图像。

本申请中描述的任何权利要求和/或任何要素中描述的任何权利要求的要素的任何一个和所有组合,以任何方式落入本发明的预期范围和保护范围内。

已经出于说明的目的呈现了各种实施例的描述,但是并不旨在穷举或限制于所公开的实施例。在不脱离所描述的实施例的范围和精神的情况下,许多修改和变化对于本领域普通技术人员来说是显而易见的。例如,本文描述的各种实施例可以在云计算环境中实现,在用于游戏、图形、视频流等目的的一个或更多个服务器内实现,或者在任何车辆导航、信息娱乐或仪表板控制器系统(例如,在汽车中发现)内实现。nvidiageforce是网络游戏服务的示例,其可以利用各种实施例来增强性能和整体用户体验。各种实施例还可以在配置用于虚拟现实应用或者用于生成用于立体显示的输出的任何系统或机器中实现。

本实施例的各方面可以体现为系统、方法或计算机程序产品。因此,本公开的各方面可以采取完全硬件实施例、完全软件实施例(包括固件、驻留软件、微代码等)的形式或者组合软件和硬件方面的实施例,其通常在本文中被称为“模块”或“系统”。此外,本公开的各方面可以采用体现在一个或更多个计算机可读介质中的计算机程序产品的形式,该计算机可读介质具有包含在其上的计算机可读程序代码。

可以使用一个或更多个计算机可读介质的任何组合。计算机可读介质可以是计算机可读信号介质或计算机可读存储介质。计算机可读存储介质可以是,例如,但不限于电、磁、光、电磁、红外或半导体系统、装置或设备,或者前述的任何合适的组合。计算机可读存储介质的更具体示例(非详尽列出)将包括以下内容:具有一条或更多条电线的电连接、便携式计算机磁盘、硬盘、随机存取存储器(ram)、只读存储器(rom)、可擦除可编程只读存储器(eprom或闪存)、光纤、便携式光盘只读存储器(cd-rom)、光存储设备、磁存储设备或任何上述的适当组合。在本文件的上下文中,计算机可读存储介质可以是任何有形介质,其可以包含或存储程序以供指令执行系统、装置或设备使用或与其结合使用。

以上参考根据本公开的实施例的方法、装置(系统)和计算机程序产品的流程图图示和/或框图描述了本公开的各方面。将理解,流程图图示和/或框图的每个框以及流程图图示和/或框图中的框的组合可以由计算机程序指令实现。可以将这些计算机程序指令提供给通用计算机、专用计算机或其他可编程数据处理装置的处理器以产生机器。所述指令当通过计算机的处理器或其他可编程数据处理装置执行时,使得能够实现在一个或更多个流程图和/或框图块中指定的功能/动作。这些处理器可以是但不限于通用处理器、专用处理器、特定应用程序处理器或现场可编程门阵列。

附图中的流程图和框图示出了根据本公开的各种实施例的系统、方法和计算机程序产品的可能实现的架构、功能和操作。在这方面,流程图或框图中的每个框可以表示模块、片段或部分代码,其包括用于实现指定的一个或更多个逻辑功能的一个或更多个可执行指令。还应注意,在一些可选实施方式中,框中提到的功能可以不按图中所示的顺序发生。例如,连续示出的两个框实际上可以基本上同时执行,或者这些框有时可以以相反的顺序执行,这取决于所涉及的功能。还应注意,框图和/或流程图说明的每个框以及框图和/或流程图说明中的框的组合可以由执行特定功能或动作的基于专用硬件的系统或专用硬件和计算机指令的组合来实现。

虽然前述内容针对本公开的实施例,但是可以在不脱离本公开的基本范围的情况下设计本公开的其他和进一步的实施例,并且本公开的范围由所附权利要求确定。

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