首页> 中国专利> 用于分析对于应用程序修改前命令改变的性能的图形命令管理工具和方法

用于分析对于应用程序修改前命令改变的性能的图形命令管理工具和方法

摘要

本发明披露方法、系统、图形计算机界面和计算机可读介质来使得对于应用程序能够优化视频帧渲染特性。所述方法包括渲染视频帧并且捕获表示视频帧的渲染的入栈缓冲器设置。所述方法还包括修改入栈缓冲器设置的特征而旁路该应用程序,并且使用修改的特征来重新渲染该帧。所述方法还使得能够比较渲染和重新渲染,并且呈现比较结果。提供图形用户界面使得能够实现该功能性而不需要修改应用程序的代码,从而意识到根据性能渲染和处理效率能够呈现何种对应用程序的可能的改变。

著录项

  • 公开/公告号CN101675453A

    专利类型发明专利

  • 公开/公告日2010-03-17

    原文格式PDF

  • 申请/专利权人 索尼计算机娱乐美国公司;

    申请/专利号CN200880006976.2

  • 发明设计人 M·E·切尼;B·鲍特金;J·J·奥利克;

    申请日2008-02-28

  • 分类号G06T5/00;G06F3/048;

  • 代理机构北京泛华伟业知识产权代理有限公司;

  • 代理人王勇

  • 地址 美国加利福尼亚州

  • 入库时间 2023-12-17 23:44:22

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2012-06-27

    授权

    授权

  • 2011-04-13

    专利申请权的转移 IPC(主分类):G06T5/00 变更前: 变更后: 登记生效日:20110307 申请日:20080228

    专利申请权、专利权的转移

  • 2010-04-28

    实质审查的生效 IPC(主分类):G06T5/00 申请日:20080228

    实质审查的生效

  • 2010-03-17

    公开

    公开

说明书

背景技术

【0001】当前的开发人员必须通过艰苦的过程来优化和调试游戏应用 程序。开发人员必须修改应用程序代码并且随后重新运行该应用程序代 码,这将给游戏开发过程增加大量的时间。此外,当前上述过程使得开发 人员不能集中于应用程序的特定的渲染特征(aspect),用来研究优化。

【0002】因此,开发人员被降级为尝试和错误调试过程与优化过程。

【0003】考虑到这些问题,开发人员需要通过智能优化算法和分析技 巧来快速并且有效地优化图形处理器的使用的能力。此外,开发人员要求 有效定位和解决与图形相关的程序缺陷或者性能的低效率所必须的信息。

发明内容

【0004】广义而言,本发明通过提供使得开发人员能够有效优化应用 程序的渲染特征的方法和设备来满足这些需求。应该意识到,本发明能够 以多种方式实现,包括作为方法、系统、计算机可读介质或者装置。以下 描述本发明的多个独创性实施例。

【0005】在一个实施例中,提供用于对在应用程序执行期间所产生的 多帧视频序列的帧进行性能分析的系统。所述系统包括被配置来执行所述 应用程序的硬件引擎和被配置来从所述硬件引擎获取入栈缓冲器数据的 库捕获模块,其中,所述入栈缓冲器数据用于渲染所述多帧视频序列的帧。 所述系统还包括用于呈现入栈缓冲器数据的内容的交互显示的图形用户 界面。所述内容定义多个命令和与所述多个命令的每一个相关联的数据。 所述图形用户界面使得访问能够对入栈缓冲器的内容进行改变。所述系统 还包括使得能够重新执行通过图形用户界面进行任何改变的入栈缓冲器 数据的重放模块。图形用户界面提供量化对入栈缓冲器做出改变时入栈缓 冲器的执行中的差异的多个性能分析测量。

【0006】在该实施例的一个方面中,所述图形用户界面提供访问来对 入栈缓冲器数据进行改变而不需要执行对应用程序的改变。在另一方面 中,图形用户界面提供多个菜单和窗口用于表示多个性能分析测量并用于 选择多个菜单和窗口的特定一个来使得能够改变入栈缓冲器数据的内容, 并且随后定量查看结果以及可视化地显示性能特征。

【0007】在另一个实施例中,提供用于优化应用程序的视频帧渲染特 性的方法。所述方法包括渲染视频帧并且捕获表示视频帧的渲染的入栈缓 冲器设置。所述方法还包括修改入栈缓冲器设置的特征而旁路该应用程 序,并且使用修改的特征来重新渲染该帧。所述方法还使得能够比较渲染 和重新渲染,并且呈现比较结果。

【0008】在又一个实施例中,提供用于优化视频帧渲染的图形用户界 面(GUI)。所述GUI包括示出入栈缓冲器的内容的显示区域和示出根据 入栈缓冲器的内容渲染视频帧的图形结果的性能显示区域。所述GUI还包 括入栈缓冲器内容修改区域。

【0009】从下面结合附图以举例方式对本发明的原理进行说明的详细 描述,本发明的其它方面和优点变得显而易见。

附图说明

【0010】通过参考以下结合附图的描述,可以最好理解本发明及其它优 点。

【0011】图1示出根据本发明的一个实施例的具有图形硬件引擎的游戏 计算控制台,其定义了该游戏计算控制台的各种硬件和软件单元的构成。

【0012】图2示出根据本发明的一个实施例的其中游戏计算控制台被用 来执行图形硬件引擎的处理和GCM工具的可替代实施例。

【0013】图3示出根据本发明的一个实施例的和GCM工具相连接的图 形引擎的更详细图。

【0014】图4示出根据本发明的一个实施例的定义可以使用GCM工具 执行的操作的处理流程图。

【0015】图5是示出根据本发明的一个实施例的可以通过入栈缓冲器被 捕获的各种资源的简化示意图。

【0016】图6是示出根据本发明的一个实施例的提供来自GCM工具的 所捕获的信息的图形用户界面(GUI)窗口的简化示意图。

【0017】图7是示出进一步定义图6的绘制/清除窗口的图形用户界面的 简化示意图。

【0018】图8是图7的窗口的放大的视图。

【0019】图9是示出根据本发明的一个实施例的原始视图窗口302与其 内容的简化示意图。

【0020】图10示出根据本发明的一个实施例的概述所有的警告和错误 的问题窗口。

【0021】图11示出根据本发明的一个实施例的入栈缓冲器的总的屏幕。

【0022】图12示出根据本发明的一个实施例的包括所有状态命令列表 和对于每一个状态命令的冗余百分比的详细冗余窗口。

【0023】图13A-B是具有和图6的渲染状态窗口相关的其他信息的简化 示意图。

【0024】图14A-D示出根据本发明的一个实施例的入栈缓冲器使用的纹 理。

【0025】图15示出根据本发明的一个实施例的提供纹理的存储器视图 的存储器转储窗口。

【0026】图16示出根据本发明的一个实施例的入栈缓冲器所使用的顶 点阵列。

【0027】图17示出根据本发明的一个实施例的入栈缓冲器所使用的索 引阵列。

【0028】图18是示出根据本发明的一个实施例的片段程序窗口的简化 示意图。

【0029】图19A示出根据本发明的一个实施例的列出入栈缓冲器中使用 的所有程序并提供解释的转储的顶点程序窗口。

【0030】图19B示出根据本发明的一个实施例的顶点程序常量窗。

【0031】图20A和20B示出根据本发明的一个实施例的提供GPU中的 寄存器的状态的详细视图的GPU寄存器窗。

【0032】图21A到21K进一步定义根据本发明的一个实施例的渲染目 标窗。

【0033】图22示出根据本发明的一个实施例的开发人员在其中选择成 形器(profiler)特征的菜单的简化示意图。

【0034】图23A和图23B示出根据本发明的一个实施例的成形的示例 图形示意图。

【0035】图24A和图24B示出根据本发明的一个实施例的定向到可用 于分析的性能计数器的图形用户界面。

【0036】图25A到25D示出根据本发明的一个实施例的用于优化帧的 渲染的剔除过程。

【0037】图26A到26O示出根据本发明的一个实施例的当应用多个“假 设”(what-if)性能优化时开发人员可以通过其进行的事件的多个序列。

【0038】图27A-E示出根据本发明的一个实施例的可以被称为试验的性 能优化,该试验可以采用一个或者多个“假设”或者性能优化来提供对于被渲 染的游戏或者应用程序的最佳设置的推荐。

【0039】图28提供可以用来渲染图形的示例硬件架构,尽管本发明不 限于任意类型或者品牌的架构。

具体实施方式

【0040】本发明披露一种图形命令管理(GCM)工具,使得能够访问由 图形硬件所产生的入栈缓冲器数据用于渲染帧。GCM工具可以被限定为系 统、方法并且被嵌入到计算机可读介质。广义而言,GCM工具包括使得入 栈缓冲器数据对于特定帧或一些帧被捕获、以一些方式修改,并且随后重新 提交到图形硬件用于重新渲染的功能性,来确定是何种性能影响,而不需要 修改导致入栈缓冲器数据产生的应用程序的代码。

【0041】在以下描述中,陈述多个特定细节用于提供对本发明的全面理 解。然而,对于本领域内的技术人员应该清楚的是无需这些特定细节的一些 或者全部可以实现本发明。在其它实例中,为了不会不必要地混淆本发明, 公知的处理步骤没有详细描述。

【0042】为了清楚起见,术语“入栈缓冲器”(push buffer)定义通常用 在计算机架构中的缓冲器结构并且可以被称为“命令缓冲器”。另外,术语“帧” 是指多帧动态视频序列的多个帧的任意给定帧(或者帧的组),其是由图形 硬件在执行应用程序期间产生的。在一个例子中,多个帧是在硬件上执行视 频游戏应用程序期间所产生的那些帧,诸如视频游戏控制台所提供的或者标 准个人计算机所提供的帧。帧格式可以采用任意数量的形式,无论其是否是 高分辨率。在高分辨率帧中,帧内容的分辨率可以是任意数量的格式,例如 并且不限于1080i/p的HDTV格式或者其它高分辨率视频标准。该应用程序 如此处讨论一样关注游戏类型的应用程序,但应该理解这些技术同样也可以 应用到响应于入栈缓冲器数据而渲染数据的任意应用程序。

【0043】GCM工具能够捕获在应用程序的一个帧期间所使用的所有图 形资源。该工具能够随后在捕获的帧上执行性能分析,修改入栈缓冲器和其 它图形资源来模仿如果游戏应用程序或者游戏引擎(例如中间件)中产生显 著变化时它们会是什么样,并且重新测量该性能。广义上,GCM工具能够 定义如果对于游戏应用程序或者游戏引擎做出代码改变将会增加(或者影 响)多少性能,而无需对游戏应用程序或者游戏引擎的代码实际做出麻烦的 改变。作为例子,对游戏应用程序和/或游戏引擎的一些改变对于工程人员来 说可能需要数天、数星期或者数月来进行修改,并且做出这样的改变还期望 测试是否能够获得了性能增加。

【0044】根据本发明的方面,GCM工具使得能够对入栈缓冲器数据直 接做出改变,而不需要改变应用程序或者引擎代码来分析是否获得性能上的 益处,并且随后定义能够被设计到应用程序和/或引擎的推荐的代码变化,从 而在耗费时间和昂贵的资源来设计对实际应用程序的变化之前,预先知道如 所预定的和所验证的所期望的益处。

