Skip to content

Commit 18712f3

Browse files
authored
Make render and compute pipeline descriptors defaultable. (#19903)
A few versions ago, wgpu made it possible to set shader entry point to `None`, which will select the correct entry point in file where only a single entrypoint is specified. This makes it possible to implement `Default` for pipeline descriptors. This PR does so and attempts to `..default()` everything possible.
1 parent 1b4cf02 commit 18712f3

File tree

52 files changed

+272
-602
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

52 files changed

+272
-602
lines changed

crates/bevy_anti_aliasing/src/contrast_adaptive_sharpening/mod.rs

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ use bevy_render::{
2020
view::{ExtractedView, ViewTarget},
2121
Render, RenderApp, RenderSystems,
2222
};
23+
use bevy_utils::default;
2324

2425
mod node;
2526

@@ -218,18 +219,14 @@ impl SpecializedRenderPipeline for CasPipeline {
218219
fragment: Some(FragmentState {
219220
shader: self.fragment_shader.clone(),
220221
shader_defs,
221-
entry_point: "fragment".into(),
222222
targets: vec![Some(ColorTargetState {
223223
format: key.texture_format,
224224
blend: None,
225225
write_mask: ColorWrites::ALL,
226226
})],
227+
..default()
227228
}),
228-
primitive: PrimitiveState::default(),
229-
depth_stencil: None,
230-
multisample: MultisampleState::default(),
231-
push_constant_ranges: Vec::new(),
232-
zero_initialize_workgroup_memory: false,
229+
..default()
233230
}
234231
}
235232
}

crates/bevy_anti_aliasing/src/fxaa/mod.rs

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -190,18 +190,14 @@ impl SpecializedRenderPipeline for FxaaPipeline {
190190
format!("EDGE_THRESH_{}", key.edge_threshold.get_str()).into(),
191191
format!("EDGE_THRESH_MIN_{}", key.edge_threshold_min.get_str()).into(),
192192
],
193-
entry_point: "fragment".into(),
194193
targets: vec![Some(ColorTargetState {
195194
format: key.texture_format,
196195
blend: None,
197196
write_mask: ColorWrites::ALL,
198197
})],
198+
..default()
199199
}),
200-
primitive: PrimitiveState::default(),
201-
depth_stencil: None,
202-
multisample: MultisampleState::default(),
203-
push_constant_ranges: Vec::new(),
204-
zero_initialize_workgroup_memory: false,
200+
..default()
205201
}
206202
}
207203
}

crates/bevy_anti_aliasing/src/smaa/mod.rs

