我有一个带有以下推送常量块的几何着色器:
layout(push_constant) uniform Instance {
mat4 VP;
vec3 posCam;
float radius;
float curvature;
} u_instance;
推送常量在管道布局中定义如下:
uint32_t offset = 0;
uint32_t size = 21 *sizeof(float);
vk::PushConstantRange range {vk::ShaderStageFlagBits::eGeometry,offset,size};
但是,Vulkan 验证层会抛出此错误:
Push constant range covering variable starting at offset 0 not accessible from stage VK_SHADER_STAGE_GEOMETRY_BIT
这里的“不可访问”是什么意思?为什么不能访问它们?如果我将推送常量移动到不同的阶段(例如片段或顶点着色器),则不会发生错误。
此外,我只在 Nvidia GeForce GTX 650 Ti 上收到此错误。我也在 AMD 卡上试过,效果很好。
几何着色器的推送常量是否有某种限制?我检查了我的 Nvidia GPU 的限制,总最大推送常量大小为 256 字节,并且支持几何着色器。我在 Vulkan 规范中也找不到任何东西。