Flatten PrepassPipelineInternal into PrepassPipeline. (#19909)

# Objective

- PrepassPipelineInternal used to exist to optimize compile time and
binary size when PrepassPipeline was generic over the material.
- After #19667, PrepassPipeline is no longer generic!

## Solution

- Flatten all the fields of `PrepassPipelineInternal` into
`PrepassPipeline`.
This commit is contained in:
andriyDev 2025-07-01 12:27:42 -07:00 committed by GitHub
parent a949867a1c
commit 1a410efd24
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 12 additions and 28 deletions

View File

@ -351,12 +351,9 @@ pub fn prepare_material_meshlet_meshes_prepass(
shader_defs.push("MESHLET_MESH_MATERIAL_PASS".into());
let view_layout = if view_key.contains(MeshPipelineKey::MOTION_VECTOR_PREPASS) {
prepass_pipeline.internal.view_layout_motion_vectors.clone()
prepass_pipeline.view_layout_motion_vectors.clone()
} else {
prepass_pipeline
.internal
.view_layout_no_motion_vectors
.clone()
prepass_pipeline.view_layout_no_motion_vectors.clone()
};
let fragment_shader = if view_key.contains(MeshPipelineKey::DEFERRED_PREPASS) {
@ -381,7 +378,7 @@ pub fn prepare_material_meshlet_meshes_prepass(
label: material_pipeline_descriptor.label,
layout: vec![
view_layout,
prepass_pipeline.internal.empty_layout.clone(),
prepass_pipeline.empty_layout.clone(),
resource_manager.material_shade_bind_group_layout.clone(),
material
.properties

View File

@ -254,14 +254,6 @@ pub fn update_mesh_previous_global_transforms(
#[derive(Resource, Clone)]
pub struct PrepassPipeline {
pub internal: PrepassPipelineInternal,
pub material_pipeline: MaterialPipeline,
}
/// Internal fields of the `PrepassPipeline` that don't need the generic bound
/// This is done as an optimization to not recompile the same code multiple time
#[derive(Clone)]
pub struct PrepassPipelineInternal {
pub view_layout_motion_vectors: BindGroupLayout,
pub view_layout_no_motion_vectors: BindGroupLayout,
pub mesh_layouts: MeshLayouts,
@ -277,6 +269,7 @@ pub struct PrepassPipelineInternal {
/// Whether binding arrays (a.k.a. bindless textures) are usable on the
/// current render device.
pub binding_arrays_are_usable: bool,
pub material_pipeline: MaterialPipeline,
}
impl FromWorld for PrepassPipeline {
@ -339,7 +332,7 @@ impl FromWorld for PrepassPipeline {
let depth_clip_control_supported = render_device
.features()
.contains(WgpuFeatures::DEPTH_CLIP_CONTROL);
let internal = PrepassPipelineInternal {
PrepassPipeline {
view_layout_motion_vectors,
view_layout_no_motion_vectors,
mesh_layouts: mesh_pipeline.mesh_layouts.clone(),
@ -348,9 +341,6 @@ impl FromWorld for PrepassPipeline {
depth_clip_control_supported,
binding_arrays_are_usable: binding_arrays_are_usable(render_device, render_adapter),
empty_layout: render_device.create_bind_group_layout("prepass_empty_layout", &[]),
};
PrepassPipeline {
internal,
material_pipeline: world.resource::<MaterialPipeline>().clone(),
}
}
@ -373,12 +363,9 @@ impl SpecializedMeshPipeline for PrepassPipelineSpecializer {
if self.properties.bindless {
shader_defs.push("BINDLESS".into());
}
let mut descriptor = self.pipeline.internal.specialize(
key.mesh_key,
shader_defs,
layout,
&self.properties,
)?;
let mut descriptor =
self.pipeline
.specialize(key.mesh_key, shader_defs, layout, &self.properties)?;
// This is a bit risky because it's possible to change something that would
// break the prepass but be fine in the main pass.
@ -396,7 +383,7 @@ impl SpecializedMeshPipeline for PrepassPipelineSpecializer {
}
}
impl PrepassPipelineInternal {
impl PrepassPipeline {
fn specialize(
&self,
mesh_key: MeshPipelineKey,
@ -726,7 +713,7 @@ impl FromWorld for PrepassViewBindGroup {
let render_device = world.resource::<RenderDevice>();
let empty_bind_group = render_device.create_bind_group(
"prepass_view_empty_bind_group",
&pipeline.internal.empty_layout,
&pipeline.empty_layout,
&[],
);
PrepassViewBindGroup {
@ -753,7 +740,7 @@ pub fn prepare_prepass_view_bind_group(
) {
prepass_view_bind_group.no_motion_vectors = Some(render_device.create_bind_group(
"prepass_view_no_motion_vectors_bind_group",
&prepass_pipeline.internal.view_layout_no_motion_vectors,
&prepass_pipeline.view_layout_no_motion_vectors,
&BindGroupEntries::with_indices((
(0, view_binding.clone()),
(1, globals_binding.clone()),
@ -764,7 +751,7 @@ pub fn prepare_prepass_view_bind_group(
if let Some(previous_view_uniforms_binding) = previous_view_uniforms.uniforms.binding() {
prepass_view_bind_group.motion_vectors = Some(render_device.create_bind_group(
"prepass_view_motion_vectors_bind_group",
&prepass_pipeline.internal.view_layout_motion_vectors,
&prepass_pipeline.view_layout_motion_vectors,
&BindGroupEntries::with_indices((
(0, view_binding),
(1, globals_binding),