Mesa (main): anv: Use memory info from devinfo

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Wed Jun 22 01:14:11 UTC 2022


Module: Mesa
Branch: main
Commit: 1505f943976c4edba79bac133db1007288fcf7a9
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=1505f943976c4edba79bac133db1007288fcf7a9

Author: Jordan Justen <jordan.l.justen at intel.com>
Date:   Wed May 18 09:52:37 2022 -0700

anv: Use memory info from devinfo

Rework:
 * Jordan: Drop regions.valid (Lionel implemented a fallback)

Signed-off-by: Jordan Justen <jordan.l.justen at intel.com>
Reviewed-by: Lionel Landwerlin <lionel.g.landwerlin at intel.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/17075>

---

 src/intel/vulkan/anv_device.c | 93 +++++++++----------------------------------
 1 file changed, 18 insertions(+), 75 deletions(-)

diff --git a/src/intel/vulkan/anv_device.c b/src/intel/vulkan/anv_device.c
index 349d14e602d..0bde811a1df 100644
--- a/src/intel/vulkan/anv_device.c
+++ b/src/intel/vulkan/anv_device.c
@@ -367,91 +367,34 @@ anv_compute_sys_heap_size(struct anv_physical_device *device,
 }
 
 static VkResult MUST_CHECK
-anv_gather_meminfo(struct anv_physical_device *device, int fd, bool update)
+anv_init_meminfo(struct anv_physical_device *device, int fd)
 {
-   char sys_mem_regions[sizeof(struct drm_i915_query_memory_regions) +
-	                sizeof(struct drm_i915_memory_region_info)];
-
-   struct drm_i915_query_memory_regions *mem_regions =
-      intel_i915_query_alloc(fd, DRM_I915_QUERY_MEMORY_REGIONS, NULL);
-   if (mem_regions == NULL) {
-      if (device->info.has_local_mem) {
-         return vk_errorf(device, VK_ERROR_INCOMPATIBLE_DRIVER,
-                          "failed to memory regions: %m");
-      }
-
-      uint64_t total_phys;
-      if (!os_get_total_physical_memory(&total_phys)) {
-         return vk_errorf(device, VK_ERROR_INITIALIZATION_FAILED,
-                          "failed to get total physical memory: %m");
-      }
-
-      uint64_t available;
-      if (!os_get_available_system_memory(&available))
-         available = 0; /* Silently disable VK_EXT_memory_budget */
-
-      /* The kernel query failed.  Fake it using OS memory queries.  This
-       * should be roughly the same for integrated GPUs.
-       */
-      mem_regions = (void *)sys_mem_regions;
-      mem_regions->num_regions = 1;
-      mem_regions->regions[0] = (struct drm_i915_memory_region_info) {
-         .region.memory_class = I915_MEMORY_CLASS_SYSTEM,
-         .probed_size = total_phys,
-         .unallocated_size = available,
-      };
-   }
-
-   for(int i = 0; i < mem_regions->num_regions; i++) {
-      struct drm_i915_memory_region_info *info = &mem_regions->regions[i];
-
-      struct anv_memregion *region;
-      switch (info->region.memory_class) {
-      case I915_MEMORY_CLASS_SYSTEM:
-         region = &device->sys;
-         break;
-      case I915_MEMORY_CLASS_DEVICE:
-         region = &device->vram;
-         break;
-      default:
-         /* We don't know what kind of memory this is */
-         continue;
-      }
-
-      uint64_t size = info->probed_size;
-      if (info->region.memory_class == I915_MEMORY_CLASS_SYSTEM)
-         size = anv_compute_sys_heap_size(device, size);
-
-      uint64_t available = MIN2(size, info->unallocated_size);
+   const struct intel_device_info *devinfo = &device->info;
 
-      if (update) {
-         assert(region->region.memory_class == info->region.memory_class);
-         assert(region->region.memory_instance == info->region.memory_instance);
-         assert(region->size == size);
-      } else {
-         region->region = info->region;
-         region->size = size;
-      }
-      region->available = available;
-   }
+   device->sys.region.memory_class = devinfo->mem.sram.mem_class;
+   device->sys.region.memory_instance = devinfo->mem.sram.mem_instance;
+   device->sys.size =
+      anv_compute_sys_heap_size(device, devinfo->mem.sram.mappable.size);
+   device->sys.available = devinfo->mem.sram.mappable.free;
 
-   if (mem_regions != (void *)sys_mem_regions)
-      free(mem_regions);
+   device->vram.region.memory_class = devinfo->mem.vram.mem_class;
+   device->vram.region.memory_instance =
+      devinfo->mem.vram.mem_instance;
+   device->vram.size = devinfo->mem.vram.mappable.size;
+   device->vram.available = devinfo->mem.vram.mappable.free;
 
    return VK_SUCCESS;
 }
 
-static VkResult MUST_CHECK
-anv_init_meminfo(struct anv_physical_device *device, int fd)
-{
-   return anv_gather_meminfo(device, fd, false);
-}
-
 static void
 anv_update_meminfo(struct anv_physical_device *device, int fd)
 {
-   ASSERTED VkResult result = anv_gather_meminfo(device, fd, true);
-   assert(result == VK_SUCCESS);
+   if (!intel_device_info_update_memory_info(&device->info, fd))
+      return;
+
+   const struct intel_device_info *devinfo = &device->info;
+   device->sys.available = devinfo->mem.sram.mappable.free;
+   device->vram.available = devinfo->mem.vram.mappable.free;
 }
 
 



More information about the mesa-commit mailing list