| #version 310 es |
| layout(local_size_x = 1) in; |
| |
| layout(std140, binding = 1) uniform UBO |
| { |
| int index0; |
| int index1; |
| }; |
| |
| layout(binding = 0, std430) buffer SSBO |
| { |
| layout(column_major) mat4 mcol; |
| layout(row_major) mat4 mrow; |
| |
| layout(column_major) mat2 mcol2x2; |
| layout(row_major) mat2 mrow2x2; |
| |
| layout(column_major) mat2x3 mcol2x3; |
| layout(row_major) mat2x3 mrow2x3; |
| |
| layout(column_major) mat3x2 mcol3x2; |
| layout(row_major) mat3x2 mrow3x2; |
| }; |
| |
| void col_to_row() |
| { |
| // Load column-major, store row-major. |
| mrow = mcol; |
| mrow2x2 = mcol2x2; |
| mrow2x3 = mcol2x3; |
| mrow3x2 = mcol3x2; |
| } |
| |
| void row_to_col() |
| { |
| // Load row-major, store column-major. |
| mcol = mrow; |
| mcol2x2 = mrow2x2; |
| mcol2x3 = mrow2x3; |
| mcol3x2 = mrow3x2; |
| } |
| |
| void write_dynamic_index_row() |
| { |
| mrow[index0][index1] = 1.0; |
| mrow2x2[index0][index1] = 2.0; |
| mrow2x3[index0][index1] = 3.0; |
| mrow3x2[index0][index1] = 4.0; |
| |
| mrow[index0] = vec4(1.0); |
| mrow2x2[index0] = vec2(2.0); |
| mrow2x3[index0] = vec3(3.0); |
| mrow3x2[index0] = vec2(4.0); |
| } |
| |
| void write_dynamic_index_col() |
| { |
| mcol[index0][index1] = 1.0; |
| mcol2x2[index0][index1] = 2.0; |
| mcol2x3[index0][index1] = 3.0; |
| mcol3x2[index0][index1] = 4.0; |
| |
| mcol[index0] = vec4(1.0); |
| mcol2x2[index0] = vec2(2.0); |
| mcol2x3[index0] = vec3(3.0); |
| mcol3x2[index0] = vec2(4.0); |
| } |
| |
| void read_dynamic_index_row() |
| { |
| float a0 = mrow[index0][index1]; |
| float a1 = mrow2x2[index0][index1]; |
| float a2 = mrow2x3[index0][index1]; |
| float a3 = mrow3x2[index0][index1]; |
| |
| vec4 v0 = mrow[index0]; |
| vec2 v1 = mrow2x2[index0]; |
| vec3 v2 = mrow2x3[index0]; |
| vec2 v3 = mrow3x2[index0]; |
| } |
| |
| void read_dynamic_index_col() |
| { |
| float a0 = mcol[index0][index1]; |
| float a1 = mcol2x2[index0][index1]; |
| float a2 = mcol2x3[index0][index1]; |
| float a3 = mcol3x2[index0][index1]; |
| |
| vec4 v0 = mcol[index0]; |
| vec2 v1 = mcol2x2[index0]; |
| vec3 v2 = mcol2x3[index0]; |
| vec2 v3 = mcol3x2[index0]; |
| } |
| |
| void main() |
| { |
| row_to_col(); |
| col_to_row(); |
| write_dynamic_index_row(); |
| write_dynamic_index_col(); |
| read_dynamic_index_row(); |
| read_dynamic_index_col(); |
| } |
| |