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. DOS下常用网络命令技巧

    DOS,即使对于许多自称了解计算机的人而言,也是一个比较陌生的词汇.然而,在网络管理过程中,DOS命令却是一个不可逾越的障碍,几乎所有的网络命令都运行在DOS界面.对初级用户而言,掌握一些常用网络命令 ...

  2. SRAM的读写操作

    自己写的SRAM的程序,主要在于实用性,适应工作的工程需要.使用芯片为: 芯片时序图为: 代码: /********************************Copyright********* ...

  3. Java Hour 14 多线程基础

    有句名言,叫做10000小时成为某一个领域的专家.姑且不辩论这句话是否正确,让我们到达10000小时的时候再回头来看吧. 本文作者Java 现经验约为13 Hour,请各位不吝赐教. 多线程 这个是基 ...

  4. hdu 1166 线段树单点更新

    等线段树复习完再做个总结 1101 2 3 4 5 6 7 8 9 10Query 1 3Add 3 6Query 2 7Sub 10 2Add 6 3Query 3 10End Case 1:633 ...

  5. Java线程面试题 Top 50

    转自:http://www.importnew.com/12773.html 不管你是新程序员还是老手,你一定在面试中遇到过有关线程的问题.Java语言一个重要的特点就是内置了对并发的支持,让Java ...

  6. Word2013对公式处理:样式、自动编号、交叉引用

    因快写毕业论文,专门研究了一下Word2013对公式的处理,有一点小心得,记在这里. 文章中公式展示的预期效果是:公式居中,尾端有编号,同时在文章中可以实现引用.实现该效果有很多方法,这里就说一种,其 ...

  7. 关于Android开发中的证书和密钥等问题

    关于Android开发中的证书和密钥等问题 引言 除了Android发布应用签名时需要用到证书外,在进行google Map Api开发和Facebook SDK API开发等时都需要申请API Ke ...

  8. 电赛初探(二)——语音采集回放系统

    一.系统结构 1.基本要求 (1)话音/功率放大器增益均可调: (2)带通滤波器:通带为300Hz-3.4kHz : (3)ADC:采样频率f s=8kHz,字长不小于8位: (4)语音存储时间≥10 ...

  9. 对于java中的变量问题

    基本类型的变量如果是临时变量,只要定义了,就会分配内存空间,不管是否被赋值:如果是作为对象的属性出现,只要该对象不实例化,就不会分配内存空间.一个完整的Java程序运行过程会涉及以下内存区域:1.寄存 ...

  10. WinForm窗体间传值

    1.通过构造函数 特点:传值是单向的(不可以互相传值),实现简单 实现代码如下: 在窗体Form2中 int value1; string value2; public Form2 ( int val ...