简体   繁体   English

尝试启用保守光栅化失败

[英]Trying to enable conservative rasterization fails

I am trying to follow Sacha Willems' example on conservative rasterization.我正在尝试遵循 Sacha Willems 关于保守光栅化的示例。

To that effect I added tried requesting the extensions when making my device:为此,我添加了尝试在制作设备时请求扩展:

const std::vector<const char*> DEVICE_EXTENSIONS = {
    VK_KHR_SWAPCHAIN_EXTENSION_NAME,
    VK_KHR_DYNAMIC_RENDERING_EXTENSION_NAME,
    VK_EXT_EXTENDED_DYNAMIC_STATE_EXTENSION_NAME,
    VK_EXT_CONSERVATIVE_RASTERIZATION_EXTENSION_NAME,
    VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME
};

    vk::DeviceCreateInfo create_info = {};
    create_info.queueCreateInfoCount = queue_create_infos.size();
    create_info.pQueueCreateInfos = queue_create_infos.data();
    create_info.enabledLayerCount = 0;
    create_info.ppEnabledLayerNames = nullptr;
    create_info.enabledExtensionCount = DEVICE_EXTENSIONS.size();
    create_info.ppEnabledExtensionNames = DEVICE_EXTENSIONS.data();
    create_info.pEnabledFeatures = &device_features;
    /* ... */

However when I try to load some of the extension functions, it fails:但是,当我尝试加载一些扩展功能时,它会失败:

vkGetPhysicalDeviceProperties2KHR_NE = (PFN_vkGetPhysicalDeviceProperties2KHR) vkGetInstanceProcAddr(
        instance, "vkGetPhysicalDeviceProperties2KHR");
Assert(vkGetPhysicalDeviceProperties2KHR_NE,
        "Failed to find extension function: vkGetPhysicalDeviceProperties2KHR");
Failed check: vkGetPhysicalDeviceProperties2KHR_NE

Failed to find extension function: vkGetPhysicalDeviceProperties2KHR

I know that the extension is available in my card:我知道扩展程序在我的卡中可用:

vulkaninfo | grep extensi | grep conservative
MESA-INTEL: warning: Haswell Vulkan support is incomplete
WARNING: lavapipe is not a conformant vulkan implementation, testing use only.
WARNING: lavapipe is not a conformant vulkan implementation, testing use only.
        VK_EXT_conservative_rasterization         : extension revision 1

What am I missing?我错过了什么?

VK_KHR_get_physical_device_properties2 is an instance level extension (see the name chapter of the extension spec ), but you are enabling it at the device level. VK_KHR_get_physical_device_properties2是一个实例级别的扩展(参见扩展规范的名称章节),但您是在设备级别启用它。 That's why loading it's function pointer via vkGetInstanceProcAddr fails.这就是为什么通过vkGetInstanceProcAddr加载它的 function 指针失败的原因。 You need to enable that extension at instance creation time.您需要在创建实例时启用该扩展。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM