summaryrefslogtreecommitdiff
path: root/src/gallium/winsys/amdgpu
diff options
context:
space:
mode:
authorMarek Olšák <marek.olsak@amd.com>2022-05-10 23:29:20 -0400
committerMarek Olšák <marek.olsak@amd.com>2022-05-16 07:03:37 -0400
commit593f72aa212f9e0daa94d7163e12a005be90fb19 (patch)
tree399c71310eea94f305f8c5e5f6424e7932003853 /src/gallium/winsys/amdgpu
parentceddd7d49a6b2fe4ae2d6c9599ace8beac64b1ed (diff)
winsys/amdgpu-radeon: rework how we describe heaps
It was getting difficult to add more heaps. This adds more heaps because more flag combinations are legal now. Invalid flag combinations are also handled better. Reviewed-by: Pierre-Eric Pelloux-Prayer <pierre-eric.pelloux-prayer@amd.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/16466>
Diffstat (limited to 'src/gallium/winsys/amdgpu')
-rw-r--r--src/gallium/winsys/amdgpu/drm/amdgpu_bo.c16
-rw-r--r--src/gallium/winsys/amdgpu/drm/amdgpu_winsys.c6
2 files changed, 6 insertions, 16 deletions
diff --git a/src/gallium/winsys/amdgpu/drm/amdgpu_bo.c b/src/gallium/winsys/amdgpu/drm/amdgpu_bo.c
index 54e32d1be4a..59b4943c980 100644
--- a/src/gallium/winsys/amdgpu/drm/amdgpu_bo.c
+++ b/src/gallium/winsys/amdgpu/drm/amdgpu_bo.c
@@ -1362,17 +1362,7 @@ amdgpu_bo_create(struct amdgpu_winsys *ws,
struct amdgpu_winsys_bo *bo;
int heap = -1;
- if (domain & (RADEON_DOMAIN_GDS | RADEON_DOMAIN_OA))
- flags |= RADEON_FLAG_NO_CPU_ACCESS | RADEON_FLAG_NO_SUBALLOC;
-
- /* VRAM implies WC. This is not optional. */
- assert(!(domain & RADEON_DOMAIN_VRAM) || flags & RADEON_FLAG_GTT_WC);
-
- /* NO_CPU_ACCESS is not valid with GTT. */
- assert(!(domain & RADEON_DOMAIN_GTT) || !(flags & RADEON_FLAG_NO_CPU_ACCESS));
-
- /* Sparse buffers must have NO_CPU_ACCESS set. */
- assert(!(flags & RADEON_FLAG_SPARSE) || flags & RADEON_FLAG_NO_CPU_ACCESS);
+ radeon_canonicalize_bo_flags(&domain, &flags);
struct pb_slabs *slabs = ((flags & RADEON_FLAG_ENCRYPTED) && ws->info.has_tmz_support) ?
ws->bo_slabs_encrypted : ws->bo_slabs;
@@ -1385,7 +1375,7 @@ amdgpu_bo_create(struct amdgpu_winsys *ws,
struct pb_slab_entry *entry;
int heap = radeon_get_heap_index(domain, flags);
- if (heap < 0 || heap >= RADEON_MAX_SLAB_HEAPS)
+ if (heap < 0 || heap >= RADEON_NUM_HEAPS)
goto no_slab;
unsigned alloc_size = size;
@@ -1457,7 +1447,7 @@ no_slab:
if (use_reusable_pool) {
heap = radeon_get_heap_index(domain, flags & ~RADEON_FLAG_ENCRYPTED);
- assert(heap >= 0 && heap < RADEON_MAX_CACHED_HEAPS);
+ assert(heap >= 0 && heap < RADEON_NUM_HEAPS);
/* Get a buffer from the cache. */
bo = (struct amdgpu_winsys_bo*)
diff --git a/src/gallium/winsys/amdgpu/drm/amdgpu_winsys.c b/src/gallium/winsys/amdgpu/drm/amdgpu_winsys.c
index 6ea421fcb6f..65873d0a8fa 100644
--- a/src/gallium/winsys/amdgpu/drm/amdgpu_winsys.c
+++ b/src/gallium/winsys/amdgpu/drm/amdgpu_winsys.c
@@ -451,7 +451,7 @@ amdgpu_winsys_create(int fd, const struct pipe_screen_config *config,
goto fail_alloc;
/* Create managers. */
- pb_cache_init(&aws->bo_cache, RADEON_MAX_CACHED_HEAPS,
+ pb_cache_init(&aws->bo_cache, RADEON_NUM_HEAPS,
500000, aws->check_vm ? 1.0f : 2.0f, 0,
(aws->info.vram_size + aws->info.gart_size) / 8, aws,
/* Cast to void* because one of the function parameters
@@ -471,7 +471,7 @@ amdgpu_winsys_create(int fd, const struct pipe_screen_config *config,
if (!pb_slabs_init(&aws->bo_slabs[i],
min_order, max_order,
- RADEON_MAX_SLAB_HEAPS, true,
+ RADEON_NUM_HEAPS, true,
aws,
amdgpu_bo_can_reclaim_slab,
amdgpu_bo_slab_alloc_normal,
@@ -486,7 +486,7 @@ amdgpu_winsys_create(int fd, const struct pipe_screen_config *config,
if (aws->info.has_tmz_support &&
!pb_slabs_init(&aws->bo_slabs_encrypted[i],
min_order, max_order,
- RADEON_MAX_SLAB_HEAPS, true,
+ RADEON_NUM_HEAPS, true,
aws,
amdgpu_bo_can_reclaim_slab,
amdgpu_bo_slab_alloc_encrypted,