#version 450
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;

struct Foo
{
    int a;
    int b;
    int c;
};

layout(binding = 1, std140) buffer SSBO1
{
    layout(offset = 4) int a;
    layout(offset = 8) int b;
    layout(offset = 16) Foo foo;
    layout(offset = 48) int c[8];
} ssbo1;

layout(binding = 2, std430) buffer SSBO2
{
    layout(offset = 4) int a;
    layout(offset = 8) int b;
    layout(offset = 16) Foo foo;
    layout(offset = 48) int c[8];
} ssbo2;

layout(binding = 0, std140) uniform UBO
{
    layout(offset = 4) int a;
    layout(offset = 8) int b;
    layout(offset = 16) Foo foo;
    layout(offset = 48) int c[8];
} ubo;

void main()
{
    ssbo1.a = ssbo2.a;
    ssbo1.b = ubo.b;
}

