intel: Minimal calculation of pixel hash table for arbitrary number of pixel pipes.

This starts off with the simplest possible pixel hashing table
calculation that just assigns consecutive indices (modulo N) to
adjacent entries of the table, along the lines of the existing
intel_compute_pixel_hash_table().  The same function will be improved
in a future commit with a more optimal calculation.

Reviewed-by: Caio Oliveira <caio.oliveira@intel.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/13569>
This commit is contained in:
Francisco Jerez 2021-10-06 14:42:18 -07:00
parent 68cb551b1d
commit 170468b4fe
1 changed files with 32 additions and 0 deletions

View File

@ -62,4 +62,36 @@ intel_compute_pixel_hash_table(unsigned n, unsigned m,
}
}
/**
* Compute an \p n x \p m pixel hashing table usable as slice,
* subslice or pixel pipe hashing table. This generalizes the
* previous 3-way hash table function to an arbitrary number of ways
* given by the number of bits set in the \p mask argument, but
* doesn't allow the specification of different frequencies for
* different table indices.
*/
UNUSED static void
intel_compute_pixel_hash_table_nway(unsigned n, unsigned m, uint32_t mask,
uint32_t *p)
{
/* Construct a table mapping consecutive indices to the physical
* indices given by the bits set on the mask argument.
*/
unsigned phys_ids[sizeof(mask) * CHAR_BIT];
unsigned num_ids = 0;
u_foreach_bit(i, mask)
phys_ids[num_ids++] = i;
assert(num_ids > 0);
/* Initialize the table with the cyclic repetition of a
* num_ids-periodic pattern.
*/
for (unsigned i = 0; i < n; i++) {
for (unsigned j = 0; j < m; j++)
p[j + m * i] = phys_ids[(j + i) % num_ids];
}
}
#endif