[Mesa-dev] [PATCH 14/14] winsys/amdgpu: use 128KB BOs for suballocations of up to 64KB BOs
Nicolai Hähnle
nhaehnle at gmail.com
Mon Jul 3 19:54:09 UTC 2017
On 29.06.2017 21:47, Marek Olšák wrote:
> From: Marek Olšák <marek.olsak at 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
Patches 11-14:
Reviewed-by: Nicolai Hähnle <nicolai.haehnle at amd.com>
> ---
> 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;
>
--
Lerne, wie die Welt wirklich ist,
Aber vergiss niemals, wie sie sein sollte.
More information about the mesa-dev
mailing list