Add compute pipeline builder
This commit is contained in:
		
							parent
							
								
									83f3606000
								
							
						
					
					
						commit
						8c1383792b
					
				|  | @ -8,7 +8,7 @@ pub use self::{ | ||||||
|     bind_group::{BindGroupBuilder, BindGroupLayoutBuilder}, |     bind_group::{BindGroupBuilder, BindGroupLayoutBuilder}, | ||||||
|     buffer::{BufferExt, BulkBufferBuilder}, |     buffer::{BufferExt, BulkBufferBuilder}, | ||||||
|     context::{Context, ContextBuilder}, |     context::{Context, ContextBuilder}, | ||||||
|     pipeline::RenderPipelineBuilder, |     pipeline::{ComputePipelineBuilder, RenderPipelineBuilder}, | ||||||
|     texture::{Texture, TextureBuilder}, |     texture::{Texture, TextureBuilder}, | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -106,3 +106,54 @@ impl<'a> RenderPipelineBuilder<'a> { | ||||||
|             }) |             }) | ||||||
|     } |     } | ||||||
| } | } | ||||||
|  | 
 | ||||||
|  | pub struct ComputePipelineBuilder<'a> { | ||||||
|  |     label: &'a str, | ||||||
|  |     shader: &'a wgpu::ShaderModule, | ||||||
|  |     layout_descriptor: Option<wgpu::PipelineLayoutDescriptor<'a>>, | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | impl<'a> ComputePipelineBuilder<'a> { | ||||||
|  |     pub fn new(label: &'a str, shader: &'a wgpu::ShaderModule) -> Self { | ||||||
|  |         Self { | ||||||
|  |             label, | ||||||
|  |             shader, | ||||||
|  |             layout_descriptor: None, | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     pub fn with_layout( | ||||||
|  |         mut self, | ||||||
|  |         label: &'a str, | ||||||
|  |         bind_group_layouts: &'a [&wgpu::BindGroupLayout], | ||||||
|  |         push_constant_ranges: &'a [wgpu::PushConstantRange], | ||||||
|  |     ) -> Self { | ||||||
|  |         let layout_descriptor = wgpu::PipelineLayoutDescriptor { | ||||||
|  |             label: Some(label), | ||||||
|  |             bind_group_layouts, | ||||||
|  |             push_constant_ranges, | ||||||
|  |         }; | ||||||
|  | 
 | ||||||
|  |         self.layout_descriptor = Some(layout_descriptor); | ||||||
|  |         self | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     pub fn build(self, context: &Context) -> wgpu::ComputePipeline { | ||||||
|  |         let raw_layout; | ||||||
|  |         let layout = if let Some(descriptor) = self.layout_descriptor { | ||||||
|  |             raw_layout = context.device.create_pipeline_layout(&descriptor); | ||||||
|  |             Some(&raw_layout) | ||||||
|  |         } else { | ||||||
|  |             None | ||||||
|  |         }; | ||||||
|  | 
 | ||||||
|  |         context | ||||||
|  |             .device | ||||||
|  |             .create_compute_pipeline(&wgpu::ComputePipelineDescriptor { | ||||||
|  |                 label: Some(self.label), | ||||||
|  |                 layout, | ||||||
|  |                 module: self.shader, | ||||||
|  |                 entry_point: "compute", | ||||||
|  |             }) | ||||||
|  |     } | ||||||
|  | } | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue