MCPcopy Create free account
hub / github.com/Rust-GPU/rust-gpu / create_pipeline

Function create_pipeline

examples/runners/wgpu/src/graphics.rs:333–405  ·  view source on GitHub ↗
(
    options: &Options,
    device: &wgpu::Device,
    pipeline_layout: &wgpu::PipelineLayout,
    surface_format: wgpu::TextureFormat,
    compiled_shader_modules: CompiledShaderModules,
)

Source from the content-addressed store, hash-verified

331}
332
333fn create_pipeline(
334 options: &Options,
335 device: &wgpu::Device,
336 pipeline_layout: &wgpu::PipelineLayout,
337 surface_format: wgpu::TextureFormat,
338 compiled_shader_modules: CompiledShaderModules,
339) -> wgpu::RenderPipeline {
340 // FIXME(eddyb) automate this decision by default.
341 let create_module = |module| {
342 if options.force_spirv_passthru {
343 unsafe { device.create_shader_module_spirv(&module) }
344 } else {
345 let wgpu::ShaderModuleDescriptorSpirV { label, source } = module;
346 device.create_shader_module(wgpu::ShaderModuleDescriptor {
347 label,
348 source: wgpu::ShaderSource::SpirV(source),
349 })
350 }
351 };
352
353 let vs_entry_point = shaders::main_vs;
354 let fs_entry_point = shaders::main_fs;
355
356 let vs_module_descr = compiled_shader_modules.spv_module_for_entry_point(vs_entry_point);
357 let fs_module_descr = compiled_shader_modules.spv_module_for_entry_point(fs_entry_point);
358
359 // HACK(eddyb) avoid calling `device.create_shader_module` twice unnecessarily.
360 let vs_fs_same_module = std::ptr::eq(&vs_module_descr.source[..], &fs_module_descr.source[..]);
361
362 let vs_module = &create_module(vs_module_descr);
363 let fs_module;
364 let fs_module = if vs_fs_same_module {
365 vs_module
366 } else {
367 fs_module = create_module(fs_module_descr);
368 &fs_module
369 };
370
371 device.create_render_pipeline(&wgpu::RenderPipelineDescriptor {
372 label: None,
373 layout: Some(pipeline_layout),
374 vertex: wgpu::VertexState {
375 module: vs_module,
376 entry_point: vs_entry_point,
377 buffers: &[],
378 },
379 primitive: wgpu::PrimitiveState {
380 topology: wgpu::PrimitiveTopology::TriangleList,
381 strip_index_format: None,
382 front_face: wgpu::FrontFace::Ccw,
383 cull_mode: None,
384 unclipped_depth: false,
385 polygon_mode: wgpu::PolygonMode::Fill,
386 conservative: false,
387 },
388 depth_stencil: None,
389 multisample: wgpu::MultisampleState {
390 count: 1,

Callers 1

runFunction · 0.85

Calls 1

Tested by

no test coverage detected