rusticl/device: Fix reporting of global memory on mixed memory devices

AMD APUs are hitting this case where they have very small discrete VRAM,
but a lot of staging memory, which can be used additionally.

Fixes: 7487ac2046 ("rusticl/device: support query_memory_info to retrieve available memory")
(cherry picked from commit 58d45725c7)

Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/40979>
This commit is contained in:
Karol Herbst 2026-03-24 03:07:09 +01:00 committed by Eric Engestrom
parent b2b54a0194
commit 1ed1dcb9db
2 changed files with 12 additions and 4 deletions

View file

@ -964,7 +964,7 @@
"description": "rusticl/device: Fix reporting of global memory on mixed memory devices",
"nominated": true,
"nomination_type": 2,
"resolution": 0,
"resolution": 1,
"main_sha": null,
"because_sha": "7487ac204634a421d7dd5a076f9ac8f512571f5b",
"notes": null

View file

@ -971,11 +971,19 @@ impl DeviceBase {
pub fn global_mem_size(&self) -> cl_ulong {
if let Some(memory_info) = self.screen.query_memory_info() {
let memory: cl_ulong = if memory_info.total_device_memory != 0 {
memory_info.total_device_memory.into()
let device_memory: cl_ulong = memory_info.total_device_memory.into();
let staging_memory: cl_ulong = memory_info.total_staging_memory.into();
// In case some driver doesn't set uma correctly.
let memory = if device_memory == 0 {
staging_memory
} else if self.unified_memory() {
// For UMA devices we expose both.
staging_memory + device_memory
} else {
memory_info.total_staging_memory.into()
device_memory
};
memory * 1024
} else {
self.screen.compute_caps().max_global_size