目 录
第 1章 Vulkan概述 1
1.1 引言 1
1.2 实例、设备和队列 2
1.2.1 Vulkan实例 3
1.2.2 Vulkan物理设备 5
1.2.3 物理设备内存 8
1.2.4 设备队列 9
1.2.5 创建逻辑设备 11
1.3 对象类型和函数约定 14
1.4 管理内存 14
1.5 Vulkan里的多线程 15
1.6 数学概念 16
1.6.1 向量和矩阵 16
1.6.2 坐标系 17
1.7 增强Vulkan 17
1.7.1 层 17
1.7.2 扩展 20
1.8 彻底地关闭应用程序 23
1.9 总结 24
第 2章 内存和资源 25
2.1 主机内存管理 25
2.2 资源 30
2.2.1 缓冲区 31
2.2.2 格式和支持 33
2.2.3 图像 36
2.2.4 资源视图 46
2.2.5 销毁资源 52
2.3 设备内存管理 53
2.3.1 分配设备内存 54
2.3.2 CPU访问设备内存 56
2.3.3 绑定内存到资源上 59
2.3.4 稀疏资源 62
2.4 总结 68
第3章 队列和命令 69
3.1 设备队列 69
3.2 创建命令缓冲区 71
3.3 记录命令 73
3.4 回收利用命令缓冲区 76
3.5 命令的提交 77
3.6 总结 79
第4章 移动数据 80
4.1 管理资源状态 81
4.1.1 管线屏障 81
4.1.2 全局内存屏障 83
4.1.3 缓冲区内存屏障 86
4.1.4 图像内存屏障 87
4.2 清除和填充缓冲区 89
4.3 清空和填充图像 90
4.4 复制图像数据 92
4.5 复制压缩图像数据 96
4.6 拉伸图像 97
4.7 总结 98
第5章 展示 99
5.1 展示扩展 99
5.2 展示表面 100
5.2.1 在微软的Windows上展示 100
5.2.2 在基于Xlib的平台上展示 101
5.2.3 在Xcb上展示 102
5.3 交换链 103
5.4 全屏表面 110
5.5 执行展示 115
5.6 清除 117
5.7 总结 118
第6章 着色器和管线 119
6.1 GLSL概述 120
6.2 SPIR-V概述 122
6.2.1 如何表示SPIR-V 122
6.2.2 把SPIR-V传递给Vulkan 125
6.3 管线 126
6.3.1 计算管线 126
6.3.2 创建管线 127
6.3.3 特化常量 128
6.3.4 加速管线的创建 131
6.3.5 绑定管线 134
6.4 执行工作 135
6.5 在着色器中访问资源 136
6.5.1 描述符集 136
6.5.2 绑定资源到描述符集 145
6.5.3 绑定描述符集 150
6.5.4 uniform、纹素和存储
缓冲区 151
6.5.5 推送常量 154
6.5.6 采样图像 157
6.6 总结 162
第7章 图形管线 163
7.1 逻辑图形管线 163
7.2 渲染通道 166
7.3 帧缓冲区 172
7.4 创建一个简单的图形管线 174
7.4.1 图形着色器阶段 175
7.4.2 顶点输入状态 179
7.4.3 输入组装 183
7.4.4 细分状态 186
7.4.5 视口状态 187
7.4.6 光栅化状态 188
7.4.7 多重采样状态 190
7.4.8 深度和模板状态 190
7.4.9 颜色混合状态 191
7.5 动态状态 193
7.6 总结 195
第8章 绘制 196
8.1 准备绘制 197
8.2 顶点数据 199
8.3 索引绘制 200
8.3.1 只用索引的绘制 204
8.3.2 重置索引 205
8.4 实例化 206
8.5 间接绘制 208
8.6 总结 211
第9章 几何体处理 212
9.1 表面细分 212
9.1.1 表面细分配置 213
9.1.2 表面细分相关变量 218
9.1.3 表面细分示例:置换贴图 225
9.2 几何着色器 229
9.2.1 图元裁剪 235
9.2.2 几何着色器实例化 236
9.3 可编程顶点尺寸 237
9.4 线的宽度以及光栅化 239
9.5 用户裁剪和剔除 241
9.6 视口变换 247
9.7 总结 250
第 10章 片段处理 251
10.1 裁剪测试 251
10.2 深度和模板测试 253
10.2.1 深度测试 254
10.2.2 模板测试 258
10.2.3 早期片段测试 259
10.3 多重采样渲染 260
10.3.1 采样率着色 262
10.3.2 多重采样解析 263
10.4 逻辑操作 264
10.5 片段着色器输出 266
10.6 颜色混合 269
10.7 总结 271
第 11章 同步 272
11.1 栅栏 273
11.2 事件 279
11.3 信号量 282
11.4 总结 285
第 12章 回读数据 286
12.1 查询 286
12.1.1 执行查询 288
12.1.2 计时查询 293
12.2 通过主机读取数据 294
12.3 总结 295
第 13章 多通道渲染 296
13.1 输入附件 297
13.2 附件内容 303
13.2.1 附件的初始化 303
13.2.2 渲染区域 305
13.2.3 保存附件内容 306
13.3 副命令缓冲区 313
13.4 总结 315
附录A Vulkan函数 316
词汇表 318