iris: Suballocate BO using the Gallium pb_slab mechanism
With all the preparation in place to handle suballocated BOs at submission and export, we can now wire up the actual suballocator. We use Gallium's pb_slab infrastructure for this, which is already used for this purpose in the amdgpu winsys and now zink as well. Unlike those drivers, we don't use pb_buffer (it doesn't do much) nor pb_cache (we already have a buffer cache). Just pb_slab for now. We can now suballocate BOs at power-of-two (or 3/4 power-of-two) granularity, between 256B and 2MB. Beyond that, we use actual GEM objects as before. This should save us some memory on current GPUs where we previously had a minimum allocation granularity of 4K (page size), but should save us a /ton/ of memory on future GPUs where the minimum page size is 64K. Fewer actual GEM objects should also mean shorter exec_object2 lists passed to the kernel, which could reduce CPU overhead a bit. Using large allocations where the underlying GEM objects correspond with the PTE fragment size may also allow the kernel to use a more efficient page table layout, improving memory access times. This cuts nearly half of the memory usage in a Unity3D demo on a GPU that uses 64K pages. Closes: mesa/mesa#4722 Acked-by:Paulo Zanoni <paulo.r.zanoni@intel.com> Part-of: <mesa/mesa!12623>
- src/gallium/drivers/iris/iris_batch.c 2 additions, 0 deletionssrc/gallium/drivers/iris/iris_batch.c
- src/gallium/drivers/iris/iris_bufmgr.c 338 additions, 6 deletionssrc/gallium/drivers/iris/iris_bufmgr.c
- src/gallium/drivers/iris/iris_bufmgr.h 2 additions, 0 deletionssrc/gallium/drivers/iris/iris_bufmgr.h