CN101675453B - 用于分析对于应用程序修改前命令改变的性能的图形命令管理工具和方法 - Google Patents
用于分析对于应用程序修改前命令改变的性能的图形命令管理工具和方法 Download PDFInfo
- Publication number
- CN101675453B CN101675453B CN2008800069762A CN200880006976A CN101675453B CN 101675453 B CN101675453 B CN 101675453B CN 2008800069762 A CN2008800069762 A CN 2008800069762A CN 200880006976 A CN200880006976 A CN 200880006976A CN 101675453 B CN101675453 B CN 101675453B
- Authority
- CN
- China
- Prior art keywords
- stacked
- impact damper
- frame
- change
- data
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/01—Input arrangements or combined input and output arrangements for interaction between user and computer
- G06F3/048—Interaction techniques based on graphical user interfaces [GUI]
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3604—Software analysis for verifying properties of programs
- G06F11/3612—Software analysis for verifying properties of programs by runtime analysis
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45504—Abstract machines for programme code execution, e.g. Java virtual machine [JVM], interpreters, emulators
- G06F9/45516—Runtime code conversion or optimisation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T1/00—General purpose image data processing
- G06T1/20—Processor architectures; Processor configuration, e.g. pipelining
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Human Computer Interaction (AREA)
- Debugging And Monitoring (AREA)
- Image Generation (AREA)
- User Interface Of Digital Computer (AREA)
- Processing Or Creating Images (AREA)
Abstract
本发明披露方法、系统、图形计算机界面和计算机可读介质来使得对于应用程序能够优化视频帧渲染特性。所述方法包括渲染视频帧并且捕获表示视频帧的渲染的入栈缓冲器设置。所述方法还包括修改入栈缓冲器设置的特征而旁路该应用程序,并且使用修改的特征来重新渲染该帧。所述方法还使得能够比较渲染和重新渲染,并且呈现比较结果。提供图形用户界面使得能够实现该功能性而不需要修改应用程序的代码,从而意识到根据性能渲染和处理效率能够呈现何种对应用程序的可能的改变。
Description
背景技术
当前的开发人员必须通过艰苦的过程来优化和调试游戏应用程序。开发人员必须修改应用程序代码并且随后重新运行该应用程序代码,这将给游戏开发过程增加大量的时间。此外,当前上述过程使得开发人员不能集中于应用程序的特定的渲染特征(aspect),用来研究优化。
因此,开发人员被降级为尝试和错误调试过程与优化过程。
考虑到这些问题,开发人员需要通过智能优化算法和分析技巧来快速并且有效地优化图形处理器的使用的能力。此外,开发人员要求有效定位和解决与图形相关的程序缺陷或者性能的低效率所必须的信息。
发明内容
广义而言,本发明通过提供使得开发人员能够有效优化应用程序的渲染特征的方法和设备来满足这些需求。应该意识到,本发明能够以多种方式实现,包括作为方法、系统、计算机可读介质或者装置。以下描述本发明的多个独创性实施例。
在一个实施例中,提供用于对在应用程序执行期间所产生的多帧视频序列的帧进行性能分析的系统。所述系统包括被配置来执行所述应用程序的硬件引擎和被配置来从所述硬件引擎获取入栈缓冲器数据的库捕获模块,其中,所述入栈缓冲器数据用于渲染所述多帧视频序列的帧。所述系统还包括用于呈现入栈缓冲器数据的内容的交互显示的图形用户界面。所述内容定义多个命令和与所述多个命令的每一个相关联的数据。所述图形用户界面使得访问能够对入栈缓冲器的内容进行改变。所述系统还包括使得能够重新执行通过图形用户界面进行任何改变的入栈缓冲器数据的重放模块。图形用户界面提供量化对入栈缓冲器做出改变时入栈缓冲器的执行中的差异的多个性能分析测量。
在该实施例的一个方面中,所述图形用户界面提供访问来对入栈缓冲器数据进行改变而不需要执行对应用程序的改变。在另一方面中,图形用户界面提供多个菜单和窗口用于表示多个性能分析测量并用于选择多个菜单和窗口的特定一个来使得能够改变入栈缓冲器数据的内容,并且随后定量查看结果以及可视化地显示性能特征。
在另一个实施例中,提供用于优化应用程序的视频帧渲染特性的方法。所述方法包括渲染视频帧并且捕获表示视频帧的渲染的入栈缓冲器设置。所述方法还包括修改入栈缓冲器设置的特征而旁路该应用程序,并且使用修改的特征来重新渲染该帧。所述方法还使得能够比较渲染和重新渲染,并且呈现比较结果。
在又一个实施例中,提供用于优化视频帧渲染的图形用户界面(GUI)。所述GUI包括示出入栈缓冲器的内容的显示区域和示出根据入栈缓冲器的内容渲染视频帧的图形结果的性能显示区域。所述GUI还包括入栈缓冲器内容修改区域。
从下面结合附图以举例方式对本发明的原理进行说明的详细描述,本发明的其它方面和优点变得显而易见。
附图说明
通过参考以下结合附图的描述,可以最好理解本发明及其它优点。
图1示出根据本发明的一个实施例的具有图形硬件引擎的游戏计算控制台,其定义了该游戏计算控制台的各种硬件和软件单元的构成。
图2示出根据本发明的一个实施例的其中游戏计算控制台被用来执行图形硬件引擎的处理和GCM工具的可替代实施例。
图3示出根据本发明的一个实施例的和GCM工具相连接的图形引擎的更详细图。
图4示出根据本发明的一个实施例的定义可以使用GCM工具执行的操作的处理流程图。
图5是示出根据本发明的一个实施例的可以通过入栈缓冲器被捕获的各种资源的简化示意图。
图6是示出根据本发明的一个实施例的提供来自GCM工具的所捕获的信息的图形用户界面(GUI)窗口的简化示意图。
图7是示出进一步定义图6的绘制/清除窗口的图形用户界面的简化示意图。
图8是图7的窗口的放大的视图。
图9是示出根据本发明的一个实施例的原始视图窗口302与其内容的简化示意图。
图10示出根据本发明的一个实施例的概述所有的警告和错误的问题窗口。
图11示出根据本发明的一个实施例的入栈缓冲器的总的屏幕。
图12示出根据本发明的一个实施例的包括所有状态命令列表和对于每一个状态命令的冗余百分比的详细冗余窗口。
图13A-B是具有和图6的渲染状态窗口相关的其他信息的简化示意图。
图14A-D示出根据本发明的一个实施例的入栈缓冲器使用的纹理。
图15示出根据本发明的一个实施例的提供纹理的存储器视图的存储器转储窗口。
图16示出根据本发明的一个实施例的入栈缓冲器所使用的顶点阵列。
图17示出根据本发明的一个实施例的入栈缓冲器所使用的索引阵列。
图18是示出根据本发明的一个实施例的片段程序窗口的简化示意图。
图19A示出根据本发明的一个实施例的列出入栈缓冲器中使用的所有程序并提供解释的转储的顶点程序窗口。
图19B示出根据本发明的一个实施例的顶点程序常量窗。
图20A和20B示出根据本发明的一个实施例的提供GPU中的寄存器的状态的详细视图的GPU寄存器窗。
图21A到21K进一步定义根据本发明的一个实施例的渲染目标窗。
图22示出根据本发明的一个实施例的开发人员在其中选择成形器(profiler)特征的菜单的简化示意图。
图23A和图23B示出根据本发明的一个实施例的成形的示例图形示意图。
图24A和图24B示出根据本发明的一个实施例的定向到可用于分析的性能计数器的图形用户界面。
图25A到25D示出根据本发明的一个实施例的用于优化帧的渲染的剔除过程。
图26A到26O示出根据本发明的一个实施例的当应用多个“假设”(what-if)性能优化时开发人员可以通过其进行的事件的多个序列。
图27A-E示出根据本发明的一个实施例的可以被称为试验的性能优化,该试验可以采用一个或者多个“假设”或者性能优化来提供对于被渲染的游戏或者应用程序的最佳设置的推荐。
图28提供可以用来渲染图形的示例硬件架构,尽管本发明不限于任意类型或者品牌的架构。
具体实施方式
本发明披露一种图形命令管理(GCM)工具,使得能够访问由图形硬件所产生的入栈缓冲器数据用于渲染帧。GCM工具可以被限定为系统、方法并且被嵌入到计算机可读介质。广义而言,GCM工具包括使得入栈缓冲器数据对于特定帧或一些帧被捕获、以一些方式修改,并且随后重新提交到图形硬件用于重新渲染的功能性,来确定是何种性能影响,而不需要修改导致入栈缓冲器数据产生的应用程序的代码。
在以下描述中,陈述多个特定细节用于提供对本发明的全面理解。然而,对于本领域内的技术人员应该清楚的是无需这些特定细节的一些或者全部可以实现本发明。在其它实例中,为了不会不必要地混淆本发明,公知的处理步骤没有详细描述。
为了清楚起见,术语“入栈缓冲器”(push buffer)定义通常用在计算机架构中的缓冲器结构并且可以被称为“命令缓冲器”。另外,术语“帧”是指多帧动态视频序列的多个帧的任意给定帧(或者帧的组),其是由图形硬件在执行应用程序期间产生的。在一个例子中,多个帧是在硬件上执行视频游戏应用程序期间所产生的那些帧,诸如视频游戏控制台所提供的或者标准个人计算机所提供的帧。帧格式可以采用任意数量的形式,无论其是否是高分辨率。在高分辨率帧中,帧内容的分辨率可以是任意数量的格式,例如并且不限于1080i/p的HDTV格式或者其它高分辨率视频标准。该应用程序如此处讨论一样关注游戏类型的应用程序,但应该理解这些技术同样也可以应用到响应于入栈缓冲器数据而渲染数据的任意应用程序。
GCM工具能够捕获在应用程序的一个帧期间所使用的所有图形资源。该工具能够随后在捕获的帧上执行性能分析,修改入栈缓冲器和其它图形资源来模仿如果游戏应用程序或者游戏引擎(例如中间件)中产生显著变化时它们会是什么样,并且重新测量该性能。广义上,GCM工具能够定义如果对于游戏应用程序或者游戏引擎做出代码改变将会增加(或者影响)多少性能,而无需对游戏应用程序或者游戏引擎的代码实际做出麻烦的改变。作为例子,对游戏应用程序和/或游戏引擎的一些改变对于工程人员来说可能需要数天、数星期或者数月来进行修改,并且做出这样的改变还期望测试是否能够获得了性能增加。
根据本发明的方面,GCM工具使得能够对入栈缓冲器数据直接做出改变,而不需要改变应用程序或者引擎代码来分析是否获得性能上的益处,并且随后定义能够被设计到应用程序和/或引擎的推荐的代码变化,从而在耗费时间和昂贵的资源来设计对实际应用程序的变化之前,预先知道如所预定的和所验证的所期望的益处。
以下的应用程序将被分为两部分,即(I)中的系统综述,和(II)中的功能屏幕描述。
I、GCM工具结构的系统综述
图1示出具有图形硬件引擎102的游戏计算控制台100,定义游戏计算控制台100的各种硬件和软件单元的构成。图形硬件引擎102配备有处理入栈缓冲器104和渲染帧106。为了说明的目的,所示多个入栈缓冲器104和所产生的帧106相关联,该帧106随着处理应用程序的不同部分时(例如,交互游戏播放期间)被渲染。还示出和游戏计算控制台100通信的计算机工作站108。
在本发明的一个实施例中,计算机工作站108(例如,个人计算机(PC))已经在其上载入图形命令管理(GCM)工具110(例如,实用程序),其被设计为访问由图形硬件引擎102处理的特定入栈缓冲器104,用来渲染特定帧106。同样注意到,三维(3D)渲染硬件由入栈缓冲器(或者命令缓冲器)来驱动,其是包括诸如纹理、顶点数据等等控制渲染状态和指定资源位置的一系列命令的线性缓冲器。GCM工具110起到如由三个主要部件(例如,图3中所示:GUI 130、库捕获模块132和重放模块134)限定的实用工具的效用。在捕获特定入栈缓冲器104a时,GCM工具110能够对入栈缓冲器数据执行修改,以随后将修改的入栈缓冲器数据重新提交到图形硬件引擎102,以用于重新渲染由所修改的入栈缓冲器产生的帧。
GCM工具110随后能够监控源自被重新提交到图形硬件引擎102的所修改的入栈缓冲器数据的性能影响(增加或者降低)。无需实际修改或者请求产生要被修改的入栈缓冲器数据的应用程序,能够进行所修改的入栈缓冲器数据的性能特征的分析。以下参考图3来描述关于GCM工具110的更多的细节。
图2示出其中游戏计算控制台110被用来执行图形硬件引擎102和GCM工具110的处理的可替代实施例。在此实施例中,不需要具有和游戏计算控制台110通信的单独的计算机工作台108,来使得能够访问入栈缓冲器数据104,用于执行对入栈缓冲器数据的变化的修改、分析和验证。
图3示出根据本发明的一个实施例的和GCM工具110相连接的图形引擎102的更详细图。所示应用程序120和被配置为处理嵌入到应用程序120中的代码的图形硬件引擎102相连接。应该理解应用程序120可以包括应用程序代码和任意中间件或者有时被称为游戏引擎的应用程序引擎。实现应用程序的代码和游戏引擎被称为应用程序120。
应用程序120和函数调用122集成在一起,被设计为在图形硬件引擎102执行应用程序的特定点触发入栈缓冲器数据的捕获。在一个实施例中,函数调用122可以被定义为能够拦截移入图形硬件引擎102的入栈缓冲器的命令列表并且之后转发到图形命令管理(GCM)工具110的库捕获模块132的heartbeat函数调用。
在一个例子中,函数调用122可以打开通信端口,用来以由库捕获模块132接收的数据阵列的形式通信捕获的命令列表,其中所捕获的帧的数据的原始阵列由库捕获模块132在操作152中接收,随后在操作154中处理。所处理的数据的原始阵列随后被保存在库156中,来定义响应函数调用而捕获的当前入栈缓冲器内容。库(例如一种类型的数据库)因此将保持入栈缓冲器的内容,而图形硬件引擎102将与来自入栈缓冲器104a的帧106a的渲染相关联的性能统计传送和通信到GCM工具110。
这些性能特征将被发送到和GCM工具110相关联的重放模块134的性能监控器160。重放模块134的性能模块160因此将性能信息通信到GCM工具图形用户界面(GUI)130。为了从开始初始化该过程,用户能够使用GCM GUI 130来选择在136中将触发入栈缓冲器的捕获的命令(来自菜单或者GUI按钮),其随后指导函数调用来捕获特定入栈缓冲器或者多个入栈缓冲器,使得特定帧106a能够基于入栈缓冲器的内容来被分析性能。
在GCM GUI 130中,显示138使得能够以列表和图形的形式来显示入栈缓冲器的内容,使得调试工程人员能够快速识别和理解所捕获的特定入栈缓冲器的结构和内容。GUI 130还将提供修改入栈缓冲器140的内容的能力,以使得能够移除、插入、修改和移动所捕获的入栈缓冲器结构中的特定的数据。通过修改入栈缓冲器的内容来使之成为可能的特定类型的处理可以包括“假设”处理142的处理。以下更加详细描述假设处理。
附加的处理可以包括试验运行144使得能够在所捕获的入栈缓冲器的特定内容(例如,命令和数据)上执行优化。GCM GUI 130还包括性能显示,使得能够分析由性能监控器160提供到GCM GUI 130的特定性能参数。
性能显示可以包括多个菜单、窗口、图、表和比较工具,使得能够在处于其最初状态的入栈缓冲器的内容和通过GCM GUI 130的140已经执行任何修改之后的入栈缓冲器的内容之间进行比较。这些性能显示和界面的例子可以包括通过改变入栈缓冲器的特定内容并且随后比较所获取的性能优势或者对入栈缓冲器数据做出特定改变而经受的性能影响来执行成形的功能性。成形148从而使得能够示出和分析图形和列表的结果,使得之后做出对应用程序改变的推荐。
如果期望对入栈缓冲器的改变留作一个新的参考点,性能显示能够提供给用户提交入栈缓冲器数据的能力,使得对入栈缓冲器的当前改变能够被视为对入栈缓冲器内容做出的附加的改变的参考点。提交按钮150从而是对于使用图形用户界面130的性能显示的编程人员和调试人员的选项。同样示出作为GCM工具110的一部分的库捕获模块132。
如上记录的,在152中接收对于所捕获的帧的数据的原始阵列并且随后在154中处理,使得数据能够被保存在库156中。库将以GUI 130能够访问和索引的方式来保持入栈缓冲器的结构和数据。GUI 130因此具有库的结构的知识,使得菜单、窗口、图形、表和比较能够快速由GUI产生并且显示用于用户信息、比较和分析。
如果用户期望通过使用GUI 130修改入栈缓冲器的内容来做出改变,则GUI 130将与重放模块134通信,使得对入栈缓冲器的改变能够被重新提交到图形硬件引擎102,来定义因此将产生所更新的渲染的帧106a’的新的入栈缓冲器104a’。在使用所更新的入栈缓冲器数据重新渲染帧的期间,图形硬件引擎102还将提供与渲染所更新的入栈缓冲器数据相关的性能数据到性能监控器160。性能监控器160因此将信息通信到GUI 130使得用户能够在GUI 130的146中执行性能显示和分析。
图4示出根据本发明的一个实施例的定义可以使用GCM工具110执行的操作的处理流程图200。如上所提及的,图形硬件引擎102被设计为处理入栈缓冲器数据和渲染对于应用程序120的帧。应用程序120包括简单地增加到应用程序代码并且和每一帧相关联的函数调用122,使得能够具有对每一个渲染的帧的入栈缓冲器的访问,使得可以捕获由图形硬件引擎102渲染的每一个帧。
在一个实施例中,GCM工具GUI 130被设计为在特定点及时触发入栈缓冲器(和帧所使用的资源)的捕获,使得选择随后将渲染特定帧的特定的入栈缓冲器。帧的选择可通过GUI 130由用户选择来初始化。在此例中,特定的入栈缓冲器是入栈缓冲器104a,并且所渲染的帧是帧106a。嵌入在应用程序中的函数调用因此将使得入栈缓冲器104a的内容对于帧106a被捕获,并且作为副本发送到图形命令管理工具110。通过发送入栈缓冲器内容104a的副本到图形命令管理工具110的箭头来示出该传送。
在操作202中,捕获入栈缓冲器的内容。一旦捕获,该过程将进行到操作204,其中分析所捕获的入栈缓冲器数据的性能特征并且基于该分析,在操作206中可以修改所捕获的入栈缓冲器的至少一个特征。当然,可以发生对多个特征的超过一个的修改,但是例如假设仅有一个特征被改变,并且随后重新提交具有所修改的特征的入栈缓冲器数据到图形硬件引擎102用于在操作208中重新渲染。
在操作210中,对于在入栈缓冲器中重新渲染具有修改的特征的帧,分析性能特征。该方法随后进行到操作212,其中期望使用修改的特征比较入栈缓冲器中不具有修改的特征来做出决定,决定是否在帧的渲染中存在性能影响(益处或者不利)。如上记录的,如参考图3所描述的,对于GUI 130的146中的分析,可使用多个性能显示来分析这些性能特征。
在操作214中,确定入栈缓冲器的修改的特征是否应该被提交使得用作参考的入栈缓冲器是具有提交的改变的入栈缓冲器。如果是,该方法进行到操作216,其中,在对入栈缓冲器的特征做出附加修改时新的入栈缓冲器内容成为参考点,用于比较性能影响。如果否,提交修改的特征,则操作进行到操作218,其中确定是否存在期望来修改入栈缓冲器的另一个特征。
如果存在,方法返回到操作206,其中可以继续进行处理直到完成分析。如果不存在另外的特征被修改并且所有其他完全满足测试者,则方法可以随后进行到操作220,其中可以产生推荐的修改,使得可以对产生入栈缓冲器数据的应用程序代码进行改变,并且随后在非应用程序改变入栈缓冲器数据分析期间将产生期望的所标识的性能益处。该信息随后可被转发到应用程序开发人员240,用于之后整合到应用程序代码120中。
关于此处描述的实施例,GCM工具110访问低水平格式的入栈缓冲器。在此原始状态中,接收该格式作为数据列表,例如以U-32格式,并且随后可以被格式化以使得能够查看、改变和随后重新格式化回到原始状态用于重新提交到图形硬件引擎102。因此,通过GCM工具110,提供无需使用外部渲染API或者驱动层而重写改变的入栈缓冲器的能力。可以修改入栈缓冲器,用于移除、插入或者修改命令,并且其它资源也可以被移动、移除或者修改。在修改之后,所修改的入栈缓冲器和资源被发送回到图形硬件,其中可以采用性能测量来评估修改的效果。此外,能够以自动方式反复进行修改和性能测量,以执行试验或者更复杂的性能分析。
通过由GCM工具110使能的功能性提供多个唯一的优点。一些示例优点包括允许所捕获的应用程序入栈缓冲器与最初的应用程序无关地被操纵,并且因此GCM工具110消除反复修改和编写应用程序代码的单调性,以概述其结果并且寻求性能优化。甚至诸如修改单个渲染状态的简单应用程序的改变经常需要显著的反复时间来重新编译应用程序。
除了这样的简单的替换,GCM工具110可以应用多个非实时技术,用于容易地做出可能要求大量编程时间或者复杂数据修改的投入来在应用程序中测试的性能测量。首先,可以应用自动反复进行来测试一组参数的所有可能状态,用来确定对于所捕获的入栈缓冲器的最佳性能设置,其中手工反复将会是极其耗时的。第二,可以使用相对慢的强力算法或者使用仅对单个帧(例如,由于视图依赖的点)有效的优化来处理入栈缓冲器和资源。
这允许开发人员从通常要求大量编程时间或者资源数据修改的投入的应用程序优化来快速确定可能的性能增益,从而允许他们对其优化努力能够被最好关注做出有信息根据的决策。
可替代地,由于最初的应用程序没有被包括在这些后来的性能试验中,从而不需要访问最初的源代码或者数据就可以容易传送和分析所捕获的数据,使得支持编程人员容易地协助开发团队分析他们的应用程序。
在另一个实施例中,代替要求函数调用代码被集成在应用程序中,本发明的一个方面允许和图形硬件引擎102相连接的(例如,作为单独的硬件逻辑)或者与之集成在一起的捕获触发硬件逻辑的集成。捕获触发硬件逻辑能够接收指令来使得以函数调用122集成在应用程序120中的相同方式或者类似方式来捕获入栈缓冲器数据。通过提供捕获触发硬件逻辑,GCM工具110仅需要和图形硬件引擎102的逻辑(或者和102连接的硬件)相连接,来触发入栈缓冲器数据的捕获,其被发送到库捕获模块132。利用捕获触发硬件逻辑的优点在于编程人员不需要增加任何代码到他们的应用程序中,并且因此与GCM工具110的接口对于应用程序120的编程人员而言是无缝和透明的。尽管在此实施例中利用集成的函数调用122,但是用于启用函数调用的代码是很小的并且能够以很小的或者不用编程开销而容易地插入。
II、GCM工具的屏幕的功能定义
以下描述的实施例提供开发人员在游戏开发过程期间可以使用的工具或者实用程序的其它细节。参考开发人员能够用来和工具界面连接的多种屏幕截图来进一步定义通过GCM工具使能的函数。GCM工具包括链接在游戏和应用程序中的库。在游戏一侧,一旦开发人员已经链接到GCM工具库中,就会存在两个调用,一个是对于GCM重放初始化,一个是在对gcmSetFlip或者类似函数的每次调用之后的GCM重放。由于与这两个调用关联的开销接近于零,该调用能够在任何时间被舍去。如上所描述的,无论任何时候开发人员想要使用gcmReplay工具,开发人员将开始应用程序并且选择捕获。通过在应用程序中选择捕获,捕获要渲染的图像数据的帧的入栈缓冲器内容。捕获是指在渲染被发送到应用程序期间获取所使用的所有资源中的内容。这些资源可以包括纹理、顶点阵列、索引表和渲染数据帧所要求的其它资源。在一个实施例中,可以包括之前的帧的缓冲器。例如,可以使用所应用的一些种类的模糊效应来包括之前帧的缓冲器的内容。应该注意到,在渲染图像显示期间所使用的所有资源和捕获的数据可以容易地超过100兆字节。
本领域内的技术人员将会理解根据游戏,捕获过程可以变得复杂。例如,当图形处理单元正渲染帧,另一个处理器可以正修改入栈缓冲器并且建立新的资源,例如诸如对于PLAYSTATIONTM3游戏控制台的CELL处理器。因此,此处描述的实施例通过单步执行图形处理单元来捕获入栈缓冲器,用来捕获用于渲染图像数据帧的入栈缓冲器的全部内容。以不引人注目的方式即对于应用程序透明的方式执行命令缓冲器中所改变的信息的捕获和GPU的单步执行。通过使用跳到自身指令来替换入栈缓冲器中的指令来实现单步执行,从而阻止在该指令前的GPU执行。通过顺序通过跳到自身来替换以下指令并且随后恢复最初的指令,在每次指令之后能够阻止GPU的执行,允许由每一指令使用的所有资源的当前状态被收集。由于图形处理单元的单步执行,帧渲染期间入栈缓冲器的内容是否被修改或者改写变得不相关。应该注意,本实施例利用图形处理单元,用来代替仿真。此外,所捕获的数据提供比来自于实时GPU性能分析的数据的更详细的分析。应该理解虽然本实施例可以是专用的游戏控制台,但是这意味着示例,本实施例能够应用到用于渲染图像的任意游戏控制台。
图5是示出根据本发明的一个实施例的可以通过入栈缓冲器被捕获的多个资源的简化示意图。入栈缓冲器104包括表示顶点和片段程序的数据、渲染目标、顶点和索引缓冲器、纹理等等。这些资源的每一个通过GCM工具捕获,使得开发人员可以之后操纵数据,以优化开发过程。如上所提及,此处描述的实施例即使游戏渲染过程可能很复杂也能够捕获数据。在一个实施例中,当图形处理单元正渲染帧时,诸如CELL处理器的另一个处理器可以修改入栈缓冲器并建立新的资源。
典型地,CELL处理器及时为图形处理单元建立顶点阵列或者索引表。因此,顶点阵列不存在于帧的开始处并且在帧的早期的部分期间建立,使得GPU能够在帧的后期部分中使用该阵列。此外,捕获过程必须能够捕获可以在帧的进程期间重写的数据。例如,如果数据被写到环形缓冲器中,则在渲染帧的进程中,后期特征的数据重写早期特征的数据。为了捕获所有的数据,此处描述的实施例单步执行图形处理单元用于捕获合适的数据。
在一个实施例中,入栈缓冲器的内容和之前步骤的内容相比较并且捕获任意新的数据。因此,在一个方面中,GCM工具关注不能实时执行的能力。应该理解存在能够使用捕获的数据完成的多个不同项目。在一个实施例中,开发人员能够查看和分析数据。该数据也能够保存到硬盘驱动器或者其他的存储装置并且发送给另一个开发人员用于检查。在另一个实施例中,开发人员重播该帧并且如此处所描写的进行被成形。
当该帧重播时,该帧可以下载到GCM工具并且在执行渲染分析时重新渲染。入栈缓冲器和捕获的资源可以以多种方式修改,使得能够分析修改下的性能。通过下面进一步详细描述的“假设”特征可以修改入栈缓冲器的单个特征。此外,入栈缓冲器的多个特征可以以组织化的方式修改来通过以下更详细描述的“试验”提供对于多个特征的优化的操作条件和序列的分析。
图6是示出根据本发明的一个实施例的提供来自GCM工具的所捕获的信息的图形用户界面(GUI)窗口的简化示意图。图6的图形用户界面包括包含渲染调用的绘制/清除窗300、示出入栈缓冲器内容的原始视图窗302、渲染目标窗304、输出窗306、入栈缓冲器综述窗308和渲染状态窗312。以下参考图7-25D进一步描述通过GCM工具提出的附加的示例图形用户界面的细节。
如上所提及,通过用户在其中选择/触发捕获按钮的图形用户界面来实现数据的捕获。当然,通过此处描述的实施例可以捕获渲染过程的每一帧。但是,能够定制该捕获,使得可以捕获替代帧或者每第n个帧,其中,n是整数。
应该理解,在每一帧渲染或者任意其它指定频率插入应用程序中的调用函数将触发通过单步执行GPU的入栈缓冲器内容的捕获,以使得能够产生图6的图形用户界面。应该进一步理解,开发人员可以增加可选的注释到调用函数中以进一步指定被渲染的应用程序的特定特征用于方便调试过程。图6是一个示例性配置并且可以按期望进行修改。例如,如果用户期望将图7-25D中所示的任意GUI合并到图6中,这可以实现。
图7是示出进一步定义图6的绘制/清除窗口的图形用户界面的简化示意图。绘制/清除窗口300列出所有的绘制上下文,并且可以被称为绘制上下文视图。应该理解对于帧的绘制可存在几千种清除和绘制操作。通过绘制/清除窗300,提供入栈缓冲器导航的基本方法。应该理解在绘制清除窗300中捕获的绘制上下文表示绘制/清除命令和它们相关的建立空间。通过选择窗300的特定绘制上下文,绘制上下文窗成为展开形式,如图8的绘制上下文窗300a所示。
本领域内的技术人员可以理解通过双击特定的绘制上下文或者单击位于窗300的左手列中的展开按钮,能够展开图7的绘制上下文窗300。窗300a的展开示出用于建立入栈缓冲器的单个libgcm调用。此处,开发人员能够查看是否存在期望的调用,用于特定帧渲染过程。
在一个实施例中,可以查看跟随着渲染三角形的实际命令的诸如被设定的深度函数的多个GPU状态。因此,在图8的窗300a中,展开绘制上下文来查看最初的GCM API调用。此外,源级反汇编包括可以引用参数名称和常量名称的注释的自变量。此外,用户指定的入栈缓冲器注释可以被示出以进一步协助优化过程。在一个实施例中,可以使用视觉技术来突出冗余调用。这些冗余调用可以用不同于图300a的显示的剩余部分的颜色来突出显示。
应该尽可能避免冗余调用,其中,使用同样的输入值来调用同样的函数。本领域内的技术人员将会理解冗余设置GPU寄存器可对性能产生显著的负面影响。为了实现冗余命令的移除或者突出,函数可以检查记录每一寄存器值的入栈缓冲器,因为入栈缓冲器设置该值。当遇到的命令其寄存器值被设置为等于寄存器的之前的值,则从入栈缓冲器移除该命令。因此,对于冗余调用可以评估绘制命令、清除、顶点指令、顶点常量、片段程序常量和其它命令的设置,其中,使用同样的输入值调用同样的函数。应该注意libgcm函数cellGcmSetMarker可以被用来将文本注释插入到入栈缓冲器中,其在图8的窗300a中显示。
图9是示出根据本发明的一个实施例的原始视图窗口302与其内容的简化示意图。在窗302中主要示出入栈缓冲器的解释的转储。在窗302中看到API调用设置的准确的硬件寄存器值。原始视图窗302示出全部入栈缓冲器分解、寄存器序列和常数以及任意用户指定的注释。在一个实施例中,如果捕获具有这里注释的任意错误,则错误能够在窗302中被可视地突出显示。图10的窗306的问题视图概括所有的警告和错误。
在一个实施例中,通过在问题上单击来选择其中一个问题项,开发人员将被引导到不合规则的绘制上下文和原始分解。图11中示出根据本发明的一个实施例的入栈缓冲器综述屏幕308。入栈缓冲器综述屏幕308示出不同类型的命令占用了多少个入栈缓冲器。不同类型的命令包括设置纹理参数、渲染目标参数、顶点程序等的命令。如图11中所示,顶点程序常量占用入栈缓冲器的大部分空间,即41408字节或者55%。此外,应该理解在顶点程序常量中存在大量的冗余。如图11中所示,移除冗余能够将顶点程序常量的大小降到29932字节的数据。通过选择图11的窗308的详细的冗余标签,呈现详细的冗余窗310。
图12的详细冗余窗口310包括所有状态命令和对于每一个状态命令的冗余的百分比的列表。任意显著冗余状态可以被突出或者以一定方式可视地放大,来提醒开发人员为了最佳使用缓冲器而应该裁剪冗余状态。如图12中所示,阿尔法测试使能被设置超过200次,其中99%冗余。本领域内的技术人员理解冗余调用能够轻易地给每一帧的渲染增加几微秒。因此,图11和图12的入栈缓冲器综述分解了入栈缓冲器并且允许内容分类,例如通过大小。
图13A是进一步示出图6的渲染状态窗口312的简化示意图。渲染状态窗312示出当前所选择的绘制上下文参考的所有资源。在渲染状态窗312中,示出已经被设置用于该渲染调用的顶点阵列、片段程序、纹理、渲染目标等等。应该理解由于特定资源通过之前的绘制上下文已经设定,例如片段程序已经在五个绘制上下文之前被指定,通过简单地查看用于绘制的libgcm调用不能获取该信息。选择资源将开发人员推向提供进一步细节的合适的资源窗。如在窗312的底部所描述的,存在多个标签,其定义了通过下图进一步解释的图形界面。
图13B是示出根据本发明的一个实施例的说明对于每一调用已经设定何种GPU状态的杂项状态窗314的简化示意图。例如,在窗314中,已经启用颜色写并且停用阿尔法混合。图14A示出根据本发明的一个实施例的纹理窗316。纹理窗316在窗316的左手列中列出所有的对于帧由入栈缓冲器当前使用的纹理。对于每一纹理,显示诸如压缩格式、维度、总的mip水平、大小等等的特性。
当然,纹理窗316中可以包括附加的纹理状态属性。附加地,能够单独查看对于每一纹理的每个mip水平,以确保mip看上去正确。在图14B中,示出纹理窗316的较小mip水平。在图14C中,像素工具提示使得开发人员能够检查用于阴影计算的盒子317中的纹理的像素值,诸如法线贴图(normal maps)。图14D示出纹理窗316,其中下拉列表指示使用该纹理的绘制上下文。
图15的存储器转储窗318提供纹理的存储器视图,其用于调试使用此纹理的着色(shader)。在一个实施例中,纹理能够被输出为BMP文件,当该纹理由诸如CELL处理器的处理器程序性产生时其可以用于调试。图16和17分别示出窗口320和322。在图16中,窗320中示出入栈缓冲器所使用的顶点阵列。对于图17,在窗322中示出入栈缓冲器所使用的索引阵列。
图18是示出根据本发明的一个实施例的片段程序窗口324的简化示意图。片段程序窗324列出入栈缓冲器所使用的所有片段程序,并且提供当前绘制上下文所使用的片段着色程序的解释转储。应该理解与顶点着色程序不同,片段着色程序所使用的常量嵌入在程序自身中,使得在绘制对象之前典型地设置常量。这就是,取决于所讨论的特定绘制上下文,片段着色程序的嵌入的常量改变。片段程序窗324显示对于当前的绘制上下文的合适的常量。
图19A示出根据本发明的一个实施例的列出入栈缓冲器中使用的所有程序并提供解释的转储的顶点程序窗口326。顶点程序窗326还示出哪个指令是双重发布的并且哪个命令具有依赖性暂停。在一个实施例中,这些暂停可以被可视地突出。顶点程序窗326列出当前绘制上下文使用的每一个顶点程序和诸如输入、输出、临时寄存器等的属性。
图19B示出根据本发明的一个实施例的顶点程序上下文窗327。顶点程序上下文窗327示出当前绘制上下文所使用的顶点常量。该常量可以被可视地突出,其中颜色指示常量的特定状态。例如,在一个实施例中,可以使用不同的颜色来指示常量是否新修改、从之前的帧继承或者冗余,从而为开发人员提供哪里存在优化机会的指示。
图20A和20B示出根据本发明的一个实施例的提供GPU中的寄存器的状态的详细视图的GPU寄存器窗。图20A示出窗328,其提供简短模式显示,列出由当前所选择的绘制上下文改变的所有寄存器。图20B示出窗330,其列出所有的寄存器。在一个实施例中,显示被颜色编码,使得特定颜色可以指示由当前绘制上下文设定其值,并且如果该值是另一个颜色,则该值由之前绘制上下文来设置。例如,蓝色值可以指示该值由当前绘制上下文设定,而绿颜色指示该值由之前的绘制上下文设定。
图21A到21K根据本发明的一个实施例进一步示出渲染目标窗304。渲染目标窗304列出帧中使用的所有渲染目标,突出当前所选择的绘制上下文中实际使用的渲染目标。例如,图21B示出深度缓冲器渲染目标的视图。大体上,渲染目标窗304使得开发人员唾手可得工具内部分析的结果。例如,在一个实施例中,因为对象仅写到该缓冲器,所以可以突出该阴影图。因此,能够以多种方式检查捕获,并且捕获能够被保存并发送给其他人用于复审。应该理解,游戏控制台不需要复审发送给另一个开发人员的数据。然而,游戏控制台与应用程序挂钩将提供能够与再捕获一起进行的附加的项目。例如,在渲染目标窗304中,通过选择刷新按钮,开发人员能够在当前绘制调用之后查看渲染目标的状态。大体上,通过选择绘制上下文并且随后刷新,开发人员能够观察图像被一片接一片渲染,如图21C到21H中所示。
在此实施例中,例如,开发人员能够确定哪个绘制调用导致最终图像中的奇怪的像素。此外,开发人员能够选择他们是否希望看到多种模式中的渲染目标,诸如突出、过分描绘或者接线框。当开发人员在图像上移动光标时,在任何像素的准确的RGB和像素位置值允许开发人员记录像素特定的程序缺陷,如图21J和21I中所描述的。如上所提及,这些图像可以被保存为BMP文件用于之后的检查。渲染目标窗304使得开发人员能够确定绘制上下文要写什么到渲染目标;渲染目标是否被混淆为纹理;渲染目标是否被设定用于双倍速度渲染;渲染目标是否被建立用于早期深度优化等等。
在渲染目标刷新期间,入栈缓冲器被传送到GCM工具并且被增加到当前所选择的绘制上下文。因此,渲染过程是单步执行的,并且可以及时在前进和后退的情况下进行。图21K示出使得能够输出渲染目标窗数据的界面。
除了查看每一资源之外,开发人员还能够通过GCM工具进行各种形式的性能分析。典型地,开发人员能够开始使用通过GCM工具提供的子单元使用特征。图22示出根据本发明的一个实施例的开发人员在其中选择成形器(profiler)特征的菜单的简化示意图。成形器特征中的子单元利用特征提供能够导致瓶颈的每个绘制上下文中的每个主要子单元的平均利用率。该成形根据本发明的一个实施例可以是图23A的窗334或者图23B的窗336中所示的图表。窗334和336的条形图可以以颜色编码来给出哪个子单元最频繁利用的清楚指示和大体给出优化目标的排序列表。
例如,如图23B所示,其中对于特定绘制上下文的最高的条形是用于顶点程序处理元件利用,开发人员可以考虑优化顶点程序或者重新排序索引来更好地利用变换后的高速缓存(post-transform cache)。应该理解23A和23B的子单元利用成形示出主要的GPU子单元的当前的利用。此外,子单元利用率可以基于绘制上下文使用柱状图上交迭的每个子单元利用来计算。在一个实施例中,子单元利用成形提供优化目标的分类列表。还应该理解窗334和336的每一个图表中的宽度和执行对应渲染特征所用的时间成比例。
图24A和图24B示出根据本发明的一个实施例的针对可用于分析的性能计数器的图形用户界面。性能计数器提供关于导出计数器和GPU的硬件计数器的细节。原始计数器数据可以以列表格式显示,如图24B中所示的。替代地,可以以图像格式呈现数据,其中多个计数器可以或者不可以同时用图表示。应该理解GCM工具基于这些计数器提供统计,诸如变换后的库存符合/错失、有效的填充率等等。
游戏引擎的其中一个职责是查看场景中的所有对象并且确定哪个处于视图体中并且应该被渲染,哪个在视图体之外并且应该被略过。通常使用边界受限的球体来操作,其在一些地方不很精确,当许多对象完全离屏将仍进行边界受限的球体的测试。而且,活动的特征极难于检查视图体。存在多种效率低的选项,诸如使用足够大的边界受限的球体来包括所有可能的姿势,或者复杂的选项,诸如使用以各种接合点为中心的多个边界受限的球体。因此,开发人员可以询问对象选择是怎样有效或者从更好的对象选择可以得到多少性能增益。
除了其他特征之外,此处描述的GCM工具还能够分析对象剔除,并且提供入栈缓冲器中的对象的完整分析,以及使用从入栈缓冲器移除的所有离屏对象建立新的入栈缓冲器。比较新的入栈缓冲器和之前的入栈缓冲器,并能够量化性能增益。应该理解此处描述的工具执行这个分析,不用改变应用程序中的一段代码。也就是,由于应用程序在重新播放过程期间被旁路,而入栈缓冲器特征被捕获,则开发人员不必要经历重写应用程序代码的痛苦过程。
图25A到25D示出根据本发明的一个实施例的用于优化帧的渲染的选择过程。初始,开发人员将打开条件性的成形菜单,并且对于每个绘制上下文进行选择来裁剪绘制上下文,如图25A中所示。在图25B中,选择裁剪过程的细节并且在此特定例子中,开发人员选择离屏裁剪,而不会a)退化,b)无像素,或者c)背面三角形。
开发人员随后选择成形按钮,并且通过GCM工具来处理结果。对于每一个渲染调用,GCM工具查看传递到每个三角形的三角形组件单元的顶点位置,并且确定屏幕上是否存在任何三角形。一旦工具识别对象在屏上,工具建立包含就是那些对象的新的入栈缓冲器并且对帧重新计时。在一个实施例中,整个过程可以耗用一分或者两分钟。图25D中示出结果,其中,当比较使用具有离屏对象的入栈缓冲器渲染帧和使用具有仅屏幕对象上的入栈缓冲器的渲染帧时,窗340提供的概览指示获得33%的增益。
因此,看到可能的33%的增益的开发人员应该查看改变方法,其中相对于视图体来检查对象。关于图25A到25D的上述测试可以被称为“假设”测试或者成形(profile)。也就是,开发人员可以询问“如果我的选择是最好的怎么办”。这里,剔除器能够基于每个三角形进行剔除。在另一个实施例中,存在冗余命令“假设”,其识别冗余命令。冗余命令“假设”使用移除的所有冗余命令建立新的入栈缓冲器,并且测量增加的性能。
关于图25C,应该注意到,选择成形按钮能够比较入栈缓冲器的成形而不需要提交修改的入栈缓冲器的变化到最初的入栈缓冲器。可替代地,选择提交按钮将修改的入栈缓冲器的变化提交到最初的入栈缓冲器。
图26A到26C示出当应用冗余命令“假设”时开发人员可以进行的事件的序列。在图26A中,提供“假设”窗342,其中开发人员将选择冗余“假设”。在图26B中,选择冗余“假设”并且在图26C中比较成形。图26D到图26O中示出多个其他的“假设”成形选项。
此外,图27A-E示出可以被称为试验的性能优化,其采用和反复进行一个或者多个“假设”或者性能优化来提供对于渲染的游戏或者应用程序的最佳设置的推荐。这些试验以下和实现技术以及可以显示的示例性结果一起来进一步描述。应该理解性能试验的列表是示例性的并且不意于限制。也就是,提供信息来优化图像数据的帧的渲染的任意性能试验可以和此处描述的工具包括在一起。
在一个试验中,在图26中所示,重新组织场景使得从前到后渲染对象来最大化深度剔除性能。以不干扰阿尔法混合绘制调用的相对渲染顺序的方式进行这种分类。最初,建立绘制调用的分组,其中分组包括能够无需改变输出而不同分类的所有绘制调用。
在一个实施例中,不允许越过渲染目标改变的分组、混合状态改变、清除、片段程序改变、片段程序常量集、顶点程序改变、顶点程序常量集或者深度函数。其他微小的渲染状态改变应该和绘制调用相关联并且如果分类之后有必要,应该移动或者建立合适的寄存器集。每一个绘制调用的位置范围相同,并且最接近的z范围被选作分类的值。根据每一个绘制调用的最接近的z范围,在每一绘制分组中分类绘制调用,并且测量性能。
显示结果来示出来自对象分类的任意性能增益。本领域内的技术人员理解对于对象分类,显示对象的顺序是重要的。从前到后分类由于早期的深度拒绝而改进了性能。典型地,游戏渲染阴影图,随后是不透明的几何形状、半透明的几何形状并且最后诸如模糊和光晕的全屏幕效应。在此实施例中,GCM工具能够确定通过距离对阴影图和不透明几何形状渲染调用的分类是否会改进性能。
图26E中所示的,仅深度遍历(depth only pass)性能优化将测量对于每个不透明对象插入仅深度(Z)渲染调用的性能影响。应该注意这可能或者不可能对性能有益。例如,如果瓶颈是顶点属性读出或者顶点着色程序,则如果加上Z pass,可以实际降低性能。在此优化中,对于写到颜色和深度缓冲器的每一渲染目标,场景被渲染两次。首先,使用颜色写停用和深度写启用的方式渲染场景。然后使用颜色写启用和深度写停用的方式渲染场景。测量性能增益并且随后图形显示结果。
图26F-H中示出的三角形裁剪优化在将三角形传递到像素单元之前在三角形上执行多种检查。如果三角形处于视图体外,裁剪三角形。如果三角形正对着错误的方向,裁剪三角形。如果三角形具有零区域,裁剪三角形,这在由渐进网格做出精细度等级(LOD)时可以频繁发生。最后,如果三角形过小以致不能包围像素中心,裁剪三角形。应该注意GCM工具能够在如上提及的背面、离屏、退化和无像素三角形上执行检查。换句话说,如果采用这种类型的协同处理器单元(SPU),则该工具将提供性能增加。以下列出示例性三角形裁剪选项。
裁剪离屏三角形
对于每一个绘制调用,查找离屏的三角形,将其从顶点阵列或者索引阵列移除,并且测量性能增益。通过转换观察点来转换三角形顶点,并且选择无顶点、边或者与屏幕区域交叉的面积的任意三角形。该陈述示出对于每一绘制调用移除多少三角形和移除它们获得的性能增益。
裁剪背面三角形
如果启用背面选择,对于每一个绘制调用,找到是背面的三角形,将其从顶点阵列或者索引阵列移除,并且测量性能增益。(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写的像素的数量的报告,来验证该测试。随后移除被确定为背面并且不写到任何像素的三角形。表示结果的界面示出对于每一绘制调用移除多少三角形和移除它们获得的性能增益。
裁剪退化三角形
定位退化的三角形,并且将其从顶点阵列或者索引阵列移除,并且测量性能增益。(v0==v1)||(v0==v2)||(v1=v2)其中v0=(x0,y0)和v1=(x1,y1)和v2=(x2,y2)和三角形=(v0,v1,v2) 公式,2通过转换观察点来转换三角形顶点之后,应用公式2来确定哪个三角形被退化并且应该被移除。表示结果的界面示出对于每一绘制调用移除多少三角形和移除它们获得的性能增益。
裁剪无像素三角形
对于每一个绘制调用,识别没有碰到任何像素中心的三角形,并且将其从顶点阵列或者索引阵列移除,以测量性能增益。随后通过将其分到各自的绘制调用中,使用深度比较、模板比较和阿尔法测试停用来重新渲染并且请求从GPU写的像素的数量的报告,来验证每一个三角形。随后从索引或者顶点阵列移除不写任何像素的任意三角形。表示结果的界面示出对于每一绘制调用移除多少三角形和移除它们获得的性能增益。
在一个实施例中,基于每个对象通过操纵“临时寄存器计数”能够改变像素管道(pixel pipe)的长度,其能够使用libgcm调用cellGcmSetRegisterCount来设置。如果临时寄存器计数被设置的高,则在每一个像素管道中存在较少的像素。由于其能够改进管道之间的像素分布,所以这能够有助于较小对象的性能。这也能够有助于全屏效应的性能,其可以对纹理高速缓存过度使用。使用如图26K-L中所示的此“假设”,开发人员能够看到当临时寄存器计数的值改变时的性能增加或者减少,对于特定渲染调用或者对于作为整体的场景。
在另一个实施例中,能够改变三角形格式来确定性能影响。存在多种方法来显示GPU上的三角形:三角形、三角形带、索引的三角形和索引的三角形带,来命名一些。在一个实施例中,索引的三角形具有最高的性能。如果使用非索引的绘制,则使用如图26M中所示的“转换非索引绘制到索引绘制”优化将示出通过改变为索引的三角形列表来获得的性能。还存在“假设”来优化三角形列表,如图26N-O中所示。通过使用顶点高速缓冲优化程序来确定要获得的潜在性能。顶点高速缓存优化程序是选择索引的三角形的接近的理想集的工具并且优化不仅用来最小化转换后的高速缓存故障,还用于GPU上的三角形组件中使用的四个顶点迷你高速缓存。以下列出进一步的优化,
顶点属性阵列上下文位置
函数将每一个顶点流移动到主存储器或者视频存储器并且记录每一个的性能测量。因此,示出通过切换主存储器和视频存储器之间的顶点流来获取的性能的特定故障,能够使用顶点流所被移动到的上下文来产生。
交错的顶点属性阵列
在此实施例中,每一顶点阵列将通过记录哪个顶点阵列使用超过一次而被分配到或者实例或者唯一的类别。这些列表随后通过记录哪个实例顶点阵列被一起使用而被分解为对象列表。使用该信息,对于每一个对象的顶点阵列的每一类别,顶点阵列能够交错在一起。对于每一绘制调用来设置交错的顶点阵列而不是初始的顶点阵列,并且测量性能差别。对于每一个对象实例,通过显示来自交错属性的性能增益,能够图形显示结果。
交错的顶点属性阵列上下文位置
该试验的实施利用跟随有顶点属性阵列上下文试验的交错的顶点属性阵列试验,二者上面列出。此处,对于每一个对象实例,显示性能增益和顶点属性阵列所被移动到的上下文。
找到未使用的启用的顶点属性阵列
在另一个示例性试验中,通过比较顶点属性掩码和启用的顶点属性阵列来确定对于每一个绘制调用是否存在任何未使用的启用的顶点属性阵列。通过停用这些顶点属性阵列,来停用未使用的阵列并且测量性能增益。结果的图形表示可以包括显示顶点着色和绘制调用,其中,对于每一个未使用的启用的顶点属性阵列,不使用顶点属性阵列,以及通过适当停用这些属性的总的性能增益。
使用我们马上发明的完美的网格优化程序的网格的重新优化
在此试验中,对于每一个对象实例,顶点阵列和索引阵列通过网格优化程序,并且捕获性能增益。对于每一个对象实例,可以呈现性能增益的显示以及转换前和转换后高速缓存故障的差异。
搜寻未使用的插入器
在此试验中,对于每一个顶点程序和每一个片段程序组合,通过检查顶点程序输出掩码和片段程序指令来识别出任意未使用的插入器。通过修改顶点程序输出掩码来停用任意未使用的插入器。随后测量性能增益。对于每一个顶点程序和片段程序组合的结果显示,示出未使用的插入器和停用未使用的插入器产生的结果性能增益。
颜色缓冲器上下文位置
对于每一个颜色缓冲器,将颜色缓冲器移动到颜色缓冲器当前驻留的对应位置并且测量性能差异。在一个实施例中,在移动缓冲器时保持平铺设置(除了压缩)。对于每一个唯一的颜色缓冲器,测量来自于将颜色缓冲器移动到其当前驻留的对应位置的性能差异。如果性能改进,建立将颜色缓冲器的上下文改变为该上下文的“假设”。当然,任何交迭的纹理或者深度缓冲器上下文被重新定位到同样的上下文。对于每一个颜色缓冲器,可以显示移动缓冲器带来的性能差异。
深度缓冲器上下文位置
对于每一个深度缓冲器,将深度缓冲器移动到深度缓冲器当前驻留的对应上下文并且测量性能差异。在移动缓冲器时保持平铺设置(除了压缩)。对于每一个唯一的颜色缓冲器,测量来自于将深度缓冲器移动到其当前驻留的对应上下文的性能差异。如果性能改进,建立将深度缓冲器的上下文改变为该上下文的“假设”。当然,任何交迭的纹理或者深度缓冲器上下文被重新定位到同样的上下文。对于每一个深度缓冲器,在缓冲器被移动的情况下,可以显示移动缓冲器带来的性能差异,以及平铺设置,如果存在的话。
片段程序寄存器计数
在此试验中,对于每一个片段程序,尝试每一种可能的寄存器计数并且找到具有最佳性能的最小寄存器计数。能够显示对于每个片段程序使用的性能增益和寄存器计数。
DXT1纹理
在此试验中,对于不具有变化的阿尔法(总是开启或者总是关闭)的每一纹理,能够应用dxt1压缩。更新所有相关的纹理格式命令并且测量性能增益。本领域内的技术人员将理解DXT1仅支持二进制阿尔法。在一个实施例中,设置对于阿尔法总是开启或者关闭的用户可定义的错误容限。能够呈现对于每一可应用的纹理、新的纹理和场景的截屏的性能增益。在一个实施例中,提供输出新的纹理的能力。
DXT3/5纹理
对于每一个不是dxt1压缩的纹理,dxt3/5压缩纹理并且更新所有相关的纹理格式命令来测量性能增益。能够呈现对于每一可应用的纹理、新的纹理和场景的截屏的性能增益。在一个实施例中,提供输出新的纹理的能力。
找到未使用的清除的模板缓冲器
在此试验中,对于具有模板(stencil)位启用的每一个清除命令,检查模板掩码和模板操作用于入栈缓冲器中的深度/模板缓冲器的寿命。如果缓冲器从未被使用,则从清除命令和测量的性能增益移除模板位。显示性能增益和具有不必要的模板位的清除命令。
找到未使用的清除的深度缓冲器
在此试验中,对于具有深度位启用的每一个清除命令,检查深度掩码和深度函数用于入栈缓冲器中的深度/模板缓冲器的寿命。如果缓冲器从未被使用,则从清除命令和测量的性能增益移除深度位。可以显示性能增益和具有不必要的深度位的清除命令。
找到未使用的清除的颜色缓冲器
在此试验中,对于具有颜色位启用的每一个清除命令,检查颜色掩码和混合函数用于入栈缓冲器中的颜色缓冲器的寿命。如果缓冲器从未被使用,则从清除命令和测量的性能增益移除颜色位。在一个实施例中,呈现性能增益和具有不必要的颜色位的清除命令。
具有阿尔法混合的阿尔法测试
在此试验中,对于每一个混合函数,其中增加混合方程,并且该函数是src阿尔法和inv src阿尔法,确定设置的寿命并且设置阿尔法测试大于基准0。测量和显示性能增益以及新的阿尔法命令增加到的位置。
纹理上下文位置
纹理上下文位置试验遵从以下过程: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等于转变后的位流。对于每个纹理,可以呈现移动纹理带来的性能差异,以及在纹理被移动的情况下,呈现移动所有纹理的总的性能。
平铺包装
在此试验中,对于具有匹配间距和压缩类型的每个平铺,平铺被组合成单个平铺并且正确地移动包含的资源。在一个实施例中,显示具有列出的每一个平铺内容的之前和新的平铺布局。
平铺未平铺的颜色缓冲器
此处,如果存在未使用的平铺,对于未平铺和未混合的每一个颜色缓冲器,平铺颜色缓冲器并且测量性能增益。对于每一个可应用的颜色缓冲器,显示来自平铺和平铺设置的性能增益。
平铺未平铺的深度缓冲器
此处,如果存在未使用的平铺,对于未平铺和未混合(swizzle)的每一个深度缓冲器,平铺深度缓冲器并且测量性能增益。对于每一个可应用的深度缓冲器,显示来自平铺和平铺设置的性能增益。
压缩未压缩的平铺的颜色缓冲器
在此试验中,对于视频存储器中平铺的并且没有压缩的每一个颜色缓冲器,压缩颜色缓冲器并且测量性能增益。在一个实施例中,仅压缩包含同样格式的缓冲器的平铺。对于每一个可应用的颜色缓冲器,显示性能增益和平铺设置。
压缩未压缩的平铺的深度缓冲器
在此试验中,对于视频存储器中平铺的并且没有压缩的每一个深度缓冲器,压缩深度缓冲器并且测量性能增益。在一个实施例中,仅压缩包含同样格式的缓冲器的平铺。对于每一个可应用的深度缓冲器,显示性能增益和平铺设置。
平铺未平铺的颜色缓冲器并且压缩它们
对于未平铺和未混合的每一个未使用的颜色缓冲器,平铺颜色缓冲器,并给颜色缓冲器最佳的压缩设置。测量对于每一个可应用的颜色缓冲器的性能增益,并且显示性能增益和平铺设置。
平铺未平铺的深度缓冲器并且压缩它们
对于未平铺和未搅和的每一个未使用的深度缓冲器,平铺深度缓冲器,并给深度缓冲器最佳的压缩设置。测量对于每一个可应用的深度缓冲器的性能增益,并且显示性能增益和平铺设置。
找到冗余清除
在此试验中,确定缓冲器对于每一清除命令是否已经清除。如果缓冲器被清除,则移除清除命令并且测量性能增益。性能增益和双清除命令可以显示给开发人员/用户。
找到完全填充的颜色缓冲器
这里,对于具有颜色位启用的每一个清除命令,检查颜色缓冲器以查看是否所有像素在入栈缓冲器中当前渲染目标寿命之后已经写入。如果每一个像素在其中具有新的颜色值,则从清除命令移除颜色位并且测量性能增益,使得可以显示性能增益和具有不必要的颜色位的清除命令。
Ppu片段程序常量修补
对于此试验,对于每一个片段程序和具有不同的常量集的每一绘制调用,使用程序宏代码中已经设立的常量建立新的片段程序。常量集从入栈缓冲器被移除并且用新的片段程序的片段程序命令集来替代它们。结果的显示可以包括用于每一个片段程序的性能增益、程序变量的数量和新变量以字节为单位的大小。
完美的深度剔除优化控制设置
对于使用CalcilateDepthCullFeedback( )函数中描述的深度剔除报告和算法的每一个渲染目标,识别最好的深度剔除优化控制设置。对于每一个渲染目标,显示最好的深度剔除优化设置和结果的性能增益。
深度剔除区域启用
此处,对于每一个平铺的深度缓冲器,对于深度缓冲器如果深度剔除区域没有设置,则设置深度剔除区域并且测量性能增益。然后能够显示适合地设置深度剔除区域的性能增益。
深度剔除区域停用
此处,对于每一个平铺的深度缓冲器,如果深度剔除区域对于深度缓冲器设置,则停用深度剔除区域并且测量性能损失,其应该展示深度剔除的效率。捕获没有使用深度剔除的性能损失用于显示。
深度剔除再填入
关于每一个渲染目标,如果深度剔除是特定无效的或者深度函数改变了方向,则通过无效之后渲染大的嵌块(quad)来重新填入深度剔除存储器。测量性能增益并且,对于每一渲染目标,如果深度剔除区域无效,则显示来自重新组装深度剔除存储器的性能增益。
完整的纹理mip-map集
在此试验中,对于不具有完整的mipmap集的每一个纹理,使用简单的箱式过滤器产生完整的mipmap集并且测量性能差异。来自具有完整mipmap集的性能增益随后能用于显示。
三线过滤
对于使用各向异性过滤的每一个纹理过滤命令,将过滤改为三线过滤并且测量性能增益用于和场景的截屏一起显示。
较少线性过滤(brilinear filtering)优化
对于使用三线过滤的每一个纹理过滤命令,反复进行所有可能的较少线性优化值并且测量性能增益。可以产生示出相对于用于每一个可应用的纹理和场景的截屏的较少线性优化值的性能增益的图用于显示。
双线过滤
对于使用三线或者各向异性过滤的每一个纹理过滤命令,将过滤改为双线过滤并且测量性能增益。该试验十分有助于深度纹理。这里,性能增益和场景的截屏可用于显示。
点过滤
在此例中,对于每一个纹理过滤命令,将过滤改为点过滤并且测量性能增益。这十分有助于深度纹理。对于每一个可应用的纹理,性能增益和场景的截屏可以被显示。
找到静态的或者不变化的属性
此处,识别贯穿全部绘制调用值是常量的每个绘制调用中的顶点阵列。替代设置该顶点阵列,使用SetVertexAttrib4f来设置属性阵列的值。如果整个顶点阵列在所有绘制调用上是相同的值,代替为移除顶点阵列并且使用SetVertexAttrib4f命令来替代其设置命令。用于存在任意静态属性的每一个绘制调用的表示包括性能增益和SetVertexAttrib4f的值。对于每一个顶点阵列,如果整个顶点阵列是静态,则对于使用SetVertexAttrib4f命令和传递到SetVertexAttrib4f的值替代该命令显示总的性能增益。
完美的顶点属性包装
对于每一个对象实例和对于用之渲染对象实例的每一个顶点程序,找到对于两个属性的分量相加的数量低于或者等于4的每个属性的兼容属性。将流组合成单个属性并且相应修改顶点程序,从而测量性能增益。a)找到互相使用的属性阵列。对于每一个唯一属性的数据阵列,对于使用该属性阵列使从当前属性阵列到其他属性阵列的软链路在绘制调用中被使用的的每一个绘制调用,在绘制调用中使用当前属性阵列的次数增加计数,并且保持和该绘制调用一起使用每一个其他属性阵列的次数的计数。接着,对于每一个唯一的属性阵列,对于从该属性阵列的每一个软链路,如果与当前属性阵列使用链接的属性阵列的次数的计数等于当前属性阵列使用的次数,则与该属性建立硬链路。这一点之后,不再使用软链路。b)找到与每一个顶点属性阵列一起使用的顶点程序。对于每一个唯一的顶点属性阵列,通过反复进行使用该顶点阵列的所有绘制调用并且将在每一绘制调用中使用的每一个程序加到每个属性阵列顶点程序列表,来建立和该属性阵列一起使用的顶点程序列表。c)对于每一个顶点程序和该顶点程序的每一个启用的输入属性,反复进行顶点程序指令并且产生对于描述每一个输入属性所使用的分量的每一个输入的掩码。采用结果输入属性所使用的分量掩码并且将其与每一个属性阵列所使用的分量掩码相组合。(注意到所使用的分量掩码无论是x、xy、xyz或者xywz都不同于所保存的分量掩码)d)对于每一个唯一的属性阵列和对于同样格式的该属性阵列的每一硬链路,如果链接的属性阵列的所使用的属性计数加上当前的属性阵列的所使用的属性计数小于或者等于4,则将属性组合到单个阵列中,并且对于当前属性阵列的顶点程序列表中的每一个顶点程序,反复进行程序指令并且根据新的布局更新任意分量掩码和分量混合。当做出改变时,重复d)。e)对于从实现中执行的每一个操作的显示,测量性能增益。
使用顶点程序集
在此试验中,分析入栈缓冲器来找到多样的集合顶点程序和它们之间的顶点程序集。确定所有这些顶点程序是否能够一起包装在总的可用的指令槽(instruction slot)中。随后修改入栈缓冲器来在同一时间设置所有的顶点程序并且随后改变每一个之后的集合到执行槽变化中。示出包装在一起的每一个顶点程序和结果的性能增益。在一个实施例中,提供输出功能性来给出新的顶点程序集。
纹理mip-map偏置
在此试验中,对于每一个纹理过滤器命令,mip-map以0.1的增量在0和1之间偏置来测量性能增益。一个示例性显示包括对于示出与所使用mip-map偏置相对的性能增益的每一个纹理过滤器命令的图。
多个渲染目标建立重播优化
对于具有多个渲染目标的每一个渲染目标,确保渲染目标的每一个处于同样的上下文位置并且具有准确的同样的平铺和压缩设置。如果它们不是并且存在足够的未使用的平铺来平铺未平铺的缓冲器,则改变属性使得它们相同并且测量性能增益。应该理解该试验取决于平铺包装。对于每一个可应用的渲染目标,显示对于每一个缓冲器的性能增益、平铺设置和压缩设置。
使用索引的绘制而不是未索引的绘制
这里,对于每一个未索引的绘制调用,建立索引缓冲器并且运行其通过网格优化程序来测量性能增益。使非索引绘制调用被索引的性能增益的显示是一个示例性显示。
片段程序上下文位置
对于每一个片段程序,移动片段程序到当前所处的对应位置并且测量性能增益。一个示例性显示包括从移动程序和程序被移动后的性能差异。
找到顶点程序中的静态分支
对于包含基于常量的分支的每一个顶点程序,建立顶点程序的多个副本,每一个用于每一个可能的控制路径。不用改变常量,设置合适的新的顶点程序。在一个实施例中,顶点程序可以被重新调度用于最佳指令排序。对于每一个可应用的顶点程序,显示性能增益和以其静态分支的常量以及新的顶点程序。还提供输出新的顶点程序的能力。
主存储器渲染转发
对于在主存储器中具有颜色或者深度缓冲器的每一个渲染目标,将所有的缓冲器置于视频存储器中。随后在渲染之后,将命令加到入栈缓冲器来复制(blit)渲染结果到主存储器。测量并显示性能增益。
原语(primitive)重启
对于使用三角形带的每一个索引的绘制调用,检测表示退化三角形的索引缓冲器中任意模式(ABCD+DEEF+EFGH或者ABC+CDDDE+DEF或者ABC+CCDDE+DEF或者ABC+CDDEE+DEF)并且使用原语重启索引将其替换。测量性能增益并且对于每一个修改的绘制调用,示出来自使用原语重启的性能增益。
量化
对于每一个顶点阵列,找到每一输入的范围。如果该范围可表示地在当前描述的较小的类型中,转换顶点阵列到该较小的类型并且测量性能增益。为了将较小的输入重映射到较大的输入,也许有必要以常量相加和相乘指令到顶点着色。用于重新映射输入的公式是(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,sle5m10 |
U8N | 4 | 8位 | 0..1 |
I16 | 5 | 16位 | -32768..+32767 |
Z10Y11X11 | 6 | 10/11位 | -1..1 |
U8 | 7 | 8位 | 0..255 |
常量叠算
常量叠算是用于通过预计算常量表达式来增加顶点/片段程序效率的技术。这些预计算常量表达式将在PPU上被计算并且随后上载为补充或者替代现存的顶点/片段程序常量。例如,表达式“mul(World,mul(视图,投影))”和表达式“sin(时间)”能够在顶点/片段程序运行之前由其外的PPU计算。能够移动的顶点/片段程序计算是和恒定参数相关联的那些计算;也就是,计算不对每一顶点或者片段改变。常量叠算能降低每程序的指令的数量并且还可以降低程序所使用的常量寄存器的数量。
在一个实施例中,建立指令图。从该指令图,识别出指令,其中对指令的所有输入值是常量。从该指令计算结果并且加上该结果作为常量。重复该过程,直到再没有常量可以叠算在一起。移除所有未使用的常量。对于每一个顶点/片段程序,显示可以包括新的程序指令和预着色作为伪代码。可以提供输出功能性以给出新的顶点程序和简单的C函数中的预着色本身。
完美的顶点程序常量包装
对于每一个顶点程序,找到所有常量的所使用的分量。对于每一个常量,找到另一个常量,其中两个常量的所使用的分量的数量加起来小于或者等于4。将这些常量组合在一起为单个常量,修改入栈缓冲器和顶点程序来反映这种改变,并且测量性能增益。如上所提及的,必须关注通过几个顶点程序所使用的常量。a)建立分量掩码阵列-对于每一个顶点程序,使用显式的常量索引(忽略所偏移的常量索引)来反复进行标记任一所使用的常量的所使用的分量的指令。在该阶段之后,定义每项4位的544尺寸的阵列,其表示每个可能常量的所使用的分量。b)顶点程序常量作为可重用的资源-对于每个顶点程序常量集,对于直到常量使用另一个常量重写的每一个绘制调用以及和绘制调用一起使用的每个顶点程序,如果常量集被标记如用在之前产生的所使用的分量掩码中,则将顶点程序和绘制调用链接到常量集。c)找到互相使用的常量-对于每一个顶点程序常量集和每一个链接的绘制调用,反复进行也具有到该绘制调用的链接的每一个其他顶点程序常量集并且将该顶点程序常量集链接到当前顶点程序常量集。d)找到相等重合的常量-对于每一个顶点程序常量集和每一个链接的顶点程序常量集,并且如果每一个链接的顶点程序常量集的链接的顶点程序没有链接到当前的顶点程序常量集的链接的顶点程序,将该链接从当前顶点程序常量集移到链接的顶点程序常量集。e)建立所使用的分量掩码-对于每一个顶点程序常量集,具有对所有未使用的分量设置的缺省的所使用的分量掩码。接着,对于每一链接的顶点程序,将所使用的分量掩码和对于该常量的顶点程序的所使用的分量掩码组合。f)组合常量-对于每一个顶点程序常量集和每一个链接的顶点程序常量集,如果常量集的所使用的分量的数量加上链接的常量集的所使用的分量的数量小于或者等于4,则将常量组合并且对于每一个链接的顶点程序,反复进行指令并且更新明确的常量索引、混合和对于所更新的常量的掩码。当做出改变时,重复f)。g)测量性能差异。对于每一个顶点程序,显示包括对输入常量的修改和结果的性能增益。提供输出功能性。
顶点程序输出包装
对于每个顶点程序,找到所有输出的所使用的分量。对于每一个输出,找到另一个输出,其中两个输出的所使用的分量的数量加起来低于或者等于4。将这些输出组合在一起为单个输出,并且修改顶点程序以及相应地任意对应的片段程序。最后测量性能增益。
显示能够示出被修改并且其输出被组合的每一个顶点和片段程序,以及源自这些修改的结果的性能增益。提供输出的功能性。
来自线性纹理的混合的纹理
对于没有Dxt压缩的每一个线性纹理,将该纹理转换为混合的纹理并且更新所有的相关的纹理格式命令。测量性能增益并且对于每一可应用的纹理,显示源自混合纹理的性能差异。
来自平铺的纹理的混合的纹理
对于没有Dxt压缩的每一个平铺的纹理,解平铺该纹理并且混合该纹理数据。更新所有相关的纹理格式命令,并且测量用于显示的性能增益。
找到未使用的颜色通道
对于每一个纹理和对于使用该纹理的每一个片段程序,找到纹理的所使用的颜色通道。如果所使用的颜色通道的数量允许纹理以较小的纹理格式被表示,则改变纹理格式并测量性能增益。对于每个可应用的纹理,显示该性能增益、之前的和新的纹理格式的描述。
找到片段程序中的静态分支
对于包含基于常量的分支的每一个片段程序和对于通过常量的该片段程序的每一个唯一的实例,建立片段程序的多个副本,例如每一个用于每一个可能的控制路径。代替改变常量,而设置合适的新的片段程序并且还将任意相关的常量集重定向到该片段程序。在一个实施例中,片段程序被重新调度用于最佳指令排序。对于每一个可应用的片段程序,显示性能增益和以其静态分支的常量以及新的片段程序。还提供输出新的片段程序的能力。
来自线性渲染目标的混合的渲染目标
对于线性的、不是显示渲染目标的并且具有相关的纹理的每一个渲染目标,使渲染目标在宽度和高度上取2的乘幂。将渲染目标改变为混合类型并且测量性能增益用于显示。
来自平铺的渲染目标的混合的渲染目标
对于平铺的、不是显示渲染目标的并且具有相关的纹理的每一个渲染目标,使渲染目标在宽度和高度上取2的乘幂。解平铺渲染目标的颜色和深度缓冲器并且将渲染目标改变为混合类型并且测量性能增益用于显示。
通过示例但并不进行限制,图28示出根据本发明的实施例的一种单元处理器1000。在此例中,单元处理器1000包括主存储器1002、功率处理器元件(PPE)1004、和多个协同处理器元件(SPE)1006。在此例中,单元处理器1000包括单个PPE 1004和八个SPE 1006。在这样的配置中,七个SPE 1006可被用作并行处理并且一个可以备用作在其他七个中的一个发生故障时的备份。单元处理器可以可替换地包括多组PPE(PPE组)和多组SPE(SPE组)。在这样的情况中,在组中的单元之间能够共享硬件资源。然而,SPE和PPE必须表现为软件作为独立的元件。由此,本发明的实施例不限于使用图示的配置。
主存储器1002典型地包括通用和非易失性存储装置,以及专用的硬件寄存器或者阵列,用作诸如系统配置、数据传送同步、存储器映射I/O、和I/O子系统的功能。在本发明的实施例中,信号处理程序1003可以驻留在主存储器1002中。信号处理程序1003可以运行在PPE上。程序1003可以被分出能够在SPE和/或PPE上执行的多个信号1009处理任务。
通过示例,PPE 1004可以是和高速缓存L1和L2相关联的64位PowerPC处理器单元(PPU)。PPE 1004是通用处理单元,其能够存取系统管理资源(例如,诸如存储器保护表)。硬件资源可以由PPE明确地映射到所示的实际地址空间。从而,PPE能够通过使用合适的有效地址值来直接寻址任何这些资源。PPE 1004的基本功能是对于单元处理器1000中的SPE1006的任务的管理和分配。
尽管仅示出单个PPE,但诸如单元宽带引擎架构(CBEA)的一些单元处理器实现,单元处理器1000可以具有组织到PPE组中的多个PPE,其中可以存在多于一个。这些PPE分组可以共享对主存储器1002的存取。此外,单元处理器1000可以包括两个或者多个分组SPE。SPE分组也可以共享对主存储器1002的存取。这些配置属于本发明的范围。
每一个SPE 1006包括协同处理器单元(SPU)和其自身的本地存储区域LS。本地存储LS可以包括存储器存储装置的一个或者多个单独区域,每一个和特定的SPU相关联。每一个SPU可以被配置为仅执行来自其自身相关的本地存储域内的指令(包括数据负载和数据保存操作)。在这样的配置中,本地存储LS和系统1000的其他部分之间的数据传送可以通过从内存流控制器(MFC)发出直接存储器存取(DMA)命令来执行以传送数据到(单个SPE的)本地存储域或者从其传送。SPU相比于PPE 1004是不很复杂的计算单元,在于他们不执行任意的系统管理功能。SPU通常具有单个指令、多个数据(SIMD)能力并且典型地处理数据和初始化任意所需的数据传送(经受PPE建立的存取特性)用来执行它们所分配的任务。SPU的目的是使能需要更高的计算单元密度并且能够有效地使用所提供的指令集的应用程序。PPE 1004管理的系统中的显著数量的SPE允许在广泛范围的应用程序上的节省成本的处理。
每一个SPE 1006可以包括专用的存储器流控制器(MFC),存储器流控制器包括能够保持和处理存储器保护和存取允许信息的相关的存储器管理单元。MFC提供用于单元处理器的主存储装置和SPE的本地存储装置之间的数据传送、保护和同步的基本方法。MFC命令描述所被执行的传送。用于传送数据的命令有时称为MFC直接存储器存取(DMA)命令(或者MFC DMA命令)。
每一个MFC可以同时支持多个DMA传送并且能够保持和处理多个MFC命令。每一个MFC DMA数据传送命令请求可以包括本地存储装置地址(LSA)和有效地址(EA)。本地存储装置地址可以直接寻址仅其相关联的SPE的本地存储区域。有效地址可以具有更通用的应用程序,例如,如果它们标记到真实的地址空间,其可以引用主存储装置,包括所有的SPE本地存储区域。
为了便于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)同步。
单元处理器1000可以包括输入/输出(I/O)功能1008,单元处理器可以通过其将其他模块、处理器或者外围装置连接在一起。在一个例子中,I/O 1008能够连接图形硬件引擎102(图1)。示例的商业可用的处理器(尽管其它也可以使用)是实体合成器(RSX)。
此外,元件互连总线1010可以连接上面列出的多种部件。每一个SPE和PPE能够通过总线接口单元BIU存取总线1010。单元处理器1000也可以包括典型存在于处理器中的两个控制器:控制总线1010和主存储器1002之间的数据流的存储器接口控制器MIC,和控制I/O 1008和总线1010之间的数据流的总线接口控制器BIC。尽管对于不同的实现MIC、BIC、BIU和总线1010的需求可以广泛变化,但本领域内的技术人员熟悉他们的功能和电路,用于实现它们。
单元处理器1000还可以包括内部中断控制器IIC。IIC部件管理提供给PPE的中断的优先权。IIC允许来自被处理的单元处理器1000的其它部件的中断,而不使用主系统中断控制器。IIC可以被认为是第二级控制器。主系统中断控制器可以处理从单元处理器外部发起的中断。
在本发明的实施例中,诸如上述的分数延迟的特定计算可以并行使用PPE 1004和/或一个或者多个SPE 1006来执行。每一个分数延迟计算可以被运行作为在其变得可用时不同的SPE 1006可采用的一个或者多个单独的任务。
本发明可以使用其他计算机系统配置来实现,这些其他计算机系统配置包括游戏控制台、游戏计算机或者计算装置、手持装置、微处理器系统、基于微处理器或者可编程的消费电子设备、迷你计算机、大型计算机等等。本发明也可以在分布式计算环境中实现,其中通过经由网络链接的远程处理装置来执行任务。例如,也可以使用在线游戏系统和软件。
考虑到上述实施例,应当理解本发明可以使用涉及计算机系统中存储的数据的多种计算机实现的操作。这些操作是需要对物理量进行物理操纵的操作。通常,虽然不是必须的,这些物理量以电或磁信号的形式存在,可以被存储、传输、组合、比较以及以其它方式进行操纵。进一步地,所进行的操纵经常被(作为术语)称为诸如产生、识别、确定或比较等。
此处描述的构成本发明的部分的任一操作都是有用的机器操作。本发明同样涉及用于执行这些操作的设备或装置。此设备可以根据特定目的特别构建,诸如上述承载网络,或者可以是由存储在计算机中的计算机程序可选地配置或者激活的通用计算机。更具体地,根据此处教导,可以将编写的计算机程序用于不同的通用机器,或者更方便的可以构建更专用设备来执行所需操作。
本发明还可以作为计算机可读代码被实施到计算机可读媒介中。该计算机可读媒介是任何能够存储可以被计算机系统随后读取的数据的数据存储装置。示例性的计算机可读媒介包括硬盘驱动器、附加式网络存储装置(NAS)、只读存储器、随机存储器、基于闪存(FLASH)的存储器、CD-ROM、CD-R、CD-RW、DVD、磁带和其它光学和非光学数据存储装置。计算机可读媒介也可以分布于一个网络连接的计算机系统上,以使计算机可读代码以分布式方式被存储和执行。
虽然为清晰理解的目的对前述本发明进行了一些详细描述,但显然,可以在后附的权利要求的范围内进行一些变化和修改。因此,本发明的实施例可以被认为是示意性的而不是限制性的,并且本发明不被在此给出的细节所限制,而是可以在后附的权利要求的范围和其等同物内进行更改。
Claims (23)
1.一种用于对在应用程序执行期间所产生的多帧视频序列的帧进行性能分析的系统,包括:
(i)被配置来执行所述应用程序的硬件引擎;
(ii)被配置来从所述硬件引擎获取入栈缓冲器数据的库捕获模块,所述入栈缓冲器数据用于所述多帧视频序列的帧;
(iii)用于呈现所述入栈缓冲器数据的内容的交互显示的图形用户界面,所述内容定义多个命令和与所述多个命令的每一个相关联的数据,所述图形用户界面使得访问能够对所述入栈缓冲器的所述内容进行改变;和
(iV)使得能够重新执行通过所述图形用户界面进行任何改变的入栈缓冲器数据的重放模块;
其中,所述图形用户界面提供多个性能分析测量,以在对入栈缓冲器做出改变时量化入栈缓冲器的执行中的差异。
2.如权利要求1所述的用于进行性能分析的系统,其中所述图形用户界面提供访问来对入栈缓冲器数据进行改变而不需要对应用程序进行改变。
3.如权利要求1所述的用于进行性能分析的系统,其中
如果已经对应用程序进行修改,则对所述入栈缓冲器的改变和对具有改变的入栈缓冲器的重新执行模拟所述应用程序的性能。
4.如权利要求1所述的用于进行性能分析的系统,其中所述应用程序包括能够被触发来导致被传送到所述库捕获模块的入栈缓冲器数据的收集的函数调用。
5.如权利要求4所述的用于进行性能分析的系统,其中所述入栈缓冲器数据是从数据组的传送来获取的。
6.如权利要求5所述的用于进行性能分析的系统,其中所述库捕获模块产生的库是以从所述数据组获取的入栈缓冲器数据提供的。
7.如权利要求6所述的用于进行性能分析的系统,其中所述库通过所述图形用户界面被访问,以提供所述入栈缓冲器数据的内容的所述交互显示。
8.如权利要求7所述的用于进行性能分析的系统,其中所述图形用户界面提供多个菜单和窗口用于表示多个性能分析测量,并选择所述多个菜单和窗口的一个来使得能够改变所述入栈缓冲器数据的内容。
9.如权利要求3所述的用于进行性能分析的系统,还包括:
对所述入栈缓冲器数据的假设改变,所述假设改变定义对所述入栈缓冲器数据的改变的设置,所述改变的设置被配置为如果已经对应用程序进行修改则模拟所述应用程序的性能,而不需要改变所述应用程序的代码。
10.一种用于优化应用程序的视频帧渲染特性的方法,包括:
渲染视频帧;
捕获表示所述视频帧的所述渲染的入栈缓冲器设置;
修改所述入栈缓冲器设置的特征而不修改所述应用程序;
使用所述修改的特征来重新渲染该帧;
比较所述渲染和所述重新渲染;并且
呈现比较结果。
11.如权利要求10所述的方法,其中所述捕获包括:
调用嵌入在所述应用程序中的函数来复制所述入栈缓冲器设置。
12.如权利要求10所述的方法,其中所述修改的特征从组中选择,所述组包括冗余命令、渲染状态优化、资源定位、顶点阵列结构、未使用的顶点阵列数据、常量顶点阵列数据、未使用的顶点程序输出数据、网格优化、三角形裁剪、深度分类、仅深度遍历、片段程序寄存器计数优化、替代纹理压缩格式、纹理存储器分组、顶点程序分组、渲染目标平铺和深度剔除区域、以及顶点程序优化。
13.如权利要求10所述的方法,其中所述方法在连续帧上执行。
14.如权利要求10所述的方法,其中所述方法在每个第n个帧上执行,其中n是大于或者等于2的整数。
15.如权利要求10所述的方法,其中所述修改包括选择“假设”修改器。
16.如权利要求10所述的方法,还包括:
修改所述入栈缓冲器的多个特征;
对每个单独修改的特征的影响分类;和
对所述多个特征的修改的全局影响分类。
17.如权利要求16所述的方法,其中,执行所述修改多个特征而不改变所述应用程序的代码。
18.如权利要求10所述的方法,其中,所述重新渲染包括将所述修改的特征提交到所述入栈缓冲器中。
19.如权利要求10所述的方法,其中所述比较包括对于所述渲染和所述重新渲染计算渲染次数。
20.一种用于对在应用程序执行期间所产生的多帧视频序列的帧进行性能分析的系统,包括:
(i)和捕获触发硬件逻辑通信的硬件引擎,所述硬件引擎被配置为至少部分执行所述应用程序;
(ii)被配置为响应由所述捕获触发硬件逻辑的处理来从所述硬件引擎获取入栈缓冲器数据的库捕获模块,所述入栈缓冲器数据用于所述多帧视频序列的帧;
(iii)用于呈现所述入栈缓冲器数据的内容的交互显示的图形用户界面,所述内容定义多个命令和与所述多个命令的每一个相关联的数据,所述图形用户界面使得访问能够对所述入栈缓冲器的所述内容进行改变;和
(iV)使得能够重新执行通过所述图形用户界面进行任何改变的入栈缓冲器数据的重放模块;
其中,所述图形用户界面提供多个性能分析测量,以在对入栈缓冲器做出改变时量化入栈缓冲器的执行中的差异,并且所述图形用户界面提供访问来对入栈缓冲器数据进行改变而不需要对应用程序进行改变。
21.如权利要求20所述的用于进行性能分析的系统,其中所述捕获触发硬件逻辑和所述硬件引擎集成在一起或者作为单独的逻辑和所述硬件引擎相连接。
22.如权利要求21所述的用于进行性能分析的系统,其中所述捕获触发硬件逻辑被配置为对于所述多帧视频序列的一个或者多个所选择的帧捕获所述入栈缓冲器的内容。
23.如权利要求20所述的用于进行性能分析的系统,其中如果已经对应用程序进行修改,则对所述入栈缓冲器的改变和对具有改变的入栈缓冲器的重新执行模拟所述应用程序的性能。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US11/713,347 | 2007-03-02 | ||
US11/713,347 US8448067B2 (en) | 2006-12-07 | 2007-03-02 | Graphics command management tool and methods for analyzing performance for command changes before application modification |
PCT/US2008/002744 WO2008127517A1 (en) | 2007-03-02 | 2008-02-28 | Graphics command management tool and methods for analyzing performance for command changes before application modification |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101675453A CN101675453A (zh) | 2010-03-17 |
CN101675453B true CN101675453B (zh) | 2012-06-27 |
Family
ID=39864229
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2008800069762A Active CN101675453B (zh) | 2007-03-02 | 2008-02-28 | 用于分析对于应用程序修改前命令改变的性能的图形命令管理工具和方法 |
Country Status (5)
Country | Link |
---|---|
US (2) | US8448067B2 (zh) |
EP (1) | EP2126838B1 (zh) |
JP (1) | JP5123323B2 (zh) |
CN (1) | CN101675453B (zh) |
WO (1) | WO2008127517A1 (zh) |
Families Citing this family (78)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9549043B1 (en) | 2004-07-20 | 2017-01-17 | Conviva Inc. | Allocating resources in a content delivery environment |
US10862994B1 (en) | 2006-11-15 | 2020-12-08 | Conviva Inc. | Facilitating client decisions |
US8751605B1 (en) | 2006-11-15 | 2014-06-10 | Conviva Inc. | Accounting for network traffic |
US8566436B1 (en) | 2006-11-15 | 2013-10-22 | Conviva Inc. | Data client |
US8874725B1 (en) | 2006-11-15 | 2014-10-28 | Conviva Inc. | Monitoring the performance of a content player |
US9264780B1 (en) | 2006-11-15 | 2016-02-16 | Conviva Inc. | Managing synchronized data requests in a content delivery network |
US9013494B2 (en) * | 2006-12-07 | 2015-04-21 | Sony Computer Entertainment Inc. | Heads-up-display software development tool |
US8276129B1 (en) * | 2007-08-13 | 2012-09-25 | Nvidia Corporation | Methods and systems for in-place shader debugging and performance tuning |
US7793150B1 (en) * | 2007-10-16 | 2010-09-07 | Nvidia Corporation | System, method, and computer program product for saving an unprocessed portion of a push buffer in response to an error |
US8698825B1 (en) * | 2007-11-21 | 2014-04-15 | Nvidia Corporation | System, method, and computer program product for optimizing use of a vertex cache |
US20090322768A1 (en) * | 2008-06-25 | 2009-12-31 | Lalonde Paul A | Compile-time type-safe composable state objects |
EP2304581A4 (en) * | 2008-06-26 | 2014-01-08 | Hewlett Packard Development Co | SELF-ADMINISTRATION OF LOCAL OPERATORS SENT FROM THE FOLLOWING |
US8755515B1 (en) | 2008-09-29 | 2014-06-17 | Wai Wu | Parallel signal processing system and method |
US8402494B1 (en) | 2009-03-23 | 2013-03-19 | Conviva Inc. | Switching content |
US8471858B2 (en) * | 2009-06-02 | 2013-06-25 | Qualcomm Incorporated | Displaying a visual representation of performance metrics for rendered graphics elements |
US20100332987A1 (en) * | 2009-06-26 | 2010-12-30 | Cormack Christopher J | Graphics analysis techniques |
US8624907B2 (en) * | 2009-06-26 | 2014-01-07 | Intel Corporation | Graphics analysis techniques |
US8581916B2 (en) * | 2009-06-26 | 2013-11-12 | Intel Corporation | Graphics analysis techniques |
US9203913B1 (en) * | 2009-07-20 | 2015-12-01 | Conviva Inc. | Monitoring the performance of a content player |
US8423974B2 (en) * | 2009-08-12 | 2013-04-16 | Apple Inc. | System and method for call replacement |
US8692829B2 (en) * | 2009-10-05 | 2014-04-08 | Nvidia Corporation | Calculation of plane equations after determination of Z-buffer visibility |
EP2489208B1 (en) * | 2009-10-15 | 2024-08-07 | InterDigital VC Holdings, Inc. | Method and apparatus for encoding a mesh model, encoded mesh model, and method and apparatus for decoding a mesh model |
US9378612B2 (en) * | 2010-01-08 | 2016-06-28 | Bally Gaming, Inc. | Morphing geometric structures of wagering game objects |
US9349154B2 (en) * | 2010-04-05 | 2016-05-24 | Nvidia Corporation | Bindless texture and image API |
JP5242628B2 (ja) * | 2010-05-06 | 2013-07-24 | 株式会社スクウェア・エニックス | ゲーム開発におけるプログラマーの生産性を向上させる高級言語 |
US8933948B2 (en) * | 2010-10-01 | 2015-01-13 | Apple Inc. | Graphics system which utilizes fine grained analysis to determine performance issues |
US8614716B2 (en) | 2010-10-01 | 2013-12-24 | Apple Inc. | Recording a command stream with a rich encoding format for capture and playback of graphics content |
US8516578B1 (en) | 2010-12-22 | 2013-08-20 | Google Inc. | Vertex array access bounds checking |
US10631246B2 (en) | 2011-02-14 | 2020-04-21 | Microsoft Technology Licensing, Llc | Task switching on mobile devices |
US8711166B1 (en) | 2011-02-25 | 2014-04-29 | Google Inc. | Simulating non power of two texture behavior |
US8416250B1 (en) * | 2011-05-13 | 2013-04-09 | Google Inc. | Simulating vertex attribute zero |
US9117302B2 (en) | 2011-11-30 | 2015-08-25 | Qualcomm Incorporated | Switching between direct rendering and binning in graphics processing using an overdraw tracker |
JP5436526B2 (ja) * | 2011-12-06 | 2014-03-05 | 株式会社ソニー・コンピュータエンタテインメント | グラフィックスコマンド生成装置、グラフィックスコマンド生成方法、サーバ装置、およびクライアント装置 |
US10148716B1 (en) | 2012-04-09 | 2018-12-04 | Conviva Inc. | Dynamic generation of video manifest files |
US10182096B1 (en) | 2012-09-05 | 2019-01-15 | Conviva Inc. | Virtual resource locator |
US9246965B1 (en) | 2012-09-05 | 2016-01-26 | Conviva Inc. | Source assignment based on network partitioning |
JP5977147B2 (ja) | 2012-11-05 | 2016-08-24 | 株式会社ソニー・インタラクティブエンタテインメント | 情報処理装置および入力装置 |
US9836879B2 (en) * | 2013-04-16 | 2017-12-05 | Autodesk, Inc. | Mesh skinning technique |
US9286649B2 (en) * | 2013-05-31 | 2016-03-15 | Qualcomm Incorporated | Conditional execution of rendering commands based on per bin visibility information with added inline operations |
US10013732B2 (en) * | 2013-06-28 | 2018-07-03 | Lockheed Martin Corporation | Externally directed GPU data |
US10843084B2 (en) | 2013-10-30 | 2020-11-24 | Nvidia Corporation | Method and system for gathering time-varying metrics |
KR102147357B1 (ko) * | 2013-11-06 | 2020-08-24 | 삼성전자 주식회사 | 커맨드들을 관리하는 장치 및 방법 |
US10878770B2 (en) | 2013-12-02 | 2020-12-29 | Nvidia Corporation | Method and system for customizing optimal settings using end-user preferences |
US20150265921A1 (en) * | 2014-03-21 | 2015-09-24 | Google Inc. | Game-Aware Compression Algorithms for Efficient Video Uploads |
CN103853562B (zh) * | 2014-03-26 | 2017-02-15 | 北京奇艺世纪科技有限公司 | 一种视频帧渲染方法及装置 |
US9760968B2 (en) | 2014-05-09 | 2017-09-12 | Samsung Electronics Co., Ltd. | Reduction of graphical processing through coverage testing |
US10346941B2 (en) * | 2014-05-30 | 2019-07-09 | Apple Inc. | System and method for unified application programming interface and model |
US9645916B2 (en) | 2014-05-30 | 2017-05-09 | Apple Inc. | Performance testing for blocks of code |
US9842428B2 (en) | 2014-06-27 | 2017-12-12 | Samsung Electronics Co., Ltd. | Dynamically optimized deferred rendering pipeline |
US9799088B2 (en) * | 2014-08-21 | 2017-10-24 | Qualcomm Incorporated | Render target command reordering in graphics processing |
US9799091B2 (en) * | 2014-11-20 | 2017-10-24 | Intel Corporation | Apparatus and method for efficient frame-to-frame coherency exploitation for sort-last architectures |
US10305955B1 (en) | 2014-12-08 | 2019-05-28 | Conviva Inc. | Streaming decision in the cloud |
US10178043B1 (en) | 2014-12-08 | 2019-01-08 | Conviva Inc. | Dynamic bitrate range selection in the cloud for optimized video streaming |
US20160224258A1 (en) * | 2015-02-02 | 2016-08-04 | Microsoft Technology Licensing, Llc | Generating computer programs for use with computers having processors with dedicated memory |
US9846607B2 (en) | 2015-03-12 | 2017-12-19 | Nvidia Corporation | Method and system for associating crash reports with end user analytics |
JP6146440B2 (ja) * | 2015-07-14 | 2017-06-14 | カシオ計算機株式会社 | 表示端末装置及びプログラム |
US11403099B2 (en) | 2015-07-27 | 2022-08-02 | Sony Interactive Entertainment LLC | Backward compatibility by restriction of hardware resources |
CN105427366B (zh) * | 2015-11-11 | 2018-07-27 | 广州华多网络科技有限公司 | 一种图像渲染方法和图像渲染系统 |
US10884723B2 (en) * | 2016-01-21 | 2021-01-05 | Facebook, Inc. | Modification of software behavior in run time |
US10303488B2 (en) * | 2016-03-30 | 2019-05-28 | Sony Interactive Entertainment Inc. | Real-time adjustment of application-specific operating parameters for backwards compatibility |
US10915333B2 (en) * | 2016-03-30 | 2021-02-09 | Sony Interactive Entertainment Inc. | Deriving application-specific operating parameters for backwards compatiblity |
US10282889B2 (en) | 2016-11-29 | 2019-05-07 | Samsung Electronics Co., Ltd. | Vertex attribute compression and decompression in hardware |
CN107193735A (zh) * | 2017-05-17 | 2017-09-22 | 武汉联影医疗科技有限公司 | 软件测试方法及系统 |
US10521321B2 (en) | 2017-12-21 | 2019-12-31 | Qualcomm Incorporated | Diverse redundancy approach for safety critical applications |
GB2571271B (en) * | 2018-02-21 | 2020-02-26 | Advanced Risc Mach Ltd | Graphics processing |
GB2571306A (en) * | 2018-02-23 | 2019-08-28 | Sony Interactive Entertainment Europe Ltd | Video recording and playback systems and methods |
US11043028B2 (en) * | 2018-11-02 | 2021-06-22 | Nvidia Corporation | Reducing level of detail of a polygon mesh to decrease a complexity of rendered geometry within a scene |
CN111724293B (zh) * | 2019-03-22 | 2023-07-28 | 华为技术有限公司 | 图像渲染方法及装置、电子设备 |
JP7395931B2 (ja) * | 2019-10-04 | 2023-12-12 | 富士フイルムビジネスイノベーション株式会社 | 表示制御装置、及びコンピュータプログラム |
CN111144057B (zh) * | 2019-12-30 | 2023-09-15 | 西安芯瞳半导体技术有限公司 | 图形渲染管线的性能分析方法、装置及计算机存储介质 |
CN111240793B (zh) * | 2020-02-13 | 2024-01-09 | 抖音视界有限公司 | cell预渲染的方法、装置、电子设备以及计算机可读介质 |
US11276206B2 (en) | 2020-06-25 | 2022-03-15 | Facebook Technologies, Llc | Augmented reality effect resource sharing |
US11348199B2 (en) | 2020-07-06 | 2022-05-31 | Roku, Inc. | Modifying graphics rendering by transcoding a serialized command stream |
US11321804B1 (en) * | 2020-10-15 | 2022-05-03 | Qualcomm Incorporated | Techniques for flexible rendering operations |
CN112691385B (zh) * | 2020-12-25 | 2022-07-01 | 北京达佳互联信息技术有限公司 | 出装信息获取方法、装置、电子设备、服务器及存储介质 |
CN113590220B (zh) * | 2021-08-02 | 2024-07-23 | 上海米哈游璃月科技有限公司 | 动作资源配置信息的检测方法、装置、电子设备及介质 |
CN113342703B (zh) * | 2021-08-06 | 2021-10-29 | 西安芯瞳半导体技术有限公司 | 一种渲染效果实时调试方法、装置、开发设备及存储介质 |
US12050905B2 (en) | 2022-06-14 | 2024-07-30 | Microsoft Technology Licensing, Llc | Video-based progress tracker for mobile application development |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7088374B2 (en) * | 2003-03-27 | 2006-08-08 | Microsoft Corporation | System and method for managing visual structure, timing, and animation in a graphics processing system |
Family Cites Families (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP3339317B2 (ja) * | 1996-07-24 | 2002-10-28 | 日本電気株式会社 | 動的情報利用型プログラム最適化装置 |
AU2680699A (en) * | 1998-02-17 | 1999-08-30 | Sun Microsystems, Inc. | Estimating graphics system performance for polygons |
US7227511B2 (en) | 2000-04-24 | 2007-06-05 | Microsoft Corporation | Method for activating an application in context on a remote input/output device |
US6917373B2 (en) * | 2000-12-28 | 2005-07-12 | Microsoft Corporation | Context sensitive labels for an electronic device |
US6948127B1 (en) * | 2001-12-10 | 2005-09-20 | Cisco Technology, Inc. | Interface for compressed video data analysis |
KR20060052717A (ko) | 2003-06-27 | 2006-05-19 | 소프트스코프 엘엘씨 | 가상 데스크 탑, 프로그램 예의 배열을 리콜링하는 방법, 애플리케이션 예를 관리하는 방법 및 애플리케이션을 관리하는 방법 |
US7095416B1 (en) | 2003-09-22 | 2006-08-22 | Microsoft Corporation | Facilitating performance analysis for processing |
US20050200627A1 (en) * | 2004-03-11 | 2005-09-15 | Intel Corporation | Techniques for graphics profiling |
JP4700392B2 (ja) * | 2005-04-11 | 2011-06-15 | 株式会社ソニー・コンピュータエンタテインメント | 情報処理装置、コンピュータの制御方法及びプログラム |
-
2007
- 2007-03-02 US US11/713,347 patent/US8448067B2/en active Active
-
2008
- 2008-02-28 WO PCT/US2008/002744 patent/WO2008127517A1/en active Application Filing
- 2008-02-28 CN CN2008800069762A patent/CN101675453B/zh active Active
- 2008-02-28 EP EP08726306.7A patent/EP2126838B1/en active Active
- 2008-02-28 JP JP2009552702A patent/JP5123323B2/ja active Active
-
2013
- 2013-04-16 US US13/864,066 patent/US9678616B2/en active Active
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7088374B2 (en) * | 2003-03-27 | 2006-08-08 | Microsoft Corporation | System and method for managing visual structure, timing, and animation in a graphics processing system |
Also Published As
Publication number | Publication date |
---|---|
US20080141131A1 (en) | 2008-06-12 |
JP5123323B2 (ja) | 2013-01-23 |
US9678616B2 (en) | 2017-06-13 |
EP2126838A1 (en) | 2009-12-02 |
US20130275874A1 (en) | 2013-10-17 |
CN101675453A (zh) | 2010-03-17 |
US8448067B2 (en) | 2013-05-21 |
WO2008127517A1 (en) | 2008-10-23 |
EP2126838B1 (en) | 2019-09-04 |
EP2126838A4 (en) | 2014-01-08 |
JP2010520555A (ja) | 2010-06-10 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101675453B (zh) | 用于分析对于应用程序修改前命令改变的性能的图形命令管理工具和方法 | |
EP2438576B1 (en) | Displaying a visual representation of performance metrics for rendered graphics elements | |
US7095416B1 (en) | Facilitating performance analysis for processing | |
KR100909153B1 (ko) | 그래픽 파이프라인 서브유닛을 디버깅하기 위한 방법 및시스템 | |
CN100354891C (zh) | 一种改良的模板阴影锥操作的方法与装置 | |
CN102089786B (zh) | 在性能分析期间将图形指令映射到相关联的图形数据的方法和设备 | |
US8159491B2 (en) | Apparatus and method for tracing activities of a shader program executed on shader circuitry of a data processing apparatus | |
US20090125854A1 (en) | Automated generation of theoretical performance analysis based upon workload and design configuration | |
JP4125673B2 (ja) | 二次元あるいは三次元の幾何学的実体に結合したデータのエクスポートシステム | |
Hurter | Image-based visualization: Interactive multidimensional data exploration | |
JPH10105435A (ja) | ソフトウェア・ライブラリのオペレーションに関する情報を提供する方法 | |
KR101286938B1 (ko) | 그래픽스 이미징을 위한 파티셔닝-기반 성능 분석 | |
Iyer et al. | GPU debugging and Profiling with NVIDIA Parallel Nsight | |
Struckmeier | LeagueAI: Improving object detector performance and flexibility through automatically generated training data and domain randomization | |
KR101239965B1 (ko) | 렌더링 장치 및 방법 | |
Davies et al. | Visualizing Causality | |
McAnlis et al. | Optimizing WebGL Usage: Don Olmstead, Software Engineer, Sony Network Entertainment | |
Moreland et al. | Large Scale Visualization with ParaView (slides). |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
ASS | Succession or assignment of patent right |
Owner name: SONY COMPUTER ENTERTAINMENT AMERICA CO., LTD. Free format text: FORMER OWNER: SONY COMPUTER AMUSEMENT AMERICA INC Effective date: 20110307 |
|
C41 | Transfer of patent application or patent right or utility model | ||
TA01 | Transfer of patent application right |
Effective date of registration: 20110307 Address after: American California Applicant after: Sony Comp Entertainment Us Address before: American California Applicant before: Sony Computer Amusement America Inc |
|
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |