rendering: formalize shader keyword metadata contract

This commit is contained in:
2026-04-06 18:55:26 +08:00
parent 7acc397714
commit a8b4da16a3
16 changed files with 795 additions and 16 deletions

View File

@@ -193,6 +193,38 @@ TEST(Shader, StoresShaderPropertiesAndPassResources) {
EXPECT_EQ(storedBinding->semantic, "PerObject");
}
TEST(Shader, StoresPassKeywordDeclarationsAndQueriesDeclaredKeywords) {
Shader shader;
ShaderKeywordDeclaration globalKeywords = {};
globalKeywords.type = ShaderKeywordDeclarationType::MultiCompile;
globalKeywords.options.PushBack("_");
globalKeywords.options.PushBack("XC_MAIN_LIGHT_SHADOWS");
globalKeywords.options.PushBack("XC_ADDITIONAL_LIGHTS");
shader.AddPassKeywordDeclaration("ForwardLit", globalKeywords);
ShaderKeywordDeclaration localKeywords = {};
localKeywords.type = ShaderKeywordDeclarationType::ShaderFeatureLocal;
localKeywords.options.PushBack("__");
localKeywords.options.PushBack("XC_ALPHA_TEST");
shader.AddPassKeywordDeclaration("ShadowCaster", localKeywords);
const ShaderPass* forwardPass = shader.FindPass("ForwardLit");
ASSERT_NE(forwardPass, nullptr);
ASSERT_EQ(forwardPass->keywordDeclarations.Size(), 1u);
EXPECT_EQ(
forwardPass->keywordDeclarations[0].type,
ShaderKeywordDeclarationType::MultiCompile);
ASSERT_EQ(forwardPass->keywordDeclarations[0].options.Size(), 3u);
EXPECT_EQ(forwardPass->keywordDeclarations[0].options[1], "XC_MAIN_LIGHT_SHADOWS");
EXPECT_TRUE(shader.PassDeclaresKeyword("ForwardLit", "XC_MAIN_LIGHT_SHADOWS"));
EXPECT_TRUE(shader.PassDeclaresKeyword("ShadowCaster", "XC_ALPHA_TEST"));
EXPECT_TRUE(shader.DeclaresKeyword("XC_ADDITIONAL_LIGHTS"));
EXPECT_FALSE(shader.DeclaresKeyword("_"));
EXPECT_FALSE(shader.DeclaresKeyword("XC_UNKNOWN"));
}
TEST(Shader, ReleaseClearsPassRuntimeData) {
Shader shader;
shader.SetSourceCode("void main() {}");