【0045】以下的应用程序将被分为两部分,即(I)中的系统综述,和 (II)中的功能屏幕描述。

I、GCM工具结构的系统综述

【0046】图1示出具有图形硬件引擎102的游戏计算控制台100,定义 游戏计算控制台100的各种硬件和软件单元的构成。图形硬件引擎102配备 有处理入栈缓冲器104和渲染帧106。为了说明的目的,所示多个入栈缓冲 器104和所产生的帧106相关联,该帧106随着处理应用程序的不同部分时 (例如,交互游戏播放期间)被渲染。还示出和游戏计算控制台100通信的 计算机工作站108。

【0047】在本发明的一个实施例中,计算机工作站108(例如,个人计 算机(PC))已经在其上载入图形命令管理(GCM)工具110(例如,实用 程序),其被设计为访问由图形硬件引擎102处理的特定入栈缓冲器104,用 来渲染特定帧106。同样注意到,三维(3D)渲染硬件由入栈缓冲器(或者 命令缓冲器)来驱动,其是包括诸如纹理、顶点数据等等控制渲染状态和指 定资源位置的一系列命令的线性缓冲器。GCM工具110起到如由三个主要 部件(例如,图3中所示:GUI 130、库捕获模块132和重放模块134)限定 的实用工具的效用。在捕获特定入栈缓冲器104a时,GCM工具110能够对 入栈缓冲器数据执行修改,以随后将修改的入栈缓冲器数据重新提交到图形 硬件引擎102,以用于重新渲染由所修改的入栈缓冲器产生的帧。

【0048】GCM工具110随后能够监控源自被重新提交到图形硬件引擎 102的所修改的入栈缓冲器数据的性能影响(增加或者降低)。无需实际修改 或者请求产生要被修改的入栈缓冲器数据的应用程序,能够进行所修改的入 栈缓冲器数据的性能特征的分析。以下参考图3来描述关于GCM工具110 的更多的细节。

【0049】图2示出其中游戏计算控制台110被用来执行图形硬件引擎102 和GCM工具110的处理的可替代实施例。在此实施例中,不需要具有和游 戏计算控制台110通信的单独的计算机工作台108,来使得能够访问入栈缓 冲器数据104,用于执行对入栈缓冲器数据的变化的修改、分析和验证。

【0050】图3示出根据本发明的一个实施例的和GCM工具110相连接 的图形引擎102的更详细图。所示应用程序120和被配置为处理嵌入到应用 程序120中的代码的图形硬件引擎102相连接。应该理解应用程序120可以 包括应用程序代码和任意中间件或者有时被称为游戏引擎的应用程序引擎。 实现应用程序的代码和游戏引擎被称为应用程序120。

【0051】应用程序120和函数调用122集成在一起,被设计为在图形硬 件引擎102执行应用程序的特定点触发入栈缓冲器数据的捕获。在一个实施 例中,函数调用122可以被定义为能够拦截移入图形硬件引擎102的入栈缓 冲器的命令列表并且之后转发到图形命令管理(GCM)工具110的库捕获模 块132的heartbeat函数调用。

【0052】在一个例子中,函数调用122可以打开通信端口,用来以由库 捕获模块132接收的数据阵列的形式通信捕获的命令列表,其中所捕获的帧 的数据的原始阵列由库捕获模块132在操作152中接收,随后在操作154中 处理。所处理的数据的原始阵列随后被保存在库156中,来定义响应函数调 用而捕获的当前入栈缓冲器内容。库(例如一种类型的数据库)因此将保持 入栈缓冲器的内容,而图形硬件引擎102将与来自入栈缓冲器104a的帧106a 的渲染相关联的性能统计传送和通信到GCM工具110。

【0053】这些性能特征将被发送到和GCM工具110相关联的重放模块 134的性能监控器160。重放模块134的性能模块160因此将性能信息通信 到GCM工具图形用户界面(GUI)130。为了从开始初始化该过程,用户能 够使用GCM GUI 130来选择在136中将触发入栈缓冲器的捕获的命令(来 自菜单或者GUI按钮),其随后指导函数调用来捕获特定入栈缓冲器或者多 个入栈缓冲器,使得特定帧106a能够基于入栈缓冲器的内容来被分析性能。

【0054】在GCM GUI 130中,显示138使得能够以列表和图形的形式 来显示入栈缓冲器的内容,使得调试工程人员能够快速识别和理解所捕获的 特定入栈缓冲器的结构和内容。GUI 130还将提供修改入栈缓冲器140的内 容的能力,以使得能够移除、插入、修改和移动所捕获的入栈缓冲器结构中 的特定的数据。通过修改入栈缓冲器的内容来使之成为可能的特定类型的处 理可以包括“假设”处理142的处理。以下更加详细描述假设处理。

【0055】附加的处理可以包括试验运行144使得能够在所捕获的入栈缓 冲器的特定内容(例如,命令和数据)上执行优化。GCM GUI 130还包括 性能显示,使得能够分析由性能监控器160提供到GCM GUI 130的特定性 能参数。

【0056】性能显示可以包括多个菜单、窗口、图、表和比较工具,使得 能够在处于其最初状态的入栈缓冲器的内容和通过GCM GUI 130的140已 经执行任何修改之后的入栈缓冲器的内容之间进行比较。这些性能显示和界 面的例子可以包括通过改变入栈缓冲器的特定内容并且随后比较所获取的 性能优势或者对入栈缓冲器数据做出特定改变而经受的性能影响来执行成 形的功能性。成形148从而使得能够示出和分析图形和列表的结果,使得之 后做出对应用程序改变的推荐。

【0057】如果期望对入栈缓冲器的改变留作一个新的参考点,性能显示 能够提供给用户提交入栈缓冲器数据的能力,使得对入栈缓冲器的当前改变 能够被视为对入栈缓冲器内容做出的附加的改变的参考点。提交按钮150从 而是对于使用图形用户界面130的性能显示的编程人员和调试人员的选项。 同样示出作为GCM工具110的一部分的库捕获模块132。

【0058】如上记录的,在152中接收对于所捕获的帧的数据的原始阵列 并且随后在154中处理,使得数据能够被保存在库156中。库将以GUI 130 能够访问和索引的方式来保持入栈缓冲器的结构和数据。GUI 130因此具有 库的结构的知识,使得菜单、窗口、图形、表和比较能够快速由GUI产生并 且显示用于用户信息、比较和分析。

【0059】如果用户期望通过使用GUI 130修改入栈缓冲器的内容来做出 改变,则GUI 130将与重放模块134通信,使得对入栈缓冲器的改变能够被 重新提交到图形硬件引擎102,来定义因此将产生所更新的渲染的帧106a’ 的新的入栈缓冲器104a’。在使用所更新的入栈缓冲器数据重新渲染帧的期 间,图形硬件引擎102还将提供与渲染所更新的入栈缓冲器数据相关的性能 数据到性能监控器160。性能监控器160因此将信息通信到GUI 130使得用 户能够在GUI 130的146中执行性能显示和分析。

【0060】图4示出根据本发明的一个实施例的定义可以使用GCM工具 110执行的操作的处理流程图200。如上所提及的,图形硬件引擎102被设 计为处理入栈缓冲器数据和渲染对于应用程序120的帧。应用程序120包括 简单地增加到应用程序代码并且和每一帧相关联的函数调用122,使得能够 具有对每一个渲染的帧的入栈缓冲器的访问,使得可以捕获由图形硬件引擎 102渲染的每一个帧。

【0061】在一个实施例中,GCM工具GUI 130被设计为在特定点及时 触发入栈缓冲器(和帧所使用的资源)的捕获,使得选择随后将渲染特定帧 的特定的入栈缓冲器。帧的选择可通过GUI 130由用户选择来初始化。在此 例中,特定的入栈缓冲器是入栈缓冲器104a,并且所渲染的帧是帧106a。 嵌入在应用程序中的函数调用因此将使得入栈缓冲器104a的内容对于帧 106a被捕获,并且作为副本发送到图形命令管理工具110。通过发送入栈缓 冲器内容104a的副本到图形命令管理工具110的箭头来示出该传送。

【0062】在操作202中,捕获入栈缓冲器的内容。一旦捕获,该过程将 进行到操作204,其中分析所捕获的入栈缓冲器数据的性能特征并且基于该 分析,在操作206中可以修改所捕获的入栈缓冲器的至少一个特征。当然, 可以发生对多个特征的超过一个的修改,但是例如假设仅有一个特征被改 变,并且随后重新提交具有所修改的特征的入栈缓冲器数据到图形硬件引擎 102用于在操作208中重新渲染。

【0063】在操作210中,对于在入栈缓冲器中重新渲染具有修改的特征 的帧,分析性能特征。该方法随后进行到操作212,其中期望使用修改的特 征比较入栈缓冲器中不具有修改的特征来做出决定,决定是否在帧的渲染中 存在性能影响(益处或者不利)。如上记录的,如参考图3所描述的,对于 GUI 130的146中的分析,可使用多个性能显示来分析这些性能特征。

【0064】在操作214中,确定入栈缓冲器的修改的特征是否应该被提交 使得用作参考的入栈缓冲器是具有提交的改变的入栈缓冲器。如果是,该方 法进行到操作216,其中,在对入栈缓冲器的特征做出附加修改时新的入栈 缓冲器内容成为参考点,用于比较性能影响。如果否,提交修改的特征,则 操作进行到操作218,其中确定是否存在期望来修改入栈缓冲器的另一个特 征。

【0065】如果存在,方法返回到操作206,其中可以继续进行处理直到 完成分析。如果不存在另外的特征被修改并且所有其他完全满足测试者,则 方法可以随后进行到操作220,其中可以产生推荐的修改,使得可以对产生 入栈缓冲器数据的应用程序代码进行改变,并且随后在非应用程序改变入栈 缓冲器数据分析期间将产生期望的所标识的性能益处。该信息随后可被转发 到应用程序开发人员240,用于之后整合到应用程序代码120中。

【0066】关于此处描述的实施例,GCM工具110访问低水平格式的入 栈缓冲器。在此原始状态中,接收该格式作为数据列表,例如以U-32格式, 并且随后可以被格式化以使得能够查看、改变和随后重新格式化回到原始状 态用于重新提交到图形硬件引擎102。因此,通过GCM工具110,提供无需 使用外部渲染API或者驱动层而重写改变的入栈缓冲器的能力。可以修改入 栈缓冲器,用于移除、插入或者修改命令,并且其它资源也可以被移动、移 除或者修改。在修改之后,所修改的入栈缓冲器和资源被发送回到图形硬件, 其中可以采用性能测量来评估修改的效果。此外,能够以自动方式反复进行 修改和性能测量,以执行试验或者更复杂的性能分析。

【0067】通过由GCM工具110使能的功能性提供多个唯一的优点。一 些示例优点包括允许所捕获的应用程序入栈缓冲器与最初的应用程序无关 地被操纵,并且因此GCM工具110消除反复修改和编写应用程序代码的单 调性,以概述其结果并且寻求性能优化。甚至诸如修改单个渲染状态的简单 应用程序的改变经常需要显著的反复时间来重新编译应用程序。

