@@ -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