用于图形处理中的着色器程序执行技术的制作方法

文档序号:11161180阅读:323来源:国知局
用于图形处理中的着色器程序执行技术的制造方法与工艺

本发明涉及图形处理系统,且更确切地说,涉及在图形处理系统中执行着色器程序。



背景技术:

计算装置通常利用图形处理单元(GPU)以加速呈现用于显示的图形数据。此类计算装置可以包括例如计算机工作站、移动电话(例如,所谓的智能电话)、嵌入系统、个人计算机、平板计算机和视频游戏控制台。GPU通常执行图形处理管线,所述图形处理管线包括一起操作以执行图形处理命令的多个处理级。传统上,GPU包括固定功能图形处理管线,其中管道中的每个处理级是通过固定功能硬件(例如,作为硬连线以执行某一组专业化功能且无法执行用户可下载程序的硬件)实施的。

近年来,图形处理管线已经转移到可编程架构,其中管线中的一或多个处理级是可编程处理级并且通过一或多个可编程着色器单元实施。可编程着色器单元中的每一个可经配置以执行着色器程序。用户应用程序可以在可编程图形管线中规定待通过可编程处理级执行的着色器程序,由此在现今的GPU的使用中提供更高程度的灵活性。

随着图形处理技术的发展,图形处理管线变得更加精密并且不断增多的数目的不同类型的可编程处理级被添加到由主要图形应用程序编程接口(API)规定的标准图形处理管线。在GPU中通过有限的资源实施这些不同类型的可编程处理级可以带来相当大的挑战。



技术实现要素:

本发明描述了用于在图形处理单元(GPU)中执行着色器程序的技术。着色器程序可以指加载到GPU上并且通过GPU执行的程序,其中一或多个着色器单元包括于GPU中。GPU可以执行着色器程序的多个实例,其中着色器程序的实例中的每一个相对于不同数据项执行相同程序指令。实例数据项可以包括顶点、基元和像素。处理顶点的着色器程序通常经配置以针对通过着色器程序接收的输入顶点中的每一个产生单个输出顶点。然而,在一些实例中,本发明的技术可以执行一种着色器程序,所述着色器程序执行顶点着色器处理并且针对由着色器程序接收的每个输入顶点产生多个输出顶点。

执行一种执行顶点着色器处理并且针对由着色器程序接收的输入顶点中的每一个产生多个输出顶点的着色器程序相对于当着色器程序仅用来产生针对每个输入顶点的单个输出顶点时需要的数目的线程可以减少处理特定集合的输入顶点需要的线程的数目。减少用于处理顶点的线程的数目可以减少由GPU使用的处理资源和/或减少GPU的电力消耗。此外,允许执行顶点着色器处理的着色器程序产生针对每个输入顶点的多个输出顶点可以改进GPU的编程灵活性。以此方式,可以改进执行可编程顶点处理的GPU的性能、电力消耗和/或编程灵活性。

在一个实例中,本发明描述一种方法,所述方法包括通过图形处理器的着色器单元执行一种着色器程序,所述着色器程序执行顶点着色器处理并且针对由着色器程序接收的每个输入顶点产生多个输出顶点。

在另一个实例中,本发明描述一种包括图形处理单元(GPU)的装置,所述图形处理单元包括着色器单元,所述着色器单元经配置以执行一种着色器程序,所述着色器程序执行顶点着色器处理并且针对由着色器程序接收的每个输入顶点产生多个输出顶点。

在另一个实例中,本发明描述一种设备,所述设备包括图形处理器,所述图形处理器包括着色器单元。所述设备进一步包括用于通过图形处理器的着色器单元执行着色器程序的装置,所述着色器程序执行顶点着色器处理并且针对通过着色器程序接收的每个输入顶点产生多个输出顶点。

在另一个实例中,本发明描述一种存储指令的非暂时性计算机可读存储媒体,在通过一或多个处理器执行所述指令时使得一或多个处理器通过图形处理器的着色器单元执行一种着色器程序,所述着色器程序执行顶点着色器处理并且针对由着色器程序接收的每个输入顶点产生多个输出顶点。

在附图和以下描述中阐述本发明的一或多个实例的细节。本发明的其它特征、对象和优点将从所述描述和图式以及权利要求书中显而易见。

附图说明

图1是说明可以通过使用本发明的着色器程序执行技术实施的实例图形管线的概念图。

图2是可用于实施本发明的着色器程序执行技术的实例GPU的方块图。

图3是说明可以用于图2的GPU中的实例着色器单元的方块图。

图4是说明可以使用本发明的实例着色器程序执行技术处理的实例三角形条带的概念图。

图5是说明根据本发明可用于执行合并顶点/几何着色器程序的多个实例以用于处理图4中所示的三角形条带的实例线程配置的概念图。

图6是说明根据本发明与执行合并顶点/几何着色器程序相关联的实例处理流程的概念图。

图7说明根据本发明与执行合并顶点/几何着色器程序相关联的伪代码。

图8是说明可用于实施本发明的着色器程序执行技术的实例计算装置的方块图。

图9是说明根据本发明用于执行着色器程序的实例技术的流程图。

图10是说明根据本发明根据复制模式和非复制用于执行合并顶点/几何着色器程序的实例技术的流程图。

图11是根据本发明用于选择复制模式和非复制中的一个以用于执行合并顶点/几何着色器程序的实例技术的流程图。

具体实施方式

本发明描述了用于在图形处理单元(GPU)中执行着色器程序的技术。着色器程序可以指加载到GPU上并且通过GPU执行的程序,其中一或多个着色器单元包括于GPU中。GPU可以执行着色器程序的多个实例,其中着色器程序的实例中的每一个相对于不同数据项执行相同程序指令。实例数据项可以包括顶点、基元和像素。处理顶点的着色器程序通常经配置以针对通过着色器程序接收的输入顶点中的每一个产生单个输出顶点。然而,在一些实例中,本发明的技术可以执行一种着色器程序,所述着色器程序执行顶点着色器处理并且针对由着色器程序接收的每个输入顶点产生多个输出顶点。

执行一种执行顶点着色器处理并且针对由着色器程序接收的输入顶点中的每一个产生多个输出顶点的着色器程序相对于当着色器程序仅用来产生针对每个输入顶点的单个输出顶点时需要的数目的线程可以减少处理特定集合的输入顶点需要的线程的数目。减少用于处理顶点的线程的数目可以减少由GPU使用的处理资源和/或减少GPU的电力消耗。以此方式,可以改进执行可编程顶点处理的GPU的性能和/或电力消耗。

此外,允许执行顶点着色器处理的着色器程序产生针对每个输入顶点的多个输出顶点可以改进GPU的编程灵活性。通常,顶点着色器编程模型规定顶点着色器程序针对每个输入顶点被调用一次并且顶点着色器程序产生针对顶点着色器程序的每次调用的单个输出顶点。本发明的技术可用于实施将针对顶点着色器程序的每次调用产生的允许多个输出顶点的顶点着色器编程模型。以此方式,可以改进通过GPU执行的可编程顶点处理的灵活性。

在一些实例中,执行顶点着色器处理并且针对通过着色器程序接收的输入顶点中的每一个产生多个输出顶点的着色器程序可以是合并顶点/几何着色器程序。合并顶点/几何着色器程序可以指相对于基元相对于顶点和几何着色器处理可配置以执行顶点着色器处理的着色器程序。几何着色器程序通常经配置以接收输入基元并且响应于接收输入基元输出0或大于0的输出基元。因为由几何着色器程序产生的输出基元中的每一个可以包括一个以上顶点,所以如果合并顶点/几何着色器程序针对每个输入顶点仅产生单个输出顶点,那么合并顶点/几何着色器程序的多个实例可能需要针对基元中的每一个执行以便为基元执行几何着色器处理。然而,执行根据本发明的技术针对由着色器程序接收的每个顶点产生多个输出顶点的合并顶点/几何着色器程序在一些实例中可能允许针对基元中的每一个的几何着色器处理通过每个基元的合并顶点/几何着色器程序的单个实例执行。

允许几何着色器处理通过每个基元的合并顶点/几何着色器程序的单个实例执行可以相对于需要针对每个基元执行的合并顶点/几何着色器程序的多个实例的技术减少处理特定集合的基元需要的合并顶点/几何着色器程序的实例的数目。减少用于处理基元的合并顶点/几何着色器程序的实例的数目可以减少由GPU使用的处理资源、减少通过GPU执行的资源分配的数目和/或减少GPU所消耗的电力。以此方式,可以通过合并顶点/几何着色器程序改进执行可编程顶点着色和可编程几何着色的GPU的性能和/或电力消耗。

在一些实例中,用于执行着色器程序的技术可以包括使用非复制模式的执行来执行合并顶点/几何着色器程序。使用非复制模式的执行来执行合并顶点/几何着色器程序可以涉及将多个基元中的每一个分配到合并顶点/几何着色器程序的相应的实例以用于几何着色器处理,并且使得合并顶点/几何着色器程序的实例中的每一个通过对应于合并顶点/几何着色器程序的几何着色器程序输出M个顶点,其中M对应于针对每个基元产生的顶点的数目。根据本发明针对通过着色器程序接收的每个输入顶点产生多个输出顶点的合并顶点/几何着色器程序可以在根据非复制模式的执行来执行合并顶点/几何着色器程序时使用。

相比之下,用于执行合并顶点/几何着色器程序的复制模式的执行可以涉及分配待处理的基元中的每一个到合并顶点/几何着色器程序的N个实例,并且使得合并顶点/几何着色器程序的实例中的每一个输出单个顶点。在一些实例中,N可以等于对应于合并顶点/几何着色器程序的几何着色器程序所规定的最大输出顶点计数值。

用于执行合并顶点/几何着色器程序的非复制模式可以使用每个基元的合并顶点/几何着色器程序的一个实例来执行几何着色器处理,而用于执行合并顶点/几何着色器程序的复制模式可以使用每个基元的合并顶点/几何着色器程序的N个实例来执行几何着色器处理。因此,使用用于执行合并顶点/几何着色器程序的非复制模式可以相对于复制模式减少处理特定集合的基元需要的合并顶点/几何着色器程序的实例的数目。如上文已经论述的,减少用于处理基元的合并顶点/几何着色器程序的实例的数目可以减少由GPU所使用的处理资源、减少通过GPU执行的资源分配的数目和/或减少GPU所消耗的电力。以此方式,可以通过合并顶点/几何着色器程序改进执行可编程顶点着色和可编程几何着色的GPU的性能和/或电力消耗。

在其它实例中,用于在GPU中执行着色器程序的技术可以包括用于允许着色器单元在用于执行合并顶点/几何着色器程序的非复制模式与用于执行合并顶点/几何着色器程序的复制模式之间切换的技术。允许着色器单元在用于执行合并顶点/几何着色器程序的非复制模式与复制模式之间切换可以为图形处理器的用户提供额外的控制和/或灵活性以便选择根据特定处理需求定制的特定执行模式,比如(例如),性能需求、电力消耗需求等。

在额外实例中,用于执行着色器程序的技术可以包括用于在用于执行合并顶点/几何着色器程序的非复制模式与复制模式之间进行选择并且使得着色器单元根据所选定的着色器程序执行模式来执行合并顶点/几何着色器程序的技术。在一些实例中,用于在非复制模式与复制模式之间选择的技术可以基于存储与对应于合并顶点/几何着色器程序的几何着色器程序的一个应用程序编程接口(API)调用相关联的输出顶点所需要的存储空间的总量和/或基于对应于合并顶点/几何着色器程序的通过几何着色器程序执行的顶点放大的量在非复制模式与复制模式之间进行选择。

一般来说,用于在着色器单元中存储输出顶点的存储空间(例如,通用注册(GPR))的量可以是有限的。因为用于执行合并顶点/几何着色器程序的非复制模式允许多个顶点由合并顶点/几何着色器程序的实例中的每一个产生,所以存储用于非复制模式的输出顶点需要的存储空间的量可以大于复制模式需要的存储空间的量。如果包括于着色器单元中的存储空间的量并不足以存储用于待并行地执行的合并顶点/几何着色器程序的示例的给定集合的输出顶点,那么可能需要执行外部存储器存取,这可能会显著降低着色器单元的性能。

