V
V
e
e
r
r
s
s
i
i
o
o
n
n
2
2
.
.
2
2
.
.
0
0
N
N
V
V
I
I
D
D
I
I
A
A
图
图
形
形
处
处
理
理
器
器
编
编
程
程
指
指
南
南
中
中
文
文
版
版
本
本
2
2
.
.
2
2
.
.
0
0
注意
所有 NVIDIA 的设计规范、参考公告板、文件、制图、诊断手册、目录及其他文档
(共同或分别简称为“资料”)至发布之日均为准确资料。NVIDIA 对这些资料作任
何明示的、默示的、法定的或其他方式的保证,并明确否认一切默示的不侵权保证、
适销性保证和特殊用途适合性保证。
NVIDIA 公司确信所提供的信息具有准确性和可靠性。但 NVIDIA 公司不对因使用这类
信息所造成的后果负责,也不对因使用这类信息对第三方专利或其他权益造成的侵害
负责。对于 NVIDIA 公司的任何专利或专利权的使用,NVIDIA 公司概不承认任何默示
的、或其他方式的许可。本指南中提到的规范如有变更,恕不通知。NVIDIA 公司的
产品未经 NVIDA 公司书面授权不得用作生命支持设备或系统中的关键部件。
商标
NVIDIA、NVIDIA 标志、GeForce 和 NVIDIA Quadro 是 NVIDIA 公司的注册商标。其
他公司或产品名称可能分别是有关公司各自的商标。
版权
©2004 年 NVIDIA 公司。保留所有权利。
主要修订记录
版本 日期 更改
2.2.0
2004 年 11
月 16 日
增加了法线贴图格式参考说明
增加了 ps_3_0 性能表现的参考说明
增加了“常规参考说明”一章
2.1.0
2004 年 7 月
20 日
增加了“立体开发”一章
2.0.4
2004 年 7 月
15 日
更新了“多对象渲染(MRT)”部分
2.0.3
2004 年 6 月
25 日
增加了“多图形芯片支持”一章
2.0.0
2004 年 6 月
1 日
增加了“NV40(GeForce 6 系列)”的章节
更名为《NVIDIA 图形芯片编程指南》
1.0.0
2003 年 7 月
14 日
《GeForce FX 编程指南》
目录
2
NVIDIA 图形芯片编程指南
3
第 1 章 关于本文档............................................................................................8
1.1. 序言 .........................................................................................8
1.2. 发送反馈意见 ............................................................................9
第 2 章 如何优化应用程序 ................................................................................10
2.1. 进行准确的测试 .......................................................................10
2.2. 发现瓶颈.................................................................................11
2.2.1. 了解瓶颈 11
2.2.2. 基本测试 12
2.2.3. 使用NVPerfHUD软件 13
2.3. 瓶颈:CPU ..............................................................................13
2.4. 瓶颈:GPU .............................................................................15
第 3 章 提升图形芯片性能的相关技巧 ................................................................17
3.1. 技巧目录.................................................................................17
3.2. 批处理 ....................................................................................19
3.2.1. 减少批处理的使用 19
3.3. 顶点着色器..............................................................................20
3.3.1. 使用索引原语调用 20
3.4. 着色器 ....................................................................................20
3.4.1. 选择可以正常工作的最低版本的像素着色器 20
3.4.2. 使用ps_2_a配置文件(Profile)编译像素着色器 21
3.4.3. 选择可以正常工作的精度最低的数据类型 21
3.4.4. 使用代数计算来减少运算量 22
3.4.5. 不要把矢量值放入含有多个内插值的标量部件中 23
3.4.6. 不要编写过于通用的库函数 23
3.4.7. 不要计算标准化矢量的长度 24
3.4.8. 合并恒定常量(Uniform Constant)表达式 24
3.4.9. 不要将恒定参数(Uniform Parameter)用于在像素着色器生命周期
中不发生改变的常量
25
3.4.10. 平衡顶点着色器和像素着色器 25
3.4.11. 如果受到像素着色器的限制,就把可线性化的计算交给顶点着色器完
成
26
3.4.12. 使用标准库函数mul() 26
3.4.13. 用D3DTADDRESS_CLAMP (或 GL_CLAMP_TO_EDGE)代替
saturate()以取得附属纹理坐标(Dependent Texture Coordinates)
26
3.4.14. 首先使用低位内插值 26
3.5. 纹理贴图.................................................................................27
3.5.1. 使用Mipmapping纹理映射 27
3.5.2. 慎用三线过滤和各向异性过滤 27
3.5.3. 用纹理查找代替复杂的函数 27
3.6. 性能表现................................................................................30
3.6.1. 倍速Z-Only和模板渲染 30
3.6.2. Early-Z优化 30
3.6.3. 先规定深度 31
3.6.4. 内存分配 31
3.7. 反锯齿技术..............................................................................31
第 4 章 GeForce 6 系列编程技巧 ......................................................................33
4.1. 支持 3.0 着色器模型 .................................................................33
4.1.1. 3.0 像素着色器 33
4.1.2. 3.0 顶点着色器 34
4.1.3. 动态分支功能 35
4.1.4. 代码维护更简捷 35
4.1.5. 实例功能 36
4.1.6. 小结 36
4.2. sRGB解码功能 ........................................................................36
4.3. 单阿尔法(Alpha)合成 ...........................................................37
4.4. 支持的纹理格式 .......................................................................37
4.5. 浮点纹理.................................................................................38
4.5.1. 局限性 39
4
NVIDIA 图形芯片编程指南
5
4.6. 多渲染目标(MRTs) ..............................................................39
4.7. 顶点纹理贴图 ..........................................................................41
4.8. 总的性能建议 ..........................................................................41
4.9. 法线图 ....................................................................................42
第 5 章 GeForce FX编程技巧 ...........................................................................43
5.1. 顶点着色器..............................................................................43
5.2. 像素着色器的长度....................................................................43
5.3. DirectX专用的像素着色器 .........................................................44
5.4. OpenGL专用的像素着色器 .......................................................44
5.5. 使用 16 位浮点数 .....................................................................45
5.6. 支持的纹理格式 .......................................................................46
5.7. 在DirectX中使用ps_2_x和ps_2_a..............................................47
5.8. 使用浮点数渲染目标.................................................................47
5.9. 法线帖图.................................................................................48
5.10. 新的芯片和架构 .......................................................................48
5.11. 小结 .......................................................................................48
第 6 章 总则 ...................................................................................................51
6.1. 识别图形芯片 ..........................................................................51
6.2. 硬件阴影贴图 ..........................................................................52
第 7 章 NVIDIA SLI与多图形芯片的性能 ............................................................57
7.1. 什么是SLI? .............................................................................57
7.2. 避免CPU成为系统瓶颈.............................................................59
7.3. 默认关闭VSync .......................................................................59
7.4. 延迟限制在最小 2 帧内 .............................................................60
7.5. 在所有帧中完全更新所有渲染目标纹理 ......................................61
7.6. 清除渲染目标和帧缓存 .............................................................61
7.7. 在D3DPOOL-MANAGED中分配顶点缓存...................................62
第 8 章 立体游戏开发 ......................................................................................63