问题描述
我有一个 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 (将#修改为@)