如上文所论述,用于执行合并顶点/几何着色器程序的非复制模式可以提供更好的性能和/或减小的电力消耗以用于并行地执行合并顶点/几何着色器程序的示例的给定集合。然而,如果与执行合并顶点/几何着色器程序的示例的集合相关联的输出顶点存储空间需求大于在着色器单元中可供使用的输出顶点存储空间的量,那么通过不复制几何着色器处理获得的性能和/或电力改进可能被由外部存储器存取引起的性能的减少超过。

因此,如果用于存储输出顶点的存储空间需求相对较小(例如,如果输出顶点存储空间需求小于或等于包含于着色器单元中的输出顶点存储空间的量),那么用于执行合并顶点/几何着色器程序的非复制模式可以提供更好的性能和/或减小的电力消耗。另一方面,如果用于存储输出顶点的存储空间需求相对较高(例如,如果,输出顶点存储空间需求大于包含于着色器单元中的输出顶点存储空间的量),那么用于执行合并顶点/几何着色器程序的复制模式可以提供更好的性能。

在基于存储与几何着色器程序的一个API调用相关联的输出顶点所需要的存储空间的总量和/或基于通过几何着色器执行的顶点放大的量在非复制模式与复制模式之间进行选择可以允许图形系统在存储输出顶点需要的存储空间的量相对较小时使用用于执行合并顶点/几何着色器程序的非复制模式,并且在存储输出顶点需要的空间的量相对较大时使用用于执行合并顶点/几何着色器程序的复制模式。以此方式,可以获得用于具有相对较小输出顶点存储装置需求的着色器程序的使用非复制模式的益处同时避免在着色器单元的存储空间不足以存储与着色器程序相关联的输出顶点的情况下与外部存储器存取相关联的性能缺点。

在其它实例中,用于执行着色器程序的技术可以包括用于产生针对合并顶点/几何着色器程序的编译代码的技术,其中编译代码包括使得着色器单元基于待用于执行着色器程序的模式的信息指示根据非复制模式或复制模式选择性地执行合并顶点/几何着色器程序的指令。将指令放置在用于能够选择性地执行任一模式的合并顶点/几何着色器程序的编译代码中可以允许着色器单元的处理模式发生改变而无需将新的着色器程序重新加载到着色器单元中。此外,将指令放置在用于能够选择性地执行任一模式的合并顶点/几何着色器程序的编译代码中也可以简化合并顶点/几何着色器程序的编译。

图1是说明可以通过使用本发明的着色器程序执行技术实施的实例图形管线10的概念图。在一些实例中,图形管线10可对应于DirectX(DX)10图形管线。在其它实例中,图形管线10可以对应于棋盘形布置停用的DX 11图形管线。

图形管线10经配置以将一或多个图形基元呈现为呈现目标。图形管线10包括资源块12、输入组装器14、顶点着色器16、几何着色器18、光栅化器20、像素着色器22和输出合并器24。

资源块12对应于由图形管线10中的管线级使用的一或多个存储器资源,比如(例如)一或多个纹理和/或一或多个缓冲器(例如,顶点缓冲器、帧缓冲器等)。图1中以直拐角所描绘的处理级表示固定功能处理级,且图1中以圆形拐角所描绘的处理级表示可编程处理级。举例来说,如图1中所示,输入组装器14、光栅化器20和输出合并器24是固定功能处理级,并且顶点着色器16、几何着色器18和像素着色器22是可编程处理级。

可编程处理级可以指其经配置以执行程序(例如,着色器程序)的处理级,所述程序由通过使用GPU的主机装置实施图形管线10的GPU限定、编译和/或加载到所述GPU上。在一些情况下,程序可以由在主机装置上执行并且通过在主机装置上执行的GPU驱动程序加载到GPU上的用户水平图形应用程序限定。固定功能处理级可以包括经配置以从主机装置接收和执行程序的硬件。包括于固定功能处理级中的硬件可以是硬连线的以执行某些功能。虽然包括于固定功能处理级中的硬件可以是可配置的,但是硬件的可配置性是基于一或多个控制信号的,这与基于程序(例如,着色器程序)的相反。

图形管线10中所示的可编程级中的每一个可经配置以执行特定类型的着色器程序。举例来说,顶点着色器16可经配置以执行顶点着色器程序,几何着色器18可经配置以执行几何着色器程序,并且像素着色器22可经配置以执行像素着色器程序。

实施图形管线10的GPU可以包括一或多个着色器单元,这些着色器单元经配置以执行不同类型的着色器程序。不同类型的着色器程序中的每一个可以在GPU的实施图形管线10的共用着色器单元上和/或在专用于执行一或多个特定类型的着色器程序的一或多个专用着色器单元上执行。

在一些实例中,顶点着色器程序和几何着色器程序可以合并到合并顶点/几何着色器程序中并且实施图形管线10的GPU中的着色器单元可以执行合并顶点/几何着色器程序,如稍后在本发明中进一步详述描述的。在此类实例中,着色器单元可以在一些实例中进一步经配置以在合并顶点/几何着色器程序并不在着色器单元上执行时将像素着色器程序作为单独程序执行。

现在将描述图形管线10的一般操作。图形管线10响应于接收指示一或多个待呈现的绘制调用命令和数据开始呈现基元的集合。指示待呈现的基元的数据可包括例如一或多个顶点缓冲器、一或多个指数缓冲器和/或指示待呈现的类型的基元的一或多个状态配置。在一些实例中,顶点缓冲器和/或指数缓冲器可以存储在资源块12中。

输入组装器14可以从资源块12中检索一或多个顶点、基于顶点形成几何形状(例如,基元),并且将顶点发布到顶点着色器16以用于进一步处理。输入组装器14也可以为顶点中的每一个产生一或多个系统产生值并且将所述系统产生值供应到顶点着色器16和/或几何着色器18。举例来说,输入组装器14可以产生唯一地识别特定绘制调用中的顶点中的每一个的顶点识别值并且将所述顶点识别值供应到顶点着色器16和/或几何着色器18。作为另一实例,输入组装器14可以产生唯一地识别特定绘制调用中的基元中的每一个的基元识别值,并且将基元识别值供应到几何着色器18。

顶点着色器16可以基于从输入组装器14接收的顶点且基于顶点着色器程序产生输出顶点。从编程的观点来看,为了产生输出顶点,顶点着色器16可以针对从输入组装器14接收的顶点中的每一个执行顶点着色器程序的相应的实例。在一些实例中,顶点着色器程序可以在输入顶点上执行每个顶点处理以产生输出顶点。每个顶点处理可以指独立地针对于被处理的顶点中的每一个执行的处理。每个顶点处理可包括例如执行顶点变换、执行照明操作、执行雾操作、执行顶点着色等。

几何着色器18可以基于通过几何着色器18接收的输入基元且基于几何着色器程序产生输出基元。通过几何着色器18接收的输入基元可以基于由顶点着色器16产生的输出顶点形成。从编程的角度,为了产生输出基元,几何着色器18可以执行几何着色器程序的相应的实例以用于通过几何着色器18接收的基元中的每一个。在一些实例中,几何着色器程序可以在输入基元上执行每个基元处理以产生输出基元。每个基元处理可以指独立地针对于被处理的基元中的每一个执行的处理。每个基元处理可包括例如添加或删除顶点、添加或删除由几何着色器18输出的用于每个输入基元的数目的基元等。

光栅化器20可以基于从几何着色器18接收的基元产生源像素。举例来说,对于从几何着色器18接收的基元中的每一个,光栅化器20可以光栅化基元以产生对应于基元的多个源像素。光栅化基元可以涉及例如在基元上执行扫描转换以基于基元的顶点的属性确定哪些像素对应于基元和/或用于对应于基元的像素的插入属性。

像素着色器22可以基于从光栅化器20接收的输入源像素像素且基于像素着色器程序产生输出源像素。从编程的角度,为了产生输出源像素,像素着色器22可以执行像素着色器程序的相应的实例以用于从光栅化器20接收的像素中的每一个。在一些实例中,像素着色器程序可以在输入源像素上执行每像素处理以产生输出源像素。每像素处理可以指独立地针对于被处理的像素中的每一个执行的处理。每像素处理可包括例如执行像素着色、执行纹理映射等。

输出合并器24可以基于从像素着色器22接收的源像素产生目的地像素。在一些实例中,输出合并器24可以合并从像素着色器22接收的源像素中的每一个与存储在呈现目标中的对应的目的地像素以产生对应的目的地像素的更新版本。如果目的地像素在呈现目标中具有与源像素的像素位置相同的像素位置,那么目的地像素可以对应于源像素。为了合并源像素与目的地像素,输出合并器24可以相对于待合并的源像素和目的地像素执行混合操作、合成操作和光栅操作中的一或多个。

所得目的地像素存储在呈现目标中,呈现目标在一些实例中,可以是帧缓冲器。呈现目标可以形成资源块12的一部分。存储在呈现目标中的数据可以对应于通过图形管线10接收的基元的光栅化的合成版本。

如上文所论述,从编程的角度(例如,从API的角度),顶点着色器程序通常针对每个传入顶点通过图形管线调用一次并且经配置以为每个调用产生一个输出顶点。像素着色器程序通常为每个传入像素调用一次并且经配置以为每个调用产生一个输出像素。几何着色器程序通常为每个传入基元(例如,点、线、三角形)调用一次,并且经配置以为每个调用产生零、一个、两个或大于两个输出基元。

图形管线10的可编程着色器级通常在GPU上通过一或多个着色器单元实施。着色器单元中的每一个可以包括并行执行用于特定着色器程序的多个线程的多个处理元件(例如,算术逻辑单元(ALU))。在一些情况下,着色器单元可以是单个指令、多个数据(SIMD)着色器单元,其中着色器单元中的处理元件中的每一个同时相对于不同数据执行着色器程序的相同指令。

时常,相同组的着色器单元可以实施包括于图形管线10中的多个不同类型的着色器级。在几何着色器的研发之前,图形呈现管线中的唯一的可编程处理级通常是顶点着色器和像素着色器。顶点着色器和像素着色器在单个输入/单个输出编程接口下操作,其中单个输入顶点或像素是针对每个着色器调用接收的并且单个输出顶点或像素是针对每个着色器调用产生的。针对顶点着色器和像素着色器这两者的单个输入/单个输出编程接口允许两种类型的着色器通过共用的单个输入/单个输出硬件接口在共用硬件着色器单元上执行。

然而,用于着色器单元的单个输入/单个输出硬件接口的一个缺点在于此类接口并不允许顶点着色器程序产生每调用的多个顶点。这限制了可以针对图形呈现API实施的顶点着色器编程模型的灵活性。

用于着色器单元的单个输入/单个输出硬件接口的另一缺点在于几何着色器并不符合此类接口。更确切地说,几何着色器经配置以针对通过几何着色器接收的每个输入基元输出任何数目的基元(在规定限制内),并且所述基元中的每一个可以包括任何数目的顶点。因此,几何着色器并不符合单个输入/单个输出编程接口。这使得通过顶点着色器和/或像素着色器在实施单个输入/单个输出硬件接口的共用硬件着色器单元上执行几何着色器是困难的。

解决几何着色器编程接口不符合单个输入/单个输出硬件接口的困难的一个解决方案是将顶点和几何着色器程序合并到单个合并顶点/几何着色器程序中并且执行合并顶点/几何着色器程序作为共用着色器线程的一部分。合并顶点/几何着色器程序可以包括顶点着色器功能,所述顶点着色器功能通过顶点着色器程序规定,随后是通过几何着色器程序规定的几何着色器功能。合并顶点/几何着色器程序可以进一步包括插入在顶点着色器功能与几何着色器功能之间的补丁代码以适当地管理由顶点着色器功能产生的输出数据项以及由几何着色器功能接收的输入数据项。

为了允许合并顶点/几何着色器程序在上述实例中实施单个输入/单个输出接口,可以针对待执行几何着色器处理的基元中的每一个例示合并顶点/几何着色器程序的多个实例,并且合并顶点/几何着色器程序的实例中的每一个可经配置以接收单个顶点并且输出单个顶点。由合并顶点/几何着色器的多个实例产生的输出顶点的集合可以共同地对应于由合并顶点/几何着色器程序实施的几何着色器级的一个API示例产生的输出基元的顶点。

