mirror of
https://github.com/gfx-rs/wgpu.git
synced 2026-04-22 03:02:01 -04:00
[glsl-out] introduce a new block for switch cases
This commit is contained in:
@@ -1807,23 +1807,29 @@ impl<'a, W: Write> Writer<'a, W> {
|
||||
for case in cases {
|
||||
match case.value {
|
||||
crate::SwitchValue::Integer(value) => {
|
||||
writeln!(self.out, "{}case {}{}:", l2, value, type_postfix)?
|
||||
write!(self.out, "{}case {}{}:", l2, value, type_postfix)?
|
||||
}
|
||||
crate::SwitchValue::Default => writeln!(self.out, "{}default:", l2)?,
|
||||
crate::SwitchValue::Default => write!(self.out, "{}default:", l2)?,
|
||||
}
|
||||
|
||||
let write_block_braces = !(case.fall_through && case.body.is_empty());
|
||||
if write_block_braces {
|
||||
writeln!(self.out, " {{")?;
|
||||
} else {
|
||||
writeln!(self.out)?;
|
||||
}
|
||||
|
||||
for sta in case.body.iter() {
|
||||
self.write_stmt(sta, ctx, l2.next())?;
|
||||
}
|
||||
|
||||
// Write fallthrough comment if the case is fallthrough,
|
||||
// otherwise write a break, if the case is not already
|
||||
// broken out of at the end of its body.
|
||||
if case.fall_through {
|
||||
writeln!(self.out, "{}/* fallthrough */", l2.next())?;
|
||||
} else if case.body.last().map_or(true, |s| !s.is_terminator()) {
|
||||
if !case.fall_through && case.body.last().map_or(true, |s| !s.is_terminator()) {
|
||||
writeln!(self.out, "{}break;", l2.next())?;
|
||||
}
|
||||
|
||||
if write_block_braces {
|
||||
writeln!(self.out, "{}}}", l2)?;
|
||||
}
|
||||
}
|
||||
|
||||
writeln!(self.out, "{}}}", level)?
|
||||
|
||||
@@ -8,17 +8,20 @@ layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
|
||||
|
||||
void switch_default_break(int i) {
|
||||
switch(i) {
|
||||
default:
|
||||
default: {
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void switch_case_break() {
|
||||
switch(0) {
|
||||
case 0:
|
||||
case 0: {
|
||||
break;
|
||||
default:
|
||||
}
|
||||
default: {
|
||||
break;
|
||||
}
|
||||
}
|
||||
return;
|
||||
}
|
||||
@@ -26,10 +29,12 @@ void switch_case_break() {
|
||||
void loop_switch_continue(int x) {
|
||||
while(true) {
|
||||
switch(x) {
|
||||
case 1:
|
||||
case 1: {
|
||||
continue;
|
||||
default:
|
||||
}
|
||||
default: {
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
return;
|
||||
@@ -43,54 +48,65 @@ void main() {
|
||||
memoryBarrierShared();
|
||||
barrier();
|
||||
switch(1) {
|
||||
default:
|
||||
default: {
|
||||
pos = 1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
int _e4 = pos;
|
||||
switch(_e4) {
|
||||
case 1:
|
||||
case 1: {
|
||||
pos = 0;
|
||||
break;
|
||||
case 2:
|
||||
}
|
||||
case 2: {
|
||||
pos = 1;
|
||||
break;
|
||||
}
|
||||
case 3:
|
||||
/* fallthrough */
|
||||
case 4:
|
||||
case 4: {
|
||||
pos = 2;
|
||||
break;
|
||||
case 5:
|
||||
}
|
||||
case 5: {
|
||||
pos = 3;
|
||||
break;
|
||||
}
|
||||
default:
|
||||
/* fallthrough */
|
||||
case 6:
|
||||
case 6: {
|
||||
pos = 4;
|
||||
break;
|
||||
}
|
||||
}
|
||||
switch(0u) {
|
||||
case 0u:
|
||||
case 0u: {
|
||||
break;
|
||||
default:
|
||||
}
|
||||
default: {
|
||||
break;
|
||||
}
|
||||
}
|
||||
int _e11 = pos;
|
||||
switch(_e11) {
|
||||
case 1:
|
||||
case 1: {
|
||||
pos = 0;
|
||||
break;
|
||||
case 2:
|
||||
}
|
||||
case 2: {
|
||||
pos = 1;
|
||||
return;
|
||||
case 3:
|
||||
}
|
||||
case 3: {
|
||||
pos = 2;
|
||||
return;
|
||||
case 4:
|
||||
}
|
||||
case 4: {
|
||||
return;
|
||||
default:
|
||||
}
|
||||
default: {
|
||||
pos = 3;
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user