ci: Move container files into their own dir
[platform/upstream/mesa.git] / .gitlab-ci.yml
index c8a79a6..22f3e5b 100644 (file)
@@ -1,15 +1,20 @@
 variables:
   FDO_UPSTREAM_REPO: mesa/mesa
+  MESA_TEMPLATES_COMMIT: &ci-templates-commit 52dd4a94044449c8481d18dcdc221a3c636366d2
   CI_PRE_CLONE_SCRIPT: |-
           set -o xtrace
           /usr/bin/wget -q -O- ${CI_PROJECT_URL}/-/raw/${CI_COMMIT_SHA}/.gitlab-ci/download-git-cache.sh | sh -
           set +o xtrace
+  MINIO_HOST: minio-packet.freedesktop.org
 
 include:
   - project: 'freedesktop/ci-templates'
-    ref: 43ac932d5b8ebf43040d302de3c6e734df178384
+    ref: 79c325922670137e8f0a4dc5f6f097e0eb57c1af
     file:
       - '/templates/ci-fairy.yml'
+  - project: 'freedesktop/ci-templates'
+    ref: *ci-templates-commit
+    file:
       - '/templates/debian.yml'
   - local: '.gitlab-ci/lava-gitlab-ci.yml'
   - local: '.gitlab-ci/test-source-dep.yml'
@@ -19,19 +24,15 @@ stages:
   - container
   - container-2
   - git-archive
-  - deploy
   - meson-x86_64
-  - scons
-  - meson-misc
-  - llvmpipe
-  - softpipe
+  - build-misc
+  - amd
+  - arm
+  - broadcom
   - freedreno
-  - panfrost
-  - radv
-  - lima
-  - virgl
-  - radeonsi
-  - d3d12
+  - software-renderer
+  - layered-backends
+  - deploy
   - success
 
 # Generic rule to not run the job during scheduled pipelines
@@ -101,15 +102,27 @@ test-docs:
   # Cancel job if a newer commit is pushed to the same branch
   interruptible: true
   stage: deploy
+  needs: []
+  rules:
+    - *ignore_scheduled_pipelines
+    - if: *is-forked-branch
+      changes: *docs-or-ci
+      when: manual
+    # Other cases default to never
+
+test-docs-mr:
+  extends:
+    - test-docs
   needs:
     - sanity
+  artifacts:
+    expose_as: 'Documentation preview'
+    paths:
+    - public
   rules:
-    - if: *is-pre-merge-for-marge
+    - if: *is-pre-merge
       changes: *docs-or-ci
       when: on_success
-    - if: *is-forked-branch-or-pre-merge
-      changes: *docs-or-ci
-      when: manual
     # Other cases default to never
 
 # When to automatically run the CI
@@ -178,7 +191,7 @@ success:
 
 # Build the CI docker images.
 #
-# FDO_DISTRIBUTION_TAG is the tag of the docker image used by later stage jobs. If the
+# MESA_IMAGE_TAG is the tag of the docker image used by later stage jobs. If the
 # image doesn't exist yet, the container stage job generates it.
 #
 # In order to generate a new image, one should generally change the tag.
@@ -226,28 +239,37 @@ success:
     # Otherwise, container jobs won't run
     - when: never
   variables:
+    FDO_DISTRIBUTION_TAG: "${MESA_IMAGE_TAG}--${MESA_TEMPLATES_COMMIT}"
     FDO_DISTRIBUTION_VERSION: buster-slim
     FDO_REPO_SUFFIX: "debian/$CI_JOB_NAME"
     FDO_DISTRIBUTION_EXEC: 'env FDO_CI_CONCURRENT=${FDO_CI_CONCURRENT} bash .gitlab-ci/container/${CI_JOB_NAME}.sh'
     # no need to pull the whole repo to build the container image
     GIT_STRATEGY: none
 
+.use-base-image:
+  extends:
+    - .container
+    # Don't want the .container rules
+    - .ci-run-policy
+  stage: container-2
+  variables:
+    FDO_BASE_IMAGE: "${CI_REGISTRY_IMAGE}/${MESA_BASE_IMAGE}:${MESA_BASE_TAG}--${MESA_TEMPLATES_COMMIT}"
+
 # Debian 10 based x86 build image base
 x86_build-base:
   extends:
     - .fdo.container-build@debian
     - .container
   variables:
-    FDO_DISTRIBUTION_TAG: &x86_build-base "2020-12-01-no-more-dri1"
+    MESA_IMAGE_TAG: &x86_build-base "2021-02-08-container-reorg"
 
 .use-x86_build-base:
   extends:
-    - x86_build-base
-    - .ci-run-policy
-  stage: container-2
+    - .fdo.container-build@debian
+    - .use-base-image
   variables:
-    BASE_TAG: *x86_build-base
-    FDO_BASE_IMAGE: "$CI_REGISTRY_IMAGE/debian/x86_build-base:$BASE_TAG"
+    MESA_BASE_IMAGE: "debian/x86_build-base"
+    MESA_BASE_TAG: *x86_build-base
   needs:
     - x86_build-base
 
@@ -256,12 +278,12 @@ x86_build:
   extends:
     - .use-x86_build-base
   variables:
-    FDO_DISTRIBUTION_TAG: &x86_build "2020-12-01-no-more-dri1"
+    MESA_IMAGE_TAG: &x86_build "2021-02-08-container-reorg"
 
 .use-x86_build:
   variables:
     TAG: *x86_build
-  image: "$CI_REGISTRY_IMAGE/debian/x86_build:$TAG"
+  image: "$CI_REGISTRY_IMAGE/debian/x86_build:${TAG}--${MESA_TEMPLATES_COMMIT}"
   needs:
     - x86_build
 
@@ -270,12 +292,12 @@ i386_build:
   extends:
     - .use-x86_build-base
   variables:
-    FDO_DISTRIBUTION_TAG: &i386_build "2020-12-01-no-more-dri1"
+    MESA_IMAGE_TAG: &i386_build "2021-02-08-container-reorg"
 
 .use-i386_build:
   variables:
     TAG: *i386_build
-  image: "$CI_REGISTRY_IMAGE/debian/i386_build:$TAG"
+  image: "$CI_REGISTRY_IMAGE/debian/i386_build:${TAG}--${MESA_TEMPLATES_COMMIT}"
   needs:
     - i386_build
 
@@ -284,12 +306,12 @@ ppc64el_build:
   extends:
     - .use-x86_build-base
   variables:
-    FDO_DISTRIBUTION_TAG: &ppc64el_build "2020-12-01-no-more-dri1"
+    MESA_IMAGE_TAG: &ppc64el_build "2021-02-08-container-reorg"
 
 .use-ppc64el_build:
   variables:
     TAG: *ppc64el_build
-  image: "$CI_REGISTRY_IMAGE/debian/ppc64el_build:$TAG"
+  image: "$CI_REGISTRY_IMAGE/debian/ppc64el_build:${TAG}--${MESA_TEMPLATES_COMMIT}"
   needs:
     - ppc64el_build
 
@@ -298,12 +320,12 @@ s390x_build:
   extends:
     - .use-x86_build-base
   variables:
-    FDO_DISTRIBUTION_TAG: &s390x_build "2020-12-01-no-more-dri1"
+    MESA_IMAGE_TAG: &s390x_build "2021-02-08-container-reorg"
 
 .use-s390x_build:
   variables:
     TAG: *s390x_build