【0068】除了这样的简单的替换,GCM工具110可以应用多个非实时 技术,用于容易地做出可能要求大量编程时间或者复杂数据修改的投入来在 应用程序中测试的性能测量。首先,可以应用自动反复进行来测试一组参数 的所有可能状态,用来确定对于所捕获的入栈缓冲器的最佳性能设置,其中 手工反复将会是极其耗时的。第二,可以使用相对慢的强力算法或者使用仅 对单个帧(例如,由于视图依赖的点)有效的优化来处理入栈缓冲器和资源。

【0069】这允许开发人员从通常要求大量编程时间或者资源数据修改的 投入的应用程序优化来快速确定可能的性能增益,从而允许他们对其优化努 力能够被最好关注做出有信息根据的决策。

【0070】可替代地,由于最初的应用程序没有被包括在这些后来的性能 试验中,从而不需要访问最初的源代码或者数据就可以容易传送和分析所捕 获的数据,使得支持编程人员容易地协助开发团队分析他们的应用程序。

【0071】在另一个实施例中,代替要求函数调用代码被集成在应用程序 中,本发明的一个方面允许和图形硬件引擎102相连接的(例如,作为单独 的硬件逻辑)或者与之集成在一起的捕获触发硬件逻辑的集成。捕获触发硬 件逻辑能够接收指令来使得以函数调用122集成在应用程序120中的相同方 式或者类似方式来捕获入栈缓冲器数据。通过提供捕获触发硬件逻辑,GCM 工具110仅需要和图形硬件引擎102的逻辑(或者和102连接的硬件)相连 接,来触发入栈缓冲器数据的捕获,其被发送到库捕获模块132。利用捕获 触发硬件逻辑的优点在于编程人员不需要增加任何代码到他们的应用程序 中,并且因此与GCM工具110的接口对于应用程序120的编程人员而言是 无缝和透明的。尽管在此实施例中利用集成的函数调用122,但是用于启用 函数调用的代码是很小的并且能够以很小的或者不用编程开销而容易地插 入。

【0072】GCM工具110使得能够运行大量的性能试验或者假设,其二 者都可以称之为优化,以最小量的时间投入在捕获的入栈缓冲器上运行。试 验的示例列表包括但不限于表A中所定义的。

○冗余命令-通过从入栈缓冲器移除不具有有用效果的命令,GCM工具 能够确定用来降低冗余命令的数量的代码改变是否增加性能。类似地,具有 非最佳参数或者渲染状态的非最佳组合的一些命令可以被检测和调整来测 试结果性能增益。

○渲染状态优化-可以修改许多性能相关的渲染状态,来确定对于捕获的 入栈缓冲器用于性能和结果可视影响的最佳设置。这些包括纹理过滤、深度 剔除(depth culling)和其它类似状态。

○资源定位-通过在视频和主存储器之间移动资源,GCM工具能够确定 调整这些位置是否改进性能。

○顶点阵列结构-可以交错分为多个流的顶点数据,以测试性能影响。

○不使用的顶点阵列数据-能够优化顶点阵列来移除不使用的属性。

○常量顶点阵列数据-能够扫描顶点阵列以检测常量属性并且被优化以 将它们移除。

○不使用的顶点编程输出数据-可以停用不使用的但未停用的顶点编程 输出。

○网格优化-网格顶点和索引数据可以被优化用于理想的变换后高速缓 存性能,或者可以从非索引转换为索引格式,或者可以被优化来使用重启索 引。

○三角形裁剪-能够从输入顶点和索引阵列单独地移除视离屏、背面、退 化或者零像素三角形,用来确定更好的应用程序选择或者更好的网格结构的 性能暗示。

○深度分类-可以重新分类所有的非阿尔法混合绘制调用来最优的深度 剔除来确定对应用程序的对象分类的优化是否可以改进性能。

○仅深度通过-GCM工具可以复制在单独渲染颜色缓冲器之前首先渲染 场景的深度缓冲器的普通优化技术,用来最小化片段处理。

○片段程序寄存器计数优化-GCM工具能够评估对于每一个片段程序的 每一次可能的寄存器计数的性能,用来确定最佳值。

○替代的纹理压缩格式-将纹理转换为替代格式,用来确定纹理压缩是否 影响性能和可视外观。

○纹理存储器分组-能够测试基于绘制调用的纹理的所有可能的相关存 储器分组,来确定视频和主存储器之间的资源的最佳分布。

○顶点程序分组-确定顶点程序的最佳分组为集合并且分析将顶点程序 集合命令转换为执行存储槽改变的性能优点。

○渲染目标平铺和深度剔除区域-可以优化颜色和深度缓冲器平铺、压缩 和深度剔除区域参数,以确定应用程序优化的潜在优点。

○顶点程序优化-可以修改顶点程序以允许顶点阵列被最优分组,或者使 用优化的单独程序代替具有静态分支的单个程序。

II、GCM工具的屏幕的功能定义

【0073】以下描述的实施例提供开发人员在游戏开发过程期间可以使用 的工具或者实用程序的其它细节。参考开发人员能够用来和工具界面连接的 多种屏幕截图来进一步定义通过GCM工具使能的函数。GCM工具包括链 接在游戏和应用程序中的库。在游戏一侧,一旦开发人员已经链接到GCM 工具库中,就会存在两个调用,一个是对于GCM重放初始化,一个是在对 gcmSetFlip或者类似函数的每次调用之后的GCM重放。由于与这两个调用 关联的开销接近于零,该调用能够在任何时间被舍去。如上所描述的,无论 任何时候开发人员想要使用gcmReplay工具,开发人员将开始应用程序并且 选择捕获。通过在应用程序中选择捕获,捕获要渲染的图像数据的帧的入栈 缓冲器内容。捕获是指在渲染被发送到应用程序期间获取所使用的所有资源 中的内容。这些资源可以包括纹理、顶点阵列、索引表和渲染数据帧所要求 的其它资源。在一个实施例中,可以包括之前的帧的缓冲器。例如,可以使 用所应用的一些种类的模糊效应来包括之前帧的缓冲器的内容。应该注意 到,在渲染图像显示期间所使用的所有资源和捕获的数据可以容易地超过 100兆字节。

【0074】本领域内的技术人员将会理解根据游戏,捕获过程可以变得复 杂。例如,当图形处理单元正渲染帧,另一个处理器可以正修改入栈缓冲器 并且建立新的资源,例如诸如对于PLAYSTATIONTM 3游戏控制台的CELL 处理器。因此,此处描述的实施例通过单步执行图形处理单元来捕获入栈缓 冲器,用来捕获用于渲染图像数据帧的入栈缓冲器的全部内容。以不引人注 目的方式即对于应用程序透明的方式执行命令缓冲器中所改变的信息的捕 获和GPU的单步执行。通过使用跳到自身指令来替换入栈缓冲器中的指令 来实现单步执行,从而阻止在该指令前的GPU执行。通过顺序通过跳到自 身来替换以下指令并且随后恢复最初的指令,在每次指令之后能够阻止GPU 的执行,允许由每一指令使用的所有资源的当前状态被收集。由于图形处理 单元的单步执行,帧渲染期间入栈缓冲器的内容是否被修改或者改写变得不 相关。应该注意,本实施例利用图形处理单元,用来代替仿真。此外,所捕 获的数据提供比来自于实时GPU性能分析的数据的更详细的分析。应该理 解虽然本实施例可以是专用的游戏控制台,但是这意味着示例,本实施例能 够应用到用于渲染图像的任意游戏控制台。

【0075】图5是示出根据本发明的一个实施例的可以通过入栈缓冲器被 捕获的多个资源的简化示意图。入栈缓冲器104包括表示顶点和片段程序的 数据、渲染目标、顶点和索引缓冲器、纹理等等。这些资源的每一个通过 GCM工具捕获,使得开发人员可以之后操纵数据,以优化开发过程。如上 所提及,此处描述的实施例即使游戏渲染过程可能很复杂也能够捕获数据。 在一个实施例中,当图形处理单元正渲染帧时,诸如CELL处理器的另一个 处理器可以修改入栈缓冲器并建立新的资源。

【0076】典型地,CELL处理器及时为图形处理单元建立顶点阵列或者 索引表。因此,顶点阵列不存在于帧的开始处并且在帧的早期的部分期间建 立,使得GPU能够在帧的后期部分中使用该阵列。此外,捕获过程必须能 够捕获可以在帧的进程期间重写的数据。例如,如果数据被写到环形缓冲器 中,则在渲染帧的进程中,后期特征的数据重写早期特征的数据。为了捕获 所有的数据,此处描述的实施例单步执行图形处理单元用于捕获合适的数 据。

【0077】在一个实施例中,入栈缓冲器的内容和之前步骤的内容相比较 并且捕获任意新的数据。因此,在一个方面中,GCM工具关注不能实时执 行的能力。应该理解存在能够使用捕获的数据完成的多个不同项目。在一个 实施例中,开发人员能够查看和分析数据。该数据也能够保存到硬盘驱动器 或者其他的存储装置并且发送给另一个开发人员用于检查。在另一个实施例 中,开发人员重播该帧并且如此处所描写的进行被成形。

【0078】当该帧重播时,该帧可以下载到GCM工具并且在执行渲染分 析时重新渲染。入栈缓冲器和捕获的资源可以以多种方式修改,使得能够分 析修改下的性能。通过下面进一步详细描述的“假设”特征可以修改入栈缓冲 器的单个特征。此外,入栈缓冲器的多个特征可以以组织化的方式修改来通 过以下更详细描述的“试验”提供对于多个特征的优化的操作条件和序列的 分析。

【0079】图6是示出根据本发明的一个实施例的提供来自GCM工具的 所捕获的信息的图形用户界面(GUI)窗口的简化示意图。图6的图形用户 界面包括包含渲染调用的绘制/清除窗300、示出入栈缓冲器内容的原始视图 窗302、渲染目标窗304、输出窗306、入栈缓冲器综述窗308和渲染状态窗 312。以下参考图7-25D进一步描述通过GCM工具提出的附加的示例图形 用户界面的细节。

【0080】如上所提及,通过用户在其中选择/触发捕获按钮的图形用户界 面来实现数据的捕获。当然,通过此处描述的实施例可以捕获渲染过程的每 一帧。但是,能够定制该捕获,使得可以捕获替代帧或者每第n个帧,其中, n是整数。

【0081】应该理解,在每一帧渲染或者任意其它指定频率插入应用程序 中的调用函数将触发通过单步执行GPU的入栈缓冲器内容的捕获,以使得 能够产生图6的图形用户界面。应该进一步理解,开发人员可以增加可选的 注释到调用函数中以进一步指定被渲染的应用程序的特定特征用于方便调 试过程。图6是一个示例性配置并且可以按期望进行修改。例如,如果用户 期望将图7-25D中所示的任意GUI合并到图6中,这可以实现。

【0082】图7是示出进一步定义图6的绘制/清除窗口的图形用户界面的 简化示意图。绘制/清除窗口300列出所有的绘制上下文,并且可以被称为绘 制上下文视图。应该理解对于帧的绘制可存在几千种清除和绘制操作。通过 绘制/清除窗300,提供入栈缓冲器导航的基本方法。应该理解在绘制清除窗 300中捕获的绘制上下文表示绘制/清除命令和它们相关的建立空间。通过选 择窗300的特定绘制上下文,绘制上下文窗成为展开形式,如图8的绘制上 下文窗300a所示。

