На странице vkEnumerateDeviceExtensionProperties,
vkEnumerateDeviceExtensionProperties извлекает свойства для расширений на физическом устройстве, дескриптор которого указан в PhysicalDevice. Чтобы определить расширения, реализованные на уровне, установите pLayerName так, чтобы он указывал на имя уровня, и любые возвращенные расширения будут реализованы этим уровнем. Установка для pLayerName значения NULL вернет доступные расширения, не относящиеся к слою. pPropertyCount должен быть установлен равным размеру массива VkExtensionProperties, на который указывает pProperties. PProperties должен указывать на массив VkExtensionProperties, который нужно заполнить или обнулить. Если значение равно нулю, 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);
//...
vs.
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);
//...
}
У меня вопрос: я зависим от неподдерживаемых функций, делая это, или это каким-то образом рекламируется где-то еще в документации?