-static void si_pc_get_size(struct r600_perfcounter_block *group,
- unsigned count, unsigned *selectors,
- unsigned *num_select_dw, unsigned *num_read_dw)
-{
- struct si_pc_block *sigroup = (struct si_pc_block *)group->data;
- struct si_pc_block_base *regs = sigroup->b;
- unsigned layout_multi = regs->layout & SI_PC_MULTI_MASK;
-
- if (regs->layout & SI_PC_FAKE) {
- *num_select_dw = 0;
- } else if (layout_multi == SI_PC_MULTI_BLOCK) {
- if (count < regs->num_multi)
- *num_select_dw = 2 * (count + 2) + regs->num_prelude;
- else
- *num_select_dw = 2 + count + regs->num_multi + regs->num_prelude;
- } else if (layout_multi == SI_PC_MULTI_TAIL) {
- *num_select_dw = 4 + count + MIN2(count, regs->num_multi) + regs->num_prelude;
- } else if (layout_multi == SI_PC_MULTI_CUSTOM) {
- assert(regs->num_prelude == 0);
- *num_select_dw = 3 * (count + MIN2(count, regs->num_multi));
- } else {
- assert(layout_multi == SI_PC_MULTI_ALTERNATE);
-
- *num_select_dw = 2 + count + MIN2(count, regs->num_multi) + regs->num_prelude;
- }
-
- *num_read_dw = 6 * count;
-}