Compare commits
	
		
			180 Commits
		
	
	
		
			mesa-20.0.
			...
			chadv/wip/
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|  | 3302281f00 | ||
|  | 54f07a7ebc | ||
|  | bf85c6b160 | ||
|  | 272fd36b24 | ||
|  | 2aaeab9fdd | ||
|  | 0d7eae5847 | ||
|  | 3e8d93e1ff | ||
|  | b239996965 | ||
|  | b16fbdb135 | ||
|  | c9bda01108 | ||
|  | 68ceff0712 | ||
|  | d7681cc943 | ||
|  | a0f76c6a3b | ||
|  | 7c5b8d163f | ||
|  | 667a7dfd55 | ||
|  | d9619b2fba | ||
|  | 26796ca5ca | ||
|  | f45c9bb5d6 | ||
|  | 9b34b2cee4 | ||
|  | 96f37fa7e0 | ||
|  | 730d7edbd7 | ||
|  | 64278fcd0c | ||
|  | c8541b9630 | ||
|  | 7f3baaf5c7 | ||
|  | 5c32cb2c08 | ||
|  | fd1aa710bc | ||
|  | 7d019c72d8 | ||
|  | 6613048d9a | ||
|  | 037026e90f | ||
|  | ec23d1a68a | ||
|  | 68a7077012 | ||
|  | 3519cdfcfa | ||
|  | a058539d21 | ||
|  | 6efb3d854f | ||
|  | d78b9b2232 | ||
|  | dafe2a86ab | ||
|  | 7152fe4723 | ||
|  | 838e746fc9 | ||
|  | d1d6bf7605 | ||
|  | 14c7f4783a | ||
|  | 69fae1186f | ||
|  | 26ae9a5650 | ||
|  | 00898cd71d | ||
|  | 4e763cb3c1 | ||
|  | ed61e74c4d | ||
|  | 8142ac25cc | ||
|  | 794d5bbee5 | ||
|  | 6d25795e51 | ||
|  | 0647d5800f | ||
|  | e07a838408 | ||
|  | b17ff37e6a | ||
|  | 42c96d393b | ||
|  | 1171bddb74 | ||
|  | a10faeae28 | ||
|  | 5ec83db3fc | ||
|  | 0a04b702a8 | ||
|  | dab369a824 | ||
|  | e96314b6cf | ||
|  | d226caef7a | ||
|  | 4bcb10cacc | ||
|  | 403ab71152 | ||
|  | b178753c0a | ||
|  | 8940a624ae | ||
|  | 7cc5c96a9a | ||
|  | d1e6cf4639 | ||
|  | 7bc213a644 | ||
|  | 093ae29b3c | ||
|  | d2d5439412 | ||
|  | b3bc46f1c7 | ||
|  | bf0c7200bd | ||
|  | d38e92b6e9 | ||
|  | 55c4921326 | ||
|  | 78a7e2a2d4 | ||
|  | 3be7bb6741 | ||
|  | f539ea0e8b | ||
|  | e4f186d3ae | ||
|  | 8269b7ec4b | ||
|  | 577af89bd1 | ||
|  | 040c0df11d | ||
|  | 699ff16e54 | ||
|  | c2d020336c | ||
|  | 8ed01c0a57 | ||
|  | 957c66de1c | ||
|  | c798200543 | ||
|  | f3caa303cf | ||
|  | fdd99c97ec | ||
|  | a9bc277482 | ||
|  | 3bcc13539b | ||
|  | 9180ce3784 | ||
|  | adef4109a0 | ||
|  | 55bc1d0a19 | ||
|  | a240fd6d13 | ||
|  | 5743c83893 | ||
|  | c9c818ad5e | ||
|  | ce1a2a25d3 | ||
|  | cb9d207ff3 | ||
|  | 0d11c8abfe | ||
|  | 8b2c15a60f | ||
|  | e2036d7b38 | ||
|  | 58d0ad6ff8 | ||
|  | ee939e7327 | ||
|  | 7e04e574c7 | ||
|  | b9713c9d98 | ||
|  | 40c905f3c2 | ||
|  | 7da8440504 | ||
|  | 797dbe4efa | ||
|  | 2567e1de88 | ||
|  | 3111ec7bdb | ||
|  | 15ec317be8 | ||
|  | 53667c7f2e | ||
|  | add373f7dd | ||
|  | 1f145df1c3 | ||
|  | 34ac137d3f | ||
|  | 26835cf6e3 | ||
|  | 4cf6b9e7ed | ||
|  | b4cc8b9b12 | ||
|  | c40cf117ee | ||
|  | 1b206e3b58 | ||
|  | 9e1698b17b | ||
|  | 2c6986c3b5 | ||
|  | 844b437034 | ||
|  | e759beb906 | ||
|  | bd5db7af2a | ||
|  | b9ddb51c19 | ||
|  | d1060ba31f | ||
|  | 7db7159536 | ||
|  | a44f33f740 | ||
|  | 5cd286710e | ||
|  | e012ec8775 | ||
|  | b0b9db69d8 | ||
|  | 9db1478039 | ||
|  | 2b741baf84 | ||
|  | 2eff2c8768 | ||
|  | 19b62847e0 | ||
|  | d5cc7e47a8 | ||
|  | 9b44ef94b4 | ||
|  | a12ca3b231 | ||
|  | 9710fbbcdf | ||
|  | b4bf9f6a41 | ||
|  | 2516c3217d | ||
|  | 383b360348 | ||
|  | 71571aab14 | ||
|  | 13bfb83b31 | ||
|  | 4c82f2c3a9 | ||
|  | 14c40ebd0f | ||
|  | 77839e9ba8 | ||
|  | 7826bc9538 | ||
|  | f0951a6aa9 | ||
|  | 3eb187f376 | ||
|  | 0c20849f9c | ||
|  | fb09360ea5 | ||
|  | 1664322838 | ||
|  | c7e625df69 | ||
|  | 5addf041ef | ||
|  | f4b6883ebc | ||
|  | 70ee0a4525 | ||
|  | 17d988bfaa | ||
|  | 03cf1953ad | ||
|  | 4fb6b83968 | ||
|  | 26b44eadac | ||
|  | e22cf6e9b4 | ||
|  | 7df1b901b9 | ||
|  | cbb8aec81c | ||
|  | ff8c152640 | ||
|  | 0fef0c7deb | ||
|  | 66603bff6f | ||
|  | b0082632eb | ||
|  | 3da6dd8003 | ||
|  | 2e33d68046 | ||
|  | 3b699fdd19 | ||
|  | a2123968fa | ||
|  | 1ce3fbeb91 | ||
|  | 8f2bc19856 | ||
|  | b6f0c16a89 | ||
|  | 5c8eb88553 | ||
|  | afdb9da492 | ||
|  | b8f10fdf34 | ||
|  | ea132f9265 | ||
|  | 08b41e70dd | ||
|  | ae720e2873 | 
| @@ -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') | ||||
| @@ -11,7 +11,6 @@ tab_width = 8 | ||||
| [*.{c,h,cpp,hpp,cc,hh}] | ||||
| indent_style = space | ||||
| indent_size = 3 | ||||
| max_line_length = 78 | ||||
|  | ||||
| [{Makefile*,*.mk}] | ||||
| indent_style = tab | ||||
| @@ -32,13 +31,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 | ||||
|   | ||||
							
								
								
									
										704
									
								
								.gitlab-ci.yml
									
									
									
									
									
								
							
							
						
						
									
										704
									
								
								.gitlab-ci.yml
									
									
									
									
									
								
							| @@ -1,704 +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-04-06" | ||||
