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. */