Vulkan API基本概念
设备初始化
Instance --> GPU --> Device
Instance表示具体的Vulkan应用。在一个应用程序中可以创建多个实例,这些实例之间相互独立,互不干扰。
当调用API创建Vulkan实例的时候,Vulkan SDK内部会经由驱动装载器(loader)查找可用的GPU设备。
创建Vulkan实例需要两个输入信息:
应用程序的信息
内存分配回调函数
Vulkan通过用户输入的内存分配器来分配内存。
创建好Instance,就可以用Instance枚举所有可用的Vulkan GPU设备。
有了GPU设备,就可以获取具体GPU的信息。如果系统中安装了多个GPU设备,就可用GPU信息比较GPU设备之间的兼容性等。
找到了合适的GPU后,就可以通过GPU创建设备示例。
绘制
Queues
有了设备,就可以创建命令队列。命令队列是与设备绑定的,不能跨设备使用。
队列封装了图形、计算、直接内存访问功能,独立调度、异步等调度操作。
Command Buffer
有了设备,就可以创建命令缓冲。命令缓冲是绘制命令的批次集合。
用户可创建任意多的命令缓冲,支持在多线程中创建。
Command占用的内存是通过Command Buffer内存池动态分配,不需要指定内存池的大小。
Command
在命令缓冲区中可以创建多个命令。多个命令完成批次即命令缓冲后,可以重复利用。
这里有点像OpenGL里面的NameList。
Command Buffer的操作使用pipeline barrier区分。barrier可以等待和触发事件。
注:
这里可以看出Command被包装在Command Buffer中,当把Command Buffer提交给Queue中后,Queue中执行的是Command Buffer中的Command。
另外,Command Buffer和Queue的类别需要匹配,否则不能正确执行,但一个Command Buffer并不会跟任何Queue有联系。也就意味着,一个Command Buffer可以被提交给多个Queue,只要他们的类别匹配。
Shaders
使用设备创建Shader。
同样支持多线程。
Pipeline
渲染管线同样需要设备创建。
渲染管线状态包括:Shaders,混合、深度、剔除、模版状态等。
另外Vulkan提供了API保存和加载渲染管线的状态。
Descriptors
Vulkan资源都用descriptor表示, descriptor分成descriptor set,descriptor set从descriptor pool分配。
每个descriptor set都有个layout布局,布局是在pipeline创建的时候确定的。layout在descriptor set 和pipeline之间共享,并且必须匹配。
pipeline可以切换使用相同layout的descriptor set。
多个不同layout的set可以组成链在一个pipeline中使用。
Render Pass
Render Pass表示一帧的某个阶段,包含了绘制过程中的很多信息,包括:
- Layout和framebuffer attachment的类型
-Render Pass在开始和结束的时候该做什么
-Render Pass影响framebuffer的区域-分块渲染和延迟渲染需要的信息
Drawing
Draws位于Render Pass内,在Command Buffer的上下文中执行。支持多种绘制类型:基于索引的和非索引的,直接的和间接的等
多线程支持
同步
使用事件同步任务,可以设置、重置、查询和等待事件。
Command Buffer执行完成后可以触发事件。
任务队列
任务在设备所属的队列中执行,准备好的Command buffer送到队列中执行。
队列保留内存,驱动不负责管理内存,同样由程序管理。
队列可以触发事件,等待信号量。
Presentation
展现就是如何在屏幕上显示图片。
可显示的资源使用与framebuffer绑定的“图片”展现,由与平台相关的模块创建,即所谓的窗口系统接口WSI。
WSI用了列举系统的显示设备和视频模式,全屏,控制显示垂直同步等。
Presenta跟命令缓冲一起进入队列。
资源创建和释放
资源包括CPU资源和GPU资源。
CPU资源通过vkCreate创建,GPU资源由vkAllocMemory创建,由vkBindObjectMemory与CPU对象绑定。
应用程序负责Vulkan对象的析构,需要保证顺序。Vuilkan资源没有引用计数机制,都需要显式释放。
Vulkan API基本概念的更多相关文章
- 使用 Vulkan * API 并行渲染对象
Vulkan API 是业界最热门的新技术之一.它们支持多线程编程,可以简化跨平台开发,而且主要的芯片.GPU 和设备制造商都为其提供支持.Vulkan API 有望成为未来主流图形渲染平台之一.该平 ...
- MapReduce API 基本概念
在正式分析新旧 API 之前, 先要介绍几个基本概念. 这些概念贯穿于所有 API 之中,因此, 有必要单独讲解. 1.序列化 序列化是指将结构化对象转为字节流以便于通过网络进行传输或写入持久存储的过 ...
- Compute API 关键概念 详解
Compute API 是 RESTful HTTP 服务,提供管理虚机的能力. 虚机可能有不同的内存大小,CPU数量,硬盘大小,能够在几分钟之内创建出来.和虚机的交互,可以通过Compute API ...
- 【翻译】Flink Table Api & SQL —— 概念与通用API
本文翻译自官网:https://ci.apache.org/projects/flink/flink-docs-release-1.9/dev/table/common.html Flink Tabl ...
- web API的概念
11月20日 纷乱的术语 接口:从接口测试说起,接口是某个对象和外界交互的部分,应用程序可能有很多接口. 用户界面UI(user interface) 消息交互接口,外界是其他程序:diameter, ...
- SDK,API概念
什么是SDK什么是API? SDK 就是 Software Development Kit 的缩写,就是"软件开发工具包". 这是一个覆盖面相当广泛的名词,可以这么说:辅助开发某一 ...
- Android 7.0 新增功能和api
Android 7.0 Nougat 为用户和开发者引入多种新功能.本文重点介绍面向开发者的新功能. 请务必查阅 Android 7.0 行为变更以了解平台变更可能影响您的应用的领域. 要详细了解 A ...
- [译]Vulkan教程(02)概况
[译]Vulkan教程(02)概况 这是我翻译(https://vulkan-tutorial.com)上的Vulkan教程的第2篇. This chapter will start off with ...
- [译]Vulkan教程(01)入门
[译]Vulkan教程(01)入门 接下来我将翻译(https://vulkan-tutorial.com)上的Vulkan教程.这可能是我学习Vulkan的最好方式,但不是最理想的方式. 我会用“d ...
随机推荐
- UEditor Golang上传图片与附件
UEditor图片与附件上传官方只支持ASP.ASP.NET.JSP.PHP四种语言版本,Golang就不在其中.因为自己开发系统的需要,我照着UEditor服务器端的接口自己实现了一个Golang版 ...
- drupal8之分类
示例: 我的相册 一.创建分类 1.创建一个相册 点击[结构]>[Taxonomy]>[+add vocabulary] 点击[保存] 2.创建相册的分类 点击[+add term] 点击 ...
- [LeetCode] Merge Two Binary Trees 合并二叉树
Given two binary trees and imagine that when you put one of them to cover the other, some nodes of t ...
- 使用.Net+非关系型数据库MongoDB 实现LBS商家按距离排序_按离我最近排序
.Net MongoDB LBS地理位置定位 开发过程,实现商家按距离排序 前言: 在使用美团点外卖,看电影,找好吃的时候,经常会注意到软件有一个按距离排序,找离我最近的商家,心中有一些疑问,.Net ...
- servlet与ajax数据交换(json格式)
JSON数据格式: JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式. 易于人阅读和编写.同时也易于机器解析和生成. 它基于的一个子集. JSON采用完全独 ...
- 【USACO12JAN】视频游戏的连击Video Game Combos
题目描述 Bessie is playing a video game! In the game, the three letters 'A', 'B', and 'C' are the only v ...
- 【NOIP2017 OFO(下)】
·我不知道对不对,只是不想让大米兔就这样离开. by tkys_Austin; [另一只情绪化的兔子] 今年的11月12日NOIP提高组, ...
- [SHOI2001]化工厂装箱员
题目描述 118号工厂是世界唯一秘密提炼锎的化工厂,由于提炼锎的难度非常高,技术不是十分完善,所以工厂生产的锎成品可能会有3种不同的纯度,A:100%,B:1%,C:0.01%,为了出售方便,必须 ...
- [APIO2016]
2016的题貌似是韩国棒子出的,好丧啊.... 看了题解还想了好久...... ------------------------------------------------- A.Boat 有n个 ...
- web框架和django基础(粗糙版)
web框架本质: 浏览器:socket客户端 服务器:socket服务端 1.自己写socket服务端(最傻) #!/usr/bin/env python ...