【0083】本领域内的技术人员可以理解通过双击特定的绘制上下文或者 单击位于窗300的左手列中的展开按钮,能够展开图7的绘制上下文窗300。 窗300a的展开示出用于建立入栈缓冲器的单个libgcm调用。此处,开发人 员能够查看是否存在期望的调用,用于特定帧渲染过程。

【0084】在一个实施例中,可以查看跟随着渲染三角形的实际命令的诸 如被设定的深度函数的多个GPU状态。因此,在图8的窗300a中,展开绘 制上下文来查看最初的GCM API调用。此外,源级反汇编包括可以引用参 数名称和常量名称的注释的自变量。此外,用户指定的入栈缓冲器注释可以 被示出以进一步协助优化过程。在一个实施例中,可以使用视觉技术来突出 冗余调用。这些冗余调用可以用不同于图300a的显示的剩余部分的颜色来 突出显示。

【0085】应该尽可能避免冗余调用,其中,使用同样的输入值来调用同 样的函数。本领域内的技术人员将会理解冗余设置GPU寄存器可对性能产 生显著的负面影响。为了实现冗余命令的移除或者突出,函数可以检查记录 每一寄存器值的入栈缓冲器,因为入栈缓冲器设置该值。当遇到的命令其寄 存器值被设置为等于寄存器的之前的值,则从入栈缓冲器移除该命令。因此, 对于冗余调用可以评估绘制命令、清除、顶点指令、顶点常量、片段程序常 量和其它命令的设置,其中,使用同样的输入值调用同样的函数。应该注意 libgcm函数cellGcmSetMarker可以被用来将文本注释插入到入栈缓冲器中, 其在图8的窗300a中显示。

【0086】图9是示出根据本发明的一个实施例的原始视图窗口302与其 内容的简化示意图。在窗302中主要示出入栈缓冲器的解释的转储。在窗302 中看到API调用设置的准确的硬件寄存器值。原始视图窗302示出全部入栈 缓冲器分解、寄存器序列和常数以及任意用户指定的注释。在一个实施例中, 如果捕获具有这里注释的任意错误,则错误能够在窗302中被可视地突出显 示。图10的窗306的问题视图概括所有的警告和错误。

【0087】在一个实施例中,通过在问题上单击来选择其中一个问题项, 开发人员将被引导到不合规则的绘制上下文和原始分解。图11中示出根据 本发明的一个实施例的入栈缓冲器综述屏幕308。入栈缓冲器综述屏幕308 示出不同类型的命令占用了多少个入栈缓冲器。不同类型的命令包括设置纹 理参数、渲染目标参数、顶点程序等的命令。如图11中所示,顶点程序常 量占用入栈缓冲器的大部分空间,即41408字节或者55%。此外,应该理解 在顶点程序常量中存在大量的冗余。如图11中所示,移除冗余能够将顶点 程序常量的大小降到29932字节的数据。通过选择图11的窗308的详细的 冗余标签,呈现详细的冗余窗310。

【0088】图12的详细冗余窗口310包括所有状态命令和对于每一个状 态命令的冗余的百分比的列表。任意显著冗余状态可以被突出或者以一定方 式可视地放大,来提醒开发人员为了最佳使用缓冲器而应该裁剪冗余状态。 如图12中所示,阿尔法测试使能被设置超过200次,其中99%冗余。本领 域内的技术人员理解冗余调用能够轻易地给每一帧的渲染增加几微秒。因 此,图11和图12的入栈缓冲器综述分解了入栈缓冲器并且允许内容分类, 例如通过大小。

【0089】图13A是进一步示出图6的渲染状态窗口312的简化示意图。 渲染状态窗312示出当前所选择的绘制上下文参考的所有资源。在渲染状态 窗312中,示出已经被设置用于该渲染调用的顶点阵列、片段程序、纹理、 渲染目标等等。应该理解由于特定资源通过之前的绘制上下文已经设定,例 如片段程序已经在五个绘制上下文之前被指定,通过简单地查看用于绘制的 libgcm调用不能获取该信息。选择资源将开发人员推向提供进一步细节的合 适的资源窗。如在窗312的底部所描述的,存在多个标签,其定义了通过下 图进一步解释的图形界面。

【0090】图13B是示出根据本发明的一个实施例的说明对于每一调用已 经设定何种GPU状态的杂项状态窗314的简化示意图。例如,在窗314中, 已经启用颜色写并且停用阿尔法混合。图14A示出根据本发明的一个实施例 的纹理窗316。纹理窗316在窗316的左手列中列出所有的对于帧由入栈缓 冲器当前使用的纹理。对于每一纹理,显示诸如压缩格式、维度、总的mip 水平、大小等等的特性。

【0091】当然,纹理窗316中可以包括附加的纹理状态属性。附加地, 能够单独查看对于每一纹理的每个mip水平,以确保mip看上去正确。在图 14B中,示出纹理窗316的较小mip水平。在图14C中,像素工具提示使得 开发人员能够检查用于阴影计算的盒子317中的纹理的像素值,诸如法线贴 图(normal maps)。图14D示出纹理窗316,其中下拉列表指示使用该纹理 的绘制上下文。

【0092】图15的存储器转储窗318提供纹理的存储器视图,其用于调 试使用此纹理的着色(shader)。在一个实施例中,纹理能够被输出为BMP 文件,当该纹理由诸如CELL处理器的处理器程序性产生时其可以用于调试。 图16和17分别示出窗口320和322。在图16中,窗320中示出入栈缓冲器 所使用的顶点阵列。对于图17,在窗322中示出入栈缓冲器所使用的索引阵 列。

【0093】图18是示出根据本发明的一个实施例的片段程序窗口324的 简化示意图。片段程序窗324列出入栈缓冲器所使用的所有片段程序,并且 提供当前绘制上下文所使用的片段着色程序的解释转储。应该理解与顶点着 色程序不同,片段着色程序所使用的常量嵌入在程序自身中,使得在绘制对 象之前典型地设置常量。这就是,取决于所讨论的特定绘制上下文,片段着 色程序的嵌入的常量改变。片段程序窗324显示对于当前的绘制上下文的合 适的常量。

【0094】图19A示出根据本发明的一个实施例的列出入栈缓冲器中使用 的所有程序并提供解释的转储的顶点程序窗口326。顶点程序窗326还示出 哪个指令是双重发布的并且哪个命令具有依赖性暂停。在一个实施例中,这 些暂停可以被可视地突出。顶点程序窗326列出当前绘制上下文使用的每一 个顶点程序和诸如输入、输出、临时寄存器等的属性。

【0095】图19B示出根据本发明的一个实施例的顶点程序上下文窗327。 顶点程序上下文窗327示出当前绘制上下文所使用的顶点常量。该常量可以 被可视地突出,其中颜色指示常量的特定状态。例如,在一个实施例中,可 以使用不同的颜色来指示常量是否新修改、从之前的帧继承或者冗余,从而 为开发人员提供哪里存在优化机会的指示。

【0096】图20A和20B示出根据本发明的一个实施例的提供GPU中的 寄存器的状态的详细视图的GPU寄存器窗。图20A示出窗328,其提供简 短模式显示,列出由当前所选择的绘制上下文改变的所有寄存器。图20B示 出窗330,其列出所有的寄存器。在一个实施例中,显示被颜色编码,使得 特定颜色可以指示由当前绘制上下文设定其值,并且如果该值是另一个颜 色,则该值由之前绘制上下文来设置。例如,蓝色值可以指示该值由当前绘 制上下文设定,而绿颜色指示该值由之前的绘制上下文设定。

【0097】图21A到21K根据本发明的一个实施例进一步示出渲染目标 窗304。渲染目标窗304列出帧中使用的所有渲染目标,突出当前所选择的 绘制上下文中实际使用的渲染目标。例如,图21B示出深度缓冲器渲染目标 的视图。大体上,渲染目标窗304使得开发人员唾手可得工具内部分析的结 果。例如,在一个实施例中,因为对象仅写到该缓冲器,所以可以突出该阴 影图。因此,能够以多种方式检查捕获,并且捕获能够被保存并发送给其他 人用于复审。应该理解,游戏控制台不需要复审发送给另一个开发人员的数 据。然而,游戏控制台与应用程序挂钩将提供能够与再捕获一起进行的附加 的项目。例如,在渲染目标窗304中,通过选择刷新按钮,开发人员能够在 当前绘制调用之后查看渲染目标的状态。大体上,通过选择绘制上下文并且 随后刷新,开发人员能够观察图像被一片接一片渲染,如图21C到21H中 所示。

【0098】在此实施例中,例如,开发人员能够确定哪个绘制调用导致最 终图像中的奇怪的像素。此外,开发人员能够选择他们是否希望看到多种模 式中的渲染目标,诸如突出、过分描绘或者接线框。当开发人员在图像上移 动光标时,在任何像素的准确的RGB和像素位置值允许开发人员记录像素 特定的程序缺陷,如图21J和21I中所描述的。如上所提及,这些图像可以 被保存为BMP文件用于之后的检查。渲染目标窗304使得开发人员能够确 定绘制上下文要写什么到渲染目标;渲染目标是否被混淆为纹理;渲染目标 是否被设定用于双倍速度渲染;渲染目标是否被建立用于早期深度优化等 等。

【0099】在渲染目标刷新期间,入栈缓冲器被传送到GCM工具并且被 增加到当前所选择的绘制上下文。因此,渲染过程是单步执行的,并且可以 及时在前进和后退的情况下进行。图21K示出使得能够输出渲染目标窗数据 的界面。

【0100】除了查看每一资源之外,开发人员还能够通过GCM工具进行 各种形式的性能分析。典型地,开发人员能够开始使用通过GCM工具提供 的子单元使用特征。图22示出根据本发明的一个实施例的开发人员在其中 选择成形器(profiler)特征的菜单的简化示意图。成形器特征中的子单元利 用特征提供能够导致瓶颈的每个绘制上下文中的每个主要子单元的平均利 用率。该成形根据本发明的一个实施例可以是图23A的窗334或者图23B 的窗336中所示的图表。窗334和336的条形图可以以颜色编码来给出哪个 子单元最频繁利用的清楚指示和大体给出优化目标的排序列表。

【0101】例如,如图23B所示,其中对于特定绘制上下文的最高的条形 是用于顶点程序处理元件利用,开发人员可以考虑优化顶点程序或者重新排 序索引来更好地利用变换后的高速缓存(post-transform cache)。应该理解23A 和23B的子单元利用成形示出主要的GPU子单元的当前的利用。此外,子 单元利用率可以基于绘制上下文使用柱状图上交迭的每个子单元利用来计 算。在一个实施例中,子单元利用成形提供优化目标的分类列表。还应该理 解窗334和336的每一个图表中的宽度和执行对应渲染特征所用的时间成比 例。

【0102】图24A和图24B示出根据本发明的一个实施例的针对可用于 分析的性能计数器的图形用户界面。性能计数器提供关于导出计数器和GPU 的硬件计数器的细节。原始计数器数据可以以列表格式显示,如图24B中所 示的。替代地,可以以图像格式呈现数据,其中多个计数器可以或者不可以 同时用图表示。应该理解GCM工具基于这些计数器提供统计,诸如变换后 的库存符合/错失、有效的填充率等等。

