mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-05 00:58:05 +02:00
radv/winsys: do not count visible VRAM buffers twice in the budget
The VRAM size returned to apps is computed as follows: vram_size = real_hw_vram_size - visible_vram_size. Visible VRAM buffers should be counted only in the visible VRAM counter and not twice. Buffers with the NO_CPU_ACCESS flag are known to not be mappable, so they are counted in the VRAM counter. Other buffers, with the CPU_ACCESS flag, or without any of both (imported buffers) are counted in the visible VRAM counter because they are mappable. Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com> Reviewed-by: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/4834>
This commit is contained in:
parent
f3e37f5d26
commit
f457e1b6d5
2 changed files with 33 additions and 17 deletions
|
|
@ -162,7 +162,7 @@ struct radeon_winsys_fence;
|
|||
struct radeon_winsys_bo {
|
||||
uint64_t va;
|
||||
bool is_local;
|
||||
bool vram_cpu_access;
|
||||
bool vram_no_cpu_access;
|
||||
};
|
||||
struct radv_winsys_sem_counts {
|
||||
uint32_t syncobj_count;
|
||||
|
|
|
|||
|
|
@ -276,12 +276,16 @@ static void radv_amdgpu_winsys_bo_destroy(struct radeon_winsys_bo *_bo)
|
|||
amdgpu_bo_free(bo->bo);
|
||||
}
|
||||
|
||||
if (bo->initial_domain & RADEON_DOMAIN_VRAM)
|
||||
p_atomic_add(&ws->allocated_vram,
|
||||
-align64(bo->size, ws->info.gart_page_size));
|
||||
if (bo->base.vram_cpu_access)
|
||||
p_atomic_add(&ws->allocated_vram_vis,
|
||||
-align64(bo->size, ws->info.gart_page_size));
|
||||
if (bo->initial_domain & RADEON_DOMAIN_VRAM) {
|
||||
if (bo->base.vram_no_cpu_access) {
|
||||
p_atomic_add(&ws->allocated_vram,
|
||||
-align64(bo->size, ws->info.gart_page_size));
|
||||
} else {
|
||||
p_atomic_add(&ws->allocated_vram_vis,
|
||||
-align64(bo->size, ws->info.gart_page_size));
|
||||
}
|
||||
}
|
||||
|
||||
if (bo->initial_domain & RADEON_DOMAIN_GTT)
|
||||
p_atomic_add(&ws->allocated_gtt,
|
||||
-align64(bo->size, ws->info.gart_page_size));
|
||||
|
|
@ -366,12 +370,12 @@ radv_amdgpu_winsys_bo_create(struct radeon_winsys *_ws,
|
|||
if (initial_domain & RADEON_DOMAIN_OA)
|
||||
request.preferred_heap |= AMDGPU_GEM_DOMAIN_OA;
|
||||
|
||||
if (flags & RADEON_FLAG_CPU_ACCESS) {
|
||||
bo->base.vram_cpu_access = initial_domain & RADEON_DOMAIN_VRAM;
|
||||
if (flags & RADEON_FLAG_CPU_ACCESS)
|
||||
request.flags |= AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED;
|
||||
}
|
||||
if (flags & RADEON_FLAG_NO_CPU_ACCESS)
|
||||
if (flags & RADEON_FLAG_NO_CPU_ACCESS) {
|
||||
bo->base.vram_no_cpu_access = initial_domain & RADEON_DOMAIN_VRAM;
|
||||
request.flags |= AMDGPU_GEM_CREATE_NO_CPU_ACCESS;
|
||||
}
|
||||
if (flags & RADEON_FLAG_GTT_WC)
|
||||
request.flags |= AMDGPU_GEM_CREATE_CPU_GTT_USWC;
|
||||
if (!(flags & RADEON_FLAG_IMPLICIT_SYNC) && ws->info.drm_minor >= 22)
|
||||
|
|
@ -411,12 +415,24 @@ radv_amdgpu_winsys_bo_create(struct radeon_winsys *_ws,
|
|||
r = amdgpu_bo_export(buf_handle, amdgpu_bo_handle_type_kms, &bo->bo_handle);
|
||||
assert(!r);
|
||||
|
||||
if (initial_domain & RADEON_DOMAIN_VRAM)
|
||||
p_atomic_add(&ws->allocated_vram,
|
||||
align64(bo->size, ws->info.gart_page_size));
|
||||
if (bo->base.vram_cpu_access)
|
||||
p_atomic_add(&ws->allocated_vram_vis,
|
||||
align64(bo->size, ws->info.gart_page_size));
|
||||
if (initial_domain & RADEON_DOMAIN_VRAM) {
|
||||
/* Buffers allocated in VRAM with the NO_CPU_ACCESS flag
|
||||
* aren't mappable and they are counted as part of the VRAM
|
||||
* counter.
|
||||
*
|
||||
* Otherwise, buffers with the CPU_ACCESS flag or without any
|
||||
* of both (imported buffers) are counted as part of the VRAM
|
||||
* visible counter because they can be mapped.
|
||||
*/
|
||||
if (bo->base.vram_no_cpu_access) {
|
||||
p_atomic_add(&ws->allocated_vram,
|
||||
align64(bo->size, ws->info.gart_page_size));
|
||||
} else {
|
||||
p_atomic_add(&ws->allocated_vram_vis,
|
||||
align64(bo->size, ws->info.gart_page_size));
|
||||
}
|
||||
}
|
||||
|
||||
if (initial_domain & RADEON_DOMAIN_GTT)
|
||||
p_atomic_add(&ws->allocated_gtt,
|
||||
align64(bo->size, ws->info.gart_page_size));
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue