[tint][ir] Ensure all enumerators are serialized
Don't use default cases. They prevent compiler errors when cases are added without updating the switches.
Bug: tint:2223
Change-Id: I2a30466b14b269e3114459a7947939519941922f
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/185580
Reviewed-by: James Price <jrprice@google.com>
diff --git a/src/tint/lang/core/ir/binary/decode.cc b/src/tint/lang/core/ir/binary/decode.cc
index 825be15..5fbb84d 100644
--- a/src/tint/lang/core/ir/binary/decode.cc
+++ b/src/tint/lang/core/ir/binary/decode.cc
@@ -196,10 +196,13 @@
return Function::PipelineStage::kFragment;
case pb::PipelineStage::Vertex:
return Function::PipelineStage::kVertex;
- default:
- TINT_ICE() << "unhandled PipelineStage: " << stage;
- return Function::PipelineStage::kCompute;
+
+ case pb::PipelineStage::PipelineStage_INT_MIN_SENTINEL_DO_NOT_USE_:
+ case pb::PipelineStage::PipelineStage_INT_MAX_SENTINEL_DO_NOT_USE_:
+ break;
}
+ TINT_ICE() << "unhandled PipelineStage: " << stage;
+ return Function::PipelineStage::kCompute;
}
////////////////////////////////////////////////////////////////////////////
@@ -322,8 +325,7 @@
case pb::Instruction::KindCase::kUnreachable:
inst_out = CreateInstructionUnreachable(inst_in.unreachable());
break;
- default:
- TINT_UNIMPLEMENTED() << inst_in.kind_case();
+ case pb::Instruction::KindCase::KIND_NOT_SET:
break;
}
TINT_ASSERT_OR_RETURN_VALUE(inst_out, nullptr);
@@ -550,7 +552,7 @@
return CreateTypeExternalTexture(type_in.external_texture());
case pb::Type::KindCase::kSampler:
return CreateTypeSampler(type_in.sampler());
- default:
+ case pb::Type::KindCase::KIND_NOT_SET:
break;
}
TINT_ICE() << type_in.kind_case();
@@ -571,10 +573,13 @@
return mod_out_.Types().Get<f32>();
case pb::TypeBasic::f16:
return mod_out_.Types().Get<f16>();
- default:
- TINT_ICE() << "invalid TypeBasic: " << basic_in;
- return nullptr;
+
+ case pb::TypeBasic::TypeBasic_INT_MIN_SENTINEL_DO_NOT_USE_:
+ case pb::TypeBasic::TypeBasic_INT_MAX_SENTINEL_DO_NOT_USE_:
+ break;
}
+ TINT_ICE() << "invalid TypeBasic: " << basic_in;
+ return nullptr;
}
const type::Vector* CreateTypeVector(const pb::TypeVector& vector_in) {
@@ -712,10 +717,15 @@
case pb::Value::KindCase::kConstant:
value_out = b.Constant(ConstantValue(value_in.constant()));
break;
- default:
- TINT_ICE() << "invalid TypeDecl.kind: " << value_in.kind_case();
- return nullptr;
+ case pb::Value::KindCase::KIND_NOT_SET:
+ break;
}
+
+ if (!value_out) {
+ TINT_ICE() << "invalid TypeDecl.kind: " << value_in.kind_case();
+ return nullptr;
+ }
+
return value_out;
}
@@ -788,10 +798,11 @@
return CreateConstantComposite(value_in.composite());
case pb::ConstantValue::KindCase::kSplat:
return CreateConstantSplat(value_in.splat());
- default:
- TINT_ICE() << "invalid ConstantValue.kind: " << value_in.kind_case();
- return nullptr;
+ case pb::ConstantValue::KindCase::KIND_NOT_SET:
+ break;
}
+ TINT_ICE() << "invalid ConstantValue.kind: " << value_in.kind_case();
+ return nullptr;
}
const core::constant::Value* CreateConstantScalar(const pb::ConstantValueScalar& value_in) {
@@ -806,10 +817,11 @@
return b.ConstantValue(f32(value_in.f32()));
case pb::ConstantValueScalar::KindCase::kF16:
return b.ConstantValue(f16(value_in.f16()));
- default:
- TINT_ICE() << "invalid ConstantValueScalar.kind: " << value_in.kind_case();
- return nullptr;
+ case pb::ConstantValueScalar::KindCase::KIND_NOT_SET:
+ break;
}
+ TINT_ICE() << "invalid ConstantValueScalar.kind: " << value_in.kind_case();
+ return nullptr;
}
const core::constant::Value* CreateConstantComposite(
@@ -874,10 +886,13 @@
return core::AddressSpace::kUniform;
case pb::AddressSpace::workgroup:
return core::AddressSpace::kWorkgroup;
- default:
- TINT_ICE() << "invalid AddressSpace: " << in;
- return core::AddressSpace::kUndefined;
+
+ case pb::AddressSpace::AddressSpace_INT_MIN_SENTINEL_DO_NOT_USE_:
+ case pb::AddressSpace::AddressSpace_INT_MAX_SENTINEL_DO_NOT_USE_:
+ break;
}
+ TINT_ICE() << "invalid AddressSpace: " << in;
+ return core::AddressSpace::kUndefined;
}
core::Access AccessControl(pb::AccessControl in) {
@@ -888,10 +903,13 @@
return core::Access::kWrite;
case pb::AccessControl::read_write:
return core::Access::kReadWrite;
- default:
- TINT_ICE() << "invalid Access: " << in;
- return core::Access::kUndefined;
+
+ case pb::AccessControl::AccessControl_INT_MIN_SENTINEL_DO_NOT_USE_:
+ case pb::AccessControl::AccessControl_INT_MAX_SENTINEL_DO_NOT_USE_:
+ break;
}
+ TINT_ICE() << "invalid Access: " << in;
+ return core::Access::kUndefined;
}
core::UnaryOp UnaryOp(pb::UnaryOp in) {
@@ -907,10 +925,12 @@
case pb::UnaryOp::not_:
return core::UnaryOp::kNot;
- default:
- TINT_ICE() << "invalid UnaryOp: " << in;
- return core::UnaryOp::kComplement;
+ case pb::UnaryOp::UnaryOp_INT_MIN_SENTINEL_DO_NOT_USE_:
+ case pb::UnaryOp::UnaryOp_INT_MAX_SENTINEL_DO_NOT_USE_:
+ break;
}
+ TINT_ICE() << "invalid UnaryOp: " << in;
+ return core::UnaryOp::kComplement;
}
core::BinaryOp BinaryOp(pb::BinaryOp in) {
@@ -947,11 +967,17 @@
return core::BinaryOp::kShiftLeft;
case pb::BinaryOp::shift_right:
return core::BinaryOp::kShiftRight;
+ case pb::BinaryOp::logical_and:
+ return core::BinaryOp::kLogicalAnd;
+ case pb::BinaryOp::logical_or:
+ return core::BinaryOp::kLogicalOr;
- default:
- TINT_ICE() << "invalid BinaryOp: " << in;
- return core::BinaryOp::kAdd;
+ case pb::BinaryOp::BinaryOp_INT_MIN_SENTINEL_DO_NOT_USE_:
+ case pb::BinaryOp::BinaryOp_INT_MAX_SENTINEL_DO_NOT_USE_:
+ break;
}
+ TINT_ICE() << "invalid BinaryOp: " << in;
+ return core::BinaryOp::kAdd;
}
core::type::TextureDimension TextureDimension(pb::TextureDimension in) {
@@ -968,7 +994,9 @@
return core::type::TextureDimension::kCube;
case pb::TextureDimension::cube_array:
return core::type::TextureDimension::kCubeArray;
- default:
+
+ case pb::TextureDimension::TextureDimension_INT_MIN_SENTINEL_DO_NOT_USE_:
+ case pb::TextureDimension::TextureDimension_INT_MAX_SENTINEL_DO_NOT_USE_:
break;
}
@@ -980,6 +1008,8 @@
switch (in) {
case pb::TexelFormat::bgra8_unorm:
return core::TexelFormat::kBgra8Unorm;
+ case pb::TexelFormat::r8_unorm:
+ return core::TexelFormat::kR8Unorm;
case pb::TexelFormat::r32_float:
return core::TexelFormat::kR32Float;
case pb::TexelFormat::r32_sint:
@@ -1012,7 +1042,9 @@
return core::TexelFormat::kRgba8Uint;
case pb::TexelFormat::rgba8_unorm:
return core::TexelFormat::kRgba8Unorm;
- default:
+
+ case pb::TexelFormat::TexelFormat_INT_MIN_SENTINEL_DO_NOT_USE_:
+ case pb::TexelFormat::TexelFormat_INT_MAX_SENTINEL_DO_NOT_USE_:
break;
}
@@ -1026,7 +1058,9 @@
return core::type::SamplerKind::kSampler;
case pb::SamplerKind::comparison:
return core::type::SamplerKind::kComparisonSampler;
- default:
+
+ case pb::SamplerKind::SamplerKind_INT_MIN_SENTINEL_DO_NOT_USE_:
+ case pb::SamplerKind::SamplerKind_INT_MAX_SENTINEL_DO_NOT_USE_:
break;
}
@@ -1042,7 +1076,9 @@
return core::InterpolationType::kLinear;
case pb::InterpolationType::perspective:
return core::InterpolationType::kPerspective;
- default:
+
+ case pb::InterpolationType::InterpolationType_INT_MIN_SENTINEL_DO_NOT_USE_:
+ case pb::InterpolationType::InterpolationType_INT_MAX_SENTINEL_DO_NOT_USE_:
break;
}
TINT_ICE() << "invalid InterpolationType: " << in;
@@ -1057,7 +1093,9 @@
return core::InterpolationSampling::kCentroid;
case pb::InterpolationSampling::sample:
return core::InterpolationSampling::kSample;
- default:
+
+ case pb::InterpolationSampling::InterpolationSampling_INT_MIN_SENTINEL_DO_NOT_USE_:
+ case pb::InterpolationSampling::InterpolationSampling_INT_MAX_SENTINEL_DO_NOT_USE_:
break;
}
TINT_ICE() << "invalid InterpolationSampling: " << in;
@@ -1096,7 +1134,9 @@
return core::BuiltinValue::kVertexIndex;
case pb::BuiltinValue::workgroup_id:
return core::BuiltinValue::kWorkgroupId;
- default:
+
+ case pb::BuiltinValue::BuiltinValue_INT_MIN_SENTINEL_DO_NOT_USE_:
+ case pb::BuiltinValue::BuiltinValue_INT_MAX_SENTINEL_DO_NOT_USE_:
break;
}
TINT_ICE() << "invalid BuiltinValue: " << in;
@@ -1225,6 +1265,14 @@
return core::BuiltinFn::kPack4X8Snorm;
case pb::BuiltinFn::pack4x8_unorm:
return core::BuiltinFn::kPack4X8Unorm;
+ case pb::BuiltinFn::pack4xi8:
+ return core::BuiltinFn::kPack4XI8;
+ case pb::BuiltinFn::pack4xu8:
+ return core::BuiltinFn::kPack4XU8;
+ case pb::BuiltinFn::pack4xi8_clamp:
+ return core::BuiltinFn::kPack4XI8Clamp;
+ case pb::BuiltinFn::pack4xu8_clamp:
+ return core::BuiltinFn::kPack4XU8Clamp;
case pb::BuiltinFn::pow:
return core::BuiltinFn::kPow;
case pb::BuiltinFn::quantize_to_f16:
@@ -1275,6 +1323,10 @@
return core::BuiltinFn::kUnpack4X8Snorm;
case pb::BuiltinFn::unpack4x8_unorm:
return core::BuiltinFn::kUnpack4X8Unorm;
+ case pb::BuiltinFn::unpack4xi8:
+ return core::BuiltinFn::kUnpack4XI8;
+ case pb::BuiltinFn::unpack4xu8:
+ return core::BuiltinFn::kUnpack4XU8;
case pb::BuiltinFn::workgroup_barrier:
return core::BuiltinFn::kWorkgroupBarrier;
case pb::BuiltinFn::texture_barrier:
@@ -1335,7 +1387,9 @@
return core::BuiltinFn::kSubgroupBallot;
case pb::BuiltinFn::subgroup_broadcast:
return core::BuiltinFn::kSubgroupBroadcast;
- default:
+
+ case pb::BuiltinFn::BuiltinFn_INT_MIN_SENTINEL_DO_NOT_USE_:
+ case pb::BuiltinFn::BuiltinFn_INT_MAX_SENTINEL_DO_NOT_USE_:
break;
}
TINT_ICE() << "invalid BuiltinFn: " << in;
diff --git a/src/tint/lang/core/ir/binary/encode.cc b/src/tint/lang/core/ir/binary/encode.cc
index ef364ce..562a568 100644
--- a/src/tint/lang/core/ir/binary/encode.cc
+++ b/src/tint/lang/core/ir/binary/encode.cc
@@ -162,10 +162,11 @@
return pb::PipelineStage::Fragment;
case Function::PipelineStage::kVertex:
return pb::PipelineStage::Vertex;
- default:
- TINT_ICE() << "unhandled PipelineStage: " << stage;
- return pb::PipelineStage::Compute;
+ case Function::PipelineStage::kUndefined:
+ break;
}
+ TINT_ICE() << "unhandled PipelineStage: " << stage;
+ return pb::PipelineStage::Compute;
}
////////////////////////////////////////////////////////////////////////////
@@ -655,10 +656,14 @@
return pb::AddressSpace::uniform;
case core::AddressSpace::kWorkgroup:
return pb::AddressSpace::workgroup;
- default:
- TINT_ICE() << "invalid AddressSpace: " << in;
- return pb::AddressSpace::function;
+
+ case core::AddressSpace::kUndefined:
+ case core::AddressSpace::kIn:
+ case core::AddressSpace::kOut:
+ break;
}
+ TINT_ICE() << "invalid AddressSpace: " << in;
+ return pb::AddressSpace::function;
}
pb::AccessControl AccessControl(core::Access in) {
@@ -669,10 +674,11 @@
return pb::AccessControl::write;
case core::Access::kReadWrite:
return pb::AccessControl::read_write;
- default:
- TINT_ICE() << "invalid Access: " << in;
- return pb::AccessControl::read;
+ case core::Access::kUndefined:
+ break;
}
+ TINT_ICE() << "invalid Access: " << in;
+ return pb::AccessControl::read;
}
pb::UnaryOp UnaryOp(core::UnaryOp in) {
@@ -750,7 +756,7 @@
return pb::TextureDimension::cube;
case core::type::TextureDimension::kCubeArray:
return pb::TextureDimension::cube_array;
- default:
+ case core::type::TextureDimension::kNone:
break;
}
@@ -768,6 +774,8 @@
return pb::TexelFormat::r32_sint;
case core::TexelFormat::kR32Uint:
return pb::TexelFormat::r32_uint;
+ case core::TexelFormat::kR8Unorm:
+ return pb::TexelFormat::r8_unorm;
case core::TexelFormat::kRg32Float:
return pb::TexelFormat::rg32_float;
case core::TexelFormat::kRg32Sint:
@@ -794,7 +802,7 @@
return pb::TexelFormat::rgba8_uint;
case core::TexelFormat::kRgba8Unorm:
return pb::TexelFormat::rgba8_unorm;
- default:
+ case core::TexelFormat::kUndefined:
break;
}
@@ -822,7 +830,7 @@
return pb::InterpolationType::linear;
case core::InterpolationType::kPerspective:
return pb::InterpolationType::perspective;
- default:
+ case core::InterpolationType::kUndefined:
break;
}
TINT_ICE() << "invalid InterpolationType: " << in;
@@ -837,7 +845,7 @@
return pb::InterpolationSampling::centroid;
case core::InterpolationSampling::kSample:
return pb::InterpolationSampling::sample;
- default:
+ case core::InterpolationSampling::kUndefined:
break;
}
TINT_ICE() << "invalid InterpolationSampling: " << in;
@@ -876,7 +884,7 @@
return pb::BuiltinValue::vertex_index;
case core::BuiltinValue::kWorkgroupId:
return pb::BuiltinValue::workgroup_id;
- default:
+ case core::BuiltinValue::kUndefined:
break;
}
TINT_ICE() << "invalid BuiltinValue: " << in;
@@ -1005,6 +1013,14 @@
return pb::BuiltinFn::pack4x8_snorm;
case core::BuiltinFn::kPack4X8Unorm:
return pb::BuiltinFn::pack4x8_unorm;
+ case core::BuiltinFn::kPack4XI8:
+ return pb::BuiltinFn::pack4xi8;
+ case core::BuiltinFn::kPack4XU8:
+ return pb::BuiltinFn::pack4xu8;
+ case core::BuiltinFn::kPack4XI8Clamp:
+ return pb::BuiltinFn::pack4xi8_clamp;
+ case core::BuiltinFn::kPack4XU8Clamp:
+ return pb::BuiltinFn::pack4xu8_clamp;
case core::BuiltinFn::kPow:
return pb::BuiltinFn::pow;
case core::BuiltinFn::kQuantizeToF16:
@@ -1055,6 +1071,10 @@
return pb::BuiltinFn::unpack4x8_snorm;
case core::BuiltinFn::kUnpack4X8Unorm:
return pb::BuiltinFn::unpack4x8_unorm;
+ case core::BuiltinFn::kUnpack4XI8:
+ return pb::BuiltinFn::unpack4xi8;
+ case core::BuiltinFn::kUnpack4XU8:
+ return pb::BuiltinFn::unpack4xu8;
case core::BuiltinFn::kWorkgroupBarrier:
return pb::BuiltinFn::workgroup_barrier;
case core::BuiltinFn::kTextureBarrier:
@@ -1115,7 +1135,7 @@
return pb::BuiltinFn::subgroup_ballot;
case core::BuiltinFn::kSubgroupBroadcast:
return pb::BuiltinFn::subgroup_broadcast;
- default:
+ case core::BuiltinFn::kNone:
break;
}
TINT_ICE() << "invalid BuiltinFn: " << in;
diff --git a/src/tint/lang/core/ir/binary/ir.proto b/src/tint/lang/core/ir/binary/ir.proto
index e59a9cb..19f3b0a 100644
--- a/src/tint/lang/core/ir/binary/ir.proto
+++ b/src/tint/lang/core/ir/binary/ir.proto
@@ -247,31 +247,30 @@
InstructionReturn return = 3;
InstructionUnary unary = 4;
InstructionBinary binary = 5;
- InstructionBuiltin builtin = 6;
- InstructionDiscard discard = 7;
- InstructionLet let = 8;
- InstructionVar var = 9;
- InstructionBitcast bitcast = 10;
- InstructionConstruct construct = 11;
- InstructionConvert convert = 12;
- InstructionAccess access = 13;
- InstructionUserCall user_call = 14;
- InstructionBuiltinCall builtin_call = 15;
- InstructionLoad load = 16;
- InstructionStore store = 17;
- InstructionLoadVectorElement load_vector_element = 18;
- InstructionStoreVectorElement store_vector_element = 19;
- InstructionSwizzle swizzle = 20;
- InstructionIf if = 21;
- InstructionSwitch switch = 22;
- InstructionLoop loop = 23;
- InstructionExitIf exit_if = 24;
- InstructionExitSwitch exit_switch = 25;
- InstructionExitLoop exit_loop = 26;
- InstructionNextIteration next_iteration = 27;
- InstructionContinue continue = 28;
- InstructionBreakIf break_if = 29;
- InstructionUnreachable unreachable = 30;
+ InstructionDiscard discard = 6;
+ InstructionLet let = 7;
+ InstructionVar var = 8;
+ InstructionBitcast bitcast = 9;
+ InstructionConstruct construct = 10;
+ InstructionConvert convert = 11;
+ InstructionAccess access = 12;
+ InstructionUserCall user_call = 13;
+ InstructionBuiltinCall builtin_call = 14;
+ InstructionLoad load = 15;
+ InstructionStore store = 16;
+ InstructionLoadVectorElement load_vector_element = 17;
+ InstructionStoreVectorElement store_vector_element = 18;
+ InstructionSwizzle swizzle = 19;
+ InstructionIf if = 20;
+ InstructionSwitch switch = 21;
+ InstructionLoop loop = 22;
+ InstructionExitIf exit_if = 23;
+ InstructionExitSwitch exit_switch = 24;
+ InstructionExitLoop exit_loop = 25;
+ InstructionNextIteration next_iteration = 26;
+ InstructionContinue continue = 27;
+ InstructionBreakIf break_if = 28;
+ InstructionUnreachable unreachable = 29;
}
}
@@ -285,8 +284,6 @@
BinaryOp op = 1;
}
-message InstructionBuiltin {}
-
message InstructionBitcast {}
message InstructionConstruct {}
@@ -450,22 +447,23 @@
enum TexelFormat {
bgra8_unorm = 0;
- r32_float = 1;
- r32_sint = 2;
- r32_uint = 3;
- rg32_float = 4;
- rg32_sint = 5;
- rg32_uint = 6;
- rgba16_float = 7;
- rgba16_sint = 8;
- rgba16_uint = 9;
- rgba32_float = 10;
- rgba32_sint = 11;
- rgba32_uint = 12;
- rgba8_sint = 13;
- rgba8_snorm = 14;
- rgba8_uint = 15;
- rgba8_unorm = 16;
+ r8_unorm = 1;
+ r32_float = 2;
+ r32_sint = 3;
+ r32_uint = 4;
+ rg32_float = 5;
+ rg32_sint = 6;
+ rg32_uint = 7;
+ rgba16_float = 8;
+ rgba16_sint = 9;
+ rgba16_uint = 10;
+ rgba32_float = 11;
+ rgba32_sint = 12;
+ rgba32_uint = 13;
+ rgba8_sint = 14;
+ rgba8_snorm = 15;
+ rgba8_uint = 16;
+ rgba8_unorm = 17;
}
enum SamplerKind {
@@ -564,59 +562,65 @@
pack2x16_unorm = 57;
pack4x8_snorm = 58;
pack4x8_unorm = 59;
- pow = 60;
- quantize_to_f16 = 61;
- radians = 62;
- reflect = 63;
- refract = 64;
- reverse_bits = 65;
- round = 66;
- saturate = 67;
- select = 68;
- sign = 69;
- sin = 70;
- sinh = 71;
- smoothstep = 72;
- sqrt = 73;
- step = 74;
- storage_barrier = 75;
- tan = 76;
- tanh = 77;
- transpose = 78;
- trunc = 79;
- unpack2x16_float = 80;
- unpack2x16_snorm = 81;
- unpack2x16_unorm = 82;
- unpack4x8_snorm = 83;
- unpack4x8_unorm = 84;
- workgroup_barrier = 85;
- texture_barrier = 86;
- texture_dimensions = 87;
- texture_gather = 88;
- texture_gather_compare = 89;
- texture_num_layers = 90;
- texture_num_levels = 91;
- texture_num_samples = 92;
- texture_sample = 93;
- texture_sample_bias = 94;
- texture_sample_compare = 95;
- texture_sample_compare_level = 96;
- texture_sample_grad = 97;
- texture_sample_level = 98;
- texture_sample_base_clamp_to_edge = 99;
- texture_store = 100;
- texture_load = 101;
- atomic_load = 102;
- atomic_store = 103;
- atomic_add = 104;
- atomic_sub = 105;
- atomic_max = 106;
- atomic_min = 107;
- atomic_and = 108;
- atomic_or = 109;
- atomic_xor = 110;
- atomic_exchange = 111;
- atomic_compare_exchange_weak = 112;
- subgroup_ballot = 113;
- subgroup_broadcast = 114;
+ pack4xi8 = 60;
+ pack4xu8 = 61;
+ pack4xi8_clamp = 62;
+ pack4xu8_clamp = 63;
+ pow = 64;
+ quantize_to_f16 = 65;
+ radians = 66;
+ reflect = 67;
+ refract = 68;
+ reverse_bits = 69;
+ round = 70;
+ saturate = 71;
+ select = 72;
+ sign = 73;
+ sin = 74;
+ sinh = 75;
+ smoothstep = 76;
+ sqrt = 77;
+ step = 78;
+ storage_barrier = 79;
+ tan = 80;
+ tanh = 81;
+ transpose = 82;
+ trunc = 83;
+ unpack2x16_float = 84;
+ unpack2x16_snorm = 85;
+ unpack2x16_unorm = 86;
+ unpack4x8_snorm = 87;
+ unpack4x8_unorm = 88;
+ unpack4xi8 = 89;
+ unpack4xu8 = 90;
+ workgroup_barrier = 91;
+ texture_barrier = 92;
+ texture_dimensions = 93;
+ texture_gather = 94;
+ texture_gather_compare = 95;
+ texture_num_layers = 96;
+ texture_num_levels = 97;
+ texture_num_samples = 98;
+ texture_sample = 99;
+ texture_sample_bias = 100;
+ texture_sample_compare = 101;
+ texture_sample_compare_level = 102;
+ texture_sample_grad = 103;
+ texture_sample_level = 104;
+ texture_sample_base_clamp_to_edge = 105;
+ texture_store = 106;
+ texture_load = 107;
+ atomic_load = 108;
+ atomic_store = 109;
+ atomic_add = 110;
+ atomic_sub = 111;
+ atomic_max = 112;
+ atomic_min = 113;
+ atomic_and = 114;
+ atomic_or = 115;
+ atomic_xor = 116;
+ atomic_exchange = 117;
+ atomic_compare_exchange_weak = 118;
+ subgroup_ballot = 119;
+ subgroup_broadcast = 120;
}
diff --git a/src/tint/lang/wgsl/reader/lower/lower.cc b/src/tint/lang/wgsl/reader/lower/lower.cc
index 21782ee..94f2bac 100644
--- a/src/tint/lang/wgsl/reader/lower/lower.cc
+++ b/src/tint/lang/wgsl/reader/lower/lower.cc
@@ -35,6 +35,7 @@
#include "src/tint/lang/core/ir/validator.h"
#include "src/tint/lang/wgsl/builtin_fn.h"
#include "src/tint/lang/wgsl/ir/builtin_call.h"
+#include "src/tint/utils/ice/ice.h"
namespace tint::wgsl::reader {
namespace {
@@ -166,10 +167,15 @@
CASE(kAtomicCompareExchangeWeak)
CASE(kSubgroupBallot)
CASE(kSubgroupBroadcast)
- default:
- TINT_ICE() << "unhandled builtin function: " << fn;
- return core::BuiltinFn::kNone;
+
+ case tint::wgsl::BuiltinFn::kBitcast: // should lower to ir::Bitcast
+ case tint::wgsl::BuiltinFn::kWorkgroupUniformLoad: // should be handled in Lower()
+ case tint::wgsl::BuiltinFn::kTintMaterialize:
+ case tint::wgsl::BuiltinFn::kNone:
+ break;
}
+ TINT_ICE() << "unhandled builtin function: " << fn;
+ return core::BuiltinFn::kNone;
}
} // namespace
diff --git a/src/tint/lang/wgsl/writer/raise/raise.cc b/src/tint/lang/wgsl/writer/raise/raise.cc
index 46cfe7e..dcb3e4e 100644
--- a/src/tint/lang/wgsl/writer/raise/raise.cc
+++ b/src/tint/lang/wgsl/writer/raise/raise.cc
@@ -108,6 +108,10 @@
CASE(kPack2X16Unorm)
CASE(kPack4X8Snorm)
CASE(kPack4X8Unorm)
+ CASE(kPack4XI8)
+ CASE(kPack4XU8)
+ CASE(kPack4XI8Clamp)
+ CASE(kPack4XU8Clamp)
CASE(kPow)
CASE(kQuantizeToF16)
CASE(kRadians)
@@ -133,6 +137,8 @@
CASE(kUnpack2X16Unorm)
CASE(kUnpack4X8Snorm)
CASE(kUnpack4X8Unorm)
+ CASE(kUnpack4XI8)
+ CASE(kUnpack4XU8)
CASE(kWorkgroupBarrier)
CASE(kTextureBarrier)
CASE(kTextureDimensions)
@@ -163,10 +169,11 @@
CASE(kAtomicCompareExchangeWeak)
CASE(kSubgroupBallot)
CASE(kSubgroupBroadcast)
- default:
- TINT_ICE() << "unhandled builtin function: " << fn;
- return wgsl::BuiltinFn::kNone;
+ case core::BuiltinFn::kNone:
+ break;
}
+ TINT_ICE() << "unhandled builtin function: " << fn;
+ return wgsl::BuiltinFn::kNone;
}
void ReplaceBuiltinFnCall(core::ir::Module& mod, core::ir::CoreBuiltinCall* call) {