【0103】游戏引擎的其中一个职责是查看场景中的所有对象并且确定哪 个处于视图体中并且应该被渲染,哪个在视图体之外并且应该被略过。通常 使用边界受限的球体来操作,其在一些地方不很精确,当许多对象完全离屏 将仍进行边界受限的球体的测试。而且,活动的特征极难于检查视图体。存 在多种效率低的选项,诸如使用足够大的边界受限的球体来包括所有可能的 姿势,或者复杂的选项,诸如使用以各种接合点为中心的多个边界受限的球 体。因此,开发人员可以询问对象选择是怎样有效或者从更好的对象选择可 以得到多少性能增益。

【0104】除了其他特征之外,此处描述的GCM工具还能够分析对象剔 除,并且提供入栈缓冲器中的对象的完整分析,以及使用从入栈缓冲器移除 的所有离屏对象建立新的入栈缓冲器。比较新的入栈缓冲器和之前的入栈缓 冲器,并能够量化性能增益。应该理解此处描述的工具执行这个分析,不用 改变应用程序中的一段代码。也就是,由于应用程序在重新播放过程期间被 旁路,而入栈缓冲器特征被捕获,则开发人员不必要经历重写应用程序代码 的痛苦过程。

【0105】图25A到25D示出根据本发明的一个实施例的用于优化帧的 渲染的选择过程。初始,开发人员将打开条件性的成形菜单,并且对于每个 绘制上下文进行选择来裁剪绘制上下文,如图25A中所示。在图25B中, 选择裁剪过程的细节并且在此特定例子中,开发人员选择离屏裁剪,而不会 a)退化,b)无像素,或者c)背面三角形。

【0106】开发人员随后选择成形按钮,并且通过GCM工具来处理结果。 对于每一个渲染调用,GCM工具查看传递到每个三角形的三角形组件单元 的顶点位置,并且确定屏幕上是否存在任何三角形。一旦工具识别对象在屏 上,工具建立包含就是那些对象的新的入栈缓冲器并且对帧重新计时。在一 个实施例中,整个过程可以耗用一分或者两分钟。图25D中示出结果,其中, 当比较使用具有离屏对象的入栈缓冲器渲染帧和使用具有仅屏幕对象上的 入栈缓冲器的渲染帧时,窗340提供的概览指示获得33%的增益。

【0107】因此,看到可能的33%的增益的开发人员应该查看改变方法, 其中相对于视图体来检查对象。关于图25A到25D的上述测试可以被称为 “假设”测试或者成形(profile)。也就是,开发人员可以询问“如果我的选择 是最好的怎么办”。这里,剔除器能够基于每个三角形进行剔除。在另一个 实施例中,存在冗余命令“假设”,其识别冗余命令。冗余命令“假设”使用移 除的所有冗余命令建立新的入栈缓冲器,并且测量增加的性能。

【0108】关于图25C,应该注意到,选择成形按钮能够比较入栈缓冲器 的成形而不需要提交修改的入栈缓冲器的变化到最初的入栈缓冲器。可替代 地,选择提交按钮将修改的入栈缓冲器的变化提交到最初的入栈缓冲器。

【0109】图26A到26C示出当应用冗余命令“假设”时开发人员可以进行 的事件的序列。在图26A中,提供“假设”窗342,其中开发人员将选择冗余 “假设”。在图26B中,选择冗余“假设”并且在图26C中比较成形。图26D 到图26O中示出多个其他的“假设”成形选项。

【0110】此外,图27A-E示出可以被称为试验的性能优化,其采用和反 复进行一个或者多个“假设”或者性能优化来提供对于渲染的游戏或者应用 程序的最佳设置的推荐。这些试验以下和实现技术以及可以显示的示例性结 果一起来进一步描述。应该理解性能试验的列表是示例性的并且不意于限 制。也就是,提供信息来优化图像数据的帧的渲染的任意性能试验可以和此 处描述的工具包括在一起。

【0111】在一个试验中,在图26中所示,重新组织场景使得从前到后 渲染对象来最大化深度剔除性能。以不干扰阿尔法混合绘制调用的相对渲染 顺序的方式进行这种分类。最初,建立绘制调用的分组,其中分组包括能够 无需改变输出而不同分类的所有绘制调用。

【0112】在一个实施例中,不允许越过渲染目标改变的分组、混合状态 改变、清除、片段程序改变、片段程序常量集、顶点程序改变、顶点程序常 量集或者深度函数。其他微小的渲染状态改变应该和绘制调用相关联并且如 果分类之后有必要,应该移动或者建立合适的寄存器集。每一个绘制调用的 位置范围相同,并且最接近的z范围被选作分类的值。根据每一个绘制调用 的最接近的z范围,在每一绘制分组中分类绘制调用,并且测量性能。

【0113】显示结果来示出来自对象分类的任意性能增益。本领域内的技 术人员理解对于对象分类,显示对象的顺序是重要的。从前到后分类由于早 期的深度拒绝而改进了性能。典型地,游戏渲染阴影图,随后是不透明的几 何形状、半透明的几何形状并且最后诸如模糊和光晕的全屏幕效应。在此实 施例中,GCM工具能够确定通过距离对阴影图和不透明几何形状渲染调用 的分类是否会改进性能。

【0114】图26E中所示的,仅深度遍历(depth only pass)性能优化将测 量对于每个不透明对象插入仅深度(Z)渲染调用的性能影响。应该注意这 可能或者不可能对性能有益。例如,如果瓶颈是顶点属性读出或者顶点着色 程序,则如果加上Z pass,可以实际降低性能。在此优化中,对于写到颜色 和深度缓冲器的每一渲染目标,场景被渲染两次。首先,使用颜色写停用和 深度写启用的方式渲染场景。然后使用颜色写启用和深度写停用的方式渲染 场景。测量性能增益并且随后图形显示结果。

【0115】图26F-H中示出的三角形裁剪优化在将三角形传递到像素单元 之前在三角形上执行多种检查。如果三角形处于视图体外,裁剪三角形。如 果三角形正对着错误的方向,裁剪三角形。如果三角形具有零区域,裁剪三 角形,这在由渐进网格做出精细度等级(LOD)时可以频繁发生。最后,如 果三角形过小以致不能包围像素中心,裁剪三角形。应该注意GCM工具能 够在如上提及的背面、离屏、退化和无像素三角形上执行检查。换句话说, 如果采用这种类型的协同处理器单元(SPU),则该工具将提供性能增加。 以下列出示例性三角形裁剪选项。

裁剪离屏三角形

【0116】对于每一个绘制调用,查找离屏的三角形,将其从顶点阵列或 者索引阵列移除,并且测量性能增益。通过转换观察点来转换三角形顶点, 并且选择无顶点、边或者与屏幕区域交叉的面积的任意三角形。该陈述示出 对于每一绘制调用移除多少三角形和移除它们获得的性能增益。

裁剪背面三角形

【0117】如果启用背面选择,对于每一个绘制调用,找到是背面的三角 形,将其从顶点阵列或者索引阵列移除,并且测量性能增益。

(x1-x0)*(y2-y0)-(x2-x0)*(y1-y0)<(-e)(|x1-x0|+|x2-x0|+|y1-y0|+|y2-y0|+2)

其中,三角形=((x0,y0),(x1,y1),(x2,y2))和e=FLT_EPSILON    (公式1)

通过转换观察点来转换三角形顶点之后,应用公式1来确定哪个三角形 是背面并且应该被移除。随后通过将每个背面三角形分到各自的绘制调用 中,使用深度比较、阿尔法测试和停用模板比较来重新渲染并且请求从GPU 写的像素的数量的报告,来验证该测试。随后移除被确定为背面并且不写到 任何像素的三角形。表示结果的界面示出对于每一绘制调用移除多少三角形 和移除它们获得的性能增益。

裁剪退化三角形

【0118】定位退化的三角形,并且将其从顶点阵列或者索引阵列移除, 并且测量性能增益。

(v0==v1)||(v0==v2)||(v1=v2)

其中v0=(x0,y0)和v1=(x1,y1)和v2=(x2,y2)和三角形=(v0,v1,v2)公式2

通过转换观察点来转换三角形顶点之后,应用公式2来确定哪个三角形 被退化并且应该被移除。表示结果的界面示出对于每一绘制调用移除多少三 角形和移除它们获得的性能增益。

裁剪无像素三角形

【0119】对于每一个绘制调用,识别没有碰到任何像素中心的三角形, 并且将其从顶点阵列或者索引阵列移除,以测量性能增益。随后通过将其分 到各自的绘制调用中,使用深度比较、模板比较和阿尔法测试停用来重新渲 染并且请求从GPU写的像素的数量的报告,来验证每一个三角形。随后从 索引或者顶点阵列移除不写任何像素的任意三角形。表示结果的界面示出对 于每一绘制调用移除多少三角形和移除它们获得的性能增益。

【0120】在一个实施例中,基于每个对象通过操纵“临时寄存器计数”能 够改变像素管道(pixel pipe)的长度,其能够使用libgcm调用 cellGcmSetRegisterCount来设置。如果临时寄存器计数被设置的高,则在每一个 像素管道中存在较少的像素。由于其能够改进管道之间的像素分布,所以这 能够有助于较小对象的性能。这也能够有助于全屏效应的性能,其可以对纹 理高速缓存过度使用。使用如图26K-L中所示的此“假设”,开发人员能够看 到当临时寄存器计数的值改变时的性能增加或者减少,对于特定渲染调用或 者对于作为整体的场景。

【0121】在另一个实施例中,能够改变三角形格式来确定性能影响。存 在多种方法来显示GPU上的三角形:三角形、三角形带、索引的三角形和 索引的三角形带,来命名一些。在一个实施例中,索引的三角形具有最高的 性能。如果使用非索引的绘制,则使用如图26M中所示的“转换非索引绘制 到索引绘制”优化将示出通过改变为索引的三角形列表来获得的性能。还存 在“假设”来优化三角形列表,如图26N-O中所示。通过使用顶点高速缓冲优 化程序来确定要获得的潜在性能。顶点高速缓存优化程序是选择索引的三角 形的接近的理想集的工具并且优化不仅用来最小化转换后的高速缓存故障, 还用于GPU上的三角形组件中使用的四个顶点迷你高速缓存。以下列出进 一步的优化,

顶点属性阵列上下文位置

【0122】函数将每一个顶点流移动到主存储器或者视频存储器并且记录 每一个的性能测量。因此,示出通过切换主存储器和视频存储器之间的顶点 流来获取的性能的特定故障,能够使用顶点流所被移动到的上下文来产生。

交错的顶点属性阵列

【0123】在此实施例中,每一顶点阵列将通过记录哪个顶点阵列使用超 过一次而被分配到或者实例或者唯一的类别。这些列表随后通过记录哪个实 例顶点阵列被一起使用而被分解为对象列表。使用该信息,对于每一个对象 的顶点阵列的每一类别,顶点阵列能够交错在一起。对于每一绘制调用来设 置交错的顶点阵列而不是初始的顶点阵列,并且测量性能差别。对于每一个 对象实例,通过显示来自交错属性的性能增益,能够图形显示结果。

交错的顶点属性阵列上下文位置

【0124】该试验的实施利用跟随有顶点属性阵列上下文试验的交错的顶 点属性阵列试验,二者上面列出。此处,对于每一个对象实例,显示性能增 益和顶点属性阵列所被移动到的上下文。

找到未使用的启用的顶点属性阵列

