[WGSL] Allow default as a case selector

This CL updates the WGSL parser to parse `default` as a case selector
value.

Bug: tint:1633
Change-Id: I57661d25924e36bec5c03f96399c557fb7bbf760
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/106382
Commit-Queue: Dan Sinclair <dsinclair@chromium.org>
Commit-Queue: Ben Clayton <bclayton@google.com>
Auto-Submit: Dan Sinclair <dsinclair@chromium.org>
Kokoro: Kokoro <noreply+kokoro@google.com>
Reviewed-by: Ben Clayton <bclayton@google.com>
This commit is contained in:
dan sinclair
2022-10-19 15:55:02 +00:00
committed by Dawn LUCI CQ
parent d27151d333
commit f148f0891b
62 changed files with 1212 additions and 367 deletions

View File

@@ -0,0 +1,16 @@
@compute @workgroup_size(1)
fn f() {
var i : i32;
var result : i32;
switch(i) {
case default: {
result = 10;
}
case 1: {
result = 22;
}
case 2: {
result = 33;
}
}
}

View File

@@ -0,0 +1,20 @@
[numthreads(1, 1, 1)]
void f() {
int i = 0;
int result = 0;
switch(i) {
default: {
result = 10;
break;
}
case 1: {
result = 22;
break;
}
case 2: {
result = 33;
break;
}
}
return;
}

View File

@@ -0,0 +1,20 @@
[numthreads(1, 1, 1)]
void f() {
int i = 0;
int result = 0;
switch(i) {
default: {
result = 10;
break;
}
case 1: {
result = 22;
break;
}
case 2: {
result = 33;
break;
}
}
return;
}

View File

@@ -0,0 +1,26 @@
#version 310 es
void f() {
int i = 0;
int result = 0;
switch(i) {
default: {
result = 10;
break;
}
case 1: {
result = 22;
break;
}
case 2: {
result = 33;
break;
}
}
}
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
void main() {
f();
return;
}

View File

@@ -0,0 +1,23 @@
#include <metal_stdlib>
using namespace metal;
kernel void f() {
int i = 0;
int result = 0;
switch(i) {
default: {
result = 10;
break;
}
case 1: {
result = 22;
break;
}
case 2: {
result = 33;
break;
}
}
return;
}

View File

@@ -0,0 +1,39 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
; Bound: 18
; Schema: 0
OpCapability Shader
OpMemoryModel Logical GLSL450
OpEntryPoint GLCompute %f "f"
OpExecutionMode %f LocalSize 1 1 1
OpName %f "f"
OpName %i "i"
OpName %result "result"
%void = OpTypeVoid
%1 = OpTypeFunction %void
%int = OpTypeInt 32 1
%_ptr_Function_int = OpTypePointer Function %int
%8 = OpConstantNull %int
%int_10 = OpConstant %int 10
%int_22 = OpConstant %int 22
%int_33 = OpConstant %int 33
%f = OpFunction %void None %1
%4 = OpLabel
%i = OpVariable %_ptr_Function_int Function %8
%result = OpVariable %_ptr_Function_int Function %8
%11 = OpLoad %int %i
OpSelectionMerge %10 None
OpSwitch %11 %12 1 %13 2 %14
%12 = OpLabel
OpStore %result %int_10
OpBranch %10
%13 = OpLabel
OpStore %result %int_22
OpBranch %10
%14 = OpLabel
OpStore %result %int_33
OpBranch %10
%10 = OpLabel
OpReturn
OpFunctionEnd

View File

@@ -0,0 +1,16 @@
@compute @workgroup_size(1)
fn f() {
var i : i32;
var result : i32;
switch(i) {
default: {
result = 10;
}
case 1: {
result = 22;
}
case 2: {
result = 33;
}
}
}

View File

@@ -0,0 +1,16 @@
@compute @workgroup_size(1)
fn f() {
var i : i32;
var result : i32;
switch(i) {
case 0: {
result = 10;
}
case 1, default: {
result = 22;
}
case 2: {
result = 33;
}
}
}

View File

@@ -0,0 +1,21 @@
[numthreads(1, 1, 1)]
void f() {
int i = 0;
int result = 0;
switch(i) {
case 0: {
result = 10;
break;
}
case 1:
default: {
result = 22;
break;
}
case 2: {
result = 33;
break;
}
}
return;
}

View File

@@ -0,0 +1,21 @@
[numthreads(1, 1, 1)]
void f() {
int i = 0;
int result = 0;
switch(i) {
case 0: {
result = 10;
break;
}
case 1:
default: {
result = 22;
break;
}
case 2: {
result = 33;
break;
}
}
return;
}

View File

@@ -0,0 +1,27 @@
#version 310 es
void f() {
int i = 0;
int result = 0;
switch(i) {
case 0: {
result = 10;
break;
}
case 1:
default: {
result = 22;
break;
}
case 2: {
result = 33;
break;
}
}
}
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
void main() {
f();
return;
}

View File

@@ -0,0 +1,24 @@
#include <metal_stdlib>
using namespace metal;
kernel void f() {
int i = 0;
int result = 0;
switch(i) {
case 0: {
result = 10;
break;
}
case 1:
default: {
result = 22;
break;
}
case 2: {
result = 33;
break;
}
}
return;
}

View File

@@ -0,0 +1,39 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
; Bound: 18
; Schema: 0
OpCapability Shader
OpMemoryModel Logical GLSL450
OpEntryPoint GLCompute %f "f"
OpExecutionMode %f LocalSize 1 1 1
OpName %f "f"
OpName %i "i"
OpName %result "result"
%void = OpTypeVoid
%1 = OpTypeFunction %void
%int = OpTypeInt 32 1
%_ptr_Function_int = OpTypePointer Function %int
%8 = OpConstantNull %int
%int_10 = OpConstant %int 10
%int_22 = OpConstant %int 22
%int_33 = OpConstant %int 33
%f = OpFunction %void None %1
%4 = OpLabel
%i = OpVariable %_ptr_Function_int Function %8
%result = OpVariable %_ptr_Function_int Function %8
%11 = OpLoad %int %i
OpSelectionMerge %10 None
OpSwitch %11 %12 0 %13 1 %12 2 %14
%13 = OpLabel
OpStore %result %int_10
OpBranch %10
%12 = OpLabel
OpStore %result %int_22
OpBranch %10
%14 = OpLabel
OpStore %result %int_33
OpBranch %10
%10 = OpLabel
OpReturn
OpFunctionEnd

View File

@@ -0,0 +1,16 @@
@compute @workgroup_size(1)
fn f() {
var i : i32;
var result : i32;
switch(i) {
case 0: {
result = 10;
}
case 1, default: {
result = 22;
}
case 2: {
result = 33;
}
}
}