vkEnumerateDeviceExtensionPropertiesのマニュアルページから、
vkEnumerateDeviceExtensionProperties は、physicalDevice でハンドルが指定されている物理デバイスの拡張機能のプロパティを取得します。層によって実装される拡張機能を決定するには、層の名前を指すように pLayerName を設定し、返される拡張機能はその層によって実装されます。pLayerName を NULL に設定すると、使用可能な非レイヤー エクステンションが返されます。pPropertyCount は、pProperties が指す VkExtensionProperties 配列のサイズに設定する必要があります。pProperties は、入力する VkExtensionProperties の配列または null を指す必要があります。null の場合、vkEnumerateDeviceExtensionProperties は、見つかった拡張機能の数で pPropertyCount を更新します。VkExtensionProperties の定義は次のとおりです。
(強調鉱山)。現在の実装 (Window SDK v1.0.13) では、nullかどうかに関係なく、拡張機能の数で更新されている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);
//...
}
私の質問は、これを行うことでサポートされていない機能に依存しているのでしょうか、それともドキュメントのどこかで宣伝されているのでしょうか?