【0125】在另一个示例性试验中,通过比较顶点属性掩码和启用的顶点 属性阵列来确定对于每一个绘制调用是否存在任何未使用的启用的顶点属 性阵列。通过停用这些顶点属性阵列,来停用未使用的阵列并且测量性能增 益。结果的图形表示可以包括显示顶点着色和绘制调用,其中,对于每一个 未使用的启用的顶点属性阵列,不使用顶点属性阵列,以及通过适当停用这 些属性的总的性能增益。

使用我们马上发明的完美的网格优化程序的网格的重新优化

【0126】在此试验中,对于每一个对象实例,顶点阵列和索引阵列通过 网格优化程序,并且捕获性能增益。对于每一个对象实例,可以呈现性能增 益的显示以及转换前和转换后高速缓存故障的差异。

搜寻未使用的插入器

【0127】在此试验中,对于每一个顶点程序和每一个片段程序组合,通 过检查顶点程序输出掩码和片段程序指令来识别出任意未使用的插入器。通 过修改顶点程序输出掩码来停用任意未使用的插入器。随后测量性能增益。 对于每一个顶点程序和片段程序组合的结果显示,示出未使用的插入器和停 用未使用的插入器产生的结果性能增益。

颜色缓冲器上下文位置

【0128】对于每一个颜色缓冲器,将颜色缓冲器移动到颜色缓冲器当前 驻留的对应位置并且测量性能差异。在一个实施例中,在移动缓冲器时保持 平铺设置(除了压缩)。对于每一个唯一的颜色缓冲器,测量来自于将颜色 缓冲器移动到其当前驻留的对应位置的性能差异。如果性能改进,建立将颜 色缓冲器的上下文改变为该上下文的“假设”。当然,任何交迭的纹理或者深 度缓冲器上下文被重新定位到同样的上下文。对于每一个颜色缓冲器,可以 显示移动缓冲器带来的性能差异。

深度缓冲器上下文位置

【0129】对于每一个深度缓冲器,将深度缓冲器移动到深度缓冲器当前 驻留的对应上下文并且测量性能差异。在移动缓冲器时保持平铺设置(除了 压缩)。对于每一个唯一的颜色缓冲器,测量来自于将深度缓冲器移动到其 当前驻留的对应上下文的性能差异。如果性能改进,建立将深度缓冲器的上 下文改变为该上下文的“假设”。当然,任何交迭的纹理或者深度缓冲器上下 文被重新定位到同样的上下文。对于每一个深度缓冲器,在缓冲器被移动的 情况下,可以显示移动缓冲器带来的性能差异,以及平铺设置,如果存在的 话。

片段程序寄存器计数

【0130】在此试验中,对于每一个片段程序,尝试每一种可能的寄存器 计数并且找到具有最佳性能的最小寄存器计数。能够显示对于每个片段程序 使用的性能增益和寄存器计数。

DXT1纹理

【0131】在此试验中,对于不具有变化的阿尔法(总是开启或者总是关 闭)的每一纹理,能够应用dxt1压缩。更新所有相关的纹理格式命令并且测 量性能增益。本领域内的技术人员将理解DXT1仅支持二进制阿尔法。在一 个实施例中,设置对于阿尔法总是开启或者关闭的用户可定义的错误容限。 能够呈现对于每一可应用的纹理、新的纹理和场景的截屏的性能增益。在一 个实施例中,提供输出新的纹理的能力。

DXT3/5纹理

【0132】对于每一个不是dxt1压缩的纹理,dxt3/5压缩纹理并且更新所 有相关的纹理格式命令来测量性能增益。能够呈现对于每一可应用的纹理、 新的纹理和场景的截屏的性能增益。在一个实施例中,提供输出新的纹理的 能力。

找到未使用的清除的模板缓冲器

【0133】在此试验中,对于具有模板(stencil)位启用的每一个清除命 令,检查模板掩码和模板操作用于入栈缓冲器中的深度/模板缓冲器的寿命。 如果缓冲器从未被使用,则从清除命令和测量的性能增益移除模板位。显示 性能增益和具有不必要的模板位的清除命令。

找到未使用的清除的深度缓冲器

【0134】在此试验中,对于具有深度位启用的每一个清除命令,检查深 度掩码和深度函数用于入栈缓冲器中的深度/模板缓冲器的寿命。如果缓冲器 从未被使用,则从清除命令和测量的性能增益移除深度位。可以显示性能增 益和具有不必要的深度位的清除命令。

找到未使用的清除的颜色缓冲器

【0135】在此试验中,对于具有颜色位启用的每一个清除命令,检查颜 色掩码和混合函数用于入栈缓冲器中的颜色缓冲器的寿命。如果缓冲器从未 被使用,则从清除命令和测量的性能增益移除颜色位。在一个实施例中,呈 现性能增益和具有不必要的颜色位的清除命令。

具有阿尔法混合的阿尔法测试

【0136】在此试验中,对于每一个混合函数,其中增加混合方程,并且 该函数是src阿尔法和inv src阿尔法,确定设置的寿命并且设置阿尔法测试 大于基准0。测量和显示性能增益以及新的阿尔法命令增加到的位置。

纹理上下文位置

【0137】纹理上下文位置试验遵从以下过程:

a)识别具有包含到每一个其他纹理的链路的阵列的每一纹理,该每一 其他纹理由所有绘制调用上的该纹理所使用。对于不包含链路的每一纹理和 对于使用不包含链路的纹理的每一个绘制调用,产生在绘制调用中所使用的 其他纹理的链路。

b)纹理分组产生-这里,对于每一个纹理,加到纹理列表来遍历。对 于纹理列表中的每个纹理,建立新的纹理分组,并且将该纹理加到分组,并 且递归增加连接到该纹理的所有纹理到纹理分组中。纹理加到分组的任何时 间,从纹理列表中移除纹理以遍历。

c)对于每一个纹理分组,如果分组中纹理的数量大于6,通过最大存储 器引脚到最小存储器引脚来分类分组中的纹理。令v是视频存储器中的纹理 存储器的计数并且将其设为0。令m是主存储器中的纹理存储器的计数并且 将其设为0。令t是纹理消耗的存储器的数量。对于纹理分组中的每个纹理, 如果m+t>v*0.6,则将用于此纹理的位设置到视频存储器并且v+=t,另外将 用于此纹理的位设置到主存储器并且m+=t。

d)对于每一个纹理分组,如果分组中纹理的数量小于或者等于6,则具 有由位表示的纹理分组中的每一个纹理上下文。结果的位流应该对于每一个 可能的组合强力(brute force)成形,选择最好的执行组合作为对于位流的 获胜者。

e)对于每一个纹理,如果纹理的上下文位从其最初状态改变,则建立 将纹理的上下文改变为那个上下文的“假设”。

对于纹理上下文位置试验的可替代实现包括:

在d)之后令s是纹理位流,如在c)和d)中计算。令b是位流s的帧 时间。令i是迭代计数。当i不是0时,递减i。按5%随机转变s。令n是 转变的位流的帧时间。如果n<b,则设置b等于n并且令s等于转变后的位 流。

对于每个纹理,可以呈现移动纹理带来的性能差异,以及在纹理被移动 的情况下,呈现移动所有纹理的总的性能。

平铺包装

【0138】在此试验中,对于具有匹配间距和压缩类型的每个平铺,平铺 被组合成单个平铺并且正确地移动包含的资源。在一个实施例中,显示具有 列出的每一个平铺内容的之前和新的平铺布局。

平铺未平铺的颜色缓冲器

【0139】此处,如果存在未使用的平铺,对于未平铺和未混合的每一个 颜色缓冲器,平铺颜色缓冲器并且测量性能增益。对于每一个可应用的颜色 缓冲器,显示来自平铺和平铺设置的性能增益。

平铺未平铺的深度缓冲器

【0140】此处,如果存在未使用的平铺,对于未平铺和未混合(swizzle) 的每一个深度缓冲器,平铺深度缓冲器并且测量性能增益。对于每一个可应 用的深度缓冲器,显示来自平铺和平铺设置的性能增益。

压缩未压缩的平铺的颜色缓冲器

【0141】在此试验中,对于视频存储器中平铺的并且没有压缩的每一个 颜色缓冲器,压缩颜色缓冲器并且测量性能增益。在一个实施例中,仅压缩 包含同样格式的缓冲器的平铺。对于每一个可应用的颜色缓冲器,显示性能 增益和平铺设置。

压缩未压缩的平铺的深度缓冲器

【0142】在此试验中,对于视频存储器中平铺的并且没有压缩的每一个 深度缓冲器,压缩深度缓冲器并且测量性能增益。在一个实施例中,仅压缩 包含同样格式的缓冲器的平铺。对于每一个可应用的深度缓冲器,显示性能 增益和平铺设置。

平铺未平铺的颜色缓冲器并且压缩它们

【0143】对于未平铺和未混合的每一个未使用的颜色缓冲器,平铺颜色 缓冲器,并给颜色缓冲器最佳的压缩设置。测量对于每一个可应用的颜色缓 冲器的性能增益,并且显示性能增益和平铺设置。

平铺未平铺的深度缓冲器并且压缩它们

【0144】对于未平铺和未搅和的每一个未使用的深度缓冲器,平铺深度 缓冲器,并给深度缓冲器最佳的压缩设置。测量对于每一个可应用的深度缓 冲器的性能增益,并且显示性能增益和平铺设置。

找到冗余清除

【0145】在此试验中,确定缓冲器对于每一清除命令是否已经清除。如 果缓冲器被清除,则移除清除命令并且测量性能增益。性能增益和双清除命 令可以显示给开发人员/用户。

找到完全填充的颜色缓冲器

【0146】这里,对于具有颜色位启用的每一个清除命令,检查颜色缓冲 器以查看是否所有像素在入栈缓冲器中当前渲染目标寿命之后已经写入。如 果每一个像素在其中具有新的颜色值,则从清除命令移除颜色位并且测量性 能增益,使得可以显示性能增益和具有不必要的颜色位的清除命令。

Ppu片段程序常量修补

【0147】对于此试验,对于每一个片段程序和具有不同的常量集的每一 绘制调用,使用程序宏代码中已经设立的常量建立新的片段程序。常量集从 入栈缓冲器被移除并且用新的片段程序的片段程序命令集来替代它们。结果 的显示可以包括用于每一个片段程序的性能增益、程序变量的数量和新变量 以字节为单位的大小。

完美的深度剔除优化控制设置

【0148】对于使用CalcilateDepthCullFeedback()函数中描述的深度剔 除报告和算法的每一个渲染目标,识别最好的深度剔除优化控制设置。对于 每一个渲染目标,显示最好的深度剔除优化设置和结果的性能增益。

深度剔除区域启用

【0149】此处,对于每一个平铺的深度缓冲器,对于深度缓冲器如果深 度剔除区域没有设置,则设置深度剔除区域并且测量性能增益。然后能够显 示适合地设置深度剔除区域的性能增益。

深度剔除区域停用

【0150】此处,对于每一个平铺的深度缓冲器,如果深度剔除区域对于 深度缓冲器设置,则停用深度剔除区域并且测量性能损失,其应该展示深度 剔除的效率。捕获没有使用深度剔除的性能损失用于显示。

深度剔除再填入

