1cb93a386Sopenharmony_ci#version 450
2cb93a386Sopenharmony_cilayout(local_size_x = 1) in;
3cb93a386Sopenharmony_ci
4cb93a386Sopenharmony_ci#define T mat2x3
5cb93a386Sopenharmony_ci#define PACKING std430
6cb93a386Sopenharmony_ci
7cb93a386Sopenharmony_cilayout(set = 0, binding = 0, PACKING) buffer SSBOCol
8cb93a386Sopenharmony_ci{
9cb93a386Sopenharmony_ci	layout(column_major) T col_major0;
10cb93a386Sopenharmony_ci	layout(column_major) T col_major1;
11cb93a386Sopenharmony_ci};
12cb93a386Sopenharmony_ci
13cb93a386Sopenharmony_cilayout(set = 0, binding = 1, PACKING) buffer SSBORow
14cb93a386Sopenharmony_ci{
15cb93a386Sopenharmony_ci	layout(row_major) T row_major0;
16cb93a386Sopenharmony_ci	layout(row_major) T row_major1;
17cb93a386Sopenharmony_ci};
18cb93a386Sopenharmony_ci
19cb93a386Sopenharmony_civoid load_store_to_variable_col_major()
20cb93a386Sopenharmony_ci{
21cb93a386Sopenharmony_ci	// Load to variable.
22cb93a386Sopenharmony_ci	T loaded = col_major0;
23cb93a386Sopenharmony_ci
24cb93a386Sopenharmony_ci	// Store from variable.
25cb93a386Sopenharmony_ci	col_major1 = loaded;
26cb93a386Sopenharmony_ci}
27cb93a386Sopenharmony_ci
28cb93a386Sopenharmony_civoid load_store_to_variable_row_major()
29cb93a386Sopenharmony_ci{
30cb93a386Sopenharmony_ci	// Load to variable.
31cb93a386Sopenharmony_ci	T loaded = row_major0;
32cb93a386Sopenharmony_ci
33cb93a386Sopenharmony_ci	// Store to variable.
34cb93a386Sopenharmony_ci	row_major0 = loaded;
35cb93a386Sopenharmony_ci}
36cb93a386Sopenharmony_ci
37cb93a386Sopenharmony_civoid copy_col_major_to_col_major()
38cb93a386Sopenharmony_ci{
39cb93a386Sopenharmony_ci	// Copy col -> col
40cb93a386Sopenharmony_ci	col_major0 = col_major1;
41cb93a386Sopenharmony_ci}
42cb93a386Sopenharmony_ci
43cb93a386Sopenharmony_civoid copy_row_major_to_col_major()
44cb93a386Sopenharmony_ci{
45cb93a386Sopenharmony_ci	// Copy row -> col
46cb93a386Sopenharmony_ci	col_major0 = row_major0;
47cb93a386Sopenharmony_ci}
48cb93a386Sopenharmony_ci
49cb93a386Sopenharmony_civoid copy_col_major_to_row_major()
50cb93a386Sopenharmony_ci{
51cb93a386Sopenharmony_ci	// Copy col -> row
52cb93a386Sopenharmony_ci	row_major0 = col_major0;
53cb93a386Sopenharmony_ci}
54cb93a386Sopenharmony_ci
55cb93a386Sopenharmony_civoid copy_row_major_to_row_major()
56cb93a386Sopenharmony_ci{
57cb93a386Sopenharmony_ci	// Copy row -> row
58cb93a386Sopenharmony_ci	row_major0 = row_major1;
59cb93a386Sopenharmony_ci}
60cb93a386Sopenharmony_ci
61cb93a386Sopenharmony_civoid copy_columns()
62cb93a386Sopenharmony_ci{
63cb93a386Sopenharmony_ci	// Copy columns/rows.
64cb93a386Sopenharmony_ci	col_major0[1] = row_major0[1];
65cb93a386Sopenharmony_ci	row_major0[1] = col_major0[1];
66cb93a386Sopenharmony_ci}
67cb93a386Sopenharmony_ci
68cb93a386Sopenharmony_civoid copy_elements()
69cb93a386Sopenharmony_ci{
70cb93a386Sopenharmony_ci	// Copy individual elements.
71cb93a386Sopenharmony_ci	col_major0[0][1] = row_major0[0][1];
72cb93a386Sopenharmony_ci	row_major0[0][1] = col_major0[0][1];
73cb93a386Sopenharmony_ci}
74cb93a386Sopenharmony_ci
75cb93a386Sopenharmony_civoid main()
76cb93a386Sopenharmony_ci{
77cb93a386Sopenharmony_ci	load_store_to_variable_col_major();
78cb93a386Sopenharmony_ci	load_store_to_variable_row_major();
79cb93a386Sopenharmony_ci	copy_col_major_to_col_major();
80cb93a386Sopenharmony_ci	copy_col_major_to_row_major();
81cb93a386Sopenharmony_ci	copy_row_major_to_col_major();
82cb93a386Sopenharmony_ci	copy_row_major_to_row_major();
83cb93a386Sopenharmony_ci	copy_columns();
84cb93a386Sopenharmony_ci	copy_elements();
85cb93a386Sopenharmony_ci}
86