平码五不中公式规律
  • / 45
  • 下载费用:30 金币  

用于图形处理中的着色器程序执行技术.pdf

关 键 ?#21097;?/dt>
用于 图形 处理 中的 着色 程序 执行 技术
  专利查询网所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
摘要
申请专利号:

CN201580044553.X

申请日:

2015.08.07

公开号:

CN106663331A

公开日:

2017.05.10

当前法律状态:

授权

?#34892;?#24615;:

有权

法?#19978;?#24773;: 授权|||实质审查的生效IPC(主分类):G06T 15/00申请日:20150807|||公开
IPC分类号: G06T15/00(2011.01)I; G06T15/83(2011.01)I; G06F9/50; G06T1/20 主分类号: G06T15/00
申请人: 高通股份有限公司
发明人: 维尼特·戈尔; 金东炫; 钟刚
地址: 美国加利福尼亚州
优?#28909;ǎ?/td> 2014.08.22 US 14/466,554
专利代理机构: ?#26412;?#24459;盟知识产权代理有限责任公司 11287 代理人: 宋献涛
PDF完整版下载: PDF下载
法律状态
申请(专利)号:

CN201580044553.X

授权公告号:

||||||

法律状态公告日:

2018.06.12|||2017.06.06|||2017.05.10

法律状态类型:

授权|||实质审查的生效|||公开

摘要

本发明描述了用于在图形处理单元GPU中执行着色器程序的技术。在一些实例中,所述用于执行着色器程序的技术可以包括通过图形处理器的着色器单元执行着色器程序,所述着色器程序执行顶点着色器处理并且针对由所述着色器程序接收的每个输入顶点产生多个输出顶点。在其它实例中,所述用于执行着色器程序的技术可以包括使用非复制模式的执行来执行合并顶点/几何着色器程序。所述非复制模式的执行可以涉及将多个基元中的每一个分配到每个基元的一个合并顶点/几何着色器程序实例并且使得所述实例中的每一个输出多个顶点。在额外实例中,所述用于执行着色器程序的技术可以包括用于选择非复制模式和复制模式中的一个以用于执行合并顶点/几何着色器程序的技术。

权利要求书

