首页 > 解决方案 > VkDeviceQueueCreateInfo::pQueuePriorities 可以为空吗?

问题描述

来自官方的 Vulkan 编程指南:

pQueuePriorities 字段是一个可选指针,指向浮点值数组,表示提交给每个队列的工作的相对优先级。这些数字是 0.0 到 1.0 范围内的标准化数字。与具有较低优先级的队列相比,具有较高优先级的队列可以分配更多的处理资源或更积极地调度。将 pQueuePriorities 设置为 nullptr 具有使队列保持相同的默认优先级的效果

但是,当我启用VK_LAYER_KHRONOS_validation图层时,出现以下错误:

VUID-VkDeviceQueueCreateInfo-pQueuePriorities-parameter(ERROR / SPEC):msgNum:-690544442 - 验证错误:[VUID-VkDeviceQueueCreateInfo-pQueuePriorities-parameter] 对象 0:VK_NULL_HANDLE,类型 = VK_OBJECT_TYPE_DEVICE;| 消息 ID = 0xd6d720c6 | vkCreateDevice:必需参数 pCreateInfo->pQueueCreateInfos[0].pQueuePriorities 指定为 NULL。Vulkan 规范指出:pQueuePriorities 必须是指向 queueCount 浮点值数组的有效指针(https://vulkan.lunarg.com/doc/view/1.2.176.1/linux/1.2-extensions/vkspec.html#VUID-VkDeviceQueueCreateInfo -pQueuePriorities-参数

我应该将该错误视为警告吗?还是这本书错了?

标签: vulkan

解决方案


现代 Vulkan 验证层的好处在于它们直接引用了与之相关的验证规则。并且它们的引用是可搜索的,因为每个验证规则都有一个唯一的名称。因此,如果您在 Vulkan 规范中搜索“VUID-VkDeviceQueueCreateInfo-pQueuePriorities-parameter”,您将找到一个匹配项:

pQueuePriorities 必须queueCount是指向浮点值数组的有效指针

当然,下面的那个说:

queueCount 必须大于 0

所以这是书中的错误。我什至检查了旧的 Vulkan 1.0.10 规范(我拥有的最古老的规范),以确保是的,始终需要提供此参数。也许在发布前它是可选的,但我不知道它是可选的发布版本。


推荐阅读