mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-24 17:30:12 +01:00
rusticl/mesa/device: convert to ThreadSafeCPtr
Signed-off-by: Karol Herbst <kherbst@redhat.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/26040>
This commit is contained in:
parent
a108bc9908
commit
ef8461b84f
2 changed files with 15 additions and 10 deletions
|
|
@ -1,6 +1,7 @@
|
|||
use crate::pipe::screen::*;
|
||||
|
||||
use mesa_rust_gen::*;
|
||||
use mesa_rust_util::ptr::ThreadSafeCPtr;
|
||||
use mesa_rust_util::string::c_string_to_string;
|
||||
|
||||
use std::collections::HashMap;
|
||||
|
|
@ -8,31 +9,35 @@ use std::{env, ptr};
|
|||
|
||||
#[derive(PartialEq)]
|
||||
pub(super) struct PipeLoaderDevice {
|
||||
pub(super) ldev: *mut pipe_loader_device,
|
||||
ldev: ThreadSafeCPtr<pipe_loader_device>,
|
||||
}
|
||||
|
||||
impl PipeLoaderDevice {
|
||||
fn new(ldev: *mut pipe_loader_device) -> Option<Self> {
|
||||
if ldev.is_null() {
|
||||
return None;
|
||||
}
|
||||
Some(Self { ldev })
|
||||
Some(Self {
|
||||
// SAFETY: `pipe_loader_device` is considered to be thread-safe
|
||||
ldev: unsafe { ThreadSafeCPtr::new(ldev)? },
|
||||
})
|
||||
}
|
||||
|
||||
fn load_screen(self) -> Option<PipeScreen> {
|
||||
let s = unsafe { pipe_loader_create_screen(self.ldev) };
|
||||
let s = unsafe { pipe_loader_create_screen(self.ldev.as_ptr()) };
|
||||
PipeScreen::new(self, s)
|
||||
}
|
||||
|
||||
pub fn driver_name(&self) -> String {
|
||||
c_string_to_string(unsafe { *self.ldev }.driver_name)
|
||||
c_string_to_string(unsafe { self.ldev.as_ref() }.driver_name)
|
||||
}
|
||||
|
||||
pub fn device_type(&self) -> pipe_loader_device_type {
|
||||
unsafe { self.ldev.as_ref().type_ }
|
||||
}
|
||||
}
|
||||
|
||||
impl Drop for PipeLoaderDevice {
|
||||
fn drop(&mut self) {
|
||||
unsafe {
|
||||
pipe_loader_release(&mut self.ldev, 1);
|
||||
pipe_loader_release(&mut self.ldev.as_ptr(), 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -93,7 +98,7 @@ pub fn load_screens() -> impl Iterator<Item = PipeScreen> {
|
|||
let mut enabled_devs = get_enabled_devs();
|
||||
|
||||
devs.filter(move |dev| {
|
||||
let driver_name = unsafe { c_string_to_string(dev.ldev.as_ref().unwrap().driver_name) };
|
||||
let driver_name = unsafe { c_string_to_string(dev.ldev.as_ref().driver_name) };
|
||||
|
||||
if let Some(enabled_devs) = enabled_devs.get_mut(&driver_name) {
|
||||
let res = (*enabled_devs & 1) == 1;
|
||||
|
|
|
|||
|
|
@ -323,7 +323,7 @@ impl PipeScreen {
|
|||
}
|
||||
|
||||
pub fn device_type(&self) -> pipe_loader_device_type {
|
||||
unsafe { *self.ldev.ldev }.type_
|
||||
self.ldev.device_type()
|
||||
}
|
||||
|
||||
pub fn driver_uuid(&self) -> Option<[c_schar; UUID_SIZE]> {
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue