1cb93a386Sopenharmony_ci#version 450 2cb93a386Sopenharmony_cilayout(local_size_x = 1) in; 3cb93a386Sopenharmony_ci 4cb93a386Sopenharmony_ci#define T mat2x3 5cb93a386Sopenharmony_ci#define PACKING std140 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