Tôi có một vertex shader với một khối push-liên tục chứa một float:Sử dụng khác nhau push-hằng số trong shader khác nhau giai đoạn
layout(push_constant) uniform pushConstants {
float test1;
} u_pushConstants;
Và một Shader mảnh với một khối push-liên tục với một giá trị float khác nhau:
layout(push_constant) uniform pushConstants {
float test2;
} u_pushConstants;
test1 và test2 có nghĩa vụ phải thể khác nhau.
Các dãy đẩy liên tục cho việc bố trí đường ống được định nghĩa như thế này:
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)
}
};
Các hằng số thực tế sau đó được đẩy trong khi hiển thị như thế này:
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()
);
Tuy nhiên, khi kiểm tra các giá trị bên trong các shader, cả hai đều có giá trị 123. Dường như các offset được bỏ qua hoàn toàn. Tôi có sử dụng chúng không chính xác không?