【问题标题】:Why is there a VK_PIPELINE_STAGE_2_INDEX_INPUT_BIT and do I have to use it?为什么会有 VK_PIPELINE_STAGE_2_INDEX_INPUT_BIT 我必须使用它吗?
【发布时间】:2022-06-11 11:59:30
【问题描述】:

根据 Khronos.org 上的文档,PIPELINE_STAGE_VERTEX_INPUT_BIT 是:

VK_PIPELINE_STAGE_VERTEX_INPUT_BIT specifies the stage of the pipeline where vertex and index buffers are consumed

因此该标志涵盖了顶点输入和索引输入。但是我看到了一个:

VK_PIPELINE_STAGE_2_INDEX_INPUT_BIT

在我的 Vulkan 标题中。他们现在是否被分成两个独立的标志?我是否必须使用它们来刷新与索引相关的无效缓存?

【问题讨论】:

    标签: vulkan


    【解决方案1】:

    VK_PIPELINE_STAGE_VERTEX_INPUT_BITVkPipelineStageFlagBits 的一部分。它涵盖了顶点缓冲区和索引缓冲区。

    VK_PIPELINE_STAGE_2_INDEX_INPUT_BITVkPipelineStageFlagBits2 的一部分。它仅涵盖索引缓冲区。

    它们现在是否被分成两个独立的标志?

    新结构中有两个标志,一个用于索引,一个用于顶点。它们分别是

    • VK_PIPELINE_STAGE_2_VERTEX_ATTRIBUTE_INPUT_BIT 仅用于顶点缓冲区
    • VK_PIPELINE_STAGE_2_INDEX_INPUT_BIT 仅用于索引缓冲区

    但是,还有一个VK_PIPELINE_STAGE_2_VERTEX_INPUT_BIT 定义,它是它们的按位或,所以它的作用就像旧版本的屏障函数中的VK_PIPELINE_STAGE_VERTEX_INPUT_BIT

    我是否必须使用它们来刷新与索引相关的无效缓存?

    这取决于您调用的函数。如果你调用vkCmdPipelineBarrier,你不需要考虑这些,因为它仍然使用VkPipelineStageFlagBits

    如果您拨打vkCmdPipelineBarrier2,则需要使用较新的VkPipelineStageFlagBits2。但是,如果您不关心管道中索引缓冲区和顶点缓冲区之间的区别,那么您可以直接将VK_PIPELINE_STAGE_VERTEX_INPUT_BIT 替换为VK_PIPELINE_STAGE_2_VERTEX_INPUT_BIT,并且一切都应该像以前一样工作,因为VK_PIPELINE_STAGE_2_VERTEX_INPUT_BIT 故意涵盖了两者顶点和索引缓冲区。

    【讨论】:

    • 所以换句话说,如果你需要额外的粒度来区分顶点和索引输入,就只使用 vkCmdPipelineBarrier2,对吧?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-03-09
    • 1970-01-01
    • 2019-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多