[CI] (trace-replay): run iterationRP only on DirectVulkan

This commit is contained in:
2026-08-16 11:09:56 -04:00
parent b3794f4e6a
commit 6df5a6137f
4 changed files with 63 additions and 16 deletions
+2 -8
View File
@@ -209,7 +209,7 @@ jobs:
- name: Load trace cases - name: Load trace cases
id: trace-cases id: trace-cases
run: | run: |
echo "android=$(python3 tools/trace_replay/trace_cases.py --ci --format github-apk)" >> "$GITHUB_OUTPUT" echo "android=$(python3 tools/trace_replay/trace_cases.py --ci --format github-apk-matrix)" >> "$GITHUB_OUTPUT"
echo "names=$(python3 tools/trace_replay/trace_cases.py --ci --format names)" >> "$GITHUB_OUTPUT" echo "names=$(python3 tools/trace_replay/trace_cases.py --ci --format names)" >> "$GITHUB_OUTPUT"
trace-fixtures: trace-fixtures:
@@ -337,13 +337,7 @@ jobs:
strategy: strategy:
fail-fast: false fail-fast: false
max-parallel: 4 max-parallel: 4
matrix: matrix: ${{ fromJSON(needs.trace-cases.outputs.android) }}
backend:
- name: DirectGLES
gpu: software
- name: DirectVulkan
gpu: lavapipe
case: ${{ fromJSON(needs.trace-cases.outputs.android) }}
steps: steps:
- name: Set Swap Space - name: Set Swap Space
uses: pierotofy/set-swap-space@v1.0 uses: pierotofy/set-swap-space@v1.0
+5 -6
View File
@@ -491,6 +491,7 @@ jobs:
- benchmark - benchmark
- integration - integration
outputs: outputs:
matrix: ${{ steps.trace-cases.outputs.matrix }}
names: ${{ steps.trace-cases.outputs.names }} names: ${{ steps.trace-cases.outputs.names }}
steps: steps:
- name: Checkout repo - name: Checkout repo
@@ -498,7 +499,9 @@ jobs:
- name: Load trace cases - name: Load trace cases
id: trace-cases id: trace-cases
run: echo "names=$(python3 tools/trace_replay/trace_cases.py --ci --format names)" >> "$GITHUB_OUTPUT" run: |
echo "matrix=$(python3 tools/trace_replay/trace_cases.py --ci --format github-test-matrix)" >> "$GITHUB_OUTPUT"
echo "names=$(python3 tools/trace_replay/trace_cases.py --ci --format names)" >> "$GITHUB_OUTPUT"
trace-fixtures: trace-fixtures:
name: trace fixture (${{ matrix.case }}) name: trace fixture (${{ matrix.case }})
@@ -577,11 +580,7 @@ jobs:
strategy: strategy:
fail-fast: false fail-fast: false
max-parallel: 4 max-parallel: 4
matrix: matrix: ${{ fromJSON(needs.trace-cases.outputs.matrix) }}
backend:
- DirectGLES
- DirectVulkan
case: ${{ fromJSON(needs.trace-cases.outputs.names) }}
steps: steps:
- name: Set Swap Space - name: Set Swap Space
+3 -1
View File
@@ -277,7 +277,9 @@
}, },
{ {
"name": "minecraft-1.21.4-fabric-iris-iterationrp-in-world", "name": "minecraft-1.21.4-fabric-iris-iterationrp-in-world",
"ci": false, "ci_backends": [
"DirectVulkan"
],
"trace_archive": "minecraft-1.21.4-fabric-iris-iterationrp-in-world.tgz", "trace_archive": "minecraft-1.21.4-fabric-iris-iterationrp-in-world.tgz",
"golden": "minecraft-1.21.4-fabric-iris-iterationrp-in-world.0000202020.png", "golden": "minecraft-1.21.4-fabric-iris-iterationrp-in-world.0000202020.png",
"target_call": 202020, "target_call": 202020,
+53 -1
View File
@@ -6,6 +6,7 @@ from pathlib import Path
TRACE_CASES_JSON = Path(__file__).with_name("trace_cases.json") TRACE_CASES_JSON = Path(__file__).with_name("trace_cases.json")
CI_BACKENDS = ("DirectGLES", "DirectVulkan")
def load_trace_case_manifest(path=TRACE_CASES_JSON): def load_trace_case_manifest(path=TRACE_CASES_JSON):
@@ -71,6 +72,46 @@ def ci_trace_cases(cases):
return [case for case in cases if case.get("ci", True)] return [case for case in cases if case.get("ci", True)]
def ci_backends(case):
backends = case.get("ci_backends")
if backends is None:
return CI_BACKENDS
if not isinstance(backends, list) or not backends:
raise ValueError(f"ci_backends must be a non-empty list for {case['name']}")
unknown = [backend for backend in backends if backend not in CI_BACKENDS]
if unknown:
raise ValueError(
f"unknown ci_backends for {case['name']}: {', '.join(unknown)}"
)
if len(set(backends)) != len(backends):
raise ValueError(f"ci_backends contains duplicates for {case['name']}")
return backends
def github_test_matrix(cases):
return {
"include": [
{"backend": backend, "case": case["name"]}
for case in cases
for backend in ci_backends(case)
]
}
def github_apk_matrix(cases):
backends = {
"DirectGLES": {"name": "DirectGLES", "gpu": "software"},
"DirectVulkan": {"name": "DirectVulkan", "gpu": "lavapipe"},
}
return {
"include": [
{"backend": backends[backend], "case": github_apk_case(case)}
for case in cases
for backend in ci_backends(case)
]
}
def cmake_quote(value): def cmake_quote(value):
return '"' + str(value).replace("\\", "/").replace('"', '\\"') + '"' return '"' + str(value).replace("\\", "/").replace('"', '\\"') + '"'
@@ -114,7 +155,14 @@ def parse_args():
parser.add_argument("--fixture-root", default="tools/trace_replay/fixtures") parser.add_argument("--fixture-root", default="tools/trace_replay/fixtures")
parser.add_argument( parser.add_argument(
"--format", "--format",
choices=("names", "github-apk", "fixture-files", "cmake"), choices=(
"names",
"github-test-matrix",
"github-apk",
"github-apk-matrix",
"fixture-files",
"cmake",
),
default="names", default="names",
) )
return parser.parse_args() return parser.parse_args()
@@ -127,8 +175,12 @@ def main():
cases = ci_trace_cases(cases) cases = ci_trace_cases(cases)
if args.format == "names": if args.format == "names":
print(json.dumps([case["name"] for case in cases], separators=(",", ":"))) print(json.dumps([case["name"] for case in cases], separators=(",", ":")))
elif args.format == "github-test-matrix":
print(json.dumps(github_test_matrix(cases), separators=(",", ":")))
elif args.format == "github-apk": elif args.format == "github-apk":
print(json.dumps([github_apk_case(case) for case in cases], separators=(",", ":"))) print(json.dumps([github_apk_case(case) for case in cases], separators=(",", ":")))
elif args.format == "github-apk-matrix":
print(json.dumps(github_apk_matrix(cases), separators=(",", ":")))
elif args.format == "fixture-files": elif args.format == "fixture-files":
if not args.case_name: if not args.case_name:
print("--case is required for --format fixture-files", file=sys.stderr) print("--case is required for --format fixture-files", file=sys.stderr)