不同Vulkan逻辑设备争夺队列数为1的同一队列族会怎样?
Vulkan多逻辑设备访问单队列族队列的行为
- 两个来自不同应用的独立逻辑设备,都能通过
vkGetDeviceQueue2成功获取到该队列数为1的队列族的唯一队列。不过每个逻辑设备会得到属于自己的VkQueue句柄——这些句柄对应同一个物理队列,但在各自的逻辑设备上下文里是独立的对象。 - 该物理队列本身是串行执行命令的,不管多少个逻辑设备向它提交工作,所有命令缓冲都会按提交顺序排队执行,无法并行处理。如果两个应用同时提交高负载任务,可能会互相影响对方的执行延迟。
- 严格禁止跨逻辑设备使用队列句柄:你只能用当前逻辑设备创建的
VkQueue提交命令,用其他逻辑设备的队列句柄提交命令会触发未定义行为,轻则程序崩溃,重则导致驱动异常。 - 不同逻辑设备的资源(缓冲、图像、同步对象等)完全隔离,即便共享同一个物理队列,也不能直接提交涉及其他逻辑设备资源的命令缓冲。如果需要跨应用协作,必须使用Vulkan的外部同步机制(比如
VkExternalSemaphore)来实现资源的安全共享与同步。
内容的提问来源于stack exchange,提问作者Angelicos Phosphoros
相关产品推荐
相关产品推荐

