Skip to content

Commit 7ebd383

Browse files
committed
Fix
1 parent 8a3c399 commit 7ebd383

File tree

3 files changed

+18
-8
lines changed

3 files changed

+18
-8
lines changed

crates/bevy_core_pipeline/src/oit/mod.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -52,8 +52,8 @@ pub struct OrderIndependentTransparencySettings {
5252
impl Default for OrderIndependentTransparencySettings {
5353
fn default() -> Self {
5454
Self {
55-
sorted_fragment_max_count: 8,
56-
fragments_per_pixel_average: 4.0,
55+
sorted_fragment_max_count: 16,
56+
fragments_per_pixel_average: 8.0,
5757
alpha_threshold: 0.0,
5858
}
5959
}

crates/bevy_core_pipeline/src/oit/resolve/mod.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
use std::num::NonZero;
1+
use core::num::NonZero;
22

33
use super::OitBuffers;
44
use crate::{oit::OrderIndependentTransparencySettings, FullscreenShader};
@@ -221,7 +221,7 @@ fn specialize_oit_resolve_pipeline(
221221
shader: load_embedded_asset!(asset_server, "oit_resolve.wgsl"),
222222
shader_defs: vec![ShaderDefVal::UInt(
223223
"SORTED_FRAGMENT_MAX_COUNT".into(),
224-
key.sorted_fragment_max_count as u32,
224+
key.sorted_fragment_max_count,
225225
)],
226226
targets: vec![Some(ColorTargetState {
227227
format,

crates/bevy_core_pipeline/src/oit/resolve/oit_resolve.wgsl

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -71,8 +71,13 @@ fn resolve(header: u32, opaque_depth: f32) -> vec4<f32> {
7171
// There is still room in the sorted list.
7272
// Insert the fragment so that the list stay sorted.
7373
var i = sorted_frag_count;
74-
for(; (i > 0) && (depth_alpha.x < fragment_list[i - 1].depth); i -= 1) {
75-
fragment_list[i] = fragment_list[i - 1];
74+
for(; i > 0; i -= 1) {
75+
// short-circuit can't be used in for-loop, https://github.com/gfx-rs/wgpu/issues/4394
76+
if depth_alpha.x < fragment_list[i - 1].depth {
77+
fragment_list[i] = fragment_list[i - 1];
78+
} else {
79+
break;
80+
}
7681
}
7782
fragment_list[i].color = color;
7883
fragment_list[i].alpha = depth_alpha.y;
@@ -85,8 +90,13 @@ fn resolve(header: u32, opaque_depth: f32) -> vec4<f32> {
8590
// This is an approximation.
8691
final_color = blend(vec4f(fragment_list[0].color * fragment_list[0].alpha, fragment_list[0].alpha), final_color);
8792
var i = 0u;
88-
for(; (i < SORTED_FRAGMENT_MAX_COUNT - 1) && (fragment_list[i + 1].depth < depth_alpha.x); i += 1) {
89-
fragment_list[i] = fragment_list[i + 1];
93+
for(; i < SORTED_FRAGMENT_MAX_COUNT - 1; i += 1) {
94+
// short-circuit can't be used in for-loop, https://github.com/gfx-rs/wgpu/issues/4394
95+
if fragment_list[i + 1].depth < depth_alpha.x {
96+
fragment_list[i] = fragment_list[i + 1];
97+
} else {
98+
break;
99+
}
90100
}
91101
fragment_list[i].color = color;
92102
fragment_list[i].alpha = depth_alpha.y;

0 commit comments

Comments
 (0)