tint/writer/wgsl: Emit 'const' variables
Bug: tint:1580 Change-Id: Iea2a38814757f79ba645c94cfa89fe84b5d200d1 Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/94681 Reviewed-by: David Neto <dneto@google.com> Commit-Queue: Ben Clayton <bclayton@chromium.org> Kokoro: Kokoro <noreply+kokoro@google.com>
This commit is contained in:
parent
f90313396b
commit
fcf9fdcad8
|
@ -645,14 +645,6 @@ bool GeneratorImpl::EmitVariable(std::ostream& out, const ast::Variable* v) {
|
|||
|
||||
bool ok = Switch(
|
||||
v, //
|
||||
[&](const ast::Let* ) {
|
||||
out << "let";
|
||||
return true;
|
||||
},
|
||||
[&](const ast::Override* ) {
|
||||
out << "override";
|
||||
return true;
|
||||
},
|
||||
[&](const ast::Var* var) {
|
||||
out << "var";
|
||||
auto sc = var->declared_storage_class;
|
||||
|
@ -669,6 +661,18 @@ bool GeneratorImpl::EmitVariable(std::ostream& out, const ast::Variable* v) {
|
|||
}
|
||||
return true;
|
||||
},
|
||||
[&](const ast::Let*) {
|
||||
out << "let";
|
||||
return true;
|
||||
},
|
||||
[&](const ast::Override*) {
|
||||
out << "override";
|
||||
return true;
|
||||
},
|
||||
[&](const ast::Const*) {
|
||||
out << "const";
|
||||
return true;
|
||||
},
|
||||
[&](Default) {
|
||||
TINT_ICE(Writer, diagnostics_) << "unhandled variable type " << v->TypeInfo().name;
|
||||
return false;
|
||||
|
|
|
@ -131,6 +131,36 @@ TEST_F(WgslGeneratorImplTest, Emit_Global_Texture) {
|
|||
EXPECT_EQ(gen.result(), " @group(0) @binding(0) var t : texture_1d<f32>;\n");
|
||||
}
|
||||
|
||||
TEST_F(WgslGeneratorImplTest, Emit_GlobalLet) {
|
||||
GlobalLet("explicit", ty.f32(), Expr(1_f));
|
||||
GlobalLet("inferred", nullptr, Expr(1_f));
|
||||
|
||||
GeneratorImpl& gen = Build();
|
||||
|
||||
gen.increment_indent();
|
||||
|
||||
ASSERT_TRUE(gen.Generate()) << gen.error();
|
||||
EXPECT_EQ(gen.result(), R"( let explicit : f32 = 1.0f;
|
||||
|
||||
let inferred = 1.0f;
|
||||
)");
|
||||
}
|
||||
|
||||
TEST_F(WgslGeneratorImplTest, Emit_GlobalConst) {
|
||||
GlobalConst("explicit", ty.f32(), Expr(1_f));
|
||||
GlobalConst("inferred", nullptr, Expr(1_f));
|
||||
|
||||
GeneratorImpl& gen = Build();
|
||||
|
||||
gen.increment_indent();
|
||||
|
||||
ASSERT_TRUE(gen.Generate()) << gen.error();
|
||||
EXPECT_EQ(gen.result(), R"( const explicit : f32 = 1.0f;
|
||||
|
||||
const inferred = 1.0f;
|
||||
)");
|
||||
}
|
||||
|
||||
TEST_F(WgslGeneratorImplTest, Emit_OverridableConstants) {
|
||||
Override("a", ty.f32(), nullptr);
|
||||
Override("b", ty.f32(), nullptr, {Id(7u)});
|
||||
|
|
|
@ -111,9 +111,9 @@ TEST_F(WgslGeneratorImplTest, EmitVariable_Constructor) {
|
|||
EXPECT_EQ(out.str(), R"(var<private> a : f32 = 1.0f;)");
|
||||
}
|
||||
|
||||
TEST_F(WgslGeneratorImplTest, EmitVariable_Const) {
|
||||
TEST_F(WgslGeneratorImplTest, EmitVariable_Let_Explicit) {
|
||||
auto* v = Let("a", ty.f32(), Expr(1_f));
|
||||
WrapInFunction(Decl(v));
|
||||
WrapInFunction(v);
|
||||
|
||||
GeneratorImpl& gen = Build();
|
||||
|
||||
|
@ -122,5 +122,38 @@ TEST_F(WgslGeneratorImplTest, EmitVariable_Const) {
|
|||
EXPECT_EQ(out.str(), R"(let a : f32 = 1.0f;)");
|
||||
}
|
||||
|
||||
TEST_F(WgslGeneratorImplTest, EmitVariable_Let_Inferred) {
|
||||
auto* v = Let("a", nullptr, Expr(1_f));
|
||||
WrapInFunction(v);
|
||||
|
||||
GeneratorImpl& gen = Build();
|
||||
|
||||
std::stringstream out;
|
||||
ASSERT_TRUE(gen.EmitVariable(out, v)) << gen.error();
|
||||
EXPECT_EQ(out.str(), R"(let a = 1.0f;)");
|
||||
}
|
||||
|
||||
TEST_F(WgslGeneratorImplTest, EmitVariable_Const_Explicit) {
|
||||
auto* v = Const("a", ty.f32(), Expr(1_f));
|
||||
WrapInFunction(v);
|
||||
|
||||
GeneratorImpl& gen = Build();
|
||||
|
||||
std::stringstream out;
|
||||
ASSERT_TRUE(gen.EmitVariable(out, v)) << gen.error();
|
||||
EXPECT_EQ(out.str(), R"(const a : f32 = 1.0f;)");
|
||||
}
|
||||
|
||||
TEST_F(WgslGeneratorImplTest, EmitVariable_Const_Inferred) {
|
||||
auto* v = Const("a", nullptr, Expr(1_f));
|
||||
WrapInFunction(v);
|
||||
|
||||
GeneratorImpl& gen = Build();
|
||||
|
||||
std::stringstream out;
|
||||
ASSERT_TRUE(gen.EmitVariable(out, v)) << gen.error();
|
||||
EXPECT_EQ(out.str(), R"(const a = 1.0f;)");
|
||||
}
|
||||
|
||||
} // namespace
|
||||
} // namespace tint::writer::wgsl
|
||||
|
|
Loading…
Reference in New Issue