Vulkan教程

Vulkan教程,Vulkan是一款革命性的高性能3D图形和计算API,可用于现代GPU管线架构,能满足社区的最新需求。该API提供了一套全新的方法来克服传统API的复杂性和缺陷。Vulkan是一个显式API,保证用户在渲染时保持稳定平滑的帧速率,不会造成延迟或者故障。
Vulkan教程

著名的OpenGL API问世已经差不多四分之一个世纪,而且它还在不断发展。本质上来说,OpenGL是一个纯粹的状态机,其中包含了若干个开关量,可以设置为开/关的状态(on/off)。这些状态数据被用来构建设备中的依赖映射关系,对资源进行管理,并通过最优的方法进行控制以达到性能的最大化。

这种状态机可以隐式地自动化资源管理,但是它对应用程序逻辑的解读不够智能化,而应用程序正是资源管理背后的驱动力所在。其产生的结果可能是用户无法预测的,比如实现中断,导致着色器代码被重新编译,但是应用程序并不需要系统这么做。此外,OpenGL API也会受到其他因素的限制,例如不可预测的程序行为、多线程的扩展性、渲染的故障等。

Khronos于2016发布了革命性的新架构Vulkan API,它充分利用了现代图形处理器单元的优势,来实现高性能图形和计算应用程序的开发。Khronos是一个会员制的社区和专注于发布开放标准和免费API的组织。更多信息请参阅网站:https://www.khronos.org。

Vulkan的原始概念是由AMD基于它们的私有Mantle API设计和实现的。这个API已经在几款不同的游戏中体现了自己的先进特性,它有着革命性的实现方案,完全满足了工业界的竞争性需求。AMD开源了自己的Mantle API并且贡献给Khronos组织。在多家硬件和软件供应商的协同帮助下,Khronos发布了Vulkan标准。

Vulkan并不是目前唯一的新一代3D图形API,它还有多家不同的竞争者,例如Microsoft的Direct-X 12和Apple的Metal。不过,Direct-X只能用于不同的Windows系统,而Metal只能用在Mac系统(OS X和iOS)。因此,Vulkan得以脱颖而出。它的跨平台特性可以支持所有现存的OS平台,其中已经包括了Windows(XP、Vista、7、8、10)、Linux、Tizen、SteamOS和Android。如图所示。

Vulkan教程

相关知识

  • C语言 C语言是应用最为广泛的一种高级程序设计语言,它不仅是计算机专业学生的必修课,也是许多非计算机专业学生所青睐的技术学科。C语言功能丰富,表达能力强,使用灵活方便,程序效率高,是结构化程序设计语言。C语言具有很强的实用性,既可用来编写应用软件,也适合于编写系统软件。

重要术语

在开始深入学习基础知识之前,我们首先了解一些Vulkan中的重要术语:

  • 物理设备physical device)与设备(device):一台计算机系统中可能包含了不止一个支持Vulkan的物理硬件设备。我们所说的物理设备表示一个独立的设备,而设备指的是该物理设备在应用程序中的逻辑表示。
  • 队列queue):队列表示执行引擎与应用程序之间的接口。一个物理设备总是包含了一个或者多个队列(图形、计算、DMA/传输,等等)。队列的职责是收集准备执行的工作(指令缓存)并且分发到物理设备执行。
  • 内存类型memory type):Vulkan暴露了多种内存类型。广义上来说,总共有两种类型的内存:宿主内存和设备内存。在本章后面的内容里,我们会讨论这些内容。
  • 指令command):每个指令中都可以执行一些用户行为。指令从广义上可以划分为动作、状态设置,以及同步。
  • 动作指令action command):包括绘制图元、清除表面、复制缓存、查询/时间戳操作,以及子通道的开始/结束操作。这些指令可以修改帧缓存附件、读取或者写入内存(缓存或者图像),以及写入查询池。
  • 状态设置指令set state command):这些指令可以用来绑定流水线、描述字集合以及缓存,或者设置一个动态状态,以及渲染通道/子通道的状态。
  • 同步指令synchronization command):同步指令用于处理两个或者更多动作指令同时发生的情况,此时指令之间可能会争夺资源或者依赖于某些内存。该指令用来设置同步事件或者等待事件、插入流水线屏障对象,以及渲染通道/子通道的依赖。
  • 指令缓存command buffer):指令缓存是一组指令的集合,它可以记录多个指令并统一发送到队列中。

文章目录

赞(4)

评论 抢沙发

评论前必须登录!