-  image: "$CI_REGISTRY_IMAGE/debian/s390x_build:$TAG"
+  image: "$CI_REGISTRY_IMAGE/debian/s390x_build:${TAG}--${MESA_TEMPLATES_COMMIT}"
   needs:
     - s390x_build
 
@@ -312,12 +334,12 @@ android_build:
   extends:
     - .use-x86_build-base
   variables:
-    FDO_DISTRIBUTION_TAG: &android_build "2020-12-01-no-more-dri1"
+    MESA_IMAGE_TAG: &android_build "2021-02-08-container-reorg"
 
 .use-android_build:
   variables:
     TAG: *android_build
-  image: "$CI_REGISTRY_IMAGE/debian/android_build:$TAG"
+  image: "$CI_REGISTRY_IMAGE/debian/android_build:${TAG}--${MESA_TEMPLATES_COMMIT}"
   needs:
     - android_build
 
@@ -325,16 +347,15 @@ android_build:
 x86_test-base:
   extends: x86_build-base
   variables:
-    FDO_DISTRIBUTION_TAG: &x86_test-base "2020-12-01-no-more-dri1"
+    MESA_IMAGE_TAG: &x86_test-base "2021-02-08-container-reorg"
 
 .use-x86_test-base:
   extends:
-    - x86_build-base
-    - .ci-run-policy
-  stage: container-2
+    - .fdo.container-build@debian
+    - .use-base-image
   variables:
-    BASE_TAG: *x86_test-base
-    FDO_BASE_IMAGE: "$CI_REGISTRY_IMAGE/debian/x86_test-base:$BASE_TAG"
+    MESA_BASE_IMAGE: "debian/x86_test-base"
+    MESA_BASE_TAG: *x86_test-base
   needs:
     - x86_test-base
 
@@ -342,40 +363,26 @@ x86_test-base:
 x86_test-gl:
   extends: .use-x86_test-base
   variables:
-    FDO_DISTRIBUTION_TAG: &x86_test-gl "2020-11-06-deqp-version"
+    MESA_IMAGE_TAG: &x86_test-gl "2021-02-08-container-reorg"
 
 # Debian 10 based x86 test image for VK
 x86_test-vk:
   extends: .use-x86_test-base
   variables:
-    FDO_DISTRIBUTION_TAG: &x86_test-vk "2020-11-06-deqp-version"
-
-# Debian 9 based x86 build image (old LLVM)
-x86_build_old:
-  extends: x86_build-base
-  variables:
-    FDO_DISTRIBUTION_TAG: &x86_build_old "2020-12-01-no-more-dri1"
-    FDO_DISTRIBUTION_VERSION: stretch-slim
-
-.use-x86_build_old:
-  variables:
-    TAG: *x86_build_old
-  image: "$CI_REGISTRY_IMAGE/debian/x86_build_old:$TAG"
-  needs:
-    - x86_build_old
+    MESA_IMAGE_TAG: &x86_test-vk "2021-02-08-container-reorg"
 
 # Debian 10 based ARM build image
 arm_build:
   extends:
-    - .fdo.container-build@debian@aarch64
+    - .fdo.container-build@debian@arm64v8
     - .container
   variables:
-    FDO_DISTRIBUTION_TAG: &arm_build "2020-12-01-no-more-dri1"
+    MESA_IMAGE_TAG: &arm_build "2021-02-08-container-reorg"
 
 .use-arm_build:
   variables:
     TAG: *arm_build
-  image: "$CI_REGISTRY_IMAGE/debian/arm_build:$TAG"
+  image: "$CI_REGISTRY_IMAGE/debian/arm_build:${TAG}--${MESA_TEMPLATES_COMMIT}"
   needs:
     - arm_build
 
@@ -385,16 +392,15 @@ arm_test-base:
     - .fdo.container-build@debian
     - .container
   variables:
-    FDO_DISTRIBUTION_TAG: &arm_test-base "2020-10-06-clang10-2"
+    MESA_IMAGE_TAG: &arm_test-base "2021-02-08-container-reorg"
 
 .use-arm_test-base:
   extends:
-    - arm_test-base
-    - .ci-run-policy
-  stage: container-2
+    - .fdo.container-build@debian
+    - .use-base-image
   variables:
-    BASE_TAG: *arm_test-base
-    FDO_BASE_IMAGE: "$CI_REGISTRY_IMAGE/debian/arm_test-base:$BASE_TAG"
+    MESA_BASE_IMAGE: "debian/arm_test-base"
+    MESA_BASE_TAG: *arm_test-base
   needs:
     - arm_test-base
 
@@ -403,15 +409,29 @@ arm64_test:
   extends:
     - .use-arm_test-base
   variables:
-    FDO_DISTRIBUTION_TAG: &arm64_test "2020-11-09-db410c-net"
+    MESA_IMAGE_TAG: &arm64_test "2021-02-08-container-reorg"
 
 .use-arm64_test:
   variables:
     TAG: *arm64_test
-  image: "$CI_REGISTRY_IMAGE/debian/arm64_test:$TAG"
+  image: "$CI_REGISTRY_IMAGE/debian/arm64_test:${TAG}--${MESA_TEMPLATES_COMMIT}"
   needs:
     - arm64_test
 
+# x86 image with armhf rootfs for baremetal testing
+armhf_test:
+  extends:
+    - .use-arm_test-base
+  variables:
+    MESA_IMAGE_TAG: &armhf_test "2021-02-08-container-reorg"
+
+.use-armhf_test:
+  variables:
+    TAG: *armhf_test
+  image: "$CI_REGISTRY_IMAGE/debian/armhf_test:${TAG}--${MESA_TEMPLATES_COMMIT}"
+  needs:
+    - armhf_test
+
 # Native Windows docker builds
 #
 # Unlike the above Linux-based builds - including MinGW/SCons builds which
@@ -426,9 +446,9 @@ arm64_test:
 
 .windows-docker-vs2019:
   variables:
-    WINDOWS_TAG: "2020-12-01-piglit"
-    WINDOWS_IMAGE: "$CI_REGISTRY_IMAGE/windows/x64_build:$WINDOWS_TAG"
-    WINDOWS_UPSTREAM_IMAGE: "$CI_REGISTRY/$FDO_UPSTREAM_REPO/windows/x64_build:$WINDOWS_TAG"
+    WINDOWS_TAG: "2021-01-29"
+    WINDOWS_IMAGE: "$CI_REGISTRY_IMAGE/windows/x64_build:${WINDOWS_TAG}--${MESA_TEMPLATES_COMMIT}"
+    WINDOWS_UPSTREAM_IMAGE: "$CI_REGISTRY/$FDO_UPSTREAM_REPO/windows/x64_build:${WINDOWS_TAG}--${MESA_TEMPLATES_COMMIT}"
 
 windows_build_vs2019:
   extends:
@@ -437,7 +457,7 @@ windows_build_vs2019:
   stage: container
   variables:
     GIT_STRATEGY: fetch # we do actually need the full repository though
-  timeout: 2h # LLVM + piglit takes ages
+  timeout: 2h 30m # LLVM + piglit takes ages
   tags:
     - windows
     - shell
@@ -466,12 +486,14 @@ make git archive:
   tags:
     - packet.net
   script:
+    # Compactify the .git directory
+    - git gc --aggressive
     # compress the current folder
     - tar -cvzf ../$CI_PROJECT_NAME.tar.gz .
 
     # login with the JWT token
     - ci-fairy minio login $CI_JOB_JWT
