summaryrefslogtreecommitdiff
path: root/rust/crates/effects/src/pipeline.rs
diff options
context:
space:
mode:
Diffstat (limited to 'rust/crates/effects/src/pipeline.rs')
-rw-r--r--rust/crates/effects/src/pipeline.rs42
1 files changed, 33 insertions, 9 deletions
diff --git a/rust/crates/effects/src/pipeline.rs b/rust/crates/effects/src/pipeline.rs
index 58692bde..1ea49053 100644
--- a/rust/crates/effects/src/pipeline.rs
+++ b/rust/crates/effects/src/pipeline.rs
@@ -1,7 +1,7 @@
use std::collections::HashMap;
use bytemuck::{Pod, Zeroable};
-use gpu::{FULLSCREEN_SHADER_SOURCE, GPU_TEXTURE_FORMAT, GpuContext};
+use gpu::{FULLSCREEN_SHADER_SOURCE, GpuContext};
use thiserror::Error;
use wgpu::util::DeviceExt;
@@ -119,7 +119,7 @@ impl EffectPipeline {
module: &gaussian_blur_shader_module,
entry_point: Some("fragment_main"),
targets: &[Some(wgpu::ColorTargetState {
- format: GPU_TEXTURE_FORMAT,
+ format: context.texture_format(),
blend: None,
write_mask: wgpu::ColorWrites::ALL,
})],
@@ -150,6 +150,37 @@ impl EffectPipeline {
passes,
}: ApplyEffectsOptions<'_>,
) -> Result<wgpu::Texture, EffectsError> {
+ let mut encoder =
+ context
+ .device()
+ .create_command_encoder(&wgpu::CommandEncoderDescriptor {
+ label: Some("effects-command-encoder"),
+ });
+ let output = self.apply_with_encoder(
+ context,
+ &mut encoder,
+ ApplyEffectsOptions {
+ source,
+ width,
+ height,
+ passes,
+ },
+ )?;
+ context.queue().submit([encoder.finish()]);
+ Ok(output)
+ }
+
+ pub fn apply_with_encoder(
+ &self,
+ context: &GpuContext,
+ encoder: &mut wgpu::CommandEncoder,
+ ApplyEffectsOptions {
+ source,
+ width,
+ height,
+ passes,
+ }: ApplyEffectsOptions<'_>,
+ ) -> Result<wgpu::Texture, EffectsError> {
let mut current_texture: Option<wgpu::Texture> = None;
for pass in passes {
@@ -199,12 +230,6 @@ impl EffectPipeline {
shader: pass.shader.clone(),
}
})?;
- let mut encoder =
- context
- .device()
- .create_command_encoder(&wgpu::CommandEncoderDescriptor {
- label: Some("effects-command-encoder"),
- });
{
let mut render_pass = encoder.begin_render_pass(&wgpu::RenderPassDescriptor {
@@ -230,7 +255,6 @@ impl EffectPipeline {
render_pass.draw(0..6, 0..1);
}
- context.queue().submit([encoder.finish()]);
current_texture = Some(output_texture);
}