diff options
author | Martin Robinson <mrobinson@igalia.com> | 2025-04-04 10:06:07 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2025-04-04 08:06:07 +0000 |
commit | 0d693114ad4f27a07a3cd18c4c34da53be55d1bc (patch) | |
tree | 35d4382e088703434cb6b109b3a4bd9476c8ccf6 /components/shared/webgpu/ids.rs | |
parent | df9efde1c377f0ff701fdd72814b628e73397464 (diff) | |
download | servo-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.rs | 53 |
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); |