SPV: Flatten structs for copy when they are GLSL type aliases.

Addresses issue #304 and issue #307 by replacing unmatched type OpStores with
per-member copies. Covers assignment statements and most argument passing, but
does not yet cover r-value-based argument passing.
This commit is contained in:
John Kessenich
2016-09-02 11:20:21 -06:00
parent 31207bc20a
commit 4bf7155051
7 changed files with 455 additions and 26 deletions

48
Test/spv.multiStruct.comp Normal file
View File

@@ -0,0 +1,48 @@
#version 450 core
struct MyStruct
{
vec4 foo;
bool sb;
};
layout(binding = 0, std430) buffer SSBO0
{
MyStruct a;
} inBuf;
layout(binding = 1, std430) buffer SSBO1
{
MyStruct b;
} outBuf;
layout(binding = 2, std140) uniform UBO
{
MyStruct c;
} uBuf;
struct Nested {
float f;
MyStruct S;
};
layout(binding = 2, std140) uniform UBON
{
Nested N1;
} uBufN;
layout(binding = 1, std430) buffer SSBO1N
{
Nested N2;
} outBufN;
void main()
{
MyStruct t = inBuf.a;
outBuf.b = t;
t = uBuf.c;
outBuf.b = t;
Nested n = uBufN.N1;
outBufN.N2 = n;
}