【问题标题】:Vulkan Queue Families ClarificationVulkan 队列系列说明
【发布时间】:2020-12-01 16:06:44
【问题描述】:

在 Vulkan 规范中的某处指定表示功能,vkGetPhysicalDeviceSurfaceSupportKHR 返回 true,仅与具有 VK_QUEUE_GRAPHICS_BIT 位标志的家族或传输独占家族也可能返回 true 相关?

我可能对 Vulkan 教程 (https://vulkan-tutorial.com/Drawing_a_triangle/Presentation/Window_surface#page_Creating-the-presentation-queue) 中的命名感到有些困惑,但我认为那里的 presentQueue 和 presentFamily 实际上是(另一个或相同的)图形队列和图形系列,它具有与VK_QUEUE_TRANSFER_BIT 组的队列族无关(如果队列族不包含两个标志)。

我的假设是正确的还是我误解了什么?

【问题讨论】:

    标签: vulkan


    【解决方案1】:

    严格来说,没有“现在的家族”,也没有“图形家族”。只是有不同的队列系列支持不同类型的操作,例如演示或图形。

    支持多少不同的队列系列以及它们具有哪些功能取决于您的特定 GPU 型号。为了更好地了解所有这些信息,我可以推荐 Sascha Willems 的工具 Hardware Capability Viewer。 (如果您选择上传数据,它还用于填充很棒的 gpuinfo.org 背后的数据库。)

    例如,在 NVIDIA RTX 2080 上,我得到以下具有以下功能的不同队列系列:

    • 队列系列 #0 支持传输、图形、计算和演示
    • 队列系列 #1 仅支持传输,不支持其他任何内容
    • 队列族 #2 支持传输、计算和呈现

    如您所见,我可以使用队列系列 #0 或 #2 中的队列将图像发送到演示引擎,但不能使用队列系列 #1 中的队列。

    我发现这些功能非常有趣。这意味着对于某些用例,使用专用队列系列之一(即 #1 或 #2)可以比使用能够执行任何操作的系列 #0 中的队列获得更好的性能.使用不同的队列可以使您的应用程序更好地并行工作,但通常还需要不同队列之间的某种工作同步。

    家族 #2 中的队列通常被称为“异步计算队列”(我认为,这个术语主要来自 DirectX 世界),并且现在可以在游戏的图形设置中启用很长一段时间(如果支持) .我最近发现的是启用“从计算中呈现”的选项(《毁灭战士永恒》提供此设置),这又是指来自家庭 #2 的队列。我猜这不会自动提高性能(这就是它可以启用/禁用的原因),但在某些 GPU 上肯定会。

    回答您的具体问题:队列族不必为了支持演示而支持图形功能。有一些队列系列(例如在 RTX 2080 上)支持计算和演示,但不支持图形。所有这些都取决于特定的 GPU 型号。我不知道是否有任何 GPU 提供具有演示支持的仅传输队列系列 --- 也许这没有多大意义,所以我想不是。

    【讨论】:

    • 感谢您的澄清,对我帮助很大。
    猜你喜欢
    • 1970-01-01
    • 2021-03-01
    • 2016-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-11
    • 1970-01-01
    相关资源
    最近更新 更多