diff options
author | Marek Olšák <[email protected]> | 2017-12-01 00:06:34 +0100 |
---|---|---|
committer | Marek Olšák <[email protected]> | 2017-12-05 13:30:34 +0100 |
commit | 9ac5504df5c31e60801d9d37c1f3d547c486bf0a (patch) | |
tree | 4a0f57e7d6e6a7d72df76b7af23bdae3ba47e3aa /src/gallium/winsys/amdgpu | |
parent | 5e805cc74bc52f97de8f6308fc06bc96623e7e09 (diff) |
gallium/radeon: move setting VRAM|GTT into winsyses
The combined VRAM|GTT heap will be removed.
Reviewed-by: Nicolai Hähnle <[email protected]>
Diffstat (limited to 'src/gallium/winsys/amdgpu')
-rw-r--r-- | src/gallium/winsys/amdgpu/drm/amdgpu_bo.c | 14 |
1 files changed, 13 insertions, 1 deletions
diff --git a/src/gallium/winsys/amdgpu/drm/amdgpu_bo.c b/src/gallium/winsys/amdgpu/drm/amdgpu_bo.c index 6ec7cb79043..9ab8f67cbc7 100644 --- a/src/gallium/winsys/amdgpu/drm/amdgpu_bo.c +++ b/src/gallium/winsys/amdgpu/drm/amdgpu_bo.c @@ -386,7 +386,9 @@ static struct amdgpu_winsys_bo *amdgpu_create_bo(struct amdgpu_winsys *ws, unsigned va_gap_size; int r; - assert(initial_domain & RADEON_DOMAIN_VRAM_GTT); + /* VRAM or GTT must be specified, but not both at the same time. */ + assert(util_bitcount(initial_domain & RADEON_DOMAIN_VRAM_GTT) == 1); + bo = CALLOC_STRUCT(amdgpu_winsys_bo); if (!bo) { return NULL; @@ -402,6 +404,16 @@ static struct amdgpu_winsys_bo *amdgpu_create_bo(struct amdgpu_winsys *ws, if (initial_domain & RADEON_DOMAIN_GTT) request.preferred_heap |= AMDGPU_GEM_DOMAIN_GTT; + /* If VRAM is just stolen system memory, allow both VRAM and + * GTT, whichever has free space. If a buffer is evicted from + * VRAM to GTT, it will stay there. + * + * DRM 3.6.0 has good BO move throttling, so we can allow VRAM-only + * placements even with a low amount of stolen VRAM. + */ + if (!ws->info.has_dedicated_vram && ws->info.drm_minor < 6) + request.preferred_heap |= AMDGPU_GEM_DOMAIN_GTT; + if (flags & RADEON_FLAG_NO_CPU_ACCESS) request.flags |= AMDGPU_GEM_CREATE_NO_CPU_ACCESS; if (flags & RADEON_FLAG_GTT_WC) |