From a1752b363cfabfd6eccc1b2cd2fb087a2888bfe4 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 8febb63dae..31872e67f4 100644 --- a/NEW_RELEASE_NOTES.md +++ b/NEW_RELEASE_NOTES.md @@ -8,5 +8,6 @@ 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 - Add `getEyeIndex` vertex API - ios: Remove bitcode from iOS builds diff --git a/filament/include/filament/Engine.h b/filament/include/filament/Engine.h index e5b142c314..a737469b76 100644 --- a/filament/include/filament/Engine.h +++ b/filament/include/filament/Engine.h @@ -340,6 +340,28 @@ public: * 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 88434071a5..5d72ac9c2e 100644 --- a/filament/src/details/Engine.h +++ b/filament/src/details/Engine.h @@ -246,6 +246,10 @@ public: 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 }; } }