rendering: formalize legacy shader pass fallback
This commit is contained in:
@@ -164,6 +164,8 @@ BuiltinDepthStylePassBase::ResolvedShaderPass BuiltinDepthStylePassBase::Resolve
|
||||
return false;
|
||||
}
|
||||
|
||||
const bool shaderHasExplicitBuiltinMetadata = ShaderHasExplicitBuiltinMetadata(*shader);
|
||||
|
||||
auto tryAcceptPass =
|
||||
[this, shader, &resolved](const Resources::ShaderPass& shaderPass) -> bool {
|
||||
BuiltinPassResourceBindingPlan bindingPlan = {};
|
||||
@@ -178,19 +180,6 @@ BuiltinDepthStylePassBase::ResolvedShaderPass BuiltinDepthStylePassBase::Resolve
|
||||
return true;
|
||||
};
|
||||
|
||||
if (ownerMaterial != nullptr && !ownerMaterial->GetShaderPass().Empty()) {
|
||||
const Resources::ShaderPass* explicitPass = shader->FindPass(ownerMaterial->GetShaderPass());
|
||||
if (explicitPass != nullptr &&
|
||||
ShaderPassMatchesBuiltinPass(*explicitPass, m_passType) &&
|
||||
::XCEngine::Rendering::Detail::ShaderPassHasGraphicsVariants(
|
||||
*shader,
|
||||
explicitPass->name,
|
||||
backend) &&
|
||||
tryAcceptPass(*explicitPass)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
for (const Resources::ShaderPass& shaderPass : shader->GetPasses()) {
|
||||
if (!ShaderPassMatchesBuiltinPass(shaderPass, m_passType) ||
|
||||
!::XCEngine::Rendering::Detail::ShaderPassHasGraphicsVariants(*shader, shaderPass.name, backend)) {
|
||||
@@ -202,6 +191,20 @@ BuiltinDepthStylePassBase::ResolvedShaderPass BuiltinDepthStylePassBase::Resolve
|
||||
}
|
||||
}
|
||||
|
||||
if (!shaderHasExplicitBuiltinMetadata &&
|
||||
ownerMaterial != nullptr &&
|
||||
!ownerMaterial->GetShaderPass().Empty()) {
|
||||
const Resources::ShaderPass* explicitPass = shader->FindPass(ownerMaterial->GetShaderPass());
|
||||
if (explicitPass != nullptr &&
|
||||
::XCEngine::Rendering::Detail::ShaderPassHasGraphicsVariants(
|
||||
*shader,
|
||||
explicitPass->name,
|
||||
backend) &&
|
||||
tryAcceptPass(*explicitPass)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
};
|
||||
|
||||
|
||||
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user