|  | ||||
| .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" | ||||
|     EXTRA_OPTION: > | ||||
|       -D llvm=false | ||||
|   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" | ||||
|     EXTRA_OPTION: > | ||||
|       -D llvm=false | ||||
|   script: | ||||
|     - .gitlab-ci/meson-build.sh | ||||
|     - .gitlab-ci/prepare-artifacts.sh | ||||
|  | ||||
| meson-arm64-build-test: | ||||
|   extends: | ||||
|     - .meson-arm | ||||
|     - .ci-deqp-artifacts | ||||
|   variables: | ||||
|     LLVM_VERSION: "8" | ||||
|     VULKAN_DRIVERS: "amd" | ||||
|   script: | ||||
|     - .gitlab-ci/meson-build.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: | ||||
|     - install/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: | ||||
|     - ./install/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,187 +0,0 @@ | ||||
| #!/bin/bash | ||||
|  | ||||
| set -ex | ||||
|  | ||||
| apt-get -y install --no-install-recommends \ | ||||
|     initramfs-tools \ | ||||
|     libpng16-16 \ | ||||
|     strace \ | ||||
|     libsensors5 \ | ||||
|     libexpat1 \ | ||||
|     libdrm2 \ | ||||
|     libdrm-nouveau2 | ||||
| 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 | ||||
|  | ||||
| INSTALL=`pwd`/install | ||||
|  | ||||
| # 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 $INSTALL/$DEQP_EXPECTED_FAILS" | ||||
| fi | ||||
|  | ||||
| set +e | ||||
|  | ||||
| run_cts() { | ||||
|     deqp=$1 | ||||
|     caselist=$2 | ||||
|     output=$3 | ||||
|     deqp-runner \ | ||||
|         --deqp $deqp \ | ||||
|         --output $output \ | ||||
|         --caselist $caselist \ | ||||
|         --exclude-list $INSTALL/$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,89 +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 %} | ||||
| {% set lavatags = tags.split(',') %} | ||||
| tags: | ||||
| {% for tag in lavatags %} | ||||
|   - {{ 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 %} | ||||
|  | ||||
|           # deqp-runner.sh assumes some stuff is in pwd | ||||
|           - cd / | ||||
|  | ||||
|           - 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 }} | ||||
|  | ||||
|           - "if sh /install/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,136 +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: | ||||
|     - mkdir -p /srv/${FILES_HOST_NAME}/$CI_JOB_ID/ | ||||
|     - cp /lava-files/${KERNEL_IMAGE_NAME} /srv/${FILES_HOST_NAME}/$CI_JOB_ID/. | ||||
|     - cp /lava-files/${DEVICE_TYPE}.dtb /srv/${FILES_HOST_NAME}/$CI_JOB_ID/. | ||||
|     - tar -C /lava-files/rootfs-${ARCH} -xf artifacts/install.tar | ||||
|     - pushd /lava-files/rootfs-${ARCH} | ||||
|     - find -H  |  cpio -H newc -o | gzip -c - > /srv/${FILES_HOST_NAME}/$CI_JOB_ID/lava-rootfs-${ARCH}.cpio.gz | ||||
|     - popd | ||||
|     - > | ||||
|       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 ${FILES_HOST_URL}/$CI_JOB_ID \ | ||||
|         --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` || 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" ]]' | ||||
|   after_script: | ||||
|     - rm -rf /srv/${FILES_HOST_NAME}/$CI_JOB_ID/ | ||||
|   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 | ||||
|     FILES_HOST_NAME: "mesa-ci-lava-files.freedesktop.org" | ||||
|     FILES_HOST_URL: "https://mesa-ci-lava-files.freedesktop.org" | ||||
|   tags: | ||||
|     - mesa-ci-aarch64-lava-collabora | ||||
|  | ||||
| panfrost-t760-test:armhf: | ||||
|   extends: .lava-test:armhf | ||||
|   variables: | ||||
|     DEVICE_TYPE: rk3288-veyron-jaq | ||||
|     GPU_VERSION: panfrost-t760 | ||||
|     BOOT_METHOD: depthcharge | ||||
|     KERNEL_IMAGE_TYPE: "" | ||||
|     FILES_HOST_NAME: "mesa-ci-lava-files.freedesktop.org" | ||||
|     FILES_HOST_URL: "https://mesa-ci-lava-files.freedesktop.org" | ||||
|   tags: | ||||
|     - mesa-ci-aarch64-lava-collabora | ||||
|  | ||||
| panfrost-t860-test:arm64: | ||||
|   extends: .lava-test:arm64 | ||||
|   variables: | ||||
|     DEVICE_TYPE: rk3399-gru-kevin | ||||
|     GPU_VERSION: panfrost-t860 | ||||
|     BOOT_METHOD: depthcharge | ||||
|     KERNEL_IMAGE_TYPE: "" | ||||
|     FILES_HOST_NAME: "mesa-ci-lava-files.freedesktop.org" | ||||
|     FILES_HOST_URL: "https://mesa-ci-lava-files.freedesktop.org" | ||||
|   tags: | ||||
|     - mesa-ci-aarch64-lava-collabora | ||||
|  | ||||
| .panfrost-t820-gles2:arm64: | ||||
|   extends: .lava-test:arm64 | ||||
|   variables: | ||||
|     DEVICE_TYPE: meson-gxm-khadas-vim2 | ||||
|     GPU_VERSION: panfrost-t820 | ||||
|     LAVA_TAGS: panfrost | ||||
|   tags: | ||||
|     - mesa-ci-aarch64-lava-baylibre | ||||
|  | ||||
| .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: | ||||
|     - mesa-ci-aarch64-lava-baylibre | ||||
|  | ||||
| .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: | ||||
|     - mesa-ci-aarch64-lava-baylibre | ||||
| @@ -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 install/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/install/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,39 +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. | ||||
| cp VERSION install/ | ||||
| cp -Rp .gitlab-ci/deqp* install/ | ||||
| cp -Rp .gitlab-ci/piglit install/ | ||||
|  | ||||
| # Tar up the install dir so that symlinks and hardlinks aren't each | ||||
| # packed separately in the zip file. | ||||
| mkdir -p artifacts/ | ||||
| tar -cf artifacts/install.tar install | ||||
|  | ||||
| # If the container has LAVA stuff, prepare the artifacts for LAVA jobs | ||||
| if [ -d /lava-files ]; then | ||||
|         # 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 | ||||
							
								
								
									
										30
									
								
								.mailmap
									
									
									
									
									
								
							
							
						
						
									
										30
									
								
								.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,22 +142,12 @@ 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> | ||||
| Emil Velikov <emil.l.velikov@gmail.com> <emil.veliko@collabora.com> | ||||
| Emil Velikov <emil.l.velikov@gmail.com> <emil.velikov@collabora.co.uk> | ||||
| Emil Velikov <emil.l.velikov@gmail.com> <emil.veliikov@collabora.com> | ||||
| Emil Velikov <emil.l.velikov@gmail.com> <emil.velikov@gmail.com> | ||||
| 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> | ||||
|  | ||||
| Fabian Bieler <der.fabe@gmx.net> <fabianbieler@fastmail.fm> | ||||
| @@ -169,14 +155,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 +177,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 +258,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 +318,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 +443,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> | ||||
|   | ||||
							
								
								
									
										44300
									
								
								.pick_status.json
									
									
									
									
									
								
							
							
						
						
									
										44300
									
								
								.pick_status.json
									
									
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										537
									
								
								.travis.yml
									
									
									
									
									
								
							
							
						
						
									
										537
									
								
								.travis.yml
									
									
									
									
									
								
							| @@ -1,64 +1,519 @@ | ||||
| language: c | ||||
|  | ||||
| os: osx | ||||
| sudo: false | ||||
| dist: trusty | ||||
|  | ||||
| cache: | ||||
|   apt: true | ||||
|   ccache: true | ||||
|  | ||||
| env: | ||||
|   global: | ||||
|     - PKG_CONFIG_PATH="" | ||||
|     - XORG_RELEASES=http://xorg.freedesktop.org/releases/individual | ||||
|     - XCB_RELEASES=http://xcb.freedesktop.org/dist | ||||
|     - WAYLAND_RELEASES=http://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.74 | ||||
|     - XCBPROTO_VERSION=xcb-proto-1.11 | ||||
|     - LIBXCB_VERSION=libxcb-1.11 | ||||
|     - LIBXSHMFENCE_VERSION=libxshmfence-1.2 | ||||
|     - LIBVDPAU_VERSION=libvdpau-1.1 | ||||
|     - LIBVA_VERSION=libva-1.6.2 | ||||
|     - LIBWAYLAND_VERSION=wayland-1.11.1 | ||||
|     - 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="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 | ||||
|             - libexpat1-dev | ||||
|             - libx11-xcb-dev | ||||
|             - libxdamage-dev | ||||
|             - libxfixes-dev | ||||
|     - env: | ||||
|       - BUILD=scons | ||||
|  | ||||
| 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 | ||||
|  | ||||
|   # 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}" | ||||
|         # 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=3.9 | ||||
|         - LLVM_CONFIG="llvm-config-${LLVM_VERSION}" | ||||
|         - OVERRIDE_CC="gcc-4.8" | ||||
|         - OVERRIDE_CXX="g++-4.8" | ||||
|         # New binutils linker is required for llvm-3.9 | ||||
|         - OVERRIDE_PATH=/usr/lib/binutils-2.26/bin | ||||
|         - 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: | ||||
|           sources: | ||||
|             - llvm-toolchain-trusty-3.9 | ||||
|           packages: | ||||
|             - binutils-2.26 | ||||
|             # LLVM packaging is broken and misses these dependencies | ||||
|             - libedit-dev | ||||
|             # From sources above | ||||
|             - llvm-3.9-dev | ||||
|             # Common | ||||
|             - xz-utils | ||||
|             - x11proto-xf86vidmode-dev | ||||
|             - libexpat1-dev | ||||
|             - libx11-xcb-dev | ||||
|             - libelf-dev | ||||
|             - libunwind8-dev | ||||
|     - env: | ||||
|         - LABEL="make Gallium Drivers Other" | ||||
|         - BUILD=make | ||||
|         - MAKEFLAGS="-j4" | ||||
|         - MAKE_CHECK_COMMAND="true" | ||||
|         - LLVM_VERSION=3.9 | ||||
|         - LLVM_CONFIG="llvm-config-${LLVM_VERSION}" | ||||
|         # New binutils linker is required for llvm-3.9 | ||||
|         - OVERRIDE_PATH=/usr/lib/binutils-2.26/bin | ||||
|         - 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,pl111,r300,r600,radeonsi,freedreno,svga,swrast,vc4,virgl,etnaviv,imx" | ||||
|         - VULKAN_DRIVERS="" | ||||
|         - LIBUNWIND_FLAGS="--enable-libunwind" | ||||
|       addons: | ||||
|         apt: | ||||
|           sources: | ||||
|             - llvm-toolchain-trusty-3.9 | ||||
|           packages: | ||||
|             - binutils-2.26 | ||||
|             # LLVM packaging is broken and misses these dependencies | ||||
|             - libedit-dev | ||||
|             # From sources above | ||||
|             - llvm-3.9-dev | ||||
|             # Common | ||||
|             - xz-utils | ||||
|             - x11proto-xf86vidmode-dev | ||||
|             - libexpat1-dev | ||||
|             - libx11-xcb-dev | ||||
|             - libelf-dev | ||||
|             - libunwind8-dev | ||||
|     - env: | ||||
|         # NOTE: Analogous to SWR above, building Clover is quite slow. | ||||
|         - 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}" | ||||
|         - OVERRIDE_CC=gcc-4.7 | ||||
|         - OVERRIDE_CXX=g++-4.7 | ||||
|         # New binutils linker is required for llvm-3.9 | ||||
|         - OVERRIDE_PATH=/usr/lib/binutils-2.26/bin | ||||
|         - 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: | ||||
|             - llvm-toolchain-trusty-3.9 | ||||
|           packages: | ||||
|             - binutils-2.26 | ||||
|             - libclc-dev | ||||
|             # LLVM packaging is broken and misses these dependencies | ||||
|             - libedit-dev | ||||
|             - g++-4.7 | ||||
|             # From sources above | ||||
|             - llvm-3.9-dev | ||||
|             - clang-3.9 | ||||
|             - libclang-3.9-dev | ||||
|             # Common | ||||
|             - xz-utils | ||||
|             - x11proto-xf86vidmode-dev | ||||
|             - libexpat1-dev | ||||
|             - libx11-xcb-dev | ||||
|             - libelf-dev | ||||
|             - libunwind8-dev | ||||
|     - env: | ||||
|         # NOTE: Analogous to SWR above, building Clover is quite slow. | ||||
|         - 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}" | ||||
|         - OVERRIDE_CC=gcc-4.8 | ||||
|         - OVERRIDE_CXX=g++-4.8 | ||||
|         - 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: | ||||
|             - llvm-toolchain-trusty-4.0 | ||||
|           packages: | ||||
|             - libclc-dev | ||||
|             # LLVM packaging is broken and misses these dependencies | ||||
|             - libedit-dev | ||||
|             - g++-4.8 | ||||
|             # From sources above | ||||
|             - llvm-4.0-dev | ||||
|             - clang-4.0 | ||||
|             - libclang-4.0-dev | ||||
|             # Common | ||||
|             - xz-utils | ||||
|             - x11proto-xf86vidmode-dev | ||||
|             - libexpat1-dev | ||||
|             - libx11-xcb-dev | ||||
|             - libelf-dev | ||||
|             - libunwind8-dev | ||||
|     - env: | ||||
|         # NOTE: Analogous to SWR above, building Clover is quite slow. | ||||
|         - 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}" | ||||
|         - OVERRIDE_CC=gcc-4.8 | ||||
|         - OVERRIDE_CXX=g++-4.8 | ||||
|         - 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: | ||||
|             - llvm-toolchain-trusty-5.0 | ||||
|           packages: | ||||
|             - libclc-dev | ||||
|             # LLVM packaging is broken and misses these dependencies | ||||
|             - libedit-dev | ||||
|             - g++-4.8 | ||||
|             # From sources above | ||||
|             - llvm-5.0-dev | ||||
|             - clang-5.0 | ||||
|             - libclang-5.0-dev | ||||
|             # Common | ||||
|             - xz-utils | ||||
|             - x11proto-xf86vidmode-dev | ||||
|             - 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.3 | ||||
|         - 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 | ||||
|             - llvm-3.3-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 | ||||
|             - x11proto-xf86vidmode-dev | ||||
|             - libexpat1-dev | ||||
|             - libx11-xcb-dev | ||||
|             - libelf-dev | ||||
|             - libunwind8-dev | ||||
|     - env: | ||||
|         - LABEL="make Vulkan" | ||||
|         - BUILD=make | ||||
|         - MAKEFLAGS="-j4" | ||||
|         - MAKE_CHECK_COMMAND="make -C src/gtest check && make -C src/intel check" | ||||
|         - LLVM_VERSION=3.9 | ||||
|         - LLVM_CONFIG="llvm-config-${LLVM_VERSION}" | ||||
|         # New binutils linker is required for llvm-3.9 | ||||
|         - OVERRIDE_PATH=/usr/lib/binutils-2.26/bin | ||||
|         - 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: | ||||
|             - llvm-toolchain-trusty-3.9 | ||||
|           packages: | ||||
|             - binutils-2.26 | ||||
|             # LLVM packaging is broken and misses these dependencies | ||||
|             - libedit-dev | ||||
|             # From sources above | ||||
|             - llvm-3.9-dev | ||||
|             # Common | ||||
|             - xz-utils | ||||
|             - x11proto-xf86vidmode-dev | ||||
|             - libexpat1-dev | ||||
|             - libx11-xcb-dev | ||||
|             - libelf-dev | ||||
|     - 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: | ||||
|             - scons | ||||
|             # 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.3 | ||||
|         - LLVM_CONFIG="llvm-config-${LLVM_VERSION}" | ||||
|       addons: | ||||
|         apt: | ||||
|           packages: | ||||
|             - scons | ||||
|             # LLVM packaging is broken and misses these dependencies | ||||
|             - libedit-dev | ||||
|             - llvm-3.3-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=3.9 | ||||
|         - LLVM_CONFIG="llvm-config-${LLVM_VERSION}" | ||||
|         # Keep it symmetrical to the make build. There's no actual SWR, yet. | ||||
|         - SCONS_CHECK_COMMAND="true" | ||||
|         - OVERRIDE_CC="gcc-4.8" | ||||
|         - OVERRIDE_CXX="g++-4.8" | ||||
|       addons: | ||||
|         apt: | ||||
|           sources: | ||||
|             - llvm-toolchain-trusty-3.9 | ||||
|           packages: | ||||
|             - scons | ||||
|             # LLVM packaging is broken and misses these dependencies | ||||
|             - libedit-dev | ||||
|             # From sources above | ||||
|             - llvm-3.9-dev | ||||
|             # Common | ||||
|             - xz-utils | ||||
|             - x11proto-xf86vidmode-dev | ||||
|             - libexpat1-dev | ||||
|             - libx11-xcb-dev | ||||
|             - libelf-dev | ||||
|     - env: | ||||
|         - LABEL="meson Vulkan" | ||||
|         - BUILD=meson | ||||
|         - MESON_OPTIONS="-Ddri-drivers= -Dgallium-drivers=" | ||||
|       addons: | ||||
|         apt: | ||||
|           sources: | ||||
|             - llvm-toolchain-trusty-3.9 | ||||
|           packages: | ||||
|             # LLVM packaging is broken and misses these dependencies | ||||
|             - libedit-dev | ||||
|             # From sources above | ||||
|             - llvm-3.9-dev | ||||
|             # Common | ||||
|             - xz-utils | ||||
|             - libexpat1-dev | ||||
|             - libelf-dev | ||||
|             - python3-pip | ||||
|     - env: | ||||
|         - LABEL="meson loaders/classic DRI" | ||||
|         - BUILD=meson | ||||
|         - MESON_OPTIONS="-Dvulkan-drivers= -Dgallium-drivers=" | ||||
|       addons: | ||||
|         apt: | ||||
|           packages: | ||||
|             - xz-utils | ||||
|             - x11proto-xf86vidmode-dev | ||||
|             - libexpat1-dev | ||||
|             - libx11-xcb-dev | ||||
|             - libxdamage-dev | ||||
|             - libxfixes-dev | ||||
|             - python3-pip | ||||
|  | ||||
| install: | ||||
|   - pip install --user mako | ||||
|  | ||||
|   # Install the latest 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 | ||||
|       pip2 install --user mako; | ||||
|     fi | ||||
|  | ||||
|   # Since libdrm gets updated in configure.ac regularly, try to pick up the | ||||
|   # latest version from there. | ||||
|   - for line in `grep "^LIBDRM.*_REQUIRED=" configure.ac`; do | ||||
|       old_ver=`echo $LIBDRM_VERSION | sed 's/libdrm-//'`; | ||||
|       new_ver=`echo $line | sed 's/.*REQUIRED=//'`; | ||||
|       if `echo "$old_ver,$new_ver" | tr ',' '\n' | sort -Vc 2> /dev/null`; then | ||||
|         export LIBDRM_VERSION="libdrm-$new_ver"; | ||||
|       fi; | ||||
|     done | ||||
|  | ||||
|   # Install dependencies where we require specific versions (or where | ||||
|   # disallowed by Travis CI's package whitelisting). | ||||
|  | ||||
|   - 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 http://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/lib/$LIBXSHMFENCE_VERSION.tar.bz2 | ||||
|   - tar -jxvf $LIBXSHMFENCE_VERSION.tar.bz2 | ||||
|   - (cd $LIBXSHMFENCE_VERSION && ./configure --prefix=$HOME/prefix && make install) | ||||
|  | ||||
|   - wget http://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 http://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 trusty 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 the header since one is missing on the Travis instance | ||||
|   - mkdir -p linux | ||||
|   - printf "%s\n" \ | ||||
|            "#ifndef _LINUX_MEMFD_H" \ | ||||
|            "#define _LINUX_MEMFD_H" \ | ||||
|            "" \ | ||||
|            "#define __NR_memfd_create 319" \ | ||||
|            "#define SYS_memfd_create __NR_memfd_create" \ | ||||
|            "" \ | ||||
|            "#define MFD_CLOEXEC             0x0001U" \ | ||||
|            "#define MFD_ALLOW_SEALING       0x0002U" \ | ||||
|            "" \ | ||||
|            "#endif /* _LINUX_MEMFD_H */" > linux/memfd.h | ||||
|  | ||||
| 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; | ||||
|   - if test "x$BUILD" = xmake; then | ||||
|       test -n "$OVERRIDE_CC" && export CC="$OVERRIDE_CC"; | ||||
|       test -n "$OVERRIDE_CXX" && export CXX="$OVERRIDE_CXX"; | ||||
|       test -n "$OVERRIDE_PATH" && export PATH="$OVERRIDE_PATH:$PATH"; | ||||
|  | ||||
|       export CFLAGS="$CFLAGS -isystem`pwd`"; | ||||
|  | ||||
|       ./autogen.sh --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 force_scons=1 || travis_terminate 1; | ||||
|       scons force_scons=1 check || travis_terminate 1; | ||||
|       test -n "$OVERRIDE_CC" && export CC="$OVERRIDE_CC"; | ||||
|       test -n "$OVERRIDE_CXX" && export CXX="$OVERRIDE_CXX"; | ||||
|       scons $SCONS_TARGET && eval $SCONS_CHECK_COMMAND; | ||||
|     fi | ||||
|  | ||||
|   - if test "x$BUILD" = xmeson; then | ||||
|       export CFLAGS="$CFLAGS -isystem`pwd`"; | ||||
|       meson _build $MESON_OPTIONS; | ||||
|       ninja -C _build; | ||||
|     fi | ||||
|   | ||||
| @@ -31,15 +31,14 @@ 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 \ | ||||
| 	-DVERSION=\"$(MESA_VERSION)\" \ | ||||
| 	-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 | ||||
| @@ -52,15 +51,11 @@ LOCAL_CFLAGS += \ | ||||
| 	-DHAVE___BUILTIN_EXPECT \ | ||||
| 	-DHAVE___BUILTIN_FFS \ | ||||
| 	-DHAVE___BUILTIN_FFSLL \ | ||||
| 	-DHAVE_DLFCN_H \ | ||||
| 	-DHAVE_FUNC_ATTRIBUTE_FLATTEN \ | ||||
| 	-DHAVE_FUNC_ATTRIBUTE_UNUSED \ | ||||
| 	-DHAVE_FUNC_ATTRIBUTE_FORMAT \ | ||||
| 	-DHAVE_FUNC_ATTRIBUTE_PACKED \ | ||||
| 	-DHAVE_FUNC_ATTRIBUTE_ALIAS \ | ||||
| 	-DHAVE_FUNC_ATTRIBUTE_NORETURN \ | ||||
| 	-DHAVE_FUNC_ATTRIBUTE_RETURNS_NONNULL \ | ||||
| 	-DHAVE_FUNC_ATTRIBUTE_WARN_UNUSED_RESULT \ | ||||
| 	-DHAVE___BUILTIN_CTZ \ | ||||
| 	-DHAVE___BUILTIN_POPCOUNT \ | ||||
| 	-DHAVE___BUILTIN_POPCOUNTLL \ | ||||
| @@ -70,14 +65,8 @@ LOCAL_CFLAGS += \ | ||||
| 	-DHAVE_PTHREAD=1 \ | ||||
| 	-DHAVE_DLADDR \ | ||||
| 	-DHAVE_DL_ITERATE_PHDR \ | ||||
| 	-DHAVE_LINUX_FUTEX_H \ | ||||
| 	-DHAVE_ENDIAN_H \ | ||||
| 	-DHAVE_ZLIB \ | ||||
| 	-DMAJOR_IN_SYSMACROS \ | ||||
| 	-DVK_USE_PLATFORM_ANDROID_KHR \ | ||||
| 	-fvisibility=hidden \ | ||||
| 	-fno-math-errno \ | ||||
| 	-fno-trapping-math \ | ||||
| 	-Wno-sign-compare | ||||
|  | ||||
| LOCAL_CPPFLAGS += \ | ||||
| @@ -91,21 +80,12 @@ LOCAL_CPPFLAGS += \ | ||||
| LOCAL_CONLYFLAGS += \ | ||||
| 	-std=c99 | ||||
|  | ||||
| # c11 timespec_get is part of bionic as well | ||||
| # https://android-review.googlesource.com/c/718518 | ||||
| # This means releases from P and earlier won't need this | ||||
| 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 | ||||
|   | ||||
							
								
								
									
										33
									
								
								Android.mk
									
									
									
									
									
								
							
							
						
						
									
										33
									
								
								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 pl111 r300g r600g radeonsi vc4 virgl vmwgfx etnaviv imx | ||||
| # | ||||
| # 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. | ||||
| @@ -39,11 +39,9 @@ endif | ||||
| MESA_DRI_MODULE_REL_PATH := dri | ||||
| MESA_DRI_MODULE_PATH := $(TARGET_OUT_SHARED_LIBRARIES)/$(MESA_DRI_MODULE_REL_PATH) | ||||
| MESA_DRI_MODULE_UNSTRIPPED_PATH := $(TARGET_OUT_SHARED_LIBRARIES_UNSTRIPPED)/$(MESA_DRI_MODULE_REL_PATH) | ||||
| 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> | ||||
| @@ -53,7 +51,7 @@ gallium_drivers := \ | ||||
| 	freedreno.HAVE_GALLIUM_FREEDRENO \ | ||||
| 	i915g.HAVE_GALLIUM_I915 \ | ||||
| 	nouveau.HAVE_GALLIUM_NOUVEAU \ | ||||
| 	kmsro.HAVE_GALLIUM_KMSRO \ | ||||
| 	pl111.HAVE_GALLIUM_PL111 \ | ||||
| 	r300g.HAVE_GALLIUM_R300 \ | ||||
| 	r600g.HAVE_GALLIUM_R600 \ | ||||
| 	radeonsi.HAVE_GALLIUM_RADEONSI \ | ||||
| @@ -61,9 +59,7 @@ gallium_drivers := \ | ||||
| 	vc4.HAVE_GALLIUM_VC4 \ | ||||
| 	virgl.HAVE_GALLIUM_VIRGL \ | ||||
| 	etnaviv.HAVE_GALLIUM_ETNAVIV \ | ||||
| 	iris.HAVE_GALLIUM_IRIS \ | ||||
| 	lima.HAVE_GALLIUM_LIMA \ | ||||
| 	panfrost.HAVE_GALLIUM_PANFROST | ||||
| 	imx.HAVE_GALLIUM_IMX | ||||
|  | ||||
| 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) | ||||
|   | ||||
| @@ -10,7 +10,7 @@ $(call add-clean-step, rm -rf $(PRODUCT_OUT)/*/STATIC_LIBRARIES/libmesa_*_interm | ||||
| $(call add-clean-step, rm -rf $(PRODUCT_OUT)/*/SHARED_LIBRARIES/i9?5_dri_intermediates) | ||||
| $(call add-clean-step, rm -rf $(PRODUCT_OUT)/*/SHARED_LIBRARIES/libglapi_intermediates) | ||||
| $(call add-clean-step, rm -rf $(PRODUCT_OUT)/*/SHARED_LIBRARIES/libGLES_mesa_intermediates) | ||||
| $(call add-clean-step, rm -rf $(HOST_OUT)/*/EXECUTABLES/mesa_*_intermediates) | ||||
| $(call add-clean-step, rm -rf $(HOST_OUT)/*/EXECUTABLES/glsl_compiler_intermediates) | ||||
| $(call add-clean-step, rm -rf $(HOST_OUT)/*/STATIC_LIBRARIES/libmesa_*_intermediates) | ||||
| $(call add-clean-step, rm -rf $(HOST_OUT_release)/*/EXECUTABLES/mesa_*_intermediates) | ||||
| $(call add-clean-step, rm -rf $(HOST_OUT_release)/*/EXECUTABLES/glsl_compiler_intermediates) | ||||
| $(call add-clean-step, rm -rf $(HOST_OUT_release)/*/STATIC_LIBRARIES/libmesa_*_intermediates) | ||||
| $(call add-clean-step, rm -rf $(PRODUCT_OUT)/*/SHARED_LIBRARIES/*_dri_intermediates) | ||||
|   | ||||
							
								
								
									
										82
									
								
								Makefile.am
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										82
									
								
								Makefile.am
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,82 @@ | ||||
| # 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-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-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,pl111,r600,radeonsi,freedreno,svga,swrast,vc4,virgl,swr,etnaviv,imx \ | ||||
| 	--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 | ||||
|  | ||||
| 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/vc4_drm.h \ | ||||
| 	include/D3D9 \ | ||||
| 	include/GL/wglext.h \ | ||||
| 	include/HaikuGL \ | ||||
| 	include/no_extern_c.h \ | ||||
| 	include/pci_ids | ||||
|  | ||||
| # 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) {} + | ||||
							
								
								
									
										10
									
								
								PRESUBMIT.cfg
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								PRESUBMIT.cfg
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,10 @@ | ||||
| # This sample config file disables all of the ChromiumOS source style checks. | ||||
| # Comment out the disable-flags for any checks you want to leave enabled. | ||||
|  | ||||
| [Hook Overrides] | ||||
| stray_whitespace_check: false | ||||
| long_line_check: false | ||||
| cros_license_check: false | ||||
| tab_check: false | ||||
| bug_field_check: false | ||||
| test_field_check: false | ||||
							
								
								
									
										59
									
								
								README.rst
									
									
									
									
									
								
							
							
						
						
									
										59
									
								
								README.rst
									
									
									
									
									
								
							| @@ -1,59 +0,0 @@ | ||||
| `Mesa <https://mesa3d.org>`_ - The 3D Graphics Library | ||||
| ====================================================== | ||||
|  | ||||
|  | ||||
| Source | ||||
| ------ | ||||
|  | ||||
| This repository lives at https://gitlab.freedesktop.org/mesa/mesa. | ||||
| Other repositories are likely forks, and code found there is not supported. | ||||
|  | ||||
|  | ||||
| Build & install | ||||
| --------------- | ||||
|  | ||||
| You can find more information in our documentation (`docs/install.html | ||||
| <https://mesa3d.org/install.html>`_), but the recommended way is to use | ||||
| Meson (`docs/meson.html <https://mesa3d.org/meson.html>`_): | ||||
|  | ||||
| .. code-block:: sh | ||||
|  | ||||
|   $ mkdir build | ||||
|   $ cd build | ||||
|   $ meson .. | ||||
|   $ sudo ninja install | ||||
|  | ||||
|  | ||||
| Support | ||||
| ------- | ||||
|  | ||||
| Many Mesa devs hang on IRC; if you're not sure which channel is | ||||
| appropriate, you should ask your question on `Freenode's #dri-devel | ||||
| <irc://chat.freenode.net#dri-devel>`_, someone will redirect you if | ||||
| necessary. | ||||
| Remember that not everyone is in the same timezone as you, so it might | ||||
| take a while before someone qualified sees your question. | ||||
| To figure out who you're talking to, or which nick to ping for your | ||||
| question, check out `Who's Who on IRC | ||||
| <https://dri.freedesktop.org/wiki/WhosWho/>`_. | ||||
|  | ||||
| The next best option is to ask your question in an email to the | ||||
| mailing lists: `mesa-dev\@lists.freedesktop.org | ||||
| <https://lists.freedesktop.org/mailman/listinfo/mesa-dev>`_ | ||||
|  | ||||
|  | ||||
| Bug reports | ||||
| ----------- | ||||
|  | ||||
| If you think something isn't working properly, please file a bug report | ||||
| (`docs/bugs.html <https://mesa3d.org/bugs.html>`_). | ||||
|  | ||||
|  | ||||
| Contributing | ||||
| ------------ | ||||
|  | ||||
| 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. | ||||
							
								
								
									
										66
									
								
								REVIEWERS
									
									
									
									
									
								
							
							
						
						
									
										66
									
								
								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) | ||||
|  | ||||
| @@ -45,18 +72,7 @@ F: src/loader/ | ||||
|  | ||||
| EGL | ||||
| R: Eric Engestrom <eric@engestrom.ch> | ||||
| R: Emil Velikov <emil.l.velikov@gmail.com> | ||||
| F: src/egl/ | ||||
| F: include/EGL/ | ||||
|  | ||||
| HAIKU | ||||
| R: Alexander von Gluck IV <kallisti5@unixzen.com> | ||||
| F: include/HaikuGL/ | ||||
| F: src/egl/drivers/haiku/ | ||||
| F: src/gallium/state_trackers/hgl/ | ||||
| F: src/gallium/targets/haiku-softpipe/ | ||||
| F: src/gallium/winsys/sw/hgl/ | ||||
| F: src/hgl/ | ||||
|  | ||||
| GALLIUM LOADER | ||||
| R: Emil Velikov <emil.l.velikov@gmail.com> | ||||
| @@ -67,6 +83,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* | ||||
| @@ -83,7 +107,6 @@ MESON BUILD | ||||
| R: Dylan Baker <dylan@pnwbakers.com> | ||||
| R: Eric Engestrom <eric@engestrom.ch> | ||||
| F: */meson.build | ||||
| F: meson.build | ||||
| F: meson_options.txt | ||||
|  | ||||
| ANDROID EGL SUPPORT | ||||
| @@ -103,18 +126,3 @@ F:	src/gallium/drivers/freedreno/ | ||||
| GLX | ||||
| R: Adam Jackson <ajax@redhat.com> | ||||
| F: src/glx/ | ||||
|  | ||||
| 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/ | ||||
|   | ||||
							
								
								
									
										30
									
								
								SConstruct
									
									
									
									
									
								
							
							
						
						
									
										30
									
								
								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 | ||||
