1#version 310 es
2layout(local_size_x = 1) in;
3
4layout(std140, binding = 1) uniform UBO
5{
6	int index0;
7	int index1;
8};
9
10layout(binding = 0, std430) buffer SSBO
11{
12	layout(column_major) mat4 mcol;
13	layout(row_major) mat4 mrow;
14
15	layout(column_major) mat2 mcol2x2;
16	layout(row_major) mat2 mrow2x2;
17
18	layout(column_major) mat2x3 mcol2x3;
19	layout(row_major) mat2x3 mrow2x3;
20
21	layout(column_major) mat3x2 mcol3x2;
22	layout(row_major) mat3x2 mrow3x2;
23};
24
25void col_to_row()
26{
27	// Load column-major, store row-major.
28	mrow = mcol;
29	mrow2x2 = mcol2x2;
30	mrow2x3 = mcol2x3;
31	mrow3x2 = mcol3x2;
32}
33
34void row_to_col()
35{
36	// Load row-major, store column-major.
37	mcol = mrow;
38	mcol2x2 = mrow2x2;
39	mcol2x3 = mrow2x3;
40	mcol3x2 = mrow3x2;
41}
42
43void write_dynamic_index_row()
44{
45	mrow[index0][index1] = 1.0;
46	mrow2x2[index0][index1] = 2.0;
47	mrow2x3[index0][index1] = 3.0;
48	mrow3x2[index0][index1] = 4.0;
49
50	mrow[index0] = vec4(1.0);
51	mrow2x2[index0] = vec2(2.0);
52	mrow2x3[index0] = vec3(3.0);
53	mrow3x2[index0] = vec2(4.0);
54}
55
56void write_dynamic_index_col()
57{
58	mcol[index0][index1] = 1.0;
59	mcol2x2[index0][index1] = 2.0;
60	mcol2x3[index0][index1] = 3.0;
61	mcol3x2[index0][index1] = 4.0;
62
63	mcol[index0] = vec4(1.0);
64	mcol2x2[index0] = vec2(2.0);
65	mcol2x3[index0] = vec3(3.0);
66	mcol3x2[index0] = vec2(4.0);
67}
68
69void read_dynamic_index_row()
70{
71	float a0 = mrow[index0][index1];
72	float a1 = mrow2x2[index0][index1];
73	float a2 = mrow2x3[index0][index1];
74	float a3 = mrow3x2[index0][index1];
75
76	vec4 v0 = mrow[index0];
77	vec2 v1 = mrow2x2[index0];
78	vec3 v2 = mrow2x3[index0];
79	vec2 v3 = mrow3x2[index0];
80}
81
82void read_dynamic_index_col()
83{
84	float a0 = mcol[index0][index1];
85	float a1 = mcol2x2[index0][index1];
86	float a2 = mcol2x3[index0][index1];
87	float a3 = mcol3x2[index0][index1];
88
89	vec4 v0 = mcol[index0];
90	vec2 v1 = mcol2x2[index0];
91	vec3 v2 = mcol2x3[index0];
92	vec2 v3 = mcol3x2[index0];
93}
94
95void main()
96{
97	row_to_col();
98	col_to_row();
99	write_dynamic_index_row();
100	write_dynamic_index_col();
101	read_dynamic_index_row();
102	read_dynamic_index_col();
103}
104
105