1#![allow(unused_variables)]
2
3use std::ops::Range;
4
5#[derive(Clone, Debug)]
6pub struct Api;
7pub struct Context;
8#[derive(Debug)]
9pub struct Encoder;
10#[derive(Debug)]
11pub struct Resource;
12
13type DeviceResult<T> = Result<T, crate::DeviceError>;
14
15impl crate::Api for Api {
16 type Instance = Context;
17 type Surface = Context;
18 type Adapter = Context;
19 type Device = Context;
20
21 type Queue = Context;
22 type CommandEncoder = Encoder;
23 type CommandBuffer = Resource;
24
25 type Buffer = Resource;
26 type Texture = Resource;
27 type SurfaceTexture = Resource;
28 type TextureView = Resource;
29 type Sampler = Resource;
30 type QuerySet = Resource;
31 type Fence = Resource;
32 type AccelerationStructure = Resource;
33
34 type BindGroupLayout = Resource;
35 type BindGroup = Resource;
36 type PipelineLayout = Resource;
37 type ShaderModule = Resource;
38 type RenderPipeline = Resource;
39 type ComputePipeline = Resource;
40}
41
42impl crate::Instance for Context {
43 type A = Api;
44
45 unsafe fn init(desc: &crate::InstanceDescriptor) -> Result<Self, crate::InstanceError> {
46 Ok(Context)
47 }
48 unsafe fn create_surface(
49 &self,
50 _display_handle: raw_window_handle::RawDisplayHandle,
51 _window_handle: raw_window_handle::RawWindowHandle,
52 ) -> Result<Context, crate::InstanceError> {
53 Ok(Context)
54 }
55 unsafe fn destroy_surface(&self, surface: Context) {}
56 unsafe fn enumerate_adapters(&self) -> Vec<crate::ExposedAdapter<Api>> {
57 Vec::new()
58 }
59}
60
61impl crate::Surface for Context {
62 type A = Api;
63
64 unsafe fn configure(
65 &self,
66 device: &Context,
67 config: &crate::SurfaceConfiguration,
68 ) -> Result<(), crate::SurfaceError> {
69 Ok(())
70 }
71
72 unsafe fn unconfigure(&self, device: &Context) {}
73
74 unsafe fn acquire_texture(
75 &self,
76 timeout: Option<std::time::Duration>,
77 fence: &Resource,
78 ) -> Result<Option<crate::AcquiredSurfaceTexture<Api>>, crate::SurfaceError> {
79 Ok(None)
80 }
81 unsafe fn discard_texture(&self, texture: Resource) {}
82}
83
84impl crate::Adapter for Context {
85 type A = Api;
86
87 unsafe fn open(
88 &self,
89 features: wgt::Features,
90 _limits: &wgt::Limits,
91 ) -> DeviceResult<crate::OpenDevice<Api>> {
92 Err(crate::DeviceError::Lost)
93 }
94 unsafe fn texture_format_capabilities(
95 &self,
96 format: wgt::TextureFormat,
97 ) -> crate::TextureFormatCapabilities {
98 crate::TextureFormatCapabilities::empty()
99 }
100
101 unsafe fn surface_capabilities(&self, surface: &Context) -> Option<crate::SurfaceCapabilities> {
102 None
103 }
104
105 unsafe fn get_presentation_timestamp(&self) -> wgt::PresentationTimestamp {
106 wgt::PresentationTimestamp::INVALID_TIMESTAMP
107 }
108}
109
110impl crate::Queue for Context {
111 type A = Api;
112
113 unsafe fn submit(
114 &self,
115 command_buffers: &[&Resource],
116 surface_textures: &[&Resource],
117 signal_fence: (&mut Resource, crate::FenceValue),
118 ) -> DeviceResult<()> {
119 Ok(())
120 }
121 unsafe fn present(
122 &self,
123 surface: &Context,
124 texture: Resource,
125 ) -> Result<(), crate::SurfaceError> {
126 Ok(())
127 }
128
129 unsafe fn get_timestamp_period(&self) -> f32 {
130 1.0
131 }
132}
133
134impl crate::Device for Context {
135 type A = Api;
136
137 unsafe fn exit(self, queue: Context) {}
138 unsafe fn create_buffer(&self, desc: &crate::BufferDescriptor) -> DeviceResult<Resource> {
139 Ok(Resource)
140 }
141 unsafe fn destroy_buffer(&self, buffer: Resource) {}
142 unsafe fn map_buffer(
143 &self,
144 buffer: &Resource,
145 range: crate::MemoryRange,
146 ) -> DeviceResult<crate::BufferMapping> {
147 Err(crate::DeviceError::Lost)
148 }
149 unsafe fn unmap_buffer(&self, buffer: &Resource) -> DeviceResult<()> {
150 Ok(())
151 }
152 unsafe fn flush_mapped_ranges<I>(&self, buffer: &Resource, ranges: I) {}
153 unsafe fn invalidate_mapped_ranges<I>(&self, buffer: &Resource, ranges: I) {}
154
155 unsafe fn create_texture(&self, desc: &crate::TextureDescriptor) -> DeviceResult<Resource> {
156 Ok(Resource)
157 }
158 unsafe fn destroy_texture(&self, texture: Resource) {}
159 unsafe fn create_texture_view(
160 &self,
161 texture: &Resource,
162 desc: &crate::TextureViewDescriptor,
163 ) -> DeviceResult<Resource> {
164 Ok(Resource)
165 }
166 unsafe fn destroy_texture_view(&self, view: Resource) {}
167 unsafe fn create_sampler(&self, desc: &crate::SamplerDescriptor) -> DeviceResult<Resource> {
168 Ok(Resource)
169 }
170 unsafe fn destroy_sampler(&self, sampler: Resource) {}
171
172 unsafe fn create_command_encoder(
173 &self,
174 desc: &crate::CommandEncoderDescriptor<Api>,
175 ) -> DeviceResult<Encoder> {
176 Ok(Encoder)
177 }
178 unsafe fn destroy_command_encoder(&self, encoder: Encoder) {}
179
180 unsafe fn create_bind_group_layout(
181 &self,
182 desc: &crate::BindGroupLayoutDescriptor,
183 ) -> DeviceResult<Resource> {
184 Ok(Resource)
185 }
186 unsafe fn destroy_bind_group_layout(&self, bg_layout: Resource) {}
187 unsafe fn create_pipeline_layout(
188 &self,
189 desc: &crate::PipelineLayoutDescriptor<Api>,
190 ) -> DeviceResult<Resource> {
191 Ok(Resource)
192 }
193 unsafe fn destroy_pipeline_layout(&self, pipeline_layout: Resource) {}
194 unsafe fn create_bind_group(
195 &self,
196 desc: &crate::BindGroupDescriptor<Api>,
197 ) -> DeviceResult<Resource> {
198 Ok(Resource)
199 }
200 unsafe fn destroy_bind_group(&self, group: Resource) {}
201
202 unsafe fn create_shader_module(
203 &self,
204 desc: &crate::ShaderModuleDescriptor,
205 shader: crate::ShaderInput,
206 ) -> Result<Resource, crate::ShaderError> {
207 Ok(Resource)
208 }
209 unsafe fn destroy_shader_module(&self, module: Resource) {}
210 unsafe fn create_render_pipeline(
211 &self,
212 desc: &crate::RenderPipelineDescriptor<Api>,
213 ) -> Result<Resource, crate::PipelineError> {
214 Ok(Resource)
215 }
216 unsafe fn destroy_render_pipeline(&self, pipeline: Resource) {}
217 unsafe fn create_compute_pipeline(
218 &self,
219 desc: &crate::ComputePipelineDescriptor<Api>,
220 ) -> Result<Resource, crate::PipelineError> {
221 Ok(Resource)
222 }
223 unsafe fn destroy_compute_pipeline(&self, pipeline: Resource) {}
224
225 unsafe fn create_query_set(
226 &self,
227 desc: &wgt::QuerySetDescriptor<crate::Label>,
228 ) -> DeviceResult<Resource> {
229 Ok(Resource)
230 }
231 unsafe fn destroy_query_set(&self, set: Resource) {}
232 unsafe fn create_fence(&self) -> DeviceResult<Resource> {
233 Ok(Resource)
234 }
235 unsafe fn destroy_fence(&self, fence: Resource) {}
236 unsafe fn get_fence_value(&self, fence: &Resource) -> DeviceResult<crate::FenceValue> {
237 Ok(0)
238 }
239 unsafe fn wait(
240 &self,
241 fence: &Resource,
242 value: crate::FenceValue,
243 timeout_ms: u32,
244 ) -> DeviceResult<bool> {
245 Ok(true)
246 }
247
248 unsafe fn start_capture(&self) -> bool {
249 false
250 }
251 unsafe fn stop_capture(&self) {}
252 unsafe fn create_acceleration_structure(
253 &self,
254 desc: &crate::AccelerationStructureDescriptor,
255 ) -> DeviceResult<Resource> {
256 Ok(Resource)
257 }
258 unsafe fn get_acceleration_structure_build_sizes<'a>(
259 &self,
260 _desc: &crate::GetAccelerationStructureBuildSizesDescriptor<'a, Api>,
261 ) -> crate::AccelerationStructureBuildSizes {
262 Default::default()
263 }
264 unsafe fn get_acceleration_structure_device_address(
265 &self,
266 _acceleration_structure: &Resource,
267 ) -> wgt::BufferAddress {
268 Default::default()
269 }
270 unsafe fn destroy_acceleration_structure(&self, _acceleration_structure: Resource) {}
271}
272
273impl crate::CommandEncoder for Encoder {
274 type A = Api;
275
276 unsafe fn begin_encoding(&mut self, label: crate::Label) -> DeviceResult<()> {
277 Ok(())
278 }
279 unsafe fn discard_encoding(&mut self) {}
280 unsafe fn end_encoding(&mut self) -> DeviceResult<Resource> {
281 Ok(Resource)
282 }
283 unsafe fn reset_all<I>(&mut self, command_buffers: I) {}
284
285 unsafe fn transition_buffers<'a, T>(&mut self, barriers: T)
286 where
287 T: Iterator<Item = crate::BufferBarrier<'a, Api>>,
288 {
289 }
290
291 unsafe fn transition_textures<'a, T>(&mut self, barriers: T)
292 where
293 T: Iterator<Item = crate::TextureBarrier<'a, Api>>,
294 {
295 }
296
297 unsafe fn clear_buffer(&mut self, buffer: &Resource, range: crate::MemoryRange) {}
298
299 unsafe fn copy_buffer_to_buffer<T>(&mut self, src: &Resource, dst: &Resource, regions: T) {}
300
301 #[cfg(webgl)]
302 unsafe fn copy_external_image_to_texture<T>(
303 &mut self,
304 src: &wgt::ImageCopyExternalImage,
305 dst: &Resource,
306 dst_premultiplication: bool,
307 regions: T,
308 ) where
309 T: Iterator<Item = crate::TextureCopy>,
310 {
311 }
312
313 unsafe fn copy_texture_to_texture<T>(
314 &mut self,
315 src: &Resource,
316 src_usage: crate::TextureUses,
317 dst: &Resource,
318 regions: T,
319 ) {
320 }
321
322 unsafe fn copy_buffer_to_texture<T>(&mut self, src: &Resource, dst: &Resource, regions: T) {}
323
324 unsafe fn copy_texture_to_buffer<T>(
325 &mut self,
326 src: &Resource,
327 src_usage: crate::TextureUses,
328 dst: &Resource,
329 regions: T,
330 ) {
331 }
332
333 unsafe fn begin_query(&mut self, set: &Resource, index: u32) {}
334 unsafe fn end_query(&mut self, set: &Resource, index: u32) {}
335 unsafe fn write_timestamp(&mut self, set: &Resource, index: u32) {}
336 unsafe fn reset_queries(&mut self, set: &Resource, range: Range<u32>) {}
337 unsafe fn copy_query_results(
338 &mut self,
339 set: &Resource,
340 range: Range<u32>,
341 buffer: &Resource,
342 offset: wgt::BufferAddress,
343 stride: wgt::BufferSize,
344 ) {
345 }
346
347 unsafe fn begin_render_pass(&mut self, desc: &crate::RenderPassDescriptor<Api>) {}
350 unsafe fn end_render_pass(&mut self) {}
351
352 unsafe fn set_bind_group(
353 &mut self,
354 layout: &Resource,
355 index: u32,
356 group: &Resource,
357 dynamic_offsets: &[wgt::DynamicOffset],
358 ) {
359 }
360 unsafe fn set_push_constants(
361 &mut self,
362 layout: &Resource,
363 stages: wgt::ShaderStages,
364 offset_bytes: u32,
365 data: &[u32],
366 ) {
367 }
368
369 unsafe fn insert_debug_marker(&mut self, label: &str) {}
370 unsafe fn begin_debug_marker(&mut self, group_label: &str) {}
371 unsafe fn end_debug_marker(&mut self) {}
372
373 unsafe fn set_render_pipeline(&mut self, pipeline: &Resource) {}
374
375 unsafe fn set_index_buffer<'a>(
376 &mut self,
377 binding: crate::BufferBinding<'a, Api>,
378 format: wgt::IndexFormat,
379 ) {
380 }
381 unsafe fn set_vertex_buffer<'a>(&mut self, index: u32, binding: crate::BufferBinding<'a, Api>) {
382 }
383 unsafe fn set_viewport(&mut self, rect: &crate::Rect<f32>, depth_range: Range<f32>) {}
384 unsafe fn set_scissor_rect(&mut self, rect: &crate::Rect<u32>) {}
385 unsafe fn set_stencil_reference(&mut self, value: u32) {}
386 unsafe fn set_blend_constants(&mut self, color: &[f32; 4]) {}
387
388 unsafe fn draw(
389 &mut self,
390 first_vertex: u32,
391 vertex_count: u32,
392 first_instance: u32,
393 instance_count: u32,
394 ) {
395 }
396 unsafe fn draw_indexed(
397 &mut self,
398 first_index: u32,
399 index_count: u32,
400 base_vertex: i32,
401 first_instance: u32,
402 instance_count: u32,
403 ) {
404 }
405 unsafe fn draw_indirect(
406 &mut self,
407 buffer: &Resource,
408 offset: wgt::BufferAddress,
409 draw_count: u32,
410 ) {
411 }
412 unsafe fn draw_indexed_indirect(
413 &mut self,
414 buffer: &Resource,
415 offset: wgt::BufferAddress,
416 draw_count: u32,
417 ) {
418 }
419 unsafe fn draw_indirect_count(
420 &mut self,
421 buffer: &Resource,
422 offset: wgt::BufferAddress,
423 count_buffer: &Resource,
424 count_offset: wgt::BufferAddress,
425 max_count: u32,
426 ) {
427 }
428 unsafe fn draw_indexed_indirect_count(
429 &mut self,
430 buffer: &Resource,
431 offset: wgt::BufferAddress,
432 count_buffer: &Resource,
433 count_offset: wgt::BufferAddress,
434 max_count: u32,
435 ) {
436 }
437
438 unsafe fn begin_compute_pass(&mut self, desc: &crate::ComputePassDescriptor<Api>) {}
441 unsafe fn end_compute_pass(&mut self) {}
442
443 unsafe fn set_compute_pipeline(&mut self, pipeline: &Resource) {}
444
445 unsafe fn dispatch(&mut self, count: [u32; 3]) {}
446 unsafe fn dispatch_indirect(&mut self, buffer: &Resource, offset: wgt::BufferAddress) {}
447
448 unsafe fn build_acceleration_structures<'a, T>(
449 &mut self,
450 _descriptor_count: u32,
451 descriptors: T,
452 ) where
453 Api: 'a,
454 T: IntoIterator<Item = crate::BuildAccelerationStructureDescriptor<'a, Api>>,
455 {
456 }
457
458 unsafe fn place_acceleration_structure_barrier(
459 &mut self,
460 _barriers: crate::AccelerationStructureBarrier,
461 ) {
462 }
463}