【发布时间】:2022-06-20 05:46:36
【问题描述】:
因此,我尝试在具有 M1 处理器的 Mac 上遵循 Vulkan 教程,但在创建设备时遇到了问题。
所以按照the tutorial,我正在设置启用设备的扩展,如下所示:
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();
当我运行它时,我收到以下验证错误:
验证层:验证错误:[VUID-VkDeviceCreateInfo-pProperties-04451] 对象 0:句柄 = 0x11bd84d40,类型 = VK_OBJECT_TYPE_PHYSICAL_DEVICE; |消息 ID = 0x3a3b6ca0 | vkCreateDevice:必须启用 VK_KHR_portability_subset,因为物理设备 VkPhysicalDevice 0x11bd84d40[] 支持它 Vulkan 规范指出:如果 vkEnumerateDeviceExtensionProperties 的 pProperties 中包含 VK_KHR_portability_subset 扩展,则 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_INSTANCE_CREATE_ENUMERATE_PORTABILITY_BIT_KHR 位并启用 VK_KHR_portability_enumeration 扩展。在加载器的未来版本中,将不会枚举此 VkPhysicalDevice。
所以我尝试添加第一个错误中提到的VK_KHR_portability_subset 扩展:
const std::vector<const char*> deviceExtensions = {
VK_KHR_SWAPCHAIN_EXTENSION_NAME,
"VK_KHR_portability_subset",
};
然后我收到以下验证错误:
验证层:验证错误:[VUID-vkCreateDevice-ppEnabledExtensionNames-01387] 对象 0:句柄 = 0x106849800,类型 = VK_OBJECT_TYPE_INSTANCE; |消息 ID = 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 标志中的 VK_INSTANCE_CREATE_ENUMERATE_PORTABILITY_BIT_KHR 位并启用 VK_KHR_portability_enumeration 扩展。在加载器的未来版本中,将不会枚举此 VkPhysicalDevice。
验证层:vkGetPhysicalDeviceProperties2KHR:仿真在 pProperties->pNext 中发现无法识别的结构类型 - 此结构将被忽略
所以看起来它缺少VK_KHR_get_physical_device_properties2,我也尝试添加它:
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 上初始化逻辑设备的正确方法是什么?
【问题讨论】: