| variables: |
| FDO_UPSTREAM_REPO: "virgl/virglrenderer" |
| MESA_TEMPLATES_COMMIT: &ci-templates-commit d5aa3941aa03c2f716595116354fb81eb8012acb |
| MESA_BASE_TAG: ${DEBIAN_BASE_TAG} |
| # |
| # IMPORTANT! |
| # |
| # Use the Pipeline ID corresponding to the Mesa Git rev provided below. |
| # If multiple pipeline runs are available, please choose the one having |
| # at least the 'debian-testing' job in 'Build-x86_64' stage completed. |
| # |
| # Pick a pipeline on https://gitlab.freedesktop.org/mesa/mesa/-/pipelines/ |
| # |
| MESA_PIPELINE_ID: 906183 |
| MESA_PROJECT_PATH: mesa/mesa |
| STORAGE_HOST: s3.freedesktop.org |
| CI_REGISTRY_IMAGE: "harbor.freedesktop.org/${MESA_PROJECT_PATH}" |
| # per-pipeline artifact storage on MinIO |
| PIPELINE_ARTIFACTS_BASE: ${STORAGE_HOST}/artifacts/${CI_PROJECT_PATH}/${CI_PIPELINE_ID} |
| # per-job artifact storage on MinIO |
| JOB_ARTIFACTS_BASE: ${PIPELINE_ARTIFACTS_BASE}/${CI_JOB_ID} |
| # reference images stored for traces |
| PIGLIT_REPLAY_REFERENCE_IMAGES_BASE: "${STORAGE_HOST}/mesa-tracie-results/${FDO_UPSTREAM_REPO}" |
| |
| |
| include: |
| - project: 'freedesktop/ci-templates' |
| ref: 9f0eb526291fe74651fe1430cbd2397f4c0a819b |
| file: |
| - '/templates/ci-fairy.yml' |
| - project: 'freedesktop/ci-templates' |
| ref: *ci-templates-commit |
| file: |
| - '/templates/debian.yml' |
| - '/templates/fedora.yml' |
| - project: 'mesa/mesa' |
| # IMPORTANT: Use a recent Mesa Git revision |
| # The commit ref must be in sync with the pipeline picked above |
| # It can be found on the pipeline page below the commit message |
| ref: 926e97d5df203fe19a2498e6a84335dedbab382e |
| file: |
| - '/.gitlab-ci/image-tags.yml' |
| |
| # YAML anchors for rule conditions |
| # -------------------------------- |
| .rules-anchors: |
| rules: |
| # Scheduled pipeline |
| - if: &is-scheduled-pipeline '$CI_PIPELINE_SOURCE == "schedule"' |
| when: on_success |
| # Forked project branch / pre-merge pipeline not for Marge bot |
| - if: &is-forked-branch-or-pre-merge-not-for-marge '$CI_PROJECT_NAMESPACE != "virgl" || ($GITLAB_USER_LOGIN != "marge-bot" && $CI_PIPELINE_SOURCE == "merge_request_event")' |
| when: manual |
| # Pipeline runs for the main branch of the upstream virglrenderer project |
| - if: &is-virglrenderer-main '$CI_PROJECT_NAMESPACE == "virgl" && $CI_COMMIT_REF_NAME == $CI_DEFAULT_BRANCH && $CI_COMMIT_BRANCH' |
| when: always |
| # Post-merge pipeline |
| - if: &is-post-merge '$CI_PROJECT_NAMESPACE == "virgl" && $CI_COMMIT_BRANCH' |
| when: on_success |
| # Pre-merge pipeline for Marge Bot |
| - if: &is-pre-merge-for-marge '$GITLAB_USER_LOGIN == "marge-bot" && $CI_PIPELINE_SOURCE == "merge_request_event"' |
| when: on_success |
| |
| stages: |
| - build |
| - sanity test |
| - test |
| |
| .set-image: |
| variables: |
| MESA_IMAGE: "$CI_REGISTRY_IMAGE/${MESA_IMAGE_PATH}:${MESA_IMAGE_TAG}--${MESA_TEMPLATES_COMMIT}" |
| image: "$MESA_IMAGE" |
| |
| .set-image-base-tag: |
| extends: |
| - .set-image |
| variables: |
| MESA_IMAGE: "$CI_REGISTRY_IMAGE/${MESA_IMAGE_PATH}:${MESA_IMAGE_TAG}--${MESA_BASE_TAG}--${MESA_TEMPLATES_COMMIT}" |
| |
| debian/x86_64_build: |
| stage: build |
| extends: |
| - .set-image-base-tag |
| variables: |
| MESA_IMAGE_PATH: ${DEBIAN_X86_64_BUILD_IMAGE_PATH} |
| MESA_IMAGE_TAG: ${DEBIAN_BUILD_TAG} |
| S3_ARTIFACT_NAME: virgl-x86_64 |
| EXTRA_OPTION: > |
| -D werror=true |
| script: |
| - .gitlab-ci/meson/build.sh |
| artifacts: |
| name: "virgl_${CI_JOB_NAME}" |
| when: always |
| paths: |
| - install/ |
| - results/ |
| rules: |
| - if: *is-scheduled-pipeline |
| when: on_success |
| - if: *is-post-merge |
| when: never |
| - if: *is-forked-branch-or-pre-merge-not-for-marge |
| when: manual |
| - if: *is-pre-merge-for-marge |
| when: on_success |
| - when: never |
| |
| debian/x86_64_build_msm: |
| stage: build |
| extends: |
| - .set-image-base-tag |
| variables: |
| MESA_IMAGE_PATH: ${DEBIAN_X86_64_BUILD_IMAGE_PATH} |
| MESA_IMAGE_TAG: ${DEBIAN_BUILD_TAG} |
| MINIO_ARTIFACT_NAME: virgl-amd64 |
| EXTRA_OPTION: > |
| -D drm=enabled -D drm-msm-experimental=true |
| script: |
| - .gitlab-ci/meson/build.sh |
| artifacts: |
| name: "virgl_${CI_JOB_NAME}" |
| when: always |
| paths: |
| - install/ |
| - results/ |
| rules: |
| - changes: |
| - src/drm/**/* |
| when: on_success |
| - if: *is-scheduled-pipeline |
| when: on_success |
| - if: *is-post-merge |
| when: never |
| - if: *is-forked-branch-or-pre-merge-not-for-marge |
| when: manual |
| - if: *is-pre-merge-for-marge |
| when: on_success |
| - when: never |
| |
| debian/x86_64_build_minigbm: |
| stage: build |
| extends: |
| - .set-image-base-tag |
| variables: |
| MESA_IMAGE_PATH: ${DEBIAN_X86_64_BUILD_IMAGE_PATH} |
| MESA_IMAGE_TAG: ${DEBIAN_BUILD_TAG} |
| MINIO_ARTIFACT_NAME: virgl-amd64 |
| EXTRA_OPTION: > |
| -D minigbm_allocation=true |
| script: |
| - .gitlab-ci/meson/build.sh |
| artifacts: |
| name: "virgl_${CI_JOB_NAME}" |
| when: always |
| paths: |
| - install/ |
| - results/ |
| rules: |
| - changes: |
| - src/vrend_winsys_gbm.* |
| - src/vrend_winsys_egl.c |
| - src/vrend_renderer.c |
| when: on_success |
| - if: *is-scheduled-pipeline |
| when: on_success |
| - if: *is-post-merge |
| when: never |
| - if: *is-forked-branch-or-pre-merge-not-for-marge |
| when: manual |
| - if: *is-pre-merge-for-marge |
| when: on_success |
| - when: never |
| |
| debian/x86_64_build_tracing: |
| stage: build |
| extends: |
| - .set-image-base-tag |
| variables: |
| MESA_IMAGE_PATH: ${DEBIAN_X86_64_BUILD_IMAGE_PATH} |
| MESA_IMAGE_TAG: ${DEBIAN_BUILD_TAG} |
| MINIO_ARTIFACT_NAME: virgl-amd64 |
| WRAP_DEBUG: default |
| DEBIAN_FRONTEND: noninteractive |
| script: |
| - apt-get update && apt-get install -y libsysprof-4-dev |
| - TRACING_BACKEND=percetto .gitlab-ci/meson/build.sh |
| - TRACING_BACKEND=perfetto .gitlab-ci/meson/build.sh |
| - TRACING_BACKEND=sysprof .gitlab-ci/meson/build.sh |
| - TRACING_BACKEND=stderr .gitlab-ci/meson/build.sh |
| artifacts: |
| name: "virgl_${CI_JOB_NAME}" |
| when: always |
| paths: |
| - install/ |
| - results/ |
| rules: |
| - changes: |
| - src/virgl_util.h |
| - src/virgl_util.c |
| when: on_success |
| - if: *is-scheduled-pipeline |
| when: on_success |
| - if: *is-post-merge |
| when: never |
| - if: *is-forked-branch-or-pre-merge-not-for-marge |
| when: manual |
| - if: *is-pre-merge-for-marge |
| when: on_success |
| - when: never |
| |
| # FIXME: Mesa's `debian/x86_build-mingw` job is turned off until gets |
| # fixed on Debian 12. Disable here as a side effect. |
| .debian/mingw32-x86_64: |
| stage: build |
| extends: |
| - .set-image-base-tag |
| variables: |
| MESA_IMAGE_PATH: ${DEBIAN_X86_64_BUILD_MINGW_IMAGE_PATH} |
| MESA_IMAGE_TAG: ${DEBIAN_BUILD_MINGW_TAG} |
| EXTRA_OPTION: > |
| --cross-file=.gitlab-ci/x86_64-w64-mingw32 -Dplatforms= -Dtests=false -Drender-server=false -Dvenus=false |
| script: |
| - git clone --depth 1 https://github.com/anholt/libepoxy.git && pushd libepoxy && meson setup _build --cross-file=../.gitlab-ci/x86_64-w64-mingw32 -Dprefix=/usr/x86_64-w64-mingw32 && meson install -C _build && popd |
| - .gitlab-ci/meson/build.sh |
| artifacts: |
| name: "virgl_${CI_JOB_NAME}" |
| when: always |
| paths: |
| - install/ |
| - results/ |
| rules: |
| - if: *is-scheduled-pipeline |
| when: on_success |
| - if: *is-post-merge |
| when: never |
| - if: *is-forked-branch-or-pre-merge-not-for-marge |
| when: manual |
| - if: *is-pre-merge-for-marge |
| when: on_success |
| - when: never |
| |
| # |
| # Sanity test jobs |
| # |
| |
| .make_check_base: |
| stage: sanity test |
| extends: debian/x86_64_build |
| needs: [] |
| artifacts: |
| when: always |
| paths: |
| - results/ |
| |
| mesa check meson: |
| extends: .make_check_base |
| variables: |
| TEST_SUITE: make-check-meson |
| |
| make check clang-fuzzer: |
| extends: .make_check_base |
| variables: |
| TEST_SUITE: make-check-clang-fuzzer |
| LLVM_VERSION: 15 |
| CC: clang-${LLVM_VERSION} |
| EXTRA_OPTION: "-D fuzzer=true" |
| |
| make check trace-stderr: |
| extends: .make_check_base |
| variables: |
| TEST_SUITE: make-check-trace-stderr |
| EXTRA_OPTION: "-D tracing=stderr" |
| |
| make check venus: |
| extends: .make_check_base |
| variables: |
| TEST_SUITE: make-check-venus |
| |
| # |
| # Piglit & dEQP test jobs |
| # |
| |
| .use-gl-test-image: |
| stage: test |
| extends: |
| - .set-image-base-tag |
| before_script: |
| - echo -n "${CI_JOB_JWT}" > "${CI_JOB_JWT_FILE}" |
| - unset CI_JOB_JWT |
| - export CI_JOB_NAME_SANITIZED="$(echo $CI_JOB_NAME | tr ' /' '--')" |
| variables: |
| CI_JOB_JWT_FILE: /minio_jwt |
| MESA_IMAGE_PATH: ${DEBIAN_X86_64_TEST_IMAGE_GL_PATH} |
| MESA_IMAGE_TAG: ${DEBIAN_X86_64_TEST_GL_TAG} |
| script: |
| - export DEQP_RESULTS_DIR="results/${CI_JOB_NAME_SANITIZED}" |
| - export PIGLIT_RESULTS_DIR="results/${CI_JOB_NAME_SANITIZED}" |
| - .gitlab-ci/container/debian/x86_64_test.sh |
| artifacts: |
| name: "virgl-result" |
| when: always |
| paths: |
| - results/ |
| reports: |
| junit: results/junit.xml |
| needs: |
| - job: debian/x86_64_build |
| artifacts: true |
| rules: |
| - if: *is-post-merge |
| when: never |
| - when: on_success |
| |
| .use-vk-test-image: |
| stage: test |
| extends: |
| - .set-image-base-tag |
| before_script: |
| - echo -n "${CI_JOB_JWT}" > "${CI_JOB_JWT_FILE}" |
| - unset CI_JOB_JWT |
| - export CI_JOB_NAME_SANITIZED="$(echo $CI_JOB_NAME | tr ' /' '--')" |
| variables: |
| CI_JOB_JWT_FILE: /minio_jwt |
| MESA_IMAGE_PATH: ${DEBIAN_X86_64_TEST_IMAGE_VK_PATH} |
| MESA_IMAGE_TAG: ${DEBIAN_X86_64_TEST_VK_TAG} |
| script: |
| - export DEQP_RESULTS_DIR="results/${CI_JOB_NAME_SANITIZED}" |
| - export PIGLIT_RESULTS_DIR="results/${CI_JOB_NAME_SANITIZED}" |
| - .gitlab-ci/container/debian/x86_64_test.sh |
| artifacts: |
| name: "venus-result" |
| when: always |
| paths: |
| - results/ |
| reports: |
| junit: results/junit.xml |
| needs: |
| - job: debian/x86_64_build |
| artifacts: true |
| rules: |
| - if: *is-post-merge |
| when: never |
| - when: on_success |
| |
| .gl-host-test: |
| extends: |
| - .use-gl-test-image |
| variables: |
| GALLIUM_DRIVER: virpipe |
| GALLIVM_PERF: nopt |
| |
| .gl-virt-test: |
| extends: |
| - .use-gl-test-image |
| variables: |
| GALLIUM_DRIVER: virgl |
| CROSVM_GALLIUM_DRIVER: llvmpipe |
| GALLIVM_PERF: "nopt,no_quad_lod" |
| |
| .deqp-host: |
| extends: |
| - .gl-host-test |
| |
| .piglit-host: |
| extends: |
| - .gl-host-test |
| variables: &piglit-host-variables |
| PIGLIT_PLATFORM: surfaceless_egl |
| PIGLIT_NO_WINDOW: 1 |
| PIGLIT_PROFILES: gpu |
| |
| .deqp-virt: |
| extends: |
| - .gl-virt-test |
| variables: |
| # There will be FDO_CI_CONCURRENT Crosvm processes, so each should use a single thread |
| LP_NUM_THREADS: 1 |
| |
| .piglit-virt: |
| extends: |
| - .gl-virt-test |
| variables: |
| <<: *piglit-host-variables |
| # Use all threads for rendering and only run one job at a time |
| LP_NUM_THREADS: ${FDO_CI_CONCURRENT} |
| FORCE_FDO_CI_CONCURRENT: 1 |
| |
| # Host runners (virpipe/vtest) |
| |
| deqp-gl-host: |
| extends: |
| - .deqp-host |
| variables: |
| DEQP_SUITE: virgl-gl |
| GPU_VERSION: virgl-gl |
| |
| deqp-gles-host: |
| extends: |
| - .deqp-host |
| variables: |
| VIRGL_HOST_API: GLES |
| DEQP_SUITE: virgl-gles |
| GPU_VERSION: virgl-gles |
| |
| piglit-gl-host: |
| extends: |
| - .piglit-host |
| variables: |
| GPU_VERSION: virgl-gl |
| |
| piglit-gles-host: |
| extends: |
| - .piglit-host |
| variables: |
| VIRGL_HOST_API: GLES |
| GPU_VERSION: virgl-gles |
| |
| # Virt runners (virgl/crosvm) |
| |
| deqp-gl-virt: |
| extends: |
| - .deqp-virt |
| variables: |
| DEQP_SUITE: virgl-gl |
| GPU_VERSION: virgl-gl |
| CROSVM_GPU_ARGS: &deqp-gl-crosvm-gpu-args "gles=false,backend=virglrenderer,egl=true,surfaceless=true,width=1024,height=768" |
| |
| deqp-gles-virt: |
| extends: |
| - .deqp-virt |
| variables: |
| VIRGL_HOST_API: GLES |
| DEQP_SUITE: virgl-gles |
| GPU_VERSION: virgl-gles |
| CROSVM_GPU_ARGS: &deqp-gles-crosvm-gpu-args "gles=true,backend=virglrenderer,egl=true,surfaceless=true,width=1024,height=768" |
| |
| piglit-gl-virt: |
| extends: |
| - .piglit-virt |
| parallel: 3 |
| variables: |
| GPU_VERSION: virgl-gl |
| CROSVM_GPU_ARGS: *deqp-gl-crosvm-gpu-args |
| |
| piglit-gles-virt: |
| extends: |
| - .piglit-virt |
| parallel: 3 |
| variables: |
| VIRGL_HOST_API: GLES |
| GPU_VERSION: virgl-gles |
| CROSVM_GPU_ARGS: *deqp-gles-crosvm-gpu-args |
| |
| virgl-traces: |
| extends: |
| - .piglit-virt |
| variables: |
| GPU_VERSION: virgl-gl |
| CROSVM_GPU_ARGS: *deqp-gl-crosvm-gpu-args |
| EGL_PLATFORM: "surfaceless" |
| PIGLIT_REPLAY_DESCRIPTION_FILE: "${CI_PROJECT_DIR}/install/traces-virgl.yml" |
| PIGLIT_REPLAY_DEVICE_NAME: "gl-virgl" |
| PIGLIT_RESULTS: "virgl-replay" |
| |
| .venus-lavapipe-test: |
| extends: |
| - .use-vk-test-image |
| variables: |
| VK_DRIVER: virtio |
| CROSVM_GALLIUM_DRIVER: "llvmpipe" |
| CROSVM_VK_DRIVER: "lvp" |
| |
| venus-lavapipe: |
| extends: |
| - .venus-lavapipe-test |
| variables: |
| DEQP_FRACTION: 15 |
| DEQP_SUITE: venus |
| GPU_VERSION: venus |
| LP_NUM_THREADS: 1 # There will be FDO_CI_CONCURRENT Crosvm processes, so each should use a single thread |
| FDO_CI_CONCURRENT: 32 # Seems to be the fastest value, more gets actually slower |
| CROSVM_MEMORY: 3072 |
| CROSVM_GPU_ARGS: "vulkan=true,gles=false,backend=virglrenderer,egl=true,surfaceless=true" |