目录
ValidationLayer 简介
Vulkan API 的设计是按照最小化驱动程序的开销进行的,所以默认情况下 Vulkan API 提供的错误检测的功能非常有限,很多基本的错误都没有被 Vulkan 显式进行处理,遇到错误也是直接错误崩溃,或者直接发生未定义行为,比如使用了一个新的特性,但是在逻辑设备创建的时候没有添加这个拓展
Vulkan 引入验证层,验证层是一个可选组件,它会 hook 到 Vulkan 的函数调用中,验证层的常见功能为:
- 对照规范检查参数的值是否合法
- 跟踪对象的销毁和创建,找出潜在的资源泄露
- 跟踪调用来源的线程来检查线程的安全性
- 将每个调用及其参数记录到标准输出
- 跟踪
Vulkan调用进行分析和重放

这些验证层可以自由的开始或者关闭,可以在调试时开启验证层,在发布的时候禁用
Vulkan 本身实现不包含验证层的代码,但是 LunarG Vulkan SDK 提供了标准验证层的实现,用于检查常见的错误,它完全开源,只有安装了验证层才可以正常使用
启用 ValidationLayer
Enable ValidationLayer
添加一个新的函数 checkValidationLayerSupport,使用函数 vkEnumrateInstanceLayerProPerties 可以枚举出所有支持的 Layer
bool checkValidationLayerSupport() {
uint32_t layerCount;
vkEnumerateInstanceLayerProperties(&layerCount, nullptr);
std::vector<VkLayerProperties> availableLayers(layerCount);
vkEnumerateInstanceLayerProperties(&layerCount, availableLayers.data());
for (const char* layerName : validationLayers) {
bool layerFound = false;
for (const auto& layerProperties : availableLayers) {
if (strcmp(layerName, layerProperties.layerName) == 0) {
layerFound = true;
break;
}
}
if (!layerFound

最低0.47元/天 解锁文章
1462

被折叠的 条评论
为什么被折叠?



