#version 450
#extension GL_EXT_scalar_block_layout : require
layout(local_size_x = 1) in;

layout(binding = 0, std140) buffer SSBO1
{
	mat2 a;
	layout(row_major) mat2 a2;
};

layout(scalar, binding = 1) buffer SSBO2
{
	mat2x3 b;
	layout(row_major) mat3x2 b2;
};

void load_store_column()
{
	vec2 u = a[0];
	vec2 v = a[1];
	u += v;
	a[0] = u;
	a[1] = v;
}

void load_store_row()
{
	vec2 u = a2[0];
	vec2 v = a2[1];
	u += v;
	a2[0] = u;
	a2[1] = v;
}

void load_store_packed_column()
{
	vec3 u = b[0];
	vec3 v = b[1];
	u += v;
	b[0] = u;
	b[1] = v;
}

void load_store_packed_row()
{
	vec2 u = b2[0];
	vec2 v = b2[1];
	u += v;
	b2[0] = u;
	b2[1] = v;
}

void main()
{
	load_store_column();
	load_store_row();
	load_store_packed_column();
	load_store_packed_row();
}
