wgpu_hal/
empty.rs

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