【问题标题】:Vulkan: Geometry Shader Validation incorrect?Vulkan:几何着色器验证不正确?
【发布时间】:2016-11-06 17:02:29
【问题描述】:

我目前正在使用 NVIDIA GeForce GTX 780(如果重要的话,来自 Gigabyte - 我不知道这会受到板载 BIOS 的影响有多大,我也有两个已安装但由于 Vulkans 无法支持 SLI 我在代码中一次只使用一个设备。但是在 NVIDIA 控制中心 SLI 已激活。我使用官方驱动程序版本 375.63)。当然,该 GPU 完全具备几何着色器的能力。
我正在使用带有 Vulkan API 的几何着色器,它可以正常工作,并且可以完成我期望它做的所有事情。但是我得到的验证层报告如下:@[SC]: Shader requires VkPhysicalDeviceFeatures::geometryShader but is not enabled on the device.

这是一个错误吗?有人有类似的问题吗?

PS: http://vulkan.gpuinfo.org/displayreport.php?id=777#features 表示对“几何着色器”的支持是“真实的”,正如预期的那样。我正在使用 Vulkan 1.0.30.0 SDK。

【问题讨论】:

    标签: c++ graphics nvidia vulkan


    【解决方案1】:

    Vulkan 功能的工作方式与 OpenGL 扩展不同。在 OpenGL 中,如果支持扩展,则它始终处于活动状态。在 Vulkan 中,仅提供功能这一事实是不够的。创建VkDevice 时,您必须明确询问您打算使用的所有功能。

    如果您没有要求几何着色器功能,那么您就不能使用 GS,即使 VkPhysicalDevice 宣传支持它。

    因此,步骤顺序应该是检查VkPhysicalDevice 是否支持您要使用的功能,然后在您调用vkCreateDevice 时在VkDeviceCreateInfo::pEnabledFeatures 中提供这些功能。

    由于 Vulkan 不会对其大部分输入进行验证检查,因此实际的驱动程序可能会假设您启用了该功能,并且只是按照通常的方式进行操作。但这不是必须的;使用尚未启用的功能是未定义的行为。所以验证层阻止你是对的。

    【讨论】:

    • 那为什么它仍然有效?我试试看,谢谢:)
    • 我解释了它为什么不起作用:“实际的驱动程序可能会假设您启用了该功能并按照通常的方式进行操作。”对于 Vulkan,您应该永远假设“工作”意味着您做的一切都是正确的。监听验证层。
    • @NicolBolas 为什么有人不想一次启用所有功能并一劳永逸地完成它?我找不到任何解释为什么我应该只启用部分功能而不是全部。
    • @Zingam:可能是因为您没有使用这些功能?如果我不使用 16 位整数,我不知道为什么要启用它们。
    • @NicolBolas 我有一堆愚蠢的可用性问题,我找不到答案。例如,在这种情况下,我想知道的是,为什么需要细粒度设置,如果启用但未使用某个功能等会有任何惩罚。
    猜你喜欢
    • 1970-01-01
    • 2017-07-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多