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 对象中
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 对象中