#version 450
layout(local_size_x = 1) in;

#define T mat4x2
#define PACKING std430

layout(set = 0, binding = 0, PACKING) buffer SSBOCol
{
	layout(column_major) T col_major0;
	layout(column_major) T col_major1;
};

layout(set = 0, binding = 1, PACKING) buffer SSBORow
{
	layout(row_major) T row_major0;
	layout(row_major) T row_major1;
};

void load_store_to_variable_col_major()
{
	// Load to variable.
	T loaded = col_major0;

	// Store from variable.
	col_major1 = loaded;
}

void load_store_to_variable_row_major()
{
	// Load to variable.
	T loaded = row_major0;

	// Store to variable.
	row_major0 = loaded;
}

void copy_col_major_to_col_major()
{
	// Copy col -> col
	col_major0 = col_major1;
}

void copy_row_major_to_col_major()
{
	// Copy row -> col
	col_major0 = row_major0;
}

void copy_col_major_to_row_major()
{
	// Copy col -> row
	row_major0 = col_major0;
}

void copy_row_major_to_row_major()
{
	// Copy row -> row
	row_major0 = row_major1;
}

void copy_columns()
{
	// Copy columns/rows.
	col_major0[1] = row_major0[1];
	row_major0[1] = col_major0[1];
}

void copy_elements()
{
	// Copy individual elements.
	col_major0[0][1] = row_major0[0][1];
	row_major0[0][1] = col_major0[0][1];
}

void main()
{
	load_store_to_variable_col_major();
	load_store_to_variable_row_major();
	copy_col_major_to_col_major();
	copy_col_major_to_row_major();
	copy_row_major_to_col_major();
	copy_row_major_to_row_major();
	copy_columns();
	copy_elements();
}
