vulkan - вычислить очередь семьи - vkGetDeviceQueue - нарушение доступа - PullRequest
0 голосов
/ 01 января 2019

позвольте мне предвосхитить это, я только что проверил это на моей карте (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 не будут работать и на моем компьютере, поэтому я предполагаю, что моя карта слишком старая для некоторых функций?)

1 Ответ

0 голосов
/ 02 января 2019

Почему я получаю сообщение об ошибке при попытке вернуть дескриптор одного из моих перечисленных семейств очередей?

Поскольку они не являются "вашими" семействами очередей.Это семейства очередей устройства.

Они становятся "вашими" семействами очередей, только если вы запрашиваете их во время создания устройства.Ваша структура VkDeviceCreateInfo должна иметь VkDeviceQueueCreateInfo, в которой queueFamilyIndex ссылается на семейство вычислительных очередей, запрашивая (как минимум) одну очередь из этого семейства.

...