举例来说,对于通过图形处理管线处理的输入基元中的每一个,合并顶点/几何着色器程序可以例示N次,其中N等于通过对应于合并顶点/几何着色器程序的几何着色器程序规定的每个基元的最大数目的输出顶点。通过几何着色器程序规定的输出顶点中的不同的一个可以通过不同示例中的每一个发出使得合并顶点/几何着色器程序的总共N个示例输出由对应于合并顶点/几何着色器程序的几何着色器程序限定的全部的输出顶点。因为在此实例中合并顶点/几何着色器程序的示例中的每一个接收单个输入顶点并且输出单个输出顶点,所以合并顶点/几何着色器可以在实施单个输入/单个输出硬件接口的着色器单元上执行。

图形API(比如(例如)DX 10和DX 11)限定几何着色器级作为针对每个传入基元执行一次的级。然而,对于上文所述的合并顶点/几何着色器程序执行技术,可以针对每个传入基元执行合并顶点/几何着色器程序的N个不同实例。换句话说,针对几何着色器的每个API调用,几何着色器处理有效地复制N次。因此,用于执行合并顶点/几何着色器的上文描述的技术可被称为用于执行合并顶点/几何着色器的复制模式。

用于执行合并顶点/几何着色器的复制模式的一个缺点在于通过几何着色器处理执行的计算可以针对合并顶点/几何着色器程序的每个示例重复。举例来说,在一些情况下,用于合并顶点/几何着色器程序的几何着色器处理可以包含程序控制环路使得输出顶点以特定次序得到计算,并且在一些实例中,用于合并顶点/几何着色器程序的几何着色器处理可以使用瀑布机制操作。在使用瀑布机制时,对于合并顶点/几何着色器程序的给定示例,用于几何着色器功能的程序控制环路可以针对输出顶点中的每一个执行直至计算待由特定示例发出的特定顶点为止。在计算通过特定示例发出的顶点之后,用于几何着色器处理的控制流可以中止执行控制环路。

换句话说,在使用瀑布机制时,合并顶点/几何着色器程序的第一实例可以执行用于几何着色器功能的程序控制环路一次并且输出对应于控制环路的单个迭代的顶点,合并顶点/几何着色器程序的第二实例可以执行用于几何着色器功能的程序控制环路两次并且输出对应于控制环路的第二迭代的顶点,合并顶点/几何着色器程序的第三实例可以执行用于几何着色器功能的程序控制环路三次并且输出对应于控制环路的第三迭代的顶点等。

使用瀑布机制可以减少当合并顶点/几何着色器的多个实例针对每个基元例示时发生的重复计算中的一些,但是此类机制仍会引起重复计算。举例来说,通过几何着色器功能计算的第一顶点将被计算N次,第二顶点将被计算N-1次等。顶点的此类重复计算可以降低着色器单元的效率和/或增加着色器单元的电力消耗。

用于执行合并顶点/几何着色器的复制模式的另一缺点在于需要针对几何着色器的每个调用分配资源(例如,通用寄存器(GPR))引起重复的资源分配。重复的资源分配也可以降低着色器单元的效率和/或增加着色器单元的电力消耗。

用于执行合并顶点/几何着色器的复制模式的另一缺点在于此类模式并不能够重复使用由多个基元共享的顶点以便降低顶点着色器的处理需求。不允许顶点重复使用可能增加电力消耗和/或增加存储器带宽使用。

根据本发明的一些方面,描述了用于执行着色器程序的技术,所述着色器程序执行顶点着色器处理并且针对由着色器程序接收的每个输入顶点产生多个输出顶点。多个输出顶点可以基于包含于着色器程序中的程序指令产生。举例来说,执行一种执行顶点着色器处理并且针对由着色器程序接收的输入顶点中的每一个产生多个输出顶点的着色器程序可以允许几何着色器处理通过合并顶点/几何着色器程序执行而无需针对几何着色器的每个API调用跨越执行的多个线程的几何着色器处理的复制。

举例来说,可以调用合并顶点/几何着色器程序的单个实例以针对几何着色器的每个API调用执行几何着色器处理而不是如上文相对于复制模式所论述的N个顶点/几何着色器实例。合并顶点/几何着色器程序的单个实例可以发出N个顶点,其中N是由对应于合并顶点/几何着色器程序的几何着色器程序限定的输出顶点的数目。由合并顶点/几何着色器的单个实例产生的N个输出顶点可以共同地对应于由合并顶点/几何着色器程序实施的几何着色器级的一个API示例产生的输出基元的顶点。以此方式,合并顶点/几何着色器可以通过着色器单元执行而无需跨越多个执行线程的几何着色器处理的复制。因为可以调用单个顶点/几何着色器实例以针对几何着色器的每个API调用执行几何着色器处理,所以执行合并顶点/几何着色器的此模式可被称为用于执行合并顶点/几何着色器的非复制模式。

允许合并顶点/几何着色器通过着色器单元执行而无需复制几何着色器处理可以减少几何着色器的每API调用需要的ALU计算的数目、减少通过几何着色器的每API调用的GPU消耗的资源的数目,和/或减少针对几何着色器的每个API调用需要发生的资源分配的数目。以此方式,可以改进GPU的性能和/或可以减小GPU的电力消耗。

另外,允许合并顶点/几何着色器通过着色器单元执行而无需几何着色器功能的复制可以允许顶点重复使用发生在共享一或多个顶点的基元之间。允许共享顶点重复使用可以节省存储器带宽和/或降低电力消耗。

此外,执行针对通过着色器程序接收的输入顶点中的每一个产生多个输出顶点的着色器程序可以增加用于图形API的顶点着色器编程模型的灵活性。通常,顶点着色器编程模型规定顶点着色器程序针对每个输入顶点被调用一次并且顶点着色器程序产生针对顶点着色器程序的每次调用的单个输出顶点。然而,执行一种执行顶点着色器处理并且针对每个输入顶点产生多个输出顶点的着色器程序可用于实施允许针对顶点着色器程序的每个调用产生多个输出顶点的顶点着色器编程模型。以此方式,可以改进通过GPU执行的可编程顶点处理的灵活性。

图2是可用于实施本发明的着色器程序执行技术的实例图形处理单元(GPU)30的方块图。GPU 30经配置以基于从主机装置(例如,主中央处理单元(CPU))接收的图形命令、状态信息和着色器程序执行图形处理。GPU 30可以是图形处理器的实例并且替代地被称作图形处理器。GPU 30包括命令引擎32和处理单元34。

在一些实例中,处理单元34中的一或多个可以是可配置的以形成三维(3D)图形呈现管线。举例来说,处理单元34中的一或多个可以是可配置的以实施在图1中说明的图形管线10。

命令引擎32和处理单元34可以包括专用硬件单元、固件、软件、着色器单元、处理器和处理元件的任何组合,所述组件经配置以执行归于此类组件的功能。在一些实例中,GPU 30可经配置以执行指令,所述指令使得GPU 30的一或多个处理器执行本发明中描述的技术中的任一者的全部或部分。

命令引擎32可以从主机装置接收命令和图形数据、基于所述命令管理GPU 30的状态,并且控制处理单元34的操作以基于所述命令呈现图形数据。举例来说,响应于接收绘制调用命令,命令引擎32可以控制处理单元34的操作使得处理单元34实施图形呈现管线(例如,图1中的图形管线10),并且使得图形数据经由图形呈现管线被呈现到呈现目标中。作为另一实例,命令引擎32可以从主机装置接收一或多个着色器程序、接收指示GPU 30将着色器程序加载到GPU 30的一或多个命令上,并且使得着色器程序被加载到和/或存储在与GPU 30中的一或多个着色器单元相关联的指令高速缓存中。

处理单元34中的每一个可以是可编程处理单元或固定功能处理单元。可编程处理单元可以指经配置以执行程序(例如,着色器程序)的处理单元,所述程序通过使用GPU 30的主机装置由GPU 30限定、通过GPU 30编译和/或加载到GPU 30上。固定功能处理单元可以包括并非经配置以从主机装置接收和执行程序的硬件。虽然包括于固定功能处理级中的硬件可以是可配置的,但是硬件的可配置性是基于一或多个控制信号的,这与基于程序(例如,着色器程序)的相反。

如图2中所示,处理单元34包括线程调度器36和着色器单元38。在一些实例中,线程调度器36可以是固定功能处理单元。虽然未在图2中特定地示出,但是处理单元34可以包括可用于实施图形呈现管线的全部或部分的其它固定功能和/或可编程处理单元。举例来说,处理单元34可以包括经配置以在图1的图形管线10中实施输入组装器14、光栅化器20和输出合并器24的固定功能处理单元。

着色器单元38中的每一个可以是可编程处理单元。在一些实例中,着色器单元38可以实施图形呈现管线的着色器级中的一或多个。举例来说,着色器单元38可以实施图1中所示的图形管线10的顶点着色器16、几何着色器18和/或像素着色器22。在一些实例中,着色器单元38的全部或一个子集可以是经配置以仅执行通过图形呈现管线实施的特定的类型的着色器程序。在其它实例中,着色器单元38的全部或一个子集可以是经配置以执行通过图形呈现管线实施的着色器程序的类型的全部或一个子集。

线程调度器36经配置以控制着色器程序线程如何在着色器单元38上执行。着色器单元38中的每一个可经配置以执行从主机装置加载到GPU 30上的着色器程序。着色器程序可以指通过GPU 30的可编程处理级执行的程序。在一些情况下,着色器程序可以由在主机装置上执行并且通过主机装置加载到GPU 30上的用户水平图形应用程序限定。在额外的情况中,着色器程序可以是写入在高水平着色语言中的源代码着色器程序的编译版本,所述高水平着色语言比如(例如)高级着色语言(HLSL)、OpenGL着色语言(GLSL)、用于图形的C(Cg)着色语言等。

线程调度器36可以接收指示待由一或多个着色器程序处理的一或多个数据项的信息、确定用于处理数据项的线程配置,并且使得着色器单元38执行一或多个线程以用于基于线程配置处理数据项。数据项可包括例如待通过着色器程序(例如,顶点着色器程序)处理的一或多个顶点、待通过着色器程序(例如,几何着色器程序)处理的一或多个基元和/或待通过着色器程序(例如,合并顶点/几何着色器程序)处理的一或多个顶点和一或多个基元。

线程可以指通过着色器单元38中的一个执行的着色器程序的实例(例如,通过包括于着色器单元中的多个处理元件中的一个执行)。特定着色器程序的实例中的每一个可以相对于潜在地不同的数据项执行相同指令。举例来说,顶点着色器程序的实例中的每一个可以相对于多个顶点中的相应一个执行相同指令。作为另一实例,几何着色器程序的实例中的每一个可以相对于多个基元中的相应一个执行相同指令。作为另一个实例,合并顶点/几何着色器程序的实例中的每一个可以相对于多个顶点中的相应一个和多个基元中的相应一个中的一或两个执行相同指令。在一些情况下,通过合并顶点/几何着色器程序的实例的子集执行的个体顶点和/或基元可以是相同的。

线程配置可以包括将待通过特定着色器程序处理的数据项分配到由一或多个着色器单元38执行的着色器程序的相应的线程(例如,实例)的信息。举例来说,对于顶点着色器程序,线程配置可以包括将多个顶点中的相应一个分配到待由一或多个着色器单元38执行的线程中的每一个的信息。作为另一实例,对于几何着色器程序,线程配置可以包括将多个基元中的相应一个分配到待由一或多个着色器单元38执行的线程中的每一个的信息。作为另一个实例,对于合并顶点/几何着色器程序,线程配置可以包括将多个顶点中的相应一个和/或多个基元中的相应一个分配到待由一或多个着色器单元38执行的线程中的每一个的信息。举例来说,合并顶点/几何着色器程序可以被分配到顶点和基元这两者,仅分配到顶点或仅分配到基元。

为了使得着色器单元38中的一个基于线程配置执行线程,线程调度器36可以将指示线程配置的信息提供到着色器单元。指示线程配置的信息可以包括指示将待通过特定着色器程序处理的数据项分配到待通过着色器单元执行的着色器程序的相应的线程的信息。数据项可以包括顶点、基元和/或像素。

着色器单元38中的每一个可经配置以接收指示用于处理一或多个数据项的线程配置的信息,并且基于从线程调度器36接收的指示线程配置的信息相对于数据项执行着色器程序的多个实例。在一些实例中,着色器单元38中的每一个可以进一步经配置以基于待通过相应的着色器单元执行的着色器程序和/或基于线程配置在相应的着色器单元中分配寄存器。