| @@ -28,13 +27,6 @@ import SCons.Util | ||||
|  | ||||
| import common | ||||
|  | ||||
| ####################################################################### | ||||
| # Minimal scons version | ||||
|  | ||||
| EnsureSConsVersion(2, 4) | ||||
| EnsurePythonVersion(2, 7) | ||||
|  | ||||
|  | ||||
| ####################################################################### | ||||
| # Configuration options | ||||
|  | ||||
| @@ -67,26 +59,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 +66,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 | ||||
|   | ||||
							
								
								
									
										55
									
								
								appveyor.yml
									
									
									
									
									
								
							
							
						
						
									
										55
									
								
								appveyor.yml
									
									
									
									
									
								
							| @@ -33,38 +33,47 @@ branches: | ||||
| # - https://www.appveyor.com/blog/2014/06/04/shallow-clone-for-git-repositories | ||||
| clone_depth: 100 | ||||
|  | ||||
| # https://www.appveyor.com/docs/build-cache/ | ||||
| cache: | ||||
| - '%LOCALAPPDATA%\pip\Cache -> appveyor.yml' | ||||
| - win_flex_bison-2.5.15.zip | ||||
| - llvm-5.0.1-msvc2017-mtd.7z | ||||
| - subprojects\packagecache -> subprojects\*.wrap | ||||
| - win_flex_bison-2.5.9.zip | ||||
| - llvm-3.3.1-msvc2013-mtd.7z | ||||
|  | ||||
| os: Visual Studio 2017 | ||||
|  | ||||
| init: | ||||
| # Appveyor defaults core.autocrlf to input instead of the default (true), but | ||||
| # that can hide problems processing CRLF text on Windows | ||||
| - git config --global core.autocrlf true | ||||
| os: Visual Studio 2013 | ||||
|  | ||||
| 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% | ||||
|   WINFLEXBISON_ARCHIVE: win_flex_bison-2.5.9.zip | ||||
|   LLVM_ARCHIVE: llvm-3.3.1-msvc2013-mtd.7z | ||||
|  | ||||
| install: | ||||
| - cmd: .appveyor\appveyor_msvc.bat install | ||||
| # Check pip | ||||
| - python --version | ||||
| - python -m pip --version | ||||
| # Install Mako | ||||
| - python -m pip install Mako==1.0.6 | ||||
| # 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==2.5.1 | ||||
| - scons --version | ||||
| # Install flex/bison | ||||
| - if not exist "%WINFLEXBISON_ARCHIVE%" appveyor DownloadFile "https://downloads.sourceforge.net/project/winflexbison/old_versions/%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=12.0 llvm=1 | ||||
|  | ||||
| after_build: | ||||
| - scons -j%NUMBER_OF_PROCESSORS% MSVC_VERSION=12.0 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 $* | 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 | ||||
							
								
								
									
										81
									
								
								bin/get-fixes-pick-list.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										81
									
								
								bin/get-fixes-pick-list.sh
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,81 @@ | ||||
| #!/bin/sh | ||||
|  | ||||
| # Script for generating a list of candidates [referenced by a Fixes tag] for | ||||
| # cherry-picking to a stable branch | ||||
| # | ||||
| # Usage examples: | ||||
| # | ||||
| # $ bin/get-fixes-pick-list.sh | ||||
| # $ bin/get-fixes-pick-list.sh > picklist | ||||
| # $ bin/get-fixes-pick-list.sh | tee picklist | ||||
|  | ||||
| # Use the last branchpoint as our limit for the search | ||||
| latest_branchpoint=`git merge-base origin/master HEAD` | ||||
|  | ||||
| # List all the commits between day 1 and the branch point... | ||||
| git log --reverse --pretty=%H $latest_branchpoint > already_landed | ||||
|  | ||||
| # ... and the ones cherry-picked. | ||||
| git log --reverse --grep="cherry picked from commit" $latest_branchpoint..HEAD |\ | ||||
| 	grep "cherry picked from commit" |\ | ||||
| 	sed -e 's/^[[:space:]]*(cherry picked from commit[[:space:]]*//' -e 's/)//'  > already_picked | ||||
|  | ||||
| # Grep for commits with Fixes tag | ||||
| git log --reverse --pretty=%H -i --grep="fixes:" $latest_branchpoint..origin/master |\ | ||||
| while read sha | ||||
| do | ||||
| 	# Check to see whether the patch is on the ignore list ... | ||||
| 	if [ -f bin/.cherry-ignore ] ; then | ||||
| 		if grep -q ^$sha bin/.cherry-ignore ; then | ||||
| 			continue | ||||
| 		fi | ||||
| 	fi | ||||
|  | ||||
| 	# Skip if it has been already cherry-picked. | ||||
| 	if grep -q ^$sha already_picked ; then | ||||
| 		continue | ||||
| 	fi | ||||
|  | ||||
| 	# Place every "fixes:" tag on its own line and join with the next word | ||||
| 	# on its line or a later one. | ||||
| 	fixes=`git show -s $sha | tr -d "\n" | sed -e 's/fixes:[[:space:]]*/\nfixes:/Ig' | grep "fixes:" | sed -e 's/\(fixes:[a-zA-Z0-9]*\).*$/\1/'` | ||||
|  | ||||
| 	# For each one try to extract the tag | ||||
| 	fixes_count=`echo "$fixes" | wc -l` | ||||
| 	warn=`(test $fixes_count -gt 1 && echo $fixes_count) || echo 0` | ||||
| 	while [ $fixes_count -gt 0 ] ; do | ||||
| 		# Treat only the current line | ||||
| 		id=`echo "$fixes" | tail -n $fixes_count | head -n 1 | cut -d : -f 2` | ||||
| 		fixes_count=$(($fixes_count-1)) | ||||
|  | ||||
| 		# Bail out if we cannot find suitable id. | ||||
| 		# Any specific validation the $id is valid and not some junk, is | ||||
| 		# implied with the follow up code | ||||
| 		if [ "x$id" = x ] ; then | ||||
| 			continue | ||||
| 		fi | ||||
|  | ||||
| 		# Check if the offending commit is in branch. | ||||
|  | ||||
| 		# Be that cherry-picked ... | ||||
| 		# ... or landed before the branchpoint. | ||||
| 		if grep -q ^$id already_picked || | ||||
| 		   grep -q ^$id already_landed ; then | ||||
|  | ||||
| 			printf "Commit \"%s\" fixes %s\n" \ | ||||
| 			       "`git log -n1 --pretty=oneline $sha`" \ | ||||
| 			       "$id" | ||||
| 			warn=$(($warn-1)) | ||||
| 		fi | ||||
|  | ||||
| 	done | ||||
|  | ||||
| 	if [ $warn -gt 0 ] ; then | ||||
| 		printf "WARNING: Commit \"%s\" has more than one Fixes tag\n" \ | ||||
| 		       "`git log -n1 --pretty=oneline $sha`" | ||||
| 	fi | ||||
|  | ||||
| done | ||||
|  | ||||
| rm -f already_picked | ||||
| rm -f already_landed | ||||
| @@ -7,107 +7,21 @@ | ||||
| # $ bin/get-pick-list.sh | ||||
| # $ bin/get-pick-list.sh > picklist | ||||
| # $ bin/get-pick-list.sh | tee picklist | ||||
| # | ||||
| # The output is as follows: | ||||
| # [nomination_type] commit_sha commit summary | ||||
|  | ||||
| is_stable_nomination() | ||||
| { | ||||
| 	git show --pretty=medium --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" | ||||
| } | ||||
|  | ||||
| fixes= | ||||
|  | ||||
| # Helper to handle various mistypos of the fixes tag. | ||||
| # The tag string itself is passed as argument and normalised within. | ||||
| # | ||||
| # Resulting string in the global variable "fixes" and contains entries | ||||
| # in the form "fixes:$sha" | ||||
| 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}'` | ||||
|  | ||||
| 	fixes_count=`echo "$fixes" | grep "fixes:" | wc -l` | ||||
| 	if test $fixes_count -eq 0; then | ||||
| 		return 1 | ||||
| 	fi | ||||
|  | ||||
| 	# Throw a warning for each invalid sha | ||||
| 	while test $fixes_count -gt 0; do | ||||
| 		# Treat only the current line | ||||
| 		id=`echo "$fixes" | tail -n $fixes_count | head -n 1 | cut -d : -f 2` | ||||
| 		fixes_count=$(($fixes_count-1)) | ||||
| 		if ! git show $id >/dev/null 2>&1; then | ||||
| 			echo WARNING: Commit $1 lists invalid sha $id | ||||
| 		fi | ||||
| 	done | ||||
|  | ||||
| 	return 0 | ||||
| } | ||||
|  | ||||
| # Checks if at least one of offending commits, listed in the global | ||||
| # "fixes", is in branch. | ||||
| sha_in_range() | ||||
| { | ||||
| 	fixes_count=`echo "$fixes" | grep "fixes:" | wc -l` | ||||
| 	while test $fixes_count -gt 0; do | ||||
| 		# Treat only the current line | ||||
| 		id=`echo "$fixes" | tail -n $fixes_count | head -n 1 | cut -d : -f 2` | ||||
| 		fixes_count=$(($fixes_count-1)) | ||||
|  | ||||
| 		# Be that cherry-picked ... | ||||
| 		# ... or landed before the branchpoint. | ||||
| 		if grep -q ^$id already_picked || | ||||
| 		   grep -q ^$id already_landed ; then | ||||
| 			return 0 | ||||
| 		fi | ||||
| 	done | ||||
| 	return 1 | ||||
| } | ||||
|  | ||||
| is_fixes_nomination() | ||||
| { | ||||
| 	is_sha_nomination "$1" "fixes:[[:space:]]*" | ||||
| 	if test $? -eq 0; then | ||||
| 		return 0 | ||||
| 	fi | ||||
| 	is_sha_nomination "$1" "fixes[[:space:]]\+" | ||||
| } | ||||
|  | ||||
| is_brokenby_nomination() | ||||
| { | ||||
| 	is_sha_nomination "$1" "broken by" | ||||
| } | ||||
|  | ||||
| is_revert_nomination() | ||||
| { | ||||
| 	is_sha_nomination "$1" "This reverts commit " | ||||
| } | ||||
|  | ||||
| # Use the last branchpoint as our limit for the search | ||||
| latest_branchpoint=`git merge-base origin/master HEAD` | ||||
|  | ||||
| # List all the commits between day 1 and the branch point... | ||||
| git log --reverse --pretty=%H $latest_branchpoint > already_landed | ||||
|  | ||||
| # ... and the ones cherry-picked. | ||||
| git log --reverse --pretty=medium --grep="cherry picked from commit" $latest_branchpoint..HEAD |\ | ||||
| # Grep for commits with "cherry picked from commit" in the commit message. | ||||
| git log --reverse --grep="cherry picked from commit" $latest_branchpoint..HEAD |\ | ||||
| 	grep "cherry picked from commit" |\ | ||||
| 	sed -e 's/^[[:space:]]*(cherry picked from commit[[:space:]]*//' -e 's/)//' > already_picked | ||||
|  | ||||
| # Grep for potential candidates | ||||
| git log --reverse --pretty=%H -i --grep='^CC:.*mesa-stable\|^CC:.*mesa-dev\|\<fixes\>\|\<broken by\>\|This reverts commit' $latest_branchpoint..origin/master |\ | ||||
| # Grep for commits that were marked as a candidate for the stable tree. | ||||
| git log --reverse --pretty=%H -i --grep='^CC:.*mesa-stable' $latest_branchpoint..origin/master |\ | ||||
| while read sha | ||||
| do | ||||
| 	# Check to see whether the patch is on the ignore list. | ||||
| 	if test -f bin/.cherry-ignore; then | ||||
| 	if [ -f bin/.cherry-ignore ] ; then | ||||
| 		if grep -q ^$sha bin/.cherry-ignore ; then | ||||
| 			continue | ||||
| 		fi | ||||
| @@ -118,33 +32,7 @@ do | ||||
| 		continue | ||||
| 	fi | ||||
|  | ||||
| 	if is_fixes_nomination "$sha"; then | ||||
| 		tag=fixes | ||||
| 	elif is_brokenby_nomination "$sha"; then | ||||
| 		tag=brokenby | ||||
| 	elif is_revert_nomination "$sha"; then | ||||
| 		tag=revert | ||||
| 	elif is_stable_nomination "$sha"; then | ||||
| 		tag=stable | ||||
| 	elif is_typod_nomination "$sha"; then | ||||
| 		tag=typod | ||||
| 	else | ||||
| 		continue | ||||
| 	fi | ||||
|  | ||||
| 	case "$tag" in | ||||
| 	fixes | brokenby | revert ) | ||||
| 		if ! sha_in_range; then | ||||
| 			continue | ||||
| 		fi | ||||
| 		;; | ||||
| 	* ) | ||||
| 		;; | ||||
| 	esac | ||||
|  | ||||
| 	printf "[ %8s ] " "$tag" | ||||
| 	git --no-pager show --no-patch --pretty=oneline $sha | ||||
| 	git log -n1 --pretty=oneline $sha | cat | ||||
| done | ||||
|  | ||||
| rm -f already_picked | ||||
| rm -f already_landed | ||||
|   | ||||
							
								
								
									
										42
									
								
								bin/get-typod-pick-list.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										42
									
								
								bin/get-typod-pick-list.sh
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,42 @@ | ||||
| #!/bin/sh | ||||
|  | ||||
| # Script for generating a list of candidates which have typos in the nomination line | ||||
| # | ||||
| # Usage examples: | ||||
| # | ||||
| # $ bin/get-typod-pick-list.sh | ||||
| # $ bin/get-typod-pick-list.sh > picklist | ||||
| # $ bin/get-typod-pick-list.sh | tee picklist | ||||
|  | ||||
| # NB: | ||||
| # This script intentionally _never_ checks for specific version tag | ||||
| # Should we consider folding it with the original get-pick-list.sh | ||||
|  | ||||
| # Use the last branchpoint as our limit for the search | ||||
| latest_branchpoint=`git merge-base origin/master HEAD` | ||||
|  | ||||
| # Grep for commits with "cherry picked from commit" in the commit message. | ||||
| git log --reverse --grep="cherry picked from commit" $latest_branchpoint..HEAD |\ | ||||
| 	grep "cherry picked from commit" |\ | ||||
| 	sed -e 's/^[[:space:]]*(cherry picked from commit[[:space:]]*//' -e 's/)//' > already_picked | ||||
|  | ||||
| # Grep for commits that were marked as a candidate for the stable tree. | ||||
| git log --reverse --pretty=%H -i --grep='^CC:.*mesa-dev' $latest_branchpoint..origin/master |\ | ||||
| while read sha | ||||
| do | ||||
| 	# Check to see whether the patch is on the ignore list. | ||||
| 	if [ -f bin/.cherry-ignore ] ; then | ||||
| 		if grep -q ^$sha bin/.cherry-ignore ; then | ||||
| 			continue | ||||
| 		fi | ||||
| 	fi | ||||
|  | ||||
| 	# Check to see if it has already been picked over. | ||||
| 	if grep -q ^$sha already_picked ; then | ||||
| 		continue | ||||
| 	fi | ||||
|  | ||||
| 	git log -n1 --pretty=oneline $sha | cat | ||||
| done | ||||
|  | ||||
| rm -f already_picked | ||||
							
								
								
									
										26
									
								
								bin/git_sha1_gen.py
									
									
									
									
									
										
										
										Normal file → Executable file
									
								
							
							
						
						
									
										26
									
								
								bin/git_sha1_gen.py
									
									
									
									
									
										
										
										Normal file → Executable file
									
								
							| @@ -1,10 +1,11 @@ | ||||
