用GL_-KHR_-vulkan_-glsl优化push_常数空间

用GL_-KHR_-vulkan_-glsl优化push_常数空间,glsl,vulkan,spir-v,Glsl,Vulkan,Spir V,我有一个Vulkan应用程序,其中着色器作为GLSL提供,并根据GL_KHR_Vulkan_GLSL规范使用spirv cross进行编译。我尝试通过push_常量块向着色器提供数据。但问题是,如果没有布局/偏移限定符,顶点和片段阶段中的块似乎重叠。当然,我可以指定片段阶段中的块,比如偏移量64,并将顶点阶段限制为该偏移量。但是,如果顶点着色器需要超过64个字节,并且我的push_常量空间非常有限(128个字节),则这是不灵活的。我的GLSL着色器是自动生成的。当然,我可以让生成器生成偏移量,但

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

首先,我尝试将vertex和fragment阶段中的push常量组合到一个块中,该块在vertex和fragment阶段中声明。然而,顶点阶段似乎优化了仅由片段阶段使用的push常量,反之亦然,我得到了一个未分配的CoreValidation着色器PushConstantToFange错误

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

问候