波可以指提交到着色器单元38中的一个以通过通过着色器单元并行地执行的一组线程。换句话说,包括于波中的线程可以在着色器单元上同时执行。波中的线程中的每一个可以对应于相同着色器程序的多个实例中的相应一个。在一些实例中,波中的线程中的每一个可被称为光纤。波的大小可以指包括于波中的纤维的数目。

在着色器单元38中的一个包括多个单个指令、多数据(SIMD)处理元件的实例中,着色器单元可以执行波使得波中的纤维中的每一个在多个SIMD处理元件中的相应的一个上执行。在此类实例中,着色器单元中的SIMD处理元件的数目可以大于或等于通过着色器单元执行的波的大小(即,波中的纤维的数目)。

在一些实例中,为了通过着色器程序确定用于处理数据项的特定集合的线程配置,线程调度器36可以确定用于处理数据项的集合的波配置。波配置可以包括将待通过特定着色器程序处理的数据项分配到包括于线程的波中的相应的线程以在着色器单元38中的一个上并行地执行相应的线的信息。在此类实例中,指示通过线程调度器36提供到着色器单元的线程配置的数据可以包括指示用于处理数据项的集合的波配置的数据。

在一些实例中,线程调度器36和/或着色器单元38可经配置以执行本发明中描述的技术中的一些或全部。举例来说,线程调度器36可经配置以根据本发明的技术确定线程配置和/或波配置。作为另一实例,着色器单元38中的每一个可经配置以根据本发明的技术执行提交到相应的着色器单元的一或多个线程和/或波。在相对于图3描述着色器单元38中的一个的实例之后稍后将在本发明中描述考虑线程调度器36和着色器单元38如何操作的进一步的细节。

图3是说明可以用于图2的GPU中的实例着色器单元40的方块图。在一些实例中,着色器单元40可以对应于图2中所示的着色器单元38中的一个。着色器单元40经配置以基于指示线程配置的信息执行一或多个不同类型的着色器程序。着色器单元40包括控制单元42、指令存储装置44、处理元件46A-46H(统称为“处理元件46”)、寄存器48和本地存储器50。

控制单元42可以接收指示用于处理数据项的线程配置的信息,和并且使得一或多个线程基于着色器程序并且基于指示线程配置的信息在处理元件46上执行。着色器程序可以存储在指令存储装置44中。举例来说,数据项可以存储在寄存器48、本地存储器50和/或外部存储器中。在一些实例中,控制单元42可以进一步经配置以基于待通过着色器单元40执行的着色器程序和/或基于线程配置将寄存器48分配到处理元件46A-46H。

指令存储装置44经配置以存储待通过着色器单元40执行的一或多个着色器程序(例如,着色器程序指令)的全部或部分。指令存储装置44可以是任何类型的存储单元包括,例如,易失性存储器、非易失性存储器、高速缓存、随机存取存储器(RAM)、静态RAM(SRAM)、动态RAM(DRAM)等。当指令存储装置44是高速缓存时,指令存储装置44可以高速缓存存储于着色器单元40外部的存储器中的一或多个着色器程序。虽然将指令存储装置44说明为在着色器单元40的内部,但在其它实例中,指令存储装置44可在着色器单元40外部。

处理元件46经配置以执行着色器程序的线程。处理元件46中的每一个可执行不同线程。线程可以指相对于针对线程特定的数据项执行的着色器程序的实例。因此,处理元件46中的每一个可称为相对于潜在地不同的数据项执行着色器程序的实例。在共同时间点在处理元件46A-46H上并行地执行的线程的集合可被称为线程波。

在图3的实例着色器单元40中,处理元件46可为单指令多数据(SIMD)处理元件。SIMD处理元件指代当经激活时经配置以相对于不同数据同时执行同一指令的处理元件。这样可以允许处理元件46相对于不同数据项并行执行着色器程序的多个线程。在一些情况下,处理元件46中的每一个可以基于指向指令存储装置44中包含的指令的共用程序计数器执行着色器程序的指令。

如果处理元件46中的一或多个经去激活,那么这些处理元件46在给定指令周期中并不执行程序指令。在一些情况下,控制单元42可解除激活处理元件46中的一或多个以实施条件性分支指令,其中分支条件对于一些线程得到满足且对于其它线程得不到满足。

在一些实例中,处理元件46中的每一个可以包括和/或对应于算术逻辑单元(ALU)。在其它实例中,处理元件46中的每一个可以实施ALU功能性。ALU功能性可以包括添加、减去、倍增等。在额外实例中,处理元件46中的每一个可以是标量ALU或向量ALU。标量ALU可在标量数据项上操作,且向量ALU可在向量数据项上操作。标量数据项可以包括对应于标量的单个分量的单个值。向量数据项可以包括对应于向量的多个分量的多个值。在其中处理元件46是标量ALU的实例中,如果向量数据项通过着色器单元40处理,那么在一些实例中,向量的组分中的每一个可以通过处理元件46的子集并行处理。举例来说,处理元件46A、46B、46C和46D可以并行处理四组分向量。

处理元件46中的每一个可以从指令存储装置44中读取指令和/或从寄存器48、本地存储器50和外部存储器中的一或多个中读取数据项。处理元件46中的每一个可将输出数据写入到寄存器48、本地存储器50和外部存储器中的一或多个。

寄存器48可以被动态地分配到各种处理元件46。在一些情况下,寄存器48中的一些或全部可以充当输入寄存器和/或输出寄存器以用于在着色器单元40上执行的各种线程。输入寄存器可以指存储用于着色器程序的输入数据项(例如,输入顶点、输入基元)的寄存器,并且输出寄存器可以指存储输出数据项(例如,输出顶点、输出基元)的寄存器以用于着色器程序。

本地存储器50可以是任何类型的存储器包括例如易失性存储器、随机存取存储器(RAM)、静态RAM(SRAM)、动态RAM(DRAM)等。在一些实例中,用于本地存储器50的地址空间可以是对包括于着色器单元40中的处理元件46为本地的。换句话说,GPU 30的其它着色器单元和/或其它部分可能无法直接存取本地存储器50。类似地,主机装置可能无法直接地存取本地存储器50。在一些实例中,本地存储器50可以在与着色器单元40和/或GPU 30相同的芯片上实施。

现在将描述线程调度器36和着色器单元40的一般操作。GPU 30(例如,命令引擎32)将着色器程序加载到指令存储装置44中或加载到指令存储装置44可访问的存储空间中。线程调度器36接收指示一或多个数据项的信息以通过着色器程序处理、确定相对于数据项用于执行着色器程序的线程配置,并且提供指示线程配置的信息到着色器单元40。线程配置可以规定数据项中的每一个到待通过着色器单元40执行的着色器程序的一或多个实例的分配。着色器程序的实例中的每一个可经配置以相对于分配到着色器程序的相应的实例的数据项执行着色器处理(例如,执行着色器程序的指令)。

控制单元42接收指示线程配置的信息,并且使得处理元件46A-46H基于线程配置执行着色器程序的一或多个实例。为了使得处理元件46A-46H基于线程配置执行着色器程序的一或多个实例,控制单元42可以在执行着色器程序实例之前用与待执行的线程相关联的输入数据项(例如,输入顶点)来加载处理元件46A-46H的输入寄存器。举例来说,一或多个输入寄存器可以被分配到处理元件46A-46H中的每一个,并且对于待执行的着色器程序的实例中的每一个,控制单元42可以用待通过相应的着色器实例执行的输入数据项来加载对应于相应的着色器实例的输入寄存器。以此方式,可以通过着色器单元40执行着色器程序的多个实例。

根据本发明,着色器单元40可经配置以执行着色器程序,所述着色器程序执行顶点着色器处理并且针对由着色器程序接收的每个输入顶点产生多个输出顶点。举例来说,着色器单元40可以执行着色器程序的多个实例使得着色器程序的实例中的每一个接收多个输入顶点中的相应一个并且响应于接收多个输入顶点中的相应一个产生多个输出顶点。着色器程序的实例中的每一个可以通过处理元件46A-46H中的相应一个执行。

在一些实例中,针对通过着色器程序接收的输入顶点中的每一个产生多个输出顶点执行着色器程序可以允许用于执行针对输入顶点的特定集合的着色器程序的处理元件46A-46H的数目减少。减少用于执行着色器程序的处理元件46A-46H的数目可以减少由GPU 30使用的处理资源和/或减少通过GPU 30消耗的电力。以此方式,可以改进GPU 30的性能和/或电力消耗。

此外,在其它实例中执行针对通过着色器程序接收的输入顶点中的每一个产生多个输出顶点的着色器程序可用于实施顶点着色器编程模型,所述顶点着色器编程模型允许多个输出顶点针对顶点着色器程序的每个调用产生。通常,顶点着色器编程模型规定顶点着色器程序针对每个输入顶点被调用一次并且顶点着色器程序产生针对顶点着色器程序的每次调用的单个输出顶点。实施允许多个输出顶点针对顶点着色器程序的每个调用产生的顶点着色器编程模型可以增加可以由图形程序员使用的顶点着色器编程的灵活性。

另外,在其它实例中,执行针对通过着色器程序接收的输入顶点中的每一个产生多个输出顶点的着色器程序允许针对待通过每个基元的合并顶点/几何着色器程序的单个实例执行的基元中的每一个的几何着色器处理。允许几何着色器处理通过每个基元的合并顶点/几何着色器程序的单个实例执行可以相对于需要针对每个基元执行的合并顶点/几何着色器程序的多个实例的技术减少处理特定集合的基元需要的合并顶点/几何着色器程序的实例的数目。减少用于处理基元的合并顶点/几何着色器程序的实例的数目可以减少由GPU 30使用的处理资源、减少通过GPU 30执行的资源分配的数目,和/或减少由GPU 30消耗的电力。以此方式,可以改进通过合并顶点/几何着色器程序执行可编程顶点着色和可编程几何着色的GPU 30的性能和/或电力消耗。

图4是说明可以使用本发明的实例着色器程序执行技术处理的实例三角形条带的概念图。如图4中所示,实例三角形条带包括八个顶点(v0、v1、v2、v3、v4、v5、v6、v7)和六个基元(p0、p1、p2、p3、p4、p5)。图4的三角形条带中的若干个基元共享顶点。换句话说,同一顶点可以形成两个或大于两个基元的一部分。

图5是说明根据本发明可用于执行合并顶点/几何着色器程序的多个实例以用于处理图4中所示的三角形条带的实例线程配置52、54的概念图。线程配置52是可用于根据复制的着色器程序执行模式执行合并顶点/几何着色器程序的多个实例的线程配置的实例。线程配置54是可用于根据非复制的着色器程序执行模式执行合并顶点/几何着色器程序的多个实例的线程配置的实例。

线程配置52包括波配置56、58、60。线程配置54包括波配置62。波配置56、58、60、62中的每一个可以对应于通过着色器单元40(例如,着色器单元40的处理元件46A-46H)并行处理的合并顶点/几何着色器程序的实例的波。波配置56、58、60、62中的每一个可以指示数据项到包括于相应的波中的合并顶点/几何着色器程序的实例的分配。单个波中的合并顶点/几何着色器程序的实例中的每一个可以在着色器单元40中的处理元件46A-46H中的单独的一个上执行。合并顶点/几何着色器程序的实例中的每一个可以替代地被称作线程和/或光纤。

如图5中所示,波配置56、58、60、62中的每一个的第一行规定光纤标识(光纤ID)、波配置56、58、60、62中的每一个的第二行规定顶点标识(顶点ID),并且波配置56、58、60、62中的每一个的第三行规定基元标识(基元ID)。单个波中的合并顶点/几何着色器程序的实例中的每一个可以对应于唯一的相应的光纤ID值。顶点ID值中的每一个对应于图4的三角形条带中的类似地数目的顶点。类似地,基元ID值中的每一个对应于图4的三角形条带中的类似地数目的基元。

波配置56、58、60、62的列中的每一个表示顶点和基元中的一或两个到特定光纤的分配。举例来说,波配置56的第一列表示顶点v0和基元p0到光纤0的分配,并且波配置56的第六列表示顶点v3和基元p1到光纤5的分配。

并不包括任何值的波配置56、58、60、62中的方框指示不存在分配到光纤的特定类型的数据项。举例来说,波配置56的第八列表示基元p1到光纤7的分配以及没有顶点到光纤7的分配,并且波配置62的第八列表示顶点v7到光纤7的分配以及没有基元到光纤7的分配。