-    - ci-fairy minio cp ../$CI_PROJECT_NAME.tar.gz minio://minio-packet.freedesktop.org/git-cache/$CI_PROJECT_NAMESPACE/$CI_PROJECT_NAME/$CI_PROJECT_NAME.tar.gz
+    - ci-fairy minio cp ../$CI_PROJECT_NAME.tar.gz minio://$MINIO_HOST/git-cache/$CI_PROJECT_NAMESPACE/$CI_PROJECT_NAME/$CI_PROJECT_NAME.tar.gz
 
 
 # Sanity checks of MR settings and commit logs
@@ -482,13 +504,11 @@ sanity:
   rules:
     - if: *is-pre-merge
       when: on_success
-    - if: *is-forked-branch
-      when: manual
     # Other cases default to never
+  variables:
+    GIT_STRATEGY: none
   script:
     # ci-fairy check-commits --junit-xml=check-commits.xml
-    # ci-fairy check-merge-request only works in pre-merge pipelines for MRs
-    - if test "x$CI_MERGE_REQUEST_SOURCE_BRANCH_NAME" != "x$CI_COMMIT_REF_NAME"; then exit 0; fi
     - ci-fairy check-merge-request --require-allow-collaboration --junit-xml=check-merge-request.xml
   artifacts:
     when: on_failure
@@ -553,7 +573,7 @@ sanity:
   extends:
     - .build-linux
     - .use-x86_build
-  stage: scons
+  stage: build-misc
   script:
     - env SCONSFLAGS="-j${FDO_CI_CONCURRENT:-4}" .gitlab-ci/scons-build.sh
 
@@ -571,7 +591,7 @@ meson-testing:
     GALLIUM_ST: >
       -D dri3=enabled
     GALLIUM_DRIVERS: "swrast,virgl,radeonsi"
-    VULKAN_DRIVERS: amd
+    VULKAN_DRIVERS: "swrast,amd"
     BUILDTYPE: "debugoptimized"
     EXTRA_OPTION: >
       -D werror=true
@@ -581,6 +601,15 @@ meson-testing:
     - .gitlab-ci/meson-build.sh
     - .gitlab-ci/prepare-artifacts.sh
 
+meson-testing-asan:
+  extends:
+    - meson-testing
+  variables:
+    EXTRA_OPTION: >
+      -D b_sanitize=address
+    UPLOAD_FOR_LAVA: ""
+    ARTIFACTS_DEBUG_SYMBOLS: 1
+
 meson-clover-testing:
   extends:
     - .meson-build
@@ -622,10 +651,10 @@ meson-gallium:
       -D gallium-xa=enabled
       -D gallium-nine=true
       -D gallium-opencl=disabled
-    GALLIUM_DRIVERS: "iris,nouveau,kmsro,r300,r600,freedreno,swr,swrast,svga,v3d,vc4,virgl,etnaviv,panfrost,lima,zink"
+    GALLIUM_DRIVERS: "iris,nouveau,kmsro,r300,r600,freedreno,swr,swrast,svga,v3d,vc4,virgl,etnaviv,panfrost,lima,zink,d3d12"
     VULKAN_DRIVERS: swrast
     EXTRA_OPTION: >
-      -D osmesa=gallium
+      -D osmesa=true
       -D tools=all
       -D werror=true
   script:
@@ -654,30 +683,15 @@ meson-release:
       -D gallium-nine=false
       -D gallium-opencl=disabled
       -D llvm=false
-    GALLIUM_DRIVERS: "nouveau,kmsro,freedreno,r300,svga,v3d,vc4,virgl,etnaviv,panfrost,lima,zink"
+    GALLIUM_DRIVERS: "nouveau,kmsro,freedreno,r300,svga,swrast,v3d,vc4,virgl,etnaviv,panfrost,lima,zink,d3d12"
     BUILDTYPE: "release"
     EXTRA_OPTION: >
-      -D osmesa=none
+      -D osmesa=true
       -D tools=all
       -D werror=true
   script:
     - .gitlab-ci/meson-build.sh
 
-meson-classic:
-  extends: .meson-build
-  variables:
-    UNWIND: "enabled"
-    DRI_LOADERS: >
-      -D glx=dri
-      -D gbm=enabled
-      -D egl=enabled
-      -D platforms=x11,wayland
-    DRI_DRIVERS: "auto"
-    EXTRA_OPTION: >
-      -D osmesa=classic
-      -D tools=all
-      -D werror=true
-
 meson-android:
   extends:
     - .meson-cross
@@ -715,17 +729,17 @@ meson-android:
 .meson-cross:
   extends:
     - .meson-build
-  stage: meson-misc
+  stage: build-misc
   variables:
     UNWIND: "disabled"
     DRI_LOADERS: >
-      -D glx=disabled
-      -D gbm=disabled
+      -D glx=dri
+      -D gbm=enabled
       -D egl=enabled
-      -D platforms=[]
-      -D osmesa=none
+      -D platforms=x11
+      -D osmesa=false
     GALLIUM_ST: >
-      -D dri3=disabled
+      -D dri3=enabled
       -D gallium-vdpau=disabled
       -D gallium-xvmc=disabled
       -D gallium-omx=disabled
@@ -795,7 +809,7 @@ meson-clang:
     DRI_LOADERS: >
       -D glvnd=true
     DRI_DRIVERS: "auto"
-    GALLIUM_DRIVERS: "iris,nouveau,kmsro,r300,r600,freedreno,swr,swrast,svga,v3d,vc4,virgl,etnaviv,panfrost,lima,zink,radeonsi,tegra"
+    GALLIUM_DRIVERS: "iris,nouveau,kmsro,r300,r600,freedreno,swr,swrast,svga,v3d,vc4,virgl,etnaviv,panfrost,lima,zink,radeonsi,tegra,d3d12"
     VULKAN_DRIVERS: intel,amd,freedreno,broadcom
     CC: "ccache clang-10"
     CXX: "ccache clang++-10"
@@ -804,7 +818,8 @@ meson-windows-vs2019:
   extends:
     - .build-windows
     - .use-windows_build_vs2019
-  stage: meson-misc
+    - .windows-build-rules
+  stage: build-misc
   script:
     - . .\.gitlab-ci\windows\mesa_build.ps1
   artifacts:
@@ -815,17 +830,19 @@ test-d3d12-windows:
   extends:
     - .build-windows
     - .use-windows_build_vs2019
-  stage: d3d12
+    - .windows-test-rules
+  stage: layered-backends
   dependencies:
     - meson-windows-vs2019
   needs:
     - meson-windows-vs2019
   variables:
+    GIT_STRATEGY: none # testing doesn't build anything from source
     GALLIUM_DRIVER: d3d12
     PIGLIT_PROFILE: quick_gl
-    PIGLIT_OPTIONS: -x nv_copy_depth_to_color
+    PIGLIT_OPTIONS: -x nv_copy_depth_to_color -x repeat-wait
   script:
-    - . .\.gitlab-ci\windows\piglit_run.ps1
+    - . _install/piglit_run.ps1
   artifacts:
     when: on_failure
     name: "mesa_${CI_JOB_NAME}"
@@ -873,7 +890,7 @@ meson-vulkan:
       -D gbm=disabled
       -D egl=disabled
       -D platforms=x11,wayland
-      -D osmesa=none
+      -D osmesa=false
     GALLIUM_ST: >
       -D dri3=enabled
       -D gallium-vdpau=disabled
@@ -900,8 +917,9 @@ meson-i386:
     - .use-i386_build
   variables:
     CROSS: i386
