Vulkan свойства семейств очередей?

Hello world1,
Добираюсь я тут на днях до функции
void vkGetPhysicalDeviceQueueFamilyProperties(
    VkPhysicalDevice                            physicalDevice,
    uint32_t*                                   pQueueFamilyPropertyCount,
    VkQueueFamilyProperties*                    pQueueFamilyProperties);

а там оказывается последний аргумент указатель на одну структуру, хотя на самом деле он возвращает их списком подряд. Но вот незадача я в C++ не то чтоб магистр, скорей еретик C# и понятия не имею что с этим всем делать. Так что, жертвенно моля на крови матери ягнёнка девственника, посыпанного прахом семерых трио-исполнителей кантри, прошу помощи у господ разбирающихся в этом треклятом С++, и заранее прошу прощения за свои mannaged манеры))
Кому лень, вот сама структура
typedef struct VkQueueFamilyProperties {
    VkQueueFlags    queueFlags;
    uint32_t        queueCount;
    uint32_t        timestampValidBits;
    VkExtent3D      minImageTransferGranularity;
}
  • Вопрос задан
  • 231 просмотр
Решения вопроса 1
@ruslanfedoseenko
С++/C# разработчик
Используется си-подобное понятие массива как указатель на первый элемент. И благодаря арифметике указателей код вида pQueueFamilyProperties[i] вернет указатель на i элемент. Произойдет что-то типа pQueueFamilyProperties + i*sizeof(VkQueueFamilyProperties).
В итоге сначала надо спросить кол-во элементов
uint32_t queueFamilyPropertiesCount = 0;
vkGetPhysicalDeviceQueueFamilyProperties(
  physicalDevice, &queueFamilyPropertiesCount, 0);

Выделить память для этих элементов и получить их
//Если пишите на C
VkQueueFamilyProperties* const queueFamilyProperties =
  (VkQueueFamilyProperties*)malloc(
    sizeof(VkQueueFamilyProperties) * queueFamilyPropertiesCount);
//Если пишите на C++
VkQueueFamilyProperties* const queueFamilyProperties =
 new VkQueueFamilyProperties[queueFamilyPropertiesCount];

vkGetPhysicalDeviceQueueFamilyProperties(physicalDevice,
  &queueFamilyPropertiesCount, queueFamilyProperties);


P.S. Я не эксперт в Vulcan API и не разу его не использовал но по идее должно работать.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы