微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

通过 GL_KHR_vulkan_glsl 最佳地使用 push_constant 空间

如何解决通过 GL_KHR_vulkan_glsl 最佳地使用 push_constant 空间

我有一个 Vulkan 应用程序,其中着色器作为 GLSL 提供,并根据 GL_KHR_vulkan_glsl 规范使用 spirv cross 进行编译。我尝试通过 push_constant 块向着色器提供数据。然而问题是,如果没有布局/偏移限定符,顶点和片段阶段中的块似乎重叠。当然,我可以在片段阶段分配块,例如偏移量 64 并将顶点阶段限制为该值。但是,如果顶点着色器需要超过 64 个字节并且我的 push_constant 空间非常有限(128 个字节),那么这是不灵活的。我的 GLSL 着色器是自动生成的。当然,我可以让生成生成偏移量,但随后我必须在片段着色器编译之前根据 std140/std430 计算顶点着色器 push_constant 的使用情况,这让我感到不舒服。

首先,我尝试将来自顶点和片段阶段的推送常量组合到一个块中,该块在顶点和片段阶段都声明。但是,顶点阶段似乎优化了仅由片段阶段使用的推送常量,反之亦然,并且我收到了 UNASSIGNED-CoreValidation-Shader-PushConstantOutOfRange 错误

你能推荐一种方法来避免顶点和片段着色器 push_const 块之间的重叠,同时仍然以最佳方式共享 128 字节空间吗?

问候

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。