feat: add unity-aligned shader contract metadata

This commit is contained in:
2026-04-03 00:01:31 +08:00
parent b43d4048b8
commit 6636834b35
9 changed files with 484 additions and 0 deletions

View File

@@ -158,9 +158,48 @@ TEST(Shader, StoresPerPassTags) {
EXPECT_EQ(pass->tags[1].value, "Geometry");
}
TEST(Shader, StoresShaderPropertiesAndPassResources) {
Shader shader;
ShaderPropertyDesc baseColor = {};
baseColor.name = "_BaseColor";
baseColor.displayName = "Base Color";
baseColor.type = ShaderPropertyType::Color;
baseColor.defaultValue = "(1,1,1,1)";
baseColor.semantic = "BaseColor";
shader.AddProperty(baseColor);
ShaderResourceBindingDesc perObject = {};
perObject.name = "PerObjectConstants";
perObject.type = ShaderResourceType::ConstantBuffer;
perObject.set = 1;
perObject.binding = 0;
perObject.semantic = "PerObject";
shader.AddPassResourceBinding("ForwardLit", perObject);
ASSERT_EQ(shader.GetProperties().Size(), 1u);
const ShaderPropertyDesc* storedProperty = shader.FindProperty("_BaseColor");
ASSERT_NE(storedProperty, nullptr);
EXPECT_EQ(storedProperty->displayName, "Base Color");
EXPECT_EQ(storedProperty->type, ShaderPropertyType::Color);
EXPECT_EQ(storedProperty->semantic, "BaseColor");
const ShaderResourceBindingDesc* storedBinding =
shader.FindPassResourceBinding("ForwardLit", "PerObjectConstants");
ASSERT_NE(storedBinding, nullptr);
EXPECT_EQ(storedBinding->type, ShaderResourceType::ConstantBuffer);
EXPECT_EQ(storedBinding->set, 1u);
EXPECT_EQ(storedBinding->binding, 0u);
EXPECT_EQ(storedBinding->semantic, "PerObject");
}
TEST(Shader, ReleaseClearsPassRuntimeData) {
Shader shader;
shader.SetSourceCode("void main() {}");
ShaderPropertyDesc property = {};
property.name = "_BaseColor";
property.type = ShaderPropertyType::Color;
shader.AddProperty(property);
ShaderStageVariant variant = {};
variant.stage = ShaderType::Fragment;
variant.sourceCode = "fragment";
@@ -168,6 +207,7 @@ TEST(Shader, ReleaseClearsPassRuntimeData) {
shader.Release();
EXPECT_EQ(shader.GetProperties().Size(), 0u);
EXPECT_EQ(shader.GetPassCount(), 0u);
EXPECT_EQ(shader.GetSourceCode(), "");
EXPECT_EQ(shader.GetCompiledBinary().Size(), 0u);