Vulkan Device and Queue --2

本文详细解析了Vulkan中的设备与队列操作机制,包括如何获取物理设备信息、创建逻辑设备及队列,以及如何利用SparseMemoryBinding进行内存管理。通过实例阐述了Vulkan中队列之间的同步机制,以及如何有效地创建和跟踪各种数据结构。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Vulkan 2 - Device and Queue

Instance 对象之后,接下来开始操作Device对象了, 为APP提供的Vulkan操作的是针对逻辑设备,对于物理设备Vulkan只提供查询物理设备信息的接口,没有提供操作物理设备的接口
VkPhysicalDeviceProperties
可以获取显卡PCI信息,显卡类型,是集成显卡、独立显卡,还是虚拟显卡啊等,最主要的是可以:correlate how many memory heaps there are.

最最主要的是可以获取物理设备上的可用的队列信息:
vkGetPhysicalDeviceQueueFamilyProperties
树形结构:Device -> Queue families -> Queue

创建了逻辑设备之后,我们可以通过逻辑设备干点啥呢?
创建Queue,问题又来了,在逻辑设备上创建一个Queue之前挂载到那个family下面呢?
创建和跟踪各种可供同步的数据结构
管理memory
创建命令缓冲区和cmd buffer pools
管理graphic state

Vulkan可以创建逻辑设备,同样可以销毁逻辑设备,以及逻辑设备的生存期和生存期之内的不同状态。

接下来便是操作Queue对象了。

需要注意的地方有
Queue之间的同步是通过Vulkan semaphores来实现的
题外话: events&barries是同步cmd buffer的,fences work between host and device… 是这样吗?
接下来重点来了: 操作Queue对象之一:Sparse Memory Binding
Sparse memory binding 是啥?

首先要搞懂 Sparse Resource是个啥。。。
Sparse resource可以说是提供一种欺骗性的机制,这个机制让APP认为自己得到的是一块连续的内存,实际上是Sparse resource将分散的内存bound起来提供给APP的。

Vulkan为啥需要这种机制呢?
因为VkBuffer和VkImage的存储资源需要被完全连续绑定在VkDeviceMemory 对象中









评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值