【0151】关于每一个渲染目标,如果深度剔除是特定无效的或者深度函 数改变了方向,则通过无效之后渲染大的嵌块(quad)来重新填入深度剔除 存储器。测量性能增益并且,对于每一渲染目标,如果深度剔除区域无效, 则显示来自重新组装深度剔除存储器的性能增益。

完整的纹理mip-map集

【0152】在此试验中,对于不具有完整的mipmap集的每一个纹理,使 用简单的箱式过滤器产生完整的mipmap集并且测量性能差异。来自具有完 整mipmap集的性能增益随后能用于显示。

三线过滤

【0153】对于使用各向异性过滤的每一个纹理过滤命令,将过滤改为三 线过滤并且测量性能增益用于和场景的截屏一起显示。

较少线性过滤(brilinear filtering)优化

【0154】对于使用三线过滤的每一个纹理过滤命令,反复进行所有可能 的较少线性优化值并且测量性能增益。可以产生示出相对于用于每一个可应 用的纹理和场景的截屏的较少线性优化值的性能增益的图用于显示。

双线过滤

【0155】对于使用三线或者各向异性过滤的每一个纹理过滤命令,将过 滤改为双线过滤并且测量性能增益。该试验十分有助于深度纹理。这里,性 能增益和场景的截屏可用于显示。

点过滤

【0156】在此例中,对于每一个纹理过滤命令,将过滤改为点过滤并且 测量性能增益。这十分有助于深度纹理。对于每一个可应用的纹理,性能增 益和场景的截屏可以被显示。

找到静态的或者不变化的属性

【0157】此处,识别贯穿全部绘制调用值是常量的每个绘制调用中的顶 点阵列。替代设置该顶点阵列,使用SetVertexAttrib4f来设置属性阵列的值。 如果整个顶点阵列在所有绘制调用上是相同的值,代替为移除顶点阵列并且 使用SetVertexAttrib4f命令来替代其设置命令。用于存在任意静态属性的每 一个绘制调用的表示包括性能增益和SetVertexAttrib4f的值。对于每一个顶 点阵列,如果整个顶点阵列是静态,则对于使用SetVertexAttrib4f命令和传 递到SetVertexAttrib4f的值替代该命令显示总的性能增益。

完美的顶点属性包装

【0158】对于每一个对象实例和对于用之渲染对象实例的每一个顶点程 序,找到对于两个属性的分量相加的数量低于或者等于4的每个属性的兼容 属性。将流组合成单个属性并且相应修改顶点程序,从而测量性能增益。

a)找到互相使用的属性阵列。对于每一个唯一属性的数据阵列,对于 使用该属性阵列使从当前属性阵列到其他属性阵列的软链路在绘制调用中 被使用的的每一个绘制调用,在绘制调用中使用当前属性阵列的次数增加计 数,并且保持和该绘制调用一起使用每一个其他属性阵列的次数的计数。接 着,对于每一个唯一的属性阵列,对于从该属性阵列的每一个软链路,如果 与当前属性阵列使用链接的属性阵列的次数的计数等于当前属性阵列使用 的次数,则与该属性建立硬链路。这一点之后,不再使用软链路。

b)找到与每一个顶点属性阵列一起使用的顶点程序。对于每一个唯一 的顶点属性阵列,通过反复进行使用该顶点阵列的所有绘制调用并且将在每 一绘制调用中使用的每一个程序加到每个属性阵列顶点程序列表,来建立和 该属性阵列一起使用的顶点程序列表。

c)对于每一个顶点程序和该顶点程序的每一个启用的输入属性,反复 进行顶点程序指令并且产生对于描述每一个输入属性所使用的分量的每一 个输入的掩码。采用结果输入属性所使用的分量掩码并且将其与每一个属性 阵列所使用的分量掩码相组合。(注意到所使用的分量掩码无论是x、xy、xyz 或者xywz都不同于所保存的分量掩码)

d)对于每一个唯一的属性阵列和对于同样格式的该属性阵列的每一硬 链路,如果链接的属性阵列的所使用的属性计数加上当前的属性阵列的所使 用的属性计数小于或者等于4,则将属性组合到单个阵列中,并且对于当前 属性阵列的顶点程序列表中的每一个顶点程序,反复进行程序指令并且根据 新的布局更新任意分量掩码和分量混合。当做出改变时,重复d)。

e)对于从实现中执行的每一个操作的显示,测量性能增益。

使用顶点程序集

【0159】在此试验中,分析入栈缓冲器来找到多样的集合顶点程序和它 们之间的顶点程序集。确定所有这些顶点程序是否能够一起包装在总的可用 的指令槽(instruction slot)中。随后修改入栈缓冲器来在同一时间设置所有 的顶点程序并且随后改变每一个之后的集合到执行槽变化中。示出包装在一 起的每一个顶点程序和结果的性能增益。在一个实施例中,提供输出功能性 来给出新的顶点程序集。

纹理mip-map偏置

【0160】在此试验中,对于每一个纹理过滤器命令,mip-map以0.1的 增量在0和1之间偏置来测量性能增益。一个示例性显示包括对于示出与所 使用mip-map偏置相对的性能增益的每一个纹理过滤器命令的图。

多个渲染目标建立重播优化

【0161】对于具有多个渲染目标的每一个渲染目标,确保渲染目标的每 一个处于同样的上下文位置并且具有准确的同样的平铺和压缩设置。如果它 们不是并且存在足够的未使用的平铺来平铺未平铺的缓冲器,则改变属性使 得它们相同并且测量性能增益。应该理解该试验取决于平铺包装。对于每一 个可应用的渲染目标,显示对于每一个缓冲器的性能增益、平铺设置和压缩 设置。

使用索引的绘制而不是未索引的绘制

【0162】这里,对于每一个未索引的绘制调用,建立索引缓冲器并且运 行其通过网格优化程序来测量性能增益。使非索引绘制调用被索引的性能增 益的显示是一个示例性显示。

片段程序上下文位置

【0163】对于每一个片段程序,移动片段程序到当前所处的对应位置并 且测量性能增益。一个示例性显示包括从移动程序和程序被移动后的性能差 异。

找到顶点程序中的静态分支

【0164】对于包含基于常量的分支的每一个顶点程序,建立顶点程序的 多个副本,每一个用于每一个可能的控制路径。不用改变常量,设置合适的 新的顶点程序。在一个实施例中,顶点程序可以被重新调度用于最佳指令排 序。对于每一个可应用的顶点程序,显示性能增益和以其静态分支的常量以 及新的顶点程序。还提供输出新的顶点程序的能力。

主存储器渲染转发

【0165】对于在主存储器中具有颜色或者深度缓冲器的每一个渲染目 标,将所有的缓冲器置于视频存储器中。随后在渲染之后,将命令加到入栈 缓冲器来复制(blit)渲染结果到主存储器。测量并显示性能增益。

原语(primitive)重启

【0166】对于使用三角形带的每一个索引的绘制调用,检测表示退化三 角形的索引缓冲器中任意模式(ABCD+DEEF+EFGH或者 ABC+CDDDE+DEF或者ABC+CCDDE+DEF或者ABC+CDDEE+DEF)并 且使用原语重启索引将其替换。测量性能增益并且对于每一个修改的绘制调 用,示出来自使用原语重启的性能增益。

量化

【0167】对于每一个顶点阵列,找到每一输入的范围。如果该范围可表 示地在当前描述的较小的类型中,转换顶点阵列到该较小的类型并且测量性 能增益。为了将较小的输入重映射到较大的输入,也许有必要以常量相加和 相乘指令到顶点着色。用于重新映射输入的公式是(A*B)+C,其中A是 输入到顶点程序的值,B是移动该值到最初范围中的常量,并且C是偏移该 值到初始数字所在的空间中的常量。从工具角度,常量B可以通过从阵列中 的最大值减去顶点阵列中的最小值而被定义。常量C是顶点阵列中的最小 值。来自于程序的用户的输入定义该量化中允许的最小错误容限。表B示出 最小错误容限范围。

表B

  表   值   位深度   范围   U8N(LE)   0   8位   0..1   I16N   1   16位   -1..1   F32   2   32位   -Inf..+Inf,Nan,sle8m23   F16   3   16位   -Inf..+Inf,Nan,sle5m 10   U8N   4   8位   0..1   I16   5   16位   -32768..+32767   Z10Y11X11   6   10/11位   -1..1   U8   7   8位   0..255

对于该试验的显示可以包括对于每一个顶点阵列和被修改的阵列中的 每一个输入的新的格式和常量以及来自于做出修改的性能增益。

常量叠算

【0168】常量叠算是用于通过预计算常量表达式来增加顶点/片段程序效 率的技术。这些预计算常量表达式将在PPU上被计算并且随后上载为补充 或者替代现存的顶点/片段程序常量。例如,表达式“mul(World,mul(视 图,投影))”和表达式“sin(时间)”能够在顶点/片段程序运行之前由其外的 PPU计算。能够移动的顶点/片段程序计算是和恒定参数相关联的那些计算; 也就是,计算不对每一顶点或者片段改变。常量叠算能降低每程序的指令的 数量并且还可以降低程序所使用的常量寄存器的数量。

【0169】在一个实施例中,建立指令图。从该指令图,识别出指令,其 中对指令的所有输入值是常量。从该指令计算结果并且加上该结果作为常 量。重复该过程,直到再没有常量可以叠算在一起。移除所有未使用的常量。 对于每一个顶点/片段程序,显示可以包括新的程序指令和预着色作为伪代 码。可以提供输出功能性以给出新的顶点程序和简单的C函数中的预着色本 身。

完美的顶点程序常量包装

【0170】对于每一个顶点程序,找到所有常量的所使用的分量。对于每 一个常量,找到另一个常量,其中两个常量的所使用的分量的数量加起来小 于或者等于4。将这些常量组合在一起为单个常量,修改入栈缓冲器和顶点 程序来反映这种改变,并且测量性能增益。如上所提及的,必须关注通过几 个顶点程序所使用的常量。

a)建立分量掩码阵列-对于每一个顶点程序,使用显式的常量索引(忽 略所偏移的常量索引)来反复进行标记任一所使用的常量的所使用的分量的 指令。在该阶段之后,定义每项4位的544尺寸的阵列,其表示每个可能常 量的所使用的分量。

b)顶点程序常量作为可重用的资源-对于每个顶点程序常量集,对于 直到常量使用另一个常量重写的每一个绘制调用以及和绘制调用一起使用 的每个顶点程序,如果常量集被标记如用在之前产生的所使用的分量掩码 中,则将顶点程序和绘制调用链接到常量集。

c)找到互相使用的常量-对于每一个顶点程序常量集和每一个链接的 绘制调用,反复进行也具有到该绘制调用的链接的每一个其他顶点程序常量 集并且将该顶点程序常量集链接到当前顶点程序常量集。

d)找到相等重合的常量-对于每一个顶点程序常量集和每一个链接的 顶点程序常量集,并且如果每一个链接的顶点程序常量集的链接的顶点程序 没有链接到当前的顶点程序常量集的链接的顶点程序,将该链接从当前顶点 程序常量集移到链接的顶点程序常量集。

e)建立所使用的分量掩码-对于每一个顶点程序常量集,具有对所有 未使用的分量设置的缺省的所使用的分量掩码。接着,对于每一链接的顶点 程序,将所使用的分量掩码和对于该常量的顶点程序的所使用的分量掩码组 合。

