From ff0d77d69d7ba48e19af2b6a04b3bbe33a2a9c56 Mon Sep 17 00:00:00 2001 From: Karol Herbst Date: Wed, 2 Jul 2025 22:34:31 +0200 Subject: [PATCH] rusticl: reset VMA address of resource inside SVMAlloc::drop If we want to use of the internal refcounting of pipe_resources, we have to stop setting the resources's SVM address to 0 inside PipeResource::drop. Part-of: --- src/gallium/frontends/rusticl/core/context.rs | 6 ++++++ src/gallium/frontends/rusticl/core/memory.rs | 2 +- src/gallium/frontends/rusticl/mesa/pipe/resource.rs | 9 --------- 3 files changed, 7 insertions(+), 10 deletions(-) diff --git a/src/gallium/frontends/rusticl/core/context.rs b/src/gallium/frontends/rusticl/core/context.rs index 5643f54e196..ddfa3354f17 100644 --- a/src/gallium/frontends/rusticl/core/context.rs +++ b/src/gallium/frontends/rusticl/core/context.rs @@ -68,6 +68,12 @@ impl Drop for SVMAlloc { debug_assert_eq!(0, ret); } + for (dev, res) in &self.alloc.get_real_resource().res { + if !dev.system_svm_supported() { + dev.screen().resource_assign_vma(res, 0); + } + } + Platform::get() .vm .as_ref() diff --git a/src/gallium/frontends/rusticl/core/memory.rs b/src/gallium/frontends/rusticl/core/memory.rs index 99040d36004..5f51add9fb9 100644 --- a/src/gallium/frontends/rusticl/core/memory.rs +++ b/src/gallium/frontends/rusticl/core/memory.rs @@ -499,7 +499,7 @@ impl Allocation { } /// Follows the sub-allocation chain until it hits a real GPU allocation. - fn get_real_resource(&self) -> &ResourceAllocation { + pub fn get_real_resource(&self) -> &ResourceAllocation { match self { Allocation::SubAlloc(sub) => sub.mem.alloc.get_real_resource(), Allocation::Resource(res) => res, diff --git a/src/gallium/frontends/rusticl/mesa/pipe/resource.rs b/src/gallium/frontends/rusticl/mesa/pipe/resource.rs index 06e518cb466..da8ec738b17 100644 --- a/src/gallium/frontends/rusticl/mesa/pipe/resource.rs +++ b/src/gallium/frontends/rusticl/mesa/pipe/resource.rs @@ -285,15 +285,6 @@ impl PipeResource { impl Drop for PipeResource { fn drop(&mut self) { unsafe { - let pipe = self.pipe.as_ref(); - let screen = pipe.screen.as_ref().unwrap(); - - if pipe.flags & PIPE_RESOURCE_FLAG_FRONTEND_VM != 0 { - if let Some(resource_assign_vma) = screen.resource_assign_vma { - resource_assign_vma(pipe.screen, self.pipe(), 0); - } - } - pipe_resource_reference(&mut self.pipe.as_ptr(), ptr::null_mut()); } }