SPIRV-Cross/shaders/comp/inout-struct.invalid.comp

56 lines
915 B
Plaintext
Raw Normal View History

2016-03-02 17:09:16 +00:00
#version 310 es
layout(local_size_x = 1) in;
layout(std430, binding = 0) writeonly buffer SSBO
{
vec4 data[];
} outdata;
layout(std430, binding = 1) readonly buffer SSBO2
{
vec4 data[];
} indata;
struct Foo
{
vec4 a;
vec4 b;
vec4 c;
vec4 d;
};
layout(std430, binding = 2) readonly buffer SSBO3
{
Foo foos[];
} foobar;
vec4 bar(Foo foo)
{
return foo.a + foo.b + foo.c + foo.d;
}
void baz(out Foo foo)
{
uint ident = gl_GlobalInvocationID.x;
foo.a = indata.data[4u * ident + 0u];
foo.b = indata.data[4u * ident + 1u];
foo.c = indata.data[4u * ident + 2u];
foo.d = indata.data[4u * ident + 3u];
}
void meow(inout Foo foo)
{
foo.a += 10.0;
foo.b += 20.0;
foo.c += 30.0;
foo.d += 40.0;
}
void main()
{
Foo foo;
baz(foo);
meow(foo);
outdata.data[gl_GlobalInvocationID.x] = bar(foo) + bar(foobar.foos[gl_GlobalInvocationID.x]);
}