无对应枚举类型时,如何配置VkLayerSettingEXT启用khronos_validation两项功能
解决VkLayerSettingEXT配置问题
针对你遇到的枚举不存在以及配置无效的问题,按以下方式修正:
核心问题修正
validate_gpu_based参数取值错误
该选项是布尔开关,应传入字符串"true"而非"GPU_BASED_DEBUG_PRINTF"。处理枚举缺失的情况
如果你的环境中确实找不到VK_LAYER_SETTING_TYPE_*_EXT系列枚举,可以直接使用它们对应的整数值(枚举本质为整数常量):- 字符串类型对应值:
0 - Bool32类型对应值:
1
- 字符串类型对应值:
修正后的代码
const char* layer_name = "VK_LAYER_KHRONOS_validation"; const char* enable_gpu_validation = "true"; // 修正取值 VkBool32 enable_stdout = VK_TRUE; const vk::LayerSettingEXT settings[] { // 用整数值替代枚举,0对应字符串类型 {layer_name, "validate_gpu_based", static_cast<vk::LayerSettingTypeEXT>(0), 1, &enable_gpu_validation}, // 1对应Bool32类型 {layer_name, "printf_to_stdout", static_cast<vk::LayerSettingTypeEXT>(1), 1, &enable_stdout}, }; vk::LayerSettingsCreateInfoEXT layer_settings_create_info{ static_cast<uint32_t>(std::size(settings)), settings, nullptr };
额外注意事项
- 创建Vulkan实例时,必须启用
VK_EXT_layer_settings扩展,否则层配置不会生效。 - 确保使用的Vulkan SDK版本支持
VK_EXT_layer_settings(至少1.3.200以上版本)。
内容的提问来源于stack exchange,提问作者vojt93ek
相关产品推荐
相关产品推荐

