From d68cf9b1a06a93470596c032e4812c13968eb86a Mon Sep 17 00:00:00 2001 From: Aiden Date: Thu, 21 May 2026 16:16:06 +1000 Subject: [PATCH] Update RenderCadenceCompositorRuntimeLayerModelTests.cpp --- ...adenceCompositorRuntimeLayerModelTests.cpp | 50 +++++++++++++++++-- 1 file changed, 46 insertions(+), 4 deletions(-) diff --git a/tests/RenderCadenceCompositorRuntimeLayerModelTests.cpp b/tests/RenderCadenceCompositorRuntimeLayerModelTests.cpp index 8ead531..db85594 100644 --- a/tests/RenderCadenceCompositorRuntimeLayerModelTests.cpp +++ b/tests/RenderCadenceCompositorRuntimeLayerModelTests.cpp @@ -54,6 +54,30 @@ std::string SolidShaderManifest(double gainDefault, bool includeMix) })"; } +std::string AllParametersShaderManifest() +{ + return R"({ + "id": "all-params", + "name": "All Params", + "description": "All parameter restore test shader", + "category": "Tests", + "entryPoint": "shadeVideo", + "fonts": [{ "id": "inter", "path": "Inter.ttf" }], + "parameters": [ + { "id": "gain", "label": "Gain", "type": "float", "default": 0.5, "min": 0.0, "max": 1.0 }, + { "id": "offset", "label": "Offset", "type": "vec2", "default": [0.0, 0.0], "min": [-1.0, -1.0], "max": [1.0, 1.0] }, + { "id": "tint", "label": "Tint", "type": "color", "default": [1.0, 1.0, 1.0, 1.0], "min": [0.0, 0.0, 0.0, 0.0], "max": [1.0, 1.0, 1.0, 1.0] }, + { "id": "enabled", "label": "Enabled", "type": "bool", "default": true }, + { "id": "mode", "label": "Mode", "type": "enum", "default": "soft", "options": [ + { "value": "soft", "label": "Soft" }, + { "value": "hard", "label": "Hard" } + ] }, + { "id": "titleText", "label": "Title", "type": "text", "default": "DEFAULT", "font": "inter", "maxLength": 8 }, + { "id": "drop", "label": "Drop", "type": "trigger" } + ] + })"; +} + RenderCadenceCompositor::SupportedShaderCatalog LoadCatalog(const std::filesystem::path& root) { RenderCadenceCompositor::SupportedShaderCatalog catalog; @@ -161,8 +185,13 @@ void TestAddAndRemoveLayers() void TestInitializeFromRuntimeStateRestoresLayerStack() { - std::filesystem::path root; - RenderCadenceCompositor::SupportedShaderCatalog catalog = MakeCatalog(root); + std::filesystem::path root = MakeTestRoot(); + WriteFile(root / "solid" / "shader.slang", "float4 shadeVideo(float2 uv) { return float4(uv, 0.0, 1.0); }\n"); + WriteFile(root / "solid" / "shader.json", SolidShaderManifest(0.5, false)); + WriteFile(root / "all-params" / "shader.slang", "float4 shadeVideo(float2 uv) { return float4(uv, 0.0, 1.0); }\n"); + WriteFile(root / "all-params" / "Inter.ttf", "not a real font, but enough for restore catalog support checks"); + WriteFile(root / "all-params" / "shader.json", AllParametersShaderManifest()); + RenderCadenceCompositor::SupportedShaderCatalog catalog = LoadCatalog(root); JsonValue runtimeState; std::string error; @@ -170,10 +199,15 @@ void TestInitializeFromRuntimeStateRestoresLayerStack() "layers": [ { "id": "layer-31", - "shaderId": "solid", + "shaderId": "all-params", "bypass": true, "parameterValues": { "gain": 0.75, + "offset": [0.25, -0.5], + "tint": [0.1, 0.2, 0.3, 0.4], + "enabled": false, + "mode": "hard", + "titleText": "RESTORED-TEXT", "drop": 4 } }, @@ -199,13 +233,21 @@ void TestInitializeFromRuntimeStateRestoresLayerStack() RenderCadenceCompositor::RuntimeLayerModelSnapshot snapshot = model.Snapshot(); Expect(snapshot.displayLayers.size() == 2, "restore keeps supported layers and skips missing shaders"); Expect(snapshot.displayLayers[0].id == "layer-31", "restore preserves saved layer id"); + Expect(snapshot.displayLayers[0].shaderId == "all-params", "restore preserves shader id"); Expect(snapshot.displayLayers[0].bypass, "restore preserves bypass state"); Expect(snapshot.displayLayers[0].parameterValues.at("gain").numberValues.front() == 0.75, "restore preserves valid parameter values"); + Expect(snapshot.displayLayers[0].parameterValues.at("offset").numberValues == std::vector({ 0.25, -0.5 }), "restore preserves vec2 parameter values"); + Expect(snapshot.displayLayers[0].parameterValues.at("tint").numberValues == std::vector({ 0.1, 0.2, 0.3, 0.4 }), "restore preserves color parameter values"); + Expect(!snapshot.displayLayers[0].parameterValues.at("enabled").booleanValue, "restore preserves boolean parameter values"); + Expect(snapshot.displayLayers[0].parameterValues.at("mode").enumValue == "hard", "restore preserves enum parameter values"); + Expect(snapshot.displayLayers[0].parameterValues.at("titleText").textValue == "RESTORED", "restore normalizes and preserves text parameter values"); + Expect(snapshot.displayLayers[0].parameterValues.at("drop").numberValues.front() == 4.0, "restore preserves trigger counts"); Expect(snapshot.displayLayers[1].id == "layer-33", "restore preserves later supported layer order"); + Expect(snapshot.displayLayers[1].shaderId == "solid", "restore preserves later layer shader id"); Expect(snapshot.displayLayers[1].parameterValues.at("gain").numberValues.front() == 0.5, "restore falls back to defaults for invalid parameter values"); const std::vector> builds = model.PendingLayerBuilds(); - Expect(builds.size() == 2 && builds[0].first == "layer-31" && builds[1].first == "layer-33", "restore queues startup builds for every restored layer"); + Expect(builds.size() == 2 && builds[0].first == "layer-31" && builds[0].second == "all-params" && builds[1].first == "layer-33" && builds[1].second == "solid", "restore queues startup builds for every restored layer in order"); std::filesystem::remove_all(root); }