wgpu_core/device/
trace.rs

1#[cfg(feature = "trace")]
2mod record;
3
4use core::{convert::Infallible, ops::Range};
5
6use alloc::{string::String, vec::Vec};
7use macro_rules_attribute::apply;
8
9use crate::{
10    command::{serde_object_reference_struct, BasePass, Command, ReferenceType, RenderCommand},
11    id::{markers, PointerId},
12    pipeline::GeneralRenderPipelineDescriptor,
13};
14
15#[cfg(feature = "trace")]
16pub use record::*;
17
18type FileName = String;
19
20pub const FILE_NAME: &str = "trace.ron";
21
22#[allow(clippy::large_enum_variant)]
23#[derive(Debug)]
24#[apply(serde_object_reference_struct)]
25pub enum Action<'a, R: ReferenceType> {
26    Init {
27        desc: crate::device::DeviceDescriptor<'a>,
28        backend: wgt::Backend,
29    },
30    ConfigureSurface(
31        R::Surface,
32        wgt::SurfaceConfiguration<Vec<wgt::TextureFormat>>,
33    ),
34    CreateBuffer(R::Buffer, crate::resource::BufferDescriptor<'a>),
35    FreeBuffer(R::Buffer),
36    DestroyBuffer(R::Buffer),
37    CreateTexture(R::Texture, crate::resource::TextureDescriptor<'a>),
38    FreeTexture(R::Texture),
39    DestroyTexture(R::Texture),
40    CreateTextureView {
41        id: R::TextureView,
42        parent: R::Texture,
43        desc: crate::resource::TextureViewDescriptor<'a>,
44    },
45    DestroyTextureView(R::TextureView),
46    CreateExternalTexture {
47        id: R::ExternalTexture,
48        desc: crate::resource::ExternalTextureDescriptor<'a>,
49        planes: alloc::boxed::Box<[R::TextureView]>,
50    },
51    FreeExternalTexture(R::ExternalTexture),
52    DestroyExternalTexture(R::ExternalTexture),
53    CreateSampler(
54        PointerId<markers::Sampler>,
55        crate::resource::SamplerDescriptor<'a>,
56    ),
57    DestroySampler(PointerId<markers::Sampler>),
58    GetSurfaceTexture {
59        id: R::Texture,
60        parent: R::Surface,
61    },
62    Present(R::Surface),
63    DiscardSurfaceTexture(R::Surface),
64    CreateBindGroupLayout(
65        PointerId<markers::BindGroupLayout>,
66        crate::binding_model::BindGroupLayoutDescriptor<'a>,
67    ),
68    DestroyBindGroupLayout(PointerId<markers::BindGroupLayout>),
69    CreatePipelineLayout(
70        PointerId<markers::PipelineLayout>,
71        crate::binding_model::ResolvedPipelineLayoutDescriptor<
72            'a,
73            PointerId<markers::BindGroupLayout>,
74        >,
75    ),
76    DestroyPipelineLayout(PointerId<markers::PipelineLayout>),
77    CreateBindGroup(PointerId<markers::BindGroup>, TraceBindGroupDescriptor<'a>),
78    DestroyBindGroup(PointerId<markers::BindGroup>),
79    CreateShaderModule {
80        id: PointerId<markers::ShaderModule>,
81        desc: crate::pipeline::ShaderModuleDescriptor<'a>,
82        data: FileName,
83    },
84    CreateShaderModulePassthrough {
85        id: PointerId<markers::ShaderModule>,
86        data: Vec<FileName>,
87
88        entry_point: String,
89        label: crate::Label<'a>,
90        num_workgroups: (u32, u32, u32),
91        runtime_checks: wgt::ShaderRuntimeChecks,
92    },
93    DestroyShaderModule(PointerId<markers::ShaderModule>),
94    CreateComputePipeline {
95        id: PointerId<markers::ComputePipeline>,
96        desc: TraceComputePipelineDescriptor<'a>,
97    },
98    DestroyComputePipeline(PointerId<markers::ComputePipeline>),
99    CreateGeneralRenderPipeline {
100        id: PointerId<markers::RenderPipeline>,
101        desc: TraceGeneralRenderPipelineDescriptor<'a>,
102    },
103    DestroyRenderPipeline(PointerId<markers::RenderPipeline>),
104    CreatePipelineCache {
105        id: PointerId<markers::PipelineCache>,
106        desc: crate::pipeline::PipelineCacheDescriptor<'a>,
107    },
108    DestroyPipelineCache(PointerId<markers::PipelineCache>),
109    CreateRenderBundle {
110        id: R::RenderBundle,
111        desc: crate::command::RenderBundleEncoderDescriptor<'a>,
112        base: BasePass<RenderCommand<R>, Infallible>,
113    },
114    DestroyRenderBundle(PointerId<markers::RenderBundle>),
115    CreateQuerySet {
116        id: PointerId<markers::QuerySet>,
117        desc: crate::resource::QuerySetDescriptor<'a>,
118    },
119    DestroyQuerySet(PointerId<markers::QuerySet>),
120    WriteBuffer {
121        id: R::Buffer,
122        data: FileName,
123        range: Range<wgt::BufferAddress>,
124        queued: bool,
125    },
126    WriteTexture {
127        to: wgt::TexelCopyTextureInfo<R::Texture>,
128        data: FileName,
129        layout: wgt::TexelCopyBufferLayout,
130        size: wgt::Extent3d,
131    },
132    Submit(crate::SubmissionIndex, Vec<Command<R>>),
133    CreateBlas {
134        id: R::Blas,
135        desc: crate::resource::BlasDescriptor<'a>,
136        sizes: wgt::BlasGeometrySizeDescriptors,
137    },
138    DestroyBlas(R::Blas),
139    CreateTlas {
140        id: R::Tlas,
141        desc: crate::resource::TlasDescriptor<'a>,
142    },
143    DestroyTlas(R::Tlas),
144}
145
146/// cbindgen:ignore
147pub type TraceBindGroupDescriptor<'a> = crate::binding_model::BindGroupDescriptor<
148    'a,
149    PointerId<markers::BindGroupLayout>,
150    PointerId<markers::Buffer>,
151    PointerId<markers::Sampler>,
152    PointerId<markers::TextureView>,
153    PointerId<markers::Tlas>,
154    PointerId<markers::ExternalTexture>,
155>;
156
157/// Not a public API. For use by `player` only.
158///
159/// cbindgen:ignore
160#[doc(hidden)]
161pub type TraceGeneralRenderPipelineDescriptor<'a> = GeneralRenderPipelineDescriptor<
162    'a,
163    PointerId<markers::PipelineLayout>,
164    PointerId<markers::ShaderModule>,
165    PointerId<markers::PipelineCache>,
166>;
167
168/// Not a public API. For use by `player` only.
169///
170/// cbindgen:ignore
171#[doc(hidden)]
172pub type TraceComputePipelineDescriptor<'a> = crate::pipeline::ComputePipelineDescriptor<
173    'a,
174    PointerId<markers::PipelineLayout>,
175    PointerId<markers::ShaderModule>,
176    PointerId<markers::PipelineCache>,
177>;