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:
parent
68cb551b1d
commit
170468b4fe
|
@ -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
|
#endif
|
||||||
|
|
Loading…
Reference in New Issue