I einen Vertex-Shader mit einem Push-Konstantenblock habe, die einen Schwimmer:verschiedene Druckkonstanten in verschiedenen Shader Verwendung Stufen
layout(push_constant) uniform pushConstants {
float test1;
} u_pushConstants;
und einen Fragment-Shader mit einem anderen Druckkonstant Block mit einem anderen Gleitkommawert:
layout(push_constant) uniform pushConstants {
float test2;
} u_pushConstants;
test1 und test2 sollen, anders sein.
Die Push-konstante Bereiche für die Pipeline-Layout sind wie folgt definiert:
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)
}
};
Die tatsächlichen Konstanten werden dann während der Wiedergabe wie folgt gedrückt:
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()
);
Wenn jedoch die Werte innerhalb Überprüfung Die Shader, beide haben den Wert 123. Es scheint, dass die Offsets vollständig ignoriert werden. Benutze ich sie falsch?