gpt4 book ai didi

vulkan - 来自先前管道的 VkDescriptorSet 给出性能警告

转载 作者:行者123 更新时间:2023-12-02 00:03:45 24 4
gpt4 key购买 nike

Vulkan 允许多组输入描述。在我的用例中,我用 2 组渲染一个特定的对象。将具有 2 个偏移量的 0 设置到包含两个不同偏移位置上的帧数据和对象数据的动态缓冲区中。设置 1 并为每个对象更改纹理。所以在我第一次通过之后,我绑定(bind)了 2 组。现在,当我启动下一个子 channel 并绑定(bind)不同的管道时,这两个集合仍然绑定(bind),然后当我尝试绑定(bind)集合 0(我现在不需要集合 1)时,我收到有关不兼容的性能警告。

之前绑定(bind)为集 #0 的 DescriptorSetDS 0x10 与新绑定(bind)为集 #0 的集 0x668cec8 不兼容,因此集 #1 和任何后续集都会受到新绑定(bind)的 pipelineLayout (0x64) 的干扰

现在我很清楚了,我知道第 1 组是“受干扰的”。但我不知道该怎么做是告诉 vulkan 这是正确的,因此不再给出警告(设计总是出现此错误的软件似乎是错误的)。我期望重置已绑定(bind)的集合,“解除绑定(bind)”集合。但我认为我错过了一些东西,因为我什么也没看到。

当然,也许我做错了什么,或者缺少一些相关命令,所以我简化了完成的调用顺序:

vkCmdBeginRenderPass
vkCmdBindPipeline
vkCmdBindDescriptorSets -> 绑定(bind)集:0、1
vkCmdBindVertexBuffers
vkCmdDraw
vkCmdNextSubpass
vkCmdBindPipeline(不同管道)
vkCmdBindDescriptorSets -> 绑定(bind)集:0 -> 关于集扰动的错误

最佳答案

目前,对此还没有很好的答案。您目前正在做的事情在性能方面应该非常好。只是没有办法向调试层充分传达您的意图。

Vulkan API 无法让您说“我正在设置第 0 组,我不关心后面的任何组”。因此,验证层无法区分这与“我正在设置集合 0 并且我想保留后面的集合”之间的区别。实际的驱动程序并不关心,但验证层需要知道您的意图。

我建议只是忍受这个警告。如果你试图做一些事情,比如让它使用第 1 组或第 2 组,你只会让事情变得更加困难。您必须发明一个管道布局,其中集合 0 是一个空集合,但随后您必须实际将一个空集合绑定(bind)到集合 0。这意味着您必须创建一个空描述符集合来绑定(bind)在那里。

这只是误报。

关于vulkan - 来自先前管道的 VkDescriptorSet 给出性能警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38679060/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com