http://www.cnblogs.com/cproom/archive/2006/11/13/559287.html

NVPerfHUD是一个很好的3D程序调试工具,它是NVPerfKit的一部分,由Nvidia开发,在写D3D程序时(它不能查看OpenGL程序)加入简单的语句就可以利用NVPerfHUD来调试察看显卡的工作情况了。

这里下载其安装文件(包含文档),文档里有详细的使用说明。

最近在使用时,感觉越来越方便,所以在这里说一下最近用的最多的两个功能。

1. 用Frame Debugger来查看单独一帧的渲染情况。

(1)       在Frame Debugger中可以看到多边形的渲染顺序、每次渲染(如DrawIndexedPrimtives)命令所使用的纹理、渲染的目标(后缓存还是纹理等)、渲染命令的调用次数等。

(2)       这些内容通常都是我们需要的,比如我们在使用引擎时,引擎通常会对物体和材质的渲染顺序进行排序,就导致我们的颜色混合不能出现预期的效果,这时候通过FrameDebugger来查看物体及其材质的各个pass是按如何的顺序进行渲染的,就可以查出问题可能的原因,也帮助我们了解了引擎内部的工作原理。

(3)       而像纹理等,我们可以查看其是否是我们所期望的。我们将鼠标放在FrameDebugger窗口中的纹理上,就可显示出鼠标所在位置的纹理的值(如RGBA值),对于一些实时渲染出的纹理或者动态写入数据的纹理,这样尤其有用。

(4)       在Advanced页面中还能看到所使用的顶点和片元shader程序。我们可以查看传给着色程序的参数的实际值,以确定其是否正确。

2. 确定性能瓶颈

对不是瓶颈的部分做优化时不会提高程序的性能的,所以要优化程序得先查出性能的瓶颈在哪里。如上图,通常确定性能瓶颈的顺序是从开始渲染管线的最末段开始进行分析,当然如果你大概能猜到瓶颈在哪里,你可以直接从那个部分查起。

(1)    在程序中将颜色缓存从32位改为16位,查看FPS值是否增加,以确定瓶颈是否因为帧真缓存带宽引起。

(2)    在NVPerfHUD中按下Ctrl+T将纹理强行设置为2*2大小,查看FPS值是否增加,以确定瓶颈是否因为纹理带宽引起。

(3)    在NVPerfHUD中按下Ctrl+1、Ctrl+2……Ctrl+9,NVPerfHUD会自动强行简化各个Profile的Pixel Shader程序,查看FPS值是否增加,以确定瓶颈是否因为复杂的像素程序引起。

(4)    在NVPerfHUD中按下Ctrl+V去掉顶点单元,查看FPS值是否增加,以确定瓶颈是否因为顶点处理引起,包括顶点/索引缓存的传输、Vertex Shader程序和无效的缓存Lock。

(5)    在程序中更改顶点格式的大小,查看FPS值是否增加,如果增加则瓶颈在顶点/索引缓存的传输。

(6)    可以利用Ctrl+N去掉GPU的工作,也就是这个时候GPU的计算速度无限快,如果FPS增加则瓶颈在CPU上。

NVPerfHUD的更多相关文章

  1. 3D场景优化

    一) 有效的性能评测 对于任何一个3D应用程序来说,追求场景画面真实感是一个无止尽的目标,其结果就是让我们的场景越来越复杂,模型更加精细,这必然给图形硬件带来极大的负荷以致于无法达到实时绘制帧率.因此 ...

  2. [Axiom3D]第一个Axiom3D程序

    Axiom3D程序的基本渲染流程 #region Namespace Declarations using System; using System.Linq; using Axiom.Core; u ...

随机推荐

  1. CUDA学习笔记(三)——CUDA内存

    转自:http://blog.sina.com.cn/s/blog_48b9e1f90100fm5f.html 结合lec07_intro_cuda.pptx学习 内存类型 CGMA: Compute ...

  2. WebService之CXF框架

    本文主要包括以下内容 ant工具的使用 利用cxf实现webservice cxf与spring整合 ajax访问webservice ant 工具 1.为什么要用到ant这个工具呢? Ant做为一种 ...

  3. 一个非常简单的返回局部字符数组的C语言程序, 请问其输出结果?

    以下是该无聊的程序: #include <stdio.h> #include <string.h> char* get_str() {     int x[10];     c ...

  4. Android常用布局

    FrameLayout(框架布局):从屏幕的左上角开始显示对象,一个覆盖一个,主要用于选项卡视图和图像切换器.# 所有的组件都放在屏幕的左上角,并且以层叠进行显示. LinearLayout(线性布局 ...

  5. windows 8 系统部署IIS并发布网站

    企业用户可以在已经部署了windows 8 的电脑中通过部署IIS服务器来发布自己公司的企业内部网站实现对企业的网络办公的管理工作. 准备篇 IIS的添加和运行 一.IIS的添加 1.请进入“控制面板 ...

  6. OGRE: "OgreOverlaySystem.h": No such file or directory

    这两天学习OGRE,遇到"OgreOverlaySystem.h": No such file or directory的错误. 这是由于OGRE提供的例子过老,和SDK版本不一致 ...

  7. vnc使用

    使用rpm –qa vnc命令如果收到如下信息说明已经安装了vncserver, [root@localhost: ~]#rpm -qa |grep vnc gtk-vnc-python--.el5 ...

  8. HDU 1074 (状态压缩DP)

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1074 题目大意:有N个作业(N<=15),每个作业需耗时,有一个截止期限.超期多少天就要扣多少 ...

  9. Android 第三方

    把优酷.土豆等取出它们真是的视频播放地址:http://vparser.com/ volley 项目地址 https://github.com/smanikandan14/Volley-demo (1 ...

  10. sqlserver linkserver

    --创建链接服务器exec sp_addlinkedserver    'srv_lnk','','SQLOLEDB','远程服务器名或ip地址'exec sp_addlinkedsrvlogin ' ...