Skip to content

Commit b245b35

Browse files
authored
[naga] Don't treat Emit statements as return statements during ensure_block_returns() (#7013)
1 parent 34cfee6 commit b245b35

File tree

198 files changed

+57
-535
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

198 files changed

+57
-535
lines changed

naga/src/front/glsl/functions.rs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1031,7 +1031,9 @@ impl Frontend {
10311031
result: Option<FunctionResult>,
10321032
meta: Span,
10331033
) {
1034-
ensure_block_returns(&mut ctx.body);
1034+
if result.is_some() {
1035+
ensure_block_returns(&mut ctx.body);
1036+
}
10351037

10361038
let void = result.is_none();
10371039

naga/src/front/wgsl/lower/mod.rs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1307,7 +1307,9 @@ impl<'source, 'temp> Lowerer<'source, 'temp> {
13071307
global_expression_kind_tracker: ctx.global_expression_kind_tracker,
13081308
};
13091309
let mut body = self.block(&f.body, false, &mut stmt_ctx)?;
1310-
ensure_block_returns(&mut body);
1310+
if function.result.is_some() {
1311+
ensure_block_returns(&mut body);
1312+
}
13111313

13121314
function.body = body;
13131315
function.named_expressions = named_expressions

naga/src/proc/terminator.rs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,9 +28,10 @@ pub fn ensure_block_returns(block: &mut crate::Block) {
2828
}
2929
}
3030
}
31-
Some(&mut (S::Emit(_) | S::Break | S::Continue | S::Return { .. } | S::Kill)) => (),
31+
Some(&mut (S::Break | S::Continue | S::Return { .. } | S::Kill)) => (),
3232
Some(
33-
&mut (S::Loop { .. }
33+
&mut (S::Emit(_)
34+
| S::Loop { .. }
3435
| S::Store { .. }
3536
| S::ImageStore { .. }
3637
| S::Call { .. }

naga/tests/out/glsl/access.assign_through_ptr.Compute.glsl

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -44,12 +44,10 @@ float test_arr_as_arg(float a[5][10]) {
4444

4545
void assign_through_ptr_fn(inout uint p) {
4646
p = 42u;
47-
return;
4847
}
4948

5049
void assign_array_through_ptr_fn(inout vec4 foo_2[2]) {
5150
foo_2 = vec4[2](vec4(1.0), vec4(2.0));
52-
return;
5351
}
5452

5553
uint fetch_arg_ptr_member(inout AssignToMember p_1) {
@@ -59,7 +57,6 @@ uint fetch_arg_ptr_member(inout AssignToMember p_1) {
5957

6058
void assign_to_arg_ptr_member(inout AssignToMember p_2) {
6159
p_2.x = 10u;
62-
return;
6360
}
6461

6562
uint fetch_arg_ptr_array_element(inout uint p_3[4]) {
@@ -69,7 +66,6 @@ uint fetch_arg_ptr_array_element(inout uint p_3[4]) {
6966

7067
void assign_to_arg_ptr_array_element(inout uint p_4[4]) {
7168
p_4[1] = 10u;
72-
return;
7369
}
7470

7571
bool index_ptr(bool value) {
@@ -114,6 +110,5 @@ void main() {
114110
vec4 arr[2] = vec4[2](vec4(6.0), vec4(7.0));
115111
assign_through_ptr_fn(val);
116112
assign_array_through_ptr_fn(arr);
117-
return;
118113
}
119114

naga/tests/out/glsl/access.assign_to_ptr_components.Compute.glsl

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -44,12 +44,10 @@ float test_arr_as_arg(float a[5][10]) {
4444

4545
void assign_through_ptr_fn(inout uint p) {
4646
p = 42u;
47-
return;
4847
}
4948

5049
void assign_array_through_ptr_fn(inout vec4 foo_2[2]) {
5150
foo_2 = vec4[2](vec4(1.0), vec4(2.0));
52-
return;
5351
}
5452

5553
uint fetch_arg_ptr_member(inout AssignToMember p_1) {
@@ -59,7 +57,6 @@ uint fetch_arg_ptr_member(inout AssignToMember p_1) {
5957

6058
void assign_to_arg_ptr_member(inout AssignToMember p_2) {
6159
p_2.x = 10u;
62-
return;
6360
}
6461

6562
uint fetch_arg_ptr_array_element(inout uint p_3[4]) {
@@ -69,7 +66,6 @@ uint fetch_arg_ptr_array_element(inout uint p_3[4]) {
6966

7067
void assign_to_arg_ptr_array_element(inout uint p_4[4]) {
7168
p_4[1] = 10u;
72-
return;
7369
}
7470

7571
bool index_ptr(bool value) {
@@ -116,6 +112,5 @@ void main() {
116112
uint _e1 = fetch_arg_ptr_member(s1_);
117113
assign_to_arg_ptr_array_element(a1_);
118114
uint _e3 = fetch_arg_ptr_array_element(a1_);
119-
return;
120115
}
121116

naga/tests/out/glsl/access.foo_frag.Fragment.glsl

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -54,12 +54,10 @@ float test_arr_as_arg(float a[5][10]) {
5454

5555
void assign_through_ptr_fn(inout uint p) {
5656
p = 42u;
57-
return;
5857
}
5958

6059
void assign_array_through_ptr_fn(inout vec4 foo_2[2]) {
6160
foo_2 = vec4[2](vec4(1.0), vec4(2.0));
62-
return;
6361
}
6462

6563
uint fetch_arg_ptr_member(inout AssignToMember p_1) {
@@ -69,7 +67,6 @@ uint fetch_arg_ptr_member(inout AssignToMember p_1) {
6967

7068
void assign_to_arg_ptr_member(inout AssignToMember p_2) {
7169
p_2.x = 10u;
72-
return;
7370
}
7471

7572
uint fetch_arg_ptr_array_element(inout uint p_3[4]) {
@@ -79,7 +76,6 @@ uint fetch_arg_ptr_array_element(inout uint p_3[4]) {
7976

8077
void assign_to_arg_ptr_array_element(inout uint p_4[4]) {
8178
p_4[1] = 10u;
82-
return;
8379
}
8480

8581
bool index_ptr(bool value) {

naga/tests/out/glsl/access.foo_vert.Vertex.glsl

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,6 @@ void test_matrix_within_struct_accesses() {
7777
int _e85 = idx;
7878
int _e87 = idx;
7979
t.m[_e85][_e87] = 40.0;
80-
return;
8180
}
8281

8382
void test_matrix_within_array_within_struct_accesses() {
@@ -113,7 +112,6 @@ void test_matrix_within_array_within_struct_accesses() {
113112
int _e100 = idx_1;
114113
int _e102 = idx_1;
115114
t_1.am[0][_e100][_e102] = 40.0;
116-
return;
117115
}
118116

119117
float read_from_private(inout float foo_1) {
@@ -127,12 +125,10 @@ float test_arr_as_arg(float a[5][10]) {
127125

128126
void assign_through_ptr_fn(inout uint p) {
129127
p = 42u;
130-
return;
131128
}
132129

133130
void assign_array_through_ptr_fn(inout vec4 foo_2[2]) {
134131
foo_2 = vec4[2](vec4(1.0), vec4(2.0));
135-
return;
136132
}
137133

138134
uint fetch_arg_ptr_member(inout AssignToMember p_1) {
@@ -142,7 +138,6 @@ uint fetch_arg_ptr_member(inout AssignToMember p_1) {
142138

143139
void assign_to_arg_ptr_member(inout AssignToMember p_2) {
144140
p_2.x = 10u;
145-
return;
146141
}
147142

148143
uint fetch_arg_ptr_array_element(inout uint p_3[4]) {
@@ -152,7 +147,6 @@ uint fetch_arg_ptr_array_element(inout uint p_3[4]) {
152147

153148
void assign_to_arg_ptr_array_element(inout uint p_4[4]) {
154149
p_4[1] = 10u;
155-
return;
156150
}
157151

158152
bool index_ptr(bool value) {

naga/tests/out/glsl/atomicOps.cs_main.Compute.glsl

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -127,6 +127,5 @@ void main() {
127127
int _e295 = atomicExchange(workgroup_atomic_arr[1], 1);
128128
uint _e299 = atomicExchange(workgroup_struct.atomic_scalar, 1u);
129129
int _e304 = atomicExchange(workgroup_struct.atomic_arr[1], 1);
130-
return;
131130
}
132131

naga/tests/out/glsl/atomicTexture.cs_main.Compute.glsl

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,5 @@ void main() {
2222
imageAtomicAnd(_group_0_binding_1_cs, ivec2(0, 0), 1);
2323
imageAtomicOr(_group_0_binding_1_cs, ivec2(0, 0), 1);
2424
imageAtomicXor(_group_0_binding_1_cs, ivec2(0, 0), 1);
25-
return;
2625
}
2726

naga/tests/out/glsl/bitcast.main.Compute.glsl

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,5 @@ void main() {
3434
f3_ = intBitsToFloat(_e41);
3535
ivec4 _e43 = i4_;
3636
f4_ = intBitsToFloat(_e43);
37-
return;
3837
}
3938

0 commit comments

Comments
 (0)