С man page for vkEnumerateDeviceExtensionProperties,Вызов vkEnumerateDeviceExtensionProperties «дважды» - это требуется?
vkEnumerateDeviceExtensionProperties извлекает свойства расширений на физическом устройстве, дескриптор которого приводится в physicalDevice. Чтобы определить расширения, реализованные набором слоев , pLayerName указывает на имя слоя, и любые возвращаемые расширения реализованы этим слоем. Установка имени pLayerName в NULL вернет доступные не-слоистые расширения. pPropertyCount должен быть установлен в размере размера массива VkExtensionProperties, на который указывает pProperties. Параметры pProperties должны указывать на массив VkExtensionProperties, который должен быть заполнен или null. Если null, vkEnumerateDeviceExtensionProperties будет обновление pPropertyCount с количеством найденных расширений. определение VkExtensionProperties выглядит следующим образом:
(курсив мой). Кажется, что в текущей реализации (Window SDK v1.0.13) pPropertyCount
: обновлен с количеством расширений, независимо от того, является ли pProperties
нулевым или нет. Тем не менее, документация не является явной в отношении того, что происходит в этой ситуации.
Вот пример, почему имея такую особенность является «лучше»:
const uint32_t MaxCount = 1024; // More than you'll ever need
uint32_t ActualCount = MaxCount;
VkLayerProperties layers[MaxCount];
VkResult result = vkEnumerateDeviceLayerProperties(physicalDevice, &ActualCount, layers);
//...
против
uint32_t ActualCount = 0;
VkLayerProperties* layers;
VkResult result = vkEnumerateDeviceLayerProperties(physicalDevice, &ActualCount, nullptr);
if (ActualCount > 0)
{
extensions = alloca(ActualCount * sizeof(VkLayerProperties));
result = vkEnumerateDeviceLayerProperties(physicalDevice, &ActualCount, layers);
//...
}
Мой вопрос: я в зависимости от неподдерживаемых функциональности, делая это , или это как-то рекламируется где-то еще в документации?
Человеко-рефлекторные страницы плохо обслуживаются банкоматом, напрямую читайте Spec. ; AFAIK вам, возможно, придется звонить четыре и более раз, в невероятном случае, если вы получите VK_INCOMPLETE. ; Ничего плохого в вашем вызове aproach тоже, и спецификация достаточно подробно об этом. – krOoze