From: Marek Olšák <marek.ol...@amd.com> This decreases the number of BOs, but might also increase memory usage. It's better for small textures.
The gameplay is on the far right: https://people.freedesktop.org/~mareko/suballoc.svg --- src/gallium/winsys/amdgpu/drm/amdgpu_bo.c | 3 ++- src/gallium/winsys/amdgpu/drm/amdgpu_winsys.h | 5 +++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/src/gallium/winsys/amdgpu/drm/amdgpu_bo.c b/src/gallium/winsys/amdgpu/drm/amdgpu_bo.c index 5943576..9690afd 100644 --- a/src/gallium/winsys/amdgpu/drm/amdgpu_bo.c +++ b/src/gallium/winsys/amdgpu/drm/amdgpu_bo.c @@ -495,22 +495,23 @@ struct pb_slab *amdgpu_bo_slab_alloc(void *priv, unsigned heap, { struct amdgpu_winsys *ws = priv; struct amdgpu_slab *slab = CALLOC_STRUCT(amdgpu_slab); enum radeon_bo_domain domains = radeon_domain_from_heap(heap); enum radeon_bo_flag flags = radeon_flags_from_heap(heap); uint32_t base_id; if (!slab) return NULL; + unsigned slab_size = 1 << AMDGPU_SLAB_BO_SIZE_LOG2; slab->buffer = amdgpu_winsys_bo(amdgpu_bo_create(&ws->base, - 64 * 1024, 64 * 1024, + slab_size, slab_size, domains, flags)); if (!slab->buffer) goto fail; assert(slab->buffer->bo); slab->base.num_entries = slab->buffer->base.size / entry_size; slab->base.num_free = slab->base.num_entries; slab->entries = CALLOC(slab->base.num_entries, sizeof(*slab->entries)); if (!slab->entries) diff --git a/src/gallium/winsys/amdgpu/drm/amdgpu_winsys.h b/src/gallium/winsys/amdgpu/drm/amdgpu_winsys.h index f011b8e..7cd2f20 100644 --- a/src/gallium/winsys/amdgpu/drm/amdgpu_winsys.h +++ b/src/gallium/winsys/amdgpu/drm/amdgpu_winsys.h @@ -34,22 +34,23 @@ #include "pipebuffer/pb_cache.h" #include "pipebuffer/pb_slab.h" #include "gallium/drivers/radeon/radeon_winsys.h" #include "addrlib/addrinterface.h" #include "util/u_queue.h" #include <amdgpu.h> struct amdgpu_cs; -#define AMDGPU_SLAB_MIN_SIZE_LOG2 9 -#define AMDGPU_SLAB_MAX_SIZE_LOG2 14 +#define AMDGPU_SLAB_MIN_SIZE_LOG2 9 /* 512 bytes */ +#define AMDGPU_SLAB_MAX_SIZE_LOG2 16 /* 64 KB */ +#define AMDGPU_SLAB_BO_SIZE_LOG2 17 /* 128 KB */ struct amdgpu_winsys { struct radeon_winsys base; struct pipe_reference reference; struct pb_cache bo_cache; struct pb_slabs bo_slabs; amdgpu_device_handle dev; mtx_t bo_fence_lock; -- 2.7.4 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev