resources: support multi_compile_local shader keywords

This commit is contained in:
2026-04-06 20:38:32 +08:00
parent c318f34f07
commit eea38d57d1
3 changed files with 78 additions and 5 deletions

View File

@@ -13,7 +13,8 @@ namespace Resources {
enum class ShaderKeywordDeclarationType : Core::uint8 {
MultiCompile = 0,
ShaderFeature,
ShaderFeatureLocal
ShaderFeatureLocal,
MultiCompileLocal = 3
};
struct ShaderKeywordDeclaration {
@@ -21,7 +22,8 @@ struct ShaderKeywordDeclaration {
Containers::Array<Containers::String> options;
bool IsLocal() const {
return type == ShaderKeywordDeclarationType::ShaderFeatureLocal;
return type == ShaderKeywordDeclarationType::ShaderFeatureLocal ||
type == ShaderKeywordDeclarationType::MultiCompileLocal;
}
};

View File

@@ -928,6 +928,7 @@ bool IsUnityStyleAuthoringPragmaDirective(const std::string& line) {
pragmaTokens[1] == "fragment" ||
pragmaTokens[1] == "target" ||
pragmaTokens[1] == "multi_compile" ||
pragmaTokens[1] == "multi_compile_local" ||
pragmaTokens[1] == "shader_feature" ||
pragmaTokens[1] == "shader_feature_local" ||
pragmaTokens[1] == "backend";
@@ -1037,6 +1038,8 @@ bool TryParseShaderKeywordDeclarationPragma(
if (pragmaTokens[1] == "multi_compile") {
outDeclaration.type = ShaderKeywordDeclarationType::MultiCompile;
} else if (pragmaTokens[1] == "multi_compile_local") {
outDeclaration.type = ShaderKeywordDeclarationType::MultiCompileLocal;
} else if (pragmaTokens[1] == "shader_feature") {
outDeclaration.type = ShaderKeywordDeclarationType::ShaderFeature;
} else if (pragmaTokens[1] == "shader_feature_local") {
@@ -1550,6 +1553,7 @@ bool ParseLegacyBackendSplitShaderAuthoring(
}
if (pragmaTokens.size() >= 2u &&
(pragmaTokens[1] == "multi_compile" ||
pragmaTokens[1] == "multi_compile_local" ||
pragmaTokens[1] == "shader_feature" ||
pragmaTokens[1] == "shader_feature_local")) {
ShaderKeywordDeclaration declaration = {};
@@ -1842,6 +1846,7 @@ bool ParseUnityStyleSingleSourceShaderAuthoring(
}
if (pragmaTokens.size() >= 2u &&
(pragmaTokens[1] == "multi_compile" ||
pragmaTokens[1] == "multi_compile_local" ||
pragmaTokens[1] == "shader_feature" ||
pragmaTokens[1] == "shader_feature_local")) {
ShaderKeywordDeclaration declaration = {};