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    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    // render
390
391    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    // compute
486
487    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}