图形流水线状态的快速重新配置的制作方法

文档序号:6455366阅读:235来源:国知局
专利名称:图形流水线状态的快速重新配置的制作方法
图形流水线状态的快速重新配置
祖旦 冃豕
在屏幕上渲染并显示三维(3-D)图形通常涉及许多运算和计算。在简单 的图形系统中,这一计算根据中央处理单元(CPU)和图形处理单元(GPU) 的某一等级的协作或共享处理来发生。在一个示例性场景中,在处理了指令并 且在CPU中发生了某些初始计算之后,将定义要渲染的对象的一组坐标点或 顶点存储在视频存储器中以供图形流水线中的GPU进一步处理。当图形程序 员经由一组可用的图形API来开发图形应用程序时,该程序员一般指示要由一 组算法元素来处理的一组顶点。该数据被发送到图形流水线,且每一顶点通过 图形流水线中一组固定的GPU子单元来流传送。称为镶嵌器(tesselator)的这 些子单元之一根据被设计成有效地覆盖所表示的对象的表面的预定算法将图 形数据分成简单的多边形。之后,有时称为着色器或"着色器程序"的一个或 多个可编程着色器单元可以处理该数据并对图形数据执行专门的操作。着色器 可包括例如,顶点着色器、几何着色器和像素着色器。
单个着色器可以接收着色器常量的不同组合,并且取决于所提供的特定着 色器常量的组合,由着色器生成的输出将变化。这些着色器常量可以指定,例 如如何组合像素、如何读入和读出数据、以及在纹理的情况下如何从该纹理中 提取值。着色的过程是计算密集型的,并且是复杂的过程。当这些特定着色器 在图形流水线中操作时,由于发生在每一阶段的操作,存在有规律的瓶颈。
"状态"指的是由着色器程序解释的资源。在任何给定实例下,图形流水 线包含大量的动态状态(渲染状态、着色器、着色器常量变量、资源/存储器绑 定等)。状态的不同组合允许各种模拟材料和视觉效果。
该状态的一个分量是在执行着色器程序之前需要被绑定到GPU的一组着 色器常量。由于用于实现图形流水线的硬件在任何给定实例下可以仅处于一种 配置,因此期望的是减少设置状态(例如,着色器常量)和向GPU发出命令 所花费的时间。某些着色器利用了保存着色器常量的组或聚集的常量缓冲区(而非常量寄 存器)。常量缓冲区可以允许更迅速地将着色器常量设置到GPU,因为着色器
常量的聚集被分组在一起。
尽管有这些进步,但是仍期望高效地管理状态以避免冗余的求值和设备状 态修改。例如,期望提供用于高效地安排在不同着色器处使用的常量缓冲区(或 其它资源)以便更高效地将状态设置到GPU的技术。
概述
提供了用于重新配置包括多个资源的依赖性树的技术。该依赖性树跟踪不 同着色器资源之间的关系或依赖性。每一特定资源被绑定到该依赖性树中的父 对象的槽。根据这些技术,扫描该依赖性树中的每一依赖性,并且计算与该依 赖性树的每一不同重新配置(着色器的重新映射或重新构建)相关联的成本。
依赖性树的每一重新配置改变特定资源(CB)所绑定到的具体槽。然后可以
选择减少或最小化用于在更高级状态之间转换的设备重新配置的数量的该依 赖性树的特定重新配置。换言之,可以选择最小化需要重新绑定以在当前加载 的着色器之间转换/切换的槽的数量的依赖性树的特定重新配置。在一个实现 中,这些技术可以对于离线内容生成和存储来执行(例如,如果着色器设置是 事先已知的,则分析着色器,重新映射依赖性,然后将着色器保存回盘)。在 一个替换实现中,在应用程序运行时/加载时动态地执行该方法(例如,如果着 色器设置事先未知)。
提供本概述以便以简化的形式介绍将在以下详细描述中进一步描述的一 些概念。本概述并不旨在标识出所要求保护的主题的关键特征或必要特征,也 不旨在用于限制所要求保护的主题的范围。
附图简述
用于优化图形流水线的性能的系统和方法参考附图来进一步描述,附图



