#version 400
#extension GL_ARB_separate_shader_objects : enable
#extension GL_ARB_shading_language_420pack : enable
layout(location = 0) out vec4 fs_color;
struct Test
{
float value;
};
layout(std140,set = 0,binding = 0) uniform UTest
{
Test t;
} u_test;
float get_value(Test t) {return t.value;}
void main()
{
fs_color = vec4(get_value(u_test.t),0.0,0.0,1.0);
}
上面的 GLSL 代码会导致以下 SPIR-V 编译器错误:
Object: 0x0 | SPIR-V module not valid: OpFunctionCall Argument <id> '29's type does not match Function <id> '8's parameter type.
该错误来自main中的get_value函数调用。每当我尝试将结构实例作为函数参数传递时,如果该实例是统一的一部分(在本例中为 u_test),就会发生错误。如果该结构不是制服的一部分,则可以正常编译。
为什么这是一个问题,我能做些什么来解决它?