variables: FDO_UPSTREAM_REPO: mesa/mesa 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 include: - project: 'freedesktop/ci-templates' ref: &ci-templates-sha 52dd4a94044449c8481d18dcdc221a3c636366d2 file: '/templates/debian.yml' - project: 'freedesktop/ci-templates' ref: *ci-templates-sha file: '/templates/alpine.yml' - local: '.gitlab-ci/lava-gitlab-ci.yml' - local: '.gitlab-ci/test-source-dep.yml' stages: - container - container-2 - sanity - git-archive - deploy - meson-x86_64 - scons - meson-misc - llvmpipe - softpipe - freedreno - panfrost - radv - lima - virgl - radeonsi - success # Generic rule to not run the job during scheduled pipelines # ---------------------------------------------------------- .scheduled_pipelines-rules: rules: &ignore_scheduled_pipelines if: &is-scheduled-pipeline '$CI_PIPELINE_SOURCE == "schedule"' when: never # YAML anchors for rule conditions # -------------------------------- .rules-anchors: rules: # For Marge Bot - if: &is-for-marge '$GITLAB_USER_LOGIN == "marge-bot"' when: never # Forked project branch - if: &is-forked-branch '$CI_PROJECT_NAMESPACE != "mesa" && $CI_MERGE_REQUEST_SOURCE_BRANCH_NAME != $CI_COMMIT_REF_NAME' when: manual # Forked project branch / pre-merge pipeline - if: &is-forked-branch-or-pre-merge '$CI_PROJECT_NAMESPACE != "mesa" || $CI_MERGE_REQUEST_SOURCE_BRANCH_NAME == $CI_COMMIT_REF_NAME' when: manual # Pipeline runs for the master branch of the main project - if: &is-main-master '$CI_PROJECT_NAMESPACE == "mesa" && $CI_COMMIT_REF_NAME == "master" && $CI_MERGE_REQUEST_SOURCE_BRANCH_NAME != "master"' when: always # Post-merge pipeline - if: &is-post-merge '$CI_PROJECT_NAMESPACE == "mesa" && $CI_MERGE_REQUEST_SOURCE_BRANCH_NAME != $CI_COMMIT_REF_NAME' when: on_success # Post-merge pipeline, not for Marge Bot - if: &is-post-merge-not-for-marge '$CI_PROJECT_NAMESPACE == "mesa" && $GITLAB_USER_LOGIN != "marge-bot" && $CI_MERGE_REQUEST_SOURCE_BRANCH_NAME != $CI_COMMIT_REF_NAME' when: on_success # Pre-merge pipeline - if: &is-pre-merge '$CI_MERGE_REQUEST_SOURCE_BRANCH_NAME == $CI_COMMIT_REF_NAME' when: on_success # Pre-merge pipeline for Marge Bot - if: &is-pre-merge-for-marge '$GITLAB_USER_LOGIN == "marge-bot" && $CI_MERGE_REQUEST_SOURCE_BRANCH_NAME == $CI_COMMIT_REF_NAME' when: on_success .docs-base: extends: .ci-run-policy image: alpine script: - apk --no-cache add py3-pip graphviz - pip3 install sphinx sphinx_rtd_theme - sphinx-build -b html docs public pages: extends: .docs-base stage: deploy artifacts: paths: - public needs: [] rules: - *ignore_scheduled_pipelines - if: *is-main-master changes: &docs-or-ci - docs/**/* - .gitlab-ci.yml when: always # Other cases default to never test-docs: extends: .docs-base # Cancel job if a newer commit is pushed to the same branch interruptible: true stage: deploy needs: [] rules: - *ignore_scheduled_pipelines - if: *is-main-master changes: *docs-or-ci when: never - if: *is-pre-merge-for-marge changes: *docs-or-ci when: on_success - if: *is-post-merge-not-for-marge 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 .ci-run-policy: rules: - *ignore_scheduled_pipelines # If any files affecting the pipeline are changed, build/test jobs run # automatically once all dependency jobs have passed - changes: &all_paths - VERSION - bin/git_sha1_gen.py - bin/install_megadrivers.py - bin/meson_get_version.py - bin/symbols-check.py # GitLab CI - .gitlab-ci.yml - .gitlab-ci/**/* # Meson - meson* - build-support/**/* - subprojects/**/* # SCons - SConstruct - scons/**/* - common.py # Source code - include/**/* - src/**/* when: on_success # Otherwise, build/test jobs won't run - when: never retry: max: 2 when: - runner_system_failure success: stage: success image: debian:stable-slim rules: - *ignore_scheduled_pipelines - if: *is-post-merge when: never - if: *is-for-marge changes: *docs-or-ci when: never - changes: *all_paths when: never - if: *is-pre-merge when: on_success variables: GIT_STRATEGY: none script: - echo "Dummy job to make sure every merge request pipeline runs at least one job" .ci-deqp-artifacts: artifacts: name: "mesa_${CI_JOB_NAME}" when: always untracked: false paths: # Watch out! Artifacts are relative to the build dir. # https://gitlab.com/gitlab-org/gitlab-ce/commit/8788fb925706cad594adf6917a6c5f6587dd1521 - artifacts # Build the CI docker images. # # FDO_DISTRIBUTION_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. # While removing the image from the registry would also work, that's not # recommended except for ephemeral images during development: Replacing # an image after a significant amount of time might pull in newer # versions of gcc/clang or other packages, which might break the build # with older commits using the same tag. # # After merging a change resulting in generating a new image to the # main repository, it's recommended to remove the image from the source # repository's container registry, so that the image from the main # repository's registry will be used there as well. .container: stage: container extends: - .ci-run-policy rules: - *ignore_scheduled_pipelines # Run pipeline by default in the main project if any CI pipeline # configuration files were changed, to ensure docker images are up to date - if: *is-post-merge changes: - .gitlab-ci.yml - .gitlab-ci/**/* when: on_success # Run pipeline by default if it was triggered by Marge Bot, is for a # merge request, and any files affecting the pipeline were changed - if: *is-pre-merge-for-marge changes: *all_paths when: on_success # Run pipeline by default in the main project if it was not triggered by # Marge Bot, and any files affecting the pipeline were changed - if: *is-post-merge-not-for-marge changes: *all_paths when: on_success # Allow triggering jobs manually in other cases if any files affecting the # pipeline were changed - changes: *all_paths when: manual # Otherwise, container jobs won't run - when: never variables: 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 # Debian 10 based x86 build image base x86_build-base: extends: - .fdo.container-build@debian - .container variables: FDO_DISTRIBUTION_TAG: &x86_build-base "2020-11-05-kmod" .use-x86_build-base: extends: - x86_build-base - .ci-run-policy stage: container-2 variables: BASE_TAG: *x86_build-base FDO_BASE_IMAGE: "$CI_REGISTRY_IMAGE/debian/x86_build-base:$BASE_TAG" needs: - x86_build-base # Debian 10 based x86 main build image x86_build: extends: - .use-x86_build-base variables: FDO_DISTRIBUTION_TAG: &x86_build "2020-11-05-kmod" .use-x86_build: variables: TAG: *x86_build image: "$CI_REGISTRY_IMAGE/debian/x86_build:$TAG" needs: - x86_build - check mr # Debian 10 based i386 cross-build image i386_build: extends: - .use-x86_build-base variables: FDO_DISTRIBUTION_TAG: &i386_build "2020-11-05-kmod" .use-i386_build: variables: TAG: *i386_build image: "$CI_REGISTRY_IMAGE/debian/i386_build:$TAG" needs: - i386_build - check mr # Debian 10 based ppc64el cross-build image ppc64el_build: extends: - .use-x86_build-base variables: FDO_DISTRIBUTION_TAG: &ppc64el_build "2020-11-05-kmod" .use-ppc64el_build: variables: TAG: *ppc64el_build image: "$CI_REGISTRY_IMAGE/debian/ppc64el_build:$TAG" needs: - ppc64el_build - check mr # Debian 10 based s390x cross-build image s390x_build: extends: - .use-x86_build-base variables: FDO_DISTRIBUTION_TAG: &s390x_build "2020-11-05-kmod" .use-s390x_build: variables: TAG: *s390x_build image: "$CI_REGISTRY_IMAGE/debian/s390x_build:$TAG" needs: - s390x_build - check mr # Android NDK cross-build image android_build: extends: - .use-x86_build-base variables: FDO_DISTRIBUTION_TAG: &android_build "2020-11-05-kmod" .use-android_build: variables: TAG: *android_build image: "$CI_REGISTRY_IMAGE/debian/android_build:$TAG" needs: - android_build - check mr # Debian 10 based x86 test image base x86_test-base: extends: x86_build-base variables: FDO_DISTRIBUTION_TAG: &x86_test-base "2020-11-05-kmod" .use-x86_test-base: extends: - x86_build-base - .ci-run-policy stage: container-2 variables: BASE_TAG: *x86_test-base FDO_BASE_IMAGE: "$CI_REGISTRY_IMAGE/debian/x86_test-base:$BASE_TAG" needs: - x86_test-base # Debian 10 based x86 test image for GL x86_test-gl: extends: .use-x86_test-base variables: FDO_DISTRIBUTION_TAG: &x86_test-gl "2020-11-05-deqp-runner" # 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-05-deqp-runner" # Debian 10 based ARM build image arm_build: extends: - .fdo.container-build@debian@arm64v8 - .container variables: FDO_DISTRIBUTION_TAG: &arm_build "2020-11-05-kmod" .use-arm_build: variables: TAG: *arm_build image: "$CI_REGISTRY_IMAGE/debian/arm_build:$TAG" needs: - arm_build # Debian 10 based x86 baremetal image base arm_test-base: extends: - .fdo.container-build@debian - .container variables: FDO_DISTRIBUTION_TAG: &arm_test-base "2020-10-06-clang10-2" .use-arm_test-base: extends: - arm_test-base - .ci-run-policy stage: container-2 variables: BASE_TAG: *arm_test-base FDO_BASE_IMAGE: "$CI_REGISTRY_IMAGE/debian/arm_test-base:$BASE_TAG" needs: - arm_test-base # x86 image with ARM64 rootfs for baremetal testing. arm64_test: extends: - .use-arm_test-base variables: FDO_DISTRIBUTION_TAG: &arm64_test "2020-11-09-kmod" .use-arm64_test: variables: TAG: *arm64_test image: "$CI_REGISTRY_IMAGE/debian/arm64_test:$TAG" needs: - arm64_test # Native Windows docker builds # # Unlike the above Linux-based builds - including MinGW/SCons builds which # cross-compile for Windows - which use the freedesktop ci-templates, we # cannot use the same scheme here. As Windows lacks support for # Docker-in-Docker, and Podman does not run natively on Windows, we have # to open-code much of the same ourselves. # # This is achieved by first running in a native Windows shell instance # (host PowerShell) in the container stage to build and push the image, # then in the build stage by executing inside Docker. .windows-docker-vs2019: variables: WINDOWS_TAG: "2020-05-05-llvm" WINDOWS_IMAGE: "$CI_REGISTRY_IMAGE/windows/x64_build:$WINDOWS_TAG" WINDOWS_UPSTREAM_IMAGE: "$CI_REGISTRY/$FDO_UPSTREAM_REPO/windows/x64_build:$WINDOWS_TAG" .windows_build_vs2019: extends: - .container - .windows-docker-vs2019 stage: container variables: GIT_STRATEGY: fetch # we do actually need the full repository though timeout: 4h # LLVM takes ages tags: - windows - shell - "1809" - mesa script: - .\.gitlab-ci\windows\mesa_container.ps1 $CI_REGISTRY $CI_REGISTRY_USER $CI_REGISTRY_PASSWORD $WINDOWS_IMAGE $WINDOWS_UPSTREAM_IMAGE .use-windows_build_vs2019: extends: .windows-docker-vs2019 image: "$WINDOWS_IMAGE" needs: - windows_build_vs2019 - check mr git_archive: extends: .fdo.container-build@alpine stage: container rules: - if: *is-scheduled-pipeline when: always - if: *is-pre-merge when: on_success - changes: *all_paths when: on_success - if: *is-forked-branch when: manual # Other cases default to never variables: FDO_REPO_SUFFIX: &git-archive-suffix "alpine/git_archive" FDO_DISTRIBUTION_EXEC: 'pip3 install git+http://gitlab.freedesktop.org/freedesktop/ci-templates@6f5af7e5574509726c79109e3c147cee95e81366' # no need to pull the whole repo to build the container image GIT_STRATEGY: none FDO_DISTRIBUTION_TAG: &git-archive-tag "2020-07-07" FDO_DISTRIBUTION_PACKAGES: git py3-pip .use-git_archive: extends: .fdo.suffixed-image@alpine variables: FDO_DISTRIBUTION_TAG: *git-archive-tag FDO_REPO_SUFFIX: *git-archive-suffix needs: - git_archive # Git archive make git archive: extends: .use-git_archive stage: git-archive rules: - if: *is-scheduled-pipeline when: on_success # ensure we are running on packet tags: - packet.net script: # 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 # Sanity checks of MR settings and commit logs .sanity-check: extends: .use-git_archive stage: sanity artifacts: when: on_failure reports: junit: check-*.xml check mr: extends: .sanity-check rules: - *ignore_scheduled_pipelines - if: *is-pre-merge when: on_success - changes: *all_paths when: on_success # Other cases default to never variables: GIT_STRATEGY: none script: # Only run checks 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 .check commits: extends: .sanity-check rules: - if: *is-pre-merge when: on_success - if: *is-forked-branch when: manual # Other cases default to never script: - ci-fairy check-commits --junit-xml=check-commits.xml # BUILD # Shared between windows and Linux .build-common: extends: .ci-run-policy # Cancel job if a newer commit is pushed to the same branch interruptible: true artifacts: name: "mesa_${CI_JOB_NAME}" when: always paths: - _build/meson-logs/*.txt # scons: - build/*/config.log - shader-db # Just Linux .build-linux: extends: .build-common variables: CCACHE_COMPILERCHECK: "content" CCACHE_COMPRESS: "true" CCACHE_DIR: /cache/mesa/ccache # Use ccache transparently, and print stats before/after before_script: - export PATH="/usr/lib/ccache:$PATH" - export CCACHE_BASEDIR="$PWD" - ccache --show-stats after_script: - ccache --show-stats .build-windows: extends: .build-common tags: - windows - docker - "1809" - mesa cache: key: ${CI_JOB_NAME} paths: - subprojects/packagecache .meson-build: extends: - .build-linux - .use-x86_build stage: meson-x86_64 variables: LLVM_VERSION: 10 script: - .gitlab-ci/meson-build.sh .scons-build: extends: - .build-linux - .use-x86_build stage: scons script: - env SCONSFLAGS="-j${FDO_CI_CONCURRENT:-4}" .gitlab-ci/scons-build.sh meson-testing: extends: - .meson-build - .ci-deqp-artifacts variables: UNWIND: "enabled" DRI_LOADERS: > -D glx=dri -D gbm=enabled -D egl=enabled -D platforms=x11 GALLIUM_ST: > -D dri3=enabled GALLIUM_DRIVERS: "swrast,virgl,radeonsi" VULKAN_DRIVERS: amd BUILDTYPE: "debugoptimized" EXTRA_OPTION: > -D werror=true UPLOAD_FOR_LAVA: 1 DEBIAN_ARCH: amd64 script: - .gitlab-ci/meson-build.sh - .gitlab-ci/prepare-artifacts.sh meson-clover-testing: extends: - .meson-build - .ci-deqp-artifacts variables: UNWIND: "enabled" LLVM_VERSION: 10 DRI_LOADERS: > -D glx=disabled -D egl=disabled -D gbm=disabled GALLIUM_ST: > -D gallium-opencl=icd -D opencl-spirv=true GALLIUM_DRIVERS: "swrast" BUILDTYPE: "debugoptimized" script: - .gitlab-ci/meson-build.sh - .gitlab-ci/prepare-artifacts.sh meson-gallium: extends: .meson-build variables: UNWIND: "enabled" DRI_LOADERS: > -D glx=dri -D gbm=enabled -D egl=enabled -D platforms=x11,wayland GALLIUM_ST: > -D dri3=enabled -D gallium-extra-hud=true -D gallium-vdpau=enabled -D gallium-xvmc=enabled -D gallium-omx=bellagio -D gallium-va=enabled -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" VULKAN_DRIVERS: swrast EXTRA_OPTION: > -D osmesa=gallium -D tools=all -D werror=true script: - .gitlab-ci/meson-build.sh - .gitlab-ci/run-shader-db.sh - src/freedreno/.gitlab-ci/run-fdtools.sh # Test a release build with -Werror so new warnings don't sneak in. meson-release: extends: .meson-build variables: UNWIND: "enabled" DRI_LOADERS: > -D glx=dri -D gbm=enabled -D egl=enabled -D platforms=x11,wayland GALLIUM_ST: > -D dri3=enabled -D gallium-extra-hud=true -D gallium-vdpau=enabled -D gallium-xvmc=disabled -D gallium-omx=disabled -D gallium-va=enabled -D gallium-xa=enabled -D gallium-nine=false -D gallium-opencl=disabled -D llvm=false GALLIUM_DRIVERS: "nouveau,kmsro,r300,svga,v3d,vc4,virgl,etnaviv,panfrost,lima,zink" BUILDTYPE: "release" EXTRA_OPTION: > -D osmesa=none -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 - .use-android_build variables: UNWIND: "disabled" DRI_LOADERS: > -D glx=disabled -D gbm=disabled -D egl=enabled -D platforms=android EXTRA_OPTION: > -D android-stub=true -D llvm=disabled -D platform-sdk-version=26 GALLIUM_ST: > -D dri3=disabled -D gallium-vdpau=disabled -D gallium-xvmc=disabled -D gallium-omx=disabled -D gallium-va=disabled -D gallium-xa=disabled -D gallium-nine=false -D gallium-opencl=disabled LLVM_VERSION: "" script: # arm64 build: Can't build v3d/vc4 because they require expat for v3d_decode. - PKG_CONFIG_PATH=/usr/local/lib/aarch64-linux-android/pkgconfig/:/android-ndk-r21d/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/lib/aarch64-linux-android/pkgconfig/ CROSS=aarch64-linux-android GALLIUM_DRIVERS=etnaviv,freedreno,lima,panfrost VULKAN_DRIVERS=freedreno .gitlab-ci/meson-build.sh # x86_64 build: # Can't do Intel because gen_decoder.c currently requires libexpat, which # is not a dependency that AOSP wants to accept. Can't do Radeon because # it requires LLVM, which we don't have an Android build of. # - PKG_CONFIG_PATH=/usr/local/lib/x86_64-linux-android/pkgconfig/ CROSS=x86_64-linux-android GALLIUM_DRIVERS=iris VULKAN_DRIVERS=intel .gitlab-ci/meson-build.sh .meson-cross: extends: - .meson-build stage: meson-misc variables: UNWIND: "disabled" DRI_LOADERS: > -D glx=disabled -D gbm=disabled -D egl=enabled -D platforms=[] -D osmesa=none GALLIUM_ST: > -D dri3=disabled -D gallium-vdpau=disabled -D gallium-xvmc=disabled -D gallium-omx=disabled -D gallium-va=disabled -D gallium-xa=disabled -D gallium-nine=false LLVM_VERSION: "8" .meson-arm: extends: - .meson-cross - .use-arm_build needs: - arm_build - check mr variables: VULKAN_DRIVERS: freedreno,broadcom GALLIUM_DRIVERS: "etnaviv,freedreno,kmsro,lima,nouveau,panfrost,swrast,tegra,v3d,vc4" BUILDTYPE: "debugoptimized" tags: - aarch64 meson-armhf: extends: - .meson-arm - .ci-deqp-artifacts variables: CROSS: armhf LLVM_VERSION: "7" EXTRA_OPTION: > -D llvm=disabled UPLOAD_FOR_LAVA: 1 DEBIAN_ARCH: armhf script: - .gitlab-ci/meson-build.sh - .gitlab-ci/prepare-artifacts.sh meson-arm64: extends: - .meson-arm - .ci-deqp-artifacts variables: VULKAN_DRIVERS: "freedreno,broadcom" EXTRA_OPTION: > -D llvm=disabled UPLOAD_FOR_LAVA: 1 DEBIAN_ARCH: arm64 script: - .gitlab-ci/meson-build.sh - .gitlab-ci/prepare-artifacts.sh meson-arm64-build-test: extends: - .meson-arm - .ci-deqp-artifacts variables: VULKAN_DRIVERS: "amd" EXTRA_OPTION: > -Dtools=panfrost -D werror=true script: - .gitlab-ci/meson-build.sh meson-clang: extends: .meson-build variables: UNWIND: "enabled" 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" VULKAN_DRIVERS: intel,amd,freedreno,broadcom CC: "ccache clang-10" CXX: "ccache clang++-10" .meson-windows-vs2019: extends: - .build-windows - .use-windows_build_vs2019 stage: meson-misc script: - . .\.gitlab-ci\windows\mesa_build.ps1 scons-win64: extends: .scons-build variables: SCONS_TARGET: platform=windows machine=x86_64 debug=1 SCONS_CHECK_COMMAND: "true" allow_failure: true meson-clover: extends: .meson-build variables: UNWIND: "enabled" DRI_LOADERS: > -D glx=disabled -D egl=disabled -D gbm=disabled GALLIUM_DRIVERS: "r600,radeonsi" GALLIUM_ST: > -D dri3=disabled -D gallium-vdpau=disabled -D gallium-xvmc=disabled -D gallium-omx=disabled -D gallium-va=disabled -D gallium-xa=disabled -D gallium-nine=false -D gallium-opencl=icd script: - LLVM_VERSION=8 .gitlab-ci/meson-build.sh - LLVM_VERSION=9 .gitlab-ci/meson-build.sh - .gitlab-ci/meson-build.sh meson-vulkan: extends: .meson-build variables: UNWIND: "disabled" DRI_LOADERS: > -D glx=disabled -D gbm=disabled -D egl=disabled -D platforms=x11,wayland -D osmesa=none GALLIUM_ST: > -D dri3=enabled -D gallium-vdpau=disabled -D gallium-xvmc=disabled -D gallium-omx=disabled -D gallium-va=disabled -D gallium-xa=disabled -D gallium-nine=false -D gallium-opencl=disabled -D b_sanitize=undefined -D c_args=-fno-sanitize-recover=all -D cpp_args=-fno-sanitize-recover=all UBSAN_OPTIONS: "print_stacktrace=1" VULKAN_DRIVERS: intel,amd,freedreno,broadcom EXTRA_OPTION: > -D vulkan-overlay-layer=true -D build-aco-tests=true -D werror=true meson-i386: extends: - .meson-cross - .use-i386_build variables: CROSS: i386 VULKAN_DRIVERS: intel,amd GALLIUM_DRIVERS: "iris,r300,radeonsi,swrast,virgl" EXTRA_OPTION: > -D vulkan-overlay-layer=true -D werror=true meson-s390x: extends: - .meson-cross - .use-s390x_build tags: - kvm variables: CROSS: s390x EXTRA_OPTION: > -D werror=true GALLIUM_DRIVERS: "swrast" meson-ppc64el: extends: - meson-s390x - .use-ppc64el_build variables: CROSS: ppc64el EXTRA_OPTION: "" GALLIUM_DRIVERS: "nouveau,radeonsi,swrast,virgl" VULKAN_DRIVERS: "amd" meson-mingw32-x86_64: extends: .meson-build stage: meson-misc variables: UNWIND: "disabled" DRI_DRIVERS: "" GALLIUM_DRIVERS: "swrast" EXTRA_OPTION: > -Dllvm=disabled -Dosmesa=gallium --cross-file=.gitlab-ci/x86_64-w64-mingw32 .test: extends: - .ci-run-policy # Cancel job if a newer commit is pushed to the same branch interruptible: true variables: GIT_STRATEGY: none # testing doesn't build anything from source before_script: # Note: Build dir (and thus install) may be dirty due to GIT_STRATEGY - rm -rf install - tar -xf artifacts/install.tar - LD_LIBRARY_PATH=install/lib find install/lib -name "*.so" -print -exec ldd {} \; artifacts: when: always name: "mesa_${CI_JOB_NAME}" paths: - results/ .use-x86_test-gl: extends: - .test variables: TAG: *x86_test-gl image: "$CI_REGISTRY_IMAGE/debian/x86_test-gl:$TAG" needs: - x86_test-gl .test-gl: extends: - .use-x86_test-gl needs: - x86_test-gl - meson-testing .test-vk: extends: - .test variables: TAG: *x86_test-vk image: "$CI_REGISTRY_IMAGE/debian/x86_test-vk:$TAG" needs: - meson-testing - x86_test-vk .test-cl: extends: - .use-x86_test-gl needs: - x86_test-gl - meson-clover-testing .piglit-test: extends: - .test-gl - .llvmpipe-rules artifacts: when: on_failure name: "mesa_${CI_JOB_NAME}" paths: - summary/ variables: LIBGL_ALWAYS_SOFTWARE: 1 PIGLIT_NO_WINDOW: 1 script: - install/piglit/run.sh piglit-cl: extends: - .piglit-test - .test-cl - .llvmpipe-cl-rules variables: LP_CL: 1 LP_NUM_THREADS: 1 PIGLIT_PROFILES: cl PIGLIT_OPTIONS: > -x bswap -x phatk -x clz-optimizations script: - install/piglit/run_cl.sh piglit-quick_gl: extends: .piglit-test variables: LP_NUM_THREADS: 0 PIGLIT_OPTIONS: > --process-isolation false -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 PIGLIT_PROFILES: quick_gl piglit-glslparser: extends: .piglit-test variables: LP_NUM_THREADS: 0 PIGLIT_PROFILES: glslparser piglit-quick_shader: extends: .piglit-test variables: LP_NUM_THREADS: 1 PIGLIT_PROFILES: quick_shader .deqp-test: variables: DEQP_SKIPS: deqp-default-skips.txt script: - ./install/deqp-runner.sh .deqp-test-gl: extends: - .test-gl - .deqp-test .deqp-test-vk: extends: - .test-vk - .deqp-test variables: DEQP_VER: vk .fossilize-test: extends: .test-vk script: - ./install/fossilize-runner.sh artifacts: when: on_failure name: "mesa_${CI_JOB_NAME}" paths: - results/ llvmpipe-gles2: variables: DEQP_VER: 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" DEQP_EXPECTED_RENDERER: llvmpipe extends: - .deqp-test-gl - .llvmpipe-rules 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 GALLIUM_DRIVER: "softpipe" DEQP_EXPECTED_RENDERER: softpipe softpipe-gles3: variables: DEQP_VER: gles3 extends: softpipe-gles2 softpipe-gles31: parallel: 2 variables: DEQP_VER: gles31 extends: softpipe-gles2 # 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). softpipe-gl: variables: DEQP_VER: gl33 extends: - softpipe-gles2 virgl-gles2-on-gl: variables: DEQP_VER: gles2 DEQP_NO_SAVE_RESULTS: 1 DEQP_SKIPS: deqp-virgl-gl-skips.txt # 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 virgl-gles3-on-gl: variables: DEQP_VER: gles3 DEQP_RUNNER_OPTIONS: "--timeout 180" extends: virgl-gles2-on-gl virgl-gles31-on-gl: parallel: 2 variables: DEQP_VER: gles31 MESA_GLES_VERSION_OVERRIDE: "3.1" MESA_GLSL_VERSION_OVERRIDE: "310" MESA_EXTENSION_OVERRIDE: "-GL_OES_tessellation_shader" extends: virgl-gles3-on-gl virgl-gl30-on-gl: variables: DEQP_VER: gl30 extends: virgl-gles2-on-gl virgl-gl31-on-gl: variables: DEQP_VER: gl31 extends: virgl-gles2-on-gl virgl-gl32-on-gl: variables: DEQP_VER: gl32 extends: virgl-gles2-on-gl # Rules for tests that should not be present in MRs or the main # project's pipeline (don't block marge or report red on # mesa/mesamaster) but should be present on pipelines in personal # branches (so you can opt in to running the flaky test when you want # to). .test-manual: rules: - *ignore_scheduled_pipelines - if: *is-forked-branch changes: *all_paths when: manual - when: never virgl-gles2-on-gles: variables: VIRGL_HOST_API: GLES DEQP_EXPECTED_FAILS: deqp-virgl-gles-fails.txt extends: - virgl-gles2-on-gl - .test-manual virgl-gles3-on-gles: variables: VIRGL_HOST_API: GLES DEQP_EXPECTED_FAILS: deqp-virgl-gles-fails.txt extends: - virgl-gles3-on-gl - .test-manual virgl-gles31-on-gles: variables: VIRGL_HOST_API: GLES DEQP_EXPECTED_FAILS: deqp-virgl-gles-fails.txt extends: - virgl-gles31-on-gl - .test-manual arm64_a630_gles2: extends: - arm64_a306_gles2 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 GIT_STRATEGY: none DEQP_EXPECTED_RENDERER: FD630 DEQP_NO_SAVE_RESULTS: "" tags: - google-freedreno-cheza script: - ./install/bare-metal/cros-servo.sh arm64_a630_gles31: extends: arm64_a630_gles2 variables: DEQP_VER: gles31 arm64_a630_gles3: extends: arm64_a630_gles2 variables: DEQP_VER: gles3 # We almost always manage to lower UBOs back to constant uploads in # the test suite, so get a little testing for it here. arm64_a630_noubo: extends: arm64_a630_gles31 variables: DEQP_VER: gles31 IR3_SHADER_DEBUG: nouboopt DEQP_CASELIST_FILTER: "functional.*ubo" # The driver does some guessing as to whether to render using gmem # or bypass, and some GLES3.1 features interact with either one. # Do a little testing with gmem and bypass forced. arm64_a630_bypass: extends: arm64_a630_gles31 variables: CI_NODE_INDEX: 1 CI_NODE_TOTAL: 5 FD_MESA_DEBUG: nogmem DEQP_EXPECTED_FAILS: deqp-freedreno-a630-bypass-fails.txt arm64_a630_traces: extends: - arm64_a630_gles2 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 # Along with checking gmem path, check that we don't get obvious nir # validation failures (though it's too expensive to have it on for the # full CTS) arm64_a630_gmem: extends: arm64_a630_gles31 variables: CI_NODE_INDEX: 1 CI_NODE_TOTAL: 5 FD_MESA_DEBUG: nobypass arm64_a630_gl: extends: arm64_a630_gles2 variables: DEQP_VER: gl30 # disabled pending https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/1859 .arm64_a630_gles3_multisample: extends: arm64_a630_gles3 variables: DEQP_CONFIG: rgba8888d24s8ms4 DEQP_VARIANT: multisample DEQP_EXPECTED_FAILS: deqp-freedreno-a630-multisample-fails.txt # disabled pending https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/1859 .arm64_a630_gles31_multisample: extends: arm64_a630_gles31 variables: DEQP_CONFIG: rgba8888d24s8ms4 DEQP_VARIANT: multisample DEQP_EXPECTED_FAILS: deqp-freedreno-a630-multisample-fails.txt arm64_a630_gles3_565nozs: extends: arm64_a630_gles3 variables: DEQP_CONFIG: rgb565d0s0ms0 DEQP_VARIANT: 565-no-depth-no-stencil DEQP_EXPECTED_FAILS: deqp-freedreno-a630-565nozs-fails.txt arm64_a630_gles31_565nozs: extends: arm64_a630_gles31 variables: DEQP_CONFIG: rgb565d0s0ms0 DEQP_VARIANT: 565-no-depth-no-stencil DEQP_EXPECTED_FAILS: deqp-freedreno-a630-565nozs-fails.txt arm64_a630_vk: extends: arm64_a630_gles2 variables: DEQP_VER: vk CI_NODE_INDEX: 1 CI_NODE_TOTAL: 50 VK_DRIVER: freedreno # 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 # dEQP-VK.binding_model.*.geometry and dEQP-VK.glsl.*_vertex. TU_DEBUG: forcebin # Do a separate sysmem pass over the testcases that really affect sysmem # rendering. This is currently very flaky, leave it as an option for devs # to click play on in their branches. arm64_a630_vk_sysmem: extends: - arm64_a630_vk variables: CI_NODE_INDEX: 1 CI_NODE_TOTAL: 10 DEQP_CASELIST_FILTER: "dEQP-VK.renderpass.*" DEQP_EXPECTED_FAILS: deqp-freedreno-a630-bypass-fails.txt TU_DEBUG: sysmem .baremetal-test: extends: - .ci-run-policy - .test # Cancel job if a newer commit is pushed to the same branch interruptible: true stage: test artifacts: when: always name: "mesa_${CI_JOB_NAME}" paths: - results/ - serial*.txt arm64_a306_gles2: 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 script: - ./install/bare-metal/fastboot.sh needs: - arm64_test - meson-arm64 tags: - google-freedreno-db410c # Fractional run, single threaded, due to flaky results arm64_a306_gles3: extends: - arm64_a306_gles2 variables: DEQP_VER: gles3 DEQP_PARALLEL: 1 CI_NODE_INDEX: 1 CI_NODE_TOTAL: 25 # 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 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: extends: - arm64_a306_gles2 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 DEQP_EXPECTED_RENDERER: FD530 tags: - google-freedreno-db820c arm64_a530_gles2: extends: - .arm64_a530_deqp parallel: 2 arm64_a530_gles3: extends: - .arm64_a530_deqp variables: DEQP_VER: gles3 DEQP_PARALLEL: 1 CI_NODE_INDEX: 1 CI_NODE_TOTAL: 40 arm64_a530_gles31: extends: - arm64_a530_gles3 variables: DEQP_VER: gles31 CI_NODE_INDEX: 1 CI_NODE_TOTAL: 10 # RADV CI .test-radv: extends: .radv-rules stage: radv variables: VK_DRIVER: radeon ACO_DEBUG: validateir,validatera # Can only be triggered manually on personal branches because RADV is the only # driver that does Vulkan testing at the moment. radv_polaris10_vkcts: extends: - .deqp-test-vk - .test-radv - .test-manual variables: DEQP_SKIPS: deqp-radv-polaris10-skips.txt tags: - polaris10 radv-fossils: extends: - .fossilize-test - .test-radv script: # Pitcairn (GFX6) - export RADV_FORCE_FAMILY="pitcairn" - ./install/fossilize-runner.sh # Bonaire (GFX7) - export RADV_FORCE_FAMILY="bonaire" - ./install/fossilize-runner.sh # Polaris10 (GFX8) - export RADV_FORCE_FAMILY="polaris10" - ./install/fossilize-runner.sh # Vega10 (GFX9) - export RADV_FORCE_FAMILY="gfx900" - ./install/fossilize-runner.sh # Navi10 (GFX10) - export RADV_FORCE_FAMILY="gfx1010" - ./install/fossilize-runner.sh # 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"