Shader/LangWriter: Make LangWriter able to output AST before sanitization as well
This commit is contained in:
@@ -31,6 +31,7 @@ external
|
||||
)";
|
||||
|
||||
Nz::ShaderAst::ModulePtr shaderModule = Nz::ShaderLang::Parse(nzslSource);
|
||||
shaderModule = SanitizeModule(*shaderModule);
|
||||
|
||||
SECTION("Nested AccessMember")
|
||||
{
|
||||
|
||||
@@ -51,6 +51,7 @@ fn main(input: In) -> FragOut
|
||||
)";
|
||||
|
||||
Nz::ShaderAst::ModulePtr shaderModule = Nz::ShaderLang::Parse(nzslSource);
|
||||
shaderModule = SanitizeModule(*shaderModule);
|
||||
|
||||
ExpectGLSL(*shaderModule, R"(
|
||||
void main()
|
||||
|
||||
@@ -36,6 +36,7 @@ fn main()
|
||||
)";
|
||||
|
||||
Nz::ShaderAst::ModulePtr shaderModule = Nz::ShaderLang::Parse(nzslSource);
|
||||
shaderModule = SanitizeModule(*shaderModule);
|
||||
|
||||
ExpectGLSL(*shaderModule, R"(
|
||||
void main()
|
||||
@@ -115,6 +116,7 @@ fn main()
|
||||
)";
|
||||
|
||||
Nz::ShaderAst::ModulePtr shaderModule = Nz::ShaderLang::Parse(nzslSource);
|
||||
shaderModule = SanitizeModule(*shaderModule);
|
||||
|
||||
ExpectGLSL(*shaderModule, R"(
|
||||
void main()
|
||||
@@ -189,6 +191,7 @@ fn main()
|
||||
)";
|
||||
|
||||
Nz::ShaderAst::ModulePtr shaderModule = Nz::ShaderLang::Parse(nzslSource);
|
||||
shaderModule = SanitizeModule(*shaderModule);
|
||||
|
||||
ExpectGLSL(*shaderModule, R"(
|
||||
void main()
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
void ExpectOutput(Nz::ShaderAst::Module& shaderModule, const Nz::ShaderAst::SanitizeVisitor::Options& options, std::string_view expectedOptimizedResult)
|
||||
{
|
||||
Nz::ShaderAst::ModulePtr sanitizedShader;
|
||||
REQUIRE_NOTHROW(sanitizedShader = Nz::ShaderAst::Sanitize(shaderModule, options));
|
||||
sanitizedShader = SanitizeModule(shaderModule, options);
|
||||
|
||||
ExpectNZSL(*sanitizedShader, expectedOptimizedResult);
|
||||
}
|
||||
|
||||
@@ -38,6 +38,7 @@ fn main()
|
||||
)";
|
||||
|
||||
Nz::ShaderAst::ModulePtr shaderModule = Nz::ShaderLang::Parse(nzslSource);
|
||||
shaderModule = SanitizeModule(*shaderModule);
|
||||
|
||||
ExpectGLSL(*shaderModule, R"(
|
||||
void main()
|
||||
@@ -112,7 +113,7 @@ fn main()
|
||||
)";
|
||||
|
||||
Nz::ShaderAst::ModulePtr shaderModule = Nz::ShaderLang::Parse(nzslSource);
|
||||
|
||||
shaderModule = SanitizeModule(*shaderModule);
|
||||
|
||||
ExpectGLSL(*shaderModule, R"(
|
||||
void main()
|
||||
@@ -190,7 +191,7 @@ fn main()
|
||||
)";
|
||||
|
||||
Nz::ShaderAst::ModulePtr shaderModule = Nz::ShaderLang::Parse(nzslSource);
|
||||
|
||||
shaderModule = SanitizeModule(*shaderModule);
|
||||
|
||||
ExpectGLSL(*shaderModule, R"(
|
||||
void main()
|
||||
@@ -282,7 +283,7 @@ fn main()
|
||||
)";
|
||||
|
||||
Nz::ShaderAst::ModulePtr shaderModule = Nz::ShaderLang::Parse(nzslSource);
|
||||
|
||||
shaderModule = SanitizeModule(*shaderModule);
|
||||
|
||||
ExpectGLSL(*shaderModule, R"(
|
||||
void main()
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
#include <Nazara/Core/File.hpp>
|
||||
#include <Nazara/Core/StringExt.hpp>
|
||||
#include <Nazara/Shader/DirectoryModuleResolver.hpp>
|
||||
#include <Nazara/Shader/LangWriter.hpp>
|
||||
#include <Nazara/Shader/ShaderBuilder.hpp>
|
||||
#include <Nazara/Shader/ShaderLangParser.hpp>
|
||||
#include <Nazara/Shader/Ast/SanitizeVisitor.hpp>
|
||||
@@ -74,7 +75,7 @@ fn main(input: InputData) -> OutputData
|
||||
Nz::ShaderAst::SanitizeVisitor::Options sanitizeOpt;
|
||||
sanitizeOpt.moduleResolver = directoryModuleResolver;
|
||||
|
||||
REQUIRE_NOTHROW(shaderModule = Nz::ShaderAst::Sanitize(*shaderModule, sanitizeOpt));
|
||||
shaderModule = SanitizeModule(*shaderModule, sanitizeOpt);
|
||||
|
||||
ExpectGLSL(*shaderModule, R"(
|
||||
// Module ad3aed6e-0619-4a26-b5ce-abc2ec0836c4
|
||||
@@ -279,7 +280,7 @@ fn main(input: InputData) -> OutputData
|
||||
Nz::ShaderAst::SanitizeVisitor::Options sanitizeOpt;
|
||||
sanitizeOpt.moduleResolver = directoryModuleResolver;
|
||||
|
||||
REQUIRE_NOTHROW(shaderModule = Nz::ShaderAst::Sanitize(*shaderModule, sanitizeOpt));
|
||||
shaderModule = SanitizeModule(*shaderModule, sanitizeOpt);
|
||||
|
||||
ExpectGLSL(*shaderModule, R"(
|
||||
// Module ad3aed6e-0619-4a26-b5ce-abc2ec0836c4
|
||||
|
||||
@@ -19,7 +19,7 @@ void PropagateConstantAndExpect(std::string_view sourceCode, std::string_view ex
|
||||
{
|
||||
Nz::ShaderAst::ModulePtr shaderModule;
|
||||
REQUIRE_NOTHROW(shaderModule = Nz::ShaderLang::Parse(sourceCode));
|
||||
REQUIRE_NOTHROW(shaderModule = Nz::ShaderAst::Sanitize(*shaderModule));
|
||||
shaderModule = SanitizeModule(*shaderModule);
|
||||
REQUIRE_NOTHROW(shaderModule = Nz::ShaderAst::PropagateConstants(*shaderModule));
|
||||
|
||||
ExpectNZSL(*shaderModule, expectedOptimizedResult);
|
||||
@@ -32,7 +32,7 @@ void EliminateUnusedAndExpect(std::string_view sourceCode, std::string_view expe
|
||||
|
||||
Nz::ShaderAst::ModulePtr shaderModule;
|
||||
REQUIRE_NOTHROW(shaderModule = Nz::ShaderLang::Parse(sourceCode));
|
||||
REQUIRE_NOTHROW(shaderModule = Nz::ShaderAst::Sanitize(*shaderModule));
|
||||
shaderModule = SanitizeModule(*shaderModule);
|
||||
REQUIRE_NOTHROW(shaderModule = Nz::ShaderAst::EliminateUnusedPass(*shaderModule, depConfig));
|
||||
|
||||
ExpectNZSL(*shaderModule, expectedOptimizedResult);
|
||||
|
||||
@@ -272,3 +272,31 @@ void ExpectSPIRV(const Nz::ShaderAst::Module& shaderModule, std::string_view exp
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Nz::ShaderAst::ModulePtr SanitizeModule(const Nz::ShaderAst::Module& module)
|
||||
{
|
||||
Nz::ShaderAst::SanitizeVisitor::Options defaultOptions;
|
||||
return SanitizeModule(module, defaultOptions);
|
||||
}
|
||||
|
||||
Nz::ShaderAst::ModulePtr SanitizeModule(const Nz::ShaderAst::Module& module, const Nz::ShaderAst::SanitizeVisitor::Options& options)
|
||||
{
|
||||
Nz::ShaderAst::ModulePtr shaderModule;
|
||||
WHEN("We sanitize the shader")
|
||||
{
|
||||
REQUIRE_NOTHROW(shaderModule = Nz::ShaderAst::Sanitize(module, options));
|
||||
}
|
||||
|
||||
WHEN("We output NZSL and try to parse it again")
|
||||
{
|
||||
Nz::LangWriter langWriter;
|
||||
std::string outputCode = langWriter.Generate((shaderModule) ? *shaderModule : module);
|
||||
REQUIRE_NOTHROW(shaderModule = Nz::ShaderAst::Sanitize(*Nz::ShaderLang::Parse(outputCode), options));
|
||||
}
|
||||
|
||||
// Ensure sanitization
|
||||
if (!shaderModule)
|
||||
REQUIRE_NOTHROW(shaderModule = Nz::ShaderAst::Sanitize(module, options));
|
||||
|
||||
return shaderModule;
|
||||
}
|
||||
|
||||
@@ -4,10 +4,14 @@
|
||||
#define NAZARA_UNITTESTS_SHADER_SHADERUTILS_HPP
|
||||
|
||||
#include <Nazara/Shader/Ast/Module.hpp>
|
||||
#include <Nazara/Shader/Ast/SanitizeVisitor.hpp>
|
||||
#include <string>
|
||||
|
||||
void ExpectGLSL(const Nz::ShaderAst::Module& shader, std::string_view expectedOutput);
|
||||
void ExpectNZSL(const Nz::ShaderAst::Module& shader, std::string_view expectedOutput);
|
||||
void ExpectSPIRV(const Nz::ShaderAst::Module& shader, std::string_view expectedOutput, bool outputParameter = false);
|
||||
|
||||
Nz::ShaderAst::ModulePtr SanitizeModule(const Nz::ShaderAst::Module& module);
|
||||
Nz::ShaderAst::ModulePtr SanitizeModule(const Nz::ShaderAst::Module& module, const Nz::ShaderAst::SanitizeVisitor::Options& options);
|
||||
|
||||
#endif
|
||||
|
||||
@@ -25,6 +25,7 @@ fn main()
|
||||
)";
|
||||
|
||||
Nz::ShaderAst::ModulePtr shaderModule = Nz::ShaderLang::Parse(nzslSource);
|
||||
shaderModule = SanitizeModule(*shaderModule);
|
||||
|
||||
ExpectGLSL(*shaderModule, R"(
|
||||
void main()
|
||||
@@ -72,6 +73,7 @@ fn main()
|
||||
)";
|
||||
|
||||
Nz::ShaderAst::ModulePtr shaderModule = Nz::ShaderLang::Parse(nzslSource);
|
||||
shaderModule = SanitizeModule(*shaderModule);
|
||||
|
||||
ExpectGLSL(*shaderModule, R"(
|
||||
void main()
|
||||
@@ -122,6 +124,7 @@ fn main()
|
||||
)";
|
||||
|
||||
Nz::ShaderAst::ModulePtr shaderModule = Nz::ShaderLang::Parse(nzslSource);
|
||||
shaderModule = SanitizeModule(*shaderModule);
|
||||
|
||||
ExpectGLSL(*shaderModule, R"(
|
||||
void main()
|
||||
@@ -168,6 +171,7 @@ fn main()
|
||||
)";
|
||||
|
||||
Nz::ShaderAst::ModulePtr shaderModule = Nz::ShaderLang::Parse(nzslSource);
|
||||
shaderModule = SanitizeModule(*shaderModule);
|
||||
|
||||
ExpectGLSL(*shaderModule, R"(
|
||||
void main()
|
||||
@@ -221,6 +225,7 @@ fn main()
|
||||
)";
|
||||
|
||||
Nz::ShaderAst::ModulePtr shaderModule = Nz::ShaderLang::Parse(nzslSource);
|
||||
shaderModule = SanitizeModule(*shaderModule);
|
||||
|
||||
ExpectGLSL(*shaderModule, R"(
|
||||
void main()
|
||||
@@ -272,6 +277,7 @@ fn main()
|
||||
)";
|
||||
|
||||
Nz::ShaderAst::ModulePtr shaderModule = Nz::ShaderLang::Parse(nzslSource);
|
||||
shaderModule = SanitizeModule(*shaderModule);
|
||||
|
||||
ExpectGLSL(*shaderModule, R"(
|
||||
void main()
|
||||
|
||||
Reference in New Issue
Block a user