From 2d157e8fe1109aa27307ae15e27fc6bec4c959ce Mon Sep 17 00:00:00 2001 From: Ben Doherty Date: Mon, 6 May 2024 12:12:38 -0700 Subject: [PATCH] Add preferredShaderLanguage option to Engine::Config (#7816) --- NEW_RELEASE_NOTES.md | 1 + filament/include/filament/Engine.h | 22 ++++++++++++++++++++++ filament/src/details/Engine.h | 4 ++++ 3 files changed, 27 insertions(+) diff --git a/NEW_RELEASE_NOTES.md b/NEW_RELEASE_NOTES.md index 188a51f3662..e4728cb677a 100644 --- a/NEW_RELEASE_NOTES.md +++ b/NEW_RELEASE_NOTES.md @@ -9,3 +9,4 @@ appropriate header in [RELEASE_NOTES.md](./RELEASE_NOTES.md). ## Release notes for next branch cut - filagui: Fix regression which broke WebGL +- Add a new Engine::Config setting to control preferred shader language diff --git a/filament/include/filament/Engine.h b/filament/include/filament/Engine.h index e5b142c3147..a737469b768 100644 --- a/filament/include/filament/Engine.h +++ b/filament/include/filament/Engine.h @@ -340,6 +340,28 @@ class UTILS_PUBLIC Engine { * Disable backend handles use-after-free checks. */ bool disableHandleUseAfterFreeCheck = false; + + /* + * Sets a preferred shader language for Filament to use. + * + * The Metal backend supports two shader languages: MSL (Metal Shading Language) and + * METAL_LIBRARY (precompiled .metallib). This option controls which shader language is + * used when materials contain both. + * + * By default, when preferredShaderLanguage is unset, Filament will prefer METAL_LIBRARY + * shaders if present within a material, falling back to MSL. Setting + * preferredShaderLanguage to ShaderLanguage::MSL will instead instruct Filament to check + * for the presence of MSL in a material first, falling back to METAL_LIBRARY if MSL is not + * present. + * + * When using a non-Metal backend, setting this has no effect. + */ + enum class ShaderLanguage { + DEFAULT = 0, + MSL = 1, + METAL_LIBRARY = 2, + }; + ShaderLanguage preferredShaderLanguage = ShaderLanguage::DEFAULT; }; diff --git a/filament/src/details/Engine.h b/filament/src/details/Engine.h index 88434071a5e..5d72ac9c2ee 100644 --- a/filament/src/details/Engine.h +++ b/filament/src/details/Engine.h @@ -246,6 +246,10 @@ class FEngine : public Engine { case Backend::VULKAN: return { backend::ShaderLanguage::SPIRV }; case Backend::METAL: + const auto& lang = mConfig.preferredShaderLanguage; + if (lang == Config::ShaderLanguage::MSL) { + return { backend::ShaderLanguage::MSL, backend::ShaderLanguage::METAL_LIBRARY }; + } return { backend::ShaderLanguage::METAL_LIBRARY, backend::ShaderLanguage::MSL }; } }