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