面向Stage3D开发者的强大工具——Intel GPA

85 篇文章 0 订阅
57 篇文章 0 订阅

你好!在这篇文章中,我想向Flash Stage3D的开发者展示如何利用一个有用的工具:Intel GPA



通俗的说

Intel GPA是一个用于测试产品性能和质量的工具例如,这个工具可以运行游戏或3D应用程序中用来看看它们是如何工作的。利用这新的技术和构建巧妙的解决方案,我可以随心所欲的做一些测试。关于这一点,我很高兴介绍与Intel GPA相关的几篇文章:“LA Noire”“UnrealEngine”
 

 

当你开发新的东西的时候,你需要一些工具来显示比如描绘指令(drawcalls)、render states(渲染状态)、sampler states(采样状态),并查看性能。这里的Intel GPA,就是一个很棒的可以让你做出更有效决策的工具。

 

有了这个工具,你可以很容易分析图形管线,发现最耗费资源的描绘指令(drawcalls),看到DirectX API调用,改变状态,显示像素的历史记录,与renderTargets工作,查看到详细的整个框架或选定部分的描绘指令(drawcalls),改变纹理,着色器,甚至着色器常量!看到舞台透视,性能测试,整个框架和许多其他的细节部分来了解应用程序的性能。

 

当您使用英特尔GPA,你需要知道“erg”。术语“erg”是指任何可能呈现的像素,其中包括绘制调用,清除,和其他在该框架内的图形API调用。

模板和深度缓冲区

 

我在CSG一个工作在GPU上的例子(我不打算共享这个资源),因为建立这样一个孔需要最少5个 描绘指令(drawcalls)(孔用4个drawcalls,1个用来正常的[normalize]进行深度缓冲)。在我的场景的渲染管线中你很难写出正常的[normalize]深度缓冲区。



在我下一个渲染测试中: 我使用了IntelGPA查看深度和模板缓存及渲染状态:比如孔有没有深入进去。这里我清除了深度缓冲,并让其深入到墙里面。


 

API日志


 

 

API日志显示了你设置了选择条目的所有Microsoft DirectX API的操作概要。你可以看到是什么操作占用了大量的计算资源。
 

有个有意思的情况,我一整天都在试图修复一个bug,问题是,在我设置drawcall(上传程序,上传索引和顶点缓冲区,纹理)后,我并没有看到我屏幕上出现编译后的结果。我利用IntelGPA侦测到我的drawcall没有被DirectX API调用,随后我突然想到了enableErrorChaking属性。我的drawcall调用失败是因为在渲染的时候enableErrorChaking被设置成了false,这样我就不能得到过程中的反馈。最后,我终于验证出,我的顶点缓冲区是错误的。



优化

 

1)找到最消耗资源的drawcalls

 


2)运行试验2×2纹理 如果你在应用程序中使用的纹理贴图,那么给模型覆盖2×2的纹理,可以确定潜在的性能瓶颈。你也可以用简单的2×2像素的纹理取代一个场景中的所有的纹理。通常情况下,英特尔GPA帧分析器使用一个简单的半色调或彩色位图显示此选项。如果使用此中纹理覆盖模式,可以大大提高了帧速率,那么GPU可能会从CPU直接载入纹理贴图,而不是使用缓存中的版本。如果场景的纹理贴图太大,可以考虑降低其中的纹理贴图的大小来适合GPU的高速缓存(应该是指的显存)。


1×1 Scissor Rect
1×1 Scissor Rect矩形覆盖模式是由DirectX * API控制的。但是,执行此覆盖模式高度依赖于特定的图形配置,特别在像素着色器阶段之前或之后。


简单的像素着色器
 

 

在你的框架中,简单的Pixel Shader为每一个选定的erg创建一个简单的像素着色器。而取代了一个色彩渲染。如果帧速率显着降低,那您可能要进行进一步的分析着色器,看看是否可以减少渲染时间而不影响你的场景的视觉质量。用这个简单的像素着色器覆盖你的原始场景中的像素着色器实际上可能会导致渲染时间更慢,这似乎是违反直觉的,但你要意识到,现在所有的ergs被使用像素着色器,相对于固定功能的着色器所使用的一个erg,没有一个明确的像素着色器与像素着色器,可能反而会比较慢。


 

禁用Drawcalls(S)


使用此选项可将所选erg被呈现,此选项被用来测试场景效率。


3)修改着色器代码,还可以看到着色器常量!
例如,通过m4x4的顶点着色器


 

4)确定纹理带宽是性能的瓶颈



 

如果在选择erg的时候减少mip的层次就可以显著的降低渲染时间,然后这时候纹理带宽可能就成了一个主要的瓶颈。如果视觉质量的降低是在可接受范围的话,你还是可以用精度低一些的材质。如果在使用较小的mip层次后,视觉差异很小或根本看不出来,那么你就是这个场景上浪费了纹理带宽,你可以重新使用较低级别的纹理来节约纹理内存。这通常在几何形状变简单(应该是LOD,多层次细节)的时候有用。硬件(在标准的过滤模式下)总是会选择最匹配的屏幕显示像素,所以,如果所呈现的几何形状是显著小于分辨率的纹理的话,顶层的mip将不会被使用。(老外絮絮叨叨的讲了半天,其实就是说的模型的LOD和材质的mipmap结合使用,可以节省显存一类的资源。用了Intel的这个工具,可以让你更精确的控制mipmap的精度,因为你可以立刻在里面改变精度而查看效果)
 

 

5)尽量减少透支



 

如果你看到两个erg影响的像素是同一类型的,你可能通过消除其中之一来提高性能。选择它,然后选中“禁用ERG(s)复选框”标签,来看看删除erg能获得多少性能。


6)使用英特尔®GPA系统实时分析器


在引擎中的粒子系统和动态几何(dynamic geometry)工作时,我一直使用这个功能,利用他我可以看到:

资源创建,索引缓冲创建,创建顶点缓冲区,纹理创建,创建着色器

锁定和锁定时间(你所测试的引擎中的功能)

每帧中setRenderTarget方法的调用


如何开始在Stage3D中使用

1)下载英特尔GPA
它包括:检测器,帧分析,平台分析,系统的分。
2)运行英特尔®GPA,并启用“自动检测启动应用程序”首选项
3)编译并运行你的swf文件,你会看到:

 

 

按下Ctrl + F1切换模式,你会看到:

 

 

你可以通过开关来进行系统分析和运行时的性能变化分析

 

4)捕捉画面,按下Ctrl + Shift + C

5)现在你可以关闭您的应用程序,运行帧分析

6)选择您的选择的帧,并开始

7)使用在线帮助

 

感谢您的阅读!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值