diff --git a/src/gallium/frontends/rusticl/mesa/pipe/resource.rs b/src/gallium/frontends/rusticl/mesa/pipe/resource.rs index 7590824d0d3..1cdd9240bfe 100644 --- a/src/gallium/frontends/rusticl/mesa/pipe/resource.rs +++ b/src/gallium/frontends/rusticl/mesa/pipe/resource.rs @@ -1,11 +1,14 @@ use mesa_rust_gen::*; -use std::{mem, ptr}; +use std::{ + mem, + ptr::{self, NonNull}, +}; #[derive(PartialEq, Eq, Hash)] #[repr(transparent)] pub struct PipeResource { - pipe: *mut pipe_resource, + pipe: NonNull, } const PIPE_RESOURCE_FLAG_RUSTICL_IS_USER: u32 = PIPE_RESOURCE_FLAG_FRONTEND_PRIV; @@ -66,13 +69,11 @@ impl AppImgInfo { impl PipeResource { pub(super) fn new(res: *mut pipe_resource, is_user: bool) -> Option { - if res.is_null() { - return None; - } + let mut res = NonNull::new(res)?; if is_user { unsafe { - res.as_mut().unwrap().flags |= PIPE_RESOURCE_FLAG_RUSTICL_IS_USER; + res.as_mut().flags |= PIPE_RESOURCE_FLAG_RUSTICL_IS_USER; } } @@ -80,27 +81,28 @@ impl PipeResource { } pub(super) fn pipe(&self) -> *mut pipe_resource { - self.pipe + self.pipe.as_ptr() } fn as_ref(&self) -> &pipe_resource { - unsafe { self.pipe.as_ref().unwrap() } + // SAFETY: it contains a valid pointer + unsafe { self.pipe.as_ref() } } pub fn width(&self) -> u32 { - unsafe { self.pipe.as_ref().unwrap().width0 } + self.as_ref().width0 } pub fn height(&self) -> u16 { - unsafe { self.pipe.as_ref().unwrap().height0 } + self.as_ref().height0 } pub fn depth(&self) -> u16 { - unsafe { self.pipe.as_ref().unwrap().depth0 } + self.as_ref().depth0 } pub fn array_size(&self) -> u16 { - unsafe { self.pipe.as_ref().unwrap().array_size } + self.as_ref().array_size } pub fn is_buffer(&self) -> bool { @@ -186,7 +188,7 @@ impl PipeResource { ) -> pipe_sampler_view { let mut res = pipe_sampler_view::default(); unsafe { - u_sampler_view_default_template(&mut res, self.pipe, format); + u_sampler_view_default_template(&mut res, self.pipe(), format); } if let Some(app_img_info) = app_img_info { @@ -207,6 +209,6 @@ impl PipeResource { impl Drop for PipeResource { fn drop(&mut self) { - unsafe { pipe_resource_reference(&mut self.pipe, ptr::null_mut()) } + unsafe { pipe_resource_reference(&mut self.pipe.as_ptr(), ptr::null_mut()) } } }