【问题标题】:What are layout transitions in graphics programming什么是图形编程中的布局转换
【发布时间】:2022-07-23 10:39:43
【问题描述】:

我正在关注 vulkan-tutorial.com,在教程的图片部分中提到了布局转换,但没有详细说明它们是什么。我不喜欢复制和粘贴代码而不知道它究竟做了什么,而且我在教程或谷歌上找不到足够的解释。

【问题讨论】:

    标签: vulkan


    【解决方案1】:

    “布局过渡”正是这些词的意思。当您将图像子资源的布局从一种布局转换到另一种布局时。所以你的问题似乎真的是......什么是布局?

    在 Vulkan 抽象中,图像由子资源组成。这些代表图像的不同部分,可以独立于其他部分进行操作。例如,一个 mipmap 图像的每个 mipmap 级别都是一个子资源。

    在 GPU 进程使用图像子资源的任何特定时间,该子资源都有一个布局。这是 GPU 操作的 Vulkan 抽象的一部分,因此它对 GPU 的确切含义因芯片而异。

    重要的是:布局限制了您如何使用图像子资源。或者更重要的是,为了以特定方式使用图像子资源,它必须位于允许这种使用的布局中。

    当子资源位于VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL 布局中时,您只能执行从着色器中的子资源读取的操作。着色器无法写入图像,也无法将图像用作渲染目标。

    现在,一般布局允许在该布局内随时使用。然而,这也可能代表不太理想的性能。任何更受限制的布局都可以使这些对图像的访问对性能更加友好(取决于硬件)。

    因此,跟踪您计划使用的任何图像子资源的布局是您的工作。现在对于大多数图像,您将使用目标传输布局上传到它们,然后将它们作为着色器只读,因为您通常不会更随意地使用大多数图像。因此,一般来说,这意味着跟踪您想要读取的渲染目标,以及交换链图像(您必须在呈现它们之前将它们转换到当前布局)和存储图像。

    布局转换通常作为两个操作之间显式依赖关系的一部分发生。这是有道理的;如果您正在将数据上传到图像,并且稍后想要从中读取,则需要在上传和读取之间建立依赖关系。那你也可以做布局转场,因为转场会改变图片的字节存储方式,所以需要先转场。

    【讨论】:

      猜你喜欢
      • 2012-01-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多