-    VULKAN_DRIVERS: intel,amd
-    GALLIUM_DRIVERS: "iris,r300,radeonsi,swrast,virgl"
+    VULKAN_DRIVERS: intel,amd,swrast
+    GALLIUM_DRIVERS: "iris,nouveau,r300,r600,radeonsi,swrast,virgl,zink"
+    DRI_DRIVERS: "i915,i965,r100,r200,nouveau"
     EXTRA_OPTION: >
       -D vulkan-overlay-layer=true
       -D vulkan-device-select-layer=true
@@ -917,7 +935,8 @@ meson-s390x:
     CROSS: s390x
     EXTRA_OPTION: >
       -D werror=true
-    GALLIUM_DRIVERS: "swrast"
+    GALLIUM_DRIVERS: "swrast,zink"
+    VULKAN_DRIVERS: "swrast"
 
 meson-ppc64el:
   extends:
@@ -925,20 +944,21 @@ meson-ppc64el:
     - .use-ppc64el_build
   variables:
     CROSS: ppc64el
-    EXTRA_OPTION: ""
-    GALLIUM_DRIVERS: "nouveau,radeonsi,swrast,virgl"
-    VULKAN_DRIVERS: "amd"
+    EXTRA_OPTION: >
+      -D werror=true
+    GALLIUM_DRIVERS: "nouveau,radeonsi,swrast,virgl,zink"
+    VULKAN_DRIVERS: "amd,swrast"
 
 meson-mingw32-x86_64:
   extends: .meson-build
-  stage: meson-misc
+  stage: build-misc
   variables:
     UNWIND: "disabled"
     DRI_DRIVERS: ""
     GALLIUM_DRIVERS: "swrast"
     EXTRA_OPTION: >
       -Dllvm=disabled
-      -Dosmesa=gallium
+      -Dosmesa=true
       --cross-file=.gitlab-ci/x86_64-w64-mingw32
 
 .test:
@@ -964,7 +984,7 @@ meson-mingw32-x86_64:
     - .test
   variables:
     TAG: *x86_test-gl
-  image: "$CI_REGISTRY_IMAGE/debian/x86_test-gl:$TAG"
+  image: "$CI_REGISTRY_IMAGE/debian/x86_test-gl:${TAG}--${MESA_TEMPLATES_COMMIT}"
   needs:
     - x86_test-gl
 
@@ -980,7 +1000,7 @@ meson-mingw32-x86_64:
     - .test
   variables:
     TAG: *x86_test-vk
-  image: "$CI_REGISTRY_IMAGE/debian/x86_test-vk:$TAG"
+  image: "$CI_REGISTRY_IMAGE/debian/x86_test-vk:${TAG}--${MESA_TEMPLATES_COMMIT}"
   needs:
     - meson-testing
     - x86_test-vk
@@ -993,36 +1013,66 @@ meson-mingw32-x86_64:
     - meson-clover-testing
 
 .piglit-test:
-  extends:
-    - .test-gl
-    - .llvmpipe-rules
   artifacts:
     when: on_failure
     name: "mesa_${CI_JOB_NAME}"
     paths:
       - summary/
