Import Tint changes from Dawn
Changes:
- f6d95d32448dec268d24b4529e5c49cc44ce9c2c Rename TypeFlags and TypeFlag. by dan sinclair <dsinclair@chromium.org>
- 28a7827981dd644d52b1affbd2860917c7fb641c Rename type Base methods by dan sinclair <dsinclair@chromium.org>
- 7c9e639e359c97d42ef1071211d47942eef837de tint: const eval of mix builtin by Antonio Maiorano <amaiorano@google.com>
GitOrigin-RevId: f6d95d32448dec268d24b4529e5c49cc44ce9c2c
Change-Id: Ifd77e1d36fcf5d147fb1c6d724499f8e436c8ae8
Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/113940
Commit-Queue: Ben Clayton <bclayton@google.com>
Kokoro: Kokoro <noreply+kokoro@google.com>
Reviewed-by: Ben Clayton <bclayton@google.com>
diff --git a/src/tint/intrinsics.def b/src/tint/intrinsics.def
index 8a58c70..7e36750 100644
--- a/src/tint/intrinsics.def
+++ b/src/tint/intrinsics.def
@@ -520,9 +520,9 @@
@const fn max<N: num, T: fia_fiu32_f16>(vec<N, T>, vec<N, T>) -> vec<N, T>
@const fn min<T: fia_fiu32_f16>(T, T) -> T
@const fn min<N: num, T: fia_fiu32_f16>(vec<N, T>, vec<N, T>) -> vec<N, T>
-fn mix<T: f32_f16>(T, T, T) -> T
-fn mix<N: num, T: f32_f16>(vec<N, T>, vec<N, T>, vec<N, T>) -> vec<N, T>
-fn mix<N: num, T: f32_f16>(vec<N, T>, vec<N, T>, T) -> vec<N, T>
+@const fn mix<T: fa_f32_f16>(T, T, T) -> T
+@const fn mix<N: num, T: fa_f32_f16>(vec<N, T>, vec<N, T>, vec<N, T>) -> vec<N, T>
+@const fn mix<N: num, T: fa_f32_f16>(vec<N, T>, vec<N, T>, T) -> vec<N, T>
@const fn modf<T: fa_f32_f16>(@test_value(-1.5) T) -> __modf_result<T>
@const fn modf<N: num, T: fa_f32_f16>(@test_value(-1.5) vec<N, T>) -> __modf_result_vec<N, T>
@const fn normalize<N: num, T: fa_f32_f16>(vec<N, T>) -> vec<N, T>
diff --git a/src/tint/program_builder.h b/src/tint/program_builder.h
index ff23562..81495f7 100644
--- a/src/tint/program_builder.h
+++ b/src/tint/program_builder.h
@@ -497,7 +497,7 @@
/// @returns the de-aliased array count pointer
template <typename T, typename... ARGS>
traits::EnableIf<traits::IsTypeOrDerived<T, type::ArrayCount> ||
- traits::IsTypeOrDerived<T, type::StructMemberBase>,
+ traits::IsTypeOrDerived<T, type::StructMember>,
T>*
create(ARGS&&... args) {
AssertNotMoved();
diff --git a/src/tint/resolver/const_eval.cc b/src/tint/resolver/const_eval.cc
index 6469897..da73215 100644
--- a/src/tint/resolver/const_eval.cc
+++ b/src/tint/resolver/const_eval.cc
@@ -416,7 +416,7 @@
utils::Vector<const sem::Constant*, 4> conv_els;
conv_els.Reserve(elements.Length());
std::function<const type::Type*(size_t idx)> target_el_ty;
- if (auto* str = target_ty->As<type::StructBase>()) {
+ if (auto* str = target_ty->As<type::Struct>()) {
if (str->Members().Length() != elements.Length()) {
TINT_ICE(Resolver, builder.Diagnostics())
<< "const-eval conversion of structure has mismatched element counts";
@@ -494,7 +494,7 @@
}
return nullptr;
},
- [&](const type::StructBase* s) -> const ImplConstant* {
+ [&](const type::Struct* s) -> const ImplConstant* {
utils::Hashmap<const type::Type*, const ImplConstant*, 8> zero_by_type;
utils::Vector<const sem::Constant*, 4> zeros;
zeros.Reserve(s->Members().Length());
@@ -1449,7 +1449,7 @@
}
ConstEval::Result ConstEval::MemberAccess(const sem::Expression* obj_expr,
- const type::StructMemberBase* member) {
+ const type::StructMember* member) {
auto obj_val = obj_expr->ConstantValue();
if (!obj_val) {
return nullptr;
@@ -2864,6 +2864,49 @@
return TransformElements(builder, ty, transform, args[0], args[1]);
}
+ConstEval::Result ConstEval::mix(const type::Type* ty,
+ utils::VectorRef<const sem::Constant*> args,
+ const Source& source) {
+ auto transform = [&](const sem::Constant* c0, const sem::Constant* c1, size_t index) {
+ auto create = [&](auto e1, auto e2) -> ImplResult {
+ using NumberT = decltype(e1);
+ // e3 is either a vector or a scalar
+ NumberT e3;
+ auto* c2 = args[2];
+ if (c2->Type()->Is<type::Vector>()) {
+ e3 = c2->Index(index)->As<NumberT>();
+ } else {
+ e3 = c2->As<NumberT>();
+ }
+ // Implement as `e1 * (1 - e3) + e2 * e3)` instead of as `e1 + e3 * (e2 - e1)` to avoid
+ // float precision loss when e1 and e2 significantly differ in magnitude.
+ auto one_sub_e3 = Sub(source, NumberT{1}, e3);
+ if (!one_sub_e3) {
+ return utils::Failure;
+ }
+ auto e1_mul_one_sub_e3 = Mul(source, e1, one_sub_e3.Get());
+ if (!e1_mul_one_sub_e3) {
+ return utils::Failure;
+ }
+ auto e2_mul_e3 = Mul(source, e2, e3);
+ if (!e2_mul_e3) {
+ return utils::Failure;
+ }
+ auto r = Add(source, e1_mul_one_sub_e3.Get(), e2_mul_e3.Get());
+ if (!r) {
+ return utils::Failure;
+ }
+ return CreateElement(builder, source, c0->Type(), r.Get());
+ };
+ return Dispatch_fa_f32_f16(create, c0, c1);
+ };
+ auto r = TransformElements(builder, ty, transform, args[0], args[1]);
+ if (!r) {
+ AddNote("when calculating mix", source);
+ }
+ return r;
+}
+
ConstEval::Result ConstEval::modf(const type::Type* ty,
utils::VectorRef<const sem::Constant*> args,
const Source& source) {
diff --git a/src/tint/resolver/const_eval.h b/src/tint/resolver/const_eval.h
index d7d370d..fa5c0ee 100644
--- a/src/tint/resolver/const_eval.h
+++ b/src/tint/resolver/const_eval.h
@@ -35,7 +35,7 @@
class Expression;
} // namespace tint::sem
namespace tint::type {
-class StructMemberBase;
+class StructMember;
} // namespace tint::type
namespace tint::resolver {
@@ -94,7 +94,7 @@
/// @param obj the object being accessed
/// @param member the member
/// @return the result of the member access, or null if the value cannot be calculated
- Result MemberAccess(const sem::Expression* obj, const type::StructMemberBase* member);
+ Result MemberAccess(const sem::Expression* obj, const type::StructMember* member);
/// @param ty the result type
/// @param vector the vector being swizzled
@@ -757,6 +757,15 @@
utils::VectorRef<const sem::Constant*> args,
const Source& source);
+ /// mix builtin
+ /// @param ty the expression type
+ /// @param args the input arguments
+ /// @param source the source location
+ /// @return the result value, or null if the value cannot be calculated
+ Result mix(const type::Type* ty,
+ utils::VectorRef<const sem::Constant*> args,
+ const Source& source);
+
/// modf builtin
/// @param ty the expression type
/// @param args the input arguments
diff --git a/src/tint/resolver/const_eval_builtin_test.cc b/src/tint/resolver/const_eval_builtin_test.cc
index 8da5af4..4abf09e 100644
--- a/src/tint/resolver/const_eval_builtin_test.cc
+++ b/src/tint/resolver/const_eval_builtin_test.cc
@@ -179,7 +179,7 @@
CheckConstant(value, expected_case.values[0], expected_case.flags);
}
} else {
- EXPECT_FALSE(r()->Resolve());
+ ASSERT_FALSE(r()->Resolve());
EXPECT_EQ(r()->error(), c.expected.Failure().error);
}
}
@@ -1733,6 +1733,94 @@
MinCases<AFloat>(),
MinCases<f32>(),
MinCases<f16>()))));
+
+template <typename T>
+std::vector<Case> MixCases() {
+ auto r = std::vector<Case>{
+ C({T(0), T(1), T(0)}, T(0)), //
+ C({T(0), T(1), T(1)}, T(1)), //
+ C({T(0), T(1), T(2)}, T(2)), //
+ C({T(0), T(1), T::Highest()}, T::Highest()), //
+ C({T::Lowest(), T::Highest(), T(1)}, T::Highest()), //
+ C({T::Lowest(), T::Highest(), T(0)}, T::Lowest()), //
+ C({T(0), T(1), T(0.25)}, T(0.25)), //
+ C({T(0), T(1), T(0.5)}, T(0.5)), //
+ C({T(0), T(1), T(0.75)}, T(0.75)), //
+ C({T(0), T(1000), T(0.25)}, T(250)), //
+ C({T(0), T(1000), T(0.5)}, T(500)), //
+ C({T(0), T(1000), T(0.75)}, T(750)), //
+ // Swap e1 and e2//
+ C({T(1), T(0), T(0)}, T(1)), //
+ C({T(1), T(0), T(1)}, T(0)), //
+ C({T(1), T(0), T(2)}, T(-1)), //
+ C({T::Highest(), T::Lowest(), T(1)}, T::Lowest()), //
+ C({T::Highest(), T::Lowest(), T(0)}, T::Highest()), //
+ C({T(1), T(0), T(0.25)}, T(0.75)), //
+ C({T(1), T(0), T(0.5)}, T(0.5)), //
+ C({T(1), T(0), T(0.75)}, T(0.25)), //
+ C({T(1000), T(0), T(0.25)}, T(750)), //
+ C({T(1000), T(0), T(0.5)}, T(500)), //
+ C({T(1000), T(0), T(0.75)}, T(250)),
+
+ // mix(vec, vec, vec) cases
+ C({Vec(T(0), T(0), T(0)), //
+ Vec(T(1), T(1), T(1)), //
+ Vec(T(0), T(1), T(2))},
+ Vec(T(0), T(1), T(2))),
+
+ // mix(vec, vec, scalar) cases
+ C({Vec(T(0), T(1), T(0)), //
+ Vec(T(1), T(0), T(1000)), //
+ Val(T(0.25))},
+ Vec(T(0.25), T(0.75), T(250))),
+ };
+ // Can't interpolate lowest value for f16 because (1 - lowest) is not representable as f16.
+ if constexpr (!std::is_same_v<T, f16>) {
+ ConcatInto(r, std::vector<Case>{
+ C({T(0), T(1), T::Lowest()}, T::Lowest()),
+ C({T(1), T(0), T::Highest()}, T::Lowest()),
+ });
+ }
+
+ auto error_msg = [](auto a, const char* op, auto b) {
+ return "12:34 error: " + OverflowErrorMessage(a, op, b) + R"(
+12:34 note: when calculating mix)";
+ };
+ auto kLargeValue = T{T::Highest() / 2};
+ // Test f16 separately as it overflows for a different reason at the boundary inputs.
+ // Specifically, (1 - lowest) fails for f16 because the result is not representable.
+ if constexpr (!std::is_same_v<T, f16>) {
+ ConcatInto( //
+ r,
+ std::vector<Case>{
+ E({T(0), T::Highest(), T::Highest()}, error_msg(T::Highest(), "*", T::Highest())),
+ E({T(0), T::Lowest(), T::Lowest()}, error_msg(T::Lowest(), "*", T::Lowest())),
+ E({T::Highest(), T(0), T::Lowest()}, error_msg(T::Highest(), "*", T::Highest())),
+ E({-kLargeValue, kLargeValue, T(2)},
+ error_msg(T{-kLargeValue * T(1 - 2)}, "+", T{kLargeValue * T(2)})),
+ });
+ } else {
+ ConcatInto( //
+ r,
+ std::vector<Case>{
+ E({T(0), T::Highest(), T::Highest()}, error_msg(T::Highest(), "*", T::Highest())),
+ E({T(0), T::Lowest(), T::Lowest()}, error_msg(T(1), "-", T::Lowest())),
+ E({T::Highest(), T(0), T::Lowest()}, error_msg(T(1), "-", T::Lowest())),
+ E({-kLargeValue, kLargeValue, T(2)},
+ error_msg(T{-kLargeValue * T(1 - 2)}, "+", T{kLargeValue * T(2)})),
+ });
+ }
+
+ return r;
+}
+INSTANTIATE_TEST_SUITE_P( //
+ Mix,
+ ResolverConstEvalBuiltinTest,
+ testing::Combine(testing::Values(sem::BuiltinType::kMix),
+ testing::ValuesIn(Concat(MixCases<AFloat>(), //
+ MixCases<f32>(), //
+ MixCases<f16>()))));
+
template <typename T>
std::vector<Case> ModfCases() {
return {
diff --git a/src/tint/resolver/const_eval_test.h b/src/tint/resolver/const_eval_test.h
index 120a077..a8858f4 100644
--- a/src/tint/resolver/const_eval_test.h
+++ b/src/tint/resolver/const_eval_test.h
@@ -101,7 +101,8 @@
[&](const auto& expected) {
using T = std::decay_t<decltype(expected)>;
- ASSERT_TRUE(std::holds_alternative<T>(got_scalar));
+ ASSERT_TRUE(std::holds_alternative<T>(got_scalar))
+ << "Scalar variant index: " << got_scalar.index();
auto got = std::get<T>(got_scalar);
if constexpr (std::is_same_v<bool, T>) {
diff --git a/src/tint/resolver/intrinsic_table.cc b/src/tint/resolver/intrinsic_table.cc
index f6b87f3..e6fd3df 100644
--- a/src/tint/resolver/intrinsic_table.cc
+++ b/src/tint/resolver/intrinsic_table.cc
@@ -57,7 +57,7 @@
/// A special type that matches all TypeMatchers
class Any final : public Castable<Any, type::Type> {
public:
- Any() : Base(type::TypeFlags{}) {}
+ Any() : Base(type::Flags{}) {}
~Any() override = default;
// Stub implementations for type::Type conformance.
diff --git a/src/tint/resolver/intrinsic_table.inl b/src/tint/resolver/intrinsic_table.inl
index 3ca1d07..bda6238 100644
--- a/src/tint/resolver/intrinsic_table.inl
+++ b/src/tint/resolver/intrinsic_table.inl
@@ -11441,36 +11441,36 @@
/* num parameters */ 3,
/* num template types */ 1,
/* num template numbers */ 0,
- /* template types */ &kTemplateTypes[26],
+ /* template types */ &kTemplateTypes[23],
/* template numbers */ &kTemplateNumbers[10],
/* parameters */ &kParameters[468],
/* return matcher indices */ &kMatcherIndices[3],
/* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline),
- /* const eval */ nullptr,
+ /* const eval */ &ConstEval::mix,
},
{
/* [263] */
/* num parameters */ 3,
/* num template types */ 1,
/* num template numbers */ 1,
- /* template types */ &kTemplateTypes[26],
+ /* template types */ &kTemplateTypes[23],
/* template numbers */ &kTemplateNumbers[4],
/* parameters */ &kParameters[471],
/* return matcher indices */ &kMatcherIndices[30],
/* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline),
- /* const eval */ nullptr,
+ /* const eval */ &ConstEval::mix,
},
{
/* [264] */
/* num parameters */ 3,
/* num template types */ 1,
/* num template numbers */ 1,
- /* template types */ &kTemplateTypes[26],
+ /* template types */ &kTemplateTypes[23],
/* template numbers */ &kTemplateNumbers[4],
/* parameters */ &kParameters[474],
/* return matcher indices */ &kMatcherIndices[30],
/* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline),
- /* const eval */ nullptr,
+ /* const eval */ &ConstEval::mix,
},
{
/* [265] */
@@ -14294,9 +14294,9 @@
},
{
/* [52] */
- /* fn mix<T : f32_f16>(T, T, T) -> T */
- /* fn mix<N : num, T : f32_f16>(vec<N, T>, vec<N, T>, vec<N, T>) -> vec<N, T> */
- /* fn mix<N : num, T : f32_f16>(vec<N, T>, vec<N, T>, T) -> vec<N, T> */
+ /* fn mix<T : fa_f32_f16>(T, T, T) -> T */
+ /* fn mix<N : num, T : fa_f32_f16>(vec<N, T>, vec<N, T>, vec<N, T>) -> vec<N, T> */
+ /* fn mix<N : num, T : fa_f32_f16>(vec<N, T>, vec<N, T>, T) -> vec<N, T> */
/* num overloads */ 3,
/* overloads */ &kOverloads[262],
},
diff --git a/src/tint/resolver/intrinsic_table_test.cc b/src/tint/resolver/intrinsic_table_test.cc
index 4849c4c..bb17bae 100644
--- a/src/tint/resolver/intrinsic_table_test.cc
+++ b/src/tint/resolver/intrinsic_table_test.cc
@@ -1483,68 +1483,6 @@
// clang-format on
));
-struct IntrinsicTableAbstractTernaryTest_NonConstEval : public ResolverTestWithParam<Case> {
- std::unique_ptr<IntrinsicTable> table = IntrinsicTable::Create(*this);
-};
-
-TEST_P(IntrinsicTableAbstractTernaryTest_NonConstEval, MatchMix) {
- auto* arg_a = GetParam().arg_a(*this);
- auto* arg_b = GetParam().arg_b(*this);
- auto* arg_c = GetParam().arg_c(*this);
- auto builtin = table->Lookup(sem::BuiltinType::kMix, utils::Vector{arg_a, arg_b, arg_c},
- sem::EvaluationStage::kConstant, Source{{12, 34}});
-
- bool matched = builtin.sem != nullptr;
- bool expected_match = GetParam().expected_match;
- EXPECT_EQ(matched, expected_match) << Diagnostics().str();
-
- auto* result = builtin.sem ? builtin.sem->ReturnType() : nullptr;
- auto* expected_result = GetParam().expected_result(*this);
- EXPECT_TYPE(result, expected_result);
-
- auto* param_a = builtin.sem ? builtin.sem->Parameters()[0]->Type() : nullptr;
- auto* expected_param_a = GetParam().expected_param_a(*this);
- EXPECT_TYPE(param_a, expected_param_a);
-
- auto* param_b = builtin.sem ? builtin.sem->Parameters()[1]->Type() : nullptr;
- auto* expected_param_b = GetParam().expected_param_b(*this);
- EXPECT_TYPE(param_b, expected_param_b);
-
- auto* param_c = builtin.sem ? builtin.sem->Parameters()[2]->Type() : nullptr;
- auto* expected_param_c = GetParam().expected_param_c(*this);
- EXPECT_TYPE(param_c, expected_param_c);
-}
-
-INSTANTIATE_TEST_SUITE_P(
- AFloat_f32,
- IntrinsicTableAbstractTernaryTest_NonConstEval,
- testing::Values( // clang-format off
- // result | param a | param b | param c | arg a | arg b | arg c
- Case::Create<f32, f32, f32, f32, AFloat, AFloat, AFloat>(),
- Case::Create<f32, f32, f32, f32, AFloat, AFloat, f32>(),
- Case::Create<f32, f32, f32, f32, AFloat, f32, AFloat>(),
- Case::Create<f32, f32, f32, f32, AFloat, f32, f32>(),
- Case::Create<f32, f32, f32, f32, f32, AFloat, AFloat>(),
- Case::Create<f32, f32, f32, f32, f32, AFloat, f32>(),
- Case::Create<f32, f32, f32, f32, f32, f32, AFloat>()
- // clang-format on
- ));
-
-INSTANTIATE_TEST_SUITE_P(
- VecAFloat_Vecf32,
- IntrinsicTableAbstractTernaryTest_NonConstEval,
- testing::Values( // clang-format off
- // result | param a | param b | param c | arg a | arg b | arg c
- Case::Create<f32V, f32V, f32V, f32V, AFloatV, AFloatV, AFloatV>(),
- Case::Create<f32V, f32V, f32V, f32V, AFloatV, AFloatV, f32V>(),
- Case::Create<f32V, f32V, f32V, f32V, AFloatV, f32V, AFloatV>(),
- Case::Create<f32V, f32V, f32V, f32V, AFloatV, f32V, f32V>(),
- Case::Create<f32V, f32V, f32V, f32V, f32V, AFloatV, AFloatV>(),
- Case::Create<f32V, f32V, f32V, f32V, f32V, AFloatV, f32V>(),
- Case::Create<f32V, f32V, f32V, f32V, f32V, f32V, AFloatV> ()
- // clang-format on
- ));
-
} // namespace AbstractTernaryTests
} // namespace
diff --git a/src/tint/sem/struct.h b/src/tint/sem/struct.h
index ac535ec..a05a96a 100644
--- a/src/tint/sem/struct.h
+++ b/src/tint/sem/struct.h
@@ -32,13 +32,13 @@
class StructMember;
} // namespace tint::sem
namespace tint::type {
-class StructMemberBase;
+class StructMember;
} // namespace tint::type
namespace tint::sem {
/// Struct holds the semantic information for structures.
-class Struct final : public Castable<Struct, type::StructBase> {
+class Struct final : public Castable<Struct, type::Struct> {
public:
/// Constructor
/// @param declaration the AST structure declaration
@@ -73,7 +73,7 @@
};
/// StructMember holds the semantic information for structure members.
-class StructMember final : public Castable<StructMember, type::StructMemberBase> {
+class StructMember final : public Castable<StructMember, type::StructMember> {
public:
/// Constructor
/// @param declaration the AST declaration node
diff --git a/src/tint/transform/promote_initializers_to_let.cc b/src/tint/transform/promote_initializers_to_let.cc
index 3b1ea7f..391a7f2 100644
--- a/src/tint/transform/promote_initializers_to_let.cc
+++ b/src/tint/transform/promote_initializers_to_let.cc
@@ -42,7 +42,7 @@
// Returns true if the expression should be hoisted to a new let statement before the
// expression's statement.
auto should_hoist = [&](const sem::Expression* expr) {
- if (!expr->Type()->IsAnyOf<type::Array, type::StructBase>()) {
+ if (!expr->Type()->IsAnyOf<type::Array, type::Struct>()) {
// We only care about array and struct initializers
return false;
}
diff --git a/src/tint/type/abstract_numeric.cc b/src/tint/type/abstract_numeric.cc
index b689153..390488e 100644
--- a/src/tint/type/abstract_numeric.cc
+++ b/src/tint/type/abstract_numeric.cc
@@ -19,7 +19,7 @@
namespace tint::type {
AbstractNumeric::AbstractNumeric()
- : Base(TypeFlags{
+ : Base(type::Flags{
Flag::kConstructable,
Flag::kCreationFixedFootprint,
Flag::kFixedFootprint,
diff --git a/src/tint/type/array.cc b/src/tint/type/array.cc
index f8b2e0f..ad903fa 100644
--- a/src/tint/type/array.cc
+++ b/src/tint/type/array.cc
@@ -27,20 +27,20 @@
namespace {
-TypeFlags FlagsFrom(const Type* element, const ArrayCount* count) {
- TypeFlags flags;
+type::Flags FlagsFrom(const Type* element, const ArrayCount* count) {
+ type::Flags flags;
// Only constant-expression sized arrays are constructible
if (count->Is<ConstantArrayCount>()) {
if (element->IsConstructible()) {
- flags.Add(TypeFlag::kConstructable);
+ flags.Add(Flag::kConstructable);
}
if (element->HasCreationFixedFootprint()) {
- flags.Add(TypeFlag::kCreationFixedFootprint);
+ flags.Add(Flag::kCreationFixedFootprint);
}
}
if (!count->Is<RuntimeArrayCount>()) {
if (element->HasFixedFootprint()) {
- flags.Add(TypeFlag::kFixedFootprint);
+ flags.Add(Flag::kFixedFootprint);
}
}
return flags;
diff --git a/src/tint/type/atomic.cc b/src/tint/type/atomic.cc
index 749959c..e850874 100644
--- a/src/tint/type/atomic.cc
+++ b/src/tint/type/atomic.cc
@@ -23,7 +23,7 @@
namespace tint::type {
Atomic::Atomic(const type::Type* subtype)
- : Base(TypeFlags{
+ : Base(type::Flags{
Flag::kCreationFixedFootprint,
Flag::kFixedFootprint,
}),
diff --git a/src/tint/type/bool.cc b/src/tint/type/bool.cc
index 7cde72c..a76228d 100644
--- a/src/tint/type/bool.cc
+++ b/src/tint/type/bool.cc
@@ -21,7 +21,7 @@
namespace tint::type {
Bool::Bool()
- : Base(TypeFlags{
+ : Base(type::Flags{
Flag::kConstructable,
Flag::kCreationFixedFootprint,
Flag::kFixedFootprint,
diff --git a/src/tint/type/f16.cc b/src/tint/type/f16.cc
index aecefa4..4243cb8 100644
--- a/src/tint/type/f16.cc
+++ b/src/tint/type/f16.cc
@@ -21,7 +21,7 @@
namespace tint::type {
F16::F16()
- : Base(TypeFlags{
+ : Base(type::Flags{
Flag::kConstructable,
Flag::kCreationFixedFootprint,
Flag::kFixedFootprint,
diff --git a/src/tint/type/f32.cc b/src/tint/type/f32.cc
index f9ff7ee..ea86008 100644
--- a/src/tint/type/f32.cc
+++ b/src/tint/type/f32.cc
@@ -21,7 +21,7 @@
namespace tint::type {
F32::F32()
- : Base(TypeFlags{
+ : Base(type::Flags{
Flag::kConstructable,
Flag::kCreationFixedFootprint,
Flag::kFixedFootprint,
diff --git a/src/tint/type/i32.cc b/src/tint/type/i32.cc
index 5a242e4..fb3d258 100644
--- a/src/tint/type/i32.cc
+++ b/src/tint/type/i32.cc
@@ -21,7 +21,7 @@
namespace tint::type {
I32::I32()
- : Base(TypeFlags{
+ : Base(type::Flags{
Flag::kConstructable,
Flag::kCreationFixedFootprint,
Flag::kFixedFootprint,
diff --git a/src/tint/type/manager.h b/src/tint/type/manager.h
index 2e587c3..0515b14 100644
--- a/src/tint/type/manager.h
+++ b/src/tint/type/manager.h
@@ -91,7 +91,7 @@
/// pointer is returned.
template <typename TYPE,
typename _ = std::enable_if<traits::IsTypeOrDerived<TYPE, ArrayCount> ||
- traits::IsTypeOrDerived<TYPE, StructMemberBase>>,
+ traits::IsTypeOrDerived<TYPE, StructMember>>,
typename... ARGS>
TYPE* GetNode(ARGS&&... args) {
return nodes_.Get<TYPE>(std::forward<ARGS>(args)...);
@@ -119,8 +119,8 @@
size_t operator()(const tint::type::Node& type) const {
if (const auto* ac = type.As<tint::type::ArrayCount>()) {
return ac->Hash();
- } else if (type.Is<tint::type::StructMemberBase>()) {
- return tint::TypeInfo::Of<tint::type::StructMemberBase>().full_hashcode;
+ } else if (type.Is<tint::type::StructMember>()) {
+ return tint::TypeInfo::Of<tint::type::StructMember>().full_hashcode;
}
TINT_ASSERT(Type, false && "Unreachable");
return 0;
@@ -139,7 +139,7 @@
return ac->Equals(*bc);
}
return false;
- } else if (a.Is<tint::type::StructMemberBase>()) {
+ } else if (a.Is<tint::type::StructMember>()) {
return &a == &b;
}
TINT_ASSERT(Type, false && "Unreachable");
diff --git a/src/tint/type/matrix.cc b/src/tint/type/matrix.cc
index d73d190..063ac88 100644
--- a/src/tint/type/matrix.cc
+++ b/src/tint/type/matrix.cc
@@ -23,7 +23,7 @@
namespace tint::type {
Matrix::Matrix(const Vector* column_type, uint32_t columns)
- : Base(TypeFlags{
+ : Base(type::Flags{
Flag::kConstructable,
Flag::kCreationFixedFootprint,
Flag::kFixedFootprint,
diff --git a/src/tint/type/pointer.cc b/src/tint/type/pointer.cc
index 286e90c..c59170c 100644
--- a/src/tint/type/pointer.cc
+++ b/src/tint/type/pointer.cc
@@ -23,7 +23,7 @@
namespace tint::type {
Pointer::Pointer(const Type* subtype, ast::AddressSpace address_space, ast::Access access)
- : Base(TypeFlags{}), subtype_(subtype), address_space_(address_space), access_(access) {
+ : Base(type::Flags{}), subtype_(subtype), address_space_(address_space), access_(access) {
TINT_ASSERT(Type, !subtype->Is<Reference>());
TINT_ASSERT(Type, access != ast::Access::kUndefined);
}
diff --git a/src/tint/type/reference.cc b/src/tint/type/reference.cc
index 93cb7f2..0541f84 100644
--- a/src/tint/type/reference.cc
+++ b/src/tint/type/reference.cc
@@ -22,7 +22,7 @@
namespace tint::type {
Reference::Reference(const Type* subtype, ast::AddressSpace address_space, ast::Access access)
- : Base(TypeFlags{}), subtype_(subtype), address_space_(address_space), access_(access) {
+ : Base(type::Flags{}), subtype_(subtype), address_space_(address_space), access_(access) {
TINT_ASSERT(Type, !subtype->Is<Reference>());
TINT_ASSERT(Type, access != ast::Access::kUndefined);
}
diff --git a/src/tint/type/sampler.cc b/src/tint/type/sampler.cc
index f49d525..c49a8ef 100644
--- a/src/tint/type/sampler.cc
+++ b/src/tint/type/sampler.cc
@@ -21,7 +21,7 @@
namespace tint::type {
-Sampler::Sampler(ast::SamplerKind kind) : Base(TypeFlags{}), kind_(kind) {}
+Sampler::Sampler(ast::SamplerKind kind) : Base(type::Flags{}), kind_(kind) {}
Sampler::Sampler(Sampler&&) = default;
diff --git a/src/tint/type/struct.cc b/src/tint/type/struct.cc
index a72aa0f..778a600 100644
--- a/src/tint/type/struct.cc
+++ b/src/tint/type/struct.cc
@@ -22,27 +22,27 @@
#include "src/tint/symbol_table.h"
#include "src/tint/utils/hash.h"
-TINT_INSTANTIATE_TYPEINFO(tint::type::StructBase);
-TINT_INSTANTIATE_TYPEINFO(tint::type::StructMemberBase);
+TINT_INSTANTIATE_TYPEINFO(tint::type::Struct);
+TINT_INSTANTIATE_TYPEINFO(tint::type::StructMember);
namespace tint::type {
namespace {
-TypeFlags FlagsFrom(utils::VectorRef<const StructMemberBase*> members) {
- TypeFlags flags{
- TypeFlag::kConstructable,
- TypeFlag::kCreationFixedFootprint,
- TypeFlag::kFixedFootprint,
+type::Flags FlagsFrom(utils::VectorRef<const StructMember*> members) {
+ type::Flags flags{
+ Flag::kConstructable,
+ Flag::kCreationFixedFootprint,
+ Flag::kFixedFootprint,
};
for (auto* member : members) {
if (!member->Type()->IsConstructible()) {
- flags.Remove(TypeFlag::kConstructable);
+ flags.Remove(Flag::kConstructable);
}
if (!member->Type()->HasFixedFootprint()) {
- flags.Remove(TypeFlag::kFixedFootprint);
+ flags.Remove(Flag::kFixedFootprint);
}
if (!member->Type()->HasCreationFixedFootprint()) {
- flags.Remove(TypeFlag::kCreationFixedFootprint);
+ flags.Remove(Flag::kCreationFixedFootprint);
}
}
return flags;
@@ -50,12 +50,12 @@
} // namespace
-StructBase::StructBase(tint::Source source,
- Symbol name,
- utils::VectorRef<const StructMemberBase*> members,
- uint32_t align,
- uint32_t size,
- uint32_t size_no_padding)
+Struct::Struct(tint::Source source,
+ Symbol name,
+ utils::VectorRef<const StructMember*> members,
+ uint32_t align,
+ uint32_t size,
+ uint32_t size_no_padding)
: Base(FlagsFrom(members)),
source_(source),
name_(name),
@@ -64,20 +64,20 @@
size_(size),
size_no_padding_(size_no_padding) {}
-StructBase::~StructBase() = default;
+Struct::~Struct() = default;
-size_t StructBase::Hash() const {
- return utils::Hash(TypeInfo::Of<StructBase>().full_hashcode, name_);
+size_t Struct::Hash() const {
+ return utils::Hash(TypeInfo::Of<Struct>().full_hashcode, name_);
}
-bool StructBase::Equals(const Type& other) const {
- if (auto* o = other.As<StructBase>()) {
+bool Struct::Equals(const Type& other) const {
+ if (auto* o = other.As<Struct>()) {
return o->name_ == name_;
}
return false;
}
-const StructMemberBase* StructBase::FindMember(Symbol name) const {
+const StructMember* Struct::FindMember(Symbol name) const {
for (auto* member : members_) {
if (member->Name() == name) {
return member;
@@ -86,22 +86,22 @@
return nullptr;
}
-uint32_t StructBase::Align() const {
+uint32_t Struct::Align() const {
return align_;
}
-uint32_t StructBase::Size() const {
+uint32_t Struct::Size() const {
return size_;
}
-std::string StructBase::FriendlyName(const SymbolTable& symbols) const {
+std::string Struct::FriendlyName(const SymbolTable& symbols) const {
return symbols.NameFor(name_);
}
-std::string StructBase::Layout(const tint::SymbolTable& symbols) const {
+std::string Struct::Layout(const tint::SymbolTable& symbols) const {
std::stringstream ss;
- auto member_name_of = [&](const StructMemberBase* sm) { return symbols.NameFor(sm->Name()); };
+ auto member_name_of = [&](const StructMember* sm) { return symbols.NameFor(sm->Name()); };
if (Members().IsEmpty()) {
return {};
@@ -164,14 +164,14 @@
return ss.str();
}
-StructMemberBase::StructMemberBase(tint::Source source,
- Symbol name,
- const type::Type* type,
- uint32_t index,
- uint32_t offset,
- uint32_t align,
- uint32_t size,
- std::optional<uint32_t> location)
+StructMember::StructMember(tint::Source source,
+ Symbol name,
+ const type::Type* type,
+ uint32_t index,
+ uint32_t offset,
+ uint32_t align,
+ uint32_t size,
+ std::optional<uint32_t> location)
: source_(source),
name_(name),
type_(type),
@@ -181,6 +181,6 @@
size_(size),
location_(location) {}
-StructMemberBase::~StructMemberBase() = default;
+StructMember::~StructMember() = default;
} // namespace tint::type
diff --git a/src/tint/type/struct.h b/src/tint/type/struct.h
index b9daec9..8946714 100644
--- a/src/tint/type/struct.h
+++ b/src/tint/type/struct.h
@@ -29,7 +29,7 @@
// Forward declarations
namespace tint::type {
-class StructMemberBase;
+class StructMember;
} // namespace tint::type
namespace tint::type {
@@ -44,8 +44,8 @@
kComputeOutput,
};
-/// StructBase holds the Type information for structures.
-class StructBase : public Castable<StructBase, Type> {
+/// Struct holds the Type information for structures.
+class Struct : public Castable<Struct, Type> {
public:
/// Constructor
/// @param source the source of the structure
@@ -55,15 +55,15 @@
/// @param size the byte size of the structure
/// @param size_no_padding size of the members without the end of structure
/// alignment padding
- StructBase(tint::Source source,
- Symbol name,
- utils::VectorRef<const StructMemberBase*> members,
- uint32_t align,
- uint32_t size,
- uint32_t size_no_padding);
+ Struct(tint::Source source,
+ Symbol name,
+ utils::VectorRef<const StructMember*> members,
+ uint32_t align,
+ uint32_t size,
+ uint32_t size_no_padding);
/// Destructor
- ~StructBase() override;
+ ~Struct() override;
/// @returns a hash of the type.
size_t Hash() const override;
@@ -79,11 +79,11 @@
Symbol Name() const { return name_; }
/// @returns the members of the structure
- utils::VectorRef<const StructMemberBase*> Members() const { return members_; }
+ utils::VectorRef<const StructMember*> Members() const { return members_; }
/// @param name the member name to look for
/// @returns the member with the given name, or nullptr if it was not found.
- const StructMemberBase* FindMember(Symbol name) const;
+ const StructMember* FindMember(Symbol name) const;
/// @returns the byte alignment of the structure
/// @note this may differ from the alignment of a structure member of this
@@ -145,29 +145,27 @@
std::string Layout(const tint::SymbolTable& symbols) const;
/// @param concrete the conversion-rank ordered concrete versions of this abstract structure.
- void SetConcreteTypes(utils::VectorRef<const StructBase*> concrete) {
- concrete_types_ = concrete;
- }
+ void SetConcreteTypes(utils::VectorRef<const Struct*> concrete) { concrete_types_ = concrete; }
/// @returns the conversion-rank ordered concrete versions of this abstract structure, or an
/// empty vector if this structure is not abstract.
/// @note only structures returned by builtins may be abstract (e.g. modf, frexp)
- utils::VectorRef<const StructBase*> ConcreteTypes() const { return concrete_types_; }
+ utils::VectorRef<const Struct*> ConcreteTypes() const { return concrete_types_; }
private:
const tint::Source source_;
const Symbol name_;
- const utils::Vector<const StructMemberBase*, 4> members_;
+ const utils::Vector<const StructMember*, 4> members_;
const uint32_t align_;
const uint32_t size_;
const uint32_t size_no_padding_;
std::unordered_set<ast::AddressSpace> address_space_usage_;
std::unordered_set<PipelineStageUsage> pipeline_stage_uses_;
- utils::Vector<const StructBase*, 2> concrete_types_;
+ utils::Vector<const Struct*, 2> concrete_types_;
};
-/// StructMemberBase holds the type information for structure members.
-class StructMemberBase : public Castable<StructMemberBase, Node> {
+/// StructMember holds the type information for structure members.
+class StructMember : public Castable<StructMember, Node> {
public:
/// Constructor
/// @param source the source of the struct member
@@ -178,17 +176,17 @@
/// @param align the byte alignment of the member
/// @param size the byte size of the member
/// @param location the location attribute, if present
- StructMemberBase(tint::Source source,
- Symbol name,
- const type::Type* type,
- uint32_t index,
- uint32_t offset,
- uint32_t align,
- uint32_t size,
- std::optional<uint32_t> location);
+ StructMember(tint::Source source,
+ Symbol name,
+ const type::Type* type,
+ uint32_t index,
+ uint32_t offset,
+ uint32_t align,
+ uint32_t size,
+ std::optional<uint32_t> location);
/// Destructor
- ~StructMemberBase() override;
+ ~StructMember() override;
/// @returns the source the struct member
const tint::Source& Source() const { return source_; }
@@ -198,10 +196,10 @@
/// Sets the owning structure to `s`
/// @param s the new structure owner
- void SetStruct(const StructBase* s) { struct_ = s; }
+ void SetStruct(const Struct* s) { struct_ = s; }
/// @returns the structure that owns this member
- const StructBase* Struct() const { return struct_; }
+ const type::Struct* Struct() const { return struct_; }
/// @returns the type of the member
const type::Type* Type() const { return type_; }
@@ -224,7 +222,7 @@
private:
const tint::Source source_;
const Symbol name_;
- const StructBase* struct_;
+ const type::Struct* struct_;
const type::Type* type_;
const uint32_t index_;
const uint32_t offset_;
diff --git a/src/tint/type/struct_test.cc b/src/tint/type/struct_test.cc
index 55e1517..ae9a249 100644
--- a/src/tint/type/struct_test.cc
+++ b/src/tint/type/struct_test.cc
@@ -24,27 +24,27 @@
TEST_F(TypeStructTest, Creation) {
auto name = Sym("S");
- auto* s = create<StructBase>(Source{}, name, utils::Empty, 4u /* align */, 8u /* size */,
- 16u /* size_no_padding */);
+ auto* s = create<Struct>(Source{}, name, utils::Empty, 4u /* align */, 8u /* size */,
+ 16u /* size_no_padding */);
EXPECT_EQ(s->Align(), 4u);
EXPECT_EQ(s->Size(), 8u);
EXPECT_EQ(s->SizeNoPadding(), 16u);
}
TEST_F(TypeStructTest, Hash) {
- auto* a = create<StructBase>(Source{}, Sym("a"), utils::Empty, 4u /* align */, 4u /* size */,
- 4u /* size_no_padding */);
- auto* b = create<StructBase>(Source{}, Sym("b"), utils::Empty, 4u /* align */, 4u /* size */,
- 4u /* size_no_padding */);
+ auto* a = create<Struct>(Source{}, Sym("a"), utils::Empty, 4u /* align */, 4u /* size */,
+ 4u /* size_no_padding */);
+ auto* b = create<Struct>(Source{}, Sym("b"), utils::Empty, 4u /* align */, 4u /* size */,
+ 4u /* size_no_padding */);
EXPECT_NE(a->Hash(), b->Hash());
}
TEST_F(TypeStructTest, Equals) {
- auto* a = create<StructBase>(Source{}, Sym("a"), utils::Empty, 4u /* align */, 4u /* size */,
- 4u /* size_no_padding */);
- auto* b = create<StructBase>(Source{}, Sym("b"), utils::Empty, 4u /* align */, 4u /* size */,
- 4u /* size_no_padding */);
+ auto* a = create<Struct>(Source{}, Sym("a"), utils::Empty, 4u /* align */, 4u /* size */,
+ 4u /* size_no_padding */);
+ auto* b = create<Struct>(Source{}, Sym("b"), utils::Empty, 4u /* align */, 4u /* size */,
+ 4u /* size_no_padding */);
EXPECT_TRUE(a->Equals(*a));
EXPECT_FALSE(a->Equals(*b));
@@ -53,8 +53,8 @@
TEST_F(TypeStructTest, FriendlyName) {
auto name = Sym("my_struct");
- auto* s = create<StructBase>(Source{}, name, utils::Empty, 4u /* align */, 4u /* size */,
- 4u /* size_no_padding */);
+ auto* s = create<Struct>(Source{}, name, utils::Empty, 4u /* align */, 4u /* size */,
+ 4u /* size_no_padding */);
EXPECT_EQ(s->FriendlyName(Symbols()), "my_struct");
}
diff --git a/src/tint/type/texture.cc b/src/tint/type/texture.cc
index eedd273..0aa8549 100644
--- a/src/tint/type/texture.cc
+++ b/src/tint/type/texture.cc
@@ -18,7 +18,7 @@
namespace tint::type {
-Texture::Texture(ast::TextureDimension dim) : Base(TypeFlags{}), dim_(dim) {}
+Texture::Texture(ast::TextureDimension dim) : Base(type::Flags{}), dim_(dim) {}
Texture::Texture(Texture&&) = default;
diff --git a/src/tint/type/type.cc b/src/tint/type/type.cc
index 1eead35..d7bccc0 100644
--- a/src/tint/type/type.cc
+++ b/src/tint/type/type.cc
@@ -34,7 +34,7 @@
namespace tint::type {
-Type::Type(TypeFlags flags) : flags_(flags) {
+Type::Type(type::Flags flags) : flags_(flags) {
if (IsConstructible()) {
TINT_ASSERT(Type, HasCreationFixedFootprint());
}
@@ -180,7 +180,7 @@
[&](const Vector* v) { return v->type()->HoldsAbstract(); },
[&](const Matrix* m) { return m->type()->HoldsAbstract(); },
[&](const Array* a) { return a->ElemType()->HoldsAbstract(); },
- [&](const StructBase* s) {
+ [&](const Struct* s) {
for (auto* m : s->Members()) {
if (m->Type()->HoldsAbstract()) {
return true;
@@ -238,7 +238,7 @@
}
return kNoConversion;
},
- [&](const StructBase* from_str) {
+ [&](const Struct* from_str) {
auto concrete_tys = from_str->ConcreteTypes();
for (size_t i = 0; i < concrete_tys.Length(); i++) {
if (concrete_tys[i] == to) {
diff --git a/src/tint/type/type.h b/src/tint/type/type.h
index 187b566..00e1752 100644
--- a/src/tint/type/type.h
+++ b/src/tint/type/type.h
@@ -30,7 +30,7 @@
namespace tint::type {
-enum TypeFlag {
+enum Flag {
/// Type is constructable.
/// @see https://gpuweb.github.io/gpuweb/wgsl/#constructible-types
kConstructable,
@@ -42,15 +42,12 @@
kFixedFootprint,
};
-/// An alias to utils::EnumSet<TypeFlag>
-using TypeFlags = utils::EnumSet<TypeFlag>;
+/// An alias to utils::EnumSet<Flag>
+using Flags = utils::EnumSet<Flag>;
/// Base class for a type in the system
class Type : public Castable<Type, Node> {
public:
- /// Alias to TypeFlag
- using Flag = TypeFlag;
-
/// Move constructor
Type(Type&&);
~Type() override;
@@ -83,7 +80,7 @@
virtual uint32_t Align() const;
/// @returns the flags on the type
- TypeFlags Flags() { return flags_; }
+ type::Flags Flags() { return flags_; }
/// @returns true if type is constructable
/// https://gpuweb.github.io/gpuweb/wgsl/#constructible-types
@@ -197,10 +194,10 @@
protected:
/// Constructor
/// @param flags the flags of this type
- explicit Type(TypeFlags flags);
+ explicit Type(type::Flags flags);
/// The flags of this type.
- const TypeFlags flags_;
+ const type::Flags flags_;
};
} // namespace tint::type
diff --git a/src/tint/type/type_test.cc b/src/tint/type/type_test.cc
index 133f521..48b44dd 100644
--- a/src/tint/type/type_test.cc
+++ b/src/tint/type/type_test.cc
@@ -45,54 +45,54 @@
const Matrix* mat4x3_af = create<Matrix>(vec3_af, 4u);
const Reference* ref_u32 =
create<Reference>(u32, ast::AddressSpace::kPrivate, ast::Access::kReadWrite);
- const StructBase* str_f32 = create<StructBase>(Source{},
- Sym("str_f32"),
- utils::Vector{
- create<StructMemberBase>(
- /* source */ Source{},
- /* name */ Sym("x"),
- /* type */ f32,
- /* index */ 0u,
- /* offset */ 0u,
- /* align */ 4u,
- /* size */ 4u,
- /* location */ std::nullopt),
- },
- /* align*/ 4u,
- /* size*/ 4u,
- /* size_no_padding*/ 4u);
- const StructBase* str_f16 = create<StructBase>(Source{},
- Sym("str_f16"),
- utils::Vector{
- create<StructMemberBase>(
- /* source */ Source{},
- /* name */ Sym("x"),
- /* type */ f16,
- /* index */ 0u,
- /* offset */ 0u,
- /* align */ 4u,
- /* size */ 4u,
- /* location */ std::nullopt),
- },
- /* align*/ 4u,
- /* size*/ 4u,
- /* size_no_padding*/ 4u);
- StructBase* str_af = create<StructBase>(Source{},
- Sym("str_af"),
- utils::Vector{
- create<StructMemberBase>(
- /* source */ Source{},
- /* name */ Sym("x"),
- /* type */ af,
- /* index */ 0u,
- /* offset */ 0u,
- /* align */ 4u,
- /* size */ 4u,
- /* location */ std::nullopt),
- },
- /* align*/ 4u,
- /* size*/ 4u,
- /* size_no_padding*/ 4u);
+ const Struct* str_f32 = create<Struct>(Source{},
+ Sym("str_f32"),
+ utils::Vector{
+ create<StructMember>(
+ /* source */ Source{},
+ /* name */ Sym("x"),
+ /* type */ f32,
+ /* index */ 0u,
+ /* offset */ 0u,
+ /* align */ 4u,
+ /* size */ 4u,
+ /* location */ std::nullopt),
+ },
+ /* align*/ 4u,
+ /* size*/ 4u,
+ /* size_no_padding*/ 4u);
+ const Struct* str_f16 = create<Struct>(Source{},
+ Sym("str_f16"),
+ utils::Vector{
+ create<StructMember>(
+ /* source */ Source{},
+ /* name */ Sym("x"),
+ /* type */ f16,
+ /* index */ 0u,
+ /* offset */ 0u,
+ /* align */ 4u,
+ /* size */ 4u,
+ /* location */ std::nullopt),
+ },
+ /* align*/ 4u,
+ /* size*/ 4u,
+ /* size_no_padding*/ 4u);
+ Struct* str_af = create<Struct>(Source{},
+ Sym("str_af"),
+ utils::Vector{
+ create<StructMember>(
+ /* source */ Source{},
+ /* name */ Sym("x"),
+ /* type */ af,
+ /* index */ 0u,
+ /* offset */ 0u,
+ /* align */ 4u,
+ /* size */ 4u,
+ /* location */ std::nullopt),
+ },
+ /* align*/ 4u,
+ /* size*/ 4u,
+ /* size_no_padding*/ 4u);
const Array* arr_i32 = create<Array>(
/* element */ i32,
/* count */ create<ConstantArrayCount>(5u),
diff --git a/src/tint/type/u32.cc b/src/tint/type/u32.cc
index b787c96..fd38cb9 100644
--- a/src/tint/type/u32.cc
+++ b/src/tint/type/u32.cc
@@ -21,7 +21,7 @@
namespace tint::type {
U32::U32()
- : Base(TypeFlags{
+ : Base(type::Flags{
Flag::kConstructable,
Flag::kCreationFixedFootprint,
Flag::kFixedFootprint,
diff --git a/src/tint/type/vector.cc b/src/tint/type/vector.cc
index a2b57a4..70b33bc 100644
--- a/src/tint/type/vector.cc
+++ b/src/tint/type/vector.cc
@@ -22,7 +22,7 @@
namespace tint::type {
Vector::Vector(Type const* subtype, uint32_t width)
- : Base(TypeFlags{
+ : Base(type::Flags{
Flag::kConstructable,
Flag::kCreationFixedFootprint,
Flag::kFixedFootprint,
diff --git a/src/tint/type/void.cc b/src/tint/type/void.cc
index aaeca91..b993dfe 100644
--- a/src/tint/type/void.cc
+++ b/src/tint/type/void.cc
@@ -20,7 +20,7 @@
namespace tint::type {
-Void::Void() : Base(TypeFlags{}) {}
+Void::Void() : Base(type::Flags{}) {}
Void::Void(Void&&) = default;