gfxd_rs/
microcode.rs

1/* SPDX-FileCopyrightText: © 2025 Decompollaborate */
2/* SPDX-License-Identifier: MIT OR Apache-2.0 */
3
4use gfxd_sys::settings::{gfxd_f3d, gfxd_f3db, gfxd_f3dex, gfxd_f3dex2, gfxd_f3dexb, gfxd_ucode_t};
5
6/// The target microcode to decode the `Gfx` packets as.
7#[derive(Debug, Clone, Copy, Hash, PartialEq, Eq)]
8#[allow(missing_docs)]
9pub enum Microcode {
10    F3d,
11    F3db,
12    F3dex,
13    F3dexb,
14    F3dex2,
15}
16
17impl Microcode {
18    /// Get a `Microcode` variant from its name.
19    #[must_use]
20    pub fn from_name(name: &str) -> Option<Self> {
21        match name {
22            "f3d" => Some(Self::F3d),
23            "f3db" => Some(Self::F3db),
24            "f3dex" => Some(Self::F3dex),
25            "f3dexb" => Some(Self::F3dexb),
26            "f3dex2" => Some(Self::F3dex2),
27            _ => None,
28        }
29    }
30}
31
32impl Microcode {
33    pub(crate) fn to_microcode_ptr(self) -> gfxd_ucode_t {
34        match self {
35            Microcode::F3d => unsafe { gfxd_f3d },
36            Microcode::F3db => unsafe { gfxd_f3db },
37            Microcode::F3dex => unsafe { gfxd_f3dex },
38            Microcode::F3dexb => unsafe { gfxd_f3dexb },
39            Microcode::F3dex2 => unsafe { gfxd_f3dex2 },
40        }
41    }
42}