[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