xref: /aosp_15_r20/external/deqp/scripts/build_android_mustpass.py (revision 35238bce31c2a825756842865a792f8cf7f89930)
1# -*- coding: utf-8 -*-
2
3#-------------------------------------------------------------------------
4# drawElements Quality Program utilities
5# --------------------------------------
6#
7# Copyright 2015 The Android Open Source Project
8#
9# Licensed under the Apache License, Version 2.0 (the "License");
10# you may not use this file except in compliance with the License.
11# You may obtain a copy of the License at
12#
13#      http://www.apache.org/licenses/LICENSE-2.0
14#
15# Unless required by applicable law or agreed to in writing, software
16# distributed under the License is distributed on an "AS IS" BASIS,
17# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
18# See the License for the specific language governing permissions and
19# limitations under the License.
20#
21#-------------------------------------------------------------------------
22
23from ctsbuild.common import DEQP_DIR
24from ctsbuild.config import ANY_GENERATOR
25from build_caselists import Module, getModuleByName, getBuildConfig, DEFAULT_BUILD_DIR, DEFAULT_TARGET
26from mustpass import Project, Package, Mustpass, Configuration, include, exclude, genMustpassLists, parseBuildConfigFromCmdLineArgs
27
28import os
29
30COPYRIGHT_DECLARATION = """
31     Copyright (C) 2016 The Android Open Source Project
32
33     Licensed under the Apache License, Version 2.0 (the "License");
34     you may not use this file except in compliance with the License.
35     You may obtain a copy of the License at
36
37          http://www.apache.org/licenses/LICENSE-2.0
38
39     Unless required by applicable law or agreed to in writing, software
40     distributed under the License is distributed on an "AS IS" BASIS,
41     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
42     See the License for the specific language governing permissions and
43     limitations under the License.
44     """
45
46CTS_DATA_DIR = os.path.join(DEQP_DIR, "android", "cts")
47
48CTS_PROJECT = Project(path = CTS_DATA_DIR, copyright = COPYRIGHT_DECLARATION)
49
50EGL_MODULE = getModuleByName("dEQP-EGL")
51GLES2_MODULE = getModuleByName("dEQP-GLES2")
52GLES3_MODULE = getModuleByName("dEQP-GLES3")
53GLES31_MODULE = getModuleByName("dEQP-GLES31")
54VULKAN_MODULE = getModuleByName("dEQP-VK")
55
56# Main
57
58MAIN_EGL_COMMON_FILTERS = [include("egl-main.txt"),
59                                   exclude("egl-test-issues.txt"),
60                                   exclude("egl-manual-robustness.txt"),
61                                   exclude("egl-driver-issues.txt")]
62
63# Android CTS is not using EGL test list for year 2021
64MAIN_EGL_PKG = Package(module = EGL_MODULE, configurations = [
65        Configuration(name = "main-2020-03-01",
66                      glconfig = "rgba8888d24s8ms0",
67                      rotation = "unspecified",
68                      surfacetype = "window",
69                      required = True,
70                      filters = [include("egl-main-2020-03-01.txt")],
71                      runtime = "23m"),
72        Configuration(name = "main-2022-03-01",
73                      glconfig = "rgba8888d24s8ms0",
74                      rotation = "unspecified",
75                      surfacetype = "window",
76                      required = True,
77                      filters = [include("egl-main-2022-03-01.txt")],
78                      runtime = "5m"),
79        Configuration(name = "main-2023-03-01",
80                      glconfig = "rgba8888d24s8ms0",
81                      rotation = "unspecified",
82                      surfacetype = "window",
83                      required = True,
84                      filters = [include("egl-main-2023-03-01.txt")],
85                      runtime = "5m"),
86        Configuration(name = "main-2024-03-01",
87                      glconfig = "rgba8888d24s8ms0",
88                      rotation = "unspecified",
89                      surfacetype = "window",
90                      required = True,
91                      filters = [include("egl-main-2024-03-01.txt")],
92                      runtime = "5m"),
93        Configuration(name = "main-2025-03-01",
94                      glconfig = "rgba8888d24s8ms0",
95                      rotation = "unspecified",
96                      surfacetype = "window",
97                      required = True,
98                      filters = MAIN_EGL_COMMON_FILTERS + [exclude("egl-main-2020-03-01.txt", "egl-main-2022-03-01.txt", "egl-main-2023-03-01.txt", "egl-main-2024-03-01.txt")],
99                      runtime = "5m"),
100
101        # Note: There are no incremental deqp testlists for EGL since these tests do not work with
102        # deqp-binary.
103    ])
104
105MAIN_GLES2_COMMON_FILTERS = [
106        include("gles2-main.txt"),
107        exclude("gles2-test-issues.txt"),
108        exclude("gles2-failures.txt"),
109    ]
110MAIN_GLES2_PKG = Package(module = GLES2_MODULE, configurations = [
111        Configuration(name = "main-2020-03-01",
112                      glconfig = "rgba8888d24s8ms0",
113                      rotation = "unspecified",
114                      surfacetype = "window",
115                      required = True,
116                      filters = [include("gles2-main-2020-03-01.txt")],
117                      runtime = "46m"),
118        Configuration(name = "main-2021-03-01",
119                      glconfig = "rgba8888d24s8ms0",
120                      rotation = "unspecified",
121                      surfacetype = "window",
122                      required = True,
123                      filters = [include("gles2-main-2021-03-01.txt")],
124                      runtime = "10m"),
125        Configuration(name = "main-2022-03-01",
126                      glconfig = "rgba8888d24s8ms0",
127                      rotation = "unspecified",
128                      surfacetype = "window",
129                      required = True,
130                      filters = [include("gles2-main-2022-03-01.txt")],
131                      runtime = "10m"),
132        Configuration(name = "main-2023-03-01",
133                      glconfig = "rgba8888d24s8ms0",
134                      rotation = "unspecified",
135                      surfacetype = "window",
136                      required = True,
137                      filters = [include("gles2-main-2023-03-01.txt")],
138                      runtime = "10m"),
139        Configuration(name = "main-2024-03-01",
140                      glconfig = "rgba8888d24s8ms0",
141                      rotation = "unspecified",
142                      surfacetype = "window",
143                      required = True,
144                      filters = [include("gles2-main-2024-03-01.txt")],
145                      runtime = "10m"),
146        Configuration(name = "main-2025-03-01",
147                      glconfig = "rgba8888d24s8ms0",
148                      rotation = "unspecified",
149                      surfacetype = "window",
150                      required = True,
151                      filters = MAIN_GLES2_COMMON_FILTERS + [exclude("gles2-main-2020-03-01.txt", "gles2-main-2021-03-01.txt", "gles2-main-2022-03-01.txt", "gles2-main-2023-03-01.txt", "gles2-main-2024-03-01.txt")],
152                      runtime = "10m"),
153
154        # Incremental deqp baseline
155        Configuration(name = "incremental-deqp-baseline",
156                      filters = [include("gles2-main-2020-03-01.txt"), exclude("gles2-incremental-deqp-excluded.txt")],
157                      runtime = "5m",
158                      runByDefault = False),
159    ])
160
161MAIN_GLES3_COMMON_FILTERS = [
162        include("gles3-main.txt"),
163        exclude("gles3-hw-issues.txt"),
164        exclude("gles3-driver-issues.txt"),
165        exclude("gles3-test-issues.txt"),
166        exclude("gles3-spec-issues.txt"),
167        exclude("gles3-waivers.txt"),
168    ]
169MAIN_GLES3_PKG = Package(module = GLES3_MODULE, configurations = [
170        # Main
171        Configuration(name = "main-2020-03-01",
172                      glconfig = "rgba8888d24s8ms0",
173                      rotation = "unspecified",
174                      surfacetype = "window",
175                      required = True,
176                      filters = [include("gles3-main-2020-03-01.txt")],
177                      runtime = "1h50m"),
178        Configuration(name = "main-2021-03-01",
179                      glconfig = "rgba8888d24s8ms0",
180                      rotation = "unspecified",
181                      surfacetype = "window",
182                      required = True,
183                      filters = [include("gles3-main-2021-03-01.txt")],
184                      runtime = "10m"),
185        Configuration(name = "main-2022-03-01",
186                      glconfig = "rgba8888d24s8ms0",
187                      rotation = "unspecified",
188                      surfacetype = "window",
189                      required = True,
190                      filters = [include("gles3-main-2022-03-01.txt")],
191                      runtime = "10m"),
192        Configuration(name = "main-2023-03-01",
193                      glconfig = "rgba8888d24s8ms0",
194                      rotation = "unspecified",
195                      surfacetype = "window",
196                      required = True,
197                      filters = [include("gles3-main-2023-03-01.txt")],
198                      runtime = "10m"),
199        Configuration(name = "main-2024-03-01",
200                      glconfig = "rgba8888d24s8ms0",
201                      rotation = "unspecified",
202                      surfacetype = "window",
203                      required = True,
204                      filters = [include("gles3-main-2024-03-01.txt")],
205                      runtime = "10m"),
206        Configuration(name = "main-2025-03-01",
207                      glconfig = "rgba8888d24s8ms0",
208                      rotation = "unspecified",
209                      surfacetype = "window",
210                      required = True,
211                      filters = MAIN_GLES3_COMMON_FILTERS + [exclude("gles3-main-2020-03-01.txt", "gles3-main-2021-03-01.txt", "gles3-main-2022-03-01.txt", "gles3-main-2023-03-01.txt", "gles3-main-2024-03-01.txt")],
212                      runtime = "10m"),
213        # Rotations
214        Configuration(name = "rotate-portrait",
215                      glconfig = "rgba8888d24s8ms0",
216                      rotation = "0",
217                      surfacetype = "window",
218                      filters = MAIN_GLES3_COMMON_FILTERS + [include("gles3-rotation.txt")],
219                      runtime = "1m"),
220        Configuration(name = "rotate-landscape",
221                      glconfig = "rgba8888d24s8ms0",
222                      rotation = "90",
223                      surfacetype = "window",
224                      filters = MAIN_GLES3_COMMON_FILTERS + [include("gles3-rotation.txt")],
225                      runtime = "1m"),
226        Configuration(name = "rotate-reverse-portrait",
227                      glconfig = "rgba8888d24s8ms0",
228                      rotation = "180",
229                      surfacetype = "window",
230                      filters = MAIN_GLES3_COMMON_FILTERS + [include("gles3-rotation.txt")],
231                      runtime = "1m"),
232        Configuration(name = "rotate-reverse-landscape",
233                      glconfig = "rgba8888d24s8ms0",
234                      rotation = "270",
235                      surfacetype = "window",
236                      filters = MAIN_GLES3_COMMON_FILTERS + [include("gles3-rotation.txt")],
237                      runtime = "1m"),
238
239        # MSAA
240        Configuration(name = "multisample",
241                      glconfig = "rgba8888d24s8ms4",
242                      rotation = "unspecified",
243                      surfacetype = "window",
244                      filters = MAIN_GLES3_COMMON_FILTERS + [include("gles3-multisample.txt"),
245                                                                     exclude("gles3-multisample-issues.txt")],
246                      runtime = "1m"),
247
248        # Pixel format
249        Configuration(name = "565-no-depth-no-stencil",
250                      glconfig = "rgb565d0s0ms0",
251                      rotation = "unspecified",
252                      surfacetype = "window",
253                      filters = MAIN_GLES3_COMMON_FILTERS + [include("gles3-pixelformat.txt"),
254                                                                     exclude("gles3-pixelformat-issues.txt")],
255                      runtime = "1m"),
256        # Incremental dEQP
257        Configuration(name = "incremental-deqp",
258                      filters = [include("gles3-incremental-deqp.txt")],
259                      runtime = "5m",
260                      runByDefault = False),
261        Configuration(name = "incremental-deqp-baseline",
262                      filters = [include("gles3-main-2020-03-01.txt"), exclude("gles3-incremental-deqp-excluded.txt")],
263                      runtime = "5m",
264                      runByDefault = False),
265    ])
266
267MAIN_GLES31_COMMON_FILTERS = [
268        include("gles31-main.txt"),
269        exclude("gles31-hw-issues.txt"),
270        exclude("gles31-driver-issues.txt"),
271        exclude("gles31-test-issues.txt"),
272        exclude("gles31-spec-issues.txt"),
273        exclude("gles31-waivers.txt"),
274    ]
275MAIN_GLES31_PKG = Package(module = GLES31_MODULE, configurations = [
276        Configuration(name = "main-2020-03-01",
277                      glconfig = "rgba8888d24s8ms0",
278                      rotation = "unspecified",
279                      surfacetype = "window",
280                      required = True,
281                      filters = [include("gles31-main-2020-03-01.txt")],
282                      runtime = "1h40m"),
283        Configuration(name = "main-2021-03-01",
284                      glconfig = "rgba8888d24s8ms0",
285                      rotation = "unspecified",
286                      surfacetype = "window",
287                      required = True,
288                      filters = [include("gles31-main-2021-03-01.txt")],
289                      runtime = "10m"),
290        Configuration(name = "main-2022-03-01",
291                      glconfig = "rgba8888d24s8ms0",
292                      rotation = "unspecified",
293                      surfacetype = "window",
294                      required = True,
295                      filters = [include("gles31-main-2022-03-01.txt")],
296                      runtime = "10m"),
297        Configuration(name = "main-2023-03-01",
298                      glconfig = "rgba8888d24s8ms0",
299                      rotation = "unspecified",
300                      surfacetype = "window",
301                      required = True,
302                      filters = [include("gles31-main-2023-03-01.txt")],
303                      runtime = "10m"),
304        Configuration(name = "main-2024-03-01",
305                      glconfig = "rgba8888d24s8ms0",
306                      rotation = "unspecified",
307                      surfacetype = "window",
308                      required = True,
309                      filters = [include("gles31-main-2024-03-01.txt")],
310                      runtime = "10m"),
311        Configuration(name = "main-2025-03-01",
312                      glconfig = "rgba8888d24s8ms0",
313                      rotation = "unspecified",
314                      surfacetype = "window",
315                      required = True,
316                      filters = MAIN_GLES31_COMMON_FILTERS + [exclude("gles31-main-2020-03-01.txt", "gles31-main-2021-03-01.txt", "gles31-main-2022-03-01.txt", "gles31-main-2023-03-01.txt", "gles31-main-2024-03-01.txt")],
317                      runtime = "10m"),
318        # Rotations
319        Configuration(name = "rotate-portrait",
320                      glconfig = "rgba8888d24s8ms0",
321                      rotation = "0",
322                      surfacetype = "window",
323                      filters = MAIN_GLES31_COMMON_FILTERS + [include("gles31-rotation.txt")],
324                      runtime = "1m30s"),
325        Configuration(name = "rotate-landscape",
326                      glconfig = "rgba8888d24s8ms0",
327                      rotation = "90",
328                      surfacetype = "window",
329                      filters = MAIN_GLES31_COMMON_FILTERS + [include("gles31-rotation.txt")],
330                      runtime = "1m30s"),
331        Configuration(name = "rotate-reverse-portrait",
332                      glconfig = "rgba8888d24s8ms0",
333                      rotation = "180",
334                      surfacetype = "window",
335                      filters = MAIN_GLES31_COMMON_FILTERS + [include("gles31-rotation.txt")],
336                      runtime = "1m30s"),
337        Configuration(name = "rotate-reverse-landscape",
338                      glconfig = "rgba8888d24s8ms0",
339                      rotation = "270",
340                      surfacetype = "window",
341                      filters = MAIN_GLES31_COMMON_FILTERS + [include("gles31-rotation.txt")],
342                      runtime = "1m30s"),
343
344        # MSAA
345        Configuration(name = "multisample",
346                      glconfig = "rgba8888d24s8ms4",
347                      rotation = "unspecified",
348                      surfacetype = "window",
349                      filters = MAIN_GLES31_COMMON_FILTERS + [include("gles31-multisample.txt")],
350                      runtime = "2m"),
351
352        # Pixel format
353        Configuration(name = "565-no-depth-no-stencil",
354                      glconfig = "rgb565d0s0ms0",
355                      rotation = "unspecified",
356                      surfacetype = "window",
357                      filters = MAIN_GLES31_COMMON_FILTERS + [include("gles31-pixelformat.txt")],
358                      runtime = "1m"),
359
360        # Incremental deqp baseline
361        Configuration(name = "incremental-deqp-baseline",
362                      filters = [include("gles31-main-2020-03-01.txt")],
363                      runtime = "5m",
364                      runByDefault = False),
365    ])
366
367MAIN_VULKAN_FILTERS = [
368        include("vk-main.txt"),
369        exclude("vk-not-applicable.txt"),
370        exclude("vk-excluded-tests.txt"),
371        exclude("vk-test-issues.txt"),
372        exclude("vk-waivers.txt"),
373    ]
374MAIN_VULKAN_PKG = Package(module = VULKAN_MODULE, configurations = [
375        Configuration(name = "main-2019-03-01",
376                      filters = [include("vk-main-2019-03-01.txt")],
377                      runtime = "2h29m",
378                      listOfGroupsToSplit = ["dEQP-VK"]),
379        Configuration(name = "main-2020-03-01",
380                      filters = [include("vk-main-2020-03-01.txt")],
381                      runtime = "2h29m",
382                      listOfGroupsToSplit = ["dEQP-VK"]),
383        Configuration(name = "main-2021-03-01",
384                      filters = [include("vk-main-2021-03-01.txt")],
385                      runtime = "2h29m",
386                      listOfGroupsToSplit = ["dEQP-VK"]),
387        Configuration(name = "main-2022-03-01",
388                      filters = [include("vk-main-2022-03-01.txt")],
389                      runtime = "10m",
390                      listOfGroupsToSplit = ["dEQP-VK", "dEQP-VK.pipeline", "dEQP-VK.image", "dEQP-VK.shader_object"]),
391        Configuration(name = "main-2023-03-01",
392                      filters = [include("vk-main-2023-03-01-part1.txt", "vk-main-2023-03-01-part2.txt")],
393                      runtime = "10m",
394                      listOfGroupsToSplit = ["dEQP-VK", "dEQP-VK.pipeline", "dEQP-VK.image", "dEQP-VK.shader_object"]),
395        Configuration(name = "main-2024-03-01",
396                      filters = [include("vk-main-2024-03-01.txt")],
397                      runtime = "10m",
398                      listOfGroupsToSplit = ["dEQP-VK", "dEQP-VK.pipeline", "dEQP-VK.image", "dEQP-VK.shader_object"]),
399        Configuration(name = "main-2025-03-01",
400                      filters = MAIN_VULKAN_FILTERS + [exclude("vk-main-2019-03-01.txt", "vk-main-2020-03-01.txt", "vk-main-2021-03-01.txt", "vk-main-2022-03-01.txt", "vk-main-2023-03-01-part1.txt", "vk-main-2023-03-01-part2.txt", "vk-main-2024-03-01.txt")],
401                      runtime = "10m",
402                      listOfGroupsToSplit = ["dEQP-VK", "dEQP-VK.pipeline", "dEQP-VK.image", "dEQP-VK.shader_object"]),
403        Configuration(name = "incremental-deqp",
404                      filters = [include("vk-incremental-deqp.txt")],
405                      runtime = "5m",
406                      runByDefault = False,
407                      listOfGroupsToSplit = []),
408        Configuration(name = "incremental-deqp-baseline",
409                      filters = [include("vk-main-2019-03-01.txt"),
410                                 exclude("vk-incremental-deqp-excluded.txt")],
411                      runtime = "2h29m",
412                      runByDefault = False,
413                      listOfGroupsToSplit = []),
414    ])
415
416MUSTPASS_LISTS = [
417        Mustpass(project = CTS_PROJECT, version = "main", packages = [MAIN_EGL_PKG, MAIN_GLES2_PKG, MAIN_GLES3_PKG, MAIN_GLES31_PKG, MAIN_VULKAN_PKG])
418    ]
419
420if __name__ == "__main__":
421    genMustpassLists(MUSTPASS_LISTS, ANY_GENERATOR, parseBuildConfigFromCmdLineArgs())
422