From 48ea133c979256052b3fe7304b912a9bed5462aa Mon Sep 17 00:00:00 2001 From: Yogesh Mohan Marimuthu Date: Thu, 24 Oct 2024 11:13:32 +0530 Subject: [PATCH] winsys/amdgpu: add CLEAR_VRAM flag to zero vram when creating bo MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Reviewed-by: Marek Olšák Reviewed-by: Pierre-Eric Pelloux-Prayer Part-of: --- src/gallium/include/winsys/radeon_winsys.h | 3 ++- src/gallium/winsys/amdgpu/drm/amdgpu_bo.c | 6 +++--- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/src/gallium/include/winsys/radeon_winsys.h b/src/gallium/include/winsys/radeon_winsys.h index db431d5b5b0..cf9345cf966 100644 --- a/src/gallium/include/winsys/radeon_winsys.h +++ b/src/gallium/include/winsys/radeon_winsys.h @@ -65,6 +65,7 @@ enum radeon_bo_flag RADEON_FLAG_DISCARDABLE = (1 << 10), RADEON_FLAG_WINSYS_SLAB_BACKING = (1 << 11), /* only used by the winsys */ RADEON_FLAG_GFX12_ALLOW_DCC = (1 << 12), /* allow DCC, VRAM only */ + RADEON_FLAG_CLEAR_VRAM = (1 << 13), }; static inline void @@ -918,7 +919,7 @@ static inline int radeon_get_heap_index(enum radeon_bo_domain domain, enum radeo /* These are unsupported flags. */ /* RADEON_FLAG_DRIVER_INTERNAL is ignored. It doesn't affect allocators. */ if (flags & (RADEON_FLAG_NO_SUBALLOC | RADEON_FLAG_SPARSE | - RADEON_FLAG_DISCARDABLE)) + RADEON_FLAG_DISCARDABLE | RADEON_FLAG_CLEAR_VRAM)) return -1; int heap = 0; diff --git a/src/gallium/winsys/amdgpu/drm/amdgpu_bo.c b/src/gallium/winsys/amdgpu/drm/amdgpu_bo.c index b894813b8a3..42e1d138ac8 100644 --- a/src/gallium/winsys/amdgpu/drm/amdgpu_bo.c +++ b/src/gallium/winsys/amdgpu/drm/amdgpu_bo.c @@ -545,8 +545,8 @@ static struct amdgpu_winsys_bo *amdgpu_create_bo(struct amdgpu_winsys *aws, aws->info.drm_minor >= 47) request.flags |= AMDGPU_GEM_CREATE_DISCARDABLE; - if (aws->zero_all_vram_allocs && - (request.preferred_heap & AMDGPU_GEM_DOMAIN_VRAM)) + if ((flags & RADEON_FLAG_CLEAR_VRAM) || (aws->zero_all_vram_allocs && + (request.preferred_heap & AMDGPU_GEM_DOMAIN_VRAM))) request.flags |= AMDGPU_GEM_CREATE_VRAM_CLEARED; if ((flags & RADEON_FLAG_ENCRYPTED) && @@ -1440,7 +1440,7 @@ no_slab: bool use_reusable_pool = !(domain & RADEON_DOMAIN_DOORBELL) && (flags & RADEON_FLAG_NO_INTERPROCESS_SHARING) && - !(flags & RADEON_FLAG_DISCARDABLE); + !(flags & (RADEON_FLAG_DISCARDABLE | RADEON_FLAG_CLEAR_VRAM)); if (use_reusable_pool) { /* RADEON_FLAG_NO_SUBALLOC is irrelevant for the cache. */