aboutsummaryrefslogtreecommitdiffstats
path: root/components/shared/webgpu/ids.rs
diff options
context:
space:
mode:
authorMartin Robinson <mrobinson@igalia.com>2025-04-04 10:06:07 +0200
committerGitHub <noreply@github.com>2025-04-04 08:06:07 +0000
commit0d693114ad4f27a07a3cd18c4c34da53be55d1bc (patch)
tree35d4382e088703434cb6b109b3a4bd9476c8ccf6 /components/shared/webgpu/ids.rs
parentdf9efde1c377f0ff701fdd72814b628e73397464 (diff)
downloadservo-0d693114ad4f27a07a3cd18c4c34da53be55d1bc.tar.gz
servo-0d693114ad4f27a07a3cd18c4c34da53be55d1bc.zip
webgpu: Add a `webgpu_traits` crate (#36320)
This breaks the `script_traits` dependency on `webgpu`. In general, the `traits` crates shouldn't depend on Servo non-`traits` crates. This is necessary to move "script to constellation" messages to the `constellation_traits` crate, making it the entire API for talking to the constellation. This will break a circular dependency when that happens. Testing: Successfully building is enough of a test for this one as it is mainly moving types around. Signed-off-by: Martin Robinson <mrobinson@igalia.com> Signed-off-by: Martin Robinson <mrobinson@igalia.com>
Diffstat (limited to 'components/shared/webgpu/ids.rs')
-rw-r--r--components/shared/webgpu/ids.rs53
1 files changed, 53 insertions, 0 deletions
diff --git a/components/shared/webgpu/ids.rs b/components/shared/webgpu/ids.rs
new file mode 100644
index 00000000000..28f2d1c24af
--- /dev/null
+++ b/components/shared/webgpu/ids.rs
@@ -0,0 +1,53 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */
+
+use malloc_size_of::{MallocSizeOf, MallocSizeOfOps};
+use serde::{Deserialize, Serialize};
+pub use wgpu_core::id::markers::{
+ ComputePassEncoder as ComputePass, RenderPassEncoder as RenderPass,
+};
+use wgpu_core::id::{
+ AdapterId, BindGroupId, BindGroupLayoutId, BufferId, CommandBufferId, CommandEncoderId,
+ ComputePipelineId, DeviceId, PipelineLayoutId, QueueId, RenderBundleId, RenderPipelineId,
+ SamplerId, ShaderModuleId, SurfaceId, TextureId, TextureViewId,
+};
+pub use wgpu_core::id::{
+ ComputePassEncoderId as ComputePassId, RenderPassEncoderId as RenderPassId,
+};
+
+macro_rules! webgpu_resource {
+ ($name:ident, $id:ty) => {
+ #[derive(Clone, Copy, Debug, Deserialize, Hash, PartialEq, PartialOrd, Serialize)]
+ pub struct $name(pub $id);
+
+ impl MallocSizeOf for $name {
+ fn size_of(&self, _ops: &mut MallocSizeOfOps) -> usize {
+ 0
+ }
+ }
+
+ impl Eq for $name {}
+ };
+}
+
+webgpu_resource!(WebGPUAdapter, AdapterId);
+webgpu_resource!(WebGPUBindGroup, BindGroupId);
+webgpu_resource!(WebGPUBindGroupLayout, BindGroupLayoutId);
+webgpu_resource!(WebGPUBuffer, BufferId);
+webgpu_resource!(WebGPUCommandBuffer, CommandBufferId);
+webgpu_resource!(WebGPUCommandEncoder, CommandEncoderId);
+webgpu_resource!(WebGPUComputePipeline, ComputePipelineId);
+webgpu_resource!(WebGPUDevice, DeviceId);
+webgpu_resource!(WebGPUPipelineLayout, PipelineLayoutId);
+webgpu_resource!(WebGPUQueue, QueueId);
+webgpu_resource!(WebGPURenderBundle, RenderBundleId);
+webgpu_resource!(WebGPURenderPipeline, RenderPipelineId);
+webgpu_resource!(WebGPUSampler, SamplerId);
+webgpu_resource!(WebGPUShaderModule, ShaderModuleId);
+webgpu_resource!(WebGPUSurface, SurfaceId);
+webgpu_resource!(WebGPUTexture, TextureId);
+webgpu_resource!(WebGPUTextureView, TextureViewId);
+webgpu_resource!(WebGPUComputePass, ComputePassId);
+webgpu_resource!(WebGPURenderPass, RenderPassId);
+webgpu_resource!(WebGPUContextId, u64);