diff options
author | Marek Olšák <[email protected]> | 2018-01-01 22:58:43 +0100 |
---|---|---|
committer | Marek Olšák <[email protected]> | 2018-01-27 02:09:09 +0100 |
commit | 0e40c6a7b70673734dfecf5957c086b30f11befe (patch) | |
tree | 2249c7d3ec29a6763876fc8aac922973112e1cbc /src/gallium/winsys/radeon | |
parent | 175549e0e988d10f8277c30ae4e6b6d5fea702a4 (diff) |
gallium/radeon: set number of pb_cache buckets = number of heaps
Reviewed-by: Samuel Pitoiset <[email protected]>
Diffstat (limited to 'src/gallium/winsys/radeon')
-rw-r--r-- | src/gallium/winsys/radeon/drm/radeon_drm_bo.c | 27 | ||||
-rw-r--r-- | src/gallium/winsys/radeon/drm/radeon_drm_winsys.c | 2 |
2 files changed, 13 insertions, 16 deletions
diff --git a/src/gallium/winsys/radeon/drm/radeon_drm_bo.c b/src/gallium/winsys/radeon/drm/radeon_drm_bo.c index 4be6f4002ff..7aef238c847 100644 --- a/src/gallium/winsys/radeon/drm/radeon_drm_bo.c +++ b/src/gallium/winsys/radeon/drm/radeon_drm_bo.c @@ -589,10 +589,9 @@ static const struct pb_vtbl radeon_bo_vtbl = { static struct radeon_bo *radeon_create_bo(struct radeon_drm_winsys *rws, unsigned size, unsigned alignment, - unsigned usage, unsigned initial_domains, unsigned flags, - unsigned pb_cache_bucket) + int heap) { struct radeon_bo *bo; struct drm_radeon_gem_create args; @@ -639,7 +638,7 @@ static struct radeon_bo *radeon_create_bo(struct radeon_drm_winsys *rws, pipe_reference_init(&bo->base.reference, 1); bo->base.alignment = alignment; - bo->base.usage = usage; + bo->base.usage = 0; bo->base.size = size; bo->base.vtbl = &radeon_bo_vtbl; bo->rws = rws; @@ -648,8 +647,11 @@ static struct radeon_bo *radeon_create_bo(struct radeon_drm_winsys *rws, bo->initial_domain = initial_domains; bo->hash = __sync_fetch_and_add(&rws->next_bo_hash, 1); (void) mtx_init(&bo->u.real.map_mutex, mtx_plain); - pb_cache_init_entry(&rws->bo_cache, &bo->u.real.cache_entry, &bo->base, - pb_cache_bucket); + + if (heap >= 0) { + pb_cache_init_entry(&rws->bo_cache, &bo->u.real.cache_entry, &bo->base, + heap); + } if (rws->info.has_virtual_memory) { struct drm_radeon_gem_va va; @@ -921,7 +923,7 @@ radeon_winsys_bo_create(struct radeon_winsys *rws, { struct radeon_drm_winsys *ws = radeon_drm_winsys(rws); struct radeon_bo *bo; - unsigned usage = 0, pb_cache_bucket = 0; + int heap = -1; assert(!(flags & RADEON_FLAG_SPARSE)); /* not supported */ @@ -980,27 +982,22 @@ no_slab: /* Shared resources don't use cached heaps. */ if (use_reusable_pool) { - int heap = radeon_get_heap_index(domain, flags); + heap = radeon_get_heap_index(domain, flags); assert(heap >= 0 && heap < RADEON_MAX_CACHED_HEAPS); - usage = 1 << heap; /* Only set one usage bit for each heap. */ - - pb_cache_bucket = radeon_get_pb_cache_bucket_index(heap); bo = radeon_bo(pb_cache_reclaim_buffer(&ws->bo_cache, size, alignment, - usage, pb_cache_bucket)); + 0, heap)); if (bo) return &bo->base; } - bo = radeon_create_bo(ws, size, alignment, usage, domain, flags, - pb_cache_bucket); + bo = radeon_create_bo(ws, size, alignment, domain, flags, heap); if (!bo) { /* Clear the cache and try again. */ if (ws->info.has_virtual_memory) pb_slabs_reclaim(&ws->bo_slabs); pb_cache_release_all_buffers(&ws->bo_cache); - bo = radeon_create_bo(ws, size, alignment, usage, domain, flags, - pb_cache_bucket); + bo = radeon_create_bo(ws, size, alignment, domain, flags, heap); if (!bo) return NULL; } diff --git a/src/gallium/winsys/radeon/drm/radeon_drm_winsys.c b/src/gallium/winsys/radeon/drm/radeon_drm_winsys.c index dee4366ac50..617507ccd23 100644 --- a/src/gallium/winsys/radeon/drm/radeon_drm_winsys.c +++ b/src/gallium/winsys/radeon/drm/radeon_drm_winsys.c @@ -763,7 +763,7 @@ radeon_drm_winsys_create(int fd, const struct pipe_screen_config *config, if (!do_winsys_init(ws)) goto fail1; - pb_cache_init(&ws->bo_cache, 4, + pb_cache_init(&ws->bo_cache, RADEON_MAX_CACHED_HEAPS, 500000, ws->check_vm ? 1.0f : 2.0f, 0, MIN2(ws->info.vram_size, ws->info.gart_size), radeon_bo_destroy, |