| #!/usr/bin/env python | ||||
|  | ||||
| """ | ||||
| Generate the contents of the git_sha1.h file. | ||||
| The output of this script goes to stdout. | ||||
| """ | ||||
|  | ||||
|  | ||||
| import argparse | ||||
| import os | ||||
| import os.path | ||||
| import subprocess | ||||
| @@ -26,25 +27,10 @@ def get_git_sha1(): | ||||
|         git_sha1 = '' | ||||
|     return git_sha1 | ||||
|  | ||||
| def write_if_different(contents): | ||||
|     """ | ||||
|     Avoid touching the output file if it doesn't need modifications | ||||
|     Useful to avoid triggering rebuilds when nothing has changed. | ||||
|     """ | ||||
|     if os.path.isfile(args.output): | ||||
|         with open(args.output, 'r') as file: | ||||
|             if file.read() == contents: | ||||
|                 return | ||||
|     with open(args.output, 'w') as file: | ||||
|         file.write(contents) | ||||
|  | ||||
| parser = argparse.ArgumentParser() | ||||
| parser.add_argument('--output', help='File to write the #define in', | ||||
|                     required=True) | ||||
| args = parser.parse_args() | ||||
|  | ||||
| git_sha1 = os.environ.get('MESA_GIT_SHA1_OVERRIDE', get_git_sha1())[:10] | ||||
| if git_sha1: | ||||
|     write_if_different('#define MESA_GIT_SHA1 " (git-' + git_sha1 + ')"') | ||||
| else: | ||||
|     write_if_different('#define MESA_GIT_SHA1 ""') | ||||
|     git_sha1_h_in_path = os.path.join(os.path.dirname(sys.argv[0]), | ||||
|             '..', 'src', 'git_sha1.h.in') | ||||
|     with open(git_sha1_h_in_path , 'r') as git_sha1_h_in: | ||||
|         sys.stdout.write(git_sha1_h_in.read().replace('@VCS_TAG@', git_sha1)) | ||||
|   | ||||
							
								
								
									
										51
									
								
								bin/install_megadrivers.py
									
									
									
									
									
										
										
										Normal file → Executable file
									
								
							
							
						
						
									
										51
									
								
								bin/install_megadrivers.py
									
									
									
									
									
										
										
										Normal file → Executable file
									
								
							| @@ -1,6 +1,6 @@ | ||||
