相关疑难解决方法(0)

在不同的着色器阶段使用不同的推式常量

我有一个顶点着色器,其中包含一个包含一个浮点数的push-constant块:

layout(push_constant) uniform pushConstants {
    float test1;
} u_pushConstants;
Run Code Online (Sandbox Code Playgroud)

一个片段着色器与另一个具有不同浮点值的push-constant块:

layout(push_constant) uniform pushConstants {
    float test2;
} u_pushConstants;
Run Code Online (Sandbox Code Playgroud)

test1test2应该是不同的.

管道布局的推 - 常量范围定义如下:

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)
    }
};
Run Code Online (Sandbox Code Playgroud)

然后在渲染过程中推送实际常量,如下所示:

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()
);
Run Code Online (Sandbox Code Playgroud)

但是,在检查着色器内部的值时,两者都具有值123.似乎完全忽略了偏移量.我不正确地使用它们吗?

shader glsl vulkan

12
推荐指数
1
解决办法
3494
查看次数

标签 统计

glsl ×1

shader ×1

vulkan ×1