Lines changed: 16 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -64,13 +64,13 @@ use bevy_render::{
6464
binding_types::{sampler, texture_2d, uniform_buffer},
6565
AddressMode, BindGroup, BindGroupEntries, BindGroupLayout, BindGroupLayoutEntries,
6666
CachedRenderPipelineId, ColorTargetState, ColorWrites, CompareFunction, DepthStencilState,
67-
DynamicUniformBuffer, FilterMode, FragmentState, LoadOp, MultisampleState, Operations,
68-
PipelineCache, PrimitiveState, RenderPassColorAttachment, RenderPassDepthStencilAttachment,
69-
RenderPassDescriptor, RenderPipeline, RenderPipelineDescriptor, SamplerBindingType,
70-
SamplerDescriptor, Shader, ShaderDefVal, ShaderStages, ShaderType,
71-
SpecializedRenderPipeline, SpecializedRenderPipelines, StencilFaceState, StencilOperation,
72-
StencilState, StoreOp, TextureDescriptor, TextureDimension, TextureFormat,
73-
TextureSampleType, TextureUsages, TextureView, VertexState,
67+
DynamicUniformBuffer, FilterMode, FragmentState, LoadOp, Operations, PipelineCache,
68+
RenderPassColorAttachment, RenderPassDepthStencilAttachment, RenderPassDescriptor,
69+
RenderPipeline, RenderPipelineDescriptor, SamplerBindingType, SamplerDescriptor, Shader,
70+
ShaderDefVal, ShaderStages, ShaderType, SpecializedRenderPipeline,
71+
SpecializedRenderPipelines, StencilFaceState, StencilOperation, StencilState, StoreOp,
72+
TextureDescriptor, TextureDimension, TextureFormat, TextureSampleType, TextureUsages,
73+
TextureView, VertexState,
7474
},
7575
renderer::{RenderContext, RenderDevice, RenderQueue},
7676
texture::{CachedTexture, GpuImage, TextureCache},
@@ -482,21 +482,19 @@ impl SpecializedRenderPipeline for SmaaEdgeDetectionPipeline {
482482
vertex: VertexState {
483483
shader: self.shader.clone(),
484484
shader_defs: shader_defs.clone(),
485-
entry_point: "edge_detection_vertex_main".into(),
485+
entry_point: Some("edge_detection_vertex_main".into()),
486486
buffers: vec![],
487487
},
488488
fragment: Some(FragmentState {
489489
shader: self.shader.clone(),
490490
shader_defs,
491-
entry_point: "luma_edge_detection_fragment_main".into(),
491+
entry_point: Some("luma_edge_detection_fragment_main".into()),
492492
targets: vec![Some(ColorTargetState {
493493
format: TextureFormat::Rg8Unorm,
494494
blend: None,
495495
write_mask: ColorWrites::ALL,
496496
})],
497497
}),
498-
push_constant_ranges: vec![],
499-
primitive: PrimitiveState::default(),
500498
depth_stencil: Some(DepthStencilState {
501499
format: TextureFormat::Stencil8,
502500
depth_write_enabled: false,
@@ -509,8 +507,7 @@ impl SpecializedRenderPipeline for SmaaEdgeDetectionPipeline {
509507
},
510508
bias: default(),
511509
}),
512-
multisample: MultisampleState::default(),
513-
zero_initialize_workgroup_memory: false,
510+
..default()
514511
}
515512
}
516513
}
@@ -542,21 +539,19 @@ impl SpecializedRenderPipeline for SmaaBlendingWeightCalculationPipeline {
542539
vertex: VertexState {
543540
shader: self.shader.clone(),
544541
shader_defs: shader_defs.clone(),
545-
entry_point: "blending_weight_calculation_vertex_main".into(),
542+
entry_point: Some("blending_weight_calculation_vertex_main".into()),
546543
buffers: vec![],
547544
},
548545
fragment: Some(FragmentState {
549546
shader: self.shader.clone(),
550547
shader_defs,
551-
entry_point: "blending_weight_calculation_fragment_main".into(),
548+
entry_point: Some("blending_weight_calculation_fragment_main".into()),
552549
targets: vec![Some(ColorTargetState {
553550
format: TextureFormat::Rgba8Unorm,
554551
blend: None,
555552
write_mask: ColorWrites::ALL,
556553
})],
557554
}),
558-
push_constant_ranges: vec![],
559-
primitive: PrimitiveState::default(),
560555
depth_stencil: Some(DepthStencilState {
561556
format: TextureFormat::Stencil8,
562557
depth_write_enabled: false,
@@ -569,8 +564,7 @@ impl SpecializedRenderPipeline for SmaaBlendingWeightCalculationPipeline {
569564
},
570565
bias: default(),
571566
}),
572-
multisample: MultisampleState::default(),
573-
zero_initialize_workgroup_memory: false,
567+
..default()
574568
}
575569
}
576570
}
@@ -590,24 +584,20 @@ impl SpecializedRenderPipeline for SmaaNeighborhoodBlendingPipeline {
590584
vertex: VertexState {
591585
shader: self.shader.clone(),
592586
shader_defs: shader_defs.clone(),
593-
entry_point: "neighborhood_blending_vertex_main".into(),
587+
entry_point: Some("neighborhood_blending_vertex_main".into()),
594588
buffers: vec![],
595589
},
596590
fragment: Some(FragmentState {
597591
shader: self.shader.clone(),
598592
shader_defs,
599-
entry_point: "neighborhood_blending_fragment_main".into(),
593+
entry_point: Some("neighborhood_blending_fragment_main".into()),
600594
targets: vec![Some(ColorTargetState {
601595
format: key.texture_format,
602596
blend: None,
603597
write_mask: ColorWrites::ALL,
604598
})],
605599
}),
606-
push_constant_ranges: vec![],
607-
primitive: PrimitiveState::default(),
608-
depth_stencil: None,
609-
multisample: MultisampleState::default(),
610-
zero_initialize_workgroup_memory: false,
600+
..default()
611601
}
612602
}
613603
}

crates/bevy_anti_aliasing/src/taa/mod.rs