f)组合常量-对于每一个顶点程序常量集和每一个链接的顶点程序常 量集,如果常量集的所使用的分量的数量加上链接的常量集的所使用的分量 的数量小于或者等于4,则将常量组合并且对于每一个链接的顶点程序,反 复进行指令并且更新明确的常量索引、混合和对于所更新的常量的掩码。当 做出改变时,重复f)。

g)测量性能差异。

对于每一个顶点程序,显示包括对输入常量的修改和结果的性能增益。 提供输出功能性。

顶点程序输出包装

【0171】对于每个顶点程序,找到所有输出的所使用的分量。对于每一 个输出,找到另一个输出,其中两个输出的所使用的分量的数量加起来低于 或者等于4。将这些输出组合在一起为单个输出,并且修改顶点程序以及相 应地任意对应的片段程序。最后测量性能增益。

【0172】显示能够示出被修改并且其输出被组合的每一个顶点和片段程 序,以及源自这些修改的结果的性能增益。提供输出的功能性。

来自线性纹理的混合的纹理

【0173】对于没有Dxt压缩的每一个线性纹理,将该纹理转换为混合的 纹理并且更新所有的相关的纹理格式命令。测量性能增益并且对于每一可应 用的纹理,显示源自混合纹理的性能差异。

来自平铺的纹理的混合的纹理

【0174】对于没有Dxt压缩的每一个平铺的纹理,解平铺该纹理并且混 合该纹理数据。更新所有相关的纹理格式命令,并且测量用于显示的性能增 益。

找到来使用的颜色通道

【0175】对于每一个纹理和对于使用该纹理的每一个片段程序,找到纹 理的所使用的颜色通道。如果所使用的颜色通道的数量允许纹理以较小的纹 理格式被表示,则改变纹理格式并测量性能增益。对于每个可应用的纹理, 显示该性能增益、之前的和新的纹理格式的描述。

找到片段程序中的静态分支

【0176】对于包含基于常量的分支的每一个片段程序和对于通过常量的 该片段程序的每一个唯一的实例,建立片段程序的多个副本,例如每一个用 于每一个可能的控制路径。代替改变常量,而设置合适的新的片段程序并且 还将任意相关的常量集重定向到该片段程序。在一个实施例中,片段程序被 重新调度用于最佳指令排序。对于每一个可应用的片段程序,显示性能增益 和以其静态分支的常量以及新的片段程序。还提供输出新的片段程序的能 力。

来自线性渲染目标的混合的渲染目标

【0177】对于线性的、不是显示渲染目标的并且具有相关的纹理的每一 个渲染目标,使渲染目标在宽度和高度上取2的乘幂。将渲染目标改变为混 合类型并且测量性能增益用于显示。

来自平铺的渲染目标的混合的渲染目标

【0178】对于平铺的、不是显示渲染目标的并且具有相关的纹理的每一 个渲染目标,使渲染目标在宽度和高度上取2的乘幂。解平铺渲染目标的颜 色和深度缓冲器并且将渲染目标改变为混合类型并且测量性能增益用于显 示。

【0179】通过示例但并不进行限制,图28示出根据本发明的实施例的 一种单元处理器1000。在此例中,单元处理器1000包括主存储器1002、功 率处理器元件(PPE)1004、和多个协同处理器元件(SPE)1006。在此例 中,单元处理器1000包括单个PPE 1004和八个SPE 1006。在这样的配置中, 七个SPE 1006可被用作并行处理并且一个可以备用作在其他七个中的一个 发生故障时的备份。单元处理器可以可替换地包括多组PPE(PPE组)和多 组SPE(SPE组)。在这样的情况中,在组中的单元之间能够共享硬件资源。 然而,SPE和PPE必须表现为软件作为独立的元件。由此,本发明的实施例 不限于使用图示的配置。

【0180】主存储器1002典型地包括通用和非易失性存储装置,以及专 用的硬件寄存器或者阵列,用作诸如系统配置、数据传送同步、存储器映射 I/O、和I/O子系统的功能。在本发明的实施例中,信号处理程序1003可以 驻留在主存储器1002中。信号处理程序1003可以运行在PPE上。程序1003 可以被分出能够在SPE和/或PPE上执行的多个信号1009处理任务。

【0181】通过示例,PPE 1004可以是和高速缓存L1和L2相关联的64 位PowerPC处理器单元(PPU)。PPE 1004是通用处理单元,其能够存取系 统管理资源(例如,诸如存储器保护表)。硬件资源可以由PPE明确地映射 到所示的实际地址空间。从而,PPE能够通过使用合适的有效地址值来直接 寻址任何这些资源。PPE 1004的基本功能是对于单元处理器1000中的SPE 1006的任务的管理和分配。

【0182】尽管仅示出单个PPE,但诸如单元宽带引擎架构(CBEA)的 一些单元处理器实现,单元处理器1000可以具有组织到PPE组中的多个 PPE,其中可以存在多于一个。这些PPE分组可以共享对主存储器1002的 存取。此外,单元处理器1000可以包括两个或者多个分组SPE。SPE分组 也可以共享对主存储器1002的存取。这些配置属于本发明的范围。

【0183】每一个SPE 1006包括协同处理器单元(SPU)和其自身的本 地存储区域LS。本地存储LS可以包括存储器存储装置的一个或者多个单独 区域,每一个和特定的SPU相关联。每一个SPU可以被配置为仅执行来自 其自身相关的本地存储域内的指令(包括数据负载和数据保存操作)。在这 样的配置中,本地存储LS和系统1000的其他部分之间的数据传送可以通过 从内存流控制器(MFC)发出直接存储器存取(DMA)命令来执行以传送 数据到(单个SPE的)本地存储域或者从其传送。SPU相比于PPE 1004是 不很复杂的计算单元,在于他们不执行任意的系统管理功能。SPU通常具有 单个指令、多个数据(SIMD)能力并且典型地处理数据和初始化任意所需 的数据传送(经受PPE建立的存取特性)用来执行它们所分配的任务。SPU 的目的是使能需要更高的计算单元密度并且能够有效地使用所提供的指令 集的应用程序。PPE 1004管理的系统中的显著数量的SPE允许在广泛范围 的应用程序上的节省成本的处理。

【0184】每一个SPE 1006可以包括专用的存储器流控制器(MFC),存 储器流控制器包括能够保持和处理存储器保护和存取允许信息的相关的存 储器管理单元。MFC提供用于单元处理器的主存储装置和SPE的本地存储 装置之间的数据传送、保护和同步的基本方法。MFC命令描述所被执行的 传送。用于传送数据的命令有时称为MFC直接存储器存取(DMA)命令(或 者MFC DMA命令)。

【0185】每一个MFC可以同时支持多个DMA传送并且能够保持和处 理多个MFC命令。每一个MFC DMA数据传送命令请求可以包括本地存储 装置地址(LSA)和有效地址(EA)。本地存储装置地址可以直接寻址仅其 相关联的SPE的本地存储区域。有效地址可以具有更通用的应用程序,例如, 如果它们标记到真实的地址空间,其可以引用主存储装置,包括所有的SPE 本地存储区域。

【0186】为了便于SPE 1006之间和/或SPE 1006和PPE 1004之间通信, SPE 1006和PPE 1004可以包括依赖于信令事件的信号通知寄存器。PPE 1004 和SPE 1006可通过星型网络拓扑耦合在一起,其中,PPE 1004用于路由器 来发送消息给SPE 1006。可替换地,每一个SPE 1006和PPE 1004可以具有 称为邮箱的单向信号通知寄存器。SPE 1006能够使用邮箱来寄载操作系统 (OS)同步。

【0187】单元处理器1000可以包括输入/输出(I/O)功能1008,单元 处理器可以通过其将其他模块、处理器或者外围装置连接在一起。在一个例 子中,I/O 1008能够连接图形硬件引擎102(图1)。示例的商业可用的处理 器(尽管其它也可以使用)是实体合成器(RSX)。

【0188】此外,元件互连总线1010可以连接上面列出的多种部件。每 一个SPE和PPE能够通过总线接口单元BIU存取总线1010。单元处理器1000 也可以包括典型存在于处理器中的两个控制器:控制总线1010和主存储器 1002之间的数据流的存储器接口控制器MIC,和控制I/O 1008和总线1010 之间的数据流的总线接口控制器BIC。尽管对于不同的实现MIC、BIC、BIU 和总线1010的需求可以广泛变化,但本领域内的技术人员熟悉他们的功能 和电路,用于实现它们。

【0189】单元处理器1000还可以包括内部中断控制器IIC。IIC部件管 理提供给PPE的中断的优先权。IIC允许来自被处理的单元处理器1000的 其它部件的中断,而不使用主系统中断控制器。IIC可以被认为是第二级控 制器。主系统中断控制器可以处理从单元处理器外部发起的中断。

【0190】在本发明的实施例中,诸如上述的分数延迟的特定计算可以并 行使用PPE 1004和/或一个或者多个SPE 1006来执行。每一个分数延迟计算 可以被运行作为在其变得可用时不同的SPE 1006可采用的一个或者多个单 独的任务。

【0191】本发明可以使用其他计算机系统配置来实现,这些其他计算机 系统配置包括游戏控制台、游戏计算机或者计算装置、手持装置、微处理器 系统、基于微处理器或者可编程的消费电子设备、迷你计算机、大型计算机 等等。本发明也可以在分布式计算环境中实现,其中通过经由网络链接的远 程处理装置来执行任务。例如,也可以使用在线游戏系统和软件。

【0192】考虑到上述实施例,应当理解本发明可以使用涉及计算机系统 中存储的数据的多种计算机实现的操作。这些操作是需要对物理量进行物理 操纵的操作。通常,虽然不是必须的,这些物理量以电或磁信号的形式存在, 可以被存储、传输、组合、比较以及以其它方式进行操纵。进一步地,所进 行的操纵经常被(作为术语)称为诸如产生、识别、确定或比较等。

【0193】此处描述的构成本发明的部分的任一操作都是有用的机器操 作。本发明同样涉及用于执行这些操作的设备或装置。此设备可以根据特定 目的特别构建,诸如上述承载网络,或者可以是由存储在计算机中的计算机 程序可选地配置或者激活的通用计算机。更具体地,根据此处教导,可以将 编写的计算机程序用于不同的通用机器,或者更方便的可以构建更专用设备 来执行所需操作。

【0194】本发明还可以作为计算机可读代码被实施到计算机可读媒介 中。该计算机可读媒介是任何能够存储可以被计算机系统随后读取的数据的 数据存储装置。示例性的计算机可读媒介包括硬盘驱动器、附加式网络存储 装置(NAS)、只读存储器、随机存储器、基于闪存(FLASH)的存储器、 CD-ROM、CD-R、CD-RW、DVD、磁带和其它光学和非光学数据存储装置。 计算机可读媒介也可以分布于一个网络连接的计算机系统上,以使计算机可 读代码以分布式方式被存储和执行。

【0195】虽然为清晰理解的目的对前述本发明进行了一些详细描述,但 显然,可以在后附的权利要求的范围内进行一些变化和修改。因此,本发明 的实施例可以被认为是示意性的而不是限制性的,并且本发明不被在此给出 的细节所限制,而是可以在后附的权利要求的范围和其等同物内进行更改。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号