mirror of
https://github.com/elwrcl/intel-hard-graphics.git
synced 2026-10-31 19:08:03 +03:00
hasvk: fix heap size calculation to use real system RAM instead of GTT
This commit is contained in:
1 file changed
+23
-29
@@ -1292,38 +1292,27 @@ get_properties(const struct anv_physical_device *pdevice,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static uint64_t
|
|
||||||
anv_compute_sys_heap_size(struct anv_physical_device *device,
|
|
||||||
uint64_t available_ram)
|
|
||||||
{
|
|
||||||
/* We want to leave some padding for things we allocate in the driver,
|
|
||||||
* so don't go over 3/4 of the GTT either.
|
|
||||||
*/
|
|
||||||
available_ram = MIN2(available_ram, device->gtt_size * 3 / 4);
|
|
||||||
|
|
||||||
if (available_ram > (2ull << 30) && !device->supports_48bit_addresses) {
|
|
||||||
/* When running with an overridden PCI ID, we may get a GTT size from
|
|
||||||
* the kernel that is greater than 2 GiB but the execbuf check for 48bit
|
|
||||||
* address support can still fail. Just clamp the address space size to
|
|
||||||
* 2 GiB if we don't have 48-bit support.
|
|
||||||
*/
|
|
||||||
mesa_logw("%s:%d: The kernel reported a GTT size larger than 2 GiB but "
|
|
||||||
"not support for 48-bit addresses",
|
|
||||||
__FILE__, __LINE__);
|
|
||||||
available_ram = 2ull << 30;
|
|
||||||
}
|
|
||||||
|
|
||||||
return available_ram;
|
|
||||||
}
|
|
||||||
|
|
||||||
static VkResult MUST_CHECK
|
static VkResult MUST_CHECK
|
||||||
anv_init_meminfo(struct anv_physical_device *device, int fd)
|
anv_init_meminfo(struct anv_physical_device *device, int fd)
|
||||||
{
|
{
|
||||||
const struct intel_device_info *devinfo = &device->info;
|
const struct intel_device_info *devinfo = &device->info;
|
||||||
|
|
||||||
device->sys.size =
|
float percent = OS_GPU_HEAP_SIZE_HEURISTIC;
|
||||||
anv_compute_sys_heap_size(device, devinfo->mem.sram.mappable.size);
|
uint64_t heap_size = os_get_gpu_heap_size(percent, &percent);
|
||||||
device->sys.available = devinfo->mem.sram.mappable.free;
|
if (heap_size == 0) {
|
||||||
|
mesa_logw("Failed to query total physical memory! "
|
||||||
|
"Falling back to GTT size.");
|
||||||
|
heap_size = devinfo->mem.sram.mappable.size;
|
||||||
|
}
|
||||||
|
|
||||||
|
device->sys.size = heap_size;
|
||||||
|
|
||||||
|
uint64_t available_system_ram;
|
||||||
|
if (os_get_available_system_memory(&available_system_ram)) {
|
||||||
|
device->sys.available = available_system_ram;
|
||||||
|
} else {
|
||||||
|
device->sys.available = devinfo->mem.sram.mappable.free;
|
||||||
|
}
|
||||||
|
|
||||||
return VK_SUCCESS;
|
return VK_SUCCESS;
|
||||||
}
|
}
|
||||||
@@ -1334,8 +1323,13 @@ anv_update_meminfo(struct anv_physical_device *device, int fd)
|
|||||||
if (!intel_device_info_update_memory_info(&device->info, fd))
|
if (!intel_device_info_update_memory_info(&device->info, fd))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
const struct intel_device_info *devinfo = &device->info;
|
uint64_t available_system_ram;
|
||||||
device->sys.available = devinfo->mem.sram.mappable.free;
|
if (os_get_available_system_memory(&available_system_ram)) {
|
||||||
|
device->sys.available = available_system_ram;
|
||||||
|
} else {
|
||||||
|
const struct intel_device_info *devinfo = &device->info;
|
||||||
|
device->sys.available = devinfo->mem.sram.mappable.free;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static VkResult
|
static VkResult
|
||||||
|
|||||||
Reference in new issue
Block a user