Add some GLSL zero initialization tests.

This CL adds tests for GLSL zero initialization of an array, array of
arrays and array of structs.

Bug: chromium:1367602
Change-Id: I4246512f9238dcccc02c9c181b7a211958491dad
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/103880
Commit-Queue: Ben Clayton <bclayton@google.com>
Reviewed-by: Ben Clayton <bclayton@google.com>
Auto-Submit: Dan Sinclair <dsinclair@chromium.org>
This commit is contained in:
dan sinclair 2022-09-27 20:44:06 +00:00 committed by Dawn LUCI CQ
parent 62f8e733b1
commit a33bc2c6f2
1 changed files with 69 additions and 0 deletions

View File

@ -367,6 +367,75 @@ void f() {
)");
}
TEST_F(GlslGeneratorImplTest_VariableDecl, Emit_VariableDeclStatement_Const_arr_f32_zero) {
auto* C = Const("C", Construct(ty.array<f32, 2>()));
Func("f", utils::Empty, ty.void_(),
utils::Vector{
Decl(C),
Decl(Let("l", Expr(C))),
});
GeneratorImpl& gen = Build();
ASSERT_TRUE(gen.Generate()) << gen.error();
EXPECT_EQ(gen.result(), R"(#version 310 es
void f() {
float l[2] = float[2](0.0f, 0.0f);
}
)");
}
TEST_F(GlslGeneratorImplTest_VariableDecl, Emit_VariableDeclStatement_Const_arr_arr_f32_zero) {
auto* C = Const("C", Construct(ty.array(ty.array<f32, 2>(), 3_i)));
Func("f", utils::Empty, ty.void_(),
utils::Vector{
Decl(C),
Decl(Let("l", Expr(C))),
});
GeneratorImpl& gen = Build();
ASSERT_TRUE(gen.Generate()) << gen.error();
EXPECT_EQ(gen.result(), R"(#version 310 es
void f() {
float l[3][2] = float[3][2](float[2](0.0f, 0.0f), float[2](0.0f, 0.0f), float[2](0.0f, 0.0f));
}
)");
}
TEST_F(GlslGeneratorImplTest_VariableDecl, Emit_VariableDeclStatement_Const_arr_struct_zero) {
Structure("S", utils::Vector{Member("a", ty.i32()), Member("b", ty.f32())});
auto* C = Const("C", Construct(ty.array(ty.type_name("S"), 2_i)));
Func("f", utils::Empty, ty.void_(),
utils::Vector{
Decl(C),
Decl(Let("l", Expr(C))),
});
GeneratorImpl& gen = Build();
ASSERT_TRUE(gen.Generate()) << gen.error();
EXPECT_EQ(gen.result(), R"(#version 310 es
struct S {
int a;
float b;
};
void f() {
S l[2] = S[2](S(0, 0.0f), S(0, 0.0f));
}
)");
}
TEST_F(GlslGeneratorImplTest_VariableDecl, Emit_VariableDeclStatement_Const_arr_vec2_bool) {
auto* C = Const("C", Construct(ty.array(ty.vec2<bool>(), 3_u), //
vec2<bool>(true, false), //