首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >M1 mac上设备扩展的验证错误

M1 mac上设备扩展的验证错误
EN

Stack Overflow用户
提问于 2022-05-25 08:30:35
回答 2查看 485关注 0票数 4

因此,我试图在带有M1处理器的mac上学习Vulkan教程,并且在设备创建方面遇到了一个问题。

因此,根据本教程,我将设备启用扩展设置如下:

代码语言:javascript
运行
复制
const std::vector<const char*> deviceExtensions = {
    VK_KHR_SWAPCHAIN_EXTENSION_NAME,
};

VkDeviceCreateInfo createInfo = {};
createInfo.enabledExtensionCount = static_cast<uint32_t>(deviceExtensions.size());
createInfo.ppEnabledExtensionNames = deviceExtensions.data();

当我运行这个程序时,我会得到以下验证错误:

验证层:验证错误:VkDeviceCreateInfo pProperties-04451对象0: handle = 0x11bd84d40,type = VK_OBJECT_TYPE_PHYSICAL_DEVICE;@ MessageID = 0x3a3b6ca0 vkCreateDevice: VK_KHR_portability_subset必须启用,因为物理设备VkPhysicalDevice 0x11bd84d40[]支持它-- Vulkan规范声明:如果VK_KHR_portability_subset扩展包含在vkEnumerateDeviceExtensionProperties的pProperties中,ppEnabledExtensionNames必须包括"VK_KHR_portability_subset“(https://vulkan.lunarg.com/doc/view/1.3.211.0/mac/1.3-extensions/vkspec.html#VUID-VkDeviceCreateInfo-pProperties-04451)验证层: vkCreateDevice:试图从VkPhysicalDevice创建一个VkDevice,该驱动程序没有设置VkInstanceCreateInfo标志中的可移植驱动程序位,也没有启用VK_KHR_portability_enumeration扩展。在加载程序的未来版本中,不会枚举此VkPhysicalDevice。

因此,我尝试添加第一个错误中提到的VK_KHR_portability_subset扩展:

代码语言:javascript
运行
复制
const std::vector<const char*> deviceExtensions = {
    VK_KHR_SWAPCHAIN_EXTENSION_NAME,
    "VK_KHR_portability_subset",
};

然后,我得到以下验证错误:

验证层:验证错误: VUID-vkCreateDevice-ppEnabledExtensionNames-01387对象0: handle = 0x106849800,type = VK_OBJECT_TYPE_INSTANCE;欧元MessageID = 0x12537a2c,缺少设备扩展VK_KHR_portability_subset: VK_KHR_get_physical_device_properties2所需的扩展名。Vulkan规范声明: VkDeviceCreateInfo::ppEnabledExtensionNames列表中的每个扩展所需的所有设备扩展都必须存在于该列表(https://vulkan.lunarg.com/doc/view/1.3.211.0/mac/1.3-extensions/vkspec.html#VUID-vkCreateDevice-ppEnabledExtensionNames-01387)验证层: vkCreateDevice:尝试从一个VkPhysicalDevice创建一个VkDevice,该驱动程序没有设置VkInstanceCreateInfo标志中的VkInstanceCreateInfo位,并且启用了VK_KHR_portability_enumeration扩展。在加载程序的未来版本中,不会枚举此VkPhysicalDevice。验证层: vkGetPhysicalDeviceProperties2KHR:模拟在pProperties->pNext中发现了无法识别的结构类型-此结构将被忽略

所以看起来它缺少了VK_KHR_get_physical_device_properties2,我也试着添加了:

代码语言:javascript
运行
复制
const std::vector<const char*> deviceExtensions = {
    VK_KHR_SWAPCHAIN_EXTENSION_NAME,
    "VK_KHR_portability_subset",
    "VK_KHR_get_physical_device_properties2"
};

添加此操作后,设备创建实际上会失败,出现以下错误:

验证层: loader_validate_device_extensions:选定物理设备或启用层不支持的设备扩展VK_KHR_get_physical_device_properties2。

因此,似乎不可能满足验证层。在M1 mac上初始化逻辑设备的正确方法是什么?

EN

回答 2

Stack Overflow用户

发布于 2022-06-19 21:46:36

对我来说很管用,但是.

在创建设备之前,必须先在VkInstanceCreateInfo.ppEnabledExtensionNames中添加VkInstanceCreateInfo.ppEnabledExtensionNames中的Vulkan实例( vkCreateInstance调用),以及使用的任何其他扩展:

代码语言:javascript
运行
复制
VkInstanceCreateInfo createInfo{};

...

const std::vector<const char*> exts =
{
    ...
    VK_KHR_SURFACE_EXTENSION_NAME,
    VK_EXT_METAL_SURFACE_EXTENSION_NAME,
    VK_MVK_MACOS_SURFACE_EXTENSION_NAME,    
    VK_KHR_PORTABILITY_ENUMERATION_EXTENSION_NAME, // <--
    ...
};

ppEnabledExtensionNames = exts.data();

...

并添加验证层还告诉您的标志位:

代码语言:javascript
运行
复制
createInfo.flags = VK_INSTANCE_CREATE_ENUMERATE_PORTABILITY_BIT_KHR;

创建实例,然后不包括VK_KHR_get_physical_device_properties2,但在创建设备并完成时添加VK_KHR_PORTABILITY_SUBSET_EXTENSION_NAME。

所有这些似乎都需要从1.3.216.0 Vulkan SDK开始。

票数 2
EN

Stack Overflow用户

发布于 2022-08-25 22:34:30

关键的观察是错误消息(可能是自动生成的)是错误的。VK_KHR_get_physical_device_properties2是一个实例扩展,而不是一个设备扩展。因此,解决方案是在实例扩展中定义VK_KHR_get_physical_device_properties2VK_KHR_portability_enumeration,在设备扩展中定义VK_KHR_portability_subset。这样做,我就能够使错误信息消失。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72374316

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档