diff --git a/src/gallium/frontends/rusticl/api/context.rs b/src/gallium/frontends/rusticl/api/context.rs index d60c5182ebe..033bfca0423 100644 --- a/src/gallium/frontends/rusticl/api/context.rs +++ b/src/gallium/frontends/rusticl/api/context.rs @@ -234,12 +234,12 @@ fn create_context_from_type( #[cl_entrypoint] fn retain_context(context: cl_context) -> CLResult<()> { - context.retain() + Context::retain(context) } #[cl_entrypoint] fn release_context(context: cl_context) -> CLResult<()> { - context.release() + Context::release(context) } #[cl_entrypoint] diff --git a/src/gallium/frontends/rusticl/api/event.rs b/src/gallium/frontends/rusticl/api/event.rs index 4d696b476a1..41fecd2f59a 100644 --- a/src/gallium/frontends/rusticl/api/event.rs +++ b/src/gallium/frontends/rusticl/api/event.rs @@ -68,12 +68,12 @@ fn create_user_event(context: cl_context) -> CLResult { #[cl_entrypoint] fn retain_event(event: cl_event) -> CLResult<()> { - event.retain() + Event::retain(event) } #[cl_entrypoint] fn release_event(event: cl_event) -> CLResult<()> { - event.release() + Event::release(event) } #[cl_entrypoint] diff --git a/src/gallium/frontends/rusticl/api/icd.rs b/src/gallium/frontends/rusticl/api/icd.rs index b3875e0514a..0ddcf787395 100644 --- a/src/gallium/frontends/rusticl/api/icd.rs +++ b/src/gallium/frontends/rusticl/api/icd.rs @@ -285,20 +285,6 @@ pub trait ReferenceCountedAPIPointer { } Ok(res) } - - fn retain(&self) -> CLResult<()> { - unsafe { - Arc::increment_strong_count(self.get_ptr()?); - Ok(()) - } - } - - fn release(&self) -> CLResult<()> { - unsafe { - Arc::from_raw(self.get_ptr()?); - Ok(()) - } - } } pub trait CLObject<'a, const ERR: i32, CL: ReferenceCountedAPIPointer + 'a>: @@ -332,6 +318,20 @@ pub trait CLObject<'a, const ERR: i32, CL: ReferenceCountedAPIPointer } Ok(res) } + + fn release(ptr: CL) -> CLResult<()> { + let ptr = ptr.get_ptr()?; + // SAFETY: `get_ptr` already checks if it's one of our pointers. + unsafe { Arc::decrement_strong_count(ptr) }; + Ok(()) + } + + fn retain(ptr: CL) -> CLResult<()> { + let ptr = ptr.get_ptr()?; + // SAFETY: `get_ptr` already checks if it's one of our pointers. + unsafe { Arc::increment_strong_count(ptr) }; + Ok(()) + } } #[macro_export] diff --git a/src/gallium/frontends/rusticl/api/kernel.rs b/src/gallium/frontends/rusticl/api/kernel.rs index 40f29cda873..0635b4dc7d1 100644 --- a/src/gallium/frontends/rusticl/api/kernel.rs +++ b/src/gallium/frontends/rusticl/api/kernel.rs @@ -267,12 +267,12 @@ fn create_kernel( #[cl_entrypoint] fn retain_kernel(kernel: cl_kernel) -> CLResult<()> { - kernel.retain() + Kernel::retain(kernel) } #[cl_entrypoint] fn release_kernel(kernel: cl_kernel) -> CLResult<()> { - kernel.release() + Kernel::release(kernel) } #[cl_entrypoint] diff --git a/src/gallium/frontends/rusticl/api/memory.rs b/src/gallium/frontends/rusticl/api/memory.rs index d2ce93b2f45..8755492737e 100644 --- a/src/gallium/frontends/rusticl/api/memory.rs +++ b/src/gallium/frontends/rusticl/api/memory.rs @@ -1004,12 +1004,12 @@ fn create_sampler_with_properties( #[cl_entrypoint] fn retain_sampler(sampler: cl_sampler) -> CLResult<()> { - sampler.retain() + Sampler::retain(sampler) } #[cl_entrypoint] fn release_sampler(sampler: cl_sampler) -> CLResult<()> { - sampler.release() + Sampler::release(sampler) } #[cl_entrypoint] @@ -2169,12 +2169,12 @@ fn enqueue_map_image( #[cl_entrypoint] fn retain_mem_object(mem: cl_mem) -> CLResult<()> { - mem.retain() + Mem::retain(mem) } #[cl_entrypoint] fn release_mem_object(mem: cl_mem) -> CLResult<()> { - mem.release() + Mem::release(mem) } #[cl_entrypoint] diff --git a/src/gallium/frontends/rusticl/api/program.rs b/src/gallium/frontends/rusticl/api/program.rs index 2a90309219e..ff3c06d7306 100644 --- a/src/gallium/frontends/rusticl/api/program.rs +++ b/src/gallium/frontends/rusticl/api/program.rs @@ -252,12 +252,12 @@ fn create_program_with_il( #[cl_entrypoint] fn retain_program(program: cl_program) -> CLResult<()> { - program.retain() + Program::retain(program) } #[cl_entrypoint] fn release_program(program: cl_program) -> CLResult<()> { - program.release() + Program::release(program) } fn debug_logging(p: &Program, devs: &[&Device]) { diff --git a/src/gallium/frontends/rusticl/api/queue.rs b/src/gallium/frontends/rusticl/api/queue.rs index d2b9d0a2df2..9625b8777a6 100644 --- a/src/gallium/frontends/rusticl/api/queue.rs +++ b/src/gallium/frontends/rusticl/api/queue.rs @@ -217,7 +217,7 @@ fn finish(command_queue: cl_command_queue) -> CLResult<()> { #[cl_entrypoint] fn retain_command_queue(command_queue: cl_command_queue) -> CLResult<()> { - command_queue.retain() + Queue::retain(command_queue) } #[cl_entrypoint] @@ -225,6 +225,5 @@ fn release_command_queue(command_queue: cl_command_queue) -> CLResult<()> { // clReleaseCommandQueue performs an implicit flush to issue any previously queued OpenCL // commands in command_queue. flush(command_queue)?; - command_queue.release()?; - Ok(()) + Queue::release(command_queue) }