当顶点和基元被分配到光纤时,光纤可以相对于分配到光纤的顶点执行顶点着色器处理并且相对于分配到光纤的基元执行几何着色器处理。举例来说,波配置56中的光纤0可以相对于顶点v0执行顶点着色器处理并且相对于基元p0执行几何着色器处理。

当基元被分配到光纤且顶点并未被分配到光纤时,光纤可以相对于基元执行几何着色器处理并且可以未必执行任何顶点着色器处理。举例来说,波配置56中的光纤7可以不执行任何顶点着色器处理并且可以相对于基元p1执行几何着色器处理。

当基元被分配到光纤且顶点并未被分配到光纤时,光纤可以相对于基元执行几何着色器处理并且可以未必执行任何顶点着色器处理。举例来说,波配置56中的光纤7可以不执行任何顶点着色器处理并且可以相对于基元p1执行几何着色器处理。

当顶点被分配到光纤且基元并未被分配到光纤时,光纤可以相对于顶点执行顶点着色器处理并且可以未必执行任何几何着色器处理。举例来说,波配置62中的光纤7可以相对于顶点v7执行顶点着色器处理并且可以不执行任何几何着色器处理。

对于复制的着色器程序执行模式(即,波配置56、58、60),纤维中的每一个接收单个顶点并且输出单个顶点。因此,多个纤维针对基元中的每一个执行几何着色器处理。在图5的具体实例中,针对每个基元执行四个纤维(即,合并顶点/几何着色器的四个实例)。

应注意此实例可以使用三个纤维(即,包括于用于几何着色器级的输出基元中的每一个中的顶点的数目)而不是四个纤维。然而,在此实例中几何着色器程序限定最大输出顶点计数为四,即使输出顶点中的一个并不使用也是如此。在一些实例中,几何着色器可以限定在1个和1024个顶点之间的最大输出顶点计数。最大输出顶点计数可以未必等于输入基元类型的顶点的数目。

对于非复制模式(即,波配置62),纤维中的每一个接收单个顶点并且可以输出多个顶点。因此,对于基元中的每一个,单个光纤用于为基元执行几何着色器处理。在图5的实例中,每个光纤(例如,合并顶点/几何着色器程序的实例)可以输出三个顶点。通过纤维中的每一个输出的三个顶点的每一集合可以对应于图4中所示的三角形基元中的一个。

如图5中所示,对于复制模式(即,波配置56、58、60),针对基元中的每一个的几何着色器处理的重复执行造成重复的ALU操作和重复的资源分配的发生。这样可能降低GPU 30的性能和/或增加GPU 30的电力消耗。此外,几何着色器处理的重复执行消耗每个基元多个纤维/处理元件,这样可能进一步降低GPU 30的性能。另外,顶点没有在复制模式中重复使用,这防止了GPU 30利用顶点重复使用的电力、性能和存储器带宽改进。

相比之下,非复制模式(即,波配置62)针对由几何着色器处理的基元中的每一个执行几何着色器功能的单个实例,这可以减少每个基元执行ALU操作的数目、减少每个基元执行资源分配的数目,和/或减少每个基元消耗的纤维/处理元件的数目。减少每个基元ALU操作、每个基元资源分配和/或每个基元消耗的纤维/处理元件可以改进GPU的性能和/或减少GPU的电力消耗。此外,顶点重复使用可以在非复制模式中发生,由此减少每个基元执行的顶点处理的量。减少顶点处理的量可以在图形处理系统中改进性能、节省电力和/或减少存储器带宽。

虽然非复制模式可以就改进几何着色器处理的性能和电力消耗而言且就允许顶点重复使用的发生而言提供若干优势,但是对于对非复制模式而言可能存在缺点。举例来说,因为每个光纤可以输出多个顶点,所以针对顶点/几何着色器纤维的单个波存储输出顶点需要的芯片上存储空间(例如,着色器单元40的寄存器48)的总量可能是相当大的,特别是在几何着色器执行相对较大量的顶点放大的情况下。虽然芯片外存储器可以用于存储顶点,但是使用此类存储器可以使着色器单元40的性能显著降级。

在图5的实例中,每个光纤能够输出最多四个顶点,引起针对每个波的32顶点分配芯片上存储空间需要。相比之下,复制模式输出每个光纤的单个顶点。因此,对于单个波,在此实例中存储空间可以限制为八个顶点。

一般而言,在着色器单元40中用于存储输出顶点的存储空间(例如,寄存器48)的量可能是有限的。因为用于执行合并顶点/几何着色器程序的非复制模式允许多个顶点由光纤中的每一个产生,所以存储用于非复制模式的输出顶点需要的存储空间的量可以大于复制模式需要的存储空间的量。如果包括于着色器单元40中的存储空间的量并不足以存储用于波中的纤维的给定集合的输出顶点,那么可能需要执行外部存储器存取,这样可以显著降低着色器单元40的性能。

如上文所论述,用于执行合并顶点/几何着色器程序的非复制模式可以提供用于执行波中的给定纤维集合的更好的性能和/或减小电力消耗。然而,如果与在波中执行光纤相关联的输出顶点存储空间需求大于在着色器单元40中可供使用的输出顶点存储空间的量,那么通过不复制几何着色器处理获得的性能和/或电力改进可以被由外部存储器存取引起的性能的降低超过。

因此,如果用于存储输出顶点的存储空间需求相对较小(例如,如果输出顶点存储空间需求小于或等于包含于着色器单元40中的输出顶点存储空间的量),那么用于执行合并顶点/几何着色器程序的非复制模式可以提供更好的性能和/或减小的电力消耗。另一方面,如果用于存储输出顶点的存储空间需求相对较高(例如,如果,输出顶点存储空间需求大于包含于着色器单元40中的输出顶点存储空间的量),那么用于执行合并顶点/几何着色器程序的复制模式可以提供更好的性能。

根据本发明,着色器单元40可经配置以在用于执行合并顶点/几何着色器程序的非复制模式与用于执行合并顶点/几何着色器程序的复制模式之间选择性地切换。允许着色器单元40在非复制模式与复制模式之间切换以用于执行合并顶点/几何着色器程序可以提供额外的控制和/或灵活性给GPU 30的用户,以便选择针对特定处理需求,比如(例如)性能需求、电力消耗需求等定制的特定执行模式。

在一些实例中,为了在非复制模式与复制模式之间切换以用于执行合并顶点/几何着色器程序,着色器单元40可经配置以接收指示着色器程序执行模式的信息以用于执行合并顶点/几何着色器程序。指示待用于执行着色器程序的着色器程序执行模式的信息可包括(例如)指示是否非复制模式将用于执行合并顶点/几何着色器程序的信息和/或指示是否复制模式将用于执行合并顶点/几何着色器程序的信息。响应于接收指示着色器程序执行模式将用于执行合并顶点/几何着色器程序的信息,着色器单元40(例如,控制单元42)可以基于着色器程序执行模式在着色器单元40中配置一或多个组件以基于着色器程序执行模式执行合并顶点/几何着色器程序。

在其它实例中,为了在用于执行合并顶点/几何着色器程序的非复制模式与复制模式之间切换,线程调度器36可经配置以基于选择的着色器程序执行模式(例如,非复制模式或复制模式)确定和/或产生线程配置。举例来说,线程调度器36可以分配多个基元和多个顶点中的每一个到对相应的光纤,并且基于所述分配产生线程配置。线程调度器36可以提交线程配置到着色器单元38以使得着色器单元38基于线程配置执行合并顶点/几何着色器程序。

在额外实例中,为了在用于执行合并顶点/几何着色器程序的非复制模式与复制模式之间进行切换,合并顶点/着色器程序可以包括基于所选定的着色器程序执行模式(例如,复制模式对非复制模式)选择性地执行各种操作的代码。举例来说,着色器代码可以选择性地使得合并顶点/几何着色器的实例针对非复制模式发出一个顶点并且针对复制模式发出多个顶点。作为另一实例,着色器代码可以选择性地使得合并顶点/几何着色器的实例根据取决于所述选定着色器程序执行模式的不同技术计算用于存储和/或检索顶点着色顶点的本地存储器位置。

举例来说,如果选择非复制模式,那么线程调度器36可以产生线程配置使得多个基元中的每一个被分配到N个光纤(每个基元)以用于几何着色器处理。另一方面,如果选择复制模式,那么线程调度器36可以产生线程配置使得多个基元中的每一个被分配到用于几何着色器处理的一个光纤(每个基元)。

在一些实例中,N可以是大于或等于2的整数。在其它实例中,N可以等于由合并顶点/几何着色器程序实施的几何着色器程序所规定的最大输出顶点计数值。最大输出顶点计数值可以指示待由几何着色器程序针对由几何着色器程序处理的每个基元产生的输出顶点的最大数目。

作为另一实例,如果选择非复制模式,那么线程调度器36可以产生线程配置使得光纤中的每一个发出和/或输出一个输出顶点(每个光纤)。另一方面,如果选择复制模式,那么线程调度器36可以产生线程配置使得光纤中的每一个发出和/或输出M个输出顶点(每个光纤)。

在一些实例中,M可以是大于或等于2的整数。在其它实例中,M可以等于多少个顶点是针对通过由合并顶点/几何着色器程序实施的几何着色器级处理的基元中的每一个产生的。在额外实例中,M可以小于或等于N。

作为另一个实例,如果选择非复制模式,那么线程调度器36可以产生线程配置,使得多个顶点中的每一个被分配到一个光纤(例如,每个波一个光纤)以用于顶点着色器处理。另一方面,如果选择复制模式,那么线程调度器36可以产生线程配置使得多个顶点中的每一个被分配到K个光纤以用于顶点着色器处理,其中K是等于多少个基元包含相应的顶点的整数。

换句话说,如果选择非复制模式,那么线程调度器36可以产生线程配置以允许顶点重复使用,并且如果选择复制模式,那么线程调度器36可以产生线程配置以不允许顶点重复使用。顶点重复使用可以指允许相对于不同基元执行几何着色器处理的着色器程序的实例以使用由执行顶点着色器处理的着色器程序的单个实例产生的顶点着色顶点的处理技术。

举例来说,当第一光纤相对于多个顶点中的一个执行顶点着色器处理时可以发生顶点重复使用以产生顶点着色顶点,第二光纤基于由第一光纤产生的顶点着色顶点相对于第一基元执行几何着色器处理,并且第三光纤基于由第一光纤产生的顶点着色顶点相对于第二基元执行几何着色器处理。如图4中所示,顶点v1包括于基元p0和p1中,并且如图5中所示,用于光纤0和1的几何着色器处理可以共享顶点着色顶点v1,所述顶点着色顶点由光纤1产生。

根据本发明的一些方面,用于执行着色器程序的技术可以包括用于在用于执行合并顶点/几何着色器程序的非复制模式与复制模式之间进行选择并且使得着色器单元40根据所选定的着色器程序执行模式来执行合并顶点/几何着色器程序的技术。在一些实例中,用于在非复制模式与复制模式之间进行选择的技术可以基于指示存储输出顶点所需要的存储空间的总量的信息在非复制模式与复制模式之间进行选择,所述输出顶点与通过合并顶点/几何着色器程序实施的几何着色器程序的一或多个API调用相关联。如果用于合并顶点/几何着色器程序的编译代码是基于几何着色器程序产生的,那么几何着色器程序可以通过合并顶点/几何着色器程序实施。

在此类实例中,如果存储输出顶点所需要的存储空间的总量相对较小(例如,小于或等于阈值),那么用于在非复制模式与复制模式之间进行选择的技术可以选择非复制模式作为选定的着色器程序执行模式以用于执行合并顶点/几何着色器程序。这可以允许图形处理系统获得非复制模式的增大的性能和/或减小电力消耗益处而无需用于顶点着色顶点的芯片外存储器存取。另一方面,如果存储输出顶点所需要的存储空间的总量相对较大(例如,大于阈值),那么用于在非复制模式与复制模式之间进行选择的技术可以选择复制模式作为选定着色器程序执行模式以用于执行合并顶点/几何着色器程序。这可以允许图形处理系统避免如果非复制模式用于此类情况中,那么则可能需要的芯片外存储器存取,并且避免与此类芯片外存储器存取相关联的性能缺点。

