rendering: formalize legacy shader pass fallback

This commit is contained in:
2026-04-06 18:24:10 +08:00
parent 97e986b52c
commit 7acc397714
5 changed files with 136 additions and 40 deletions

View File

@@ -28,7 +28,18 @@ const Resources::ShaderPass* FindCompatibleSurfacePass(
const Resources::Material* material,
BuiltinMaterialPass pass,
Resources::ShaderBackend backend) {
if (material != nullptr && !material->GetShaderPass().Empty()) {
const bool shaderHasExplicitBuiltinMetadata = ShaderHasExplicitBuiltinMetadata(shader);
for (const Resources::ShaderPass& shaderPass : shader.GetPasses()) {
if (ShaderPassMatchesBuiltinPass(shaderPass, pass) &&
::XCEngine::Rendering::Detail::ShaderPassHasGraphicsVariants(shader, shaderPass.name, backend)) {
return &shaderPass;
}
}
if (!shaderHasExplicitBuiltinMetadata &&
material != nullptr &&
!material->GetShaderPass().Empty()) {
const Resources::ShaderPass* explicitPass = shader.FindPass(material->GetShaderPass());
if (explicitPass != nullptr &&
::XCEngine::Rendering::Detail::ShaderPassHasGraphicsVariants(shader, explicitPass->name, backend)) {
@@ -36,11 +47,8 @@ const Resources::ShaderPass* FindCompatibleSurfacePass(
}
}
for (const Resources::ShaderPass& shaderPass : shader.GetPasses()) {
if (ShaderPassMatchesBuiltinPass(shaderPass, pass) &&
::XCEngine::Rendering::Detail::ShaderPassHasGraphicsVariants(shader, shaderPass.name, backend)) {
return &shaderPass;
}
if (shaderHasExplicitBuiltinMetadata) {
return nullptr;
}
if (pass != BuiltinMaterialPass::ForwardLit) {