【问题标题】:vulkan - compute queuefamily - vkGetDeviceQueue - access violationvulkan - 计算队列族 - vkGetDeviceQueue - 访问冲突
【发布时间】:2019-01-01 20:42:32
【问题描述】:

我只在我的卡 (AMD r9 380) 上测试过。

vkGetPhysicalDeviceQueueFamilyProperties() 找到 3 个 QueueFamilies。一个包含所有正常位(图形、计算、传输),一个缺少图形,一个缺少计算和图形。我认为缺少的图形是计算队列系列,而缺少的计算和图形是传输队列系列。

vkGetDeviceQueue(instance, computeFamily, 0, &pComputeQueue); instance 为 VkInstance,computeFamily 为 uint32_t 索引值,0 为请求队列的索引,pComputeQueue 为 VkQueue。尝试使用此参数运行此函数会生成 Vulkan01.exe: 0xC0000005: Access violation writing location 0x0000000000000000.

vkGetDeviceQueue() 对 Graphics、Presentation(如预期的那样返回与我的实现中的图形相同)和传输返回的效果很好。

所以问题是:为什么我在尝试将句柄返回给我列出的队列系列之一时会出错?可能只是我的卡吗? (Sascha Williams 的一些示例也无法在我的计算机上运行,​​所以我推测可能我的卡对于某些功能来说太旧了?)

【问题讨论】:

    标签: c++ access-violation vulkan


    【解决方案1】:

    为什么我在尝试将句柄返回给我列出的队列系列之一时会出错?

    因为他们不是“你的”队列家族。它们是设备的队列系列。

    如果您在创建设备时要求他们,他们只会成为“您的”队列系列。您的VkDeviceCreateInfo 结构必须有一个VkDeviceQueueCreateInfo,其中有一个queueFamilyIndex 引用计算队列族,请求(至少)该族的一个队列。

    【讨论】:

    • 我很笨。在构建 VkDeviceQueueCreateInfo 数组时,我忘记包含对该系列索引的引用。谢谢
    猜你喜欢
    • 2021-10-11
    • 1970-01-01
    • 2021-05-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-02
    • 1970-01-01
    • 2019-08-11
    相关资源
    最近更新 更多