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:
48
Test/spv.multiStruct.comp
Normal file
48
Test/spv.multiStruct.comp
Normal 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;
|
||||
}
|
||||
Reference in New Issue
Block a user