惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

J
Java Code Geeks
Hugging Face - Blog
Hugging Face - Blog
博客园_首页
爱范儿
爱范儿
罗磊的独立博客
美团技术团队
Jina AI
Jina AI
量子位
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
酷 壳 – CoolShell
酷 壳 – CoolShell
有赞技术团队
有赞技术团队
V
V2EX
阮一峰的网络日志
阮一峰的网络日志
小众软件
小众软件
IT之家
IT之家
雷峰网
雷峰网
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
博客园 - 司徒正美
大猫的无限游戏
大猫的无限游戏
博客园 - 聂微东
月光博客
月光博客
人人都是产品经理
人人都是产品经理
博客园 - 三生石上(FineUI控件)

博客园 - 游戏行者

ubuntu 24 之后,登录时出现server refused our key,不认原来的ssh key的解决方法 zoho企业邮件管理页,如何登录 thunderBird如何选择配置文件 鼠标对码 PVE更换主板后,如何修改绑定网卡 关于ubuntu和debian的配置,以及vultr的防火墙设置 - 游戏行者 entity framework core使用sqlServer localDB指定文件路径 windows 10如何更改字体大小和开启防蓝光 ubuntu挂载ntfs分区(读写模式) vmware ubuntu虚拟机设置共享文件夹之后,虚拟机重启找不到的问题 Esxi(vSphere) 安装经验 瑞芯微系列主板刷机方法 f#如何设定main函数 探索texture对象的生命周期 opengl管理texture参数的函数总结 Opengl vertex shader中, layout location最多允许几个,或者说,顶点可以有多少个属性 opengl 如何从指定位置画三角形,理解opengl的指针 vk.xml生成之坑 写代码的技巧
vulkan的QueueFamilyProperties
游戏行者 · 2019-10-21 · via 博客园 - 游戏行者

vulkan从物理设备创建逻辑设备的时候,有个参数是QueueFamilyProperties,这个参数指明队列支持的功能,以及队列最大数量。

队列族支持的功能,用queueFlags表示,可以是,graphics,compute,transfer,还有SparseBinding。

通过查询QueueFamilyProperties,可以得到所有队列族的特性。我的gtx 1050支持的队列族是3个:

1.支持所有四种共功能

也就是Graphics|Compute|Transfer|SparseBinding,最大队列数16

2.支持Transfer,最大队列数1

3.支持compute,最大数量8

创建逻辑设备的时候,需要指定支持的队列族。我感觉实际上只需要第一个就可以,因为它是全功能的,而且有16个队列。或许专门的transfer队列和compute队列,可以发挥更好的性能。

查了一些资料,说队列数量并不是越多越好。如果用不上就少创建。因为每个队列都会消耗资源。具体如何消耗,还有待于探索。

探索1:

关于VulkanSharp的Device.GetQueue(uint queueFamilyIndex, uint queueIndex)

如果填入相同的queueFamilyIndex和queueIndex,会得到同一个队列,但是再VulkanSharp中用object.RefrenceEquals测试,并非是同一个对象,这是因为它每次GetQueue都创建了一个托管对象去包含原生指针,所以对象不同,但里面指针成员是同一个,所以实际是通过一个队列。

关于创建Device时候的QueueCreateInfo,

可以创建多个队列,但是QueueCount要等于QueuePriorities个数。如果不等,也能创建成功,但影响之后Device.GetQueue(familyIndex, queueIndex)的结果。这个函数中,queueIndex必须小于QueuePriorties的个数,否则会出现内存错误。

另外,QueueFamilyProperties中的最大队列数,似乎并不起作用,比如在Transfer队列族中创建两个队列(它最大是1),然后用Device.GetQueue取出来,的确是两个不同的队列。至于队列是否起作用,有待于进一步探索。