radeonsi: add a slab allocator for bindless descriptors
authorSamuel Pitoiset <samuel.pitoiset@gmail.com>
Tue, 16 May 2017 08:11:54 +0000 (10:11 +0200)
committerSamuel Pitoiset <samuel.pitoiset@gmail.com>
Wed, 14 Jun 2017 08:04:36 +0000 (10:04 +0200)
commit77bbdcdfcd8ad354a6e556b7440ea160fa62db85
tree195ef79ba13ccd98c189e96462557edeb6d3d8c3
parent86d7b7f01a06c6b84876ffcea907576725551a8a
radeonsi: add a slab allocator for bindless descriptors

For each texture/image handles, we need to allocate a new
buffer for the bindless descriptor. But when the number of
buffers added to the current CS becomes high, the overhead
in the winsys (and in the kernel) is important.

To reduce this bottleneck, the idea is to suballocate the
bindless descriptors using a slab similar to the one used
in the winsys.

Currently, a buffer can hold 1024 bindless descriptors but
this limit is arbitrary and could be changed in the future
for some reasons. Once a slab is allocated the "base" buffer
is added to a per-context list.

Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
src/gallium/drivers/radeonsi/si_descriptors.c
src/gallium/drivers/radeonsi/si_pipe.c
src/gallium/drivers/radeonsi/si_pipe.h
src/gallium/drivers/radeonsi/si_state.h