From b5fa822e86509ec2a332fb50a3ce53085577e6e7 Mon Sep 17 00:00:00 2001 From: Ben Doherty Date: Tue, 20 Nov 2018 12:30:26 -0800 Subject: [PATCH] Move GLSLPostProcessor and dependencies into filamat (#500) * Move GLSLPostProcessor into filamat --- CMakeLists.txt | 18 +-- libs/filamat/CMakeLists.txt | 34 +++- .../filamat/include/filamat}/Enums.h | 4 +- .../filamat/include/filamat/MaterialBuilder.h | 17 ++ .../filamat}/PostprocessMaterialBuilder.h | 16 +- .../filamat/include/filamat}/sca/ASTHelpers.h | 4 +- .../filamat/include/filamat}/sca/GLSLTools.h | 7 +- .../src/matc => libs/filamat/src}/Enums.cpp | 8 +- .../filamat/src}/GLSLPostProcessor.cpp | 43 +++--- .../filamat/src}/GLSLPostProcessor.h | 11 +- libs/filamat/src/MaterialBuilder.cpp | 21 +++ .../src}/PostprocessMaterialBuilder.cpp | 24 ++- .../filamat/src}/sca/ASTHelpers.cpp | 10 +- .../filamat/src}/sca/GLSLTools.cpp | 19 ++- .../filamat/src}/sca/builtinResource.h | 0 tools/matc/CMakeLists.txt | 45 ++---- tools/matc/src/matc/Config.h | 8 +- tools/matc/src/matc/MaterialCompiler.cpp | 13 +- tools/matc/src/matc/ParametersProcessor.cpp | 2 +- .../src/matc/PostprocessMaterialCompiler.cpp | 12 +- tools/matc/tests/test_lexersAndParsers.cpp | 5 +- tools/matc/tests/test_matc.cpp | 146 +++++++++--------- 22 files changed, 262 insertions(+), 205 deletions(-) rename {tools/matc/src/matc => libs/filamat/include/filamat}/Enums.h (98%) rename {tools/matc/src/matc => libs/filamat/include/filamat}/PostprocessMaterialBuilder.h (83%) rename {tools/matc/src/matc => libs/filamat/include/filamat}/sca/ASTHelpers.h (98%) rename {tools/matc/src/matc => libs/filamat/include/filamat}/sca/GLSLTools.h (97%) rename {tools/matc/src/matc => libs/filamat/src}/Enums.cpp (97%) rename {tools/matc/src/matc/sca => libs/filamat/src}/GLSLPostProcessor.cpp (92%) rename {tools/matc/src/matc/sca => libs/filamat/src}/GLSLPostProcessor.h (85%) rename {tools/matc/src/matc => libs/filamat/src}/PostprocessMaterialBuilder.cpp (89%) rename {tools/matc/src/matc => libs/filamat/src}/sca/ASTHelpers.cpp (99%) rename {tools/matc/src/matc => libs/filamat/src}/sca/GLSLTools.cpp (96%) rename {tools/matc/src/matc => libs/filamat/src}/sca/builtinResource.h (100%) diff --git a/CMakeLists.txt b/CMakeLists.txt index 6bcf9121ab..0cb7122c55 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -269,7 +269,6 @@ endif() add_subdirectory(${EXTERNAL}/libgtest/tnt) add_subdirectory(${LIBRARIES}/filabridge) add_subdirectory(${LIBRARIES}/filaflat) -add_subdirectory(${LIBRARIES}/filamat) add_subdirectory(${LIBRARIES}/filameshio) add_subdirectory(${LIBRARIES}/image) add_subdirectory(${LIBRARIES}/math) @@ -295,13 +294,20 @@ if (WEBGL) add_subdirectory(web/samples) add_subdirectory(web/docs) - add_subdirectory(${LIBRARIES}/filagui) - add_subdirectory(${EXTERNAL}/imgui/tnt) add_subdirectory(${EXTERNAL}/stb/tnt) endif() if (NOT ANDROID AND NOT WEBGL AND NOT IOS) + # spirv-tools must come before filamat, as filamat relies on the presence of the + # spirv-tools_SOURCE_DIR variable. + add_subdirectory(${EXTERNAL}/spirv-tools) + add_subdirectory(${EXTERNAL}/glslang/tnt) + add_subdirectory(${EXTERNAL}/spirv-cross/tnt) + + # filamat is only needed for samples and matc + add_subdirectory(${LIBRARIES}/filamat) + add_subdirectory(${FILAMENT}/samples) add_subdirectory(${LIBRARIES}/bluegl) @@ -309,21 +315,15 @@ if (NOT ANDROID AND NOT WEBGL AND NOT IOS) add_subdirectory(${LIBRARIES}/imageio) add_subdirectory(${FILAMENT}/java) - - # must come first because of glslang - add_subdirectory(${EXTERNAL}/spirv-tools) - add_subdirectory(${EXTERNAL}/astcenc/tnt) add_subdirectory(${EXTERNAL}/etc2comp) add_subdirectory(${EXTERNAL}/getopt) - add_subdirectory(${EXTERNAL}/glslang/tnt) add_subdirectory(${EXTERNAL}/imgui/tnt) add_subdirectory(${EXTERNAL}/libassimp/tnt) add_subdirectory(${EXTERNAL}/libpng/tnt) add_subdirectory(${EXTERNAL}/libsdl2/tnt) add_subdirectory(${EXTERNAL}/libz/tnt) add_subdirectory(${EXTERNAL}/skylight/tnt) - add_subdirectory(${EXTERNAL}/spirv-cross/tnt) add_subdirectory(${EXTERNAL}/stb/tnt) add_subdirectory(${EXTERNAL}/tinyexr/tnt) diff --git a/libs/filamat/CMakeLists.txt b/libs/filamat/CMakeLists.txt index 50eb915494..07673b17c6 100644 --- a/libs/filamat/CMakeLists.txt +++ b/libs/filamat/CMakeLists.txt @@ -8,8 +8,12 @@ set(PUBLIC_HDR_DIR include) # Sources and headers # ================================================================================================== set(HDRS + include/filamat/sca/ASTHelpers.h + include/filamat/sca/GLSLTools.h + include/filamat/Enums.h include/filamat/MaterialBuilder.h - include/filamat/Package.h) + include/filamat/Package.h + include/filamat/PostprocessMaterialBuilder.h) set(PRIVATE_HDRS src/eiff/BlobDictionary.h @@ -25,7 +29,9 @@ set(PRIVATE_HDRS src/eiff/MaterialSpirvChunk.h src/eiff/ShaderEntry.h src/eiff/SimpleFieldChunk.h - src/shaders/Shaders.h) + src/sca/builtinResource.h + src/shaders/Shaders.h + src/GLSLPostProcessor.h) set(SRCS src/eiff/BlobDictionary.cpp @@ -38,9 +44,14 @@ set(SRCS src/eiff/MaterialSpirvChunk.cpp src/eiff/MaterialInterfaceBlockChunk.cpp src/eiff/SimpleFieldChunk.cpp + src/sca/ASTHelpers.cpp + src/sca/GLSLTools.cpp src/shaders/CodeGenerator.cpp src/shaders/ShaderGenerator.cpp - src/MaterialBuilder.cpp) + src/Enums.cpp + src/GLSLPostProcessor.cpp + src/MaterialBuilder.cpp + src/PostprocessMaterialBuilder.cpp) # ================================================================================================== # Include and target definitions @@ -53,9 +64,26 @@ target_include_directories(${TARGET} PUBLIC ${PUBLIC_HDR_DIR}) target_link_libraries(${TARGET} shaders filabridge filaflat utils smol-v) +# We are being naughty and accessing private headers here +# For spirv-tools, we're just following glslang's example +target_include_directories(${TARGET} PRIVATE ${spirv-tools_SOURCE_DIR}/include) + +# glslang libraries have circular dependencies. To make sure the proper object are part of the link +# we need to force archive re-scan on new symbol dependencies via start/end-group. +# Read more about this here https://eli.thegreenplace.net/2013/07/09/library-order-in-static-linking +if (APPLE) + target_link_libraries(${TARGET} glslang SPIRV SPVRemapper SPIRV-Tools-opt spirv-cross-glsl) +else() + target_link_libraries(${TARGET} + -Wl,--start-group glslang SPIRV SPVRemapper SPIRV-Tools-opt spirv-cross-glsl -Wl,--end-group) +endif() + # ================================================================================================== # Compiler flags # ================================================================================================== +# this must match options enabled in glslang's CMakeLists.txt +target_compile_options(${TARGET} PRIVATE -DAMD_EXTENSIONS -DNV_EXTENSIONS ) + target_compile_options(${TARGET} PRIVATE # TODO: use hidden by default and expose what we need (we'll need to do the same in dependencies) # -fvisibility=hidden diff --git a/tools/matc/src/matc/Enums.h b/libs/filamat/include/filamat/Enums.h similarity index 98% rename from tools/matc/src/matc/Enums.h rename to libs/filamat/include/filamat/Enums.h index a6aca28446..4d266ef602 100644 --- a/tools/matc/src/matc/Enums.h +++ b/libs/filamat/include/filamat/Enums.h @@ -23,7 +23,7 @@ #include -namespace matc { +namespace filamat { using Property = filamat::MaterialBuilder::Property; using UniformType = filamat::MaterialBuilder::UniformType; @@ -83,6 +83,6 @@ std::string Enums::toString(T t) noexcept { return ""; } -} +} // namespace filamat #endif //TNT_ENUMMANAGER_H diff --git a/libs/filamat/include/filamat/MaterialBuilder.h b/libs/filamat/include/filamat/MaterialBuilder.h index b824b8de64..cec2707306 100644 --- a/libs/filamat/include/filamat/MaterialBuilder.h +++ b/libs/filamat/include/filamat/MaterialBuilder.h @@ -63,6 +63,13 @@ public: VULKAN, }; + enum class Optimization { + NONE, + PREPROCESSOR, + SIZE, + PERFORMANCE + }; + protected: // Looks at platform and target API, then decides on shader models and output formats. void prepare(); @@ -70,6 +77,8 @@ protected: using ShaderModel = filament::driver::ShaderModel; Platform mPlatform = Platform::DESKTOP; TargetApi mTargetApi = TargetApi::OPENGL; + Optimization mOptimization = Optimization::NONE; + bool mPrintShaders = false; TargetApi mCodeGenTargetApi = TargetApi::OPENGL; utils::bitset32 mShaderModels; struct CodeGenParams { @@ -186,6 +195,14 @@ public: // (used to generate code) and final output representations (spirv and/or text). MaterialBuilder& targetApi(TargetApi targetApi) noexcept; + // specifies the level of optimization to apply to the shaders (default is NONE) + MaterialBuilder& optimization(Optimization optimization) noexcept; + + // if true, will output the generated GLSL shader code to stdout + // TODO: this is present here for matc's "--print" flag, but ideally does not belong inside + // MaterialBuilder + MaterialBuilder& printShaders(bool printShaders) noexcept; + // specifies vulkan vs opengl; this method can be used to override which target API is used // during the code generation step. This can be useful when the post-processor uses a // different intermediate representation. diff --git a/tools/matc/src/matc/PostprocessMaterialBuilder.h b/libs/filamat/include/filamat/PostprocessMaterialBuilder.h similarity index 83% rename from tools/matc/src/matc/PostprocessMaterialBuilder.h rename to libs/filamat/include/filamat/PostprocessMaterialBuilder.h index ba8833fe9f..e08999a189 100644 --- a/tools/matc/src/matc/PostprocessMaterialBuilder.h +++ b/libs/filamat/include/filamat/PostprocessMaterialBuilder.h @@ -14,8 +14,8 @@ * limitations under the License. */ -#ifndef TNT_MATC_POSTPROCESS_PACKAGE_BUILDER_H -#define TNT_MATC_POSTPROCESS_PACKAGE_BUILDER_H +#ifndef TNT_FILAMAT_POSTPROCESS_PACKAGE_BUILDER_H +#define TNT_FILAMAT_POSTPROCESS_PACKAGE_BUILDER_H #include #include @@ -58,9 +58,19 @@ public: return *this; } + PostprocessMaterialBuilder& optimization(Optimization optimization) noexcept { + mOptimization = optimization; + return *this; + } + + PostprocessMaterialBuilder& printShaders(bool printShaders) noexcept { + mPrintShaders = printShaders; + return *this; + } + private: PostProcessCallBack mPostprocessorCallback = nullptr; }; } // namespace -#endif // TNT_MATC_POSTPROCESS_PACKAGE_BUILDER_H +#endif // TNT_FILAMAT_POSTPROCESS_PACKAGE_BUILDER_H diff --git a/tools/matc/src/matc/sca/ASTHelpers.h b/libs/filamat/include/filamat/sca/ASTHelpers.h similarity index 98% rename from tools/matc/src/matc/sca/ASTHelpers.h rename to libs/filamat/include/filamat/sca/ASTHelpers.h index c84a76db3a..d1ee056369 100644 --- a/tools/matc/src/matc/sca/ASTHelpers.h +++ b/libs/filamat/include/filamat/sca/ASTHelpers.h @@ -26,7 +26,8 @@ class TIntermNode; -namespace matc { +using namespace filamat; + namespace ASTUtils { // Extract the name of a function from its glslang mangled signature. e.g: Returns prepareMaterial @@ -71,5 +72,4 @@ void getFunctionParameters(glslang::TIntermAggregate* func, std::vector #include -#include class TIntermNode; namespace glslang { class TPoolAllocator; } -namespace matc { +namespace filamat { // Used for symbol tracking during static code analysis. struct Access { @@ -149,7 +148,7 @@ public: static EShMessages glslangFlagsFromTargetApi(filamat::MaterialBuilder::TargetApi targetApi); static void prepareShaderParser(glslang::TShader& shader, EShLanguage language, - int version, Config::Optimization optimization); + int version, filamat::MaterialBuilder::Optimization optimization); private: @@ -176,6 +175,6 @@ private: }; -} // namespace matc +} // namespace filamat #endif //TNT_STATICCODEANALYZER_H diff --git a/tools/matc/src/matc/Enums.cpp b/libs/filamat/src/Enums.cpp similarity index 97% rename from tools/matc/src/matc/Enums.cpp rename to libs/filamat/src/Enums.cpp index f04b07d91f..d808722ad4 100644 --- a/tools/matc/src/matc/Enums.cpp +++ b/libs/filamat/src/Enums.cpp @@ -14,11 +14,11 @@ * limitations under the License. */ -#include "Enums.h" +#include "filamat/Enums.h" -#include +#include "filamat/MaterialBuilder.h" -namespace matc { +namespace filamat { std::unordered_map Enums::mStringToProperty = { { "baseColor", Property::BASE_COLOR }, @@ -107,4 +107,4 @@ std::unordered_map& Enums::getMap() n return mStringToSamplerFormat; }; -} +} // namespace filamat diff --git a/tools/matc/src/matc/sca/GLSLPostProcessor.cpp b/libs/filamat/src/GLSLPostProcessor.cpp similarity index 92% rename from tools/matc/src/matc/sca/GLSLPostProcessor.cpp rename to libs/filamat/src/GLSLPostProcessor.cpp index b5bf1981c0..5f19841347 100644 --- a/tools/matc/src/matc/sca/GLSLPostProcessor.cpp +++ b/libs/filamat/src/GLSLPostProcessor.cpp @@ -26,16 +26,18 @@ #include -#include "builtinResource.h" -#include "GLSLTools.h" +#include "sca/builtinResource.h" +#include "filamat/sca/GLSLTools.h" using namespace glslang; using namespace spirv_cross; using namespace spvtools; -namespace matc { +namespace filamat { + +GLSLPostProcessor::GLSLPostProcessor(MaterialBuilder::Optimization optimization, bool printShaders) + : mOptimization(optimization), mPrintShaders(printShaders) { -GLSLPostProcessor::GLSLPostProcessor(const Config& config): mConfig(config) { } GLSLPostProcessor::~GLSLPostProcessor() { @@ -129,12 +131,11 @@ bool GLSLPostProcessor::process(const std::string& inputShader, std::string* outputGlsl, SpirvBlob* outputSpirv) { // If TargetApi is Vulkan, then we need post-processing even if there's no optimization. - using TargetApi = Config::TargetApi; + using TargetApi = MaterialBuilder::TargetApi; const TargetApi targetApi = outputSpirv ? TargetApi::VULKAN : TargetApi::OPENGL; - if (targetApi == TargetApi::OPENGL && - mConfig.getOptimizationLevel() == Config::Optimization::NONE) { + if (targetApi == TargetApi::OPENGL && mOptimization == MaterialBuilder::Optimization::NONE) { *outputGlsl = inputShader; - if (mConfig.printShaders()) { + if (mPrintShaders) { std::cout << *outputGlsl << std::endl; } return true; @@ -159,7 +160,7 @@ bool GLSLPostProcessor::process(const std::string& inputShader, tShader.setStrings(&shaderCString, 1); mLangVersion = GLSLTools::glslangVersionFromShaderModel(shaderModel); - GLSLTools::prepareShaderParser(tShader, mShLang, mLangVersion, mConfig.getOptimizationLevel()); + GLSLTools::prepareShaderParser(tShader, mShLang, mLangVersion, mOptimization); EShMessages msg = GLSLTools::glslangFlagsFromTargetApi(targetApi); bool ok = tShader.parse(&DefaultTBuiltInResource, mLangVersion, false, msg); if (!ok) { @@ -176,8 +177,8 @@ bool GLSLPostProcessor::process(const std::string& inputShader, return false; } - switch (mConfig.getOptimizationLevel()) { - case Config::Optimization::NONE: + switch (mOptimization) { + case MaterialBuilder::Optimization::NONE: if (mSpirvOutput) { GlslangToSpv(*program.getIntermediate(mShLang), *mSpirvOutput); } else { @@ -185,18 +186,18 @@ bool GLSLPostProcessor::process(const std::string& inputShader, << std::endl; } break; - case Config::Optimization::PREPROCESSOR: + case MaterialBuilder::Optimization::PREPROCESSOR: preprocessOptimization(tShader, shaderModel); break; - case Config::Optimization::SIZE: - case Config::Optimization::PERFORMANCE: + case MaterialBuilder::Optimization::SIZE: + case MaterialBuilder::Optimization::PERFORMANCE: fullOptimization(tShader, shaderModel); break; } if (mGlslOutput) { *mGlslOutput = shrinkString(*mGlslOutput); - if (mConfig.printShaders()) { + if (mPrintShaders) { std::cout << *mGlslOutput << std::endl; } } @@ -205,7 +206,7 @@ bool GLSLPostProcessor::process(const std::string& inputShader, void GLSLPostProcessor::preprocessOptimization(glslang::TShader& tShader, const filament::driver::ShaderModel shaderModel) const { - using TargetApi = Config::TargetApi; + using TargetApi = MaterialBuilder::TargetApi; std::string glsl; TShader::ForbidIncluder forbidIncluder; @@ -225,8 +226,7 @@ void GLSLPostProcessor::preprocessOptimization(glslang::TShader& tShader, TShader spirvShader(mShLang); const char* shaderCString = glsl.c_str(); spirvShader.setStrings(&shaderCString, 1); - GLSLTools::prepareShaderParser(spirvShader, mShLang, mLangVersion, - mConfig.getOptimizationLevel()); + GLSLTools::prepareShaderParser(spirvShader, mShLang, mLangVersion, mOptimization); ok = spirvShader.parse(&DefaultTBuiltInResource, mLangVersion, false, msg); program.addShader(&spirvShader); // Even though we only have a single shader stage, linking is still necessary to finalize @@ -258,10 +258,9 @@ void GLSLPostProcessor::fullOptimization(const TShader& tShader, std::cerr << stringifySpvOptimizerMessage(level, source, position, message) << std::endl; }); - Config::Optimization optimizationLevel = mConfig.getOptimizationLevel(); - if (optimizationLevel == Config::Optimization::SIZE) { + if (mOptimization == MaterialBuilder::Optimization::SIZE) { registerSizePasses(optimizer); - } else if (optimizationLevel == Config::Optimization::PERFORMANCE) { + } else if (mOptimization == MaterialBuilder::Optimization::PERFORMANCE) { registerPerformancePasses(optimizer); } @@ -361,4 +360,4 @@ void GLSLPostProcessor::registerSizePasses(Optimizer& optimizer) const { .RegisterPass(CreateAggressiveDCEPass()); } -} // namespace matc +} // namespace filamat diff --git a/tools/matc/src/matc/sca/GLSLPostProcessor.h b/libs/filamat/src/GLSLPostProcessor.h similarity index 85% rename from tools/matc/src/matc/sca/GLSLPostProcessor.h rename to libs/filamat/src/GLSLPostProcessor.h index bbdd8223fa..830edaa2d8 100644 --- a/tools/matc/src/matc/sca/GLSLPostProcessor.h +++ b/libs/filamat/src/GLSLPostProcessor.h @@ -22,17 +22,17 @@ #include -#include +#include "filamat/MaterialBuilder.h" // for MaterialBuilder:: enums #include #include -namespace matc { +namespace filamat { class GLSLPostProcessor { public: - GLSLPostProcessor(const Config& config); + GLSLPostProcessor(MaterialBuilder::Optimization optimization, bool printShaders); ~GLSLPostProcessor(); @@ -51,13 +51,14 @@ private: void registerSizePasses(spvtools::Optimizer& optimizer) const; void registerPerformancePasses(spvtools::Optimizer& optimizer) const; - const Config& mConfig; + const filamat::MaterialBuilder::Optimization mOptimization; + const bool mPrintShaders; std::string* mGlslOutput = nullptr; SpirvBlob* mSpirvOutput = nullptr; EShLanguage mShLang = EShLangFragment; int mLangVersion = 0; }; -} // namespace matc +} // namespace filamat #endif //TNT_GLSLPOSTPROCESSOR_H diff --git a/libs/filamat/src/MaterialBuilder.cpp b/libs/filamat/src/MaterialBuilder.cpp index a37a239e51..03a7613598 100644 --- a/libs/filamat/src/MaterialBuilder.cpp +++ b/libs/filamat/src/MaterialBuilder.cpp @@ -26,6 +26,8 @@ #include +#include "GLSLPostProcessor.h" + #include "shaders/MaterialInfo.h" #include "shaders/ShaderGenerator.h" @@ -39,6 +41,8 @@ #include "eiff/DictionaryGlslChunk.h" #include "eiff/DictionarySpirvChunk.h" +#include "filamat/sca/GLSLTools.h" + using namespace utils; namespace filamat { @@ -84,6 +88,7 @@ void MaterialBuilderBase::prepare() { MaterialBuilder::MaterialBuilder() : mMaterialName("Unnamed") { std::fill_n(mProperties, filament::MATERIAL_PROPERTIES_COUNT, false); + GLSLTools::init(); mShaderModels.reset(); } @@ -255,6 +260,16 @@ MaterialBuilder& MaterialBuilder::targetApi(TargetApi targetApi) noexcept { return *this; } +MaterialBuilder& MaterialBuilder::optimization(Optimization optimization) noexcept { + mOptimization = optimization; + return *this; +} + +MaterialBuilder& MaterialBuilder::printShaders(bool printShaders) noexcept { + mPrintShaders = printShaders; + return *this; +} + MaterialBuilder& MaterialBuilder::codeGenTargetApi(TargetApi targetApi) noexcept { mCodeGenTargetApi = targetApi; return *this; @@ -334,6 +349,12 @@ Package MaterialBuilder::build() noexcept { MaterialInfo info; prepareToBuild(info); + // Install postprocessor to optimize / compile to Spir-V if necessary. + // TODO: remove the postProcessor functionality, since it isn't being used by the outside world. + using namespace std::placeholders; + GLSLPostProcessor postProcessor(mOptimization, mPrintShaders); + this->postProcessor(std::bind(&GLSLPostProcessor::process, postProcessor, _1, _2, _3, _4, _5)); + // Create chunk tree. ChunkContainer container; diff --git a/tools/matc/src/matc/PostprocessMaterialBuilder.cpp b/libs/filamat/src/PostprocessMaterialBuilder.cpp similarity index 89% rename from tools/matc/src/matc/PostprocessMaterialBuilder.cpp rename to libs/filamat/src/PostprocessMaterialBuilder.cpp index f29a9ea4fd..c7d586965b 100644 --- a/tools/matc/src/matc/PostprocessMaterialBuilder.cpp +++ b/libs/filamat/src/PostprocessMaterialBuilder.cpp @@ -14,18 +14,20 @@ * limitations under the License. */ -#include "PostprocessMaterialBuilder.h" +#include "filamat/PostprocessMaterialBuilder.h" #include -#include +#include "shaders/ShaderGenerator.h" -#include -#include -#include -#include -#include -#include +#include "GLSLPostProcessor.h" + +#include "eiff/ChunkContainer.h" +#include "eiff/DictionaryGlslChunk.h" +#include "eiff/DictionarySpirvChunk.h" +#include "eiff/MaterialGlslChunk.h" +#include "eiff/MaterialSpirvChunk.h" +#include "eiff/SimpleFieldChunk.h" #include @@ -40,6 +42,12 @@ PostprocessMaterialBuilder& PostprocessMaterialBuilder::postProcessor(PostProces Package PostprocessMaterialBuilder::build() { prepare(); + // Install postprocessor to optimize / compile to Spir-V if necessary. + // TODO: remove the postProcessor functionality, since it isn't being used by the outside world. + using namespace std::placeholders; + GLSLPostProcessor postProcessor(mOptimization, mPrintShaders); + this->postProcessor(std::bind(&GLSLPostProcessor::process, postProcessor, _1, _2, _3, _4, _5)); + // Create chunk tree. ChunkContainer container; diff --git a/tools/matc/src/matc/sca/ASTHelpers.cpp b/libs/filamat/src/sca/ASTHelpers.cpp similarity index 99% rename from tools/matc/src/matc/sca/ASTHelpers.cpp rename to libs/filamat/src/sca/ASTHelpers.cpp index 147f594941..e244020bfa 100644 --- a/tools/matc/src/matc/sca/ASTHelpers.cpp +++ b/libs/filamat/src/sca/ASTHelpers.cpp @@ -14,18 +14,17 @@ * limitations under the License. */ -#include "ASTHelpers.h" +#include "filamat/sca/ASTHelpers.h" + +#include "filamat/sca/GLSLTools.h" #include -#include "GLSLTools.h" - #include #include using namespace glslang; -namespace matc { -namespace ASTUtils{ +namespace ASTUtils { // Traverse the AST to find the definition of a function based on its name/signature. // e.g: prepareMaterial(struct-MaterialInputs-vf4-vf41; @@ -359,4 +358,3 @@ void getFunctionParameters(TIntermAggregate* func, std::vector @@ -26,9 +26,9 @@ #include -#include +#include "filamat/Enums.h" -#include "ASTHelpers.h" +#include "filamat/sca/ASTHelpers.h" // GLSLANG headers #include @@ -36,13 +36,12 @@ #include "builtinResource.h" -using namespace filamat; using namespace utils; using namespace glslang; -using namespace matc::ASTUtils; +using namespace ASTUtils; using namespace filament::driver; -namespace matc { +namespace filamat { GLSLangCleaner::GLSLangCleaner() { mAllocator = &GetThreadPoolAllocator(); @@ -327,10 +326,10 @@ EShMessages GLSLTools::glslangFlagsFromTargetApi(MaterialBuilder::TargetApi targ } void GLSLTools::prepareShaderParser(glslang::TShader& shader, EShLanguage language, - int version, Config::Optimization optimization) { + int version, filamat::MaterialBuilder::Optimization optimization) { // We must only setup the SPIRV environment when we actually need to output SPIRV - if (optimization == Config::Optimization::SIZE || - optimization == Config::Optimization::PERFORMANCE) { + if (optimization == filamat::MaterialBuilder::Optimization::SIZE || + optimization == filamat::MaterialBuilder::Optimization::PERFORMANCE) { shader.setAutoMapBindings(true); shader.setEnvInput(EShSourceGlsl, language, EShClientVulkan, version); shader.setEnvClient(EShClientVulkan, EShTargetVulkan_1_1); @@ -338,4 +337,4 @@ void GLSLTools::prepareShaderParser(glslang::TShader& shader, EShLanguage langua } } -} // namespace matc +} // namespace filamat diff --git a/tools/matc/src/matc/sca/builtinResource.h b/libs/filamat/src/sca/builtinResource.h similarity index 100% rename from tools/matc/src/matc/sca/builtinResource.h rename to libs/filamat/src/sca/builtinResource.h diff --git a/tools/matc/CMakeLists.txt b/tools/matc/CMakeLists.txt index f894e0192e..49eb727335 100644 --- a/tools/matc/CMakeLists.txt +++ b/tools/matc/CMakeLists.txt @@ -9,53 +9,42 @@ set(TARGET matlang) # ================================================================================================== # Sources and headers # ================================================================================================== -file(GLOB_RECURSE HDRS src/*.h) +file(GLOB_RECURSE HDRS + src/matc/CommandlineConfig.h + src/matc/Compiler.h + src/matc/Config.h + src/matc/JsonishLexeme.h + src/matc/JsonishLexer.h + src/matc/JsonishParser.h + src/matc/Lexeme.h + src/matc/Lexer.h + src/matc/MaterialCompiler.h + src/matc/MaterialLexeme.h + src/matc/MaterialLexer.h + src/matc/ParametersProcessor.h + src/matc/PostprocessMaterialCompiler.h + ) set(SRCS - src/matc/sca/ASTHelpers.cpp - src/matc/sca/GLSLTools.cpp - src/matc/sca/GLSLPostProcessor.cpp src/matc/Compiler.cpp src/matc/CommandlineConfig.cpp - src/matc/Enums.cpp src/matc/JsonishLexer.cpp src/matc/JsonishParser.cpp src/matc/MaterialCompiler.cpp src/matc/MaterialLexer.cpp src/matc/ParametersProcessor.cpp src/matc/PostprocessMaterialCompiler.cpp - src/matc/PostprocessMaterialBuilder.cpp ) # ================================================================================================== # Target definitions # ================================================================================================== add_library(${TARGET} STATIC ${SRCS} ${HDRS}) -target_include_directories(${TARGET} PUBLIC src) -# We are being naughty and accessing private headers here -# For spirv-tools, we're just following glslang's example -# For filamat, well... it belongs to us so... -target_include_directories(${TARGET} PRIVATE ${spirv-tools_SOURCE_DIR}/include) +target_include_directories(${TARGET} PUBLIC src) target_include_directories(${TARGET} PRIVATE ${filamat_SOURCE_DIR}/src) -# glslang libraries have circular dependencies. To make sure the proper object are part of the link -# we need to force archive re-scan on new symbol dependencies via start/end-group. -# Read more about this here https://eli.thegreenplace.net/2013/07/09/library-order-in-static-linking -set(COMMON_MATC_LIBS getopt filamat filabridge utils) -if (APPLE) - target_link_libraries(${TARGET} ${COMMON_MATC_LIBS} - glslang SPIRV SPVRemapper SPIRV-Tools-opt spirv-cross-glsl) -else() - target_link_libraries(${TARGET} ${COMMON_MATC_LIBS} - -Wl,--start-group glslang SPIRV SPVRemapper SPIRV-Tools-opt spirv-cross-glsl -Wl,--end-group) -endif() - -# ================================================================================================= -# Compiler flags -# ================================================================================================== -# this must match options enabled in glslang's CMakeLists.txt -target_compile_options(${TARGET} PRIVATE -DAMD_EXTENSIONS -DNV_EXTENSIONS ) +target_link_libraries(${TARGET} getopt filamat filabridge utils) # ================================================================================================= # Licenses diff --git a/tools/matc/src/matc/Config.h b/tools/matc/src/matc/Config.h index ac58139a32..06bed2fdf6 100644 --- a/tools/matc/src/matc/Config.h +++ b/tools/matc/src/matc/Config.h @@ -44,13 +44,7 @@ public: using Platform = filamat::MaterialBuilder::Platform; using TargetApi = filamat::MaterialBuilder::TargetApi; - - enum class Optimization { - NONE, - PREPROCESSOR, - SIZE, - PERFORMANCE - }; + using Optimization = filamat::MaterialBuilder::Optimization; enum class Metadata { NONE, diff --git a/tools/matc/src/matc/MaterialCompiler.cpp b/tools/matc/src/matc/MaterialCompiler.cpp index 12a1be26e3..646a9ec457 100644 --- a/tools/matc/src/matc/MaterialCompiler.cpp +++ b/tools/matc/src/matc/MaterialCompiler.cpp @@ -22,14 +22,14 @@ #include -#include "Enums.h" +#include +#include + #include "MaterialLexeme.h" #include "MaterialLexer.h" #include "JsonishLexer.h" #include "JsonishParser.h" #include "ParametersProcessor.h" -#include "sca/GLSLTools.h" -#include "sca/GLSLPostProcessor.h" using namespace utils; using namespace filamat; @@ -287,7 +287,9 @@ bool MaterialCompiler::run(const Config& config) { builder .platform(config.getPlatform()) .targetApi(config.getTargetApi()) + .optimization(config.getOptimizationLevel()) .codeGenTargetApi(config.getCodeGenTargetApi()) + .printShaders(config.printShaders()) .variantFilter(config.getVariantFilter() | builder.getVariantFilter()); // At this point the builder may be able to generate valid shaders if the user populated the @@ -298,11 +300,6 @@ bool MaterialCompiler::run(const Config& config) { return false; } - // Install postprocessor (to optimize/strip GLSL). - GLSLPostProcessor postProcessor(config); - - builder.postProcessor(std::bind(&GLSLPostProcessor::process, postProcessor, _1, _2, _3, _4, _5)); - // Write builder.build() to output. Package package = builder.build(); if (!package.isValid()) { diff --git a/tools/matc/src/matc/ParametersProcessor.cpp b/tools/matc/src/matc/ParametersProcessor.cpp index 7e8d28b4e4..e7adb45e23 100644 --- a/tools/matc/src/matc/ParametersProcessor.cpp +++ b/tools/matc/src/matc/ParametersProcessor.cpp @@ -22,7 +22,7 @@ #include #include -#include "Enums.h" +#include using namespace filamat; using namespace utils; diff --git a/tools/matc/src/matc/PostprocessMaterialCompiler.cpp b/tools/matc/src/matc/PostprocessMaterialCompiler.cpp index eb29f5d633..5d7c71a95d 100644 --- a/tools/matc/src/matc/PostprocessMaterialCompiler.cpp +++ b/tools/matc/src/matc/PostprocessMaterialCompiler.cpp @@ -16,12 +16,10 @@ #include "PostprocessMaterialCompiler.h" -#include "PostprocessMaterialBuilder.h" -#include "sca/GLSLTools.h" -#include "sca/GLSLPostProcessor.h" +#include +#include using namespace filamat; -using namespace std::placeholders; namespace matc { @@ -38,12 +36,10 @@ bool PostprocessMaterialCompiler::run(const Config& config) { builder .platform(config.getPlatform()) .targetApi(config.getTargetApi()) + .optimization(config.getOptimizationLevel()) + .printShaders(config.printShaders()) .codeGenTargetApi(config.getCodeGenTargetApi()); - // Install postprocessor (to clean GLSL from comments and dead code). - GLSLPostProcessor postProcessor(config); - builder.postProcessor(std::bind(&GLSLPostProcessor::process, postProcessor, _1, _2, _3, _4, _5)); - Package package = builder.build(); if (!package.isValid()) { return false; diff --git a/tools/matc/tests/test_lexersAndParsers.cpp b/tools/matc/tests/test_lexersAndParsers.cpp index e71c48420b..b60728c1f1 100644 --- a/tools/matc/tests/test_lexersAndParsers.cpp +++ b/tools/matc/tests/test_lexersAndParsers.cpp @@ -18,13 +18,14 @@ #include "MockConfig.h" -#include +#include + #include #include #include #include -using namespace matc::ASTUtils; +using namespace ASTUtils; class MaterialLexer: public ::testing::Test { protected: diff --git a/tools/matc/tests/test_matc.cpp b/tools/matc/tests/test_matc.cpp index 30e85e1633..54a15a8f98 100644 --- a/tools/matc/tests/test_matc.cpp +++ b/tools/matc/tests/test_matc.cpp @@ -18,10 +18,10 @@ #include "MockConfig.h" -#include +#include #include -using namespace matc::ASTUtils; +using namespace ASTUtils; filamat::MaterialBuilder makeBuilder(const std::string shaderCode) { filamat::MaterialBuilder builder; @@ -49,11 +49,11 @@ protected: } virtual void SetUp() { - matc::GLSLTools::init(); + GLSLTools::init(); } virtual void TearDown() { - matc::GLSLTools::terminate(); + GLSLTools::terminate(); } }; @@ -65,10 +65,10 @@ TEST_F(MaterialCompiler, StaticCodeAnalyzerNothingDetected) { )"); filamat::MaterialBuilder builder = makeBuilder(shaderCode); - matc::GLSLTools glslTools; - matc::GLSLTools::PropertySet properties; + GLSLTools glslTools; + GLSLTools::PropertySet properties; glslTools.findProperties(builder, properties); - matc::GLSLTools::PropertySet expected; + GLSLTools::PropertySet expected; EXPECT_EQ(expected, properties); } @@ -84,10 +84,10 @@ TEST_F(MaterialCompiler, StaticCodeAnalyzerNotFollowingINParameters) { )"); filamat::MaterialBuilder builder = makeBuilder(shaderCode); - matc::GLSLTools glslTools; - matc::GLSLTools::PropertySet properties; + GLSLTools glslTools; + GLSLTools::PropertySet properties; glslTools.findProperties(builder, properties); - matc::GLSLTools::PropertySet expected; + GLSLTools::PropertySet expected; EXPECT_EQ(expected, properties); } @@ -100,10 +100,10 @@ TEST_F(MaterialCompiler, StaticCodeAnalyzerDirectAssign) { )"); filamat::MaterialBuilder builder = makeBuilder(shaderCode); - matc::GLSLTools glslTools; - matc::GLSLTools::PropertySet properties; + GLSLTools glslTools; + GLSLTools::PropertySet properties; glslTools.findProperties(builder, properties); - matc::GLSLTools::PropertySet expected; + GLSLTools::PropertySet expected; expected.insert(filamat::MaterialBuilder::Property::BASE_COLOR); EXPECT_EQ(expected, properties); } @@ -118,10 +118,10 @@ TEST_F(MaterialCompiler, StaticCodeAnalyzerDirectAssignWithSwizzling) { )"); filamat::MaterialBuilder builder = makeBuilder(shaderCode); - matc::GLSLTools glslTools; - matc::GLSLTools::PropertySet properties; + GLSLTools glslTools; + GLSLTools::PropertySet properties; glslTools.findProperties(builder, properties); - matc::GLSLTools::PropertySet expected; + GLSLTools::PropertySet expected; expected.insert(filamat::MaterialBuilder::Property::BASE_COLOR); EXPECT_EQ(expected, properties); } @@ -140,10 +140,10 @@ TEST_F(MaterialCompiler, StaticCodeAnalyzerSymbolAsOutParameterWithAliasing) { )"); filamat::MaterialBuilder builder = makeBuilder(shaderCode); - matc::GLSLTools glslTools; - matc::GLSLTools::PropertySet properties; + GLSLTools glslTools; + GLSLTools::PropertySet properties; glslTools.findProperties(builder, properties); - matc::GLSLTools::PropertySet expected; + GLSLTools::PropertySet expected; expected.insert(filamat::MaterialBuilder::Property::BASE_COLOR); EXPECT_EQ(expected, properties); } @@ -162,10 +162,10 @@ TEST_F(MaterialCompiler, StaticCodeAnalyzerSymbolAsOutParameterWithAliasingAndSw )"); filamat::MaterialBuilder builder = makeBuilder(shaderCode); - matc::GLSLTools glslTools; - matc::GLSLTools::PropertySet properties; + GLSLTools glslTools; + GLSLTools::PropertySet properties; glslTools.findProperties(builder, properties); - matc::GLSLTools::PropertySet expected; + GLSLTools::PropertySet expected; expected.insert(filamat::MaterialBuilder::Property::BASE_COLOR); EXPECT_EQ(expected, properties); } @@ -189,10 +189,10 @@ TEST_F(MaterialCompiler, StaticCodeAnalyzerSymbolInOutInChainWithDirectIndexInto )"); filamat::MaterialBuilder builder = makeBuilder(shaderCode); - matc::GLSLTools glslTools; - matc::GLSLTools::PropertySet properties; + GLSLTools glslTools; + GLSLTools::PropertySet properties; glslTools.findProperties(builder, properties); - matc::GLSLTools::PropertySet expected; + GLSLTools::PropertySet expected; expected.insert(filamat::MaterialBuilder::Property::BASE_COLOR); EXPECT_EQ(expected, properties); } @@ -216,10 +216,10 @@ TEST_F(MaterialCompiler, StaticCodeAnalyzerSymbolInOutInChain) { )"); filamat::MaterialBuilder builder = makeBuilder(shaderCode); - matc::GLSLTools glslTools; - matc::GLSLTools::PropertySet properties; + GLSLTools glslTools; + GLSLTools::PropertySet properties; glslTools.findProperties(builder, properties); - matc::GLSLTools::PropertySet expected; + GLSLTools::PropertySet expected; expected.insert(filamat::MaterialBuilder::Property::BASE_COLOR); EXPECT_EQ(expected, properties); } @@ -234,10 +234,10 @@ TEST_F(MaterialCompiler, StaticCodeAnalyzerBaseColor) { )"); filamat::MaterialBuilder builder = makeBuilder(shaderCode); - matc::GLSLTools glslTools; - matc::GLSLTools::PropertySet properties; + GLSLTools glslTools; + GLSLTools::PropertySet properties; glslTools.findProperties(builder, properties); - matc::GLSLTools::PropertySet expected; + GLSLTools::PropertySet expected; expected.insert(filamat::MaterialBuilder::Property::BASE_COLOR); EXPECT_EQ(expected, properties); } @@ -250,10 +250,10 @@ TEST_F(MaterialCompiler, StaticCodeAnalyzerRoughness) { )"); filamat::MaterialBuilder builder = makeBuilder(shaderCode); - matc::GLSLTools glslTools; - matc::GLSLTools::PropertySet properties; + GLSLTools glslTools; + GLSLTools::PropertySet properties; glslTools.findProperties(builder, properties); - matc::GLSLTools::PropertySet expected; + GLSLTools::PropertySet expected; expected.insert(filamat::MaterialBuilder::Property::ROUGHNESS); EXPECT_EQ(expected, properties); } @@ -266,10 +266,10 @@ TEST_F(MaterialCompiler, StaticCodeAnalyzerMetallic) { )"); filamat::MaterialBuilder builder = makeBuilder(shaderCode); - matc::GLSLTools glslTools; - matc::GLSLTools::PropertySet properties; + GLSLTools glslTools; + GLSLTools::PropertySet properties; glslTools.findProperties(builder, properties); - matc::GLSLTools::PropertySet expected; + GLSLTools::PropertySet expected; expected.insert(filamat::MaterialBuilder::Property::METALLIC); EXPECT_EQ(expected, properties); } @@ -282,10 +282,10 @@ TEST_F(MaterialCompiler, StaticCodeAnalyzerReflectance) { )"); filamat::MaterialBuilder builder = makeBuilder(shaderCode); - matc::GLSLTools glslTools; - matc::GLSLTools::PropertySet properties; + GLSLTools glslTools; + GLSLTools::PropertySet properties; glslTools.findProperties(builder, properties); - matc::GLSLTools::PropertySet expected; + GLSLTools::PropertySet expected; expected.insert(filamat::MaterialBuilder::Property::REFLECTANCE); EXPECT_EQ(expected, properties); } @@ -298,10 +298,10 @@ TEST_F(MaterialCompiler, StaticCodeAnalyzerAmbientOcclusion) { )"); filamat::MaterialBuilder builder = makeBuilder(shaderCode); - matc::GLSLTools glslTools; - matc::GLSLTools::PropertySet properties; + GLSLTools glslTools; + GLSLTools::PropertySet properties; glslTools.findProperties(builder, properties); - matc::GLSLTools::PropertySet expected; + GLSLTools::PropertySet expected; expected.insert(filamat::MaterialBuilder::Property::AMBIENT_OCCLUSION); EXPECT_EQ(expected, properties); } @@ -315,10 +315,10 @@ TEST_F(MaterialCompiler, StaticCodeAnalyzerClearCoat) { filamat::MaterialBuilder builder = makeBuilder(shaderCode); builder.shading(filamat::MaterialBuilder::Shading::LIT); - matc::GLSLTools glslTools; - matc::GLSLTools::PropertySet properties; + GLSLTools glslTools; + GLSLTools::PropertySet properties; glslTools.findProperties(builder, properties); - matc::GLSLTools::PropertySet expected; + GLSLTools::PropertySet expected; expected.insert(filamat::MaterialBuilder::Property::CLEAR_COAT); EXPECT_EQ(expected, properties); } @@ -332,10 +332,10 @@ TEST_F(MaterialCompiler, StaticCodeAnalyzerClearCoatRoughness) { filamat::MaterialBuilder builder = makeBuilder(shaderCode); builder.shading(filamat::MaterialBuilder::Shading::LIT); - matc::GLSLTools glslTools; - matc::GLSLTools::PropertySet properties; + GLSLTools glslTools; + GLSLTools::PropertySet properties; glslTools.findProperties(builder, properties); - matc::GLSLTools::PropertySet expected; + GLSLTools::PropertySet expected; expected.insert(filamat::MaterialBuilder::Property::CLEAR_COAT_ROUGHNESS); EXPECT_EQ(expected, properties); } @@ -349,10 +349,10 @@ TEST_F(MaterialCompiler, StaticCodeAnalyzerClearCoatNormal) { filamat::MaterialBuilder builder = makeBuilder(shaderCode); builder.shading(filamat::MaterialBuilder::Shading::LIT); - matc::GLSLTools glslTools; - matc::GLSLTools::PropertySet properties; + GLSLTools glslTools; + GLSLTools::PropertySet properties; glslTools.findProperties(builder, properties); - matc::GLSLTools::PropertySet expected; + GLSLTools::PropertySet expected; expected.insert(filamat::MaterialBuilder::Property::CLEAR_COAT_NORMAL); EXPECT_EQ(expected, properties); } @@ -366,10 +366,10 @@ TEST_F(MaterialCompiler, StaticCodeAnalyzerThickness) { filamat::MaterialBuilder builder = makeBuilder(shaderCode); builder.shading(filamat::MaterialBuilder::Shading::SUBSURFACE); - matc::GLSLTools glslTools; - matc::GLSLTools::PropertySet properties; + GLSLTools glslTools; + GLSLTools::PropertySet properties; glslTools.findProperties(builder, properties); - matc::GLSLTools::PropertySet expected; + GLSLTools::PropertySet expected; expected.insert(filamat::MaterialBuilder::Property::THICKNESS); EXPECT_EQ(expected, properties); } @@ -383,10 +383,10 @@ TEST_F(MaterialCompiler, StaticCodeAnalyzerSubsurfacePower) { filamat::MaterialBuilder builder = makeBuilder(shaderCode); builder.shading(filamat::MaterialBuilder::Shading::SUBSURFACE); - matc::GLSLTools glslTools; - matc::GLSLTools::PropertySet properties; + GLSLTools glslTools; + GLSLTools::PropertySet properties; glslTools.findProperties(builder, properties); - matc::GLSLTools::PropertySet expected; + GLSLTools::PropertySet expected; expected.insert(filamat::MaterialBuilder::Property::SUBSURFACE_POWER); EXPECT_EQ(expected, properties); } @@ -400,10 +400,10 @@ TEST_F(MaterialCompiler, StaticCodeAnalyzerSubsurfaceColor) { filamat::MaterialBuilder builder = makeBuilder(shaderCode); builder.shading(filamat::MaterialBuilder::Shading::SUBSURFACE); - matc::GLSLTools glslTools; - matc::GLSLTools::PropertySet properties; + GLSLTools glslTools; + GLSLTools::PropertySet properties; glslTools.findProperties(builder, properties); - matc::GLSLTools::PropertySet expected; + GLSLTools::PropertySet expected; expected.insert(filamat::MaterialBuilder::Property::SUBSURFACE_COLOR); EXPECT_EQ(expected, properties); } @@ -417,10 +417,10 @@ TEST_F(MaterialCompiler, StaticCodeAnalyzerAnisotropicDirection) { filamat::MaterialBuilder builder = makeBuilder(shaderCode); builder.shading(filamat::MaterialBuilder::Shading::LIT); - matc::GLSLTools glslTools; - matc::GLSLTools::PropertySet properties; + GLSLTools glslTools; + GLSLTools::PropertySet properties; glslTools.findProperties(builder, properties); - matc::GLSLTools::PropertySet expected; + GLSLTools::PropertySet expected; expected.insert(filamat::MaterialBuilder::Property::ANISOTROPY_DIRECTION); EXPECT_EQ(expected, properties); } @@ -434,10 +434,10 @@ TEST_F(MaterialCompiler, StaticCodeAnalyzerAnisotropic) { filamat::MaterialBuilder builder = makeBuilder(shaderCode); builder.shading(filamat::MaterialBuilder::Shading::LIT); - matc::GLSLTools glslTools; - matc::GLSLTools::PropertySet properties; + GLSLTools glslTools; + GLSLTools::PropertySet properties; glslTools.findProperties(builder, properties); - matc::GLSLTools::PropertySet expected; + GLSLTools::PropertySet expected; expected.insert(filamat::MaterialBuilder::Property::ANISOTROPY); EXPECT_EQ(expected, properties); } @@ -451,10 +451,10 @@ TEST_F(MaterialCompiler, StaticCodeAnalyzerSheenColor) { filamat::MaterialBuilder builder = makeBuilder(shaderCode); builder.shading(filamat::MaterialBuilder::Shading::CLOTH); - matc::GLSLTools glslTools; - matc::GLSLTools::PropertySet properties; + GLSLTools glslTools; + GLSLTools::PropertySet properties; glslTools.findProperties(builder, properties); - matc::GLSLTools::PropertySet expected; + GLSLTools::PropertySet expected; expected.insert(filamat::MaterialBuilder::Property::SHEEN_COLOR); EXPECT_EQ(expected, properties); } @@ -467,10 +467,10 @@ TEST_F(MaterialCompiler, StaticCodeAnalyzerNormal) { )"); filamat::MaterialBuilder builder = makeBuilder(shaderCode); - matc::GLSLTools glslTools; - matc::GLSLTools::PropertySet properties; + GLSLTools glslTools; + GLSLTools::PropertySet properties; glslTools.findProperties(builder, properties); - matc::GLSLTools::PropertySet expected; + GLSLTools::PropertySet expected; expected.insert(filamat::MaterialBuilder::Property::NORMAL); EXPECT_EQ(expected, properties); }