Lines changed: 8 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -25,11 +25,11 @@ use bevy_render::{
2525
render_resource::{
2626
binding_types::{sampler, texture_2d, texture_depth_2d},
2727
BindGroupEntries, BindGroupLayout, BindGroupLayoutEntries, CachedRenderPipelineId,
28-
ColorTargetState, ColorWrites, FilterMode, FragmentState, MultisampleState, Operations,
29-
PipelineCache, PrimitiveState, RenderPassColorAttachment, RenderPassDescriptor,
30-
RenderPipelineDescriptor, Sampler, SamplerBindingType, SamplerDescriptor, Shader,
31-
ShaderStages, SpecializedRenderPipeline, SpecializedRenderPipelines, TextureDescriptor,
32-
TextureDimension, TextureFormat, TextureSampleType, TextureUsages,
28+
ColorTargetState, ColorWrites, FilterMode, FragmentState, Operations, PipelineCache,
29+
RenderPassColorAttachment, RenderPassDescriptor, RenderPipelineDescriptor, Sampler,
30+
SamplerBindingType, SamplerDescriptor, Shader, ShaderStages, SpecializedRenderPipeline,
31+
SpecializedRenderPipelines, TextureDescriptor, TextureDimension, TextureFormat,
32+
TextureSampleType, TextureUsages,
3333
},
3434
renderer::{RenderContext, RenderDevice},
3535
sync_component::SyncComponentPlugin,
@@ -38,6 +38,7 @@ use bevy_render::{
3838
view::{ExtractedView, Msaa, ViewTarget},
3939
ExtractSchedule, MainWorld, Render, RenderApp, RenderSystems,
4040
};
41+
use bevy_utils::default;
4142
use tracing::warn;
4243

4344
/// Plugin for temporal anti-aliasing.
@@ -320,7 +321,6 @@ impl SpecializedRenderPipeline for TaaPipeline {
320321
fragment: Some(FragmentState {
321322
shader: self.fragment_shader.clone(),
322323
shader_defs,
323-
entry_point: "taa".into(),
324324
targets: vec![
325325
Some(ColorTargetState {
326326
format,
@@ -333,12 +333,9 @@ impl SpecializedRenderPipeline for TaaPipeline {
333333
write_mask: ColorWrites::ALL,
334334
}),
335335
],
336+
..default()
336337
}),
337-
primitive: PrimitiveState::default(),
338-
depth_stencil: None,
339-
multisample: MultisampleState::default(),
340-
push_constant_ranges: Vec::new(),
341-
zero_initialize_workgroup_memory: false,
338+
..default()
342339
}
343340
}
344341
}

crates/bevy_core_pipeline/src/auto_exposure/pipeline.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ use bevy_render::{
1010
renderer::RenderDevice,
1111
view::ViewUniform,
1212
};
13+
use bevy_utils::default;
1314
use core::num::NonZero;
1415

1516
#[derive(Resource)]
@@ -82,12 +83,11 @@ impl SpecializedComputePipeline for AutoExposurePipeline {
8283
layout: vec![self.histogram_layout.clone()],
8384
shader: self.histogram_shader.clone(),
8485
shader_defs: vec![],
85-
entry_point: match pass {
86+
entry_point: Some(match pass {
8687
AutoExposurePass::Histogram => "compute_histogram".into(),
8788
AutoExposurePass::Average => "compute_average".into(),
88-
},
89-
push_constant_ranges: vec![],
90-
zero_initialize_workgroup_memory: false,
89+
}),
90+
..default()
9191
}
9292
}
9393
}

crates/bevy_core_pipeline/src/blit/mod.rs

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
use crate::FullscreenShader;
12
use bevy_app::{App, Plugin};
23
use bevy_asset::{embedded_asset, load_embedded_asset, Handle};
34
use bevy_ecs::prelude::*;
@@ -9,8 +10,7 @@ use bevy_render::{
910
renderer::RenderDevice,
1011
RenderApp,
1112
};
12-
13-
use crate::FullscreenShader;
13+
use bevy_utils::default;
1414

1515
/// Adds support for specialized "blit pipelines", which can be used to write one texture to another.
1616
pub struct BlitPlugin;
@@ -85,22 +85,18 @@ impl SpecializedRenderPipeline for BlitPipeline {
8585
vertex: self.fullscreen_shader.to_vertex_state(),
8686
fragment: Some(FragmentState {
8787
shader: self.fragment_shader.clone(),
88-
shader_defs: vec![],
89-
entry_point: "fs_main".into(),
9088
targets: vec![Some(ColorTargetState {
9189
format: key.texture_format,
9290
blend: key.blend_state,
9391
write_mask: ColorWrites::ALL,
9492
})],
93+
..default()
9594
}),
96-
primitive: PrimitiveState::default(),
97-
depth_stencil: None,
9895
multisample: MultisampleState {
9996
count: key.samples,
100-
..Default::default()
97+
..default()
10198
},
102-
push_constant_ranges: Vec::new(),
103-
zero_initialize_workgroup_memory: false,
99+
..default()
104100
}
105101
}
106102
}

