You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Vulkan开发时遇VK_KHR_swapchain扩展未找到问题求助

Vulkan逻辑设备创建时VK_KHR_swapchain扩展报错问题排查

问题描述

笔记本仅搭载Intel(R) Iris(R) Xe集成显卡,vkcube.exe可正常运行,但自研Vulkan应用创建逻辑设备时提示VK_KHR_swapchain扩展不存在。调用vkEnumerateDeviceExtensionProperties检测到该扩展在设备支持列表中,然而vkCreateDevice返回错误码-7(扩展不存在)。

设备支持的扩展列表

[09:19:24:716] [TRACE]: Device Extension: VK_EXT_device_address_binding_report
[09:19:24:716] [TRACE]: Device Extension: VK_EXT_full_screen_exclusive
[09:19:24:717] [TRACE]: Device Extension: VK_KHR_swapchain

逻辑设备创建代码

VkDeviceCreateInfo device_create_info      = {VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO};
device_create_info.queueCreateInfoCount    = index_count;
device_create_info.pQueueCreateInfos       = queue_create_info;
device_create_info.pEnabledFeatures        = &device_features;
device_create_info.enabledExtensionCount   = 1;
const char* extension_names[1]             = {VK_KHR_SWAPCHAIN_EXTENSION_NAME};
device_create_info.ppEnabledExtensionNames = (const char* const*)&extension_names;

device_create_info.enabledLayerCount   = 0;
device_create_info.ppEnabledLayerNames = 0;

GRD_LOG_DEBUG("Creating logical device for physical device: %s", context->device.properties.deviceName);
VkResult result = vkCreateDevice(
    context->device.physical_device,
    &device_create_info,
    context->allocator,
    &context->device.logical_device);
if (result != VK_SUCCESS)
{
    GRD_LOG_FATAL("Could not create vulkan logical device. Result: %d", result);
    return FALSE;
}

运行输出

[08:58:45:587] [DEBUG]: Creating logical device for physical device: Intel(R) Iris(R) Xe Graphics
[08:58:45:587] [ERROR]: loader_validate_device_extensions: Device extension VK_KHR_swapchain not supported by selected physical device or enabled layers.
[08:58:45:589] [ERROR]: vkCreateDevice: Failed to validate extensions in list
[08:58:45:589] [FATAL]: Could not create vulkan logical device. Result: -7 // Result Code for Extension not present

已启用的实例扩展

[08:58:45:482] [DEBUG]: Vulkan Required extensions:
[08:58:45:482] [DEBUG]:     1: VK_KHR_surface
[08:58:45:483] [DEBUG]:     2: VK_KHR_get_physical_device_properties2
[08:58:45:483] [DEBUG]:     3: VK_KHR_portability_enumeration
[08:58:45:483] [DEBUG]:     4: VK_KHR_win32_surface
[08:58:45:483] [DEBUG]:     5: VK_EXT_debug_utils

问题原因及解决方法

问题出在逻辑设备创建时的扩展名称数组指针传递错误:
代码中device_create_info.ppEnabledExtensionNames = (const char* const*)&extension_names;的写法错误。extension_names本身是const char*[1]类型,会隐式转换为const char**,而ppEnabledExtensionNames需要的是const char* const*类型,直接赋值extension_names即可。取数组的地址&extension_names得到的是指向数组的指针(类型为const char* (*)[1]),强制转换后会导致驱动读取错误的内存地址,无法识别指定的扩展名称。

修改代码:
将

device_create_info.ppEnabledExtensionNames = (const char* const*)&extension_names;

改为

device_create_info.ppEnabledExtensionNames = extension_names;

内容的提问来源于stack exchange,提问作者Priyansh Yadav

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 08:34:59