rendering: formalize shader keyword metadata contract
This commit is contained in:
@@ -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() {}");
|
||||
|
||||
Reference in New Issue
Block a user