Shader: Add support for for-each statements and improve arrays

This commit is contained in:
Jérôme Leclercq
2022-01-02 22:02:11 +01:00
parent aac6e38da2
commit 4fe44339c5
30 changed files with 712 additions and 93 deletions

View File

@@ -74,6 +74,55 @@ fn main()
}
}
)");
}
WHEN("reducing for-each to while")
{
std::string_view nzslSource = R"(
struct inputStruct
{
value: [f32; 10]
}
external
{
[set(0), binding(0)] data: uniform<inputStruct>
}
[entry(frag)]
fn main()
{
let x = 0.0;
for v in data.value
{
x += v;
}
}
)";
Nz::ShaderAst::StatementPtr shader = Nz::ShaderLang::Parse(nzslSource);
Nz::ShaderAst::SanitizeVisitor::Options options;
options.reduceLoopsToWhile = true;
REQUIRE_NOTHROW(shader = Nz::ShaderAst::Sanitize(*shader, options));
ExpectNZSL(*shader, R"(
[entry(frag)]
fn main()
{
let x: f32 = 0.000000;
let i: u32 = 0;
while (i < (10))
{
let v: f32 = data.value[i];
x += v;
i += 1;
}
}
)");