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