图1是表示具有其中可实现本发明的各种计算设备的示例性网络环境的
框图;图2是表示其中可实现本发明的示例性非限制计算环境的框图; 图3示出了包括图形子单元的示例性图形系统,该图形子单元包括图形处 理单元(GPU)和用于相关联的图形流水线的示例性硬件配置。
图4是表示公共着色器核的硬件和软件组件的示例性、非限制性实施例的
框图5A示出了依赖性树的示例性、非限制性框图5B是示出一个示例性、非限制性图形流水线中多个常量缓冲区对多个 不同着色器程序的分配的示例性、非限制性框图6示出了图形流水线中用于最优地将资源绑定到与着色器相关联的特 定槽的示例性、非限制性流程图7示出了用于计算公共资源/槽关联的示例性、非限制性流程图8示出了用于确定资源/槽绑定的示例性、非限制性流程图;以及
图9示出了用于计算关于将每一资源绑定到第一个槽的成本的示例性、非
限制性流程图。 详细描述
以下详细描述本质上仅是示例性的,而非旨在限制本发明或本申请以及本 发明的用途。在此使用的词语"示例性"意味着"用作示例、实例或说明"。 在此被描述为"示例性"的任何实现并不一定要被解释为相比其它实现更优选 或有利。以下所描述的所有实现都是被提供来使本领域的技术人员能够做出或 使用本发明的示例性实现,而非旨在限制由所附权利要求书所定义的本发明的 范围。此外,没有任何意图受到以上背景、简要概述或以下详细描述中所提出 的任何所表达的或蕴含的理论的绑定。
术语
如此处所使用的,术语"着色器"可用于一般指GPU中执行着色的硬件 子单元,或指被下载到GPU的、随后被加载到例如寄存器存储等存储器的、 由着色器(硬件)用来执行着色的指令或令牌集。术语"着色器"也可以指一 起工作的两者。在结合术语"着色器"还使用了术语"子单元"的情况下,术
7的是GPU中执行与着色相关联的处理的子单元。 术语"着色器程序" 一般可以指驻留并运行在图形流水线中、可用于在3D屏 幕上环境中帮助确定/定义图像或对象的最终的屏幕上表面特性的计算机程序 或进程。"着色器"可以每秒执行十亿次计算,以执行其特定任务。
如此处所使用的,术语"资源"可以指着色器程序使用的输入,并且可包 括例如纹理、采样器、常量缓冲区、或着色器程序所使用的任何其它资源。
如此处所使用的,术语"着色器常量"可以指被馈送到着色器程序的不同 参数或变量,其允许着色器程序基于所使用的特定着色器常量来产生不同结 果。着色器程序可以接收关于每一着色器常量的一定范围的不同值。着色器常 量变量在该着色器的调用期间不改变值。
概览
提供了用于跟踪着色器常量的运行时使用模式,然后生成关于着色器常量 的使用模式的使用模式数据的技术。该使用模式数据然后可以被馈送到优化算 法以有效地布置数据以获得给定特定试探下的最大性能。所考虑的因素包括, 例如值的客户机更新的频率、特定着色器的使用、以及所得缓冲区的大小和数
示例性联网和分布式环境
本领域的普通技术人员可以理解,本发明可以结合任何计算机或可作为计 算机网络的一部分来部署的其它客户机或服务器设备来实现,或可在分布式计 算环境中实现。在这一点上,本发明涉及任何计算机系统或环境,其具有任意 数目的存储器或存储单元,以及发生在任意数目的存储单元或巻上的任意数目 的应用程序和进程,它们可结合根据本发明的用于图形流水线的非限制性实现 的过程来使用。本发明可应用于具有部署在具有远程或本地存储的网络环境或 分布式计算环境中的服务器计算机和客户计算机的环境。本发明也可应用于具
有编程语言功能、用于生成、接收和发送关于远程或本地服务的信息的解释和 执行能力的独立计算设备。在游戏环境中,图形流水线尤其与在网络或分布式 计算环境中操作的那些计算设备相关,且因此根据本发明的图形流水线技术在这些环境中可以用最大的功效来应用。
分布式计算通过计算设备和系统之间的交换提供了计算机资源和服务的
共享。这些资源和服务包括信息的交换、文件的高速缓存存储和磁盘存储。分布式计算利用网络连接,允许客户机利用它们的集体力量来使整个企业受益。就此,各种设备可以含有其中蕴含本发明的图形流水线过程的应用程序、对象或资源。
图1提供了示例性的网络化或分布式计算环境的示意图。分布式计算环境
包括计算对象10a、 10b等,以及计算对象或设备110a、 110b、 110c等。这些
对象可包括程序、方法、数据存储、可编程逻辑等等。对象可包括诸如PDA、音频/视频设备、MP3播放器、个人计算机等的相同或不同设备的各部分。每一对象可通过通信网络14与另一对象通信。该网络可以包括向图2A的系统提供服务的其它计算对象和计算设备,且可以表示多个互连的网络。根据本发明的一方面,每一对象10a、 10b等,或110a、 110b、 110c等,可包含可利用请求使用根据本发明的图形流水线过程的API、或其它对象、软件、固件和/或硬件的应用程序。
还可以理解,诸如110c等对象可以主存在另一计算设备10a、 10b等或110a、 110b等上。因此,尽管所示的物理环境可以将所连接的设备示为计算机,但是这样的图示仅是示例性的,并且该物理环境可以被替换地描述或描绘成含有诸如PDA、电视机、MP3播放器等的各种数字设备,以及诸如接口、 COM对象等软件对象。
存在支持分布式计算环境的各种系统、组件和网络配置。例如,计算系统可以由有线或无线系统、本地网络或广泛分布的网络连接在一起。当前,许多网络耦合至因特网,后者为广泛分布的计算提供了基础结构并包含许多不同的网络。任何基础结构都可用于根据本发明的图形流水线附带地进行的示例性通信。
在家庭网络环境中,有至少四个全异的网络传输媒体,其每一个可支持一种唯一的协议,这些媒体如电力线、数据(无线和有线)、语音(如,电话)和娱乐媒体。诸如电灯开关和电器设备等大多数家庭控制设备可使用电力线来连接。数据服务可通过宽带(如,DSL或电缆调制解调器)进入家庭,并可在家庭内使用无线(如,HomeRF或802.1 IB)或有线(如,家庭PNA、 Cat 5、
以太网、甚至是电力线)连接来访问。语音话务可通过有线(如,Cat3)或无线(如,蜂窝电话)进入家庭,并可在家庭中使用Cat3连线来分布。娱乐媒体或其它图形数据可通过卫星或电缆进入家庭,并通常在家庭中使用同轴电缆来分布。IEEE 1394和DVI也是用于媒体设备群集的数字互联。可作为协议标准浮现的所有这些网络环境和其它环境可被互联来形成诸如内联网等可通过因特网连接到外部世界的网络。简言之,存在用于存储和传输数据的各种不同的源,且因此,进一步而言,计算设备需要共享诸如关于利用根据本发明的图形流水线的程序对象所访问或利用的数据等数据的方式。
因特网通常指使用TCP/IP协议套件的网络和网关的集合,该协议在计算机联网领域中是公知的。TCP/IP是"传输控制协议/网际协议"的縮写。因特网可被描述为由执行允许用户通过网络交互和共享信息的联网协议的计算机互连的地理上分布的远程计算机网络的系统。由于这类广泛分布的信息共享,诸如因特网等远程网络至今一般发展成一种开放式系统,开发者可对该开放式系统设计用于执行专用操作或服务的软件应用程序,在本质上没有限制。
由此,网络基础结构启用了诸如客户机/服务器、对等或混合体系结构等大量网络拓朴结构。"客户机"是使用与它无关的另一类或组的服务的一个类或组中的成员。由此,在计算时,客户机是进程,即,粗略地而言是一组请求由另一程序提供的服务的指令或任务。客户机进程利用所请求的服务,而不必"知道"有关其它程序或服务本身的任何工作细节。在客户机/服务器体系结构中,尤其在网络化系统中,客户机通常是访问由例如服务器等另一计算机提供的共享的网络资源的计算机。在图1的示例中,计算机110a、 110b等可以被认为是客户机,而计算机10a、 10b等可以被认为是服务器,其中服务器10a、10b等维护随后被复制到客户计算机110a、 110b等的数据,然而任何计算机都可被认为是客户机、服务器或两者,取决于环境。这些计算设备中的任一个可以处理数据或请求可蕴含对本发明中的图形流水线的实现专用的图形编程技术的服务或任务。
服务器通常是可通过诸如因特网等远程网络或本地网络访问的远程计算机系统。客户机进程可以在第一计算机系统中活动,而服务器进程可以在第二
10计算机系统中活动,它们通过通信介质彼此通信,从而提供分布式功能并允许多个客户机利用服务器的信息收集能力。根据图形流水线的图形编程技术所利用的任何软件对象可以分布在多个计算设备或对象上。
客户机和服务器利用由协议层提供的功能来彼此通信。例如,超文本传输
协议(HTTP)是结合万维网(WWW),即"Web"使用的常见协议。"通常,诸如网际协议(IP)地址或诸如统一资源定位器(URL)等其它引用的计算机网络地址可以用于彼此标识服务器或客户计算机。网络地址可以被称为URL地址。可以通过通信介质来提供通信,例如客户机和服务器可以通过TCP/IP连接来彼此耦合以进行大容量通信。
由此,图1示出了其中可采用本发明的具有通过网络/总线与客户机计算机通信的服务器的示例性网络化或分布式环境。更详细而言,根据本发明,多个服务器10a、 10b等经由通信网络/总线14互连,通信网络/总线14可以是LAN、 WAN、内联网、因特网等,它具有多个客户机或远程计算设备110a、110b、 110c、 110d、 110e等,如便携式计算机、手持式计算机、瘦客户机、联网设备或其它设备,如VCR、 TV、烤箱、灯、加热器等等。由此,构想本发明可应用于对于其期望实现采用本发明的图形流水线的图形接口的任何计算设备。
例如,在其中通信网络/总线14是因特网的网络环境中,服务器10a、 10b等可以是客户机110a、 110b、 110c、 110d、 110e等通过诸如HTTP等多种已知协议中的任一种与其通信的web服务器。服务器10a、 10b等也可担当客户机110a、 110b、 110c、 110d、 110e等,这是分布式计算环境的特性。通信可以在适当时是有线或无线的。客户机设备110a、 110b、 UOc、 110d、 110e等可以通过或不通过通信网络/总线14通信,并可具有与其相关联的独立通信。例如,在TV或VCR的情况下,可以有或没有其控制的网络化方面。每一客户计算机110a、 110b、 110c、 110d、 110e等以及服务器计算机10a、 10b等可以具备各种应用程序模块或对象135,并具有对各种类型的存储元件或对象的连接或访问,在这些存储元件或对象上可储存文件或数据流,或者可向其下载、发送或迁移文件或数据流的各部分。计算机10a、 10b、 110a、 110b等中的任何一个或多个可负责维护并更新数据库20或其它存储元件,诸如用于储存根据本发明处理的数据的数据库或存储器20。由此,本发明可以用于具有可访问
计算机网络/总线14并与其交互的客户计算机110a、 110b等,以及可与客户机 计算机110a、 110b等交互的服务器计算机10a、 10b等,以及其它类似的设备 111和数据库20的计算机网络环境中。
示例性计算设备
图2及以下讨论旨在提供可结合其来实现本发明的合适的计算环境的简 要概括描述。然而,应当理解,构想了所有种类的手持式、便携式和其它计算 设备和计算对象来用于本发明,即,在计算环境中存在GPU的任何地方。尽 管以下描述了通用计算机,但是这仅是一个示例,并且本发明可以用具有网络 /总线互操作性和交互的痩客户机来实现。由此,本发明可在其中蕴含了极少或 最小客户机资源的联网的主存服务的环境,例如其中客户机设备仅用作到网络 /总线的接口,如置于电器中的对象的联网环境中实现。本质上,在可存储数据 或可从中检索数据或将数据发送到另一计算机的任何地方都是用于根据本发 明的图形优化技术的操作的合乎需要的或合适的环境。
尽管并非所需,但本发明可以经由操作系统来实现,以供设备或对象的服 务开发者使用,和/或被包括在结合用于本发明的图形流水线的图形编程技术操 作的应用软件中。软件可以在诸如程序模块等由诸如客户机工作站、服务器或 其它设备等一个或多个计算机执行的计算机可执行指令的通用上下文中描述。 一般而言,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、 对象、组件、数据结构等。通常,程序模块的功能可以在各个实施例中按需进 行组合或分布。此外,本领域的技术人员可以理解,本发明可以用其它计算机 系统配置和协议来实施。适用于本发明的其它众所周知的计算系统、环境和/ 或配置包括但不限于,个人计算机(PC)、自动提款机、服务器计算机、手持 式或膝上型设备、多处理器系统、基于微处理器的系统、可编程消费者电子设 备、网络PC、电器、灯、环境控制元件、小型机、大型计算机等等。本发明 也可以在其中任务由通过通信网络/总线或其它数据传输机制链接的远程处理
设备来执行的分布式计算环境中实践。在分布式计算环境中,程序模块可以位 于包括存储器存储设备的本地和远程计算机存储介质中,并且客户机节点可以进而用作服务器节点。
因此,图2示出了其中可实现本发明的合适的计算系统环境100的一个示 例,尽管如上所述,计算系统环境100仅为合适的计算环境的一个示例,并非 对本发明的使用范围或功能提出任何局限。也不应该把计算环境IOO解释为对 示例性操作环境100中示出的任一组件或其组合有任何依赖性或要求。
参考图2,用于实现本发明的示例性系统包括计算机110形式的通用计算 设备。计算机110的组件可以包括,但不限于,处理单元120、系统存储器130 和将包括系统存储器在内的各种系统组件耦合至处理单元120的系统总线 121。系统总线121可以是几种类型的总线结构中的任何一种,包括存储器总 线或存储控制器、外围总线、以及使用各种总线体系结构中的任一种的局部总 线。作为示例,而非限制,这样的体系结构包括工业标准体系结构(ISA)总 线、微通道体系结构(MCA)总线、增强型ISA (EISA)总线、视频电子技 术标准协会(VESA)局部总线和外围部件互连(PCI)总线(也称为Mezzanine 总线)。
计算机110通常包括各种计算机可读介质。计算机可读介质可以是能由计 算机110访问的任何可用介质,而且包含易失性、非易失性介质以及可移动和 不可移动介质。作为示例,而非限制,计算机可读介质可以包括计算机存储介 质和通信介质。计算机存储介质包括以用于存储诸如计算机可读指令、数据结 构、程序模块或其它数据等信息的任何方法或技术实现的易失性和非易失性、 可移动和不可移动介质。计算机存储介质包括但不限于,RAM、 ROM、 EEPROM、闪存或其它存储器技术、CDROM、数字多功能盘(DVD)或其它 光盘存储、磁盒、磁带、磁盘存储或其它磁存储设备、或可以用来储存所期望 的信息并可由计算机110访问的任一其它介质。通信介质通常以诸如载波或其 它传输机制等已调制数据信号来体现计算机可读指令、数据结构、程序模块或 其它数据,并包括任意信息传送介质。术语"己调制数据信号"指的是其一个 或多个特征以在信号中编码信息的方式被设定或更改的信号。作为示例而非限 制,通信介质包括有线介质,诸系统存储器130包括易失性和/或非易失性存储器形式的计算机存储介质,
如只读存储器(ROM) 131和随机存取存储器(RAM) 132。基本输入/输出系 统133 (BIOS)包括如在启动时帮助在计算机110内的元件之间传输信息的基 本例程,它通常储存在ROM131中。RAM132通常包含处理单元120可以立 即访问和/或目前正在其上操作的数据和/或程序模块。作为示例而非局限,图 2示出了操作系统134、应用程序135、其它程序模块136和程序数据137。
计算机110还可以包括其它可移动/不可移动、易失性/非易失性计算机存 储介质。仅作为示例,图2示出了从不可移动、非易失性磁介质中读取或向其 写入的硬盘驱动器141,从可移动、非易失性磁盘152中读取或向其写入的磁 盘驱动器151,以及从诸如CD-ROM或其它光学介质等可移动、非易失性光盘 156中读取或向其写入的光盘驱动器155。可以在示例性操作环境中使用的其 它可移动/不可移动、易失性/非易失性计算机存储介质包括但不限于,磁带盒、 闪存卡、数字多功能盘、数字录像带、固态RAM、固态ROM等等。硬盘驱 动器141通常由不可移动存储器接口,诸如接口 140连接至系统总线121,磁 盘驱动器151和光盘驱动器155通常由可移动存储器接口,诸如接口 150连接 至系统总线121。
上文讨论并在图2中示出的驱动器及其关联的计算机存储介质为计算机 110提供了计算机可读指令、数据结构、程序模块和其它数据的存储。例如在 图2中,硬盘驱动器141被示为存储操作系统144、应用程序145、其它程序 模块146和程序数据147。注意,这些组件可以与操作系统134、应用程序135、 其它程序模块136和程序数据137相同,也可以与它们不同。操作系统144、 应用程序145、其它程序模块146和程序数据147在这里被标注了不同的标号 是为了说明至少它们是不同的副本。用户可以通过输入设备,如键盘162和定 点设备161 (通常指鼠标、跟踪球或触摸板)向计算机110输入命令和信息。 其它输入设备(未示出)可以包括话筒、操纵杆、游戏手柄、圆盘式卫星天线、 扫描仪等。这些和其它输入设备通常由耦合至系统总线121的用户输入接口 160连接到处理单元120,但是也可由诸如并行端口、游戏端口或通用串行总 线(USB)之类的其它接口和总线结构连接。诸如北桥(Northbridge)等图形 接口 182也可连接到系统总线121。北桥是与CPU或主机处理单元120通信的芯片组,并承担了加速图形端口 (AGP)通信的责任。 一个或多个图形处理单
元(GPU) 184可以与图形接口 182通信。在这一点上,GPU184—般包括诸 如寄存器存储等片上存储器存储,并且GPU 184与视频存储器186通信,其中 本发明的应用程序变量可对其发生影响。然而,GPU184仅是协处理器的一个 示例,并且因此在计算机110中可以包括各种协处理设备,并且可以包括诸如 像素和顶点着色器等各种过程着色器。监视器191或其它类型的显示设备也通 过接口,如视频接口 190连接至系统总线121,而视频接口 190又与视频存储 器186通信。除监视器191之外,计算机也可包括其它外围输出设备,如扬声 器197和打印机196,它们通过输出外围接口 195连接。
计算机110可使用到一个或多个诸如远程计算机180这样的远程计算机的 逻辑连接在网络化或分布式环境中操作。远程计算机180可以是个人计算机、 服务器、路由器、网络PC、对等设备或其它常见的网络节点,并且通常包括 许多或所有以上相对于计算机110所描述的元件,尽管在图2中仅示出了存储 器存储设备181。图2中所示的逻辑连接包括局域网(LAN) 171和广域网 (WAN) 173,但也可以包括其它网络/总线。这样的联网环境在家庭、办公室、 企业范围计算机网络、内联网和因特网中是常见的。
当在LAN联网环境中使用时,计算机110通过网络接口或适配器170连 接至LAN171。当在WAN联网环境中使用时,计算机110通常包括调制解调 器172或用于通过诸如因特网等WAN 173建立通信的其它装置。调制解调器 172可以是内置或外置的,它可以通过用户输入接口 160或其它合适的机制连 接至系统总线121。在网络化环境中,相对于计算机110所描述的程序模块或 其部分可被储存在远程存储器存储设备中。作为示例而非局限,图2示出远程 应用程序185驻留在存储器设备181上。应该理解,所示网络连接是示例性的, 并且可以使用在计算机之间建立通信链路的其它手段。
示例性分布式计算框架或体系结构
鉴于个人计算和因特网的交汇,已经开发且正在开发各种分布式计算框 架。个人和商业用户同样地拥有用于应用程序和计算设备的无缝的互操作和启 用web的接口,使得计算活动越来越面向web浏览器和网络。
15例如,MICROSOFT⑧的托管代码平台,即.NET包括服务器、诸如基于 web的数据存储等构件块服务、以及可下载设备软件。 一般而言,.NET平台 提供(1)令整个范围的计算设备共同工作并在所有设备上自动更新并同步用 户信息的能力,(2)提高的网页交互能力,通过大量使用XML而不是HTML 来实现,(3)从用于各种应用,如电子邮件,或软件,如Office.NET的管理 的中央起点到用户的具有产品和服务的定制访问和传送的特点的在线服务, (4)中央化数据存储,将增加对信息访问以及用户和设备间的信息同步的效 率和简易性,(5)集成各种通信介质,如电子邮件、传真和电话的能力,(6) 对开发员来说,创建可重复使用模块的能力,借此提高生产力并降低编程错误 数,以及(7)还有许多其它跨平台和语言综合特性。
尽管此处的某些示例性实施例是结合驻留在计算设备上的软件来描述的, 但本发明的一个或多个部分也可以通过操作系统、应用程序编程接口 (API) 或"中间人"对象、控制对象、硬件、固件、中间语言指令或对象等来实现, 使得方法可以被包括在由诸如.NET代码等托管代码启用的所有语言和服务 中,以及在其它分布式计算框架中,在其中得到支持或经由它们来访问。
示例性3D图形系统的组件
图3示出了包括诸如视频卡等图形子单元的示例性图形系统,该图形子单 元包括图形处理单元(GPU) 384'和用于相关联的图形流水线384'-1的示例性 硬件配置。特别地,示例性3D图形系统300可包括中央处理单元(CPU) 320 和图形卡,该图形卡包括图形处理器单元(GPU) 384'(有时称为视觉处理单 元(VPU)),而GPU 384'包括图形流水线384'-1 (有时称为"渲染流水线")。 GPU 384'可以例如通过AGP或PCI Express总线耦合到CPU 320和主RAM。
CPU320—般可以是任何处理器,诸如单个芯片、运行多个核(例如,处 理器)的多核处理器,诸如可以同时处理或执行若干(例如, 一个或多个)线 程的同时多线程化(SMT)处理器。如此处所使用的,术语"线程"指的是单 独的指令序列。由此,同时多线程化指的是单个处理器同时处理若干线程的能 力。CPU 320中的每个核可具有单指令多数据(SIMD)单元,作为对处理器 指令集的扩展。该扩展可以包含当被特别地编码来利用指令集时帮助加速整型和浮点密集应用程序的特殊指令。渲染3D图形时所涉及的计算可以在CPU320 上是数学上密集且相当繁重的。为了减轻CPU 320上的负担,提供了 GPU 384' 来帮助计算机更高效地运行。
在图形被输出到光栅显示设备(例如,计算机监视器191)之前,用于生 成这些图形的信息通过GPU 384'及其图形流水线384'-1 。 GPU 384'在硬件中实 现图形流水线384'-l以每秒执行数百万的几何计算。
GPU384'在操纵和显示图形方面是非常高效的,且其高度并行的结构使其 对于各种复杂算法比典型的CPU更有效。GPU 384'以使得图元操作比用主机 CPU 320直接绘制到屏幕运行快得多的方式来实现多个图元操作。将该负担从 CPU 320中解除意味着计算机的CPU 320不必如此努力地工作来处理图形数据 (例如,释放了可用于其它作业的周期)。通过将大部分图形功能卸载到GPU 384', CPU能够执行甚至更多的计算以实现专用的、实时的图形环境。GPU384' 负责在光栅显示设备(例如,计算机监视器)上加速图形元件的显示(例如, 应用了纹理和着色的多边形)。GPU 384'处理原始几何数据以最终在监视器191 上将该信息表示为像素。图形流水线384'-l接收3D场景的表示,通过使该表 示经过多个处理阶段来高效地处理该表示,并在监视器191处将3D场景渲染 为2D光栅图像。
GPU 384'可以被实现为被配置成处理实时2D和3D图形的一个或多个独 立的微处理器。GPU 384'可以位于单独的图形卡(来自主板)上,以处理2D 和/或3D计算机图形然后渲染2D或3D图像。GPU 384'可以直接访问图形卡 上的高性能VRAM。或者,GPU 384'可以通过将其集成到PC主板上的芯片之 一中,以使得GPU 384'可使用主存储器作为帧缓冲区并使用CPU来帮助帧渲 染来实现。GPU 384'可以例如用作用于个人计算机或游戏控制台的专用图形/ 视频渲染设备。
在3D图形渲染中,图形流水线384'-1指的是GPU 384'实现来将三维图像 数据(例如,顶点、纹理和其它数据)从应用程序转换成显示在二维屏幕上的 实际图像的各个处理阶段(例如,步骤序列)。每一顶点提供的特性可包括, 例如x-y-z坐标、RGB值、半透明度、纹理、反射率和其它特性。
图形流水线384'-l中的不同阶段负责处理最初作为端点(顶点)或图元的控制点处的特性提供的信息,以生成最终渲染的图像。如此处所使用的,术语 "图元"可以指形成单个3D实体的顶点的集合。最简单的图元是3D坐标系
统中的点的集合,被称为点列表。3D图形中的典型图元是线和三角形。其它 类型的图元可包括,例如线、线列表、线带(line strip)、三角形、三角列表、 三角带(triangle strip)以及三角扇(triangle fan)。通常,3D图元是多边形。 多边形是由至少三个顶点描绘的闭合3D图。最简单的多边形是三角形。三角 形可用于组成大多数多边形,因为三角形中的所有三个顶点都保证是共面的。 三角形可用于形成大的、复杂的多边形和网格。
在图形流水线384'-l内,所有阶段都是并行工作的。通过重新配置图形流 水线384'-l,可以实现不同的视觉效果。例如,图形流水线可接收要显示的几 何结构(例如,三角列表),然后对其执行必要的几何变换(例如,旋转、平 移等),为要显示的几何结构计算色彩,然后渲染要显示的几何结构。
流水线阶段
一般而言,图形流水线384'-1可以包括以下逻辑阶段输入组装器(IA)、 顶点着色器384'-lai和384'-la2、具有相关联的流输出384'-2的几何着色器 384'-la3、光栅化器384'-lc、像素着色器384'-1&4和输出合并器(OM)。图形 流水线384'-1可以被配置成优化对资源的使用、平衡图形流水线384'-1中的工 作负载、允许访问具有遵守IEEE的整型或浮点值的计算的信息、以及提供附 加可编程性。
图形流水线384'-1的示例性、非限制性实施例采用了动态可配置公共着色 器核,其包括可用各种配置来配置的多个单元或处理核384'-la。公共着色器核 通过在不需要作为流水线的一部分的着色器时重新配置或禁用该着色器来允 许简化的优化为相同的硬件单元(对不同着色器)提供负载平衡,由此为保持 活动的阶段释放了资源。
这些处理核384'-la可以取决于所执行的特定应用程序以各种模式被读入 存储器中并从存储器中写出。取决于其配置,单元384'-la的每一个可用于执 行顶点着色器阶段、几何着色器阶段和/或像素着色器阶段。这允许公共着色器 核按需被调度到图形流水线348'-l的不同阶段(或功能块)以按照最适合流水
18线384'-1所请求的任务的方式来分配像素着色器、几何着色器和顶点着色器。 任何阶段都可被动态地启用或禁用,以及配置或重新配置,由此为活动的阶段 释放并重新专门化了资源。由此,可对于图形芯片所要求的任务来优化图形芯 片的底层资源。
图3所示的图形流水线384'-l的特定配置包括多个共享的可编程核或公共 核元件384'-la,诸如顶点着色器384'-lai和384'-la2、具有相关联的流输出384'-2 的几何着色器384'-la3、以及像素着色器384'-la4。这些不同的功能阶段并行地 操作,从而担当单独的专用处理器。取决于该特定实现,可以有图3所示的更 多或更少的流水线阶段。此外,在特定顶点和图元数据的处理期间,在计算机 监视器上显示输出之前,仅所示的某些流水线阶段实际处理该数据。
输入组装器(IA)
图形流水线384'-1从应用程序接收传入的图元数据和顶点数据,并在计 算机监视器或屏幕上显示输出之前使其通过各个流水线阶段。输入组装器(IA) 通过从顶点存储器缓冲区和索引存储器缓冲区中拉出源几何结构数据来将诸 如三角形、线或点等顶点数据引入到图形流水线384'-l中。
可使用"未索引"或"已索引"渲染来产生从中取出存储器中的顶点数据 的地址,随后将结果组装成顶点和图元。
"未索引"渲染指的是从每一缓冲区绑定的起始偏移量开始的、对包含顶 点数据的顶点缓冲区的顺序遍历。顶点存储器缓冲区(图3中未示出)可从应 用程序接收未变换的模型顶点,并将其存储为顶点数据。缓冲区各自绑定到单 独的输入槽。跨所有缓冲区的数据布局由输入声明来指定,其中每一条目定义 了具有输入槽、结构偏移量、数据类型以及目标寄存器(对于流水线中的第一
个活动着色器)的"元素"。顶点存储器缓冲区可以包含任何顶点类型。顶点 数据可以来自多个缓冲区,以"结构阵列"的方式从每一缓冲区访问。从取自 缓冲区的数据中构造出给定的顶点序列。有各种图元拓扑结构可用于形成表示 图元序列的顶点数据序列。示例拓扑结构有,例如点列表、线列表、三角列表、 三角带。
"已索引"渲染指的是从对缓冲区的起始偏移量开始的、对包含标量整数索引的单个缓冲区的顺序遍历。要由图形流水线384'-1处理的数据也可被分配
一索引。索引存储器缓冲区(图3中未示出)从应用程序接收原始的、已索引
的几何图元数据,包括点、线、三角形和多边形。这些几何图元可以在顶点数据中用索引存储器缓冲区来引用。每一索引指示从包含顶点数据的缓冲区中的何处取出数据。索引存储器缓冲区包含索引数据,或称索引,其是对顶点存储器缓冲区的整数偏移量,并且用于使用从一组当前的数据输入流中绘制已索引图元的技术来渲染图元。由于索引缓冲区包含索引,因此索引缓冲区不能在没有对应的顶点缓冲区的情况下使用。索引在多种情形中都可以是有用的。例如,索引值可在处理数据时例如用作视频存储器寻址方案的一部分(例如,索引可表示何处及何时检索(和/或写入)视频存储器的各部分以进行处理)。下载到着色器的程序因此可以在检索或写入视频存储器时以及在处理图形数据时编程性地使用与图形数据相关联的索引值。
顶点着色器阶段
输入组装器(IA)将数据发送到第一公共核384'-l&。在该实施例中,第一公共核384'-l&被配置为顶点着色器阶段。顶点着色器阶段经由来自主机的程序对为算法变换指定的顶点流(来自图形流水线的视频存储器)进行操作或处理。特别地,顶点着色器可以检索诸如统一变量和顶点属性等各种输入。统一变量是对每一着色器调用的常数值。相反,顶点属性是诸如顶点位置等每一顶点的数据(变化变量的特殊情况)。
顶点着色器一般对单个输入顶点操作,并产生单个输出顶点,其中"顶点"指的是3D空间中通常使用x-、 y-和z-坐标由其位置来定义的交点。顶点着色器阶段可允许每一几何顶点在其被投影到屏幕上之前由短程序来处理。例如,顶点着色器阶段可以通过定义计算向量空间变换和其它可线性化计算的技术来操纵3-D空间中的对象位置。例如,顶点着色器阶段可以向各个顶点应用位置、色彩和纹理化坐标的计算,并执行诸如变换、蒙皮(ski皿ing)和照明等操作。顶点着色器的功能的某些示例包括一般的任意网格变形和顶点位移、为诸如纹理坐标变换等稍后的像素着色器计算可线性化属性。
20镶嵌器阶段
数据然后可被发送到对该数据执行镶嵌的镶嵌器384'-lb。本领域的技术人员可以理解,镶嵌步骤是可任选的(如由虚线矩形所指示的),并且在某些实际实现中完全不出现。镶嵌一般指的是涉及用一种或几种类型的合适的平面
图来覆盖没有间隙或重叠的有界限的几何区域的过程。在镶嵌器384'-lb之后,
在流水线中有另一公共核,该核可用于对数据执行后镶嵌顶点着色。在该实施例中,镶嵌步骤是可任选的。
几何着色器阶段
第二个公共核之后是被配置为几何着色器384'-la3的第三个公共核。几何着色器384'-la3允许对图元编程以及生成新的几何结构。几何着色器384'-la3可以对不同类型的"图元"输入操作,包括顶点/点、线(两个顶点的集合)、以及三角形(三条线的集合),并基于输入的图元在流水线内生成新的几何结构。几何着色器的输入是对于全图元的顶点(对于线是两个顶点,对于三角形是三个顶点,对于点是单个顶点)加上对于边相邻图元的顶点数据(对于线有另外两个顶点,对于三角形有另外三个顶点)。例如,几何着色器384'-1*可以接收一个图元,并输出零个、 一个或多个图元。几何着色器384'-la3可以输出形成单个所选拓扑结构的多个顶点。输出的某些示例包括如三角带、线带或点列表的拓扑结构。所发射的图元的数量可以在几何着色器384'-la3的任何调用中变化。
几何着色器384'-la3可以取一个图元,并输出多个图元,并可任选地处理诸如相邻顶点等相邻图元。换言之,几何着色器384'-la3允许不仅其自身对整个图元操作,而且还在某些附加的附近顶点的上下文中允许该操作。例如,可以处理折线中的一个线段,同时能够读取该线段之前和之后的顶点。该能力(例如,处理图元的相邻顶点)的一种应用是几何着色器384'-133能够在当前计算中考虑关于3-D几何空间中的相邻点的信息。
可在几何着色器384'-la3中实现的算法可以包括点精灵(point sprite)或宽线镶嵌、皮毛生成(fur/fin generation)、阴影体积(shadow volume)生成、对多个纹理立方体面的单遍渲染、以及将质心坐标设置为图元数据(使得像素着色器能够执行自定义属性内插)。
为执行点精灵镶嵌,着色器取单个顶点并生成四个顶点,或者代表四边形的四个角的两个输出三角形,在执行宽线镶嵌的同时,着色器接收两个线顶点,并为表示加宽的线的四边形生成四个顶点。另外,几何着色器可利用相邻的线顶点来对线端点执行斜接。
几何着色器还可用于生成皮毛,这不限于皮毛生成,而是涵盖了在单个拓扑结构的第三方向上添加的任何附加顶点。示例包括头发、标尺、草等,其中描述几何结构的图元被馈送到几何着色器中,并且几何着色器任意地增长几何结构来补充该形状。由此,例如,对于头发,基于输入到几何着色器的三角形,几何着色器可以添加表示每一顶点处的头发的几个顶点。有利的是,由于对几何着色器的三角形流包括关于顶点的邻居的信息,因此顶点的邻居的几何结构的邻近性和特性(色彩、深度等)可在处理期间考虑在内。对几何着色器的另一示例性、非限制性使用包括其中使用邻接信息来决定是否要挤出的阴影体积生成。此外,应用程序可能想要生成某一几何结构,如皮毛,并从该几何结构挤出阴影体积。在这些情况下,可使用输出数据流并通过使用该流输出来将其循环回去的能力来采用几何着色器的多遍功能。
在该示例性、非限制性实施例中,来自几何着色器384'-la3的输出进入光栅化器384'-lc以便渲染,和/或经由流输出(SO) 384'-2进入缓冲区。"打开"流输出(SO) 384'-2并不停止图形流水线384'-1的光栅化功能;它仅仅是通过向开发者提供更具编程性的能力来增强图形流水线384'-1的能力。
流输出
流输出(SO) 384'-2用作图形流水线384'-1中的"分接头",其可甚至在数据继续向下流至光栅化器384'-lc时被打开和关闭。流输出(SO) 384'-2可在数据到达帧缓冲区以便光栅化之前被分接到图形流水线384'-1内的任何地方。
当流输出(SO) 384'-2被关闭时,流输出(SO) 384'-2对流水线没有任何影响。换言之,流输出(SO)是可任选的;应用程序可以仅仅允许流水线将数据通过其发送而不将数据读入流输出缓冲区中。此外,流输出缓冲区是可用于存储流数据的类型的存储器的一个示例。可能会有可对这一功能使用不同类型的存储器的时候,如在微处理器中的高速缓冲存储器。
当被打开时,流输出(SO)384'-2允许程序员在数据在流水线内的同时"分
接"到流水线中,并将该数据提供给另一位置。
例如,流输出(SO) 384'-2可以将图元流传送到一个或多个输出缓冲区以便在流水线中的其它地方重复使用,从而允许在流水线内应用递归编程算法。经由流输出(SO) 384'-2发送的数据可被串接到缓冲区。缓冲区中的数据然后可在后续的各遍上被重新循环到图形流水线384'-1的输入。例如,在流输出(SO) 384'-2处接收的数据可被写入缓冲区或存储器以供主机或其它操作检索。
或者,在流输出(SO) 384'-2处接收的数据可被重新循环(例如,反馈或前馈)到流水线内的另一实体,诸如输入组装器(IA)、顶点着色器384'-la,和384'-1&2、几何着色器384'-la3、或像素着色器384'-la4以执行递归或循环功能。流输出(SO) 384'-2可允许数据被编程性地重新循环到图形流水线384'-1的其它部分(例如,程序员可以将对数据执行递归操作(将数据递归地重新循环通过同一算法)或以其它方式将数据循环预先固定的次数的程序下载到GPU)。例如,流输出(SO) 384'-2可用于将数据重新循环到着色器本身,由此允许对给定数据执行多遍操作。这可允许对图形数据的编程性递归和循环算法。重新循环数据的另一种方式是将其再次通过流水线发送,由此再次将数据输入到输入组装器(IA)。
此外,如有必要,信息可在同一数据去往光栅化器的同时被流输出,由此不会减缓数据的渲染,或允许在图像经历基于对数据的递归算法元素操作的变换时显示该图像。
光栅化器
图形流水线384'-l的下一组件是光栅化器384'-lc。光栅化器384'-lc不是图形流水线384'-l中的必需阶段,而是各流水线384'-l阶段之间的接口。光栅化器384'-lc假定输入位置在剪辑空间中提供,并且执行一组重要的固定功能操作,这些操作可包括剪辑、透视划分、视口或裁剪选择、图元设置以及确定
23如何调用像素着色器384'-la4。这些功能中的大部分可由软件开发员来调整。
像素着色器阶段
在光栅化器之后的是第四个公共核384'-la4,它用作像素着色器,它取一个像素,并在一位置处输出该像素。像素着色器可允许每一像素由一个短程序来处理,该短程序可包括例如图像纹理(或纹理数据)作为输入。像素着色器可允许开发者通过在像素级更改照明、色彩和表面来操纵色彩、纹理、或甚至形状。像素着色器可用于更改每一像素的照明、色彩和表面。这进而影响从这些像素构建的3-D对象的总体色彩、纹理和形状。
对像素着色器384'-la4可用的输入数据包括顶点属性,顶点属性可在每一像素的基础上选择来在带有或没有透视纠正的情况下内插,或对每一图元作为常量来对待。由像素着色器384'-la4生成的输出可以是当前像素位置的输出数据的一个或多个4向量,或者没有色彩(如果像素被丢弃)。像素着色器可能具有的效果的部分列表包括每一像素的反射、使用Phong样式着色或DOT3效果的每一像素的照明、以及过程性纹理。
输出合并器
在输出合并器(OM),即逻辑图形流水线384'-l中的最后一步处,可执行其它像素处理功能来渲染最终像素。这些功能可包括,例如,绑定输出资源(渲染目标)、用裁剪测试来修改像素色彩值、通过深度偏移和/或型板缓冲技术的可见性确定、或应用诸如阿尔法混合或雾化、加阴影、凸起映射、环境映射、抗混叠、输出到渲染目标(可以是许多资源类型之一)的写入或混合、以及多元素纹理等功能。在对数据执行了这些功能之后,该数据最终被进一步处理且最后被显示在监视器191上。
用于流水线中的着色器的公共着色器核
图4是表示公共着色器核384'-la的硬件和软件组件的示例性、非限制性实施例的框图。公共着色器核384'-la可用于例如实现以上图3所示的顶点着色器384'-la!和384'-la2、几何着色器384'-la3或像素着色器384'-1&4中的任一个。
公共着色器核384'-la或者从输入组装器(IA)单元(其是可以来自图形 流水线384'-l中的任何地方的先前阶段),或者在某些情况下从专门的输入源 接收输入数据。
输入数据然后可被临时存储在输入寄存器409中。输入寄存器409可以是, 例如动态可索引阵列。在几何着色器的情况下,输入寄存器可以是将输入排列 为例如[顶点][元素]对的二维(2D)阵列。
输入数据然后被发送到着色器代码410。着色器代码410提供流控制机制、 处理向量浮点和整型算术、存储器取数或采样操作的算术逻辑单元(ALU)、 以及指定要对输入数据执行的特定变换的着色器函数或程序。着色器代码410 还可接收多个其它输入或资源,诸如来自采样器413、纹理414和常量缓冲区 415的信息。着色器代码410还具有与临时寄存器411和子例程返回地址栈412 的双向通信。
着色器代码410从采样器413接收定义如何对纹理采样的样本。然而,也 可以在不过滤的情况下读取存储器,并且采样器并不是在每一实施例中都是必 需的。由于采样器对象是静态地创建的,因此其允许硬件在流水线的进行中维 护对多个采样器的引用,而不必跟踪改变或转储清除流水线(因为采样器对象 维护其定义并且不被修改)。
着色器代码410从纹理414接收纹理信息。纹理414与着色器代码一起工 作以提供纹理釆样。
CPU生成可用于重新配置特定着色器程序的着色器常量。着色器代码410 从常量缓冲区415接收着色器常量。提供常量缓冲区415以对GPU上的存储 器中的某些变量(或"着色器常量")进行聚集或分组。换言之,代替使用常 量寄存器的阵列(cO...cN)来存储常量输入值,常量缓冲区415可用于将数值 着色器常量值分组在一起。常量缓冲区被优化以进行比纹理414更低等待时间 的访问以及更高频率的更新。常量缓冲区415可允许开发者同时设置所有特定 的一组常量。常量可以按开发者期望的任何特定次序来排列。将常量缓冲区中 的着色器常量分组在一起可得到某些性能好处。例如,如果两个着色器常量通 常是在同时一起修改和使用的(例如,在每一场景中都有相同的状态),则这些着色器常量可被置于特定常量缓冲区中。
特定着色器程序可能需要被绑定到特定槽的特定数量的常量缓冲区。在一 个实现中,对图形流水线中的每一阶段,对于可能活动的常量缓冲区有15个 槽。在着色器代码中,(^#寄存器是用于"槽"#处的常量缓冲区的占位符。常 量缓冲区使用以下在着色器中访问d^[索引]作为着色器指令的操作数,其中
"索引"可以是不可索引(r#)或可静态索引(x#)的,其包含32位无符号 整数、直接的32位无符号整数常量、或两者加在一起的组合(例如,"movr0, cb3[x3
.x+6]"表示将元素7从分配给槽3的常量缓冲区移至r0,假定x3
.x 包含l)。应用程序能够写入以任何所需模式和质量读取常量的着色器代码, 同时仍允许不同硬件容易地尽可能达到最佳性能。
临时寄存器411用作临时存储。在一个示例性、非限制性实施例中,临时 寄存器411可以保持所需的任何大小和质量的任何不可索引或可索引阵列,直 到临时存储的限制。
在该特定的、非限制性、示例性实施例中,子例程返回地址栈412是固定 高度。此外,栈被隐藏以便不能进行直接着色器访问,并且仅透明地存储返回 地址。它还准许定义递归算法。
在使代码通过着色器代码410之后,该数据去往输出寄存器520。在该示 例性、非限制性实施例中,输出寄存器520是由四个向量输出的动态可索引阵 列组成的。此外,某些阶段可以具有附加的专门输出。
取决于公共着色器核384'-la正在图形流水线384'-l中的哪一阶段上实现, 输出数据然后可被输出到下一着色器阶段(如果存在);作为流输出(SO) 到存储器或其它位置;或到输出合并器(OM)或渲染阶段。
所列出的数据结构可以从1D阵列改为2D阵列或列表。所有数据结构都 可取决于GPU的大小和存储能力来改变。在GPU内,对存储限制和固定高度 的改变可以因动态分配、以及向信息应用压縮算法来节省空间而发生。采样器 和常量缓冲区可以如纹理一样运作,然而,当资源改变时,这些组件的定义可 被修改。如果重新定义了纹理,则采样器和常量缓冲区两者都可改变,并且不 限于仅仅纹理功能。此外,所有数据结构都可为速度和效用目的实现新的优化 算法。此处所描述的各实施例仅是使用公共核的图形流水线的示例,其中该公
26共核可被动态地配置以提供顶点着色器、像素着色器和几何着色器的功能。
如上所述,状态的不同组合可以启用各种视觉效果。流水线中的状态管理 系统跟踪设备状态,并且将设备状态抽象成由具有复杂的相互依赖性的多个元 素组成的高级"效果"。效果被定义为一系列"技术",技术依赖于"遍"、 遍依赖于状态对象和着色器,而状态对象和着色器依赖于常量缓冲区和纹理。 效果要求某些着色器程序在具有特定纹理作为输入、在流水线中的特定输入槽
(也称为绑定点)处绑定的特定常量集上执行。状态管理系统可以利用"依赖 性树"来跟踪各种类型的不同着色器资源之间的关系或依赖性。每一特定资源
(例如,常量缓冲区、纹理、采样器)被绑定到依赖性树中的父对象的槽。在 该上下文中,"槽"指的是依赖性树中对应于特定着色器的槽。每一着色器将 具有不同的依赖性,且因此用独立的槽来分隔树。
图5A示出了对应于一个效果文件530的依赖性树的示例性、非限制性框
图。图5A示出效果530以及效果530对遍520、状态对象506、着色器510、 纹理514和常量缓冲区515的依赖性的概念。常量缓冲区515接收多个着色器 常量502、 504。世界视图投影矩阵502是定义用于从世界空间变换到屏幕空间 的矩阵中的四个常量的着色器常量。这对每一对象完成一次。由此,如果在屏 幕中有50个对象,则该矩阵将对每一场景设置50次。V光504是指定光来自 哪一方向的光向量。例如,V光504可用于指定太阳的方向,并且可以对整个 帧是恒定的。着色器510具有与其相关联的多个资源。在该特定示例中,资源 可包括常量缓冲区515和纹理0 514。这些资源由着色器510"消费"。尽管未 在图5A中示出,但除了着色器A510之外,还可以有并行运行的多个其它着 色器程序(例如,着色器B、着色器C、着色器D等)。这些着色器程序中的 每一个都具有一组相似的依赖性。遍520包括这些不同着色器和状态A 506的 输出。效果文件530包括遍520。
再次参考图4,公共着色器核384'-la还具有多个输入槽(未示出)。由 着色器384'-la使用的资源(各个常量、常量缓冲区、纹理和采样器等)可被 绑定到着色器384'-la的特定输入槽。在一个特定实现中,着色器可具有例如 与其相关联的128个输入资源槽、与其相关联的16个不同的常量缓冲区槽、 以及与其相关联的16个采样器槽。例如,特定着色器可用16个不同的常量缓冲区、16个不同的纹理和16个不同的采样器来填充这些槽。将特定资源分配 或绑定到每一着色器的特定槽的次序并不需要遵循特定模式,并且可以由编译 器来确定。着色器程序对这些特定资源的每一个做不同的事情。例如,着色器
程序可以接受输入常量缓冲区2、另一输入采样器0以及另一输入纹理5等,
然后取决于这些输入来生成特定输出。
图5B是示出一个示例性、非限制性图形流水线中多个常量缓冲区 515A-515E对多个不同着色器程序584'-la A-N的分配的示例性、非限制性框 图。着色器程序584'-la A-N中的每一个都将多个常量缓冲区(CB1 515A...CB5 515E)以不同次序分配在不同输入槽处。例如,着色器584'-laA可将CBl置 于槽l,将CB2置于槽2,将CB3置于槽3,将CB4置于槽4,并将CB5置 于槽5;着色器584'-laB可将CB2置于槽l,将CB1置于槽2,将CB4置于 槽3,将CB5置于槽4,并将CB3置于槽5;着色器584'-la C可将CB5置于 槽l,将CB2置于槽2,将CB1置于槽3,将CB3置于槽4,并将CB4置于 槽5;而着色器584'-laN可将CB3置于槽l,将CB2置于槽2,将CB5置于 槽3,将CB4置于槽4,并将CB1置于槽5。
为简化图示,图5B中所提供的示例示出了四(4)个着色器程序584'-la A-N 和与特定着色器584'-laA-N中的每一个相关联的五(5)个可能的常量缓冲区 (CB1515A...CB5 515E)。然而,可以理解,在流水线的最实用实现中,在流 水线中可以有多得多的着色器,并且特定着色器584'-la A-N的每一个通常具 有比图5所示的更大量(例如,十六或更多)的常量缓冲区。例如,取决于特 定应用程序的复杂度,可以有几百个不同的着色器,并且应用程序开发员可以 指定实质上无限数量的常量缓冲区。在一个实用实现中,可以在任何给定时刻 将这些常量缓冲区中的多达16个绑定在不同的槽处。重要的是,将特定常量 缓冲区分配或绑定到每一着色器584'-la处的特定槽的次序并不需要遵循特定 模式,并且可以由编译器来确定。
当两个着色器程序彼此独立地编译时,将资源绑定到特定槽的次序可以不 同。例如,当执行着色器584'-la A时,常量缓冲区CBl-CB5被设置到槽l-5 以渲染着色器584'-la A。然而,当是执行着色器584'-laB的时刻时,相同的 常量缓冲区CB1-CB5可被绑定或重新分配到不同的槽以执行着色器584'-laB。例如,当着色器584'-laA执行时,CB1被绑定到槽1, CB2被绑定到槽2, CB3 被绑定到槽3, CB4被绑定到槽4,而CB5被绑定到槽5,但是当下一着色器 584'-laB执行时,相同的五个常量缓冲区也可被再次使用,但是这次在不同的 槽处使用(例如,CB2在槽1处,CB1在槽2处,CB4在槽3处,CB5在槽4 处,而CB3在槽5处)。在这些情况下,常量缓冲区当在执行着色器584'-laA 和着色器584'-laB之间转换期间必须从一个槽解除绑定并重新绑定到一个新 的槽。由此,相同的五个常量缓冲区需要以不同的次序来重新绑定。每次当需 要重新调整绑定时存在性能成本,因为必须对驱动程序做出调用来设置视频卡 等。没有自动化机制来缓解着色器之间的这一"不合",由此导致当在着色器 之间发生转换时流水线的不必要的重新配置,并且浪费了绑定周期。
期望减少和/或最小化当在着色器之间切换时在图形卡中所需的重新配置 的量(例如,减少和/或最小化通常在重新绑定槽时发生的状态改变)。例如, 期望提供一种避免或减少将特定资源重新分配给不同槽的需求的方式。通过将 资源一致地放置在相同的槽中,浪费了较少的绑定周期和/或节省了绑定周期。
优化的槽/资源绑定技术
提供了由于最优地将资源(例如,常量缓冲区、纹理和采样器)绑定到特 定槽来减少/最小化当在着色器之间切换时在图形卡中所需的绑定重新配置的 量(例如,减少和/或最小化通常在重新绑定槽时发生的状态改变)的技术。根 据这些技术,可以确定每一着色器程序之间的公共依赖性,并且特定资源可基 于该确定被绑定到特定槽。 一依赖性树跟踪不同着色器资源之间的关系或依赖 性。每一特定资源被绑定到该依赖性树中的父对象的槽。这些所公开的技术涉 及扫描依赖性并重新配置该依赖性树,使得着色器可以改变其对于何处绑定资 源的预期。结果,需要被重新绑定以便在当前加载的着色器之间转换的槽的数 量可被减少和/或最小化。
根据这些技术的一个实施例,扫描该依赖性树中的每一依赖性,并且可为 该依赖性树的每一不同重新配置(着色器的重新映射或重新构建)计算相关联 的成本。依赖性树的每一重新配置改变特定资源所绑定到的具体槽。使用这些 成本,然后可以选择减少或最小化用于在更高级状态之间转换的设备重新配置
29的数量的该依赖性树的特定重新配置。换言之,然后可以选择最小化需要重新 绑定以在当前加载的着色器之间转换/切换的槽的数量的依赖性树的特定重新 配置。在一个实现中,这些技术可以对于离线内容生成和存储来执行(例如, 如果着色器设置是事先已知的,则分析着色器,重新映射依赖性,然后将着色 器保存回盘)。在一个替换实现中,在应用程序运行时/加载时动态地执行该方 法(例如,如果着色器设置事先未知)。
因此,特定着色器程序被修改成以相同的次序预期特定资源。这可允许, 例如,优化将常量缓冲区与特定槽相关联的方式。这通过减少当在不同着色器 之间切换时发生的重新组织的量减少了需要完成的工作的量。
图6示出了图形流水线中用于最优地将资源绑定到与着色器相关联的特 定槽的示例性、非限制性流程图600。在特定应用程序的执行期间,着色器可 能要求将特定数量的资源(例如,常量缓冲区、纹理和釆样器等)绑定到着色 器的特定槽。
在步骤610处,可确定由每一着色器使用的资源之间的资源依赖性。在一 个实施例中,步骤610可以涉及两个子步骤615、 620。在子步骤615处,可确
定用于每一着色器的特定资源/槽排列。用于每一着色器的特定资源/槽排列指 定了在每一着色器的特定槽的每一个中使用哪些资源。在子步骤620处,基于
特定资源/槽排列,可确定由每一着色器使用的资源之间的资源依赖性(例如, 不同/公共)。
在步骤630处,基于资源依赖性,可计算公共资源/槽关联。每一公共资 源/槽关联标识了要与特定的一个槽相关联的特定的一个资源,使得当在着色器 之间切换时减少/最小化了转换/状态改变的数量/资源重新配置的量。在步骤 640处,在每一着色器处,然后可以根据公共资源/槽关联来重新组织绑定到每 一槽的资源。此时,每一着色器具有相同的公共资源/槽关联,使得在每一着色 器处,相同的特定资源与相同的特定一个槽相关联。在步骤650处,每一特定 资源可如公共资源/槽关联所指定地绑定到特定槽。
图7示出了用于计算公共资源/槽关联的示例性、非限制性流程图630。在 步骤710处,可确定要绑定到第一个槽的特定的一个资源。在确定了要绑定到 第一个槽的资源之后,在步骤720处,可从可用资源池或列表中移除要绑定到第一个槽的该资源。在步骤730处,该过程可以确定对每一着色器要绑定的槽 是否已填满。如果还剩下要绑定的槽(例如,尚无资源绑定到其上的槽),则
在步骤740处,可确定剩余资源之一要绑定到第二个槽的资源。重复步骤 720-740,直到要绑定的预定数量的槽、大多数槽或所有槽都有与其相关联的 特定资源。在一个实施例中,可应用该算法,直到满足特定成本度量。例如, 该成本度量可以是该算法将在当着色器之间存在少于例如60%的资源改变或 差异时停止。 一旦要绑定的所有槽都有了资源/槽绑定,则该过程在图6的步骤 640处继续。
图8示出了用于确定特定资源/槽绑定的示例性、非限制性流程图710/740。 为确定要绑定到第一个槽的第一个资源,在步骤810处,可基于由每一着色器 利用的资源之间的资源依赖性来计算将依赖性树中的每一资源绑定到第一个 槽的成本。在步骤820处,可选择具有最低成本的特定的一个资源来绑定到第 一个槽,并且在步骤830处,可将该资源(被选为具有最低成本)指定为第一 个资源。由于步骤810到830被嵌入在图7的步骤740中,因此可以理解,步 骤810-830将被重复,直到要绑定的每一个槽都有特定的资源/槽绑定。
图9示出了用于计算关于将每一资源绑定到第一个槽的成本的示例性、非 限制性流程图810。在步骤910处,可确定在如果特定的一个资源被绑定到第 一个槽的情况下渲染每一着色器所需的状态改变的数量。该确定可以通过使用 由每一着色器程序利用的资源之间的资源依赖性来做出。在步骤920处,可确 定在如果特定的一个资源被绑定到第一个槽的情况下渲染每一着色器所需的 浪费的槽的数量。如上一样,该确定可以通过使用由每一着色器程序利用的资 源之间的资源依赖性来做出。使用状态改变的数量和浪费的槽的数量,在步骤 930处,可以计算第一个成本。该第一个成本是与将该特定的一个资源绑定到 第一个槽相关联的成本。
该计算可以对每一资源重复(例如,与将每一资源绑定到第一个槽相关联 的成本)。在步骤940处,可以确定是否计算了将每一资源绑定到第一个槽的 成本。如果否,则该过程前进到步骤950,其中选择资源列表或依赖性树中下 一个特定的资源。然后可以对下一资源重复步骤910-930 (例如,与将下一资 源绑定到第一个槽相关联的成本)。过程810重复,直到在步骤940处确定己经计算了将每一资源绑定到第一个槽的成本。在该点处,该过程结束或返回至
步骤820。由于步骤910到950被嵌入在图8的步骤810中,因此可以理解, 步骤910-950将被重复,直到确定了将每一资源绑定到要绑定的每一个槽的成 本。
由此,在图5B所示的示例中,上述技术可用于重新映射在着色器584'-laB 中使用的常量缓冲区的布局。例如,可扫描所有依赖性,并且如果确定最优常 量缓冲区布局是着色器584'-la A中所示的布局,则在着色器584'-laB处,CB2 和3将被重新映射以绑定到槽2和3,而CB1将被重新映射到槽1, CB4和5 将被分别重新映射到槽4和5。以此方式,着色器584'-la A和584'-laB之间 的切换不需要着色器584'-laA中所示的所有CB到槽的初始绑定之外的附加工 作。类似的重新映射也可在着色器584'-laC和着色器584'-laN处发生。由此, 需要被重新绑定以便在当前加载的着色器之间转换的槽的数量可被最小化。
有多种实现本发明的方法,例如适当的API、工具箱、驱动程序代码、操 作系统、控件、独立或可下载软件对象等,它们使得应用程序和服务能够使用 本发明的增强的图形流水线的系统和方法。本发明构想了从API (或其它软件 对象)的观点,以及从接收上述技术的任一种,包括根据本发明的公共核、几 何着色器或流输出的技术的软件或硬件对象来看的对本发明的使用。由此,此 处描述的本发明的各种实现都可以具有完全采用硬件、部分采用硬件且部分采 用软件、以及采用软件的方面。
如上所述,尽管结合各种计算设备和网络体系结构描述了本发明的示例性 实施例,但基本概念可被应用于其中期望采用具有增强的图形流水线的GPU 的任何计算设备或系统。例如,本发明的算法和硬件实现可被应用于计算设备 的操作系统,可作为设备上的独立对象、作为另一对象的一部分、作为可重复 使用的控件、作为可从服务器下载的对象、作为设备或对象和网络之间的"中 间人"、作为分布式对象、作为硬件、以存储器、以上任何的组合等来提供。 尽管此处选择了示例性编程语言、名称和示例来表示各种选择,但这些语言、 名称和示例不旨在为限制性的。本领域的普通技术人员将认识到,有多种方法 来提供实现本发明的各实施例所实现的相同、相似或等效的功能的目标代码和 命名法。如上所述,此处所述的各种技术可结合硬件或软件,或在适当时以两者的 组合来实现。由此,本发明的方法和装置或其特定方面或部分可采取包含在诸 如软盘、CD-ROM、硬盘驱动器或任何其它机器可读存储介质等有形介质中的 程序代码(即,指令)的形式,其中当程序代码被加载到诸如计算机等机器内 并由其执行时,该机器成为用于实现本发明的装置。在程序代码在可编程计算 机上执行的情况下,计算设备通常包括处理器、该处理器可读的存储介质(包 括易失性和非易失性的存储器和/或存储元件)、至少一个输入设备、以及至少
一个输出设备。可例如通过使用数据处理API、可重复使用控件等来实现或利
用本发明的增强的图形流水线技术的一个或多个程序较佳地用高级过程语言 或面向对象的编程语言来实现以与计算机系统通信。然而,如果需要,程序可 以用汇编语言或机器语言来实现。在任何情形中,语言可以是编译的或解释的 语言,且与硬件实现相结合。
本发明的方法和装置也可以经由以通过某种传输介质传输的程序代码的 形式体现的通信来实现,比如通过电线或电缆、通过光纤或经由任何其它传输
形式,其中,当程序代码由诸如EPROM、门阵列、可编程逻辑器件(PLD)、 客户计算机等机器接收、加载并执行时,该机器成为用于实现本发明的装置。 当在通用处理器上实现时,程序代码与处理器相结合来提供一种用于调用本发 明的功能的独特装置。另外,结合本发明使用的任何存储技术总是可以是硬件 和软件的组合。
尽管结合各附图的优选实施例描述了本发明,但是可以理解,可以使用其 它类似的实施例,或可以对所述实施例进行修改或添加来执行本发明的相同功 能而不背离本发明。例如,在诸如对等联网环境等联网环境的上下文中描述了 本发明的示例性网络环境,但是本领域的技术人员将认识到,本发明不限于此, 并且本申请中所描述的方法可应用于任何计算设备或环境,诸如游戏控制台、 手持式计算机、便携式计算机等等,不论其是有线还是无线的,并且该方法可 应用于经由通信网络连接并通过网络交互的任意数量的此类计算设备。此外, 应当强调,构想了包括手持式设备操作系统和其它应用专用操作系统的各种计 算机平台,尤其是在无线联网设备的数量持续增长时。
尽管示例性实施例涉及在图形流水线的上下文中利用本发明,但是本发明不限于此,而是可以被实现来提供第二个处理单元。例如,如果程序员想要将 显示画面渲染到屏幕并且处理计算数学,同时使用CPU执行另一功能,则处 理单元可能需要最充分地使用,而不论图形显示是否被包括在最终输出中。而 且,本发明可以在多个处理芯片或设备中实现或跨多个处理芯片或设备实现, 且存储可以类似地跨多个设备来实现。因此,本发明不应限于任何单个实施例, 而是应该根据所附权利要求书的广度和范围来解释。
3权利要求
1. 一种用于将资源绑定到与图形流水线(384′-1)中的着色器(584′-1)相关联的特定槽的方法(600),包括确定由每一着色器利用的资源之间的资源(413-415)依赖性(620);以及基于所述资源(413-415)依赖性,计算公共资源/槽关联(630),其中每一公共资源/槽关联标识了所述资源(413-415)中要与所述槽中的特定一个槽相关联的特定一个资源。
2. 如权利要求l所述的方法,其特征在于,确定由每一着色器利用的资 源之间的资源依赖性包括在每一着色器处,确定用于每一着色器的特定资源/槽排列,其中所述用 于每一着色器的特定资源/槽排列指定了在每一资源的每一所述特定槽中使用 哪些资源;以及基于所述特定资源/槽排列,确定每一着色器利用的资源之间的资源依赖性。
3. 如权利要求2所述的方法,其特征在于,计算公共资源/槽关联包括 基于所述资源依赖性计算公共资源/槽关联,其中每一公共资源/槽关联标识了所述资源中要与所述槽中的特定一个槽相关联的特定一个资源,使得当在 着色器之间切换时减少了资源重新配置的成本。
4. 如权利要求3所述的方法,其特征在于,还包括 在每一所述着色器处,根据所述公共资源/槽关联来重新组织绑定到每一槽的资源。
5. 如权利要求3所述的方法,其特征在于,计算公共资源/槽关联包括(a) 确定所述资源中要绑定到第一个槽的特定一个资源;以及(b) 确定剩余资源中要绑定到第二个槽的特定一个资源;以及 对每一剩余槽重复步骤(b),直到预定数量的槽具有与其相关联的所述资源之一。
6. 如权利要求5所述的方法,其特征在于,确定要绑定到第一个槽的第一个资源包括基于每一着色器利用的资源之间的所述资源依赖性,计算将每一资源绑定 到所述第一个槽的成本;选择所述资源中具有最低成本的特定一个资源;以及 将所选具有最低成本的资源指定为所述第一个资源。
7. 如权利要求6所述的方法,其特征在于,确定要绑定到第二个槽的第二个资源包括计算将剩余资源中的每一个绑定到所述第二个槽的成本;选择具有最低成本的剩余资源;以及将所选具有最低成本的剩余资源指定为所述第二个资源。
8. 如权利要求6所述的方法,其特征在于,计算将每一资源绑定到所述 第一个槽的成本包括(a) 基于每一着色器程序利用的资源之间的所述资源依赖性,确定在将所 述资源中的特定一个资源绑定到所述第一个槽的情况下渲染每一着色器所需 的状态改变的数量;以及(b) 基于每一着色器程序利用的资源之间的所述资源依赖性,确定在将所 述资源中的特定一个资源绑定到所述第一个槽的情况下所需的浪费的槽的数(c) 基于所述状态改变的数量和所述浪费的槽的数量,计算与将所述资源 中的该特定一个资源绑定到所述第一个槽相关联的第一成本;以及重复步骤(a)到(c),直到计算了将每一所述资源绑定到所述第一个槽的成本。
9. 如权利要求1所述的方法,其特征在于,还包括 将所述特定资源中的每一个绑定到由所述公共资源/槽关联指定的所述特定槽。
10. 如权利要求l所述的方法,其特征在于,每一着色器具有相同的公共 资源/槽关联,使得在每一着色器处,相同的特定资源与所述槽中相同的特定一 个槽相关联。
11. 如权利要求l所述的方法,其特征在于,所述资源包括常量缓冲区。
12. 如权利要求l所述的方法,其特征在于,所述资源包括常量缓冲区, 以及纹理和采样器中的至少一个。
13. —种包括用于执行如权利要求1所述的方法的计算机可执行指令的计 算机可读介质。
14. 一种包括用于执行如权利要求1所述的步骤的计算机可执行模块的图 形应用程序编程接口。
15. —种用于指示图形处理单元执行如权利要求1所述的方法的应用程序编程接口。
16. —种重新配置包括多个资源的依赖性树的方法,其中每一特定资源被绑定到所述依赖性树中的父对象的槽,所述方法包括扫描所述依赖性树中的资源依赖性的每一个;计算与所述依赖性树的多个不同资源配置的每一个相关联的成本;以及 选择最小化当在不同着色器之间切换时的设备重新配置的量的所述依赖 性树的特定资源重新配置。
17. 如权利要求16所述的方法,其特征在于,所述依赖性树的每一资源 重新配置改变特定资源所绑定到的特定槽。
18. 如权利要求16所述的方法,其特征在于,选择包括选择最小化需 要被重新绑定以便在不同着色器之间切换的槽的数量的所述依赖性树的特定 资源重新配置。
19. 如权利要求16所述的方法,其特征在于,所述方法是对离线内容生 成执行的,并且所述方法还包括存储所述依赖性树的特定资源重新配置。
20. 如权利要求16所述的方法,其特征在于,所述方法是在应用程序运 行时/加载时动态地执行的。
全文摘要
提供了用于将资源绑定到与图形流水线中的着色器相关联的特定槽的技术和方法。可确定由每一着色器利用的资源之间的资源依赖性,并且基于这些资源依赖性,可计算公共资源/槽关联。每一公共资源/槽关联标识了要与特定的一个槽相关联的特定的一个资源。
文档编号G06F9/38GK101479701SQ200780024522
公开日2009年7月8日 申请日期2007年6月7日 优先权日2006年6月28日
发明者R·斯里尼瓦桑, R·马尔科维奇, S·格拉森伯格 申请人:微软公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1