在一些实例中,可以基于由几何着色器程序的一或多个API调用产生的输出顶点的总数和存储输出顶点中的每一个所需要的存储空间的总量确定存储输出顶点所需要的存储空间的总量。举例来说,存储输出顶点所需要的存储空间的总量可以等于由几何着色器程序的一或多个API调用产生的顶点的总量与存储输出顶点中的每一个所需要的存储空间的总量的乘积。在一些情况下,由几何着色器程序的一或多个API调用产生的顶点的总量可以对应于包括于由几何着色器程序的一或多个API调用产生的输出基元的集合中的顶点的总数。

在其它实例中,为了基于存储与几何着色器程序的一或多个API调用相关联的输出顶点所需要的存储空间的总量在非复制模式与复制模式之间进行选择,用于在非复制模式与复制模式之间进行选择的技术可以确定存储用于合并顶点/几何着色器程序的执行的一个波的输出顶点所需要的存储空间的总量。合并顶点/几何着色器程序的执行的一个波可以对应于通过着色器单元40并行地执行的合并顶点/几何着色器程序的L个实例,其中L等于并行地执行着色器程序的着色器单元40中的处理元件的数目。

在一些实例中,指示存储用于几何着色器程序的一或多个API调用的输出顶点所需要的存储空间的总量可以对应于存储用于合并顶点/几何着色器程序的执行的一个波的输出顶点所需要的存储空间的总量。合并顶点/几何着色器程序的执行的一个波可以对应于通过着色器单元40并行地执行的合并顶点/几何着色器程序的L个实例,其中L等于并行地执行着色器程序的着色器单元40中的处理元件的数目。

在此类实例中,如果存储输出顶点所需要的存储空间的总量小于或等于阈值,那么用于在非复制模式与复制模式之间进行选择的技术可以选择非复制模式作为用于执行合并顶点/几何着色器程序的所选定的着色器程序执行模式。另一方面,如果存储输出顶点所需要的存储空间的总量大于阈值,那么用于在非复制模式与复制模式之间进行选择的技术可以选择复制模式作为所选定的着色器程序执行模式以用于执行合并顶点/几何着色器程序。在一些情况下,在此类实例中的阈值可以对应于在着色器单元40(例如,寄存器48)中可供使用的存储空间的总量以存储与合并顶点/几何着色器程序的执行的一个波相关联的输出顶点。

在额外实例中,指示存储与几何着色器程序的一或多个调用相关联的输出顶点所需要的存储空间的总量的信息可以对应于通过由合并顶点/几何着色器程序实施的几何着色器程序的API调用执行的顶点放大的量。顶点放大的量可以指与通过合并顶点/几何着色器程序实施的几何着色器程序的一个API调用相关联的输出顶点对输入顶点的比率。

在此类实例中,如果顶点放大的量小于或等于阈值,那么用于在非复制模式与复制模式之间进行选择的技术可以选择非复制模式作为所选定的着色器程序执行模式以用于执行合并顶点/几何着色器程序。另一方面,如果顶点放大的量大于阈值,那么用于在非复制模式与复制模式之间进行选择的技术可以选择复制模式作为所选定的着色器程序执行模式以用于执行合并顶点/几何着色器程序。

在一些实例中,用于在非复制模式与复制模式之间进行选择以用于执行合并顶点/几何着色器程序的上文所描述的技术中的一或多个可以通过GPU 30外部的主机装置(例如,主中央处理单元(CPU))实施。举例来说,用于在非复制模式与复制模式之间进行选择的技术中的一或多个可以通过在主机装置上执行的图形驱动程序实施和/或通过在主机装置上执行的编译器实施。在其它实例中,用于在非复制模式与复制模式之间进行选择的技术中的一或多个可以通过GPU 30实施。举例来说,一或多个固定功能和/或可编程处理单元可以实施上文描述的选择技术中的一或多个。

在选择技术通过主机装置实施的实例中。本发明的技术可以向GPU 30提供指示用于GPU 30的所选定的着色器程序执行模式的信息。举例来说,GPU 30可以包括用于存储指示所选定的着色器程序执行模式的信息(例如,一或多个位和/或一或多个值)的一或多个寄存器,并且主机装置(例如,CPU)可以提供指示所选定的着色器程序执行模式的信息给GPU 30,方法是将指示所选定的着色器程序执行模式的一或多个值写入到寄存器。

图6是说明根据本发明与执行合并顶点/几何着色器程序相关联的实例处理流程的概念图。图7说明根据本发明与执行合并顶点/几何着色器程序相关联的伪代码。一般而言,图6中所描绘的操作的流程可以对应于在图7中说明的指令。

在图6中所示的实例中,着色器单元40将例如顶点属性、vertex_id、instance_id、primitive_id、杂项的系统值写入到一系列寄存器R0、R1和R2(70)中。在一些实例中,寄存器可以对应于着色器单元40的寄存器48。通常,系统值可以存储到GPU 30的任何其它未分配的存储器。通过将系统产生值存储到预定位置中的一系列寄存器,着色器单元40可以针对顶点着色器处理级和几何着色器处理级中的每一个存取系统产生值。因此,用户规定的几何着色器程序并不需要基于用户规定的顶点着色器程序得到编译,以便确定其中已经存储系统产生值。实际上,当执行顶点着色器处理和几何着色器处理中的每一个时GPU 30可以存取预定存储器位置以存取系统产生值。

着色器单元40执行顶点着色操作(72)。在顶点着色操作之后,着色器单元40将通用寄存器(GPR)(例如,寄存器48)(例如,从顶点着色器处理的输出顶点)的内容写入到本地存储器50(74)。着色器单元40切换到几何着色器纹理和恒定偏移(76)以及几何着色器程序计数器(78)。

着色器单元40读取本地存储器50的内容(例如,由合并顶点/几何着色器程序的一或多个实例的顶点着色器处理产生的顶点着色顶点),并且执行几何着色操作(80)。当对于包括于光纤中的每个发出根据非复制模式操作时(例如,合并顶点/几何着色器程序的实例),着色器单元40可以将顶点属性输出到顶点参数高速缓存(VPC)、stream_id和任何切割指示。当根据复制模式操作时,着色器单元40可以输出一个顶点属性到顶点参数高速缓存(VPC)并且输出几何着色顶点的位置的指示、stream_id、任何切割指示和任何解译值到位置高速缓存。

参考图7,合并顶点/几何着色器程序可以包括顶点着色器处理代码82、几何着色器处理代码84和补丁代码86。编译器(例如,在主CPU上执行)可以基于由图形应用程序规定的顶点着色器程序和几何着色器程序产生合并顶点/几何着色器程序。在一些实例中,顶点着色器程序和几何着色器程序可以在产生合并顶点/几何着色器程序之前独立地编译,并且编译器可以将编译过的几何着色器处理代码84附加到编译顶点着色器处理代码82以产生用于合并顶点/几何着色器程序的编译代码。

如图7中所示,编译器可以在顶点着色器处理代码82与几何着色器处理代码84之间插入补丁代码86。补丁代码86可以使得着色器单元40将由顶点着色器处理代码82产生的输出顶点存储到着色器单元40的寄存器48中,并且执行与将着色器单元40从顶点着色器处理模式切换到几何着色器处理模式相关联的操作。与将着色器单元40从顶点着色器处理模式切换到几何着色器处理模式相关联的操作可以包括CHMSK操作和CHSH操作。CHMSK操作可以将着色器单元40中的资源指示器切换到几何着色器资源偏移。CHSH操作可以将着色器单元40中的程序计数器切换到与几何着色器处理代码84相关联的程序计数器值。

根据本发明的额外方面,编译器可以产生用于合并顶点/几何着色器程序的编译代码使得编译代码包括指令,所述指令使得着色器单元40基于指示待用于执行合并顶点/几何着色器程序的模式的信息根据非复制模式或复制模式选择性地执行合并顶点/几何着色器程序。举例来说,如图7中所示,编译器可以产生用于合并顶点/几何着色器的编译代码使得编译代码包括代码段88、90和92。代码段88、90、92中的每一个可以基于所述选定着色器程序执行模式(例如,复制模式对非复制模式)选择性地执行各种操作,以便使得着色器单元40根据所选定的着色器程序执行模式操作。

代码段88可以包括使得着色器单元40基于所选定的着色器程序执行模式选择性地使用第一本地存储器地址计算公式和第二集合本地存储器地址计算公式中的一个的指令。所选定的本地存储器地址计算公式可用于确定本地存储器50中的哪个位置用于存储通过合并顶点/几何着色器程序执行的顶点着色器处理的输出(例如,顶点着色顶点)。举例来说,如果非复制模式被选择作为着色器程序执行模式,那么编译代码可以使得着色器单元40使用第一本地存储器地址计算公式,所述公式基于用于当前执行光纤的光纤标识值(即,fiber_id_vertex)和输出顶点的大小(即,VERT_SIZE)计算本地存储器地址。另一方面,如果复制模式被选择为着色器程序执行模式,那么编译代码可以使得着色器单元40使用第二本地存储器地址计算公式,所述公式基于分配到当前执行光纤的基元的基元标识值(即,rel_primID)、基元的大小(即,PRIM_SIZE)、分配到当前执行光纤的顶点的顶点标识值(即,rel_vertex)以及输出顶点的大小(即,VERT_SIZE)计算本地存储器地址。

代码段90可以包括使得着色器单元40基于所选定的着色器程序执行模式选择性地使用第一本地存储器地址计算公式和第二集合本地存储器地址计算公式中的一个的指令。所选定的本地存储器地址计算公式可用于确定从本地存储器50中的哪个位置加载与通过合并顶点/几何着色器程序执行的几何着色器处理相关联的输入顶点(例如,顶点着色顶点)。举例来说,如果非复制模式被选择作为着色器程序执行模式,那么编译代码可以使得着色器单元40使用第一本地存储器地址计算公式,所述公式基于与待加载的顶点相关联的顶点标识值(即,vertex_id)和待加载的顶点的大小(即,VERT_SIZE)计算本地存储器地址。另一方面,如果复制模式被选择为着色器程序执行模式,那么编译代码可以使得着色器单元40使用第二本地存储器地址计算公式,所述公式基于分配到当前执行光纤的基元(即,rel_primID)、基元的大小(即,PRIM_SIZE)、与待加载的顶点相关联的顶点标识值(即,rel_vertex)以及顶点的大小(即,VERT_SIZE)计算本地存储器地址。

代码段92可以包括使得着色器单元40基于所选定的着色器程序执行模式输出一个顶点或多个顶点的指令。举例来说,如果非复制模式被选择为着色器程序执行模式,那么编译代码可以使得着色器单元40针对合并几何着色器程序的每个实例发出多个顶点。另一方面,如果复制模式被选择为着色器程序执行模式,那么编译代码可以使得着色器单元40针对合并几何着色器程序的每个实例发出单个顶点。发出的单个顶点可以对应于其中Gsoutcount==GsoutvertID的顶点。

如图7中所示,代码段88和90可以接收“misc->reuse”参数,其可以对应于指示待用于着色器程序的执行的模式的信息。类似地,代码段92可以接收“optimized_mode”参数,所述参数可以对应于指示待用于合并顶点/几何着色器程序的执行的模式的信息。在一些实例中,“misc->reuse”参数可以由GPU 30产生,并且“optimized_mode”参数可以由GPU驱动程序产生,并且提供到GPU 30。在一些实例中,“misc->reuse”参数和“optimized_mode”参数可以被实施为单个参数和/或由单个参数产生,所述单个参数指示待用于合并顶点/几何着色器程序的执行的模式。

将指令放置在用于能够选择性地执行任一模式的合并顶点/几何着色器程序的编译代码中可以允许着色器单元40的处理模式发生改变而无需将新的着色器程序重新加载到着色器单元中。此外,将指令放置在用于能够选择性地执行任一模式的合并顶点/几何着色器程序的编译代码中也可以简化合并顶点/几何着色器程序的编译。

图8是说明可用于实施本发明的着色器程序执行技术的实例计算装置100的方块图。计算装置100可包括个人计算机、台式计算机、膝上型计算机、计算机工作站、视频游戏平台或控制台、无线通信装置(比如(例如),移动电话、蜂窝式电话、卫星电话和/或移动电话手持机)、陆线电话、互联网电话、手持式装置(例如,便携式视频游戏装置或个人数字助理(PDA))、个人音乐播放器、视频播放器、显示装置、电视机、电视机顶盒、服务器、中间网络装置、主机计算机,或处理和/或显示图形数据的任何其它类型的装置。

