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