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