Vulkan 应用开发指南
书籍作者:格拉汉姆·塞勒斯 |
ISBN:9787115506801 |
书籍语言:简体中文 |
连载状态:全集 |
电子书格式:pdf,txt,epub,mobi,azw3 |
下载次数:7735 |
创建日期:2021-02-14 |
发布日期:2021-02-14 |
运行环境:PC/Windows/Linux/Mac/IOS/iPhone/iPad/Kindle/Android/安卓/平板 |
内容简介
本书系统地介绍下一代OpenGL规范Vulkan,揭示了Vulkan的独特性。本书主要内容包括:内存和资源、队列和命令、数据的移动、图像的展示、着色器和管线、图形管线对象、绘制命令、几何体的处理、片段的处理、同步、数据的回读以及多渲染通道等。
本书适合图形程序开发人员、熟悉图形和计算API的程序员阅读,也可供对Vulkan感兴趣的专业人士阅读。
作者简介
格拉汉姆·塞勒斯(Graham Sellers),AMD软件架构师和研究员,负责AMD的Radeon和Fire系列产品的OpenGL与Vulkan驱动程序的开发,在OpenGL ARB中代表AMD为核心OpenGL规范和扩展做出了大量贡献,拥有多项图形和图像处理专利。
约翰·克赛尼希(John Kessenich),Vulkan方面的语言专家,LunarG公司架构师,自1999年以来积极参与开发OpenGL ARB与Khronos中的OpenGL、GLSL、Vulkan和SPIR-V。他创建了 SPIR-V,还创建了着色器编译器用于提高可移植性。
编辑推荐
下一代OpenGL规范已经重新进行了设计,从而使得应用程序可以直接控制GPU的加速。本书系统地介绍下一代OpenGL规范Vulkan、它的目标以及构建其API的关键概念,揭示了Vulkan的独特性。
本书讨论的主题非常宽泛,从绘图命令到内存,再到计算着色器的线程。本书重点展示了如何处理现在由开发人员负责的同步、调度和内存管理等任务。本书是Vulkan开发人员的指南和参考手册,有助于读者迅速掌握跨平台图形的下一代规范。你将从本书中学习到可用于从视频游戏到医学成像等领域的3D开发技术,以及解决复杂的科学计算问题的先进方法。
本书主要内容
. 大量经过反复测试的代码示例,用于演示Vulkan的功能并展示它与OpenGL的区别。
. Vulkan中的新内存系统。
. 队列、命令和移动数据的方法。
. SPIR-V二进制着色语言和计算/图形管道。
. 绘图命令、几何处理、片段处理、同步原语,以及将Vulkan数据读入应用程序。
. 完整的案例研究应用程序:使用复杂的多通道架构和多个处理队列的延迟渲染。
. Vulkan函数和SPIR-V操作码,以及完整的Vulkan词汇表。
目录
目 录
第 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