From bf7525e9b75a6137ac861c9ea1649c1716e096c3 Mon Sep 17 00:00:00 2001 From: Untold Engine Date: Fri, 23 Oct 2026 06:08:40 -0700 Subject: [PATCH] [Bugfix] Don't require lightTile pipeline success on devices without tile shading test_EditorDefaultPipeLines_canInitializeAllPipelines asserted every pipeline must initialize successfully, but InitLightTilePipeline() intentionally returns nil on GPUs without Apple4 tile-shading support or on a paravirtualized GPU (CI's runners). That made the test fail on every CI run. Mirror UntoldEngine's own TileLightStageTests, which skip tile-shading-dependent assertions via tileShadingAvailable. Fixes #190 --- .../EditorRenderPipeLinesTests.swift | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/Tests/UntoldEditorTests/EditorRenderPipeLinesTests.swift b/Tests/UntoldEditorTests/EditorRenderPipeLinesTests.swift index dff1343..126f36a 100644 --- a/Tests/UntoldEditorTests/EditorRenderPipeLinesTests.swift +++ b/Tests/UntoldEditorTests/EditorRenderPipeLinesTests.swift @@ -471,7 +471,13 @@ final class EditorRenderPipeLinesTests: XCTestCase { } func test_EditorDefaultPipeLines_canInitializeAllPipelines() { - // This test verifies that all pipelines in EditorDefaultPipeLines can be initialized + // This test verifies that all pipelines in EditorDefaultPipeLines can be initialized. + // .lightTile is nil on devices without tile-shading support (the simulator, GPUs + // before Apple family 4, or CI's paravirtualized GPU) — that's expected engine + // behavior, not a failure, so it's excluded the same way UntoldEngine's own + // TileLightStageTests skip via `tileShadingAvailable`. + let tileShadingAvailable = renderInfo.device?.supportsFamily(.apple4) == true + && renderInfo.device?.name.localizedCaseInsensitiveContains("paravirtual") == false // Act let pipelines = EditorDefaultPipeLines() @@ -479,6 +485,9 @@ final class EditorRenderPipeLinesTests: XCTestCase { var failedPipelines: [String] = [] for (type, initBlock) in pipelines { + if type == .lightTile, !tileShadingAvailable { + continue + } if let pipeline = initBlock() { if !pipeline.success { allSuccessful = false