diff --git a/src/gallium/frontends/rusticl/core/device.rs b/src/gallium/frontends/rusticl/core/device.rs index 6df7593fc27..8cd48ed0db8 100644 --- a/src/gallium/frontends/rusticl/core/device.rs +++ b/src/gallium/frontends/rusticl/core/device.rs @@ -785,8 +785,17 @@ impl Device { } pub fn global_mem_size(&self) -> cl_ulong { - self.screen - .compute_param(pipe_compute_cap::PIPE_COMPUTE_CAP_MAX_GLOBAL_SIZE) + 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() + } else { + memory_info.total_staging_memory.into() + }; + memory * 1024 + } else { + self.screen + .compute_param(pipe_compute_cap::PIPE_COMPUTE_CAP_MAX_GLOBAL_SIZE) + } } pub fn image_2d_size(&self) -> usize { diff --git a/src/gallium/frontends/rusticl/mesa/pipe/screen.rs b/src/gallium/frontends/rusticl/mesa/pipe/screen.rs index f4854b292d3..a1f2b66abc3 100644 --- a/src/gallium/frontends/rusticl/mesa/pipe/screen.rs +++ b/src/gallium/frontends/rusticl/mesa/pipe/screen.rs @@ -449,6 +449,14 @@ impl PipeScreen { ); } } + + pub fn query_memory_info(&self) -> Option { + let mut info = pipe_memory_info::default(); + unsafe { + self.screen().query_memory_info?(self.screen.as_ptr(), &mut info); + } + Some(info) + } } impl Drop for PipeScreen {