我正在尝试编写一个 Vulkan 渲染器,我将 glslangValidator 与 HLSL 一起用于着色器,并尝试实现推送常量。
[[vk::push_constant]]
cbuffer cbFragment {
float4 imageColor;
float4 aaaa;
};
[[vk::push_constant]]
cbuffer cbMatrices {
float4 bbbb;
};
注释“[[vk::push_constant]]”有效,我使用 spirv_reflect 进行反射,两个推送常量都显示出来,它们按预期工作。我遇到的问题是它们似乎重叠,如果我为“bbbb”分配一个值,“imageColor”会以完全相同的方式受到影响,反之亦然。在反射数据中,两个推送常量块的偏移量都为 0,这就解释了这个问题。但是,我似乎完全无法更改任一推送常量的偏移量。[[vk::offset(x)]] 根本不起作用,它既不影响单个成员的偏移量,也不影响推送常量的偏移量。唯一有效的偏移量是 HLSL 内置的“packoffset”,它仅适用于缓冲区成员。
我将非常感谢您对此事的任何帮助,并愿意提供任何必要的澄清,非常感谢!