Shader: Change module system (no longer based on path)

This commit is contained in:
Jérôme Leclercq
2022-03-13 15:07:43 +01:00
parent 80f9556f8c
commit e40e8eb204
40 changed files with 224 additions and 271 deletions

View File

@@ -1,7 +1,7 @@
#include <Engine/Shader/ShaderUtils.hpp>
#include <Nazara/Core/File.hpp>
#include <Nazara/Core/StringExt.hpp>
#include <Nazara/Shader/DirectoryModuleResolver.hpp>
#include <Nazara/Shader/FilesystemModuleResolver.hpp>
#include <Nazara/Shader/LangWriter.hpp>
#include <Nazara/Shader/ShaderBuilder.hpp>
#include <Nazara/Shader/ShaderLangParser.hpp>
@@ -17,7 +17,7 @@ TEST_CASE("Modules", "[Shader]")
std::string_view importedSource = R"(
[nzsl_version("1.0")]
[uuid("ad3aed6e-0619-4a26-b5ce-abc2ec0836c4")]
module;
module SimpleModule;
[layout(std140)]
struct Data
@@ -69,8 +69,8 @@ fn main(input: InputData) -> OutputData
Nz::ShaderAst::ModulePtr shaderModule = Nz::ShaderLang::Parse(shaderSource);
auto directoryModuleResolver = std::make_shared<Nz::DirectoryModuleResolver>();
directoryModuleResolver->RegisterModuleFile("SimpleModule", importedSource.data(), importedSource.size());
auto directoryModuleResolver = std::make_shared<Nz::FilesystemModuleResolver>();
directoryModuleResolver->RegisterModule(importedSource);
Nz::ShaderAst::SanitizeVisitor::Options sanitizeOpt;
sanitizeOpt.moduleResolver = directoryModuleResolver;
@@ -202,7 +202,7 @@ OpFunctionEnd)");
std::string_view dataModule = R"(
[nzsl_version("1.0")]
[uuid("ad3aed6e-0619-4a26-b5ce-abc2ec0836c4")]
module;
module Modules.Data;
fn dummy() {}
@@ -217,9 +217,9 @@ struct Data
std::string_view blockModule = R"(
[nzsl_version("1.0")]
[uuid("7a548506-89e6-4944-897f-4f695a8bca01")]
module;
module Modules.Block;
import Modules/Data;
import Modules.Data;
[export]
[layout(std140)]
@@ -234,7 +234,7 @@ struct Unused {}
std::string_view inputOutputModule = R"(
[nzsl_version("1.0")]
[uuid("e66c6e98-fc37-4390-a7e1-c81508ff8e49")]
module;
module Modules.InputOutput;
[export]
struct InputData
@@ -253,8 +253,8 @@ struct OutputData
[nzsl_version("1.0")]
module;
import Modules/Block;
import Modules/InputOutput;
import Modules.Block;
import Modules.InputOutput;
external
{
@@ -272,10 +272,10 @@ fn main(input: InputData) -> OutputData
Nz::ShaderAst::ModulePtr shaderModule = Nz::ShaderLang::Parse(shaderSource);
auto directoryModuleResolver = std::make_shared<Nz::DirectoryModuleResolver>();
directoryModuleResolver->RegisterModuleFile("Modules/Data", dataModule.data(), dataModule.size());
directoryModuleResolver->RegisterModuleFile("Modules/Block", blockModule.data(), blockModule.size());
directoryModuleResolver->RegisterModuleFile("Modules/InputOutput", inputOutputModule.data(), inputOutputModule.size());
auto directoryModuleResolver = std::make_shared<Nz::FilesystemModuleResolver>();
directoryModuleResolver->RegisterModule(dataModule);
directoryModuleResolver->RegisterModule(blockModule);
directoryModuleResolver->RegisterModule(inputOutputModule);
Nz::ShaderAst::SanitizeVisitor::Options sanitizeOpt;
sanitizeOpt.moduleResolver = directoryModuleResolver;