script_webgpu/
gpuadapterinfo.rs1use std::marker::PhantomData;
6
7use dom_struct::dom_struct;
8use js::context::JSContext;
9use jstraceable_derive::JSTraceable;
10use malloc_size_of_derive::MallocSizeOf;
11use script_bindings::DomTypes;
12use script_bindings::codegen::GenericBindings::WebGPUBinding::{
13 GPUAdapterInfoMethods, GPUAdapterInfoWrap,
14};
15use script_bindings::reflector::{Reflector, reflect_dom_object_with_wrap};
16
17use crate::dom::bindings::root::DomRoot;
18use crate::dom::bindings::str::DOMString;
19
20#[dom_struct]
21pub struct GPUAdapterInfo<D: DomTypes> {
22 reflector_: Reflector,
23 vendor: DOMString,
24 architecture: DOMString,
25 device: DOMString,
26 description: DOMString,
27 subgroup_min_size: u32,
28 subgroup_max_size: u32,
29 is_fallback_adapter: bool,
30 #[no_trace = "Phantom data is not real"]
31 phantom: PhantomData<D>,
32}
33
34impl<D> GPUAdapterInfo<D>
35where
36 D: DomTypes<GPUAdapterInfo = GPUAdapterInfo<D>>,
37{
38 fn new_inherited(
39 vendor: DOMString,
40 architecture: DOMString,
41 device: DOMString,
42 description: DOMString,
43 subgroup_min_size: u32,
44 subgroup_max_size: u32,
45 is_fallback_adapter: bool,
46 ) -> Self {
47 Self {
48 reflector_: Reflector::new(),
49 vendor,
50 architecture,
51 device,
52 description,
53 subgroup_min_size,
54 subgroup_max_size,
55 is_fallback_adapter,
56 phantom: PhantomData,
57 }
58 }
59
60 #[expect(clippy::too_many_arguments)]
61 pub fn new(
62 cx: &mut JSContext,
63 global: &D::GlobalScope,
64 vendor: DOMString,
65 architecture: DOMString,
66 device: DOMString,
67 description: DOMString,
68 subgroup_min_size: u32,
69 subgroup_max_size: u32,
70 is_fallback_adapter: bool,
71 ) -> DomRoot<Self> {
72 reflect_dom_object_with_wrap::<D, _, _>(
73 Box::new(Self::new_inherited(
74 vendor,
75 architecture,
76 device,
77 description,
78 subgroup_min_size,
79 subgroup_max_size,
80 is_fallback_adapter,
81 )),
82 global,
83 cx,
84 GPUAdapterInfoWrap::<D>,
85 )
86 }
87
88 pub fn clone_from(
89 cx: &mut JSContext,
90 global: &D::GlobalScope,
91 info: &GPUAdapterInfo<D>,
92 ) -> DomRoot<Self> {
93 Self::new(
94 cx,
95 global,
96 info.vendor.clone(),
97 info.architecture.clone(),
98 info.device.clone(),
99 info.description.clone(),
100 info.subgroup_min_size,
101 info.subgroup_max_size,
102 info.is_fallback_adapter,
103 )
104 }
105}
106
107impl<D: DomTypes> GPUAdapterInfoMethods<D> for GPUAdapterInfo<D> {
108 fn Vendor(&self) -> DOMString {
110 self.vendor.clone()
111 }
112
113 fn Architecture(&self) -> DOMString {
115 self.architecture.clone()
116 }
117
118 fn Device(&self) -> DOMString {
120 self.device.clone()
121 }
122
123 fn Description(&self) -> DOMString {
125 self.description.clone()
126 }
127
128 fn SubgroupMinSize(&self) -> u32 {
130 self.subgroup_min_size
131 }
132
133 fn SubgroupMaxSize(&self) -> u32 {
135 self.subgroup_max_size
136 }
137
138 fn IsFallbackAdapter(&self) -> bool {
140 self.is_fallback_adapter
141 }
142}