From de41bac69b9de383888c6f2920be4f246e44aeee Mon Sep 17 00:00:00 2001 From: Dzmitry Malyshau Date: Mon, 10 Aug 2020 16:18:48 -0400 Subject: [PATCH] [rs] Update wgpu for optional layouts --- wgpu/Cargo.toml | 4 ++-- wgpu/examples/README.md | 1 + wgpu/examples/boids/main.rs | 4 ++-- wgpu/examples/cube/main.rs | 2 +- wgpu/examples/hello-compute/main.rs | 2 +- wgpu/examples/hello-triangle/main.rs | 2 +- wgpu/examples/mipmap/main.rs | 4 ++-- wgpu/examples/msaa-line/main.rs | 2 +- wgpu/examples/shadow/main.rs | 4 ++-- wgpu/examples/skybox/main.rs | 2 +- wgpu/examples/texture-arrays/main.rs | 2 +- wgpu/examples/water/main.rs | 12 ++++++------ wgpu/src/backend/direct.rs | 12 ++++++++---- wgpu/src/backend/web.rs | 8 +++++--- 14 files changed, 34 insertions(+), 27 deletions(-) diff --git a/wgpu/Cargo.toml b/wgpu/Cargo.toml index eabaa25f10..c4775ee0fb 100644 --- a/wgpu/Cargo.toml +++ b/wgpu/Cargo.toml @@ -27,14 +27,14 @@ vulkan-portability = ["wgc/gfx-backend-vulkan"] package = "wgpu-core" version = "0.5" git = "https://github.com/gfx-rs/wgpu" -rev = "8057acf120f9944056a6b5de6cf326f18ae7671d" +rev = "04f5cfd1c8e66612ed44ab371dac3d956235ffa7" features = ["raw-window-handle"] [dependencies.wgt] package = "wgpu-types" version = "0.5" git = "https://github.com/gfx-rs/wgpu" -rev = "8057acf120f9944056a6b5de6cf326f18ae7671d" +rev = "04f5cfd1c8e66612ed44ab371dac3d956235ffa7" [dependencies] arrayvec = "0.5" diff --git a/wgpu/examples/README.md b/wgpu/examples/README.md index eefec40904..523a8dc7fc 100644 --- a/wgpu/examples/README.md +++ b/wgpu/examples/README.md @@ -15,6 +15,7 @@ All framework-based examples render to the window. | vertex attributes | :star: | :star: | :star: | :star: | :star: | | :star: | :star: | | instancing | :star: | | | | | | | | | lines and points | | | | :star: | | | | | +| implicit layout | | | | | | | | | | sampled color textures | :star: | :star: | :star: | | | :star: | :star: | :star: | | storage textures | :star: | | | | | | | | | binding array | | | | | | | :star: | | diff --git a/wgpu/examples/boids/main.rs b/wgpu/examples/boids/main.rs index 17833db42f..0ecbb076fc 100644 --- a/wgpu/examples/boids/main.rs +++ b/wgpu/examples/boids/main.rs @@ -106,7 +106,7 @@ impl framework::Example for Example { }); let render_pipeline = device.create_render_pipeline(&wgpu::RenderPipelineDescriptor { - layout: &render_pipeline_layout, + layout: Some(&render_pipeline_layout), vertex_stage: wgpu::ProgrammableStageDescriptor { module: &vs_module, entry_point: Borrowed("main"), @@ -151,7 +151,7 @@ impl framework::Example for Example { // create compute pipeline let compute_pipeline = device.create_compute_pipeline(&wgpu::ComputePipelineDescriptor { - layout: &compute_pipeline_layout, + layout: Some(&compute_pipeline_layout), compute_stage: wgpu::ProgrammableStageDescriptor { module: &boids_module, entry_point: Borrowed("main"), diff --git a/wgpu/examples/cube/main.rs b/wgpu/examples/cube/main.rs index 6c0cf5cb7e..ebe8dd6ca1 100644 --- a/wgpu/examples/cube/main.rs +++ b/wgpu/examples/cube/main.rs @@ -246,7 +246,7 @@ impl framework::Example for Example { let fs_module = device.create_shader_module(wgpu::include_spirv!("shader.frag.spv")); let pipeline = device.create_render_pipeline(&wgpu::RenderPipelineDescriptor { - layout: &pipeline_layout, + layout: Some(&pipeline_layout), vertex_stage: wgpu::ProgrammableStageDescriptor { module: &vs_module, entry_point: Borrowed("main"), diff --git a/wgpu/examples/hello-compute/main.rs b/wgpu/examples/hello-compute/main.rs index f0c8a5ef2a..2364ad3fe3 100644 --- a/wgpu/examples/hello-compute/main.rs +++ b/wgpu/examples/hello-compute/main.rs @@ -89,7 +89,7 @@ async fn execute_gpu(numbers: Vec) -> Vec { }); let compute_pipeline = device.create_compute_pipeline(&wgpu::ComputePipelineDescriptor { - layout: &pipeline_layout, + layout: Some(&pipeline_layout), compute_stage: wgpu::ProgrammableStageDescriptor { module: &cs_module, entry_point: Borrowed("main"), diff --git a/wgpu/examples/hello-triangle/main.rs b/wgpu/examples/hello-triangle/main.rs index 3083c84e81..e934534013 100644 --- a/wgpu/examples/hello-triangle/main.rs +++ b/wgpu/examples/hello-triangle/main.rs @@ -41,7 +41,7 @@ async fn run(event_loop: EventLoop<()>, window: Window, swapchain_format: wgpu:: }); let render_pipeline = device.create_render_pipeline(&wgpu::RenderPipelineDescriptor { - layout: &pipeline_layout, + layout: Some(&pipeline_layout), vertex_stage: wgpu::ProgrammableStageDescriptor { module: &vs_module, entry_point: Borrowed("main"), diff --git a/wgpu/examples/mipmap/main.rs b/wgpu/examples/mipmap/main.rs index a0172b72d1..439671ebcc 100644 --- a/wgpu/examples/mipmap/main.rs +++ b/wgpu/examples/mipmap/main.rs @@ -110,7 +110,7 @@ impl Example { let fs_module = device.create_shader_module(wgpu::include_spirv!("blit.frag.spv")); let pipeline = device.create_render_pipeline(&wgpu::RenderPipelineDescriptor { - layout: &pipeline_layout, + layout: Some(&pipeline_layout), vertex_stage: wgpu::ProgrammableStageDescriptor { module: &vs_module, entry_point: Borrowed("main"), @@ -343,7 +343,7 @@ impl framework::Example for Example { let fs_module = device.create_shader_module(wgpu::include_spirv!("draw.frag.spv")); let draw_pipeline = device.create_render_pipeline(&wgpu::RenderPipelineDescriptor { - layout: &pipeline_layout, + layout: Some(&pipeline_layout), vertex_stage: wgpu::ProgrammableStageDescriptor { module: &vs_module, entry_point: Borrowed("main"), diff --git a/wgpu/examples/msaa-line/main.rs b/wgpu/examples/msaa-line/main.rs index e69553fdff..047373f61f 100644 --- a/wgpu/examples/msaa-line/main.rs +++ b/wgpu/examples/msaa-line/main.rs @@ -51,7 +51,7 @@ impl Example { ) -> wgpu::RenderBundle { log::info!("sample_count: {}", sample_count); let pipeline = device.create_render_pipeline(&wgpu::RenderPipelineDescriptor { - layout: &pipeline_layout, + layout: Some(&pipeline_layout), vertex_stage: wgpu::ProgrammableStageDescriptor { module: vs_module, entry_point: Borrowed("main"), diff --git a/wgpu/examples/shadow/main.rs b/wgpu/examples/shadow/main.rs index d4779ac06a..e5eebd3cbb 100644 --- a/wgpu/examples/shadow/main.rs +++ b/wgpu/examples/shadow/main.rs @@ -481,7 +481,7 @@ impl framework::Example for Example { let fs_module = device.create_shader_module(wgpu::include_spirv!("bake.frag.spv")); let pipeline = device.create_render_pipeline(&wgpu::RenderPipelineDescriptor { - layout: &pipeline_layout, + layout: Some(&pipeline_layout), vertex_stage: wgpu::ProgrammableStageDescriptor { module: &vs_module, entry_point: Borrowed("main"), @@ -612,7 +612,7 @@ impl framework::Example for Example { let fs_module = device.create_shader_module(wgpu::include_spirv!("forward.frag.spv")); let pipeline = device.create_render_pipeline(&wgpu::RenderPipelineDescriptor { - layout: &pipeline_layout, + layout: Some(&pipeline_layout), vertex_stage: wgpu::ProgrammableStageDescriptor { module: &vs_module, entry_point: Borrowed("main"), diff --git a/wgpu/examples/skybox/main.rs b/wgpu/examples/skybox/main.rs index 84bc147411..d33751e3af 100644 --- a/wgpu/examples/skybox/main.rs +++ b/wgpu/examples/skybox/main.rs @@ -96,7 +96,7 @@ impl framework::Example for Skybox { // Create the render pipeline let pipeline = device.create_render_pipeline(&wgpu::RenderPipelineDescriptor { - layout: &pipeline_layout, + layout: Some(&pipeline_layout), vertex_stage: wgpu::ProgrammableStageDescriptor { module: &vs_module, entry_point: Borrowed("main"), diff --git a/wgpu/examples/texture-arrays/main.rs b/wgpu/examples/texture-arrays/main.rs index 98d35fefc9..350cde0b0a 100644 --- a/wgpu/examples/texture-arrays/main.rs +++ b/wgpu/examples/texture-arrays/main.rs @@ -260,7 +260,7 @@ impl framework::Example for Example { }; let pipeline = device.create_render_pipeline(&wgpu::RenderPipelineDescriptor { - layout: &pipeline_layout, + layout: Some(&pipeline_layout), vertex_stage: wgpu::ProgrammableStageDescriptor { module: &vs_module, entry_point: Borrowed("main"), diff --git a/wgpu/examples/water/main.rs b/wgpu/examples/water/main.rs index af57073f47..41219fcbb3 100644 --- a/wgpu/examples/water/main.rs +++ b/wgpu/examples/water/main.rs @@ -230,6 +230,8 @@ impl Example { ..Default::default() }); + let depth_view = draw_depth_buffer.create_default_view(); + let water_bind_group = device.create_bind_group(&wgpu::BindGroupDescriptor { layout: water_bind_group_layout, entries: Borrowed(&[ @@ -245,9 +247,7 @@ impl Example { }, wgpu::BindGroupEntry { binding: 2, - resource: wgpu::BindingResource::TextureView( - &draw_depth_buffer.create_default_view(), - ), + resource: wgpu::BindingResource::TextureView(&depth_view), }, wgpu::BindGroupEntry { binding: 3, @@ -259,7 +259,7 @@ impl Example { ( reflection_texture.create_default_view(), - draw_depth_buffer.create_default_view(), + depth_view, water_bind_group, ) } @@ -491,7 +491,7 @@ impl framework::Example for Example { // constraints and modifiers it will have. let water_pipeline = device.create_render_pipeline(&wgpu::RenderPipelineDescriptor { // The "layout" is what uniforms will be needed. - layout: &water_pipeline_layout, + layout: Some(&water_pipeline_layout), // Vertex & Fragment shaders vertex_stage: wgpu::ProgrammableStageDescriptor { module: &water_vs_module, @@ -566,7 +566,7 @@ impl framework::Example for Example { // Same idea as the water pipeline. let terrain_pipeline = device.create_render_pipeline(&wgpu::RenderPipelineDescriptor { - layout: &terrain_pipeline_layout, + layout: Some(&terrain_pipeline_layout), vertex_stage: wgpu::ProgrammableStageDescriptor { module: &terrain_vs_module, entry_point: Borrowed("main"), diff --git a/wgpu/src/backend/direct.rs b/wgpu/src/backend/direct.rs index fd6475f581..07f6d01880 100644 --- a/wgpu/src/backend/direct.rs +++ b/wgpu/src/backend/direct.rs @@ -732,7 +732,7 @@ impl crate::Context for Context { wgc::gfx_select!(*device => global.device_create_render_pipeline( *device, &pipe::RenderPipelineDescriptor { - layout: desc.layout.id, + layout: desc.layout.map(|l| l.id), vertex_stage, fragment_stage, rasterization_state: desc.rasterization_state.clone(), @@ -744,9 +744,11 @@ impl crate::Context for Context { sample_mask: desc.sample_mask, alpha_to_coverage_enabled: desc.alpha_to_coverage_enabled, }, - PhantomData + PhantomData, + None )) .unwrap_pretty() + .0 } fn device_create_compute_pipeline( @@ -760,15 +762,17 @@ impl crate::Context for Context { wgc::gfx_select!(*device => global.device_create_compute_pipeline( *device, &pipe::ComputePipelineDescriptor { - layout: desc.layout.id, + layout: desc.layout.map(|l| l.id), compute_stage: pipe::ProgrammableStageDescriptor { module: desc.compute_stage.module.id, entry_point: Borrowed(&desc.compute_stage.entry_point), }, }, - PhantomData + PhantomData, + None )) .unwrap_pretty() + .0 } fn device_create_buffer( diff --git a/wgpu/src/backend/web.rs b/wgpu/src/backend/web.rs index 2ccefd7ec3..02186b8fb8 100644 --- a/wgpu/src/backend/web.rs +++ b/wgpu/src/backend/web.rs @@ -1007,7 +1007,7 @@ impl crate::Context for Context { let mapped_vertex_stage = map_stage_descriptor(&desc.vertex_stage); let mut mapped_desc = web_sys::GpuRenderPipelineDescriptor::new( - &desc.layout.id.0, + &desc.layout.as_ref().unwrap().id.0, &mapped_color_states, mapped_primitive_topology, &mapped_vertex_stage, @@ -1041,8 +1041,10 @@ impl crate::Context for Context { desc: &ComputePipelineDescriptor, ) -> Self::ComputePipelineId { let mapped_compute_stage = map_stage_descriptor(&desc.compute_stage); - let mapped_desc = - web_sys::GpuComputePipelineDescriptor::new(&desc.layout.id.0, &mapped_compute_stage); + let mapped_desc = web_sys::GpuComputePipelineDescriptor::new( + &desc.layout.as_ref().unwrap().id.0, + &mapped_compute_stage, + ); // TODO: label Sendable(device.0.create_compute_pipeline(&mapped_desc)) }