如果启用的调试扩展和验证层已经添加到实例中,是否需要在创建时将其添加到设备中?
Do enabled debug extensions and validation layers need to be added to the device when created if are already added to the instance?
最近再次查看 Vulkan Tutorial 后,我发现我的一些项目偏离了它。 vulkan 教程所做的其中一件事是在实例级别添加调试扩展和验证层,然后在设备级别执行相同的操作。在创建新项目的过程中,我意识到我忘记设置
VkDeviceCreateInfo::enabledExtensionCount,
VkDeviceCreateInfo::ppEnabledExtensionNames,
VkDeviceCreateInfo::enabledLayerCount, and
VkDeviceCreateInfo::ppEnabledLayerNames
使用调试扩展和验证层。编译不仅在没有它们的情况下工作正常,而且验证层和调试扩展似乎也不受此影响(并且工作得很好,我能够设置对象名称并查看设备错误)。这让我想知道为设备再次包含此信息的意义何在。我知道设备可能有特定的扩展,但我真的需要在每次创建新的 VkDevice
时设置完全相同的验证层标志和扩展名称吗?
VK_EXT_debug_utils
(还有 VK_EXT_debug_report
)是一个 instance extension。您也不应该为设备启用它们。如果您尝试驱动程序应该失败 VK_ERROR_EXTENSION_NOT_PRESENT
.
至于层,设备层很久以前就被弃用了。实例层现在也可以在设备级别工作。在规范中使用此兼容性说明:
In order to maintain compatibility with implementations released prior to device-layer deprecation, applications should still enumerate and enable device layers. The behavior of vkEnumerateDeviceLayerProperties
and valid usage of the ppEnabledLayerName
s member of VkDeviceCreateInfo
maximizes compatibility with applications written to work with the previous requirements.
了解更改的更新驱动程序的行为如下:
The list of layers enumerated by vkEnumerateDeviceLayerProperties
must be exactly the sequence of layers enabled for the instance.
但是如果你懒惰(或检查驱动程序版本),你可以简单地提供你从 vkEnumerateDeviceLayerProperties
或 nullptr
获得的列表。两者都应该适用于更新的驱动程序。
最近再次查看 Vulkan Tutorial 后,我发现我的一些项目偏离了它。 vulkan 教程所做的其中一件事是在实例级别添加调试扩展和验证层,然后在设备级别执行相同的操作。在创建新项目的过程中,我意识到我忘记设置
VkDeviceCreateInfo::enabledExtensionCount,
VkDeviceCreateInfo::ppEnabledExtensionNames,
VkDeviceCreateInfo::enabledLayerCount, and
VkDeviceCreateInfo::ppEnabledLayerNames
使用调试扩展和验证层。编译不仅在没有它们的情况下工作正常,而且验证层和调试扩展似乎也不受此影响(并且工作得很好,我能够设置对象名称并查看设备错误)。这让我想知道为设备再次包含此信息的意义何在。我知道设备可能有特定的扩展,但我真的需要在每次创建新的 VkDevice
时设置完全相同的验证层标志和扩展名称吗?
VK_EXT_debug_utils
(还有 VK_EXT_debug_report
)是一个 instance extension。您也不应该为设备启用它们。如果您尝试驱动程序应该失败 VK_ERROR_EXTENSION_NOT_PRESENT
.
至于层,设备层很久以前就被弃用了。实例层现在也可以在设备级别工作。在规范中使用此兼容性说明:
In order to maintain compatibility with implementations released prior to device-layer deprecation, applications should still enumerate and enable device layers. The behavior of
vkEnumerateDeviceLayerProperties
and valid usage of theppEnabledLayerName
s member ofVkDeviceCreateInfo
maximizes compatibility with applications written to work with the previous requirements.
了解更改的更新驱动程序的行为如下:
The list of layers enumerated by
vkEnumerateDeviceLayerProperties
must be exactly the sequence of layers enabled for the instance.
但是如果你懒惰(或检查驱动程序版本),你可以简单地提供你从 vkEnumerateDeviceLayerProperties
或 nullptr
获得的列表。两者都应该适用于更新的驱动程序。