mirror of
https://github.com/gfx-rs/wgpu.git
synced 2024-11-21 22:33:49 +00:00
Feature/serde feature (#5149)
* Add serde, serialize, deserialize features to wgpu and wgpu-core Remove trace, replay features from wgpu-types * Do not use trace, replay in wgpu-types anymore * Make use of deserialize, serialize features in wgpu-core * Make use of serialize, deserialize features in wgpu * Run cargo fmt * Use serde(default) for deserialize only * Fix serial-pass feature * Add a comment for new features * Add CHANGELOG entry * Run cargo fmt * serial-pass also needs serde features for Id<T> * Add feature documentation to lib.rs docs * wgpu-types implicit serde feature * wgpu-core explicit serde feature * wgpu explicit serde feature * Update CHANGELOG.md * Fix compilation with default features * Address review comments
This commit is contained in:
parent
0003db18c4
commit
4face1c2ba
@ -67,12 +67,15 @@ Bottom level categories:
|
||||
- `tan`
|
||||
- `tanh`
|
||||
- Eager release of GPU resources comes from device.trackers. By @bradwerth in [#5075](https://github.com/gfx-rs/wgpu/pull/5075)
|
||||
- `wgpu-types`'s `trace` and `replay` features have been replaced by the `serde` feature. By @KirmesBude in [#5149](https://github.com/gfx-rs/wgpu/pull/5149)
|
||||
- `wgpu-core`'s `serial-pass` feature has been removed. Use `serde` instead. By @KirmesBude in [#5149](https://github.com/gfx-rs/wgpu/pull/5149)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
#### General
|
||||
- Fix `panic!` when dropping `Instance` without `InstanceFlags::VALIDATION`. By @hakolao in [#5134](https://github.com/gfx-rs/wgpu/pull/5134)
|
||||
- Fix `serde` feature not compiling for `wgpu-types`. By @KirmesBude in [#5149](https://github.com/gfx-rs/wgpu/pull/5149)
|
||||
|
||||
#### WGL
|
||||
|
||||
|
@ -22,7 +22,7 @@ surface = ["wgpu-core/raw-window-handle", "dep:raw-window-handle"]
|
||||
deno_core.workspace = true
|
||||
serde = { workspace = true, features = ["derive"] }
|
||||
tokio = { workspace = true, features = ["full"] }
|
||||
wgpu-types = { workspace = true, features = ["trace", "replay", "serde"] }
|
||||
wgpu-types = { workspace = true, features = ["serde"] }
|
||||
raw-window-handle = { workspace = true, optional = true }
|
||||
|
||||
[target.'cfg(not(target_arch = "wasm32"))'.dependencies.wgpu-core]
|
||||
|
@ -29,7 +29,7 @@ winit = { workspace = true, optional = true }
|
||||
|
||||
[dependencies.wgt]
|
||||
workspace = true
|
||||
features = ["replay"]
|
||||
features = ["serde"]
|
||||
|
||||
[target.'cfg(not(target_arch = "wasm32"))'.dependencies.wgc]
|
||||
workspace = true
|
||||
|
@ -38,7 +38,7 @@ serde_json.workspace = true
|
||||
serde.workspace = true
|
||||
wgpu-macros.workspace = true
|
||||
wgpu.workspace = true
|
||||
wgt = { workspace = true, features = ["replay"] }
|
||||
wgt = { workspace = true, features = ["serde"] }
|
||||
|
||||
[target.'cfg(not(target_arch = "wasm32"))'.dependencies]
|
||||
env_logger.workspace = true
|
||||
|
@ -47,14 +47,14 @@ renderdoc = ["hal/renderdoc"]
|
||||
## to the validation carried out at public APIs in all builds.
|
||||
strict_asserts = ["wgt/strict_asserts"]
|
||||
|
||||
## Enables serialization via `serde` on common wgpu types.
|
||||
serde = ["dep:serde", "wgt/serde", "arrayvec/serde"]
|
||||
|
||||
## Enable API tracing.
|
||||
trace = ["ron", "serde", "wgt/trace", "arrayvec/serde", "naga/serialize"]
|
||||
trace = ["ron", "serde", "naga/serialize"]
|
||||
|
||||
## Enable API replaying
|
||||
replay = ["serde", "wgt/replay", "arrayvec/serde", "naga/deserialize"]
|
||||
|
||||
## Enable serializable compute/render passes, and bundle encoders.
|
||||
serial-pass = ["serde", "wgt/serde", "arrayvec/serde"]
|
||||
replay = ["serde", "naga/deserialize"]
|
||||
|
||||
## Enable `ShaderModuleSource::Wgsl`
|
||||
wgsl = ["naga/wgsl-in"]
|
||||
|
@ -21,9 +21,9 @@ use crate::{
|
||||
|
||||
use arrayvec::ArrayVec;
|
||||
|
||||
#[cfg(feature = "replay")]
|
||||
#[cfg(feature = "serde")]
|
||||
use serde::Deserialize;
|
||||
#[cfg(feature = "trace")]
|
||||
#[cfg(feature = "serde")]
|
||||
use serde::Serialize;
|
||||
|
||||
use std::{borrow::Cow, ops::Range, sync::Arc};
|
||||
@ -406,8 +406,7 @@ impl BindingTypeMaxCountValidator {
|
||||
|
||||
/// Bindable resource and the slot to bind it to.
|
||||
#[derive(Clone, Debug)]
|
||||
#[cfg_attr(feature = "trace", derive(Serialize))]
|
||||
#[cfg_attr(feature = "replay", derive(Deserialize))]
|
||||
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
|
||||
pub struct BindGroupEntry<'a> {
|
||||
/// Slot for which binding provides resource. Corresponds to an entry of the same
|
||||
/// binding index in the [`BindGroupLayoutDescriptor`].
|
||||
@ -418,8 +417,7 @@ pub struct BindGroupEntry<'a> {
|
||||
|
||||
/// Describes a group of bindings and the resources to be bound.
|
||||
#[derive(Clone, Debug)]
|
||||
#[cfg_attr(feature = "trace", derive(Serialize))]
|
||||
#[cfg_attr(feature = "replay", derive(Deserialize))]
|
||||
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
|
||||
pub struct BindGroupDescriptor<'a> {
|
||||
/// Debug label of the bind group.
|
||||
///
|
||||
@ -433,8 +431,7 @@ pub struct BindGroupDescriptor<'a> {
|
||||
|
||||
/// Describes a [`BindGroupLayout`].
|
||||
#[derive(Clone, Debug)]
|
||||
#[cfg_attr(feature = "trace", derive(serde::Serialize))]
|
||||
#[cfg_attr(feature = "replay", derive(serde::Deserialize))]
|
||||
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
|
||||
pub struct BindGroupLayoutDescriptor<'a> {
|
||||
/// Debug label of the bind group layout.
|
||||
///
|
||||
@ -582,8 +579,7 @@ pub enum PushConstantUploadError {
|
||||
///
|
||||
/// A `PipelineLayoutDescriptor` can be used to create a pipeline layout.
|
||||
#[derive(Clone, Debug, PartialEq, Eq, Hash)]
|
||||
#[cfg_attr(feature = "trace", derive(Serialize))]
|
||||
#[cfg_attr(feature = "replay", derive(Deserialize))]
|
||||
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
|
||||
pub struct PipelineLayoutDescriptor<'a> {
|
||||
/// Debug label of the pipeine layout.
|
||||
///
|
||||
@ -734,8 +730,7 @@ impl<A: HalApi> Resource<PipelineLayoutId> for PipelineLayout<A> {
|
||||
|
||||
#[repr(C)]
|
||||
#[derive(Clone, Debug, Hash, Eq, PartialEq)]
|
||||
#[cfg_attr(feature = "trace", derive(Serialize))]
|
||||
#[cfg_attr(feature = "replay", derive(Deserialize))]
|
||||
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
|
||||
pub struct BufferBinding {
|
||||
pub buffer_id: BufferId,
|
||||
pub offset: wgt::BufferAddress,
|
||||
@ -745,8 +740,7 @@ pub struct BufferBinding {
|
||||
// Note: Duplicated in `wgpu-rs` as `BindingResource`
|
||||
// They're different enough that it doesn't make sense to share a common type
|
||||
#[derive(Debug, Clone)]
|
||||
#[cfg_attr(feature = "trace", derive(serde::Serialize))]
|
||||
#[cfg_attr(feature = "replay", derive(serde::Deserialize))]
|
||||
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
|
||||
pub enum BindingResource<'a> {
|
||||
Buffer(BufferBinding),
|
||||
BufferArray(Cow<'a, [BufferBinding]>),
|
||||
|
@ -197,8 +197,7 @@ fn validate_indexed_draw(
|
||||
|
||||
/// Describes a [`RenderBundleEncoder`].
|
||||
#[derive(Clone, Debug, Default, PartialEq, Eq, Hash)]
|
||||
#[cfg_attr(feature = "trace", derive(serde::Serialize))]
|
||||
#[cfg_attr(feature = "replay", derive(serde::Deserialize))]
|
||||
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
|
||||
pub struct RenderBundleEncoderDescriptor<'a> {
|
||||
/// Debug label of the render bundle encoder.
|
||||
///
|
||||
@ -226,7 +225,7 @@ pub struct RenderBundleEncoderDescriptor<'a> {
|
||||
}
|
||||
|
||||
#[derive(Debug)]
|
||||
#[cfg_attr(feature = "serial-pass", derive(serde::Deserialize, serde::Serialize))]
|
||||
#[cfg_attr(feature = "serde", derive(serde::Deserialize, serde::Serialize))]
|
||||
pub struct RenderBundleEncoder {
|
||||
base: BasePass<RenderCommand>,
|
||||
parent_id: id::DeviceId,
|
||||
@ -235,9 +234,9 @@ pub struct RenderBundleEncoder {
|
||||
pub(crate) is_stencil_read_only: bool,
|
||||
|
||||
// Resource binding dedupe state.
|
||||
#[cfg_attr(feature = "serial-pass", serde(skip))]
|
||||
#[cfg_attr(feature = "serde", serde(skip))]
|
||||
current_bind_groups: BindGroupStateChange,
|
||||
#[cfg_attr(feature = "serial-pass", serde(skip))]
|
||||
#[cfg_attr(feature = "serde", serde(skip))]
|
||||
current_pipeline: StateChange<id::RenderPipelineId>,
|
||||
}
|
||||
|
||||
|
@ -29,9 +29,9 @@ use crate::{
|
||||
};
|
||||
|
||||
use hal::CommandEncoder as _;
|
||||
#[cfg(any(feature = "serial-pass", feature = "replay"))]
|
||||
#[cfg(feature = "serde")]
|
||||
use serde::Deserialize;
|
||||
#[cfg(any(feature = "serial-pass", feature = "trace"))]
|
||||
#[cfg(feature = "serde")]
|
||||
use serde::Serialize;
|
||||
|
||||
use thiserror::Error;
|
||||
@ -40,14 +40,7 @@ use std::{fmt, mem, str};
|
||||
|
||||
#[doc(hidden)]
|
||||
#[derive(Clone, Copy, Debug)]
|
||||
#[cfg_attr(
|
||||
any(feature = "serial-pass", feature = "trace"),
|
||||
derive(serde::Serialize)
|
||||
)]
|
||||
#[cfg_attr(
|
||||
any(feature = "serial-pass", feature = "replay"),
|
||||
derive(serde::Deserialize)
|
||||
)]
|
||||
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
|
||||
pub enum ComputeCommand {
|
||||
SetBindGroup {
|
||||
index: u32,
|
||||
@ -98,16 +91,16 @@ pub enum ComputeCommand {
|
||||
EndPipelineStatisticsQuery,
|
||||
}
|
||||
|
||||
#[cfg_attr(feature = "serial-pass", derive(serde::Deserialize, serde::Serialize))]
|
||||
#[cfg_attr(feature = "serde", derive(serde::Deserialize, serde::Serialize))]
|
||||
pub struct ComputePass {
|
||||
base: BasePass<ComputeCommand>,
|
||||
parent_id: id::CommandEncoderId,
|
||||
timestamp_writes: Option<ComputePassTimestampWrites>,
|
||||
|
||||
// Resource binding dedupe state.
|
||||
#[cfg_attr(feature = "serial-pass", serde(skip))]
|
||||
#[cfg_attr(feature = "serde", serde(skip))]
|
||||
current_bind_groups: BindGroupStateChange,
|
||||
#[cfg_attr(feature = "serial-pass", serde(skip))]
|
||||
#[cfg_attr(feature = "serde", serde(skip))]
|
||||
current_pipeline: StateChange<id::ComputePipelineId>,
|
||||
}
|
||||
|
||||
@ -151,8 +144,7 @@ impl fmt::Debug for ComputePass {
|
||||
/// Describes the writing of timestamp values in a compute pass.
|
||||
#[repr(C)]
|
||||
#[derive(Clone, Debug, PartialEq, Eq)]
|
||||
#[cfg_attr(any(feature = "serial-pass", feature = "trace"), derive(Serialize))]
|
||||
#[cfg_attr(any(feature = "serial-pass", feature = "replay"), derive(Deserialize))]
|
||||
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
|
||||
pub struct ComputePassTimestampWrites {
|
||||
/// The query set to write the timestamps to.
|
||||
pub query_set: id::QuerySetId,
|
||||
|
@ -126,14 +126,7 @@ impl crate::error::PrettyError for RenderCommandError {
|
||||
}
|
||||
|
||||
#[derive(Clone, Copy, Debug, Default)]
|
||||
#[cfg_attr(
|
||||
any(feature = "serial-pass", feature = "trace"),
|
||||
derive(serde::Serialize)
|
||||
)]
|
||||
#[cfg_attr(
|
||||
any(feature = "serial-pass", feature = "replay"),
|
||||
derive(serde::Deserialize)
|
||||
)]
|
||||
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
|
||||
pub struct Rect<T> {
|
||||
pub x: T,
|
||||
pub y: T,
|
||||
@ -143,14 +136,7 @@ pub struct Rect<T> {
|
||||
|
||||
#[doc(hidden)]
|
||||
#[derive(Clone, Copy, Debug)]
|
||||
#[cfg_attr(
|
||||
any(feature = "serial-pass", feature = "trace"),
|
||||
derive(serde::Serialize)
|
||||
)]
|
||||
#[cfg_attr(
|
||||
any(feature = "serial-pass", feature = "replay"),
|
||||
derive(serde::Deserialize)
|
||||
)]
|
||||
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
|
||||
pub enum RenderCommand {
|
||||
SetBindGroup {
|
||||
index: u32,
|
||||
|
@ -338,14 +338,7 @@ pub struct BasePassRef<'a, C> {
|
||||
/// [`InsertDebugMarker`]: RenderCommand::InsertDebugMarker
|
||||
#[doc(hidden)]
|
||||
#[derive(Debug)]
|
||||
#[cfg_attr(
|
||||
any(feature = "serial-pass", feature = "trace"),
|
||||
derive(serde::Serialize)
|
||||
)]
|
||||
#[cfg_attr(
|
||||
any(feature = "serial-pass", feature = "replay"),
|
||||
derive(serde::Deserialize)
|
||||
)]
|
||||
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
|
||||
pub struct BasePass<C> {
|
||||
pub label: Option<String>,
|
||||
|
||||
|
@ -40,9 +40,9 @@ use wgt::{
|
||||
TextureViewDimension, VertexStepMode,
|
||||
};
|
||||
|
||||
#[cfg(any(feature = "serial-pass", feature = "replay"))]
|
||||
#[cfg(feature = "serde")]
|
||||
use serde::Deserialize;
|
||||
#[cfg(any(feature = "serial-pass", feature = "trace"))]
|
||||
#[cfg(feature = "serde")]
|
||||
use serde::Serialize;
|
||||
|
||||
use std::sync::Arc;
|
||||
@ -56,8 +56,7 @@ use super::{
|
||||
/// Operation to perform to the output attachment at the start of a renderpass.
|
||||
#[repr(C)]
|
||||
#[derive(Copy, Clone, Debug, Hash, Eq, PartialEq)]
|
||||
#[cfg_attr(any(feature = "serial-pass", feature = "trace"), derive(Serialize))]
|
||||
#[cfg_attr(any(feature = "serial-pass", feature = "replay"), derive(Deserialize))]
|
||||
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
|
||||
#[cfg_attr(feature = "serde", serde(rename_all = "kebab-case"))]
|
||||
pub enum LoadOp {
|
||||
/// Clear the output attachment with the clear color. Clearing is faster than loading.
|
||||
@ -69,8 +68,7 @@ pub enum LoadOp {
|
||||
/// Operation to perform to the output attachment at the end of a renderpass.
|
||||
#[repr(C)]
|
||||
#[derive(Copy, Clone, Debug, Hash, Eq, PartialEq)]
|
||||
#[cfg_attr(any(feature = "serial-pass", feature = "trace"), derive(Serialize))]
|
||||
#[cfg_attr(any(feature = "serial-pass", feature = "replay"), derive(Deserialize))]
|
||||
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
|
||||
#[cfg_attr(feature = "serde", serde(rename_all = "kebab-case"))]
|
||||
pub enum StoreOp {
|
||||
/// Discards the content of the render target.
|
||||
@ -84,8 +82,7 @@ pub enum StoreOp {
|
||||
/// Describes an individual channel within a render pass, such as color, depth, or stencil.
|
||||
#[repr(C)]
|
||||
#[derive(Clone, Debug, Eq, PartialEq)]
|
||||
#[cfg_attr(any(feature = "serial-pass", feature = "trace"), derive(Serialize))]
|
||||
#[cfg_attr(any(feature = "serial-pass", feature = "replay"), derive(Deserialize))]
|
||||
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
|
||||
pub struct PassChannel<V> {
|
||||
/// Operation to perform to the output attachment at the start of a
|
||||
/// renderpass.
|
||||
@ -122,8 +119,7 @@ impl<V> PassChannel<V> {
|
||||
/// Describes a color attachment to a render pass.
|
||||
#[repr(C)]
|
||||
#[derive(Clone, Debug, PartialEq)]
|
||||
#[cfg_attr(any(feature = "serial-pass", feature = "trace"), derive(Serialize))]
|
||||
#[cfg_attr(any(feature = "serial-pass", feature = "replay"), derive(Deserialize))]
|
||||
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
|
||||
pub struct RenderPassColorAttachment {
|
||||
/// The view to use as an attachment.
|
||||
pub view: id::TextureViewId,
|
||||
@ -136,8 +132,7 @@ pub struct RenderPassColorAttachment {
|
||||
/// Describes a depth/stencil attachment to a render pass.
|
||||
#[repr(C)]
|
||||
#[derive(Clone, Debug, PartialEq)]
|
||||
#[cfg_attr(any(feature = "serial-pass", feature = "trace"), derive(Serialize))]
|
||||
#[cfg_attr(any(feature = "serial-pass", feature = "replay"), derive(Deserialize))]
|
||||
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
|
||||
pub struct RenderPassDepthStencilAttachment {
|
||||
/// The view to use as an attachment.
|
||||
pub view: id::TextureViewId,
|
||||
@ -188,8 +183,7 @@ impl RenderPassDepthStencilAttachment {
|
||||
/// Location to write a timestamp to (beginning or end of the pass).
|
||||
#[repr(C)]
|
||||
#[derive(Copy, Clone, Debug, Hash, Eq, PartialEq)]
|
||||
#[cfg_attr(any(feature = "serial-pass", feature = "trace"), derive(Serialize))]
|
||||
#[cfg_attr(any(feature = "serial-pass", feature = "replay"), derive(Deserialize))]
|
||||
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
|
||||
#[cfg_attr(feature = "serde", serde(rename_all = "kebab-case"))]
|
||||
pub enum RenderPassTimestampLocation {
|
||||
Beginning = 0,
|
||||
@ -199,8 +193,7 @@ pub enum RenderPassTimestampLocation {
|
||||
/// Describes the writing of timestamp values in a render pass.
|
||||
#[repr(C)]
|
||||
#[derive(Clone, Debug, PartialEq, Eq)]
|
||||
#[cfg_attr(any(feature = "serial-pass", feature = "trace"), derive(Serialize))]
|
||||
#[cfg_attr(any(feature = "serial-pass", feature = "replay"), derive(Deserialize))]
|
||||
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
|
||||
pub struct RenderPassTimestampWrites {
|
||||
/// The query set to write the timestamp to.
|
||||
pub query_set: id::QuerySetId,
|
||||
@ -224,7 +217,7 @@ pub struct RenderPassDescriptor<'a> {
|
||||
pub occlusion_query_set: Option<id::QuerySetId>,
|
||||
}
|
||||
|
||||
#[cfg_attr(feature = "serial-pass", derive(Deserialize, Serialize))]
|
||||
#[cfg_attr(feature = "serde", derive(Deserialize, Serialize))]
|
||||
pub struct RenderPass {
|
||||
base: BasePass<RenderCommand>,
|
||||
parent_id: id::CommandEncoderId,
|
||||
@ -234,9 +227,9 @@ pub struct RenderPass {
|
||||
occlusion_query_set_id: Option<id::QuerySetId>,
|
||||
|
||||
// Resource binding dedupe state.
|
||||
#[cfg_attr(feature = "serial-pass", serde(skip))]
|
||||
#[cfg_attr(feature = "serde", serde(skip))]
|
||||
current_bind_groups: BindGroupStateChange,
|
||||
#[cfg_attr(feature = "serial-pass", serde(skip))]
|
||||
#[cfg_attr(feature = "serde", serde(skip))]
|
||||
current_pipeline: StateChange<id::RenderPipelineId>,
|
||||
}
|
||||
|
||||
|
@ -42,15 +42,14 @@ pub type DeviceDescriptor<'a> = wgt::DeviceDescriptor<Label<'a>>;
|
||||
|
||||
#[repr(C)]
|
||||
#[derive(Clone, Copy, Debug, Eq, PartialEq)]
|
||||
#[cfg_attr(feature = "trace", derive(serde::Serialize))]
|
||||
#[cfg_attr(feature = "replay", derive(serde::Deserialize))]
|
||||
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
|
||||
pub enum HostMap {
|
||||
Read,
|
||||
Write,
|
||||
}
|
||||
|
||||
#[derive(Clone, Debug, Hash, PartialEq)]
|
||||
#[cfg_attr(feature = "serial-pass", derive(serde::Deserialize, serde::Serialize))]
|
||||
#[cfg_attr(feature = "serde", derive(serde::Deserialize, serde::Serialize))]
|
||||
pub(crate) struct AttachmentData<T> {
|
||||
pub colors: ArrayVec<Option<T>, { hal::MAX_COLOR_ATTACHMENTS }>,
|
||||
pub resolves: ArrayVec<T, { hal::MAX_COLOR_ATTACHMENTS }>,
|
||||
@ -74,7 +73,7 @@ pub enum RenderPassCompatibilityCheckType {
|
||||
}
|
||||
|
||||
#[derive(Clone, Debug, Hash, PartialEq)]
|
||||
#[cfg_attr(feature = "serial-pass", derive(serde::Deserialize, serde::Serialize))]
|
||||
#[cfg_attr(feature = "serde", derive(serde::Deserialize, serde::Serialize))]
|
||||
pub(crate) struct RenderPassContext {
|
||||
pub attachments: AttachmentData<TextureFormat>,
|
||||
pub sample_count: u32,
|
||||
@ -457,8 +456,7 @@ pub struct MissingFeatures(pub wgt::Features);
|
||||
pub struct MissingDownlevelFlags(pub wgt::DownlevelFlags);
|
||||
|
||||
#[derive(Clone, Debug)]
|
||||
#[cfg_attr(feature = "trace", derive(serde::Serialize))]
|
||||
#[cfg_attr(feature = "replay", derive(serde::Deserialize))]
|
||||
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
|
||||
pub struct ImplicitPipelineContext {
|
||||
pub root_id: id::PipelineLayoutId,
|
||||
pub group_ids: ArrayVec<id::BindGroupLayoutId, { hal::MAX_BIND_GROUPS }>,
|
||||
|
@ -33,8 +33,7 @@ pub(crate) fn new_render_bundle_encoder_descriptor<'a>(
|
||||
|
||||
#[allow(clippy::large_enum_variant)]
|
||||
#[derive(Debug)]
|
||||
#[cfg_attr(feature = "trace", derive(serde::Serialize))]
|
||||
#[cfg_attr(feature = "replay", derive(serde::Deserialize))]
|
||||
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
|
||||
pub enum Action<'a> {
|
||||
Init {
|
||||
desc: crate::device::DeviceDescriptor<'a>,
|
||||
@ -126,8 +125,7 @@ pub enum Action<'a> {
|
||||
}
|
||||
|
||||
#[derive(Debug)]
|
||||
#[cfg_attr(feature = "trace", derive(serde::Serialize))]
|
||||
#[cfg_attr(feature = "replay", derive(serde::Deserialize))]
|
||||
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
|
||||
pub enum Command {
|
||||
CopyBufferToBuffer {
|
||||
src: id::BufferId,
|
||||
|
@ -67,8 +67,7 @@ pub struct Id<T: 'static + WasmNotSendSync>(NonZeroId, PhantomData<T>);
|
||||
|
||||
// This type represents Id in a more readable (and editable) way.
|
||||
#[allow(dead_code)]
|
||||
#[cfg_attr(feature = "trace", derive(serde::Serialize))]
|
||||
#[cfg_attr(feature = "replay", derive(serde::Deserialize))]
|
||||
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
|
||||
enum SerialId {
|
||||
// The only variant forces RON to not ignore "Id"
|
||||
Id(Index, Epoch, Backend),
|
||||
|
@ -13,9 +13,9 @@
|
||||
//! [https://renderdoc.org/](https://renderdoc.org/)
|
||||
//! - **`strict_asserts`** --- Apply run-time checks, even in release builds. These are in addition
|
||||
//! to the validation carried out at public APIs in all builds.
|
||||
//! - **`serde`** --- Enables serialization via `serde` on common wgpu types.
|
||||
//! - **`trace`** --- Enable API tracing.
|
||||
//! - **`replay`** --- Enable API replaying
|
||||
//! - **`serial-pass`** --- Enable serializable compute/render passes, and bundle encoders.
|
||||
//! - **`wgsl`** --- Enable `ShaderModuleSource::Wgsl`
|
||||
//! - **`fragile-send-sync-non-atomic-wasm`** --- Implement `Send` and `Sync` on Wasm, but only if
|
||||
//! atomics are not enabled.
|
||||
|
@ -38,8 +38,7 @@ pub enum ShaderModuleSource<'a> {
|
||||
}
|
||||
|
||||
#[derive(Clone, Debug)]
|
||||
#[cfg_attr(feature = "trace", derive(serde::Serialize))]
|
||||
#[cfg_attr(feature = "replay", derive(serde::Deserialize))]
|
||||
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
|
||||
pub struct ShaderModuleDescriptor<'a> {
|
||||
pub label: Label<'a>,
|
||||
#[cfg_attr(feature = "serde", serde(default))]
|
||||
@ -208,8 +207,7 @@ impl CreateShaderModuleError {
|
||||
|
||||
/// Describes a programmable pipeline stage.
|
||||
#[derive(Clone, Debug)]
|
||||
#[cfg_attr(feature = "trace", derive(serde::Serialize))]
|
||||
#[cfg_attr(feature = "replay", derive(serde::Deserialize))]
|
||||
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
|
||||
pub struct ProgrammableStageDescriptor<'a> {
|
||||
/// The compiled shader module for this stage.
|
||||
pub module: ShaderModuleId,
|
||||
@ -236,8 +234,7 @@ pub enum ImplicitLayoutError {
|
||||
|
||||
/// Describes a compute pipeline.
|
||||
#[derive(Clone, Debug)]
|
||||
#[cfg_attr(feature = "trace", derive(serde::Serialize))]
|
||||
#[cfg_attr(feature = "replay", derive(serde::Deserialize))]
|
||||
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
|
||||
pub struct ComputePipelineDescriptor<'a> {
|
||||
pub label: Label<'a>,
|
||||
/// The layout of bind groups for this pipeline.
|
||||
@ -311,8 +308,7 @@ impl<A: HalApi> ComputePipeline<A> {
|
||||
|
||||
/// Describes how the vertex buffer is interpreted.
|
||||
#[derive(Clone, Debug)]
|
||||
#[cfg_attr(feature = "trace", derive(serde::Serialize))]
|
||||
#[cfg_attr(feature = "replay", derive(serde::Deserialize))]
|
||||
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
|
||||
#[cfg_attr(feature = "serde", serde(rename_all = "camelCase"))]
|
||||
pub struct VertexBufferLayout<'a> {
|
||||
/// The stride, in bytes, between elements of this buffer.
|
||||
@ -325,8 +321,7 @@ pub struct VertexBufferLayout<'a> {
|
||||
|
||||
/// Describes the vertex process in a render pipeline.
|
||||
#[derive(Clone, Debug)]
|
||||
#[cfg_attr(feature = "trace", derive(serde::Serialize))]
|
||||
#[cfg_attr(feature = "replay", derive(serde::Deserialize))]
|
||||
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
|
||||
pub struct VertexState<'a> {
|
||||
/// The compiled vertex stage and its entry point.
|
||||
pub stage: ProgrammableStageDescriptor<'a>,
|
||||
@ -336,8 +331,7 @@ pub struct VertexState<'a> {
|
||||
|
||||
/// Describes fragment processing in a render pipeline.
|
||||
#[derive(Clone, Debug)]
|
||||
#[cfg_attr(feature = "trace", derive(serde::Serialize))]
|
||||
#[cfg_attr(feature = "replay", derive(serde::Deserialize))]
|
||||
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
|
||||
pub struct FragmentState<'a> {
|
||||
/// The compiled fragment stage and its entry point.
|
||||
pub stage: ProgrammableStageDescriptor<'a>,
|
||||
@ -347,8 +341,7 @@ pub struct FragmentState<'a> {
|
||||
|
||||
/// Describes a render (graphics) pipeline.
|
||||
#[derive(Clone, Debug)]
|
||||
#[cfg_attr(feature = "trace", derive(serde::Serialize))]
|
||||
#[cfg_attr(feature = "replay", derive(serde::Deserialize))]
|
||||
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
|
||||
pub struct RenderPipelineDescriptor<'a> {
|
||||
pub label: Label<'a>,
|
||||
/// The layout of bind groups for this pipeline.
|
||||
@ -356,13 +349,13 @@ pub struct RenderPipelineDescriptor<'a> {
|
||||
/// The vertex processing state for this pipeline.
|
||||
pub vertex: VertexState<'a>,
|
||||
/// The properties of the pipeline at the primitive assembly and rasterization level.
|
||||
#[cfg_attr(any(feature = "replay", feature = "trace"), serde(default))]
|
||||
#[cfg_attr(feature = "serde", serde(default))]
|
||||
pub primitive: wgt::PrimitiveState,
|
||||
/// The effect of draw calls on the depth and stencil aspects of the output target, if any.
|
||||
#[cfg_attr(any(feature = "replay", feature = "trace"), serde(default))]
|
||||
#[cfg_attr(feature = "serde", serde(default))]
|
||||
pub depth_stencil: Option<wgt::DepthStencilState>,
|
||||
/// The multi-sampling properties of the pipeline.
|
||||
#[cfg_attr(any(feature = "replay", feature = "trace"), serde(default))]
|
||||
#[cfg_attr(feature = "serde", serde(default))]
|
||||
pub multisample: wgt::MultisampleState,
|
||||
/// The fragment processing state for this pipeline.
|
||||
pub fragment: Option<FragmentState<'a>>,
|
||||
|
@ -1186,8 +1186,8 @@ impl<A: HalApi> Borrow<TextureSelector> for Texture<A> {
|
||||
|
||||
/// Describes a [`TextureView`].
|
||||
#[derive(Clone, Debug, Default, Eq, PartialEq)]
|
||||
#[cfg_attr(feature = "trace", derive(serde::Serialize))]
|
||||
#[cfg_attr(feature = "replay", derive(serde::Deserialize), serde(default))]
|
||||
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
|
||||
#[cfg_attr(feature = "serde", serde(default))]
|
||||
pub struct TextureViewDescriptor<'a> {
|
||||
/// Debug label of the texture view.
|
||||
///
|
||||
@ -1343,8 +1343,7 @@ impl<A: HalApi> Resource<TextureViewId> for TextureView<A> {
|
||||
|
||||
/// Describes a [`Sampler`]
|
||||
#[derive(Clone, Debug, PartialEq)]
|
||||
#[cfg_attr(feature = "trace", derive(serde::Serialize))]
|
||||
#[cfg_attr(feature = "replay", derive(serde::Deserialize))]
|
||||
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
|
||||
pub struct SamplerDescriptor<'a> {
|
||||
/// Debug label of the sampler.
|
||||
///
|
||||
|
@ -17,4 +17,4 @@ pico-args.workspace = true
|
||||
serde.workspace = true
|
||||
serde_json.workspace = true
|
||||
wgpu.workspace = true
|
||||
wgpu-types = { workspace = true, features = ["trace", "replay"] }
|
||||
wgpu-types = { workspace = true, features = ["serde"] }
|
||||
|
@ -28,8 +28,6 @@ targets = [
|
||||
[lib]
|
||||
|
||||
[features]
|
||||
trace = ["serde"]
|
||||
replay = ["serde"]
|
||||
strict_asserts = []
|
||||
fragile-send-sync-non-atomic-wasm = []
|
||||
|
||||
|
@ -10,7 +10,9 @@
|
||||
#![warn(missing_docs, unsafe_op_in_unsafe_fn)]
|
||||
|
||||
#[cfg(any(feature = "serde", test))]
|
||||
use serde::{Deserialize, Serialize};
|
||||
use serde::Deserialize;
|
||||
#[cfg(any(feature = "serde", test))]
|
||||
use serde::Serialize;
|
||||
use std::hash::{Hash, Hasher};
|
||||
use std::path::PathBuf;
|
||||
use std::{num::NonZeroU32, ops::Range};
|
||||
@ -128,8 +130,7 @@ impl Backend {
|
||||
/// https://gpuweb.github.io/gpuweb/#enumdef-gpupowerpreference).
|
||||
#[repr(C)]
|
||||
#[derive(Copy, Clone, Debug, PartialEq, Eq, Hash, Default)]
|
||||
#[cfg_attr(feature = "trace", derive(Serialize))]
|
||||
#[cfg_attr(feature = "replay", derive(Deserialize))]
|
||||
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
|
||||
#[cfg_attr(feature = "serde", serde(rename_all = "kebab-case"))]
|
||||
pub enum PowerPreference {
|
||||
#[default]
|
||||
@ -197,8 +198,7 @@ impl From<Backend> for Backends {
|
||||
/// https://gpuweb.github.io/gpuweb/#dictdef-gpurequestadapteroptions).
|
||||
#[repr(C)]
|
||||
#[derive(Clone, Debug, PartialEq, Eq, Hash)]
|
||||
#[cfg_attr(feature = "trace", derive(Serialize))]
|
||||
#[cfg_attr(feature = "replay", derive(Deserialize))]
|
||||
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
|
||||
pub struct RequestAdapterOptions<S> {
|
||||
/// Power preference for the adapter.
|
||||
pub power_preference: PowerPreference,
|
||||
@ -989,7 +989,7 @@ impl InstanceFlags {
|
||||
/// [`downlevel_defaults()`]: Limits::downlevel_defaults
|
||||
#[repr(C)]
|
||||
#[derive(Clone, Debug, PartialEq, Eq, Hash)]
|
||||
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
|
||||
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
|
||||
#[cfg_attr(feature = "serde", serde(rename_all = "camelCase", default))]
|
||||
pub struct Limits {
|
||||
/// Maximum allowed value for the `size.width` of a texture created with `TextureDimension::D1`.
|
||||
@ -1664,8 +1664,7 @@ pub struct AdapterInfo {
|
||||
/// https://gpuweb.github.io/gpuweb/#gpudevicedescriptor).
|
||||
#[repr(C)]
|
||||
#[derive(Clone, Debug, Default)]
|
||||
#[cfg_attr(feature = "trace", derive(Serialize))]
|
||||
#[cfg_attr(feature = "replay", derive(Deserialize))]
|
||||
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
|
||||
pub struct DeviceDescriptor<L> {
|
||||
/// Debug label for the device.
|
||||
pub label: L,
|
||||
@ -1727,8 +1726,7 @@ impl_bitflags!(ShaderStages);
|
||||
/// https://gpuweb.github.io/gpuweb/#enumdef-gputextureviewdimension).
|
||||
#[repr(C)]
|
||||
#[derive(Copy, Clone, Debug, Default, Hash, Eq, PartialEq)]
|
||||
#[cfg_attr(feature = "trace", derive(Serialize))]
|
||||
#[cfg_attr(feature = "replay", derive(Deserialize))]
|
||||
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
|
||||
pub enum TextureViewDimension {
|
||||
/// A one dimensional texture. `texture_1d` in WGSL and `texture1D` in GLSL.
|
||||
#[cfg_attr(feature = "serde", serde(rename = "1d"))]
|
||||
@ -1772,8 +1770,7 @@ impl TextureViewDimension {
|
||||
/// used with the first render target.
|
||||
#[repr(C)]
|
||||
#[derive(Copy, Clone, Debug, Hash, Eq, PartialEq)]
|
||||
#[cfg_attr(feature = "trace", derive(Serialize))]
|
||||
#[cfg_attr(feature = "replay", derive(Deserialize))]
|
||||
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
|
||||
#[cfg_attr(feature = "serde", serde(rename_all = "kebab-case"))]
|
||||
pub enum BlendFactor {
|
||||
/// 0.0
|
||||
@ -1835,8 +1832,7 @@ impl BlendFactor {
|
||||
/// https://gpuweb.github.io/gpuweb/#enumdef-gpublendoperation).
|
||||
#[repr(C)]
|
||||
#[derive(Copy, Clone, Debug, Default, Hash, Eq, PartialEq)]
|
||||
#[cfg_attr(feature = "trace", derive(Serialize))]
|
||||
#[cfg_attr(feature = "replay", derive(Deserialize))]
|
||||
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
|
||||
#[cfg_attr(feature = "serde", serde(rename_all = "kebab-case"))]
|
||||
pub enum BlendOperation {
|
||||
/// Src + Dst
|
||||
@ -1858,8 +1854,7 @@ pub enum BlendOperation {
|
||||
/// https://gpuweb.github.io/gpuweb/#dictdef-gpublendcomponent).
|
||||
#[repr(C)]
|
||||
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)]
|
||||
#[cfg_attr(feature = "trace", derive(Serialize))]
|
||||
#[cfg_attr(feature = "replay", derive(Deserialize))]
|
||||
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
|
||||
#[cfg_attr(feature = "serde", serde(rename_all = "camelCase"))]
|
||||
pub struct BlendComponent {
|
||||
/// Multiplier for the source, which is produced by the fragment shader.
|
||||
@ -1914,8 +1909,7 @@ impl Default for BlendComponent {
|
||||
/// https://gpuweb.github.io/gpuweb/#dictdef-gpublendstate).
|
||||
#[repr(C)]
|
||||
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)]
|
||||
#[cfg_attr(feature = "trace", derive(Serialize))]
|
||||
#[cfg_attr(feature = "replay", derive(Deserialize))]
|
||||
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
|
||||
#[cfg_attr(feature = "serde", serde(rename_all = "camelCase"))]
|
||||
pub struct BlendState {
|
||||
/// Color equation.
|
||||
@ -1954,8 +1948,7 @@ impl BlendState {
|
||||
/// https://gpuweb.github.io/gpuweb/#dictdef-gpucolortargetstate).
|
||||
#[repr(C)]
|
||||
#[derive(Clone, Debug, PartialEq, Eq, Hash)]
|
||||
#[cfg_attr(feature = "trace", derive(Serialize))]
|
||||
#[cfg_attr(feature = "replay", derive(Deserialize))]
|
||||
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
|
||||
#[cfg_attr(feature = "serde", serde(rename_all = "camelCase"))]
|
||||
pub struct ColorTargetState {
|
||||
/// The [`TextureFormat`] of the image that this pipeline will render to. Must match the format
|
||||
@ -1987,8 +1980,7 @@ impl From<TextureFormat> for ColorTargetState {
|
||||
/// https://gpuweb.github.io/gpuweb/#enumdef-gpuprimitivetopology).
|
||||
#[repr(C)]
|
||||
#[derive(Copy, Clone, Debug, Default, Hash, Eq, PartialEq)]
|
||||
#[cfg_attr(feature = "trace", derive(Serialize))]
|
||||
#[cfg_attr(feature = "replay", derive(Deserialize))]
|
||||
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
|
||||
#[cfg_attr(feature = "serde", serde(rename_all = "kebab-case"))]
|
||||
pub enum PrimitiveTopology {
|
||||
/// Vertex data is a list of points. Each vertex is a new point.
|
||||
@ -2028,8 +2020,7 @@ impl PrimitiveTopology {
|
||||
/// https://gpuweb.github.io/gpuweb/#enumdef-gpufrontface).
|
||||
#[repr(C)]
|
||||
#[derive(Copy, Clone, Debug, Default, PartialEq, Eq, Hash)]
|
||||
#[cfg_attr(feature = "trace", derive(Serialize))]
|
||||
#[cfg_attr(feature = "replay", derive(Deserialize))]
|
||||
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
|
||||
#[cfg_attr(feature = "serde", serde(rename_all = "kebab-case"))]
|
||||
pub enum FrontFace {
|
||||
/// Triangles with vertices in counter clockwise order are considered the front face.
|
||||
@ -2050,8 +2041,7 @@ pub enum FrontFace {
|
||||
/// except that the `"none"` value is represented using `Option<Face>` instead.
|
||||
#[repr(C)]
|
||||
#[derive(Copy, Clone, Debug, PartialEq, Eq, Hash)]
|
||||
#[cfg_attr(feature = "trace", derive(Serialize))]
|
||||
#[cfg_attr(feature = "replay", derive(Deserialize))]
|
||||
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
|
||||
#[cfg_attr(feature = "serde", serde(rename_all = "kebab-case"))]
|
||||
pub enum Face {
|
||||
/// Front face
|
||||
@ -2063,8 +2053,7 @@ pub enum Face {
|
||||
/// Type of drawing mode for polygons
|
||||
#[repr(C)]
|
||||
#[derive(Copy, Clone, Debug, Default, PartialEq, Eq, Hash)]
|
||||
#[cfg_attr(feature = "trace", derive(Serialize))]
|
||||
#[cfg_attr(feature = "replay", derive(Deserialize))]
|
||||
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
|
||||
#[cfg_attr(feature = "serde", serde(rename_all = "kebab-case"))]
|
||||
pub enum PolygonMode {
|
||||
/// Polygons are filled
|
||||
@ -2082,8 +2071,7 @@ pub enum PolygonMode {
|
||||
/// https://gpuweb.github.io/gpuweb/#dictdef-gpuprimitivestate).
|
||||
#[repr(C)]
|
||||
#[derive(Clone, Copy, Debug, Default, PartialEq, Eq, Hash)]
|
||||
#[cfg_attr(feature = "trace", derive(Serialize))]
|
||||
#[cfg_attr(feature = "replay", derive(Deserialize))]
|
||||
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
|
||||
#[cfg_attr(feature = "serde", serde(rename_all = "camelCase"))]
|
||||
pub struct PrimitiveState {
|
||||
/// The primitive topology used to interpret vertices.
|
||||
@ -2123,8 +2111,7 @@ pub struct PrimitiveState {
|
||||
/// https://gpuweb.github.io/gpuweb/#dictdef-gpumultisamplestate).
|
||||
#[repr(C)]
|
||||
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)]
|
||||
#[cfg_attr(feature = "trace", derive(Serialize))]
|
||||
#[cfg_attr(feature = "replay", derive(Deserialize))]
|
||||
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
|
||||
#[cfg_attr(feature = "serde", serde(rename_all = "camelCase"))]
|
||||
pub struct MultisampleState {
|
||||
/// The number of samples calculated per pixel (for MSAA). For non-multisampled textures,
|
||||
@ -2223,7 +2210,7 @@ pub struct TextureFormatFeatures {
|
||||
/// ASTC block dimensions
|
||||
#[repr(C)]
|
||||
#[derive(Copy, Clone, Debug, Hash, Eq, PartialEq)]
|
||||
#[cfg_attr(feature = "serde", derive(Deserialize, Serialize))]
|
||||
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
|
||||
pub enum AstcBlock {
|
||||
/// 4x4 block compressed texture. 16 bytes per block (8 bit/px).
|
||||
B4x4,
|
||||
@ -2258,7 +2245,7 @@ pub enum AstcBlock {
|
||||
/// ASTC RGBA channel
|
||||
#[repr(C)]
|
||||
#[derive(Copy, Clone, Debug, Hash, Eq, PartialEq)]
|
||||
#[cfg_attr(feature = "serde", derive(Deserialize, Serialize))]
|
||||
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
|
||||
pub enum AstcChannel {
|
||||
/// 8 bit integer RGBA, [0, 255] converted to/from linear-color float [0, 1] in shader.
|
||||
///
|
||||
@ -4366,8 +4353,7 @@ impl MaintainResult {
|
||||
/// https://gpuweb.github.io/gpuweb/#dictdef-gpudepthstencilstate).
|
||||
#[repr(C)]
|
||||
#[derive(Clone, Debug, Default, PartialEq, Eq, Hash)]
|
||||
#[cfg_attr(feature = "trace", derive(Serialize))]
|
||||
#[cfg_attr(feature = "replay", derive(Deserialize))]
|
||||
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
|
||||
pub struct StencilState {
|
||||
/// Front face mode.
|
||||
pub front: StencilFaceState,
|
||||
@ -4414,8 +4400,7 @@ impl StencilState {
|
||||
/// https://gpuweb.github.io/gpuweb/#dictdef-gpudepthstencilstate).
|
||||
#[repr(C)]
|
||||
#[derive(Clone, Copy, Debug, Default)]
|
||||
#[cfg_attr(feature = "trace", derive(Serialize))]
|
||||
#[cfg_attr(feature = "replay", derive(Deserialize))]
|
||||
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
|
||||
pub struct DepthBiasState {
|
||||
/// Constant depth biasing factor, in basic units of the depth format.
|
||||
pub constant: i32,
|
||||
@ -4456,8 +4441,7 @@ impl Eq for DepthBiasState {}
|
||||
/// https://gpuweb.github.io/gpuweb/#dictdef-gpudepthstencilstate).
|
||||
#[repr(C)]
|
||||
#[derive(Clone, Debug, Hash, PartialEq, Eq)]
|
||||
#[cfg_attr(feature = "trace", derive(Serialize))]
|
||||
#[cfg_attr(feature = "replay", derive(Deserialize))]
|
||||
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
|
||||
pub struct DepthStencilState {
|
||||
/// Format of the depth/stencil buffer, must be special depth format. Must match the format
|
||||
/// of the depth/stencil attachment in [`CommandEncoder::begin_render_pass`][CEbrp].
|
||||
@ -4469,10 +4453,10 @@ pub struct DepthStencilState {
|
||||
/// Comparison function used to compare depth values in the depth test.
|
||||
pub depth_compare: CompareFunction,
|
||||
/// Stencil state.
|
||||
#[cfg_attr(any(feature = "trace", feature = "replay"), serde(default))]
|
||||
#[cfg_attr(feature = "serde", serde(default))]
|
||||
pub stencil: StencilState,
|
||||
/// Depth bias state.
|
||||
#[cfg_attr(any(feature = "trace", feature = "replay"), serde(default))]
|
||||
#[cfg_attr(feature = "serde", serde(default))]
|
||||
pub bias: DepthBiasState,
|
||||
}
|
||||
|
||||
@ -4504,7 +4488,7 @@ impl DepthStencilState {
|
||||
/// https://gpuweb.github.io/gpuweb/#enumdef-gpuindexformat).
|
||||
#[repr(C)]
|
||||
#[derive(Copy, Clone, Debug, Default, Hash, Eq, PartialEq)]
|
||||
#[cfg_attr(feature = "serde", derive(Deserialize, Serialize))]
|
||||
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
|
||||
#[cfg_attr(feature = "serde", serde(rename_all = "kebab-case"))]
|
||||
pub enum IndexFormat {
|
||||
/// Indices are 16 bit unsigned integers.
|
||||
@ -4520,8 +4504,7 @@ pub enum IndexFormat {
|
||||
/// https://gpuweb.github.io/gpuweb/#enumdef-gpustenciloperation).
|
||||
#[repr(C)]
|
||||
#[derive(Copy, Clone, Debug, Default, Hash, Eq, PartialEq)]
|
||||
#[cfg_attr(feature = "trace", derive(Serialize))]
|
||||
#[cfg_attr(feature = "replay", derive(Deserialize))]
|
||||
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
|
||||
#[cfg_attr(feature = "serde", serde(rename_all = "kebab-case"))]
|
||||
pub enum StencilOperation {
|
||||
/// Keep stencil value unchanged.
|
||||
@ -4554,8 +4537,7 @@ pub enum StencilOperation {
|
||||
/// https://gpuweb.github.io/gpuweb/#dictdef-gpustencilfacestate).
|
||||
#[repr(C)]
|
||||
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)]
|
||||
#[cfg_attr(feature = "trace", derive(Serialize))]
|
||||
#[cfg_attr(feature = "replay", derive(Deserialize))]
|
||||
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
|
||||
#[cfg_attr(feature = "serde", serde(rename_all = "camelCase"))]
|
||||
pub struct StencilFaceState {
|
||||
/// Comparison function that determines if the fail_op or pass_op is used on the stencil buffer.
|
||||
@ -4605,8 +4587,7 @@ impl Default for StencilFaceState {
|
||||
/// https://gpuweb.github.io/gpuweb/#enumdef-gpucomparefunction).
|
||||
#[repr(C)]
|
||||
#[derive(Copy, Clone, Debug, Hash, Eq, PartialEq)]
|
||||
#[cfg_attr(feature = "trace", derive(Serialize))]
|
||||
#[cfg_attr(feature = "replay", derive(Deserialize))]
|
||||
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
|
||||
#[cfg_attr(feature = "serde", serde(rename_all = "kebab-case"))]
|
||||
pub enum CompareFunction {
|
||||
/// Function never passes
|
||||
@ -4700,8 +4681,7 @@ impl CompareFunction {
|
||||
/// [`Instance`]: VertexStepMode::Instance
|
||||
#[repr(C)]
|
||||
#[derive(Copy, Clone, Debug, Default, Hash, Eq, PartialEq)]
|
||||
#[cfg_attr(feature = "trace", derive(Serialize))]
|
||||
#[cfg_attr(feature = "replay", derive(Deserialize))]
|
||||
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
|
||||
#[cfg_attr(feature = "serde", serde(rename_all = "kebab-case"))]
|
||||
pub enum VertexStepMode {
|
||||
/// Vertex data is advanced every vertex.
|
||||
@ -4722,8 +4702,7 @@ pub enum VertexStepMode {
|
||||
/// [`vertex_attr_array`]: ../wgpu/macro.vertex_attr_array.html
|
||||
#[repr(C)]
|
||||
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)]
|
||||
#[cfg_attr(feature = "trace", derive(Serialize))]
|
||||
#[cfg_attr(feature = "replay", derive(Deserialize))]
|
||||
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
|
||||
#[cfg_attr(feature = "serde", serde(rename_all = "camelCase"))]
|
||||
pub struct VertexAttribute {
|
||||
/// Format of the input
|
||||
@ -4740,8 +4719,7 @@ pub struct VertexAttribute {
|
||||
/// https://gpuweb.github.io/gpuweb/#enumdef-gpuvertexformat).
|
||||
#[repr(C)]
|
||||
#[derive(Copy, Clone, Debug, Hash, Eq, PartialEq)]
|
||||
#[cfg_attr(feature = "trace", derive(Serialize))]
|
||||
#[cfg_attr(feature = "replay", derive(Deserialize))]
|
||||
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
|
||||
#[cfg_attr(feature = "serde", serde(rename_all = "lowercase"))]
|
||||
pub enum VertexFormat {
|
||||
/// Two unsigned bytes (u8). `vec2<u32>` in shaders.
|
||||
@ -4900,8 +4878,7 @@ impl_bitflags!(BufferUsages);
|
||||
/// https://gpuweb.github.io/gpuweb/#dictdef-gpubufferdescriptor).
|
||||
#[repr(C)]
|
||||
#[derive(Clone, Debug, PartialEq, Eq, Hash)]
|
||||
#[cfg_attr(feature = "trace", derive(Serialize))]
|
||||
#[cfg_attr(feature = "replay", derive(Deserialize))]
|
||||
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
|
||||
pub struct BufferDescriptor<L> {
|
||||
/// Debug label of a buffer. This will show up in graphics debuggers for easy identification.
|
||||
pub label: L,
|
||||
@ -4935,8 +4912,7 @@ impl<L> BufferDescriptor<L> {
|
||||
/// Corresponds to [WebGPU `GPUCommandEncoderDescriptor`](
|
||||
/// https://gpuweb.github.io/gpuweb/#dictdef-gpucommandencoderdescriptor).
|
||||
#[repr(C)]
|
||||
#[cfg_attr(feature = "trace", derive(Serialize))]
|
||||
#[cfg_attr(feature = "replay", derive(Deserialize))]
|
||||
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
|
||||
#[derive(Clone, Debug, PartialEq, Eq, Hash)]
|
||||
pub struct CommandEncoderDescriptor<L> {
|
||||
/// Debug label for the command encoder. This will show up in graphics debuggers for easy identification.
|
||||
@ -4961,8 +4937,7 @@ impl<T> Default for CommandEncoderDescriptor<Option<T>> {
|
||||
/// Behavior of the presentation engine based on frame rate.
|
||||
#[repr(C)]
|
||||
#[derive(Copy, Clone, Debug, Default, PartialEq, Eq, Hash)]
|
||||
#[cfg_attr(feature = "trace", derive(Serialize))]
|
||||
#[cfg_attr(feature = "replay", derive(Deserialize))]
|
||||
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
|
||||
pub enum PresentMode {
|
||||
/// Chooses FifoRelaxed -> Fifo based on availability.
|
||||
///
|
||||
@ -5034,8 +5009,7 @@ pub enum PresentMode {
|
||||
/// compositing.
|
||||
#[repr(C)]
|
||||
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
|
||||
#[cfg_attr(feature = "trace", derive(Serialize))]
|
||||
#[cfg_attr(feature = "replay", derive(Deserialize))]
|
||||
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
|
||||
#[cfg_attr(feature = "serde", serde(rename_all = "lowercase"))]
|
||||
pub enum CompositeAlphaMode {
|
||||
/// Chooses either `Opaque` or `Inherit` automatically,depending on the
|
||||
@ -5134,8 +5108,7 @@ impl Default for SurfaceCapabilities {
|
||||
/// [`Surface`]: ../wgpu/struct.Surface.html
|
||||
#[repr(C)]
|
||||
#[derive(Clone, Debug, PartialEq, Eq, Hash)]
|
||||
#[cfg_attr(feature = "trace", derive(Serialize))]
|
||||
#[cfg_attr(feature = "replay", derive(Deserialize))]
|
||||
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
|
||||
pub struct SurfaceConfiguration<V> {
|
||||
/// The usage of the swap chain. The only supported usage is `RENDER_ATTACHMENT`.
|
||||
pub usage: TextureUsages,
|
||||
@ -5261,7 +5234,7 @@ impl PresentationTimestamp {
|
||||
/// This is not to be used as a generic color type, only for specific wgpu interfaces.
|
||||
#[repr(C)]
|
||||
#[derive(Clone, Copy, Debug, Default, PartialEq)]
|
||||
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
|
||||
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
|
||||
#[cfg_attr(feature = "serde", serde(rename_all = "camelCase"))]
|
||||
pub struct Color {
|
||||
/// Red component of the color
|
||||
@ -5320,8 +5293,7 @@ impl Color {
|
||||
/// https://gpuweb.github.io/gpuweb/#enumdef-gputexturedimension).
|
||||
#[repr(C)]
|
||||
#[derive(Copy, Clone, Debug, Hash, Eq, PartialEq)]
|
||||
#[cfg_attr(feature = "trace", derive(Serialize))]
|
||||
#[cfg_attr(feature = "replay", derive(Deserialize))]
|
||||
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
|
||||
pub enum TextureDimension {
|
||||
/// 1D texture
|
||||
#[cfg_attr(feature = "serde", serde(rename = "1d"))]
|
||||
@ -5340,8 +5312,7 @@ pub enum TextureDimension {
|
||||
/// https://gpuweb.github.io/gpuweb/#dictdef-gpuorigin2ddict).
|
||||
#[repr(C)]
|
||||
#[derive(Clone, Copy, PartialEq, Eq, Hash)]
|
||||
#[cfg_attr(feature = "trace", derive(Serialize))]
|
||||
#[cfg_attr(feature = "replay", derive(Deserialize))]
|
||||
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
|
||||
#[cfg_attr(feature = "serde", serde(rename_all = "camelCase"))]
|
||||
pub struct Origin2d {
|
||||
///
|
||||
@ -5376,8 +5347,7 @@ impl std::fmt::Debug for Origin2d {
|
||||
/// https://gpuweb.github.io/gpuweb/#dictdef-gpuorigin3ddict).
|
||||
#[repr(C)]
|
||||
#[derive(Clone, Copy, PartialEq, Eq, Hash)]
|
||||
#[cfg_attr(feature = "trace", derive(Serialize))]
|
||||
#[cfg_attr(feature = "replay", derive(Deserialize))]
|
||||
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
|
||||
#[cfg_attr(feature = "serde", serde(rename_all = "camelCase"))]
|
||||
pub struct Origin3d {
|
||||
/// X position of the origin
|
||||
@ -5419,8 +5389,7 @@ impl std::fmt::Debug for Origin3d {
|
||||
/// https://gpuweb.github.io/gpuweb/#dictdef-gpuextent3ddict).
|
||||
#[repr(C)]
|
||||
#[derive(Clone, Copy, PartialEq, Eq, Hash)]
|
||||
#[cfg_attr(feature = "trace", derive(Serialize))]
|
||||
#[cfg_attr(feature = "replay", derive(Deserialize))]
|
||||
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
|
||||
#[cfg_attr(feature = "serde", serde(rename_all = "camelCase"))]
|
||||
pub struct Extent3d {
|
||||
/// Width of the extent
|
||||
@ -5619,8 +5588,7 @@ fn test_max_mips() {
|
||||
/// https://gpuweb.github.io/gpuweb/#dictdef-gputexturedescriptor).
|
||||
#[repr(C)]
|
||||
#[derive(Clone, Debug, PartialEq, Eq, Hash)]
|
||||
#[cfg_attr(feature = "trace", derive(Serialize))]
|
||||
#[cfg_attr(feature = "replay", derive(Deserialize))]
|
||||
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
|
||||
pub struct TextureDescriptor<L, V> {
|
||||
/// Debug label of the texture. This will show up in graphics debuggers for easy identification.
|
||||
pub label: L,
|
||||
@ -5751,8 +5719,7 @@ impl<L, V> TextureDescriptor<L, V> {
|
||||
/// https://gpuweb.github.io/gpuweb/#enumdef-gputextureaspect).
|
||||
#[repr(C)]
|
||||
#[derive(Copy, Clone, Debug, Default, Hash, Eq, PartialEq)]
|
||||
#[cfg_attr(feature = "trace", derive(Serialize))]
|
||||
#[cfg_attr(feature = "replay", derive(Deserialize))]
|
||||
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
|
||||
#[cfg_attr(feature = "serde", serde(rename_all = "kebab-case"))]
|
||||
pub enum TextureAspect {
|
||||
/// Depth, Stencil, and Color.
|
||||
@ -5776,8 +5743,7 @@ pub enum TextureAspect {
|
||||
/// https://gpuweb.github.io/gpuweb/#enumdef-gpuaddressmode).
|
||||
#[repr(C)]
|
||||
#[derive(Copy, Clone, Debug, Default, Hash, Eq, PartialEq)]
|
||||
#[cfg_attr(feature = "trace", derive(Serialize))]
|
||||
#[cfg_attr(feature = "replay", derive(Deserialize))]
|
||||
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
|
||||
#[cfg_attr(feature = "serde", serde(rename_all = "kebab-case"))]
|
||||
pub enum AddressMode {
|
||||
/// Clamp the value to the edge of the texture
|
||||
@ -5810,8 +5776,7 @@ pub enum AddressMode {
|
||||
/// https://gpuweb.github.io/gpuweb/#enumdef-gpufiltermode).
|
||||
#[repr(C)]
|
||||
#[derive(Copy, Clone, Debug, Default, Hash, Eq, PartialEq)]
|
||||
#[cfg_attr(feature = "trace", derive(Serialize))]
|
||||
#[cfg_attr(feature = "replay", derive(Deserialize))]
|
||||
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
|
||||
#[cfg_attr(feature = "serde", serde(rename_all = "kebab-case"))]
|
||||
pub enum FilterMode {
|
||||
/// Nearest neighbor sampling.
|
||||
@ -5827,8 +5792,7 @@ pub enum FilterMode {
|
||||
|
||||
/// A range of push constant memory to pass to a shader stage.
|
||||
#[derive(Clone, Debug, PartialEq, Eq, Hash)]
|
||||
#[cfg_attr(feature = "trace", derive(Serialize))]
|
||||
#[cfg_attr(feature = "replay", derive(Deserialize))]
|
||||
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
|
||||
pub struct PushConstantRange {
|
||||
/// Stage push constant range is visible from. Each stage can only be served by at most one range.
|
||||
/// One range can serve multiple stages however.
|
||||
@ -5844,8 +5808,7 @@ pub struct PushConstantRange {
|
||||
/// https://gpuweb.github.io/gpuweb/#dictdef-gpucommandbufferdescriptor).
|
||||
#[repr(C)]
|
||||
#[derive(Clone, Debug, Default, PartialEq, Eq, Hash)]
|
||||
#[cfg_attr(feature = "trace", derive(Serialize))]
|
||||
#[cfg_attr(feature = "replay", derive(Deserialize))]
|
||||
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
|
||||
pub struct CommandBufferDescriptor<L> {
|
||||
/// Debug label of this command buffer.
|
||||
pub label: L,
|
||||
@ -5866,8 +5829,7 @@ impl<L> CommandBufferDescriptor<L> {
|
||||
/// https://gpuweb.github.io/gpuweb/#dictdef-gpurenderbundleencoderdescriptor).
|
||||
#[repr(C)]
|
||||
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)]
|
||||
#[cfg_attr(feature = "trace", derive(serde::Serialize))]
|
||||
#[cfg_attr(feature = "replay", derive(serde::Deserialize))]
|
||||
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
|
||||
pub struct RenderBundleDepthStencil {
|
||||
/// Format of the attachment.
|
||||
pub format: TextureFormat,
|
||||
@ -5894,8 +5856,7 @@ pub struct RenderBundleDepthStencil {
|
||||
/// https://gpuweb.github.io/gpuweb/#dictdef-gpurenderbundledescriptor).
|
||||
#[repr(C)]
|
||||
#[derive(Clone, Debug, PartialEq, Eq, Hash)]
|
||||
#[cfg_attr(feature = "trace", derive(Serialize))]
|
||||
#[cfg_attr(feature = "replay", derive(Deserialize))]
|
||||
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
|
||||
pub struct RenderBundleDescriptor<L> {
|
||||
/// Debug label of the render bundle encoder. This will show up in graphics debuggers for easy identification.
|
||||
pub label: L,
|
||||
@ -5931,8 +5892,7 @@ impl<T> Default for RenderBundleDescriptor<Option<T>> {
|
||||
/// https://gpuweb.github.io/gpuweb/#dictdef-gpuimagedatalayout).
|
||||
#[repr(C)]
|
||||
#[derive(Clone, Copy, Debug, Default)]
|
||||
#[cfg_attr(feature = "trace", derive(serde::Serialize))]
|
||||
#[cfg_attr(feature = "replay", derive(serde::Deserialize))]
|
||||
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
|
||||
pub struct ImageDataLayout {
|
||||
/// Offset into the buffer that is the start of the texture. Must be a multiple of texture block size.
|
||||
/// For non-compressed textures, this is 1.
|
||||
@ -5972,8 +5932,7 @@ pub struct ImageDataLayout {
|
||||
/// Corresponds to [WebGPU `GPUBufferBindingType`](
|
||||
/// https://gpuweb.github.io/gpuweb/#enumdef-gpubufferbindingtype).
|
||||
#[derive(Clone, Copy, Debug, Default, Eq, PartialEq, Hash)]
|
||||
#[cfg_attr(feature = "trace", derive(Serialize))]
|
||||
#[cfg_attr(feature = "replay", derive(Deserialize))]
|
||||
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
|
||||
pub enum BufferBindingType {
|
||||
/// A buffer for uniform values.
|
||||
///
|
||||
@ -6038,8 +5997,7 @@ pub enum BufferBindingType {
|
||||
/// Corresponds to [WebGPU `GPUTextureSampleType`](
|
||||
/// https://gpuweb.github.io/gpuweb/#enumdef-gputexturesampletype).
|
||||
#[derive(Clone, Copy, Debug, Eq, PartialEq, Hash)]
|
||||
#[cfg_attr(feature = "trace", derive(Serialize))]
|
||||
#[cfg_attr(feature = "replay", derive(Deserialize))]
|
||||
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
|
||||
pub enum TextureSampleType {
|
||||
/// Sampling returns floats.
|
||||
///
|
||||
@ -6121,8 +6079,7 @@ impl Default for TextureSampleType {
|
||||
/// Corresponds to [WebGPU `GPUStorageTextureAccess`](
|
||||
/// https://gpuweb.github.io/gpuweb/#enumdef-gpustoragetextureaccess).
|
||||
#[derive(Clone, Copy, Debug, Eq, PartialEq, Hash)]
|
||||
#[cfg_attr(feature = "trace", derive(Serialize))]
|
||||
#[cfg_attr(feature = "replay", derive(Deserialize))]
|
||||
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
|
||||
#[cfg_attr(feature = "serde", serde(rename_all = "kebab-case"))]
|
||||
pub enum StorageTextureAccess {
|
||||
/// The texture can only be written in the shader and it:
|
||||
@ -6184,8 +6141,7 @@ pub enum StorageTextureAccess {
|
||||
/// https://gpuweb.github.io/gpuweb/#enumdef-gpusamplerbindingtype).
|
||||
#[repr(C)]
|
||||
#[derive(Clone, Copy, Debug, Eq, PartialEq, Hash)]
|
||||
#[cfg_attr(feature = "trace", derive(Serialize))]
|
||||
#[cfg_attr(feature = "replay", derive(Deserialize))]
|
||||
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
|
||||
#[cfg_attr(feature = "serde", serde(rename_all = "kebab-case"))]
|
||||
pub enum SamplerBindingType {
|
||||
/// The sampling result is produced based on more than a single color sample from a texture,
|
||||
@ -6205,8 +6161,7 @@ pub enum SamplerBindingType {
|
||||
/// Corresponds to WebGPU's mutually exclusive fields within [`GPUBindGroupLayoutEntry`](
|
||||
/// https://gpuweb.github.io/gpuweb/#dictdef-gpubindgrouplayoutentry).
|
||||
#[derive(Clone, Copy, Debug, Eq, PartialEq, Hash)]
|
||||
#[cfg_attr(feature = "trace", derive(Serialize))]
|
||||
#[cfg_attr(feature = "replay", derive(Deserialize))]
|
||||
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
|
||||
pub enum BindingType {
|
||||
/// A buffer binding.
|
||||
///
|
||||
@ -6222,7 +6177,7 @@ pub enum BindingType {
|
||||
/// for each dynamic binding in increasing order of binding number.
|
||||
///
|
||||
/// [RPsbg]: ../wgpu/struct.RenderPass.html#method.set_bind_group
|
||||
#[cfg_attr(any(feature = "trace", feature = "replay"), serde(default))]
|
||||
#[cfg_attr(feature = "serde", serde(default))]
|
||||
has_dynamic_offset: bool,
|
||||
|
||||
/// The minimum size for a [`BufferBinding`] matching this entry, in bytes.
|
||||
@ -6250,7 +6205,7 @@ pub enum BindingType {
|
||||
/// [minimum buffer binding size]: https://www.w3.org/TR/webgpu/#minimum-buffer-binding-size
|
||||
/// [`create_render_pipeline`]: ../wgpu/struct.Device.html#method.create_render_pipeline
|
||||
/// [`create_compute_pipeline`]: ../wgpu/struct.Device.html#method.create_compute_pipeline
|
||||
#[cfg_attr(any(feature = "trace", feature = "replay"), serde(default))]
|
||||
#[cfg_attr(feature = "serde", serde(default))]
|
||||
min_binding_size: Option<BufferSize>,
|
||||
},
|
||||
/// A sampler that can be used to sample a texture.
|
||||
@ -6355,8 +6310,7 @@ impl BindingType {
|
||||
/// Corresponds to [WebGPU `GPUBindGroupLayoutEntry`](
|
||||
/// https://gpuweb.github.io/gpuweb/#dictdef-gpubindgrouplayoutentry).
|
||||
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)]
|
||||
#[cfg_attr(feature = "trace", derive(Serialize))]
|
||||
#[cfg_attr(feature = "replay", derive(Deserialize))]
|
||||
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
|
||||
pub struct BindGroupLayoutEntry {
|
||||
/// Binding index. Must match shader index and be unique inside a BindGroupLayout. A binding
|
||||
/// of index 1, would be described as `layout(set = 0, binding = 1) uniform` in shaders.
|
||||
@ -6370,7 +6324,7 @@ pub struct BindGroupLayoutEntry {
|
||||
/// If this value is Some and `ty` is `BindingType::Texture`, [`Features::TEXTURE_BINDING_ARRAY`] must be supported.
|
||||
///
|
||||
/// If this value is Some and `ty` is any other variant, bind group creation will fail.
|
||||
#[cfg_attr(any(feature = "trace", feature = "replay"), serde(default))]
|
||||
#[cfg_attr(feature = "serde", serde(default))]
|
||||
pub count: Option<NonZeroU32>,
|
||||
}
|
||||
|
||||
@ -6380,8 +6334,7 @@ pub struct BindGroupLayoutEntry {
|
||||
/// https://gpuweb.github.io/gpuweb/#dictdef-gpuimagecopybuffer).
|
||||
#[repr(C)]
|
||||
#[derive(Copy, Clone, Debug)]
|
||||
#[cfg_attr(feature = "trace", derive(serde::Serialize))]
|
||||
#[cfg_attr(feature = "replay", derive(serde::Deserialize))]
|
||||
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
|
||||
pub struct ImageCopyBuffer<B> {
|
||||
/// The buffer to be copied to/from.
|
||||
pub buffer: B,
|
||||
@ -6395,8 +6348,7 @@ pub struct ImageCopyBuffer<B> {
|
||||
/// https://gpuweb.github.io/gpuweb/#dictdef-gpuimagecopytexture).
|
||||
#[repr(C)]
|
||||
#[derive(Copy, Clone, Debug)]
|
||||
#[cfg_attr(feature = "trace", derive(serde::Serialize))]
|
||||
#[cfg_attr(feature = "replay", derive(serde::Deserialize))]
|
||||
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
|
||||
pub struct ImageCopyTexture<T> {
|
||||
/// The texture to be copied to/from.
|
||||
pub texture: T,
|
||||
@ -6405,10 +6357,10 @@ pub struct ImageCopyTexture<T> {
|
||||
/// The base texel of the texture in the selected `mip_level`. Together
|
||||
/// with the `copy_size` argument to copy functions, defines the
|
||||
/// sub-region of the texture to copy.
|
||||
#[cfg_attr(any(feature = "trace", feature = "replay"), serde(default))]
|
||||
#[cfg_attr(feature = "serde", serde(default))]
|
||||
pub origin: Origin3d,
|
||||
/// The copy aspect.
|
||||
#[cfg_attr(any(feature = "trace", feature = "replay"), serde(default))]
|
||||
#[cfg_attr(feature = "serde", serde(default))]
|
||||
pub aspect: TextureAspect,
|
||||
}
|
||||
|
||||
@ -6528,8 +6480,7 @@ unsafe impl Sync for ExternalImageSource {}
|
||||
/// Corresponds to [HTML Canvas `PredefinedColorSpace`](
|
||||
/// https://html.spec.whatwg.org/multipage/canvas.html#predefinedcolorspace).
|
||||
#[derive(Copy, Clone, Debug, PartialEq, Eq)]
|
||||
#[cfg_attr(feature = "trace", derive(serde::Serialize))]
|
||||
#[cfg_attr(feature = "replay", derive(serde::Deserialize))]
|
||||
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
|
||||
#[cfg_attr(feature = "serde", serde(rename_all = "kebab-case"))]
|
||||
pub enum PredefinedColorSpace {
|
||||
/// sRGB color space
|
||||
@ -6544,8 +6495,7 @@ pub enum PredefinedColorSpace {
|
||||
/// Corresponds to [WebGPU `GPUImageCopyTextureTagged`](
|
||||
/// https://gpuweb.github.io/gpuweb/#dictdef-gpuimagecopytexturetagged).
|
||||
#[derive(Copy, Clone, Debug)]
|
||||
#[cfg_attr(feature = "trace", derive(serde::Serialize))]
|
||||
#[cfg_attr(feature = "replay", derive(serde::Deserialize))]
|
||||
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
|
||||
pub struct ImageCopyTextureTagged<T> {
|
||||
/// The texture to be copied to/from.
|
||||
pub texture: T,
|
||||
@ -6576,8 +6526,7 @@ impl<T: Copy> ImageCopyTextureTagged<T> {
|
||||
/// Subresource range within an image
|
||||
#[repr(C)]
|
||||
#[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
|
||||
#[cfg_attr(feature = "trace", derive(serde::Serialize))]
|
||||
#[cfg_attr(feature = "replay", derive(serde::Deserialize))]
|
||||
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
|
||||
#[cfg_attr(feature = "serde", serde(rename_all = "camelCase"))]
|
||||
pub struct ImageSubresourceRange {
|
||||
/// Aspect of the texture. Color textures must be [`TextureAspect::All`][TAA].
|
||||
@ -6678,8 +6627,7 @@ impl ImageSubresourceRange {
|
||||
/// Color variation to use when sampler addressing mode is [`AddressMode::ClampToBorder`]
|
||||
#[repr(C)]
|
||||
#[derive(Copy, Clone, Debug, Eq, PartialEq, Hash)]
|
||||
#[cfg_attr(feature = "trace", derive(serde::Serialize))]
|
||||
#[cfg_attr(feature = "replay", derive(serde::Deserialize))]
|
||||
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
|
||||
pub enum SamplerBorderColor {
|
||||
/// [0, 0, 0, 0]
|
||||
TransparentBlack,
|
||||
@ -6701,8 +6649,7 @@ pub enum SamplerBorderColor {
|
||||
/// Corresponds to [WebGPU `GPUQuerySetDescriptor`](
|
||||
/// https://gpuweb.github.io/gpuweb/#dictdef-gpuquerysetdescriptor).
|
||||
#[derive(Clone, Debug)]
|
||||
#[cfg_attr(feature = "trace", derive(serde::Serialize))]
|
||||
#[cfg_attr(feature = "replay", derive(serde::Deserialize))]
|
||||
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
|
||||
pub struct QuerySetDescriptor<L> {
|
||||
/// Debug label for the query set.
|
||||
pub label: L,
|
||||
@ -6729,8 +6676,7 @@ impl<L> QuerySetDescriptor<L> {
|
||||
/// Corresponds to [WebGPU `GPUQueryType`](
|
||||
/// https://gpuweb.github.io/gpuweb/#enumdef-gpuquerytype).
|
||||
#[derive(Copy, Clone, Debug)]
|
||||
#[cfg_attr(feature = "trace", derive(serde::Serialize))]
|
||||
#[cfg_attr(feature = "replay", derive(serde::Deserialize))]
|
||||
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
|
||||
pub enum QueryType {
|
||||
/// Query returns a single 64-bit number, serving as an occlusion boolean.
|
||||
Occlusion,
|
||||
@ -6876,8 +6822,7 @@ impl DispatchIndirectArgs {
|
||||
|
||||
/// Describes how shader bound checks should be performed.
|
||||
#[derive(Clone, Debug)]
|
||||
#[cfg_attr(feature = "trace", derive(serde::Serialize))]
|
||||
#[cfg_attr(feature = "replay", derive(serde::Deserialize))]
|
||||
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
|
||||
pub struct ShaderBoundChecks {
|
||||
runtime_checks: bool,
|
||||
}
|
||||
|
@ -78,6 +78,9 @@ strict_asserts = ["wgc?/strict_asserts", "wgt/strict_asserts"]
|
||||
## Log all API entry points at info instead of trace level.
|
||||
api_log_info = ["wgc/api_log_info"]
|
||||
|
||||
## Enables serialization via `serde` on common wgpu types.
|
||||
serde = ["dep:serde", "wgc/serde"]
|
||||
|
||||
## Allow writing of trace capture files.
|
||||
## See [`Adapter::request_device`].
|
||||
trace = ["serde", "wgc/trace"]
|
||||
|
@ -37,6 +37,7 @@
|
||||
//! - **`strict_asserts`** --- Apply run-time checks, even in release builds. These are in addition
|
||||
//! to the validation carried out at public APIs in all builds.
|
||||
//! - **`api_log_info`** --- Log all API entry points at info instead of trace level.
|
||||
//! - **`serde`** --- Enables serialization via `serde` on common wgpu types.
|
||||
//! - **`trace`** --- Allow writing of trace capture files. See [`Adapter::request_device`].
|
||||
//! - **`replay`** --- Allow deserializing of trace capture files that were written with the `trace`
|
||||
//! feature. To replay a trace file use the [wgpu
|
||||
@ -1115,8 +1116,7 @@ static_assertions::assert_impl_all!(BufferBinding<'_>: Send, Sync);
|
||||
/// Corresponds to [WebGPU `GPULoadOp`](https://gpuweb.github.io/gpuweb/#enumdef-gpuloadop),
|
||||
/// plus the corresponding clearValue.
|
||||
#[derive(Copy, Clone, Debug, Hash, Eq, PartialEq)]
|
||||
#[cfg_attr(feature = "trace", derive(serde::Serialize))]
|
||||
#[cfg_attr(feature = "replay", derive(serde::Deserialize))]
|
||||
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
|
||||
pub enum LoadOp<V> {
|
||||
/// Loads the specified value for this attachment into the render pass.
|
||||
///
|
||||
@ -1143,8 +1143,7 @@ impl<V: Default> Default for LoadOp<V> {
|
||||
///
|
||||
/// Corresponds to [WebGPU `GPUStoreOp`](https://gpuweb.github.io/gpuweb/#enumdef-gpustoreop).
|
||||
#[derive(Copy, Clone, Debug, Hash, Eq, PartialEq, Default)]
|
||||
#[cfg_attr(feature = "trace", derive(serde::Serialize))]
|
||||
#[cfg_attr(feature = "replay", derive(serde::Deserialize))]
|
||||
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
|
||||
pub enum StoreOp {
|
||||
/// Stores the resulting value of the render pass for this attachment.
|
||||
#[default]
|
||||
@ -1166,8 +1165,7 @@ pub enum StoreOp {
|
||||
/// This type is unique to the Rust API of `wgpu`. In the WebGPU specification,
|
||||
/// separate `loadOp` and `storeOp` fields are used instead.
|
||||
#[derive(Copy, Clone, Debug, Hash, Eq, PartialEq)]
|
||||
#[cfg_attr(feature = "trace", derive(serde::Serialize))]
|
||||
#[cfg_attr(feature = "replay", derive(serde::Deserialize))]
|
||||
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
|
||||
pub struct Operations<V> {
|
||||
/// How data should be read through this attachment.
|
||||
pub load: LoadOp<V>,
|
||||
|
Loading…
Reference in New Issue
Block a user