【发布时间】:2020-02-09 00:14:40
【问题描述】:
我有一个顶点着色器,它有一个包含一个浮点数的 push-constant 块:
layout(push_constant) uniform pushConstants {
float test1;
} u_pushConstants;
以及带有另一个具有不同浮点值的 push-constant 块的片段着色器:
layout(push_constant) uniform pushConstants {
float test2;
} u_pushConstants;
test1 和 test2 应该是不同的。
管道布局的推送常量范围定义如下:
std::array<vk::PushConstantRange,2> ranges = {
vk::PushConstantRange{
vk::ShaderStageFlagBits::eVertex,
0,
sizeof(float)
},
vk::PushConstantRange{
vk::ShaderStageFlagBits::eFragment,
sizeof(float), // Push-constant range offset (Start after vertex push constants)
sizeof(float)
}
};
然后在渲染过程中推送实际常量,如下所示:
std::array<float,1> constants = {123.f};
commandBufferDraw.pushConstants(
pipelineLayout,
vk::ShaderStageFlagBits::eVertex,
0,
sizeof(float),
constants.data()
);
std::array<float,1> constants = {456.f};
commandBufferDraw.pushConstants(
pipelineLayout,
vk::ShaderStageFlagBits::eFragment,
sizeof(float), // Offset in bytes
sizeof(float),
constants.data()
);
但是,当检查着色器内部的值时,两者的值都是 123。 似乎完全忽略了偏移量。我是不是用错了?
【问题讨论】: