From 3d1b05f1bd43e3f45955c7bd746cddbea81dbefd Mon Sep 17 00:00:00 2001 From: William Cahill Date: Mon, 13 Mar 2023 02:05:14 -0400 Subject: [PATCH 1/3] Added Globals struct to prepass shader --- crates/bevy_pbr/src/prepass/mod.rs | 40 ++++++++++++++----- .../src/prepass/prepass_bindings.wgsl | 5 ++- 2 files changed, 33 insertions(+), 12 deletions(-) diff --git a/crates/bevy_pbr/src/prepass/mod.rs b/crates/bevy_pbr/src/prepass/mod.rs index b890de737de49..1092b995004cb 100644 --- a/crates/bevy_pbr/src/prepass/mod.rs +++ b/crates/bevy_pbr/src/prepass/mod.rs @@ -38,7 +38,7 @@ use bevy_render::{ renderer::RenderDevice, texture::{FallbackImagesDepth, FallbackImagesMsaa, TextureCache}, view::{ExtractedView, Msaa, ViewUniform, ViewUniformOffset, ViewUniforms, VisibleEntities}, - Extract, ExtractSchedule, RenderApp, RenderSet, + Extract, ExtractSchedule, RenderApp, RenderSet, globals::{GlobalsBuffer, GlobalsUniform}, }; use bevy_utils::{tracing::error, HashMap}; @@ -167,7 +167,7 @@ impl FromWorld for PrepassPipeline { // View BindGroupLayoutEntry { binding: 0, - visibility: ShaderStages::VERTEX | ShaderStages::FRAGMENT, + visibility: ShaderStages::VERTEX_FRAGMENT, ty: BindingType::Buffer { ty: BufferBindingType::Uniform, has_dynamic_offset: true, @@ -175,6 +175,17 @@ impl FromWorld for PrepassPipeline { }, count: None, }, + // Globals + BindGroupLayoutEntry { + binding: 1, + visibility: ShaderStages::VERTEX_FRAGMENT, + ty: BindingType::Buffer { + ty: BufferBindingType::Uniform, + has_dynamic_offset: false, + min_binding_size: Some(GlobalsUniform::min_size()), + }, + count: None, + }, ], label: Some("prepass_view_layout"), }); @@ -573,19 +584,26 @@ pub fn queue_prepass_view_bind_group( render_device: Res, prepass_pipeline: Res>, view_uniforms: Res, + globals_buffer: Res, mut prepass_view_bind_group: ResMut, ) { - if let Some(view_binding) = view_uniforms.uniforms.binding() { - prepass_view_bind_group.bind_group = - Some(render_device.create_bind_group(&BindGroupDescriptor { - entries: &[BindGroupEntry { + let Some(view_binding) = view_uniforms.uniforms.binding() else { return }; + let Some(globals_binding) = globals_buffer.buffer.binding() else { return }; + prepass_view_bind_group.bind_group = + Some(render_device.create_bind_group(&BindGroupDescriptor { + entries: &[ + BindGroupEntry { binding: 0, resource: view_binding, - }], - label: Some("prepass_view_bind_group"), - layout: &prepass_pipeline.view_layout, - })); - } + }, + BindGroupEntry { + binding: 1, + resource: globals_binding + } + ], + label: Some("prepass_view_bind_group"), + layout: &prepass_pipeline.view_layout, + })); } #[allow(clippy::too_many_arguments)] diff --git a/crates/bevy_pbr/src/prepass/prepass_bindings.wgsl b/crates/bevy_pbr/src/prepass/prepass_bindings.wgsl index cd338af0ed7da..8afeb47674ccb 100644 --- a/crates/bevy_pbr/src/prepass/prepass_bindings.wgsl +++ b/crates/bevy_pbr/src/prepass/prepass_bindings.wgsl @@ -6,6 +6,9 @@ @group(0) @binding(0) var view: View; +@group(0) @binding(1) +var globals: Globals; + // Material bindings will be in @group(1) @group(2) @binding(0) @@ -15,4 +18,4 @@ var mesh: Mesh; @group(2) @binding(1) var joint_matrices: SkinnedMesh; #import bevy_pbr::skinning -#endif +#endif \ No newline at end of file From fe2b4d5ba6b79dd7137ff8ec237f84dbc8442ca2 Mon Sep 17 00:00:00 2001 From: William Cahill Date: Mon, 13 Mar 2023 09:53:13 -0400 Subject: [PATCH 2/3] Fixing formatting --- crates/bevy_pbr/src/prepass/mod.rs | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/crates/bevy_pbr/src/prepass/mod.rs b/crates/bevy_pbr/src/prepass/mod.rs index 1092b995004cb..2766f985d860d 100644 --- a/crates/bevy_pbr/src/prepass/mod.rs +++ b/crates/bevy_pbr/src/prepass/mod.rs @@ -17,6 +17,7 @@ use bevy_ecs::{ use bevy_reflect::TypeUuid; use bevy_render::{ camera::ExtractedCamera, + globals::{GlobalsBuffer, GlobalsUniform}, mesh::MeshVertexBufferLayout, prelude::{Camera, Mesh}, render_asset::RenderAssets, @@ -38,7 +39,7 @@ use bevy_render::{ renderer::RenderDevice, texture::{FallbackImagesDepth, FallbackImagesMsaa, TextureCache}, view::{ExtractedView, Msaa, ViewUniform, ViewUniformOffset, ViewUniforms, VisibleEntities}, - Extract, ExtractSchedule, RenderApp, RenderSet, globals::{GlobalsBuffer, GlobalsUniform}, + Extract, ExtractSchedule, RenderApp, RenderSet, }; use bevy_utils::{tracing::error, HashMap}; @@ -598,8 +599,8 @@ pub fn queue_prepass_view_bind_group( }, BindGroupEntry { binding: 1, - resource: globals_binding - } + resource: globals_binding, + }, ], label: Some("prepass_view_bind_group"), layout: &prepass_pipeline.view_layout, From b1fe6d0f128e59c5fdc09cdc66e5d8c975c58c3c Mon Sep 17 00:00:00 2001 From: William Cahill Date: Mon, 13 Mar 2023 09:56:44 -0400 Subject: [PATCH 3/3] Adding newline to prepass file --- crates/bevy_pbr/src/prepass/prepass_bindings.wgsl | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/crates/bevy_pbr/src/prepass/prepass_bindings.wgsl b/crates/bevy_pbr/src/prepass/prepass_bindings.wgsl index 8afeb47674ccb..528f2e596d139 100644 --- a/crates/bevy_pbr/src/prepass/prepass_bindings.wgsl +++ b/crates/bevy_pbr/src/prepass/prepass_bindings.wgsl @@ -18,4 +18,5 @@ var mesh: Mesh; @group(2) @binding(1) var joint_matrices: SkinnedMesh; #import bevy_pbr::skinning -#endif \ No newline at end of file +#endif +