| #!/usr/bin/env python3 | ||||
| #!/usr/bin/env python | ||||
| # encoding=utf-8 | ||||
| # Copyright 2017-2018 Intel Corporation | ||||
| # Copyright © 2017 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 +25,7 @@ | ||||
| from __future__ import print_function | ||||
| import argparse | ||||
| import os | ||||
| import shutil | ||||
|  | ||||
|  | ||||
| def main(): | ||||
| @@ -34,50 +35,20 @@ def main(): | ||||
|     parser.add_argument('drivers', nargs='+') | ||||
|     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 | ||||
|     else: | ||||
|         to = os.path.join(os.environ['MESON_INSTALL_DESTDIR_PREFIX'], args.libdir) | ||||
|  | ||||
|     to = os.path.join(os.environ.get('MESON_INSTALL_DESTDIR_PREFIX'), args.libdir) | ||||
|     master = os.path.join(to, os.path.basename(args.megadriver)) | ||||
|  | ||||
|     if not os.path.exists(to): | ||||
|         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) | ||||
|  | ||||
|         if os.path.lexists(abs_driver): | ||||
|             os.unlink(abs_driver) | ||||
|         print('installing {} to {}'.format(args.megadriver, abs_driver)) | ||||
|         os.link(master, abs_driver) | ||||
|  | ||||
|         try: | ||||
|             ret = os.getcwd() | ||||
|             os.chdir(to) | ||||
|  | ||||
|             name, ext = os.path.splitext(driver) | ||||
|             while ext != '.so': | ||||
|                 if os.path.lexists(name): | ||||
|                     os.unlink(name) | ||||
|                 os.symlink(driver, name) | ||||
|                 name, ext = os.path.splitext(name) | ||||
|         finally: | ||||
|             os.chdir(ret) | ||||
|  | ||||
|     # Remove meson-created master .so and symlinks | ||||
|     for each in args.drivers: | ||||
|         driver = os.path.join(to, each) | ||||
|         if os.path.exists(driver): | ||||
|             os.unlink(driver) | ||||
|         print('installing {} to {}'.format(args.megadriver, to)) | ||||
|         os.link(master, driver) | ||||
|     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,88 +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. | ||||
|  | ||||
| """This script reads a meson build directory and gives back the command line it | ||||
| was configured with. | ||||
|  | ||||
| This only works for meson 0.49.0 and newer. | ||||
| """ | ||||
|  | ||||
| import argparse | ||||
| import ast | ||||
| import configparser | ||||
| import pathlib | ||||
| import sys | ||||
|  | ||||
|  | ||||
| def parse_args() -> argparse.Namespace: | ||||
|     """Parse arguments.""" | ||||
|     parser = argparse.ArgumentParser() | ||||
|     parser.add_argument( | ||||
|         'build_dir', | ||||
|         help='Path the meson build directory') | ||||
|     args = parser.parse_args() | ||||
|     return args | ||||
|  | ||||
|  | ||||
| def load_config(path: pathlib.Path) -> configparser.ConfigParser: | ||||
|     """Load config file.""" | ||||
|     conf = configparser.ConfigParser() | ||||
|     with path.open() as f: | ||||
|         conf.read_file(f) | ||||
|     return conf | ||||
|  | ||||
|  | ||||
| def build_cmd(conf: configparser.ConfigParser) -> str: | ||||
|     """Rebuild the command line.""" | ||||
|     args = [] | ||||
|     for k, v in conf['options'].items(): | ||||
|         if ' ' in v: | ||||
|             args.append(f'-D{k}="{v}"') | ||||
|         else: | ||||
|             args.append(f'-D{k}={v}') | ||||
|  | ||||
|     cf = conf['properties'].get('cross_file') | ||||
|     if cf: | ||||
|         args.append('--cross-file={}'.format(cf)) | ||||
|     nf = conf['properties'].get('native_file') | ||||
|     if nf: | ||||
|         # this will be in the form "['str', 'str']", so use ast.literal_eval to | ||||
|         # convert it to a list of strings. | ||||
|         nf = ast.literal_eval(nf) | ||||
|         args.extend(['--native-file={}'.format(f) for f in nf]) | ||||
|     return ' '.join(args) | ||||
|  | ||||
|  | ||||
| def main(): | ||||
|     args = parse_args() | ||||
|     path = pathlib.Path(args.build_dir, 'meson-private', 'cmd_line.txt') | ||||
|     if not path.exists(): | ||||
|         print('Cannot find the necessary file to rebuild command line. ' | ||||
|               'Is your meson version >= 0.49.0?', file=sys.stderr) | ||||
|         sys.exit(1) | ||||
|  | ||||
|     conf = load_config(path) | ||||
|     cmd = build_cmd(conf) | ||||
|     print(cmd) | ||||
|  | ||||
|  | ||||
| if __name__ == '__main__': | ||||
|     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('---') | ||||
| @@ -1,23 +0,0 @@ | ||||
| # Copyright © 2017 Eric Engestrom | ||||
|  | ||||
| # 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. | ||||
|  | ||||
| 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,35 +0,0 @@ | ||||
| #!/usr/bin/env python | ||||
| # encoding=utf-8 | ||||
| # Copyright © 2017 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 __future__ import print_function | ||||
| import os | ||||
|  | ||||
|  | ||||
| def main(): | ||||
|     filename = os.path.join(os.environ['MESON_SOURCE_ROOT'], 'VERSION') | ||||
|     with open(filename) as f: | ||||
|         version = f.read().strip() | ||||
|     print(version, end='') | ||||
|  | ||||
|  | ||||
| if __name__ == '__main__': | ||||
|     main() | ||||
| @@ -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() | ||||
							
								
								
									
										21
									
								
								common.py
									
									
									
									
									
								
							
							
						
						
									
										21
									
								
								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' | ||||
