wgpu_hal/
empty.rs

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    // render
393
394    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    // compute
489
490    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}