wgpu_hal/
empty.rs

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    // render
348
349    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    // compute
439
440    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}