目录
第一章 概述
你将在本章学到什么
- Vulkan是什么以及它背后的原理
- 如何创建最小的Vulkan应用程序
- 本书其余部分将要使用到的术语和概念
在本章中,我们将介绍Vulkan并解释它是什么。我们将介绍API背后的一些基本概念,包括初始化,对象生命周期,Vulkan实例以及逻辑和物理设备。在本章结束时,我们将生成一个简单的Vulkan应用程序,可以初始化Vulkan系统,查找可用的Vulkan设备并显示其属性和功能,最后彻底关闭。
1.1 引言
Vulkan是图形和计算设备的编程接口。 Vulkan设备通常由一个处理器和多个固定功能硬件块组成,用以加速图形和计算操作。设备中的处理器通常是基于多线程去处理的,因此Vulkan中的计算模型主要基于并行计算。Vulkan设备还可以访问内存,该内存可能与运行应用程序的主处理器共享也可能不共享。 Vulkan也向你(开发者)提供这个内存。
Vulkan是一个显式的API。也就是说,几乎所有事情都是你的职责。驱动程序是一种软件,它接收形成API的命令和数据,并将它们转换为硬件可以理解的内容。在诸如OpenGL之类的旧API中,驱动程序将跟踪许多对象的状态,为您管理内存和同步,并在运行时检查应用程序中的错误。这对开发人员来说非常好,但是一旦调试并正确运行应用程序,这样的操作(用于调试的API例如glGetError)就会占用宝贵的CPU时间。 Vulkan通过将几乎所有状态跟踪,同步和内存管理置于应用程序开发人员手中并将正确性检查委派给必须启用的层来解决此问题。在正常情况下,这些层不会在应用程序中执行。
由于这些原因,Vulkan既非常冗长又有些脆弱。你需要做很多工作才能让Vulkan运行良好,并且错误地使用API通常会导致图形损坏甚至程序崩溃,而在旧版API中你会收到有用的错误消息。以此为代价,Vulkan提供了对设备的更多控制,清晰的线程模型,以及比旧API更高的性能。
此外,Vulkan的设计不仅仅是图形API。 它可用于异构设备,如图形处理单元(GPU),数字信号处理器(DSP)和固定功能硬件。功能分为粗粒度,广泛重叠的类别。 当前版本的Vulkan定义了传输类别,用于复制数据; 计算类别,用于在计算工作负载上运行着色器;和图形类别,包括光栅化,基元组装,混合,深度和模板测试,以及图形程序员熟悉的其他功能。
Vulkan对每个类型的支持都是可选的,甚至可以压根就不支持图形类型。因此,即使是将图像显示到显示器上(该过程称为展示)这样的功能也只是可选项,这样的类型是一种扩展功能,其API也不是核心API。
相关链接