gpt4 book ai didi

vulkan - vulkan 中的 "Push-Constant"是什么?

转载 作者:行者123 更新时间:2023-12-03 13:33:19 27 4
gpt4 key购买 nike

我浏览了一堆讨论推送常量的教程,暗示可能的好处,但我从来没有真正看到过,即使在 Vulkan 文档中,“推送常量”到底是什么......我不明白它们应该是什么,以及推送常量的目的是什么。我能找到的最接近的是这个 post不幸的是,这并没有要求它们是什么,但是它们与另一个概念之间有什么区别并且对我没有多大帮助。

什么是推送常量,它为什么存在以及它的用途是什么?它的名字从何而来?

最佳答案

推送常量是一种快速向着色器提供少量统一数据的方法。它应该比 UBO 快得多,但一个巨大的限制是数据的大小 - 规范需要 128 个字节才能用于推送常量范围。硬件供应商可能支持更多,但与其他相比意味着它仍然很少(例如 256 字节)。

由于推送常量比其他描述符(我们通过其向着色器提供数据的资源)快得多,因此它们可以方便地用于在绘制调用之间发生变化的数据,例如转换矩阵。

从着色器的角度来看,它们是通过 layout( push_constant ) 声明的。限定符和统一数据块。例如:

layout( push_constant ) uniform ColorBlock {
vec4 Color;
} PushConstant;

从应用程序的角度来看,如果着色器要使用推送常量,则必须在创建管道布局时指定它们。然后是 vkCmdPushConstants()命令必须记录到命令缓冲区中。该函数需要一个指向内存的指针,数据应该从该内存复制到推送常量范围。

给定管道的不同着色器阶段可以使用相同的推送常量块(类似于 UBO)或整个范围的较小部分。但是,重要的是,每个着色器阶段只能使用一个推送常量块。但是,它可以包含多个成员。另一个重要的事情是总数据大小(跨所有使用推送常量的着色器阶段)必须符合大小约束。所以约束不是每个阶段而是整个范围。

Vulkan Cookbook 的 repository 中有一个例子展示了一个简单的推送常量使用场景。萨沙·威廉姆斯的 Vulkan examples还包含展示如何使用推送常量的示例。

关于vulkan - vulkan 中的 "Push-Constant"是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50956414/

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