diagnostics: meaningful error when graph node has wrong number of inputs (#4924)
# Objective Currently, providing the wrong number of inputs to a render graph node triggers this assertion: ``` thread 'main' panicked at 'assertion failed: `(left == right)` left: `1`, right: `2`', /[redacted]/bevy/crates/bevy_render/src/renderer/graph_runner.rs:164:13 note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace ``` This does not provide the user any context. ## Solution Add a new `RenderGraphRunnerError` variant to handle this case. The new message looks like this: ``` ERROR bevy_render::renderer: Error running render graph: ERROR bevy_render::renderer: > node (name: 'Some("outline_pass")') has 2 input slots, but was provided 1 values ``` --- ## Changelog ### Changed `RenderGraphRunnerError` now has a new variant, `MismatchedInputCount`. ## Migration Guide Exhaustive matches on `RenderGraphRunnerError` will need to add a branch to handle the new `MismatchedInputCount` variant.
This commit is contained in:
parent
c4080c6832
commit
b47291264b
@ -41,6 +41,14 @@ pub enum RenderGraphRunnerError {
|
|||||||
expected: SlotType,
|
expected: SlotType,
|
||||||
actual: SlotType,
|
actual: SlotType,
|
||||||
},
|
},
|
||||||
|
#[error(
|
||||||
|
"node (name: '{node_name:?}') has {slot_count} input slots, but was provided {value_count} values"
|
||||||
|
)]
|
||||||
|
MismatchedInputCount {
|
||||||
|
node_name: Option<Cow<'static, str>>,
|
||||||
|
slot_count: usize,
|
||||||
|
value_count: usize,
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
impl RenderGraphRunner {
|
impl RenderGraphRunner {
|
||||||
@ -161,7 +169,13 @@ impl RenderGraphRunner {
|
|||||||
.map(|(_, value)| value)
|
.map(|(_, value)| value)
|
||||||
.collect();
|
.collect();
|
||||||
|
|
||||||
assert_eq!(inputs.len(), node_state.input_slots.len());
|
if inputs.len() != node_state.input_slots.len() {
|
||||||
|
return Err(RenderGraphRunnerError::MismatchedInputCount {
|
||||||
|
node_name: node_state.name.clone(),
|
||||||
|
slot_count: node_state.input_slots.len(),
|
||||||
|
value_count: inputs.len(),
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
let mut outputs: SmallVec<[Option<SlotValue>; 4]> =
|
let mut outputs: SmallVec<[Option<SlotValue>; 4]> =
|
||||||
smallvec![None; node_state.output_slots.len()];
|
smallvec![None; node_state.output_slots.len()];
|
||||||
|
Loading…
Reference in New Issue
Block a user