From 9bbc72f3dea3fa4ea7e73a1f771752ed80d083c0 Mon Sep 17 00:00:00 2001 From: Samuel Pitoiset Date: Fri, 22 May 2026 13:36:27 +0200 Subject: [PATCH] radv/amdgpu: add a function to query heap info To remove the winsys dependency. Signed-off-by: Samuel Pitoiset Part-of: --- .../vulkan/winsys/amdgpu/radv_amdgpu_winsys.c | 38 +++++++++++++++++++ .../winsys/amdgpu/radv_amdgpu_winsys_public.h | 12 ++++++ 2 files changed, 50 insertions(+) diff --git a/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_winsys.c b/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_winsys.c index de27333f175..c47d4214565 100644 --- a/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_winsys.c +++ b/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_winsys.c @@ -374,3 +374,41 @@ fail: ac_drm_device_deinitialize(dev); return result; } + +int +radv_amdgpu_winsys_query_heap_info(ac_drm_device *dev, struct radeon_winsys_heap_info *heap_info) +{ + struct amdgpu_heap_info heap_vram = {0}, heap_vram_vis = {0}, heap_gtt = {0}; + struct radv_amdgpu_alloc_tracker *alloc_tracker; + int r; + + memset(heap_info, 0, sizeof(*heap_info)); + + alloc_tracker = radv_amdgpu_alloc_tracker_acquire(ac_drm_device_get_cookie(dev)); + if (!alloc_tracker) + return -1; + + /* Allocated memory for the current process. */ + heap_info->allocated_vram = alloc_tracker->allocated_vram; + heap_info->allocated_vram_vis = alloc_tracker->allocated_vram_vis; + heap_info->allocated_gtt = alloc_tracker->allocated_gtt; + + /* VRAM usage. */ + r = ac_drm_query_heap_info(dev, AMDGPU_GEM_DOMAIN_VRAM, 0, &heap_vram); + if (!r) + heap_info->vram_usage = heap_vram.heap_usage; + + /* VRAM visible usage. */ + r = ac_drm_query_heap_info(dev, AMDGPU_GEM_DOMAIN_VRAM, AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED, &heap_vram_vis); + if (!r) + heap_info->vram_vis_usage = heap_vram_vis.heap_usage; + + /* GTT usage. */ + r = ac_drm_query_heap_info(dev, AMDGPU_GEM_DOMAIN_GTT, 0, &heap_gtt); + if (!r) + heap_info->gtt_usage = heap_gtt.heap_usage; + + radv_amdgpu_alloc_tracker_release(alloc_tracker); + + return 0; +} diff --git a/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_winsys_public.h b/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_winsys_public.h index 1a02ea550fb..cc3a484d291 100644 --- a/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_winsys_public.h +++ b/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_winsys_public.h @@ -13,6 +13,7 @@ #define RADV_AMDGPU_WINSYS_PUBLIC_H #include "ac_gpu_info.h" +#include "ac_linux_drm.h" #include "vk_sync.h" @@ -27,4 +28,15 @@ struct radeon_winsys_info { VkResult radv_amdgpu_winsys_query_info(int fd, uint64_t debug_flags, bool is_virtio, struct radeon_winsys_info *info); +struct radeon_winsys_heap_info { + uint64_t allocated_vram; + uint64_t vram_usage; + uint64_t allocated_vram_vis; + uint64_t vram_vis_usage; + uint64_t allocated_gtt; + uint64_t gtt_usage; +}; + +int radv_amdgpu_winsys_query_heap_info(ac_drm_device *dev, struct radeon_winsys_heap_info *heap_info); + #endif /* RADV_AMDGPU_WINSYS_PUBLIC_H */