1.一种方法,其包括:
通过图形处理器的着色器单元执行着色器程序,所述着色器程序执行顶点着色器处理
并且针对由所述着色器程序接收的每个输入顶点产生多个输出顶点。
2.根据权利要求1所述的方法,其中通过所述图形处理器的所述着色器单元执行所述
着色器程序包括:
通过所述着色器单元执行所述着色器程序的多个实例使得所述着色器程序的所述实
例中的每一个接收多个输入顶点中的相应一个并且响应于接收到所述多个输入顶点中的
所述相应一个产生多个输出顶点。
3.根据权利要求1所述的方法,其中所述顶点着色器处理是通过顶点着色器程序规定
的,并且其中所述着色器程序包括合并顶点/几何着色器程序,所述合并顶点/几何着色器
程序是可配置的以执行通过所述顶点着色器程序规定的所述顶点着色器处理以及通过几
何着色器程序规定的几何着色器处理。
4.根据权利要求1所述的方法,其中所述着色器程序包括合并顶点/几何着色器程序,
所述合并顶点/几何着色器程序是可配置的以执行顶点着色器处理?#22270;?#20309;着色器处理,并
且其中通过所述图形处理器的所述着色器单元执行所述着色器程序包括:
通过所述着色器单元执行所述合并顶点/几何着色器程序的多个实例使得所述合并顶
点/几何着色器程序的所述实例中的每一个产生M个输出顶点,其中M是大于或等于2的整
数。
5.根据权利要求4所述的方法,其中M等于通过由所述合并/顶点几何着色器程序实施
的几何着色器程序规定的最大输出顶点计数值,所述最大输出顶点计数值指示针对由所述
几何着色器程序处理的每个基元待由所述几何着色器程序产生的最大数目的输出顶点。
6.根据权利要求4所述的方法,
其中所述合并顶点/着色器程序的所述实例中的每一个是可配置的以相对于分配到所
述合并顶点/着色器程序的所述相应的实例的基元执行所述几何着色器处理,并且
其中多个基元中的每一个被分配到一个合并顶点/几何着色器实例以用于进行处理。
7.根据权利要求6所述的方法,
其中所述合并顶点/着色器程序的所述实例中的每一个是进一步可配置的以相对于分
配到所述合并顶点/着色器程序的所述相应的实例的顶点执行所述顶点着色器处理,
其中多个顶点中的每一个被分配到一个合并顶点/几何着色器实例以用于进行处理,
并且
其中所述合并顶点/几何着色器程序的所述实例中的至少一个经配置以相对于所述多
个顶点中的一个执行所述顶点着色器处理并且相对于所述多个基元中的一个执行所述几
何着色器处理。
8.根据权利要求6所述的方法,其中所述合并顶点/着色器程序的所述实例中的每一个
可以是进一步可配置的以相对于分配到所述合并顶点/着色器程序的所述相应的实例的顶
点执行所述顶点着色器处理,并且其中通过所述着色器单元执行所述合并顶点/几何着色
器程序的所述多个实例进一步包括:
通过所述合并顶点/几何着色器程序的第一实例相对于多个顶点中的一个执行所述顶
点着色器处理以产生顶点着色顶点;
通过所述合并顶点/几何着色器程序的第二实例相对于所述多个基元中的第一基元基
于由所述合并顶点/几何着色器程序的所述第一实例产生的所述顶点着色顶点执行所述几
何着色器处理以产生对应于所述第一基元的一或多个几何着色顶点;并且
通过所述合并顶点/几何着色器程序的第三实例相对于所述多个基元中的第二基元基
于由所述合并顶点/几何着色器程序的所述第一实例产生的所述顶点着色顶点执行所述几
何着色器处理以产生对应于所述第二基元的一或多个几何着色顶点。
9.根据权利要求1所述的方法,
其中所述图形处理器是可配置的以在第一着色器程序执行模式中操作并且是可配置
的在不同于所述第一着色器程序执行模式的第二着色器程序执行模式中操作,
其中所述着色器程序包括可配置以执行顶点着色器处理?#22270;?#20309;着色器处理的合并顶
点/几何着色器程序,
其中通过所述图形处理器的所述着色器单元执行所述着色器程序包括通过所述着色
器单元执行所述合并顶点/几何着色器程序的多个实例,
其中所述合并顶点/着色器程序的所述实例中的每一个是可配置的以相对于分配到所
述合并顶点/着色器程序的所述相应的实例的顶点执行顶点着色器处理并且相对于分配到
所述合并顶点/着色器程序的所述相应的实例的基元执行几何着色器处理,
其中当在所述第一着色器程序执行模式中操作时,多个基元中的每一个被分配到一个
合并顶点/几何着色器实例以用于几何着色器处理并且所述合并顶点/几何着色器程序的
所述实例中的每一个输出M个输出顶点,其中M是大于或等于2的整数,以及
其中当在所述第二着色器程序执行模式中操作时,所述多个基元中的每一个被分配到
N个合并顶点/几何着色器实例以用于几何着色器处理并且所述合并顶点/几何着色器程序
的所述实例中的每一个输出一个输出顶点,其中N是大于或等于2的整数并且M小于或等于
N。
10.根据权利要求9所述的方法,
其中M等于多少个顶点是针对通过由所述合并顶点/几何着色器程序实施的几何着色
器级处理的基元中的每一个产生的,并且
其中N等于通过由所述合并/顶点几何着色器程序实施的几何着色器程序规定的最大
输出顶点计数值,所述最大输出顶点计数值指示针对由所述几何着色器程序处理的所述基
元中的每一个待由所述几何着色器程序产生的最大数目的输出顶点。
11.根据权利要求9所述的方法,
其中当在所述第一着色器程序执行模式中操作时,多个顶点中的每一个被分配到一个
合并顶点/几何着色器实例以用于进行处理,并且
其中当在所述第二着色器程序执行模式中操作时,所述多个顶点中的每一个被分配到
K个合并顶点/几何着色器实例以用于进行处理,其中K是等于多少个基元包括所述相应的
顶点的整数。
12.根据权利要求9所述的方法,其中所述方法进一步包括:
选择第一着色器程序执行模式和所述第二着色器程序执行模式中的一个作为所选定
的着色器程序执行模式以用于基于指示存储与通过所述合并顶点/几何着色器程序实施的
几何着色器程序相关联的输出顶点所需要的存储空间的总量的信息执行所述合并顶点/几
何着色器程序;并且
使得所述着色器单元基于所述所选定的着色器程序执行模式执行所述合并顶点/几何
着色器程序。
13.根据权利要求12所述的方法,其中选择所述第一着色器程序执行模式和所述第二
着色器程序执行模式中的所述一个包括:
确定指示所述存储空间的总量是否大于阈值的信息;
响应于确定指示所述存储空间的总量大于所述阈值的信息选择所述第二着色器程序
执行模式作为所述所选定的着色器程序执行模式;并且
响应于确定指示所述存储空间的总量并不大于所述阈值的所述信息选择所述第一着
色器程序执行模式作为所述所选定的着色器程序执行模式。
14.一种装置,其包括:
图形处理单元GPU,其包括着色器单元,所述着色器单元经配置以执行着色器程序,所
述着色器程序执行顶点着色器处理并且针对由所述着色器程序接收的每个输入顶点产生
多个输出顶点。
15.根据权利要求14所述的装置,其中所述着色器单元进一步经配置以进行以下操作:
执行所述着色器程序的多个实例使得所述着色器程序的所述实例中的每一个接收多
个输入顶点中的相应一个并且响应于接收到所述多个输入顶点中的相应一个产生多个输
出顶点。
16.根据权利要求14所述的装置,其中所述顶点着色器处理是通过顶点着色器程序规
定的,并且其中所述着色器程序包括合并顶点/几何着色器程序,所述合并顶点/几何着色
器程序是可配置的以执行通过所述顶点着色器程序规定的所述顶点着色器处理以及通过
几何着色器程序规定的几何着色器处理。
17.根据权利要求14所述的装置,其中所述着色器程序包括合并顶点/几何着色器程
序,所述合并顶点/几何着色器程序是可配置的以执行顶点着色器处理?#22270;?#20309;着色器处理,
并且其中所述着色器单元进一步经配置以进行以下操作:
执行所述合并顶点/几何着色器程序的多个实例使得所述合并顶点/几何着色器程序
的所述实例中的每一个产生M个输出顶点,其中M是大于或等于2的整数。
18.根据权利要求17所述的装置,其中M等于通过由所述合并/顶点几何着色器程序实
施的几何着色器程序规定的最大输出顶点计数值,所述最大输出顶点计数值指示针对由所
述几何着色器程序处理的每个基元待由所述几何着色器程序产生的最大数目的输出顶点。
19.根据权利要求17所述的装置,
其中所述合并顶点/着色器程序的所述实例中的每一个是可配置的以相对于分配到所
述合并顶点/着色器程序的所述相应的实例的基元执行所述几何着色器处理,并且
其中多个基元中的每一个被分配到一个合并顶点/几何着色器实例以用于进行处理。
20.根据权利要求19所述的装置,
其中所述合并顶点/着色器程序的所述实例中的每一个是进一步可配置的以相对于分
配到所述合并顶点/着色器程序的所述相应的实例的顶点执行所述顶点着色器处理,
其中多个顶点中的每一个被分配到一个合并顶点/几何着色器实例以用于进行处理,
并且
其中所述合并顶点/几何着色器程序的所述实例中的至少一个经配置以相对于所述多
个顶点中的一个执行所述顶点着色器处理并且相对于所述多个基元中的一个执行所述几
何着色器处理。
21.根据权利要求19所述的装置,其中所述合并顶点/着色器程序的所述实例中的每一
个是进一步可配置的以相对于分配到所述合并顶点/着色器程序的所述相应的实例的顶点
执行所述顶点着色器处理,并且其中所述着色器单元进一步经配置以进行以下操作:
通过所述合并顶点/几何着色器程序的第一实例相对于多个顶点中的一个执行所述顶
点着色器处理以产生顶点着色顶点;
通过所述合并顶点/几何着色器程序的第二实例相对于所述多个基元中的第一基元基
于由所述合并顶点/几何着色器程序的所述第一实例产生的所述顶点着色顶点执行所述几
何着色器处理以产生对应于所述第一基元的一或多个几何着色顶点;并且
通过所述合并顶点/几何着色器程序的第三实例相对于所述多个基元中的第二基元基
于由所述合并顶点/几何着色器程序的所述第一实例产生的所述顶点着色顶点执行所述几
何着色器处理以产生对应于所述第二基元的一或多个几何着色顶点。
22.根据权利要求14所述的装置,
其中所述GPU是可配置的以在第一着色器程序执行模式中操作并且是可配置的在不同
于所述第一着色器程序执行模式的第二着色器程序执行模式中操作,
其中所述着色器程序包括可配置以执行顶点着色器处理?#22270;?#20309;着色器处理的合并顶
点/几何着色器程序,
其中所述着色器单元进一步经配置以执行所述合并顶点/几何着色器程序的多个实
例,
其中所述合并顶点/着色器程序的所述实例中的每一个是可配置的以相对于分配到所
述合并顶点/着色器程序的所述相应的实例的顶点执行顶点着色器处理并且相对于分配到
所述合并顶点/着色器程序的所述相应的实例的基元执行几何着色器处理,
其中当在所述第一着色器程序执行模式中操作时,多个基元中的每一个被分配到一个
合并顶点/几何着色器实例以用于几何着色器处理并且所述合并顶点/几何着色器程序的
所述实例中的每一个输出M个输出顶点,其中M是大于或等于2的整数,以及
其中当在所述第二着色器程序执行模式中操作时,所述多个基元中的每一个被分配到
N个合并顶点/几何着色器实例以用于几何着色器处理并且所述合并顶点/几何着色器程序
的所述实例中的每一个输出一个输出顶点,其中N是大于或等于2的整数并且M小于或等于
N。
23.根据权利要求22所述的装置,
其中M等于多少个顶点是针对通过由所述合并顶点/几何着色器程序实施的几何着色
器级处理的基元中的每一个产生的,并且
其中N等于通过由所述合并/顶点几何着色器程序实施的几何着色器程序规定的最大
输出顶点计数值,所述最大输出顶点计数值指示针对由所述几何着色器程序处理的所述基
元中的每一个待由所述几何着色器程序产生的最大数目的输出顶点。
24.根据权利要求22所述的装置,
其中当在所述第一着色器程序执行模式中操作时,多个顶点中的每一个被分配到一个
合并顶点/几何着色器实例以用于进行处理,并且
其中当在所述第二着色器程序执行模式中操作时,所述多个顶点中的每一个被分配到
K个合并顶点/几何着色器实例以用于进行处理,其中K是等于多少个基元包括所述相应的
顶点的整数。
25.根据权利要求22所述的装置,其中所述装置进一步包括:
一或多个处理器,其经配置以进行以下操作:
选择第一着色器程序执行模式和所述第二着色器程序执行模式中的一个作为所选定
的着色器程序执行模式以用于基于指示存储与通过所述合并顶点/几何着色器程序实施的
几何着色器程序相关联的输出顶点所需要的存储空间的总量的信息执行所述合并顶点/几
何着色器程序;并且
使得所述着色器单元基于所述所选定的着色器程序执行模式执行所述合并顶点/几何
着色器程序。
26.根据权利要求25所述的装置,其中所述一或多个处理器进一步经配置以进行以下
操作:
确定指示所述存储空间的总量是否大于阈值的信息;
响应于确定指示所述存储空间的总量大于所述阈值的信息选择所述第二着色器程序
执行模式作为所述所选定的着色器程序执行模式;并且
响应于确定指示所述存储空间的总量并不大于所述阈值的所述信息选择所述第一着
色器程序执行模式作为所述所选定的着色器程序执行模式。
27.根据权利要求14所述的装置,其中所述装置包括无线通信装置。
28.根据权利要求14所述的装置,其中所述装置包括移动电话手?#21482;?br />29.一种设备,其包括:
图形处理器,其包括着色器单元;以及
用于通过所述图形处理器的所述着色器单元执行着色器程序的装置,所述着色器程序
执行顶点着色器处理并且针对由所述着色器程序接收的每个输入顶点产生多个输出顶点。
30.一?#25191;?#20648;指令的非暂时性计算机可读存储媒体,所述指令在由一或多个处理器执
行时使得所述一或多个处理器进行以下操作:
通过图形处理器的着色器单元执行着色器程序,所述着色器程序执行顶点着色器处理
并且针对由所述着色器程序接收的每个输入顶点产生多个输出顶点。

