vulkan - 计算队列系列 - vkGetDeviceQueue - 访问冲突
vulkan - compute queuefamily - vkGetDeviceQueue - access violation
让我先说明一下,我只在我的卡 (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()
return 适合图形、演示(return与我的实现中的图形相同,正如预期的那样)和传输。
所以问题是:为什么我在尝试 return 我列出的队列系列之一的句柄时会出错?可能只是我的卡? (Sascha Williams 的一些示例也不会 运行 在我的计算机上,所以我推测也许我的卡对于某些功能来说太旧了?)
Why would I get an error trying to return a handle to one of my listed Queue Families?
因为它们不是 "your" 队列系列。它们是 设备的 队列系列。
如果您在设备创建时请求它们,它们只会成为 "your" 队列系列。您的 VkDeviceCreateInfo
结构必须有一个 VkDeviceQueueCreateInfo
,其中有一个 queueFamilyIndex
引用计算队列系列,请求(至少)来自该系列的一个队列。
让我先说明一下,我只在我的卡 (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()
return 适合图形、演示(return与我的实现中的图形相同,正如预期的那样)和传输。
所以问题是:为什么我在尝试 return 我列出的队列系列之一的句柄时会出错?可能只是我的卡? (Sascha Williams 的一些示例也不会 运行 在我的计算机上,所以我推测也许我的卡对于某些功能来说太旧了?)
Why would I get an error trying to return a handle to one of my listed Queue Families?
因为它们不是 "your" 队列系列。它们是 设备的 队列系列。
如果您在设备创建时请求它们,它们只会成为 "your" 队列系列。您的 VkDeviceCreateInfo
结构必须有一个 VkDeviceQueueCreateInfo
,其中有一个 queueFamilyIndex
引用计算队列系列,请求(至少)来自该系列的一个队列。