Skip to content

Commit

Permalink
diagnostics: meaningful error when graph node has wrong number of inp…
Browse files Browse the repository at this point in the history
…uts (#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.
  • Loading branch information
dataphract committed Jun 6, 2022
1 parent c4080c6 commit b472912
Showing 1 changed file with 15 additions and 1 deletion.
16 changes: 15 additions & 1 deletion crates/bevy_render/src/renderer/graph_runner.rs
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,14 @@ pub enum RenderGraphRunnerError {
expected: 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 {
Expand Down Expand Up @@ -161,7 +169,13 @@ impl RenderGraphRunner {
.map(|(_, value)| value)
.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]> =
smallvec![None; node_state.output_slots.len()];
Expand Down

0 comments on commit b472912

Please sign in to comment.