【发布时间】:2020-04-26 01:10:42
【问题描述】:
据我所知,队列系列可能支持在屏幕上显示但不支持图形。假设我有一个同时支持图形和呈现的队列族,以及另一个仅支持呈现的队列族。我应该将第一个队列系列用于两个进程,还是应该将第一个队列系列委托给图形,而将后者委托给呈现?或者这两种方法之间没有明显区别?
【问题讨论】:
据我所知,队列系列可能支持在屏幕上显示但不支持图形。假设我有一个同时支持图形和呈现的队列族,以及另一个仅支持呈现的队列族。我应该将第一个队列系列用于两个进程,还是应该将第一个队列系列委托给图形,而将后者委托给呈现?或者这两种方法之间没有明显区别?
【问题讨论】:
不存在这样的硬件,所以最好的方法是没有方法。如果你想变得非常好,你可以用最少的脑力来处理单独的当前队列家庭案例。尽管您无法在需要它的真实硬件上对其进行测试。因此,我会说带有很好的错误消息的 abort 就足够了,直到您可以使用实际的硬件来执行此操作。
我认为 Khronoses 部分存在一些设计错误。单独的当前队列看起来确实是一种更明确的方式。但是,present op 本身并不是队列操作,因此驱动程序无论如何都可以使用它想要的任何东西。单独的礼物也需要额外的信号量和队列家族所有权转移(或VK_SHARING_MODE_CONCURRENT资源)。历史上没有司机如此极端地报告单独的当前队列。所以我发了KhronosGroup/Vulkan-Docs#1234。
要大致了解vkQueuePresentKHR 发生的情况,您可以查看 Mesa 代码:https://github.com/mesa3d/mesa/blob/bf3c9d27706dc2362b81aad12eec1f7e48e53ddd/src/vulkan/wsi/wsi_common.c#L1120-L1232。使用您提供的队列可能没有猴子业务,除了等待您的信号量,或者最多制作一个图像。如果您(自愿)想要使用单独的当前队列,则需要仅针对驱动程序(可能还有其他影响)对其进行测量并将其列入白名单,它实际上会有所帮助(如果存在这样的情况,并且甚至值得您花时间)。
【讨论】: