From b235e8fc9a299d37e3eca27286cbcbbe6ade7985 Mon Sep 17 00:00:00 2001 From: Rob Clark Date: Fri, 8 Sep 2023 14:24:48 -0700 Subject: [PATCH] tu: Fix heap size It make no sense to advertise a bigger heap than what we can fit into the GPU virtual address space. Signed-off-by: Rob Clark Part-of: --- src/freedreno/vulkan/tu_device.cc | 8 +++++++- src/freedreno/vulkan/tu_device.h | 2 +- src/freedreno/vulkan/tu_knl_drm_msm.cc | 2 +- src/freedreno/vulkan/tu_knl_drm_virtio.cc | 2 +- src/freedreno/vulkan/tu_knl_kgsl.cc | 2 +- 5 files changed, 11 insertions(+), 5 deletions(-) diff --git a/src/freedreno/vulkan/tu_device.cc b/src/freedreno/vulkan/tu_device.cc index 2ce7f0557f4..c7910079abd 100644 --- a/src/freedreno/vulkan/tu_device.cc +++ b/src/freedreno/vulkan/tu_device.cc @@ -1479,7 +1479,7 @@ tu_GetPhysicalDeviceQueueFamilyProperties2( } uint64_t -tu_get_system_heap_size() +tu_get_system_heap_size(struct tu_physical_device *physical_device) { struct sysinfo info; sysinfo(&info); @@ -1495,6 +1495,9 @@ tu_get_system_heap_size() else available_ram = total_ram * 3 / 4; + if (physical_device->va_size) + available_ram = MIN2(available_ram, physical_device->va_size); + return available_ram; } @@ -1508,6 +1511,9 @@ tu_get_budget_memory(struct tu_physical_device *physical_device) os_get_available_system_memory(&sys_available); assert(has_available_memory); + if (physical_device->va_size) + sys_available = MIN2(sys_available, physical_device->va_size); + /* * Let's not incite the app to starve the system: report at most 90% of * available system memory. diff --git a/src/freedreno/vulkan/tu_device.h b/src/freedreno/vulkan/tu_device.h index 5557f4a5959..f84734a3d42 100644 --- a/src/freedreno/vulkan/tu_device.h +++ b/src/freedreno/vulkan/tu_device.h @@ -457,7 +457,7 @@ VK_DEFINE_NONDISP_HANDLE_CASTS(tu_sampler, base, VkSampler, VK_OBJECT_TYPE_SAMPLER) uint64_t -tu_get_system_heap_size(void); +tu_get_system_heap_size(struct tu_physical_device *physical_device); VkResult tu_physical_device_init(struct tu_physical_device *device, diff --git a/src/freedreno/vulkan/tu_knl_drm_msm.cc b/src/freedreno/vulkan/tu_knl_drm_msm.cc index 49611108ee2..6712d620cc2 100644 --- a/src/freedreno/vulkan/tu_knl_drm_msm.cc +++ b/src/freedreno/vulkan/tu_knl_drm_msm.cc @@ -1113,7 +1113,7 @@ tu_knl_drm_msm_load(struct tu_instance *instance, device->sync_types[1] = &device->timeline_type.sync; device->sync_types[2] = NULL; - device->heap.size = tu_get_system_heap_size(); + device->heap.size = tu_get_system_heap_size(device); device->heap.used = 0u; device->heap.flags = VK_MEMORY_HEAP_DEVICE_LOCAL_BIT; diff --git a/src/freedreno/vulkan/tu_knl_drm_virtio.cc b/src/freedreno/vulkan/tu_knl_drm_virtio.cc index b4a4ee659f9..0c8534ff360 100644 --- a/src/freedreno/vulkan/tu_knl_drm_virtio.cc +++ b/src/freedreno/vulkan/tu_knl_drm_virtio.cc @@ -1591,7 +1591,7 @@ tu_knl_drm_virtio_load(struct tu_instance *instance, device->sync_types[1] = &device->timeline_type.sync; device->sync_types[2] = NULL; - device->heap.size = tu_get_system_heap_size(); + device->heap.size = tu_get_system_heap_size(device); device->heap.used = 0u; device->heap.flags = VK_MEMORY_HEAP_DEVICE_LOCAL_BIT; diff --git a/src/freedreno/vulkan/tu_knl_kgsl.cc b/src/freedreno/vulkan/tu_knl_kgsl.cc index f1f91382470..ed0cbff44cd 100644 --- a/src/freedreno/vulkan/tu_knl_kgsl.cc +++ b/src/freedreno/vulkan/tu_knl_kgsl.cc @@ -1271,7 +1271,7 @@ tu_knl_kgsl_load(struct tu_instance *instance, int fd) device->sync_types[1] = &device->timeline_type.sync; device->sync_types[2] = NULL; - device->heap.size = tu_get_system_heap_size(); + device->heap.size = tu_get_system_heap_size(device); device->heap.used = 0u; device->heap.flags = VK_MEMORY_HEAP_DEVICE_LOCAL_BIT;