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