如图8的实例中所说明,计算装置100包括用户接口102、CPU 104、存储器控制器106、存储器108、GPU 30、显示接口110、显示器112和总线114。用户接口102、CPU 104、存储器控制器106、GPU 30及显示接口110可使用总线114彼此通信。在一些实例中,GPU 30可以对应于在图2中说明的GPU 30。应注意,图8中所示的不同组件之间的总线和通信接口的特定配置仅是示例性的,并且具有相同或不同组件的计算装置和/或其它图形处理系统的其它配置可用于实施本发明的技术。

CPU 104可包括控制计算装置100的操作的通用或专用处理器。用户可以提供输入到计算装置100以使得CPU 104执行一或多个软件应用程序。在CPU 104上执行的软件应用程序可包含(例如)图形应用程序、文字处理器应用程序、电子邮件应用程序、总分析表应用程序、媒体播放器应用程序、视频游戏应用程序、图形用户接口应用程序、操作系统或任何其它类型的程序。用户可经由一或多个输入装置(未示出)(例如,键盘、鼠标、麦克风、触摸垫或经由用户接口102耦合到计算装置100的另一输入装置)将输入提供到计算装置100。

在CPU 104上执行的软件应用程序可以包括一或多个图形呈现指令,其指示GPU 30将图形数据呈现到帧缓冲器以供在显示器112上显示。在一些实例中,图形呈现指令可符合图形应用程序编程接口(API),比如(例如)开放图形库API、开放图形库嵌入系统(OpenGL ES)API、Direct3D API、X3D API、RenderMan API、WebGL API或任何其它公共或专有标准图形API。为了处理图形呈现指令,CPU 104可将一或多个图形呈现命令发布到GPU 30以使得GPU 30执行图形数据的呈现中的一些或全部。在一些实例中,待呈现的图形数据可以包括例如点、线、三角形、四边形、三角形条带等图形基元的列表。

如图8中所示,CPU 104包括GPU驱动程序116和编译器118。GPU驱动程序116可以从软件应用程序(例如,图形应用程序)接收指令,并且控制GPU 30的操作以服务于指令。举例来说,GPU驱动器116可调配一或多个命令,将命令放置到存储器108中,且指示GPU 30执行所述命令。

编译器118可以接收用于一或多个不同类型的着色器程序的源代码并且产生用于着色器程序的编译源代码。举例来说,编译器118可以接收用于顶点着色器程序的源代码和用于几何着色器程序的源代码、基于用于顶点着色器程序的源代码产生用于顶点着色器程序的编译代码,并且基于用于几何着色器程序的源代码产生用于几何着色器程序的编译代码。编译器118也可以基于用于顶点着色器程序和几何着色器程序的编译代码产生合并顶点/几何着色器程序。GPU驱动程序116可以将编译着色器程序中的一或多个加载到GPU 30上(例如,着色器单元40的指令存储装置44)以用于通过GPU 30的着色器单元40执行。

存储器控制器106有助于进出存储器108的数据的传送。举例来说,存储器控制器106可以接收存储器读取和写入命令,且服务相对于存储器系统108的此类命令以便为计算装置100中的组件提供存储器服务。存储器控制器106以通信方式耦合到存储器108。虽然存储器控制器106在图8的实例计算装置100中被说明为与CPU 104和存储器108两者分开的处理模块,但在其它实例中,存储器控制器106的功能性中的一些或全部可实施于CPU 104和存储器108中的一或两者上。

存储器108可存储可由CPU 104存取以用于执行的程序模块和/或指令及/或由在CPU 104上执行的程序使用的数据。举例来说,存储器108可存储与在CPU 104上执行的应用程序相关联的程序代码和图形数据。存储器108可另外存储由计算装置100的其它组件使用和/或产生的信息。举例来说,存储器108可充当用于GPU 30的装置存储器且可存储将在GPU 30上操作的数据以及由GPU 30执行的操作而产生的数据。举例来说,存储器108可存储纹理缓冲器、深度缓冲器、模板缓冲器、顶点缓冲器、帧缓冲器、呈现目标或其类似者的任何组合。另外,存储器108可存储命令流以供GPU 30处理。存储器108可包括一或多个易失性或非易失性存储器或存储装置,例如,随机存取存储器(RAM)、静态RAM(SRAM)、动态RAM(DRAM)、只读存储器(ROM)、可擦除可编程ROM(EPROM)、电可擦除可编程ROM(EEPROM)、快闪存储器、磁性数据媒体或光学存储媒体。

GPU 30可经配置以执行由CPU 104发布到GPU 30的命令。由GPU 30执行的命令可以包括图形命令、绘制调用命令、GPU状态编程命令、时戳请求、存储器传送命令、通用计算命令、内核执行命令等。

在一些实例中,GPU 30可经配置以执行图形操作以将一或多个图形基元呈现到显示器112。在此类实例中,当在CPU 104上执行的软件应用程序中的一个需要图形处理时,CPU 104可将图形数据提供到GPU 30且将一或多个图形命令发布到GPU 30。图形命令可以包括例如绘制调用命令、GPU状态编程命令、存储器传送命令、传图命令等。图形数据可以包括顶点缓冲器、纹理数据、表面数据等。在一些实例中,CPU 104可通过将命令和图形数据写入到可由GPU 30存取的存储器108而将所述命令和图形数据提供到GPU 30。

在其它实例中,GPU 30可经配置以针对在CPU 104上执行的应用程序执行通用计算。在此类实例中,当在CPU 104上执行的软件应用程序中的一个决定将计算任务卸载到GPU 30时,CPU 104可将通用计算数据提供到GPU 30,并且将一或多个通用计算命令发布到GPU 30。通用计算命令可以包括例如内核执行命令、存储器传送命令等。在一些实例中,CPU 104可通过将命令和数据写入到可由GPU 30存取的存储器108而将命令和通用计算数据提供到GPU 30。

在一些情况下,GPU 30可内置有与CPU 104相比提供对向量操作更高效的处理的高度并行的结构。举例来说,GPU 30可以包括多个处理元件,其经配置以用并行方式在多个顶点、控制点、像素和/或其它数据上进行操作。GPU 30的高度并行本质在一些情况下可允许GPU 30与使用CPU 104呈现图像相比更快速地将图形图像(例如,GUI和二维(2D)和/或三维(3D)图形场景)呈现到显示器112上。另外,GPU 30的高度并行本质可允许GPU 30与CPU 104相比更快速地处理用于通用计算应用程序的某些类型的向量和矩阵运算。

在一些情况下,GPU 30可以集成到计算装置100的主机板中。在其它情况下,GPU 30可以存在于图形卡上,所述图形卡安装在计算装置100的主机板中的端口中或可以其它方式并入经配置以与计算装置100交互操作的外围装置内。在其它情况下,GPU 30可位于与CPU 104相同的微芯片上,从而形成芯片上系统(SoC)。GPU 30可以包括一或多个处理器,例如,一或多个微处理器、专用集成电路(ASIC)、现场可编程门阵列(FPGA)、数字信号处理器(DSP)或其它等效的集成或离散逻辑电路。

在一些实例中,GPU 30可以包括GPU高速缓存,其可针对存储器108的全部或一部分提供高速缓存服务。在此类实例中,GPU 30可使用高速缓存来使用本地存储装置代替芯片外存储器而本地处理数据。这通过减少在每个读取和写入命令期间对于GPU 30经由总线114存取存储器108(其可经历繁重总线业务)的需要而允许GPU 30以更高效的方式操作。然而,在一些实例中,GPU 30可能不包括单独的高速缓存,而是替代地经由总线114利用存储器108。GPU高速缓存可以包括一或多个易失性或非易失性存储器或存储装置,比如(例如),随机存取存储器(RAM)、静态RAM(SRAM)、动态RAM(DRAM)等。

CPU 104和/或GPU 30可将光栅化图像数据存储在存储器108内所分配的帧缓冲器中。显示接口110可从帧缓冲器检索数据且配置显示器112以显示由光栅化图像数据表示的图像。在一些实例中,显示接口110可以包括经配置以将从帧缓冲器检索的数字值转换为可由显示器112消耗的模拟信号的数/模转换器(DAC)。在其它实例中,显示接口110可将数字值直接传递到显示器112以进行处理。

显示器112可以包括监视器、电视、投影装置、液晶显示器(LCD)、等离子显示面板、发光二极管(LED)阵列、阴极射线管(CRT)显示器、电子纸、表面传导电子发射显示器(SED)、激光电视显示器、纳米晶体显示器或另一类型的显示单元。显示器112可以集成在计算装置100内。举例来说,显示器112可为移动电话手持机或平板计算机的屏幕。替代地,显示器112可为经由有线或无线通信链路而耦合到计算机装置2的独立装置。举例来说,显示器112可为经由缆线或无线链路而连接到个人计算机的计算机监视器或平板显示器。

总线114可使用总线结构和总线协议的任何组合来实施,包括第一、第二和第三代总线结构和协议、共享总线结构和协议、点对点总线结构和协议、单向总线结构和协议以及双向总线结构和协议。可用以实施总线114的不同总线结构和协议的实例包括例如超传输总线、InfiniBand总线、高级图形端口总线、外围组件互连(PCI)总线、PCI高速总线、高级微控制器总线架构(AMBA)、高级高性能总线(AHB)、AMBA高级外围总线(APB),和AMBA高级eXentisible接口(AXI)总线。也可使用其它类型的总线结构和协议。

根据本发明,计算装置100(例如,CPU 104和/或GPU 30)可经配置以执行本发明中描述的着色器程序执行技术中的任一个。举例来说,GPU 30(例如,GPU 30的着色器单元40)可经配置以执行着色器程序,所述着色器程序根据本发明中描述的技术中的一或多个执行顶点着色器处理并且针对通过着色器程序接收的每个输入顶点产生多个输出顶点。作为另一实例,GPU 30可经配置以如本发明中所描述的根据执行的复制模式和执行的非复制模式中的一或两个执行合并顶点/几何着色器程序。作为另一实例,GPU 30可经配置以在使用复制模式与非复制模式之间选择性地切换以用于根据本发明中描述的技术中的一或多个执行合并顶点/几何着色器程序。

在额外实例中,CPU 104、编译器118和/或GPU 30可经配置以在非复制模式与复制模式之间进行选择以用于执行合并顶点/几何着色器程序并且使得GPU 30中的着色器单元根据本发明中描述的技术中的一或多个根据所选定的着色器程序执行模式执行合并顶点/几何着色器程序。在其它实例中,CPU 104、编译器118和/或GPU 30可经配置以根据本发明中描述的技术中的一或多个针对合并顶点/几何着色器程序产生编译代码。举例来说,CPU 104、编译器118和/或GPU 30可以产生编译代码使得编译代码包括指令,所述指令使得着色器单元基于指示待用于执行着色器程序的模式的信息根据非复制模式或复制模式选择性地执行合并顶点/几何着色器程序。

图9是说明根据本发明用于执行着色器程序的实例技术的流程图。CPU 104(例如,GPU驱动程序116)可以将着色器程序加载到GPU 30(140)上。着色器程序可以执行顶点着色器处理并且可以针对通过着色器程序接收的每个输入顶点产生多个输出顶点。GPU 30(例如,着色器单元40)可以执行着色器程序,所述着色器程序执行顶点着色器处理并且针对通过着色器程序接收的每个输入顶点产生多个输出顶点(142)。

在一些实例中,GPU 30(例如,着色器单元40)可以执行着色器程序的多个实例使得着色器程序的实例中的每一个接收多个输入顶点中的相应一个并且响应于接收多个输入顶点中的相应一个产生多个输出顶点。在一些情况下,GPU 30(例如,着色器单元40)可以并行执行着色器程序的多个实例和/或作为执行的波的一部分执行着色器程序的多个实例。在一些实例中,并行执行实例可以包括执行实例使得实例中的每一个相对于不同数据项同时在着色器单元中的多个处理元件中的相应一个上执行。

在其它实例中,执行顶点着色器处理并且针对通过着色器程序接收的输入顶点中的每一个产生多个输出顶点的着色器程序可以是合并顶点/几何着色器程序。合并顶点/几何着色器程序可以是可配置的以执行顶点着色器处理和几何着色器处理。顶点着色器处理可以通过顶点着色器程序规定并且几何着色器处理可以通过几何着色器程序规定。