+      - results/*.txt
   variables:
-    LIBGL_ALWAYS_SOFTWARE: 1
     PIGLIT_NO_WINDOW: 1
   script:
     - install/piglit/run.sh
 
-piglit-cl:
+.piglit-traces-test:
   extends:
     - .piglit-test
+  cache:
+    key: ${CI_JOB_NAME}
+    paths:
+      - replayer-db/
+  artifacts:
+    when: on_failure
+    name: "mesa_${CI_JOB_NAME}"
+    reports:
+      junit: results/junit.xml
+  variables:
+    PIGLIT_PROFILES: replay
+    PIGLIT_REPLAY_UPLOAD_TO_MINIO: 1
+    PIGLIT_REPLAY_EXTRA_ARGS:  --keep-image --db-path ${CI_PROJECT_DIR}/replayer-db/
+    PIGLIT_REPLAY_REFERENCE_IMAGES_BASE_URL: "/mesa-tracie-results/$FDO_UPSTREAM_REPO"
+    PIGLIT_REPLAY_ARTIFACTS_BASE_URL: "/artifacts/$CI_PROJECT_PATH/$CI_PIPELINE_ID/$CI_JOB_ID"
+    PIGLIT_HTML_SUMMARY: 0
+    PIGLIT_JUNIT_RESULTS: 1
+
+.llvmpipe-test:
+  extends:
+    - .llvmpipe-rules
+  variables:
+    LIBGL_ALWAYS_SOFTWARE: "true"
+    GALLIUM_DRIVER: "llvmpipe"
+
+llvmpipe-piglit-cl:
+  extends:
     - .test-cl
+    - .piglit-test
+    - .llvmpipe-test
     - .llvmpipe-cl-rules
   variables:
     LP_CL: 1
     LP_NUM_THREADS: 1
     PIGLIT_PROFILES: cl
+    PIGLIT_RESULTS: "llvmpipe-cl"
     PIGLIT_OPTIONS: >
       -x bswap -x phatk -x clz-optimizations
   script:
     - install/piglit/run_cl.sh
 
-piglit-quick_gl:
-  extends: .piglit-test
+llvmpipe-piglit-quick_gl:
+  extends:
+    - .test-gl
+    - .piglit-test
+    - .llvmpipe-test
   variables:
     LP_NUM_THREADS: 0
     PIGLIT_OPTIONS: >
@@ -1035,39 +1085,117 @@ piglit-quick_gl:
       -x max-texture-size
       -x maxsize
     PIGLIT_PROFILES: quick_gl
+    PIGLIT_RESULTS: "llvmpipe-quick_gl"
 
-piglit-glslparser:
-  extends: .piglit-test
+llvmpipe-piglit-glslparser:
+  extends:
+    - .test-gl
+    - .piglit-test
+    - .llvmpipe-test
   variables:
     LP_NUM_THREADS: 0
     PIGLIT_PROFILES: glslparser
+    PIGLIT_RESULTS: "llvmpipe-glslparser"
 
-piglit-quick_shader:
-  extends: .piglit-test
+llvmpipe-piglit-quick_shader:
+  extends:
+    - .test-gl
+    - .piglit-test
+    - .llvmpipe-test
   variables:
     LP_NUM_THREADS: 1
     PIGLIT_PROFILES: quick_shader
+    PIGLIT_RESULTS: "llvmpipe-quick_shader"
 
-.deqp-test:
+llvmpipe-traces:
+  extends:
+    - .test-gl
+    - .piglit-traces-test
+    - .llvmpipe-test
   variables:
-    DEQP_SKIPS: deqp-default-skips.txt
-  script:
-    - ./install/deqp-runner.sh
+    EGL_PLATFORM: "surfaceless"
+    PIGLIT_REPLAY_DESCRIPTION_FILE: "${CI_PROJECT_DIR}/install/traces-llvmpipe.yml"
+    PIGLIT_REPLAY_DEVICE_NAME: "gl-vmware-llvmpipe"
+    PIGLIT_RESULTS: "llvmpipe-replay"
 
-.deqp-test-gl:
+.virgl-test:
   extends:
     - .test-gl
-    - .deqp-test
+    - .virgl-rules
+  variables:
+    LIBGL_ALWAYS_SOFTWARE: "true"
+    GALLIUM_DRIVER: "virpipe"
 
-.deqp-test-vk:
+virgl-traces:
+  extends:
+    - .piglit-traces-test
+    - .virgl-test
+  variables:
+    EGL_PLATFORM: "surfaceless"
+    PIGLIT_REPLAY_DESCRIPTION_FILE: "${CI_PROJECT_DIR}/install/traces-virgl.yml"
+    PIGLIT_REPLAY_DEVICE_NAME: "gl-virgl"
+    PIGLIT_RESULTS: "virgl-replay"
+    MESA_GLES_VERSION_OVERRIDE: "3.1"
+    MESA_GLSL_VERSION_OVERRIDE: "310"
+
+arm64-a630-traces:
+  extends:
+    - .piglit-traces-test
+    - .arm64-a630-test
+  variables:
+    BARE_METAL_TEST_SCRIPT: "/install/piglit/run.sh"
+    BM_START_XORG: 1
+    PIGLIT_REPLAY_DESCRIPTION_FILE: "/install/traces-freedreno.yml"
+    PIGLIT_REPLAY_DEVICE_NAME: "freedreno-a630"
+    PIGLIT_RESULTS: "freedreno-a630-replay"
+    # This lets us run several more traces which don't use any features we're
+    # missing.
+    MESA_GLSL_VERSION_OVERRIDE: "460"
+    MESA_GL_VERSION_OVERRIDE: "4.6"
+  artifacts:
+    reports:
+      junit: results/junit.xml
+
+radv-polaris10-traces:
+  extends:
+    - .piglit-traces-test
+    - .test-vk
+    - .test-radv
+    - .test-manual
+  variables:
+    PIGLIT_REPLAY_DESCRIPTION_FILE: "${CI_PROJECT_DIR}/install/traces-radv.yml"
+    PIGLIT_REPLAY_DEVICE_NAME: "vk-amd-polaris10"
+    PIGLIT_RESULTS: "radv-polaris10-replay"
+  tags:
+    - polaris10
+
+radv-raven-traces:
   extends:
+    - .piglit-traces-test
     - .test-vk
+    - .test-radv
+    - .test-manual
+  variables:
+    PIGLIT_REPLAY_DESCRIPTION_FILE: "${CI_PROJECT_DIR}/install/traces-radv.yml"
+    PIGLIT_REPLAY_DEVICE_NAME: "vk-amd-raven"
+    PIGLIT_RESULTS: "radv-raven-replay"
+  tags:
+    - raven
+
+.deqp-test:
+  script:
+    - ./install/deqp-runner.sh
+  artifacts:
+    reports:
+      junit: results/junit.xml
+
+.deqp-test-vk:
+  extends:
     - .deqp-test
   variables:
     DEQP_VER: vk
 
 .fossilize-test:
-  extends: .test-vk
   script:
     - ./install/fossilize-runner.sh
   artifacts:
@@ -1082,21 +1210,19 @@ llvmpipe-gles2:
     # Don't use threads inside llvmpipe, we've already got all cores
     # busy at the deqp-runner level.
     LP_NUM_THREADS: 0
-    DEQP_EXPECTED_FAILS: deqp-llvmpipe-fails.txt
-    LIBGL_ALWAYS_SOFTWARE: "true"
+    GPU_VERSION: llvmpipe
     DEQP_EXPECTED_RENDERER: llvmpipe
   extends:
-    - .deqp-test-gl
-    - .llvmpipe-rules
+    - .test-gl
+    - .deqp-test
+    - .llvmpipe-test
 
 softpipe-gles2:
   extends:
     - llvmpipe-gles2
     - .softpipe-rules
   variables:
-    DEQP_EXPECTED_FAILS: deqp-softpipe-fails.txt
-    DEQP_SKIPS: deqp-softpipe-skips.txt
-    DEQP_FLAKES: deqp-softpipe-flakes.txt
+    GPU_VERSION: softpipe
     GALLIUM_DRIVER: "softpipe"
     DEQP_EXPECTED_RENDERER: softpipe
 
@@ -1111,6 +1237,58 @@ softpipe-gles31:
     DEQP_VER: gles31
   extends: softpipe-gles2
 
+softpipe-asan-gles31:
+  variables:
+    GPU_VERSION: softpipe-asan
+    DEQP_FRACTION: 10
+    DEQP_VER: gles31
+    TEST_LD_PRELOAD: libasan.so.5
+  extends: softpipe-gles2
+  needs:
+    - x86_test-gl
+    - meson-testing-asan
+
+softpipe-piglit-quick:
+  extends:
+    - .piglit-test
+    - .test-gl
+    - .softpipe-rules
+  variables:
+    GALLIUM_DRIVER: softpipe
+    # rasterpos skipped until we uprev piglit (commit ff2a7650be7349)
+    # triangle-rasterization skipped due to flakes thanks to it using a time-based random seed.
+    # glx-multithread-texture is flaky, undiagnosed
+    PIGLIT_OPTIONS: >
+      -x rasterpos
+      -x triangle-rasterization
+      -x glx-multithread-texture
+      -x egl_ext_device_
+      -x egl_ext_platform_device
+      -x ext_timer_query@time-elapsed
+      -x glx-multithread-clearbuffer
+      -x glx-multithread-shader-compile
+      -x max-texture-size
+      -x maxsize
+      -x fs-execution-ordering
+      -x local-id-explosion
+      -x arb_pipeline_statistics_query-comp
+      -x streaming-texture-leak
+      -x longprim
+      -x shader-mem-barrier
+      -x arb_gpu_shader_fp64
+      -x arb_gpu_shader_int64
+      -x arb_tessellation_shader
+      -x glsl-4.00
+      -x glsl-4.10
+      -x glsl-4.20
+      -x glsl-4.30
+      -x glsl-4.40
+      -x glsl-4.50
+      -x gpu_shader4
+      -x gpu_shader5
+    PIGLIT_PROFILES: quick_gl quick_shader
+    PIGLIT_RESULTS: softpipe-quick
+
 # Note that KHR-GL3* test sets include all tests from the previous
 # version, so we only need to run one test list (unlike dEQP-GLES,
 # where the test sets are separate).
@@ -1124,18 +1302,15 @@ virgl-gles2-on-gl:
   variables:
     DEQP_VER: gles2
     DEQP_NO_SAVE_RESULTS: 1
-    DEQP_SKIPS: deqp-virgl-gl-skips.txt
+    GPU_VERSION: virgl-gl
     # Don't use threads inside llvmpipe, we've already got all cores
     # busy at the deqp-runner level.
     LP_NUM_THREADS: 0
-    DEQP_EXPECTED_FAILS: deqp-virgl-gl-fails.txt
     DEQP_OPTIONS: "--deqp-log-images=disable"
-    LIBGL_ALWAYS_SOFTWARE: "true"
-    GALLIUM_DRIVER: "virpipe"
     DEQP_EXPECTED_RENDERER: virgl
   extends:
-    - .deqp-test-gl
-    - .virgl-rules
+    - .deqp-test
+    - .virgl-test
 
 virgl-gles3-on-gl:
   variables:
@@ -1180,11 +1355,13 @@ virgl-gl32-on-gl:
         *all_paths
       when: manual
     - when: never
+  variables:
+    GIT_STRATEGY: none
 
 virgl-gles2-on-gles:
   variables:
     VIRGL_HOST_API: GLES
-    DEQP_EXPECTED_FAILS: deqp-virgl-gles-fails.txt
+    GPU_VERSION: virgl-gles
   extends:
     - virgl-gles2-on-gl
     - .test-manual
@@ -1192,7 +1369,7 @@ virgl-gles2-on-gles:
 virgl-gles3-on-gles:
   variables:
     VIRGL_HOST_API: GLES
-    DEQP_EXPECTED_FAILS: deqp-virgl-gles-fails.txt
+    GPU_VERSION: virgl-gles
   extends:
     - virgl-gles3-on-gl
     - .test-manual
@@ -1200,72 +1377,67 @@ virgl-gles3-on-gles:
 virgl-gles31-on-gles:
   variables:
     VIRGL_HOST_API: GLES
-    DEQP_EXPECTED_FAILS: deqp-virgl-gles-fails.txt
+    GPU_VERSION: virgl-gles
   extends:
     - virgl-gles31-on-gl
     - .test-manual
 
-arm64_a630_gles2:
+.arm64-a630-test:
   extends:
-    - arm64_a306_gles2
+    - .freedreno-test
   variables:
     BM_KERNEL: /lava-files/cheza-kernel
     BM_CMDLINE: "ip=dhcp console=ttyMSM0,115200n8 root=/dev/nfs rw nfsrootdebug nfsroot=,tcp,nfsvers=4.2 init=/init"
-    DEQP_EXPECTED_FAILS: deqp-freedreno-a630-fails.txt
-    DEQP_FLAKES: deqp-freedreno-a630-flakes.txt
-    DEQP_SKIPS: deqp-freedreno-a630-skips.txt
-    GIT_STRATEGY: none
+    GPU_VERSION: freedreno-a630
+    BM_DTB: /lava-files/db820c.dtb
     DEQP_EXPECTED_RENDERER: FD630
-    DEQP_NO_SAVE_RESULTS: ""
-    VK_DRIVER: freedreno
   tags:
     - google-freedreno-cheza
   script:
     - ./install/bare-metal/cros-servo.sh
 
+arm64_a630_gles2:
+  extends:
+    - .baremetal-deqp-test
+    - .arm64-a630-test
+  variables:
+    DEQP_VER: gles2
+
 arm64_a630_gles31:
-  extends: arm64_a630_gles2
+  extends:
+    - .baremetal-deqp-test
+    - .arm64-a630-test
   variables:
     DEQP_VER: gles31
 
 arm64_a630_gles3:
-  extends: arm64_a630_gles2
-  variables:
-    DEQP_VER: gles3
-
-arm64_a630_traces:
   extends:
-    - arm64_a630_gles2
+    - .baremetal-deqp-test
+    - .arm64-a630-test
   variables:
-    BARE_METAL_TEST_SCRIPT: "/install/tracie-runner-gl.sh"
-    DEVICE_NAME: "freedreno-a630"
-    DRIVER_NAME: "freedreno"
-    TRACIE_NO_UNIT_TESTS: 1
-    TRACIE_UPLOAD_TO_MINIO: 1
-    # This lets us run several more traces which don't use any features we're
-    # missing.
-    MESA_GLSL_VERSION_OVERRIDE: "460"
-    MESA_GL_VERSION_OVERRIDE: "4.6"
-  artifacts:
-    reports:
-      junit: results/junit.xml
+    DEQP_VER: gles3
 
 arm64_a630_gl:
-  extends: arm64_a630_gles2
+  extends:
+    - .baremetal-deqp-test
+    - .arm64-a630-test
   variables:
-    DEQP_VER: gl30
+    DEQP_VER: gl33
 
 arm64_a630_gles_others:
-  extends: arm64_a630_gles2
+  extends:
+    - .baremetal-deqp-test
+    - .arm64-a630-test
   variables:
     BARE_METAL_TEST_SCRIPT: "/install/bare-metal/arm64_a630_gles_others.sh"
 
 arm64_a630_vk:
-  extends: arm64_a630_gles2
+  extends:
+    - .baremetal-deqp-test-freedreno-vk
+    - .arm64-a630-test
   parallel: 2
   variables:
-    DEQP_VER: vk
-    DEQP_FRACTION: 10
+    DEQP_FRACTION: 4
     # Force binning in the main run, which makes sure we render at
     # least 2 bins.  This is the path that impacts the most different
     # features.  However, we end up with flaky results in
@@ -1277,14 +1449,88 @@ arm64_a630_vk:
 # to click play on in their branches.
 arm64_a630_vk_sysmem:
   extends:
-    - arm64_a630_gles2
+    - .baremetal-deqp-test-freedreno-vk
+    - .arm64-a630-test
   variables:
-    DEQP_VER: vk
     DEQP_FRACTION: 15
     DEQP_CASELIST_FILTER: "dEQP-VK.renderpass.*"
-    DEQP_EXPECTED_FAILS: deqp-freedreno-a630-bypass-fails.txt
+    GPU_VERSION: freedreno-a630-bypass
     TU_DEBUG: sysmem
 
+.arm64_a630_piglit:
+  extends:
+    - .piglit-test
+    - .arm64-a630-test
+    - .test-manual
+  variables:
+    BARE_METAL_TEST_SCRIPT: "/install/piglit/run.sh"
+    BM_START_XORG: 1
+    # Excluding various features we don't support to keep runtime down in
+    # deciding that they aren't supported.
+    #
+    # Also excluding some particularly slow tests (gl-1.3-texture-env takes 100s)
+    #
+    # Known flakes in the list are between "arb_blend_func_extended" and
+    # "varray-disabled"
+    #
+    # vs-output-array-vec2-index-wr-before-gs is skipped because it causes
+    # a flood of GPU hangs and makes the rest of the job flakey
+    #
+    # vs-clip-distance/vertex-enables skipped because they seem to be flaky in
+    # parallel with other tests (reliably fails on its own)
+    PIGLIT_OPTIONS: >-
+      -x vs-output-array-vec2-index-wr-before-gs
+      -x fixed-clip-enables
+      -x vs-clip-distance-enables
+      -x vs-clip-vertex-enables
+      -x arb_blend_func_extended-fbo-extended-blend-pattern_gles2
+      -x clear-accum
+      -x copypixels-sync
+      -x copyteximage-border
+      -x copytexsubimage
+      -x draw-sync
+      -x getteximage-simple
+      -x gl30basic
+      -x tcs-input
+      -x tes-input
+      -x unaligned-blit
+      -x user-clip
+      -x varray-disabled
+      -x egl_ext_device_
+      -x egl_ext_platform_device
+      -x ext_timer_query@time-elapsed
+      -x glx-multithread-clearbuffer
+      -x glx-multithread-shader-compile
+      -x max-texture-size
+      -x maxsize
+      -x arb_gpu_shader_fp64
+      -x arb_gpu_shader_gpu5
+      -x arb_gpu_shader_int64
+      -x glsl-4.00
+      -x glsl-4.10
+      -x glsl-4.20
+      -x glsl-4.30
+      -x glsl-4.40
+      -x glsl-4.50
+      -x glsl-4.60
+      -x gl-1.3-texture-env
+
+# Takes ~20 minutes, so manual-only until we can sort out runtime.
+arm64_a630_piglit_gl:
+  extends:
+    - .arm64_a630_piglit
+    - .test-manual
+  variables:
+    PIGLIT_PROFILES: quick_gl
+    PIGLIT_RESULTS: freedreno-a630-gl
+
+arm64_a630_piglit_shader:
+  extends:
+    - .arm64_a630_piglit
+  variables:
+    PIGLIT_PROFILES: quick_shader
+    PIGLIT_RESULTS: freedreno-a630-shader
+
 .baremetal-test:
   extends:
     - .ci-run-policy
@@ -1292,86 +1538,123 @@ arm64_a630_vk_sysmem:
   # Cancel job if a newer commit is pushed to the same branch
   interruptible: true
   stage: test
+  variables:
+    DRIVER_URL: https://minio-packet.freedesktop.org/artifacts/${CI_PROJECT_PATH}/${CI_PIPELINE_ID}/mesa-arm64.tar.gz
+  before_script:
+    # Use this instead of gitlab's artifacts download because it hits packet.net
+    # instead of fd.o.  Set FDO_HTTP_CACHE_URI to an http cache for your test lab to
+    # improve it even more (see https://docs.mesa3d.org/ci/bare-metal.html for
+    # setup).
+    - wget ${FDO_HTTP_CACHE_URI:-}${DRIVER_URL} -S --progress=dot:giga -O- | tar -xz
   artifacts:
     when: always
     name: "mesa_${CI_JOB_NAME}"
     paths:
       - results/
       - serial*.txt
+    exclude:
+      - results/*.shader_cache
+    reports:
+      junit: results/junit.xml
 
-arm64_a306_gles2:
+.freedreno-test:
   extends:
     - .baremetal-test
     - .use-arm64_test
     - .freedreno-rules
   variables:
-    BM_KERNEL: /lava-files/Image.gz
-    BM_DTB: /lava-files/apq8016-sbc.dtb
     BM_ROOTFS: /lava-files/rootfs-arm64
-    BM_CMDLINE: "ip=dhcp console=ttyMSM0,115200n8"
     FLAKES_CHANNEL: "#freedreno-ci"
-    BARE_METAL_TEST_SCRIPT: "/install/deqp-runner.sh"
-    DEQP_EXPECTED_FAILS: deqp-freedreno-a307-fails.txt
-    DEQP_SKIPS: deqp-default-skips.txt
-    DEQP_FLAKES: deqp-freedreno-a307-flakes.txt
-    DEQP_VER: gles2
-    DEQP_PARALLEL: 4
-    DEQP_EXPECTED_RENDERER: FD307
-    # Since we can't get artifacts back yet, skip making them.
-    DEQP_NO_SAVE_RESULTS: 1
+    PIGLIT_PLATFORM: mixed_glx_egl
   script:
     - ./install/bare-metal/fastboot.sh
   needs:
     - arm64_test
-    - meson-arm64
+    - job: meson-arm64
+      artifacts: false
   tags:
     - google-freedreno-db410c
 
-# Fractional run, single threaded, due to flaky results
+.baremetal-deqp-test:
+  variables:
+    BARE_METAL_TEST_SCRIPT: "/install/deqp-runner.sh"
+    DEQP_SKIPS: deqp-default-skips.txt
+    DEQP_PARALLEL: 0 # Default to number of CPUs
+
+.baremetal-deqp-test-freedreno-vk:
+  extends:
+    - .baremetal-deqp-test
+  variables:
+    DEQP_VER: vk
+    VK_DRIVER: freedreno
+
+.arm64-a306-test:
+  extends:
+    - .freedreno-test
+  variables:
+    BM_KERNEL: /lava-files/Image.gz
+    BM_DTB: /lava-files/apq8016-sbc.dtb
+    BM_CMDLINE: "ip=dhcp console=ttyMSM0,115200n8"
+    GPU_VERSION: freedreno-a307
+    DEQP_EXPECTED_RENDERER: FD307
+
+arm64_a306_gles2:
+  extends:
+    - .baremetal-deqp-test
+    - .arm64-a306-test
+  variables:
+    DEQP_VER: gles2
+
 arm64_a306_gles3:
   extends:
-    - arm64_a306_gles2
+    - .baremetal-deqp-test
+    - .arm64-a306-test
+  parallel: 3
   variables:
     DEQP_VER: gles3
-    DEQP_PARALLEL: 1
-    DEQP_FRACTION: 25
+    DEQP_FRACTION: 2
 
 # Fractional runs with debug options.  Note that since we're not
 # hitting the iommu faults, we can run in parallel (derive from gles2, not gles3).
 arm64_a306_gles3_options:
-  extends: arm64_a306_gles2
+  extends:
+    - .baremetal-deqp-test
+    - .arm64-a306-test
   variables:
     DEQP_VER: gles3
   script:
     # Check that the non-constbuf UBO case works.
     - DEQP_RUN_SUFFIX=-nouboopt IR3_SHADER_DEBUG=nouboopt DEQP_CASELIST_FILTER="functional.*ubo" ./install/bare-metal/fastboot.sh
 
-.arm64_a530_deqp:
+.arm64-a530-test:
   extends:
-    - arm64_a306_gles2
+    - .freedreno-test
   variables:
     BM_KERNEL: /lava-files/db820c-kernel
     BM_DTB: /lava-files/db820c.dtb
     # Disable SMP because only CPU 0 is at a freq higher than 19mhz on
     # current upstream kernel.
     BM_CMDLINE: "ip=dhcp console=ttyMSM0,115200n8 nosmp"
-    DEQP_EXPECTED_FAILS: deqp-freedreno-a530-fails.txt
-    DEQP_FLAKES: deqp-freedreno-a530-flakes.txt
+    FDO_CI_CONCURRENT: 1
+    GPU_VERSION: freedreno-a530
     DEQP_EXPECTED_RENDERER: FD530
   tags:
     - google-freedreno-db820c
 
 arm64_a530_gles2:
   extends:
-    - .arm64_a530_deqp
+    - .baremetal-deqp-test
+    - .arm64-a530-test
+  variables:
+    DEQP_VER: gles2
   parallel: 2
 
 arm64_a530_gles3:
   extends:
-    - .arm64_a530_deqp
+    - .baremetal-deqp-test
+    - .arm64-a530-test
   variables:
     DEQP_VER: gles3
-    DEQP_PARALLEL: 1
     DEQP_FRACTION: 40
 
 arm64_a530_gles31:
@@ -1381,10 +1664,187 @@ arm64_a530_gles31:
     DEQP_VER: gles31
     DEQP_FRACTION: 10
 
+.arm64_a530_piglit:
+  extends:
+    - .piglit-test
+    - .arm64-a530-test
+    - .test-manual
+  variables:
+    BARE_METAL_TEST_SCRIPT: "/install/piglit/run.sh"
+    BM_START_XORG: 1
+    # SMP is disabled in the current kernels for db820c.
+    FDO_CI_CONCURRENT: 1
+    # Excluding for flakes in multisample (MSAA fails covered well by deqp, we
+    # can enable it once we stabilize that.) and other flakes from
+    # atomic_counters through userclip in the list.
+    #
+    # Also excluding some particularly slow tests (gl-1.3-texture-env)
+    #
+    # Check fastboot.sh for more piglit tests being excluded!
+    PIGLIT_OPTIONS: >-
+      -x atomic_counters
+      -x gl-1.0-blend-func
+      -x glsl-1.30@execution@clipping
+      -x user-clip
+      -x arb_texture_multisample
+      -x ext_framebuffer_multisample
+      -x egl_ext_device_
+      -x egl_ext_platform_device
+      -x ext_timer_query@time-elapsed
+      -x glx-multithread-clearbuffer
+      -x glx-multithread-shader-compile
+      -x max-texture-size
+      -x maxsize
+      -x arb_gpu_shader5
+      -x arb_gpu_shader_fp64
+      -x arb_gpu_shader_int64
+      -x arb_tessellation_shader
+      -x glsl-1.50
+      -x glsl-4.00
+      -x glsl-4.10
+      -x glsl-4.20
+      -x glsl-4.30
+      -x glsl-4.40
+      -x glsl-4.50
+      -x glsl-4.60
+      -x gl-1.3-texture-env
+
+# Takes ~25 minutes, so manual-only until we can sort out runtime.
+arm64_a530_piglit_gl:
+  extends:
+    - .arm64_a530_piglit
+  variables:
+    PIGLIT_PROFILES: quick_gl
+    PIGLIT_RESULTS: freedreno-a530-gl
+
+arm64_a530_piglit_shader:
+  extends:
+    - .arm64_a530_piglit
+  variables:
+    PIGLIT_PROFILES: quick_shader
+    PIGLIT_RESULTS: freedreno-a530-shader
+
+.vc4-rpi3-test:armhf:
+  extends:
+    - .baremetal-test
+    - .vc4-rules
+    - .use-armhf_test
+  variables:
+    BM_BOOTFS: /boot/armhf
+    BM_KERNEL_MODULES: vc4
+    BM_ROOTFS: /lava-files/rootfs-armhf
+    BM_ROOTFS_EXTRA: /modules/armhf
+    GPU_VERSION: vc4-rpi3
+    DEQP_EXPECTED_RENDERER: VC4
+    DRIVER_URL: https://minio-packet.freedesktop.org/artifacts/${CI_PROJECT_PATH}/${CI_PIPELINE_ID}/mesa-armhf.tar.gz
+  script:
+    - ./install/bare-metal/poe-powered.sh
+  needs:
+    - job: armhf_test
+      artifacts: false
+    - meson-armhf
+  tags:
+    - igalia-rpi3
+
+vc4-rpi3-gles2:armhf:
+  extends:
+    - .vc4-rpi3-test:armhf
+  parallel: 4
+  variables:
+    BARE_METAL_TEST_SCRIPT: "/install/deqp-runner.sh"
+    DEQP_VER: gles2
+    # The vc4s are so slow that it takes about a minute to get through the
+    # default 500 tests in a group, triggering the serial watchdog.
+    DEQP_RUNNER_OPTIONS: "--tests-per-group 250"
+
+.vc4-rpi3-piglit:armhf:
+  extends:
+    - .piglit-test
+    - .vc4-rpi3-test:armhf
+    - .test-manual
+  variables:
+    BARE_METAL_TEST_SCRIPT: "/install/piglit/run.sh"
+    BM_POE_TIMEOUT: 180
+    PIGLIT_OPTIONS: >-
+      --timeout 60
+      -x .tesc
+      -x .tese
+      -x arb_gpu_shader_fp64
+      -x arb_gpu_shader_gpu5
+      -x arb_gpu_shader_int64
+      -x arb_tessellation_shader
+      -x arb_texture_cube_map
+      -x clipflat
+      -x copypixels-sync
+      -x copyteximage
+      -x depthstencil-default_fb
+      -x draw-sync
+      -x egl_ext_device_
+      -x egl_ext_platform_device
+      -x ext_framebuffer_multisample
+      -x ext_timer_query@time-elapsed
+      -x gl-1.0-blend-func
+      -x gl-1.3-texture-env
+      -x glsl-1.30
+      -x glsl-3.30
+      -x glsl-4.00
+      -x glsl-4.10
+      -x glsl-4.20
+      -x glsl-4.30
+      -x glsl-4.40
+      -x glsl-4.50
+      -x glsl-4.60
+      -x glsl-es-3.00
+      -x glsl-es-3.20
+      -x glsl-fs-convolution-2
+      -x glsl-vs-loop
+      -x glsl-vs-loop-nested
+      -x glsl-vs-mov-after-deref
+      -x glx-multithread-clearbuffer
+      -x glx-multithread-shader-compile
+      -x image_load_store
+      -x longprim
+      -x masked-clear
+      -x max-texture-size
+      -x maxsize
+      -x ppgtt_memory_alignment
+      -x streaming-texture-leak
+      -x texturesize
+    PIGLIT_PLATFORM: gbm
+
+vc4-rpi3-piglit-quick_gl:armhf:
+  extends:
+    - .vc4-rpi3-piglit:armhf
+  variables:
+    FDO_CI_CONCURRENT: 1
+    PIGLIT_PROFILES: quick_gl
+    PIGLIT_RESULTS: "vc4-rpi3-quick_gl"
+
+vc4-rpi3-piglit-quick_shader:armhf:
+  extends:
+    - .vc4-rpi3-piglit:armhf
+  variables:
+    FDO_CI_CONCURRENT: 2
+    PIGLIT_PROFILES: quick_shader
+    PIGLIT_RESULTS: "vc4-rpi3-quick_shader"
+
+lavapipe-vk:
+  stage: software-renderer
+  extends:
+    - .test-vk
+    - .llvmpipe-rules
+    - .deqp-test-vk
+  variables:
+    GPU_VERSION: lvp
+    VK_DRIVER: lvp
+    DEQP_FRACTION: 10
+
 # RADV CI
 .test-radv:
-  extends: .radv-rules
-  stage: radv
+  extends:
+    - .test-vk
+    - .radv-rules
+  stage: amd
   variables:
     VK_DRIVER: radeon
     ACO_DEBUG: validateir,validatera
@@ -1397,7 +1857,7 @@ radv_polaris10_vkcts:
     - .test-radv
     - .test-manual
   variables:
-    DEQP_SKIPS: deqp-radv-polaris10-skips.txt
+    GPU_VERSION: radv-polaris10
   tags:
     - polaris10
 
@@ -1424,73 +1884,3 @@ radv-fossils:
     # Sienna Cichlid (GFX10)
     - export RADV_FORCE_FAMILY="gfx1030"
     - ./install/fossilize-runner.sh
-
-# Traces CI
-.traces-test:
-  cache:
-    key: ${CI_JOB_NAME}
-    paths:
-      - traces-db/
-  variables:
-    TRACIE_UPLOAD_TO_MINIO: 1
-  artifacts:
-    reports:
-      junit: results/junit.xml
-
-.traces-test-gl:
-  extends:
-    - .test-gl
-    - .traces-test
-  script:
-    - ./install/tracie-runner-gl.sh
-
-.traces-test-vk:
-  extends:
-    - .test-vk
-    - .traces-test
-  script:
-    - ./install/tracie-runner-vk.sh
-
-llvmpipe-traces:
-  extends:
-    - .traces-test-gl
-    - .llvmpipe-rules
-  variables:
-    LIBGL_ALWAYS_SOFTWARE: "true"
-    GALLIUM_DRIVER: "llvmpipe"
-    DEVICE_NAME: "gl-vmware-llvmpipe"
-    DRIVER_NAME: "llvmpipe"
-
-radv-polaris10-traces:
-  extends:
-    - .traces-test-vk
-    - .test-radv
-    - .test-manual
-  variables:
-    DEVICE_NAME: "vk-amd-polaris10"
-    DRIVER_NAME: "radv"
-  tags:
-    - polaris10
-
-radv-raven-traces:
-  extends:
-    - .traces-test-vk
-    - .test-radv
-    - .test-manual
-  variables:
-    DEVICE_NAME: "vk-amd-raven"
-    DRIVER_NAME: "radv"
-  tags:
-    - raven
-
-virgl-traces:
-  extends:
-    - .traces-test-gl
-    - .virgl-rules
-  variables:
-    LIBGL_ALWAYS_SOFTWARE: "true"
-    GALLIUM_DRIVER: "virpipe"
-    DEVICE_NAME: "gl-virgl"
-    DRIVER_NAME: "virgl"
-    MESA_GLES_VERSION_OVERRIDE: "3.1"
-    MESA_GLSL_VERSION_OVERRIDE: "310"