| @@ -98,7 +86,7 @@ def AddOptions(opts): | ||||
|         from SCons.Options.EnumOption import EnumOption | ||||
|     opts.Add(EnumOption('build', 'build type', 'debug', | ||||
|                         allowed_values=('debug', 'checked', 'profile', | ||||
|                                         'release'))) | ||||
|                                         'release', 'opt'))) | ||||
|     opts.Add(BoolOption('verbose', 'verbose output', 'no')) | ||||
|     opts.Add(EnumOption('machine', 'use machine-specific assembly code', | ||||
|                         default_machine, | ||||
| @@ -111,14 +99,17 @@ def AddOptions(opts): | ||||
|                         'enable static code analysis where available', 'no')) | ||||
|     opts.Add(BoolOption('asan', 'enable Address Sanitizer', 'no')) | ||||
|     opts.Add('toolchain', 'compiler toolchain', default_toolchain) | ||||
|     opts.Add(BoolOption('gles', 'EXPERIMENTAL: enable OpenGL ES support', | ||||
|                         'no')) | ||||
|     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')) | ||||
|     opts.Add(BoolOption('profile', 'DEPRECATED: profile build', 'no')) | ||||
|     opts.Add(BoolOption('quiet', 'DEPRECATED: profile build', 'yes')) | ||||
|     opts.Add(BoolOption('texture_float', | ||||
|                         'enable floating-point textures and renderbuffers', | ||||
|                         'no')) | ||||
|     opts.Add(BoolOption('swr', 'Build OpenSWR', 'no')) | ||||
|     if host_platform == 'windows': | ||||
|         opts.Add('MSVC_VERSION', 'Microsoft Visual C/C++ version') | ||||
|         opts.Add('MSVC_USE_SCRIPT', 'Microsoft Visual C/C++ vcvarsall script', True) | ||||
|   | ||||
							
								
								
									
										3133
									
								
								configure.ac
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3133
									
								
								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> | ||||
|  | ||||
|   | ||||
							
								
								
									
										257
									
								
								docs/autoconf.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										257
									
								
								docs/autoconf.html
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,257 @@ | ||||
| <!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 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>--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,58 @@ | ||||
| </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="meson.html" target="_parent">Meson</a></li> | ||||
|     <li><a href="autoconf.html" target="_parent">Autoconf</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 +82,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> | ||||
|   | ||||
Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user