Compare commits
19 Commits
mesa-20.0.
...
mesa-19.0.
Author | SHA1 | Date | |
---|---|---|---|
|
131f12d49f | ||
|
f8f68c41a1 | ||
|
15e2fc16e9 | ||
|
3f5099180d | ||
|
9667d89fe6 | ||
|
c6649ca94d | ||
|
89f84f98e0 | ||
|
c824f8031c | ||
|
7fdb08375f | ||
|
535cc4f1d5 | ||
|
7f91ae20b9 | ||
|
0a72505a9e | ||
|
31d0079a20 | ||
|
4d1dd3b0cd | ||
|
45d1aa2f6c | ||
|
2fddad9e3f | ||
|
2b603ee4f1 | ||
|
e7f6a5d17f | ||
|
1f5f12687f |
@@ -1,66 +0,0 @@
|
||||
goto %1
|
||||
|
||||
:install
|
||||
rem Check pip
|
||||
if "%buildsystem%" == "scons" (
|
||||
python --version
|
||||
python -m pip --version
|
||||
rem Install Mako
|
||||
python -m pip install Mako==1.0.7
|
||||
rem Install pywin32 extensions, needed by SCons
|
||||
python -m pip install pypiwin32
|
||||
rem Install python wheels, necessary to install SCons via pip
|
||||
python -m pip install wheel
|
||||
rem Install SCons
|
||||
python -m pip install scons==3.0.1
|
||||
call scons --version
|
||||
) else (
|
||||
python --version
|
||||
python -m pip install Mako meson
|
||||
meson --version
|
||||
|
||||
rem Install pkg-config, which meson requires even on windows
|
||||
cinst -y pkgconfiglite
|
||||
)
|
||||
|
||||
rem Install flex/bison
|
||||
set WINFLEXBISON_ARCHIVE=win_flex_bison-%WINFLEXBISON_VERSION%.zip
|
||||
if not exist "%WINFLEXBISON_ARCHIVE%" appveyor DownloadFile "https://github.com/lexxmark/winflexbison/releases/download/v%WINFLEXBISON_VERSION%/%WINFLEXBISON_ARCHIVE%"
|
||||
7z x -y -owinflexbison\ "%WINFLEXBISON_ARCHIVE%" > nul
|
||||
set Path=%CD%\winflexbison;%Path%
|
||||
win_flex --version
|
||||
win_bison --version
|
||||
rem Download and extract LLVM
|
||||
if not exist "%LLVM_ARCHIVE%" appveyor DownloadFile "https://people.freedesktop.org/~jrfonseca/llvm/%LLVM_ARCHIVE%"
|
||||
7z x -y "%LLVM_ARCHIVE%" > nul
|
||||
if "%buildsystem%" == "scons" (
|
||||
mkdir llvm\bin
|
||||
set LLVM=%CD%\llvm
|
||||
) else (
|
||||
move llvm subprojects\
|
||||
copy .appveyor\llvm-wrap.meson subprojects\llvm\meson.build
|
||||
)
|
||||
goto :eof
|
||||
|
||||
:build_script
|
||||
if "%buildsystem%" == "scons" (
|
||||
call scons -j%NUMBER_OF_PROCESSORS% MSVC_VERSION=14.1 llvm=1
|
||||
) else (
|
||||
call "C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\Tools\VsDevCmd.bat" -arch=x86
|
||||
rem We use default-library as static to affect any wraps (such as expat and zlib)
|
||||
rem it would be better if we could set subprojects buildtype independently,
|
||||
rem but I haven't written that patch yet :)
|
||||
call meson builddir --backend=vs2017 --default-library=static -Dbuild-tests=true -Db_vscrt=mtd --buildtype=release -Dllvm=true -Dgallium-drivers=swrast -Dosmesa=gallium
|
||||
pushd builddir
|
||||
call msbuild mesa.sln /m
|
||||
popd
|
||||
)
|
||||
goto :eof
|
||||
|
||||
:test_script
|
||||
if "%buildsystem%" == "scons" (
|
||||
call scons -j%NUMBER_OF_PROCESSORS% MSVC_VERSION=14.1 llvm=1 check
|
||||
) else (
|
||||
call meson test -C builddir
|
||||
)
|
||||
goto :eof
|
@@ -1,36 +0,0 @@
|
||||
# A meson.build file for binary wrapping the LLVM used in the appvyeor CI
|
||||
project('llvm', ['cpp'])
|
||||
|
||||
cpp = meson.get_compiler('cpp')
|
||||
|
||||
_deps = []
|
||||
_search = join_paths(meson.current_source_dir(), 'lib')
|
||||
foreach d : ['LLVMAnalysis', 'LLVMAsmParser', 'LLVMAsmPrinter',
|
||||
'LLVMBinaryFormat', 'LLVMBitReader', 'LLVMBitWriter',
|
||||
'LLVMCodeGen', 'LLVMCore', 'LLVMCoroutines', 'LLVMCoverage',
|
||||
'LLVMDebugInfoCodeView', 'LLVMDebugInfoDWARF',
|
||||
'LLVMDebugInfoMSF', 'LLVMDebugInfoPDB', 'LLVMDemangle',
|
||||
'LLVMDlltoolDriver', 'LLVMExecutionEngine', 'LLVMGlobalISel',
|
||||
'LLVMInstCombine', 'LLVMInstrumentation', 'LLVMInterpreter',
|
||||
'LLVMipo', 'LLVMIRReader', 'LLVMLibDriver', 'LLVMLineEditor',
|
||||
'LLVMLinker', 'LLVMLTO', 'LLVMMCDisassembler', 'LLVMMCJIT',
|
||||
'LLVMMC', 'LLVMMCParser', 'LLVMMIRParser', 'LLVMObjCARCOpts',
|
||||
'LLVMObject', 'LLVMObjectYAML', 'LLVMOption', 'LLVMOrcJIT',
|
||||
'LLVMPasses', 'LLVMProfileData', 'LLVMRuntimeDyld',
|
||||
'LLVMScalarOpts', 'LLVMSelectionDAG', 'LLVMSupport',
|
||||
'LLVMSymbolize', 'LLVMTableGen', 'LLVMTarget',
|
||||
'LLVMTransformUtils', 'LLVMVectorize', 'LLVMX86AsmParser',
|
||||
'LLVMX86AsmPrinter', 'LLVMX86CodeGen', 'LLVMX86Desc',
|
||||
'LLVMX86Disassembler', 'LLVMX86Info', 'LLVMX86Utils',
|
||||
'LLVMXRay']
|
||||
_deps += cpp.find_library(d, dirs : _search)
|
||||
endforeach
|
||||
|
||||
dep_llvm = declare_dependency(
|
||||
include_directories : include_directories('include'),
|
||||
dependencies : _deps,
|
||||
version : '5.0.1',
|
||||
)
|
||||
|
||||
has_rtti = false
|
||||
irbuilder_h = files('include/llvm/IR/IRBuilder.h')
|
@@ -32,13 +32,9 @@ indent_size = 2
|
||||
indent_style = space
|
||||
indent_size = 2
|
||||
|
||||
[*.html]
|
||||
indent_style = space
|
||||
indent_size = 2
|
||||
|
||||
[*.patch]
|
||||
trim_trailing_whitespace = false
|
||||
|
||||
[{meson.build,meson_options.txt}]
|
||||
[meson.build,meson_options.txt]
|
||||
indent_style = space
|
||||
indent_size = 2
|
||||
|
4
.gitattributes
vendored
Normal file
4
.gitattributes
vendored
Normal file
@@ -0,0 +1,4 @@
|
||||
*.dsp -crlf
|
||||
*.dsw -crlf
|
||||
*.sln -crlf
|
||||
*.vcproj -crlf
|
52
.gitignore
vendored
52
.gitignore
vendored
@@ -1,4 +1,54 @@
|
||||
*.a
|
||||
*.dll
|
||||
*.exe
|
||||
*.ilk
|
||||
*.la
|
||||
*.lo
|
||||
*.log
|
||||
*.o
|
||||
*.obj
|
||||
*.orig
|
||||
*.os
|
||||
*.pc
|
||||
*.pdb
|
||||
*.pyc
|
||||
*.pyo
|
||||
*.out
|
||||
*.rej
|
||||
*.so
|
||||
*.so.*
|
||||
*.sw[a-z]
|
||||
*.tar
|
||||
*.tar.bz2
|
||||
*.tar.gz
|
||||
*.tar.xz
|
||||
*.trs
|
||||
*.zip
|
||||
*~
|
||||
depend
|
||||
depend.bak
|
||||
bin/ltmain.sh
|
||||
lib
|
||||
lib64
|
||||
configure
|
||||
configure.lineno
|
||||
autom4te.cache
|
||||
aclocal.m4
|
||||
config.log
|
||||
config.status
|
||||
cscope*
|
||||
tags
|
||||
.scon*
|
||||
config.py
|
||||
build
|
||||
libtool
|
||||
manifest.txt
|
||||
.dir-locals.el
|
||||
.deps/
|
||||
.dirstamp
|
||||
.libs/
|
||||
Makefile
|
||||
Makefile.in
|
||||
.install-mesa-links
|
||||
.install-gallium-links
|
||||
/src/git_sha1.h
|
||||
TAGS
|
||||
|
690
.gitlab-ci.yml
690
.gitlab-ci.yml
@@ -1,690 +0,0 @@
|
||||
variables:
|
||||
UPSTREAM_REPO: mesa/mesa
|
||||
|
||||
include:
|
||||
- project: 'wayland/ci-templates'
|
||||
# Must be the same as in .gitlab-ci/lava-gitlab-ci.yml
|
||||
ref: 0a9bdd33a98f05af6761ab118b5074952242aab0
|
||||
file: '/templates/debian.yml'
|
||||
- local: '.gitlab-ci/lava-gitlab-ci.yml'
|
||||
|
||||
stages:
|
||||
- container
|
||||
- build
|
||||
- test
|
||||
- success
|
||||
|
||||
|
||||
# When to automatically run the CI
|
||||
.ci-run-policy:
|
||||
rules:
|
||||
# Run pipeline by default for merge requests changing files affecting it
|
||||
- if: '$CI_MERGE_REQUEST_SOURCE_BRANCH_NAME == $CI_COMMIT_REF_NAME'
|
||||
changes: &paths
|
||||
- VERSION
|
||||
- bin/**/*
|
||||
# GitLab CI
|
||||
- .gitlab-ci.yml
|
||||
- .gitlab-ci/**/*
|
||||
# Meson
|
||||
- meson*
|
||||
- build-support/**/*
|
||||
- subprojects/**/*
|
||||
# SCons
|
||||
- SConstruct
|
||||
- scons/**/*
|
||||
- common.py
|
||||
# Source code
|
||||
- include/**/*
|
||||
- src/**/*
|
||||
when: on_success
|
||||
# Run pipeline by default in the main project if files affecting it were
|
||||
# changed
|
||||
- if: '$CI_PROJECT_PATH == "mesa/mesa"'
|
||||
changes:
|
||||
*paths
|
||||
when: on_success
|
||||
# Allow triggering jobs manually on branches of forked projects
|
||||
- if: '$CI_PROJECT_PATH != "mesa/mesa" && $CI_MERGE_REQUEST_SOURCE_BRANCH_NAME != $CI_COMMIT_REF_NAME'
|
||||
when: manual
|
||||
# Otherwise, most jobs won't run
|
||||
- when: never
|
||||
retry:
|
||||
max: 2
|
||||
when:
|
||||
- runner_system_failure
|
||||
# Cancel CI run if a newer commit is pushed to the same branch
|
||||
interruptible: true
|
||||
|
||||
success:
|
||||
stage: success
|
||||
image: debian:stable-slim
|
||||
only:
|
||||
- merge_requests
|
||||
except:
|
||||
changes:
|
||||
*paths
|
||||
variables:
|
||||
GIT_STRATEGY: none
|
||||
script:
|
||||
- echo "Dummy job to make sure every merge request pipeline runs at least one job"
|
||||
|
||||
|
||||
.ci-deqp-artifacts:
|
||||
artifacts:
|
||||
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.
|
||||
#
|
||||
# DEBIAN_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
|
||||
variables:
|
||||
DEBIAN_VERSION: buster-slim
|
||||
REPO_SUFFIX: $CI_JOB_NAME
|
||||
DEBIAN_EXEC: '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
|
||||
x86_build:
|
||||
extends:
|
||||
- .debian@container-ifnot-exists
|
||||
- .container
|
||||
variables:
|
||||
DEBIAN_TAG: &x86_build "2020-01-14"
|
||||
|
||||
.use-x86_build:
|
||||
variables:
|
||||
TAG: *x86_build
|
||||
image: "$CI_REGISTRY_IMAGE/debian/x86_build:$TAG"
|
||||
needs:
|
||||
- x86_build
|
||||
|
||||
# Debian 10 based x86 test image for GL
|
||||
x86_test-gl:
|
||||
extends: x86_build
|
||||
variables:
|
||||
DEBIAN_TAG: &x86_test-gl "2020-01-14"
|
||||
|
||||
# Debian 10 based x86 test image for VK
|
||||
x86_test-vk:
|
||||
extends: x86_build
|
||||
variables:
|
||||
DEBIAN_TAG: &x86_test-vk "2020-01-14"
|
||||
# Can only be triggered manually on personal branches because RADV is the only
|
||||
# driver that does Vulkan testing at the moment.
|
||||
rules:
|
||||
# Never build the test image for VK by default in the main project.
|
||||
- if: '$CI_PROJECT_PATH == "mesa/mesa"'
|
||||
when: never
|
||||
# Never build the test image for VK by default for merge requests.
|
||||
- if: '$CI_MERGE_REQUEST_SOURCE_BRANCH_NAME == $CI_COMMIT_REF_NAME'
|
||||
when: never
|
||||
# Otherwise, allow building it manually for personal branches.
|
||||
- when: manual
|
||||
|
||||
|
||||
# Debian 9 based x86 build image (old LLVM)
|
||||
x86_build_old:
|
||||
extends: x86_build
|
||||
variables:
|
||||
DEBIAN_TAG: &x86_build_old "2019-09-18"
|
||||
DEBIAN_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
|
||||
|
||||
# Debian 10 based ARM build image
|
||||
arm_build:
|
||||
extends:
|
||||
- .debian@container-ifnot-exists@arm64v8
|
||||
- .container
|
||||
variables:
|
||||
DEBIAN_TAG: &arm_build "2020-01-14"
|
||||
|
||||
.use-arm_build:
|
||||
variables:
|
||||
TAG: *arm_build
|
||||
image: "$CI_REGISTRY_IMAGE/debian/arm_build:$TAG"
|
||||
needs:
|
||||
- arm_build
|
||||
|
||||
# Debian 10 based ARM test image
|
||||
arm_test:
|
||||
extends: arm_build
|
||||
variables:
|
||||
DEBIAN_TAG: &arm_test "2019-12-18"
|
||||
|
||||
.use-arm_test:
|
||||
variables:
|
||||
TAG: *arm_test
|
||||
image: "$CI_REGISTRY_IMAGE/debian/arm_test:$TAG"
|
||||
needs:
|
||||
- meson-arm64
|
||||
- arm_test
|
||||
|
||||
|
||||
# BUILD
|
||||
|
||||
# Shared between windows and Linux
|
||||
.build-common:
|
||||
extends: .ci-run-policy
|
||||
stage: build
|
||||
artifacts:
|
||||
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:
|
||||
- mesa-windows
|
||||
cache:
|
||||
key: ${CI_JOB_NAME}
|
||||
paths:
|
||||
- subprojects/packagecache
|
||||
|
||||
.meson-build:
|
||||
extends:
|
||||
- .build-linux
|
||||
- .use-x86_build
|
||||
variables:
|
||||
LLVM_VERSION: 9
|
||||
script:
|
||||
- .gitlab-ci/meson-build.sh
|
||||
|
||||
.scons-build:
|
||||
extends:
|
||||
- .build-linux
|
||||
- .use-x86_build
|
||||
variables:
|
||||
SCONSFLAGS: "-j4"
|
||||
script:
|
||||
- .gitlab-ci/scons-build.sh
|
||||
|
||||
meson-testing:
|
||||
extends:
|
||||
- .meson-build
|
||||
- .ci-deqp-artifacts
|
||||
variables:
|
||||
UNWIND: "true"
|
||||
DRI_LOADERS: >
|
||||
-D glx=dri
|
||||
-D gbm=true
|
||||
-D egl=true
|
||||
-D platforms=x11,drm,surfaceless
|
||||
GALLIUM_ST: >
|
||||
-D dri3=true
|
||||
GALLIUM_DRIVERS: "swrast"
|
||||
VULKAN_DRIVERS: amd
|
||||
BUILDTYPE: "debugoptimized"
|
||||
script:
|
||||
- .gitlab-ci/meson-build.sh
|
||||
- .gitlab-ci/prepare-artifacts.sh
|
||||
|
||||
meson-main:
|
||||
extends: .meson-build
|
||||
variables:
|
||||
UNWIND: "true"
|
||||
DRI_LOADERS: >
|
||||
-D glx=dri
|
||||
-D gbm=true
|
||||
-D egl=true
|
||||
-D platforms=x11,wayland,drm,surfaceless
|
||||
DRI_DRIVERS: "i915,i965,r100,r200,nouveau"
|
||||
GALLIUM_ST: >
|
||||
-D dri3=true
|
||||
-D gallium-extra-hud=true
|
||||
-D gallium-vdpau=true
|
||||
-D gallium-xvmc=true
|
||||
-D gallium-omx=bellagio
|
||||
-D gallium-va=true
|
||||
-D gallium-xa=true
|
||||
-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"
|
||||
EXTRA_OPTION: >
|
||||
-D osmesa=gallium
|
||||
-D tools=all
|
||||
script:
|
||||
- .gitlab-ci/meson-build.sh
|
||||
- .gitlab-ci/run-shader-db.sh
|
||||
|
||||
.meson-cross:
|
||||
extends:
|
||||
- .meson-build
|
||||
variables:
|
||||
UNWIND: "false"
|
||||
DRI_LOADERS: >
|
||||
-D glx=disabled
|
||||
-D gbm=false
|
||||
-D egl=true
|
||||
-D platforms=surfaceless
|
||||
-D osmesa=none
|
||||
GALLIUM_ST: >
|
||||
-D dri3=false
|
||||
-D gallium-vdpau=false
|
||||
-D gallium-xvmc=false
|
||||
-D gallium-omx=disabled
|
||||
-D gallium-va=false
|
||||
-D gallium-xa=false
|
||||
-D gallium-nine=false
|
||||
|
||||
.meson-arm:
|
||||
extends:
|
||||
- .meson-cross
|
||||
- .use-arm_build
|
||||
variables:
|
||||
VULKAN_DRIVERS: freedreno
|
||||
GALLIUM_DRIVERS: "etnaviv,freedreno,kmsro,lima,nouveau,panfrost,swrast,tegra,v3d,vc4"
|
||||
BUILDTYPE: "debugoptimized"
|
||||
EXTRA_OPTION: >
|
||||
-D I-love-half-baked-turnips=true
|
||||
tags:
|
||||
- aarch64
|
||||
|
||||
meson-armhf:
|
||||
extends:
|
||||
- .meson-arm
|
||||
- .ci-deqp-artifacts
|
||||
variables:
|
||||
CROSS: armhf
|
||||
LLVM_VERSION: "7"
|
||||
script:
|
||||
- .gitlab-ci/meson-build.sh
|
||||
- .gitlab-ci/prepare-artifacts.sh
|
||||
|
||||
meson-arm64:
|
||||
extends:
|
||||
- .meson-arm
|
||||
- .ci-deqp-artifacts
|
||||
variables:
|
||||
LLVM_VERSION: "8"
|
||||
VULKAN_DRIVERS: "freedreno,amd"
|
||||
script:
|
||||
- .gitlab-ci/meson-build.sh
|
||||
- .gitlab-ci/prepare-artifacts.sh
|
||||
|
||||
meson-clang:
|
||||
extends: .meson-build
|
||||
variables:
|
||||
UNWIND: "true"
|
||||
DRI_LOADERS: >
|
||||
-D glvnd=true
|
||||
DRI_DRIVERS: "auto"
|
||||
GALLIUM_DRIVERS: "auto"
|
||||
VULKAN_DRIVERS: intel,amd,freedreno
|
||||
CC: "ccache clang-9"
|
||||
CXX: "ccache clang++-9"
|
||||
|
||||
.meson-windows:
|
||||
extends:
|
||||
- .build-windows
|
||||
before_script:
|
||||
- $ENV:ARCH = "x86"
|
||||
- $ENV:VERSION = "2019\Community"
|
||||
script:
|
||||
- cmd /C .gitlab-ci\meson-build.bat
|
||||
|
||||
scons-swr:
|
||||
extends: .scons-build
|
||||
variables:
|
||||
SCONS_TARGET: "swr=1"
|
||||
SCONS_CHECK_COMMAND: "true"
|
||||
LLVM_VERSION: "6.0"
|
||||
|
||||
scons-win64:
|
||||
extends: .scons-build
|
||||
variables:
|
||||
SCONS_TARGET: platform=windows machine=x86_64
|
||||
SCONS_CHECK_COMMAND: "true"
|
||||
|
||||
meson-clover:
|
||||
extends: .meson-build
|
||||
variables:
|
||||
UNWIND: "true"
|
||||
DRI_LOADERS: >
|
||||
-D glx=disabled
|
||||
-D egl=false
|
||||
-D gbm=false
|
||||
GALLIUM_ST: >
|
||||
-D dri3=false
|
||||
-D gallium-vdpau=false
|
||||
-D gallium-xvmc=false
|
||||
-D gallium-omx=disabled
|
||||
-D gallium-va=false
|
||||
-D gallium-xa=false
|
||||
-D gallium-nine=false
|
||||
-D gallium-opencl=icd
|
||||
script:
|
||||
- export GALLIUM_DRIVERS="r600,radeonsi"
|
||||
- .gitlab-ci/meson-build.sh
|
||||
- LLVM_VERSION=8 .gitlab-ci/meson-build.sh
|
||||
- export GALLIUM_DRIVERS="i915,r600"
|
||||
- LLVM_VERSION=6.0 .gitlab-ci/meson-build.sh
|
||||
- LLVM_VERSION=7 .gitlab-ci/meson-build.sh
|
||||
|
||||
meson-clover-old-llvm:
|
||||
extends:
|
||||
- meson-clover
|
||||
- .use-x86_build_old
|
||||
variables:
|
||||
UNWIND: "false"
|
||||
DRI_LOADERS: >
|
||||
-D glx=disabled
|
||||
-D egl=false
|
||||
-D gbm=false
|
||||
-D platforms=drm,surfaceless
|
||||
GALLIUM_DRIVERS: "i915,r600"
|
||||
script:
|
||||
- LLVM_VERSION=3.9 .gitlab-ci/meson-build.sh
|
||||
- LLVM_VERSION=4.0 .gitlab-ci/meson-build.sh
|
||||
- LLVM_VERSION=5.0 .gitlab-ci/meson-build.sh
|
||||
|
||||
meson-vulkan:
|
||||
extends: .meson-build
|
||||
variables:
|
||||
UNWIND: "false"
|
||||
DRI_LOADERS: >
|
||||
-D glx=disabled
|
||||
-D gbm=false
|
||||
-D egl=false
|
||||
-D platforms=x11,wayland,drm
|
||||
-D osmesa=none
|
||||
GALLIUM_ST: >
|
||||
-D dri3=true
|
||||
-D gallium-vdpau=false
|
||||
-D gallium-xvmc=false
|
||||
-D gallium-omx=disabled
|
||||
-D gallium-va=false
|
||||
-D gallium-xa=false
|
||||
-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
|
||||
EXTRA_OPTION: >
|
||||
-D vulkan-overlay-layer=true
|
||||
|
||||
# While the main point of this build is testing the i386 cross build,
|
||||
# we also use this one to test some other options that are exclusive
|
||||
# with meson-main's choices (classic swrast and osmesa)
|
||||
meson-i386:
|
||||
extends: .meson-cross
|
||||
variables:
|
||||
CROSS: i386
|
||||
VULKAN_DRIVERS: intel
|
||||
DRI_DRIVERS: "swrast"
|
||||
GALLIUM_DRIVERS: "iris"
|
||||
EXTRA_OPTION: >
|
||||
-D vulkan-overlay-layer=true
|
||||
-D llvm=false
|
||||
-D osmesa=classic
|
||||
-D werror=true
|
||||
|
||||
meson-mingw32-x86_64:
|
||||
extends: .meson-build
|
||||
variables:
|
||||
UNWIND: "false"
|
||||
DRI_DRIVERS: ""
|
||||
GALLIUM_DRIVERS: "swrast"
|
||||
EXTRA_OPTION: >
|
||||
-Dllvm=false
|
||||
-Dosmesa=gallium
|
||||
--cross-file=.gitlab-ci/x86_64-w64-mingw32
|
||||
|
||||
scons:
|
||||
extends: .scons-build
|
||||
variables:
|
||||
SCONS_TARGET: "llvm=1"
|
||||
SCONS_CHECK_COMMAND: "scons llvm=1 force_scons=1 check"
|
||||
script:
|
||||
- SCONS_TARGET="" SCONS_CHECK_COMMAND="scons check force_scons=1" .gitlab-ci/scons-build.sh
|
||||
- LLVM_VERSION=9 .gitlab-ci/scons-build.sh
|
||||
|
||||
scons-old-llvm:
|
||||
extends:
|
||||
- scons
|
||||
- .use-x86_build_old
|
||||
script:
|
||||
- LLVM_VERSION=3.9 .gitlab-ci/scons-build.sh
|
||||
|
||||
.test:
|
||||
extends:
|
||||
- .ci-run-policy
|
||||
stage: test
|
||||
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: "$CI_JOB_NAME-$CI_COMMIT_REF_NAME"
|
||||
paths:
|
||||
- results/
|
||||
dependencies:
|
||||
- meson-testing
|
||||
|
||||
.test-gl:
|
||||
extends:
|
||||
- .test
|
||||
variables:
|
||||
TAG: *x86_test-gl
|
||||
image: "$CI_REGISTRY_IMAGE/debian/x86_test-gl:$TAG"
|
||||
needs:
|
||||
- meson-testing
|
||||
- x86_test-gl
|
||||
|
||||
.test-vk:
|
||||
extends:
|
||||
- .test
|
||||
variables:
|
||||
TAG: *x86_test-vk
|
||||
image: "$CI_REGISTRY_IMAGE/debian/x86_test-vk:$TAG"
|
||||
needs:
|
||||
- meson-testing
|
||||
- x86_test-vk
|
||||
|
||||
.piglit-test:
|
||||
extends: .test-gl
|
||||
artifacts:
|
||||
when: on_failure
|
||||
name: "$CI_JOB_NAME-$CI_COMMIT_REF_NAME"
|
||||
paths:
|
||||
- summary/
|
||||
variables:
|
||||
LIBGL_ALWAYS_SOFTWARE: 1
|
||||
PIGLIT_NO_WINDOW: 1
|
||||
script:
|
||||
- artifacts/piglit/run.sh
|
||||
|
||||
piglit-quick_gl:
|
||||
extends: .piglit-test
|
||||
variables:
|
||||
LP_NUM_THREADS: 0
|
||||
NIR_VALIDATE: 0
|
||||
PIGLIT_OPTIONS: >
|
||||
--process-isolation false
|
||||
-x arb_gpu_shader5
|
||||
-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
|
||||
NIR_VALIDATE: 0
|
||||
PIGLIT_PROFILES: glslparser
|
||||
|
||||
piglit-quick_shader:
|
||||
extends: .piglit-test
|
||||
variables:
|
||||
LP_NUM_THREADS: 1
|
||||
NIR_VALIDATE: 0
|
||||
PIGLIT_PROFILES: quick_shader
|
||||
|
||||
.deqp-test:
|
||||
variables:
|
||||
DEQP_SKIPS: deqp-default-skips.txt
|
||||
script:
|
||||
- ./artifacts/deqp-runner.sh
|
||||
|
||||
.deqp-test-gl:
|
||||
extends:
|
||||
- .test-gl
|
||||
- .deqp-test
|
||||
|
||||
.deqp-test-vk:
|
||||
extends:
|
||||
- .test-vk
|
||||
- .deqp-test
|
||||
variables:
|
||||
DEQP_VER: vk
|
||||
|
||||
test-llvmpipe-gles2:
|
||||
variables:
|
||||
DEQP_VER: gles2
|
||||
DEQP_PARALLEL: 4
|
||||
NIR_VALIDATE: 0
|
||||
# Don't use threads inside llvmpipe, we've already got all 4 cores
|
||||
# busy with DEQP_PARALLEL.
|
||||
LP_NUM_THREADS: 0
|
||||
DEQP_EXPECTED_FAILS: deqp-llvmpipe-fails.txt
|
||||
LIBGL_ALWAYS_SOFTWARE: "true"
|
||||
extends: .deqp-test-gl
|
||||
|
||||
test-softpipe-gles2:
|
||||
extends: test-llvmpipe-gles2
|
||||
variables:
|
||||
DEQP_EXPECTED_FAILS: deqp-softpipe-fails.txt
|
||||
DEQP_SKIPS: deqp-softpipe-skips.txt
|
||||
GALLIUM_DRIVER: "softpipe"
|
||||
|
||||
test-softpipe-gles3:
|
||||
parallel: 2
|
||||
variables:
|
||||
DEQP_VER: gles3
|
||||
extends: test-softpipe-gles2
|
||||
|
||||
test-softpipe-gles31:
|
||||
parallel: 4
|
||||
variables:
|
||||
DEQP_VER: gles31
|
||||
extends: test-softpipe-gles2
|
||||
|
||||
arm64_a630_gles2:
|
||||
extends:
|
||||
- .deqp-test-gl
|
||||
- .use-arm_test
|
||||
variables:
|
||||
DEQP_VER: gles2
|
||||
DEQP_EXPECTED_FAILS: deqp-freedreno-a630-fails.txt
|
||||
DEQP_SKIPS: deqp-freedreno-a630-skips.txt
|
||||
NIR_VALIDATE: 0
|
||||
DEQP_PARALLEL: 4
|
||||
FLAKES_CHANNEL: "#freedreno-ci"
|
||||
tags:
|
||||
- mesa-cheza
|
||||
dependencies:
|
||||
- meson-arm64
|
||||
|
||||
arm64_a630_gles31:
|
||||
extends: arm64_a630_gles2
|
||||
variables:
|
||||
DEQP_VER: gles31
|
||||
|
||||
arm64_a630_gles3:
|
||||
extends: arm64_a630_gles2
|
||||
variables:
|
||||
DEQP_VER: gles3
|
||||
|
||||
arm64_a306_gles2:
|
||||
extends: arm64_a630_gles2
|
||||
variables:
|
||||
DEQP_EXPECTED_FAILS: deqp-freedreno-a307-fails.txt
|
||||
DEQP_SKIPS: deqp-default-skips.txt
|
||||
tags:
|
||||
- db410c
|
||||
|
||||
# RADV CI
|
||||
.test-radv:
|
||||
variables:
|
||||
VK_DRIVER: radeon
|
||||
RADV_DEBUG: checkir
|
||||
# Can only be triggered manually on personal branches because RADV is the only
|
||||
# driver that does Vulkan testing at the moment.
|
||||
rules:
|
||||
# Never test RADV by default in the main project.
|
||||
- if: '$CI_PROJECT_PATH == "mesa/mesa"'
|
||||
when: never
|
||||
# Never test RADV by default for merge requests.
|
||||
- if: '$CI_MERGE_REQUEST_SOURCE_BRANCH_NAME == $CI_COMMIT_REF_NAME'
|
||||
when: never
|
||||
# Otherwise, allow testing RADV if the test image for VK has been manually
|
||||
# started.
|
||||
- when: on_success
|
||||
|
||||
radv_polaris10_vkcts:
|
||||
extends:
|
||||
- .deqp-test-vk
|
||||
- .test-radv
|
||||
variables:
|
||||
DEQP_PARALLEL: 4
|
||||
DEQP_SKIPS: deqp-radv-polaris10-skips.txt
|
||||
tags:
|
||||
- polaris10
|
@@ -1,122 +0,0 @@
|
||||
## Mesa testing using gitlab-runner
|
||||
|
||||
The goal of the "test" stage of the .gitlab-ci.yml is to do pre-merge
|
||||
testing of Mesa drivers on various platforms, so that we can ensure no
|
||||
regressions are merged, as long as developers are merging code using
|
||||
the "Merge when pipeline completes" button.
|
||||
|
||||
This document only covers the CI from .gitlab-ci.yml and this
|
||||
directory. For other CI systems, see Intel's [Mesa
|
||||
CI](https://gitlab.freedesktop.org/Mesa_CI) or panfrost's LAVA-based
|
||||
CI (`src/gallium/drivers/panfrost/ci/`)
|
||||
|
||||
### Software architecture
|
||||
|
||||
For freedreno and llvmpipe CI, we're using gitlab-runner on the test
|
||||
devices (DUTs), cached docker containers with VK-GL-CTS, and the
|
||||
normal shared x86_64 runners to build the Mesa drivers to be run
|
||||
inside of those containers on the DUTs.
|
||||
|
||||
The docker containers are rebuilt from the debian-install.sh script
|
||||
when DEBIAN\_TAG is changed in .gitlab-ci.yml, and
|
||||
debian-test-install.sh when DEBIAN\_ARM64\_TAG is changed in
|
||||
.gitlab-ci.yml. The resulting images are around 500MB, and are
|
||||
expected to change approximately weekly (though an individual
|
||||
developer working on them may produce many more images while trying to
|
||||
come up with a working MR!).
|
||||
|
||||
gitlab-runner is a client that polls gitlab.freedesktop.org for
|
||||
available jobs, with no inbound networking requirements. Jobs can
|
||||
have tags, so we can have DUT-specific jobs that only run on runners
|
||||
with that tag marked in the gitlab UI.
|
||||
|
||||
Since dEQP takes a long time to run, we mark the job as "parallel" at
|
||||
some level, which spawns multiple jobs from one definition, and then
|
||||
deqp-runner.sh takes the corresponding fraction of the test list for
|
||||
that job.
|
||||
|
||||
To reduce dEQP runtime (or avoid tests with unreliable results), a
|
||||
deqp-runner.sh invocation can provide a list of tests to skip. If
|
||||
your driver is not yet conformant, you can pass a list of expected
|
||||
failures, and the job will only fail on tests that aren't listed (look
|
||||
at the job's log for which specific tests failed).
|
||||
|
||||
### DUT requirements
|
||||
|
||||
#### DUTs must have a stable kernel and GPU reset.
|
||||
|
||||
If the system goes down during a test run, that job will eventually
|
||||
time out and fail (default 1 hour). However, if the kernel can't
|
||||
reliably reset the GPU on failure, bugs in one MR may leak into
|
||||
spurious failures in another MR. This would be an unacceptable impact
|
||||
on Mesa developers working on other drivers.
|
||||
|
||||
#### DUTs must be able to run docker
|
||||
|
||||
The Mesa gitlab-runner based test architecture is built around docker,
|
||||
so that we can cache the debian package installation and CTS build
|
||||
step across multiple test runs. Since the images are large and change
|
||||
approximately weekly, the DUTs also need to be running some script to
|
||||
prune stale docker images periodically in order to not run out of disk
|
||||
space as we rev those containers (perhaps [this
|
||||
script](https://gitlab.com/gitlab-org/gitlab-runner/issues/2980#note_169233611)).
|
||||
|
||||
Note that docker doesn't allow containers to be stored on NFS, and
|
||||
doesn't allow multiple docker daemons to interact with the same
|
||||
network block device, so you will probably need some sort of physical
|
||||
storage on your DUTs.
|
||||
|
||||
#### DUTs must be public
|
||||
|
||||
By including your device in .gitlab-ci.yml, you're effectively letting
|
||||
anyone on the internet run code on your device. docker containers may
|
||||
provide some limited protection, but how much you trust that and what
|
||||
you do to mitigate hostile access is up to you.
|
||||
|
||||
#### DUTs must expose the dri device nodes to the containers.
|
||||
|
||||
Obviously, to get access to the HW, we need to pass the render node
|
||||
through. This is done by adding `devices = ["/dev/dri"]` to the
|
||||
`runners.docker` section of /etc/gitlab-runner/config.toml.
|
||||
|
||||
### HW CI farm expectations
|
||||
|
||||
To make sure that testing of one vendor's drivers doesn't block
|
||||
unrelated work by other vendors, we require that a given driver's test
|
||||
farm produces a spurious failure no more than once a week. If every
|
||||
driver had CI and failed once a week, we would be seeing someone's
|
||||
code getting blocked on a spurious failure daily, which is an
|
||||
unacceptable cost to the project.
|
||||
|
||||
Additionally, the test farm needs to be able to provide a short enough
|
||||
turnaround time that people can regularly use the "Merge when pipeline
|
||||
succeeds" button successfully (until we get
|
||||
[marge-bot](https://github.com/smarkets/marge-bot) in place on
|
||||
freedesktop.org). As a result, we require that the test farm be able
|
||||
to handle a whole pipeline's worth of jobs in less than 5 minutes (to
|
||||
compare, the build stage is about 10 minutes, if you could get all
|
||||
your jobs scheduled on the shared runners in time.).
|
||||
|
||||
If a test farm is short the HW to provide these guarantees, consider
|
||||
dropping tests to reduce runtime.
|
||||
`VK-GL-CTS/scripts/log/bottleneck_report.py` can help you find what
|
||||
tests were slow in a `results.qpa` file. Or, you can have a job with
|
||||
no `parallel` field set and:
|
||||
|
||||
```
|
||||
variables:
|
||||
CI_NODE_INDEX: 1
|
||||
CI_NODE_TOTAL: 10
|
||||
```
|
||||
|
||||
to just run 1/10th of the test list.
|
||||
|
||||
If a HW CI farm goes offline (network dies and all CI pipelines end up
|
||||
stalled) or its runners are consistenly spuriously failing (disk
|
||||
full?), and the maintainer is not immediately available to fix the
|
||||
issue, please push through an MR disabling that farm's jobs by adding
|
||||
'.' to the front of the jobs names until the maintainer can bring
|
||||
things back up. If this happens, the farm maintainer should provide a
|
||||
report to mesa-dev@lists.freedesktop.org after the fact explaining
|
||||
what happened and what the mitigation plan is for that failure next
|
||||
time.
|
@@ -1,46 +0,0 @@
|
||||
CONFIG_LOCALVERSION="ccu"
|
||||
|
||||
CONFIG_DEBUG_KERNEL=y
|
||||
|
||||
CONFIG_DEVFREQ_GOV_PERFORMANCE=y
|
||||
CONFIG_DEVFREQ_GOV_POWERSAVE=y
|
||||
CONFIG_DEVFREQ_GOV_USERSPACE=y
|
||||
CONFIG_DEVFREQ_GOV_PASSIVE=y
|
||||
CONFIG_DEVFREQ_GOV_SIMPLE_ONDEMAND=y
|
||||
|
||||
CONFIG_DRM=y
|
||||
CONFIG_DRM_ROCKCHIP=y
|
||||
CONFIG_DRM_PANFROST=y
|
||||
CONFIG_DRM_LIMA=y
|
||||
CONFIG_DRM_PANEL_SIMPLE=y
|
||||
CONFIG_PWM_CROS_EC=y
|
||||
CONFIG_BACKLIGHT_PWM=y
|
||||
|
||||
CONFIG_ROCKCHIP_CDN_DP=n
|
||||
|
||||
CONFIG_SPI_ROCKCHIP=y
|
||||
CONFIG_PWM_ROCKCHIP=y
|
||||
CONFIG_PHY_ROCKCHIP_DP=y
|
||||
CONFIG_DWMAC_ROCKCHIP=y
|
||||
|
||||
CONFIG_MFD_RK808=y
|
||||
CONFIG_REGULATOR_RK808=y
|
||||
CONFIG_RTC_DRV_RK808=y
|
||||
CONFIG_COMMON_CLK_RK808=y
|
||||
|
||||
CONFIG_REGULATOR_FAN53555=y
|
||||
CONFIG_REGULATOR=y
|
||||
|
||||
CONFIG_REGULATOR_VCTRL=y
|
||||
|
||||
CONFIG_KASAN=n
|
||||
CONFIG_KASAN_INLINE=n
|
||||
CONFIG_STACKTRACE=n
|
||||
|
||||
CONFIG_TMPFS=y
|
||||
|
||||
CONFIG_PROVE_LOCKING=n
|
||||
CONFIG_DEBUG_LOCKDEP=n
|
||||
CONFIG_SOFTLOCKUP_DETECTOR=n
|
||||
CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC=n
|
||||
|
@@ -1,83 +0,0 @@
|
||||
CONFIG_LOCALVERSION="ccu"
|
||||
|
||||
CONFIG_DEBUG_KERNEL=y
|
||||
|
||||
CONFIG_DEVFREQ_GOV_PERFORMANCE=y
|
||||
CONFIG_DEVFREQ_GOV_POWERSAVE=y
|
||||
CONFIG_DEVFREQ_GOV_USERSPACE=y
|
||||
CONFIG_DEVFREQ_GOV_PASSIVE=y
|
||||
|
||||
CONFIG_DRM=y
|
||||
CONFIG_DRM_ROCKCHIP=y
|
||||
CONFIG_DRM_PANFROST=y
|
||||
CONFIG_DRM_LIMA=y
|
||||
CONFIG_DRM_PANEL_SIMPLE=y
|
||||
CONFIG_PWM_CROS_EC=y
|
||||
CONFIG_BACKLIGHT_PWM=y
|
||||
|
||||
CONFIG_ROCKCHIP_CDN_DP=n
|
||||
|
||||
CONFIG_SPI_ROCKCHIP=y
|
||||
CONFIG_PWM_ROCKCHIP=y
|
||||
CONFIG_PHY_ROCKCHIP_DP=y
|
||||
CONFIG_DWMAC_ROCKCHIP=y
|
||||
CONFIG_STMMAC_ETH=y
|
||||
CONFIG_TYPEC_FUSB302=y
|
||||
CONFIG_TYPEC=y
|
||||
CONFIG_TYPEC_TCPM=y
|
||||
|
||||
CONFIG_ARCH_ALPINE=n
|
||||
CONFIG_ARCH_BCM2835=n
|
||||
CONFIG_ARCH_BCM_IPROC=n
|
||||
CONFIG_ARCH_BERLIN=n
|
||||
CONFIG_ARCH_BRCMSTB=n
|
||||
CONFIG_ARCH_EXYNOS=n
|
||||
CONFIG_ARCH_K3=n
|
||||
CONFIG_ARCH_LAYERSCAPE=n
|
||||
CONFIG_ARCH_LG1K=n
|
||||
CONFIG_ARCH_HISI=n
|
||||
CONFIG_ARCH_MEDIATEK=n
|
||||
CONFIG_ARCH_MVEBU=n
|
||||
CONFIG_ARCH_QCOM=n
|
||||
CONFIG_ARCH_SEATTLE=n
|
||||
CONFIG_ARCH_SYNQUACER=n
|
||||
CONFIG_ARCH_RENESAS=n
|
||||
CONFIG_ARCH_R8A774A1=n
|
||||
CONFIG_ARCH_R8A774C0=n
|
||||
CONFIG_ARCH_R8A7795=n
|
||||
CONFIG_ARCH_R8A7796=n
|
||||
CONFIG_ARCH_R8A77965=n
|
||||
CONFIG_ARCH_R8A77970=n
|
||||
CONFIG_ARCH_R8A77980=n
|
||||
CONFIG_ARCH_R8A77990=n
|
||||
CONFIG_ARCH_R8A77995=n
|
||||
CONFIG_ARCH_STRATIX10=n
|
||||
CONFIG_ARCH_TEGRA=n
|
||||
CONFIG_ARCH_SPRD=n
|
||||
CONFIG_ARCH_THUNDER=n
|
||||
CONFIG_ARCH_THUNDER2=n
|
||||
CONFIG_ARCH_UNIPHIER=n
|
||||
CONFIG_ARCH_VEXPRESS=n
|
||||
CONFIG_ARCH_XGENE=n
|
||||
CONFIG_ARCH_ZX=n
|
||||
CONFIG_ARCH_ZYNQMP=n
|
||||
|
||||
CONFIG_ACPI=n
|
||||
|
||||
CONFIG_REGULATOR_FAN53555=y
|
||||
CONFIG_REGULATOR=y
|
||||
|
||||
CONFIG_REGULATOR_VCTRL=y
|
||||
|
||||
CONFIG_KASAN=n
|
||||
CONFIG_KASAN_INLINE=n
|
||||
CONFIG_STACKTRACE=n
|
||||
|
||||
CONFIG_TMPFS=y
|
||||
|
||||
CONFIG_PROVE_LOCKING=n
|
||||
CONFIG_DEBUG_LOCKDEP=n
|
||||
CONFIG_SOFTLOCKUP_DETECTOR=y
|
||||
CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC=y
|
||||
|
||||
CONFIG_DETECT_HUNG_TASK=y
|
@@ -1,10 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
set -ex
|
||||
|
||||
git clone https://gitlab.freedesktop.org/mesa/parallel-deqp-runner.git --depth 1 -b mesa-ci-2019-12-17
|
||||
cd parallel-deqp-runner
|
||||
meson build/ $EXTRA_MESON_ARGS
|
||||
ninja -C build -j4 install
|
||||
cd ..
|
||||
rm -rf parallel-deqp-runner
|
@@ -1,61 +0,0 @@
|
||||
git config --global user.email "mesa@example.com"
|
||||
git config --global user.name "Mesa CI"
|
||||
# XXX: Use --depth 1 once we can drop the cherry-picks.
|
||||
git clone \
|
||||
https://github.com/KhronosGroup/VK-GL-CTS.git \
|
||||
-b opengl-es-cts-3.2.5.1 \
|
||||
/VK-GL-CTS
|
||||
pushd /VK-GL-CTS
|
||||
# Fix surfaceless build
|
||||
git cherry-pick -x 22f41e5e321c6dcd8569c4dad91bce89f06b3670
|
||||
git cherry-pick -x 1daa8dff73161ea60ead965bd6c9f2a0a2165648
|
||||
|
||||
# surfaceless links against libkms and such despite not using it.
|
||||
sed -i '/gbm/d' targets/surfaceless/surfaceless.cmake
|
||||
sed -i '/libkms/d' targets/surfaceless/surfaceless.cmake
|
||||
sed -i '/libgbm/d' targets/surfaceless/surfaceless.cmake
|
||||
|
||||
# --insecure is due to SSL cert failures hitting sourceforge for zlib and
|
||||
# libpng (sigh). The archives get their checksums checked anyway, and git
|
||||
# always goes through ssh or https.
|
||||
python3 external/fetch_sources.py --insecure
|
||||
|
||||
mkdir -p /deqp
|
||||
|
||||
# Save the testlog stylesheets:
|
||||
cp doc/testlog-stylesheet/testlog.{css,xsl} /deqp
|
||||
popd
|
||||
|
||||
pushd /deqp
|
||||
cmake -G Ninja \
|
||||
-DDEQP_TARGET=surfaceless \
|
||||
-DCMAKE_BUILD_TYPE=Release \
|
||||
$EXTRA_CMAKE_ARGS \
|
||||
/VK-GL-CTS
|
||||
ninja
|
||||
|
||||
# Copy out the mustpass lists we want from a bunch of other junk.
|
||||
mkdir /deqp/mustpass
|
||||
for gles in gles2 gles3 gles31; do
|
||||
cp \
|
||||
/deqp/external/openglcts/modules/gl_cts/data/mustpass/gles/aosp_mustpass/3.2.5.x/$gles-master.txt \
|
||||
/deqp/mustpass/$gles-master.txt
|
||||
done
|
||||
|
||||
# Save *some* executor utils, but otherwise strip things down
|
||||
# to reduct deqp build size:
|
||||
mkdir /deqp/executor.save
|
||||
cp /deqp/executor/testlog-to-* /deqp/executor.save
|
||||
rm -rf /deqp/executor
|
||||
mv /deqp/executor.save /deqp/executor
|
||||
|
||||
rm -rf /deqp/external
|
||||
rm -rf /deqp/modules/internal
|
||||
rm -rf /deqp/execserver
|
||||
rm -rf /deqp/modules/egl
|
||||
rm -rf /deqp/framework
|
||||
find -iname '*cmake*' -o -name '*ninja*' -o -name '*.o' -o -name '*.a' | xargs rm -rf
|
||||
${STRIP_CMD:-strip} modules/*/deqp-*
|
||||
du -sh *
|
||||
rm -rf /VK-GL-CTS
|
||||
popd
|
@@ -1,33 +0,0 @@
|
||||
git clone --depth 1 \
|
||||
https://github.com/KhronosGroup/VK-GL-CTS.git \
|
||||
-b vulkan-cts-1.1.6.0 \
|
||||
/VK-GL-CTS
|
||||
cd /VK-GL-CTS
|
||||
|
||||
# --insecure is due to SSL cert failures hitting sourceforge for zlib and
|
||||
# libpng (sigh). The archives get their checksums checked anyway, and git
|
||||
# always goes through ssh or https.
|
||||
python3 external/fetch_sources.py --insecure
|
||||
|
||||
mkdir -p /deqp
|
||||
cd /deqp
|
||||
cmake -G Ninja \
|
||||
-DDEQP_TARGET=x11_glx \
|
||||
-DCMAKE_BUILD_TYPE=Release \
|
||||
/VK-GL-CTS
|
||||
ninja -j4
|
||||
|
||||
# Copy out the mustpass list we want.
|
||||
mkdir /deqp/mustpass
|
||||
cp /VK-GL-CTS/external/vulkancts/mustpass/master/vk-default.txt \
|
||||
/deqp/mustpass/vk-master.txt
|
||||
|
||||
rm -rf /deqp/modules/internal
|
||||
rm -rf /deqp/executor
|
||||
rm -rf /deqp/execserver
|
||||
rm -rf /deqp/modules/egl
|
||||
rm -rf /deqp/framework
|
||||
find -iname '*cmake*' -o -name '*ninja*' -o -name '*.o' -o -name '*.a' | xargs rm -rf
|
||||
strip external/vulkancts/modules/vulkan/deqp-vk
|
||||
du -sh *
|
||||
rm -rf /VK-GL-CTS
|
@@ -1,13 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
set -ex
|
||||
|
||||
git clone https://gitlab.freedesktop.org/mesa/piglit.git --single-branch --no-checkout /piglit
|
||||
pushd /piglit
|
||||
git checkout 8771c3860505db2bcf4877216221d774bf90af6b
|
||||
patch -p1 <$OLDPWD/.gitlab-ci/piglit/disable-vs_in.diff
|
||||
cmake -G Ninja -DCMAKE_BUILD_TYPE=Release
|
||||
ninja -j4
|
||||
find -name .git -o -name '*ninja*' -o -iname '*cmake*' -o -name '*.[chao]' | xargs rm -rf
|
||||
rm -rf target_api
|
||||
popd
|
@@ -1,74 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
set -e
|
||||
set -o xtrace
|
||||
|
||||
############### Install packages for building
|
||||
apt-get -y install ca-certificates
|
||||
sed -i -e 's/http:\/\/deb/https:\/\/deb/g' /etc/apt/sources.list
|
||||
echo 'deb https://deb.debian.org/debian buster-backports main' >/etc/apt/sources.list.d/backports.list
|
||||
dpkg --add-architecture armhf
|
||||
apt-get update
|
||||
apt-get -y install \
|
||||
bc \
|
||||
bison \
|
||||
ccache \
|
||||
cmake \
|
||||
cpio \
|
||||
crossbuild-essential-armhf \
|
||||
debootstrap \
|
||||
flex \
|
||||
g++ \
|
||||
gettext \
|
||||
git \
|
||||
lavacli \
|
||||
libdrm-dev:armhf \
|
||||
libegl1-mesa-dev \
|
||||
libegl1-mesa-dev:armhf \
|
||||
libelf-dev \
|
||||
libelf-dev:armhf \
|
||||
libexpat1-dev \
|
||||
libexpat1-dev:armhf \
|
||||
libgles2-mesa-dev \
|
||||
libgles2-mesa-dev:armhf \
|
||||
libpng-dev \
|
||||
libpng-dev:armhf \
|
||||
libssl-dev \
|
||||
libvulkan-dev \
|
||||
libvulkan-dev:armhf \
|
||||
llvm-7-dev:armhf \
|
||||
llvm-8-dev \
|
||||
meson \
|
||||
pkg-config \
|
||||
python \
|
||||
python3-mako \
|
||||
unzip \
|
||||
wget \
|
||||
zlib1g-dev
|
||||
|
||||
# dependencies where we want a specific version
|
||||
export LIBDRM_VERSION=libdrm-2.4.100
|
||||
|
||||
wget https://dri.freedesktop.org/libdrm/$LIBDRM_VERSION.tar.bz2
|
||||
tar -xvf $LIBDRM_VERSION.tar.bz2 && rm $LIBDRM_VERSION.tar.bz2
|
||||
cd $LIBDRM_VERSION; meson build -D vc4=true -D freedreno=true -D etnaviv=true; ninja -j4 -C build install; cd ..
|
||||
rm -rf $LIBDRM_VERSION
|
||||
|
||||
############### Generate cross build file for Meson
|
||||
|
||||
cross_file="/cross_file-armhf.txt"
|
||||
/usr/share/meson/debcrossgen --arch armhf -o "$cross_file"
|
||||
# Explicitly set ccache path for cross compilers
|
||||
sed -i "s|/usr/bin/\([^-]*\)-linux-gnu\([^-]*\)-g|/usr/lib/ccache/\\1-linux-gnu\\2-g|g" "$cross_file"
|
||||
# Don't need wrapper for armhf executables
|
||||
sed -i -e '/\[properties\]/a\' -e "needs_exe_wrapper = False" "$cross_file"
|
||||
|
||||
############### Generate kernel, ramdisk, test suites, etc for LAVA jobs
|
||||
|
||||
DEBIAN_ARCH=arm64 . .gitlab-ci/container/lava_arm.sh
|
||||
DEBIAN_ARCH=armhf . .gitlab-ci/container/lava_arm.sh
|
||||
|
||||
apt-get purge -y \
|
||||
wget
|
||||
|
||||
apt-get autoremove -y --purge
|
@@ -1,64 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
set -e
|
||||
set -o xtrace
|
||||
|
||||
############### Install packages for building
|
||||
apt-get -y install ca-certificates
|
||||
sed -i -e 's/http:\/\/deb/https:\/\/deb/g' /etc/apt/sources.list
|
||||
echo 'deb https://deb.debian.org/debian buster-backports main' >/etc/apt/sources.list.d/backports.list
|
||||
apt-get update
|
||||
apt-get -y install \
|
||||
bzip2 \
|
||||
cmake \
|
||||
g++ \
|
||||
gcc \
|
||||
git \
|
||||
libc6-dev \
|
||||
libdrm-nouveau2 \
|
||||
libexpat1 \
|
||||
libgbm-dev \
|
||||
libgbm-dev \
|
||||
libgles2-mesa-dev \
|
||||
libllvm8 \
|
||||
libpng16-16 \
|
||||
libpng-dev \
|
||||
libvulkan-dev \
|
||||
libvulkan1 \
|
||||
meson \
|
||||
netcat \
|
||||
pkg-config \
|
||||
procps \
|
||||
python \
|
||||
waffle-utils \
|
||||
wget \
|
||||
zlib1g
|
||||
|
||||
############### Build dEQP runner
|
||||
|
||||
. .gitlab-ci/build-cts-runner.sh
|
||||
|
||||
############### Build dEQP GL
|
||||
|
||||
. .gitlab-ci/build-deqp-gl.sh
|
||||
|
||||
|
||||
############### Uninstall the build software
|
||||
|
||||
apt-get purge -y \
|
||||
bzip2 \
|
||||
cmake \
|
||||
g++ \
|
||||
gcc \
|
||||
git \
|
||||
libc6-dev \
|
||||
libgbm-dev \
|
||||
libgles2-mesa-dev \
|
||||
libpng-dev \
|
||||
libvulkan-dev \
|
||||
meson \
|
||||
pkg-config \
|
||||
python \
|
||||
wget
|
||||
|
||||
apt-get autoremove -y --purge
|
@@ -1,63 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
set -e
|
||||
set -o xtrace
|
||||
|
||||
if [[ "$DEBIAN_ARCH" = "arm64" ]]; then
|
||||
GCC_ARCH="aarch64-linux-gnu"
|
||||
KERNEL_ARCH="arm64"
|
||||
DEFCONFIG="arch/arm64/configs/defconfig"
|
||||
DEVICE_TREES="arch/arm64/boot/dts/rockchip/rk3399-gru-kevin.dtb arch/arm64/boot/dts/amlogic/meson-gxl-s905x-libretech-cc.dtb arch/arm64/boot/dts/allwinner/sun50i-h6-pine-h64.dtb arch/arm64/boot/dts/amlogic/meson-gxm-khadas-vim2.dtb"
|
||||
KERNEL_IMAGE_NAME="Image"
|
||||
else
|
||||
GCC_ARCH="arm-linux-gnueabihf"
|
||||
KERNEL_ARCH="arm"
|
||||
DEFCONFIG="arch/arm/configs/multi_v7_defconfig"
|
||||
DEVICE_TREES="arch/arm/boot/dts/rk3288-veyron-jaq.dtb arch/arm/boot/dts/sun8i-h3-libretech-all-h3-cc.dtb"
|
||||
KERNEL_IMAGE_NAME="zImage"
|
||||
fi
|
||||
|
||||
############### Build dEQP runner
|
||||
if [[ "$DEBIAN_ARCH" = "armhf" ]]; then
|
||||
EXTRA_MESON_ARGS="--cross-file /cross_file-armhf.txt"
|
||||
fi
|
||||
. .gitlab-ci/build-cts-runner.sh
|
||||
mkdir -p /lava-files/rootfs-${DEBIAN_ARCH}/usr/bin
|
||||
mv /usr/local/bin/deqp-runner /lava-files/rootfs-${DEBIAN_ARCH}/usr/bin/.
|
||||
|
||||
|
||||
############### Build dEQP
|
||||
EXTRA_CMAKE_ARGS="-DCMAKE_C_COMPILER=${GCC_ARCH}-gcc -DCMAKE_CXX_COMPILER=${GCC_ARCH}-g++"
|
||||
STRIP_CMD="${GCC_ARCH}-strip"
|
||||
. .gitlab-ci/build-deqp-gl.sh
|
||||
mv /deqp /lava-files/rootfs-${DEBIAN_ARCH}/.
|
||||
|
||||
|
||||
############### Cross-build kernel
|
||||
KERNEL_URL="https://gitlab.freedesktop.org/tomeu/linux/-/archive/v5.5-rc5-panfrost-fixes/linux-v5.5-rc5-panfrost-fixes.tar.gz"
|
||||
|
||||
if [[ "$DEBIAN_ARCH" = "armhf" ]]; then
|
||||
export ARCH=${KERNEL_ARCH}
|
||||
export CROSS_COMPILE="${GCC_ARCH}-"
|
||||
fi
|
||||
|
||||
mkdir -p kernel
|
||||
wget -qO- ${KERNEL_URL} | tar -xz --strip-components=1 -C kernel
|
||||
pushd kernel
|
||||
./scripts/kconfig/merge_config.sh ${DEFCONFIG} ../.gitlab-ci/${KERNEL_ARCH}.config
|
||||
make -j12 ${KERNEL_IMAGE_NAME} dtbs
|
||||
cp arch/${KERNEL_ARCH}/boot/${KERNEL_IMAGE_NAME} /lava-files/.
|
||||
cp ${DEVICE_TREES} /lava-files/.
|
||||
popd
|
||||
rm -rf kernel
|
||||
|
||||
|
||||
############### Create rootfs
|
||||
set +e
|
||||
debootstrap --variant=minbase --arch=${DEBIAN_ARCH} testing /lava-files/rootfs-${DEBIAN_ARCH}/ http://deb.debian.org/debian
|
||||
cat /lava-files/rootfs-${DEBIAN_ARCH}/debootstrap/debootstrap.log
|
||||
set -e
|
||||
|
||||
cp .gitlab-ci/create-rootfs.sh /lava-files/rootfs-${DEBIAN_ARCH}/.
|
||||
chroot /lava-files/rootfs-${DEBIAN_ARCH} sh /create-rootfs.sh
|
||||
rm /lava-files/rootfs-${DEBIAN_ARCH}/create-rootfs.sh
|
@@ -1,52 +0,0 @@
|
||||
-----BEGIN PGP PUBLIC KEY BLOCK-----
|
||||
Version: GnuPG v1.4.12 (GNU/Linux)
|
||||
|
||||
mQINBFE9lCwBEADi0WUAApM/mgHJRU8lVkkw0CHsZNpqaQDNaHefD6Rw3S4LxNmM
|
||||
EZaOTkhP200XZM8lVdbfUW9xSjA3oPldc1HG26NjbqqCmWpdo2fb+r7VmU2dq3NM
|
||||
R18ZlKixiLDE6OUfaXWKamZsXb6ITTYmgTO6orQWYrnW6ckYHSeaAkW0wkDAryl2
|
||||
B5v8aoFnQ1rFiVEMo4NGzw4UX+MelF7rxaaregmKVTPiqCOSPJ1McC1dHFN533FY
|
||||
Wh/RVLKWo6npu+owtwYFQW+zyQhKzSIMvNujFRzhIxzxR9Gn87MoLAyfgKEzrbbT
|
||||
DhqqNXTxS4UMUKCQaO93TzetX/EBrRpJj+vP640yio80h4Dr5pAd7+LnKwgpTDk1
|
||||
G88bBXJAcPZnTSKu9I2c6KY4iRNbvRz4i+ZdwwZtdW4nSdl2792L7Sl7Nc44uLL/
|
||||
ZqkKDXEBF6lsX5XpABwyK89S/SbHOytXv9o4puv+65Ac5/UShspQTMSKGZgvDauU
|
||||
cs8kE1U9dPOqVNCYq9Nfwinkf6RxV1k1+gwtclxQuY7UpKXP0hNAXjAiA5KS5Crq
|
||||
7aaJg9q2F4bub0mNU6n7UI6vXguF2n4SEtzPRk6RP+4TiT3bZUsmr+1ktogyOJCc
|
||||
Ha8G5VdL+NBIYQthOcieYCBnTeIH7D3Sp6FYQTYtVbKFzmMK+36ERreL/wARAQAB
|
||||
tD1TeWx2ZXN0cmUgTGVkcnUgLSBEZWJpYW4gTExWTSBwYWNrYWdlcyA8c3lsdmVz
|
||||
dHJlQGRlYmlhbi5vcmc+iQI4BBMBAgAiBQJRPZQsAhsDBgsJCAcDAgYVCAIJCgsE
|
||||
FgIDAQIeAQIXgAAKCRAVz00Yr090Ibx+EADArS/hvkDF8juWMXxh17CgR0WZlHCC
|
||||
9CTBWkg5a0bNN/3bb97cPQt/vIKWjQtkQpav6/5JTVCSx2riL4FHYhH0iuo4iAPR
|
||||
udC7Cvg8g7bSPrKO6tenQZNvQm+tUmBHgFiMBJi92AjZ/Qn1Shg7p9ITivFxpLyX
|
||||
wpmnF1OKyI2Kof2rm4BFwfSWuf8Fvh7kDMRLHv+MlnK/7j/BNpKdozXxLcwoFBmn
|
||||
l0WjpAH3OFF7Pvm1LJdf1DjWKH0Dc3sc6zxtmBR/KHHg6kK4BGQNnFKujcP7TVdv
|
||||
gMYv84kun14pnwjZcqOtN3UJtcx22880DOQzinoMs3Q4w4o05oIF+sSgHViFpc3W
|
||||
R0v+RllnH05vKZo+LDzc83DQVrdwliV12eHxrMQ8UYg88zCbF/cHHnlzZWAJgftg
|
||||
hB08v1BKPgYRUzwJ6VdVqXYcZWEaUJmQAPuAALyZESw94hSo28FAn0/gzEc5uOYx
|
||||
K+xG/lFwgAGYNb3uGM5m0P6LVTfdg6vDwwOeTNIExVk3KVFXeSQef2ZMkhwA7wya
|
||||
KJptkb62wBHFE+o9TUdtMCY6qONxMMdwioRE5BYNwAsS1PnRD2+jtlI0DzvKHt7B
|
||||
MWd8hnoUKhMeZ9TNmo+8CpsAtXZcBho0zPGz/R8NlJhAWpdAZ1CmcPo83EW86Yq7
|
||||
BxQUKnNHcwj2ebkCDQRRPZQsARAA4jxYmbTHwmMjqSizlMJYNuGOpIidEdx9zQ5g
|
||||
zOr431/VfWq4S+VhMDhs15j9lyml0y4ok215VRFwrAREDg6UPMr7ajLmBQGau0Fc
|
||||
bvZJ90l4NjXp5p0NEE/qOb9UEHT7EGkEhaZ1ekkWFTWCgsy7rRXfZLxB6sk7pzLC
|
||||
DshyW3zjIakWAnpQ5j5obiDy708pReAuGB94NSyb1HoW/xGsGgvvCw4r0w3xPStw
|
||||
F1PhmScE6NTBIfLliea3pl8vhKPlCh54Hk7I8QGjo1ETlRP4Qll1ZxHJ8u25f/ta
|
||||
RES2Aw8Hi7j0EVcZ6MT9JWTI83yUcnUlZPZS2HyeWcUj+8nUC8W4N8An+aNps9l/
|
||||
21inIl2TbGo3Yn1JQLnA1YCoGwC34g8QZTJhElEQBN0X29ayWW6OdFx8MDvllbBV
|
||||
ymmKq2lK1U55mQTfDli7S3vfGz9Gp/oQwZ8bQpOeUkc5hbZszYwP4RX+68xDPfn+
|
||||
M9udl+qW9wu+LyePbW6HX90LmkhNkkY2ZzUPRPDHZANU5btaPXc2H7edX4y4maQa
|
||||
xenqD0lGh9LGz/mps4HEZtCI5CY8o0uCMF3lT0XfXhuLksr7Pxv57yue8LLTItOJ
|
||||
d9Hmzp9G97SRYYeqU+8lyNXtU2PdrLLq7QHkzrsloG78lCpQcalHGACJzrlUWVP/
|
||||
fN3Ht3kAEQEAAYkCHwQYAQIACQUCUT2ULAIbDAAKCRAVz00Yr090IbhWEADbr50X
|
||||
OEXMIMGRLe+YMjeMX9NG4jxs0jZaWHc/WrGR+CCSUb9r6aPXeLo+45949uEfdSsB
|
||||
pbaEdNWxF5Vr1CSjuO5siIlgDjmT655voXo67xVpEN4HhMrxugDJfCa6z97P0+ML
|
||||
PdDxim57uNqkam9XIq9hKQaurxMAECDPmlEXI4QT3eu5qw5/knMzDMZj4Vi6hovL
|
||||
wvvAeLHO/jsyfIdNmhBGU2RWCEZ9uo/MeerPHtRPfg74g+9PPfP6nyHD2Wes6yGd
|
||||
oVQwtPNAQD6Cj7EaA2xdZYLJ7/jW6yiPu98FFWP74FN2dlyEA2uVziLsfBrgpS4l
|
||||
tVOlrO2YzkkqUGrybzbLpj6eeHx+Cd7wcjI8CalsqtL6cG8cUEjtWQUHyTbQWAgG
|
||||
5VPEgIAVhJ6RTZ26i/G+4J8neKyRs4vz+57UGwY6zI4AB1ZcWGEE3Bf+CDEDgmnP
|
||||
LSwbnHefK9IljT9XU98PelSryUO/5UPw7leE0akXKB4DtekToO226px1VnGp3Bov
|
||||
1GBGvpHvL2WizEwdk+nfk8LtrLzej+9FtIcq3uIrYnsac47Pf7p0otcFeTJTjSq3
|
||||
krCaoG4Hx0zGQG2ZFpHrSrZTVy6lxvIdfi0beMgY6h78p6M9eYZHQHc02DjFkQXN
|
||||
bXb5c6gCHESH5PXwPU4jQEE7Ib9J6sbk7ZT2Mw==
|
||||
=j+4q
|
||||
-----END PGP PUBLIC KEY BLOCK-----
|
@@ -1,220 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
set -e
|
||||
set -o xtrace
|
||||
|
||||
export DEBIAN_FRONTEND=noninteractive
|
||||
|
||||
CROSS_ARCHITECTURES="i386"
|
||||
for arch in $CROSS_ARCHITECTURES; do
|
||||
dpkg --add-architecture $arch
|
||||
done
|
||||
|
||||
apt-get install -y \
|
||||
ca-certificates \
|
||||
gnupg \
|
||||
unzip \
|
||||
wget
|
||||
|
||||
# Upstream LLVM package repository
|
||||
apt-key add .gitlab-ci/container/llvm-snapshot.gpg.key
|
||||
echo "deb https://apt.llvm.org/buster/ llvm-toolchain-buster-9 main" >/etc/apt/sources.list.d/llvm9.list
|
||||
|
||||
sed -i -e 's/http:\/\/deb/https:\/\/deb/g' /etc/apt/sources.list
|
||||
echo 'deb https://deb.debian.org/debian buster-backports main' >/etc/apt/sources.list.d/backports.list
|
||||
|
||||
apt-get update
|
||||
|
||||
# Use newer packages from backports by default
|
||||
cat >/etc/apt/preferences <<EOF
|
||||
Package: *
|
||||
Pin: release a=buster-backports
|
||||
Pin-Priority: 500
|
||||
EOF
|
||||
|
||||
apt-get dist-upgrade -y
|
||||
|
||||
apt-get install -y --no-remove \
|
||||
autoconf \
|
||||
automake \
|
||||
autotools-dev \
|
||||
bison \
|
||||
clang-9 \
|
||||
cmake \
|
||||
flex \
|
||||
g++ \
|
||||
gcc \
|
||||
gettext \
|
||||
git \
|
||||
libclang-6.0-dev \
|
||||
libclang-7-dev \
|
||||
libclang-8-dev \
|
||||
libclang-9-dev \
|
||||
libclc-dev \
|
||||
libelf-dev \
|
||||
libepoxy-dev \
|
||||
libexpat1-dev \
|
||||
libgbm-dev \
|
||||
libgtk-3-dev \
|
||||
libomxil-bellagio-dev \
|
||||
libpciaccess-dev \
|
||||
libtool \
|
||||
libunwind-dev \
|
||||
libva-dev \
|
||||
libvdpau-dev \
|
||||
libvulkan-dev \
|
||||
libx11-dev \
|
||||
libx11-xcb-dev \
|
||||
libxdamage-dev \
|
||||
libxext-dev \
|
||||
libxrandr-dev \
|
||||
libxrender-dev \
|
||||
libxshmfence-dev \
|
||||
libxvmc-dev \
|
||||
libxxf86vm-dev \
|
||||
llvm-6.0-dev \
|
||||
llvm-7-dev \
|
||||
llvm-8-dev \
|
||||
llvm-9-dev \
|
||||
meson \
|
||||
pkg-config \
|
||||
python-mako \
|
||||
python3-mako \
|
||||
scons \
|
||||
x11proto-dri2-dev \
|
||||
x11proto-gl-dev \
|
||||
x11proto-randr-dev \
|
||||
xz-utils \
|
||||
zlib1g-dev
|
||||
|
||||
# Cross-build Mesa deps
|
||||
for arch in $CROSS_ARCHITECTURES; do
|
||||
apt-get install -y --no-remove \
|
||||
crossbuild-essential-${arch} \
|
||||
libdrm-dev:${arch} \
|
||||
libelf-dev:${arch} \
|
||||
libexpat1-dev:${arch}
|
||||
done
|
||||
|
||||
# for 64bit windows cross-builds
|
||||
apt-get install -y --no-remove \
|
||||
libz-mingw-w64-dev \
|
||||
mingw-w64 \
|
||||
wine \
|
||||
wine32 \
|
||||
wine64
|
||||
|
||||
# Debian's pkg-config wrapers for mingw are broken, and there's no sign that
|
||||
# they're going to be fixed, so we'll just have to fix it ourselves
|
||||
# https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=930492
|
||||
cat >/usr/local/bin/x86_64-w64-mingw32-pkg-config <<EOF
|
||||
#!/bin/sh
|
||||
|
||||
PKG_CONFIG_LIBDIR=/usr/x86_64-w64-mingw32/lib/pkgconfig pkg-config \$@
|
||||
EOF
|
||||
chmod +x /usr/local/bin/x86_64-w64-mingw32-pkg-config
|
||||
|
||||
# for the vulkan overlay layer
|
||||
wget https://github.com/KhronosGroup/glslang/releases/download/master-tot/glslang-master-linux-Release.zip
|
||||
unzip glslang-master-linux-Release.zip bin/glslangValidator
|
||||
install -m755 bin/glslangValidator /usr/local/bin/
|
||||
rm bin/glslangValidator glslang-master-linux-Release.zip
|
||||
|
||||
|
||||
# dependencies where we want a specific version
|
||||
export XORG_RELEASES=https://xorg.freedesktop.org/releases/individual
|
||||
export XCB_RELEASES=https://xcb.freedesktop.org/dist
|
||||
export WAYLAND_RELEASES=https://wayland.freedesktop.org/releases
|
||||
|
||||
export XORGMACROS_VERSION=util-macros-1.19.0
|
||||
export LIBDRM_VERSION=libdrm-2.4.100
|
||||
export XCBPROTO_VERSION=xcb-proto-1.13
|
||||
export LIBXCB_VERSION=libxcb-1.13
|
||||
export LIBWAYLAND_VERSION=wayland-1.15.0
|
||||
export WAYLAND_PROTOCOLS_VERSION=wayland-protocols-1.12
|
||||
|
||||
wget $XORG_RELEASES/util/$XORGMACROS_VERSION.tar.bz2
|
||||
tar -xvf $XORGMACROS_VERSION.tar.bz2 && rm $XORGMACROS_VERSION.tar.bz2
|
||||
cd $XORGMACROS_VERSION; ./configure; make install; cd ..
|
||||
rm -rf $XORGMACROS_VERSION
|
||||
|
||||
wget $XCB_RELEASES/$XCBPROTO_VERSION.tar.bz2
|
||||
tar -xvf $XCBPROTO_VERSION.tar.bz2 && rm $XCBPROTO_VERSION.tar.bz2
|
||||
cd $XCBPROTO_VERSION; ./configure; make install; cd ..
|
||||
rm -rf $XCBPROTO_VERSION
|
||||
|
||||
wget $XCB_RELEASES/$LIBXCB_VERSION.tar.bz2
|
||||
tar -xvf $LIBXCB_VERSION.tar.bz2 && rm $LIBXCB_VERSION.tar.bz2
|
||||
cd $LIBXCB_VERSION; ./configure; make install; cd ..
|
||||
rm -rf $LIBXCB_VERSION
|
||||
|
||||
wget https://dri.freedesktop.org/libdrm/$LIBDRM_VERSION.tar.bz2
|
||||
tar -xvf $LIBDRM_VERSION.tar.bz2 && rm $LIBDRM_VERSION.tar.bz2
|
||||
cd $LIBDRM_VERSION; meson build -D vc4=true -D freedreno=true -D etnaviv=true; ninja -j4 -C build install; cd ..
|
||||
rm -rf $LIBDRM_VERSION
|
||||
|
||||
wget $WAYLAND_RELEASES/$LIBWAYLAND_VERSION.tar.xz
|
||||
tar -xvf $LIBWAYLAND_VERSION.tar.xz && rm $LIBWAYLAND_VERSION.tar.xz
|
||||
cd $LIBWAYLAND_VERSION; ./configure --enable-libraries --without-host-scanner --disable-documentation --disable-dtd-validation; make install; cd ..
|
||||
rm -rf $LIBWAYLAND_VERSION
|
||||
|
||||
wget $WAYLAND_RELEASES/$WAYLAND_PROTOCOLS_VERSION.tar.xz
|
||||
tar -xvf $WAYLAND_PROTOCOLS_VERSION.tar.xz && rm $WAYLAND_PROTOCOLS_VERSION.tar.xz
|
||||
cd $WAYLAND_PROTOCOLS_VERSION; ./configure; make install; cd ..
|
||||
rm -rf $WAYLAND_PROTOCOLS_VERSION
|
||||
|
||||
|
||||
# The version of libglvnd-dev in debian is too old
|
||||
# Check this page to see when this local compilation can be dropped in favour of the package:
|
||||
# https://packages.debian.org/libglvnd-dev
|
||||
GLVND_VERSION=1.2.0
|
||||
wget https://gitlab.freedesktop.org/glvnd/libglvnd/-/archive/v$GLVND_VERSION/libglvnd-v$GLVND_VERSION.tar.gz
|
||||
tar -xvf libglvnd-v$GLVND_VERSION.tar.gz && rm libglvnd-v$GLVND_VERSION.tar.gz
|
||||
pushd libglvnd-v$GLVND_VERSION; ./autogen.sh; ./configure; make install; popd
|
||||
rm -rf libglvnd-v$GLVND_VERSION
|
||||
|
||||
|
||||
pushd /usr/local
|
||||
git clone https://gitlab.freedesktop.org/mesa/shader-db.git --depth 1
|
||||
rm -rf shader-db/.git
|
||||
cd shader-db
|
||||
make
|
||||
popd
|
||||
|
||||
# Use ccache to speed up builds
|
||||
apt-get install -y --no-remove ccache
|
||||
|
||||
# We need xmllint to validate the XML files in Mesa
|
||||
apt-get install -y --no-remove libxml2-utils
|
||||
|
||||
|
||||
# Generate cross build files for Meson
|
||||
for arch in $CROSS_ARCHITECTURES; do
|
||||
cross_file="/cross_file-$arch.txt"
|
||||
/usr/share/meson/debcrossgen --arch "$arch" -o "$cross_file"
|
||||
# Explicitly set ccache path for cross compilers
|
||||
sed -i "s|/usr/bin/\([^-]*\)-linux-gnu\([^-]*\)-g|/usr/lib/ccache/\\1-linux-gnu\\2-g|g" "$cross_file"
|
||||
if [ "$arch" = "i386" ]; then
|
||||
# Work around a bug in debcrossgen that should be fixed in the next release
|
||||
sed -i "s|cpu_family = 'i686'|cpu_family = 'x86'|g" "$cross_file"
|
||||
# Don't need wrapper for i386 executables
|
||||
sed -i -e '/\[properties\]/a\' -e "needs_exe_wrapper = False" "$cross_file"
|
||||
fi
|
||||
done
|
||||
|
||||
|
||||
############### Uninstall the build software
|
||||
|
||||
apt-get purge -y \
|
||||
autoconf \
|
||||
automake \
|
||||
autotools-dev \
|
||||
cmake \
|
||||
git \
|
||||
gnupg \
|
||||
libgbm-dev \
|
||||
libtool \
|
||||
unzip \
|
||||
wget
|
||||
|
||||
apt-get autoremove -y --purge
|
@@ -1,59 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
set -e
|
||||
set -o xtrace
|
||||
|
||||
export DEBIAN_FRONTEND=noninteractive
|
||||
|
||||
apt-get install -y \
|
||||
apt-transport-https \
|
||||
ca-certificates
|
||||
|
||||
sed -i -e 's/http:\/\/deb/https:\/\/deb/g' /etc/apt/sources.list
|
||||
echo 'deb https://deb.debian.org/debian stretch-backports main' >/etc/apt/sources.list.d/backports.list
|
||||
|
||||
apt-get update
|
||||
|
||||
# Use newer packages from backports by default
|
||||
cat >/etc/apt/preferences <<EOF
|
||||
Package: *
|
||||
Pin: release a=stretch-backports
|
||||
Pin-Priority: 500
|
||||
EOF
|
||||
|
||||
apt-get dist-upgrade -y
|
||||
|
||||
apt-get install -y --no-remove \
|
||||
llvm-3.9-dev \
|
||||
libclang-3.9-dev \
|
||||
llvm-4.0-dev \
|
||||
libclang-4.0-dev \
|
||||
llvm-5.0-dev \
|
||||
libclang-5.0-dev \
|
||||
g++ \
|
||||
bzip2 \
|
||||
ccache \
|
||||
zlib1g-dev \
|
||||
pkg-config \
|
||||
gcc \
|
||||
git \
|
||||
libepoxy-dev \
|
||||
libclc-dev \
|
||||
xz-utils \
|
||||
libdrm-dev \
|
||||
libexpat1-dev \
|
||||
libelf-dev \
|
||||
libunwind-dev \
|
||||
libpng-dev \
|
||||
python-mako \
|
||||
python3-mako \
|
||||
bison \
|
||||
flex \
|
||||
gettext \
|
||||
scons \
|
||||
meson
|
||||
|
||||
|
||||
############### Uninstall unused packages
|
||||
|
||||
apt-get autoremove -y --purge
|
@@ -1,96 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
set -e
|
||||
set -o xtrace
|
||||
|
||||
export DEBIAN_FRONTEND=noninteractive
|
||||
|
||||
apt-get install -y \
|
||||
ca-certificates \
|
||||
gnupg \
|
||||
|
||||
# Upstream LLVM package repository
|
||||
apt-key add .gitlab-ci/container/llvm-snapshot.gpg.key
|
||||
echo "deb https://apt.llvm.org/buster/ llvm-toolchain-buster-9 main" >/etc/apt/sources.list.d/llvm9.list
|
||||
|
||||
sed -i -e 's/http:\/\/deb/https:\/\/deb/g' /etc/apt/sources.list
|
||||
echo 'deb https://deb.debian.org/debian buster-backports main' >/etc/apt/sources.list.d/backports.list
|
||||
|
||||
apt-get update
|
||||
|
||||
# Use newer packages from backports by default
|
||||
cat >/etc/apt/preferences <<EOF
|
||||
Package: *
|
||||
Pin: release a=buster-backports
|
||||
Pin-Priority: 500
|
||||
EOF
|
||||
|
||||
apt-get dist-upgrade -y
|
||||
|
||||
apt-get install -y --no-remove \
|
||||
cmake \
|
||||
g++ \
|
||||
git \
|
||||
gcc \
|
||||
libexpat1 \
|
||||
libgbm-dev \
|
||||
libgles2-mesa-dev \
|
||||
libpng16-16 \
|
||||
libpng-dev \
|
||||
libvulkan1 \
|
||||
libvulkan-dev \
|
||||
libwaffle-dev \
|
||||
libwayland-server0 \
|
||||
libxcb-xfixes0 \
|
||||
libxkbcommon0 \
|
||||
libxkbcommon-dev \
|
||||
libxrender1 \
|
||||
libxrender-dev \
|
||||
libllvm9 \
|
||||
meson \
|
||||
patch \
|
||||
pkg-config \
|
||||
python3-mako \
|
||||
python3-numpy \
|
||||
python3-six \
|
||||
python \
|
||||
waffle-utils \
|
||||
xauth \
|
||||
xvfb \
|
||||
zlib1g
|
||||
|
||||
|
||||
############### Build piglit
|
||||
|
||||
. .gitlab-ci/build-piglit.sh
|
||||
|
||||
############### Build dEQP runner
|
||||
|
||||
. .gitlab-ci/build-cts-runner.sh
|
||||
|
||||
############### Build dEQP GL
|
||||
|
||||
. .gitlab-ci/build-deqp-gl.sh
|
||||
|
||||
|
||||
############### Uninstall the build software
|
||||
|
||||
apt-get purge -y \
|
||||
cmake \
|
||||
g++ \
|
||||
gcc \
|
||||
git \
|
||||
gnupg \
|
||||
libc6-dev \
|
||||
libgbm-dev \
|
||||
libgles2-mesa-dev \
|
||||
libpng-dev \
|
||||
libwaffle-dev \
|
||||
libxkbcommon-dev \
|
||||
libxrender-dev \
|
||||
meson \
|
||||
patch \
|
||||
pkg-config \
|
||||
python
|
||||
|
||||
apt-get autoremove -y --purge
|
@@ -1,87 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
set -e
|
||||
set -o xtrace
|
||||
|
||||
export DEBIAN_FRONTEND=noninteractive
|
||||
|
||||
apt-get install -y \
|
||||
ca-certificates \
|
||||
gnupg \
|
||||
|
||||
# Upstream LLVM package repository
|
||||
apt-key add .gitlab-ci/container/llvm-snapshot.gpg.key
|
||||
echo "deb https://apt.llvm.org/buster/ llvm-toolchain-buster-9 main" >/etc/apt/sources.list.d/llvm9.list
|
||||
|
||||
sed -i -e 's/http:\/\/deb/https:\/\/deb/g' /etc/apt/sources.list
|
||||
echo 'deb https://deb.debian.org/debian buster-backports main' >/etc/apt/sources.list.d/backports.list
|
||||
|
||||
apt-get update
|
||||
|
||||
# Use newer packages from backports by default
|
||||
cat >/etc/apt/preferences <<EOF
|
||||
Package: *
|
||||
Pin: release a=buster-backports
|
||||
Pin-Priority: 500
|
||||
EOF
|
||||
|
||||
apt-get dist-upgrade -y
|
||||
|
||||
apt-get install -y --no-remove \
|
||||
cmake \
|
||||
g++ \
|
||||
git \
|
||||
gcc \
|
||||
libexpat1 \
|
||||
libgbm-dev \
|
||||
libgles2-mesa-dev \
|
||||
libpng16-16 \
|
||||
libpng-dev \
|
||||
libvulkan1 \
|
||||
libvulkan-dev \
|
||||
libwayland-server0 \
|
||||
libxcb-randr0 \
|
||||
libxcb-xfixes0 \
|
||||
libxkbcommon0 \
|
||||
libxkbcommon-dev \
|
||||
libxrender1 \
|
||||
libxrender-dev \
|
||||
libllvm9 \
|
||||
meson \
|
||||
patch \
|
||||
pkg-config \
|
||||
python3-distutils \
|
||||
python \
|
||||
xauth \
|
||||
xvfb
|
||||
|
||||
|
||||
############### Build dEQP runner
|
||||
|
||||
. .gitlab-ci/build-cts-runner.sh
|
||||
|
||||
############### Build dEQP VK
|
||||
|
||||
. .gitlab-ci/build-deqp-vk.sh
|
||||
|
||||
|
||||
############### Uninstall the build software
|
||||
|
||||
apt-get purge -y \
|
||||
cmake \
|
||||
g++ \
|
||||
gcc \
|
||||
git \
|
||||
gnupg \
|
||||
libgbm-dev \
|
||||
libgles2-mesa-dev \
|
||||
libpng-dev \
|
||||
libvulkan-dev \
|
||||
libxkbcommon-dev \
|
||||
libxrender-dev \
|
||||
meson \
|
||||
patch \
|
||||
pkg-config \
|
||||
python
|
||||
|
||||
apt-get autoremove -y --purge
|
@@ -1,195 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
set -ex
|
||||
|
||||
LLVM=libllvm8
|
||||
|
||||
# LLVMPipe on armhf is broken with LLVM 8
|
||||
if [ `dpkg --print-architecture` = "armhf" ]; then
|
||||
LLVM=libllvm7
|
||||
fi
|
||||
|
||||
apt-get -y install --no-install-recommends \
|
||||
initramfs-tools \
|
||||
libpng16-16 \
|
||||
strace \
|
||||
libsensors5 \
|
||||
libexpat1 \
|
||||
libdrm2 \
|
||||
libdrm-nouveau2 \
|
||||
$LLVM
|
||||
passwd root -d
|
||||
chsh -s /bin/sh
|
||||
ln -s /bin/sh /init
|
||||
|
||||
#######################################################################
|
||||
# Strip the image to a small minimal system without removing the debian
|
||||
# toolchain.
|
||||
|
||||
# Copy timezone file and remove tzdata package
|
||||
rm -rf /etc/localtime
|
||||
cp /usr/share/zoneinfo/Etc/UTC /etc/localtime
|
||||
|
||||
UNNEEDED_PACKAGES="libfdisk1
|
||||
tzdata
|
||||
diffutils"
|
||||
|
||||
export DEBIAN_FRONTEND=noninteractive
|
||||
|
||||
# Removing unused packages
|
||||
for PACKAGE in ${UNNEEDED_PACKAGES}
|
||||
do
|
||||
echo ${PACKAGE}
|
||||
if ! apt-get remove --purge --yes "${PACKAGE}"
|
||||
then
|
||||
echo "WARNING: ${PACKAGE} isn't installed"
|
||||
fi
|
||||
done
|
||||
|
||||
apt-get autoremove --yes || true
|
||||
|
||||
# Dropping logs
|
||||
rm -rf /var/log/*
|
||||
|
||||
# Dropping documentation, localization, i18n files, etc
|
||||
rm -rf /usr/share/doc/*
|
||||
rm -rf /usr/share/locale/*
|
||||
rm -rf /usr/share/man
|
||||
rm -rf /usr/share/i18n/*
|
||||
rm -rf /usr/share/info/*
|
||||
rm -rf /usr/share/lintian/*
|
||||
rm -rf /usr/share/common-licenses/*
|
||||
rm -rf /usr/share/mime/*
|
||||
|
||||
# Dropping reportbug scripts
|
||||
rm -rf /usr/share/bug
|
||||
|
||||
# Drop udev hwdb not required on a stripped system
|
||||
rm -rf /lib/udev/hwdb.bin /lib/udev/hwdb.d/*
|
||||
|
||||
# Drop all gconv conversions && binaries
|
||||
rm -rf usr/bin/iconv
|
||||
rm -rf usr/sbin/iconvconfig
|
||||
rm -rf usr/lib/*/gconv/
|
||||
|
||||
# Remove libusb database
|
||||
rm -rf usr/sbin/update-usbids
|
||||
rm -rf var/lib/usbutils/usb.ids
|
||||
rm -rf usr/share/misc/usb.ids
|
||||
|
||||
#######################################################################
|
||||
# Crush into a minimal production image to be deployed via some type of image
|
||||
# updating system.
|
||||
# IMPORTANT: The Debian system is not longer functional at this point,
|
||||
# for example, apt and dpkg will stop working
|
||||
|
||||
UNNEEDED_PACKAGES="apt libapt-pkg5.0 "\
|
||||
"ncurses-bin ncurses-base libncursesw5 libncurses5 "\
|
||||
"perl-base "\
|
||||
"debconf libdebconfclient0 "\
|
||||
"e2fsprogs e2fslibs libfdisk1 "\
|
||||
"insserv "\
|
||||
"udev "\
|
||||
"init-system-helpers "\
|
||||
"bash "\
|
||||
"cpio "\
|
||||
"passwd "\
|
||||
"libsemanage1 libsemanage-common "\
|
||||
"libsepol1 "\
|
||||
"gzip "\
|
||||
"gpgv "\
|
||||
"hostname "\
|
||||
"adduser "\
|
||||
"debian-archive-keyring "\
|
||||
|
||||
# Removing unneeded packages
|
||||
for PACKAGE in ${UNNEEDED_PACKAGES}
|
||||
do
|
||||
echo "Forcing removal of ${PACKAGE}"
|
||||
if ! dpkg --purge --force-remove-essential --force-depends "${PACKAGE}"
|
||||
then
|
||||
echo "WARNING: ${PACKAGE} isn't installed"
|
||||
fi
|
||||
done
|
||||
|
||||
# Show what's left package-wise before dropping dpkg itself
|
||||
COLUMNS=300 dpkg-query -W --showformat='${Installed-Size;10}\t${Package}\n' | sort -k1,1n
|
||||
|
||||
# Drop dpkg
|
||||
dpkg --purge --force-remove-essential --force-depends dpkg
|
||||
|
||||
# No apt or dpkg, no need for its configuration archives
|
||||
rm -rf etc/apt
|
||||
rm -rf etc/dpkg
|
||||
|
||||
# Drop directories not part of ostree
|
||||
# Note that /var needs to exist as ostree bind mounts the deployment /var over
|
||||
# it
|
||||
rm -rf var/* opt srv share
|
||||
|
||||
# ca-certificates are in /etc drop the source
|
||||
rm -rf usr/share/ca-certificates
|
||||
|
||||
# No bash, no need for completions
|
||||
rm -rf usr/share/bash-completion
|
||||
|
||||
# No zsh, no need for comletions
|
||||
rm -rf usr/share/zsh/vendor-completions
|
||||
|
||||
# drop gcc-6 python helpers
|
||||
rm -rf usr/share/gcc-6
|
||||
|
||||
# Drop sysvinit leftovers
|
||||
rm -rf etc/init.d
|
||||
rm -rf etc/rc[0-6S].d
|
||||
|
||||
# Drop upstart helpers
|
||||
rm -rf etc/init
|
||||
|
||||
# Various xtables helpers
|
||||
rm -rf usr/lib/xtables
|
||||
|
||||
# Drop all locales
|
||||
# TODO: only remaining locale is actually "C". Should we really remove it?
|
||||
rm -rf usr/lib/locale/*
|
||||
|
||||
# partition helpers
|
||||
rm usr/sbin/*fdisk
|
||||
|
||||
# local compiler
|
||||
rm usr/bin/localedef
|
||||
|
||||
# Systemd dns resolver
|
||||
find usr etc -name '*systemd-resolve*' -prune -exec rm -r {} \;
|
||||
|
||||
# Systemd network configuration
|
||||
find usr etc -name '*networkd*' -prune -exec rm -r {} \;
|
||||
|
||||
# systemd ntp client
|
||||
find usr etc -name '*timesyncd*' -prune -exec rm -r {} \;
|
||||
|
||||
# systemd hw database manager
|
||||
find usr etc -name '*systemd-hwdb*' -prune -exec rm -r {} \;
|
||||
|
||||
# No need for fuse
|
||||
find usr etc -name '*fuse*' -prune -exec rm -r {} \;
|
||||
|
||||
# lsb init function leftovers
|
||||
rm -rf usr/lib/lsb
|
||||
|
||||
# Only needed when adding libraries
|
||||
rm usr/sbin/ldconfig*
|
||||
|
||||
# Games, unused
|
||||
rmdir usr/games
|
||||
|
||||
# Remove pam module to authenticate against a DB
|
||||
# plus libdb-5.3.so that is only used by this pam module
|
||||
rm usr/lib/*/security/pam_userdb.so
|
||||
rm usr/lib/*/libdb-5.3.so
|
||||
|
||||
# remove NSS support for nis, nisplus and hesiod
|
||||
rm usr/lib/*/libnss_hesiod*
|
||||
rm usr/lib/*/libnss_nis*
|
||||
|
||||
rm bin/tar
|
@@ -1 +0,0 @@
|
||||
u_format_test
|
@@ -1,10 +0,0 @@
|
||||
# Note: skips lists for CI are just a list of lines that, when
|
||||
# non-zero-length and not starting with '#', will regex match to
|
||||
# delete lines from the test list. Be careful.
|
||||
|
||||
# Skip the perf/stress tests to keep runtime manageable
|
||||
dEQP-GLES[0-9]*.performance.*
|
||||
dEQP-GLES[0-9]*.stress.*
|
||||
|
||||
# These are really slow on tiling architectures (including llvmpipe).
|
||||
dEQP-GLES[0-9]*.functional.flush_finish.*
|
@@ -1,33 +0,0 @@
|
||||
dEQP-GLES2.functional.clipping.line.wide_line_clip_viewport_center
|
||||
dEQP-GLES2.functional.clipping.line.wide_line_clip_viewport_corner
|
||||
dEQP-GLES2.functional.clipping.point.wide_point_clip
|
||||
dEQP-GLES2.functional.clipping.point.wide_point_clip_viewport_center
|
||||
dEQP-GLES2.functional.clipping.point.wide_point_clip_viewport_corner
|
||||
dEQP-GLES2.functional.clipping.triangle_vertex.clip_three.clip_neg_x_neg_z_and_pos_x_pos_z_and_neg_x_neg_y_pos_z
|
||||
dEQP-GLES2.functional.fbo.render.recreate_depthbuffer.rebind_rbo_rgb565_depth_component16
|
||||
dEQP-GLES2.functional.fbo.render.recreate_depthbuffer.rebind_rbo_rgb5_a1_depth_component16
|
||||
dEQP-GLES2.functional.fbo.render.recreate_depthbuffer.rebind_rbo_rgba4_depth_component16
|
||||
dEQP-GLES2.functional.fbo.render.recreate_depthbuffer.rebind_tex2d_rgba_depth_component16
|
||||
dEQP-GLES2.functional.fbo.render.recreate_depthbuffer.rebind_tex2d_rgb_depth_component16
|
||||
dEQP-GLES2.functional.fbo.render.recreate_stencilbuffer.rebind_rbo_rgb565_stencil_index8
|
||||
dEQP-GLES2.functional.fbo.render.recreate_stencilbuffer.rebind_rbo_rgb5_a1_stencil_index8
|
||||
dEQP-GLES2.functional.fbo.render.recreate_stencilbuffer.rebind_rbo_rgba4_stencil_index8
|
||||
dEQP-GLES2.functional.fbo.render.recreate_stencilbuffer.rebind_tex2d_rgba_stencil_index8
|
||||
dEQP-GLES2.functional.fbo.render.recreate_stencilbuffer.rebind_tex2d_rgb_stencil_index8
|
||||
dEQP-GLES2.functional.polygon_offset.fixed16_displacement_with_units
|
||||
dEQP-GLES2.functional.texture.filtering.2d.linear_nearest_clamp_l8_npot
|
||||
dEQP-GLES2.functional.texture.filtering.2d.linear_nearest_clamp_rgb888_npot
|
||||
dEQP-GLES2.functional.texture.filtering.2d.linear_nearest_clamp_rgba4444_npot
|
||||
dEQP-GLES2.functional.texture.filtering.2d.linear_nearest_clamp_rgba8888_npot
|
||||
dEQP-GLES2.functional.texture.filtering.2d.nearest_linear_clamp_l8_npot
|
||||
dEQP-GLES2.functional.texture.filtering.2d.nearest_linear_clamp_rgb888_npot
|
||||
dEQP-GLES2.functional.texture.filtering.2d.nearest_linear_clamp_rgba4444_npot
|
||||
dEQP-GLES2.functional.texture.filtering.2d.nearest_linear_clamp_rgba8888_npot
|
||||
dEQP-GLES2.functional.texture.filtering.cube.linear_nearest_clamp_l8_npot
|
||||
dEQP-GLES2.functional.texture.filtering.cube.linear_nearest_clamp_rgb888_npot
|
||||
dEQP-GLES2.functional.texture.filtering.cube.linear_nearest_clamp_rgba4444_npot
|
||||
dEQP-GLES2.functional.texture.filtering.cube.linear_nearest_clamp_rgba8888_npot
|
||||
dEQP-GLES2.functional.texture.filtering.cube.nearest_linear_clamp_l8_npot
|
||||
dEQP-GLES2.functional.texture.filtering.cube.nearest_linear_clamp_rgb888_npot
|
||||
dEQP-GLES2.functional.texture.filtering.cube.nearest_linear_clamp_rgba4444_npot
|
||||
dEQP-GLES2.functional.texture.filtering.cube.nearest_linear_clamp_rgba8888_npot
|
@@ -1,3 +0,0 @@
|
||||
dEQP-GLES2.functional.clipping.triangle_vertex.clip_three.clip_neg_x_neg_z_and_pos_x_pos_z_and_neg_x_neg_y_pos_z
|
||||
dEQP-GLES31.functional.stencil_texturing.render.depth24_stencil8_clear
|
||||
dEQP-GLES31.functional.stencil_texturing.render.depth24_stencil8_draw
|
@@ -1,21 +0,0 @@
|
||||
# Note: skips lists for CI are just a list of lines that, when
|
||||
# non-zero-length and not starting with '#', will regex match to
|
||||
# delete lines from the test list. Be careful.
|
||||
|
||||
# Skip the perf/stress tests to keep runtime manageable
|
||||
dEQP-GLES[0-9]*.performance.*
|
||||
dEQP-GLES[0-9]*.stress.*
|
||||
|
||||
# These are really slow on tiling architectures (including llvmpipe).
|
||||
dEQP-GLES[0-9]*.functional.flush_finish.*
|
||||
|
||||
# Unstable test results
|
||||
#dEQP-GLES3.functional.fragment_out.random.*
|
||||
dEQP-GLES3.functional.transform_feedback.*points.*
|
||||
dEQP-GLES3.functional.transform_feedback.*lines.*
|
||||
dEQP-GLES31.functional.primitive_bounding_box.*
|
||||
#dEQP-GLES31.functional.layout_binding.ssbo.fragment_binding_array.*
|
||||
|
||||
# Intermittent timeout
|
||||
dEQP-GLES31.functional.ssbo.layout.random.all_shared_buffer.23
|
||||
|
@@ -1,203 +0,0 @@
|
||||
dEQP-GLES2.functional.clipping.line.wide_line_clip_viewport_center
|
||||
dEQP-GLES2.functional.clipping.line.wide_line_clip_viewport_corner
|
||||
dEQP-GLES2.functional.clipping.triangle_vertex.clip_two.clip_neg_x_neg_y_pos_z_and_pos_x_pos_y_neg_z
|
||||
dEQP-GLES2.functional.clipping.triangle_vertex.clip_two.clip_neg_x_pos_y_pos_z_and_pos_x_neg_y_neg_z
|
||||
dEQP-GLES2.functional.clipping.triangle_vertex.clip_two.clip_pos_x_neg_y_pos_z_and_neg_x_pos_y_neg_z
|
||||
dEQP-GLES2.functional.clipping.triangle_vertex.clip_two.clip_pos_x_pos_y_pos_z_and_neg_x_neg_y_neg_z
|
||||
dEQP-GLES2.functional.depth_stencil_clear.depth_stencil_masked
|
||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.no_rebind_rbo_rgb565_depth_component16
|
||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.no_rebind_rbo_rgb565_stencil_index8
|
||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.no_rebind_rbo_rgb5_a1_depth_component16
|
||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.no_rebind_rbo_rgb5_a1_stencil_index8
|
||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.no_rebind_rbo_rgba4_depth_component16
|
||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.no_rebind_rbo_rgba4_stencil_index8
|
||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.no_rebind_tex2d_rgba_depth_component16
|
||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.no_rebind_tex2d_rgba_stencil_index8
|
||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.no_rebind_tex2d_rgb_depth_component16
|
||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.no_rebind_tex2d_rgb_stencil_index8
|
||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.rebind_rbo_rgb565_depth_component16
|
||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.rebind_rbo_rgb565_stencil_index8
|
||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.rebind_rbo_rgb5_a1_depth_component16
|
||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.rebind_rbo_rgb5_a1_stencil_index8
|
||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.rebind_rbo_rgba4_depth_component16
|
||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.rebind_rbo_rgba4_stencil_index8
|
||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.rebind_tex2d_rgba_depth_component16
|
||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.rebind_tex2d_rgba_stencil_index8
|
||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.rebind_tex2d_rgb_depth_component16
|
||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.rebind_tex2d_rgb_stencil_index8
|
||||
dEQP-GLES2.functional.fbo.render.shared_colorbuffer.rbo_rgb565_stencil_index8
|
||||
dEQP-GLES2.functional.fbo.render.shared_colorbuffer.rbo_rgb5_a1_stencil_index8
|
||||
dEQP-GLES2.functional.fbo.render.shared_colorbuffer.rbo_rgba4_stencil_index8
|
||||
dEQP-GLES2.functional.fbo.render.shared_colorbuffer.tex2d_rgba_stencil_index8
|
||||
dEQP-GLES2.functional.fbo.render.shared_colorbuffer.tex2d_rgb_stencil_index8
|
||||
dEQP-GLES2.functional.fbo.render.shared_depthbuffer.rbo_rgb565_depth_component16
|
||||
dEQP-GLES2.functional.fbo.render.shared_depthbuffer.rbo_rgb5_a1_depth_component16
|
||||
dEQP-GLES2.functional.fbo.render.shared_depthbuffer.rbo_rgba4_depth_component16
|
||||
dEQP-GLES2.functional.fbo.render.shared_depthbuffer.tex2d_rgba_depth_component16
|
||||
dEQP-GLES2.functional.fbo.render.shared_depthbuffer.tex2d_rgb_depth_component16
|
||||
dEQP-GLES2.functional.fragment_ops.depth_stencil.random.0
|
||||
dEQP-GLES2.functional.fragment_ops.depth_stencil.random.1
|
||||
dEQP-GLES2.functional.fragment_ops.depth_stencil.random.10
|
||||
dEQP-GLES2.functional.fragment_ops.depth_stencil.random.11
|
||||
dEQP-GLES2.functional.fragment_ops.depth_stencil.random.12
|
||||
dEQP-GLES2.functional.fragment_ops.depth_stencil.random.13
|
||||
dEQP-GLES2.functional.fragment_ops.depth_stencil.random.14
|
||||
dEQP-GLES2.functional.fragment_ops.depth_stencil.random.15
|
||||
dEQP-GLES2.functional.fragment_ops.depth_stencil.random.16
|
||||
dEQP-GLES2.functional.fragment_ops.depth_stencil.random.17
|
||||
dEQP-GLES2.functional.fragment_ops.depth_stencil.random.18
|
||||
dEQP-GLES2.functional.fragment_ops.depth_stencil.random.19
|
||||
dEQP-GLES2.functional.fragment_ops.depth_stencil.random.2
|
||||
dEQP-GLES2.functional.fragment_ops.depth_stencil.random.20
|
||||
dEQP-GLES2.functional.fragment_ops.depth_stencil.random.21
|
||||
dEQP-GLES2.functional.fragment_ops.depth_stencil.random.22
|
||||
dEQP-GLES2.functional.fragment_ops.depth_stencil.random.23
|
||||
dEQP-GLES2.functional.fragment_ops.depth_stencil.random.24
|
||||
dEQP-GLES2.functional.fragment_ops.depth_stencil.random.3
|
||||
dEQP-GLES2.functional.fragment_ops.depth_stencil.random.4
|
||||
dEQP-GLES2.functional.fragment_ops.depth_stencil.random.5
|
||||
dEQP-GLES2.functional.fragment_ops.depth_stencil.random.6
|
||||
dEQP-GLES2.functional.fragment_ops.depth_stencil.random.7
|
||||
dEQP-GLES2.functional.fragment_ops.depth_stencil.random.8
|
||||
dEQP-GLES2.functional.fragment_ops.depth_stencil.random.9
|
||||
dEQP-GLES2.functional.fragment_ops.depth_stencil.write_mask.stencil
|
||||
dEQP-GLES2.functional.shaders.algorithm.hsl_to_rgb_vertex
|
||||
dEQP-GLES2.functional.shaders.functions.array_arguments.global_in_int_vertex
|
||||
dEQP-GLES2.functional.shaders.functions.array_arguments.local_in_int_vertex
|
||||
dEQP-GLES2.functional.shaders.functions.datatypes.int_int_vertex
|
||||
dEQP-GLES2.functional.shaders.functions.overloading.builtin_sin_vertex
|
||||
dEQP-GLES2.functional.shaders.functions.overloading.builtin_step_vertex
|
||||
dEQP-GLES2.functional.shaders.functions.overloading.user_func_arg_int_types_vertex
|
||||
dEQP-GLES2.functional.shaders.functions.qualifiers.inout_highp_int_vertex
|
||||
dEQP-GLES2.functional.shaders.functions.qualifiers.inout_int_vertex
|
||||
dEQP-GLES2.functional.shaders.functions.qualifiers.inout_lowp_int_vertex
|
||||
dEQP-GLES2.functional.shaders.functions.qualifiers.out_highp_int_vertex
|
||||
dEQP-GLES2.functional.shaders.functions.qualifiers.out_int_vertex
|
||||
dEQP-GLES2.functional.shaders.functions.qualifiers.out_lowp_int_vertex
|
||||
dEQP-GLES2.functional.shaders.indexing.matrix_subscript.mat3_dynamic_loop_write_static_loop_read_vertex
|
||||
dEQP-GLES2.functional.shaders.indexing.matrix_subscript.mat3_dynamic_loop_write_static_read_vertex
|
||||
dEQP-GLES2.functional.shaders.indexing.matrix_subscript.mat3_dynamic_write_dynamic_loop_read_vertex
|
||||
dEQP-GLES2.functional.shaders.loops.do_while_constant_iterations.conditional_body_vertex
|
||||
dEQP-GLES2.functional.shaders.loops.do_while_dynamic_iterations.vector_counter_fragment
|
||||
dEQP-GLES2.functional.shaders.loops.do_while_uniform_iterations.conditional_body_vertex
|
||||
dEQP-GLES2.functional.shaders.loops.do_while_uniform_iterations.nested_tricky_dataflow_2_vertex
|
||||
dEQP-GLES2.functional.shaders.loops.for_dynamic_iterations.vector_counter_fragment
|
||||
dEQP-GLES2.functional.shaders.loops.while_constant_iterations.compound_statement_vertex
|
||||
dEQP-GLES2.functional.shaders.loops.while_constant_iterations.sequence_statement_vertex
|
||||
dEQP-GLES2.functional.shaders.loops.while_dynamic_iterations.nested_sequence_vertex
|
||||
dEQP-GLES2.functional.shaders.loops.while_dynamic_iterations.vector_counter_fragment
|
||||
dEQP-GLES2.functional.shaders.loops.while_uniform_iterations.nested_vertex
|
||||
dEQP-GLES2.functional.shaders.operator.binary_operator.sub_assign_effect.highp_int_vertex
|
||||
dEQP-GLES2.functional.shaders.operator.binary_operator.sub_assign_effect.highp_ivec2_int_vertex
|
||||
dEQP-GLES2.functional.shaders.operator.binary_operator.sub_assign_effect.highp_ivec2_vertex
|
||||
dEQP-GLES2.functional.shaders.operator.binary_operator.sub_assign_effect.highp_ivec3_int_vertex
|
||||
dEQP-GLES2.functional.shaders.operator.binary_operator.sub_assign_effect.highp_ivec3_vertex
|
||||
dEQP-GLES2.functional.shaders.operator.binary_operator.sub_assign_effect.highp_ivec4_int_vertex
|
||||
dEQP-GLES2.functional.shaders.operator.binary_operator.sub_assign_effect.highp_ivec4_vertex
|
||||
dEQP-GLES2.functional.shaders.operator.binary_operator.sub_assign_effect.lowp_int_vertex
|
||||
dEQP-GLES2.functional.shaders.operator.binary_operator.sub_assign_effect.lowp_ivec2_int_vertex
|
||||
dEQP-GLES2.functional.shaders.operator.binary_operator.sub_assign_effect.lowp_ivec2_vertex
|
||||
dEQP-GLES2.functional.shaders.operator.binary_operator.sub_assign_effect.lowp_ivec3_int_vertex
|
||||
dEQP-GLES2.functional.shaders.operator.binary_operator.sub_assign_effect.lowp_ivec3_vertex
|
||||
dEQP-GLES2.functional.shaders.operator.binary_operator.sub_assign_effect.lowp_ivec4_int_vertex
|
||||
dEQP-GLES2.functional.shaders.operator.binary_operator.sub_assign_effect.lowp_ivec4_vertex
|
||||
dEQP-GLES2.functional.shaders.operator.binary_operator.sub_assign_effect.mediump_int_vertex
|
||||
dEQP-GLES2.functional.shaders.operator.binary_operator.sub_assign_effect.mediump_ivec2_int_vertex
|
||||
dEQP-GLES2.functional.shaders.operator.binary_operator.sub_assign_effect.mediump_ivec2_vertex
|
||||
dEQP-GLES2.functional.shaders.operator.binary_operator.sub_assign_effect.mediump_ivec3_int_vertex
|
||||
dEQP-GLES2.functional.shaders.operator.binary_operator.sub_assign_effect.mediump_ivec3_vertex
|
||||
dEQP-GLES2.functional.shaders.operator.binary_operator.sub_assign_effect.mediump_ivec4_int_vertex
|
||||
dEQP-GLES2.functional.shaders.operator.binary_operator.sub_assign_effect.mediump_ivec4_vertex
|
||||
dEQP-GLES2.functional.shaders.operator.binary_operator.sub_assign_result.highp_int_vertex
|
||||
dEQP-GLES2.functional.shaders.operator.binary_operator.sub_assign_result.highp_ivec2_int_vertex
|
||||
dEQP-GLES2.functional.shaders.operator.binary_operator.sub_assign_result.highp_ivec2_vertex
|
||||
dEQP-GLES2.functional.shaders.operator.binary_operator.sub_assign_result.highp_ivec3_int_vertex
|
||||
dEQP-GLES2.functional.shaders.operator.binary_operator.sub_assign_result.highp_ivec3_vertex
|
||||
dEQP-GLES2.functional.shaders.operator.binary_operator.sub_assign_result.highp_ivec4_int_vertex
|
||||
dEQP-GLES2.functional.shaders.operator.binary_operator.sub_assign_result.highp_ivec4_vertex
|
||||
dEQP-GLES2.functional.shaders.operator.binary_operator.sub_assign_result.lowp_int_vertex
|
||||
dEQP-GLES2.functional.shaders.operator.binary_operator.sub_assign_result.lowp_ivec2_int_vertex
|
||||
dEQP-GLES2.functional.shaders.operator.binary_operator.sub_assign_result.lowp_ivec2_vertex
|
||||
dEQP-GLES2.functional.shaders.operator.binary_operator.sub_assign_result.lowp_ivec3_int_vertex
|
||||
dEQP-GLES2.functional.shaders.operator.binary_operator.sub_assign_result.lowp_ivec3_vertex
|
||||
dEQP-GLES2.functional.shaders.operator.binary_operator.sub_assign_result.lowp_ivec4_int_vertex
|
||||
dEQP-GLES2.functional.shaders.operator.binary_operator.sub_assign_result.lowp_ivec4_vertex
|
||||
dEQP-GLES2.functional.shaders.operator.binary_operator.sub_assign_result.mediump_int_vertex
|
||||
dEQP-GLES2.functional.shaders.operator.binary_operator.sub_assign_result.mediump_ivec2_int_vertex
|
||||
dEQP-GLES2.functional.shaders.operator.binary_operator.sub_assign_result.mediump_ivec2_vertex
|
||||
dEQP-GLES2.functional.shaders.operator.binary_operator.sub_assign_result.mediump_ivec3_int_vertex
|
||||
dEQP-GLES2.functional.shaders.operator.binary_operator.sub_assign_result.mediump_ivec3_vertex
|
||||
dEQP-GLES2.functional.shaders.operator.binary_operator.sub_assign_result.mediump_ivec4_int_vertex
|
||||
dEQP-GLES2.functional.shaders.operator.binary_operator.sub_assign_result.mediump_ivec4_vertex
|
||||
dEQP-GLES2.functional.shaders.operator.binary_operator.sub.highp_int_ivec2_vertex
|
||||
dEQP-GLES2.functional.shaders.operator.binary_operator.sub.highp_int_ivec3_vertex
|
||||
dEQP-GLES2.functional.shaders.operator.binary_operator.sub.highp_int_ivec4_vertex
|
||||
dEQP-GLES2.functional.shaders.operator.binary_operator.sub.highp_int_vertex
|
||||
dEQP-GLES2.functional.shaders.operator.binary_operator.sub.highp_ivec2_int_vertex
|
||||
dEQP-GLES2.functional.shaders.operator.binary_operator.sub.highp_ivec2_vertex
|
||||
dEQP-GLES2.functional.shaders.operator.binary_operator.sub.highp_ivec3_int_vertex
|
||||
dEQP-GLES2.functional.shaders.operator.binary_operator.sub.highp_ivec3_vertex
|
||||
dEQP-GLES2.functional.shaders.operator.binary_operator.sub.highp_ivec4_int_vertex
|
||||
dEQP-GLES2.functional.shaders.operator.binary_operator.sub.highp_ivec4_vertex
|
||||
dEQP-GLES2.functional.shaders.operator.binary_operator.sub.lowp_int_ivec2_vertex
|
||||
dEQP-GLES2.functional.shaders.operator.binary_operator.sub.lowp_int_ivec3_vertex
|
||||
dEQP-GLES2.functional.shaders.operator.binary_operator.sub.lowp_int_ivec4_vertex
|
||||
dEQP-GLES2.functional.shaders.operator.binary_operator.sub.lowp_int_vertex
|
||||
dEQP-GLES2.functional.shaders.operator.binary_operator.sub.lowp_ivec2_int_vertex
|
||||
dEQP-GLES2.functional.shaders.operator.binary_operator.sub.lowp_ivec2_vertex
|
||||
dEQP-GLES2.functional.shaders.operator.binary_operator.sub.lowp_ivec3_int_vertex
|
||||
dEQP-GLES2.functional.shaders.operator.binary_operator.sub.lowp_ivec3_vertex
|
||||
dEQP-GLES2.functional.shaders.operator.binary_operator.sub.lowp_ivec4_int_vertex
|
||||
dEQP-GLES2.functional.shaders.operator.binary_operator.sub.lowp_ivec4_vertex
|
||||
dEQP-GLES2.functional.shaders.operator.binary_operator.sub.mediump_int_ivec2_vertex
|
||||
dEQP-GLES2.functional.shaders.operator.binary_operator.sub.mediump_int_ivec3_vertex
|
||||
dEQP-GLES2.functional.shaders.operator.binary_operator.sub.mediump_int_ivec4_vertex
|
||||
dEQP-GLES2.functional.shaders.operator.binary_operator.sub.mediump_int_vertex
|
||||
dEQP-GLES2.functional.shaders.operator.binary_operator.sub.mediump_ivec2_int_vertex
|
||||
dEQP-GLES2.functional.shaders.operator.binary_operator.sub.mediump_ivec2_vertex
|
||||
dEQP-GLES2.functional.shaders.operator.binary_operator.sub.mediump_ivec3_int_vertex
|
||||
dEQP-GLES2.functional.shaders.operator.binary_operator.sub.mediump_ivec3_vertex
|
||||
dEQP-GLES2.functional.shaders.operator.binary_operator.sub.mediump_ivec4_int_vertex
|
||||
dEQP-GLES2.functional.shaders.operator.binary_operator.sub.mediump_ivec4_vertex
|
||||
dEQP-GLES2.functional.shaders.operator.unary_operator.minus.highp_int_vertex
|
||||
dEQP-GLES2.functional.shaders.operator.unary_operator.minus.highp_ivec2_vertex
|
||||
dEQP-GLES2.functional.shaders.operator.unary_operator.minus.highp_ivec3_vertex
|
||||
dEQP-GLES2.functional.shaders.operator.unary_operator.minus.highp_ivec4_vertex
|
||||
dEQP-GLES2.functional.shaders.operator.unary_operator.minus.lowp_int_vertex
|
||||
dEQP-GLES2.functional.shaders.operator.unary_operator.minus.lowp_ivec2_vertex
|
||||
dEQP-GLES2.functional.shaders.operator.unary_operator.minus.lowp_ivec3_vertex
|
||||
dEQP-GLES2.functional.shaders.operator.unary_operator.minus.lowp_ivec4_vertex
|
||||
dEQP-GLES2.functional.shaders.operator.unary_operator.minus.mediump_int_vertex
|
||||
dEQP-GLES2.functional.shaders.operator.unary_operator.minus.mediump_ivec2_vertex
|
||||
dEQP-GLES2.functional.shaders.operator.unary_operator.minus.mediump_ivec3_vertex
|
||||
dEQP-GLES2.functional.shaders.operator.unary_operator.minus.mediump_ivec4_vertex
|
||||
dEQP-GLES2.functional.shaders.random.all_features.fragment.37
|
||||
dEQP-GLES2.functional.shaders.random.exponential.fragment.11
|
||||
dEQP-GLES2.functional.shaders.random.exponential.fragment.12
|
||||
dEQP-GLES2.functional.shaders.random.exponential.fragment.14
|
||||
dEQP-GLES2.functional.shaders.random.exponential.fragment.37
|
||||
dEQP-GLES2.functional.shaders.random.exponential.fragment.5
|
||||
dEQP-GLES2.functional.shaders.random.exponential.fragment.74
|
||||
dEQP-GLES2.functional.shaders.random.texture.fragment.28
|
||||
dEQP-GLES2.functional.shaders.random.trigonometric.fragment.65
|
||||
dEQP-GLES2.functional.shaders.texture_functions.fragment.texture2d_bias
|
||||
dEQP-GLES2.functional.shaders.texture_functions.fragment.texture2dproj_vec4_bias
|
||||
dEQP-GLES2.functional.shaders.texture_functions.fragment.texturecube_bias
|
||||
dEQP-GLES2.functional.texture.filtering.2d.linear_mipmap_linear_linear_clamp_etc1
|
||||
dEQP-GLES2.functional.texture.filtering.2d.linear_mipmap_linear_linear_clamp_rgba8888
|
||||
dEQP-GLES2.functional.texture.filtering.2d.linear_mipmap_linear_linear_mirror_etc1
|
||||
dEQP-GLES2.functional.texture.filtering.2d.linear_mipmap_linear_linear_mirror_rgba8888
|
||||
dEQP-GLES2.functional.texture.filtering.2d.linear_mipmap_linear_nearest_clamp_etc1
|
||||
dEQP-GLES2.functional.texture.filtering.2d.linear_mipmap_linear_nearest_clamp_rgba8888
|
||||
dEQP-GLES2.functional.texture.filtering.2d.linear_mipmap_linear_nearest_mirror_etc1
|
||||
dEQP-GLES2.functional.texture.filtering.2d.linear_mipmap_linear_nearest_mirror_rgba8888
|
||||
dEQP-GLES2.functional.texture.mipmap.cube.basic.linear_linear
|
||||
dEQP-GLES2.functional.texture.mipmap.cube.basic.linear_nearest
|
||||
dEQP-GLES2.functional.texture.mipmap.cube.bias.linear_linear
|
||||
dEQP-GLES2.functional.texture.mipmap.cube.bias.linear_nearest
|
||||
dEQP-GLES2.functional.texture.mipmap.cube.projected.linear_linear
|
||||
dEQP-GLES2.functional.texture.mipmap.cube.projected.linear_nearest
|
||||
dEQP-GLES2.functional.texture.specification.basic_copytexsubimage2d.2d_rgb
|
||||
dEQP-GLES2.functional.texture.specification.basic_copytexsubimage2d.2d_rgba
|
||||
dEQP-GLES2.functional.texture.specification.basic_copytexsubimage2d.cube_rgb
|
||||
dEQP-GLES2.functional.texture.specification.basic_copytexsubimage2d.cube_rgba
|
@@ -1,50 +0,0 @@
|
||||
# Note: skips lists for CI are just a list of lines that, when
|
||||
# non-zero-length and not starting with '#', will regex match to
|
||||
# delete lines from the test list. Be careful.
|
||||
|
||||
# Skip the perf/stress tests to keep runtime manageable
|
||||
dEQP-GLES[0-9]*.performance
|
||||
dEQP-GLES[0-9]*.stress
|
||||
|
||||
# These are really slow on tiling architectures (including llvmpipe).
|
||||
dEQP-GLES[0-9]*.functional.flush_finish
|
||||
|
||||
# Crashes
|
||||
dEQP-GLES2.functional.shaders.invariance.highp.common_subexpression_1
|
||||
dEQP-GLES2.functional.shaders.invariance.mediump.common_subexpression_1
|
||||
dEQP-GLES2.functional.shaders.invariance.lowp.common_subexpression_1
|
||||
|
||||
# Flaky
|
||||
dEQP-GLES2.functional.clipping.triangle_vertex.clip_three.clip_neg_x_neg_z_and_pos_x_pos_z_and_neg_x_neg_y_pos_z
|
||||
dEQP-GLES2.functional.default_vertex_attrib.*
|
||||
dEQP-GLES2.functional.fbo.completeness.size.distinct
|
||||
dEQP-GLES2.functional.negative_api.shader.uniform_matrixfv_invalid_transpose
|
||||
dEQP-GLES2.functional.negative_api.texture.generatemipmap_zero_level_array_compressed
|
||||
dEQP-GLES2.functional.shaders.builtin_variable.frontfacing
|
||||
dEQP-GLES2.functional.shaders.random.exponential.fragment.94
|
||||
dEQP-GLES2.functional.shaders.random.all_features.fragment.55
|
||||
dEQP-GLES2.functional.shaders.random.trigonometric.fragment.1
|
||||
dEQP-GLES2.functional.shaders.random.trigonometric.fragment.69
|
||||
|
||||
# Driver bugs causing GPU errors
|
||||
dEQP-GLES2.functional.shaders.loops.while_constant_iterations.nested_sequence_vertex
|
||||
dEQP-GLES2.functional.shaders.loops.while_constant_iterations.conditional_body_vertex
|
||||
dEQP-GLES2.functional.shaders.loops.while_uniform_iterations.conditional_continue_vertex
|
||||
dEQP-GLES2.functional.shaders.loops.while_uniform_iterations.double_continue_vertex
|
||||
|
||||
# Hangs / OOM
|
||||
dEQP-GLES2.functional.shaders.indexing.varying_array.vec4_dynamic_loop_write_static_read
|
||||
dEQP-GLES2.functional.shaders.indexing.varying_array.vec4_dynamic_loop_write_dynamic_read
|
||||
dEQP-GLES2.functional.shaders.indexing.varying_array.vec4_dynamic_loop_write_static_loop_read
|
||||
dEQP-GLES2.functional.shaders.indexing.varying_array.vec4_dynamic_loop_write_dynamic_loop_read
|
||||
dEQP-GLES2.functional.shaders.indexing.tmp_array.vec3_dynamic_loop_write_dynamic_read_vertex
|
||||
|
||||
dEQP-GLES2.functional.shaders.indexing.tmp_array.vec4_dynamic_loop_write_static_read_vertex
|
||||
dEQP-GLES2.functional.shaders.indexing.tmp_array.vec4_dynamic_loop_write_dynamic_read_vertex
|
||||
dEQP-GLES2.functional.shaders.indexing.tmp_array.vec4_dynamic_loop_write_static_loop_read_vertex
|
||||
dEQP-GLES2.functional.shaders.indexing.tmp_array.vec4_dynamic_loop_write_dynamic_loop_read_vertex
|
||||
|
||||
dEQP-GLES2.functional.shaders.indexing.matrix_subscript.mat4_dynamic_loop_write_static_read_vertex
|
||||
dEQP-GLES2.functional.shaders.indexing.matrix_subscript.mat4_dynamic_loop_write_dynamic_read_vertex
|
||||
dEQP-GLES2.functional.shaders.indexing.matrix_subscript.mat4_dynamic_loop_write_static_loop_read_vertex
|
||||
dEQP-GLES2.functional.shaders.indexing.matrix_subscript.mat4_dynamic_loop_write_dynamic_loop_read_vertex
|
@@ -1,124 +0,0 @@
|
||||
dEQP-GLES2.functional.clipping.line.wide_line_clip_viewport_center
|
||||
dEQP-GLES2.functional.clipping.line.wide_line_clip_viewport_corner
|
||||
dEQP-GLES2.functional.clipping.point.wide_point_clip
|
||||
dEQP-GLES2.functional.clipping.point.wide_point_clip_viewport_center
|
||||
dEQP-GLES2.functional.clipping.point.wide_point_clip_viewport_corner
|
||||
dEQP-GLES2.functional.clipping.triangle_vertex.clip_two.clip_neg_y_neg_z_and_neg_x_neg_y_pos_z
|
||||
dEQP-GLES2.functional.clipping.triangle_vertex.clip_two.clip_pos_y_pos_z_and_neg_x_neg_y_neg_z
|
||||
dEQP-GLES2.functional.fbo.render.color_clear.rbo_rgba4
|
||||
dEQP-GLES2.functional.fbo.render.color_clear.rbo_rgba4_depth_component16
|
||||
dEQP-GLES2.functional.fbo.render.color_clear.rbo_rgba4_stencil_index8
|
||||
dEQP-GLES2.functional.fbo.render.depth.rbo_rgba4_depth_component16
|
||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.no_rebind_rbo_rgba4
|
||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.no_rebind_rbo_rgba4_stencil_index8
|
||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.rebind_rbo_rgba4
|
||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.rebind_rbo_rgba4_stencil_index8
|
||||
dEQP-GLES2.functional.fbo.render.recreate_depthbuffer.no_rebind_rbo_rgba4_depth_component16
|
||||
dEQP-GLES2.functional.fbo.render.recreate_depthbuffer.rebind_rbo_rgba4_depth_component16
|
||||
dEQP-GLES2.functional.fbo.render.recreate_stencilbuffer.no_rebind_rbo_rgba4_stencil_index8
|
||||
dEQP-GLES2.functional.fbo.render.recreate_stencilbuffer.rebind_rbo_rgba4_stencil_index8
|
||||
dEQP-GLES2.functional.fbo.render.shared_colorbuffer.rbo_rgba4
|
||||
dEQP-GLES2.functional.fbo.render.shared_colorbuffer.rbo_rgba4_depth_component16
|
||||
dEQP-GLES2.functional.fbo.render.shared_depthbuffer.rbo_rgba4_depth_component16
|
||||
dEQP-GLES2.functional.polygon_offset.default_displacement_with_units
|
||||
dEQP-GLES2.functional.polygon_offset.fixed16_displacement_with_units
|
||||
dEQP-GLES2.functional.rasterization.interpolation.basic.line_loop_wide
|
||||
dEQP-GLES2.functional.rasterization.interpolation.basic.line_strip_wide
|
||||
dEQP-GLES2.functional.rasterization.interpolation.basic.lines_wide
|
||||
dEQP-GLES2.functional.rasterization.interpolation.projected.line_loop_wide
|
||||
dEQP-GLES2.functional.rasterization.interpolation.projected.line_strip_wide
|
||||
dEQP-GLES2.functional.rasterization.interpolation.projected.lines_wide
|
||||
dEQP-GLES2.functional.rasterization.limits.points
|
||||
dEQP-GLES2.functional.shaders.texture_functions.fragment.texture2d_bias
|
||||
dEQP-GLES2.functional.shaders.texture_functions.fragment.texture2dproj_vec3_bias
|
||||
dEQP-GLES2.functional.shaders.texture_functions.fragment.texture2dproj_vec4_bias
|
||||
dEQP-GLES2.functional.texture.filtering.2d.linear_mipmap_linear_linear_clamp_rgba8888
|
||||
dEQP-GLES2.functional.texture.filtering.2d.linear_mipmap_linear_linear_mirror_etc1
|
||||
dEQP-GLES2.functional.texture.filtering.2d.linear_mipmap_linear_linear_mirror_rgba8888
|
||||
dEQP-GLES2.functional.texture.filtering.2d.linear_mipmap_linear_linear_repeat_etc1
|
||||
dEQP-GLES2.functional.texture.filtering.2d.linear_mipmap_linear_linear_repeat_rgba8888
|
||||
dEQP-GLES2.functional.texture.filtering.2d.linear_mipmap_linear_nearest_clamp_rgba8888
|
||||
dEQP-GLES2.functional.texture.filtering.2d.linear_mipmap_linear_nearest_mirror_etc1
|
||||
dEQP-GLES2.functional.texture.filtering.2d.linear_mipmap_linear_nearest_mirror_rgba8888
|
||||
dEQP-GLES2.functional.texture.filtering.2d.linear_mipmap_linear_nearest_repeat_etc1
|
||||
dEQP-GLES2.functional.texture.filtering.2d.linear_mipmap_linear_nearest_repeat_l8
|
||||
dEQP-GLES2.functional.texture.filtering.2d.linear_mipmap_linear_nearest_repeat_rgb888
|
||||
dEQP-GLES2.functional.texture.filtering.2d.linear_mipmap_linear_nearest_repeat_rgba4444
|
||||
dEQP-GLES2.functional.texture.filtering.2d.linear_mipmap_linear_nearest_repeat_rgba8888
|
||||
dEQP-GLES2.functional.texture.filtering.2d.nearest_mipmap_linear_linear_clamp_rgba8888
|
||||
dEQP-GLES2.functional.texture.filtering.2d.nearest_mipmap_linear_linear_mirror_etc1
|
||||
dEQP-GLES2.functional.texture.filtering.2d.nearest_mipmap_linear_linear_mirror_rgba8888
|
||||
dEQP-GLES2.functional.texture.filtering.2d.nearest_mipmap_linear_linear_repeat_etc1
|
||||
dEQP-GLES2.functional.texture.filtering.2d.nearest_mipmap_linear_linear_repeat_rgba8888
|
||||
dEQP-GLES2.functional.texture.filtering.2d.nearest_mipmap_linear_nearest_clamp_rgba8888
|
||||
dEQP-GLES2.functional.texture.filtering.2d.nearest_mipmap_linear_nearest_mirror_etc1
|
||||
dEQP-GLES2.functional.texture.filtering.2d.nearest_mipmap_linear_nearest_mirror_rgba8888
|
||||
dEQP-GLES2.functional.texture.filtering.2d.nearest_mipmap_linear_nearest_repeat_etc1
|
||||
dEQP-GLES2.functional.texture.filtering.2d.nearest_mipmap_linear_nearest_repeat_l8
|
||||
dEQP-GLES2.functional.texture.filtering.2d.nearest_mipmap_linear_nearest_repeat_rgb888
|
||||
dEQP-GLES2.functional.texture.filtering.2d.nearest_mipmap_linear_nearest_repeat_rgba4444
|
||||
dEQP-GLES2.functional.texture.filtering.2d.nearest_mipmap_linear_nearest_repeat_rgba8888
|
||||
dEQP-GLES2.functional.texture.mipmap.2d.affine.linear_linear_repeat
|
||||
dEQP-GLES2.functional.texture.mipmap.2d.affine.nearest_linear_clamp
|
||||
dEQP-GLES2.functional.texture.mipmap.2d.affine.nearest_linear_mirror
|
||||
dEQP-GLES2.functional.texture.mipmap.2d.affine.nearest_linear_repeat
|
||||
dEQP-GLES2.functional.texture.mipmap.2d.basic.linear_linear_repeat
|
||||
dEQP-GLES2.functional.texture.mipmap.2d.basic.linear_linear_repeat_non_square
|
||||
dEQP-GLES2.functional.texture.mipmap.2d.basic.nearest_linear_clamp
|
||||
dEQP-GLES2.functional.texture.mipmap.2d.basic.nearest_linear_clamp_non_square
|
||||
dEQP-GLES2.functional.texture.mipmap.2d.basic.nearest_linear_mirror
|
||||
dEQP-GLES2.functional.texture.mipmap.2d.basic.nearest_linear_mirror_non_square
|
||||
dEQP-GLES2.functional.texture.mipmap.2d.basic.nearest_linear_repeat
|
||||
dEQP-GLES2.functional.texture.mipmap.2d.basic.nearest_linear_repeat_non_square
|
||||
dEQP-GLES2.functional.texture.mipmap.2d.projected.linear_linear_repeat
|
||||
dEQP-GLES2.functional.texture.mipmap.2d.projected.nearest_linear_clamp
|
||||
dEQP-GLES2.functional.texture.mipmap.2d.projected.nearest_linear_mirror
|
||||
dEQP-GLES2.functional.texture.mipmap.2d.projected.nearest_linear_repeat
|
||||
dEQP-GLES2.functional.texture.mipmap.cube.basic.linear_linear
|
||||
dEQP-GLES2.functional.texture.mipmap.cube.basic.linear_nearest
|
||||
dEQP-GLES2.functional.texture.mipmap.cube.bias.linear_linear
|
||||
dEQP-GLES2.functional.texture.mipmap.cube.bias.linear_nearest
|
||||
dEQP-GLES2.functional.texture.mipmap.cube.projected.linear_linear
|
||||
dEQP-GLES2.functional.texture.mipmap.cube.projected.linear_nearest
|
||||
dEQP-GLES2.functional.texture.vertex.2d.filtering.linear_mipmap_linear_linear_clamp
|
||||
dEQP-GLES2.functional.texture.vertex.2d.filtering.linear_mipmap_linear_linear_mirror
|
||||
dEQP-GLES2.functional.texture.vertex.2d.filtering.linear_mipmap_linear_linear_repeat
|
||||
dEQP-GLES2.functional.texture.vertex.2d.filtering.linear_mipmap_linear_nearest_clamp
|
||||
dEQP-GLES2.functional.texture.vertex.2d.filtering.linear_mipmap_linear_nearest_mirror
|
||||
dEQP-GLES2.functional.texture.vertex.2d.filtering.linear_mipmap_linear_nearest_repeat
|
||||
dEQP-GLES2.functional.texture.vertex.2d.filtering.nearest_mipmap_linear_linear_clamp
|
||||
dEQP-GLES2.functional.texture.vertex.2d.filtering.nearest_mipmap_linear_linear_mirror
|
||||
dEQP-GLES2.functional.texture.vertex.2d.filtering.nearest_mipmap_linear_linear_repeat
|
||||
dEQP-GLES2.functional.texture.vertex.2d.filtering.nearest_mipmap_linear_nearest_clamp
|
||||
dEQP-GLES2.functional.texture.vertex.2d.filtering.nearest_mipmap_linear_nearest_mirror
|
||||
dEQP-GLES2.functional.texture.vertex.2d.filtering.nearest_mipmap_linear_nearest_repeat
|
||||
dEQP-GLES2.functional.texture.vertex.2d.wrap.clamp_clamp
|
||||
dEQP-GLES2.functional.texture.vertex.2d.wrap.clamp_mirror
|
||||
dEQP-GLES2.functional.texture.vertex.2d.wrap.clamp_repeat
|
||||
dEQP-GLES2.functional.texture.vertex.2d.wrap.mirror_clamp
|
||||
dEQP-GLES2.functional.texture.vertex.2d.wrap.mirror_mirror
|
||||
dEQP-GLES2.functional.texture.vertex.2d.wrap.mirror_repeat
|
||||
dEQP-GLES2.functional.texture.vertex.2d.wrap.repeat_clamp
|
||||
dEQP-GLES2.functional.texture.vertex.2d.wrap.repeat_mirror
|
||||
dEQP-GLES2.functional.texture.vertex.2d.wrap.repeat_repeat
|
||||
dEQP-GLES2.functional.texture.vertex.cube.filtering.linear_mipmap_linear_linear_clamp
|
||||
dEQP-GLES2.functional.texture.vertex.cube.filtering.linear_mipmap_linear_linear_mirror
|
||||
dEQP-GLES2.functional.texture.vertex.cube.filtering.linear_mipmap_linear_linear_repeat
|
||||
dEQP-GLES2.functional.texture.vertex.cube.filtering.linear_mipmap_linear_nearest_clamp
|
||||
dEQP-GLES2.functional.texture.vertex.cube.filtering.linear_mipmap_linear_nearest_mirror
|
||||
dEQP-GLES2.functional.texture.vertex.cube.filtering.linear_mipmap_linear_nearest_repeat
|
||||
dEQP-GLES2.functional.texture.vertex.cube.filtering.nearest_mipmap_linear_linear_clamp
|
||||
dEQP-GLES2.functional.texture.vertex.cube.filtering.nearest_mipmap_linear_linear_mirror
|
||||
dEQP-GLES2.functional.texture.vertex.cube.filtering.nearest_mipmap_linear_linear_repeat
|
||||
dEQP-GLES2.functional.texture.vertex.cube.filtering.nearest_mipmap_linear_nearest_clamp
|
||||
dEQP-GLES2.functional.texture.vertex.cube.filtering.nearest_mipmap_linear_nearest_mirror
|
||||
dEQP-GLES2.functional.texture.vertex.cube.filtering.nearest_mipmap_linear_nearest_repeat
|
||||
dEQP-GLES2.functional.texture.vertex.cube.wrap.clamp_clamp
|
||||
dEQP-GLES2.functional.texture.vertex.cube.wrap.clamp_mirror
|
||||
dEQP-GLES2.functional.texture.vertex.cube.wrap.clamp_repeat
|
||||
dEQP-GLES2.functional.texture.vertex.cube.wrap.mirror_clamp
|
||||
dEQP-GLES2.functional.texture.vertex.cube.wrap.mirror_mirror
|
||||
dEQP-GLES2.functional.texture.vertex.cube.wrap.mirror_repeat
|
||||
dEQP-GLES2.functional.texture.vertex.cube.wrap.repeat_clamp
|
||||
dEQP-GLES2.functional.texture.vertex.cube.wrap.repeat_mirror
|
||||
dEQP-GLES2.functional.texture.vertex.cube.wrap.repeat_repeat
|
@@ -1,31 +0,0 @@
|
||||
dEQP-GLES2.functional.depth_stencil_clear.depth_stencil_masked
|
||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.no_rebind_rbo_rgb565_depth_component16
|
||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.no_rebind_rbo_rgb565_stencil_index8
|
||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.no_rebind_rbo_rgb5_a1_depth_component16
|
||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.no_rebind_rbo_rgb5_a1_stencil_index8
|
||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.no_rebind_rbo_rgba4_depth_component16
|
||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.no_rebind_rbo_rgba4_stencil_index8
|
||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.no_rebind_tex2d_rgb_depth_component16
|
||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.no_rebind_tex2d_rgb_stencil_index8
|
||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.no_rebind_tex2d_rgba_depth_component16
|
||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.no_rebind_tex2d_rgba_stencil_index8
|
||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.rebind_rbo_rgb565_depth_component16
|
||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.rebind_rbo_rgb565_stencil_index8
|
||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.rebind_rbo_rgb5_a1_depth_component16
|
||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.rebind_rbo_rgb5_a1_stencil_index8
|
||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.rebind_rbo_rgba4_depth_component16
|
||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.rebind_rbo_rgba4_stencil_index8
|
||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.rebind_tex2d_rgb_depth_component16
|
||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.rebind_tex2d_rgb_stencil_index8
|
||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.rebind_tex2d_rgba_depth_component16
|
||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.rebind_tex2d_rgba_stencil_index8
|
||||
dEQP-GLES2.functional.fbo.render.shared_colorbuffer.rbo_rgb565_depth_component16
|
||||
dEQP-GLES2.functional.fbo.render.shared_colorbuffer.rbo_rgb5_a1_depth_component16
|
||||
dEQP-GLES2.functional.fbo.render.shared_colorbuffer.rbo_rgba4_depth_component16
|
||||
dEQP-GLES2.functional.fbo.render.shared_colorbuffer.tex2d_rgb_depth_component16
|
||||
dEQP-GLES2.functional.fbo.render.shared_colorbuffer.tex2d_rgba_depth_component16
|
||||
dEQP-GLES2.functional.fbo.render.shared_depthbuffer.rbo_rgb565_depth_component16
|
||||
dEQP-GLES2.functional.fbo.render.shared_depthbuffer.rbo_rgb5_a1_depth_component16
|
||||
dEQP-GLES2.functional.fbo.render.shared_depthbuffer.rbo_rgba4_depth_component16
|
||||
dEQP-GLES2.functional.fbo.render.shared_depthbuffer.tex2d_rgb_depth_component16
|
||||
dEQP-GLES2.functional.fbo.render.shared_depthbuffer.tex2d_rgba_depth_component16
|
@@ -1,14 +0,0 @@
|
||||
# Note: skips lists for CI are just a list of lines that, when
|
||||
# non-zero-length and not starting with '#', will regex match to
|
||||
# delete lines from the test list. Be careful.
|
||||
|
||||
# Skip the perf/stress tests to keep runtime manageable
|
||||
dEQP-GLES[0-9]*.performance.*
|
||||
dEQP-GLES[0-9]*.stress.*
|
||||
|
||||
# These are really slow on tiling architectures (including llvmpipe).
|
||||
dEQP-GLES[0-9]*.functional.flush_finish.*
|
||||
|
||||
# XXX: Why does this flake?
|
||||
dEQP-GLES2.functional.clipping.triangle_vertex.clip_three.clip_neg_x_neg_z_and_pos_x_pos_z_and_neg_x_neg_y_pos_z
|
||||
|
@@ -1,31 +0,0 @@
|
||||
dEQP-GLES2.functional.depth_stencil_clear.depth_stencil_masked
|
||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.no_rebind_rbo_rgb565_depth_component16
|
||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.no_rebind_rbo_rgb565_stencil_index8
|
||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.no_rebind_rbo_rgb5_a1_depth_component16
|
||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.no_rebind_rbo_rgb5_a1_stencil_index8
|
||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.no_rebind_rbo_rgba4_depth_component16
|
||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.no_rebind_rbo_rgba4_stencil_index8
|
||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.no_rebind_tex2d_rgb_depth_component16
|
||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.no_rebind_tex2d_rgb_stencil_index8
|
||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.no_rebind_tex2d_rgba_depth_component16
|
||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.no_rebind_tex2d_rgba_stencil_index8
|
||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.rebind_rbo_rgb565_depth_component16
|
||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.rebind_rbo_rgb565_stencil_index8
|
||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.rebind_rbo_rgb5_a1_depth_component16
|
||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.rebind_rbo_rgb5_a1_stencil_index8
|
||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.rebind_rbo_rgba4_depth_component16
|
||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.rebind_rbo_rgba4_stencil_index8
|
||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.rebind_tex2d_rgb_depth_component16
|
||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.rebind_tex2d_rgb_stencil_index8
|
||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.rebind_tex2d_rgba_depth_component16
|
||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.rebind_tex2d_rgba_stencil_index8
|
||||
dEQP-GLES2.functional.fbo.render.shared_colorbuffer.rbo_rgb565_depth_component16
|
||||
dEQP-GLES2.functional.fbo.render.shared_colorbuffer.rbo_rgb5_a1_depth_component16
|
||||
dEQP-GLES2.functional.fbo.render.shared_colorbuffer.rbo_rgba4_depth_component16
|
||||
dEQP-GLES2.functional.fbo.render.shared_colorbuffer.tex2d_rgb_depth_component16
|
||||
dEQP-GLES2.functional.fbo.render.shared_colorbuffer.tex2d_rgba_depth_component16
|
||||
dEQP-GLES2.functional.fbo.render.shared_depthbuffer.rbo_rgb565_depth_component16
|
||||
dEQP-GLES2.functional.fbo.render.shared_depthbuffer.rbo_rgb5_a1_depth_component16
|
||||
dEQP-GLES2.functional.fbo.render.shared_depthbuffer.rbo_rgba4_depth_component16
|
||||
dEQP-GLES2.functional.fbo.render.shared_depthbuffer.tex2d_rgb_depth_component16
|
||||
dEQP-GLES2.functional.fbo.render.shared_depthbuffer.tex2d_rgba_depth_component16
|
@@ -1,10 +0,0 @@
|
||||
# Note: skips lists for CI are just a list of lines that, when
|
||||
# non-zero-length and not starting with '#', will regex match to
|
||||
# delete lines from the test list. Be careful.
|
||||
|
||||
# Skip the perf/stress tests to keep runtime manageable
|
||||
dEQP-GLES[0-9]*.performance.*
|
||||
dEQP-GLES[0-9]*.stress.*
|
||||
|
||||
# These are really slow on tiling architectures (including llvmpipe).
|
||||
dEQP-GLES[0-9]*.functional.flush_finish.*
|
@@ -1,31 +0,0 @@
|
||||
dEQP-GLES2.functional.depth_stencil_clear.depth_stencil_masked
|
||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.no_rebind_rbo_rgb565_depth_component16
|
||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.no_rebind_rbo_rgb565_stencil_index8
|
||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.no_rebind_rbo_rgb5_a1_depth_component16
|
||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.no_rebind_rbo_rgb5_a1_stencil_index8
|
||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.no_rebind_rbo_rgba4_depth_component16
|
||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.no_rebind_rbo_rgba4_stencil_index8
|
||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.no_rebind_tex2d_rgb_depth_component16
|
||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.no_rebind_tex2d_rgb_stencil_index8
|
||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.no_rebind_tex2d_rgba_depth_component16
|
||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.no_rebind_tex2d_rgba_stencil_index8
|
||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.rebind_rbo_rgb565_depth_component16
|
||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.rebind_rbo_rgb565_stencil_index8
|
||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.rebind_rbo_rgb5_a1_depth_component16
|
||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.rebind_rbo_rgb5_a1_stencil_index8
|
||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.rebind_rbo_rgba4_depth_component16
|
||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.rebind_rbo_rgba4_stencil_index8
|
||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.rebind_tex2d_rgb_depth_component16
|
||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.rebind_tex2d_rgb_stencil_index8
|
||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.rebind_tex2d_rgba_depth_component16
|
||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.rebind_tex2d_rgba_stencil_index8
|
||||
dEQP-GLES2.functional.fbo.render.shared_colorbuffer.rbo_rgb565_depth_component16
|
||||
dEQP-GLES2.functional.fbo.render.shared_colorbuffer.rbo_rgb5_a1_depth_component16
|
||||
dEQP-GLES2.functional.fbo.render.shared_colorbuffer.rbo_rgba4_depth_component16
|
||||
dEQP-GLES2.functional.fbo.render.shared_colorbuffer.tex2d_rgb_depth_component16
|
||||
dEQP-GLES2.functional.fbo.render.shared_colorbuffer.tex2d_rgba_depth_component16
|
||||
dEQP-GLES2.functional.fbo.render.shared_depthbuffer.rbo_rgb565_depth_component16
|
||||
dEQP-GLES2.functional.fbo.render.shared_depthbuffer.rbo_rgb5_a1_depth_component16
|
||||
dEQP-GLES2.functional.fbo.render.shared_depthbuffer.rbo_rgba4_depth_component16
|
||||
dEQP-GLES2.functional.fbo.render.shared_depthbuffer.tex2d_rgb_depth_component16
|
||||
dEQP-GLES2.functional.fbo.render.shared_depthbuffer.tex2d_rgba_depth_component16
|
@@ -1,13 +0,0 @@
|
||||
# Note: skips lists for CI are just a list of lines that, when
|
||||
# non-zero-length and not starting with '#', will regex match to
|
||||
# delete lines from the test list. Be careful.
|
||||
|
||||
# Skip the perf/stress tests to keep runtime manageable
|
||||
dEQP-GLES[0-9]*.performance.*
|
||||
dEQP-GLES[0-9]*.stress.*
|
||||
|
||||
# These are really slow on tiling architectures (including llvmpipe).
|
||||
dEQP-GLES[0-9]*.functional.flush_finish.*
|
||||
|
||||
# XXX: Why does this flake?
|
||||
dEQP-GLES2.functional.clipping.triangle_vertex.clip_three.clip_neg_x_neg_z_and_pos_x_pos_z_and_neg_x_neg_y_pos_z
|
@@ -1,31 +0,0 @@
|
||||
dEQP-GLES2.functional.depth_stencil_clear.depth_stencil_masked
|
||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.no_rebind_rbo_rgb565_depth_component16
|
||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.no_rebind_rbo_rgb565_stencil_index8
|
||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.no_rebind_rbo_rgb5_a1_depth_component16
|
||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.no_rebind_rbo_rgb5_a1_stencil_index8
|
||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.no_rebind_rbo_rgba4_depth_component16
|
||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.no_rebind_rbo_rgba4_stencil_index8
|
||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.no_rebind_tex2d_rgb_depth_component16
|
||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.no_rebind_tex2d_rgb_stencil_index8
|
||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.no_rebind_tex2d_rgba_depth_component16
|
||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.no_rebind_tex2d_rgba_stencil_index8
|
||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.rebind_rbo_rgb565_depth_component16
|
||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.rebind_rbo_rgb565_stencil_index8
|
||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.rebind_rbo_rgb5_a1_depth_component16
|
||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.rebind_rbo_rgb5_a1_stencil_index8
|
||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.rebind_rbo_rgba4_depth_component16
|
||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.rebind_rbo_rgba4_stencil_index8
|
||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.rebind_tex2d_rgb_depth_component16
|
||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.rebind_tex2d_rgb_stencil_index8
|
||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.rebind_tex2d_rgba_depth_component16
|
||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.rebind_tex2d_rgba_stencil_index8
|
||||
dEQP-GLES2.functional.fbo.render.shared_colorbuffer.rbo_rgb565_depth_component16
|
||||
dEQP-GLES2.functional.fbo.render.shared_colorbuffer.rbo_rgb5_a1_depth_component16
|
||||
dEQP-GLES2.functional.fbo.render.shared_colorbuffer.rbo_rgba4_depth_component16
|
||||
dEQP-GLES2.functional.fbo.render.shared_colorbuffer.tex2d_rgb_depth_component16
|
||||
dEQP-GLES2.functional.fbo.render.shared_colorbuffer.tex2d_rgba_depth_component16
|
||||
dEQP-GLES2.functional.fbo.render.shared_depthbuffer.rbo_rgb565_depth_component16
|
||||
dEQP-GLES2.functional.fbo.render.shared_depthbuffer.rbo_rgb5_a1_depth_component16
|
||||
dEQP-GLES2.functional.fbo.render.shared_depthbuffer.rbo_rgba4_depth_component16
|
||||
dEQP-GLES2.functional.fbo.render.shared_depthbuffer.tex2d_rgb_depth_component16
|
||||
dEQP-GLES2.functional.fbo.render.shared_depthbuffer.tex2d_rgba_depth_component16
|
@@ -1,13 +0,0 @@
|
||||
# Note: skips lists for CI are just a list of lines that, when
|
||||
# non-zero-length and not starting with '#', will regex match to
|
||||
# delete lines from the test list. Be careful.
|
||||
|
||||
# Skip the perf/stress tests to keep runtime manageable
|
||||
dEQP-GLES[0-9]*.performance.*
|
||||
dEQP-GLES[0-9]*.stress.*
|
||||
|
||||
# These are really slow on tiling architectures (including llvmpipe).
|
||||
dEQP-GLES[0-9]*.functional.flush_finish.*
|
||||
|
||||
# XXX: Why does this flake?
|
||||
dEQP-GLES2.functional.clipping.triangle_vertex.clip_three.clip_neg_x_neg_z_and_pos_x_pos_z_and_neg_x_neg_y_pos_z
|
@@ -1,31 +0,0 @@
|
||||
# Disable a TON of tests to keep the run around 5-10 minutes because my runner is
|
||||
# slow.
|
||||
dEQP-VK.api.*
|
||||
dEQP-VK.binding_model.*
|
||||
dEQP-VK.clipping.*
|
||||
dEQP-VK.compute.*
|
||||
dEQP-VK.conditional_rendering.*
|
||||
dEQP-VK.descriptor_indexing.*
|
||||
dEQP-VK.device_group.*
|
||||
dEQP-VK.fragment_operations.*
|
||||
dEQP-VK.fragment_shader_interlock.*
|
||||
dEQP-VK.graphicsfuzz.*
|
||||
dEQP-VK.image.*
|
||||
dEQP-VK.imageless_framebuffer.*
|
||||
dEQP-VK.info.*
|
||||
dEQP-VK.memory.*
|
||||
dEQP-VK.memory_model.*
|
||||
dEQP-VK.multiview.*
|
||||
dEQP-VK.pipeline.*
|
||||
dEQP-VK.protected_memory.*
|
||||
dEQP-VK.query_pool.*
|
||||
dEQP-VK.robustness.*
|
||||
dEQP-VK.sparse_resources.*
|
||||
dEQP-VK.spirv_assembly.*
|
||||
dEQP-VK.subgroups.*
|
||||
dEQP-VK.synchronization.*
|
||||
dEQP-VK.texture.*
|
||||
dEQP-VK.transform_feedback.*
|
||||
dEQP-VK.ubo.*
|
||||
dEQP-VK.wsi.*
|
||||
dEQP-VK.ycbcr.*
|
@@ -1,237 +0,0 @@
|
||||
#!/bin/sh
|
||||
|
||||
set -ex
|
||||
|
||||
DEQP_OPTIONS="--deqp-surface-width=256 --deqp-surface-height=256"
|
||||
DEQP_OPTIONS="$DEQP_OPTIONS --deqp-surface-type=pbuffer"
|
||||
DEQP_OPTIONS="$DEQP_OPTIONS --deqp-gl-config-name=rgba8888d24s8ms0"
|
||||
DEQP_OPTIONS="$DEQP_OPTIONS --deqp-visibility=hidden"
|
||||
|
||||
# It would be nice to be able to enable the watchdog, so that hangs in a test
|
||||
# don't need to wait the full hour for the run to time out. However, some
|
||||
# shaders end up taking long enough to compile
|
||||
# (dEQP-GLES31.functional.ubo.random.all_per_block_buffers.20 for example)
|
||||
# that they'll sporadically trigger the watchdog.
|
||||
#DEQP_OPTIONS="$DEQP_OPTIONS --deqp-watchdog=enable"
|
||||
|
||||
if [ -z "$DEQP_VER" ]; then
|
||||
echo 'DEQP_VER must be set to something like "gles2", "gles31" or "vk" for the test run'
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ "$DEQP_VER" = "vk" ]; then
|
||||
if [ -z "$VK_DRIVER" ]; then
|
||||
echo 'VK_DRIVER must be to something like "radeon" or "intel" for the test run'
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ -z "$DEQP_SKIPS" ]; then
|
||||
echo 'DEQP_SKIPS must be set to something like "deqp-default-skips.txt"'
|
||||
exit 1
|
||||
fi
|
||||
|
||||
ARTIFACTS=`pwd`/artifacts
|
||||
|
||||
# Set up the driver environment.
|
||||
export LD_LIBRARY_PATH=`pwd`/install/lib/
|
||||
export EGL_PLATFORM=surfaceless
|
||||
export VK_ICD_FILENAMES=`pwd`/install/share/vulkan/icd.d/"$VK_DRIVER"_icd.x86_64.json
|
||||
|
||||
# the runner was failing to look for libkms in /usr/local/lib for some reason
|
||||
# I never figured out.
|
||||
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib
|
||||
|
||||
RESULTS=`pwd`/results
|
||||
mkdir -p $RESULTS
|
||||
|
||||
# Generate test case list file.
|
||||
if [ "$DEQP_VER" = "vk" ]; then
|
||||
cp /deqp/mustpass/vk-master.txt /tmp/case-list.txt
|
||||
DEQP=/deqp/external/vulkancts/modules/vulkan/deqp-vk
|
||||
else
|
||||
cp /deqp/mustpass/$DEQP_VER-master.txt /tmp/case-list.txt
|
||||
DEQP=/deqp/modules/$DEQP_VER/deqp-$DEQP_VER
|
||||
fi
|
||||
|
||||
# If the job is parallel, take the corresponding fraction of the caselist.
|
||||
# Note: N~M is a gnu sed extension to match every nth line (first line is #1).
|
||||
if [ -n "$CI_NODE_INDEX" ]; then
|
||||
sed -ni $CI_NODE_INDEX~$CI_NODE_TOTAL"p" /tmp/case-list.txt
|
||||
fi
|
||||
|
||||
if [ ! -s /tmp/case-list.txt ]; then
|
||||
echo "Caselist generation failed"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ -n "$DEQP_EXPECTED_FAILS" ]; then
|
||||
XFAIL="--xfail-list $ARTIFACTS/$DEQP_EXPECTED_FAILS"
|
||||
fi
|
||||
|
||||
set +e
|
||||
|
||||
run_cts() {
|
||||
deqp=$1
|
||||
caselist=$2
|
||||
output=$3
|
||||
deqp-runner \
|
||||
--deqp $deqp \
|
||||
--output $output \
|
||||
--caselist $caselist \
|
||||
--exclude-list $ARTIFACTS/$DEQP_SKIPS \
|
||||
$XFAIL \
|
||||
--job ${DEQP_PARALLEL:-1} \
|
||||
--allow-flakes true \
|
||||
$DEQP_RUNNER_OPTIONS \
|
||||
-- \
|
||||
$DEQP_OPTIONS
|
||||
}
|
||||
|
||||
report_flakes() {
|
||||
if [ -z "$FLAKES_CHANNEL" ]; then
|
||||
return 0
|
||||
fi
|
||||
flakes=$1
|
||||
bot="$CI_RUNNER_DESCRIPTION-$CI_PIPELINE_ID"
|
||||
channel="$FLAKES_CHANNEL"
|
||||
(
|
||||
echo NICK $bot
|
||||
echo USER $bot unused unused :Gitlab CI Notifier
|
||||
sleep 10
|
||||
echo "JOIN $channel"
|
||||
sleep 1
|
||||
desc="Flakes detected in job: $CI_JOB_URL on $CI_RUNNER_DESCRIPTION"
|
||||
if [ -n "CI_MERGE_REQUEST_SOURCE_BRANCH_NAME" ]; then
|
||||
desc="$desc on branch $CI_MERGE_REQUEST_SOURCE_BRANCH_NAME ($CI_MERGE_REQUEST_TITLE)"
|
||||
fi
|
||||
echo "PRIVMSG $channel :$desc"
|
||||
for flake in `cat $flakes`; do
|
||||
echo "PRIVMSG $channel :$flake"
|
||||
done
|
||||
echo "PRIVMSG $channel :See $CI_JOB_URL/artifacts/browse/results/"
|
||||
echo "QUIT"
|
||||
) | nc irc.freenode.net 6667 > /dev/null
|
||||
|
||||
}
|
||||
|
||||
extract_xml_result() {
|
||||
testcase=$1
|
||||
shift 1
|
||||
qpas=$*
|
||||
start="#beginTestCaseResult $testcase"
|
||||
for qpa in $qpas; do
|
||||
while IFS= read -r line; do
|
||||
if [ "$line" = "$start" ]; then
|
||||
dst="$testcase.qpa"
|
||||
echo "#beginSession" > $dst
|
||||
echo $line >> $dst
|
||||
while IFS= read -r line; do
|
||||
if [ "$line" = "#endTestCaseResult" ]; then
|
||||
echo $line >> $dst
|
||||
echo "#endSession" >> $dst
|
||||
/deqp/executor/testlog-to-xml $dst "$RESULTS/$testcase.xml"
|
||||
# copy the stylesheets here so they only end up in artifacts
|
||||
# if we have one or more result xml in artifacts
|
||||
cp /deqp/testlog.css "$RESULTS/"
|
||||
cp /deqp/testlog.xsl "$RESULTS/"
|
||||
return 0
|
||||
fi
|
||||
echo $line >> $dst
|
||||
done
|
||||
return 1
|
||||
fi
|
||||
done < $qpa
|
||||
done
|
||||
}
|
||||
|
||||
extract_xml_results() {
|
||||
qpas=$*
|
||||
while IFS= read -r testcase; do
|
||||
testcase=${testcase%,*}
|
||||
extract_xml_result $testcase $qpas
|
||||
done
|
||||
}
|
||||
|
||||
# Generate junit results
|
||||
generate_junit() {
|
||||
results=$1
|
||||
echo "<?xml version=\"1.0\" encoding=\"utf-8\"?>"
|
||||
echo "<testsuites>"
|
||||
echo "<testsuite name=\"$DEQP_VER-$CI_NODE_INDEX\">"
|
||||
while read line; do
|
||||
testcase=${line%,*}
|
||||
result=${line#*,}
|
||||
# avoid counting Skip's in the # of tests:
|
||||
if [ "$result" = "Skip" ]; then
|
||||
continue;
|
||||
fi
|
||||
echo "<testcase name=\"$testcase\">"
|
||||
if [ "$result" != "Pass" ]; then
|
||||
echo "<failure type=\"$result\">"
|
||||
echo "$result: See $CI_JOB_URL/artifacts/results/$testcase.xml"
|
||||
echo "</failure>"
|
||||
fi
|
||||
echo "</testcase>"
|
||||
done < $results
|
||||
echo "</testsuite>"
|
||||
echo "</testsuites>"
|
||||
}
|
||||
|
||||
# wrapper to supress +x to avoid spamming the log
|
||||
quiet() {
|
||||
set +x
|
||||
"$@"
|
||||
set -x
|
||||
}
|
||||
|
||||
run_cts $DEQP /tmp/case-list.txt $RESULTS/cts-runner-results.txt
|
||||
DEQP_EXITCODE=$?
|
||||
|
||||
quiet generate_junit $RESULTS/cts-runner-results.txt > $RESULTS/results.xml
|
||||
|
||||
if [ $DEQP_EXITCODE -ne 0 ]; then
|
||||
# preserve caselist files in case of failures:
|
||||
cp /tmp/deqp_runner.*.txt $RESULTS/
|
||||
echo "Some unexpected results found (see cts-runner-results.txt in artifacts for full results):"
|
||||
cat $RESULTS/cts-runner-results.txt | \
|
||||
grep -v ",Pass" | \
|
||||
grep -v ",Skip" | \
|
||||
grep -v ",ExpectedFail" > \
|
||||
$RESULTS/cts-runner-unexpected-results.txt
|
||||
head -n 50 $RESULTS/cts-runner-unexpected-results.txt
|
||||
|
||||
if [ -z "$DEQP_NO_SAVE_RESULTS" ]; then
|
||||
# Save the logs for up to the first 50 unexpected results:
|
||||
head -n 50 $RESULTS/cts-runner-unexpected-results.txt | quiet extract_xml_results /tmp/*.qpa
|
||||
fi
|
||||
|
||||
count=`cat $RESULTS/cts-runner-unexpected-results.txt | wc -l`
|
||||
|
||||
# Re-run fails to detect flakes. But use a small threshold, if
|
||||
# something was fundamentally broken, we don't want to re-run
|
||||
# the entire caselist
|
||||
else
|
||||
cat $RESULTS/cts-runner-results.txt | \
|
||||
grep ",Flake" > \
|
||||
$RESULTS/cts-runner-flakes.txt
|
||||
|
||||
count=`cat $RESULTS/cts-runner-flakes.txt | wc -l`
|
||||
if [ $count -gt 0 ]; then
|
||||
echo "Some flakes found (see cts-runner-flakes.txt in artifacts for full results):"
|
||||
head -n 50 $RESULTS/cts-runner-flakes.txt
|
||||
|
||||
if [ -z "$DEQP_NO_SAVE_RESULTS" ]; then
|
||||
# Save the logs for up to the first 50 flakes:
|
||||
head -n 50 $RESULTS/cts-runner-flakes.txt | quiet extract_xml_results /tmp/*.qpa
|
||||
fi
|
||||
|
||||
# Report the flakes to IRC channel for monitoring (if configured):
|
||||
quiet report_flakes $RESULTS/cts-runner-flakes.txt
|
||||
else
|
||||
# no flakes, so clean-up:
|
||||
rm $RESULTS/cts-runner-flakes.txt
|
||||
fi
|
||||
fi
|
||||
|
||||
exit $DEQP_EXITCODE
|
@@ -1,844 +0,0 @@
|
||||
dEQP-GLES2.functional.clipping.line.wide_line_clip_viewport_center
|
||||
dEQP-GLES2.functional.clipping.line.wide_line_clip_viewport_corner
|
||||
dEQP-GLES2.functional.clipping.point.wide_point_clip
|
||||
dEQP-GLES2.functional.clipping.point.wide_point_clip_viewport_center
|
||||
dEQP-GLES2.functional.clipping.point.wide_point_clip_viewport_corner
|
||||
dEQP-GLES2.functional.clipping.triangle_vertex.clip_two.clip_neg_y_neg_z_and_neg_x_neg_y_pos_z
|
||||
dEQP-GLES2.functional.clipping.triangle_vertex.clip_two.clip_pos_y_pos_z_and_neg_x_neg_y_neg_z
|
||||
dEQP-GLES2.functional.polygon_offset.default_displacement_with_units
|
||||
dEQP-GLES2.functional.polygon_offset.fixed16_displacement_with_units
|
||||
dEQP-GLES2.functional.rasterization.interpolation.basic.line_loop_wide
|
||||
dEQP-GLES2.functional.rasterization.interpolation.basic.line_strip_wide
|
||||
dEQP-GLES2.functional.rasterization.interpolation.basic.lines_wide
|
||||
dEQP-GLES2.functional.rasterization.interpolation.projected.line_loop_wide
|
||||
dEQP-GLES2.functional.rasterization.interpolation.projected.line_strip_wide
|
||||
dEQP-GLES2.functional.rasterization.interpolation.projected.lines_wide
|
||||
dEQP-GLES2.functional.rasterization.limits.points
|
||||
dEQP-GLES2.functional.rasterization.primitives.points
|
||||
dEQP-GLES3.functional.clipping.line.wide_line_clip_viewport_center
|
||||
dEQP-GLES3.functional.clipping.line.wide_line_clip_viewport_corner
|
||||
dEQP-GLES3.functional.clipping.point.wide_point_clip
|
||||
dEQP-GLES3.functional.clipping.point.wide_point_clip_viewport_center
|
||||
dEQP-GLES3.functional.clipping.point.wide_point_clip_viewport_corner
|
||||
dEQP-GLES3.functional.clipping.triangle_vertex.clip_two.clip_neg_y_neg_z_and_neg_x_neg_y_pos_z
|
||||
dEQP-GLES3.functional.clipping.triangle_vertex.clip_two.clip_pos_y_pos_z_and_neg_x_neg_y_neg_z
|
||||
dEQP-GLES3.functional.draw.random.124
|
||||
dEQP-GLES3.functional.fbo.depth.depth_test_clamp.depth24_stencil8
|
||||
dEQP-GLES3.functional.fbo.depth.depth_test_clamp.depth32f_stencil8
|
||||
dEQP-GLES3.functional.fbo.depth.depth_test_clamp.depth_component16
|
||||
dEQP-GLES3.functional.fbo.depth.depth_test_clamp.depth_component24
|
||||
dEQP-GLES3.functional.fbo.depth.depth_test_clamp.depth_component32f
|
||||
dEQP-GLES3.functional.fbo.depth.depth_write_clamp.depth32f_stencil8
|
||||
dEQP-GLES3.functional.fbo.depth.depth_write_clamp.depth_component32f
|
||||
dEQP-GLES3.functional.fbo.invalidate.sub.unbind_blit_msaa_color
|
||||
dEQP-GLES3.functional.fbo.invalidate.sub.unbind_blit_msaa_depth
|
||||
dEQP-GLES3.functional.fbo.invalidate.sub.unbind_blit_msaa_depth_stencil
|
||||
dEQP-GLES3.functional.fbo.invalidate.sub.unbind_blit_msaa_stencil
|
||||
dEQP-GLES3.functional.fbo.invalidate.whole.unbind_blit_msaa_color
|
||||
dEQP-GLES3.functional.fbo.invalidate.whole.unbind_blit_msaa_depth
|
||||
dEQP-GLES3.functional.fbo.invalidate.whole.unbind_blit_msaa_depth_stencil
|
||||
dEQP-GLES3.functional.fbo.invalidate.whole.unbind_blit_msaa_stencil
|
||||
dEQP-GLES3.functional.fbo.msaa.2_samples.depth24_stencil8
|
||||
dEQP-GLES3.functional.fbo.msaa.2_samples.depth32f_stencil8
|
||||
dEQP-GLES3.functional.fbo.msaa.2_samples.depth_component16
|
||||
dEQP-GLES3.functional.fbo.msaa.2_samples.depth_component24
|
||||
dEQP-GLES3.functional.fbo.msaa.2_samples.depth_component32f
|
||||
dEQP-GLES3.functional.fbo.msaa.2_samples.r11f_g11f_b10f
|
||||
dEQP-GLES3.functional.fbo.msaa.2_samples.r16f
|
||||
dEQP-GLES3.functional.fbo.msaa.2_samples.r8
|
||||
dEQP-GLES3.functional.fbo.msaa.2_samples.rg16f
|
||||
dEQP-GLES3.functional.fbo.msaa.2_samples.rg8
|
||||
dEQP-GLES3.functional.fbo.msaa.2_samples.rgb10_a2
|
||||
dEQP-GLES3.functional.fbo.msaa.2_samples.rgb565
|
||||
dEQP-GLES3.functional.fbo.msaa.2_samples.rgb5_a1
|
||||
dEQP-GLES3.functional.fbo.msaa.2_samples.rgb8
|
||||
dEQP-GLES3.functional.fbo.msaa.2_samples.rgba4
|
||||
dEQP-GLES3.functional.fbo.msaa.2_samples.rgba8
|
||||
dEQP-GLES3.functional.fbo.msaa.2_samples.srgb8_alpha8
|
||||
dEQP-GLES3.functional.fbo.msaa.2_samples.stencil_index8
|
||||
dEQP-GLES3.functional.fbo.msaa.4_samples.depth24_stencil8
|
||||
dEQP-GLES3.functional.fbo.msaa.4_samples.depth32f_stencil8
|
||||
dEQP-GLES3.functional.fbo.msaa.4_samples.depth_component16
|
||||
dEQP-GLES3.functional.fbo.msaa.4_samples.depth_component24
|
||||
dEQP-GLES3.functional.fbo.msaa.4_samples.depth_component32f
|
||||
dEQP-GLES3.functional.fbo.msaa.4_samples.r11f_g11f_b10f
|
||||
dEQP-GLES3.functional.fbo.msaa.4_samples.r16f
|
||||
dEQP-GLES3.functional.fbo.msaa.4_samples.r8
|
||||
dEQP-GLES3.functional.fbo.msaa.4_samples.rg16f
|
||||
dEQP-GLES3.functional.fbo.msaa.4_samples.rg8
|
||||
dEQP-GLES3.functional.fbo.msaa.4_samples.rgb10_a2
|
||||
dEQP-GLES3.functional.fbo.msaa.4_samples.rgb565
|
||||
dEQP-GLES3.functional.fbo.msaa.4_samples.rgb5_a1
|
||||
dEQP-GLES3.functional.fbo.msaa.4_samples.rgb8
|
||||
dEQP-GLES3.functional.fbo.msaa.4_samples.rgba4
|
||||
dEQP-GLES3.functional.fbo.msaa.4_samples.rgba8
|
||||
dEQP-GLES3.functional.fbo.msaa.4_samples.srgb8_alpha8
|
||||
dEQP-GLES3.functional.fbo.msaa.4_samples.stencil_index8
|
||||
dEQP-GLES3.functional.multisample.fbo_max_samples.proportionality_alpha_to_coverage
|
||||
dEQP-GLES3.functional.multisample.fbo_max_samples.proportionality_sample_coverage
|
||||
dEQP-GLES3.functional.multisample.fbo_max_samples.proportionality_sample_coverage_inverted
|
||||
dEQP-GLES3.functional.multisample.fbo_max_samples.sample_coverage_invert
|
||||
dEQP-GLES3.functional.negative_api.buffer.blit_framebuffer_multisample
|
||||
dEQP-GLES3.functional.negative_api.buffer.read_pixels_fbo_format_mismatch
|
||||
dEQP-GLES3.functional.polygon_offset.default_displacement_with_units
|
||||
dEQP-GLES3.functional.polygon_offset.fixed16_displacement_with_units
|
||||
dEQP-GLES3.functional.polygon_offset.fixed24_displacement_with_units
|
||||
dEQP-GLES3.functional.polygon_offset.float32_displacement_with_units
|
||||
dEQP-GLES3.functional.rasterization.fbo.rbo_multisample_max.interpolation.lines_wide
|
||||
dEQP-GLES3.functional.rasterization.fbo.rbo_multisample_max.primitives.lines_wide
|
||||
dEQP-GLES3.functional.rasterization.fbo.rbo_singlesample.interpolation.lines_wide
|
||||
dEQP-GLES3.functional.rasterization.fbo.rbo_singlesample.primitives.points
|
||||
dEQP-GLES3.functional.rasterization.fbo.texture_2d.interpolation.lines_wide
|
||||
dEQP-GLES3.functional.rasterization.fbo.texture_2d.primitives.points
|
||||
dEQP-GLES3.functional.rasterization.interpolation.basic.line_loop_wide
|
||||
dEQP-GLES3.functional.rasterization.interpolation.basic.line_strip_wide
|
||||
dEQP-GLES3.functional.rasterization.interpolation.basic.lines_wide
|
||||
dEQP-GLES3.functional.rasterization.interpolation.projected.line_loop_wide
|
||||
dEQP-GLES3.functional.rasterization.interpolation.projected.line_strip_wide
|
||||
dEQP-GLES3.functional.rasterization.interpolation.projected.lines_wide
|
||||
dEQP-GLES3.functional.rasterization.primitives.points
|
||||
dEQP-GLES3.functional.rasterizer_discard.basic.write_depth_points
|
||||
dEQP-GLES3.functional.rasterizer_discard.basic.write_stencil_points
|
||||
dEQP-GLES3.functional.rasterizer_discard.fbo.write_depth_points
|
||||
dEQP-GLES3.functional.rasterizer_discard.fbo.write_stencil_points
|
||||
dEQP-GLES3.functional.rasterizer_discard.scissor.write_depth_points
|
||||
dEQP-GLES3.functional.rasterizer_discard.scissor.write_stencil_points
|
||||
dEQP-GLES3.functional.shaders.derivate.dfdx.fastest.fbo_msaa4.float_highp
|
||||
dEQP-GLES3.functional.shaders.derivate.dfdx.fastest.fbo_msaa4.float_mediump
|
||||
dEQP-GLES3.functional.shaders.derivate.dfdx.fastest.fbo_msaa4.vec2_highp
|
||||
dEQP-GLES3.functional.shaders.derivate.dfdx.fastest.fbo_msaa4.vec2_mediump
|
||||
dEQP-GLES3.functional.shaders.derivate.dfdx.fastest.fbo_msaa4.vec3_highp
|
||||
dEQP-GLES3.functional.shaders.derivate.dfdx.fastest.fbo_msaa4.vec3_mediump
|
||||
dEQP-GLES3.functional.shaders.derivate.dfdx.fastest.fbo_msaa4.vec4_highp
|
||||
dEQP-GLES3.functional.shaders.derivate.dfdx.fastest.fbo_msaa4.vec4_mediump
|
||||
dEQP-GLES3.functional.shaders.derivate.dfdx.fbo_msaa2.float_highp
|
||||
dEQP-GLES3.functional.shaders.derivate.dfdx.fbo_msaa2.float_mediump
|
||||
dEQP-GLES3.functional.shaders.derivate.dfdx.fbo_msaa2.vec2_highp
|
||||
dEQP-GLES3.functional.shaders.derivate.dfdx.fbo_msaa2.vec2_mediump
|
||||
dEQP-GLES3.functional.shaders.derivate.dfdx.fbo_msaa2.vec3_highp
|
||||
dEQP-GLES3.functional.shaders.derivate.dfdx.fbo_msaa2.vec3_mediump
|
||||
dEQP-GLES3.functional.shaders.derivate.dfdx.fbo_msaa2.vec4_highp
|
||||
dEQP-GLES3.functional.shaders.derivate.dfdx.fbo_msaa2.vec4_mediump
|
||||
dEQP-GLES3.functional.shaders.derivate.dfdx.fbo_msaa4.float_highp
|
||||
dEQP-GLES3.functional.shaders.derivate.dfdx.fbo_msaa4.float_mediump
|
||||
dEQP-GLES3.functional.shaders.derivate.dfdx.fbo_msaa4.vec2_highp
|
||||
dEQP-GLES3.functional.shaders.derivate.dfdx.fbo_msaa4.vec2_mediump
|
||||
dEQP-GLES3.functional.shaders.derivate.dfdx.fbo_msaa4.vec3_highp
|
||||
dEQP-GLES3.functional.shaders.derivate.dfdx.fbo_msaa4.vec3_mediump
|
||||
dEQP-GLES3.functional.shaders.derivate.dfdx.fbo_msaa4.vec4_highp
|
||||
dEQP-GLES3.functional.shaders.derivate.dfdx.fbo_msaa4.vec4_mediump
|
||||
dEQP-GLES3.functional.shaders.derivate.dfdx.nicest.fbo_msaa4.float_highp
|
||||
dEQP-GLES3.functional.shaders.derivate.dfdx.nicest.fbo_msaa4.float_mediump
|
||||
dEQP-GLES3.functional.shaders.derivate.dfdx.nicest.fbo_msaa4.vec2_highp
|
||||
dEQP-GLES3.functional.shaders.derivate.dfdx.nicest.fbo_msaa4.vec2_mediump
|
||||
dEQP-GLES3.functional.shaders.derivate.dfdx.nicest.fbo_msaa4.vec3_highp
|
||||
dEQP-GLES3.functional.shaders.derivate.dfdx.nicest.fbo_msaa4.vec3_mediump
|
||||
dEQP-GLES3.functional.shaders.derivate.dfdx.nicest.fbo_msaa4.vec4_highp
|
||||
dEQP-GLES3.functional.shaders.derivate.dfdx.nicest.fbo_msaa4.vec4_mediump
|
||||
dEQP-GLES3.functional.shaders.derivate.dfdx.texture.msaa4.float_highp
|
||||
dEQP-GLES3.functional.shaders.derivate.dfdx.texture.msaa4.float_mediump
|
||||
dEQP-GLES3.functional.shaders.derivate.dfdx.texture.msaa4.vec2_highp
|
||||
dEQP-GLES3.functional.shaders.derivate.dfdx.texture.msaa4.vec2_mediump
|
||||
dEQP-GLES3.functional.shaders.derivate.dfdx.texture.msaa4.vec3_highp
|
||||
dEQP-GLES3.functional.shaders.derivate.dfdx.texture.msaa4.vec3_mediump
|
||||
dEQP-GLES3.functional.shaders.derivate.dfdx.texture.msaa4.vec4_highp
|
||||
dEQP-GLES3.functional.shaders.derivate.dfdx.texture.msaa4.vec4_mediump
|
||||
dEQP-GLES3.functional.shaders.derivate.dfdy.fastest.fbo_msaa4.float_highp
|
||||
dEQP-GLES3.functional.shaders.derivate.dfdy.fastest.fbo_msaa4.float_mediump
|
||||
dEQP-GLES3.functional.shaders.derivate.dfdy.fastest.fbo_msaa4.vec2_highp
|
||||
dEQP-GLES3.functional.shaders.derivate.dfdy.fastest.fbo_msaa4.vec2_mediump
|
||||
dEQP-GLES3.functional.shaders.derivate.dfdy.fastest.fbo_msaa4.vec3_highp
|
||||
dEQP-GLES3.functional.shaders.derivate.dfdy.fastest.fbo_msaa4.vec3_mediump
|
||||
dEQP-GLES3.functional.shaders.derivate.dfdy.fastest.fbo_msaa4.vec4_highp
|
||||
dEQP-GLES3.functional.shaders.derivate.dfdy.fastest.fbo_msaa4.vec4_mediump
|
||||
dEQP-GLES3.functional.shaders.derivate.dfdy.fbo_msaa2.float_highp
|
||||
dEQP-GLES3.functional.shaders.derivate.dfdy.fbo_msaa2.float_mediump
|
||||
dEQP-GLES3.functional.shaders.derivate.dfdy.fbo_msaa2.vec2_highp
|
||||
dEQP-GLES3.functional.shaders.derivate.dfdy.fbo_msaa2.vec2_mediump
|
||||
dEQP-GLES3.functional.shaders.derivate.dfdy.fbo_msaa2.vec3_highp
|
||||
dEQP-GLES3.functional.shaders.derivate.dfdy.fbo_msaa2.vec3_mediump
|
||||
dEQP-GLES3.functional.shaders.derivate.dfdy.fbo_msaa2.vec4_highp
|
||||
dEQP-GLES3.functional.shaders.derivate.dfdy.fbo_msaa2.vec4_mediump
|
||||
dEQP-GLES3.functional.shaders.derivate.dfdy.fbo_msaa4.float_highp
|
||||
dEQP-GLES3.functional.shaders.derivate.dfdy.fbo_msaa4.float_mediump
|
||||
dEQP-GLES3.functional.shaders.derivate.dfdy.fbo_msaa4.vec2_highp
|
||||
dEQP-GLES3.functional.shaders.derivate.dfdy.fbo_msaa4.vec2_mediump
|
||||
dEQP-GLES3.functional.shaders.derivate.dfdy.fbo_msaa4.vec3_highp
|
||||
dEQP-GLES3.functional.shaders.derivate.dfdy.fbo_msaa4.vec3_mediump
|
||||
dEQP-GLES3.functional.shaders.derivate.dfdy.fbo_msaa4.vec4_highp
|
||||
dEQP-GLES3.functional.shaders.derivate.dfdy.fbo_msaa4.vec4_mediump
|
||||
dEQP-GLES3.functional.shaders.derivate.dfdy.nicest.fbo_msaa4.float_highp
|
||||
dEQP-GLES3.functional.shaders.derivate.dfdy.nicest.fbo_msaa4.float_mediump
|
||||
dEQP-GLES3.functional.shaders.derivate.dfdy.nicest.fbo_msaa4.vec2_highp
|
||||
dEQP-GLES3.functional.shaders.derivate.dfdy.nicest.fbo_msaa4.vec2_mediump
|
||||
dEQP-GLES3.functional.shaders.derivate.dfdy.nicest.fbo_msaa4.vec3_highp
|
||||
dEQP-GLES3.functional.shaders.derivate.dfdy.nicest.fbo_msaa4.vec3_mediump
|
||||
dEQP-GLES3.functional.shaders.derivate.dfdy.nicest.fbo_msaa4.vec4_highp
|
||||
dEQP-GLES3.functional.shaders.derivate.dfdy.nicest.fbo_msaa4.vec4_mediump
|
||||
dEQP-GLES3.functional.shaders.derivate.dfdy.texture.msaa4.float_highp
|
||||
dEQP-GLES3.functional.shaders.derivate.dfdy.texture.msaa4.float_mediump
|
||||
dEQP-GLES3.functional.shaders.derivate.dfdy.texture.msaa4.vec2_highp
|
||||
dEQP-GLES3.functional.shaders.derivate.dfdy.texture.msaa4.vec2_mediump
|
||||
dEQP-GLES3.functional.shaders.derivate.dfdy.texture.msaa4.vec3_highp
|
||||
dEQP-GLES3.functional.shaders.derivate.dfdy.texture.msaa4.vec3_mediump
|
||||
dEQP-GLES3.functional.shaders.derivate.dfdy.texture.msaa4.vec4_highp
|
||||
dEQP-GLES3.functional.shaders.derivate.dfdy.texture.msaa4.vec4_mediump
|
||||
dEQP-GLES3.functional.shaders.derivate.fwidth.fastest.fbo_msaa4.float_highp
|
||||
dEQP-GLES3.functional.shaders.derivate.fwidth.fastest.fbo_msaa4.float_mediump
|
||||
dEQP-GLES3.functional.shaders.derivate.fwidth.fastest.fbo_msaa4.vec2_highp
|
||||
dEQP-GLES3.functional.shaders.derivate.fwidth.fastest.fbo_msaa4.vec2_mediump
|
||||
dEQP-GLES3.functional.shaders.derivate.fwidth.fastest.fbo_msaa4.vec3_highp
|
||||
dEQP-GLES3.functional.shaders.derivate.fwidth.fastest.fbo_msaa4.vec3_mediump
|
||||
dEQP-GLES3.functional.shaders.derivate.fwidth.fastest.fbo_msaa4.vec4_highp
|
||||
dEQP-GLES3.functional.shaders.derivate.fwidth.fastest.fbo_msaa4.vec4_mediump
|
||||
dEQP-GLES3.functional.shaders.derivate.fwidth.fbo_msaa2.float_highp
|
||||
dEQP-GLES3.functional.shaders.derivate.fwidth.fbo_msaa2.float_mediump
|
||||
dEQP-GLES3.functional.shaders.derivate.fwidth.fbo_msaa2.vec2_highp
|
||||
dEQP-GLES3.functional.shaders.derivate.fwidth.fbo_msaa2.vec2_mediump
|
||||
dEQP-GLES3.functional.shaders.derivate.fwidth.fbo_msaa2.vec3_highp
|
||||
dEQP-GLES3.functional.shaders.derivate.fwidth.fbo_msaa2.vec3_mediump
|
||||
dEQP-GLES3.functional.shaders.derivate.fwidth.fbo_msaa2.vec4_highp
|
||||
dEQP-GLES3.functional.shaders.derivate.fwidth.fbo_msaa2.vec4_mediump
|
||||
dEQP-GLES3.functional.shaders.derivate.fwidth.fbo_msaa4.float_highp
|
||||
dEQP-GLES3.functional.shaders.derivate.fwidth.fbo_msaa4.float_mediump
|
||||
dEQP-GLES3.functional.shaders.derivate.fwidth.fbo_msaa4.vec2_highp
|
||||
dEQP-GLES3.functional.shaders.derivate.fwidth.fbo_msaa4.vec2_mediump
|
||||
dEQP-GLES3.functional.shaders.derivate.fwidth.fbo_msaa4.vec3_highp
|
||||
dEQP-GLES3.functional.shaders.derivate.fwidth.fbo_msaa4.vec3_mediump
|
||||
dEQP-GLES3.functional.shaders.derivate.fwidth.fbo_msaa4.vec4_highp
|
||||
dEQP-GLES3.functional.shaders.derivate.fwidth.fbo_msaa4.vec4_mediump
|
||||
dEQP-GLES3.functional.shaders.derivate.fwidth.nicest.fbo_msaa4.float_highp
|
||||
dEQP-GLES3.functional.shaders.derivate.fwidth.nicest.fbo_msaa4.float_mediump
|
||||
dEQP-GLES3.functional.shaders.derivate.fwidth.nicest.fbo_msaa4.vec2_highp
|
||||
dEQP-GLES3.functional.shaders.derivate.fwidth.nicest.fbo_msaa4.vec2_mediump
|
||||
dEQP-GLES3.functional.shaders.derivate.fwidth.nicest.fbo_msaa4.vec3_highp
|
||||
dEQP-GLES3.functional.shaders.derivate.fwidth.nicest.fbo_msaa4.vec3_mediump
|
||||
dEQP-GLES3.functional.shaders.derivate.fwidth.nicest.fbo_msaa4.vec4_highp
|
||||
dEQP-GLES3.functional.shaders.derivate.fwidth.nicest.fbo_msaa4.vec4_mediump
|
||||
dEQP-GLES3.functional.shaders.derivate.fwidth.texture.msaa4.float_highp
|
||||
dEQP-GLES3.functional.shaders.derivate.fwidth.texture.msaa4.float_mediump
|
||||
dEQP-GLES3.functional.shaders.derivate.fwidth.texture.msaa4.vec2_highp
|
||||
dEQP-GLES3.functional.shaders.derivate.fwidth.texture.msaa4.vec2_mediump
|
||||
dEQP-GLES3.functional.shaders.derivate.fwidth.texture.msaa4.vec3_highp
|
||||
dEQP-GLES3.functional.shaders.derivate.fwidth.texture.msaa4.vec3_mediump
|
||||
dEQP-GLES3.functional.shaders.derivate.fwidth.texture.msaa4.vec4_highp
|
||||
dEQP-GLES3.functional.shaders.derivate.fwidth.texture.msaa4.vec4_mediump
|
||||
dEQP-GLES3.functional.state_query.integers.max_samples_getfloat
|
||||
dEQP-GLES3.functional.state_query.integers.max_samples_getinteger64
|
||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_linear_clamp_clamp_mirror
|
||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_linear_clamp_clamp_repeat
|
||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_linear_clamp_mirror_mirror
|
||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_linear_clamp_mirror_repeat
|
||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_linear_clamp_repeat_mirror
|
||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_linear_clamp_repeat_repeat
|
||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_linear_mirror_clamp_mirror
|
||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_linear_mirror_clamp_repeat
|
||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_linear_mirror_mirror_mirror
|
||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_linear_mirror_mirror_repeat
|
||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_linear_mirror_repeat_mirror
|
||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_linear_mirror_repeat_repeat
|
||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_linear_repeat_clamp_mirror
|
||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_linear_repeat_clamp_repeat
|
||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_linear_repeat_mirror_mirror
|
||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_linear_repeat_mirror_repeat
|
||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_linear_repeat_repeat_mirror
|
||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_linear_repeat_repeat_repeat
|
||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_mipmap_linear_linear_clamp_clamp_repeat
|
||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_mipmap_linear_linear_clamp_mirror_repeat
|
||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_mipmap_linear_linear_clamp_repeat_repeat
|
||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_mipmap_linear_linear_mirror_clamp_repeat
|
||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_mipmap_linear_linear_mirror_mirror_repeat
|
||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_mipmap_linear_linear_mirror_repeat_repeat
|
||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_mipmap_linear_linear_repeat_clamp_mirror
|
||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_mipmap_linear_linear_repeat_clamp_repeat
|
||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_mipmap_linear_linear_repeat_mirror_mirror
|
||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_mipmap_linear_linear_repeat_mirror_repeat
|
||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_mipmap_linear_linear_repeat_repeat_mirror
|
||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_mipmap_linear_linear_repeat_repeat_repeat
|
||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_mipmap_linear_nearest_repeat_clamp_mirror
|
||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_mipmap_linear_nearest_repeat_clamp_repeat
|
||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_mipmap_linear_nearest_repeat_mirror_mirror
|
||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_mipmap_linear_nearest_repeat_mirror_repeat
|
||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_mipmap_linear_nearest_repeat_repeat_mirror
|
||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_mipmap_linear_nearest_repeat_repeat_repeat
|
||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_mipmap_nearest_linear_clamp_clamp_repeat
|
||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_mipmap_nearest_linear_clamp_mirror_repeat
|
||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_mipmap_nearest_linear_clamp_repeat_repeat
|
||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_mipmap_nearest_linear_mirror_clamp_repeat
|
||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_mipmap_nearest_linear_mirror_mirror_repeat
|
||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_mipmap_nearest_linear_mirror_repeat_repeat
|
||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_mipmap_nearest_linear_repeat_clamp_mirror
|
||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_mipmap_nearest_linear_repeat_clamp_repeat
|
||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_mipmap_nearest_linear_repeat_mirror_mirror
|
||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_mipmap_nearest_linear_repeat_mirror_repeat
|
||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_mipmap_nearest_linear_repeat_repeat_mirror
|
||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_mipmap_nearest_linear_repeat_repeat_repeat
|
||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_mipmap_nearest_nearest_repeat_clamp_mirror
|
||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_mipmap_nearest_nearest_repeat_clamp_repeat
|
||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_mipmap_nearest_nearest_repeat_mirror_mirror
|
||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_mipmap_nearest_nearest_repeat_mirror_repeat
|
||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_mipmap_nearest_nearest_repeat_repeat_mirror
|
||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_mipmap_nearest_nearest_repeat_repeat_repeat
|
||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_nearest_clamp_clamp_mirror
|
||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_nearest_clamp_clamp_repeat
|
||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_nearest_clamp_mirror_mirror
|
||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_nearest_clamp_mirror_repeat
|
||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_nearest_clamp_repeat_mirror
|
||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_nearest_clamp_repeat_repeat
|
||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_nearest_mirror_clamp_mirror
|
||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_nearest_mirror_clamp_repeat
|
||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_nearest_mirror_mirror_mirror
|
||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_nearest_mirror_mirror_repeat
|
||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_nearest_mirror_repeat_mirror
|
||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_nearest_mirror_repeat_repeat
|
||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_nearest_repeat_clamp_mirror
|
||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_nearest_repeat_clamp_repeat
|
||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_nearest_repeat_mirror_mirror
|
||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_nearest_repeat_mirror_repeat
|
||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_nearest_repeat_repeat_mirror
|
||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_nearest_repeat_repeat_repeat
|
||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_linear_clamp_clamp_repeat
|
||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_linear_clamp_mirror_repeat
|
||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_linear_clamp_repeat_repeat
|
||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_linear_mirror_clamp_repeat
|
||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_linear_mirror_mirror_repeat
|
||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_linear_mirror_repeat_repeat
|
||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_linear_repeat_clamp_mirror
|
||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_linear_repeat_clamp_repeat
|
||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_linear_repeat_mirror_mirror
|
||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_linear_repeat_mirror_repeat
|
||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_linear_repeat_repeat_mirror
|
||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_linear_repeat_repeat_repeat
|
||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_mipmap_linear_linear_clamp_clamp_repeat
|
||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_mipmap_linear_linear_clamp_mirror_repeat
|
||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_mipmap_linear_linear_clamp_repeat_repeat
|
||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_mipmap_linear_linear_mirror_clamp_repeat
|
||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_mipmap_linear_linear_mirror_mirror_repeat
|
||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_mipmap_linear_linear_mirror_repeat_repeat
|
||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_mipmap_linear_linear_repeat_clamp_mirror
|
||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_mipmap_linear_linear_repeat_clamp_repeat
|
||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_mipmap_linear_linear_repeat_mirror_mirror
|
||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_mipmap_linear_linear_repeat_mirror_repeat
|
||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_mipmap_linear_linear_repeat_repeat_mirror
|
||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_mipmap_linear_linear_repeat_repeat_repeat
|
||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_mipmap_nearest_linear_clamp_clamp_repeat
|
||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_mipmap_nearest_linear_clamp_mirror_repeat
|
||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_mipmap_nearest_linear_clamp_repeat_repeat
|
||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_mipmap_nearest_linear_mirror_clamp_repeat
|
||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_mipmap_nearest_linear_mirror_mirror_repeat
|
||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_mipmap_nearest_linear_mirror_repeat_repeat
|
||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_mipmap_nearest_linear_repeat_clamp_mirror
|
||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_mipmap_nearest_linear_repeat_clamp_repeat
|
||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_mipmap_nearest_linear_repeat_mirror_mirror
|
||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_mipmap_nearest_linear_repeat_mirror_repeat
|
||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_mipmap_nearest_linear_repeat_repeat_mirror
|
||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_mipmap_nearest_linear_repeat_repeat_repeat
|
||||
dEQP-GLES3.functional.texture.filtering.3d.formats.r11f_g11f_b10f_linear
|
||||
dEQP-GLES3.functional.texture.filtering.3d.formats.r11f_g11f_b10f_linear_mipmap_linear
|
||||
dEQP-GLES3.functional.texture.filtering.3d.formats.r11f_g11f_b10f_linear_mipmap_nearest
|
||||
dEQP-GLES3.functional.texture.filtering.3d.formats.r11f_g11f_b10f_nearest_mipmap_linear
|
||||
dEQP-GLES3.functional.texture.filtering.3d.formats.r11f_g11f_b10f_nearest_mipmap_nearest
|
||||
dEQP-GLES3.functional.texture.filtering.3d.formats.rgb10_a2_linear
|
||||
dEQP-GLES3.functional.texture.filtering.3d.formats.rgb10_a2_linear_mipmap_linear
|
||||
dEQP-GLES3.functional.texture.filtering.3d.formats.rgb10_a2_linear_mipmap_nearest
|
||||
dEQP-GLES3.functional.texture.filtering.3d.formats.rgb10_a2_nearest_mipmap_linear
|
||||
dEQP-GLES3.functional.texture.filtering.3d.formats.rgb10_a2_nearest_mipmap_nearest
|
||||
dEQP-GLES3.functional.texture.filtering.3d.formats.rgb565_linear
|
||||
dEQP-GLES3.functional.texture.filtering.3d.formats.rgb565_linear_mipmap_linear
|
||||
dEQP-GLES3.functional.texture.filtering.3d.formats.rgb565_linear_mipmap_nearest
|
||||
dEQP-GLES3.functional.texture.filtering.3d.formats.rgb565_nearest_mipmap_linear
|
||||
dEQP-GLES3.functional.texture.filtering.3d.formats.rgb565_nearest_mipmap_nearest
|
||||
dEQP-GLES3.functional.texture.filtering.3d.formats.rgb5_a1_linear
|
||||
dEQP-GLES3.functional.texture.filtering.3d.formats.rgb5_a1_linear_mipmap_linear
|
||||
dEQP-GLES3.functional.texture.filtering.3d.formats.rgb5_a1_linear_mipmap_nearest
|
||||
dEQP-GLES3.functional.texture.filtering.3d.formats.rgb5_a1_nearest_mipmap_linear
|
||||
dEQP-GLES3.functional.texture.filtering.3d.formats.rgb5_a1_nearest_mipmap_nearest
|
||||
dEQP-GLES3.functional.texture.filtering.3d.formats.rgb9_e5_linear
|
||||
dEQP-GLES3.functional.texture.filtering.3d.formats.rgb9_e5_linear_mipmap_linear
|
||||
dEQP-GLES3.functional.texture.filtering.3d.formats.rgb9_e5_linear_mipmap_nearest
|
||||
dEQP-GLES3.functional.texture.filtering.3d.formats.rgb9_e5_nearest_mipmap_linear
|
||||
dEQP-GLES3.functional.texture.filtering.3d.formats.rgb9_e5_nearest_mipmap_nearest
|
||||
dEQP-GLES3.functional.texture.filtering.3d.formats.rgba16f_linear
|
||||
dEQP-GLES3.functional.texture.filtering.3d.formats.rgba16f_linear_mipmap_linear
|
||||
dEQP-GLES3.functional.texture.filtering.3d.formats.rgba16f_linear_mipmap_nearest
|
||||
dEQP-GLES3.functional.texture.filtering.3d.formats.rgba16f_nearest_mipmap_linear
|
||||
dEQP-GLES3.functional.texture.filtering.3d.formats.rgba16f_nearest_mipmap_nearest
|
||||
dEQP-GLES3.functional.texture.filtering.3d.formats.rgba4_linear
|
||||
dEQP-GLES3.functional.texture.filtering.3d.formats.rgba4_linear_mipmap_linear
|
||||
dEQP-GLES3.functional.texture.filtering.3d.formats.rgba4_linear_mipmap_nearest
|
||||
dEQP-GLES3.functional.texture.filtering.3d.formats.rgba4_nearest_mipmap_linear
|
||||
dEQP-GLES3.functional.texture.filtering.3d.formats.rgba4_nearest_mipmap_nearest
|
||||
dEQP-GLES3.functional.texture.filtering.3d.formats.rgba8_linear
|
||||
dEQP-GLES3.functional.texture.filtering.3d.formats.rgba8_linear_mipmap_linear
|
||||
dEQP-GLES3.functional.texture.filtering.3d.formats.rgba8_linear_mipmap_nearest
|
||||
dEQP-GLES3.functional.texture.filtering.3d.formats.rgba8_nearest_mipmap_linear
|
||||
dEQP-GLES3.functional.texture.filtering.3d.formats.rgba8_nearest_mipmap_nearest
|
||||
dEQP-GLES3.functional.texture.filtering.3d.formats.rgba8_snorm_linear
|
||||
dEQP-GLES3.functional.texture.filtering.3d.formats.rgba8_snorm_linear_mipmap_linear
|
||||
dEQP-GLES3.functional.texture.filtering.3d.formats.rgba8_snorm_linear_mipmap_nearest
|
||||
dEQP-GLES3.functional.texture.filtering.3d.formats.rgba8_snorm_nearest_mipmap_linear
|
||||
dEQP-GLES3.functional.texture.filtering.3d.formats.rgba8_snorm_nearest_mipmap_nearest
|
||||
dEQP-GLES3.functional.texture.filtering.3d.formats.srgb8_alpha8_linear
|
||||
dEQP-GLES3.functional.texture.filtering.3d.formats.srgb8_alpha8_linear_mipmap_linear
|
||||
dEQP-GLES3.functional.texture.filtering.3d.formats.srgb8_alpha8_linear_mipmap_nearest
|
||||
dEQP-GLES3.functional.texture.filtering.3d.formats.srgb8_alpha8_nearest_mipmap_linear
|
||||
dEQP-GLES3.functional.texture.filtering.3d.formats.srgb8_alpha8_nearest_mipmap_nearest
|
||||
dEQP-GLES3.functional.texture.filtering.3d.formats.srgb_r8_linear
|
||||
dEQP-GLES3.functional.texture.filtering.3d.formats.srgb_r8_linear_mipmap_linear
|
||||
dEQP-GLES3.functional.texture.filtering.3d.formats.srgb_r8_linear_mipmap_nearest
|
||||
dEQP-GLES3.functional.texture.filtering.3d.formats.srgb_r8_nearest_mipmap_linear
|
||||
dEQP-GLES3.functional.texture.filtering.3d.formats.srgb_r8_nearest_mipmap_nearest
|
||||
dEQP-GLES3.functional.texture.filtering.3d.sizes.128x32x64_linear
|
||||
dEQP-GLES3.functional.texture.filtering.3d.sizes.128x32x64_linear_mipmap_linear
|
||||
dEQP-GLES3.functional.texture.filtering.3d.sizes.128x32x64_linear_mipmap_nearest
|
||||
dEQP-GLES3.functional.texture.filtering.3d.sizes.128x32x64_nearest_mipmap_linear
|
||||
dEQP-GLES3.functional.texture.filtering.3d.sizes.128x32x64_nearest_mipmap_nearest
|
||||
dEQP-GLES3.functional.texture.filtering.3d.sizes.63x63x63_linear
|
||||
dEQP-GLES3.functional.texture.filtering.3d.sizes.63x63x63_linear_mipmap_linear
|
||||
dEQP-GLES3.functional.texture.filtering.3d.sizes.63x63x63_linear_mipmap_nearest
|
||||
dEQP-GLES3.functional.texture.filtering.3d.sizes.63x63x63_nearest_mipmap_linear
|
||||
dEQP-GLES3.functional.texture.filtering.3d.sizes.63x63x63_nearest_mipmap_nearest
|
||||
dEQP-GLES3.functional.texture.vertex.3d.filtering.linear_linear_clamp
|
||||
dEQP-GLES3.functional.texture.vertex.3d.filtering.linear_linear_mirror
|
||||
dEQP-GLES3.functional.texture.vertex.3d.filtering.linear_linear_repeat
|
||||
dEQP-GLES3.functional.texture.vertex.3d.filtering.linear_mipmap_linear_linear_clamp
|
||||
dEQP-GLES3.functional.texture.vertex.3d.filtering.linear_mipmap_linear_linear_mirror
|
||||
dEQP-GLES3.functional.texture.vertex.3d.filtering.linear_mipmap_linear_linear_repeat
|
||||
dEQP-GLES3.functional.texture.vertex.3d.filtering.linear_mipmap_linear_nearest_clamp
|
||||
dEQP-GLES3.functional.texture.vertex.3d.filtering.linear_mipmap_linear_nearest_mirror
|
||||
dEQP-GLES3.functional.texture.vertex.3d.filtering.linear_mipmap_linear_nearest_repeat
|
||||
dEQP-GLES3.functional.texture.vertex.3d.filtering.linear_mipmap_nearest_linear_repeat
|
||||
dEQP-GLES3.functional.texture.vertex.3d.filtering.linear_nearest_clamp
|
||||
dEQP-GLES3.functional.texture.vertex.3d.filtering.linear_nearest_mirror
|
||||
dEQP-GLES3.functional.texture.vertex.3d.filtering.linear_nearest_repeat
|
||||
dEQP-GLES3.functional.texture.vertex.3d.filtering.nearest_linear_repeat
|
||||
dEQP-GLES3.functional.texture.vertex.3d.filtering.nearest_mipmap_linear_linear_repeat
|
||||
dEQP-GLES3.functional.texture.vertex.3d.filtering.nearest_mipmap_nearest_linear_repeat
|
||||
dEQP-GLES3.functional.texture.vertex.3d.wrap.clamp_clamp_clamp
|
||||
dEQP-GLES3.functional.texture.vertex.3d.wrap.clamp_clamp_mirror
|
||||
dEQP-GLES3.functional.texture.vertex.3d.wrap.clamp_clamp_repeat
|
||||
dEQP-GLES3.functional.texture.vertex.3d.wrap.clamp_mirror_mirror
|
||||
dEQP-GLES3.functional.texture.vertex.3d.wrap.clamp_mirror_repeat
|
||||
dEQP-GLES3.functional.texture.vertex.3d.wrap.clamp_repeat_mirror
|
||||
dEQP-GLES3.functional.texture.vertex.3d.wrap.clamp_repeat_repeat
|
||||
dEQP-GLES3.functional.texture.vertex.3d.wrap.mirror_clamp_clamp
|
||||
dEQP-GLES3.functional.texture.vertex.3d.wrap.mirror_clamp_mirror
|
||||
dEQP-GLES3.functional.texture.vertex.3d.wrap.mirror_clamp_repeat
|
||||
dEQP-GLES3.functional.texture.vertex.3d.wrap.mirror_mirror_mirror
|
||||
dEQP-GLES3.functional.texture.vertex.3d.wrap.mirror_mirror_repeat
|
||||
dEQP-GLES3.functional.texture.vertex.3d.wrap.mirror_repeat_mirror
|
||||
dEQP-GLES3.functional.texture.vertex.3d.wrap.mirror_repeat_repeat
|
||||
dEQP-GLES3.functional.texture.vertex.3d.wrap.repeat_clamp_clamp
|
||||
dEQP-GLES3.functional.texture.vertex.3d.wrap.repeat_clamp_mirror
|
||||
dEQP-GLES3.functional.texture.vertex.3d.wrap.repeat_clamp_repeat
|
||||
dEQP-GLES3.functional.texture.vertex.3d.wrap.repeat_mirror_clamp
|
||||
dEQP-GLES3.functional.texture.vertex.3d.wrap.repeat_mirror_mirror
|
||||
dEQP-GLES3.functional.texture.vertex.3d.wrap.repeat_mirror_repeat
|
||||
dEQP-GLES3.functional.texture.vertex.3d.wrap.repeat_repeat_clamp
|
||||
dEQP-GLES3.functional.texture.vertex.3d.wrap.repeat_repeat_mirror
|
||||
dEQP-GLES3.functional.texture.vertex.3d.wrap.repeat_repeat_repeat
|
||||
dEQP-GLES3.functional.texture.wrap.astc_8x8.repeat_repeat_linear_divisible
|
||||
dEQP-GLES3.functional.texture.wrap.astc_8x8.repeat_repeat_linear_not_divisible
|
||||
dEQP-GLES3.functional.texture.wrap.astc_8x8_srgb.repeat_repeat_linear_divisible
|
||||
dEQP-GLES3.functional.texture.wrap.astc_8x8_srgb.repeat_repeat_linear_not_divisible
|
||||
dEQP-GLES3.functional.vertex_arrays.single_attribute.normalize.int2_10_10_10.components4_quads1
|
||||
dEQP-GLES3.functional.vertex_arrays.single_attribute.normalize.int2_10_10_10.components4_quads256
|
||||
dEQP-GLES31.functional.debug.error_filters.case_29
|
||||
dEQP-GLES31.functional.debug.negative_coverage.callbacks.buffer.read_pixels_fbo_format_mismatch
|
||||
dEQP-GLES31.functional.debug.negative_coverage.get_error.buffer.blit_framebuffer_multisample
|
||||
dEQP-GLES31.functional.debug.negative_coverage.get_error.buffer.read_pixels_fbo_format_mismatch
|
||||
dEQP-GLES31.functional.debug.negative_coverage.log.buffer.read_pixels_fbo_format_mismatch
|
||||
dEQP-GLES31.functional.draw_base_vertex.draw_elements_instanced_base_vertex.line_loop.instanced_attributes
|
||||
dEQP-GLES31.functional.draw_buffers_indexed.overwrite_indexed.common_color_mask_buffer_color_mask
|
||||
dEQP-GLES31.functional.draw_buffers_indexed.random.max_implementation_draw_buffers.0
|
||||
dEQP-GLES31.functional.draw_buffers_indexed.random.max_implementation_draw_buffers.1
|
||||
dEQP-GLES31.functional.draw_buffers_indexed.random.max_implementation_draw_buffers.10
|
||||
dEQP-GLES31.functional.draw_buffers_indexed.random.max_implementation_draw_buffers.11
|
||||
dEQP-GLES31.functional.draw_buffers_indexed.random.max_implementation_draw_buffers.12
|
||||
dEQP-GLES31.functional.draw_buffers_indexed.random.max_implementation_draw_buffers.14
|
||||
dEQP-GLES31.functional.draw_buffers_indexed.random.max_implementation_draw_buffers.16
|
||||
dEQP-GLES31.functional.draw_buffers_indexed.random.max_implementation_draw_buffers.17
|
||||
dEQP-GLES31.functional.draw_buffers_indexed.random.max_implementation_draw_buffers.19
|
||||
dEQP-GLES31.functional.draw_buffers_indexed.random.max_implementation_draw_buffers.2
|
||||
dEQP-GLES31.functional.draw_buffers_indexed.random.max_implementation_draw_buffers.3
|
||||
dEQP-GLES31.functional.draw_buffers_indexed.random.max_implementation_draw_buffers.4
|
||||
dEQP-GLES31.functional.draw_buffers_indexed.random.max_implementation_draw_buffers.5
|
||||
dEQP-GLES31.functional.draw_buffers_indexed.random.max_implementation_draw_buffers.6
|
||||
dEQP-GLES31.functional.draw_buffers_indexed.random.max_implementation_draw_buffers.7
|
||||
dEQP-GLES31.functional.draw_buffers_indexed.random.max_implementation_draw_buffers.8
|
||||
dEQP-GLES31.functional.draw_buffers_indexed.random.max_implementation_draw_buffers.9
|
||||
dEQP-GLES31.functional.draw_buffers_indexed.random.max_required_draw_buffers.0
|
||||
dEQP-GLES31.functional.draw_buffers_indexed.random.max_required_draw_buffers.1
|
||||
dEQP-GLES31.functional.draw_buffers_indexed.random.max_required_draw_buffers.14
|
||||
dEQP-GLES31.functional.draw_buffers_indexed.random.max_required_draw_buffers.15
|
||||
dEQP-GLES31.functional.draw_buffers_indexed.random.max_required_draw_buffers.16
|
||||
dEQP-GLES31.functional.draw_buffers_indexed.random.max_required_draw_buffers.17
|
||||
dEQP-GLES31.functional.draw_buffers_indexed.random.max_required_draw_buffers.19
|
||||
dEQP-GLES31.functional.draw_buffers_indexed.random.max_required_draw_buffers.2
|
||||
dEQP-GLES31.functional.draw_buffers_indexed.random.max_required_draw_buffers.4
|
||||
dEQP-GLES31.functional.draw_buffers_indexed.random.max_required_draw_buffers.5
|
||||
dEQP-GLES31.functional.draw_buffers_indexed.random.max_required_draw_buffers.7
|
||||
dEQP-GLES31.functional.draw_buffers_indexed.random.max_required_draw_buffers.9
|
||||
dEQP-GLES31.functional.draw_indirect.draw_arrays_indirect.line_strip.multiple_attributes
|
||||
dEQP-GLES31.functional.fbo.no_attachments.interaction.17x512ms4_default_16x16ms2
|
||||
dEQP-GLES31.functional.fbo.no_attachments.interaction.1x1ms0_default_2048x2048ms4
|
||||
dEQP-GLES31.functional.fbo.no_attachments.interaction.2048x2048ms4_default_1x1ms0
|
||||
dEQP-GLES31.functional.fbo.no_attachments.interaction.256x256ms0_default_512x512ms2
|
||||
dEQP-GLES31.functional.fbo.no_attachments.interaction.256x256ms2_default_128x512ms0
|
||||
dEQP-GLES31.functional.fbo.no_attachments.multisample.samples2
|
||||
dEQP-GLES31.functional.fbo.no_attachments.multisample.samples3
|
||||
dEQP-GLES31.functional.fbo.no_attachments.multisample.samples4
|
||||
dEQP-GLES31.functional.fbo.no_attachments.random.1
|
||||
dEQP-GLES31.functional.fbo.no_attachments.random.11
|
||||
dEQP-GLES31.functional.fbo.no_attachments.random.14
|
||||
dEQP-GLES31.functional.fbo.no_attachments.random.15
|
||||
dEQP-GLES31.functional.fbo.no_attachments.random.4
|
||||
dEQP-GLES31.functional.fbo.no_attachments.random.9
|
||||
dEQP-GLES31.functional.geometry_shading.query.primitives_generated_amplification
|
||||
dEQP-GLES31.functional.geometry_shading.query.primitives_generated_instanced
|
||||
dEQP-GLES31.functional.geometry_shading.query.primitives_generated_no_amplification
|
||||
dEQP-GLES31.functional.geometry_shading.query.primitives_generated_no_geometry
|
||||
dEQP-GLES31.functional.geometry_shading.query.primitives_generated_partial_primitives
|
||||
dEQP-GLES31.functional.image_load_store.early_fragment_tests.early_fragment_tests_stencil
|
||||
dEQP-GLES31.functional.image_load_store.early_fragment_tests.early_fragment_tests_stencil_fbo
|
||||
dEQP-GLES31.functional.image_load_store.early_fragment_tests.no_early_fragment_tests_depth
|
||||
dEQP-GLES31.functional.image_load_store.early_fragment_tests.no_early_fragment_tests_depth_fbo
|
||||
dEQP-GLES31.functional.shaders.opaque_type_indexing.ubo.dynamically_uniform_geometry
|
||||
dEQP-GLES31.functional.state_query.integer.max_framebuffer_samples_getfloat
|
||||
dEQP-GLES31.functional.state_query.integer.max_framebuffer_samples_getinteger
|
||||
dEQP-GLES31.functional.state_query.integer.max_framebuffer_samples_getinteger64
|
||||
dEQP-GLES31.functional.state_query.texture.texture_2d_multisample.texture_immutable_format_float
|
||||
dEQP-GLES31.functional.state_query.texture.texture_2d_multisample.texture_immutable_format_integer
|
||||
dEQP-GLES31.functional.state_query.texture.texture_2d_multisample.texture_immutable_format_pure_int
|
||||
dEQP-GLES31.functional.state_query.texture.texture_2d_multisample.texture_immutable_format_pure_uint
|
||||
dEQP-GLES31.functional.state_query.texture.texture_2d_multisample.texture_immutable_levels_float
|
||||
dEQP-GLES31.functional.state_query.texture.texture_2d_multisample.texture_immutable_levels_integer
|
||||
dEQP-GLES31.functional.state_query.texture.texture_2d_multisample.texture_immutable_levels_pure_int
|
||||
dEQP-GLES31.functional.state_query.texture.texture_2d_multisample.texture_immutable_levels_pure_uint
|
||||
dEQP-GLES31.functional.state_query.texture.texture_2d_multisample_array.texture_immutable_format_float
|
||||
dEQP-GLES31.functional.state_query.texture.texture_2d_multisample_array.texture_immutable_format_integer
|
||||
dEQP-GLES31.functional.state_query.texture.texture_2d_multisample_array.texture_immutable_format_pure_int
|
||||
dEQP-GLES31.functional.state_query.texture.texture_2d_multisample_array.texture_immutable_format_pure_uint
|
||||
dEQP-GLES31.functional.state_query.texture.texture_2d_multisample_array.texture_immutable_levels_float
|
||||
dEQP-GLES31.functional.state_query.texture.texture_2d_multisample_array.texture_immutable_levels_integer
|
||||
dEQP-GLES31.functional.state_query.texture.texture_2d_multisample_array.texture_immutable_levels_pure_int
|
||||
dEQP-GLES31.functional.state_query.texture.texture_2d_multisample_array.texture_immutable_levels_pure_uint
|
||||
dEQP-GLES31.functional.texture.border_clamp.depth_compare_mode.depth32f_stencil8.linear_size_npot
|
||||
dEQP-GLES31.functional.texture.border_clamp.depth_compare_mode.depth32f_stencil8.linear_size_pot
|
||||
dEQP-GLES31.functional.texture.filtering.cube_array.combinations.nearest_linear_clamp_repeat
|
||||
dEQP-GLES31.functional.texture.filtering.cube_array.combinations.nearest_linear_mirror_repeat
|
||||
dEQP-GLES31.functional.texture.filtering.cube_array.combinations.nearest_linear_repeat_clamp
|
||||
dEQP-GLES31.functional.texture.filtering.cube_array.combinations.nearest_linear_repeat_mirror
|
||||
dEQP-GLES31.functional.texture.filtering.cube_array.combinations.nearest_linear_repeat_repeat
|
||||
dEQP-GLES31.functional.texture.filtering.cube_array.combinations.nearest_mipmap_linear_linear_clamp_repeat
|
||||
dEQP-GLES31.functional.texture.filtering.cube_array.combinations.nearest_mipmap_linear_linear_mirror_repeat
|
||||
dEQP-GLES31.functional.texture.filtering.cube_array.combinations.nearest_mipmap_linear_linear_repeat_clamp
|
||||
dEQP-GLES31.functional.texture.filtering.cube_array.combinations.nearest_mipmap_linear_linear_repeat_repeat
|
||||
dEQP-GLES31.functional.texture.filtering.cube_array.combinations.nearest_mipmap_linear_nearest_clamp_repeat
|
||||
dEQP-GLES31.functional.texture.filtering.cube_array.combinations.nearest_mipmap_linear_nearest_mirror_repeat
|
||||
dEQP-GLES31.functional.texture.filtering.cube_array.combinations.nearest_mipmap_linear_nearest_repeat_clamp
|
||||
dEQP-GLES31.functional.texture.filtering.cube_array.combinations.nearest_mipmap_linear_nearest_repeat_mirror
|
||||
dEQP-GLES31.functional.texture.filtering.cube_array.combinations.nearest_mipmap_nearest_linear_clamp_repeat
|
||||
dEQP-GLES31.functional.texture.filtering.cube_array.combinations.nearest_mipmap_nearest_linear_mirror_repeat
|
||||
dEQP-GLES31.functional.texture.filtering.cube_array.combinations.nearest_mipmap_nearest_linear_repeat_clamp
|
||||
dEQP-GLES31.functional.texture.filtering.cube_array.combinations.nearest_mipmap_nearest_linear_repeat_mirror
|
||||
dEQP-GLES31.functional.texture.filtering.cube_array.combinations.nearest_mipmap_nearest_nearest_repeat_clamp
|
||||
dEQP-GLES31.functional.texture.filtering.cube_array.combinations.nearest_mipmap_nearest_nearest_repeat_mirror
|
||||
dEQP-GLES31.functional.texture.filtering.cube_array.combinations.nearest_mipmap_nearest_nearest_repeat_repeat
|
||||
dEQP-GLES31.functional.texture.filtering.cube_array.combinations.nearest_nearest_repeat_mirror
|
||||
dEQP-GLES31.functional.texture.filtering.cube_array.formats.rgb10_a2_linear_mipmap_linear
|
||||
dEQP-GLES31.functional.texture.filtering.cube_array.formats.rgb10_a2_nearest
|
||||
dEQP-GLES31.functional.texture.filtering.cube_array.formats.rgb10_a2_nearest_mipmap_linear
|
||||
dEQP-GLES31.functional.texture.filtering.cube_array.formats.rgb10_a2_nearest_mipmap_nearest
|
||||
dEQP-GLES31.functional.texture.filtering.cube_array.formats.rgb565_nearest
|
||||
dEQP-GLES31.functional.texture.filtering.cube_array.formats.rgb565_nearest_mipmap_linear
|
||||
dEQP-GLES31.functional.texture.filtering.cube_array.formats.rgb5_a1_nearest
|
||||
dEQP-GLES31.functional.texture.filtering.cube_array.formats.rgb5_a1_nearest_mipmap_linear
|
||||
dEQP-GLES31.functional.texture.filtering.cube_array.formats.rgb9_e5_nearest_mipmap_linear
|
||||
dEQP-GLES31.functional.texture.filtering.cube_array.formats.rgb9_e5_nearest_mipmap_nearest
|
||||
dEQP-GLES31.functional.texture.filtering.cube_array.formats.rgba16f_nearest_mipmap_linear
|
||||
dEQP-GLES31.functional.texture.filtering.cube_array.formats.rgba16f_nearest_mipmap_nearest
|
||||
dEQP-GLES31.functional.texture.filtering.cube_array.formats.rgba4_nearest
|
||||
dEQP-GLES31.functional.texture.filtering.cube_array.formats.rgba4_nearest_mipmap_linear
|
||||
dEQP-GLES31.functional.texture.filtering.cube_array.formats.rgba8_nearest_mipmap_linear
|
||||
dEQP-GLES31.functional.texture.filtering.cube_array.formats.rgba8_nearest_mipmap_nearest
|
||||
dEQP-GLES31.functional.texture.filtering.cube_array.formats.rgba8_snorm_nearest
|
||||
dEQP-GLES31.functional.texture.filtering.cube_array.formats.rgba8_snorm_nearest_mipmap_nearest
|
||||
dEQP-GLES31.functional.texture.filtering.cube_array.formats.sr8_nearest_mipmap_nearest
|
||||
dEQP-GLES31.functional.texture.filtering.cube_array.formats.srgb8_alpha8_nearest
|
||||
dEQP-GLES31.functional.texture.filtering.cube_array.formats.srgb8_alpha8_nearest_mipmap_linear
|
||||
dEQP-GLES31.functional.texture.filtering.cube_array.sizes.128x128x12_linear
|
||||
dEQP-GLES31.functional.texture.filtering.cube_array.sizes.128x128x12_linear_mipmap_linear
|
||||
dEQP-GLES31.functional.texture.filtering.cube_array.sizes.128x128x12_linear_mipmap_nearest
|
||||
dEQP-GLES31.functional.texture.filtering.cube_array.sizes.128x128x12_nearest_mipmap_linear
|
||||
dEQP-GLES31.functional.texture.filtering.cube_array.sizes.128x128x12_nearest_mipmap_nearest
|
||||
dEQP-GLES31.functional.texture.filtering.cube_array.sizes.63x63x18_nearest_mipmap_nearest
|
||||
dEQP-GLES31.functional.texture.filtering.cube_array.sizes.64x64x12_nearest_mipmap_linear
|
||||
dEQP-GLES31.functional.texture.filtering.cube_array.sizes.64x64x12_nearest_mipmap_nearest
|
||||
dEQP-GLES31.functional.texture.filtering.cube_array.sizes.8x8x6_nearest
|
||||
dEQP-GLES31.functional.texture.gather.basic.2d.rgba8i.texture_swizzle.alpha_zero_one_red
|
||||
dEQP-GLES31.functional.texture.gather.basic.2d.rgba8i.texture_swizzle.blue_alpha_zero_one
|
||||
dEQP-GLES31.functional.texture.gather.basic.2d.rgba8i.texture_swizzle.one_red_green_blue
|
||||
dEQP-GLES31.functional.texture.gather.basic.2d.rgba8i.texture_swizzle.zero_one_red_green
|
||||
dEQP-GLES31.functional.texture.gather.basic.2d.rgba8ui.texture_swizzle.alpha_zero_one_red
|
||||
dEQP-GLES31.functional.texture.gather.basic.2d.rgba8ui.texture_swizzle.blue_alpha_zero_one
|
||||
dEQP-GLES31.functional.texture.gather.basic.2d.rgba8ui.texture_swizzle.one_red_green_blue
|
||||
dEQP-GLES31.functional.texture.gather.basic.2d.rgba8ui.texture_swizzle.zero_one_red_green
|
||||
dEQP-GLES31.functional.texture.gather.basic.2d_array.rgba8i.texture_swizzle.alpha_zero_one_red
|
||||
dEQP-GLES31.functional.texture.gather.basic.2d_array.rgba8i.texture_swizzle.blue_alpha_zero_one
|
||||
dEQP-GLES31.functional.texture.gather.basic.2d_array.rgba8i.texture_swizzle.one_red_green_blue
|
||||
dEQP-GLES31.functional.texture.gather.basic.2d_array.rgba8i.texture_swizzle.zero_one_red_green
|
||||
dEQP-GLES31.functional.texture.gather.basic.2d_array.rgba8ui.texture_swizzle.alpha_zero_one_red
|
||||
dEQP-GLES31.functional.texture.gather.basic.2d_array.rgba8ui.texture_swizzle.blue_alpha_zero_one
|
||||
dEQP-GLES31.functional.texture.gather.basic.2d_array.rgba8ui.texture_swizzle.one_red_green_blue
|
||||
dEQP-GLES31.functional.texture.gather.basic.2d_array.rgba8ui.texture_swizzle.zero_one_red_green
|
||||
dEQP-GLES31.functional.texture.gather.basic.cube.rgba8.no_corners.size_pot.clamp_to_edge_repeat
|
||||
dEQP-GLES31.functional.texture.gather.basic.cube.rgba8.no_corners.size_pot.mirrored_repeat_clamp_to_edge
|
||||
dEQP-GLES31.functional.texture.gather.basic.cube.rgba8.no_corners.size_pot.repeat_mirrored_repeat
|
||||
dEQP-GLES31.functional.texture.gather.basic.cube.rgba8i.no_corners.size_pot.clamp_to_edge_repeat
|
||||
dEQP-GLES31.functional.texture.gather.basic.cube.rgba8i.no_corners.size_pot.mirrored_repeat_clamp_to_edge
|
||||
dEQP-GLES31.functional.texture.gather.basic.cube.rgba8i.no_corners.size_pot.repeat_mirrored_repeat
|
||||
dEQP-GLES31.functional.texture.gather.basic.cube.rgba8i.texture_swizzle.alpha_zero_one_red
|
||||
dEQP-GLES31.functional.texture.gather.basic.cube.rgba8i.texture_swizzle.blue_alpha_zero_one
|
||||
dEQP-GLES31.functional.texture.gather.basic.cube.rgba8i.texture_swizzle.one_red_green_blue
|
||||
dEQP-GLES31.functional.texture.gather.basic.cube.rgba8i.texture_swizzle.zero_one_red_green
|
||||
dEQP-GLES31.functional.texture.gather.basic.cube.rgba8ui.no_corners.size_pot.clamp_to_edge_repeat
|
||||
dEQP-GLES31.functional.texture.gather.basic.cube.rgba8ui.no_corners.size_pot.mirrored_repeat_clamp_to_edge
|
||||
dEQP-GLES31.functional.texture.gather.basic.cube.rgba8ui.no_corners.size_pot.repeat_mirrored_repeat
|
||||
dEQP-GLES31.functional.texture.gather.basic.cube.rgba8ui.texture_swizzle.alpha_zero_one_red
|
||||
dEQP-GLES31.functional.texture.gather.basic.cube.rgba8ui.texture_swizzle.blue_alpha_zero_one
|
||||
dEQP-GLES31.functional.texture.gather.basic.cube.rgba8ui.texture_swizzle.one_red_green_blue
|
||||
dEQP-GLES31.functional.texture.gather.basic.cube.rgba8ui.texture_swizzle.zero_one_red_green
|
||||
dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d.rgba8i.texture_swizzle.alpha_zero_one_red
|
||||
dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d.rgba8i.texture_swizzle.blue_alpha_zero_one
|
||||
dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d.rgba8i.texture_swizzle.one_red_green_blue
|
||||
dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d.rgba8i.texture_swizzle.zero_one_red_green
|
||||
dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d.rgba8ui.texture_swizzle.alpha_zero_one_red
|
||||
dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d.rgba8ui.texture_swizzle.blue_alpha_zero_one
|
||||
dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d.rgba8ui.texture_swizzle.one_red_green_blue
|
||||
dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d.rgba8ui.texture_swizzle.zero_one_red_green
|
||||
dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d_array.rgba8i.texture_swizzle.alpha_zero_one_red
|
||||
dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d_array.rgba8i.texture_swizzle.blue_alpha_zero_one
|
||||
dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d_array.rgba8i.texture_swizzle.one_red_green_blue
|
||||
dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d_array.rgba8i.texture_swizzle.zero_one_red_green
|
||||
dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d_array.rgba8ui.texture_swizzle.alpha_zero_one_red
|
||||
dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d_array.rgba8ui.texture_swizzle.blue_alpha_zero_one
|
||||
dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d_array.rgba8ui.texture_swizzle.one_red_green_blue
|
||||
dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d_array.rgba8ui.texture_swizzle.zero_one_red_green
|
||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.depth32f.base_level.level_1
|
||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.depth32f.base_level.level_2
|
||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.depth32f.filter_mode.min_linear_mag_linear
|
||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.depth32f.filter_mode.min_linear_mipmap_linear_mag_linear
|
||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.depth32f.filter_mode.min_linear_mipmap_nearest_mag_linear
|
||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.depth32f.filter_mode.min_nearest_mipmap_linear_mag_linear
|
||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.depth32f.filter_mode.min_nearest_mipmap_nearest_mag_linear
|
||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.depth32f.size_npot.compare_greater.clamp_to_edge_repeat
|
||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.depth32f.size_npot.compare_greater.mirrored_repeat_clamp_to_edge
|
||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.depth32f.size_npot.compare_greater.repeat_mirrored_repeat
|
||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.depth32f.size_npot.compare_less.clamp_to_edge_repeat
|
||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.depth32f.size_npot.compare_less.mirrored_repeat_clamp_to_edge
|
||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.depth32f.size_npot.compare_less.repeat_mirrored_repeat
|
||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.depth32f.size_pot.compare_greater.clamp_to_edge_repeat
|
||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.depth32f.size_pot.compare_greater.mirrored_repeat_clamp_to_edge
|
||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.depth32f.size_pot.compare_greater.repeat_mirrored_repeat
|
||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.depth32f.size_pot.compare_less.clamp_to_edge_repeat
|
||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.depth32f.size_pot.compare_less.mirrored_repeat_clamp_to_edge
|
||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.depth32f.size_pot.compare_less.repeat_mirrored_repeat
|
||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.rgba8.base_level.level_1
|
||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.rgba8.base_level.level_2
|
||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.rgba8.filter_mode.min_linear_mag_linear
|
||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.rgba8.filter_mode.min_linear_mipmap_linear_mag_linear
|
||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.rgba8.filter_mode.min_linear_mipmap_nearest_mag_linear
|
||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.rgba8.filter_mode.min_nearest_mipmap_linear_mag_linear
|
||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.rgba8.filter_mode.min_nearest_mipmap_nearest_mag_linear
|
||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.rgba8.size_npot.clamp_to_edge_repeat
|
||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.rgba8.size_npot.mirrored_repeat_clamp_to_edge
|
||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.rgba8.size_npot.repeat_mirrored_repeat
|
||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.rgba8.size_pot.clamp_to_edge_repeat
|
||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.rgba8.size_pot.mirrored_repeat_clamp_to_edge
|
||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.rgba8.size_pot.repeat_mirrored_repeat
|
||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.rgba8.texture_swizzle.alpha_zero_one_red
|
||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.rgba8.texture_swizzle.blue_alpha_zero_one
|
||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.rgba8.texture_swizzle.green_blue_alpha_zero
|
||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.rgba8.texture_swizzle.one_red_green_blue
|
||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.rgba8.texture_swizzle.red_green_blue_alpha
|
||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.rgba8.texture_swizzle.zero_one_red_green
|
||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.rgba8i.base_level.level_1
|
||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.rgba8i.base_level.level_2
|
||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.rgba8i.filter_mode.min_nearest_mipmap_nearest_mag_nearest
|
||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.rgba8i.size_npot.clamp_to_edge_repeat
|
||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.rgba8i.size_npot.mirrored_repeat_clamp_to_edge
|
||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.rgba8i.size_npot.repeat_mirrored_repeat
|
||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.rgba8i.size_pot.clamp_to_edge_repeat
|
||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.rgba8i.size_pot.mirrored_repeat_clamp_to_edge
|
||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.rgba8i.size_pot.repeat_mirrored_repeat
|
||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.rgba8i.texture_swizzle.alpha_zero_one_red
|
||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.rgba8i.texture_swizzle.blue_alpha_zero_one
|
||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.rgba8i.texture_swizzle.green_blue_alpha_zero
|
||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.rgba8i.texture_swizzle.one_red_green_blue
|
||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.rgba8i.texture_swizzle.red_green_blue_alpha
|
||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.rgba8i.texture_swizzle.zero_one_red_green
|
||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.rgba8ui.base_level.level_1
|
||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.rgba8ui.base_level.level_2
|
||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.rgba8ui.filter_mode.min_nearest_mipmap_nearest_mag_nearest
|
||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.rgba8ui.size_npot.clamp_to_edge_repeat
|
||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.rgba8ui.size_npot.mirrored_repeat_clamp_to_edge
|
||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.rgba8ui.size_npot.repeat_mirrored_repeat
|
||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.rgba8ui.size_pot.clamp_to_edge_repeat
|
||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.rgba8ui.size_pot.mirrored_repeat_clamp_to_edge
|
||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.rgba8ui.size_pot.repeat_mirrored_repeat
|
||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.rgba8ui.texture_swizzle.alpha_zero_one_red
|
||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.rgba8ui.texture_swizzle.blue_alpha_zero_one
|
||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.rgba8ui.texture_swizzle.green_blue_alpha_zero
|
||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.rgba8ui.texture_swizzle.one_red_green_blue
|
||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.rgba8ui.texture_swizzle.red_green_blue_alpha
|
||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.rgba8ui.texture_swizzle.zero_one_red_green
|
||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.depth32f.base_level.level_1
|
||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.depth32f.base_level.level_2
|
||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.depth32f.filter_mode.min_linear_mag_linear
|
||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.depth32f.filter_mode.min_linear_mipmap_linear_mag_linear
|
||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.depth32f.filter_mode.min_linear_mipmap_nearest_mag_linear
|
||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.depth32f.filter_mode.min_nearest_mipmap_linear_mag_linear
|
||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.depth32f.filter_mode.min_nearest_mipmap_nearest_mag_linear
|
||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.depth32f.size_npot.compare_greater.clamp_to_edge_repeat
|
||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.depth32f.size_npot.compare_greater.mirrored_repeat_clamp_to_edge
|
||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.depth32f.size_npot.compare_greater.repeat_mirrored_repeat
|
||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.depth32f.size_npot.compare_less.clamp_to_edge_repeat
|
||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.depth32f.size_npot.compare_less.mirrored_repeat_clamp_to_edge
|
||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.depth32f.size_npot.compare_less.repeat_mirrored_repeat
|
||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.depth32f.size_pot.compare_greater.clamp_to_edge_repeat
|
||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.depth32f.size_pot.compare_greater.mirrored_repeat_clamp_to_edge
|
||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.depth32f.size_pot.compare_greater.repeat_mirrored_repeat
|
||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.depth32f.size_pot.compare_less.clamp_to_edge_repeat
|
||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.depth32f.size_pot.compare_less.mirrored_repeat_clamp_to_edge
|
||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.depth32f.size_pot.compare_less.repeat_mirrored_repeat
|
||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.rgba8.base_level.level_1
|
||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.rgba8.base_level.level_2
|
||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.rgba8.filter_mode.min_linear_mag_linear
|
||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.rgba8.filter_mode.min_linear_mipmap_linear_mag_linear
|
||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.rgba8.filter_mode.min_linear_mipmap_nearest_mag_linear
|
||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.rgba8.filter_mode.min_nearest_mipmap_linear_mag_linear
|
||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.rgba8.filter_mode.min_nearest_mipmap_nearest_mag_linear
|
||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.rgba8.size_npot.clamp_to_edge_repeat
|
||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.rgba8.size_npot.mirrored_repeat_clamp_to_edge
|
||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.rgba8.size_npot.repeat_mirrored_repeat
|
||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.rgba8.size_pot.clamp_to_edge_repeat
|
||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.rgba8.size_pot.mirrored_repeat_clamp_to_edge
|
||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.rgba8.size_pot.repeat_mirrored_repeat
|
||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.rgba8.texture_swizzle.alpha_zero_one_red
|
||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.rgba8.texture_swizzle.blue_alpha_zero_one
|
||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.rgba8.texture_swizzle.green_blue_alpha_zero
|
||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.rgba8.texture_swizzle.one_red_green_blue
|
||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.rgba8.texture_swizzle.red_green_blue_alpha
|
||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.rgba8.texture_swizzle.zero_one_red_green
|
||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.rgba8i.base_level.level_1
|
||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.rgba8i.base_level.level_2
|
||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.rgba8i.filter_mode.min_nearest_mipmap_nearest_mag_nearest
|
||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.rgba8i.size_npot.clamp_to_edge_repeat
|
||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.rgba8i.size_npot.mirrored_repeat_clamp_to_edge
|
||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.rgba8i.size_npot.repeat_mirrored_repeat
|
||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.rgba8i.size_pot.clamp_to_edge_repeat
|
||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.rgba8i.size_pot.mirrored_repeat_clamp_to_edge
|
||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.rgba8i.size_pot.repeat_mirrored_repeat
|
||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.rgba8i.texture_swizzle.alpha_zero_one_red
|
||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.rgba8i.texture_swizzle.blue_alpha_zero_one
|
||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.rgba8i.texture_swizzle.green_blue_alpha_zero
|
||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.rgba8i.texture_swizzle.one_red_green_blue
|
||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.rgba8i.texture_swizzle.red_green_blue_alpha
|
||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.rgba8i.texture_swizzle.zero_one_red_green
|
||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.rgba8ui.base_level.level_1
|
||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.rgba8ui.base_level.level_2
|
||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.rgba8ui.filter_mode.min_nearest_mipmap_nearest_mag_nearest
|
||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.rgba8ui.size_npot.clamp_to_edge_repeat
|
||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.rgba8ui.size_npot.mirrored_repeat_clamp_to_edge
|
||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.rgba8ui.size_npot.repeat_mirrored_repeat
|
||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.rgba8ui.size_pot.clamp_to_edge_repeat
|
||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.rgba8ui.size_pot.mirrored_repeat_clamp_to_edge
|
||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.rgba8ui.size_pot.repeat_mirrored_repeat
|
||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.rgba8ui.texture_swizzle.alpha_zero_one_red
|
||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.rgba8ui.texture_swizzle.blue_alpha_zero_one
|
||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.rgba8ui.texture_swizzle.green_blue_alpha_zero
|
||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.rgba8ui.texture_swizzle.one_red_green_blue
|
||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.rgba8ui.texture_swizzle.red_green_blue_alpha
|
||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.rgba8ui.texture_swizzle.zero_one_red_green
|
||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d.depth32f.size_npot.compare_greater.clamp_to_edge_repeat
|
||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d.depth32f.size_npot.compare_greater.mirrored_repeat_clamp_to_edge
|
||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d.depth32f.size_npot.compare_greater.repeat_mirrored_repeat
|
||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d.depth32f.size_npot.compare_less.clamp_to_edge_repeat
|
||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d.depth32f.size_npot.compare_less.mirrored_repeat_clamp_to_edge
|
||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d.depth32f.size_npot.compare_less.repeat_mirrored_repeat
|
||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d.depth32f.size_pot.compare_greater.clamp_to_edge_repeat
|
||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d.depth32f.size_pot.compare_greater.mirrored_repeat_clamp_to_edge
|
||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d.depth32f.size_pot.compare_greater.repeat_mirrored_repeat
|
||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d.depth32f.size_pot.compare_less.clamp_to_edge_repeat
|
||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d.depth32f.size_pot.compare_less.mirrored_repeat_clamp_to_edge
|
||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d.depth32f.size_pot.compare_less.repeat_mirrored_repeat
|
||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d.rgba8.size_npot.clamp_to_edge_repeat
|
||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d.rgba8.size_npot.mirrored_repeat_clamp_to_edge
|
||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d.rgba8.size_npot.repeat_mirrored_repeat
|
||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d.rgba8.size_pot.clamp_to_edge_repeat
|
||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d.rgba8.size_pot.mirrored_repeat_clamp_to_edge
|
||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d.rgba8.size_pot.repeat_mirrored_repeat
|
||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d.rgba8i.size_npot.clamp_to_edge_repeat
|
||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d.rgba8i.size_npot.mirrored_repeat_clamp_to_edge
|
||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d.rgba8i.size_npot.repeat_mirrored_repeat
|
||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d.rgba8i.size_pot.clamp_to_edge_repeat
|
||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d.rgba8i.size_pot.mirrored_repeat_clamp_to_edge
|
||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d.rgba8i.size_pot.repeat_mirrored_repeat
|
||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d.rgba8ui.size_npot.clamp_to_edge_repeat
|
||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d.rgba8ui.size_npot.mirrored_repeat_clamp_to_edge
|
||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d.rgba8ui.size_npot.repeat_mirrored_repeat
|
||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d.rgba8ui.size_pot.clamp_to_edge_repeat
|
||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d.rgba8ui.size_pot.mirrored_repeat_clamp_to_edge
|
||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d.rgba8ui.size_pot.repeat_mirrored_repeat
|
||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d_array.depth32f.size_npot.compare_greater.clamp_to_edge_repeat
|
||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d_array.depth32f.size_npot.compare_greater.mirrored_repeat_clamp_to_edge
|
||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d_array.depth32f.size_npot.compare_greater.repeat_mirrored_repeat
|
||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d_array.depth32f.size_npot.compare_less.clamp_to_edge_repeat
|
||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d_array.depth32f.size_npot.compare_less.mirrored_repeat_clamp_to_edge
|
||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d_array.depth32f.size_npot.compare_less.repeat_mirrored_repeat
|
||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d_array.depth32f.size_pot.compare_greater.clamp_to_edge_repeat
|
||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d_array.depth32f.size_pot.compare_greater.mirrored_repeat_clamp_to_edge
|
||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d_array.depth32f.size_pot.compare_greater.repeat_mirrored_repeat
|
||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d_array.depth32f.size_pot.compare_less.clamp_to_edge_repeat
|
||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d_array.depth32f.size_pot.compare_less.mirrored_repeat_clamp_to_edge
|
||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d_array.depth32f.size_pot.compare_less.repeat_mirrored_repeat
|
||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d_array.rgba8.size_npot.clamp_to_edge_repeat
|
||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d_array.rgba8.size_npot.mirrored_repeat_clamp_to_edge
|
||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d_array.rgba8.size_npot.repeat_mirrored_repeat
|
||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d_array.rgba8.size_pot.clamp_to_edge_repeat
|
||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d_array.rgba8.size_pot.mirrored_repeat_clamp_to_edge
|
||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d_array.rgba8.size_pot.repeat_mirrored_repeat
|
||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d_array.rgba8i.size_npot.clamp_to_edge_repeat
|
||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d_array.rgba8i.size_npot.mirrored_repeat_clamp_to_edge
|
||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d_array.rgba8i.size_npot.repeat_mirrored_repeat
|
||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d_array.rgba8i.size_pot.clamp_to_edge_repeat
|
||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d_array.rgba8i.size_pot.mirrored_repeat_clamp_to_edge
|
||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d_array.rgba8i.size_pot.repeat_mirrored_repeat
|
||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d_array.rgba8ui.size_npot.clamp_to_edge_repeat
|
||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d_array.rgba8ui.size_npot.mirrored_repeat_clamp_to_edge
|
||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d_array.rgba8ui.size_npot.repeat_mirrored_repeat
|
||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d_array.rgba8ui.size_pot.clamp_to_edge_repeat
|
||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d_array.rgba8ui.size_pot.mirrored_repeat_clamp_to_edge
|
||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d_array.rgba8ui.size_pot.repeat_mirrored_repeat
|
||||
dEQP-GLES31.functional.texture.gather.offsets.implementation_offset.2d.rgba8i.texture_swizzle.alpha_zero_one_red
|
||||
dEQP-GLES31.functional.texture.gather.offsets.implementation_offset.2d.rgba8i.texture_swizzle.blue_alpha_zero_one
|
||||
dEQP-GLES31.functional.texture.gather.offsets.implementation_offset.2d.rgba8i.texture_swizzle.one_red_green_blue
|
||||
dEQP-GLES31.functional.texture.gather.offsets.implementation_offset.2d.rgba8i.texture_swizzle.zero_one_red_green
|
||||
dEQP-GLES31.functional.texture.gather.offsets.implementation_offset.2d.rgba8ui.texture_swizzle.alpha_zero_one_red
|
||||
dEQP-GLES31.functional.texture.gather.offsets.implementation_offset.2d.rgba8ui.texture_swizzle.blue_alpha_zero_one
|
||||
dEQP-GLES31.functional.texture.gather.offsets.implementation_offset.2d.rgba8ui.texture_swizzle.one_red_green_blue
|
||||
dEQP-GLES31.functional.texture.gather.offsets.implementation_offset.2d.rgba8ui.texture_swizzle.zero_one_red_green
|
||||
dEQP-GLES31.functional.texture.gather.offsets.implementation_offset.2d_array.rgba8i.texture_swizzle.alpha_zero_one_red
|
||||
dEQP-GLES31.functional.texture.gather.offsets.implementation_offset.2d_array.rgba8i.texture_swizzle.blue_alpha_zero_one
|
||||
dEQP-GLES31.functional.texture.gather.offsets.implementation_offset.2d_array.rgba8i.texture_swizzle.one_red_green_blue
|
||||
dEQP-GLES31.functional.texture.gather.offsets.implementation_offset.2d_array.rgba8i.texture_swizzle.zero_one_red_green
|
||||
dEQP-GLES31.functional.texture.gather.offsets.implementation_offset.2d_array.rgba8ui.texture_swizzle.alpha_zero_one_red
|
||||
dEQP-GLES31.functional.texture.gather.offsets.implementation_offset.2d_array.rgba8ui.texture_swizzle.blue_alpha_zero_one
|
||||
dEQP-GLES31.functional.texture.gather.offsets.implementation_offset.2d_array.rgba8ui.texture_swizzle.one_red_green_blue
|
||||
dEQP-GLES31.functional.texture.gather.offsets.implementation_offset.2d_array.rgba8ui.texture_swizzle.zero_one_red_green
|
||||
dEQP-GLES31.functional.texture.multisample.samples_1.sample_mask_and_alpha_to_coverage
|
||||
dEQP-GLES31.functional.texture.multisample.samples_1.sample_mask_and_sample_coverage
|
||||
dEQP-GLES31.functional.texture.multisample.samples_1.sample_mask_and_sample_coverage_and_alpha_to_coverage
|
||||
dEQP-GLES31.functional.texture.multisample.samples_1.sample_mask_non_effective_bits
|
||||
dEQP-GLES31.functional.texture.multisample.samples_1.sample_mask_only
|
@@ -1,16 +0,0 @@
|
||||
# Note: skips lists for CI are just a list of lines that, when
|
||||
# non-zero-length and not starting with '#', will regex match to
|
||||
# delete lines from the test list. Be careful.
|
||||
|
||||
# Skip the perf/stress tests to keep runtime manageable
|
||||
dEQP-GLES[0-9]*.performance.*
|
||||
dEQP-GLES[0-9]*.stress.*
|
||||
|
||||
# These are really slow on tiling architectures (including llvmpipe).
|
||||
dEQP-GLES[0-9]*.functional.flush_finish.*
|
||||
|
||||
# Random failures
|
||||
dEQP-GLES31.functional.shaders.builtin_functions.*geometry
|
||||
|
||||
dEQP-GLES31.functional.fbo.no_attachments.maximums.all
|
||||
dEQP-GLES31.functional.fbo.no_attachments.maximums.size
|
@@ -1,45 +0,0 @@
|
||||
#!/usr/bin/env python3
|
||||
|
||||
from jinja2 import Environment, FileSystemLoader
|
||||
import argparse
|
||||
import os
|
||||
|
||||
parser = argparse.ArgumentParser()
|
||||
parser.add_argument("--template")
|
||||
parser.add_argument("--pipeline-info")
|
||||
parser.add_argument("--base-artifacts-url")
|
||||
parser.add_argument("--device-type")
|
||||
parser.add_argument("--kernel-image-name")
|
||||
parser.add_argument("--kernel-image-type", nargs='?', default="")
|
||||
parser.add_argument("--gpu-version")
|
||||
parser.add_argument("--boot-method")
|
||||
parser.add_argument("--lava-tags", nargs='?', default="")
|
||||
parser.add_argument("--env-vars", nargs='?', default="")
|
||||
parser.add_argument("--deqp-version")
|
||||
parser.add_argument("--arch")
|
||||
parser.add_argument("--ci-node-index")
|
||||
parser.add_argument("--ci-node-total")
|
||||
args = parser.parse_args()
|
||||
|
||||
env = Environment(loader = FileSystemLoader(os.path.dirname(args.template)), trim_blocks=True, lstrip_blocks=True)
|
||||
template = env.get_template(os.path.basename(args.template))
|
||||
|
||||
values = {}
|
||||
values['pipeline_info'] = args.pipeline_info
|
||||
values['base_artifacts_url'] = args.base_artifacts_url
|
||||
values['device_type'] = args.device_type
|
||||
values['kernel_image_name'] = args.kernel_image_name
|
||||
values['kernel_image_type'] = args.kernel_image_type
|
||||
values['gpu_version'] = args.gpu_version
|
||||
values['boot_method'] = args.boot_method
|
||||
values['tags'] = args.lava_tags
|
||||
values['env_vars'] = args.env_vars
|
||||
values['deqp_version'] = args.deqp_version
|
||||
values['arch'] = args.arch
|
||||
values['ci_node_index'] = args.ci_node_index
|
||||
values['ci_node_total'] = args.ci_node_total
|
||||
|
||||
f = open('lava-deqp.yml', "w")
|
||||
f.write(template.render(values))
|
||||
f.close()
|
||||
|
@@ -1,93 +0,0 @@
|
||||
job_name: mesa-deqp-{{ gpu_version }} {{ pipeline_info }}
|
||||
device_type: {{ device_type }}
|
||||
timeouts:
|
||||
job:
|
||||
minutes: 40
|
||||
action:
|
||||
minutes: 10
|
||||
actions:
|
||||
power-off:
|
||||
seconds: 30
|
||||
priority: 75
|
||||
visibility: public
|
||||
{% if tags %}
|
||||
tags:
|
||||
{% for tag in tags %}
|
||||
- {{ tag }}
|
||||
{% endfor %}
|
||||
{% endif %}
|
||||
actions:
|
||||
- deploy:
|
||||
timeout:
|
||||
minutes: 10
|
||||
to: tftp
|
||||
kernel:
|
||||
url: {{ base_artifacts_url }}/{{ kernel_image_name }}
|
||||
{% if kernel_image_type %}
|
||||
{{ kernel_image_type }}
|
||||
{% endif %}
|
||||
ramdisk:
|
||||
url: {{ base_artifacts_url }}/lava-rootfs-{{ arch }}.cpio.gz
|
||||
compression: gz
|
||||
dtb:
|
||||
url: {{ base_artifacts_url }}/{{ device_type }}.dtb
|
||||
os: oe
|
||||
- boot:
|
||||
timeout:
|
||||
minutes: 5
|
||||
method: {{ boot_method }}
|
||||
commands: ramdisk
|
||||
prompts:
|
||||
- '#'
|
||||
- test:
|
||||
timeout:
|
||||
minutes: 60
|
||||
definitions:
|
||||
- repository:
|
||||
metadata:
|
||||
format: Lava-Test Test Definition 1.0
|
||||
name: deqp
|
||||
description: "Mesa dEQP test plan"
|
||||
os:
|
||||
- oe
|
||||
scope:
|
||||
- functional
|
||||
run:
|
||||
steps:
|
||||
- mount -t proc none /proc
|
||||
- mount -t sysfs none /sys
|
||||
- mount -t devtmpfs none /dev
|
||||
- mkdir -p /dev/pts
|
||||
- mount -t devpts devpts /dev/pts
|
||||
|
||||
{% if env_vars %}
|
||||
- export {{ env_vars }}
|
||||
{% endif %}
|
||||
|
||||
- export DEQP_NO_SAVE_RESULTS=1
|
||||
- 'export DEQP_RUNNER_OPTIONS="--compact-display false --shuffle false"'
|
||||
- export DEQP_EXPECTED_FAILS=deqp-{{ gpu_version }}-fails.txt
|
||||
- export DEQP_SKIPS=deqp-{{ gpu_version }}-skips.txt
|
||||
- export DEQP_VER={{ deqp_version }}
|
||||
- export LIBGL_DRIVERS_PATH=`pwd`/install/lib/dri
|
||||
- export CI_NODE_INDEX={{ ci_node_index }}
|
||||
- export CI_NODE_TOTAL={{ ci_node_total }}
|
||||
|
||||
# Put stuff where the runner script expects it
|
||||
- mkdir artifacts
|
||||
- mkdir results
|
||||
- mkdir -p install/lib
|
||||
- cp /deqp/$DEQP_EXPECTED_FAILS artifacts/.
|
||||
- cp /deqp/$DEQP_SKIPS artifacts/.
|
||||
- mv /mesa/lib/* install/lib/.
|
||||
|
||||
- "if sh /deqp/deqp-runner.sh; then
|
||||
echo 'deqp: pass';
|
||||
else
|
||||
echo 'deqp: fail';
|
||||
fi"
|
||||
parse:
|
||||
pattern: '(?P<test_case_id>\S*):\s+(?P<result>(pass|fail))'
|
||||
from: inline
|
||||
name: deqp
|
||||
path: inline/mesa-deqp.yaml
|
@@ -1,122 +0,0 @@
|
||||
.lava-test:
|
||||
extends:
|
||||
- .ci-run-policy
|
||||
stage: test
|
||||
variables:
|
||||
GIT_STRATEGY: none # testing doesn't build anything from source
|
||||
ENV_VARS: "MESA_GLES_VERSION_OVERRIDE=3.0 DEQP_PARALLEL=6"
|
||||
script:
|
||||
- BUILD_JOB_ID=`cat artifacts/build_job_id.txt`
|
||||
- >
|
||||
artifacts/generate_lava.py \
|
||||
--template artifacts/lava-deqp.yml.jinja2 \
|
||||
--pipeline-info "$CI_PIPELINE_URL on $CI_COMMIT_REF_NAME ${CI_NODE_INDEX}/${CI_NODE_TOTAL}" \
|
||||
--base-artifacts-url $CI_PROJECT_URL/-/jobs/$BUILD_JOB_ID/artifacts/raw/artifacts \
|
||||
--device-type ${DEVICE_TYPE} \
|
||||
--env-vars "${ENV_VARS}" \
|
||||
--arch ${ARCH} \
|
||||
--deqp-version gles2 \
|
||||
--kernel-image-name ${KERNEL_IMAGE_NAME} \
|
||||
--kernel-image-type "${KERNEL_IMAGE_TYPE}" \
|
||||
--gpu-version ${GPU_VERSION} \
|
||||
--boot-method ${BOOT_METHOD} \
|
||||
--lava-tags "${LAVA_TAGS}" \
|
||||
--ci-node-index "${CI_NODE_INDEX}" \
|
||||
--ci-node-total "${CI_NODE_TOTAL}"
|
||||
- lava_job_id=`lavacli jobs submit lava-deqp.yml`
|
||||
- echo $lava_job_id
|
||||
- rm -rf artifacts/*
|
||||
- cp lava-deqp.yml artifacts/.
|
||||
- lavacli jobs logs $lava_job_id | grep -a -v "{'case':" | tee artifacts/lava-deqp-$lava_job_id.log
|
||||
- lavacli jobs show $lava_job_id
|
||||
- result=`lavacli results $lava_job_id 0_deqp deqp | head -1`
|
||||
- echo $result
|
||||
- '[[ "$result" == "pass" ]]'
|
||||
artifacts:
|
||||
when: always
|
||||
paths:
|
||||
- artifacts/
|
||||
|
||||
.lava-test:armhf:
|
||||
variables:
|
||||
ARCH: armhf
|
||||
KERNEL_IMAGE_NAME: zImage
|
||||
KERNEL_IMAGE_TYPE: "type:\ zimage"
|
||||
BOOT_METHOD: u-boot
|
||||
extends:
|
||||
- .lava-test
|
||||
- .use-arm_build
|
||||
dependencies:
|
||||
- meson-armhf
|
||||
needs:
|
||||
- meson-armhf
|
||||
|
||||
.lava-test:arm64:
|
||||
variables:
|
||||
ARCH: arm64
|
||||
KERNEL_IMAGE_NAME: Image
|
||||
KERNEL_IMAGE_TYPE: "type:\ image"
|
||||
BOOT_METHOD: u-boot
|
||||
extends:
|
||||
- .lava-test
|
||||
- .use-arm_build
|
||||
dependencies:
|
||||
- meson-arm64
|
||||
needs:
|
||||
- meson-arm64
|
||||
|
||||
panfrost-t720-test:arm64:
|
||||
extends: .lava-test:arm64
|
||||
variables:
|
||||
DEVICE_TYPE: sun50i-h6-pine-h64
|
||||
GPU_VERSION: panfrost-t720
|
||||
tags:
|
||||
- lava-sun50i-h6-pine-h64
|
||||
|
||||
panfrost-t760-test:armhf:
|
||||
extends: .lava-test:armhf
|
||||
variables:
|
||||
DEVICE_TYPE: rk3288-veyron-jaq
|
||||
GPU_VERSION: panfrost-t760
|
||||
BOOT_METHOD: depthcharge
|
||||
KERNEL_IMAGE_TYPE: ""
|
||||
tags:
|
||||
- lava-rk3288-veyron-jaq
|
||||
|
||||
panfrost-t860-test:arm64:
|
||||
extends: .lava-test:arm64
|
||||
variables:
|
||||
DEVICE_TYPE: rk3399-gru-kevin
|
||||
GPU_VERSION: panfrost-t860
|
||||
BOOT_METHOD: depthcharge
|
||||
KERNEL_IMAGE_TYPE: ""
|
||||
tags:
|
||||
- lava-rk3399-gru-kevin
|
||||
|
||||
panfrost-t820-test:arm64:
|
||||
extends: .lava-test:arm64
|
||||
variables:
|
||||
DEVICE_TYPE: meson-gxm-khadas-vim2
|
||||
GPU_VERSION: panfrost-t820
|
||||
LAVA_TAGS: panfrost
|
||||
tags:
|
||||
- lava-meson-gxm-khadas-vim2
|
||||
|
||||
.lima-mali400-test:armhf:
|
||||
parallel: 2
|
||||
extends: .lava-test:armhf
|
||||
variables:
|
||||
DEVICE_TYPE: sun8i-h3-libretech-all-h3-cc
|
||||
GPU_VERSION: lima
|
||||
ENV_VARS: "DEQP_PARALLEL=3"
|
||||
tags:
|
||||
- lava-sun8i-h3-libretech-all-h3-cc
|
||||
|
||||
lima-mali450-test:arm64:
|
||||
extends: .lava-test:arm64
|
||||
variables:
|
||||
DEVICE_TYPE: meson-gxl-s905x-libretech-cc
|
||||
GPU_VERSION: lima
|
||||
ENV_VARS: "DEQP_PARALLEL=6"
|
||||
tags:
|
||||
- lava-meson-gxl-s905x-libretech-cc
|
@@ -1,13 +0,0 @@
|
||||
call "C:\Program Files (x86)\Microsoft Visual Studio\%VERSION%\Common7\Tools\VsDevCmd.bat" -arch=%ARCH%
|
||||
|
||||
del /Q /S _build
|
||||
meson _build ^
|
||||
-Dbuild-tests=true ^
|
||||
-Db_vscrt=mtd ^
|
||||
-Dbuildtype=release ^
|
||||
-Dllvm=false ^
|
||||
-Dgallium-drivers=swrast ^
|
||||
-Dosmesa=gallium
|
||||
meson configure _build
|
||||
ninja -C _build
|
||||
ninja -C _build test
|
@@ -1,64 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
set -e
|
||||
set -o xtrace
|
||||
|
||||
CROSS_FILE=/cross_file-"$CROSS".txt
|
||||
|
||||
# We need to control the version of llvm-config we're using, so we'll
|
||||
# tweak the cross file or generate a native file to do so.
|
||||
if test -n "$LLVM_VERSION"; then
|
||||
LLVM_CONFIG="llvm-config-${LLVM_VERSION}"
|
||||
echo -e "[binaries]\nllvm-config = '`which $LLVM_CONFIG`'" > native.file
|
||||
if [ -n "$CROSS" ]; then
|
||||
sed -i -e '/\[binaries\]/a\' -e "llvm-config = '`which $LLVM_CONFIG`'" $CROSS_FILE
|
||||
fi
|
||||
$LLVM_CONFIG --version
|
||||
else
|
||||
rm -f native.file
|
||||
touch native.file
|
||||
fi
|
||||
|
||||
# cross-xfail-$CROSS, if it exists, contains a list of tests that are expected
|
||||
# to fail for the $CROSS configuration, one per line. you can then mark those
|
||||
# tests in their meson.build with:
|
||||
#
|
||||
# test(...,
|
||||
# should_fail: meson.get_cross_property('xfail', '').contains(t),
|
||||
# )
|
||||
#
|
||||
# where t is the name of the test, and the '' is the string to search when
|
||||
# not cross-compiling (which is empty, because for amd64 everything is
|
||||
# expected to pass).
|
||||
if [ -n "$CROSS" ]; then
|
||||
CROSS_XFAIL=.gitlab-ci/cross-xfail-"$CROSS"
|
||||
if [ -s "$CROSS_XFAIL" ]; then
|
||||
sed -i \
|
||||
-e '/\[properties\]/a\' \
|
||||
-e "xfail = '$(tr '\n' , < $CROSS_XFAIL)'" \
|
||||
"$CROSS_FILE"
|
||||
fi
|
||||
fi
|
||||
|
||||
rm -rf _build
|
||||
meson _build --native-file=native.file \
|
||||
--wrap-mode=nofallback \
|
||||
${CROSS+--cross "$CROSS_FILE"} \
|
||||
-D prefix=`pwd`/install \
|
||||
-D libdir=lib \
|
||||
-D buildtype=${BUILDTYPE:-debug} \
|
||||
-D build-tests=true \
|
||||
-D libunwind=${UNWIND} \
|
||||
${DRI_LOADERS} \
|
||||
-D dri-drivers=${DRI_DRIVERS:-[]} \
|
||||
${GALLIUM_ST} \
|
||||
-D gallium-drivers=${GALLIUM_DRIVERS:-[]} \
|
||||
-D vulkan-drivers=${VULKAN_DRIVERS:-[]} \
|
||||
-D I-love-half-baked-turnips=true \
|
||||
${EXTRA_OPTION}
|
||||
cd _build
|
||||
meson configure
|
||||
ninja -j4
|
||||
LC_ALL=C.UTF-8 ninja test
|
||||
ninja install
|
||||
cd ..
|
@@ -1,36 +0,0 @@
|
||||
diff --git a/generated_tests/CMakeLists.txt b/generated_tests/CMakeLists.txt
|
||||
index 738526546..6f89048cd 100644
|
||||
--- a/generated_tests/CMakeLists.txt
|
||||
+++ b/generated_tests/CMakeLists.txt
|
||||
@@ -206,11 +206,6 @@ piglit_make_generated_tests(
|
||||
templates/gen_variable_index_write_tests/vs.shader_test.mako
|
||||
templates/gen_variable_index_write_tests/fs.shader_test.mako
|
||||
templates/gen_variable_index_write_tests/helpers.mako)
|
||||
-piglit_make_generated_tests(
|
||||
- vs_in_fp64.list
|
||||
- gen_vs_in_fp64.py
|
||||
- templates/gen_vs_in_fp64/columns.shader_test.mako
|
||||
- templates/gen_vs_in_fp64/regular.shader_test.mako)
|
||||
piglit_make_generated_tests(
|
||||
shader_framebuffer_fetch_tests.list
|
||||
gen_shader_framebuffer_fetch_tests.py)
|
||||
@@ -279,7 +274,6 @@ add_custom_target(gen-gl-tests
|
||||
gen_extensions_defined.list
|
||||
vp-tex.list
|
||||
variable_index_write_tests.list
|
||||
- vs_in_fp64.list
|
||||
gpu_shader4_tests.list
|
||||
)
|
||||
|
||||
diff --git a/tests/sanity.py b/tests/sanity.py
|
||||
index 12f1614c9..9019087e2 100644
|
||||
--- a/tests/sanity.py
|
||||
+++ b/tests/sanity.py
|
||||
@@ -100,7 +100,6 @@ shader_tests = (
|
||||
'spec/arb_tessellation_shader/execution/barrier-patch.shader_test',
|
||||
'spec/arb_tessellation_shader/execution/built-in-functions/tcs-any-bvec4-using-if.shader_test',
|
||||
'spec/arb_tessellation_shader/execution/sanity.shader_test',
|
||||
- 'spec/arb_vertex_attrib_64bit/execution/vs_in/vs-input-uint_uvec4-double_dmat3x4_array2-position.shader_test',
|
||||
'spec/glsl-1.50/execution/geometry-basic.shader_test',
|
||||
'spec/oes_viewport_array/viewport-gs-write-simple.shader_test',
|
||||
)
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -1,29 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
set -e
|
||||
set -o xtrace
|
||||
|
||||
VERSION=`cat artifacts/VERSION`
|
||||
|
||||
cd /piglit
|
||||
|
||||
PIGLIT_OPTIONS=$(echo $PIGLIT_OPTIONS | head -n 1)
|
||||
xvfb-run --server-args="-noreset" sh -c \
|
||||
"export LD_LIBRARY_PATH=$OLDPWD/install/lib;
|
||||
wflinfo --platform glx --api gl --profile core | grep \"Mesa $VERSION\\\$\" &&
|
||||
./piglit run -j4 $PIGLIT_OPTIONS $PIGLIT_PROFILES $OLDPWD/results"
|
||||
|
||||
PIGLIT_RESULTS=${PIGLIT_RESULTS:-$PIGLIT_PROFILES}
|
||||
mkdir -p .gitlab-ci/piglit
|
||||
cp $OLDPWD/artifacts/piglit/$PIGLIT_RESULTS.txt .gitlab-ci/piglit/$PIGLIT_RESULTS.txt.baseline
|
||||
./piglit summary console $OLDPWD/results | head -n -1 | grep -v ": pass" >.gitlab-ci/piglit/$PIGLIT_RESULTS.txt
|
||||
|
||||
if diff -q .gitlab-ci/piglit/$PIGLIT_RESULTS.txt{.baseline,}; then
|
||||
exit 0
|
||||
fi
|
||||
|
||||
./piglit summary html --exclude-details=pass $OLDPWD/summary $OLDPWD/results
|
||||
|
||||
echo Unexpected change in results:
|
||||
diff -u .gitlab-ci/piglit/$PIGLIT_RESULTS.txt{.baseline,}
|
||||
exit 1
|
@@ -1,59 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
set -e
|
||||
set -o xtrace
|
||||
|
||||
CROSS_FILE=/cross_file-"$CROSS".txt
|
||||
|
||||
# Delete unused bin and includes from artifacts to save space.
|
||||
rm -rf install/bin install/include
|
||||
|
||||
# Strip the drivers in the artifacts to cut 80% of the artifacts size.
|
||||
if [ -n "$CROSS" ]; then
|
||||
STRIP=`sed -n -E "s/strip\s*=\s*'(.*)'/\1/p" "$CROSS_FILE"`
|
||||
if [ -z "$STRIP" ]; then
|
||||
echo "Failed to find strip command in cross file"
|
||||
exit 1
|
||||
fi
|
||||
else
|
||||
STRIP="strip"
|
||||
fi
|
||||
find install -name \*.so -exec $STRIP {} \;
|
||||
|
||||
# Test runs don't pull down the git tree, so put the dEQP helper
|
||||
# script and associated bits there.
|
||||
mkdir -p artifacts/
|
||||
cp VERSION artifacts/
|
||||
cp -Rp .gitlab-ci/deqp* artifacts/
|
||||
cp -Rp .gitlab-ci/piglit artifacts/
|
||||
|
||||
# Tar up the install dir so that symlinks and hardlinks aren't each
|
||||
# packed separately in the zip file.
|
||||
tar -cf artifacts/install.tar install
|
||||
|
||||
# If the container has LAVA stuff, prepare the artifacts for LAVA jobs
|
||||
if [ -d /lava-files ]; then
|
||||
# Copy kernel and device trees for LAVA
|
||||
cp /lava-files/*Image artifacts/.
|
||||
cp /lava-files/*.dtb artifacts/.
|
||||
|
||||
# Pack ramdisk for LAVA
|
||||
mkdir -p /lava-files/rootfs-${CROSS:-arm64}/mesa
|
||||
cp -a install/* /lava-files/rootfs-${CROSS:-arm64}/mesa/.
|
||||
|
||||
cp .gitlab-ci/deqp-runner.sh /lava-files/rootfs-${CROSS:-arm64}/deqp/.
|
||||
cp .gitlab-ci/deqp-*-fails.txt /lava-files/rootfs-${CROSS:-arm64}/deqp/.
|
||||
cp .gitlab-ci/deqp-*-skips.txt /lava-files/rootfs-${CROSS:-arm64}/deqp/.
|
||||
find /lava-files/rootfs-${CROSS:-arm64}/ -type f -printf "%s\t%i\t%p\n" | sort -n | tail -100
|
||||
|
||||
pushd /lava-files/rootfs-${CROSS:-arm64}/
|
||||
find -H | cpio -H newc -o | gzip -c - > $CI_PROJECT_DIR/artifacts/lava-rootfs-${CROSS:-arm64}.cpio.gz
|
||||
popd
|
||||
|
||||
# Store job ID so the test stage can build URLs to the artifacts
|
||||
echo $CI_JOB_ID > artifacts/build_job_id.txt
|
||||
|
||||
# Pass needed files to the test stage
|
||||
cp $CI_PROJECT_DIR/.gitlab-ci/generate_lava.py artifacts/.
|
||||
cp $CI_PROJECT_DIR/.gitlab-ci/lava-deqp.yml.jinja2 artifacts/.
|
||||
fi
|
@@ -1,17 +0,0 @@
|
||||
set -e
|
||||
set -v
|
||||
|
||||
ARTIFACTSDIR=`pwd`/shader-db
|
||||
mkdir -p $ARTIFACTSDIR
|
||||
export DRM_SHIM_DEBUG=true
|
||||
|
||||
LIBDIR=`pwd`/install/lib
|
||||
export LD_LIBRARY_PATH=$LIBDIR
|
||||
|
||||
cd /usr/local/shader-db
|
||||
|
||||
for driver in freedreno v3d; do
|
||||
env LD_PRELOAD=$LIBDIR/lib${driver}_noop_drm_shim.so \
|
||||
./run -j 4 ./shaders \
|
||||
> $ARTIFACTSDIR/${driver}-shader-db.txt
|
||||
done
|
@@ -1,12 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
set -e
|
||||
set -o xtrace
|
||||
|
||||
if test -n "$LLVM_VERSION"; then
|
||||
export LLVM_CONFIG="llvm-config-${LLVM_VERSION}"
|
||||
fi
|
||||
|
||||
rm -rf build
|
||||
scons $SCONS_TARGET force_scons=on
|
||||
eval $SCONS_CHECK_COMMAND
|
@@ -1,20 +0,0 @@
|
||||
[binaries]
|
||||
c = ['ccache', 'x86_64-w64-mingw32-gcc']
|
||||
cpp = ['ccache', 'x86_64-w64-mingw32-g++']
|
||||
ar = 'x86_64-w64-mingw32-ar'
|
||||
strip = 'x86_64-w64-mingw32-strip'
|
||||
pkgconfig = '/usr/local/bin/x86_64-w64-mingw32-pkg-config'
|
||||
windres = 'x86_64-w64-mingw32-windres'
|
||||
exe_wrapper = ['wine64']
|
||||
|
||||
[properties]
|
||||
needs_exe_wrapper = True
|
||||
sys_root = '/usr/x86_64-w64-mingw32/'
|
||||
|
||||
[host_machine]
|
||||
system = 'windows'
|
||||
cpu_family = 'x86_64'
|
||||
cpu = 'x86_64'
|
||||
endian = 'little'
|
||||
|
||||
; vim: ft=dosini
|
23
.mailmap
23
.mailmap
@@ -26,8 +26,6 @@ Alexander Monakov <amonakov@gmail.com> <amonakov@ispras.ru>
|
||||
|
||||
Alexander von Gluck IV <kallisti5@unixzen.com> Alexander von Gluck <kallisti5@unixzen.com>
|
||||
|
||||
Alexandros Frantzis <alexandros.frantzis@collabora.com> <Alexandros.Frantzis@canonical.com>
|
||||
|
||||
Alex Corscadden <alexc@vmware.com> <alexc@alexc-dev1.prom.eng.vmware.com>
|
||||
Alex Corscadden <alexc@vmware.com> <alexc@alexc-dev1.vmware.com>
|
||||
|
||||
@@ -52,8 +50,6 @@ Andrew Randrianasulu <randrianasulu@gmail.com> <randrik@mail.ru>
|
||||
|
||||
Arthur Huillet <arthur.huillet@free.fr> Arthur HUILLET <arthur.huillet@free.fr>
|
||||
|
||||
Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl> <basni@chromium.org>
|
||||
|
||||
Benjamin Franzke <benjaminfranzke@googlemail.com> ben <benjaminfranzke@googlemail.com>
|
||||
|
||||
Ben Skeggs <bskeggs@redhat.com> <darktama@beleth.(none)>
|
||||
@@ -133,8 +129,8 @@ David Miller <davem@davemloft.net> David S. Miller <davem@davemloft.net>
|
||||
David Miller <davem@davemloft.net> Dave Miller <davem@davemloft.net>
|
||||
David Miller <davem@davemloft.net> davem69 <davem69>
|
||||
|
||||
David Heidelberg <david@ixit.cz> David Heidelberger <david.heidelberger@ixit.cz>
|
||||
David Heidelberg <david@ixit.cz> <d.okias@gmail.com>
|
||||
David Heidelberger <david.heidelberger@ixit.cz> David Heidelberg <david@ixit.cz>
|
||||
David Heidelberger <david.heidelberger@ixit.cz> <d.okias@gmail.com>
|
||||
|
||||
David Reveman <reveman@chromium.org> <c99drn@cs.umu.se>
|
||||
|
||||
@@ -146,8 +142,6 @@ Dylan Baker <dylanx.c.baker@intel.com> <baker.dylan.c@gmail.com>
|
||||
|
||||
Edward O'Callaghan <funfunctor@folklore1984.net> <eocallaghan@alterapraxis.com>
|
||||
|
||||
Elie Tournier <tournier.elie@gmail.com>
|
||||
|
||||
Emeric Grange <emeric.grange@gmail.com> Emeric <emeric.grange@gmail.com>
|
||||
|
||||
Emil Velikov <emil.l.velikov@gmail.com> <emil.velikov@collabora.com>
|
||||
@@ -160,7 +154,6 @@ Emil Velikov <emil.l.velikov@gmail.com> <emmil.velikov@collabora.com>
|
||||
Eric Anholt <eric@anholt.net> Eric Anholt <anholt@FreeBSD.org>
|
||||
|
||||
Eric Engestrom <eric@engestrom.ch> <eric.engestrom@imgtec.com>
|
||||
Eric Engestrom <eric@engestrom.ch> <eric.engestrom@intel.com>
|
||||
|
||||
Eugeni Dodonov <eugeni.dodonov@intel.com> <eugeni@mandriva.com>
|
||||
|
||||
@@ -169,14 +162,10 @@ Fabian Bieler <der.fabe@gmx.net> <<der.fabe@gmx.net>>
|
||||
|
||||
Feng, Haitao <haitao.feng@intel.com> Haitao Feng <haitao.feng@intel.com>
|
||||
|
||||
Frank Binns <frank.binns@imgtec.com> <francisbinns@gmail.com>
|
||||
|
||||
Frank Henigman <fjhenigman@google.com> <fjhenigman@chromium.org>
|
||||
|
||||
George Sapountzis <gsapountzis@gmail.com> George Sapountzis <gsap7@yahoo.gr>
|
||||
|
||||
Gert Wollny <gert.wollny@collabora.com> <gw.fossdev@gmail.com>
|
||||
|
||||
Gwenole Beauchesne <gwenole.beauchesne@intel.com> <gb.devel@gmail.com>
|
||||
|
||||
Hamish Marson <hmarson@users.sourceforge.net> hmarson <hmarson>
|
||||
@@ -195,8 +184,6 @@ Jakob Bornecrantz <wallbraker@gmail.com> <jakob@aurora.(none)>
|
||||
Jakob Bornecrantz <wallbraker@gmail.com> <jakob@aurora.walkyrie.se>
|
||||
Jakob Bornecrantz <wallbraker@gmail.com> <jakob@tungstengraphics.com>
|
||||
Jakob Bornecrantz <wallbraker@gmail.com> <wallbraker 'at' gmail 'dot' com>
|
||||
Jakob Bornecrantz <wallbraker@gmail.com> <jakob.bornecrantz@collabora.com>
|
||||
Jakob Bornecrantz <wallbraker@gmail.com> <jakob@collabora.com>
|
||||
|
||||
Jakub Bogusz <qboosh@pld-linux.org> <gboosh@pld-linux.org>
|
||||
|
||||
@@ -278,9 +265,6 @@ Kristian Høgsberg <krh@bitplanet.net> <krh@hinata.boston.redhat.com>
|
||||
Kristian Høgsberg <krh@bitplanet.net> <krh@sasori.boston.redhat.com>
|
||||
Kristian Høgsberg <krh@bitplanet.net> <krh@temari.boston.redhat.com>
|
||||
Kristian Høgsberg <krh@bitplanet.net> <kristian.h.kristensen@intel.com>
|
||||
Kristian Høgsberg <krh@bitplanet.net> <hoegsberg@chromium.org>
|
||||
Kristian Høgsberg <krh@bitplanet.net> <hoegsberg@google.com>
|
||||
Kristian Høgsberg <krh@bitplanet.net> <hoegsberg@gmail.com>
|
||||
|
||||
Krzesimir Nowak <qdlacz@gmail.com> <krzesimir@kinvolk.io>
|
||||
|
||||
@@ -341,7 +325,6 @@ Michel Dänzer <michel@daenzer.net> <daenzer@vmware.com>
|
||||
Michel Dänzer <michel@daenzer.net> <michel@tungstengraphics.com>
|
||||
Michel Dänzer <michel@daenzer.net> Michel Daenzer <michel.daenzer@amd.com>
|
||||
Michel Dänzer <michel@daenzer.net> Michel Daenzer <daenzer@localhost.(none)>
|
||||
Michel Dänzer <michel@daenzer.net> <mdaenzer@redhat.com>
|
||||
|
||||
Mike Kaplinskiy <mike.kaplinskiy@gmail.com> Mike Kaplinksiy <mike.kaplinskiy@gmail.com>
|
||||
Mike Kaplinskiy <mike.kaplinskiy@gmail.com> <mike.kaplinskiy@gmai.com>
|
||||
@@ -467,8 +450,6 @@ Tom Fogal <tfogal@alumni.unh.edu> <tfogal@sci.utah.edu>
|
||||
Tom Stellard <thomas.stellard@amd.com> <tstellar@gmail.com>
|
||||
Tom Stellard <thomas.stellard@amd.com> Thomas Stellard <tom.stellard@amd.com>
|
||||
|
||||
Tomeu Vizoso <tomeu.vizoso@collabora.com> <tomeu@tomeuvizoso.net>
|
||||
|
||||
Tormod Volden <debian.tormod@gmail.com> <lists.tormod@gmail.com>
|
||||
|
||||
Török Edwin <edwin+mesa@etorok.net> Török Edvin <edwintorok@gmail.com>
|
||||
|
18029
.pick_status.json
18029
.pick_status.json
File diff suppressed because it is too large
Load Diff
862
.travis.yml
862
.travis.yml
@@ -1,64 +1,852 @@
|
||||
language: c
|
||||
|
||||
os: osx
|
||||
dist: xenial
|
||||
|
||||
cache:
|
||||
apt: true
|
||||
ccache: true
|
||||
|
||||
env:
|
||||
global:
|
||||
- PKG_CONFIG_PATH=""
|
||||
- XORG_RELEASES=https://xorg.freedesktop.org/releases/individual
|
||||
- XCB_RELEASES=https://xcb.freedesktop.org/dist
|
||||
- WAYLAND_RELEASES=https://wayland.freedesktop.org/releases
|
||||
- XORGMACROS_VERSION=util-macros-1.19.0
|
||||
- GLPROTO_VERSION=glproto-1.4.17
|
||||
- DRI2PROTO_VERSION=dri2proto-2.8
|
||||
- LIBPCIACCESS_VERSION=libpciaccess-0.13.4
|
||||
- LIBDRM_VERSION=libdrm-2.4.97
|
||||
- XCBPROTO_VERSION=xcb-proto-1.13
|
||||
- RANDRPROTO_VERSION=randrproto-1.3.0
|
||||
- LIBXRANDR_VERSION=libXrandr-1.3.0
|
||||
- LIBXCB_VERSION=libxcb-1.13
|
||||
- LIBXSHMFENCE_VERSION=libxshmfence-1.2
|
||||
- LIBVDPAU_VERSION=libvdpau-1.1
|
||||
- LIBVA_VERSION=libva-1.7.0
|
||||
- LIBWAYLAND_VERSION=wayland-1.15.0
|
||||
- WAYLAND_PROTOCOLS_VERSION=wayland-protocols-1.8
|
||||
- PKG_CONFIG_PATH=$HOME/prefix/lib/pkgconfig:$HOME/prefix/share/pkgconfig
|
||||
- LD_LIBRARY_PATH="$HOME/prefix/lib:$LD_LIBRARY_PATH"
|
||||
- PATH="$HOME/prefix/bin:$PATH"
|
||||
|
||||
matrix:
|
||||
include:
|
||||
- env:
|
||||
- BUILD=meson
|
||||
- LABEL="meson Vulkan"
|
||||
- BUILD=meson
|
||||
- UNWIND="false"
|
||||
- DRI_LOADERS="-Dglx=disabled -Dgbm=false -Degl=false -Dplatforms=x11,wayland,drm -Dosmesa=none"
|
||||
- GALLIUM_ST="-Ddri3=true -Dgallium-vdpau=false -Dgallium-xvmc=false -Dgallium-omx=disabled -Dgallium-va=false -Dgallium-xa=false -Dgallium-nine=false -Dgallium-opencl=disabled"
|
||||
- VULKAN_DRIVERS="intel,amd"
|
||||
- LLVM_VERSION=7
|
||||
- LLVM_CONFIG="llvm-config-${LLVM_VERSION}"
|
||||
addons:
|
||||
apt:
|
||||
sources:
|
||||
- sourceline: 'deb http://apt.llvm.org/xenial/ llvm-toolchain-xenial-7 main'
|
||||
key_url: https://apt.llvm.org/llvm-snapshot.gpg.key
|
||||
packages:
|
||||
- llvm-7-dev
|
||||
# Common
|
||||
- xz-utils
|
||||
- libexpat1-dev
|
||||
- libx11-xcb-dev
|
||||
- libelf-dev
|
||||
- python3.5
|
||||
- python3-pip
|
||||
- python3-setuptools
|
||||
- env:
|
||||
- BUILD=scons
|
||||
- LABEL="meson loaders/classic DRI"
|
||||
- BUILD=meson
|
||||
- UNWIND="false"
|
||||
- DRI_LOADERS="-Dglx=dri -Dgbm=true -Degl=true -Dplatforms=x11,wayland,drm,surfaceless -Dosmesa=classic"
|
||||
- DRI_DRIVERS="i915,i965,r100,r200,swrast,nouveau"
|
||||
- GALLIUM_ST="-Ddri3=true -Dgallium-vdpau=false -Dgallium-xvmc=false -Dgallium-omx=disabled -Dgallium-va=false -Dgallium-xa=false -Dgallium-nine=false -Dgallium-opencl=disabled"
|
||||
addons:
|
||||
apt:
|
||||
packages:
|
||||
- xz-utils
|
||||
- x11proto-xf86vidmode-dev
|
||||
- libxxf86vm-dev
|
||||
- libexpat1-dev
|
||||
- libx11-xcb-dev
|
||||
- libxdamage-dev
|
||||
- libxfixes-dev
|
||||
- python3.5
|
||||
- python3-pip
|
||||
- python3-setuptools
|
||||
- env:
|
||||
- LABEL="make loaders/classic DRI"
|
||||
- BUILD=make
|
||||
- MAKEFLAGS="-j4"
|
||||
- MAKE_CHECK_COMMAND="make check"
|
||||
- DRI_LOADERS="--enable-glx --enable-gbm --enable-egl --with-platforms=x11,drm,surfaceless,wayland --enable-osmesa"
|
||||
- DRI_DRIVERS="i915,i965,radeon,r200,swrast,nouveau"
|
||||
- GALLIUM_ST="--enable-dri --disable-opencl --disable-xa --disable-nine --disable-xvmc --disable-vdpau --disable-va --disable-omx-bellagio --disable-gallium-osmesa"
|
||||
- GALLIUM_DRIVERS=""
|
||||
- VULKAN_DRIVERS=""
|
||||
- LIBUNWIND_FLAGS="--disable-libunwind"
|
||||
addons:
|
||||
apt:
|
||||
packages:
|
||||
- xz-utils
|
||||
- x11proto-xf86vidmode-dev
|
||||
- libxxf86vm-dev
|
||||
- libexpat1-dev
|
||||
- libx11-xcb-dev
|
||||
- libxdamage-dev
|
||||
- libxfixes-dev
|
||||
- python3-pip
|
||||
- python3-setuptools
|
||||
- env:
|
||||
# NOTE: Building SWR is 2x (yes two) times slower than all the other
|
||||
# gallium drivers combined.
|
||||
# Start this early so that it doesn't hunder the run time.
|
||||
- LABEL="meson Gallium Drivers SWR"
|
||||
- BUILD=meson
|
||||
- UNWIND="true"
|
||||
- DRI_LOADERS="-Dglx=disabled -Degl=false -Dgbm=false"
|
||||
- GALLIUM_ST="-Ddri3=false -Dgallium-vdpau=false -Dgallium-xvmc=false -Dgallium-omx=disabled -Dgallium-va=false -Dgallium-xa=false -Dgallium-nine=false -Dgallium-opencl=disabled"
|
||||
- GALLIUM_DRIVERS="swr"
|
||||
- LLVM_VERSION=6.0
|
||||
- LLVM_CONFIG="llvm-config-${LLVM_VERSION}"
|
||||
addons:
|
||||
apt:
|
||||
packages:
|
||||
- llvm-6.0-dev
|
||||
# Common
|
||||
- xz-utils
|
||||
- libexpat1-dev
|
||||
- libx11-xcb-dev
|
||||
- libelf-dev
|
||||
- libunwind8-dev
|
||||
- python3.5
|
||||
- python3-pip
|
||||
- python3-setuptools
|
||||
- env:
|
||||
- LABEL="meson Gallium Drivers RadeonSI"
|
||||
- BUILD=meson
|
||||
- UNWIND="true"
|
||||
- DRI_LOADERS="-Dglx=disabled -Degl=false -Dgbm=false"
|
||||
- GALLIUM_ST="-Ddri3=false -Dgallium-vdpau=false -Dgallium-xvmc=false -Dgallium-omx=disabled -Dgallium-va=false -Dgallium-xa=false -Dgallium-nine=false -Dgallium-opencl=disabled"
|
||||
- GALLIUM_DRIVERS="radeonsi"
|
||||
- LLVM_VERSION=7
|
||||
- LLVM_CONFIG="llvm-config-${LLVM_VERSION}"
|
||||
addons:
|
||||
apt:
|
||||
sources:
|
||||
- sourceline: 'deb http://apt.llvm.org/xenial/ llvm-toolchain-xenial-7 main'
|
||||
key_url: https://apt.llvm.org/llvm-snapshot.gpg.key
|
||||
packages:
|
||||
# From sources above
|
||||
- llvm-7-dev
|
||||
# Common
|
||||
- xz-utils
|
||||
- libexpat1-dev
|
||||
- libx11-xcb-dev
|
||||
- libelf-dev
|
||||
- libunwind8-dev
|
||||
- python3.5
|
||||
- python3-pip
|
||||
- python3-setuptools
|
||||
- env:
|
||||
- LABEL="meson Gallium Drivers Other"
|
||||
- BUILD=meson
|
||||
- UNWIND="true"
|
||||
- DRI_LOADERS="-Dglx=disabled -Degl=false -Dgbm=false"
|
||||
- GALLIUM_ST="-Ddri3=false -Dgallium-vdpau=false -Dgallium-xvmc=false -Dgallium-omx=disabled -Dgallium-va=false -Dgallium-xa=false -Dgallium-nine=false -Dgallium-opencl=disabled"
|
||||
- GALLIUM_DRIVERS="i915,nouveau,kmsro,r300,r600,freedreno,svga,swrast,v3d,vc4,virgl,etnaviv"
|
||||
- LLVM_VERSION=5.0
|
||||
- LLVM_CONFIG="llvm-config-${LLVM_VERSION}"
|
||||
addons:
|
||||
apt:
|
||||
packages:
|
||||
# LLVM packaging is broken and misses these dependencies
|
||||
- libedit-dev
|
||||
- llvm-5.0-dev
|
||||
# Common
|
||||
- xz-utils
|
||||
- libexpat1-dev
|
||||
- libx11-xcb-dev
|
||||
- libelf-dev
|
||||
- libunwind8-dev
|
||||
- python3.5
|
||||
- python3-pip
|
||||
- python3-setuptools
|
||||
- env:
|
||||
- LABEL="meson Gallium ST Clover LLVM-5.0"
|
||||
- BUILD=meson
|
||||
- UNWIND="true"
|
||||
- DRI_LOADERS="-Dglx=disabled -Degl=false -Dgbm=false"
|
||||
- GALLIUM_ST="-Ddri3=false -Dgallium-vdpau=false -Dgallium-xvmc=false -Dgallium-omx=disabled -Dgallium-va=false -Dgallium-xa=false -Dgallium-nine=false -Dgallium-opencl=icd"
|
||||
- GALLIUM_DRIVERS="r600"
|
||||
- LLVM_VERSION=5.0
|
||||
- LLVM_CONFIG="llvm-config-${LLVM_VERSION}"
|
||||
addons:
|
||||
apt:
|
||||
packages:
|
||||
- libclc-dev
|
||||
# LLVM packaging is broken and misses these dependencies
|
||||
- libedit-dev
|
||||
- llvm-5.0-dev
|
||||
- clang-5.0
|
||||
- libclang-5.0-dev
|
||||
# Common
|
||||
- xz-utils
|
||||
- libexpat1-dev
|
||||
- libx11-xcb-dev
|
||||
- libelf-dev
|
||||
- libunwind8-dev
|
||||
- python3-pip
|
||||
- python3-setuptools
|
||||
- env:
|
||||
- LABEL="meson Gallium ST Clover LLVM-6.0"
|
||||
- BUILD=meson
|
||||
- UNWIND="true"
|
||||
- DRI_LOADERS="-Dglx=disabled -Degl=false -Dgbm=false"
|
||||
- GALLIUM_ST="-Ddri3=false -Dgallium-vdpau=false -Dgallium-xvmc=false -Dgallium-omx=disabled -Dgallium-va=false -Dgallium-xa=false -Dgallium-nine=false -Dgallium-opencl=icd"
|
||||
- GALLIUM_DRIVERS="r600"
|
||||
- LLVM_VERSION=6.0
|
||||
- LLVM_CONFIG="llvm-config-${LLVM_VERSION}"
|
||||
addons:
|
||||
apt:
|
||||
packages:
|
||||
- libclc-dev
|
||||
- llvm-6.0-dev
|
||||
- clang-6.0
|
||||
- libclang-6.0-dev
|
||||
# Common
|
||||
- xz-utils
|
||||
- libexpat1-dev
|
||||
- libx11-xcb-dev
|
||||
- libelf-dev
|
||||
- libunwind8-dev
|
||||
- python3.5
|
||||
- python3-pip
|
||||
- python3-setuptools
|
||||
- env:
|
||||
- LABEL="meson Gallium ST Clover LLVM-7"
|
||||
- BUILD=meson
|
||||
- UNWIND="true"
|
||||
- DRI_LOADERS="-Dglx=disabled -Degl=false -Dgbm=false"
|
||||
- GALLIUM_ST="-Ddri3=false -Dgallium-vdpau=false -Dgallium-xvmc=false -Dgallium-omx=disabled -Dgallium-va=false -Dgallium-xa=false -Dgallium-nine=false -Dgallium-opencl=icd"
|
||||
- GALLIUM_DRIVERS="r600,radeonsi"
|
||||
- LLVM_VERSION=7
|
||||
- LLVM_CONFIG="llvm-config-${LLVM_VERSION}"
|
||||
addons:
|
||||
apt:
|
||||
sources:
|
||||
- sourceline: 'deb http://apt.llvm.org/xenial/ llvm-toolchain-xenial-7 main'
|
||||
key_url: https://apt.llvm.org/llvm-snapshot.gpg.key
|
||||
packages:
|
||||
- libclc-dev
|
||||
# From sources above
|
||||
- llvm-7-dev
|
||||
- clang-7
|
||||
- libclang-7-dev
|
||||
# Common
|
||||
- xz-utils
|
||||
- libexpat1-dev
|
||||
- libx11-xcb-dev
|
||||
- libelf-dev
|
||||
- libunwind8-dev
|
||||
- python3.5
|
||||
- python3-pip
|
||||
- python3-setuptools
|
||||
- env:
|
||||
- LABEL="meson Gallium ST Other"
|
||||
- BUILD=meson
|
||||
- UNWIND="true"
|
||||
- DRI_LOADERS="-Dglx=disabled -Degl=false -Dgbm=false"
|
||||
- GALLIUM_ST="-Ddri3=true -Dgallium-vdpau=true -Dgallium-xvmc=true -Dgallium-omx=bellagio -Dgallium-va=true -Dgallium-xa=true -Dgallium-nine=true -Dgallium-opencl=disabled -Dosmesa=gallium"
|
||||
# We need swrast for osmesa and nine.
|
||||
# Nouveau supports, or builds at least against all ST.
|
||||
- GALLIUM_DRIVERS="nouveau,swrast"
|
||||
- LLVM_VERSION=5.0
|
||||
- LLVM_CONFIG="llvm-config-${LLVM_VERSION}"
|
||||
addons:
|
||||
apt:
|
||||
packages:
|
||||
- llvm-5.0-dev
|
||||
# LLVM packaging is broken and misses these dependencies
|
||||
- libedit-dev
|
||||
# Nine requires gcc 4.6... which is the one we have right ?
|
||||
- libxvmc-dev
|
||||
# Build locally, for now.
|
||||
#- libvdpau-dev
|
||||
#- libva-dev
|
||||
- libomxil-bellagio-dev
|
||||
# Common
|
||||
- xz-utils
|
||||
- libexpat1-dev
|
||||
- libx11-xcb-dev
|
||||
- libelf-dev
|
||||
- libunwind8-dev
|
||||
- python3.5
|
||||
- python3-pip
|
||||
- python3-setuptools
|
||||
- env:
|
||||
# NOTE: Building SWR is 2x (yes two) times slower than all the other
|
||||
# gallium drivers combined.
|
||||
# Start this early so that it doesn't hunder the run time.
|
||||
- LABEL="make Gallium Drivers SWR"
|
||||
- BUILD=make
|
||||
- MAKEFLAGS="-j4"
|
||||
- MAKE_CHECK_COMMAND="true"
|
||||
- LLVM_VERSION=6.0
|
||||
- LLVM_CONFIG="llvm-config-${LLVM_VERSION}"
|
||||
- DRI_LOADERS="--disable-glx --disable-gbm --disable-egl"
|
||||
- DRI_DRIVERS=""
|
||||
- GALLIUM_ST="--enable-dri --disable-opencl --disable-xa --disable-nine --disable-xvmc --disable-vdpau --disable-va --disable-omx-bellagio --disable-gallium-osmesa"
|
||||
- GALLIUM_DRIVERS="swr"
|
||||
- VULKAN_DRIVERS=""
|
||||
- LIBUNWIND_FLAGS="--enable-libunwind"
|
||||
addons:
|
||||
apt:
|
||||
packages:
|
||||
- llvm-6.0-dev
|
||||
# Common
|
||||
- xz-utils
|
||||
- libexpat1-dev
|
||||
- libx11-xcb-dev
|
||||
- libelf-dev
|
||||
- libunwind8-dev
|
||||
- python3-pip
|
||||
- python3-setuptools
|
||||
- env:
|
||||
- LABEL="make Gallium Drivers RadeonSI"
|
||||
- BUILD=make
|
||||
- MAKEFLAGS="-j4"
|
||||
- MAKE_CHECK_COMMAND="true"
|
||||
- LLVM_VERSION=7
|
||||
- LLVM_CONFIG="llvm-config-${LLVM_VERSION}"
|
||||
- DRI_LOADERS="--disable-glx --disable-gbm --disable-egl"
|
||||
- DRI_DRIVERS=""
|
||||
- GALLIUM_ST="--enable-dri --disable-opencl --disable-xa --disable-nine --disable-xvmc --disable-vdpau --disable-va --disable-omx-bellagio --disable-gallium-osmesa"
|
||||
- GALLIUM_DRIVERS="radeonsi"
|
||||
- VULKAN_DRIVERS=""
|
||||
- LIBUNWIND_FLAGS="--enable-libunwind"
|
||||
addons:
|
||||
apt:
|
||||
sources:
|
||||
- sourceline: 'deb http://apt.llvm.org/xenial/ llvm-toolchain-xenial-7 main'
|
||||
key_url: https://apt.llvm.org/llvm-snapshot.gpg.key
|
||||
packages:
|
||||
# From sources above
|
||||
- llvm-7-dev
|
||||
# Common
|
||||
- xz-utils
|
||||
- libexpat1-dev
|
||||
- libx11-xcb-dev
|
||||
- libelf-dev
|
||||
- libunwind8-dev
|
||||
- python3-pip
|
||||
- python3-setuptools
|
||||
- env:
|
||||
- LABEL="make Gallium Drivers Other"
|
||||
- BUILD=make
|
||||
- MAKEFLAGS="-j4"
|
||||
- MAKE_CHECK_COMMAND="true"
|
||||
- LLVM_VERSION=3.9
|
||||
- LLVM_CONFIG="llvm-config-${LLVM_VERSION}"
|
||||
- DRI_LOADERS="--disable-glx --disable-gbm --disable-egl"
|
||||
- DRI_DRIVERS=""
|
||||
- GALLIUM_ST="--enable-dri --disable-opencl --disable-xa --disable-nine --disable-xvmc --disable-vdpau --disable-va --disable-omx-bellagio --disable-gallium-osmesa"
|
||||
- GALLIUM_DRIVERS="i915,nouveau,kmsro,r300,r600,freedreno,svga,swrast,v3d,vc4,virgl,etnaviv"
|
||||
- VULKAN_DRIVERS=""
|
||||
- LIBUNWIND_FLAGS="--enable-libunwind"
|
||||
addons:
|
||||
apt:
|
||||
packages:
|
||||
# LLVM packaging is broken and misses these dependencies
|
||||
- libedit-dev
|
||||
- llvm-3.9-dev
|
||||
# Common
|
||||
- xz-utils
|
||||
- libexpat1-dev
|
||||
- libx11-xcb-dev
|
||||
- libelf-dev
|
||||
- libunwind8-dev
|
||||
- python3-pip
|
||||
- python3-setuptools
|
||||
- env:
|
||||
- LABEL="make Gallium ST Clover LLVM-3.9"
|
||||
- BUILD=make
|
||||
- MAKEFLAGS="-j4"
|
||||
- MAKE_CHECK_COMMAND="true"
|
||||
- LLVM_VERSION=3.9
|
||||
- LLVM_CONFIG="llvm-config-${LLVM_VERSION}"
|
||||
- DRI_LOADERS="--disable-glx --disable-gbm --disable-egl"
|
||||
- DRI_DRIVERS=""
|
||||
- GALLIUM_ST="--disable-dri --enable-opencl --enable-opencl-icd --enable-llvm --disable-xa --disable-nine --disable-xvmc --disable-vdpau --disable-va --disable-omx-bellagio --disable-gallium-osmesa"
|
||||
- GALLIUM_DRIVERS="r600"
|
||||
- VULKAN_DRIVERS=""
|
||||
- LIBUNWIND_FLAGS="--enable-libunwind"
|
||||
addons:
|
||||
apt:
|
||||
packages:
|
||||
- libclc-dev
|
||||
# LLVM packaging is broken and misses these dependencies
|
||||
- libedit-dev
|
||||
- llvm-3.9-dev
|
||||
- clang-3.9
|
||||
- libclang-3.9-dev
|
||||
# Common
|
||||
- xz-utils
|
||||
- libexpat1-dev
|
||||
- libx11-xcb-dev
|
||||
- libelf-dev
|
||||
- libunwind8-dev
|
||||
- python3-pip
|
||||
- python3-setuptools
|
||||
- env:
|
||||
- LABEL="make Gallium ST Clover LLVM-4.0"
|
||||
- BUILD=make
|
||||
- MAKEFLAGS="-j4"
|
||||
- MAKE_CHECK_COMMAND="true"
|
||||
- LLVM_VERSION=4.0
|
||||
- LLVM_CONFIG="llvm-config-${LLVM_VERSION}"
|
||||
- DRI_LOADERS="--disable-glx --disable-gbm --disable-egl"
|
||||
- DRI_DRIVERS=""
|
||||
- GALLIUM_ST="--disable-dri --enable-opencl --enable-opencl-icd --enable-llvm --disable-xa --disable-nine --disable-xvmc --disable-vdpau --disable-va --disable-omx-bellagio --disable-gallium-osmesa"
|
||||
- GALLIUM_DRIVERS="r600"
|
||||
- VULKAN_DRIVERS=""
|
||||
- LIBUNWIND_FLAGS="--enable-libunwind"
|
||||
addons:
|
||||
apt:
|
||||
packages:
|
||||
- libclc-dev
|
||||
# LLVM packaging is broken and misses these dependencies
|
||||
- libedit-dev
|
||||
- llvm-4.0-dev
|
||||
- clang-4.0
|
||||
- libclang-4.0-dev
|
||||
# Common
|
||||
- xz-utils
|
||||
- libexpat1-dev
|
||||
- libx11-xcb-dev
|
||||
- libelf-dev
|
||||
- libunwind8-dev
|
||||
- python3-pip
|
||||
- python3-setuptools
|
||||
- env:
|
||||
- LABEL="make Gallium ST Clover LLVM-5.0"
|
||||
- BUILD=make
|
||||
- MAKEFLAGS="-j4"
|
||||
- MAKE_CHECK_COMMAND="true"
|
||||
- LLVM_VERSION=5.0
|
||||
- LLVM_CONFIG="llvm-config-${LLVM_VERSION}"
|
||||
- DRI_LOADERS="--disable-glx --disable-gbm --disable-egl"
|
||||
- DRI_DRIVERS=""
|
||||
- GALLIUM_ST="--disable-dri --enable-opencl --enable-opencl-icd --enable-llvm --disable-xa --disable-nine --disable-xvmc --disable-vdpau --disable-va --disable-omx-bellagio --disable-gallium-osmesa"
|
||||
- GALLIUM_DRIVERS="r600"
|
||||
- VULKAN_DRIVERS=""
|
||||
- LIBUNWIND_FLAGS="--enable-libunwind"
|
||||
addons:
|
||||
apt:
|
||||
packages:
|
||||
- libclc-dev
|
||||
# LLVM packaging is broken and misses these dependencies
|
||||
- libedit-dev
|
||||
- llvm-5.0-dev
|
||||
- clang-5.0
|
||||
- libclang-5.0-dev
|
||||
# Common
|
||||
- xz-utils
|
||||
- libexpat1-dev
|
||||
- libx11-xcb-dev
|
||||
- libelf-dev
|
||||
- libunwind8-dev
|
||||
- python3-pip
|
||||
- python3-setuptools
|
||||
- env:
|
||||
- LABEL="make Gallium ST Clover LLVM-6.0"
|
||||
- BUILD=make
|
||||
- MAKEFLAGS="-j4"
|
||||
- MAKE_CHECK_COMMAND="true"
|
||||
- LLVM_VERSION=6.0
|
||||
- LLVM_CONFIG="llvm-config-${LLVM_VERSION}"
|
||||
- DRI_LOADERS="--disable-glx --disable-gbm --disable-egl"
|
||||
- DRI_DRIVERS=""
|
||||
- GALLIUM_ST="--disable-dri --enable-opencl --enable-opencl-icd --enable-llvm --disable-xa --disable-nine --disable-xvmc --disable-vdpau --disable-va --disable-omx-bellagio --disable-gallium-osmesa"
|
||||
- GALLIUM_DRIVERS="r600"
|
||||
- VULKAN_DRIVERS=""
|
||||
- LIBUNWIND_FLAGS="--enable-libunwind"
|
||||
addons:
|
||||
apt:
|
||||
packages:
|
||||
- libclc-dev
|
||||
- llvm-6.0-dev
|
||||
- clang-6.0
|
||||
- libclang-6.0-dev
|
||||
# Common
|
||||
- xz-utils
|
||||
- libexpat1-dev
|
||||
- libx11-xcb-dev
|
||||
- libelf-dev
|
||||
- libunwind8-dev
|
||||
- python3-pip
|
||||
- python3-setuptools
|
||||
- env:
|
||||
- LABEL="make Gallium ST Clover LLVM-7"
|
||||
- BUILD=make
|
||||
- MAKEFLAGS="-j4"
|
||||
- MAKE_CHECK_COMMAND="true"
|
||||
- LLVM_VERSION=7
|
||||
- LLVM_CONFIG="llvm-config-${LLVM_VERSION}"
|
||||
- DRI_LOADERS="--disable-glx --disable-gbm --disable-egl"
|
||||
- DRI_DRIVERS=""
|
||||
- GALLIUM_ST="--disable-dri --enable-opencl --enable-opencl-icd --enable-llvm --disable-xa --disable-nine --disable-xvmc --disable-vdpau --disable-va --disable-omx-bellagio --disable-gallium-osmesa"
|
||||
- GALLIUM_DRIVERS="r600,radeonsi"
|
||||
- VULKAN_DRIVERS=""
|
||||
- LIBUNWIND_FLAGS="--enable-libunwind"
|
||||
addons:
|
||||
apt:
|
||||
sources:
|
||||
- sourceline: 'deb http://apt.llvm.org/xenial/ llvm-toolchain-xenial-7 main'
|
||||
key_url: https://apt.llvm.org/llvm-snapshot.gpg.key
|
||||
packages:
|
||||
- libclc-dev
|
||||
# From sources above
|
||||
- llvm-7-dev
|
||||
- clang-7
|
||||
- libclang-7-dev
|
||||
# Common
|
||||
- xz-utils
|
||||
- libexpat1-dev
|
||||
- libx11-xcb-dev
|
||||
- libelf-dev
|
||||
- libunwind8-dev
|
||||
- env:
|
||||
- LABEL="make Gallium ST Other"
|
||||
- BUILD=make
|
||||
- MAKEFLAGS="-j4"
|
||||
- MAKE_CHECK_COMMAND="true"
|
||||
- LLVM_VERSION=3.5
|
||||
- LLVM_CONFIG="llvm-config-${LLVM_VERSION}"
|
||||
- DRI_LOADERS="--disable-glx --disable-gbm --disable-egl"
|
||||
- DRI_DRIVERS=""
|
||||
- GALLIUM_ST="--enable-dri --disable-opencl --enable-xa --enable-nine --enable-xvmc --enable-vdpau --enable-va --enable-omx-bellagio --enable-gallium-osmesa"
|
||||
# We need swrast for osmesa and nine.
|
||||
# i915 most likely doesn't work with most ST.
|
||||
# Regardless - we're doing a quick build test here.
|
||||
- GALLIUM_DRIVERS="i915,swrast"
|
||||
- VULKAN_DRIVERS=""
|
||||
- LIBUNWIND_FLAGS="--enable-libunwind"
|
||||
addons:
|
||||
apt:
|
||||
packages:
|
||||
# We actually want to test against llvm-3.3, yet 3.5 is available
|
||||
- llvm-3.5-dev
|
||||
# Nine requires gcc 4.6... which is the one we have right ?
|
||||
- libxvmc-dev
|
||||
# Build locally, for now.
|
||||
#- libvdpau-dev
|
||||
#- libva-dev
|
||||
- libomxil-bellagio-dev
|
||||
# LLVM packaging is broken and misses these dependencies
|
||||
- libedit-dev
|
||||
# Common
|
||||
- xz-utils
|
||||
- libexpat1-dev
|
||||
- libx11-xcb-dev
|
||||
- libelf-dev
|
||||
- libunwind8-dev
|
||||
- python3-pip
|
||||
- python3-setuptools
|
||||
- env:
|
||||
- LABEL="make Vulkan"
|
||||
- BUILD=make
|
||||
- MAKEFLAGS="-j4"
|
||||
- MAKE_CHECK_COMMAND="make -C src/gtest check && make -C src/intel check"
|
||||
- LLVM_VERSION=7
|
||||
- LLVM_CONFIG="llvm-config-${LLVM_VERSION}"
|
||||
- DRI_LOADERS="--disable-glx --disable-gbm --disable-egl --with-platforms=x11,wayland"
|
||||
- DRI_DRIVERS=""
|
||||
- GALLIUM_ST="--enable-dri --enable-dri3 --disable-opencl --disable-xa --disable-nine --disable-xvmc --disable-vdpau --disable-va --disable-omx-bellagio --disable-gallium-osmesa"
|
||||
- GALLIUM_DRIVERS=""
|
||||
- VULKAN_DRIVERS="intel,radeon"
|
||||
- LIBUNWIND_FLAGS="--disable-libunwind"
|
||||
addons:
|
||||
apt:
|
||||
sources:
|
||||
- sourceline: 'deb http://apt.llvm.org/xenial/ llvm-toolchain-xenial-7 main'
|
||||
key_url: https://apt.llvm.org/llvm-snapshot.gpg.key
|
||||
packages:
|
||||
# From sources above
|
||||
- llvm-7-dev
|
||||
# Common
|
||||
- xz-utils
|
||||
- libexpat1-dev
|
||||
- libx11-xcb-dev
|
||||
- libelf-dev
|
||||
- python3-pip
|
||||
- python3-setuptools
|
||||
- env:
|
||||
- LABEL="scons"
|
||||
- BUILD=scons
|
||||
- SCONSFLAGS="-j4"
|
||||
# Explicitly disable.
|
||||
- SCONS_TARGET="llvm=0"
|
||||
# Keep it symmetrical to the make build.
|
||||
- SCONS_CHECK_COMMAND="scons llvm=0 check"
|
||||
addons:
|
||||
apt:
|
||||
packages:
|
||||
# Common
|
||||
- xz-utils
|
||||
- x11proto-xf86vidmode-dev
|
||||
- libexpat1-dev
|
||||
- libx11-xcb-dev
|
||||
- libelf-dev
|
||||
- env:
|
||||
- LABEL="scons LLVM"
|
||||
- BUILD=scons
|
||||
- SCONSFLAGS="-j4"
|
||||
- SCONS_TARGET="llvm=1"
|
||||
# Keep it symmetrical to the make build.
|
||||
- SCONS_CHECK_COMMAND="scons llvm=1 check"
|
||||
- LLVM_VERSION=3.5
|
||||
- LLVM_CONFIG="llvm-config-${LLVM_VERSION}"
|
||||
addons:
|
||||
apt:
|
||||
packages:
|
||||
# LLVM packaging is broken and misses these dependencies
|
||||
- libedit-dev
|
||||
# We actually want to test against llvm-3.3, yet 3.5 is available
|
||||
- llvm-3.5-dev
|
||||
# Common
|
||||
- xz-utils
|
||||
- x11proto-xf86vidmode-dev
|
||||
- libexpat1-dev
|
||||
- libx11-xcb-dev
|
||||
- libelf-dev
|
||||
- env:
|
||||
- LABEL="scons SWR"
|
||||
- BUILD=scons
|
||||
- SCONSFLAGS="-j4"
|
||||
- SCONS_TARGET="swr=1"
|
||||
- LLVM_VERSION=6.0
|
||||
- LLVM_CONFIG="llvm-config-${LLVM_VERSION}"
|
||||
# Keep it symmetrical to the make build. There's no actual SWR, yet.
|
||||
- SCONS_CHECK_COMMAND="true"
|
||||
addons:
|
||||
apt:
|
||||
packages:
|
||||
- llvm-6.0-dev
|
||||
# Common
|
||||
- xz-utils
|
||||
- x11proto-xf86vidmode-dev
|
||||
- libexpat1-dev
|
||||
- libx11-xcb-dev
|
||||
- libelf-dev
|
||||
- env:
|
||||
- LABEL="macOS make"
|
||||
- BUILD=make
|
||||
- MAKEFLAGS="-j4"
|
||||
- MAKE_CHECK_COMMAND="make check"
|
||||
- DRI_LOADERS="--with-platforms=x11 --disable-egl"
|
||||
os: osx
|
||||
- env:
|
||||
- LABEL="macOS meson"
|
||||
- BUILD=meson
|
||||
- UNWIND="false"
|
||||
- DRI_LOADERS="-Dglx=dri -Dgbm=false -Degl=false -Dplatforms=x11 -Dosmesa=none"
|
||||
- GALLIUM_ST="-Ddri3=true -Dgallium-vdpau=false -Dgallium-xvmc=false -Dgallium-omx=disabled -Dgallium-va=false -Dgallium-xa=false -Dgallium-nine=false -Dgallium-opencl=disabled"
|
||||
os: osx
|
||||
|
||||
before_install:
|
||||
- HOMEBREW_NO_AUTO_UPDATE=1 brew install expat gettext
|
||||
- if test "x$BUILD" = xmeson; then
|
||||
HOMEBREW_NO_AUTO_UPDATE=1 brew install ninja;
|
||||
fi
|
||||
- if test "x$BUILD" = xscons; then
|
||||
HOMEBREW_NO_AUTO_UPDATE=1 brew install scons;
|
||||
fi
|
||||
- |
|
||||
if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then
|
||||
HOMEBREW_NO_AUTO_UPDATE=1 brew install python3 ninja expat gettext
|
||||
# Set PATH for homebrew pip3 installs
|
||||
PATH="$HOME/Library/Python/3.6/bin:${PATH}"
|
||||
# Set PKG_CONFIG_PATH for keg-only expat
|
||||
PKG_CONFIG_PATH="/usr/local/opt/expat/lib/pkgconfig:${PKG_CONFIG_PATH}"
|
||||
# Set PATH for keg-only gettext
|
||||
PATH="/usr/local/opt/gettext/bin:${PATH}"
|
||||
|
||||
# Set PATH for homebrew pip3 installs
|
||||
- PYTHON_VERSION=$(python3 -V | awk '{print $2}' | cut -d. -f1-2)
|
||||
- PATH="$HOME/Library/Python/$PYTHON_VERSION/bin:${PATH}"
|
||||
# Set PKG_CONFIG_PATH for keg-only expat
|
||||
- PKG_CONFIG_PATH="/usr/local/opt/expat/lib/pkgconfig:${PKG_CONFIG_PATH}"
|
||||
# Set PATH for keg-only gettext
|
||||
- PATH="/usr/local/opt/gettext/bin:${PATH}"
|
||||
|
||||
# Install xquartz for prereqs ...
|
||||
- XQUARTZ_VERSION="2.7.11"
|
||||
- wget -nv https://dl.bintray.com/xquartz/downloads/XQuartz-${XQUARTZ_VERSION}.dmg
|
||||
- hdiutil attach XQuartz-${XQUARTZ_VERSION}.dmg
|
||||
- sudo installer -pkg /Volumes/XQuartz-${XQUARTZ_VERSION}/XQuartz.pkg -target /
|
||||
- hdiutil detach /Volumes/XQuartz-${XQUARTZ_VERSION}
|
||||
# ... and set paths
|
||||
- PKG_CONFIG_PATH="/opt/X11/share/pkgconfig:/opt/X11/lib/pkgconfig:${PKG_CONFIG_PATH}"
|
||||
# Install xquartz for prereqs ...
|
||||
XQUARTZ_VERSION="2.7.11"
|
||||
wget -nv https://dl.bintray.com/xquartz/downloads/XQuartz-${XQUARTZ_VERSION}.dmg
|
||||
hdiutil attach XQuartz-${XQUARTZ_VERSION}.dmg
|
||||
sudo installer -pkg /Volumes/XQuartz-${XQUARTZ_VERSION}/XQuartz.pkg -target /
|
||||
hdiutil detach /Volumes/XQuartz-${XQUARTZ_VERSION}
|
||||
# ... and set paths
|
||||
PATH="/opt/X11/bin:${PATH}"
|
||||
PKG_CONFIG_PATH="/opt/X11/share/pkgconfig:/opt/X11/lib/pkgconfig:${PKG_CONFIG_PATH}"
|
||||
ACLOCAL="aclocal -I /opt/X11/share/aclocal -I /usr/local/share/aclocal"
|
||||
fi
|
||||
|
||||
install:
|
||||
# Install a more modern meson from pip, since the version in the
|
||||
# ubuntu repos is often quite old.
|
||||
- if test "x$BUILD" = xmeson; then
|
||||
pip3 install --user meson;
|
||||
pip3 install --user mako;
|
||||
fi
|
||||
- if test "x$BUILD" = xscons; then
|
||||
|
||||
# Install autotools build dependencies
|
||||
- if test "x$BUILD" = xmake; then
|
||||
pip2 install --user mako;
|
||||
fi
|
||||
|
||||
script:
|
||||
- if test "x$BUILD" = xmeson; then
|
||||
meson _build -Dbuild-tests=true;
|
||||
ninja -C _build || travis_terminate 1;
|
||||
ninja -C _build test || travis_terminate 1;
|
||||
ninja -C _build install || travis_terminate 1;
|
||||
fi
|
||||
# Install a more modern scons from pip.
|
||||
- if test "x$BUILD" = xscons; then
|
||||
scons force_scons=1 || travis_terminate 1;
|
||||
scons force_scons=1 check || travis_terminate 1;
|
||||
pip2 install --user "scons>=2.4";
|
||||
pip2 install --user mako;
|
||||
fi
|
||||
|
||||
# Install dependencies where we require specific versions (or where
|
||||
# disallowed by Travis CI's package whitelisting).
|
||||
|
||||
- |
|
||||
if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then
|
||||
wget $XORG_RELEASES/util/$XORGMACROS_VERSION.tar.bz2
|
||||
tar -jxvf $XORGMACROS_VERSION.tar.bz2
|
||||
(cd $XORGMACROS_VERSION && ./configure --prefix=$HOME/prefix && make install)
|
||||
|
||||
wget $XORG_RELEASES/proto/$GLPROTO_VERSION.tar.bz2
|
||||
tar -jxvf $GLPROTO_VERSION.tar.bz2
|
||||
(cd $GLPROTO_VERSION && ./configure --prefix=$HOME/prefix && make install)
|
||||
|
||||
wget $XORG_RELEASES/proto/$DRI2PROTO_VERSION.tar.bz2
|
||||
tar -jxvf $DRI2PROTO_VERSION.tar.bz2
|
||||
(cd $DRI2PROTO_VERSION && ./configure --prefix=$HOME/prefix && make install)
|
||||
|
||||
wget $XCB_RELEASES/$XCBPROTO_VERSION.tar.bz2
|
||||
tar -jxvf $XCBPROTO_VERSION.tar.bz2
|
||||
(cd $XCBPROTO_VERSION && ./configure --prefix=$HOME/prefix && make install)
|
||||
|
||||
wget $XCB_RELEASES/$LIBXCB_VERSION.tar.bz2
|
||||
tar -jxvf $LIBXCB_VERSION.tar.bz2
|
||||
(cd $LIBXCB_VERSION && ./configure --prefix=$HOME/prefix && make install)
|
||||
|
||||
wget $XORG_RELEASES/lib/$LIBPCIACCESS_VERSION.tar.bz2
|
||||
tar -jxvf $LIBPCIACCESS_VERSION.tar.bz2
|
||||
(cd $LIBPCIACCESS_VERSION && ./configure --prefix=$HOME/prefix && make install)
|
||||
|
||||
wget https://dri.freedesktop.org/libdrm/$LIBDRM_VERSION.tar.bz2
|
||||
tar -jxvf $LIBDRM_VERSION.tar.bz2
|
||||
(cd $LIBDRM_VERSION && ./configure --prefix=$HOME/prefix --enable-vc4 --enable-freedreno --enable-etnaviv-experimental-api && make install)
|
||||
|
||||
wget $XORG_RELEASES/proto/$RANDRPROTO_VERSION.tar.bz2
|
||||
tar -jxvf $RANDRPROTO_VERSION.tar.bz2
|
||||
(cd $RANDRPROTO_VERSION && ./configure --prefix=$HOME/prefix && make install)
|
||||
|
||||
wget $XORG_RELEASES/lib/$LIBXRANDR_VERSION.tar.bz2
|
||||
tar -jxvf $LIBXRANDR_VERSION.tar.bz2
|
||||
(cd $LIBXRANDR_VERSION && ./configure --prefix=$HOME/prefix && make install)
|
||||
|
||||
wget $XORG_RELEASES/lib/$LIBXSHMFENCE_VERSION.tar.bz2
|
||||
tar -jxvf $LIBXSHMFENCE_VERSION.tar.bz2
|
||||
(cd $LIBXSHMFENCE_VERSION && ./configure --prefix=$HOME/prefix && make install)
|
||||
|
||||
wget https://people.freedesktop.org/~aplattner/vdpau/$LIBVDPAU_VERSION.tar.bz2
|
||||
tar -jxvf $LIBVDPAU_VERSION.tar.bz2
|
||||
(cd $LIBVDPAU_VERSION && ./configure --prefix=$HOME/prefix && make install)
|
||||
|
||||
wget https://www.freedesktop.org/software/vaapi/releases/libva/$LIBVA_VERSION.tar.bz2
|
||||
tar -jxvf $LIBVA_VERSION.tar.bz2
|
||||
(cd $LIBVA_VERSION && ./configure --prefix=$HOME/prefix --disable-wayland --disable-dummy-driver && make install)
|
||||
|
||||
wget $WAYLAND_RELEASES/$LIBWAYLAND_VERSION.tar.xz
|
||||
tar -axvf $LIBWAYLAND_VERSION.tar.xz
|
||||
(cd $LIBWAYLAND_VERSION && ./configure --prefix=$HOME/prefix --enable-libraries --without-host-scanner --disable-documentation --disable-dtd-validation && make install)
|
||||
|
||||
wget $WAYLAND_RELEASES/$WAYLAND_PROTOCOLS_VERSION.tar.xz
|
||||
tar -axvf $WAYLAND_PROTOCOLS_VERSION.tar.xz
|
||||
(cd $WAYLAND_PROTOCOLS_VERSION && ./configure --prefix=$HOME/prefix && make install)
|
||||
|
||||
# Meson requires ninja >= 1.6, but xenial has 1.3.x
|
||||
wget https://github.com/ninja-build/ninja/releases/download/v1.6.0/ninja-linux.zip
|
||||
unzip ninja-linux.zip
|
||||
mv ninja $HOME/prefix/bin/
|
||||
|
||||
# Generate this header since one is missing on the Travis instance
|
||||
mkdir -p linux
|
||||
printf "%s\n" \
|
||||
"#ifndef _LINUX_MEMFD_H" \
|
||||
"#define _LINUX_MEMFD_H" \
|
||||
"" \
|
||||
"#define MFD_CLOEXEC 0x0001U" \
|
||||
"#define MFD_ALLOW_SEALING 0x0002U" \
|
||||
"" \
|
||||
"#endif /* _LINUX_MEMFD_H */" > linux/memfd.h
|
||||
|
||||
# Generate this header, including the missing SYS_memfd_create
|
||||
# macro, which is not provided by the header in the Travis
|
||||
# instance
|
||||
mkdir -p sys
|
||||
printf "%s\n" \
|
||||
"#ifndef _SYSCALL_H" \
|
||||
"#define _SYSCALL_H 1" \
|
||||
"" \
|
||||
"#include <asm/unistd.h>" \
|
||||
"" \
|
||||
"#ifndef _LIBC" \
|
||||
"# include <bits/syscall.h>" \
|
||||
"#endif" \
|
||||
"" \
|
||||
"#ifndef __NR_memfd_create" \
|
||||
"# define __NR_memfd_create 319 /* Taken from <asm/unistd_64.h> */" \
|
||||
"#endif" \
|
||||
"" \
|
||||
"#ifndef SYS_memfd_create" \
|
||||
"# define SYS_memfd_create __NR_memfd_create" \
|
||||
"#endif" \
|
||||
"" \
|
||||
"#endif" > sys/syscall.h
|
||||
fi
|
||||
|
||||
script:
|
||||
- if test "x$BUILD" = xmake; then
|
||||
export CFLAGS="$CFLAGS -isystem`pwd`";
|
||||
|
||||
mkdir build &&
|
||||
cd build &&
|
||||
../autogen.sh
|
||||
--enable-autotools
|
||||
--enable-debug
|
||||
$LIBUNWIND_FLAGS
|
||||
$DRI_LOADERS
|
||||
--with-dri-drivers=$DRI_DRIVERS
|
||||
$GALLIUM_ST
|
||||
--with-gallium-drivers=$GALLIUM_DRIVERS
|
||||
--with-vulkan-drivers=$VULKAN_DRIVERS
|
||||
--disable-llvm-shared-libs
|
||||
&&
|
||||
make && eval $MAKE_CHECK_COMMAND;
|
||||
fi
|
||||
|
||||
- if test "x$BUILD" = xscons; then
|
||||
scons $SCONS_TARGET && eval $SCONS_CHECK_COMMAND;
|
||||
fi
|
||||
|
||||
- |
|
||||
if test "x$BUILD" = xmeson; then
|
||||
if test -n "$LLVM_CONFIG"; then
|
||||
# We need to control the version of llvm-config we're using, so we'll
|
||||
# generate a native file to do so. This requires meson >=0.49
|
||||
#
|
||||
echo -e "[binaries]\nllvm-config = '`which $LLVM_CONFIG`'" > native.file
|
||||
|
||||
$LLVM_CONFIG --version
|
||||
else
|
||||
: > native.file
|
||||
fi
|
||||
|
||||
export CFLAGS="$CFLAGS -isystem`pwd`"
|
||||
meson _build \
|
||||
--native-file=native.file \
|
||||
-Dbuild-tests=true \
|
||||
-Dlibunwind=${UNWIND} \
|
||||
${DRI_LOADERS} \
|
||||
-Ddri-drivers=${DRI_DRIVERS:-[]} \
|
||||
${GALLIUM_ST} \
|
||||
-Dgallium-drivers=${GALLIUM_DRIVERS:-[]} \
|
||||
-Dvulkan-drivers=${VULKAN_DRIVERS:-[]}
|
||||
meson configure _build
|
||||
ninja -C _build
|
||||
ninja -C _build test
|
||||
fi
|
||||
|
@@ -32,14 +32,13 @@ LOCAL_C_INCLUDES += \
|
||||
MESA_VERSION := $(shell cat $(MESA_TOP)/VERSION)
|
||||
LOCAL_CFLAGS += \
|
||||
-Wno-error \
|
||||
-Werror=incompatible-pointer-types \
|
||||
-Wno-unused-parameter \
|
||||
-Wno-pointer-arith \
|
||||
-Wno-missing-field-initializers \
|
||||
-Wno-initializer-overrides \
|
||||
-Wno-mismatched-tags \
|
||||
-DPACKAGE_VERSION=\"$(MESA_VERSION)\" \
|
||||
-DPACKAGE_BUGREPORT=\"https://gitlab.freedesktop.org/mesa/mesa/issues\"
|
||||
-DPACKAGE_BUGREPORT=\"https://bugs.freedesktop.org/enter_bug.cgi?product=Mesa\"
|
||||
|
||||
# XXX: The following __STDC_*_MACROS defines should not be needed.
|
||||
# It's likely due to a bug elsewhere, but let's temporarily add them
|
||||
@@ -98,14 +97,12 @@ ifeq ($(filter 5 6 7 8 9, $(MESA_ANDROID_MAJOR_VERSION)),)
|
||||
LOCAL_CFLAGS += -DHAVE_TIMESPEC_GET
|
||||
endif
|
||||
|
||||
# Android's libc began supporting shm in Oreo
|
||||
ifeq ($(shell test $(PLATFORM_SDK_VERSION) -ge 26 && echo true),true)
|
||||
LOCAL_CFLAGS += -DHAVE_SYS_SHM_H
|
||||
endif
|
||||
|
||||
ifeq ($(strip $(MESA_ENABLE_ASM)),true)
|
||||
ifeq ($(TARGET_ARCH),x86)
|
||||
LOCAL_CFLAGS += \
|
||||
-DUSE_X86_ASM
|
||||
|
||||
endif
|
||||
endif
|
||||
ifeq ($(ARCH_ARM_HAVE_NEON),true)
|
||||
LOCAL_CFLAGS_arm += -DUSE_ARM_ASM
|
||||
|
31
Android.mk
31
Android.mk
@@ -24,7 +24,7 @@
|
||||
# BOARD_GPU_DRIVERS should be defined. The valid values are
|
||||
#
|
||||
# classic drivers: i915 i965
|
||||
# gallium drivers: swrast freedreno i915g nouveau kmsro r300g r600g radeonsi vc4 virgl vmwgfx etnaviv iris lima panfrost
|
||||
# gallium drivers: swrast freedreno i915g nouveau kmsro r300g r600g radeonsi vc4 virgl vmwgfx etnaviv
|
||||
#
|
||||
# The main target is libGLES_mesa. For each classic driver enabled, a DRI
|
||||
# module will also be built. DRI modules will be loaded by libGLES_mesa.
|
||||
@@ -43,7 +43,6 @@ MESA_DRI_LDFLAGS := -Wl,--build-id=sha1
|
||||
|
||||
MESA_COMMON_MK := $(MESA_TOP)/Android.common.mk
|
||||
MESA_PYTHON2 := python
|
||||
MESA_PYTHON3 := python3
|
||||
|
||||
# Lists to convert driver names to boolean variables
|
||||
# in form of <driver name>.<boolean make variable>
|
||||
@@ -60,10 +59,7 @@ gallium_drivers := \
|
||||
vmwgfx.HAVE_GALLIUM_VMWGFX \
|
||||
vc4.HAVE_GALLIUM_VC4 \
|
||||
virgl.HAVE_GALLIUM_VIRGL \
|
||||
etnaviv.HAVE_GALLIUM_ETNAVIV \
|
||||
iris.HAVE_GALLIUM_IRIS \
|
||||
lima.HAVE_GALLIUM_LIMA \
|
||||
panfrost.HAVE_GALLIUM_PANFROST
|
||||
etnaviv.HAVE_GALLIUM_ETNAVIV
|
||||
|
||||
ifeq ($(BOARD_GPU_DRIVERS),all)
|
||||
MESA_BUILD_CLASSIC := $(filter HAVE_%, $(subst ., , $(classic_drivers)))
|
||||
@@ -85,21 +81,33 @@ endif
|
||||
|
||||
$(foreach d, $(MESA_BUILD_CLASSIC) $(MESA_BUILD_GALLIUM), $(eval $(d) := true))
|
||||
|
||||
# host and target must be the same arch to generate matypes.h
|
||||
ifeq ($(TARGET_ARCH),$(HOST_ARCH))
|
||||
MESA_ENABLE_ASM := true
|
||||
else
|
||||
MESA_ENABLE_ASM := false
|
||||
endif
|
||||
|
||||
ifneq ($(filter true, $(HAVE_GALLIUM_RADEONSI)),)
|
||||
MESA_ENABLE_LLVM := true
|
||||
endif
|
||||
|
||||
define mesa-build-with-llvm
|
||||
$(if $(filter $(MESA_ANDROID_MAJOR_VERSION), 4 5 6 7), \
|
||||
$(if $(filter $(MESA_ANDROID_MAJOR_VERSION), 4 5), \
|
||||
$(warning Unsupported LLVM version in Android $(MESA_ANDROID_MAJOR_VERSION)),) \
|
||||
$(eval LOCAL_CFLAGS += -DLLVM_AVAILABLE -DMESA_LLVM_VERSION_STRING=\"3.9\") \
|
||||
$(if $(filter 6,$(MESA_ANDROID_MAJOR_VERSION)), \
|
||||
$(eval LOCAL_CFLAGS += -DHAVE_LLVM=0x0307 -DMESA_LLVM_VERSION_PATCH=0)) \
|
||||
$(if $(filter 7,$(MESA_ANDROID_MAJOR_VERSION)), \
|
||||
$(eval LOCAL_CFLAGS += -DHAVE_LLVM=0x0308 -DMESA_LLVM_VERSION_PATCH=0)) \
|
||||
$(if $(filter 8,$(MESA_ANDROID_MAJOR_VERSION)), \
|
||||
$(eval LOCAL_CFLAGS += -DHAVE_LLVM=0x0309 -DMESA_LLVM_VERSION_PATCH=0)) \
|
||||
$(if $(filter P,$(MESA_ANDROID_MAJOR_VERSION)), \
|
||||
$(eval LOCAL_CFLAGS += -DHAVE_LLVM=0x0309 -DMESA_LLVM_VERSION_PATCH=0)) \
|
||||
$(eval LOCAL_SHARED_LIBRARIES += libLLVM)
|
||||
endef
|
||||
|
||||
# add subdirectories
|
||||
SUBDIRS := \
|
||||
src/etnaviv \
|
||||
src/freedreno \
|
||||
src/gbm \
|
||||
src/loader \
|
||||
src/mapi \
|
||||
@@ -111,8 +119,7 @@ SUBDIRS := \
|
||||
src/broadcom \
|
||||
src/intel \
|
||||
src/mesa/drivers/dri \
|
||||
src/vulkan \
|
||||
src/panfrost \
|
||||
src/vulkan
|
||||
|
||||
INC_DIRS := $(call all-named-subdir-makefiles,$(SUBDIRS))
|
||||
INC_DIRS += $(call all-named-subdir-makefiles,src/gallium)
|
||||
|
93
Makefile.am
Normal file
93
Makefile.am
Normal file
@@ -0,0 +1,93 @@
|
||||
# Copyright © 2012 Intel Corporation
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person obtaining a
|
||||
# copy of this software and associated documentation files (the "Software"),
|
||||
# to deal in the Software without restriction, including without limitation
|
||||
# the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
# and/or sell copies of the Software, and to permit persons to whom the
|
||||
# Software is furnished to do so, subject to the following conditions:
|
||||
#
|
||||
# The above copyright notice and this permission notice (including the next
|
||||
# paragraph) shall be included in all copies or substantial portions of the
|
||||
# Software.
|
||||
#
|
||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
||||
# IN THE SOFTWARE.
|
||||
|
||||
SUBDIRS = src
|
||||
|
||||
AM_DISTCHECK_CONFIGURE_FLAGS = \
|
||||
--enable-autotools \
|
||||
--enable-dri \
|
||||
--enable-dri3 \
|
||||
--enable-egl \
|
||||
--enable-gallium-tests \
|
||||
--enable-gallium-osmesa \
|
||||
--enable-llvm \
|
||||
--enable-gbm \
|
||||
--enable-gles1 \
|
||||
--enable-gles2 \
|
||||
--enable-glx \
|
||||
--enable-glx-tls \
|
||||
--enable-nine \
|
||||
--enable-opencl \
|
||||
--enable-opencl-icd \
|
||||
--enable-opengl \
|
||||
--enable-va \
|
||||
--enable-vdpau \
|
||||
--enable-xa \
|
||||
--enable-xvmc \
|
||||
--enable-llvm-shared-libs \
|
||||
--enable-libunwind \
|
||||
--with-platforms=x11,wayland,drm,surfaceless \
|
||||
--with-dri-drivers=i915,i965,nouveau,radeon,r200,swrast \
|
||||
--with-gallium-drivers=i915,nouveau,r300,kmsro,r600,radeonsi,freedreno,svga,swrast,vc4,tegra,virgl,swr,etnaviv \
|
||||
--with-vulkan-drivers=intel,radeon
|
||||
|
||||
ACLOCAL_AMFLAGS = -I m4
|
||||
|
||||
EXTRA_DIST = \
|
||||
autogen.sh \
|
||||
common.py \
|
||||
docs \
|
||||
doxygen \
|
||||
bin/git_sha1_gen.py \
|
||||
scons \
|
||||
SConstruct \
|
||||
build-support/conftest.dyn \
|
||||
build-support/conftest.map \
|
||||
meson.build \
|
||||
meson_options.txt \
|
||||
bin/meson.build \
|
||||
include/meson.build \
|
||||
bin/install_megadrivers.py \
|
||||
bin/meson_get_version.py
|
||||
|
||||
noinst_HEADERS = \
|
||||
include/c99_alloca.h \
|
||||
include/c99_compat.h \
|
||||
include/c99_math.h \
|
||||
include/c11 \
|
||||
include/drm-uapi/drm.h \
|
||||
include/drm-uapi/drm_fourcc.h \
|
||||
include/drm-uapi/drm_mode.h \
|
||||
include/drm-uapi/i915_drm.h \
|
||||
include/drm-uapi/tegra_drm.h \
|
||||
include/drm-uapi/v3d_drm.h \
|
||||
include/drm-uapi/vc4_drm.h \
|
||||
include/D3D9 \
|
||||
include/GL/wglext.h \
|
||||
include/HaikuGL \
|
||||
include/no_extern_c.h \
|
||||
include/pci_ids \
|
||||
include/vulkan
|
||||
|
||||
# We list some directories in EXTRA_DIST, but don't actually want to include
|
||||
# the .gitignore files in the tarball.
|
||||
dist-hook:
|
||||
find $(distdir) -name .gitignore -exec $(RM) {} +
|
22
README.rst
22
README.rst
@@ -9,6 +9,25 @@ This repository lives at https://gitlab.freedesktop.org/mesa/mesa.
|
||||
Other repositories are likely forks, and code found there is not supported.
|
||||
|
||||
|
||||
Build status
|
||||
------------
|
||||
|
||||
Travis:
|
||||
|
||||
.. image:: https://travis-ci.org/mesa3d/mesa.svg?branch=master
|
||||
:target: https://travis-ci.org/mesa3d/mesa
|
||||
|
||||
Appveyor:
|
||||
|
||||
.. image:: https://img.shields.io/appveyor/ci/mesa3d/mesa.svg
|
||||
:target: https://ci.appveyor.com/project/mesa3d/mesa
|
||||
|
||||
Coverity:
|
||||
|
||||
.. image:: https://scan.coverity.com/projects/139/badge.svg?flat=1
|
||||
:target: https://scan.coverity.com/projects/mesa
|
||||
|
||||
|
||||
Build & install
|
||||
---------------
|
||||
|
||||
@@ -56,4 +75,5 @@ Contributions are welcome, and step-by-step instructions can be found in our
|
||||
documentation (`docs/submittingpatches.html
|
||||
<https://mesa3d.org/submittingpatches.html>`_).
|
||||
|
||||
Note that Mesa uses gitlab for patches submission, review and discussions.
|
||||
Note that Mesa uses email mailing-lists for patches submission, review and
|
||||
discussions.
|
||||
|
49
REVIEWERS
49
REVIEWERS
@@ -1,11 +1,30 @@
|
||||
Overview:
|
||||
|
||||
This file is similar in syntax (or more precisly a subset) of what is
|
||||
used by the MAINTAINERS file in the linux kernel.
|
||||
used by the MAINTAINERS file in the linux kernel. Some fields do not
|
||||
apply, for example, in all cases, send patches to:
|
||||
|
||||
mesa-dev@lists.freedesktop.org
|
||||
|
||||
and in all cases the patchwork instance is:
|
||||
|
||||
https://patchwork.freedesktop.org/project/mesa/
|
||||
|
||||
The purpose is not exactly the same the MAINTAINERS file in the linux
|
||||
kernel, as there are not official/formal maintainers of different
|
||||
subsystems in mesa, but is meant to give an idea of who to CC for
|
||||
various patches for review.
|
||||
various patches for review, and to allow the use of
|
||||
scripts/get_reviewer.pl as git --cc-cmd.
|
||||
|
||||
Usage:
|
||||
|
||||
When sending patches:
|
||||
|
||||
git send-email --cc-cmd ./scripts/get_reviewer.pl ...
|
||||
|
||||
Or to configure as default:
|
||||
|
||||
git config sendemail.cccmd ./scripts/get_reviewer.pl
|
||||
|
||||
Descriptions of section entries:
|
||||
|
||||
@@ -17,6 +36,14 @@ Descriptions of section entries:
|
||||
F: drivers/net/* all files in drivers/net, but not below
|
||||
F: */net/* all files in "any top level directory"/net
|
||||
One pattern per line. Multiple F: lines acceptable.
|
||||
N: Files and directories with regex patterns.
|
||||
N: [^a-z]tegra all files whose path contains the word tegra
|
||||
One pattern per line. Multiple N: lines acceptable.
|
||||
scripts/get_maintainer.pl has different behavior for files that
|
||||
match F: pattern and matches of N: patterns. By default,
|
||||
get_maintainer will not look at git log history when an F: pattern
|
||||
match occurs. When an N: match occurs, git log history is used
|
||||
to also notify the people that have git commit signatures.
|
||||
|
||||
Maintainers List (try to look for most precise areas first)
|
||||
|
||||
@@ -67,6 +94,14 @@ GALLIUM TARGETS
|
||||
R: Emil Velikov <emil.l.velikov@gmail.com>
|
||||
F: src/gallium/targets/
|
||||
|
||||
AUTOCONF BUILD
|
||||
R: Emil Velikov <emil.l.velikov@gmail.com>
|
||||
F: autogen.sh
|
||||
F: configure.ac
|
||||
F: */Automake.inc
|
||||
F: */Makefile.*am
|
||||
F: */Makefile.sources
|
||||
|
||||
SCONS BUILD
|
||||
F: scons/
|
||||
F: */SConscript*
|
||||
@@ -108,13 +143,3 @@ VULKAN
|
||||
R: Eric Engestrom <eric@engestrom.ch>
|
||||
F: src/vulkan/
|
||||
F: include/vulkan/
|
||||
|
||||
VMWARE DRIVER
|
||||
R: Brian Paul <brianp@vmware.com>
|
||||
R: Charmaine Lee <charmainel@vmware.com>
|
||||
F: src/gallium/drivers/svga/
|
||||
|
||||
VMWARE WINSYS CODE
|
||||
R: Thomas Hellstrom <thellstrom@vmware.com>
|
||||
R: Deepak Rawat <drawat@vmware.com>
|
||||
F: src/gallium/winsys/svga/
|
||||
|
23
SConstruct
23
SConstruct
@@ -20,7 +20,6 @@
|
||||
# to get the full list of options. See scons manpage for more info.
|
||||
#
|
||||
|
||||
from __future__ import print_function
|
||||
import os
|
||||
import os.path
|
||||
import sys
|
||||
@@ -67,26 +66,6 @@ else:
|
||||
|
||||
Help(opts.GenerateHelpText(env))
|
||||
|
||||
|
||||
#######################################################################
|
||||
# Print a deprecation warning for using scons on non-windows
|
||||
|
||||
if common.host_platform != 'windows' and env['platform'] != 'windows':
|
||||
if env['force_scons']:
|
||||
print("WARNING: Scons is deprecated for non-windows platforms (including cygwin) "
|
||||
"please use meson instead.", file=sys.stderr)
|
||||
else:
|
||||
print("ERROR: Scons is deprecated for non-windows platforms (including cygwin) "
|
||||
"please use meson instead. If you really need to use scons you "
|
||||
"can add `force_scons=1` to the scons command line.", file=sys.stderr)
|
||||
sys.exit(1)
|
||||
else:
|
||||
print("WARNING: Scons support is in the process of being deprecated on "
|
||||
"on windows platforms (including mingw). If you haven't already "
|
||||
"please try using meson for windows builds. Be sure to report any "
|
||||
"issues you run into", file=sys.stderr)
|
||||
|
||||
|
||||
#######################################################################
|
||||
# Environment setup
|
||||
|
||||
@@ -94,7 +73,7 @@ with open("VERSION") as f:
|
||||
mesa_version = f.read().strip()
|
||||
env.Append(CPPDEFINES = [
|
||||
('PACKAGE_VERSION', '\\"%s\\"' % mesa_version),
|
||||
('PACKAGE_BUGREPORT', '\\"https://gitlab.freedesktop.org/mesa/mesa/issues\\"'),
|
||||
('PACKAGE_BUGREPORT', '\\"https://bugs.freedesktop.org/enter_bug.cgi?product=Mesa\\"'),
|
||||
])
|
||||
|
||||
# Includes
|
||||
|
41
appveyor.yml
41
appveyor.yml
@@ -38,7 +38,6 @@ cache:
|
||||
- '%LOCALAPPDATA%\pip\Cache -> appveyor.yml'
|
||||
- win_flex_bison-2.5.15.zip
|
||||
- llvm-5.0.1-msvc2017-mtd.7z
|
||||
- subprojects\packagecache -> subprojects\*.wrap
|
||||
|
||||
os: Visual Studio 2017
|
||||
|
||||
@@ -50,21 +49,41 @@ init:
|
||||
environment:
|
||||
WINFLEXBISON_VERSION: 2.5.15
|
||||
LLVM_ARCHIVE: llvm-5.0.1-msvc2017-mtd.7z
|
||||
matrix:
|
||||
- compiler: msvc
|
||||
buildsystem: scons
|
||||
- compiler: msvc
|
||||
buildsystem: meson
|
||||
path: C:\Python38-x64;C:\Python38-x64\Scripts;%path%
|
||||
|
||||
install:
|
||||
- cmd: .appveyor\appveyor_msvc.bat install
|
||||
# Check git config
|
||||
- git config core.autocrlf
|
||||
# Check pip
|
||||
- python --version
|
||||
- python -m pip --version
|
||||
# Install Mako
|
||||
- python -m pip install Mako==1.0.7
|
||||
# Install pywin32 extensions, needed by SCons
|
||||
- python -m pip install pypiwin32
|
||||
# Install python wheels, necessary to install SCons via pip
|
||||
- python -m pip install wheel
|
||||
# Install SCons
|
||||
- python -m pip install scons==3.0.1
|
||||
- scons --version
|
||||
# Install flex/bison
|
||||
- set WINFLEXBISON_ARCHIVE=win_flex_bison-%WINFLEXBISON_VERSION%.zip
|
||||
- if not exist "%WINFLEXBISON_ARCHIVE%" appveyor DownloadFile "https://github.com/lexxmark/winflexbison/releases/download/v%WINFLEXBISON_VERSION%/%WINFLEXBISON_ARCHIVE%"
|
||||
- 7z x -y -owinflexbison\ "%WINFLEXBISON_ARCHIVE%" > nul
|
||||
- set Path=%CD%\winflexbison;%Path%
|
||||
- win_flex --version
|
||||
- win_bison --version
|
||||
# Download and extract LLVM
|
||||
- if not exist "%LLVM_ARCHIVE%" appveyor DownloadFile "https://people.freedesktop.org/~jrfonseca/llvm/%LLVM_ARCHIVE%"
|
||||
- 7z x -y "%LLVM_ARCHIVE%" > nul
|
||||
- mkdir llvm\bin
|
||||
- set LLVM=%CD%\llvm
|
||||
|
||||
build_script:
|
||||
- cmd: .appveyor\appveyor_msvc.bat build_script
|
||||
- scons -j%NUMBER_OF_PROCESSORS% MSVC_VERSION=14.1 llvm=1
|
||||
|
||||
after_build:
|
||||
- scons -j%NUMBER_OF_PROCESSORS% MSVC_VERSION=14.1 llvm=1 check
|
||||
|
||||
test_script:
|
||||
- cmd: .appveyor\appveyor_msvc.bat test_script
|
||||
|
||||
# It's possible to setup notification here, as described in
|
||||
# http://www.appveyor.com/docs/notifications#appveyor-yml-configuration , but
|
||||
|
14
autogen.sh
Executable file
14
autogen.sh
Executable file
@@ -0,0 +1,14 @@
|
||||
#! /bin/sh
|
||||
|
||||
srcdir=`dirname "$0"`
|
||||
test -z "$srcdir" && srcdir=.
|
||||
|
||||
ORIGDIR=`pwd`
|
||||
cd "$srcdir"
|
||||
|
||||
autoreconf --force --verbose --install || exit 1
|
||||
cd "$ORIGDIR" || exit $?
|
||||
|
||||
if test -z "$NOCONFIGURE"; then
|
||||
"$srcdir"/configure "$@"
|
||||
fi
|
9
bin/.gitignore
vendored
Normal file
9
bin/.gitignore
vendored
Normal file
@@ -0,0 +1,9 @@
|
||||
config.guess
|
||||
config.sub
|
||||
install-sh
|
||||
/depcomp
|
||||
/missing
|
||||
ylwrap
|
||||
compile
|
||||
ar-lib
|
||||
/test-driver
|
35
bin/bugzilla_mesa.sh
Executable file
35
bin/bugzilla_mesa.sh
Executable file
@@ -0,0 +1,35 @@
|
||||
#!/bin/sh
|
||||
|
||||
# This script is used to generate the list of fixed bugs that
|
||||
# appears in the release notes files, with HTML formatting.
|
||||
#
|
||||
# Note: This script could take a while until all details have
|
||||
# been fetched from bugzilla.
|
||||
#
|
||||
# Usage examples:
|
||||
#
|
||||
# $ bin/bugzilla_mesa.sh mesa-9.0.2..mesa-9.0.3
|
||||
# $ bin/bugzilla_mesa.sh mesa-9.0.2..mesa-9.0.3 > bugfixes
|
||||
# $ bin/bugzilla_mesa.sh mesa-9.0.2..mesa-9.0.3 | tee bugfixes
|
||||
|
||||
|
||||
# regex pattern: trim before bug number
|
||||
trim_before='s/.*show_bug.cgi?id=\([0-9]*\).*/\1/'
|
||||
|
||||
# regex pattern: reconstruct the url
|
||||
use_after='s,^,https://bugs.freedesktop.org/show_bug.cgi?id=,'
|
||||
|
||||
echo "<ul>"
|
||||
echo ""
|
||||
|
||||
# extract fdo urls from commit log
|
||||
git log --pretty=medium $* | grep 'bugs.freedesktop.org/show_bug' | sed -e $trim_before | sort -n -u | sed -e $use_after |\
|
||||
while read url
|
||||
do
|
||||
id=$(echo $url | cut -d'=' -f2)
|
||||
summary=$(wget --quiet -O - $url | grep -e '<title>.*</title>' | sed -e 's/ *<title>[0-9]\+ – \(.*\)<\/title>/\1/')
|
||||
echo "<li><a href=\"$url\">Bug $id</a> - $summary</li>"
|
||||
echo ""
|
||||
done
|
||||
|
||||
echo "</ul>"
|
@@ -1,272 +0,0 @@
|
||||
#!/usr/bin/env python3
|
||||
# Copyright © 2019 Intel Corporation
|
||||
|
||||
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
# of this software and associated documentation files (the "Software"), to deal
|
||||
# in the Software without restriction, including without limitation the rights
|
||||
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
# copies of the Software, and to permit persons to whom the Software is
|
||||
# furnished to do so, subject to the following conditions:
|
||||
|
||||
# The above copyright notice and this permission notice shall be included in
|
||||
# all copies or substantial portions of the Software.
|
||||
|
||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
# SOFTWARE.
|
||||
|
||||
"""Generates release notes for a given version of mesa."""
|
||||
|
||||
import asyncio
|
||||
import datetime
|
||||
import os
|
||||
import pathlib
|
||||
import sys
|
||||
import textwrap
|
||||
import typing
|
||||
import urllib.parse
|
||||
|
||||
import aiohttp
|
||||
from mako.template import Template
|
||||
from mako import exceptions
|
||||
|
||||
|
||||
CURRENT_GL_VERSION = '4.6'
|
||||
CURRENT_VK_VERSION = '1.2'
|
||||
|
||||
TEMPLATE = Template(textwrap.dedent("""\
|
||||
<%!
|
||||
import html
|
||||
%>
|
||||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta http-equiv="content-type" content="text/html; charset=utf-8">
|
||||
<title>Mesa Release Notes</title>
|
||||
<link rel="stylesheet" type="text/css" href="../mesa.css">
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<div class="header">
|
||||
<h1>The Mesa 3D Graphics Library</h1>
|
||||
</div>
|
||||
|
||||
<iframe src="../contents.html"></iframe>
|
||||
<div class="content">
|
||||
|
||||
<h1>Mesa ${next_version} Release Notes / ${today}</h1>
|
||||
|
||||
<p>
|
||||
%if not bugfix:
|
||||
Mesa ${next_version} is a new development release. People who are concerned
|
||||
with stability and reliability should stick with a previous release or
|
||||
wait for Mesa ${next_version[:-1]}1.
|
||||
%else:
|
||||
Mesa ${next_version} is a bug fix release which fixes bugs found since the ${version} release.
|
||||
%endif
|
||||
</p>
|
||||
<p>
|
||||
Mesa ${next_version} implements the OpenGL ${gl_version} API, but the version reported by
|
||||
glGetString(GL_VERSION) or glGetIntegerv(GL_MAJOR_VERSION) /
|
||||
glGetIntegerv(GL_MINOR_VERSION) depends on the particular driver being used.
|
||||
Some drivers don't support all the features required in OpenGL ${gl_version}. OpenGL
|
||||
${gl_version} is <strong>only</strong> available if requested at context creation.
|
||||
Compatibility contexts may report a lower version depending on each driver.
|
||||
</p>
|
||||
<p>
|
||||
Mesa ${next_version} implements the Vulkan ${vk_version} API, but the version reported by
|
||||
the apiVersion property of the VkPhysicalDeviceProperties struct
|
||||
depends on the particular driver being used.
|
||||
</p>
|
||||
|
||||
<h2>SHA256 checksum</h2>
|
||||
<pre>
|
||||
TBD.
|
||||
</pre>
|
||||
|
||||
|
||||
<h2>New features</h2>
|
||||
|
||||
<ul>
|
||||
%for f in features:
|
||||
<li>${html.escape(f)}</li>
|
||||
%endfor
|
||||
</ul>
|
||||
|
||||
<h2>Bug fixes</h2>
|
||||
|
||||
<ul>
|
||||
%for b in bugs:
|
||||
<li>${html.escape(b)}</li>
|
||||
%endfor
|
||||
</ul>
|
||||
|
||||
<h2>Changes</h2>
|
||||
|
||||
<ul>
|
||||
%for c, author in changes:
|
||||
%if author:
|
||||
<p>${html.escape(c)}</p>
|
||||
%else:
|
||||
<li>${html.escape(c)}</li>
|
||||
%endif
|
||||
%endfor
|
||||
</ul>
|
||||
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
"""))
|
||||
|
||||
|
||||
async def gather_commits(version: str) -> str:
|
||||
p = await asyncio.create_subprocess_exec(
|
||||
'git', 'log', '--oneline', f'mesa-{version}..', '--grep', r'Closes: \(https\|#\).*',
|
||||
stdout=asyncio.subprocess.PIPE)
|
||||
out, _ = await p.communicate()
|
||||
assert p.returncode == 0, f"git log didn't work: {version}"
|
||||
return out.decode().strip()
|
||||
|
||||
|
||||
async def gather_bugs(version: str) -> typing.List[str]:
|
||||
commits = await gather_commits(version)
|
||||
|
||||
issues: typing.List[str] = []
|
||||
for commit in commits.split('\n'):
|
||||
sha, message = commit.split(maxsplit=1)
|
||||
p = await asyncio.create_subprocess_exec(
|
||||
'git', 'log', '--max-count', '1', r'--format=%b', sha,
|
||||
stdout=asyncio.subprocess.PIPE)
|
||||
_out, _ = await p.communicate()
|
||||
out = _out.decode().split('\n')
|
||||
for line in reversed(out):
|
||||
if line.startswith('Closes:'):
|
||||
bug = line.lstrip('Closes:').strip()
|
||||
break
|
||||
else:
|
||||
raise Exception('No closes found?')
|
||||
if bug.startswith('h'):
|
||||
# This means we have a bug in the form "Closes: https://..."
|
||||
issues.append(os.path.basename(urllib.parse.urlparse(bug).path))
|
||||
else:
|
||||
issues.append(bug.lstrip('#'))
|
||||
|
||||
loop = asyncio.get_event_loop()
|
||||
async with aiohttp.ClientSession(loop=loop) as session:
|
||||
results = await asyncio.gather(*[get_bug(session, i) for i in issues])
|
||||
typing.cast(typing.Tuple[str, ...], results)
|
||||
return list(results)
|
||||
|
||||
|
||||
async def get_bug(session: aiohttp.ClientSession, bug_id: str) -> str:
|
||||
"""Query gitlab to get the name of the issue that was closed."""
|
||||
# Mesa's gitlab id is 176,
|
||||
url = 'https://gitlab.freedesktop.org/api/v4/projects/176/issues'
|
||||
params = {'iids[]': bug_id}
|
||||
async with session.get(url, params=params) as response:
|
||||
content = await response.json()
|
||||
return content[0]['title']
|
||||
|
||||
|
||||
async def get_shortlog(version: str) -> str:
|
||||
"""Call git shortlog."""
|
||||
p = await asyncio.create_subprocess_exec('git', 'shortlog', f'mesa-{version}..',
|
||||
stdout=asyncio.subprocess.PIPE)
|
||||
out, _ = await p.communicate()
|
||||
assert p.returncode == 0, 'error getting shortlog'
|
||||
assert out is not None, 'just for mypy'
|
||||
return out.decode()
|
||||
|
||||
|
||||
def walk_shortlog(log: str) -> typing.Generator[typing.Tuple[str, bool], None, None]:
|
||||
for l in log.split('\n'):
|
||||
if l.startswith(' '): # this means we have a patch description
|
||||
yield l, False
|
||||
else:
|
||||
yield l, True
|
||||
|
||||
|
||||
def calculate_next_version(version: str, is_point: bool) -> str:
|
||||
"""Calculate the version about to be released."""
|
||||
if '-' in version:
|
||||
version = version.split('-')[0]
|
||||
if is_point:
|
||||
base = version.split('.')
|
||||
base[2] = str(int(base[2]) + 1)
|
||||
return '.'.join(base)
|
||||
return version
|
||||
|
||||
|
||||
def calculate_previous_version(version: str, is_point: bool) -> str:
|
||||
"""Calculate the previous version to compare to.
|
||||
|
||||
In the case of -rc to final that verison is the previous .0 release,
|
||||
(19.3.0 in the case of 20.0.0, for example). for point releases that is
|
||||
the last point release. This value will be the same as the input value
|
||||
for a point release, but different for a major release.
|
||||
"""
|
||||
if '-' in version:
|
||||
version = version.split('-')[0]
|
||||
if is_point:
|
||||
return version
|
||||
base = version.split('.')
|
||||
if base[1] == '0':
|
||||
base[0] = str(int(base[0]) - 1)
|
||||
base[1] = '3'
|
||||
else:
|
||||
base[1] = str(int(base[1]) - 1)
|
||||
return '.'.join(base)
|
||||
|
||||
|
||||
def get_features(is_point_release: bool) -> typing.Generator[str, None, None]:
|
||||
p = pathlib.Path(__file__).parent.parent / 'docs' / 'relnotes' / 'new_features.txt'
|
||||
if p.exists():
|
||||
if is_point_release:
|
||||
print("WARNING: new features being introduced in a point release", file=sys.stderr)
|
||||
with p.open('rt') as f:
|
||||
for line in f:
|
||||
yield line
|
||||
else:
|
||||
yield "None"
|
||||
|
||||
|
||||
async def main() -> None:
|
||||
v = pathlib.Path(__file__).parent.parent / 'VERSION'
|
||||
with v.open('rt') as f:
|
||||
raw_version = f.read().strip()
|
||||
is_point_release = '-rc' not in raw_version
|
||||
assert '-devel' not in raw_version, 'Do not run this script on -devel'
|
||||
version = raw_version.split('-')[0]
|
||||
previous_version = calculate_previous_version(version, is_point_release)
|
||||
next_version = calculate_next_version(version, is_point_release)
|
||||
|
||||
shortlog, bugs = await asyncio.gather(
|
||||
get_shortlog(previous_version),
|
||||
gather_bugs(previous_version),
|
||||
)
|
||||
|
||||
final = pathlib.Path(__file__).parent.parent / 'docs' / 'relnotes' / f'{next_version}.html'
|
||||
with final.open('wt') as f:
|
||||
try:
|
||||
f.write(TEMPLATE.render(
|
||||
bugfix=is_point_release,
|
||||
bugs=bugs,
|
||||
changes=walk_shortlog(shortlog),
|
||||
features=get_features(is_point_release),
|
||||
gl_version=CURRENT_GL_VERSION,
|
||||
next_version=next_version,
|
||||
today=datetime.date.today(),
|
||||
version=previous_version,
|
||||
vk_version=CURRENT_VK_VERSION,
|
||||
))
|
||||
except:
|
||||
print(exceptions.text_error_template().render())
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
loop = asyncio.get_event_loop()
|
||||
loop.run_until_complete(main())
|
@@ -1,62 +0,0 @@
|
||||
# Copyright © 2019 Intel Corporation
|
||||
|
||||
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
# of this software and associated documentation files (the "Software"), to deal
|
||||
# in the Software without restriction, including without limitation the rights
|
||||
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
# copies of the Software, and to permit persons to whom the Software is
|
||||
# furnished to do so, subject to the following conditions:
|
||||
|
||||
# The above copyright notice and this permission notice shall be included in
|
||||
# all copies or substantial portions of the Software.
|
||||
|
||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
# SOFTWARE.
|
||||
|
||||
from unittest import mock
|
||||
|
||||
import pytest
|
||||
|
||||
from .gen_release_notes import *
|
||||
|
||||
|
||||
@pytest.mark.parametrize(
|
||||
'current, is_point, expected',
|
||||
[
|
||||
('19.2.0', True, '19.2.1'),
|
||||
('19.3.6', True, '19.3.7'),
|
||||
('20.0.0-rc4', False, '20.0.0'),
|
||||
])
|
||||
def test_next_version(current: str, is_point: bool, expected: str) -> None:
|
||||
assert calculate_next_version(current, is_point) == expected
|
||||
|
||||
|
||||
@pytest.mark.parametrize(
|
||||
'current, is_point, expected',
|
||||
[
|
||||
('19.3.6', True, '19.3.6'),
|
||||
('20.0.0-rc4', False, '19.3.0'),
|
||||
])
|
||||
def test_previous_version(current: str, is_point: bool, expected: str) -> None:
|
||||
assert calculate_previous_version(current, is_point) == expected
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_get_shortlog():
|
||||
# Certainly not perfect, but it's something
|
||||
version = '19.2.0'
|
||||
out = await get_shortlog(version)
|
||||
assert out
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_gather_commits():
|
||||
# Certainly not perfect, but it's something
|
||||
version = '19.2.0'
|
||||
out = await gather_commits(version)
|
||||
assert out
|
@@ -13,12 +13,12 @@
|
||||
|
||||
is_stable_nomination()
|
||||
{
|
||||
git show --pretty=medium --summary "$1" | grep -q -i -o "CC:.*mesa-stable"
|
||||
git show --summary "$1" | grep -q -i -o "CC:.*mesa-stable"
|
||||
}
|
||||
|
||||
is_typod_nomination()
|
||||
{
|
||||
git show --pretty=medium --summary "$1" | grep -q -i -o "CC:.*mesa-dev"
|
||||
git show --summary "$1" | grep -q -i -o "CC:.*mesa-dev"
|
||||
}
|
||||
|
||||
fixes=
|
||||
@@ -32,7 +32,7 @@ is_sha_nomination()
|
||||
{
|
||||
fixes=`git show --pretty=medium -s $1 | tr -d "\n" | \
|
||||
sed -e 's/'"$2"'/\nfixes:/Ig' | \
|
||||
grep -Eo 'fixes:[a-f0-9]{4,40}'`
|
||||
grep -Eo 'fixes:[a-f0-9]{8,40}'`
|
||||
|
||||
fixes_count=`echo "$fixes" | grep "fixes:" | wc -l`
|
||||
if test $fixes_count -eq 0; then
|
||||
@@ -143,7 +143,7 @@ do
|
||||
esac
|
||||
|
||||
printf "[ %8s ] " "$tag"
|
||||
git --no-pager show --no-patch --pretty=oneline $sha
|
||||
git --no-pager show --no-patch --oneline $sha
|
||||
done
|
||||
|
||||
rm -f already_picked
|
||||
|
@@ -1,6 +1,5 @@
|
||||
#!/usr/bin/env python3
|
||||
# encoding=utf-8
|
||||
# Copyright 2017-2018 Intel Corporation
|
||||
# Copyright © 2017-2018 Intel Corporation
|
||||
|
||||
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
# of this software and associated documentation files (the "Software"), to deal
|
||||
@@ -25,6 +24,7 @@
|
||||
from __future__ import print_function
|
||||
import argparse
|
||||
import os
|
||||
import shutil
|
||||
|
||||
|
||||
def main():
|
||||
@@ -35,11 +35,7 @@ def main():
|
||||
args = parser.parse_args()
|
||||
|
||||
if os.path.isabs(args.libdir):
|
||||
destdir = os.environ.get('DESTDIR')
|
||||
if destdir:
|
||||
to = os.path.join(destdir, args.libdir[1:])
|
||||
else:
|
||||
to = args.libdir
|
||||
to = os.path.join(os.environ.get('DESTDIR', '/'), args.libdir[1:])
|
||||
else:
|
||||
to = os.path.join(os.environ['MESON_INSTALL_DESTDIR_PREFIX'], args.libdir)
|
||||
|
||||
@@ -49,6 +45,7 @@ def main():
|
||||
if os.path.lexists(to):
|
||||
os.unlink(to)
|
||||
os.makedirs(to)
|
||||
shutil.copy(args.megadriver, master)
|
||||
|
||||
for driver in args.drivers:
|
||||
abs_driver = os.path.join(to, driver)
|
||||
@@ -70,14 +67,7 @@ def main():
|
||||
name, ext = os.path.splitext(name)
|
||||
finally:
|
||||
os.chdir(ret)
|
||||
|
||||
# Remove meson-created master .so and symlinks
|
||||
os.unlink(master)
|
||||
name, ext = os.path.splitext(master)
|
||||
while ext != '.so':
|
||||
if os.path.lexists(name):
|
||||
os.unlink(name)
|
||||
name, ext = os.path.splitext(name)
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
|
@@ -1,63 +0,0 @@
|
||||
#!/usr/bin/env python3
|
||||
|
||||
from os import get_terminal_size
|
||||
from textwrap import wrap
|
||||
from mesonbuild import coredata
|
||||
from mesonbuild import optinterpreter
|
||||
|
||||
(COLUMNS, _) = get_terminal_size()
|
||||
|
||||
def describe_option(option_name: str, option_default_value: str,
|
||||
option_type: str, option_message: str) -> None:
|
||||
print('name: ' + option_name)
|
||||
print('default: ' + option_default_value)
|
||||
print('type: ' + option_type)
|
||||
for line in wrap(option_message, width=COLUMNS - 9):
|
||||
print(' ' + line)
|
||||
print('---')
|
||||
|
||||
oi = optinterpreter.OptionInterpreter('')
|
||||
oi.process('meson_options.txt')
|
||||
|
||||
for (name, value) in oi.options.items():
|
||||
if isinstance(value, coredata.UserStringOption):
|
||||
describe_option(name,
|
||||
value.value,
|
||||
'string',
|
||||
"You can type what you want, but make sure it makes sense")
|
||||
elif isinstance(value, coredata.UserBooleanOption):
|
||||
describe_option(name,
|
||||
'true' if value.value else 'false',
|
||||
'boolean',
|
||||
"You can set it to 'true' or 'false'")
|
||||
elif isinstance(value, coredata.UserIntegerOption):
|
||||
describe_option(name,
|
||||
str(value.value),
|
||||
'integer',
|
||||
"You can set it to any integer value between '{}' and '{}'".format(value.min_value, value.max_value))
|
||||
elif isinstance(value, coredata.UserUmaskOption):
|
||||
describe_option(name,
|
||||
str(value.value),
|
||||
'umask',
|
||||
"You can set it to 'preserve' or a value between '0000' and '0777'")
|
||||
elif isinstance(value, coredata.UserComboOption):
|
||||
choices = '[' + ', '.join(["'" + v + "'" for v in value.choices]) + ']'
|
||||
describe_option(name,
|
||||
value.value,
|
||||
'combo',
|
||||
"You can set it to any one of those values: " + choices)
|
||||
elif isinstance(value, coredata.UserArrayOption):
|
||||
choices = '[' + ', '.join(["'" + v + "'" for v in value.choices]) + ']'
|
||||
value = '[' + ', '.join(["'" + v + "'" for v in value.value]) + ']'
|
||||
describe_option(name,
|
||||
value,
|
||||
'array',
|
||||
"You can set it to one or more of those values: " + choices)
|
||||
elif isinstance(value, coredata.UserFeatureOption):
|
||||
describe_option(name,
|
||||
value.value,
|
||||
'feature',
|
||||
"You can set it to 'auto', 'enabled', or 'disabled'")
|
||||
else:
|
||||
print(name + ' is an option of a type unknown to this script')
|
||||
print('---')
|
@@ -19,5 +19,3 @@
|
||||
# SOFTWARE.
|
||||
|
||||
git_sha1_gen_py = files('git_sha1_gen.py')
|
||||
symbols_check = find_program('symbols-check.py')
|
||||
install_megadrivers_py = find_program('install_megadrivers.py')
|
||||
|
@@ -1,33 +0,0 @@
|
||||
#!/usr/bin/env python3
|
||||
# Copyright © 2019-2020 Intel Corporation
|
||||
|
||||
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
# of this software and associated documentation files (the "Software"), to deal
|
||||
# in the Software without restriction, including without limitation the rights
|
||||
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
# copies of the Software, and to permit persons to whom the Software is
|
||||
# furnished to do so, subject to the following conditions:
|
||||
|
||||
# The above copyright notice and this permission notice shall be included in
|
||||
# all copies or substantial portions of the Software.
|
||||
|
||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
# SOFTWARE.
|
||||
|
||||
import asyncio
|
||||
|
||||
import urwid
|
||||
|
||||
from pick.ui import UI, PALETTE
|
||||
|
||||
if __name__ == "__main__":
|
||||
u = UI()
|
||||
evl = urwid.AsyncioEventLoop(loop=asyncio.get_event_loop())
|
||||
loop = urwid.MainLoop(u.render(), PALETTE, event_loop=evl)
|
||||
u.mainloop = loop
|
||||
loop.run()
|
367
bin/pick/core.py
367
bin/pick/core.py
@@ -1,367 +0,0 @@
|
||||
# Copyright © 2019-2020 Intel Corporation
|
||||
|
||||
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
# of this software and associated documentation files (the "Software"), to deal
|
||||
# in the Software without restriction, including without limitation the rights
|
||||
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
# copies of the Software, and to permit persons to whom the Software is
|
||||
# furnished to do so, subject to the following conditions:
|
||||
|
||||
# The above copyright notice and this permission notice shall be included in
|
||||
# all copies or substantial portions of the Software.
|
||||
|
||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
# SOFTWARE.
|
||||
|
||||
"""Core data structures and routines for pick."""
|
||||
|
||||
import asyncio
|
||||
import enum
|
||||
import json
|
||||
import pathlib
|
||||
import re
|
||||
import typing
|
||||
|
||||
import attr
|
||||
|
||||
if typing.TYPE_CHECKING:
|
||||
from .ui import UI
|
||||
|
||||
import typing_extensions
|
||||
|
||||
class CommitDict(typing_extensions.TypedDict):
|
||||
|
||||
sha: str
|
||||
description: str
|
||||
nomintated: bool
|
||||
nomination_type: typing.Optional[int]
|
||||
resolution: typing.Optional[int]
|
||||
master_sha: typing.Optional[str]
|
||||
|
||||
IS_FIX = re.compile(r'^\s*fixes:\s*([a-f0-9]{6,40})', flags=re.MULTILINE | re.IGNORECASE)
|
||||
# FIXME: I dislike the duplication in this regex, but I couldn't get it to work otherwise
|
||||
IS_CC = re.compile(r'^\s*cc:\s*["\']?([0-9]{2}\.[0-9])?["\']?\s*["\']?([0-9]{2}\.[0-9])?["\']?\s*\<?mesa-stable',
|
||||
flags=re.MULTILINE | re.IGNORECASE)
|
||||
IS_REVERT = re.compile(r'This reverts commit ([0-9a-f]{40})')
|
||||
|
||||
# XXX: hack
|
||||
SEM = asyncio.Semaphore(50)
|
||||
|
||||
COMMIT_LOCK = asyncio.Lock()
|
||||
|
||||
|
||||
class PickUIException(Exception):
|
||||
pass
|
||||
|
||||
|
||||
@enum.unique
|
||||
class NominationType(enum.Enum):
|
||||
|
||||
CC = 0
|
||||
FIXES = 1
|
||||
REVERT = 2
|
||||
|
||||
|
||||
@enum.unique
|
||||
class Resolution(enum.Enum):
|
||||
|
||||
UNRESOLVED = 0
|
||||
MERGED = 1
|
||||
DENOMINATED = 2
|
||||
BACKPORTED = 3
|
||||
NOTNEEDED = 4
|
||||
|
||||
|
||||
async def commit_state(*, amend: bool = False, message: str = 'Update') -> None:
|
||||
"""Commit the .pick_status.json file."""
|
||||
f = pathlib.Path(__file__).parent.parent.parent / '.pick_status.json'
|
||||
async with COMMIT_LOCK:
|
||||
p = await asyncio.create_subprocess_exec(
|
||||
'git', 'add', f.as_posix(),
|
||||
stdout=asyncio.subprocess.DEVNULL,
|
||||
stderr=asyncio.subprocess.DEVNULL,
|
||||
)
|
||||
v = await p.wait()
|
||||
if v != 0:
|
||||
return False
|
||||
|
||||
if amend:
|
||||
cmd = ['--amend', '--no-edit']
|
||||
else:
|
||||
cmd = ['--message', f'.pick_status.json: {message}']
|
||||
p = await asyncio.create_subprocess_exec(
|
||||
'git', 'commit', *cmd,
|
||||
stdout=asyncio.subprocess.DEVNULL,
|
||||
stderr=asyncio.subprocess.DEVNULL,
|
||||
)
|
||||
v = await p.wait()
|
||||
if v != 0:
|
||||
return False
|
||||
return True
|
||||
|
||||
|
||||
@attr.s(slots=True)
|
||||
class Commit:
|
||||
|
||||
sha: str = attr.ib()
|
||||
description: str = attr.ib()
|
||||
nominated: bool = attr.ib(False)
|
||||
nomination_type: typing.Optional[NominationType] = attr.ib(None)
|
||||
resolution: Resolution = attr.ib(Resolution.UNRESOLVED)
|
||||
master_sha: typing.Optional[str] = attr.ib(None)
|
||||
because_sha: typing.Optional[str] = attr.ib(None)
|
||||
|
||||
def to_json(self) -> 'CommitDict':
|
||||
d: typing.Dict[str, typing.Any] = attr.asdict(self)
|
||||
if self.nomination_type is not None:
|
||||
d['nomination_type'] = self.nomination_type.value
|
||||
if self.resolution is not None:
|
||||
d['resolution'] = self.resolution.value
|
||||
return typing.cast('CommitDict', d)
|
||||
|
||||
@classmethod
|
||||
def from_json(cls, data: 'CommitDict') -> 'Commit':
|
||||
c = cls(data['sha'], data['description'], data['nominated'], master_sha=data['master_sha'], because_sha=data['because_sha'])
|
||||
if data['nomination_type'] is not None:
|
||||
c.nomination_type = NominationType(data['nomination_type'])
|
||||
if data['resolution'] is not None:
|
||||
c.resolution = Resolution(data['resolution'])
|
||||
return c
|
||||
|
||||
async def apply(self, ui: 'UI') -> typing.Tuple[bool, str]:
|
||||
# FIXME: This isn't really enough if we fail to cherry-pick because the
|
||||
# git tree will still be dirty
|
||||
async with COMMIT_LOCK:
|
||||
p = await asyncio.create_subprocess_exec(
|
||||
'git', 'cherry-pick', '-x', self.sha,
|
||||
stdout=asyncio.subprocess.DEVNULL,
|
||||
stderr=asyncio.subprocess.PIPE,
|
||||
)
|
||||
_, err = await p.communicate()
|
||||
|
||||
if p.returncode != 0:
|
||||
return (False, err)
|
||||
|
||||
self.resolution = Resolution.MERGED
|
||||
await ui.feedback(f'{self.sha} ({self.description}) applied successfully')
|
||||
|
||||
# Append the changes to the .pickstatus.json file
|
||||
ui.save()
|
||||
v = await commit_state(amend=True)
|
||||
return (v, '')
|
||||
|
||||
async def abort_cherry(self, ui: 'UI', err: str) -> None:
|
||||
await ui.feedback(f'{self.sha} ({self.description}) failed to apply\n{err}')
|
||||
async with COMMIT_LOCK:
|
||||
p = await asyncio.create_subprocess_exec(
|
||||
'git', 'cherry-pick', '--abort',
|
||||
stdout=asyncio.subprocess.DEVNULL,
|
||||
stderr=asyncio.subprocess.DEVNULL,
|
||||
)
|
||||
r = await p.wait()
|
||||
await ui.feedback(f'{"Successfully" if r == 0 else "Failed to"} abort cherry-pick.')
|
||||
|
||||
async def denominate(self, ui: 'UI') -> bool:
|
||||
self.resolution = Resolution.DENOMINATED
|
||||
ui.save()
|
||||
v = await commit_state(message=f'Mark {self.sha} as denominated')
|
||||
assert v
|
||||
await ui.feedback(f'{self.sha} ({self.description}) denominated successfully')
|
||||
return True
|
||||
|
||||
async def backport(self, ui: 'UI') -> bool:
|
||||
self.resolution = Resolution.BACKPORTED
|
||||
ui.save()
|
||||
v = await commit_state(message=f'Mark {self.sha} as backported')
|
||||
assert v
|
||||
await ui.feedback(f'{self.sha} ({self.description}) backported successfully')
|
||||
return True
|
||||
|
||||
async def resolve(self, ui: 'UI') -> None:
|
||||
self.resolution = Resolution.MERGED
|
||||
ui.save()
|
||||
v = await commit_state(amend=True)
|
||||
assert v
|
||||
await ui.feedback(f'{self.sha} ({self.description}) committed successfully')
|
||||
|
||||
|
||||
async def get_new_commits(sha: str) -> typing.List[typing.Tuple[str, str]]:
|
||||
# TODO: config file that points to the upstream branch
|
||||
p = await asyncio.create_subprocess_exec(
|
||||
'git', 'log', '--pretty=oneline', f'{sha}..master',
|
||||
stdout=asyncio.subprocess.PIPE,
|
||||
stderr=asyncio.subprocess.DEVNULL)
|
||||
out, _ = await p.communicate()
|
||||
assert p.returncode == 0, f"git log didn't work: {sha}"
|
||||
return list(split_commit_list(out.decode().strip()))
|
||||
|
||||
|
||||
def split_commit_list(commits: str) -> typing.Generator[typing.Tuple[str, str], None, None]:
|
||||
if not commits:
|
||||
return
|
||||
for line in commits.split('\n'):
|
||||
v = tuple(line.split(' ', 1))
|
||||
assert len(v) == 2, 'this is really just for mypy'
|
||||
yield typing.cast(typing.Tuple[str, str], v)
|
||||
|
||||
|
||||
async def is_commit_in_branch(sha: str) -> bool:
|
||||
async with SEM:
|
||||
p = await asyncio.create_subprocess_exec(
|
||||
'git', 'merge-base', '--is-ancestor', sha, 'HEAD',
|
||||
stdout=asyncio.subprocess.DEVNULL,
|
||||
stderr=asyncio.subprocess.DEVNULL,
|
||||
)
|
||||
await p.wait()
|
||||
return p.returncode == 0
|
||||
|
||||
|
||||
async def full_sha(sha: str) -> str:
|
||||
async with SEM:
|
||||
p = await asyncio.create_subprocess_exec(
|
||||
'git', 'rev-parse', sha,
|
||||
stdout=asyncio.subprocess.PIPE,
|
||||
stderr=asyncio.subprocess.DEVNULL,
|
||||
)
|
||||
out, _ = await p.communicate()
|
||||
if p.returncode:
|
||||
raise PickUIException(f'Invalid Sha {sha}')
|
||||
return out.decode().strip()
|
||||
|
||||
|
||||
async def resolve_nomination(commit: 'Commit', version: str) -> 'Commit':
|
||||
async with SEM:
|
||||
p = await asyncio.create_subprocess_exec(
|
||||
'git', 'log', '--pretty=medium', '-1', commit.sha,
|
||||
stdout=asyncio.subprocess.PIPE,
|
||||
stderr=asyncio.subprocess.DEVNULL,
|
||||
)
|
||||
_out, _ = await p.communicate()
|
||||
assert p.returncode == 0, f'git log for {commit.sha} failed'
|
||||
out = _out.decode()
|
||||
|
||||
# We give presedence to fixes and cc tags over revert tags.
|
||||
# XXX: not having the wallrus operator available makes me sad :=
|
||||
m = IS_FIX.search(out)
|
||||
if m:
|
||||
# We set the nomination_type and because_sha here so that we can later
|
||||
# check to see if this fixes another staged commit.
|
||||
try:
|
||||
commit.because_sha = fixed = await full_sha(m.group(1))
|
||||
except PickUIException:
|
||||
pass
|
||||
else:
|
||||
commit.nomination_type = NominationType.FIXES
|
||||
if await is_commit_in_branch(fixed):
|
||||
commit.nominated = True
|
||||
return commit
|
||||
|
||||
m = IS_CC.search(out)
|
||||
if m:
|
||||
if m.groups() == (None, None) or version in m.groups():
|
||||
commit.nominated = True
|
||||
commit.nomination_type = NominationType.CC
|
||||
return commit
|
||||
|
||||
m = IS_REVERT.search(out)
|
||||
if m:
|
||||
# See comment for IS_FIX path
|
||||
try:
|
||||
commit.because_sha = reverted = await full_sha(m.group(1))
|
||||
except PickUIException:
|
||||
pass
|
||||
else:
|
||||
commit.nomination_type = NominationType.REVERT
|
||||
if await is_commit_in_branch(reverted):
|
||||
commit.nominated = True
|
||||
return commit
|
||||
|
||||
return commit
|
||||
|
||||
|
||||
async def resolve_fixes(commits: typing.List['Commit'], previous: typing.List['Commit']) -> None:
|
||||
"""Determine if any of the undecided commits fix/revert a staged commit.
|
||||
|
||||
The are still needed if they apply to a commit that is staged for
|
||||
inclusion, but not yet included.
|
||||
|
||||
This must be done in order, because a commit 3 might fix commit 2 which
|
||||
fixes commit 1.
|
||||
"""
|
||||
shas: typing.Set[str] = set(c.sha for c in previous if c.nominated)
|
||||
assert None not in shas, 'None in shas'
|
||||
|
||||
for commit in reversed(commits):
|
||||
if not commit.nominated and commit.nomination_type is NominationType.FIXES:
|
||||
commit.nominated = commit.because_sha in shas
|
||||
|
||||
if commit.nominated:
|
||||
shas.add(commit.sha)
|
||||
|
||||
for commit in commits:
|
||||
if (commit.nomination_type is NominationType.REVERT and
|
||||
commit.because_sha in shas):
|
||||
for oldc in reversed(commits):
|
||||
if oldc.sha == commit.because_sha:
|
||||
# In this case a commit that hasn't yet been applied is
|
||||
# reverted, we don't want to apply that commit at all
|
||||
oldc.nominated = False
|
||||
oldc.resolution = Resolution.DENOMINATED
|
||||
commit.nominated = False
|
||||
commit.resolution = Resolution.DENOMINATED
|
||||
shas.remove(commit.because_sha)
|
||||
break
|
||||
|
||||
|
||||
async def gather_commits(version: str, previous: typing.List['Commit'],
|
||||
new: typing.List[typing.Tuple[str, str]], cb) -> typing.List['Commit']:
|
||||
# We create an array of the final size up front, then we pass that array
|
||||
# to the "inner" co-routine, which is turned into a list of tasks and
|
||||
# collected by asyncio.gather. We do this to allow the tasks to be
|
||||
# asyncrounously gathered, but to also ensure that the commits list remains
|
||||
# in order.
|
||||
commits = [None] * len(new)
|
||||
tasks = []
|
||||
|
||||
async def inner(commit: 'Commit', version: str, commits: typing.List['Commit'],
|
||||
index: int, cb) -> None:
|
||||
commits[index] = await resolve_nomination(commit, version)
|
||||
cb()
|
||||
|
||||
for i, (sha, desc) in enumerate(new):
|
||||
tasks.append(asyncio.ensure_future(
|
||||
inner(Commit(sha, desc), version, commits, i, cb)))
|
||||
|
||||
await asyncio.gather(*tasks)
|
||||
assert None not in commits
|
||||
|
||||
await resolve_fixes(commits, previous)
|
||||
|
||||
for commit in commits:
|
||||
if commit.resolution is Resolution.UNRESOLVED and not commit.nominated:
|
||||
commit.resolution = Resolution.NOTNEEDED
|
||||
|
||||
return commits
|
||||
|
||||
|
||||
def load() -> typing.List['Commit']:
|
||||
p = pathlib.Path(__file__).parent.parent.parent / '.pick_status.json'
|
||||
if not p.exists():
|
||||
return []
|
||||
with p.open('r') as f:
|
||||
raw = json.load(f)
|
||||
return [Commit.from_json(c) for c in raw]
|
||||
|
||||
|
||||
def save(commits: typing.Iterable['Commit']) -> None:
|
||||
p = pathlib.Path(__file__).parent.parent.parent / '.pick_status.json'
|
||||
commits = list(commits)
|
||||
with p.open('wt') as f:
|
||||
json.dump([c.to_json() for c in commits], f, indent=4)
|
||||
|
||||
asyncio.ensure_future(commit_state(message=f'Update to {commits[0].sha}'))
|
@@ -1,470 +0,0 @@
|
||||
# Copyright © 2019-2020 Intel Corporation
|
||||
|
||||
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
# of this software and associated documentation files (the "Software"), to deal
|
||||
# in the Software without restriction, including without limitation the rights
|
||||
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
# copies of the Software, and to permit persons to whom the Software is
|
||||
# furnished to do so, subject to the following conditions:
|
||||
|
||||
# The above copyright notice and this permission notice shall be included in
|
||||
# all copies or substantial portions of the Software.
|
||||
|
||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
# SOFTWARE.
|
||||
|
||||
"""Tests for pick's core data structures and routines."""
|
||||
|
||||
from unittest import mock
|
||||
import textwrap
|
||||
import typing
|
||||
|
||||
import attr
|
||||
import pytest
|
||||
|
||||
from . import core
|
||||
|
||||
|
||||
class TestCommit:
|
||||
|
||||
@pytest.fixture
|
||||
def unnominated_commit(self) -> 'core.Commit':
|
||||
return core.Commit('abc123', 'sub: A commit', master_sha='45678')
|
||||
|
||||
@pytest.fixture
|
||||
def nominated_commit(self) -> 'core.Commit':
|
||||
return core.Commit('abc123', 'sub: A commit', True,
|
||||
core.NominationType.CC, core.Resolution.UNRESOLVED)
|
||||
|
||||
class TestToJson:
|
||||
|
||||
def test_not_nominated(self, unnominated_commit: 'core.Commit'):
|
||||
c = unnominated_commit
|
||||
v = c.to_json()
|
||||
assert v == {'sha': 'abc123', 'description': 'sub: A commit', 'nominated': False,
|
||||
'nomination_type': None, 'resolution': core.Resolution.UNRESOLVED.value,
|
||||
'master_sha': '45678', 'because_sha': None}
|
||||
|
||||
def test_nominated(self, nominated_commit: 'core.Commit'):
|
||||
c = nominated_commit
|
||||
v = c.to_json()
|
||||
assert v == {'sha': 'abc123',
|
||||
'description': 'sub: A commit',
|
||||
'nominated': True,
|
||||
'nomination_type': core.NominationType.CC.value,
|
||||
'resolution': core.Resolution.UNRESOLVED.value,
|
||||
'master_sha': None,
|
||||
'because_sha': None}
|
||||
|
||||
class TestFromJson:
|
||||
|
||||
def test_not_nominated(self, unnominated_commit: 'core.Commit'):
|
||||
c = unnominated_commit
|
||||
v = c.to_json()
|
||||
c2 = core.Commit.from_json(v)
|
||||
assert c == c2
|
||||
|
||||
def test_nominated(self, nominated_commit: 'core.Commit'):
|
||||
c = nominated_commit
|
||||
v = c.to_json()
|
||||
c2 = core.Commit.from_json(v)
|
||||
assert c == c2
|
||||
|
||||
|
||||
class TestRE:
|
||||
|
||||
"""Tests for the regular expressions used to identify commits."""
|
||||
|
||||
class TestFixes:
|
||||
|
||||
def test_simple(self):
|
||||
message = textwrap.dedent("""\
|
||||
etnaviv: fix vertex buffer state emission for single stream GPUs
|
||||
|
||||
GPUs with a single supported vertex stream must use the single state
|
||||
address to program the stream.
|
||||
|
||||
Fixes: 3d09bb390a39 (etnaviv: GC7000: State changes for HALTI3..5)
|
||||
Signed-off-by: Lucas Stach <l.stach@pengutronix.de>
|
||||
Reviewed-by: Jonathan Marek <jonathan@marek.ca>
|
||||
""")
|
||||
|
||||
m = core.IS_FIX.search(message)
|
||||
assert m is not None
|
||||
assert m.group(1) == '3d09bb390a39'
|
||||
|
||||
class TestCC:
|
||||
|
||||
def test_single_branch(self):
|
||||
"""Tests commit meant for a single branch, ie, 19.1"""
|
||||
message = textwrap.dedent("""\
|
||||
radv: fix DCC fast clear code for intensity formats
|
||||
|
||||
This fixes a rendering issue with DiRT 4 on GFX10. Only GFX10 was
|
||||
affected because intensity formats are different.
|
||||
|
||||
Cc: 19.2 <mesa-stable@lists.freedesktop.org>
|
||||
Closes: https://gitlab.freedesktop.org/mesa/mesa/issues/1923
|
||||
Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
|
||||
Reviewed-by: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl>
|
||||
""")
|
||||
|
||||
m = core.IS_CC.search(message)
|
||||
assert m is not None
|
||||
assert m.group(1) == '19.2'
|
||||
|
||||
def test_multiple_branches(self):
|
||||
"""Tests commit with more than one branch specified"""
|
||||
message = textwrap.dedent("""\
|
||||
radeonsi: enable zerovram for Rocket League
|
||||
|
||||
Fixes corruption on game startup.
|
||||
Closes: https://gitlab.freedesktop.org/mesa/mesa/issues/1888
|
||||
|
||||
Cc: 19.1 19.2 <mesa-stable@lists.freedesktop.org>
|
||||
Reviewed-by: Pierre-Eric Pelloux-Prayer <pierre-eric.pelloux-prayer@amd.com>
|
||||
""")
|
||||
|
||||
m = core.IS_CC.search(message)
|
||||
assert m is not None
|
||||
assert m.group(1) == '19.1'
|
||||
assert m.group(2) == '19.2'
|
||||
|
||||
def test_no_branch(self):
|
||||
"""Tests commit with no branch specification"""
|
||||
message = textwrap.dedent("""\
|
||||
anv/android: fix images created with external format support
|
||||
|
||||
This fixes a case where user first creates image and then later binds it
|
||||
with memory created from AHW buffer.
|
||||
|
||||
Cc: <mesa-stable@lists.freedesktop.org>
|
||||
Signed-off-by: Tapani Pälli <tapani.palli@intel.com>
|
||||
Reviewed-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com>
|
||||
""")
|
||||
|
||||
m = core.IS_CC.search(message)
|
||||
assert m is not None
|
||||
|
||||
def test_quotes(self):
|
||||
"""Tests commit with quotes around the versions"""
|
||||
message = textwrap.dedent("""\
|
||||
anv: Always fill out the AUX table even if CCS is disabled
|
||||
|
||||
Cc: "20.0" mesa-stable@lists.freedesktop.org
|
||||
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
|
||||
Tested-by: Marge Bot <https://gitlab.freedesktop.org/mesa/mesa/merge_requests/3454>
|
||||
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/merge_requests/3454>
|
||||
""")
|
||||
|
||||
m = core.IS_CC.search(message)
|
||||
assert m is not None
|
||||
assert m.group(1) == '20.0'
|
||||
|
||||
def test_multiple_quotes(self):
|
||||
"""Tests commit with quotes around the versions"""
|
||||
message = textwrap.dedent("""\
|
||||
anv: Always fill out the AUX table even if CCS is disabled
|
||||
|
||||
Cc: "20.0" "20.1" mesa-stable@lists.freedesktop.org
|
||||
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
|
||||
Tested-by: Marge Bot <https://gitlab.freedesktop.org/mesa/mesa/merge_requests/3454>
|
||||
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/merge_requests/3454>
|
||||
""")
|
||||
|
||||
m = core.IS_CC.search(message)
|
||||
assert m is not None
|
||||
assert m.group(1) == '20.0'
|
||||
assert m.group(2) == '20.1'
|
||||
|
||||
def test_single_quotes(self):
|
||||
"""Tests commit with quotes around the versions"""
|
||||
message = textwrap.dedent("""\
|
||||
anv: Always fill out the AUX table even if CCS is disabled
|
||||
|
||||
Cc: '20.0' mesa-stable@lists.freedesktop.org
|
||||
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
|
||||
Tested-by: Marge Bot <https://gitlab.freedesktop.org/mesa/mesa/merge_requests/3454>
|
||||
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/merge_requests/3454>
|
||||
""")
|
||||
|
||||
m = core.IS_CC.search(message)
|
||||
assert m is not None
|
||||
assert m.group(1) == '20.0'
|
||||
|
||||
def test_multiple_single_quotes(self):
|
||||
"""Tests commit with quotes around the versions"""
|
||||
message = textwrap.dedent("""\
|
||||
anv: Always fill out the AUX table even if CCS is disabled
|
||||
|
||||
Cc: '20.0' '20.1' mesa-stable@lists.freedesktop.org
|
||||
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
|
||||
Tested-by: Marge Bot <https://gitlab.freedesktop.org/mesa/mesa/merge_requests/3454>
|
||||
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/merge_requests/3454>
|
||||
""")
|
||||
|
||||
m = core.IS_CC.search(message)
|
||||
assert m is not None
|
||||
assert m.group(1) == '20.0'
|
||||
assert m.group(2) == '20.1'
|
||||
|
||||
class TestRevert:
|
||||
|
||||
def test_simple(self):
|
||||
message = textwrap.dedent("""\
|
||||
Revert "radv: do not emit PKT3_CONTEXT_CONTROL with AMDGPU 3.6.0+"
|
||||
|
||||
This reverts commit 2ca8629fa9b303e24783b76a7b3b0c2513e32fbd.
|
||||
|
||||
This was initially ported from RadeonSI, but in the meantime it has
|
||||
been reverted because it might hang. Be conservative and re-introduce
|
||||
this packet emission.
|
||||
|
||||
Unfortunately this doesn't fix anything known.
|
||||
|
||||
Cc: 19.2 <mesa-stable@lists.freedesktop.org>
|
||||
Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
|
||||
Reviewed-by: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl>
|
||||
""")
|
||||
|
||||
m = core.IS_REVERT.search(message)
|
||||
assert m is not None
|
||||
assert m.group(1) == '2ca8629fa9b303e24783b76a7b3b0c2513e32fbd'
|
||||
|
||||
|
||||
class TestResolveNomination:
|
||||
|
||||
@attr.s(slots=True)
|
||||
class FakeSubprocess:
|
||||
|
||||
"""A fake asyncio.subprocess like classe for use with mock."""
|
||||
|
||||
out: typing.Optional[bytes] = attr.ib(None)
|
||||
returncode: int = attr.ib(0)
|
||||
|
||||
async def mock(self, *_, **__):
|
||||
"""A dirtly little helper for mocking."""
|
||||
return self
|
||||
|
||||
async def communicate(self) -> typing.Tuple[bytes, bytes]:
|
||||
assert self.out is not None
|
||||
return self.out, b''
|
||||
|
||||
async def wait(self) -> int:
|
||||
return self.returncode
|
||||
|
||||
@staticmethod
|
||||
async def return_true(*_, **__) -> bool:
|
||||
return True
|
||||
|
||||
@staticmethod
|
||||
async def return_false(*_, **__) -> bool:
|
||||
return False
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_fix_is_nominated(self):
|
||||
s = self.FakeSubprocess(b'Fixes: 3d09bb390a39 (etnaviv: GC7000: State changes for HALTI3..5)')
|
||||
c = core.Commit('abcdef1234567890', 'a commit')
|
||||
|
||||
with mock.patch('bin.pick.core.asyncio.create_subprocess_exec', s.mock):
|
||||
with mock.patch('bin.pick.core.is_commit_in_branch', self.return_true):
|
||||
await core.resolve_nomination(c, '')
|
||||
|
||||
assert c.nominated
|
||||
assert c.nomination_type is core.NominationType.FIXES
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_fix_is_not_nominated(self):
|
||||
s = self.FakeSubprocess(b'Fixes: 3d09bb390a39 (etnaviv: GC7000: State changes for HALTI3..5)')
|
||||
c = core.Commit('abcdef1234567890', 'a commit')
|
||||
|
||||
with mock.patch('bin.pick.core.asyncio.create_subprocess_exec', s.mock):
|
||||
with mock.patch('bin.pick.core.is_commit_in_branch', self.return_false):
|
||||
await core.resolve_nomination(c, '')
|
||||
|
||||
assert not c.nominated
|
||||
assert c.nomination_type is core.NominationType.FIXES
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_cc_is_nominated(self):
|
||||
s = self.FakeSubprocess(b'Cc: 16.2 <mesa-stable@lists.freedesktop.org>')
|
||||
c = core.Commit('abcdef1234567890', 'a commit')
|
||||
|
||||
with mock.patch('bin.pick.core.asyncio.create_subprocess_exec', s.mock):
|
||||
await core.resolve_nomination(c, '16.2')
|
||||
|
||||
assert c.nominated
|
||||
assert c.nomination_type is core.NominationType.CC
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_cc_is_nominated2(self):
|
||||
s = self.FakeSubprocess(b'Cc: mesa-stable@lists.freedesktop.org')
|
||||
c = core.Commit('abcdef1234567890', 'a commit')
|
||||
|
||||
with mock.patch('bin.pick.core.asyncio.create_subprocess_exec', s.mock):
|
||||
await core.resolve_nomination(c, '16.2')
|
||||
|
||||
assert c.nominated
|
||||
assert c.nomination_type is core.NominationType.CC
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_cc_is_not_nominated(self):
|
||||
s = self.FakeSubprocess(b'Cc: 16.2 <mesa-stable@lists.freedesktop.org>')
|
||||
c = core.Commit('abcdef1234567890', 'a commit')
|
||||
|
||||
with mock.patch('bin.pick.core.asyncio.create_subprocess_exec', s.mock):
|
||||
await core.resolve_nomination(c, '16.1')
|
||||
|
||||
assert not c.nominated
|
||||
assert c.nomination_type is None
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_revert_is_nominated(self):
|
||||
s = self.FakeSubprocess(b'This reverts commit 1234567890123456789012345678901234567890.')
|
||||
c = core.Commit('abcdef1234567890', 'a commit')
|
||||
|
||||
with mock.patch('bin.pick.core.asyncio.create_subprocess_exec', s.mock):
|
||||
with mock.patch('bin.pick.core.is_commit_in_branch', self.return_true):
|
||||
await core.resolve_nomination(c, '')
|
||||
|
||||
assert c.nominated
|
||||
assert c.nomination_type is core.NominationType.REVERT
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_revert_is_not_nominated(self):
|
||||
s = self.FakeSubprocess(b'This reverts commit 1234567890123456789012345678901234567890.')
|
||||
c = core.Commit('abcdef1234567890', 'a commit')
|
||||
|
||||
with mock.patch('bin.pick.core.asyncio.create_subprocess_exec', s.mock):
|
||||
with mock.patch('bin.pick.core.is_commit_in_branch', self.return_false):
|
||||
await core.resolve_nomination(c, '')
|
||||
|
||||
assert not c.nominated
|
||||
assert c.nomination_type is core.NominationType.REVERT
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_is_fix_and_cc(self):
|
||||
s = self.FakeSubprocess(
|
||||
b'Fixes: 3d09bb390a39 (etnaviv: GC7000: State changes for HALTI3..5)\n'
|
||||
b'Cc: 16.1 <mesa-stable@lists.freedesktop.org>'
|
||||
)
|
||||
c = core.Commit('abcdef1234567890', 'a commit')
|
||||
|
||||
with mock.patch('bin.pick.core.asyncio.create_subprocess_exec', s.mock):
|
||||
with mock.patch('bin.pick.core.is_commit_in_branch', self.return_true):
|
||||
await core.resolve_nomination(c, '16.1')
|
||||
|
||||
assert c.nominated
|
||||
assert c.nomination_type is core.NominationType.FIXES
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_is_fix_and_revert(self):
|
||||
s = self.FakeSubprocess(
|
||||
b'Fixes: 3d09bb390a39 (etnaviv: GC7000: State changes for HALTI3..5)\n'
|
||||
b'This reverts commit 1234567890123456789012345678901234567890.'
|
||||
)
|
||||
c = core.Commit('abcdef1234567890', 'a commit')
|
||||
|
||||
with mock.patch('bin.pick.core.asyncio.create_subprocess_exec', s.mock):
|
||||
with mock.patch('bin.pick.core.is_commit_in_branch', self.return_true):
|
||||
await core.resolve_nomination(c, '16.1')
|
||||
|
||||
assert c.nominated
|
||||
assert c.nomination_type is core.NominationType.FIXES
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_is_cc_and_revert(self):
|
||||
s = self.FakeSubprocess(
|
||||
b'This reverts commit 1234567890123456789012345678901234567890.\n'
|
||||
b'Cc: 16.1 <mesa-stable@lists.freedesktop.org>'
|
||||
)
|
||||
c = core.Commit('abcdef1234567890', 'a commit')
|
||||
|
||||
with mock.patch('bin.pick.core.asyncio.create_subprocess_exec', s.mock):
|
||||
with mock.patch('bin.pick.core.is_commit_in_branch', self.return_true):
|
||||
await core.resolve_nomination(c, '16.1')
|
||||
|
||||
assert c.nominated
|
||||
assert c.nomination_type is core.NominationType.CC
|
||||
|
||||
|
||||
class TestResolveFixes:
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_in_new(self):
|
||||
"""Because commit abcd is nominated, so f123 should be as well."""
|
||||
c = [
|
||||
core.Commit('f123', 'desc', nomination_type=core.NominationType.FIXES, because_sha='abcd'),
|
||||
core.Commit('abcd', 'desc', True),
|
||||
]
|
||||
await core.resolve_fixes(c, [])
|
||||
assert c[1].nominated
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_not_in_new(self):
|
||||
"""Because commit abcd is not nominated, commit f123 shouldn't be either."""
|
||||
c = [
|
||||
core.Commit('f123', 'desc', nomination_type=core.NominationType.FIXES, because_sha='abcd'),
|
||||
core.Commit('abcd', 'desc'),
|
||||
]
|
||||
await core.resolve_fixes(c, [])
|
||||
assert not c[0].nominated
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_in_previous(self):
|
||||
"""Because commit abcd is nominated, so f123 should be as well."""
|
||||
p = [
|
||||
core.Commit('abcd', 'desc', True),
|
||||
]
|
||||
c = [
|
||||
core.Commit('f123', 'desc', nomination_type=core.NominationType.FIXES, because_sha='abcd'),
|
||||
]
|
||||
await core.resolve_fixes(c, p)
|
||||
assert c[0].nominated
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_not_in_previous(self):
|
||||
"""Because commit abcd is not nominated, commit f123 shouldn't be either."""
|
||||
p = [
|
||||
core.Commit('abcd', 'desc'),
|
||||
]
|
||||
c = [
|
||||
core.Commit('f123', 'desc', nomination_type=core.NominationType.FIXES, because_sha='abcd'),
|
||||
]
|
||||
await core.resolve_fixes(c, p)
|
||||
assert not c[0].nominated
|
||||
|
||||
|
||||
class TestIsCommitInBranch:
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_no(self):
|
||||
# Hopefully this is never true?
|
||||
value = await core.is_commit_in_branch('ffffffffffffffffffffffffffffff')
|
||||
assert not value
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_yes(self):
|
||||
# This commit is from 2000, it better always be in the branch
|
||||
value = await core.is_commit_in_branch('88f3b89a2cb77766d2009b9868c44e03abe2dbb2')
|
||||
assert value
|
||||
|
||||
|
||||
class TestFullSha:
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_basic(self):
|
||||
# This commit is from 2000, it better always be in the branch
|
||||
value = await core.full_sha('88f3b89a2cb777')
|
||||
assert value
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_invalid(self):
|
||||
# This commit is from 2000, it better always be in the branch
|
||||
with pytest.raises(core.PickUIException):
|
||||
await core.full_sha('fffffffffffffffffffffffffffffffffff')
|
259
bin/pick/ui.py
259
bin/pick/ui.py
@@ -1,259 +0,0 @@
|
||||
# Copyright © 2020-2020 Intel Corporation
|
||||
|
||||
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
# of this software and associated documentation files (the "Software"), to deal
|
||||
# in the Software without restriction, including without limitation the rights
|
||||
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
# copies of the Software, and to permit persons to whom the Software is
|
||||
# furnished to do so, subject to the following conditions:
|
||||
|
||||
# The above copyright notice and this permission notice shall be included in
|
||||
# all copies or substantial portions of the Software.
|
||||
|
||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
# SOFTWARE.
|
||||
|
||||
"""Urwid UI for pick script."""
|
||||
|
||||
import asyncio
|
||||
import functools
|
||||
import itertools
|
||||
import textwrap
|
||||
import typing
|
||||
|
||||
import attr
|
||||
import urwid
|
||||
|
||||
from . import core
|
||||
|
||||
if typing.TYPE_CHECKING:
|
||||
WidgetType = typing.TypeVar('WidgetType', bound=urwid.Widget)
|
||||
|
||||
PALETTE = [
|
||||
('a', 'black', 'light gray'),
|
||||
('b', 'black', 'dark red'),
|
||||
('bg', 'black', 'dark blue'),
|
||||
('reversed', 'standout', ''),
|
||||
]
|
||||
|
||||
|
||||
class RootWidget(urwid.Frame):
|
||||
|
||||
def __init__(self, *args, ui: 'UI' = None, **kwargs):
|
||||
super().__init__(*args, **kwargs)
|
||||
assert ui is not None
|
||||
self.ui = ui
|
||||
|
||||
def keypress(self, size: int, key: str) -> typing.Optional[str]:
|
||||
if key == 'q':
|
||||
raise urwid.ExitMainLoop()
|
||||
elif key == 'u':
|
||||
asyncio.ensure_future(self.ui.update())
|
||||
elif key == 'a':
|
||||
self.ui.add()
|
||||
else:
|
||||
return super().keypress(size, key)
|
||||
return None
|
||||
|
||||
|
||||
class CommitWidget(urwid.Text):
|
||||
|
||||
# urwid.Text is normally not interactable, this is required to tell urwid
|
||||
# to use our keypress method
|
||||
_selectable = True
|
||||
|
||||
def __init__(self, ui: 'UI', commit: 'core.Commit'):
|
||||
super().__init__(commit.description)
|
||||
self.ui = ui
|
||||
self.commit = commit
|
||||
|
||||
async def apply(self) -> None:
|
||||
result, err = await self.commit.apply(self.ui)
|
||||
if not result:
|
||||
self.ui.chp_failed(self, err)
|
||||
else:
|
||||
self.ui.remove_commit(self)
|
||||
|
||||
async def denominate(self) -> None:
|
||||
await self.commit.denominate(self.ui)
|
||||
self.ui.remove_commit(self)
|
||||
|
||||
async def backport(self) -> None:
|
||||
await self.commit.backport(self.ui)
|
||||
self.ui.remove_commit(self)
|
||||
|
||||
def keypress(self, size: int, key: str) -> typing.Optional[str]:
|
||||
if key == 'c':
|
||||
asyncio.ensure_future(self.apply())
|
||||
elif key == 'd':
|
||||
asyncio.ensure_future(self.denominate())
|
||||
elif key == 'b':
|
||||
asyncio.ensure_future(self.backport())
|
||||
else:
|
||||
return key
|
||||
return None
|
||||
|
||||
|
||||
@attr.s(slots=True)
|
||||
class UI:
|
||||
|
||||
"""Main management object.
|
||||
|
||||
:previous_commits: A list of commits to master since this branch was created
|
||||
:new_commits: Commits added to master since the last time this script was run
|
||||
"""
|
||||
|
||||
commit_list: typing.List['urwid.Button'] = attr.ib(factory=lambda: urwid.SimpleFocusListWalker([]), init=False)
|
||||
feedback_box: typing.List['urwid.Text'] = attr.ib(factory=lambda: urwid.SimpleFocusListWalker([]), init=False)
|
||||
header: 'urwid.Text' = attr.ib(factory=lambda: urwid.Text('Mesa Stable Picker', align='center'), init=False)
|
||||
body: 'urwid.Columns' = attr.ib(attr.Factory(lambda s: s._make_body(), True), init=False)
|
||||
footer: 'urwid.Columns' = attr.ib(attr.Factory(lambda s: s._make_footer(), True), init=False)
|
||||
root: RootWidget = attr.ib(attr.Factory(lambda s: s._make_root(), True), init=False)
|
||||
mainloop: urwid.MainLoop = attr.ib(None, init=False)
|
||||
|
||||
previous_commits: typing.List['core.Commit'] = attr.ib(factory=list, init=False)
|
||||
new_commits: typing.List['core.Commit'] = attr.ib(factory=list, init=False)
|
||||
|
||||
def _make_body(self) -> 'urwid.Columns':
|
||||
commits = urwid.ListBox(self.commit_list)
|
||||
feedback = urwid.ListBox(self.feedback_box)
|
||||
return urwid.Columns([commits, feedback])
|
||||
|
||||
def _make_footer(self) -> 'urwid.Columns':
|
||||
body = [
|
||||
urwid.Text('[U]pdate'),
|
||||
urwid.Text('[Q]uit'),
|
||||
urwid.Text('[C]herry Pick'),
|
||||
urwid.Text('[D]enominate'),
|
||||
urwid.Text('[B]ackport'),
|
||||
urwid.Text('[A]pply additional patch')
|
||||
]
|
||||
return urwid.Columns(body)
|
||||
|
||||
def _make_root(self) -> 'RootWidget':
|
||||
return RootWidget(self.body, self.header, self.footer, 'body', ui=self)
|
||||
|
||||
def render(self) -> 'WidgetType':
|
||||
asyncio.ensure_future(self.update())
|
||||
return self.root
|
||||
|
||||
def load(self) -> None:
|
||||
self.previous_commits = core.load()
|
||||
|
||||
async def update(self) -> None:
|
||||
self.load()
|
||||
with open('VERSION', 'r') as f:
|
||||
version = f.read().strip()[:4]
|
||||
if self.previous_commits:
|
||||
sha = self.previous_commits[0].sha
|
||||
else:
|
||||
sha = f'{version}-branchpoint'
|
||||
|
||||
new_commits = await core.get_new_commits(sha)
|
||||
|
||||
if new_commits:
|
||||
pb = urwid.ProgressBar('a', 'b', done=len(new_commits))
|
||||
o = self.mainloop.widget
|
||||
self.mainloop.widget = urwid.Overlay(
|
||||
urwid.Filler(urwid.LineBox(pb)), o, 'center', ('relative', 50), 'middle', ('relative', 50))
|
||||
self.new_commits = await core.gather_commits(
|
||||
version, self.previous_commits, new_commits,
|
||||
lambda: pb.set_completion(pb.current + 1))
|
||||
self.mainloop.widget = o
|
||||
|
||||
for commit in reversed(list(itertools.chain(self.new_commits, self.previous_commits))):
|
||||
if commit.nominated and commit.resolution is core.Resolution.UNRESOLVED:
|
||||
b = urwid.AttrMap(CommitWidget(self, commit), None, focus_map='reversed')
|
||||
self.commit_list.append(b)
|
||||
self.save()
|
||||
|
||||
async def feedback(self, text: str) -> None:
|
||||
self.feedback_box.append(urwid.AttrMap(urwid.Text(text), None))
|
||||
|
||||
def remove_commit(self, commit: CommitWidget) -> None:
|
||||
for i, c in enumerate(self.commit_list):
|
||||
if c.base_widget is commit:
|
||||
del self.commit_list[i]
|
||||
break
|
||||
|
||||
def save(self):
|
||||
core.save(itertools.chain(self.new_commits, self.previous_commits))
|
||||
|
||||
def add(self) -> None:
|
||||
"""Add an additional commit which isn't nominated."""
|
||||
o = self.mainloop.widget
|
||||
|
||||
def reset_cb(_) -> None:
|
||||
self.mainloop.widget = o
|
||||
|
||||
async def apply_cb(edit: urwid.Edit) -> None:
|
||||
text: str = edit.get_edit_text()
|
||||
|
||||
# In case the text is empty
|
||||
if not text:
|
||||
return
|
||||
|
||||
sha = await core.full_sha(text)
|
||||
for c in reversed(list(itertools.chain(self.new_commits, self.previous_commits))):
|
||||
if c.sha == sha:
|
||||
commit = c
|
||||
break
|
||||
else:
|
||||
raise RuntimeError(f"Couldn't find {sha}")
|
||||
|
||||
await commit.apply(self)
|
||||
|
||||
q = urwid.Edit("Comit sha\n")
|
||||
ok_btn = urwid.Button('Ok')
|
||||
urwid.connect_signal(ok_btn, 'click', lambda _: asyncio.ensure_future(apply_cb(q)))
|
||||
urwid.connect_signal(ok_btn, 'click', reset_cb)
|
||||
|
||||
can_btn = urwid.Button('Cancel')
|
||||
urwid.connect_signal(can_btn, 'click', reset_cb)
|
||||
|
||||
cols = urwid.Columns([ok_btn, can_btn])
|
||||
pile = urwid.Pile([q, cols])
|
||||
box = urwid.LineBox(pile)
|
||||
|
||||
self.mainloop.widget = urwid.Overlay(
|
||||
urwid.Filler(box), o, 'center', ('relative', 50), 'middle', ('relative', 50)
|
||||
)
|
||||
|
||||
def chp_failed(self, commit: 'CommitWidget', err: str) -> None:
|
||||
o = self.mainloop.widget
|
||||
|
||||
def reset_cb(_) -> None:
|
||||
self.mainloop.widget = o
|
||||
|
||||
t = urwid.Text(textwrap.dedent(f"""
|
||||
Failed to apply {commit.commit.sha} {commit.commit.description} with the following error:
|
||||
|
||||
{err}
|
||||
|
||||
You can either cancel, or resolve the conflicts, commit the
|
||||
changes and select ok."""))
|
||||
|
||||
can_btn = urwid.Button('Cancel')
|
||||
urwid.connect_signal(can_btn, 'click', reset_cb)
|
||||
urwid.connect_signal(
|
||||
can_btn, 'click', lambda _: asyncio.ensure_future(commit.commit.abort_cherry(self, err)))
|
||||
|
||||
ok_btn = urwid.Button('Ok')
|
||||
urwid.connect_signal(ok_btn, 'click', reset_cb)
|
||||
urwid.connect_signal(
|
||||
ok_btn, 'click', lambda _: asyncio.ensure_future(commit.commit.resolve(self)))
|
||||
urwid.connect_signal(
|
||||
ok_btn, 'click', lambda _: self.remove_commit(commit))
|
||||
|
||||
cols = urwid.Columns([ok_btn, can_btn])
|
||||
pile = urwid.Pile([t, cols])
|
||||
box = urwid.LineBox(pile)
|
||||
|
||||
self.mainloop.widget = urwid.Overlay(
|
||||
urwid.Filler(box), o, 'center', ('relative', 50), 'middle', ('relative', 50)
|
||||
)
|
@@ -1,117 +0,0 @@
|
||||
#!/usr/bin/env python3
|
||||
# Copyright © 2019 Intel Corporation
|
||||
|
||||
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
# of this software and associated documentation files (the "Software"), to deal
|
||||
# in the Software without restriction, including without limitation the rights
|
||||
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
# copies of the Software, and to permit persons to whom the Software is
|
||||
# furnished to do so, subject to the following conditions:
|
||||
|
||||
# The above copyright notice and this permission notice shall be included in
|
||||
# all copies or substantial portions of the Software.
|
||||
|
||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
# SOFTWARE.
|
||||
|
||||
"""Update the main page, release notes, and calendar."""
|
||||
|
||||
import argparse
|
||||
import calendar
|
||||
import datetime
|
||||
import pathlib
|
||||
from lxml import (
|
||||
etree,
|
||||
html,
|
||||
)
|
||||
|
||||
|
||||
def calculate_previous_version(version: str, is_point: bool) -> str:
|
||||
"""Calculate the previous version to compare to.
|
||||
|
||||
In the case of -rc to final that verison is the previous .0 release,
|
||||
(19.3.0 in the case of 20.0.0, for example). for point releases that is
|
||||
the last point release. This value will be the same as the input value
|
||||
for a poiont release, but different for a major release.
|
||||
"""
|
||||
if '-' in version:
|
||||
version = version.split('-')[0]
|
||||
if is_point:
|
||||
return version
|
||||
base = version.split('.')
|
||||
if base[1] == '0':
|
||||
base[0] = str(int(base[0]) - 1)
|
||||
base[1] = '3'
|
||||
else:
|
||||
base[1] = str(int(base[1]) - 1)
|
||||
return '.'.join(base)
|
||||
|
||||
|
||||
def is_point_release(version: str) -> bool:
|
||||
return not version.endswith('.0')
|
||||
|
||||
|
||||
def update_index(is_point: bool, version: str, previous_version: str) -> None:
|
||||
p = pathlib.Path(__file__).parent.parent / 'docs' / 'index.html'
|
||||
with p.open('rt') as f:
|
||||
tree = html.parse(f)
|
||||
|
||||
news = tree.xpath('.//h1')[0]
|
||||
|
||||
date = datetime.date.today()
|
||||
month = calendar.month_name[date.month]
|
||||
header = etree.Element('h2')
|
||||
header.text = f"{month} {date.day}, {date.year}"
|
||||
|
||||
body = etree.Element('p')
|
||||
a = etree.SubElement(
|
||||
body, 'a', attrib={'href': f'relnotes/{previous_version}.html'})
|
||||
a.text = f"Mesa {previous_version}"
|
||||
if is_point:
|
||||
a.tail = " is released. This is a bug fix release."
|
||||
else:
|
||||
a.tail = (" is released. This is a new development release. "
|
||||
"See the release notes for mor information about this release.")
|
||||
|
||||
root = news.getparent()
|
||||
index = root.index(news) + 1
|
||||
root.insert(index, body)
|
||||
root.insert(index, header)
|
||||
|
||||
tree.write(p.as_posix(), method='html')
|
||||
|
||||
|
||||
def update_release_notes(previous_version: str) -> None:
|
||||
p = pathlib.Path(__file__).parent.parent / 'docs' / 'relnotes.html'
|
||||
with p.open('rt') as f:
|
||||
tree = html.parse(f)
|
||||
|
||||
li = etree.Element('li')
|
||||
a = etree.SubElement(li, 'a', href=f'relnotes/{previous_version}.html')
|
||||
a.text = f'{previous_version} release notes'
|
||||
|
||||
ul = tree.xpath('.//ul')[0]
|
||||
ul.insert(0, li)
|
||||
|
||||
tree.write(p.as_posix(), method='html')
|
||||
|
||||
|
||||
def main() -> None:
|
||||
parser = argparse.ArgumentParser()
|
||||
parser.add_argument('version', help="The released version.")
|
||||
args = parser.parse_args()
|
||||
|
||||
is_point = is_point_release(args.version)
|
||||
previous_version = calculate_previous_version(args.version, is_point)
|
||||
|
||||
update_index(is_point, args.version, previous_version)
|
||||
update_release_notes(previous_version)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
29
bin/shortlog_mesa.sh
Executable file
29
bin/shortlog_mesa.sh
Executable file
@@ -0,0 +1,29 @@
|
||||
#!/bin/sh
|
||||
|
||||
# This script is used to generate the list of changes that
|
||||
# appears in the release notes files, with HTML formatting.
|
||||
#
|
||||
# Usage examples:
|
||||
#
|
||||
# $ bin/shortlog_mesa.sh mesa-9.0.2..mesa-9.0.3
|
||||
# $ bin/shortlog_mesa.sh mesa-9.0.2..mesa-9.0.3 > changes
|
||||
# $ bin/shortlog_mesa.sh mesa-9.0.2..mesa-9.0.3 | tee changes
|
||||
|
||||
|
||||
in_log=0
|
||||
|
||||
git shortlog $* | while read l
|
||||
do
|
||||
if [ $in_log -eq 0 ]; then
|
||||
echo '<p>'$l'</p>'
|
||||
echo '<ul>'
|
||||
in_log=1
|
||||
elif echo "$l" | egrep -q '^$' ; then
|
||||
echo '</ul>'
|
||||
echo
|
||||
in_log=0
|
||||
else
|
||||
mesg=$(echo $l | sed 's/ (cherry picked from commit [0-9a-f]\+)//;s/\&/&/g;s/</\</g;s/>/\>/g')
|
||||
echo ' <li>'${mesg}'</li>'
|
||||
fi
|
||||
done
|
@@ -1,172 +0,0 @@
|
||||
#!/usr/bin/env python
|
||||
|
||||
import argparse
|
||||
import os
|
||||
import platform
|
||||
import subprocess
|
||||
|
||||
# This list contains symbols that _might_ be exported for some platforms
|
||||
PLATFORM_SYMBOLS = [
|
||||
'__bss_end__',
|
||||
'__bss_start__',
|
||||
'__bss_start',
|
||||
'__end__',
|
||||
'_bss_end__',
|
||||
'_edata',
|
||||
'_end',
|
||||
'_fini',
|
||||
'_init',
|
||||
]
|
||||
|
||||
|
||||
def get_symbols_nm(nm, lib):
|
||||
'''
|
||||
List all the (non platform-specific) symbols exported by the library
|
||||
using `nm`
|
||||
'''
|
||||
symbols = []
|
||||
platform_name = platform.system()
|
||||
output = subprocess.check_output([nm, '-gP', lib],
|
||||
stderr=open(os.devnull, 'w')).decode("ascii")
|
||||
for line in output.splitlines():
|
||||
fields = line.split()
|
||||
if len(fields) == 2 or fields[1] == 'U':
|
||||
continue
|
||||
symbol_name = fields[0]
|
||||
if platform_name == 'Linux':
|
||||
if symbol_name in PLATFORM_SYMBOLS:
|
||||
continue
|
||||
elif platform_name == 'Darwin':
|
||||
assert symbol_name[0] == '_'
|
||||
symbol_name = symbol_name[1:]
|
||||
symbols.append(symbol_name)
|
||||
return symbols
|
||||
|
||||
|
||||
def get_symbols_dumpbin(dumpbin, lib):
|
||||
'''
|
||||
List all the (non platform-specific) symbols exported by the library
|
||||
using `dumpbin`
|
||||
'''
|
||||
symbols = []
|
||||
output = subprocess.check_output([dumpbin, '/exports', lib],
|
||||
stderr=open(os.devnull, 'w')).decode("ascii")
|
||||
for line in output.splitlines():
|
||||
fields = line.split()
|
||||
# The lines with the symbols are made of at least 4 columns; see details below
|
||||
if len(fields) < 4:
|
||||
continue
|
||||
try:
|
||||
# Making sure the first 3 columns are a dec counter, a hex counter
|
||||
# and a hex address
|
||||
_ = int(fields[0], 10)
|
||||
_ = int(fields[1], 16)
|
||||
_ = int(fields[2], 16)
|
||||
except ValueError:
|
||||
continue
|
||||
symbol_name = fields[3]
|
||||
# De-mangle symbols
|
||||
if symbol_name[0] == '_':
|
||||
symbol_name = symbol_name[1:].split('@')[0]
|
||||
symbols.append(symbol_name)
|
||||
return symbols
|
||||
|
||||
|
||||
def main():
|
||||
parser = argparse.ArgumentParser()
|
||||
parser.add_argument('--symbols-file',
|
||||
action='store',
|
||||
required=True,
|
||||
help='path to file containing symbols')
|
||||
parser.add_argument('--lib',
|
||||
action='store',
|
||||
required=True,
|
||||
help='path to library')
|
||||
parser.add_argument('--nm',
|
||||
action='store',
|
||||
help='path to binary (or name in $PATH)')
|
||||
parser.add_argument('--dumpbin',
|
||||
action='store',
|
||||
help='path to binary (or name in $PATH)')
|
||||
args = parser.parse_args()
|
||||
|
||||
try:
|
||||
if platform.system() == 'Windows':
|
||||
if not args.dumpbin:
|
||||
parser.error('--dumpbin is mandatory')
|
||||
lib_symbols = get_symbols_dumpbin(args.dumpbin, args.lib)
|
||||
else:
|
||||
if not args.nm:
|
||||
parser.error('--nm is mandatory')
|
||||
lib_symbols = get_symbols_nm(args.nm, args.lib)
|
||||
except:
|
||||
# We can't run this test, but we haven't technically failed it either
|
||||
# Return the GNU "skip" error code
|
||||
exit(77)
|
||||
mandatory_symbols = []
|
||||
optional_symbols = []
|
||||
with open(args.symbols_file) as symbols_file:
|
||||
qualifier_optional = '(optional)'
|
||||
for line in symbols_file.readlines():
|
||||
|
||||
# Strip comments
|
||||
line = line.split('#')[0]
|
||||
line = line.strip()
|
||||
if not line:
|
||||
continue
|
||||
|
||||
# Line format:
|
||||
# [qualifier] symbol
|
||||
qualifier = None
|
||||
symbol = None
|
||||
|
||||
fields = line.split()
|
||||
if len(fields) == 1:
|
||||
symbol = fields[0]
|
||||
elif len(fields) == 2:
|
||||
qualifier = fields[0]
|
||||
symbol = fields[1]
|
||||
else:
|
||||
print(args.symbols_file + ': invalid format: ' + line)
|
||||
exit(1)
|
||||
|
||||
# The only supported qualifier is 'optional', which means the
|
||||
# symbol doesn't have to be exported by the library
|
||||
if qualifier and not qualifier == qualifier_optional:
|
||||
print(args.symbols_file + ': invalid qualifier: ' + qualifier)
|
||||
exit(1)
|
||||
|
||||
if qualifier == qualifier_optional:
|
||||
optional_symbols.append(symbol)
|
||||
else:
|
||||
mandatory_symbols.append(symbol)
|
||||
|
||||
unknown_symbols = []
|
||||
for symbol in lib_symbols:
|
||||
if symbol in mandatory_symbols:
|
||||
continue
|
||||
if symbol in optional_symbols:
|
||||
continue
|
||||
if symbol[:2] == '_Z':
|
||||
# Ignore random C++ symbols
|
||||
#TODO: figure out if there's any way to avoid exporting them in the first place
|
||||
continue
|
||||
unknown_symbols.append(symbol)
|
||||
|
||||
missing_symbols = [
|
||||
sym for sym in mandatory_symbols if sym not in lib_symbols
|
||||
]
|
||||
|
||||
for symbol in unknown_symbols:
|
||||
print(args.lib + ': unknown symbol exported: ' + symbol)
|
||||
|
||||
for symbol in missing_symbols:
|
||||
print(args.lib + ': missing symbol: ' + symbol)
|
||||
|
||||
if unknown_symbols or missing_symbols:
|
||||
exit(1)
|
||||
exit(0)
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
13
common.py
13
common.py
@@ -17,9 +17,6 @@ import SCons.Script.SConscript
|
||||
host_platform = _platform.system().lower()
|
||||
if host_platform.startswith('cygwin'):
|
||||
host_platform = 'cygwin'
|
||||
# MSYS2 default platform selection.
|
||||
if host_platform.startswith('mingw'):
|
||||
host_platform = 'windows'
|
||||
|
||||
# Search sys.argv[] for a "platform=foo" argument since we don't have
|
||||
# an 'env' variable at this point.
|
||||
@@ -52,18 +49,9 @@ if 'PROCESSOR_ARCHITECTURE' in os.environ:
|
||||
else:
|
||||
host_machine = _platform.machine()
|
||||
host_machine = _machine_map.get(host_machine, 'generic')
|
||||
# MSYS2 default machine selection.
|
||||
if _platform.system().lower().startswith('mingw') and 'MSYSTEM' in os.environ:
|
||||
if os.environ['MSYSTEM'] == 'MINGW32':
|
||||
host_machine = 'x86'
|
||||
if os.environ['MSYSTEM'] == 'MINGW64':
|
||||
host_machine = 'x86_64'
|
||||
|
||||
default_machine = host_machine
|
||||
default_toolchain = 'default'
|
||||
# MSYS2 default toolchain selection.
|
||||
if _platform.system().lower().startswith('mingw'):
|
||||
default_toolchain = 'mingw'
|
||||
|
||||
if target_platform == 'windows' and host_platform != 'windows':
|
||||
default_machine = 'x86'
|
||||
@@ -112,7 +100,6 @@ def AddOptions(opts):
|
||||
opts.Add(BoolOption('asan', 'enable Address Sanitizer', 'no'))
|
||||
opts.Add('toolchain', 'compiler toolchain', default_toolchain)
|
||||
opts.Add(BoolOption('llvm', 'use LLVM', default_llvm))
|
||||
opts.Add(BoolOption('force_scons', 'Force enable scons on deprecated platforms', 'false'))
|
||||
opts.Add(BoolOption('openmp', 'EXPERIMENTAL: compile with openmp (swrast)',
|
||||
'no'))
|
||||
opts.Add(BoolOption('debug', 'DEPRECATED: debug build', 'yes'))
|
||||
|
3378
configure.ac
Normal file
3378
configure.ac
Normal file
File diff suppressed because it is too large
Load Diff
@@ -8,7 +8,7 @@
|
||||
<body>
|
||||
|
||||
<div class="header">
|
||||
The Mesa 3D Graphics Library
|
||||
<h1>The Mesa 3D Graphics Library</h1>
|
||||
</div>
|
||||
|
||||
<iframe src="contents.html"></iframe>
|
||||
@@ -48,25 +48,23 @@ start-up because of an extension string buffer-overflow problem.
|
||||
|
||||
<p>
|
||||
The problem is a modern OpenGL driver will return a very long string
|
||||
for the <code>glGetString(GL_EXTENSIONS)</code> query and if the application
|
||||
for the glGetString(GL_EXTENSIONS) query and if the application
|
||||
naively copies the string into a fixed-size buffer it can overflow the
|
||||
buffer and crash the application.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
The work-around is to set the <code>MESA_EXTENSION_MAX_YEAR</code>
|
||||
environment variable to the approximate release year of the game.
|
||||
This will cause the <code>glGetString(GL_EXTENSIONS)</code> query to only report
|
||||
extensions older than the given year.
|
||||
The work-around is to set the MESA_EXTENSION_MAX_YEAR environment variable
|
||||
to the approximate release year of the game.
|
||||
This will cause the glGetString(GL_EXTENSIONS) query to only report extensions
|
||||
older than the given year.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
For example, if the game was released in 2001, do
|
||||
</p>
|
||||
<pre>
|
||||
export MESA_EXTENSION_MAX_YEAR=2001
|
||||
</pre>
|
||||
<p>
|
||||
before running the game.
|
||||
</p>
|
||||
|
||||
|
270
docs/autoconf.html
Normal file
270
docs/autoconf.html
Normal file
@@ -0,0 +1,270 @@
|
||||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta http-equiv="content-type" content="text/html; charset=utf-8">
|
||||
<title>Compilation and Installation using Autoconf</title>
|
||||
<link rel="stylesheet" type="text/css" href="mesa.css">
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<div class="header">
|
||||
<h1>The Mesa 3D Graphics Library</h1>
|
||||
</div>
|
||||
|
||||
<iframe src="contents.html"></iframe>
|
||||
<div class="content">
|
||||
|
||||
<h1>Compilation and Installation using Autoconf</h1>
|
||||
|
||||
<ol>
|
||||
<li><p><a href="#basic">Basic Usage</a></li>
|
||||
<li><p><a href="#driver">Driver Options</a>
|
||||
<ul>
|
||||
<li><a href="#xlib">Xlib Driver Options</a></li>
|
||||
<li><a href="#dri">DRI Driver Options</a></li>
|
||||
<li><a href="#osmesa">OSMesa Driver Options</a></li>
|
||||
</ul>
|
||||
</ol>
|
||||
|
||||
<h2>ATTENTION:</h2>
|
||||
<p>
|
||||
The autotools build is being replaced by the <a href="meson.html">meson</a>
|
||||
build system. If you haven't yet now is a good time to try using meson and
|
||||
report any issues you run into.
|
||||
</p>
|
||||
|
||||
<h2 id="basic">1. Basic Usage</h2>
|
||||
|
||||
<p>
|
||||
The autoconf generated configure script can be used to guess your
|
||||
platform and change various options for building Mesa. To use the
|
||||
configure script, type:
|
||||
</p>
|
||||
|
||||
<pre>
|
||||
./configure
|
||||
</pre>
|
||||
|
||||
<p>
|
||||
To see a short description of all the options, type <code>./configure
|
||||
--help</code>. If you are using a development snapshot and the configure
|
||||
script does not exist, type <code>./autogen.sh</code> to generate it
|
||||
first. If you know the options you want to pass to
|
||||
<code>configure</code>, you can pass them to <code>autogen.sh</code>. It
|
||||
will run <code>configure</code> with these options after it is
|
||||
generated. Once you have run <code>configure</code> and set the options
|
||||
to your preference, type:
|
||||
</p>
|
||||
|
||||
<pre>
|
||||
make
|
||||
</pre>
|
||||
|
||||
<p>
|
||||
This will produce libGL.so and/or several other libraries depending on the
|
||||
options you have chosen. Later, if you want to rebuild for a different
|
||||
configuration run <code>make realclean</code> before rebuilding.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Some of the generic autoconf options are used with Mesa:
|
||||
</p>
|
||||
<dl>
|
||||
<dt><code>--prefix=PREFIX</code></dt>
|
||||
<dd><p>This is the root directory where
|
||||
files will be installed by <code>make install</code>. The default is
|
||||
<code>/usr/local</code>.</p>
|
||||
</dd>
|
||||
|
||||
<dt><code>--exec-prefix=EPREFIX</code></dt>
|
||||
<dd><p>This is the root directory
|
||||
where architecture-dependent files will be installed. In Mesa, this is
|
||||
only used to derive the directory for the libraries. The default is
|
||||
<code>${prefix}</code>.</p>
|
||||
</dd>
|
||||
|
||||
<dt><code>--libdir=LIBDIR</code></dt>
|
||||
<dd><p>This option specifies the directory
|
||||
where the GL libraries will be installed. The default is
|
||||
<code>${exec_prefix}/lib</code>. It also serves as the name of the
|
||||
library staging area in the source tree. For instance, if the option
|
||||
<code>--libdir=/usr/local/lib64</code> is used, the libraries will be
|
||||
created in a <code>lib64</code> directory at the top of the Mesa source
|
||||
tree.</p>
|
||||
</dd>
|
||||
|
||||
<dt><code>--sysconfdir=DIR</code></dt>
|
||||
<dd><p>This option specifies the directory where the configuration
|
||||
files will be installed. The default is <code>${prefix}/etc</code>.
|
||||
Currently there's only one config file provided when dri drivers are
|
||||
enabled - it's <code>drirc</code>.</p>
|
||||
</dd>
|
||||
|
||||
<dt><code>--datadir=DIR</code></dt>
|
||||
<dd><p>This option specifies the directory where the data files will
|
||||
be installed. The default is <code>${prefix}/share</code>.
|
||||
Currently when dri drivers are enabled, <code>drirc.d/</code> is at
|
||||
this place.</p>
|
||||
</dd>
|
||||
|
||||
<dt><code>--enable-static, --disable-shared</code></dt>
|
||||
<dd><p>By default, Mesa
|
||||
will build shared libraries. Either of these options will force static
|
||||
libraries to be built. It is not currently possible to build static and
|
||||
shared libraries in a single pass.</p>
|
||||
</dd>
|
||||
|
||||
<dt><code>CC, CFLAGS, CXX, CXXFLAGS</code></dt>
|
||||
<dd><p>These environment variables
|
||||
control the C and C++ compilers used during the build. By default,
|
||||
<code>gcc</code> and <code>g++</code> are used and the debug/optimisation
|
||||
level is left unchanged.</p>
|
||||
</dd>
|
||||
|
||||
<dt><code>LDFLAGS</code></dt>
|
||||
<dd><p>An environment variable specifying flags to
|
||||
pass when linking programs. These should be empty and
|
||||
<code>PKG_CONFIG_PATH</code> is recommended to be used instead. If needed
|
||||
it can be used to direct the linker to use libraries in nonstandard
|
||||
directories. For example, <code>LDFLAGS="-L/usr/X11R6/lib"</code>.</p>
|
||||
</dd>
|
||||
|
||||
<dt><code>PKG_CONFIG_PATH</code></dt>
|
||||
<dd><p>The
|
||||
<code>pkg-config</code> utility is a hard requirement for configuring and
|
||||
building mesa. It is used to search for external libraries
|
||||
on the system. This environment variable is used to control the search
|
||||
path for <code>pkg-config</code>. For instance, setting
|
||||
<code>PKG_CONFIG_PATH=/usr/X11R6/lib/pkgconfig</code> will search for
|
||||
package metadata in <code>/usr/X11R6</code> before the standard
|
||||
directories.</p>
|
||||
</dd>
|
||||
</dl>
|
||||
|
||||
<p>
|
||||
There are also a few general options for altering the Mesa build:
|
||||
</p>
|
||||
<dl>
|
||||
<dt><code>--enable-debug</code></dt>
|
||||
<dd><p>This option will set the compiler debug/optimisation levels (if the user
|
||||
hasn't already set them via the CFLAGS/CXXFLAGS) and macros to aid in
|
||||
debugging the Mesa libraries.</p>
|
||||
|
||||
<p>Note that enabling this option can lead to noticeable loss of performance.</p>
|
||||
|
||||
<dt><code>--disable-asm</code></dt>
|
||||
<dd><p>There are assembly routines
|
||||
available for a few architectures. These will be used by default if
|
||||
one of these architectures is detected. This option ensures that
|
||||
assembly will not be used.</p>
|
||||
</dd>
|
||||
|
||||
<dt><code>--build=</code></dt>
|
||||
<dt><code>--host=</code></dt>
|
||||
<dd><p>By default, the build will compile code for the architecture that
|
||||
it's running on. In order to build cross-compile Mesa on a x86-64 machine
|
||||
that is to run on a i686, one would need to set the options to:</p>
|
||||
|
||||
<p><code>--build=x86_64-pc-linux-gnu --host=i686-pc-linux-gnu</code></p>
|
||||
|
||||
Note that these can vary from distribution to distribution. For more
|
||||
information check with the
|
||||
<a href="https://www.gnu.org/savannah-checkouts/gnu/autoconf/manual/autoconf-2.69/html_node/Specifying-Target-Triplets.html">
|
||||
autoconf manual</a>.
|
||||
Note that you will need to correctly set <code>PKG_CONFIG_PATH</code> as well.
|
||||
|
||||
|
||||
<p>In some cases a single compiler is capable of handling both architectures
|
||||
(multilib) in that case one would need to set the <code>CC,CXX</code> variables
|
||||
appending the correct machine options. Seek your compiler documentation for
|
||||
further information -
|
||||
<a href="https://gcc.gnu.org/onlinedocs/gcc/Submodel-Options.html"> gcc
|
||||
machine dependent options</a></p>
|
||||
|
||||
<p>In addition to specifying correct <code>PKG_CONFIG_PATH</code> for the target
|
||||
architecture, the following should be sufficient to configure multilib Mesa</p>
|
||||
|
||||
<code>./configure CC="gcc -m32" CXX="g++ -m32" --build=x86_64-pc-linux-gnu --host=i686-pc-linux-gnu ...</code>
|
||||
</dd>
|
||||
</dl>
|
||||
|
||||
|
||||
<h2 id="driver">2. GL Driver Options</h2>
|
||||
|
||||
<p>
|
||||
There are several different driver modes that Mesa can use. These are
|
||||
described in more detail in the <a href="install.html">basic
|
||||
installation instructions</a>. The Mesa driver is controlled through the
|
||||
configure options <code>--enable-glx</code> and <code>--enable-osmesa</code>
|
||||
</p>
|
||||
|
||||
<h3 id="xlib">Xlib</h3><p>
|
||||
It uses Xlib as a software renderer to do all rendering. It corresponds
|
||||
to the option <code>--enable-glx=xlib</code> or <code>--enable-glx=gallium-xlib</code>.
|
||||
|
||||
<h3 id="dri">DRI</h3><p>This mode uses the DRI hardware drivers for
|
||||
accelerated OpenGL rendering. To enable use <code>--enable-glx=dri
|
||||
--enable-dri</code>.
|
||||
|
||||
<!-- DRI specific options -->
|
||||
<dl>
|
||||
<dt><code>--with-dri-driverdir=DIR</code>
|
||||
<dd><p> This option specifies the
|
||||
location the DRI drivers will be installed to and the location libGL
|
||||
will search for DRI drivers. The default is <code>${libdir}/dri</code>.
|
||||
<dt><code>--with-dri-drivers=DRIVER,DRIVER,...</code>
|
||||
<dd><p> This option
|
||||
allows a specific set of DRI drivers to be built. For example,
|
||||
<code>--with-dri-drivers="swrast,i965,radeon,nouveau"</code>. By
|
||||
default, the drivers will be chosen depending on the target platform.
|
||||
See the directory <code>src/mesa/drivers/dri</code> in the source tree
|
||||
for available drivers. Beware that the swrast DRI driver is used by both
|
||||
libGL and the X.Org xserver GLX module to do software rendering, so you
|
||||
may run into problems if it is not available.
|
||||
<!-- This explanation might be totally bogus. Kristian? -->
|
||||
<dt><code>--disable-driglx-direct</code>
|
||||
<dd><p> Disable direct rendering in
|
||||
GLX. Normally, direct hardware rendering through the DRI drivers and
|
||||
indirect software rendering are enabled in GLX. This option disables
|
||||
direct rendering entirely. It can be useful on architectures where
|
||||
kernel DRM modules are not available.
|
||||
<dt><code>--enable-glx-tls</code> <dd><p>
|
||||
Enable Thread Local Storage (TLS) in
|
||||
GLX.
|
||||
<dt><code>--with-expat=DIR</code>
|
||||
<dd><p><strong>DEPRECATED</strong>, use <code>PKG_CONFIG_PATH</code> instead.</p>
|
||||
<p>The DRI-enabled libGL uses expat to
|
||||
parse the DRI configuration files in <code>${sysconfdir}/drirc</code> and
|
||||
<code>~/.drirc</code>. This option allows a specific expat installation
|
||||
to be used. For example, <code>--with-expat=/usr/local</code> will
|
||||
search for expat headers and libraries in <code>/usr/local/include</code>
|
||||
and <code>/usr/local/lib</code>, respectively.
|
||||
</dl>
|
||||
|
||||
<h3 id="osmesa">OSMesa </h3><p> No libGL is built in this
|
||||
mode. Instead, the driver code is built into the Off-Screen Mesa
|
||||
(OSMesa) library. See the <a href="osmesa.html">Off-Screen Rendering</a>
|
||||
page for more details. It corresponds to the option
|
||||
<code>--enable-osmesa</code>.
|
||||
|
||||
<!-- OSMesa specific options -->
|
||||
<dl>
|
||||
<dt><code>--with-osmesa-bits=BITS</code>
|
||||
<dd><p> This option allows the size
|
||||
of the color channel in bits to be specified. By default, an 8-bit
|
||||
channel will be used, and the driver will be named libOSMesa. Other
|
||||
options are 16- and 32-bit color channels, which will add the bit size
|
||||
to the library name. For example, <code>--with-osmesa-bits=16</code>
|
||||
will create the libOSMesa16 library with a 16-bit color channel.
|
||||
</dl>
|
||||
|
||||
|
||||
<h2 id="library">3. Library Options</h2>
|
||||
|
||||
<p>
|
||||
The configure script provides more fine grained control over the libraries
|
||||
that will be built.
|
||||
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
@@ -2,19 +2,19 @@
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta http-equiv="content-type" content="text/html; charset=utf-8">
|
||||
<title>Report a Bug</title>
|
||||
<title>Mesa Bug Reporting</title>
|
||||
<link rel="stylesheet" type="text/css" href="mesa.css">
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<div class="header">
|
||||
The Mesa 3D Graphics Library
|
||||
<h1>The Mesa 3D Graphics Library</h1>
|
||||
</div>
|
||||
|
||||
<iframe src="contents.html"></iframe>
|
||||
<div class="content">
|
||||
|
||||
<h1>Report a Bug</h1>
|
||||
<h1>Bug Database</h1>
|
||||
|
||||
<p>
|
||||
The Mesa bug database is hosted on
|
||||
@@ -24,8 +24,8 @@ The old bug database on SourceForge is no longer used.
|
||||
|
||||
<p>
|
||||
To file a Mesa bug, go to
|
||||
<a href="https://gitlab.freedesktop.org/mesa/mesa/issues">
|
||||
GitLab on freedesktop.org</a>
|
||||
<a href="https://bugs.freedesktop.org/enter_bug.cgi?product=Mesa">
|
||||
Bugzilla on freedesktop.org</a>
|
||||
</p>
|
||||
|
||||
<p>
|
||||
|
@@ -8,7 +8,7 @@
|
||||
<body>
|
||||
|
||||
<div class="header">
|
||||
The Mesa 3D Graphics Library
|
||||
<h1>The Mesa 3D Graphics Library</h1>
|
||||
</div>
|
||||
|
||||
<iframe src="contents.html"></iframe>
|
||||
@@ -41,69 +41,69 @@ as if you're defining a large, static table of information.
|
||||
<li>Opening braces go on the same line as the if/for/while statement.
|
||||
For example:
|
||||
<pre>
|
||||
if (condition) {
|
||||
foo;
|
||||
} else {
|
||||
bar;
|
||||
}
|
||||
if (condition) {
|
||||
foo;
|
||||
} else {
|
||||
bar;
|
||||
}
|
||||
</pre>
|
||||
|
||||
<li>Put a space before/after operators. For example, <code>a = b + c;</code>
|
||||
and not <code>a=b+c;</code>
|
||||
<li>Put a space before/after operators. For example, <tt>a = b + c;</tt>
|
||||
and not <tt>a=b+c;</tt>
|
||||
|
||||
<li>This GNU indent command generally does the right thing for formatting:
|
||||
<pre>
|
||||
indent -br -i3 -npcs --no-tabs infile.c -o outfile.c
|
||||
indent -br -i3 -npcs --no-tabs infile.c -o outfile.c
|
||||
</pre>
|
||||
|
||||
<li>
|
||||
<p>Use comments wherever you think it would be helpful for other developers.
|
||||
<li>Use comments wherever you think it would be helpful for other developers.
|
||||
Several specific cases and style examples follow. Note that we roughly
|
||||
follow <a href="http://www.doxygen.nl">Doxygen</a> conventions.
|
||||
</p>
|
||||
follow <a href="https://www.stack.nl/~dimitri/doxygen/">Doxygen</a> conventions.
|
||||
<br>
|
||||
<br>
|
||||
Single-line comments:
|
||||
<pre>
|
||||
/* null-out pointer to prevent dangling reference below */
|
||||
bufferObj = NULL;
|
||||
/* null-out pointer to prevent dangling reference below */
|
||||
bufferObj = NULL;
|
||||
</pre>
|
||||
Or,
|
||||
<pre>
|
||||
bufferObj = NULL; /* prevent dangling reference below */
|
||||
bufferObj = NULL; /* prevent dangling reference below */
|
||||
</pre>
|
||||
Multi-line comment:
|
||||
<pre>
|
||||
/* If this is a new buffer object id, or one which was generated but
|
||||
* never used before, allocate a buffer object now.
|
||||
*/
|
||||
/* If this is a new buffer object id, or one which was generated but
|
||||
* never used before, allocate a buffer object now.
|
||||
*/
|
||||
</pre>
|
||||
We try to quote the OpenGL specification where prudent:
|
||||
<pre>
|
||||
/* Page 38 of the PDF of the OpenGL ES 3.0 spec says:
|
||||
*
|
||||
* "An INVALID_OPERATION error is generated for any of the following
|
||||
* conditions:
|
||||
*
|
||||
* * <length> is zero."
|
||||
*
|
||||
* Additionally, page 94 of the PDF of the OpenGL 4.5 core spec
|
||||
* (30.10.2014) also says this, so it's no longer allowed for desktop GL,
|
||||
* either.
|
||||
*/
|
||||
/* Page 38 of the PDF of the OpenGL ES 3.0 spec says:
|
||||
*
|
||||
* "An INVALID_OPERATION error is generated for any of the following
|
||||
* conditions:
|
||||
*
|
||||
* * <length> is zero."
|
||||
*
|
||||
* Additionally, page 94 of the PDF of the OpenGL 4.5 core spec
|
||||
* (30.10.2014) also says this, so it's no longer allowed for desktop GL,
|
||||
* either.
|
||||
*/
|
||||
</pre>
|
||||
Function comment example:
|
||||
<pre>
|
||||
/**
|
||||
* Create and initialize a new buffer object. Called via the
|
||||
* ctx->Driver.CreateObject() driver callback function.
|
||||
* \param name integer name of the object
|
||||
* \param type one of GL_FOO, GL_BAR, etc.
|
||||
* \return pointer to new object or NULL if error
|
||||
*/
|
||||
struct gl_object *
|
||||
_mesa_create_object(GLuint name, GLenum type)
|
||||
{
|
||||
/* function body */
|
||||
}
|
||||
/**
|
||||
* Create and initialize a new buffer object. Called via the
|
||||
* ctx->Driver.CreateObject() driver callback function.
|
||||
* \param name integer name of the object
|
||||
* \param type one of GL_FOO, GL_BAR, etc.
|
||||
* \return pointer to new object or NULL if error
|
||||
*/
|
||||
struct gl_object *
|
||||
_mesa_create_object(GLuint name, GLenum type)
|
||||
{
|
||||
/* function body */
|
||||
}
|
||||
</pre>
|
||||
|
||||
<li>Put the function return type and qualifiers on one line and the function
|
||||
@@ -113,30 +113,29 @@ the opening brace goes on the next line by itself (see above.)
|
||||
|
||||
<li>Function names follow various conventions depending on the type of function:
|
||||
<pre>
|
||||
glFooBar() - a public GL entry point (in glapi_dispatch.c)
|
||||
_mesa_FooBar() - the internal immediate mode function
|
||||
save_FooBar() - retained mode (display list) function in dlist.c
|
||||
foo_bar() - a static (private) function
|
||||
_mesa_foo_bar() - an internal non-static Mesa function
|
||||
glFooBar() - a public GL entry point (in glapi_dispatch.c)
|
||||
_mesa_FooBar() - the internal immediate mode function
|
||||
save_FooBar() - retained mode (display list) function in dlist.c
|
||||
foo_bar() - a static (private) function
|
||||
_mesa_foo_bar() - an internal non-static Mesa function
|
||||
</pre>
|
||||
|
||||
<li>Constants, macros and enum names are <code>ALL_UPPERCASE</code>, with _
|
||||
between words.
|
||||
<li>Mesa usually uses camel case for local variables (Ex:
|
||||
<code>localVarname</code>) while gallium typically uses underscores (Ex:
|
||||
<code>local_var_name</code>).
|
||||
<li>Constants, macros and enum names are ALL_UPPERCASE, with _ between
|
||||
words.
|
||||
<li>Mesa usually uses camel case for local variables (Ex: "localVarname")
|
||||
while gallium typically uses underscores (Ex: "local_var_name").
|
||||
<li>Global variables are almost never used because Mesa should be thread-safe.
|
||||
|
||||
<li>Booleans. Places that are not directly visible to the GL API
|
||||
should prefer the use of <code>bool</code>, <code>true</code>, and
|
||||
<code>false</code> over <code>GLboolean</code>, <code>GL_TRUE</code>, and
|
||||
<code>GL_FALSE</code>. In C code, this may mean that
|
||||
<code>#include <stdbool.h></code> needs to be added. The
|
||||
<code>try_emit_*</code> methods in <code>src/mesa/program/ir_to_mesa.cpp</code>
|
||||
and <code>src/mesa/state_tracker/st_glsl_to_tgsi.cpp</code> can serve as
|
||||
examples.
|
||||
should prefer the use of <tt>bool</tt>, <tt>true</tt>, and
|
||||
<tt>false</tt> over <tt>GLboolean</tt>, <tt>GL_TRUE</tt>, and
|
||||
<tt>GL_FALSE</tt>. In C code, this may mean that
|
||||
<tt>#include <stdbool.h></tt> needs to be added. The
|
||||
<tt>try_emit_</tt>* methods in src/mesa/program/ir_to_mesa.cpp and
|
||||
src/mesa/state_tracker/st_glsl_to_tgsi.cpp can serve as examples.
|
||||
|
||||
</ul>
|
||||
</p>
|
||||
|
||||
</div>
|
||||
</body>
|
||||
|
@@ -2,19 +2,19 @@
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta http-equiv="content-type" content="text/html; charset=utf-8">
|
||||
<title>Conformance Testing</title>
|
||||
<title>Conformance</title>
|
||||
<link rel="stylesheet" type="text/css" href="mesa.css">
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<div class="header">
|
||||
The Mesa 3D Graphics Library
|
||||
<h1>The Mesa 3D Graphics Library</h1>
|
||||
</div>
|
||||
|
||||
<iframe src="contents.html"></iframe>
|
||||
<div class="content">
|
||||
|
||||
<h1>Conformance Testing</h1>
|
||||
<h1>Conformance</h1>
|
||||
|
||||
<p>
|
||||
The SGI OpenGL conformance tests verify correct operation of OpenGL
|
||||
|
@@ -12,10 +12,6 @@
|
||||
background-color: #cccccc;
|
||||
color: black;
|
||||
}
|
||||
h2 {
|
||||
font-size: inherit;
|
||||
font-weight: bold;
|
||||
}
|
||||
a:link {
|
||||
color: #000;
|
||||
}
|
||||
@@ -27,56 +23,59 @@
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<h2>Documentation</h2>
|
||||
<b>Documentation</b>
|
||||
<ul>
|
||||
<li><a href="intro.html" target="_parent">Introduction</a>
|
||||
<li><a href="index.html" target="_parent">News</a>
|
||||
<li><a href="developers.html" target="_parent">Developers</a>
|
||||
<li><a href="systems.html" target="_parent">Platforms and Drivers</a>
|
||||
<li><a href="license.html" target="_parent">License and Copyright</a>
|
||||
<li><a href="faq.html" target="_parent">Frequently Asked Questions</a>
|
||||
<li><a href="license.html" target="_parent">License & Copyright</a>
|
||||
<li><a href="faq.html" target="_parent">FAQ</a>
|
||||
<li><a href="relnotes.html" target="_parent">Release Notes</a>
|
||||
<li><a href="thanks.html" target="_parent">Acknowledgements</a>
|
||||
<li><a href="conform.html" target="_parent">Conformance Testing</a>
|
||||
<li>more docs below...
|
||||
</ul>
|
||||
|
||||
<h2>Download and Install</h2>
|
||||
<b>Download / Install</b>
|
||||
<ul>
|
||||
<li><a href="download.html" target="_parent">Downloading and Unpacking</a>
|
||||
<li><a href="install.html" target="_parent">Compiling and Installing</a>
|
||||
<li><a href="download.html" target="_parent">Downloading / Unpacking</a>
|
||||
<li><a href="install.html" target="_parent">Compiling / Installing</a>
|
||||
<ul>
|
||||
<li><a href="autoconf.html" target="_parent">Autoconf</a></li>
|
||||
<li><a href="meson.html" target="_parent">Meson</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a href="precompiled.html" target="_parent">Precompiled Libraries</a>
|
||||
</ul>
|
||||
|
||||
<h2>Need help?</h2>
|
||||
<b>Resources</b>
|
||||
<ul>
|
||||
<li><a href="lists.html" target="_parent">Mailing Lists</a>
|
||||
<li><a href="bugs.html" target="_parent">Report a bug</a>
|
||||
<li><a href="bugs.html" target="_parent">Bug Database</a>
|
||||
<li><a href="webmaster.html" target="_parent">Webmaster</a>
|
||||
<li><a href="https://dri.freedesktop.org/" target="_parent">Mesa/DRI Wiki</a>
|
||||
</ul>
|
||||
|
||||
<h2>User Topics</h2>
|
||||
<b>User Topics</b>
|
||||
<ul>
|
||||
<li><a href="shading.html" target="_parent">Shading Language</a>
|
||||
<li><a href="egl.html" target="_parent">EGL</a>
|
||||
<li><a href="opengles.html" target="_parent">OpenGL ES</a>
|
||||
<li><a href="envvars.html" target="_parent">Environment Variables</a>
|
||||
<li><a href="osmesa.html" target="_parent">Off-screen Rendering</a>
|
||||
<li><a href="osmesa.html" target="_parent">Off-Screen Rendering</a>
|
||||
<li><a href="debugging.html" target="_parent">Debugging Tips</a>
|
||||
<li><a href="perf.html" target="_parent">Performance Tips</a>
|
||||
<li><a href="extensions.html" target="_parent">Mesa Extensions</a>
|
||||
<li><a href="llvmpipe.html" target="_parent">Gallium LLVMpipe Driver</a>
|
||||
<li><a href="vmware-guest.html" target="_parent">VMware SVGA3D Guest Driver</a>
|
||||
<li><a href="postprocess.html" target="_parent">Gallium Post-processing</a>
|
||||
<li><a href="mangling.html" target="_parent">GL Function Name Mangling</a>
|
||||
<li><a href="llvmpipe.html" target="_parent">Gallium llvmpipe driver</a>
|
||||
<li><a href="vmware-guest.html" target="_parent">VMware SVGA3D guest driver</a>
|
||||
<li><a href="postprocess.html" target="_parent">Gallium post-processing</a>
|
||||
<li><a href="application-issues.html" target="_parent">Application Issues</a>
|
||||
<li><a href="viewperf.html" target="_parent">Viewperf Issues</a>
|
||||
</ul>
|
||||
|
||||
<h2>Developer Topics</h2>
|
||||
<b>Developer Topics</b>
|
||||
<ul>
|
||||
<li><a href="repository.html" target="_parent">Source Code Repository</a>
|
||||
<li><a href="sourcetree.html" target="_parent">Source Code Tree</a>
|
||||
@@ -84,25 +83,26 @@
|
||||
<li><a href="helpwanted.html" target="_parent">Help Wanted</a>
|
||||
<li><a href="devinfo.html" target="_parent">Development Notes</a>
|
||||
<li><a href="codingstyle.html" target="_parent">Coding Style</a>
|
||||
<li><a href="submittingpatches.html" target="_parent">Submitting Patches</a>
|
||||
<li><a href="releasing.html" target="_parent">Releasing Process</a>
|
||||
<li><a href="release-calendar.html" target="_parent">Release Calendar</a>
|
||||
<li><a href="submittingpatches.html" target="_parent">Submitting patches</a>
|
||||
<li><a href="releasing.html" target="_parent">Releasing process</a>
|
||||
<li><a href="release-calendar.html" target="_parent">Release calendar</a>
|
||||
<li><a href="sourcedocs.html" target="_parent">Source Documentation</a>
|
||||
<li><a href="dispatch.html" target="_parent">GL Dispatch</a>
|
||||
</ul>
|
||||
|
||||
<h2>Links</h2>
|
||||
<b>Links</b>
|
||||
<ul>
|
||||
<li><a href="https://www.opengl.org" target="_parent">OpenGL Website</a>
|
||||
<li><a href="https://dri.freedesktop.org" target="_parent">DRI Website</a>
|
||||
<li><a href="https://www.opengl.org" target="_parent">OpenGL website</a>
|
||||
<li><a href="https://dri.freedesktop.org" target="_parent">DRI website</a>
|
||||
<li><a href="https://www.freedesktop.org" target="_parent">freedesktop.org</a>
|
||||
<li><a href="https://planet.freedesktop.org" target="_parent">Developer Blogs</a>
|
||||
<li><a href="https://planet.freedesktop.org" target="_parent">Developer blogs</a>
|
||||
</ul>
|
||||
|
||||
<h2>Hosted by:</h2>
|
||||
<dl>
|
||||
<dd><a href="https://www.freedesktop.org" target="_parent">freedesktop.org</a>
|
||||
</dl>
|
||||
<b>Hosted by:</b>
|
||||
<br>
|
||||
<blockquote>
|
||||
<a href="https://freedesktop.org" target="_parent">freedesktop.org</a>
|
||||
</blockquote>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
|
@@ -8,7 +8,7 @@
|
||||
<body>
|
||||
|
||||
<div class="header">
|
||||
The Mesa 3D Graphics Library
|
||||
<h1>The Mesa 3D Graphics Library</h1>
|
||||
</div>
|
||||
|
||||
<iframe src="contents.html"></iframe>
|
||||
@@ -20,22 +20,26 @@
|
||||
Normally Mesa (and OpenGL) records but does not notify the user of
|
||||
errors. It is up to the application to call
|
||||
<code>glGetError</code> to check for errors. Mesa supports an
|
||||
environment variable, <code>MESA_DEBUG</code>, to help with debugging. If
|
||||
<code>MESA_DEBUG</code> is defined, a message will be printed to stdout
|
||||
whenever an error occurs.
|
||||
environment variable, MESA_DEBUG, to help with debugging. If
|
||||
MESA_DEBUG is defined, a message will be printed to stdout whenever
|
||||
an error occurs.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
More extensive error checking is done in DEBUG builds
|
||||
(<code>--buildtype debug</code> for meson, <code>build=debug</code> for scons).
|
||||
More extensive error checking is done when Mesa is compiled with the
|
||||
DEBUG symbol defined. You'll have to edit the Make-config file and
|
||||
add -DDEBUG to the CFLAGS line for your system configuration. You may
|
||||
also want to replace any optimization flags with the -g flag so you can
|
||||
use your debugger. After you've edited Make-config type 'make clean'
|
||||
before recompiling.
|
||||
</p>
|
||||
<p>
|
||||
In your debugger you can set a breakpoint in <code>_mesa_error()</code> to trap
|
||||
Mesa errors.
|
||||
In your debugger you can set a breakpoint in _mesa_error() to trap Mesa
|
||||
errors.
|
||||
</p>
|
||||
<p>
|
||||
There is a display list printing/debugging facility. See the end of
|
||||
<code>src/dlist.c</code> for details.
|
||||
src/dlist.c for details.
|
||||
</p>
|
||||
|
||||
</div>
|
||||
|
@@ -8,7 +8,7 @@
|
||||
<body>
|
||||
|
||||
<div class="header">
|
||||
The Mesa 3D Graphics Library
|
||||
<h1>The Mesa 3D Graphics Library</h1>
|
||||
</div>
|
||||
|
||||
<iframe src="contents.html"></iframe>
|
||||
|
@@ -8,7 +8,7 @@
|
||||
<body>
|
||||
|
||||
<div class="header">
|
||||
The Mesa 3D Graphics Library
|
||||
<h1>The Mesa 3D Graphics Library</h1>
|
||||
</div>
|
||||
|
||||
<iframe src="contents.html"></iframe>
|
||||
@@ -25,12 +25,11 @@
|
||||
|
||||
<p>
|
||||
To add a new GL extension to Mesa you have to do at least the following.
|
||||
</p>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
If <code>glext.h</code> doesn't define the extension, edit
|
||||
<code>include/GL/gl.h</code> and add code like this:
|
||||
If glext.h doesn't define the extension, edit include/GL/gl.h and add
|
||||
code like this:
|
||||
<pre>
|
||||
#ifndef GL_EXT_the_extension_name
|
||||
#define GL_EXT_the_extension_name 1
|
||||
@@ -41,18 +40,18 @@ To add a new GL extension to Mesa you have to do at least the following.
|
||||
</pre>
|
||||
</li>
|
||||
<li>
|
||||
In the <code>src/mapi/glapi/gen/</code> directory, add the new extension
|
||||
functions and enums to the <code>gl_API.xml</code> file.
|
||||
In the src/mapi/glapi/gen/ directory, add the new extension functions and
|
||||
enums to the gl_API.xml file.
|
||||
Then, a bunch of source files must be regenerated by executing the
|
||||
corresponding Python scripts.
|
||||
</li>
|
||||
<li>
|
||||
Add a new entry to the <code>gl_extensions</code> struct in
|
||||
<code>mtypes.h</code> if the extension requires driver capabilities not
|
||||
already exposed by another extension.
|
||||
Add a new entry to the <code>gl_extensions</code> struct in mtypes.h
|
||||
if the extension requires driver capabilities not already exposed by
|
||||
another extension.
|
||||
</li>
|
||||
<li>
|
||||
Add a new entry to the <code>src/mesa/main/extensions_table.h</code> file.
|
||||
Add a new entry to the src/mesa/main/extensions_table.h file.
|
||||
</li>
|
||||
<li>
|
||||
From this point, the best way to proceed is to find another extension,
|
||||
@@ -60,22 +59,24 @@ To add a new GL extension to Mesa you have to do at least the following.
|
||||
as an example.
|
||||
</li>
|
||||
<li>
|
||||
If the new extension adds new GL state, the functions in
|
||||
<code>get.c</code>, <code>enable.c</code> and <code>attrib.c</code>
|
||||
will most likely require new code.
|
||||
If the new extension adds new GL state, the functions in get.c, enable.c
|
||||
and attrib.c will most likely require new code.
|
||||
</li>
|
||||
<li>
|
||||
To determine if the new extension is active in the current context,
|
||||
use the auto-generated <code>_mesa_has_##name_str()</code> function
|
||||
defined in <code>src/mesa/main/extensions.h</code>.
|
||||
use the auto-generated _mesa_has_##name_str() function defined in
|
||||
src/mesa/main/extensions.h.
|
||||
</li>
|
||||
<li>
|
||||
The dispatch tests <code>check_table.cpp</code> and
|
||||
<code>dispatch_sanity.cpp</code> should be updated with details about
|
||||
the new extensions functions. These tests are run using
|
||||
<code>meson test</code>.
|
||||
The dispatch tests check_table.cpp and dispatch_sanity.cpp
|
||||
should be updated with details about the new extensions functions. These
|
||||
tests are run using 'make check'
|
||||
</li>
|
||||
</ul>
|
||||
</p>
|
||||
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
</body>
|
||||
|
@@ -2,19 +2,19 @@
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta http-equiv="content-type" content="text/html; charset=utf-8">
|
||||
<title>GL Dispatch</title>
|
||||
<title>GL Dispatch in Mesa</title>
|
||||
<link rel="stylesheet" type="text/css" href="mesa.css">
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<div class="header">
|
||||
The Mesa 3D Graphics Library
|
||||
<h1>The Mesa 3D Graphics Library</h1>
|
||||
</div>
|
||||
|
||||
<iframe src="contents.html"></iframe>
|
||||
<div class="content">
|
||||
|
||||
<h1>GL Dispatch</h1>
|
||||
<h1>GL Dispatch in Mesa</h1>
|
||||
|
||||
<p>Several factors combine to make efficient dispatch of OpenGL functions
|
||||
fairly complicated. This document attempts to explain some of the issues
|
||||
@@ -30,28 +30,28 @@ of the GL related state for the application. Every texture, every buffer
|
||||
object, every enable, and much, much more is stored in the context. Since
|
||||
an application can have more than one context, the context to be used is
|
||||
selected by a window-system dependent function such as
|
||||
<code>glXMakeContextCurrent</code>.</p>
|
||||
<tt>glXMakeContextCurrent</tt>.</p>
|
||||
|
||||
<p>In environments that implement OpenGL with X-Windows using GLX, every GL
|
||||
function, including the pointers returned by <code>glXGetProcAddress</code>, are
|
||||
function, including the pointers returned by <tt>glXGetProcAddress</tt>, are
|
||||
<em>context independent</em>. This means that no matter what context is
|
||||
currently active, the same <code>glVertex3fv</code> function is used.</p>
|
||||
currently active, the same <tt>glVertex3fv</tt> function is used.</p>
|
||||
|
||||
<p>This creates the first bit of dispatch complexity. An application can
|
||||
have two GL contexts. One context is a direct rendering context where
|
||||
function calls are routed directly to a driver loaded within the
|
||||
application's address space. The other context is an indirect rendering
|
||||
context where function calls are converted to GLX protocol and sent to a
|
||||
server. The same <code>glVertex3fv</code> has to do the right thing depending
|
||||
server. The same <tt>glVertex3fv</tt> has to do the right thing depending
|
||||
on which context is current.</p>
|
||||
|
||||
<p>Highly optimized drivers or GLX protocol implementations may want to
|
||||
change the behavior of GL functions depending on current state. For
|
||||
example, <code>glFogCoordf</code> may operate differently depending on whether
|
||||
example, <tt>glFogCoordf</tt> may operate differently depending on whether
|
||||
or not fog is enabled.</p>
|
||||
|
||||
<p>In multi-threaded environments, it is possible for each thread to have a
|
||||
different GL context current. This means that poor old <code>glVertex3fv</code>
|
||||
different GL context current. This means that poor old <tt>glVertex3fv</tt>
|
||||
has to know which GL context is current in the thread where it is being
|
||||
called.</p>
|
||||
|
||||
@@ -64,38 +64,38 @@ dispatch table stores pointers to functions that actually implement
|
||||
specific GL functions. Each time a new context is made current in a thread,
|
||||
these pointers a updated.</p>
|
||||
|
||||
<p>The implementation of functions such as <code>glVertex3fv</code> becomes
|
||||
<p>The implementation of functions such as <tt>glVertex3fv</tt> becomes
|
||||
conceptually simple:</p>
|
||||
|
||||
<ul>
|
||||
<li>Fetch the current dispatch table pointer.</li>
|
||||
<li>Fetch the pointer to the real <code>glVertex3fv</code> function from the
|
||||
<li>Fetch the pointer to the real <tt>glVertex3fv</tt> function from the
|
||||
table.</li>
|
||||
<li>Call the real function.</li>
|
||||
</ul>
|
||||
|
||||
<p>This can be implemented in just a few lines of C code. The file
|
||||
<code>src/mesa/glapi/glapitemp.h</code> contains code very similar to this.</p>
|
||||
<tt>src/mesa/glapi/glapitemp.h</tt> contains code very similar to this.</p>
|
||||
|
||||
<figure>
|
||||
<pre>
|
||||
<blockquote>
|
||||
<table border="1">
|
||||
<tr><td><pre>
|
||||
void glVertex3f(GLfloat x, GLfloat y, GLfloat z)
|
||||
{
|
||||
const struct _glapi_table * const dispatch = GET_DISPATCH();
|
||||
|
||||
(*dispatch->Vertex3f)(x, y, z);
|
||||
}
|
||||
</pre>
|
||||
<figcaption>Sample dispatch function</figcaption>
|
||||
</figure>
|
||||
}</pre></td></tr>
|
||||
<tr><td>Sample dispatch function</td></tr></table>
|
||||
</blockquote>
|
||||
|
||||
<p>The problem with this simple implementation is the large amount of
|
||||
overhead that it adds to every GL function call.</p>
|
||||
|
||||
<p>In a multithreaded environment, a naive implementation of
|
||||
<code>GET_DISPATCH</code> involves a call to <code>pthread_getspecific</code> or a
|
||||
<tt>GET_DISPATCH</tt> involves a call to <tt>pthread_getspecific</tt> or a
|
||||
similar function. Mesa provides a wrapper function called
|
||||
<code>_glapi_get_dispatch</code> that is used by default.</p>
|
||||
<tt>_glapi_get_dispatch</tt> that is used by default.</p>
|
||||
|
||||
<h2>3. Optimizations</h2>
|
||||
|
||||
@@ -109,7 +109,7 @@ each can or cannot be used are listed.</p>
|
||||
<p>The vast majority of OpenGL applications use the API in a single threaded
|
||||
manner. That is, the application has only one thread that makes calls into
|
||||
the GL. In these cases, not only do the calls to
|
||||
<code>pthread_getspecific</code> hurt performance, but they are completely
|
||||
<tt>pthread_getspecific</tt> hurt performance, but they are completely
|
||||
unnecessary! It is possible to detect this common case and avoid these
|
||||
calls.</p>
|
||||
|
||||
@@ -118,54 +118,56 @@ of the executing thread. If the same thread ID is always seen, Mesa knows
|
||||
that the application is, from OpenGL's point of view, single threaded.</p>
|
||||
|
||||
<p>As long as an application is single threaded, Mesa stores a pointer to
|
||||
the dispatch table in a global variable called <code>_glapi_Dispatch</code>.
|
||||
the dispatch table in a global variable called <tt>_glapi_Dispatch</tt>.
|
||||
The pointer is also stored in a per-thread location via
|
||||
<code>pthread_setspecific</code>. When Mesa detects that an application has
|
||||
become multithreaded, <code>NULL</code> is stored in <code>_glapi_Dispatch</code>.</p>
|
||||
<tt>pthread_setspecific</tt>. When Mesa detects that an application has
|
||||
become multithreaded, <tt>NULL</tt> is stored in <tt>_glapi_Dispatch</tt>.</p>
|
||||
|
||||
<p>Using this simple mechanism the dispatch functions can detect the
|
||||
multithreaded case by comparing <code>_glapi_Dispatch</code> to <code>NULL</code>.
|
||||
The resulting implementation of <code>GET_DISPATCH</code> is slightly more
|
||||
complex, but it avoids the expensive <code>pthread_getspecific</code> call in
|
||||
multithreaded case by comparing <tt>_glapi_Dispatch</tt> to <tt>NULL</tt>.
|
||||
The resulting implementation of <tt>GET_DISPATCH</tt> is slightly more
|
||||
complex, but it avoids the expensive <tt>pthread_getspecific</tt> call in
|
||||
the common case.</p>
|
||||
|
||||
<figure>
|
||||
<pre>
|
||||
<blockquote>
|
||||
<table border="1">
|
||||
<tr><td><pre>
|
||||
#define GET_DISPATCH() \
|
||||
(_glapi_Dispatch != NULL) \
|
||||
? _glapi_Dispatch : pthread_getspecific(&_glapi_Dispatch_key)
|
||||
</pre>
|
||||
<figcaption>Improved <code>GET_DISPATCH</code> Implementation</figcaption>
|
||||
</figure>
|
||||
? _glapi_Dispatch : pthread_getspecific(&_glapi_Dispatch_key)
|
||||
</pre></td></tr>
|
||||
<tr><td>Improved <tt>GET_DISPATCH</tt> Implementation</td></tr></table>
|
||||
</blockquote>
|
||||
|
||||
<h3>3.2. ELF TLS</h3>
|
||||
|
||||
<p>Starting with the 2.4.20 Linux kernel, each thread is allocated an area
|
||||
of per-thread, global storage. Variables can be put in this area using some
|
||||
extensions to GCC. By storing the dispatch table pointer in this area, the
|
||||
expensive call to <code>pthread_getspecific</code> and the test of
|
||||
<code>_glapi_Dispatch</code> can be avoided.</p>
|
||||
expensive call to <tt>pthread_getspecific</tt> and the test of
|
||||
<tt>_glapi_Dispatch</tt> can be avoided.</p>
|
||||
|
||||
<p>The dispatch table pointer is stored in a new variable called
|
||||
<code>_glapi_tls_Dispatch</code>. A new variable name is used so that a single
|
||||
<tt>_glapi_tls_Dispatch</tt>. A new variable name is used so that a single
|
||||
libGL can implement both interfaces. This allows the libGL to operate with
|
||||
direct rendering drivers that use either interface. Once the pointer is
|
||||
properly declared, <code>GET_DISPACH</code> becomes a simple variable
|
||||
properly declared, <tt>GET_DISPACH</tt> becomes a simple variable
|
||||
reference.</p>
|
||||
|
||||
<figure>
|
||||
<pre>
|
||||
<blockquote>
|
||||
<table border="1">
|
||||
<tr><td><pre>
|
||||
extern __thread struct _glapi_table *_glapi_tls_Dispatch
|
||||
__attribute__((tls_model("initial-exec")));
|
||||
|
||||
#define GET_DISPATCH() _glapi_tls_Dispatch
|
||||
</pre>
|
||||
<figcaption>TLS <code>GET_DISPATCH</code> Implementation</figcaption>
|
||||
</figure>
|
||||
</pre></td></tr>
|
||||
<tr><td>TLS <tt>GET_DISPATCH</tt> Implementation</td></tr></table>
|
||||
</blockquote>
|
||||
|
||||
<p>Use of this path is controlled by the preprocessor define
|
||||
<code>USE_ELF_TLS</code>. Any platform capable of using ELF TLS should use this
|
||||
as the default dispatch method.</p>
|
||||
<tt>GLX_USE_TLS</tt>. Any platform capable of using TLS should use this as
|
||||
the default dispatch method.</p>
|
||||
|
||||
<h3>3.3. Assembly Language Dispatch Stubs</h3>
|
||||
|
||||
@@ -183,13 +185,13 @@ ways that the dispatch table pointer can be accessed. There are four
|
||||
different methods that can be used:</p>
|
||||
|
||||
<ol>
|
||||
<li>Using <code>_glapi_Dispatch</code> directly in builds for non-multithreaded
|
||||
<li>Using <tt>_glapi_Dispatch</tt> directly in builds for non-multithreaded
|
||||
environments.</li>
|
||||
<li>Using <code>_glapi_Dispatch</code> and <code>_glapi_get_dispatch</code> in
|
||||
<li>Using <tt>_glapi_Dispatch</tt> and <tt>_glapi_get_dispatch</tt> in
|
||||
multithreaded environments.</li>
|
||||
<li>Using <code>_glapi_Dispatch</code> and <code>pthread_getspecific</code> in
|
||||
<li>Using <tt>_glapi_Dispatch</tt> and <tt>pthread_getspecific</tt> in
|
||||
multithreaded environments.</li>
|
||||
<li>Using <code>_glapi_tls_Dispatch</code> directly in TLS enabled
|
||||
<li>Using <tt>_glapi_tls_Dispatch</tt> directly in TLS enabled
|
||||
multithreaded environments.</li>
|
||||
</ol>
|
||||
|
||||
@@ -202,23 +204,24 @@ terribly relevant.</p>
|
||||
few preprocessor defines.</p>
|
||||
|
||||
<ul>
|
||||
<li>If <code>USE_ELF_TLS</code> is defined, method #3 is used.</li>
|
||||
<li>If <code>HAVE_PTHREAD</code> is defined, method #2 is used.</li>
|
||||
<li>If <tt>GLX_USE_TLS</tt> is defined, method #3 is used.</li>
|
||||
<li>If <tt>HAVE_PTHREAD</tt> is defined, method #2 is used.</li>
|
||||
<li>If none of the preceding are defined, method #1 is used.</li>
|
||||
</ul>
|
||||
|
||||
<p>Two different techniques are used to handle the various different cases.
|
||||
On x86 and SPARC, a macro called <code>GL_STUB</code> is used. In the preamble
|
||||
On x86 and SPARC, a macro called <tt>GL_STUB</tt> is used. In the preamble
|
||||
of the assembly source file different implementations of the macro are
|
||||
selected based on the defined preprocessor variables. The assembly code
|
||||
then consists of a series of invocations of the macros such as:
|
||||
|
||||
<figure>
|
||||
<pre>
|
||||
<blockquote>
|
||||
<table border="1">
|
||||
<tr><td><pre>
|
||||
GL_STUB(Color3fv, _gloffset_Color3fv)
|
||||
</pre>
|
||||
<figcaption>SPARC Assembly Implementation of <code>glColor3fv</code></figcaption>
|
||||
</figure>
|
||||
</pre></td></tr>
|
||||
<tr><td>SPARC Assembly Implementation of <tt>glColor3fv</tt></td></tr></table>
|
||||
</blockquote>
|
||||
|
||||
<p>The benefit of this technique is that changes to the calling pattern
|
||||
(i.e., addition of a new dispatch table pointer access method) require fewer
|
||||
@@ -228,32 +231,32 @@ changed lines in the assembly code.</p>
|
||||
implementation does not change based on the parameters passed to the
|
||||
function. For example, since x86 passes all parameters on the stack, no
|
||||
additional code is needed to save and restore function parameters around a
|
||||
call to <code>pthread_getspecific</code>. Since x86-64 passes parameters in
|
||||
call to <tt>pthread_getspecific</tt>. Since x86-64 passes parameters in
|
||||
registers, varying amounts of code needs to be inserted around the call to
|
||||
<code>pthread_getspecific</code> to save and restore the GL function's
|
||||
<tt>pthread_getspecific</tt> to save and restore the GL function's
|
||||
parameters.</p>
|
||||
|
||||
<p>The other technique, used by platforms like x86-64 that cannot use the
|
||||
first technique, is to insert <code>#ifdef</code> within the assembly
|
||||
first technique, is to insert <tt>#ifdef</tt> within the assembly
|
||||
implementation of each function. This makes the assembly file considerably
|
||||
larger (e.g., 29,332 lines for <code>glapi_x86-64.S</code> versus 1,155 lines for
|
||||
<code>glapi_x86.S</code>) and causes simple changes to the function
|
||||
larger (e.g., 29,332 lines for <tt>glapi_x86-64.S</tt> versus 1,155 lines for
|
||||
<tt>glapi_x86.S</tt>) and causes simple changes to the function
|
||||
implementation to generate many lines of diffs. Since the assembly files
|
||||
are typically generated by scripts (see <a href="#autogen">below</a>), this
|
||||
isn't a significant problem.</p>
|
||||
|
||||
<p>Once a new assembly file is created, it must be inserted in the build
|
||||
system. There are two steps to this. The file must first be added to
|
||||
<code>src/mesa/sources</code>. That gets the file built and linked. The second
|
||||
step is to add the correct <code>#ifdef</code> magic to
|
||||
<code>src/mesa/glapi/glapi_dispatch.c</code> to prevent the C version of the
|
||||
<tt>src/mesa/sources</tt>. That gets the file built and linked. The second
|
||||
step is to add the correct <tt>#ifdef</tt> magic to
|
||||
<tt>src/mesa/glapi/glapi_dispatch.c</tt> to prevent the C version of the
|
||||
dispatch functions from being built.</p>
|
||||
|
||||
<h3 id="fixedsize">3.4. Fixed-Length Dispatch Stubs</h3>
|
||||
|
||||
<p>To implement <code>glXGetProcAddress</code>, Mesa stores a table that
|
||||
<p>To implement <tt>glXGetProcAddress</tt>, Mesa stores a table that
|
||||
associates function names with pointers to those functions. This table is
|
||||
stored in <code>src/mesa/glapi/glprocs.h</code>. For different reasons on
|
||||
stored in <tt>src/mesa/glapi/glprocs.h</tt>. For different reasons on
|
||||
different platforms, storing all of those pointers is inefficient. On most
|
||||
platforms, including all known platforms that support TLS, we can avoid this
|
||||
added overhead.</p>
|
||||
@@ -264,10 +267,12 @@ calculated by multiplying the size of the dispatch stub by the offset of the
|
||||
function in the table. This value is then added to the address of the first
|
||||
dispatch stub.</p>
|
||||
|
||||
<p>This path is activated by adding the correct <code>#ifdef</code> magic to
|
||||
<code>src/mesa/glapi/glapi.c</code> just before <code>glprocs.h</code> is
|
||||
<p>This path is activated by adding the correct <tt>#ifdef</tt> magic to
|
||||
<tt>src/mesa/glapi/glapi.c</tt> just before <tt>glprocs.h</tt> is
|
||||
included.</p>
|
||||
|
||||
<h2 id="autogen">4. Automatic Generation of Dispatch Stubs</h2>
|
||||
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
|
@@ -2,63 +2,77 @@
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta http-equiv="content-type" content="text/html; charset=utf-8">
|
||||
<title>Downloading and Unpacking</title>
|
||||
<title>Getting Mesa</title>
|
||||
<link rel="stylesheet" type="text/css" href="mesa.css">
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<div class="header">
|
||||
The Mesa 3D Graphics Library
|
||||
<h1>The Mesa 3D Graphics Library</h1>
|
||||
</div>
|
||||
|
||||
<iframe src="contents.html"></iframe>
|
||||
<div class="content">
|
||||
|
||||
<h1>Downloading and Unpacking</h1>
|
||||
|
||||
<h2>Downloading</h2>
|
||||
<h1>Downloading</h1>
|
||||
|
||||
<p>
|
||||
You can download the released versions of Mesa via
|
||||
<a href="https://mesa.freedesktop.org/archive/">HTTPS</a>
|
||||
or
|
||||
<a href="ftp://ftp.freedesktop.org/pub/mesa/">FTP</a>.
|
||||
Primary Mesa download site:
|
||||
<a href="ftp://ftp.freedesktop.org/pub/mesa/">ftp.freedesktop.org</a> (FTP)
|
||||
or <a href="https://mesa.freedesktop.org/archive/">mesa.freedesktop.org</a>
|
||||
(HTTPS).
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Starting with the first release of 2017, Mesa's version scheme is
|
||||
year-based. Filenames are in the form <code>mesa-Y.N.P.tar.gz</code>, where
|
||||
<code>Y</code> is the year (two digits), <code>N</code> is an incremental number
|
||||
(starting at 0) and <code>P</code> is the patch number (0 for the first
|
||||
year-based. Filenames are in the form <tt>mesa-Y.N.P.tar.gz</tt>, where
|
||||
<tt>Y</tt> is the year (two digits), <tt>N</tt> is an incremental number
|
||||
(starting at 0) and <tt>P</tt> is the patch number (0 for the first
|
||||
release, 1 for the first patch after that).
|
||||
</p>
|
||||
|
||||
<p>
|
||||
When a new release is coming, release candidates (betas) may be found
|
||||
in the same directory, and are recognisable by the
|
||||
<code>mesa-Y.N.P-<b>rc</b>X.tar.gz</code> filename.
|
||||
<tt>mesa-Y.N.P-<b>rc</b>X.tar.gz</tt> filename.
|
||||
</p>
|
||||
|
||||
|
||||
<h2>Unpacking</h2>
|
||||
<h1>Unpacking</h1>
|
||||
|
||||
<p>
|
||||
Mesa releases are available in two formats: <code>.tar.xz</code> and <code>.tar.gz</code>.
|
||||
Mesa releases are available in two formats: <tt>.tar.xz</tt> and <tt>.tar.gz</tt>.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
To unpack the tarball:
|
||||
</p>
|
||||
<pre>
|
||||
tar xf mesa-Y.N.P.tar.xz
|
||||
</pre>
|
||||
<p>or</p>
|
||||
or
|
||||
<pre>
|
||||
tar xf mesa-Y.N.P.tar.gz
|
||||
</pre>
|
||||
</p>
|
||||
|
||||
|
||||
<h2>Contents</h2>
|
||||
<h1>Contents</h1>
|
||||
|
||||
<p>
|
||||
After unpacking you'll have these files and directories (among others):
|
||||
</p>
|
||||
<pre>
|
||||
autogen.sh - Autoconf script for *nix systems
|
||||
scons/ - SCons script for Windows builds
|
||||
include/ - GL header (include) files
|
||||
bin/ - shell scripts for making shared libraries, etc
|
||||
docs/ - documentation
|
||||
src/ - source code for libraries
|
||||
src/mesa - sources for the main Mesa library and device drivers
|
||||
src/gallium - sources for Gallium and Gallium drivers
|
||||
src/glx - sources for building libGL with full GLX and DRI support
|
||||
</pre>
|
||||
|
||||
|
||||
<p>
|
||||
Proceed to the <a href="install.html">compilation and installation
|
||||
@@ -66,7 +80,7 @@ instructions</a>.
|
||||
</p>
|
||||
|
||||
|
||||
<h2>Demos, GLUT, and GLU</h2>
|
||||
<h1>Demos, GLUT, and GLU</h1>
|
||||
|
||||
<p>
|
||||
A package of SGI's GLU library is available
|
||||
|
@@ -2,19 +2,19 @@
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta http-equiv="content-type" content="text/html; charset=utf-8">
|
||||
<title>EGL</title>
|
||||
<title>Mesa EGL</title>
|
||||
<link rel="stylesheet" type="text/css" href="mesa.css">
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<div class="header">
|
||||
The Mesa 3D Graphics Library
|
||||
<h1>The Mesa 3D Graphics Library</h1>
|
||||
</div>
|
||||
|
||||
<iframe src="contents.html"></iframe>
|
||||
<div class="content">
|
||||
|
||||
<h1>EGL</h1>
|
||||
<h1>Mesa EGL</h1>
|
||||
|
||||
<p>The current version of EGL in Mesa implements EGL 1.4. More information
|
||||
about EGL can be found at
|
||||
@@ -33,16 +33,13 @@ directly dispatched to the drivers.</p>
|
||||
|
||||
<ol>
|
||||
<li>
|
||||
<p>Configure your build with the desired client APIs and enable
|
||||
the driver for your hardware. For example:</p>
|
||||
<p>Run <code>configure</code> with the desired client APIs and enable
|
||||
the driver for your hardware. For example</p>
|
||||
|
||||
<pre>
|
||||
$ meson configure \
|
||||
-D egl=true \
|
||||
-D gles1=true \
|
||||
-D gles2=true \
|
||||
-D dri-drivers=... \
|
||||
-D gallium-drivers=...
|
||||
$ ./configure --enable-gles1 --enable-gles2 \
|
||||
--with-dri-drivers=... \
|
||||
--with-gallium-drivers=...
|
||||
</pre>
|
||||
|
||||
<p>The main library and OpenGL is enabled by default. The first two options
|
||||
@@ -64,7 +61,7 @@ or more EGL drivers.</p>
|
||||
time</p>
|
||||
|
||||
<dl>
|
||||
<dt><code>-D egl=true</code></dt>
|
||||
<dt><code>--enable-egl</code></dt>
|
||||
<dd>
|
||||
|
||||
<p>By default, EGL is enabled. When disabled, the main library and the drivers
|
||||
@@ -72,11 +69,19 @@ will not be built.</p>
|
||||
|
||||
</dd>
|
||||
|
||||
<dt><code>-D platforms=...</code></dt>
|
||||
<dt><code>--with-egl-driver-dir</code></dt>
|
||||
<dd>
|
||||
|
||||
<p>The directory EGL drivers should be installed to. If not specified, EGL
|
||||
drivers will be installed to <code>${libdir}/egl</code>.</p>
|
||||
|
||||
</dd>
|
||||
|
||||
<dt><code>--with-platforms</code></dt>
|
||||
<dd>
|
||||
|
||||
<p>List the platforms (window systems) to support. Its argument is a comma
|
||||
separated string such as <code>-D platforms=x11,drm</code>. It decides
|
||||
separated string such as <code>--with-platforms=x11,drm</code>. It decides
|
||||
the platforms a driver may support. The first listed platform is also used by
|
||||
the main library to decide the native platform.</p>
|
||||
|
||||
@@ -85,13 +90,15 @@ the main library to decide the native platform.</p>
|
||||
and <code>haiku</code>.
|
||||
The <code>android</code> platform can either be built as a system
|
||||
component, part of AOSP, using <code>Android.mk</code> files, or
|
||||
cross-compiled using appropriate options.
|
||||
cross-compiled using appropriate <code>configure</code> options.
|
||||
The <code>haiku</code> platform can only be built with SCons.
|
||||
Unless for special needs, the build system should
|
||||
select the right platforms automatically.</p>
|
||||
|
||||
</dd>
|
||||
|
||||
<dt><code>-D gles1=true</code> and <code>-D gles2=true</code></dt>
|
||||
<dt><code>--enable-gles1</code></dt>
|
||||
<dt><code>--enable-gles2</code></dt>
|
||||
<dd>
|
||||
|
||||
<p>These options enable OpenGL ES support in OpenGL. The result is one big
|
||||
@@ -99,7 +106,7 @@ internal library that supports multiple APIs.</p>
|
||||
|
||||
</dd>
|
||||
|
||||
<dt><code>-D shared-glapi=true</code></dt>
|
||||
<dt><code>--enable-shared-glapi</code></dt>
|
||||
<dd>
|
||||
|
||||
<p>By default, <code>libGL</code> has its own copy of <code>libglapi</code>.
|
||||
@@ -127,9 +134,9 @@ runtime</p>
|
||||
<dd>
|
||||
|
||||
<p>This variable specifies the native platform. The valid values are the same
|
||||
as those for <code>-D platforms=...</code>. When the variable is not set,
|
||||
as those for <code>--with-platforms</code>. When the variable is not set,
|
||||
the main library uses the first platform listed in
|
||||
<code>-D platforms=...</code> as the native platform.</p>
|
||||
<code>--with-platforms</code> as the native platform.</p>
|
||||
|
||||
<p>Extensions like <code>EGL_MESA_drm_display</code> define new functions to
|
||||
create displays for non-native platforms. These extensions are usually used by
|
||||
|
File diff suppressed because it is too large
Load Diff
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user