请以我仅在卡(AMD r9 380)上进行过测试的方式为我作序。
vkGetPhysicalDeviceQueueFamilyProperties()
找到3个QueueFamilies。其中一个包含所有正常位(图形,计算,传输),一个缺失的图形,以及一个缺失的计算和图形。我认为这是因为缺少的一个图形是计算队列系列,而缺少的一个计算和图形是传输队列系列。
vkGetDeviceQueue(instance, computeFamily, 0, &pComputeQueue);
实例为VkInstance,computeFamily为uint32_t索引值,0为请求队列的索引,pComputeQueue为VkQueue。尝试使用此参数运行此功能会生成Vulkan01.exe: 0xC0000005: Access violation writing location 0x0000000000000000.
vkGetDeviceQueue()
对于“图形”,“演示文稿”(按预期返回与我的实现中的图形相同的图形)和传输返回的效果很好。
所以问题是:为什么在尝试将句柄返回到列出的队列系列之一时会出错?可能只是我的卡? (某些Sascha Williams示例也不会在我的计算机上运行,因此我认为我的卡可能有些功能太旧了?)
答案 0 :(得分:1)
为什么在尝试将句柄返回到列出的队列家族之一时会出错?
因为他们不是“您的”队列家庭。它们是设备的队列系列。
仅当您在设备创建时询问时,它们才成为“您的”队列家族。您的VkDeviceCreateInfo
结构必须有一个VkDeviceQueueCreateInfo
,其中有一个queueFamilyIndex
引用计算队列系列,并从该系列请求(至少)一个队列。