从vkEnumerateDeviceExtensionProperties 的手册页中,
vkEnumerateDeviceExtensionProperties 检索物理设备上的扩展属性,其句柄在物理设备中给出。要确定层实现的扩展,请将 pLayerName 设置为指向层的名称,并且任何返回的扩展都由该层实现。将 pLayerName 设置为 NULL 将返回可用的非层扩展。pPropertyCount 必须设置为 pProperties 指向的 VkExtensionProperties 数组的大小。pProperties 应指向要填写的 VkExtensionProperties 数组或为空。如果为 null,vkEnumerateDeviceExtensionProperties 将使用找到的扩展数更新 pPropertyCount。VkExtensionProperties 的定义如下:
(强调我的)。pPropertyCount
在当前的实现(Window SDK v1.0.13)中,似乎更新了扩展的数量,无论是否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);
//...
}
我的问题是:我这样做是否依赖于不受支持的功能,或者这是否以某种方式在文档中的其他地方宣传?