【问题标题】:Vulkan validation warning catch-22 about VK_KHR_portability_subset on MoltenVK关于 MoltenVK 上 VK_KHR_portability_subset 的 Vulkan 验证警告 catch-22
【发布时间】:2021-11-18 20:52:33
【问题描述】:

我在 Big Sur(2014 年中期 15" Retina)上使用带有 MoltenVK(和 GLFW)的 Vulkan 1.2.170。我使用 VK_LAYER_KHRONOS_validation 创建了实例,当我调用 vkCreateDevice 时收到警告

VUID-VkDeviceCreateInfo-pProperties-04451(ERROR / SPEC): msgNum: 976972960 - Validation Error:
 [ VUID-VkDeviceCreateInfo-pProperties-04451 ] Object 0: handle = 0x10cfaad00, 
type = VK_OBJECT_TYPE_PHYSICAL_DEVICE; | MessageID = 0x3a3b6ca0 | vkCreateDevice: 
VK_KHR_portability_subset must be enabled because physical device VkPhysicalDevice 0x10cfaad00[] 
supports it The Vulkan spec states: If the [VK_KHR_portability_subset] extension is included in 
pProperties of vkEnumerateDeviceExtensionProperties, ppEnabledExtensions must include 
"VK_KHR_portability_subset".

好的,好的,我将它作为唯一的扩展添加到 extensions 参数中。然后它说

Missing extension required by the device extension VK_KHR_portability_subset:
VK_KHR_get_physical_device_properties2.

和段错误。如果我添加VK_KHR_get_physical_device_properties2,它会崩溃说它不存在,这是真的(vkEnumerateDeviceExtensionProperties 不会返回它)。

这是一个错误还是它会接受一些扩展?

如果有帮助,支持的扩展是

VK_KHR_16bit_storage VK_KHR_8bit_storage VK_KHR_bind_memory2 VK_KHR_create_renderpass2 VK_KHR_dedicated_allocation VK_KHR_depth_stencil_resolve VK_KHR_descriptor_update_template VK_KHR_device_group VK_KHR_driver_properties VK_KHR_external_fence VK_KHR_external_memory VK_KHR_external_semaphore VK_KHR_get_memory_requirements2 VK_KHR_image_format_list VK_KHR_maintenance1 VK_KHR_maintenance2 VK_KHR_maintenance3 VK_KHR_multiview VK_KHR_portability_subset VK_KHR_push_descriptor VK_KHR_relaxed_block_layout VK_KHR_sampler_mirror_clamp_to_edge VK_KHR_sampler_ycbcr_conversion VK_KHR_shader_draw_parameters VK_KHR_shader_float16_int8 VK_KHR_storage_buffer_storage_class VK_KHR_swapchain VK_KHR_swapchain_mutable_format VK_KHR_timeline_semaphore VK_KHR_uniform_buffer_standard_layout VK_KHR_variable_pointers VK_EXT_debug_marker VK_EXT_descriptor_indexing VK_EXT_fragment_shader_interlock VK_EXT_hdr_metadata VK_EXT_host_query_reset VK_EXT_image_robustness VK_EXT_inline_uniform_block VK_EXT_memory_bud get VK_EXT_private_data VK_EXT_robustness2 VK_EXT_scalar_block_layout VK_EXT_shader_viewport_index_layer VK_EXT_subgroup_size_control VK_EXT_texel_buffer_alignment VK_EXT_vertex_attribute_divisor VK_AMD_gpu_shader_half_float VK_AMD_negative_viewport_height VK_AMD_shader_trinary_minmax VK_INTEL_shader_integer_functions2 VK_GOOGLE_display_timing VK_NV_glsl_shader

【问题讨论】:

    标签: vulkan moltenvk


    【解决方案1】:

    原来VK_KHR_get_physical_device_properties2 是一个实例扩展,而不是一个设备扩展,所以它像这样传递给vkCreateInstance

    VkInstanceCreateInfo instCreateInfo;
    const char* instExtension = "VK_KHR_get_physical_device_properties2";
    instCreateInfo.enabledExtensionCount = 1;
    instCreateInfo.ppEnabledExtensionNames = &instExtension;
    // etcetera
    VkInstance instance;
    vkCreateInstance(&instCreateInfo, nullptr, &instance);
    
    // ...
    
    VkDeviceCreateInfo deviceCreateInfo;
    const char* deviceExtension = "VK_KHR_portability_subset";
    deviceCreateInfo.enabledExtensionCount = 1;
    deviceCreateInfo.ppEnabledExtensionNames = &deviceExtension;
    // etcetera
    VkDevice device;
    vkCreateDevice(physicalDevice, &deviceCreateInfo, nullptr, &device);
    

    【讨论】:

    • 嗨,丹。我正在关注 vulkan-tutorial.com 上的教程,但我遇到了同样的错误。你到底是怎么解决这个问题的?感谢您的帮助!
    • 你是在无条件加载扩展吗?我觉得在加载它们之前必须检查它们是否有必要。
    • @ChristianIvicevic 是的,您应该先致电vkEnumerateDeviceExtensionProperties 并进行检查。为了清楚起见,我在代码示例中省略了它。
    【解决方案2】:

    回答这个问题有点晚了。但是我遇到了同样的问题,并使用vk::enumerateInstanceExtensionProperties().enumerateDeviceExtensionProperties() 来检查扩展是否存在。

    【讨论】:

      猜你喜欢
      • 2019-08-26
      • 1970-01-01
      • 2016-07-30
      • 2014-07-26
      • 2019-02-28
      • 1970-01-01
      • 1970-01-01
      • 2014-07-07
      • 2019-09-05
      相关资源
      最近更新 更多