Reverted combining of set_bind_group between different passes.

This commit is contained in:
StarArawn 2021-05-31 09:31:12 -04:00 committed by Carter Anderson
parent a0347195c0
commit 9588bb3243
4 changed files with 60 additions and 69 deletions

View file

@ -1,50 +0,0 @@
use bevy_render2::{pipeline::BindGroupDescriptorId, render_resource::BindGroupId};
use bevy_utils::tracing::trace;
use crate::resources::WgpuResourceRefs;
pub enum Pass<'a, 'b> {
Render(&'b mut wgpu::RenderPass<'a>),
Compute(&'b mut wgpu::ComputePass<'a>),
}
pub fn set_bind_group<'a, 'b>(
pass: Pass<'a, 'b>,
wgpu_resources: &WgpuResourceRefs<'a>,
index: u32,
bind_group_descriptor_id: BindGroupDescriptorId,
bind_group: BindGroupId,
dynamic_uniform_indices: Option<&[u32]>,
) {
if let Some(bind_group_info) = wgpu_resources
.bind_groups
.get(&bind_group_descriptor_id)
{
if let Some(wgpu_bind_group) = bind_group_info.bind_groups.get(&bind_group) {
const EMPTY: &[u32] = &[];
let dynamic_uniform_indices =
if let Some(dynamic_uniform_indices) = dynamic_uniform_indices {
dynamic_uniform_indices
} else {
EMPTY
};
wgpu_resources
.used_bind_group_sender
.send(bind_group)
.unwrap();
trace!(
"set bind group {:?} {:?}: {:?}",
bind_group_descriptor_id,
dynamic_uniform_indices,
bind_group
);
match pass {
Pass::Render(render_pass) =>
render_pass.set_bind_group(index, wgpu_bind_group, dynamic_uniform_indices),
Pass::Compute(compute_pass) =>
compute_pass.set_bind_group(index, wgpu_bind_group, dynamic_uniform_indices),
}
}
}
}

View file

@ -1,10 +1,11 @@
use crate::{WgpuRenderContext, bind_group::{self, Pass}, resources::WgpuResourceRefs}; use crate::{resources::WgpuResourceRefs, WgpuRenderContext};
use bevy_render2::{ use bevy_render2::{
pass::ComputePass, pass::ComputePass,
pipeline::{BindGroupDescriptorId, ComputePipelineDescriptor, PipelineId}, pipeline::{BindGroupDescriptorId, ComputePipelineDescriptor, PipelineId},
render_resource::BindGroupId, render_resource::BindGroupId,
renderer::RenderContext, renderer::RenderContext,
}; };
use bevy_utils::tracing::trace;
#[derive(Debug)] #[derive(Debug)]
pub struct WgpuComputePass<'a> { pub struct WgpuComputePass<'a> {
@ -26,14 +27,34 @@ impl<'a> ComputePass for WgpuComputePass<'a> {
bind_group: BindGroupId, bind_group: BindGroupId,
dynamic_uniform_indices: Option<&[u32]>, dynamic_uniform_indices: Option<&[u32]>,
) { ) {
bind_group::set_bind_group( if let Some(bind_group_info) = self
Pass::Compute(&mut self.compute_pass), .wgpu_resources
&self.wgpu_resources, .bind_groups
index, .get(&bind_group_descriptor_id)
{
if let Some(wgpu_bind_group) = bind_group_info.bind_groups.get(&bind_group) {
const EMPTY: &[u32] = &[];
let dynamic_uniform_indices =
if let Some(dynamic_uniform_indices) = dynamic_uniform_indices {
dynamic_uniform_indices
} else {
EMPTY
};
self.wgpu_resources
.used_bind_group_sender
.send(bind_group)
.unwrap();
trace!(
"set bind group {:?} {:?}: {:?}",
bind_group_descriptor_id, bind_group_descriptor_id,
bind_group,
dynamic_uniform_indices, dynamic_uniform_indices,
) bind_group
);
self.compute_pass
.set_bind_group(index, wgpu_bind_group, dynamic_uniform_indices);
}
}
} }
fn set_pipeline(&mut self, pipeline: PipelineId) { fn set_pipeline(&mut self, pipeline: PipelineId) {

View file

@ -8,7 +8,6 @@ mod render_resource_context;
mod renderer; mod renderer;
mod resources; mod resources;
mod type_converter; mod type_converter;
mod bind_group;
pub use compute_pass::*; pub use compute_pass::*;
pub use render_context::*; pub use render_context::*;

View file

@ -1,10 +1,11 @@
use crate::{WgpuRenderContext, bind_group::{self, Pass}, resources::WgpuResourceRefs, type_converter::WgpuInto}; use crate::{resources::WgpuResourceRefs, type_converter::WgpuInto, WgpuRenderContext};
use bevy_render2::{ use bevy_render2::{
pass::RenderPass, pass::RenderPass,
pipeline::{BindGroupDescriptorId, IndexFormat, RenderPipelineDescriptor, PipelineId}, pipeline::{BindGroupDescriptorId, IndexFormat, RenderPipelineDescriptor, PipelineId},
render_resource::{BindGroupId, BufferId}, render_resource::{BindGroupId, BufferId},
renderer::RenderContext, renderer::RenderContext,
}; };
use bevy_utils::tracing::trace;
use std::ops::Range; use std::ops::Range;
#[derive(Debug)] #[derive(Debug)]
@ -61,14 +62,34 @@ impl<'a> RenderPass for WgpuRenderPass<'a> {
bind_group: BindGroupId, bind_group: BindGroupId,
dynamic_uniform_indices: Option<&[u32]>, dynamic_uniform_indices: Option<&[u32]>,
) { ) {
bind_group::set_bind_group( if let Some(bind_group_info) = self
Pass::Render(&mut self.render_pass), .wgpu_resources
&self.wgpu_resources, .bind_groups
index, .get(&bind_group_descriptor_id)
{
if let Some(wgpu_bind_group) = bind_group_info.bind_groups.get(&bind_group) {
const EMPTY: &[u32] = &[];
let dynamic_uniform_indices =
if let Some(dynamic_uniform_indices) = dynamic_uniform_indices {
dynamic_uniform_indices
} else {
EMPTY
};
self.wgpu_resources
.used_bind_group_sender
.send(bind_group)
.unwrap();
trace!(
"set bind group {:?} {:?}: {:?}",
bind_group_descriptor_id, bind_group_descriptor_id,
bind_group,
dynamic_uniform_indices, dynamic_uniform_indices,
) bind_group
);
self.render_pass
.set_bind_group(index, wgpu_bind_group, dynamic_uniform_indices);
}
}
} }
fn set_pipeline(&mut self, pipeline: PipelineId) { fn set_pipeline(&mut self, pipeline: PipelineId) {