1use wgpu::naga::Module;
4use wgpu::{ComputePipeline, ComputePipelineDescriptor, Device};
5
6pub fn load_shader(device: &Device, entry_point: &str, content: &str) -> ComputePipeline {
8 let shader = device.create_shader_module(wgpu::ShaderModuleDescriptor {
9 label: None,
10 source: wgpu::ShaderSource::Wgsl(std::borrow::Cow::Borrowed(content)),
11 });
12 device.create_compute_pipeline(&ComputePipelineDescriptor {
13 label: Some(entry_point),
14 layout: None,
15 module: &shader,
16 entry_point: Some(entry_point),
17 compilation_options: Default::default(),
18 cache: None,
19 })
20}
21
22pub fn load_module(device: &Device, entry_point: &str, module: Module) -> ComputePipeline {
24 let shader = device.create_shader_module(wgpu::ShaderModuleDescriptor {
25 label: None,
26 source: wgpu::ShaderSource::Naga(std::borrow::Cow::Owned(module)),
27 });
28 device.create_compute_pipeline(&ComputePipelineDescriptor {
29 label: Some(entry_point),
30 layout: None,
31 module: &shader,
32 entry_point: Some(entry_point),
33 compilation_options: Default::default(),
34 cache: None,
35 })
36}
37
38pub fn naga_module_to_wgsl(module: &Module) -> String {
40 use wgpu::naga;
41
42 let mut validator = naga::valid::Validator::new(naga::valid::ValidationFlags::all(), Default::default());
43 let info = validator
44 .validate(module)
45 .unwrap();
46
47 naga::back::wgsl::write_string(
48 module,
49 &info,
50 naga::back::wgsl::WriterFlags::EXPLICIT_TYPES,
51 ).unwrap()
52}