From d17a3e36130aedb90062e7bb7593f40bcb23103f Mon Sep 17 00:00:00 2001 From: numzero Date: Mon, 30 Dec 2024 20:01:56 +0300 Subject: [PATCH] Move render pass creation into modules MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit That’s where the pipeline is created and, they need to match --- src/bin/minitracer/main.rs | 48 ++++++++--------------------------- src/bin/minitracer/present.rs | 27 +++++++++++++++++++- src/bin/minitracer/trace.rs | 21 +++++++++++++++ 3 files changed, 57 insertions(+), 39 deletions(-) diff --git a/src/bin/minitracer/main.rs b/src/bin/minitracer/main.rs index e5d8aab..4b5c568 100644 --- a/src/bin/minitracer/main.rs +++ b/src/bin/minitracer/main.rs @@ -126,20 +126,7 @@ fn main() { let hdr = hdr.create_view(&wgpu::TextureViewDescriptor::default()); let mut encoder = device.create_command_encoder(&wgpu::CommandEncoderDescriptor { label: None }); { - let mut render_pass = encoder.begin_render_pass(&wgpu::RenderPassDescriptor { - label: None, - color_attachments: &[Some(wgpu::RenderPassColorAttachment { - view: &hdr, - resolve_target: None, - ops: wgpu::Operations { - load: wgpu::LoadOp::Clear(wgpu::Color::TRANSPARENT), - store: wgpu::StoreOp::Store, - }, - })], - depth_stencil_attachment: None, - occlusion_query_set: None, - timestamp_writes: None, - }); + let mut render_pass = tracer.prepare(&mut encoder, &hdr); for _ in 0..RAYS_PER_PIXEL { frame += 1; let time = frame as f32 / (60. * RAYS_PER_PIXEL as f32); @@ -172,30 +159,15 @@ fn main() { ); } } - { - let mut render_pass = encoder.begin_render_pass(&wgpu::RenderPassDescriptor { - label: None, - color_attachments: &[Some(wgpu::RenderPassColorAttachment { - view: &view, - resolve_target: None, - ops: wgpu::Operations { - load: wgpu::LoadOp::Clear(wgpu::Color::TRANSPARENT), - store: wgpu::StoreOp::Store, - }, - })], - depth_stencil_attachment: None, - occlusion_query_set: None, - timestamp_writes: None, - }); - presenter.render( - &device, - &mut render_pass, - &hdr, - present::Params { - divisor: RAYS_PER_PIXEL as f32, - }, - ); - } + presenter.render( + &device, + &mut encoder, + &hdr, + &view, + present::Params { + divisor: RAYS_PER_PIXEL as f32, + }, + ); queue.submit(std::iter::once(encoder.finish())); output.present(); } diff --git a/src/bin/minitracer/present.rs b/src/bin/minitracer/present.rs index 2cf8d84..06512d5 100644 --- a/src/bin/minitracer/present.rs +++ b/src/bin/minitracer/present.rs @@ -86,7 +86,7 @@ impl Presenter { } } - pub fn render( + fn render_internal( &self, device: &wgpu::Device, pass: &mut wgpu::RenderPass, @@ -121,4 +121,29 @@ impl Presenter { pass.set_bind_group(0, &bindings, &[]); pass.draw(0..4, 0..1); } + + pub fn render( + &self, + device: &wgpu::Device, + encoder: &mut wgpu::CommandEncoder, + source: &wgpu::TextureView, + target: &wgpu::TextureView, + params: Params, + ) { + let mut render_pass = encoder.begin_render_pass(&wgpu::RenderPassDescriptor { + label: None, + color_attachments: &[Some(wgpu::RenderPassColorAttachment { + view: target, + resolve_target: None, + ops: wgpu::Operations { + load: wgpu::LoadOp::Clear(wgpu::Color::TRANSPARENT), + store: wgpu::StoreOp::Store, + }, + })], + depth_stencil_attachment: None, + occlusion_query_set: None, + timestamp_writes: None, + }); + self.render_internal(device, &mut render_pass, source, params); + } } diff --git a/src/bin/minitracer/trace.rs b/src/bin/minitracer/trace.rs index e95c7ed..e276e2e 100644 --- a/src/bin/minitracer/trace.rs +++ b/src/bin/minitracer/trace.rs @@ -233,6 +233,27 @@ impl Tracer { Self { view_buf, pipeline } } + pub fn prepare<'encoder>( + &self, + encoder: &'encoder mut wgpu::CommandEncoder, + target: &wgpu::TextureView, + ) -> wgpu::RenderPass<'encoder> { + encoder.begin_render_pass(&wgpu::RenderPassDescriptor { + label: None, + color_attachments: &[Some(wgpu::RenderPassColorAttachment { + view: &target, + resolve_target: None, + ops: wgpu::Operations { + load: wgpu::LoadOp::Clear(wgpu::Color::TRANSPARENT), + store: wgpu::StoreOp::Store, + }, + })], + depth_stencil_attachment: None, + occlusion_query_set: None, + timestamp_writes: None, + }) + } + pub fn render( &self, pass: &mut wgpu::RenderPass,