说明书

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

技术领域

本发明涉及图形处理系统,且更?#38750;械?#35828;,涉及在图形处理系统中执行着色器程
序。

背景技术

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

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

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

发明内容

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

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

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

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

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

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

在附图和以下描述中阐述本发明的一或多个实例的?#38468;凇?#26412;发明的其它特征、对
象和优点将从所述描述和图式以及权利要求书中显而?#20934;?br />

附图说明

图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执行的可编程顶点处理的灵活
性。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

此外,执行针对通过着色器程序接收的输入顶点中的每一个产生多个输出顶点的
着色器程序可以增加用于图形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上的用户水平图形应用程序限定。在额外的情
况中,着色器程序可以是写入在高水平着色语言中的源代码着色器程序的编译版本,所述
高水平着色语言?#28909;?例如)高级着色语言(HLSL)、OpenGL着色语言(GLSL)、用于图形的C
(Cg)着色语言等。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

本地存储器50可以是任何类型的存储器包括例如?#36164;源?#20648;器、随机存取存储器
(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执行几何着色器处理。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

举例来说,如果选择非复制模式,那么线程调度器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
产生。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

如图7中所示,编译器可以在顶点着色器处理代码82与几何着色器处理代码84之
间插入补丁代码86。补丁代码86可以使得着色器单元40将由顶点着色器处理代码82产生的
输出顶点存储到着色器单元40的寄存器48中,并且执行与将着色器单元40从顶点着色器处
理模式切换到几何着色器处理模式相关联的操作。与将着色器单元40从顶点着色器处理模
式切换到几何着色器处理模式相关联的操作可以包括CHMSK操作和CHSH操作。CHMSK操作可
以将着色器单元40中的资源指示器切换到几何着色器资源偏移。CHSH操作可以将着色器单
元40中的程序计数器切换?#25509;?#20960;何着色器处理代码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可包括个人计算机、台式计算机、膝上?#22270;?#31639;机、计算机工作站、视频游戏
平台或控制台、无线通信装置(?#28909;?例如),移动电话、蜂窝式电话、卫星电话和/或移动电
话手?#21482;?、陆线电话、互联网电话、手持式装置(例如,便携式视频游戏装置或个人数?#31181;?br />理(PDA))、个人音乐播放器、视频播放器、显示装置、电视机、电视机顶?#23567;?#26381;务器、中间网络
装置、主机计算机,或处理和/或显示图形数据的任何其它类型的装置。

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

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

编译器118可以接收用于一或多个不同类型的着色器程序的源代码并且产生用于
着色器程序的编译源代码。举例来说,编译器118可以接收用于顶点着色器程序的源代码和
用于几何着色器程序的源代码、基于用于顶点着色器程序的源代码产生用于顶点着色器程
序的编译代码,并?#19968;?#20110;用于几何着色器程序的源代码产生用于几何着色器程序的编译代
码。编译器118也可以基于用于顶点着色器程序?#22270;?#20309;着色器程序的编译代码产生合并顶
点/几何着色器程序。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可包括一或多个?#36164;?#24615;或非
?#36164;源?#20648;器或存储装置,例如,随机存取存储器(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上执行的软件应用程序中的一个决定将计算任务?#23545;?#21040;
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)、数?#20013;?#21495;处理器
(DSP)或其它等效的集成或离散逻辑电路。

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

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

显示器112可以包括监视器、电视、投影装置、液晶显示器(LCD)、等离子显示面板、
发光二极管(LED)阵列、阴极射线管(CRT)显示器、电子纸、表面传导电子发射显示器(SED)、
激光电视显示器、纳米晶体显示器或另一类型的显示单元。显示器112可以集成在计算装置
100内。举例来说,显示器112可为移动电话手?#21482;?#25110;平板计算机的屏幕。替代地,显示器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可经配置以在使用复
制模?#25509;?#38750;复制模式之间选择性地切换以用于根据本发明中描述的技术中的一或多个执
行合并顶点/几何着色器程序。

在额外实例中,CPU 104、编译器118和/或GPU 30可经配置以在非复制模?#25509;?#22797;制
模式之间进行选择以用于执行合并顶点/几何着色器程序并且使得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)可以
并行执行着色器程序的多个实例和/或作为执行的波的一部分执行着色器程序的多个实
例。在一些实例中,并行执行实例可以包括执行实例使得实例中的每一个相对于不同数据
项同时在着色器单元中的多个处理元件中的相应一个上执行。

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

在一些实例中,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)的专业化处理的需要。在额外实例中,非
复制模式可以支持顶点重复使用以用于具?#34892;?#20110;4个顶点的输入基元。

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

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

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

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

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

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

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

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

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

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

关于本文
本文标题:用于图形处理中的着色器程序执行技术.pdf
链接地址:http://www.pqiex.tw/p-6091959.html
关于我们 - 网站声明 - 网?#38236;?#22270; - 资源地图 - 友情链接 - 网站客服 - 联系我们

[email protected] 2017-2018 zhuanlichaxun.net网站版权所有
经营许可证编号:粤ICP备17046363号-1 
 


收起
展开
平码五不中公式规律 欢乐斗地主二人斗地主 浙江快乐12计划杀号 广东时时 亚游集团ag赢100万 唐嫣公司老板wkb 江西时时2000万 最光荣的事情就是赚钱 北京塞车开奖结果直播 大小单双最稳的买法 牛牛游戏平台有哪些