crates/bevy_core_pipeline/src/bloom/downsampling_pipeline.rs

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ use bevy_render::{
1616
},
1717
renderer::RenderDevice,
1818
};
19+
use bevy_utils::default;
1920

2021
#[derive(Component)]
2122
pub struct BloomDownsamplingPipelineIds {
@@ -130,18 +131,14 @@ impl SpecializedRenderPipeline for BloomDownsamplingPipeline {
130131
fragment: Some(FragmentState {
131132
shader: self.fragment_shader.clone(),
132133
shader_defs,
133-
entry_point,
134+
entry_point: Some(entry_point),
134135
targets: vec![Some(ColorTargetState {
135136
format: BLOOM_TEXTURE_FORMAT,
136137
blend: None,
137138
write_mask: ColorWrites::ALL,
138139
})],
139140
}),
140-
primitive: PrimitiveState::default(),
141-
depth_stencil: None,
142-
multisample: MultisampleState::default(),
143-
push_constant_ranges: Vec::new(),
144-
zero_initialize_workgroup_memory: false,
141+
..default()
145142
}
146143
}
147144
}

crates/bevy_core_pipeline/src/bloom/upsampling_pipeline.rs

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ use bevy_render::{
1818
renderer::RenderDevice,
1919
view::ViewTarget,
2020
};
21+
use bevy_utils::default;
2122

2223
#[derive(Component)]
2324
pub struct UpsamplingPipelineIds {
@@ -115,8 +116,7 @@ impl SpecializedRenderPipeline for BloomUpsamplingPipeline {
115116
vertex: self.fullscreen_shader.to_vertex_state(),
116117
fragment: Some(FragmentState {
117118
shader: self.fragment_shader.clone(),
118-
shader_defs: vec![],
119-
entry_point: "upsample".into(),
119+
entry_point: Some("upsample".into()),
120120
targets: vec![Some(ColorTargetState {
121121
format: texture_format,
122122
blend: Some(BlendState {
@@ -129,12 +129,9 @@ impl SpecializedRenderPipeline for BloomUpsamplingPipeline {
129129
}),
130130
write_mask: ColorWrites::ALL,
131131
})],
132+
..default()
132133
}),
133-
primitive: PrimitiveState::default(),
134-
depth_stencil: None,
135-
multisample: MultisampleState::default(),
136-
push_constant_ranges: Vec::new(),
137-
zero_initialize_workgroup_memory: false,
134+
..default()
138135
}
139136
}
140137
}

crates/bevy_core_pipeline/src/deferred/copy_lighting_id.rs

Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -15,13 +15,13 @@ use bevy_render::{
1515
Render, RenderApp, RenderSystems,
1616
};
1717

18+
use super::DEFERRED_LIGHTING_PASS_ID_DEPTH_FORMAT;
1819
use bevy_ecs::query::QueryItem;
1920
use bevy_render::{
2021
render_graph::{NodeRunError, RenderGraphContext, ViewNode},
2122
renderer::RenderContext,
2223
};
23-
24-
use super::DEFERRED_LIGHTING_PASS_ID_DEPTH_FORMAT;
24+
use bevy_utils::default;
2525

2626
pub struct CopyDeferredLightingIdPlugin;
2727

@@ -142,21 +142,16 @@ impl FromWorld for CopyDeferredLightingIdPipeline {
142142
vertex: vertex_state,
143143
fragment: Some(FragmentState {
144144
shader,
145-
shader_defs: vec![],
146-
entry_point: "fragment".into(),
147-
targets: vec![],
145+
..default()
148146
}),
149-
primitive: PrimitiveState::default(),
150147
depth_stencil: Some(DepthStencilState {
151148
format: DEFERRED_LIGHTING_PASS_ID_DEPTH_FORMAT,
152149
depth_write_enabled: true,
153150
depth_compare: CompareFunction::Always,
154151
stencil: StencilState::default(),
155152
bias: DepthBiasState::default(),
156153
}),
157-
multisample: MultisampleState::default(),
158-
push_constant_ranges: vec![],
159-
zero_initialize_workgroup_memory: false,
154+
..default()
160155
});
161156

162157
Self {

0 commit comments

Comments
 (0)