rendering: add keyword-aware shader variant selection
This commit is contained in:
@@ -55,12 +55,38 @@ inline void ApplyShaderStageVariant(
|
||||
compileDesc.profile = ToWideAscii(variant.profile);
|
||||
}
|
||||
|
||||
inline Containers::String BuildShaderKeywordSignature(
|
||||
const Resources::ShaderKeywordSet& keywordSet) {
|
||||
Resources::ShaderKeywordSet normalizedKeywords = keywordSet;
|
||||
Resources::NormalizeShaderKeywordSetInPlace(normalizedKeywords);
|
||||
|
||||
Containers::String signature;
|
||||
for (size_t keywordIndex = 0; keywordIndex < normalizedKeywords.enabledKeywords.Size(); ++keywordIndex) {
|
||||
if (keywordIndex > 0) {
|
||||
signature += ";";
|
||||
}
|
||||
|
||||
signature += normalizedKeywords.enabledKeywords[keywordIndex];
|
||||
}
|
||||
|
||||
return signature;
|
||||
}
|
||||
|
||||
inline bool ShaderPassHasGraphicsVariants(
|
||||
const Resources::Shader& shader,
|
||||
const Containers::String& passName,
|
||||
Resources::ShaderBackend backend) {
|
||||
return shader.FindVariant(passName, Resources::ShaderType::Vertex, backend) != nullptr &&
|
||||
shader.FindVariant(passName, Resources::ShaderType::Fragment, backend) != nullptr;
|
||||
Resources::ShaderBackend backend,
|
||||
const Resources::ShaderKeywordSet& enabledKeywords = Resources::ShaderKeywordSet()) {
|
||||
return shader.FindVariant(
|
||||
passName,
|
||||
Resources::ShaderType::Vertex,
|
||||
backend,
|
||||
enabledKeywords) != nullptr &&
|
||||
shader.FindVariant(
|
||||
passName,
|
||||
Resources::ShaderType::Fragment,
|
||||
backend,
|
||||
enabledKeywords) != nullptr;
|
||||
}
|
||||
|
||||
} // namespace Detail
|
||||
|
||||
Reference in New Issue
Block a user