summary refs log tree commit diff
path: root/src/main.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/main.rs')
-rw-r--r--src/main.rs51
1 files changed, 34 insertions, 17 deletions
diff --git a/src/main.rs b/src/main.rs
index 53f3a41..5775d70 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -1,6 +1,6 @@
 use std::path::PathBuf;
 
-use bpaf::{construct, positional, OptionParser, Parser};
+use bpaf::{OptionParser, Parser, construct, positional};
 use demosaic::Demosaic;
 use image::buffer::ConvertBuffer;
 
@@ -9,7 +9,7 @@ mod pipeline;
 
 #[derive(Clone, Debug)]
 struct Args {
-    paths: Vec<PathBuf>
+    paths: Vec<PathBuf>,
 }
 
 fn args() -> OptionParser<Args> {
@@ -26,19 +26,28 @@ fn main() {
 
     // Initialize GPU
     let instance = wgpu::Instance::new(&wgpu::InstanceDescriptor::default());
-    let adapter = pollster::block_on(instance.request_adapter(&wgpu::RequestAdapterOptions::default())).unwrap();
+    let adapter =
+        pollster::block_on(instance.request_adapter(&wgpu::RequestAdapterOptions::default()))
+            .unwrap();
 
     let downlevel_caps = adapter.get_downlevel_capabilities();
-    if !downlevel_caps.flags.contains(wgpu::DownlevelFlags::COMPUTE_SHADERS) {
+    if !downlevel_caps
+        .flags
+        .contains(wgpu::DownlevelFlags::COMPUTE_SHADERS)
+    {
         panic!("GPU does not support compute");
     }
 
-    let (gpu, queue) = pollster::block_on(adapter.request_device(&wgpu::DeviceDescriptor {
-        label: None,
-        required_features: wgpu::Features::TEXTURE_ADAPTER_SPECIFIC_FORMAT_FEATURES,
-        required_limits: wgpu::Limits::default(),
-        memory_hints: wgpu::MemoryHints::MemoryUsage,
-    }, None)).unwrap();
+    let (gpu, queue) = pollster::block_on(adapter.request_device(
+        &wgpu::DeviceDescriptor {
+            label: None,
+            required_features: wgpu::Features::TEXTURE_ADAPTER_SPECIFIC_FORMAT_FEATURES,
+            required_limits: wgpu::Limits::default(),
+            memory_hints: wgpu::MemoryHints::MemoryUsage,
+        },
+        None,
+    ))
+    .unwrap();
 
     // Process images
     for path in &args.paths {
@@ -46,7 +55,7 @@ fn main() {
         dbg!(&image.cfa);
 
         let pipeline = pipeline::Resources {
-            demosaic: Box::new(demosaic::Lmmse::new(&gpu, &queue))
+            demosaic: Box::new(demosaic::Lmmse::new(&gpu, &queue)),
         };
         let demosaiced = pipeline.demosaic.demoasic(&gpu, &queue, &image);
 
@@ -56,9 +65,8 @@ fn main() {
             usage: wgpu::BufferUsages::MAP_READ | wgpu::BufferUsages::COPY_DST,
             mapped_at_creation: false,
         });
-        let mut encoder = gpu.create_command_encoder(&wgpu::CommandEncoderDescriptor {
-            label: None,
-        });
+        let mut encoder =
+            gpu.create_command_encoder(&wgpu::CommandEncoderDescriptor { label: None });
         encoder.copy_texture_to_buffer(
             wgpu::TexelCopyTextureInfo {
                 texture: &demosaiced,
@@ -78,7 +86,7 @@ fn main() {
                 width: image.width as u32,
                 height: image.height as u32,
                 depth_or_array_layers: 1,
-            }
+            },
         );
         queue.submit([encoder.finish()]);
 
@@ -87,8 +95,17 @@ fn main() {
         gpu.poll(wgpu::Maintain::Wait);
         {
             let readback_data = readback_slice.get_mapped_range();
-            let result_image = image::ImageBuffer::<image::Rgba<f32>, _>::from_raw(image.width as u32, image.height as u32, bytemuck::cast_slice(&readback_data)).unwrap();
-            <_ as ConvertBuffer<image::ImageBuffer<image::Rgb<u16>, Vec<u16>>>>::convert(&result_image).save_with_format("out.png", image::ImageFormat::Png).unwrap();
+            let result_image = image::ImageBuffer::<image::Rgba<f32>, _>::from_raw(
+                image.width as u32,
+                image.height as u32,
+                bytemuck::cast_slice(&readback_data),
+            )
+            .unwrap();
+            <_ as ConvertBuffer<image::ImageBuffer<image::Rgb<u16>, Vec<u16>>>>::convert(
+                &result_image,
+            )
+            .save_with_format("out.png", image::ImageFormat::Png)
+            .unwrap();
         }
         readback_buf.unmap();
     }