在一些实例中,GPU 30(例如,着色器单元40)可以执行合并顶点/几何着色器程序的多个实例使得合并顶点/几何着色器程序的实例中的每一个产生M个输出顶点,其中M是大于或等于2的整数。在一些实例中,M可以等于由合并顶点/几何着色器程序实施的几何着色器程序所规定的最大输出顶点计数值。最大输出顶点计数值可以指示待由几何着色器程序针对由几何着色器程序处理的每个基元产生的输出顶点的最大数目。如果用于合并顶点/几何着色器程序的编译代码是基于几何着色器程序产生的,那么几何着色器程序可以通过合并顶点/几何着色器程序实施。

在其它实例中,合并顶点/着色器程序的实例中的每一个可以是可配置的以相对于分配到合并顶点/着色器程序的相应的实例的基元执行几何着色器处理。在此类实例中,多个基元中的每一个可以分配到一个合并顶点/几何着色器实例以进行处理(例如,每个基元的一个合并顶点/几何着色器实例和/或每个波的一个合并顶点/几何着色器实例)。

在一些实例中,合并顶点/着色器程序的实例中的每一个可以是可配置的以相对于分配到合并顶点/着色器程序的相应的实例的基元执行几何着色器处理并且相对于分配到合并顶点/着色器程序的相应的实例的顶点执行顶点着色器处理。在此类实例中,多个基元中的每一个可以分配到一个合并顶点/几何着色器实例以用于处理(例如,每个基元一个合并顶点/几何着色器实例和/或每个波一个合并顶点/几何着色器实例),并且多个顶点中的每一个可以分配到一个合并顶点/几何着色器实例以用于处理(例如,每个顶点一个合并顶点/几何着色器实例和/或每个波一个合并顶点/几何着色器实例)。在一些情况下,合并顶点/几何着色器程序的实例中的至少一个可经配置以相对于多个顶点中的一个执行顶点着色器处理并且相对于多个基元中的一个执行几何着色器处理。

在一些实例中,着色器单元40可以允许顶点在待重复使用的基元之间共享。举例来说,着色器单元40可以执行合并顶点/几何着色器程序的第一实例、第二实例,和第三实例。合并顶点/几何着色器程序的第一实例可以相对于多个顶点中的一个执行顶点着色器处理以产生顶点着色顶点。合并顶点/几何着色器程序的第二实例可以基于由合并顶点/几何着色器程序的第一实例产生的顶点着色顶点相对于多个基元的第一基元执行几何着色器处理以产生对应于第一基元的一或多个几何着色顶点。合并顶点/几何着色器程序的第三实例可以基于由合并顶点/几何着色器程序的第一实例产生的顶点着色顶点相对于多个基元的第二基元执行几何着色器处理以产生对应于第二基元的一或多个几何着色顶点。

图10是说明根据本发明根据复制模式和非复制用于执行合并顶点/几何着色器程序的实例技术的流程图。一般而言,GPU 30(例如,着色器单元38中的一或多个)可以是可配置的以按非复制着色器程序执行模式操作并且是可配置的以按复制着色器程序执行模式操作。

GPU 30接收指示待用于执行合并顶点/几何着色器程序的所选定的着色器程序执行模式的信息(144)。GPU 30确定指示所选定的着色器程序执行模式的信息是否指示复制模式将用于执行合并顶点/几何着色器程序(146)。

如果指示所选定的着色器程序执行模式的信息指示复制模式并不用于执行合并顶点/几何着色器程序,那么GPU 30可以非复制模式操作。当以非复制模式操作时,着色器单元40可以基于线程配置操作,其中多个基元中的每一个被分配到一个合并顶点/几何着色器实例以用于几何着色器处理(148),多个顶点中的每一个被分配到一个合并顶点/几何着色器实例以用于处理(150),并且合并顶点/几何着色器程序的实例中的每一个输出M个输出顶点(152)。在一些实例中,线程调度器36可以将多个基元中的每一个分配到一个合并顶点/几何着色器实例以用于几何着色器处理(148),并且将多个顶点中的每一个分配到一个合并顶点/几何着色器实例以用于处理(150)。

在一些实例中,M可以是大于或等于2的整数。在其它实例中,M可以等于多少个顶点是针对通过由合并顶点/几何着色器程序实施的几何着色器级处理的基元中的每一个产生的。

如果指示所选定的着色器程序执行模式的信息指示复制模式待用于执行合并顶点/几何着色器程序,那么GPU 30可以复制模式操作。当以复制模式操作时,着色器单元40可以基于线程配置操作,其中多个基元中的每一个被分配到N个合并顶点/几何着色器实例以用于几何着色器处理(154),多个顶点中的每一个被分配到K个合并顶点/几何着色器实例以用于处理(156),并且合并顶点/几何着色器程序的实例中的每一个输出一个输出顶点(158)。在一些实例中,线程调度器36可以分配多个基元中的每一个到N个合并顶点/几何着色器实例以用于几何着色器处理(154),并且分配多个顶点中的每一个到K个合并顶点/几何着色器实例以用于处理(156)。

在一些实例中,N可以是大于或等于2的整数。在其它实例中,N可以等于由合并顶点/几何着色器程序实施的几何着色器程序所规定的最大输出顶点计数值。最大输出顶点计数值为指示待由几何着色器程序针对由几何着色器程序处理的每个基元产生的输出顶点的最大数目。在额外实例中,M可以小于或等于N。在一些实例中,K可以是等于多少个基元包括相应的顶点的整数。

图11是根据本发明用于选择复制模式和非复制中的一个以用于执行合并顶点/几何着色器程序的实例技术的流程图。CPU 104和/或GPU驱动程序116确定指示存储与通过合并顶点/几何着色器程序实施的几何着色器程序相关联的输出顶点所需要的存储空间的总量的信息(160)。CPU 104和/或GPU驱动程序116确定指示存储空间的总量的信息是否大于阈值(162)。

响应于确定指示存储空间的总量并不大于阈值的信息,CPU 104和/或GPU驱动程序116选择非复制着色器程序执行模式作为所选定的着色器程序执行模式(164)。响应于确定指示存储空间的总量大于阈值的信息,CPU 104和/或GPU驱动程序116选择复制着色器程序执行模式作为所选定的着色器程序执行模式(166)。

一般而言,CPU 104和/或GPU驱动程序116可以选择非复制着色器程序执行模式和复制着色器程序执行模式中的一个作为选择的着色器程序执行模式以用于基于指示存储与通过合并顶点/几何着色器程序实施的几何着色器程序相关联的输出顶点所需要的存储空间的总量的信息执行合并顶点/几何着色器程序。CPU 104和/或GPU驱动程序116可以使得GPU 30的着色器单元40基于所选定的着色器程序执行模式执行合并顶点/几何着色器程序。

在一些实例中,非复制模式可以使用几何着色器功能性,所述几何着色器功能性是针对较小放大优化的但是仍可以支持全部放大。几何着色器功能性可与若干不同类型的基元一起使用包括例如点子图形(一个点在内,4个顶点在外)、立方图(三角形在内,6个三角形在外,即,18个顶点在外)、阴影体积(三角形在内,15个顶点在外)。

在一些实例中,非复制模式可以支持每个几何着色器实例一个光纤。在其它实例中,非复制模式可以在一些实例中避免重复的ALU计算、避免每个顶点发出的重复的资源分配(例如,GPR)和/或避免实施无序存取视图(UAV)的专业化处理的需要。在额外实例中,非复制模式可以支持顶点重复使用以用于具有小于4个顶点的输入基元。

在一些实例中,如在以下实例中所说明,就每个波可以处理的基元的数目而言非复制模式可以提供与复制模式相比更好的性能。根据第一实例,可以处理多个点子图形基元。输入拓朴可以是点列表(即,PointList),并且几何着色器的最大输出顶点计数可以等于四(即,MaxGSOutputVertex=4)。在此实例中,复制模式可以处理每个波8个基元。然而,非复制模式可以处理每个波32个基元,由此在每个波的基元处理量中提供4倍的改进。

根据第二实例,输入拓朴是三角形条带(即,TriangleStrip),并且MaxGSOutputVertex=4。在此实例中,复制模式可以处理每个波8个基元。然而,非复制模式可以处理每个波30个基元,由此在每个波的基元处理量中提供3.75倍的改进。

根据第三实例,输入拓朴是三角形列表(即,TriangleStrip),并且MaxGSOutputVertex=18(例如,立方图)。在此实例中,复制模式可以处理每个波2个基元。举例来说,复制模式可以执行每个波32发出,并且因此一旦波完成则开始处理它们。然而,非复制模式可以处理每个波30个基元,由此在基元处理量中提供3.75倍的改进。举例来说,非复制模式可以执行每个光纤18个发出(即,每个波576个顶点),并且因此当波完成时处理它们。在一些情况下,有限数目的几何着色器波能够发射。然而,用户能够进行编程以限制每个波的输入几何着色器基元的数目。

根据第四实例,输入拓朴是10个控制点补丁(即,Patch_10),并且MaxGSOutputVertex=4。在此实例中,复制模式可以处理每个波3个基元,并且非复制模式可以处理每个波3个基元(例如,无顶点重复使用)。因而,就每个波的基元处理量而言可能不存在性能改进。然而,非复制仍然可以提供电力节省,因为波中的其它批次的光纤可能并未运行几何着色器(即,3个光纤可以运行几何着色器代码)。

在一些实例中,每个合并顶点着色器/几何着色器(VS|GS)光纤可以支持一个基元在内,多顶点在外。在一些实例中,GPU可以输出具有掩膜标志的顶点的多个波,所述掩膜标志指示哪个光纤具有有效的顶点(例如,每个发出一个波)。在一些实例中,可以执行输入基元的顶点重复使用检查以产生用于给定VS|GS波中的输入基元的唯一顶点的顶点着色器以用于具有小于4个顶点的基元。

本发明中所描述的技术可至少部分在硬件、软件、固件或其任何组合中实施。举例来说,所描述技术的各种方面可实施于一或多个处理器中,包括一或多个微处理器、数字信号处理器(DSP)、专用集成电路(ASIC)、现场可编程门阵列(FPGA),或任何其它等效集成或离散逻辑电路,以及此类组件的任何组合。术语“处理器”或“处理电路”可通常指代上述逻辑电路中的任一者(单独或结合其他逻辑电路)或例如执行处理的离散硬件的任何其它等效电路。

此类硬件、软件和固件可实施于相同装置内或单独装置内以支持本发明中所描述的各种操作和功能。另外,所描述单元、模块或组件中的任一者可一起或单独作为离散但可互操作逻辑装置而实施。将不同特征描绘为模块或单元意图强调不同功能方面且未必暗示此类模块或单元必须由单独硬件或软件组件实现。实际上,与一或多个模块或单元相关联的功能性可由单独硬件、固件和/或软件组件执行,或集成到共用或单独硬件或软件组件内。

本发明中所描述的技术也可存储、实施或编码于计算机可读媒体(例如,存储指令的计算机可读存储媒体)中。嵌入或编码于计算机可读媒体中的指令可使得一或多个处理器执行本文中所描述的技术(例如,当由一或多个处理器执行指令时)。在一些实例中,计算机可读媒体可为非暂时性计算机可读存储媒体。计算机可读存储媒体可以包括随机存取存储器(RAM)、只读存储器(ROM)、可编程只读存储(PROM)、可擦除可编程只读存储器(EPROM)、电可擦除可编程只读存储器(EEPROM)、快闪存储器、硬盘、CD-ROM、软盘、盒式磁带、磁性媒体、光学媒体或其它有形计算机可读存储媒体。

计算机可读媒体可以包括计算机可读存储媒体,其对应于例如上文所列的有形存储媒体的有形存储媒体。计算机可读媒体也可包括通信媒体,其包括有助于计算机程序从一个地点到另一地点的传送(例如,根据通信协议)的任何媒体。以此方式,短语“计算机可读媒体”大体上可对应于(1)非暂时性有形计算机可读存储媒体和(2)例如暂时性信号或载波的非有形计算机可读通信媒体。

已描述各种方面和实例。然而,可在不脱离所附权利要求书的范围的情况下对本发明的结构或技术作出修改。

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