Compare commits
	
		
			141 Commits
		
	
	
		
			mesa-20.0.
			...
			mesa_7_4_r
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|  | 17db2db9dc | ||
|  | dba79af9bc | ||
|  | b009a32bf4 | ||
|  | 7122490982 | ||
|  | 6ada1d47d9 | ||
|  | 55865335f4 | ||
|  | 918e5221ef | ||
|  | 9feb26584a | ||
|  | a8528a2e86 | ||
|  | 119360cccd | ||
|  | ac2216542d | ||
|  | 37e5c057f1 | ||
|  | 4d9b8e0f93 | ||
|  | c1b71f46b5 | ||
|  | 4a25ac9564 | ||
|  | 35d965b39b | ||
|  | d0aab00609 | ||
|  | ef33d0f103 | ||
|  | 349b819768 | ||
|  | 50443db882 | ||
|  | c503cacb53 | ||
|  | e862b4e38f | ||
|  | e9dfc858fb | ||
|  | 5efbca1e21 | ||
|  | d6d8663a88 | ||
|  | 13990bd98a | ||
|  | def630d0a2 | ||
|  | ca2564f1e6 | ||
|  | 711a57f7c7 | ||
|  | 058cf2fff1 | ||
|  | 715f509c5d | ||
|  | e704e6c6f3 | ||
|  | 01f34e667a | ||
|  | 4d0a7b33c5 | ||
|  | fb1d2ed34c | ||
|  | 9395fedf98 | ||
|  | 9abc0d80af | ||
|  | 90e89c01df | ||
|  | 790d93e362 | ||
|  | e9f3783169 | ||
|  | e41780fedc | ||
|  | d0edbbb3f3 | ||
|  | e10119c23e | ||
|  | 208c087f39 | ||
|  | 0c8b40b42b | ||
|  | 5199f451bb | ||
|  | dd7cde5230 | ||
|  | ab5746e5d8 | ||
|  | 3bd446c0ab | ||
|  | 9b78402ee4 | ||
|  | cf1ef0f308 | ||
|  | fd1f65ba61 | ||
|  | 967345b497 | ||
|  | 41ad853a6a | ||
|  | 842baa29cb | ||
|  | 9556d870a1 | ||
|  | 42ce790086 | ||
|  | b17769af42 | ||
|  | 9030277b0d | ||
|  | a37a9bf769 | ||
|  | 8afb8a8145 | ||
|  | 801f933694 | ||
|  | 75ecd6ebbf | ||
|  | 1cd7317fdb | ||
|  | 1865291701 | ||
|  | 3edbcce7d5 | ||
|  | b1fb34d0ac | ||
|  | 606099f545 | ||
|  | 32e3142071 | ||
|  | 66eea4e104 | ||
|  | e428cf3afd | ||
|  | 842b5164d2 | ||
|  | a6f7e909a7 | ||
|  | ca87e5a7bd | ||
|  | 45c4b4dfbd | ||
|  | 2adaec1226 | ||
|  | 549586c319 | ||
|  | 463ac421a5 | ||
|  | 6801240205 | ||
|  | a22088b7d5 | ||
|  | e89c49147f | ||
|  | 67634240d1 | ||
|  | 819b028a8e | ||
|  | a43c30ef41 | ||
|  | b65bfde84d | ||
|  | c39e6917ac | ||
|  | c79079895f | ||
|  | 4480e631cd | ||
|  | c32661c3ce | ||
|  | d5c06bb812 | ||
|  | 9d5aa36239 | ||
|  | e3050c1777 | ||
|  | 06295ddbdd | ||
|  | e2092bb23c | ||
|  | 528836d0ad | ||
|  | 3511442e43 | ||
|  | d20c53b511 | ||
|  | 091cc122ad | ||
|  | c983abbb9e | ||
|  | a0a81204c2 | ||
|  | 409d4f839c | ||
|  | 0ab36958ea | ||
|  | c2445f43a3 | ||
|  | f3d1c136b7 | ||
|  | dd10a8b09d | ||
|  | dd312366da | ||
|  | d2fe466ef3 | ||
|  | fe5328bfad | ||
|  | c0891dde07 | ||
|  | 0e6d9c1a55 | ||
|  | 5f74a66132 | ||
|  | 46f8b62d5f | ||
|  | 3e3e80c431 | ||
|  | 0486d117e4 | ||
|  | 29981c14da | ||
|  | 98d5efb2c5 | ||
|  | 77a44aafaf | ||
|  | 8278c70716 | ||
|  | ac0955f5e2 | ||
|  | 4130c35ca8 | ||
|  | d440647eb8 | ||
|  | 7e8f2c56c0 | ||
|  | a0880a152f | ||
|  | 4608a9172f | ||
|  | d0e38f7ec0 | ||
|  | a69bdbbbdd | ||
|  | 88c97a2662 | ||
|  | ce9c69ddbc | ||
|  | e430fcb716 | ||
|  | 11a363e632 | ||
|  | 41e63fbdb2 | ||
|  | b543401a5c | ||
|  | 8c4f08fbad | ||
|  | f3081a34d2 | ||
|  | 7b1d3cf392 | ||
|  | 25515b557e | ||
|  | 51625ff86e | ||
|  | 4d8f661726 | ||
|  | efa69a2f66 | ||
|  | 30a6dd78d5 | ||
|  | 9f75836308 | 
| @@ -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') | ||||
| @@ -1,18 +0,0 @@ | ||||
| ((nil . ((show-trailing-whitespace . t))) | ||||
|  (prog-mode | ||||
|   (indent-tabs-mode . nil) | ||||
|   (tab-width . 8) | ||||
|   (c-basic-offset . 3) | ||||
|   (c-file-style . "stroustrup") | ||||
|   (fill-column . 78) | ||||
|   (eval . (progn | ||||
| 	    (c-set-offset 'case-label '0) | ||||
| 	    (c-set-offset 'innamespace '0) | ||||
| 	    (c-set-offset 'inline-open '0))) | ||||
|   (whitespace-style face indentation) | ||||
|   (whitespace-line-column . 79) | ||||
|   (eval ignore-errors | ||||
|         (require 'whitespace) | ||||
|         (whitespace-mode 1))) | ||||
|  (makefile-mode (indent-tabs-mode . t)) | ||||
|  ) | ||||
| @@ -1,44 +0,0 @@ | ||||
| # To use this config on you editor, follow the instructions at: | ||||
| # http://editorconfig.org | ||||
|  | ||||
| root = true | ||||
|  | ||||
| [*] | ||||
| charset = utf-8 | ||||
| insert_final_newline = true | ||||
| tab_width = 8 | ||||
|  | ||||
| [*.{c,h,cpp,hpp,cc,hh}] | ||||
| indent_style = space | ||||
| indent_size = 3 | ||||
| max_line_length = 78 | ||||
|  | ||||
| [{Makefile*,*.mk}] | ||||
| indent_style = tab | ||||
|  | ||||
| [{*.py,SCons*}] | ||||
| indent_style = space | ||||
| indent_size = 4 | ||||
|  | ||||
| [*.pl] | ||||
| indent_style = space | ||||
| indent_size = 4 | ||||
|  | ||||
| [*.m4] | ||||
| indent_style = space | ||||
| indent_size = 2 | ||||
|  | ||||
| [*.yml] | ||||
| indent_style = space | ||||
| indent_size = 2 | ||||
|  | ||||
| [*.html] | ||||
| indent_style = space | ||||
| indent_size = 2 | ||||
|  | ||||
| [*.patch] | ||||
| trim_trailing_whitespace = false | ||||
|  | ||||
| [{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 | ||||
							
								
								
									
										20
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										20
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							| @@ -1,4 +1,16 @@ | ||||
| *.pyc | ||||
| *.pyo | ||||
| *.out | ||||
| build | ||||
| *.a | ||||
| *.o | ||||
| *.so | ||||
| *.sw[a-z] | ||||
| *.pc | ||||
| *~ | ||||
| depend | ||||
| depend.bak | ||||
| lib | ||||
| lib64 | ||||
| configure | ||||
| autom4te.cache | ||||
| aclocal.m4 | ||||
| config.log | ||||
| config.status | ||||
| cscope* | ||||
|   | ||||
							
								
								
									
										690
									
								
								.gitlab-ci.yml
									
									
									
									
									
								
							
							
						
						
									
										690
									
								
								.gitlab-ci.yml
									
									
									
									
									
								
							| @@ -1,690 +0,0 @@ | ||||
| variables: | ||||
|   UPSTREAM_REPO: mesa/mesa | ||||
|  | ||||
| include: | ||||
|   - project: 'wayland/ci-templates' | ||||
|     # Must be the same as in .gitlab-ci/lava-gitlab-ci.yml | ||||
|     ref: 0a9bdd33a98f05af6761ab118b5074952242aab0 | ||||
|     file: '/templates/debian.yml' | ||||
|   - local: '.gitlab-ci/lava-gitlab-ci.yml' | ||||
|  | ||||
| stages: | ||||
|   - container | ||||
|   - build | ||||
|   - test | ||||
|   - success | ||||
|  | ||||
|  | ||||
| # When to automatically run the CI | ||||
| .ci-run-policy: | ||||
|   rules: | ||||
|     # Run pipeline by default for merge requests changing files affecting it | ||||
|     - if: '$CI_MERGE_REQUEST_SOURCE_BRANCH_NAME == $CI_COMMIT_REF_NAME' | ||||
|       changes: &paths | ||||
|       - VERSION | ||||
|       - bin/**/* | ||||
|       # GitLab CI | ||||
|       - .gitlab-ci.yml | ||||
|       - .gitlab-ci/**/* | ||||
|       # Meson | ||||
|       - meson* | ||||
|       - build-support/**/* | ||||
|       - subprojects/**/* | ||||
|       # SCons | ||||
|       - SConstruct | ||||
|       - scons/**/* | ||||
|       - common.py | ||||
|       # Source code | ||||
|       - include/**/* | ||||
|       - src/**/* | ||||
|       when: on_success | ||||
|     # Run pipeline by default in the main project if files affecting it were | ||||
|     # changed | ||||
|     - if: '$CI_PROJECT_PATH == "mesa/mesa"' | ||||
|       changes: | ||||
|         *paths | ||||
|       when: on_success | ||||
|     # Allow triggering jobs manually on branches of forked projects | ||||
|     - if: '$CI_PROJECT_PATH != "mesa/mesa" && $CI_MERGE_REQUEST_SOURCE_BRANCH_NAME != $CI_COMMIT_REF_NAME' | ||||
|       when: manual | ||||
|     # Otherwise, most jobs won't run | ||||
|     - when: never | ||||
|   retry: | ||||
|     max: 2 | ||||
|     when: | ||||
|       - runner_system_failure | ||||
|   # Cancel CI run if a newer commit is pushed to the same branch | ||||
|   interruptible: true | ||||
|  | ||||
| success: | ||||
|   stage: success | ||||
|   image: debian:stable-slim | ||||
|   only: | ||||
|     - merge_requests | ||||
|   except: | ||||
|     changes: | ||||
|       *paths | ||||
|   variables: | ||||
|     GIT_STRATEGY: none | ||||
|   script: | ||||
|     - echo "Dummy job to make sure every merge request pipeline runs at least one job" | ||||
|  | ||||
|  | ||||
| .ci-deqp-artifacts: | ||||
|   artifacts: | ||||
|     when: always | ||||
|     untracked: false | ||||
|     paths: | ||||
|       # Watch out!  Artifacts are relative to the build dir. | ||||
|       # https://gitlab.com/gitlab-org/gitlab-ce/commit/8788fb925706cad594adf6917a6c5f6587dd1521 | ||||
|       - artifacts | ||||
|  | ||||
| # Build the CI docker images. | ||||
| # | ||||
| # DEBIAN_TAG is the tag of the docker image used by later stage jobs. If the | ||||
| # image doesn't exist yet, the container stage job generates it. | ||||
| # | ||||
| # In order to generate a new image, one should generally change the tag. | ||||
| # While removing the image from the registry would also work, that's not | ||||
| # recommended except for ephemeral images during development: Replacing | ||||
| # an image after a significant amount of time might pull in newer | ||||
| # versions of gcc/clang or other packages, which might break the build | ||||
| # with older commits using the same tag. | ||||
| # | ||||
| # After merging a change resulting in generating a new image to the | ||||
| # main repository, it's recommended to remove the image from the source | ||||
| # repository's container registry, so that the image from the main | ||||
| # repository's registry will be used there as well. | ||||
|  | ||||
| .container: | ||||
|   stage: container | ||||
|   extends: | ||||
|     - .ci-run-policy | ||||
|   variables: | ||||
|     DEBIAN_VERSION: buster-slim | ||||
|     REPO_SUFFIX: $CI_JOB_NAME | ||||
|     DEBIAN_EXEC: 'bash .gitlab-ci/container/${CI_JOB_NAME}.sh' | ||||
|     # no need to pull the whole repo to build the container image | ||||
|     GIT_STRATEGY: none | ||||
|  | ||||
| # Debian 10 based x86 build image | ||||
| x86_build: | ||||
|   extends: | ||||
|     - .debian@container-ifnot-exists | ||||
|     - .container | ||||
|   variables: | ||||
|     DEBIAN_TAG: &x86_build "2020-01-14" | ||||
|  | ||||
| .use-x86_build: | ||||
|   variables: | ||||
|     TAG: *x86_build | ||||
|   image: "$CI_REGISTRY_IMAGE/debian/x86_build:$TAG" | ||||
|   needs: | ||||
|     - x86_build | ||||
|  | ||||
| # Debian 10 based x86 test image for GL | ||||
| x86_test-gl: | ||||
|   extends: x86_build | ||||
|   variables: | ||||
|     DEBIAN_TAG: &x86_test-gl "2020-01-14" | ||||
|  | ||||
| # Debian 10 based x86 test image for VK | ||||
| x86_test-vk: | ||||
|   extends: x86_build | ||||
|   variables: | ||||
|     DEBIAN_TAG: &x86_test-vk "2020-01-14" | ||||
|   # Can only be triggered manually on personal branches because RADV is the only | ||||
|   # driver that does Vulkan testing at the moment. | ||||
|   rules: | ||||
|     # Never build the test image for VK by default in the main project. | ||||
|     - if: '$CI_PROJECT_PATH == "mesa/mesa"' | ||||
|       when: never | ||||
|     # Never build the test image for VK by default for merge requests. | ||||
|     - if: '$CI_MERGE_REQUEST_SOURCE_BRANCH_NAME == $CI_COMMIT_REF_NAME' | ||||
|       when: never | ||||
|     # Otherwise, allow building it manually for personal branches. | ||||
|     - when: manual | ||||
|  | ||||
|  | ||||
| # Debian 9 based x86 build image (old LLVM) | ||||
| x86_build_old: | ||||
|   extends: x86_build | ||||
|   variables: | ||||
|     DEBIAN_TAG: &x86_build_old "2019-09-18" | ||||
|     DEBIAN_VERSION: stretch-slim | ||||
|  | ||||
| .use-x86_build_old: | ||||
|   variables: | ||||
|     TAG: *x86_build_old | ||||
|   image: "$CI_REGISTRY_IMAGE/debian/x86_build_old:$TAG" | ||||
|   needs: | ||||
|     - x86_build_old | ||||
|  | ||||
| # Debian 10 based ARM build image | ||||
| arm_build: | ||||
|   extends: | ||||
|     - .debian@container-ifnot-exists@arm64v8 | ||||
|     - .container | ||||
|   variables: | ||||
|     DEBIAN_TAG: &arm_build "2020-01-14" | ||||
|  | ||||
| .use-arm_build: | ||||
|   variables: | ||||
|     TAG: *arm_build | ||||
|   image: "$CI_REGISTRY_IMAGE/debian/arm_build:$TAG" | ||||
|   needs: | ||||
|     - arm_build | ||||
|  | ||||
| # Debian 10 based ARM test image | ||||
| arm_test: | ||||
|   extends: arm_build | ||||
|   variables: | ||||
|     DEBIAN_TAG: &arm_test "2019-12-18" | ||||
|  | ||||
| .use-arm_test: | ||||
|   variables: | ||||
|     TAG: *arm_test | ||||
|   image: "$CI_REGISTRY_IMAGE/debian/arm_test:$TAG" | ||||
|   needs: | ||||
|     - meson-arm64 | ||||
|     - arm_test | ||||
|  | ||||
|  | ||||
| # BUILD | ||||
|  | ||||
| # Shared between windows and Linux | ||||
| .build-common: | ||||
|   extends: .ci-run-policy | ||||
|   stage: build | ||||
|   artifacts: | ||||
|     when: always | ||||
|     paths: | ||||
|       - _build/meson-logs/*.txt | ||||
|       # scons: | ||||
|       - build/*/config.log | ||||
|       - shader-db | ||||
|  | ||||
| # Just Linux | ||||
| .build-linux: | ||||
|   extends: .build-common | ||||
|   variables: | ||||
|     CCACHE_COMPILERCHECK: "content" | ||||
|     CCACHE_COMPRESS: "true" | ||||
|     CCACHE_DIR: /cache/mesa/ccache | ||||
|   # Use ccache transparently, and print stats before/after | ||||
|   before_script: | ||||
|     - export PATH="/usr/lib/ccache:$PATH" | ||||
|     - export CCACHE_BASEDIR="$PWD" | ||||
|     - ccache --show-stats | ||||
|   after_script: | ||||
|     - ccache --show-stats | ||||
|  | ||||
| .build-windows: | ||||
|   extends: .build-common | ||||
|   tags: | ||||
|     - mesa-windows | ||||
|   cache: | ||||
|     key: ${CI_JOB_NAME} | ||||
|     paths: | ||||
|       - subprojects/packagecache | ||||
|  | ||||
| .meson-build: | ||||
|   extends: | ||||
|     - .build-linux | ||||
|     - .use-x86_build | ||||
|   variables: | ||||
|     LLVM_VERSION: 9 | ||||
|   script: | ||||
|     - .gitlab-ci/meson-build.sh | ||||
|  | ||||
| .scons-build: | ||||
|   extends: | ||||
|     - .build-linux | ||||
|     - .use-x86_build | ||||
|   variables: | ||||
|     SCONSFLAGS: "-j4" | ||||
|   script: | ||||
|     - .gitlab-ci/scons-build.sh | ||||
|  | ||||
| meson-testing: | ||||
|   extends: | ||||
|     - .meson-build | ||||
|     - .ci-deqp-artifacts | ||||
|   variables: | ||||
|     UNWIND: "true" | ||||
|     DRI_LOADERS: > | ||||
|       -D glx=dri | ||||
|       -D gbm=true | ||||
|       -D egl=true | ||||
|       -D platforms=x11,drm,surfaceless | ||||
|     GALLIUM_ST: > | ||||
|       -D dri3=true | ||||
|     GALLIUM_DRIVERS: "swrast" | ||||
|     VULKAN_DRIVERS: amd | ||||
|     BUILDTYPE: "debugoptimized" | ||||
|   script: | ||||
|     - .gitlab-ci/meson-build.sh | ||||
|     - .gitlab-ci/prepare-artifacts.sh | ||||
|  | ||||
| meson-main: | ||||
|   extends: .meson-build | ||||
|   variables: | ||||
|     UNWIND: "true" | ||||
|     DRI_LOADERS: > | ||||
|       -D glx=dri | ||||
|       -D gbm=true | ||||
|       -D egl=true | ||||
|       -D platforms=x11,wayland,drm,surfaceless | ||||
|     DRI_DRIVERS: "i915,i965,r100,r200,nouveau" | ||||
|     GALLIUM_ST: > | ||||
|       -D dri3=true | ||||
|       -D gallium-extra-hud=true | ||||
|       -D gallium-vdpau=true | ||||
|       -D gallium-xvmc=true | ||||
|       -D gallium-omx=bellagio | ||||
|       -D gallium-va=true | ||||
|       -D gallium-xa=true | ||||
|       -D gallium-nine=true | ||||
|       -D gallium-opencl=disabled | ||||
|     GALLIUM_DRIVERS: "iris,nouveau,kmsro,r300,r600,freedreno,swr,swrast,svga,v3d,vc4,virgl,etnaviv,panfrost,lima,zink" | ||||
|     EXTRA_OPTION: > | ||||
|       -D osmesa=gallium | ||||
|       -D tools=all | ||||
|   script: | ||||
|     - .gitlab-ci/meson-build.sh | ||||
|     - .gitlab-ci/run-shader-db.sh | ||||
|  | ||||
| .meson-cross: | ||||
|   extends: | ||||
|     - .meson-build | ||||
|   variables: | ||||
|     UNWIND: "false" | ||||
|     DRI_LOADERS: > | ||||
|       -D glx=disabled | ||||
|       -D gbm=false | ||||
|       -D egl=true | ||||
|       -D platforms=surfaceless | ||||
|       -D osmesa=none | ||||
|     GALLIUM_ST: > | ||||
|       -D dri3=false | ||||
|       -D gallium-vdpau=false | ||||
|       -D gallium-xvmc=false | ||||
|       -D gallium-omx=disabled | ||||
|       -D gallium-va=false | ||||
|       -D gallium-xa=false | ||||
|       -D gallium-nine=false | ||||
|  | ||||
| .meson-arm: | ||||
|   extends: | ||||
|     - .meson-cross | ||||
|     - .use-arm_build | ||||
|   variables: | ||||
|     VULKAN_DRIVERS: freedreno | ||||
|     GALLIUM_DRIVERS: "etnaviv,freedreno,kmsro,lima,nouveau,panfrost,swrast,tegra,v3d,vc4" | ||||
|     BUILDTYPE: "debugoptimized" | ||||
|     EXTRA_OPTION: > | ||||
|       -D I-love-half-baked-turnips=true | ||||
|   tags: | ||||
|     - aarch64 | ||||
|  | ||||
| meson-armhf: | ||||
|   extends: | ||||
|     - .meson-arm | ||||
|     - .ci-deqp-artifacts | ||||
|   variables: | ||||
|     CROSS: armhf | ||||
|     LLVM_VERSION: "7" | ||||
|   script: | ||||
|     - .gitlab-ci/meson-build.sh | ||||
|     - .gitlab-ci/prepare-artifacts.sh | ||||
|  | ||||
| meson-arm64: | ||||
|   extends: | ||||
|     - .meson-arm | ||||
|     - .ci-deqp-artifacts | ||||
|   variables: | ||||
|     LLVM_VERSION: "8" | ||||
|     VULKAN_DRIVERS: "freedreno,amd" | ||||
|   script: | ||||
|     - .gitlab-ci/meson-build.sh | ||||
|     - .gitlab-ci/prepare-artifacts.sh | ||||
|  | ||||
| meson-clang: | ||||
|   extends: .meson-build | ||||
|   variables: | ||||
|     UNWIND: "true" | ||||
|     DRI_LOADERS: > | ||||
|       -D glvnd=true | ||||
|     DRI_DRIVERS: "auto" | ||||
|     GALLIUM_DRIVERS: "auto" | ||||
|     VULKAN_DRIVERS: intel,amd,freedreno | ||||
|     CC: "ccache clang-9" | ||||
|     CXX: "ccache clang++-9" | ||||
|  | ||||
| .meson-windows: | ||||
|   extends: | ||||
|     - .build-windows | ||||
|   before_script: | ||||
|     - $ENV:ARCH = "x86" | ||||
|     - $ENV:VERSION = "2019\Community" | ||||
|   script: | ||||
|     - cmd /C .gitlab-ci\meson-build.bat | ||||
|  | ||||
| scons-swr: | ||||
|   extends: .scons-build | ||||
|   variables: | ||||
|     SCONS_TARGET: "swr=1" | ||||
|     SCONS_CHECK_COMMAND: "true" | ||||
|     LLVM_VERSION: "6.0" | ||||
|  | ||||
| scons-win64: | ||||
|   extends: .scons-build | ||||
|   variables: | ||||
|     SCONS_TARGET: platform=windows machine=x86_64 | ||||
|     SCONS_CHECK_COMMAND: "true" | ||||
|  | ||||
| meson-clover: | ||||
|   extends: .meson-build | ||||
|   variables: | ||||
|     UNWIND: "true" | ||||
|     DRI_LOADERS: > | ||||
|       -D glx=disabled | ||||
|       -D egl=false | ||||
|       -D gbm=false | ||||
|     GALLIUM_ST: > | ||||
|       -D dri3=false | ||||
|       -D gallium-vdpau=false | ||||
|       -D gallium-xvmc=false | ||||
|       -D gallium-omx=disabled | ||||
|       -D gallium-va=false | ||||
|       -D gallium-xa=false | ||||
|       -D gallium-nine=false | ||||
|       -D gallium-opencl=icd | ||||
|   script: | ||||
|     - export GALLIUM_DRIVERS="r600,radeonsi" | ||||
|     - .gitlab-ci/meson-build.sh | ||||
|     - LLVM_VERSION=8 .gitlab-ci/meson-build.sh | ||||
|     - export GALLIUM_DRIVERS="i915,r600" | ||||
|     - LLVM_VERSION=6.0 .gitlab-ci/meson-build.sh | ||||
|     - LLVM_VERSION=7 .gitlab-ci/meson-build.sh | ||||
|  | ||||
| meson-clover-old-llvm: | ||||
|   extends: | ||||
|     - meson-clover | ||||
|     - .use-x86_build_old | ||||
|   variables: | ||||
|     UNWIND: "false" | ||||
|     DRI_LOADERS: > | ||||
|       -D glx=disabled | ||||
|       -D egl=false | ||||
|       -D gbm=false | ||||
|       -D platforms=drm,surfaceless | ||||
|     GALLIUM_DRIVERS: "i915,r600" | ||||
|   script: | ||||
|     - LLVM_VERSION=3.9 .gitlab-ci/meson-build.sh | ||||
|     - LLVM_VERSION=4.0 .gitlab-ci/meson-build.sh | ||||
|     - LLVM_VERSION=5.0 .gitlab-ci/meson-build.sh | ||||
|  | ||||
| meson-vulkan: | ||||
|   extends: .meson-build | ||||
|   variables: | ||||
|     UNWIND: "false" | ||||
|     DRI_LOADERS: > | ||||
|       -D glx=disabled | ||||
|       -D gbm=false | ||||
|       -D egl=false | ||||
|       -D platforms=x11,wayland,drm | ||||
|       -D osmesa=none | ||||
|     GALLIUM_ST: > | ||||
|       -D dri3=true | ||||
|       -D gallium-vdpau=false | ||||
|       -D gallium-xvmc=false | ||||
|       -D gallium-omx=disabled | ||||
|       -D gallium-va=false | ||||
|       -D gallium-xa=false | ||||
|       -D gallium-nine=false | ||||
|       -D gallium-opencl=disabled | ||||
|       -D b_sanitize=undefined | ||||
|       -D c_args=-fno-sanitize-recover=all | ||||
|       -D cpp_args=-fno-sanitize-recover=all | ||||
|     UBSAN_OPTIONS: "print_stacktrace=1" | ||||
|     VULKAN_DRIVERS: intel,amd,freedreno | ||||
|     EXTRA_OPTION: > | ||||
|       -D vulkan-overlay-layer=true | ||||
|  | ||||
| # While the main point of this build is testing the i386 cross build, | ||||
| # we also use this one to test some other options that are exclusive | ||||
| # with meson-main's choices (classic swrast and osmesa) | ||||
| meson-i386: | ||||
|   extends: .meson-cross | ||||
|   variables: | ||||
|     CROSS: i386 | ||||
|     VULKAN_DRIVERS: intel | ||||
|     DRI_DRIVERS: "swrast" | ||||
|     GALLIUM_DRIVERS: "iris" | ||||
|     EXTRA_OPTION: > | ||||
|       -D vulkan-overlay-layer=true | ||||
|       -D llvm=false | ||||
|       -D osmesa=classic | ||||
|       -D werror=true | ||||
|  | ||||
| meson-mingw32-x86_64: | ||||
|   extends: .meson-build | ||||
|   variables: | ||||
|     UNWIND: "false" | ||||
|     DRI_DRIVERS: "" | ||||
|     GALLIUM_DRIVERS: "swrast" | ||||
|     EXTRA_OPTION: > | ||||
|       -Dllvm=false | ||||
|       -Dosmesa=gallium | ||||
|       --cross-file=.gitlab-ci/x86_64-w64-mingw32 | ||||
|  | ||||
| scons: | ||||
|   extends: .scons-build | ||||
|   variables: | ||||
|     SCONS_TARGET: "llvm=1" | ||||
|     SCONS_CHECK_COMMAND: "scons llvm=1 force_scons=1 check" | ||||
|   script: | ||||
|     - SCONS_TARGET="" SCONS_CHECK_COMMAND="scons check force_scons=1" .gitlab-ci/scons-build.sh | ||||
|     - LLVM_VERSION=9 .gitlab-ci/scons-build.sh | ||||
|  | ||||
| scons-old-llvm: | ||||
|   extends: | ||||
|     - scons | ||||
|     - .use-x86_build_old | ||||
|   script: | ||||
|     - LLVM_VERSION=3.9 .gitlab-ci/scons-build.sh | ||||
|  | ||||
| .test: | ||||
|   extends: | ||||
|     - .ci-run-policy | ||||
|   stage: test | ||||
|   variables: | ||||
|     GIT_STRATEGY: none # testing doesn't build anything from source | ||||
|   before_script: | ||||
|     # Note: Build dir (and thus install) may be dirty due to GIT_STRATEGY | ||||
|     - rm -rf install | ||||
|     - tar -xf artifacts/install.tar | ||||
|     - LD_LIBRARY_PATH=install/lib find install/lib -name "*.so" -print -exec ldd {} \; | ||||
|   artifacts: | ||||
|     when: always | ||||
|     name: "$CI_JOB_NAME-$CI_COMMIT_REF_NAME" | ||||
|     paths: | ||||
|       - results/ | ||||
|   dependencies: | ||||
|     - meson-testing | ||||
|  | ||||
| .test-gl: | ||||
|   extends: | ||||
|     - .test | ||||
|   variables: | ||||
|     TAG: *x86_test-gl | ||||
|   image: "$CI_REGISTRY_IMAGE/debian/x86_test-gl:$TAG" | ||||
|   needs: | ||||
|     - meson-testing | ||||
|     - x86_test-gl | ||||
|  | ||||
| .test-vk: | ||||
|   extends: | ||||
|     - .test | ||||
|   variables: | ||||
|     TAG: *x86_test-vk | ||||
|   image: "$CI_REGISTRY_IMAGE/debian/x86_test-vk:$TAG" | ||||
|   needs: | ||||
|     - meson-testing | ||||
|     - x86_test-vk | ||||
|  | ||||
| .piglit-test: | ||||
|   extends: .test-gl | ||||
|   artifacts: | ||||
|     when: on_failure | ||||
|     name: "$CI_JOB_NAME-$CI_COMMIT_REF_NAME" | ||||
|     paths: | ||||
|       - summary/ | ||||
|   variables: | ||||
|     LIBGL_ALWAYS_SOFTWARE: 1 | ||||
|     PIGLIT_NO_WINDOW: 1 | ||||
|   script: | ||||
|     - artifacts/piglit/run.sh | ||||
|  | ||||
| piglit-quick_gl: | ||||
|   extends: .piglit-test | ||||
|   variables: | ||||
|     LP_NUM_THREADS: 0 | ||||
|     NIR_VALIDATE: 0 | ||||
|     PIGLIT_OPTIONS: > | ||||
|       --process-isolation false | ||||
|       -x arb_gpu_shader5 | ||||
|       -x egl_ext_device_ | ||||
|       -x egl_ext_platform_device | ||||
|       -x ext_timer_query@time-elapsed | ||||
|       -x glx-multithread-clearbuffer | ||||
|       -x glx-multithread-shader-compile | ||||
|       -x max-texture-size | ||||
|       -x maxsize | ||||
|     PIGLIT_PROFILES: quick_gl | ||||
|  | ||||
| piglit-glslparser: | ||||
|   extends: .piglit-test | ||||
|   variables: | ||||
|     LP_NUM_THREADS: 0 | ||||
|     NIR_VALIDATE: 0 | ||||
|     PIGLIT_PROFILES: glslparser | ||||
|  | ||||
| piglit-quick_shader: | ||||
|   extends: .piglit-test | ||||
|   variables: | ||||
|     LP_NUM_THREADS: 1 | ||||
|     NIR_VALIDATE: 0 | ||||
|     PIGLIT_PROFILES: quick_shader | ||||
|  | ||||
| .deqp-test: | ||||
|   variables: | ||||
|     DEQP_SKIPS: deqp-default-skips.txt | ||||
|   script: | ||||
|     - ./artifacts/deqp-runner.sh | ||||
|  | ||||
| .deqp-test-gl: | ||||
|   extends: | ||||
|     - .test-gl | ||||
|     - .deqp-test | ||||
|  | ||||
| .deqp-test-vk: | ||||
|   extends: | ||||
|     - .test-vk | ||||
|     - .deqp-test | ||||
|   variables: | ||||
|     DEQP_VER: vk | ||||
|  | ||||
| test-llvmpipe-gles2: | ||||
|   variables: | ||||
|     DEQP_VER: gles2 | ||||
|     DEQP_PARALLEL: 4 | ||||
|     NIR_VALIDATE: 0 | ||||
|     # Don't use threads inside llvmpipe, we've already got all 4 cores | ||||
|     # busy with DEQP_PARALLEL. | ||||
|     LP_NUM_THREADS: 0 | ||||
|     DEQP_EXPECTED_FAILS: deqp-llvmpipe-fails.txt | ||||
|     LIBGL_ALWAYS_SOFTWARE: "true" | ||||
|   extends: .deqp-test-gl | ||||
|  | ||||
| test-softpipe-gles2: | ||||
|   extends: test-llvmpipe-gles2 | ||||
|   variables: | ||||
|     DEQP_EXPECTED_FAILS: deqp-softpipe-fails.txt | ||||
|     DEQP_SKIPS: deqp-softpipe-skips.txt | ||||
|     GALLIUM_DRIVER: "softpipe" | ||||
|  | ||||
| test-softpipe-gles3: | ||||
|   parallel: 2 | ||||
|   variables: | ||||
|     DEQP_VER: gles3 | ||||
|   extends: test-softpipe-gles2 | ||||
|  | ||||
| test-softpipe-gles31: | ||||
|   parallel: 4 | ||||
|   variables: | ||||
|     DEQP_VER: gles31 | ||||
|   extends: test-softpipe-gles2 | ||||
|  | ||||
| arm64_a630_gles2: | ||||
|   extends: | ||||
|     - .deqp-test-gl | ||||
|     - .use-arm_test | ||||
|   variables: | ||||
|     DEQP_VER: gles2 | ||||
|     DEQP_EXPECTED_FAILS: deqp-freedreno-a630-fails.txt | ||||
|     DEQP_SKIPS: deqp-freedreno-a630-skips.txt | ||||
|     NIR_VALIDATE: 0 | ||||
|     DEQP_PARALLEL: 4 | ||||
|     FLAKES_CHANNEL: "#freedreno-ci" | ||||
|   tags: | ||||
|     - mesa-cheza | ||||
|   dependencies: | ||||
|     - meson-arm64 | ||||
|  | ||||
| arm64_a630_gles31: | ||||
|   extends: arm64_a630_gles2 | ||||
|   variables: | ||||
|     DEQP_VER: gles31 | ||||
|  | ||||
| arm64_a630_gles3: | ||||
|   extends: arm64_a630_gles2 | ||||
|   variables: | ||||
|     DEQP_VER: gles3 | ||||
|  | ||||
| arm64_a306_gles2: | ||||
|   extends: arm64_a630_gles2 | ||||
|   variables: | ||||
|     DEQP_EXPECTED_FAILS: deqp-freedreno-a307-fails.txt | ||||
|     DEQP_SKIPS: deqp-default-skips.txt | ||||
|   tags: | ||||
|     - db410c | ||||
|  | ||||
| # RADV CI | ||||
| .test-radv: | ||||
|   variables: | ||||
|     VK_DRIVER: radeon | ||||
|     RADV_DEBUG: checkir | ||||
|   # Can only be triggered manually on personal branches because RADV is the only | ||||
|   # driver that does Vulkan testing at the moment. | ||||
|   rules: | ||||
|     # Never test RADV by default in the main project. | ||||
|     - if: '$CI_PROJECT_PATH == "mesa/mesa"' | ||||
|       when: never | ||||
|     # Never test RADV by default for merge requests. | ||||
|     - if: '$CI_MERGE_REQUEST_SOURCE_BRANCH_NAME == $CI_COMMIT_REF_NAME' | ||||
|       when: never | ||||
|     # Otherwise, allow testing RADV if the test image for VK has been manually | ||||
|     # started. | ||||
|     - when: on_success | ||||
|  | ||||
| radv_polaris10_vkcts: | ||||
|   extends: | ||||
|     - .deqp-test-vk | ||||
|     - .test-radv | ||||
|   variables: | ||||
|     DEQP_PARALLEL: 4 | ||||
|     DEQP_SKIPS: deqp-radv-polaris10-skips.txt | ||||
|   tags: | ||||
|     - polaris10 | ||||
| @@ -1,122 +0,0 @@ | ||||
| ## Mesa testing using gitlab-runner | ||||
|  | ||||
| The goal of the "test" stage of the .gitlab-ci.yml is to do pre-merge | ||||
| testing of Mesa drivers on various platforms, so that we can ensure no | ||||
| regressions are merged, as long as developers are merging code using | ||||
| the "Merge when pipeline completes" button. | ||||
|  | ||||
| This document only covers the CI from .gitlab-ci.yml and this | ||||
| directory.  For other CI systems, see Intel's [Mesa | ||||
| CI](https://gitlab.freedesktop.org/Mesa_CI) or panfrost's LAVA-based | ||||
| CI (`src/gallium/drivers/panfrost/ci/`) | ||||
|  | ||||
| ### Software architecture | ||||
|  | ||||
| For freedreno and llvmpipe CI, we're using gitlab-runner on the test | ||||
| devices (DUTs), cached docker containers with VK-GL-CTS, and the | ||||
| normal shared x86_64 runners to build the Mesa drivers to be run | ||||
| inside of those containers on the DUTs. | ||||
|  | ||||
| The docker containers are rebuilt from the debian-install.sh script | ||||
| when DEBIAN\_TAG is changed in .gitlab-ci.yml, and | ||||
| debian-test-install.sh when DEBIAN\_ARM64\_TAG is changed in | ||||
| .gitlab-ci.yml.  The resulting images are around 500MB, and are | ||||
| expected to change approximately weekly (though an individual | ||||
| developer working on them may produce many more images while trying to | ||||
| come up with a working MR!). | ||||
|  | ||||
| gitlab-runner is a client that polls gitlab.freedesktop.org for | ||||
| available jobs, with no inbound networking requirements.  Jobs can | ||||
| have tags, so we can have DUT-specific jobs that only run on runners | ||||
| with that tag marked in the gitlab UI. | ||||
|  | ||||
| Since dEQP takes a long time to run, we mark the job as "parallel" at | ||||
| some level, which spawns multiple jobs from one definition, and then | ||||
| deqp-runner.sh takes the corresponding fraction of the test list for | ||||
| that job. | ||||
|  | ||||
| To reduce dEQP runtime (or avoid tests with unreliable results), a | ||||
| deqp-runner.sh invocation can provide a list of tests to skip.  If | ||||
| your driver is not yet conformant, you can pass a list of expected | ||||
| failures, and the job will only fail on tests that aren't listed (look | ||||
| at the job's log for which specific tests failed). | ||||
|  | ||||
| ### DUT requirements | ||||
|  | ||||
| #### DUTs must have a stable kernel and GPU reset. | ||||
|  | ||||
| If the system goes down during a test run, that job will eventually | ||||
| time out and fail (default 1 hour).  However, if the kernel can't | ||||
| reliably reset the GPU on failure, bugs in one MR may leak into | ||||
| spurious failures in another MR.  This would be an unacceptable impact | ||||
| on Mesa developers working on other drivers. | ||||
|  | ||||
| #### DUTs must be able to run docker | ||||
|  | ||||
| The Mesa gitlab-runner based test architecture is built around docker, | ||||
| so that we can cache the debian package installation and CTS build | ||||
| step across multiple test runs.  Since the images are large and change | ||||
| approximately weekly, the DUTs also need to be running some script to | ||||
| prune stale docker images periodically in order to not run out of disk | ||||
| space as we rev those containers (perhaps [this | ||||
| script](https://gitlab.com/gitlab-org/gitlab-runner/issues/2980#note_169233611)). | ||||
|  | ||||
| Note that docker doesn't allow containers to be stored on NFS, and | ||||
| doesn't allow multiple docker daemons to interact with the same | ||||
| network block device, so you will probably need some sort of physical | ||||
| storage on your DUTs. | ||||
|  | ||||
| #### DUTs must be public | ||||
|  | ||||
| By including your device in .gitlab-ci.yml, you're effectively letting | ||||
| anyone on the internet run code on your device.  docker containers may | ||||
| provide some limited protection, but how much you trust that and what | ||||
| you do to mitigate hostile access is up to you. | ||||
|  | ||||
| #### DUTs must expose the dri device nodes to the containers. | ||||
|  | ||||
| Obviously, to get access to the HW, we need to pass the render node | ||||
| through.  This is done by adding `devices = ["/dev/dri"]` to the | ||||
| `runners.docker` section of /etc/gitlab-runner/config.toml. | ||||
|  | ||||
| ### HW CI farm expectations | ||||
|  | ||||
| To make sure that testing of one vendor's drivers doesn't block | ||||
| unrelated work by other vendors, we require that a given driver's test | ||||
| farm produces a spurious failure no more than once a week.  If every | ||||
| driver had CI and failed once a week, we would be seeing someone's | ||||
| code getting blocked on a spurious failure daily, which is an | ||||
| unacceptable cost to the project. | ||||
|  | ||||
| Additionally, the test farm needs to be able to provide a short enough | ||||
| turnaround time that people can regularly use the "Merge when pipeline | ||||
| succeeds" button successfully (until we get | ||||
| [marge-bot](https://github.com/smarkets/marge-bot) in place on | ||||
| freedesktop.org).  As a result, we require that the test farm be able | ||||
| to handle a whole pipeline's worth of jobs in less than 5 minutes (to | ||||
| compare, the build stage is about 10 minutes, if you could get all | ||||
| your jobs scheduled on the shared runners in time.). | ||||
|  | ||||
| If a test farm is short the HW to provide these guarantees, consider | ||||
| dropping tests to reduce runtime. | ||||
| `VK-GL-CTS/scripts/log/bottleneck_report.py` can help you find what | ||||
| tests were slow in a `results.qpa` file.  Or, you can have a job with | ||||
| no `parallel` field set and: | ||||
|  | ||||
| ``` | ||||
|   variables: | ||||
|     CI_NODE_INDEX: 1 | ||||
|     CI_NODE_TOTAL: 10 | ||||
| ``` | ||||
|  | ||||
| to just run 1/10th of the test list. | ||||
|  | ||||
| If a HW CI farm goes offline (network dies and all CI pipelines end up | ||||
| stalled) or its runners are consistenly spuriously failing (disk | ||||
| full?), and the maintainer is not immediately available to fix the | ||||
| issue, please push through an MR disabling that farm's jobs by adding | ||||
| '.' to the front of the jobs names until the maintainer can bring | ||||
| things back up.  If this happens, the farm maintainer should provide a | ||||
| report to mesa-dev@lists.freedesktop.org after the fact explaining | ||||
| what happened and what the mitigation plan is for that failure next | ||||
| time. | ||||
| @@ -1,46 +0,0 @@ | ||||
| CONFIG_LOCALVERSION="ccu" | ||||
|  | ||||
| CONFIG_DEBUG_KERNEL=y | ||||
|  | ||||
| CONFIG_DEVFREQ_GOV_PERFORMANCE=y | ||||
| CONFIG_DEVFREQ_GOV_POWERSAVE=y | ||||
| CONFIG_DEVFREQ_GOV_USERSPACE=y | ||||
| CONFIG_DEVFREQ_GOV_PASSIVE=y | ||||
| CONFIG_DEVFREQ_GOV_SIMPLE_ONDEMAND=y | ||||
|  | ||||
| CONFIG_DRM=y | ||||
| CONFIG_DRM_ROCKCHIP=y | ||||
| CONFIG_DRM_PANFROST=y | ||||
| CONFIG_DRM_LIMA=y | ||||
| CONFIG_DRM_PANEL_SIMPLE=y | ||||
| CONFIG_PWM_CROS_EC=y | ||||
| CONFIG_BACKLIGHT_PWM=y | ||||
|  | ||||
| CONFIG_ROCKCHIP_CDN_DP=n | ||||
|  | ||||
| CONFIG_SPI_ROCKCHIP=y | ||||
| CONFIG_PWM_ROCKCHIP=y | ||||
| CONFIG_PHY_ROCKCHIP_DP=y | ||||
| CONFIG_DWMAC_ROCKCHIP=y | ||||
|  | ||||
| CONFIG_MFD_RK808=y | ||||
| CONFIG_REGULATOR_RK808=y | ||||
| CONFIG_RTC_DRV_RK808=y | ||||
| CONFIG_COMMON_CLK_RK808=y | ||||
|  | ||||
| CONFIG_REGULATOR_FAN53555=y | ||||
| CONFIG_REGULATOR=y | ||||
|  | ||||
| CONFIG_REGULATOR_VCTRL=y | ||||
|  | ||||
| CONFIG_KASAN=n | ||||
| CONFIG_KASAN_INLINE=n | ||||
| CONFIG_STACKTRACE=n | ||||
|  | ||||
| CONFIG_TMPFS=y | ||||
|  | ||||
| CONFIG_PROVE_LOCKING=n | ||||
| CONFIG_DEBUG_LOCKDEP=n | ||||
| CONFIG_SOFTLOCKUP_DETECTOR=n | ||||
| CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC=n | ||||
|  | ||||
| @@ -1,83 +0,0 @@ | ||||
| CONFIG_LOCALVERSION="ccu" | ||||
|  | ||||
| CONFIG_DEBUG_KERNEL=y | ||||
|  | ||||
| CONFIG_DEVFREQ_GOV_PERFORMANCE=y | ||||
| CONFIG_DEVFREQ_GOV_POWERSAVE=y | ||||
| CONFIG_DEVFREQ_GOV_USERSPACE=y | ||||
| CONFIG_DEVFREQ_GOV_PASSIVE=y | ||||
|  | ||||
| CONFIG_DRM=y | ||||
| CONFIG_DRM_ROCKCHIP=y | ||||
| CONFIG_DRM_PANFROST=y | ||||
| CONFIG_DRM_LIMA=y | ||||
| CONFIG_DRM_PANEL_SIMPLE=y | ||||
| CONFIG_PWM_CROS_EC=y | ||||
| CONFIG_BACKLIGHT_PWM=y | ||||
|  | ||||
| CONFIG_ROCKCHIP_CDN_DP=n | ||||
|  | ||||
| CONFIG_SPI_ROCKCHIP=y | ||||
| CONFIG_PWM_ROCKCHIP=y | ||||
| CONFIG_PHY_ROCKCHIP_DP=y | ||||
| CONFIG_DWMAC_ROCKCHIP=y | ||||
| CONFIG_STMMAC_ETH=y | ||||
| CONFIG_TYPEC_FUSB302=y | ||||
| CONFIG_TYPEC=y | ||||
| CONFIG_TYPEC_TCPM=y | ||||
|  | ||||
| CONFIG_ARCH_ALPINE=n | ||||
| CONFIG_ARCH_BCM2835=n | ||||
| CONFIG_ARCH_BCM_IPROC=n | ||||
| CONFIG_ARCH_BERLIN=n | ||||
| CONFIG_ARCH_BRCMSTB=n | ||||
| CONFIG_ARCH_EXYNOS=n | ||||
| CONFIG_ARCH_K3=n | ||||
| CONFIG_ARCH_LAYERSCAPE=n | ||||
| CONFIG_ARCH_LG1K=n | ||||
| CONFIG_ARCH_HISI=n | ||||
| CONFIG_ARCH_MEDIATEK=n | ||||
| CONFIG_ARCH_MVEBU=n | ||||
| CONFIG_ARCH_QCOM=n | ||||
| CONFIG_ARCH_SEATTLE=n | ||||
| CONFIG_ARCH_SYNQUACER=n | ||||
| CONFIG_ARCH_RENESAS=n | ||||
| CONFIG_ARCH_R8A774A1=n | ||||
| CONFIG_ARCH_R8A774C0=n | ||||
| CONFIG_ARCH_R8A7795=n | ||||
| CONFIG_ARCH_R8A7796=n | ||||
| CONFIG_ARCH_R8A77965=n | ||||
| CONFIG_ARCH_R8A77970=n | ||||
| CONFIG_ARCH_R8A77980=n | ||||
| CONFIG_ARCH_R8A77990=n | ||||
| CONFIG_ARCH_R8A77995=n | ||||
| CONFIG_ARCH_STRATIX10=n | ||||
| CONFIG_ARCH_TEGRA=n | ||||
| CONFIG_ARCH_SPRD=n | ||||
| CONFIG_ARCH_THUNDER=n | ||||
| CONFIG_ARCH_THUNDER2=n | ||||
| CONFIG_ARCH_UNIPHIER=n | ||||
| CONFIG_ARCH_VEXPRESS=n | ||||
| CONFIG_ARCH_XGENE=n | ||||
| CONFIG_ARCH_ZX=n | ||||
| CONFIG_ARCH_ZYNQMP=n | ||||
|  | ||||
| CONFIG_ACPI=n | ||||
|  | ||||
| CONFIG_REGULATOR_FAN53555=y | ||||
| CONFIG_REGULATOR=y | ||||
|  | ||||
| CONFIG_REGULATOR_VCTRL=y | ||||
|  | ||||
| CONFIG_KASAN=n | ||||
| CONFIG_KASAN_INLINE=n | ||||
| CONFIG_STACKTRACE=n | ||||
|  | ||||
| CONFIG_TMPFS=y | ||||
|  | ||||
| CONFIG_PROVE_LOCKING=n | ||||
| CONFIG_DEBUG_LOCKDEP=n | ||||
| CONFIG_SOFTLOCKUP_DETECTOR=y | ||||
| CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC=y | ||||
|  | ||||
| CONFIG_DETECT_HUNG_TASK=y | ||||
| @@ -1,10 +0,0 @@ | ||||
| #!/bin/bash | ||||
|  | ||||
| set -ex | ||||
|  | ||||
| git clone https://gitlab.freedesktop.org/mesa/parallel-deqp-runner.git --depth 1 -b mesa-ci-2019-12-17 | ||||
| cd parallel-deqp-runner | ||||
| meson build/ $EXTRA_MESON_ARGS | ||||
| ninja -C build -j4 install | ||||
| cd .. | ||||
| rm -rf parallel-deqp-runner | ||||
| @@ -1,61 +0,0 @@ | ||||
| git config --global user.email "mesa@example.com" | ||||
| git config --global user.name "Mesa CI" | ||||
| # XXX: Use --depth 1 once we can drop the cherry-picks. | ||||
| git clone \ | ||||
|     https://github.com/KhronosGroup/VK-GL-CTS.git \ | ||||
|     -b opengl-es-cts-3.2.5.1 \ | ||||
|     /VK-GL-CTS | ||||
| pushd /VK-GL-CTS | ||||
| # Fix surfaceless build | ||||
| git cherry-pick -x 22f41e5e321c6dcd8569c4dad91bce89f06b3670 | ||||
| git cherry-pick -x 1daa8dff73161ea60ead965bd6c9f2a0a2165648 | ||||
|  | ||||
| # surfaceless links against libkms and such despite not using it. | ||||
| sed -i '/gbm/d' targets/surfaceless/surfaceless.cmake | ||||
| sed -i '/libkms/d' targets/surfaceless/surfaceless.cmake | ||||
| sed -i '/libgbm/d' targets/surfaceless/surfaceless.cmake | ||||
|  | ||||
| # --insecure is due to SSL cert failures hitting sourceforge for zlib and | ||||
| # libpng (sigh).  The archives get their checksums checked anyway, and git | ||||
| # always goes through ssh or https. | ||||
| python3 external/fetch_sources.py --insecure | ||||
|  | ||||
| mkdir -p /deqp | ||||
|  | ||||
| # Save the testlog stylesheets: | ||||
| cp doc/testlog-stylesheet/testlog.{css,xsl} /deqp | ||||
| popd | ||||
|  | ||||
| pushd /deqp | ||||
| cmake -G Ninja \ | ||||
|       -DDEQP_TARGET=surfaceless               \ | ||||
|       -DCMAKE_BUILD_TYPE=Release              \ | ||||
|       $EXTRA_CMAKE_ARGS                       \ | ||||
|       /VK-GL-CTS | ||||
| ninja | ||||
|  | ||||
| # Copy out the mustpass lists we want from a bunch of other junk. | ||||
| mkdir /deqp/mustpass | ||||
| for gles in gles2 gles3 gles31; do | ||||
|     cp \ | ||||
|         /deqp/external/openglcts/modules/gl_cts/data/mustpass/gles/aosp_mustpass/3.2.5.x/$gles-master.txt \ | ||||
|         /deqp/mustpass/$gles-master.txt | ||||
| done | ||||
|  | ||||
| # Save *some* executor utils, but otherwise strip things down | ||||
| # to reduct deqp build size: | ||||
| mkdir /deqp/executor.save | ||||
| cp /deqp/executor/testlog-to-* /deqp/executor.save | ||||
| rm -rf /deqp/executor | ||||
| mv /deqp/executor.save /deqp/executor | ||||
|  | ||||
| rm -rf /deqp/external | ||||
| rm -rf /deqp/modules/internal | ||||
| rm -rf /deqp/execserver | ||||
| rm -rf /deqp/modules/egl | ||||
| rm -rf /deqp/framework | ||||
| find -iname '*cmake*' -o -name '*ninja*' -o -name '*.o' -o -name '*.a' | xargs rm -rf | ||||
| ${STRIP_CMD:-strip} modules/*/deqp-* | ||||
| du -sh * | ||||
| rm -rf /VK-GL-CTS | ||||
| popd | ||||
| @@ -1,33 +0,0 @@ | ||||
| git clone --depth 1 \ | ||||
|     https://github.com/KhronosGroup/VK-GL-CTS.git \ | ||||
|     -b vulkan-cts-1.1.6.0 \ | ||||
|     /VK-GL-CTS | ||||
| cd /VK-GL-CTS | ||||
|  | ||||
| # --insecure is due to SSL cert failures hitting sourceforge for zlib and | ||||
| # libpng (sigh).  The archives get their checksums checked anyway, and git | ||||
| # always goes through ssh or https. | ||||
| python3 external/fetch_sources.py --insecure | ||||
|  | ||||
| mkdir -p /deqp | ||||
| cd /deqp | ||||
| cmake -G Ninja \ | ||||
|       -DDEQP_TARGET=x11_glx \ | ||||
|       -DCMAKE_BUILD_TYPE=Release \ | ||||
|       /VK-GL-CTS | ||||
| ninja -j4 | ||||
|  | ||||
| # Copy out the mustpass list we want. | ||||
| mkdir /deqp/mustpass | ||||
| cp /VK-GL-CTS/external/vulkancts/mustpass/master/vk-default.txt \ | ||||
|    /deqp/mustpass/vk-master.txt | ||||
|  | ||||
| rm -rf /deqp/modules/internal | ||||
| rm -rf /deqp/executor | ||||
| rm -rf /deqp/execserver | ||||
| rm -rf /deqp/modules/egl | ||||
| rm -rf /deqp/framework | ||||
| find -iname '*cmake*' -o -name '*ninja*' -o -name '*.o' -o -name '*.a' | xargs rm -rf | ||||
| strip external/vulkancts/modules/vulkan/deqp-vk | ||||
| du -sh * | ||||
| rm -rf /VK-GL-CTS | ||||
| @@ -1,13 +0,0 @@ | ||||
| #!/bin/bash | ||||
|  | ||||
| set -ex | ||||
|  | ||||
| git clone https://gitlab.freedesktop.org/mesa/piglit.git --single-branch --no-checkout /piglit | ||||
| pushd /piglit | ||||
| git checkout 8771c3860505db2bcf4877216221d774bf90af6b | ||||
| patch -p1 <$OLDPWD/.gitlab-ci/piglit/disable-vs_in.diff | ||||
| cmake -G Ninja -DCMAKE_BUILD_TYPE=Release | ||||
| ninja -j4 | ||||
| find -name .git -o -name '*ninja*' -o -iname '*cmake*' -o -name '*.[chao]' | xargs rm -rf | ||||
| rm -rf target_api | ||||
| popd | ||||
| @@ -1,74 +0,0 @@ | ||||
| #!/bin/bash | ||||
|  | ||||
| set -e | ||||
| set -o xtrace | ||||
|  | ||||
| ############### Install packages for building | ||||
| apt-get -y install ca-certificates | ||||
| sed -i -e 's/http:\/\/deb/https:\/\/deb/g' /etc/apt/sources.list | ||||
| echo 'deb https://deb.debian.org/debian buster-backports main' >/etc/apt/sources.list.d/backports.list | ||||
| dpkg --add-architecture armhf | ||||
| apt-get update | ||||
| apt-get -y install \ | ||||
| 	bc \ | ||||
| 	bison \ | ||||
| 	ccache \ | ||||
| 	cmake \ | ||||
| 	cpio \ | ||||
| 	crossbuild-essential-armhf \ | ||||
| 	debootstrap \ | ||||
| 	flex \ | ||||
| 	g++ \ | ||||
| 	gettext \ | ||||
| 	git \ | ||||
| 	lavacli \ | ||||
| 	libdrm-dev:armhf \ | ||||
| 	libegl1-mesa-dev \ | ||||
| 	libegl1-mesa-dev:armhf \ | ||||
| 	libelf-dev \ | ||||
| 	libelf-dev:armhf \ | ||||
| 	libexpat1-dev \ | ||||
| 	libexpat1-dev:armhf \ | ||||
| 	libgles2-mesa-dev \ | ||||
| 	libgles2-mesa-dev:armhf \ | ||||
| 	libpng-dev \ | ||||
| 	libpng-dev:armhf \ | ||||
| 	libssl-dev \ | ||||
| 	libvulkan-dev \ | ||||
| 	libvulkan-dev:armhf \ | ||||
| 	llvm-7-dev:armhf \ | ||||
| 	llvm-8-dev \ | ||||
| 	meson \ | ||||
| 	pkg-config \ | ||||
| 	python \ | ||||
| 	python3-mako \ | ||||
| 	unzip \ | ||||
| 	wget \ | ||||
| 	zlib1g-dev | ||||
|  | ||||
| # dependencies where we want a specific version | ||||
| export LIBDRM_VERSION=libdrm-2.4.100 | ||||
|  | ||||
| wget https://dri.freedesktop.org/libdrm/$LIBDRM_VERSION.tar.bz2 | ||||
| tar -xvf $LIBDRM_VERSION.tar.bz2 && rm $LIBDRM_VERSION.tar.bz2 | ||||
| cd $LIBDRM_VERSION; meson build -D vc4=true -D freedreno=true -D etnaviv=true; ninja -j4 -C build install; cd .. | ||||
| rm -rf $LIBDRM_VERSION | ||||
|  | ||||
| ############### Generate cross build file for Meson | ||||
|  | ||||
| cross_file="/cross_file-armhf.txt" | ||||
| /usr/share/meson/debcrossgen --arch armhf -o "$cross_file" | ||||
| # Explicitly set ccache path for cross compilers | ||||
| sed -i "s|/usr/bin/\([^-]*\)-linux-gnu\([^-]*\)-g|/usr/lib/ccache/\\1-linux-gnu\\2-g|g" "$cross_file" | ||||
| # Don't need wrapper for armhf executables | ||||
| sed -i -e '/\[properties\]/a\' -e "needs_exe_wrapper = False" "$cross_file" | ||||
|  | ||||
| ############### Generate kernel, ramdisk, test suites, etc for LAVA jobs | ||||
|  | ||||
| DEBIAN_ARCH=arm64 . .gitlab-ci/container/lava_arm.sh | ||||
| DEBIAN_ARCH=armhf . .gitlab-ci/container/lava_arm.sh | ||||
|  | ||||
| apt-get purge -y \ | ||||
|         wget | ||||
|  | ||||
| apt-get autoremove -y --purge | ||||
| @@ -1,64 +0,0 @@ | ||||
| #!/bin/bash | ||||
|  | ||||
| set -e | ||||
| set -o xtrace | ||||
|  | ||||
| ############### Install packages for building | ||||
| apt-get -y install ca-certificates | ||||
| sed -i -e 's/http:\/\/deb/https:\/\/deb/g' /etc/apt/sources.list | ||||
| echo 'deb https://deb.debian.org/debian buster-backports main' >/etc/apt/sources.list.d/backports.list | ||||
| apt-get update | ||||
| apt-get -y install \ | ||||
| 	bzip2 \ | ||||
| 	cmake \ | ||||
| 	g++ \ | ||||
| 	gcc \ | ||||
| 	git \ | ||||
| 	libc6-dev \ | ||||
| 	libdrm-nouveau2 \ | ||||
| 	libexpat1 \ | ||||
| 	libgbm-dev \ | ||||
| 	libgbm-dev \ | ||||
| 	libgles2-mesa-dev \ | ||||
| 	libllvm8 \ | ||||
| 	libpng16-16 \ | ||||
| 	libpng-dev \ | ||||
| 	libvulkan-dev \ | ||||
| 	libvulkan1 \ | ||||
| 	meson \ | ||||
| 	netcat \ | ||||
| 	pkg-config \ | ||||
| 	procps \ | ||||
| 	python \ | ||||
| 	waffle-utils \ | ||||
| 	wget \ | ||||
| 	zlib1g | ||||
|  | ||||
| ############### Build dEQP runner | ||||
|  | ||||
| . .gitlab-ci/build-cts-runner.sh | ||||
|  | ||||
| ############### Build dEQP GL | ||||
|  | ||||
| . .gitlab-ci/build-deqp-gl.sh | ||||
|  | ||||
|  | ||||
| ############### Uninstall the build software | ||||
|  | ||||
| apt-get purge -y \ | ||||
|         bzip2 \ | ||||
|         cmake \ | ||||
|         g++ \ | ||||
|         gcc \ | ||||
|         git \ | ||||
|         libc6-dev \ | ||||
|         libgbm-dev \ | ||||
|         libgles2-mesa-dev \ | ||||
|         libpng-dev \ | ||||
|         libvulkan-dev \ | ||||
|         meson \ | ||||
|         pkg-config \ | ||||
|         python \ | ||||
|         wget | ||||
|  | ||||
| apt-get autoremove -y --purge | ||||
| @@ -1,63 +0,0 @@ | ||||
| #!/bin/bash | ||||
|  | ||||
| set -e | ||||
| set -o xtrace | ||||
|  | ||||
| if [[ "$DEBIAN_ARCH" = "arm64" ]]; then | ||||
|     GCC_ARCH="aarch64-linux-gnu" | ||||
|     KERNEL_ARCH="arm64" | ||||
|     DEFCONFIG="arch/arm64/configs/defconfig" | ||||
|     DEVICE_TREES="arch/arm64/boot/dts/rockchip/rk3399-gru-kevin.dtb arch/arm64/boot/dts/amlogic/meson-gxl-s905x-libretech-cc.dtb arch/arm64/boot/dts/allwinner/sun50i-h6-pine-h64.dtb arch/arm64/boot/dts/amlogic/meson-gxm-khadas-vim2.dtb" | ||||
|     KERNEL_IMAGE_NAME="Image" | ||||
| else | ||||
|     GCC_ARCH="arm-linux-gnueabihf" | ||||
|     KERNEL_ARCH="arm" | ||||
|     DEFCONFIG="arch/arm/configs/multi_v7_defconfig" | ||||
|     DEVICE_TREES="arch/arm/boot/dts/rk3288-veyron-jaq.dtb arch/arm/boot/dts/sun8i-h3-libretech-all-h3-cc.dtb" | ||||
|     KERNEL_IMAGE_NAME="zImage" | ||||
| fi | ||||
|  | ||||
| ############### Build dEQP runner | ||||
| if [[ "$DEBIAN_ARCH" = "armhf" ]]; then | ||||
|     EXTRA_MESON_ARGS="--cross-file /cross_file-armhf.txt" | ||||
| fi | ||||
| . .gitlab-ci/build-cts-runner.sh | ||||
| mkdir -p /lava-files/rootfs-${DEBIAN_ARCH}/usr/bin | ||||
| mv /usr/local/bin/deqp-runner /lava-files/rootfs-${DEBIAN_ARCH}/usr/bin/. | ||||
|  | ||||
|  | ||||
| ############### Build dEQP | ||||
| EXTRA_CMAKE_ARGS="-DCMAKE_C_COMPILER=${GCC_ARCH}-gcc -DCMAKE_CXX_COMPILER=${GCC_ARCH}-g++" | ||||
| STRIP_CMD="${GCC_ARCH}-strip" | ||||
| . .gitlab-ci/build-deqp-gl.sh | ||||
| mv /deqp /lava-files/rootfs-${DEBIAN_ARCH}/. | ||||
|  | ||||
|  | ||||
| ############### Cross-build kernel | ||||
| KERNEL_URL="https://gitlab.freedesktop.org/tomeu/linux/-/archive/v5.5-rc5-panfrost-fixes/linux-v5.5-rc5-panfrost-fixes.tar.gz" | ||||
|  | ||||
| if [[ "$DEBIAN_ARCH" = "armhf" ]]; then | ||||
|     export ARCH=${KERNEL_ARCH} | ||||
|     export CROSS_COMPILE="${GCC_ARCH}-" | ||||
| fi | ||||
|  | ||||
| mkdir -p kernel | ||||
| wget -qO- ${KERNEL_URL} | tar -xz --strip-components=1 -C kernel | ||||
| pushd kernel | ||||
| ./scripts/kconfig/merge_config.sh ${DEFCONFIG} ../.gitlab-ci/${KERNEL_ARCH}.config | ||||
| make -j12 ${KERNEL_IMAGE_NAME} dtbs | ||||
| cp arch/${KERNEL_ARCH}/boot/${KERNEL_IMAGE_NAME} /lava-files/. | ||||
| cp ${DEVICE_TREES} /lava-files/. | ||||
| popd | ||||
| rm -rf kernel | ||||
|  | ||||
|  | ||||
| ############### Create rootfs | ||||
| set +e | ||||
| debootstrap --variant=minbase --arch=${DEBIAN_ARCH} testing /lava-files/rootfs-${DEBIAN_ARCH}/ http://deb.debian.org/debian | ||||
| cat /lava-files/rootfs-${DEBIAN_ARCH}/debootstrap/debootstrap.log | ||||
| set -e | ||||
|  | ||||
| cp .gitlab-ci/create-rootfs.sh /lava-files/rootfs-${DEBIAN_ARCH}/. | ||||
| chroot /lava-files/rootfs-${DEBIAN_ARCH} sh /create-rootfs.sh | ||||
| rm /lava-files/rootfs-${DEBIAN_ARCH}/create-rootfs.sh | ||||
| @@ -1,52 +0,0 @@ | ||||
| -----BEGIN PGP PUBLIC KEY BLOCK----- | ||||
| Version: GnuPG v1.4.12 (GNU/Linux) | ||||
|  | ||||
| mQINBFE9lCwBEADi0WUAApM/mgHJRU8lVkkw0CHsZNpqaQDNaHefD6Rw3S4LxNmM | ||||
| EZaOTkhP200XZM8lVdbfUW9xSjA3oPldc1HG26NjbqqCmWpdo2fb+r7VmU2dq3NM | ||||
| R18ZlKixiLDE6OUfaXWKamZsXb6ITTYmgTO6orQWYrnW6ckYHSeaAkW0wkDAryl2 | ||||
| B5v8aoFnQ1rFiVEMo4NGzw4UX+MelF7rxaaregmKVTPiqCOSPJ1McC1dHFN533FY | ||||
| Wh/RVLKWo6npu+owtwYFQW+zyQhKzSIMvNujFRzhIxzxR9Gn87MoLAyfgKEzrbbT | ||||
| DhqqNXTxS4UMUKCQaO93TzetX/EBrRpJj+vP640yio80h4Dr5pAd7+LnKwgpTDk1 | ||||
| G88bBXJAcPZnTSKu9I2c6KY4iRNbvRz4i+ZdwwZtdW4nSdl2792L7Sl7Nc44uLL/ | ||||
| ZqkKDXEBF6lsX5XpABwyK89S/SbHOytXv9o4puv+65Ac5/UShspQTMSKGZgvDauU | ||||
| cs8kE1U9dPOqVNCYq9Nfwinkf6RxV1k1+gwtclxQuY7UpKXP0hNAXjAiA5KS5Crq | ||||
| 7aaJg9q2F4bub0mNU6n7UI6vXguF2n4SEtzPRk6RP+4TiT3bZUsmr+1ktogyOJCc | ||||
| Ha8G5VdL+NBIYQthOcieYCBnTeIH7D3Sp6FYQTYtVbKFzmMK+36ERreL/wARAQAB | ||||
| tD1TeWx2ZXN0cmUgTGVkcnUgLSBEZWJpYW4gTExWTSBwYWNrYWdlcyA8c3lsdmVz | ||||
| dHJlQGRlYmlhbi5vcmc+iQI4BBMBAgAiBQJRPZQsAhsDBgsJCAcDAgYVCAIJCgsE | ||||
| FgIDAQIeAQIXgAAKCRAVz00Yr090Ibx+EADArS/hvkDF8juWMXxh17CgR0WZlHCC | ||||
| 9CTBWkg5a0bNN/3bb97cPQt/vIKWjQtkQpav6/5JTVCSx2riL4FHYhH0iuo4iAPR | ||||
| udC7Cvg8g7bSPrKO6tenQZNvQm+tUmBHgFiMBJi92AjZ/Qn1Shg7p9ITivFxpLyX | ||||
| wpmnF1OKyI2Kof2rm4BFwfSWuf8Fvh7kDMRLHv+MlnK/7j/BNpKdozXxLcwoFBmn | ||||
| l0WjpAH3OFF7Pvm1LJdf1DjWKH0Dc3sc6zxtmBR/KHHg6kK4BGQNnFKujcP7TVdv | ||||
| gMYv84kun14pnwjZcqOtN3UJtcx22880DOQzinoMs3Q4w4o05oIF+sSgHViFpc3W | ||||
| R0v+RllnH05vKZo+LDzc83DQVrdwliV12eHxrMQ8UYg88zCbF/cHHnlzZWAJgftg | ||||
| hB08v1BKPgYRUzwJ6VdVqXYcZWEaUJmQAPuAALyZESw94hSo28FAn0/gzEc5uOYx | ||||
| K+xG/lFwgAGYNb3uGM5m0P6LVTfdg6vDwwOeTNIExVk3KVFXeSQef2ZMkhwA7wya | ||||
| KJptkb62wBHFE+o9TUdtMCY6qONxMMdwioRE5BYNwAsS1PnRD2+jtlI0DzvKHt7B | ||||
| MWd8hnoUKhMeZ9TNmo+8CpsAtXZcBho0zPGz/R8NlJhAWpdAZ1CmcPo83EW86Yq7 | ||||
| BxQUKnNHcwj2ebkCDQRRPZQsARAA4jxYmbTHwmMjqSizlMJYNuGOpIidEdx9zQ5g | ||||
| zOr431/VfWq4S+VhMDhs15j9lyml0y4ok215VRFwrAREDg6UPMr7ajLmBQGau0Fc | ||||
| bvZJ90l4NjXp5p0NEE/qOb9UEHT7EGkEhaZ1ekkWFTWCgsy7rRXfZLxB6sk7pzLC | ||||
| DshyW3zjIakWAnpQ5j5obiDy708pReAuGB94NSyb1HoW/xGsGgvvCw4r0w3xPStw | ||||
| F1PhmScE6NTBIfLliea3pl8vhKPlCh54Hk7I8QGjo1ETlRP4Qll1ZxHJ8u25f/ta | ||||
| RES2Aw8Hi7j0EVcZ6MT9JWTI83yUcnUlZPZS2HyeWcUj+8nUC8W4N8An+aNps9l/ | ||||
| 21inIl2TbGo3Yn1JQLnA1YCoGwC34g8QZTJhElEQBN0X29ayWW6OdFx8MDvllbBV | ||||
| ymmKq2lK1U55mQTfDli7S3vfGz9Gp/oQwZ8bQpOeUkc5hbZszYwP4RX+68xDPfn+ | ||||
| M9udl+qW9wu+LyePbW6HX90LmkhNkkY2ZzUPRPDHZANU5btaPXc2H7edX4y4maQa | ||||
| xenqD0lGh9LGz/mps4HEZtCI5CY8o0uCMF3lT0XfXhuLksr7Pxv57yue8LLTItOJ | ||||
| d9Hmzp9G97SRYYeqU+8lyNXtU2PdrLLq7QHkzrsloG78lCpQcalHGACJzrlUWVP/ | ||||
| fN3Ht3kAEQEAAYkCHwQYAQIACQUCUT2ULAIbDAAKCRAVz00Yr090IbhWEADbr50X | ||||
| OEXMIMGRLe+YMjeMX9NG4jxs0jZaWHc/WrGR+CCSUb9r6aPXeLo+45949uEfdSsB | ||||
| pbaEdNWxF5Vr1CSjuO5siIlgDjmT655voXo67xVpEN4HhMrxugDJfCa6z97P0+ML | ||||
| PdDxim57uNqkam9XIq9hKQaurxMAECDPmlEXI4QT3eu5qw5/knMzDMZj4Vi6hovL | ||||
| wvvAeLHO/jsyfIdNmhBGU2RWCEZ9uo/MeerPHtRPfg74g+9PPfP6nyHD2Wes6yGd | ||||
| oVQwtPNAQD6Cj7EaA2xdZYLJ7/jW6yiPu98FFWP74FN2dlyEA2uVziLsfBrgpS4l | ||||
| tVOlrO2YzkkqUGrybzbLpj6eeHx+Cd7wcjI8CalsqtL6cG8cUEjtWQUHyTbQWAgG | ||||
| 5VPEgIAVhJ6RTZ26i/G+4J8neKyRs4vz+57UGwY6zI4AB1ZcWGEE3Bf+CDEDgmnP | ||||
| LSwbnHefK9IljT9XU98PelSryUO/5UPw7leE0akXKB4DtekToO226px1VnGp3Bov | ||||
| 1GBGvpHvL2WizEwdk+nfk8LtrLzej+9FtIcq3uIrYnsac47Pf7p0otcFeTJTjSq3 | ||||
| krCaoG4Hx0zGQG2ZFpHrSrZTVy6lxvIdfi0beMgY6h78p6M9eYZHQHc02DjFkQXN | ||||
| bXb5c6gCHESH5PXwPU4jQEE7Ib9J6sbk7ZT2Mw== | ||||
| =j+4q | ||||
| -----END PGP PUBLIC KEY BLOCK----- | ||||
| @@ -1,220 +0,0 @@ | ||||
| #!/bin/bash | ||||
|  | ||||
| set -e | ||||
| set -o xtrace | ||||
|  | ||||
| export DEBIAN_FRONTEND=noninteractive | ||||
|  | ||||
| CROSS_ARCHITECTURES="i386" | ||||
| for arch in $CROSS_ARCHITECTURES; do | ||||
|     dpkg --add-architecture $arch | ||||
| done | ||||
|  | ||||
| apt-get install -y \ | ||||
|       ca-certificates \ | ||||
|       gnupg \ | ||||
|       unzip \ | ||||
|       wget | ||||
|  | ||||
| # Upstream LLVM package repository | ||||
| apt-key add .gitlab-ci/container/llvm-snapshot.gpg.key | ||||
| echo "deb https://apt.llvm.org/buster/ llvm-toolchain-buster-9 main" >/etc/apt/sources.list.d/llvm9.list | ||||
|  | ||||
| sed -i -e 's/http:\/\/deb/https:\/\/deb/g' /etc/apt/sources.list | ||||
| echo 'deb https://deb.debian.org/debian buster-backports main' >/etc/apt/sources.list.d/backports.list | ||||
|  | ||||
| apt-get update | ||||
|  | ||||
| # Use newer packages from backports by default | ||||
| cat >/etc/apt/preferences <<EOF | ||||
| Package: * | ||||
| Pin: release a=buster-backports | ||||
| Pin-Priority: 500 | ||||
| EOF | ||||
|  | ||||
| apt-get dist-upgrade -y | ||||
|  | ||||
| apt-get install -y --no-remove \ | ||||
|       autoconf \ | ||||
|       automake \ | ||||
|       autotools-dev \ | ||||
|       bison \ | ||||
|       clang-9 \ | ||||
|       cmake \ | ||||
|       flex \ | ||||
|       g++ \ | ||||
|       gcc \ | ||||
|       gettext \ | ||||
|       git \ | ||||
|       libclang-6.0-dev \ | ||||
|       libclang-7-dev \ | ||||
|       libclang-8-dev \ | ||||
|       libclang-9-dev \ | ||||
|       libclc-dev \ | ||||
|       libelf-dev \ | ||||
|       libepoxy-dev \ | ||||
|       libexpat1-dev \ | ||||
|       libgbm-dev \ | ||||
|       libgtk-3-dev \ | ||||
|       libomxil-bellagio-dev \ | ||||
|       libpciaccess-dev \ | ||||
|       libtool \ | ||||
|       libunwind-dev \ | ||||
|       libva-dev \ | ||||
|       libvdpau-dev \ | ||||
|       libvulkan-dev \ | ||||
|       libx11-dev \ | ||||
|       libx11-xcb-dev \ | ||||
|       libxdamage-dev \ | ||||
|       libxext-dev \ | ||||
|       libxrandr-dev \ | ||||
|       libxrender-dev \ | ||||
|       libxshmfence-dev \ | ||||
|       libxvmc-dev \ | ||||
|       libxxf86vm-dev \ | ||||
|       llvm-6.0-dev \ | ||||
|       llvm-7-dev \ | ||||
|       llvm-8-dev \ | ||||
|       llvm-9-dev \ | ||||
|       meson \ | ||||
|       pkg-config \ | ||||
|       python-mako \ | ||||
|       python3-mako \ | ||||
|       scons \ | ||||
|       x11proto-dri2-dev \ | ||||
|       x11proto-gl-dev \ | ||||
|       x11proto-randr-dev \ | ||||
|       xz-utils \ | ||||
|       zlib1g-dev | ||||
|  | ||||
| # Cross-build Mesa deps | ||||
| for arch in $CROSS_ARCHITECTURES; do | ||||
|     apt-get install -y --no-remove \ | ||||
|             crossbuild-essential-${arch} \ | ||||
|             libdrm-dev:${arch} \ | ||||
|             libelf-dev:${arch} \ | ||||
|             libexpat1-dev:${arch} | ||||
| done | ||||
|  | ||||
| # for 64bit windows cross-builds | ||||
| apt-get install -y --no-remove \ | ||||
|     libz-mingw-w64-dev \ | ||||
|     mingw-w64 \ | ||||
|     wine \ | ||||
|     wine32 \ | ||||
|     wine64 | ||||
|  | ||||
| # Debian's pkg-config wrapers for mingw are broken, and there's no sign that | ||||
| # they're going to be fixed, so we'll just have to fix it ourselves | ||||
| # https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=930492 | ||||
| cat >/usr/local/bin/x86_64-w64-mingw32-pkg-config <<EOF | ||||
| #!/bin/sh | ||||
|  | ||||
| PKG_CONFIG_LIBDIR=/usr/x86_64-w64-mingw32/lib/pkgconfig pkg-config \$@ | ||||
| EOF | ||||
| chmod +x /usr/local/bin/x86_64-w64-mingw32-pkg-config | ||||
|  | ||||
| # for the vulkan overlay layer | ||||
| wget https://github.com/KhronosGroup/glslang/releases/download/master-tot/glslang-master-linux-Release.zip | ||||
| unzip glslang-master-linux-Release.zip bin/glslangValidator | ||||
| install -m755 bin/glslangValidator /usr/local/bin/ | ||||
| rm bin/glslangValidator glslang-master-linux-Release.zip | ||||
|  | ||||
|  | ||||
| # dependencies where we want a specific version | ||||
| export              XORG_RELEASES=https://xorg.freedesktop.org/releases/individual | ||||
| export               XCB_RELEASES=https://xcb.freedesktop.org/dist | ||||
| export           WAYLAND_RELEASES=https://wayland.freedesktop.org/releases | ||||
|  | ||||
| export         XORGMACROS_VERSION=util-macros-1.19.0 | ||||
| export             LIBDRM_VERSION=libdrm-2.4.100 | ||||
| export           XCBPROTO_VERSION=xcb-proto-1.13 | ||||
| export             LIBXCB_VERSION=libxcb-1.13 | ||||
| export         LIBWAYLAND_VERSION=wayland-1.15.0 | ||||
| export  WAYLAND_PROTOCOLS_VERSION=wayland-protocols-1.12 | ||||
|  | ||||
| wget $XORG_RELEASES/util/$XORGMACROS_VERSION.tar.bz2 | ||||
| tar -xvf $XORGMACROS_VERSION.tar.bz2 && rm $XORGMACROS_VERSION.tar.bz2 | ||||
| cd $XORGMACROS_VERSION; ./configure; make install; cd .. | ||||
| rm -rf $XORGMACROS_VERSION | ||||
|  | ||||
| wget $XCB_RELEASES/$XCBPROTO_VERSION.tar.bz2 | ||||
| tar -xvf $XCBPROTO_VERSION.tar.bz2 && rm $XCBPROTO_VERSION.tar.bz2 | ||||
| cd $XCBPROTO_VERSION; ./configure; make install; cd .. | ||||
| rm -rf $XCBPROTO_VERSION | ||||
|  | ||||
| wget $XCB_RELEASES/$LIBXCB_VERSION.tar.bz2 | ||||
| tar -xvf $LIBXCB_VERSION.tar.bz2 && rm $LIBXCB_VERSION.tar.bz2 | ||||
| cd $LIBXCB_VERSION; ./configure; make install; cd .. | ||||
| rm -rf $LIBXCB_VERSION | ||||
|  | ||||
| wget https://dri.freedesktop.org/libdrm/$LIBDRM_VERSION.tar.bz2 | ||||
| tar -xvf $LIBDRM_VERSION.tar.bz2 && rm $LIBDRM_VERSION.tar.bz2 | ||||
| cd $LIBDRM_VERSION; meson build -D vc4=true -D freedreno=true -D etnaviv=true; ninja -j4 -C build install; cd .. | ||||
| rm -rf $LIBDRM_VERSION | ||||
|  | ||||
| wget $WAYLAND_RELEASES/$LIBWAYLAND_VERSION.tar.xz | ||||
| tar -xvf $LIBWAYLAND_VERSION.tar.xz && rm $LIBWAYLAND_VERSION.tar.xz | ||||
| cd $LIBWAYLAND_VERSION; ./configure --enable-libraries --without-host-scanner --disable-documentation --disable-dtd-validation; make install; cd .. | ||||
| rm -rf $LIBWAYLAND_VERSION | ||||
|  | ||||
| wget $WAYLAND_RELEASES/$WAYLAND_PROTOCOLS_VERSION.tar.xz | ||||
| tar -xvf $WAYLAND_PROTOCOLS_VERSION.tar.xz && rm $WAYLAND_PROTOCOLS_VERSION.tar.xz | ||||
| cd $WAYLAND_PROTOCOLS_VERSION; ./configure; make install; cd .. | ||||
| rm -rf $WAYLAND_PROTOCOLS_VERSION | ||||
|  | ||||
|  | ||||
| # The version of libglvnd-dev in debian is too old | ||||
| # Check this page to see when this local compilation can be dropped in favour of the package: | ||||
| # https://packages.debian.org/libglvnd-dev | ||||
| GLVND_VERSION=1.2.0 | ||||
| wget https://gitlab.freedesktop.org/glvnd/libglvnd/-/archive/v$GLVND_VERSION/libglvnd-v$GLVND_VERSION.tar.gz | ||||
| tar -xvf libglvnd-v$GLVND_VERSION.tar.gz && rm libglvnd-v$GLVND_VERSION.tar.gz | ||||
| pushd libglvnd-v$GLVND_VERSION; ./autogen.sh; ./configure; make install; popd | ||||
| rm -rf libglvnd-v$GLVND_VERSION | ||||
|  | ||||
|  | ||||
| pushd /usr/local | ||||
| git clone https://gitlab.freedesktop.org/mesa/shader-db.git --depth 1 | ||||
| rm -rf shader-db/.git | ||||
| cd shader-db | ||||
| make | ||||
| popd | ||||
|  | ||||
| # Use ccache to speed up builds | ||||
| apt-get install -y --no-remove ccache | ||||
|  | ||||
| # We need xmllint to validate the XML files in Mesa | ||||
| apt-get install -y --no-remove libxml2-utils | ||||
|  | ||||
|  | ||||
| # Generate cross build files for Meson | ||||
| for arch in $CROSS_ARCHITECTURES; do | ||||
|   cross_file="/cross_file-$arch.txt" | ||||
|   /usr/share/meson/debcrossgen --arch "$arch" -o "$cross_file" | ||||
|   # Explicitly set ccache path for cross compilers | ||||
|   sed -i "s|/usr/bin/\([^-]*\)-linux-gnu\([^-]*\)-g|/usr/lib/ccache/\\1-linux-gnu\\2-g|g" "$cross_file" | ||||
|   if [ "$arch" = "i386" ]; then | ||||
|     # Work around a bug in debcrossgen that should be fixed in the next release | ||||
|     sed -i "s|cpu_family = 'i686'|cpu_family = 'x86'|g" "$cross_file" | ||||
|     # Don't need wrapper for i386 executables | ||||
|     sed -i -e '/\[properties\]/a\' -e "needs_exe_wrapper = False" "$cross_file" | ||||
|   fi | ||||
| done | ||||
|  | ||||
|  | ||||
| ############### Uninstall the build software | ||||
|  | ||||
| apt-get purge -y \ | ||||
|       autoconf \ | ||||
|       automake \ | ||||
|       autotools-dev \ | ||||
|       cmake \ | ||||
|       git \ | ||||
|       gnupg \ | ||||
|       libgbm-dev \ | ||||
|       libtool \ | ||||
|       unzip \ | ||||
|       wget | ||||
|  | ||||
| apt-get autoremove -y --purge | ||||
| @@ -1,59 +0,0 @@ | ||||
| #!/bin/bash | ||||
|  | ||||
| set -e | ||||
| set -o xtrace | ||||
|  | ||||
| export DEBIAN_FRONTEND=noninteractive | ||||
|  | ||||
| apt-get install -y \ | ||||
|       apt-transport-https \ | ||||
|       ca-certificates | ||||
|  | ||||
| sed -i -e 's/http:\/\/deb/https:\/\/deb/g' /etc/apt/sources.list | ||||
| echo 'deb https://deb.debian.org/debian stretch-backports main' >/etc/apt/sources.list.d/backports.list | ||||
|  | ||||
| apt-get update | ||||
|  | ||||
| # Use newer packages from backports by default | ||||
| cat >/etc/apt/preferences <<EOF | ||||
| Package: * | ||||
| Pin: release a=stretch-backports | ||||
| Pin-Priority: 500 | ||||
| EOF | ||||
|  | ||||
| apt-get dist-upgrade -y | ||||
|  | ||||
| apt-get install -y --no-remove \ | ||||
|       llvm-3.9-dev \ | ||||
|       libclang-3.9-dev \ | ||||
|       llvm-4.0-dev \ | ||||
|       libclang-4.0-dev \ | ||||
|       llvm-5.0-dev \ | ||||
|       libclang-5.0-dev \ | ||||
|       g++ \ | ||||
|       bzip2 \ | ||||
|       ccache \ | ||||
|       zlib1g-dev \ | ||||
|       pkg-config \ | ||||
|       gcc \ | ||||
|       git \ | ||||
|       libepoxy-dev \ | ||||
|       libclc-dev \ | ||||
|       xz-utils \ | ||||
|       libdrm-dev \ | ||||
|       libexpat1-dev \ | ||||
|       libelf-dev \ | ||||
|       libunwind-dev \ | ||||
|       libpng-dev \ | ||||
|       python-mako \ | ||||
|       python3-mako \ | ||||
|       bison \ | ||||
|       flex \ | ||||
|       gettext \ | ||||
|       scons \ | ||||
|       meson | ||||
|  | ||||
|  | ||||
| ############### Uninstall unused packages | ||||
|  | ||||
| apt-get autoremove -y --purge | ||||
| @@ -1,96 +0,0 @@ | ||||
| #!/bin/bash | ||||
|  | ||||
| set -e | ||||
| set -o xtrace | ||||
|  | ||||
| export DEBIAN_FRONTEND=noninteractive | ||||
|  | ||||
| apt-get install -y \ | ||||
|         ca-certificates \ | ||||
|         gnupg \ | ||||
|  | ||||
| # Upstream LLVM package repository | ||||
| apt-key add .gitlab-ci/container/llvm-snapshot.gpg.key | ||||
| echo "deb https://apt.llvm.org/buster/ llvm-toolchain-buster-9 main" >/etc/apt/sources.list.d/llvm9.list | ||||
|  | ||||
| sed -i -e 's/http:\/\/deb/https:\/\/deb/g' /etc/apt/sources.list | ||||
| echo 'deb https://deb.debian.org/debian buster-backports main' >/etc/apt/sources.list.d/backports.list | ||||
|  | ||||
| apt-get update | ||||
|  | ||||
| # Use newer packages from backports by default | ||||
| cat >/etc/apt/preferences <<EOF | ||||
| Package: * | ||||
| Pin: release a=buster-backports | ||||
| Pin-Priority: 500 | ||||
| EOF | ||||
|  | ||||
| apt-get dist-upgrade -y | ||||
|  | ||||
| apt-get install -y --no-remove \ | ||||
|       cmake \ | ||||
|       g++ \ | ||||
|       git \ | ||||
|       gcc \ | ||||
|       libexpat1 \ | ||||
|       libgbm-dev \ | ||||
|       libgles2-mesa-dev \ | ||||
|       libpng16-16 \ | ||||
|       libpng-dev \ | ||||
|       libvulkan1 \ | ||||
|       libvulkan-dev \ | ||||
|       libwaffle-dev \ | ||||
|       libwayland-server0 \ | ||||
|       libxcb-xfixes0 \ | ||||
|       libxkbcommon0 \ | ||||
|       libxkbcommon-dev \ | ||||
|       libxrender1 \ | ||||
|       libxrender-dev \ | ||||
|       libllvm9 \ | ||||
|       meson \ | ||||
|       patch \ | ||||
|       pkg-config \ | ||||
|       python3-mako \ | ||||
|       python3-numpy \ | ||||
|       python3-six \ | ||||
|       python \ | ||||
|       waffle-utils \ | ||||
|       xauth \ | ||||
|       xvfb \ | ||||
|       zlib1g | ||||
|  | ||||
|  | ||||
| ############### Build piglit | ||||
|  | ||||
| . .gitlab-ci/build-piglit.sh | ||||
|  | ||||
| ############### Build dEQP runner | ||||
|  | ||||
| . .gitlab-ci/build-cts-runner.sh | ||||
|  | ||||
| ############### Build dEQP GL | ||||
|  | ||||
| . .gitlab-ci/build-deqp-gl.sh | ||||
|  | ||||
|  | ||||
| ############### Uninstall the build software | ||||
|  | ||||
| apt-get purge -y \ | ||||
|       cmake \ | ||||
|       g++ \ | ||||
|       gcc \ | ||||
|       git \ | ||||
|       gnupg \ | ||||
|       libc6-dev \ | ||||
|       libgbm-dev \ | ||||
|       libgles2-mesa-dev \ | ||||
|       libpng-dev \ | ||||
|       libwaffle-dev \ | ||||
|       libxkbcommon-dev \ | ||||
|       libxrender-dev \ | ||||
|       meson \ | ||||
|       patch \ | ||||
|       pkg-config \ | ||||
|       python | ||||
|  | ||||
| apt-get autoremove -y --purge | ||||
| @@ -1,87 +0,0 @@ | ||||
| #!/bin/bash | ||||
|  | ||||
| set -e | ||||
| set -o xtrace | ||||
|  | ||||
| export DEBIAN_FRONTEND=noninteractive | ||||
|  | ||||
| apt-get install -y \ | ||||
|         ca-certificates \ | ||||
|         gnupg \ | ||||
|  | ||||
| # Upstream LLVM package repository | ||||
| apt-key add .gitlab-ci/container/llvm-snapshot.gpg.key | ||||
| echo "deb https://apt.llvm.org/buster/ llvm-toolchain-buster-9 main" >/etc/apt/sources.list.d/llvm9.list | ||||
|  | ||||
| sed -i -e 's/http:\/\/deb/https:\/\/deb/g' /etc/apt/sources.list | ||||
| echo 'deb https://deb.debian.org/debian buster-backports main' >/etc/apt/sources.list.d/backports.list | ||||
|  | ||||
| apt-get update | ||||
|  | ||||
| # Use newer packages from backports by default | ||||
| cat >/etc/apt/preferences <<EOF | ||||
| Package: * | ||||
| Pin: release a=buster-backports | ||||
| Pin-Priority: 500 | ||||
| EOF | ||||
|  | ||||
| apt-get dist-upgrade -y | ||||
|  | ||||
| apt-get install -y --no-remove \ | ||||
|       cmake \ | ||||
|       g++ \ | ||||
|       git \ | ||||
|       gcc \ | ||||
|       libexpat1 \ | ||||
|       libgbm-dev \ | ||||
|       libgles2-mesa-dev \ | ||||
|       libpng16-16 \ | ||||
|       libpng-dev \ | ||||
|       libvulkan1 \ | ||||
|       libvulkan-dev \ | ||||
|       libwayland-server0 \ | ||||
|       libxcb-randr0 \ | ||||
|       libxcb-xfixes0 \ | ||||
|       libxkbcommon0 \ | ||||
|       libxkbcommon-dev \ | ||||
|       libxrender1 \ | ||||
|       libxrender-dev \ | ||||
|       libllvm9 \ | ||||
|       meson \ | ||||
|       patch \ | ||||
|       pkg-config \ | ||||
|       python3-distutils \ | ||||
|       python \ | ||||
|       xauth \ | ||||
|       xvfb | ||||
|  | ||||
|  | ||||
| ############### Build dEQP runner | ||||
|  | ||||
| . .gitlab-ci/build-cts-runner.sh | ||||
|  | ||||
| ############### Build dEQP VK | ||||
|  | ||||
| . .gitlab-ci/build-deqp-vk.sh | ||||
|  | ||||
|  | ||||
| ############### Uninstall the build software | ||||
|  | ||||
| apt-get purge -y \ | ||||
|       cmake \ | ||||
|       g++ \ | ||||
|       gcc \ | ||||
|       git \ | ||||
|       gnupg \ | ||||
|       libgbm-dev \ | ||||
|       libgles2-mesa-dev \ | ||||
|       libpng-dev \ | ||||
|       libvulkan-dev \ | ||||
|       libxkbcommon-dev \ | ||||
|       libxrender-dev \ | ||||
|       meson \ | ||||
|       patch \ | ||||
|       pkg-config \ | ||||
|       python | ||||
|  | ||||
| apt-get autoremove -y --purge | ||||
| @@ -1,195 +0,0 @@ | ||||
| #!/bin/bash | ||||
|  | ||||
| set -ex | ||||
|  | ||||
| LLVM=libllvm8 | ||||
|  | ||||
| # LLVMPipe on armhf is broken with LLVM 8 | ||||
| if [ `dpkg --print-architecture` = "armhf" ]; then | ||||
|         LLVM=libllvm7 | ||||
| fi | ||||
|  | ||||
| apt-get -y install --no-install-recommends \ | ||||
|     initramfs-tools \ | ||||
|     libpng16-16 \ | ||||
|     strace \ | ||||
|     libsensors5 \ | ||||
|     libexpat1 \ | ||||
|     libdrm2 \ | ||||
|     libdrm-nouveau2 \ | ||||
|     $LLVM | ||||
| passwd root -d | ||||
| chsh -s /bin/sh | ||||
| ln -s /bin/sh /init | ||||
|  | ||||
| ####################################################################### | ||||
| # Strip the image to a small minimal system without removing the debian | ||||
| # toolchain. | ||||
|  | ||||
| # Copy timezone file and remove tzdata package | ||||
| rm -rf /etc/localtime | ||||
| cp /usr/share/zoneinfo/Etc/UTC /etc/localtime | ||||
|  | ||||
| UNNEEDED_PACKAGES="libfdisk1 | ||||
|                    tzdata | ||||
|                    diffutils" | ||||
|  | ||||
| export DEBIAN_FRONTEND=noninteractive | ||||
|  | ||||
| # Removing unused packages | ||||
| for PACKAGE in ${UNNEEDED_PACKAGES} | ||||
| do | ||||
| 	echo ${PACKAGE} | ||||
| 	if ! apt-get remove --purge --yes "${PACKAGE}" | ||||
| 	then | ||||
| 		echo "WARNING: ${PACKAGE} isn't installed" | ||||
| 	fi | ||||
| done | ||||
|  | ||||
| apt-get autoremove --yes || true | ||||
|  | ||||
| # Dropping logs | ||||
| rm -rf /var/log/* | ||||
|  | ||||
| # Dropping documentation, localization, i18n files, etc | ||||
| rm -rf /usr/share/doc/* | ||||
| rm -rf /usr/share/locale/* | ||||
| rm -rf /usr/share/man | ||||
| rm -rf /usr/share/i18n/* | ||||
| rm -rf /usr/share/info/* | ||||
| rm -rf /usr/share/lintian/* | ||||
| rm -rf /usr/share/common-licenses/* | ||||
| rm -rf /usr/share/mime/* | ||||
|  | ||||
| # Dropping reportbug scripts | ||||
| rm -rf /usr/share/bug | ||||
|  | ||||
| # Drop udev hwdb not required on a stripped system | ||||
| rm -rf /lib/udev/hwdb.bin /lib/udev/hwdb.d/* | ||||
|  | ||||
| # Drop all gconv conversions && binaries | ||||
| rm -rf usr/bin/iconv | ||||
| rm -rf usr/sbin/iconvconfig | ||||
| rm -rf usr/lib/*/gconv/ | ||||
|  | ||||
| # Remove libusb database | ||||
| rm -rf usr/sbin/update-usbids | ||||
| rm -rf var/lib/usbutils/usb.ids | ||||
| rm -rf usr/share/misc/usb.ids | ||||
|  | ||||
| ####################################################################### | ||||
| # Crush into a minimal production image to be deployed via some type of image | ||||
| # updating system. | ||||
| # IMPORTANT: The Debian system is not longer functional at this point, | ||||
| # for example, apt and dpkg will stop working | ||||
|  | ||||
| UNNEEDED_PACKAGES="apt libapt-pkg5.0 "\ | ||||
| "ncurses-bin ncurses-base libncursesw5 libncurses5 "\ | ||||
| "perl-base "\ | ||||
| "debconf libdebconfclient0 "\ | ||||
| "e2fsprogs e2fslibs libfdisk1 "\ | ||||
| "insserv "\ | ||||
| "udev "\ | ||||
| "init-system-helpers "\ | ||||
| "bash "\ | ||||
| "cpio "\ | ||||
| "passwd "\ | ||||
| "libsemanage1 libsemanage-common "\ | ||||
| "libsepol1 "\ | ||||
| "gzip "\ | ||||
| "gpgv "\ | ||||
| "hostname "\ | ||||
| "adduser "\ | ||||
| "debian-archive-keyring "\ | ||||
|  | ||||
| # Removing unneeded packages | ||||
| for PACKAGE in ${UNNEEDED_PACKAGES} | ||||
| do | ||||
| 	echo "Forcing removal of ${PACKAGE}" | ||||
| 	if ! dpkg --purge --force-remove-essential --force-depends "${PACKAGE}" | ||||
| 	then | ||||
| 		echo "WARNING: ${PACKAGE} isn't installed" | ||||
| 	fi | ||||
| done | ||||
|  | ||||
| # Show what's left package-wise before dropping dpkg itself | ||||
| COLUMNS=300 dpkg-query -W --showformat='${Installed-Size;10}\t${Package}\n' | sort -k1,1n | ||||
|  | ||||
| # Drop dpkg | ||||
| dpkg --purge --force-remove-essential --force-depends  dpkg | ||||
|  | ||||
| # No apt or dpkg, no need for its configuration archives | ||||
| rm -rf etc/apt | ||||
| rm -rf etc/dpkg | ||||
|  | ||||
| # Drop directories not part of ostree | ||||
| # Note that /var needs to exist as ostree bind mounts the deployment /var over | ||||
| # it | ||||
| rm -rf var/* opt srv share | ||||
|  | ||||
| # ca-certificates are in /etc drop the source | ||||
| rm -rf usr/share/ca-certificates | ||||
|  | ||||
| # No bash, no need for completions | ||||
| rm -rf usr/share/bash-completion | ||||
|  | ||||
| # No zsh, no need for comletions | ||||
| rm -rf usr/share/zsh/vendor-completions | ||||
|  | ||||
| # drop gcc-6 python helpers | ||||
| rm -rf usr/share/gcc-6 | ||||
|  | ||||
| # Drop sysvinit leftovers | ||||
| rm -rf etc/init.d | ||||
| rm -rf etc/rc[0-6S].d | ||||
|  | ||||
| # Drop upstart helpers | ||||
| rm -rf etc/init | ||||
|  | ||||
| # Various xtables helpers | ||||
| rm -rf usr/lib/xtables | ||||
|  | ||||
| # Drop all locales | ||||
| # TODO: only remaining locale is actually "C". Should we really remove it? | ||||
| rm -rf usr/lib/locale/* | ||||
|  | ||||
| # partition helpers | ||||
| rm usr/sbin/*fdisk | ||||
|  | ||||
| # local compiler | ||||
| rm usr/bin/localedef | ||||
|  | ||||
| # Systemd dns resolver | ||||
| find usr etc -name '*systemd-resolve*' -prune -exec rm -r {} \; | ||||
|  | ||||
| # Systemd network configuration | ||||
| find usr etc -name '*networkd*' -prune -exec rm -r {} \; | ||||
|  | ||||
| # systemd ntp client | ||||
| find usr etc -name '*timesyncd*' -prune -exec rm -r {} \; | ||||
|  | ||||
| # systemd hw database manager | ||||
| find usr etc -name '*systemd-hwdb*' -prune -exec rm -r {} \; | ||||
|  | ||||
| # No need for fuse | ||||
| find usr etc -name '*fuse*' -prune -exec rm -r {} \; | ||||
|  | ||||
| # lsb init function leftovers | ||||
| rm -rf usr/lib/lsb | ||||
|  | ||||
| # Only needed when adding libraries | ||||
| rm usr/sbin/ldconfig* | ||||
|  | ||||
| # Games, unused | ||||
| rmdir usr/games | ||||
|  | ||||
| # Remove pam module to authenticate against a DB | ||||
| # plus libdb-5.3.so that is only used by this pam module | ||||
| rm usr/lib/*/security/pam_userdb.so | ||||
| rm usr/lib/*/libdb-5.3.so | ||||
|  | ||||
| # remove NSS support for nis, nisplus and hesiod | ||||
| rm usr/lib/*/libnss_hesiod* | ||||
| rm usr/lib/*/libnss_nis* | ||||
|  | ||||
| rm bin/tar | ||||
| @@ -1 +0,0 @@ | ||||
| u_format_test | ||||
| @@ -1,10 +0,0 @@ | ||||
| # Note: skips lists for CI are just a list of lines that, when | ||||
| # non-zero-length and not starting with '#', will regex match to | ||||
| # delete lines from the test list.  Be careful. | ||||
|  | ||||
| # Skip the perf/stress tests to keep runtime manageable | ||||
| dEQP-GLES[0-9]*.performance.* | ||||
| dEQP-GLES[0-9]*.stress.* | ||||
|  | ||||
| # These are really slow on tiling architectures (including llvmpipe). | ||||
| dEQP-GLES[0-9]*.functional.flush_finish.* | ||||
| @@ -1,33 +0,0 @@ | ||||
| dEQP-GLES2.functional.clipping.line.wide_line_clip_viewport_center | ||||
| dEQP-GLES2.functional.clipping.line.wide_line_clip_viewport_corner | ||||
| dEQP-GLES2.functional.clipping.point.wide_point_clip | ||||
| dEQP-GLES2.functional.clipping.point.wide_point_clip_viewport_center | ||||
| dEQP-GLES2.functional.clipping.point.wide_point_clip_viewport_corner | ||||
| dEQP-GLES2.functional.clipping.triangle_vertex.clip_three.clip_neg_x_neg_z_and_pos_x_pos_z_and_neg_x_neg_y_pos_z | ||||
| dEQP-GLES2.functional.fbo.render.recreate_depthbuffer.rebind_rbo_rgb565_depth_component16 | ||||
| dEQP-GLES2.functional.fbo.render.recreate_depthbuffer.rebind_rbo_rgb5_a1_depth_component16 | ||||
| dEQP-GLES2.functional.fbo.render.recreate_depthbuffer.rebind_rbo_rgba4_depth_component16 | ||||
| dEQP-GLES2.functional.fbo.render.recreate_depthbuffer.rebind_tex2d_rgba_depth_component16 | ||||
| dEQP-GLES2.functional.fbo.render.recreate_depthbuffer.rebind_tex2d_rgb_depth_component16 | ||||
| dEQP-GLES2.functional.fbo.render.recreate_stencilbuffer.rebind_rbo_rgb565_stencil_index8 | ||||
| dEQP-GLES2.functional.fbo.render.recreate_stencilbuffer.rebind_rbo_rgb5_a1_stencil_index8 | ||||
| dEQP-GLES2.functional.fbo.render.recreate_stencilbuffer.rebind_rbo_rgba4_stencil_index8 | ||||
| dEQP-GLES2.functional.fbo.render.recreate_stencilbuffer.rebind_tex2d_rgba_stencil_index8 | ||||
| dEQP-GLES2.functional.fbo.render.recreate_stencilbuffer.rebind_tex2d_rgb_stencil_index8 | ||||
| dEQP-GLES2.functional.polygon_offset.fixed16_displacement_with_units | ||||
| dEQP-GLES2.functional.texture.filtering.2d.linear_nearest_clamp_l8_npot | ||||
| dEQP-GLES2.functional.texture.filtering.2d.linear_nearest_clamp_rgb888_npot | ||||
| dEQP-GLES2.functional.texture.filtering.2d.linear_nearest_clamp_rgba4444_npot | ||||
| dEQP-GLES2.functional.texture.filtering.2d.linear_nearest_clamp_rgba8888_npot | ||||
| dEQP-GLES2.functional.texture.filtering.2d.nearest_linear_clamp_l8_npot | ||||
| dEQP-GLES2.functional.texture.filtering.2d.nearest_linear_clamp_rgb888_npot | ||||
| dEQP-GLES2.functional.texture.filtering.2d.nearest_linear_clamp_rgba4444_npot | ||||
| dEQP-GLES2.functional.texture.filtering.2d.nearest_linear_clamp_rgba8888_npot | ||||
| dEQP-GLES2.functional.texture.filtering.cube.linear_nearest_clamp_l8_npot | ||||
| dEQP-GLES2.functional.texture.filtering.cube.linear_nearest_clamp_rgb888_npot | ||||
| dEQP-GLES2.functional.texture.filtering.cube.linear_nearest_clamp_rgba4444_npot | ||||
| dEQP-GLES2.functional.texture.filtering.cube.linear_nearest_clamp_rgba8888_npot | ||||
| dEQP-GLES2.functional.texture.filtering.cube.nearest_linear_clamp_l8_npot | ||||
| dEQP-GLES2.functional.texture.filtering.cube.nearest_linear_clamp_rgb888_npot | ||||
| dEQP-GLES2.functional.texture.filtering.cube.nearest_linear_clamp_rgba4444_npot | ||||
| dEQP-GLES2.functional.texture.filtering.cube.nearest_linear_clamp_rgba8888_npot | ||||
| @@ -1,3 +0,0 @@ | ||||
| dEQP-GLES2.functional.clipping.triangle_vertex.clip_three.clip_neg_x_neg_z_and_pos_x_pos_z_and_neg_x_neg_y_pos_z | ||||
| dEQP-GLES31.functional.stencil_texturing.render.depth24_stencil8_clear | ||||
| dEQP-GLES31.functional.stencil_texturing.render.depth24_stencil8_draw | ||||
| @@ -1,21 +0,0 @@ | ||||
| # Note: skips lists for CI are just a list of lines that, when | ||||
| # non-zero-length and not starting with '#', will regex match to | ||||
| # delete lines from the test list.  Be careful. | ||||
|  | ||||
| # Skip the perf/stress tests to keep runtime manageable | ||||
| dEQP-GLES[0-9]*.performance.* | ||||
| dEQP-GLES[0-9]*.stress.* | ||||
|  | ||||
| # These are really slow on tiling architectures (including llvmpipe). | ||||
| dEQP-GLES[0-9]*.functional.flush_finish.* | ||||
|  | ||||
| # Unstable test results | ||||
| #dEQP-GLES3.functional.fragment_out.random.* | ||||
| dEQP-GLES3.functional.transform_feedback.*points.* | ||||
| dEQP-GLES3.functional.transform_feedback.*lines.* | ||||
| dEQP-GLES31.functional.primitive_bounding_box.* | ||||
| #dEQP-GLES31.functional.layout_binding.ssbo.fragment_binding_array.* | ||||
|  | ||||
| # Intermittent timeout | ||||
| dEQP-GLES31.functional.ssbo.layout.random.all_shared_buffer.23 | ||||
|  | ||||
| @@ -1,203 +0,0 @@ | ||||
| dEQP-GLES2.functional.clipping.line.wide_line_clip_viewport_center | ||||
| dEQP-GLES2.functional.clipping.line.wide_line_clip_viewport_corner | ||||
| dEQP-GLES2.functional.clipping.triangle_vertex.clip_two.clip_neg_x_neg_y_pos_z_and_pos_x_pos_y_neg_z | ||||
| dEQP-GLES2.functional.clipping.triangle_vertex.clip_two.clip_neg_x_pos_y_pos_z_and_pos_x_neg_y_neg_z | ||||
| dEQP-GLES2.functional.clipping.triangle_vertex.clip_two.clip_pos_x_neg_y_pos_z_and_neg_x_pos_y_neg_z | ||||
| dEQP-GLES2.functional.clipping.triangle_vertex.clip_two.clip_pos_x_pos_y_pos_z_and_neg_x_neg_y_neg_z | ||||
| dEQP-GLES2.functional.depth_stencil_clear.depth_stencil_masked | ||||
| dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.no_rebind_rbo_rgb565_depth_component16 | ||||
| dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.no_rebind_rbo_rgb565_stencil_index8 | ||||
| dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.no_rebind_rbo_rgb5_a1_depth_component16 | ||||
| dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.no_rebind_rbo_rgb5_a1_stencil_index8 | ||||
| dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.no_rebind_rbo_rgba4_depth_component16 | ||||
| dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.no_rebind_rbo_rgba4_stencil_index8 | ||||
| dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.no_rebind_tex2d_rgba_depth_component16 | ||||
| dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.no_rebind_tex2d_rgba_stencil_index8 | ||||
| dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.no_rebind_tex2d_rgb_depth_component16 | ||||
| dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.no_rebind_tex2d_rgb_stencil_index8 | ||||
| dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.rebind_rbo_rgb565_depth_component16 | ||||
| dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.rebind_rbo_rgb565_stencil_index8 | ||||
| dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.rebind_rbo_rgb5_a1_depth_component16 | ||||
| dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.rebind_rbo_rgb5_a1_stencil_index8 | ||||
| dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.rebind_rbo_rgba4_depth_component16 | ||||
| dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.rebind_rbo_rgba4_stencil_index8 | ||||
| dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.rebind_tex2d_rgba_depth_component16 | ||||
| dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.rebind_tex2d_rgba_stencil_index8 | ||||
| dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.rebind_tex2d_rgb_depth_component16 | ||||
| dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.rebind_tex2d_rgb_stencil_index8 | ||||
| dEQP-GLES2.functional.fbo.render.shared_colorbuffer.rbo_rgb565_stencil_index8 | ||||
| dEQP-GLES2.functional.fbo.render.shared_colorbuffer.rbo_rgb5_a1_stencil_index8 | ||||
| dEQP-GLES2.functional.fbo.render.shared_colorbuffer.rbo_rgba4_stencil_index8 | ||||
| dEQP-GLES2.functional.fbo.render.shared_colorbuffer.tex2d_rgba_stencil_index8 | ||||
| dEQP-GLES2.functional.fbo.render.shared_colorbuffer.tex2d_rgb_stencil_index8 | ||||
| dEQP-GLES2.functional.fbo.render.shared_depthbuffer.rbo_rgb565_depth_component16 | ||||
| dEQP-GLES2.functional.fbo.render.shared_depthbuffer.rbo_rgb5_a1_depth_component16 | ||||
| dEQP-GLES2.functional.fbo.render.shared_depthbuffer.rbo_rgba4_depth_component16 | ||||
| dEQP-GLES2.functional.fbo.render.shared_depthbuffer.tex2d_rgba_depth_component16 | ||||
| dEQP-GLES2.functional.fbo.render.shared_depthbuffer.tex2d_rgb_depth_component16 | ||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.random.0 | ||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.random.1 | ||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.random.10 | ||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.random.11 | ||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.random.12 | ||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.random.13 | ||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.random.14 | ||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.random.15 | ||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.random.16 | ||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.random.17 | ||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.random.18 | ||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.random.19 | ||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.random.2 | ||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.random.20 | ||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.random.21 | ||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.random.22 | ||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.random.23 | ||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.random.24 | ||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.random.3 | ||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.random.4 | ||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.random.5 | ||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.random.6 | ||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.random.7 | ||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.random.8 | ||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.random.9 | ||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.write_mask.stencil | ||||
| dEQP-GLES2.functional.shaders.algorithm.hsl_to_rgb_vertex | ||||
| dEQP-GLES2.functional.shaders.functions.array_arguments.global_in_int_vertex | ||||
| dEQP-GLES2.functional.shaders.functions.array_arguments.local_in_int_vertex | ||||
| dEQP-GLES2.functional.shaders.functions.datatypes.int_int_vertex | ||||
| dEQP-GLES2.functional.shaders.functions.overloading.builtin_sin_vertex | ||||
| dEQP-GLES2.functional.shaders.functions.overloading.builtin_step_vertex | ||||
| dEQP-GLES2.functional.shaders.functions.overloading.user_func_arg_int_types_vertex | ||||
| dEQP-GLES2.functional.shaders.functions.qualifiers.inout_highp_int_vertex | ||||
| dEQP-GLES2.functional.shaders.functions.qualifiers.inout_int_vertex | ||||
| dEQP-GLES2.functional.shaders.functions.qualifiers.inout_lowp_int_vertex | ||||
| dEQP-GLES2.functional.shaders.functions.qualifiers.out_highp_int_vertex | ||||
| dEQP-GLES2.functional.shaders.functions.qualifiers.out_int_vertex | ||||
| dEQP-GLES2.functional.shaders.functions.qualifiers.out_lowp_int_vertex | ||||
| dEQP-GLES2.functional.shaders.indexing.matrix_subscript.mat3_dynamic_loop_write_static_loop_read_vertex | ||||
| dEQP-GLES2.functional.shaders.indexing.matrix_subscript.mat3_dynamic_loop_write_static_read_vertex | ||||
| dEQP-GLES2.functional.shaders.indexing.matrix_subscript.mat3_dynamic_write_dynamic_loop_read_vertex | ||||
| dEQP-GLES2.functional.shaders.loops.do_while_constant_iterations.conditional_body_vertex | ||||
| dEQP-GLES2.functional.shaders.loops.do_while_dynamic_iterations.vector_counter_fragment | ||||
| dEQP-GLES2.functional.shaders.loops.do_while_uniform_iterations.conditional_body_vertex | ||||
| dEQP-GLES2.functional.shaders.loops.do_while_uniform_iterations.nested_tricky_dataflow_2_vertex | ||||
| dEQP-GLES2.functional.shaders.loops.for_dynamic_iterations.vector_counter_fragment | ||||
| dEQP-GLES2.functional.shaders.loops.while_constant_iterations.compound_statement_vertex | ||||
| dEQP-GLES2.functional.shaders.loops.while_constant_iterations.sequence_statement_vertex | ||||
| dEQP-GLES2.functional.shaders.loops.while_dynamic_iterations.nested_sequence_vertex | ||||
| dEQP-GLES2.functional.shaders.loops.while_dynamic_iterations.vector_counter_fragment | ||||
| dEQP-GLES2.functional.shaders.loops.while_uniform_iterations.nested_vertex | ||||
| dEQP-GLES2.functional.shaders.operator.binary_operator.sub_assign_effect.highp_int_vertex | ||||
| dEQP-GLES2.functional.shaders.operator.binary_operator.sub_assign_effect.highp_ivec2_int_vertex | ||||
| dEQP-GLES2.functional.shaders.operator.binary_operator.sub_assign_effect.highp_ivec2_vertex | ||||
| dEQP-GLES2.functional.shaders.operator.binary_operator.sub_assign_effect.highp_ivec3_int_vertex | ||||
| dEQP-GLES2.functional.shaders.operator.binary_operator.sub_assign_effect.highp_ivec3_vertex | ||||
| dEQP-GLES2.functional.shaders.operator.binary_operator.sub_assign_effect.highp_ivec4_int_vertex | ||||
| dEQP-GLES2.functional.shaders.operator.binary_operator.sub_assign_effect.highp_ivec4_vertex | ||||
| dEQP-GLES2.functional.shaders.operator.binary_operator.sub_assign_effect.lowp_int_vertex | ||||
| dEQP-GLES2.functional.shaders.operator.binary_operator.sub_assign_effect.lowp_ivec2_int_vertex | ||||
| dEQP-GLES2.functional.shaders.operator.binary_operator.sub_assign_effect.lowp_ivec2_vertex | ||||
| dEQP-GLES2.functional.shaders.operator.binary_operator.sub_assign_effect.lowp_ivec3_int_vertex | ||||
| dEQP-GLES2.functional.shaders.operator.binary_operator.sub_assign_effect.lowp_ivec3_vertex | ||||
| dEQP-GLES2.functional.shaders.operator.binary_operator.sub_assign_effect.lowp_ivec4_int_vertex | ||||
| dEQP-GLES2.functional.shaders.operator.binary_operator.sub_assign_effect.lowp_ivec4_vertex | ||||
| dEQP-GLES2.functional.shaders.operator.binary_operator.sub_assign_effect.mediump_int_vertex | ||||
| dEQP-GLES2.functional.shaders.operator.binary_operator.sub_assign_effect.mediump_ivec2_int_vertex | ||||
| dEQP-GLES2.functional.shaders.operator.binary_operator.sub_assign_effect.mediump_ivec2_vertex | ||||
| dEQP-GLES2.functional.shaders.operator.binary_operator.sub_assign_effect.mediump_ivec3_int_vertex | ||||
| dEQP-GLES2.functional.shaders.operator.binary_operator.sub_assign_effect.mediump_ivec3_vertex | ||||
| dEQP-GLES2.functional.shaders.operator.binary_operator.sub_assign_effect.mediump_ivec4_int_vertex | ||||
| dEQP-GLES2.functional.shaders.operator.binary_operator.sub_assign_effect.mediump_ivec4_vertex | ||||
| dEQP-GLES2.functional.shaders.operator.binary_operator.sub_assign_result.highp_int_vertex | ||||
| dEQP-GLES2.functional.shaders.operator.binary_operator.sub_assign_result.highp_ivec2_int_vertex | ||||
| dEQP-GLES2.functional.shaders.operator.binary_operator.sub_assign_result.highp_ivec2_vertex | ||||
| dEQP-GLES2.functional.shaders.operator.binary_operator.sub_assign_result.highp_ivec3_int_vertex | ||||
| dEQP-GLES2.functional.shaders.operator.binary_operator.sub_assign_result.highp_ivec3_vertex | ||||
| dEQP-GLES2.functional.shaders.operator.binary_operator.sub_assign_result.highp_ivec4_int_vertex | ||||
| dEQP-GLES2.functional.shaders.operator.binary_operator.sub_assign_result.highp_ivec4_vertex | ||||
| dEQP-GLES2.functional.shaders.operator.binary_operator.sub_assign_result.lowp_int_vertex | ||||
| dEQP-GLES2.functional.shaders.operator.binary_operator.sub_assign_result.lowp_ivec2_int_vertex | ||||
| dEQP-GLES2.functional.shaders.operator.binary_operator.sub_assign_result.lowp_ivec2_vertex | ||||
| dEQP-GLES2.functional.shaders.operator.binary_operator.sub_assign_result.lowp_ivec3_int_vertex | ||||
| dEQP-GLES2.functional.shaders.operator.binary_operator.sub_assign_result.lowp_ivec3_vertex | ||||
| dEQP-GLES2.functional.shaders.operator.binary_operator.sub_assign_result.lowp_ivec4_int_vertex | ||||
| dEQP-GLES2.functional.shaders.operator.binary_operator.sub_assign_result.lowp_ivec4_vertex | ||||
| dEQP-GLES2.functional.shaders.operator.binary_operator.sub_assign_result.mediump_int_vertex | ||||
| dEQP-GLES2.functional.shaders.operator.binary_operator.sub_assign_result.mediump_ivec2_int_vertex | ||||
| dEQP-GLES2.functional.shaders.operator.binary_operator.sub_assign_result.mediump_ivec2_vertex | ||||
| dEQP-GLES2.functional.shaders.operator.binary_operator.sub_assign_result.mediump_ivec3_int_vertex | ||||
| dEQP-GLES2.functional.shaders.operator.binary_operator.sub_assign_result.mediump_ivec3_vertex | ||||
| dEQP-GLES2.functional.shaders.operator.binary_operator.sub_assign_result.mediump_ivec4_int_vertex | ||||
| dEQP-GLES2.functional.shaders.operator.binary_operator.sub_assign_result.mediump_ivec4_vertex | ||||
| dEQP-GLES2.functional.shaders.operator.binary_operator.sub.highp_int_ivec2_vertex | ||||
| dEQP-GLES2.functional.shaders.operator.binary_operator.sub.highp_int_ivec3_vertex | ||||
| dEQP-GLES2.functional.shaders.operator.binary_operator.sub.highp_int_ivec4_vertex | ||||
| dEQP-GLES2.functional.shaders.operator.binary_operator.sub.highp_int_vertex | ||||
| dEQP-GLES2.functional.shaders.operator.binary_operator.sub.highp_ivec2_int_vertex | ||||
| dEQP-GLES2.functional.shaders.operator.binary_operator.sub.highp_ivec2_vertex | ||||
| dEQP-GLES2.functional.shaders.operator.binary_operator.sub.highp_ivec3_int_vertex | ||||
| dEQP-GLES2.functional.shaders.operator.binary_operator.sub.highp_ivec3_vertex | ||||
| dEQP-GLES2.functional.shaders.operator.binary_operator.sub.highp_ivec4_int_vertex | ||||
| dEQP-GLES2.functional.shaders.operator.binary_operator.sub.highp_ivec4_vertex | ||||
| dEQP-GLES2.functional.shaders.operator.binary_operator.sub.lowp_int_ivec2_vertex | ||||
| dEQP-GLES2.functional.shaders.operator.binary_operator.sub.lowp_int_ivec3_vertex | ||||
| dEQP-GLES2.functional.shaders.operator.binary_operator.sub.lowp_int_ivec4_vertex | ||||
| dEQP-GLES2.functional.shaders.operator.binary_operator.sub.lowp_int_vertex | ||||
| dEQP-GLES2.functional.shaders.operator.binary_operator.sub.lowp_ivec2_int_vertex | ||||
| dEQP-GLES2.functional.shaders.operator.binary_operator.sub.lowp_ivec2_vertex | ||||
| dEQP-GLES2.functional.shaders.operator.binary_operator.sub.lowp_ivec3_int_vertex | ||||
| dEQP-GLES2.functional.shaders.operator.binary_operator.sub.lowp_ivec3_vertex | ||||
| dEQP-GLES2.functional.shaders.operator.binary_operator.sub.lowp_ivec4_int_vertex | ||||
| dEQP-GLES2.functional.shaders.operator.binary_operator.sub.lowp_ivec4_vertex | ||||
| dEQP-GLES2.functional.shaders.operator.binary_operator.sub.mediump_int_ivec2_vertex | ||||
| dEQP-GLES2.functional.shaders.operator.binary_operator.sub.mediump_int_ivec3_vertex | ||||
| dEQP-GLES2.functional.shaders.operator.binary_operator.sub.mediump_int_ivec4_vertex | ||||
| dEQP-GLES2.functional.shaders.operator.binary_operator.sub.mediump_int_vertex | ||||
| dEQP-GLES2.functional.shaders.operator.binary_operator.sub.mediump_ivec2_int_vertex | ||||
| dEQP-GLES2.functional.shaders.operator.binary_operator.sub.mediump_ivec2_vertex | ||||
| dEQP-GLES2.functional.shaders.operator.binary_operator.sub.mediump_ivec3_int_vertex | ||||
| dEQP-GLES2.functional.shaders.operator.binary_operator.sub.mediump_ivec3_vertex | ||||
| dEQP-GLES2.functional.shaders.operator.binary_operator.sub.mediump_ivec4_int_vertex | ||||
| dEQP-GLES2.functional.shaders.operator.binary_operator.sub.mediump_ivec4_vertex | ||||
| dEQP-GLES2.functional.shaders.operator.unary_operator.minus.highp_int_vertex | ||||
| dEQP-GLES2.functional.shaders.operator.unary_operator.minus.highp_ivec2_vertex | ||||
| dEQP-GLES2.functional.shaders.operator.unary_operator.minus.highp_ivec3_vertex | ||||
| dEQP-GLES2.functional.shaders.operator.unary_operator.minus.highp_ivec4_vertex | ||||
| dEQP-GLES2.functional.shaders.operator.unary_operator.minus.lowp_int_vertex | ||||
| dEQP-GLES2.functional.shaders.operator.unary_operator.minus.lowp_ivec2_vertex | ||||
| dEQP-GLES2.functional.shaders.operator.unary_operator.minus.lowp_ivec3_vertex | ||||
| dEQP-GLES2.functional.shaders.operator.unary_operator.minus.lowp_ivec4_vertex | ||||
| dEQP-GLES2.functional.shaders.operator.unary_operator.minus.mediump_int_vertex | ||||
| dEQP-GLES2.functional.shaders.operator.unary_operator.minus.mediump_ivec2_vertex | ||||
| dEQP-GLES2.functional.shaders.operator.unary_operator.minus.mediump_ivec3_vertex | ||||
| dEQP-GLES2.functional.shaders.operator.unary_operator.minus.mediump_ivec4_vertex | ||||
| dEQP-GLES2.functional.shaders.random.all_features.fragment.37 | ||||
| dEQP-GLES2.functional.shaders.random.exponential.fragment.11 | ||||
| dEQP-GLES2.functional.shaders.random.exponential.fragment.12 | ||||
| dEQP-GLES2.functional.shaders.random.exponential.fragment.14 | ||||
| dEQP-GLES2.functional.shaders.random.exponential.fragment.37 | ||||
| dEQP-GLES2.functional.shaders.random.exponential.fragment.5 | ||||
| dEQP-GLES2.functional.shaders.random.exponential.fragment.74 | ||||
| dEQP-GLES2.functional.shaders.random.texture.fragment.28 | ||||
| dEQP-GLES2.functional.shaders.random.trigonometric.fragment.65 | ||||
| dEQP-GLES2.functional.shaders.texture_functions.fragment.texture2d_bias | ||||
| dEQP-GLES2.functional.shaders.texture_functions.fragment.texture2dproj_vec4_bias | ||||
| dEQP-GLES2.functional.shaders.texture_functions.fragment.texturecube_bias | ||||
| dEQP-GLES2.functional.texture.filtering.2d.linear_mipmap_linear_linear_clamp_etc1 | ||||
| dEQP-GLES2.functional.texture.filtering.2d.linear_mipmap_linear_linear_clamp_rgba8888 | ||||
| dEQP-GLES2.functional.texture.filtering.2d.linear_mipmap_linear_linear_mirror_etc1 | ||||
| dEQP-GLES2.functional.texture.filtering.2d.linear_mipmap_linear_linear_mirror_rgba8888 | ||||
| dEQP-GLES2.functional.texture.filtering.2d.linear_mipmap_linear_nearest_clamp_etc1 | ||||
| dEQP-GLES2.functional.texture.filtering.2d.linear_mipmap_linear_nearest_clamp_rgba8888 | ||||
| dEQP-GLES2.functional.texture.filtering.2d.linear_mipmap_linear_nearest_mirror_etc1 | ||||
| dEQP-GLES2.functional.texture.filtering.2d.linear_mipmap_linear_nearest_mirror_rgba8888 | ||||
| dEQP-GLES2.functional.texture.mipmap.cube.basic.linear_linear | ||||
| dEQP-GLES2.functional.texture.mipmap.cube.basic.linear_nearest | ||||
| dEQP-GLES2.functional.texture.mipmap.cube.bias.linear_linear | ||||
| dEQP-GLES2.functional.texture.mipmap.cube.bias.linear_nearest | ||||
| dEQP-GLES2.functional.texture.mipmap.cube.projected.linear_linear | ||||
| dEQP-GLES2.functional.texture.mipmap.cube.projected.linear_nearest | ||||
| dEQP-GLES2.functional.texture.specification.basic_copytexsubimage2d.2d_rgb | ||||
| dEQP-GLES2.functional.texture.specification.basic_copytexsubimage2d.2d_rgba | ||||
| dEQP-GLES2.functional.texture.specification.basic_copytexsubimage2d.cube_rgb | ||||
| dEQP-GLES2.functional.texture.specification.basic_copytexsubimage2d.cube_rgba | ||||
| @@ -1,50 +0,0 @@ | ||||
| # Note: skips lists for CI are just a list of lines that, when | ||||
| # non-zero-length and not starting with '#', will regex match to | ||||
| # delete lines from the test list.  Be careful. | ||||
|  | ||||
| # Skip the perf/stress tests to keep runtime manageable | ||||
| dEQP-GLES[0-9]*.performance | ||||
| dEQP-GLES[0-9]*.stress | ||||
|  | ||||
| # These are really slow on tiling architectures (including llvmpipe). | ||||
| dEQP-GLES[0-9]*.functional.flush_finish | ||||
|  | ||||
| # Crashes | ||||
| dEQP-GLES2.functional.shaders.invariance.highp.common_subexpression_1 | ||||
| dEQP-GLES2.functional.shaders.invariance.mediump.common_subexpression_1 | ||||
| dEQP-GLES2.functional.shaders.invariance.lowp.common_subexpression_1 | ||||
|  | ||||
| # Flaky | ||||
| dEQP-GLES2.functional.clipping.triangle_vertex.clip_three.clip_neg_x_neg_z_and_pos_x_pos_z_and_neg_x_neg_y_pos_z | ||||
| dEQP-GLES2.functional.default_vertex_attrib.* | ||||
| dEQP-GLES2.functional.fbo.completeness.size.distinct | ||||
| dEQP-GLES2.functional.negative_api.shader.uniform_matrixfv_invalid_transpose | ||||
| dEQP-GLES2.functional.negative_api.texture.generatemipmap_zero_level_array_compressed | ||||
| dEQP-GLES2.functional.shaders.builtin_variable.frontfacing | ||||
| dEQP-GLES2.functional.shaders.random.exponential.fragment.94 | ||||
| dEQP-GLES2.functional.shaders.random.all_features.fragment.55 | ||||
| dEQP-GLES2.functional.shaders.random.trigonometric.fragment.1 | ||||
| dEQP-GLES2.functional.shaders.random.trigonometric.fragment.69 | ||||
|  | ||||
| # Driver bugs causing GPU errors | ||||
| dEQP-GLES2.functional.shaders.loops.while_constant_iterations.nested_sequence_vertex | ||||
| dEQP-GLES2.functional.shaders.loops.while_constant_iterations.conditional_body_vertex | ||||
| dEQP-GLES2.functional.shaders.loops.while_uniform_iterations.conditional_continue_vertex | ||||
| dEQP-GLES2.functional.shaders.loops.while_uniform_iterations.double_continue_vertex | ||||
|  | ||||
| # Hangs / OOM | ||||
| dEQP-GLES2.functional.shaders.indexing.varying_array.vec4_dynamic_loop_write_static_read | ||||
| dEQP-GLES2.functional.shaders.indexing.varying_array.vec4_dynamic_loop_write_dynamic_read | ||||
| dEQP-GLES2.functional.shaders.indexing.varying_array.vec4_dynamic_loop_write_static_loop_read | ||||
| dEQP-GLES2.functional.shaders.indexing.varying_array.vec4_dynamic_loop_write_dynamic_loop_read | ||||
| dEQP-GLES2.functional.shaders.indexing.tmp_array.vec3_dynamic_loop_write_dynamic_read_vertex | ||||
|  | ||||
| dEQP-GLES2.functional.shaders.indexing.tmp_array.vec4_dynamic_loop_write_static_read_vertex | ||||
| dEQP-GLES2.functional.shaders.indexing.tmp_array.vec4_dynamic_loop_write_dynamic_read_vertex | ||||
| dEQP-GLES2.functional.shaders.indexing.tmp_array.vec4_dynamic_loop_write_static_loop_read_vertex | ||||
| dEQP-GLES2.functional.shaders.indexing.tmp_array.vec4_dynamic_loop_write_dynamic_loop_read_vertex | ||||
|  | ||||
| dEQP-GLES2.functional.shaders.indexing.matrix_subscript.mat4_dynamic_loop_write_static_read_vertex | ||||
| dEQP-GLES2.functional.shaders.indexing.matrix_subscript.mat4_dynamic_loop_write_dynamic_read_vertex | ||||
| dEQP-GLES2.functional.shaders.indexing.matrix_subscript.mat4_dynamic_loop_write_static_loop_read_vertex | ||||
| dEQP-GLES2.functional.shaders.indexing.matrix_subscript.mat4_dynamic_loop_write_dynamic_loop_read_vertex | ||||
| @@ -1,124 +0,0 @@ | ||||
| dEQP-GLES2.functional.clipping.line.wide_line_clip_viewport_center | ||||
| dEQP-GLES2.functional.clipping.line.wide_line_clip_viewport_corner | ||||
| dEQP-GLES2.functional.clipping.point.wide_point_clip | ||||
| dEQP-GLES2.functional.clipping.point.wide_point_clip_viewport_center | ||||
| dEQP-GLES2.functional.clipping.point.wide_point_clip_viewport_corner | ||||
| dEQP-GLES2.functional.clipping.triangle_vertex.clip_two.clip_neg_y_neg_z_and_neg_x_neg_y_pos_z | ||||
| dEQP-GLES2.functional.clipping.triangle_vertex.clip_two.clip_pos_y_pos_z_and_neg_x_neg_y_neg_z | ||||
| dEQP-GLES2.functional.fbo.render.color_clear.rbo_rgba4 | ||||
| dEQP-GLES2.functional.fbo.render.color_clear.rbo_rgba4_depth_component16 | ||||
| dEQP-GLES2.functional.fbo.render.color_clear.rbo_rgba4_stencil_index8 | ||||
| dEQP-GLES2.functional.fbo.render.depth.rbo_rgba4_depth_component16 | ||||
| dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.no_rebind_rbo_rgba4 | ||||
| dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.no_rebind_rbo_rgba4_stencil_index8 | ||||
| dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.rebind_rbo_rgba4 | ||||
| dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.rebind_rbo_rgba4_stencil_index8 | ||||
| dEQP-GLES2.functional.fbo.render.recreate_depthbuffer.no_rebind_rbo_rgba4_depth_component16 | ||||
| dEQP-GLES2.functional.fbo.render.recreate_depthbuffer.rebind_rbo_rgba4_depth_component16 | ||||
| dEQP-GLES2.functional.fbo.render.recreate_stencilbuffer.no_rebind_rbo_rgba4_stencil_index8 | ||||
| dEQP-GLES2.functional.fbo.render.recreate_stencilbuffer.rebind_rbo_rgba4_stencil_index8 | ||||
| dEQP-GLES2.functional.fbo.render.shared_colorbuffer.rbo_rgba4 | ||||
| dEQP-GLES2.functional.fbo.render.shared_colorbuffer.rbo_rgba4_depth_component16 | ||||
| dEQP-GLES2.functional.fbo.render.shared_depthbuffer.rbo_rgba4_depth_component16 | ||||
| dEQP-GLES2.functional.polygon_offset.default_displacement_with_units | ||||
| dEQP-GLES2.functional.polygon_offset.fixed16_displacement_with_units | ||||
| dEQP-GLES2.functional.rasterization.interpolation.basic.line_loop_wide | ||||
| dEQP-GLES2.functional.rasterization.interpolation.basic.line_strip_wide | ||||
| dEQP-GLES2.functional.rasterization.interpolation.basic.lines_wide | ||||
| dEQP-GLES2.functional.rasterization.interpolation.projected.line_loop_wide | ||||
| dEQP-GLES2.functional.rasterization.interpolation.projected.line_strip_wide | ||||
| dEQP-GLES2.functional.rasterization.interpolation.projected.lines_wide | ||||
| dEQP-GLES2.functional.rasterization.limits.points | ||||
| dEQP-GLES2.functional.shaders.texture_functions.fragment.texture2d_bias | ||||
| dEQP-GLES2.functional.shaders.texture_functions.fragment.texture2dproj_vec3_bias | ||||
| dEQP-GLES2.functional.shaders.texture_functions.fragment.texture2dproj_vec4_bias | ||||
| dEQP-GLES2.functional.texture.filtering.2d.linear_mipmap_linear_linear_clamp_rgba8888 | ||||
| dEQP-GLES2.functional.texture.filtering.2d.linear_mipmap_linear_linear_mirror_etc1 | ||||
| dEQP-GLES2.functional.texture.filtering.2d.linear_mipmap_linear_linear_mirror_rgba8888 | ||||
| dEQP-GLES2.functional.texture.filtering.2d.linear_mipmap_linear_linear_repeat_etc1 | ||||
| dEQP-GLES2.functional.texture.filtering.2d.linear_mipmap_linear_linear_repeat_rgba8888 | ||||
| dEQP-GLES2.functional.texture.filtering.2d.linear_mipmap_linear_nearest_clamp_rgba8888 | ||||
| dEQP-GLES2.functional.texture.filtering.2d.linear_mipmap_linear_nearest_mirror_etc1 | ||||
| dEQP-GLES2.functional.texture.filtering.2d.linear_mipmap_linear_nearest_mirror_rgba8888 | ||||
| dEQP-GLES2.functional.texture.filtering.2d.linear_mipmap_linear_nearest_repeat_etc1 | ||||
| dEQP-GLES2.functional.texture.filtering.2d.linear_mipmap_linear_nearest_repeat_l8 | ||||
| dEQP-GLES2.functional.texture.filtering.2d.linear_mipmap_linear_nearest_repeat_rgb888 | ||||
| dEQP-GLES2.functional.texture.filtering.2d.linear_mipmap_linear_nearest_repeat_rgba4444 | ||||
| dEQP-GLES2.functional.texture.filtering.2d.linear_mipmap_linear_nearest_repeat_rgba8888 | ||||
| dEQP-GLES2.functional.texture.filtering.2d.nearest_mipmap_linear_linear_clamp_rgba8888 | ||||
| dEQP-GLES2.functional.texture.filtering.2d.nearest_mipmap_linear_linear_mirror_etc1 | ||||
| dEQP-GLES2.functional.texture.filtering.2d.nearest_mipmap_linear_linear_mirror_rgba8888 | ||||
| dEQP-GLES2.functional.texture.filtering.2d.nearest_mipmap_linear_linear_repeat_etc1 | ||||
| dEQP-GLES2.functional.texture.filtering.2d.nearest_mipmap_linear_linear_repeat_rgba8888 | ||||
| dEQP-GLES2.functional.texture.filtering.2d.nearest_mipmap_linear_nearest_clamp_rgba8888 | ||||
| dEQP-GLES2.functional.texture.filtering.2d.nearest_mipmap_linear_nearest_mirror_etc1 | ||||
| dEQP-GLES2.functional.texture.filtering.2d.nearest_mipmap_linear_nearest_mirror_rgba8888 | ||||
| dEQP-GLES2.functional.texture.filtering.2d.nearest_mipmap_linear_nearest_repeat_etc1 | ||||
| dEQP-GLES2.functional.texture.filtering.2d.nearest_mipmap_linear_nearest_repeat_l8 | ||||
| dEQP-GLES2.functional.texture.filtering.2d.nearest_mipmap_linear_nearest_repeat_rgb888 | ||||
| dEQP-GLES2.functional.texture.filtering.2d.nearest_mipmap_linear_nearest_repeat_rgba4444 | ||||
| dEQP-GLES2.functional.texture.filtering.2d.nearest_mipmap_linear_nearest_repeat_rgba8888 | ||||
| dEQP-GLES2.functional.texture.mipmap.2d.affine.linear_linear_repeat | ||||
| dEQP-GLES2.functional.texture.mipmap.2d.affine.nearest_linear_clamp | ||||
| dEQP-GLES2.functional.texture.mipmap.2d.affine.nearest_linear_mirror | ||||
| dEQP-GLES2.functional.texture.mipmap.2d.affine.nearest_linear_repeat | ||||
| dEQP-GLES2.functional.texture.mipmap.2d.basic.linear_linear_repeat | ||||
| dEQP-GLES2.functional.texture.mipmap.2d.basic.linear_linear_repeat_non_square | ||||
| dEQP-GLES2.functional.texture.mipmap.2d.basic.nearest_linear_clamp | ||||
| dEQP-GLES2.functional.texture.mipmap.2d.basic.nearest_linear_clamp_non_square | ||||
| dEQP-GLES2.functional.texture.mipmap.2d.basic.nearest_linear_mirror | ||||
| dEQP-GLES2.functional.texture.mipmap.2d.basic.nearest_linear_mirror_non_square | ||||
| dEQP-GLES2.functional.texture.mipmap.2d.basic.nearest_linear_repeat | ||||
| dEQP-GLES2.functional.texture.mipmap.2d.basic.nearest_linear_repeat_non_square | ||||
| dEQP-GLES2.functional.texture.mipmap.2d.projected.linear_linear_repeat | ||||
| dEQP-GLES2.functional.texture.mipmap.2d.projected.nearest_linear_clamp | ||||
| dEQP-GLES2.functional.texture.mipmap.2d.projected.nearest_linear_mirror | ||||
| dEQP-GLES2.functional.texture.mipmap.2d.projected.nearest_linear_repeat | ||||
| dEQP-GLES2.functional.texture.mipmap.cube.basic.linear_linear | ||||
| dEQP-GLES2.functional.texture.mipmap.cube.basic.linear_nearest | ||||
| dEQP-GLES2.functional.texture.mipmap.cube.bias.linear_linear | ||||
| dEQP-GLES2.functional.texture.mipmap.cube.bias.linear_nearest | ||||
| dEQP-GLES2.functional.texture.mipmap.cube.projected.linear_linear | ||||
| dEQP-GLES2.functional.texture.mipmap.cube.projected.linear_nearest | ||||
| dEQP-GLES2.functional.texture.vertex.2d.filtering.linear_mipmap_linear_linear_clamp | ||||
| dEQP-GLES2.functional.texture.vertex.2d.filtering.linear_mipmap_linear_linear_mirror | ||||
| dEQP-GLES2.functional.texture.vertex.2d.filtering.linear_mipmap_linear_linear_repeat | ||||
| dEQP-GLES2.functional.texture.vertex.2d.filtering.linear_mipmap_linear_nearest_clamp | ||||
| dEQP-GLES2.functional.texture.vertex.2d.filtering.linear_mipmap_linear_nearest_mirror | ||||
| dEQP-GLES2.functional.texture.vertex.2d.filtering.linear_mipmap_linear_nearest_repeat | ||||
| dEQP-GLES2.functional.texture.vertex.2d.filtering.nearest_mipmap_linear_linear_clamp | ||||
| dEQP-GLES2.functional.texture.vertex.2d.filtering.nearest_mipmap_linear_linear_mirror | ||||
| dEQP-GLES2.functional.texture.vertex.2d.filtering.nearest_mipmap_linear_linear_repeat | ||||
| dEQP-GLES2.functional.texture.vertex.2d.filtering.nearest_mipmap_linear_nearest_clamp | ||||
| dEQP-GLES2.functional.texture.vertex.2d.filtering.nearest_mipmap_linear_nearest_mirror | ||||
| dEQP-GLES2.functional.texture.vertex.2d.filtering.nearest_mipmap_linear_nearest_repeat | ||||
| dEQP-GLES2.functional.texture.vertex.2d.wrap.clamp_clamp | ||||
| dEQP-GLES2.functional.texture.vertex.2d.wrap.clamp_mirror | ||||
| dEQP-GLES2.functional.texture.vertex.2d.wrap.clamp_repeat | ||||
| dEQP-GLES2.functional.texture.vertex.2d.wrap.mirror_clamp | ||||
| dEQP-GLES2.functional.texture.vertex.2d.wrap.mirror_mirror | ||||
| dEQP-GLES2.functional.texture.vertex.2d.wrap.mirror_repeat | ||||
| dEQP-GLES2.functional.texture.vertex.2d.wrap.repeat_clamp | ||||
| dEQP-GLES2.functional.texture.vertex.2d.wrap.repeat_mirror | ||||
| dEQP-GLES2.functional.texture.vertex.2d.wrap.repeat_repeat | ||||
| dEQP-GLES2.functional.texture.vertex.cube.filtering.linear_mipmap_linear_linear_clamp | ||||
| dEQP-GLES2.functional.texture.vertex.cube.filtering.linear_mipmap_linear_linear_mirror | ||||
| dEQP-GLES2.functional.texture.vertex.cube.filtering.linear_mipmap_linear_linear_repeat | ||||
| dEQP-GLES2.functional.texture.vertex.cube.filtering.linear_mipmap_linear_nearest_clamp | ||||
| dEQP-GLES2.functional.texture.vertex.cube.filtering.linear_mipmap_linear_nearest_mirror | ||||
| dEQP-GLES2.functional.texture.vertex.cube.filtering.linear_mipmap_linear_nearest_repeat | ||||
| dEQP-GLES2.functional.texture.vertex.cube.filtering.nearest_mipmap_linear_linear_clamp | ||||
| dEQP-GLES2.functional.texture.vertex.cube.filtering.nearest_mipmap_linear_linear_mirror | ||||
| dEQP-GLES2.functional.texture.vertex.cube.filtering.nearest_mipmap_linear_linear_repeat | ||||
| dEQP-GLES2.functional.texture.vertex.cube.filtering.nearest_mipmap_linear_nearest_clamp | ||||
| dEQP-GLES2.functional.texture.vertex.cube.filtering.nearest_mipmap_linear_nearest_mirror | ||||
| dEQP-GLES2.functional.texture.vertex.cube.filtering.nearest_mipmap_linear_nearest_repeat | ||||
| dEQP-GLES2.functional.texture.vertex.cube.wrap.clamp_clamp | ||||
| dEQP-GLES2.functional.texture.vertex.cube.wrap.clamp_mirror | ||||
| dEQP-GLES2.functional.texture.vertex.cube.wrap.clamp_repeat | ||||
| dEQP-GLES2.functional.texture.vertex.cube.wrap.mirror_clamp | ||||
| dEQP-GLES2.functional.texture.vertex.cube.wrap.mirror_mirror | ||||
| dEQP-GLES2.functional.texture.vertex.cube.wrap.mirror_repeat | ||||
| dEQP-GLES2.functional.texture.vertex.cube.wrap.repeat_clamp | ||||
| dEQP-GLES2.functional.texture.vertex.cube.wrap.repeat_mirror | ||||
| dEQP-GLES2.functional.texture.vertex.cube.wrap.repeat_repeat | ||||
| @@ -1,31 +0,0 @@ | ||||
| dEQP-GLES2.functional.depth_stencil_clear.depth_stencil_masked | ||||
| dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.no_rebind_rbo_rgb565_depth_component16 | ||||
| dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.no_rebind_rbo_rgb565_stencil_index8 | ||||
| dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.no_rebind_rbo_rgb5_a1_depth_component16 | ||||
| dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.no_rebind_rbo_rgb5_a1_stencil_index8 | ||||
| dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.no_rebind_rbo_rgba4_depth_component16 | ||||
| dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.no_rebind_rbo_rgba4_stencil_index8 | ||||
| dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.no_rebind_tex2d_rgb_depth_component16 | ||||
| dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.no_rebind_tex2d_rgb_stencil_index8 | ||||
| dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.no_rebind_tex2d_rgba_depth_component16 | ||||
| dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.no_rebind_tex2d_rgba_stencil_index8 | ||||
| dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.rebind_rbo_rgb565_depth_component16 | ||||
| dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.rebind_rbo_rgb565_stencil_index8 | ||||
| dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.rebind_rbo_rgb5_a1_depth_component16 | ||||
| dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.rebind_rbo_rgb5_a1_stencil_index8 | ||||
| dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.rebind_rbo_rgba4_depth_component16 | ||||
| dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.rebind_rbo_rgba4_stencil_index8 | ||||
| dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.rebind_tex2d_rgb_depth_component16 | ||||
| dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.rebind_tex2d_rgb_stencil_index8 | ||||
| dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.rebind_tex2d_rgba_depth_component16 | ||||
| dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.rebind_tex2d_rgba_stencil_index8 | ||||
| dEQP-GLES2.functional.fbo.render.shared_colorbuffer.rbo_rgb565_depth_component16 | ||||
| dEQP-GLES2.functional.fbo.render.shared_colorbuffer.rbo_rgb5_a1_depth_component16 | ||||
| dEQP-GLES2.functional.fbo.render.shared_colorbuffer.rbo_rgba4_depth_component16 | ||||
| dEQP-GLES2.functional.fbo.render.shared_colorbuffer.tex2d_rgb_depth_component16 | ||||
| dEQP-GLES2.functional.fbo.render.shared_colorbuffer.tex2d_rgba_depth_component16 | ||||
| dEQP-GLES2.functional.fbo.render.shared_depthbuffer.rbo_rgb565_depth_component16 | ||||
| dEQP-GLES2.functional.fbo.render.shared_depthbuffer.rbo_rgb5_a1_depth_component16 | ||||
| dEQP-GLES2.functional.fbo.render.shared_depthbuffer.rbo_rgba4_depth_component16 | ||||
| dEQP-GLES2.functional.fbo.render.shared_depthbuffer.tex2d_rgb_depth_component16 | ||||
| dEQP-GLES2.functional.fbo.render.shared_depthbuffer.tex2d_rgba_depth_component16 | ||||
| @@ -1,14 +0,0 @@ | ||||
| # Note: skips lists for CI are just a list of lines that, when | ||||
| # non-zero-length and not starting with '#', will regex match to | ||||
| # delete lines from the test list.  Be careful. | ||||
|  | ||||
| # Skip the perf/stress tests to keep runtime manageable | ||||
| dEQP-GLES[0-9]*.performance.* | ||||
| dEQP-GLES[0-9]*.stress.* | ||||
|  | ||||
| # These are really slow on tiling architectures (including llvmpipe). | ||||
| dEQP-GLES[0-9]*.functional.flush_finish.* | ||||
|  | ||||
| # XXX: Why does this flake? | ||||
| dEQP-GLES2.functional.clipping.triangle_vertex.clip_three.clip_neg_x_neg_z_and_pos_x_pos_z_and_neg_x_neg_y_pos_z | ||||
|  | ||||
| @@ -1,31 +0,0 @@ | ||||
| dEQP-GLES2.functional.depth_stencil_clear.depth_stencil_masked | ||||
| dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.no_rebind_rbo_rgb565_depth_component16 | ||||
| dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.no_rebind_rbo_rgb565_stencil_index8 | ||||
| dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.no_rebind_rbo_rgb5_a1_depth_component16 | ||||
| dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.no_rebind_rbo_rgb5_a1_stencil_index8 | ||||
| dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.no_rebind_rbo_rgba4_depth_component16 | ||||
| dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.no_rebind_rbo_rgba4_stencil_index8 | ||||
| dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.no_rebind_tex2d_rgb_depth_component16 | ||||
| dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.no_rebind_tex2d_rgb_stencil_index8 | ||||
| dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.no_rebind_tex2d_rgba_depth_component16 | ||||
| dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.no_rebind_tex2d_rgba_stencil_index8 | ||||
| dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.rebind_rbo_rgb565_depth_component16 | ||||
| dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.rebind_rbo_rgb565_stencil_index8 | ||||
| dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.rebind_rbo_rgb5_a1_depth_component16 | ||||
| dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.rebind_rbo_rgb5_a1_stencil_index8 | ||||
| dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.rebind_rbo_rgba4_depth_component16 | ||||
| dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.rebind_rbo_rgba4_stencil_index8 | ||||
| dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.rebind_tex2d_rgb_depth_component16 | ||||
| dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.rebind_tex2d_rgb_stencil_index8 | ||||
| dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.rebind_tex2d_rgba_depth_component16 | ||||
| dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.rebind_tex2d_rgba_stencil_index8 | ||||
| dEQP-GLES2.functional.fbo.render.shared_colorbuffer.rbo_rgb565_depth_component16 | ||||
| dEQP-GLES2.functional.fbo.render.shared_colorbuffer.rbo_rgb5_a1_depth_component16 | ||||
| dEQP-GLES2.functional.fbo.render.shared_colorbuffer.rbo_rgba4_depth_component16 | ||||
| dEQP-GLES2.functional.fbo.render.shared_colorbuffer.tex2d_rgb_depth_component16 | ||||
| dEQP-GLES2.functional.fbo.render.shared_colorbuffer.tex2d_rgba_depth_component16 | ||||
| dEQP-GLES2.functional.fbo.render.shared_depthbuffer.rbo_rgb565_depth_component16 | ||||
| dEQP-GLES2.functional.fbo.render.shared_depthbuffer.rbo_rgb5_a1_depth_component16 | ||||
| dEQP-GLES2.functional.fbo.render.shared_depthbuffer.rbo_rgba4_depth_component16 | ||||
| dEQP-GLES2.functional.fbo.render.shared_depthbuffer.tex2d_rgb_depth_component16 | ||||
| dEQP-GLES2.functional.fbo.render.shared_depthbuffer.tex2d_rgba_depth_component16 | ||||
| @@ -1,10 +0,0 @@ | ||||
| # Note: skips lists for CI are just a list of lines that, when | ||||
| # non-zero-length and not starting with '#', will regex match to | ||||
| # delete lines from the test list.  Be careful. | ||||
|  | ||||
| # Skip the perf/stress tests to keep runtime manageable | ||||
| dEQP-GLES[0-9]*.performance.* | ||||
| dEQP-GLES[0-9]*.stress.* | ||||
|  | ||||
| # These are really slow on tiling architectures (including llvmpipe). | ||||
| dEQP-GLES[0-9]*.functional.flush_finish.* | ||||
| @@ -1,31 +0,0 @@ | ||||
| dEQP-GLES2.functional.depth_stencil_clear.depth_stencil_masked | ||||
| dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.no_rebind_rbo_rgb565_depth_component16 | ||||
| dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.no_rebind_rbo_rgb565_stencil_index8 | ||||
| dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.no_rebind_rbo_rgb5_a1_depth_component16 | ||||
| dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.no_rebind_rbo_rgb5_a1_stencil_index8 | ||||
| dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.no_rebind_rbo_rgba4_depth_component16 | ||||
| dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.no_rebind_rbo_rgba4_stencil_index8 | ||||
| dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.no_rebind_tex2d_rgb_depth_component16 | ||||
| dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.no_rebind_tex2d_rgb_stencil_index8 | ||||
| dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.no_rebind_tex2d_rgba_depth_component16 | ||||
| dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.no_rebind_tex2d_rgba_stencil_index8 | ||||
| dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.rebind_rbo_rgb565_depth_component16 | ||||
| dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.rebind_rbo_rgb565_stencil_index8 | ||||
| dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.rebind_rbo_rgb5_a1_depth_component16 | ||||
| dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.rebind_rbo_rgb5_a1_stencil_index8 | ||||
| dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.rebind_rbo_rgba4_depth_component16 | ||||
| dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.rebind_rbo_rgba4_stencil_index8 | ||||
| dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.rebind_tex2d_rgb_depth_component16 | ||||
| dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.rebind_tex2d_rgb_stencil_index8 | ||||
| dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.rebind_tex2d_rgba_depth_component16 | ||||
| dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.rebind_tex2d_rgba_stencil_index8 | ||||
| dEQP-GLES2.functional.fbo.render.shared_colorbuffer.rbo_rgb565_depth_component16 | ||||
| dEQP-GLES2.functional.fbo.render.shared_colorbuffer.rbo_rgb5_a1_depth_component16 | ||||
| dEQP-GLES2.functional.fbo.render.shared_colorbuffer.rbo_rgba4_depth_component16 | ||||
| dEQP-GLES2.functional.fbo.render.shared_colorbuffer.tex2d_rgb_depth_component16 | ||||
| dEQP-GLES2.functional.fbo.render.shared_colorbuffer.tex2d_rgba_depth_component16 | ||||
| dEQP-GLES2.functional.fbo.render.shared_depthbuffer.rbo_rgb565_depth_component16 | ||||
| dEQP-GLES2.functional.fbo.render.shared_depthbuffer.rbo_rgb5_a1_depth_component16 | ||||
| dEQP-GLES2.functional.fbo.render.shared_depthbuffer.rbo_rgba4_depth_component16 | ||||
| dEQP-GLES2.functional.fbo.render.shared_depthbuffer.tex2d_rgb_depth_component16 | ||||
| dEQP-GLES2.functional.fbo.render.shared_depthbuffer.tex2d_rgba_depth_component16 | ||||
| @@ -1,13 +0,0 @@ | ||||
| # Note: skips lists for CI are just a list of lines that, when | ||||
| # non-zero-length and not starting with '#', will regex match to | ||||
| # delete lines from the test list.  Be careful. | ||||
|  | ||||
| # Skip the perf/stress tests to keep runtime manageable | ||||
| dEQP-GLES[0-9]*.performance.* | ||||
| dEQP-GLES[0-9]*.stress.* | ||||
|  | ||||
| # These are really slow on tiling architectures (including llvmpipe). | ||||
| dEQP-GLES[0-9]*.functional.flush_finish.* | ||||
|  | ||||
| # XXX: Why does this flake? | ||||
| dEQP-GLES2.functional.clipping.triangle_vertex.clip_three.clip_neg_x_neg_z_and_pos_x_pos_z_and_neg_x_neg_y_pos_z | ||||
| @@ -1,31 +0,0 @@ | ||||
| dEQP-GLES2.functional.depth_stencil_clear.depth_stencil_masked | ||||
| dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.no_rebind_rbo_rgb565_depth_component16 | ||||
| dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.no_rebind_rbo_rgb565_stencil_index8 | ||||
| dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.no_rebind_rbo_rgb5_a1_depth_component16 | ||||
| dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.no_rebind_rbo_rgb5_a1_stencil_index8 | ||||
| dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.no_rebind_rbo_rgba4_depth_component16 | ||||
| dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.no_rebind_rbo_rgba4_stencil_index8 | ||||
| dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.no_rebind_tex2d_rgb_depth_component16 | ||||
| dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.no_rebind_tex2d_rgb_stencil_index8 | ||||
| dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.no_rebind_tex2d_rgba_depth_component16 | ||||
| dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.no_rebind_tex2d_rgba_stencil_index8 | ||||
| dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.rebind_rbo_rgb565_depth_component16 | ||||
| dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.rebind_rbo_rgb565_stencil_index8 | ||||
| dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.rebind_rbo_rgb5_a1_depth_component16 | ||||
| dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.rebind_rbo_rgb5_a1_stencil_index8 | ||||
| dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.rebind_rbo_rgba4_depth_component16 | ||||
| dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.rebind_rbo_rgba4_stencil_index8 | ||||
| dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.rebind_tex2d_rgb_depth_component16 | ||||
| dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.rebind_tex2d_rgb_stencil_index8 | ||||
| dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.rebind_tex2d_rgba_depth_component16 | ||||
| dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.rebind_tex2d_rgba_stencil_index8 | ||||
| dEQP-GLES2.functional.fbo.render.shared_colorbuffer.rbo_rgb565_depth_component16 | ||||
| dEQP-GLES2.functional.fbo.render.shared_colorbuffer.rbo_rgb5_a1_depth_component16 | ||||
| dEQP-GLES2.functional.fbo.render.shared_colorbuffer.rbo_rgba4_depth_component16 | ||||
| dEQP-GLES2.functional.fbo.render.shared_colorbuffer.tex2d_rgb_depth_component16 | ||||
| dEQP-GLES2.functional.fbo.render.shared_colorbuffer.tex2d_rgba_depth_component16 | ||||
| dEQP-GLES2.functional.fbo.render.shared_depthbuffer.rbo_rgb565_depth_component16 | ||||
| dEQP-GLES2.functional.fbo.render.shared_depthbuffer.rbo_rgb5_a1_depth_component16 | ||||
| dEQP-GLES2.functional.fbo.render.shared_depthbuffer.rbo_rgba4_depth_component16 | ||||
| dEQP-GLES2.functional.fbo.render.shared_depthbuffer.tex2d_rgb_depth_component16 | ||||
| dEQP-GLES2.functional.fbo.render.shared_depthbuffer.tex2d_rgba_depth_component16 | ||||
| @@ -1,13 +0,0 @@ | ||||
| # Note: skips lists for CI are just a list of lines that, when | ||||
| # non-zero-length and not starting with '#', will regex match to | ||||
| # delete lines from the test list.  Be careful. | ||||
|  | ||||
| # Skip the perf/stress tests to keep runtime manageable | ||||
| dEQP-GLES[0-9]*.performance.* | ||||
| dEQP-GLES[0-9]*.stress.* | ||||
|  | ||||
| # These are really slow on tiling architectures (including llvmpipe). | ||||
| dEQP-GLES[0-9]*.functional.flush_finish.* | ||||
|  | ||||
| # XXX: Why does this flake? | ||||
| dEQP-GLES2.functional.clipping.triangle_vertex.clip_three.clip_neg_x_neg_z_and_pos_x_pos_z_and_neg_x_neg_y_pos_z | ||||
| @@ -1,31 +0,0 @@ | ||||
| # Disable a TON of tests to keep the run around 5-10 minutes because my runner is | ||||
| # slow. | ||||
| dEQP-VK.api.* | ||||
| dEQP-VK.binding_model.* | ||||
| dEQP-VK.clipping.* | ||||
| dEQP-VK.compute.* | ||||
| dEQP-VK.conditional_rendering.* | ||||
| dEQP-VK.descriptor_indexing.* | ||||
| dEQP-VK.device_group.* | ||||
| dEQP-VK.fragment_operations.* | ||||
| dEQP-VK.fragment_shader_interlock.* | ||||
| dEQP-VK.graphicsfuzz.* | ||||
| dEQP-VK.image.* | ||||
| dEQP-VK.imageless_framebuffer.* | ||||
| dEQP-VK.info.* | ||||
| dEQP-VK.memory.* | ||||
| dEQP-VK.memory_model.* | ||||
| dEQP-VK.multiview.* | ||||
| dEQP-VK.pipeline.* | ||||
| dEQP-VK.protected_memory.* | ||||
| dEQP-VK.query_pool.* | ||||
| dEQP-VK.robustness.* | ||||
| dEQP-VK.sparse_resources.* | ||||
| dEQP-VK.spirv_assembly.* | ||||
| dEQP-VK.subgroups.* | ||||
| dEQP-VK.synchronization.* | ||||
| dEQP-VK.texture.* | ||||
| dEQP-VK.transform_feedback.* | ||||
| dEQP-VK.ubo.* | ||||
| dEQP-VK.wsi.* | ||||
| dEQP-VK.ycbcr.* | ||||
| @@ -1,237 +0,0 @@ | ||||
| #!/bin/sh | ||||
|  | ||||
| set -ex | ||||
|  | ||||
| DEQP_OPTIONS="--deqp-surface-width=256 --deqp-surface-height=256" | ||||
| DEQP_OPTIONS="$DEQP_OPTIONS --deqp-surface-type=pbuffer" | ||||
| DEQP_OPTIONS="$DEQP_OPTIONS --deqp-gl-config-name=rgba8888d24s8ms0" | ||||
| DEQP_OPTIONS="$DEQP_OPTIONS --deqp-visibility=hidden" | ||||
|  | ||||
| # It would be nice to be able to enable the watchdog, so that hangs in a test | ||||
| # don't need to wait the full hour for the run to time out.  However, some | ||||
| # shaders end up taking long enough to compile | ||||
| # (dEQP-GLES31.functional.ubo.random.all_per_block_buffers.20 for example) | ||||
| # that they'll sporadically trigger the watchdog. | ||||
| #DEQP_OPTIONS="$DEQP_OPTIONS --deqp-watchdog=enable" | ||||
|  | ||||
| if [ -z "$DEQP_VER" ]; then | ||||
|    echo 'DEQP_VER must be set to something like "gles2", "gles31" or "vk" for the test run' | ||||
|    exit 1 | ||||
| fi | ||||
|  | ||||
| if [ "$DEQP_VER" = "vk" ]; then | ||||
|    if [ -z "$VK_DRIVER" ]; then | ||||
|       echo 'VK_DRIVER must be to something like "radeon" or "intel" for the test run' | ||||
|       exit 1 | ||||
|    fi | ||||
| fi | ||||
|  | ||||
| if [ -z "$DEQP_SKIPS" ]; then | ||||
|    echo 'DEQP_SKIPS must be set to something like "deqp-default-skips.txt"' | ||||
|    exit 1 | ||||
| fi | ||||
|  | ||||
| ARTIFACTS=`pwd`/artifacts | ||||
|  | ||||
| # Set up the driver environment. | ||||
| export LD_LIBRARY_PATH=`pwd`/install/lib/ | ||||
| export EGL_PLATFORM=surfaceless | ||||
| export VK_ICD_FILENAMES=`pwd`/install/share/vulkan/icd.d/"$VK_DRIVER"_icd.x86_64.json | ||||
|  | ||||
| # the runner was failing to look for libkms in /usr/local/lib for some reason | ||||
| # I never figured out. | ||||
| export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib | ||||
|  | ||||
| RESULTS=`pwd`/results | ||||
| mkdir -p $RESULTS | ||||
|  | ||||
| # Generate test case list file. | ||||
| if [ "$DEQP_VER" = "vk" ]; then | ||||
|    cp /deqp/mustpass/vk-master.txt /tmp/case-list.txt | ||||
|    DEQP=/deqp/external/vulkancts/modules/vulkan/deqp-vk | ||||
| else | ||||
|    cp /deqp/mustpass/$DEQP_VER-master.txt /tmp/case-list.txt | ||||
|    DEQP=/deqp/modules/$DEQP_VER/deqp-$DEQP_VER | ||||
| fi | ||||
|  | ||||
| # If the job is parallel, take the corresponding fraction of the caselist. | ||||
| # Note: N~M is a gnu sed extension to match every nth line (first line is #1). | ||||
| if [ -n "$CI_NODE_INDEX" ]; then | ||||
|    sed -ni $CI_NODE_INDEX~$CI_NODE_TOTAL"p" /tmp/case-list.txt | ||||
| fi | ||||
|  | ||||
| if [ ! -s /tmp/case-list.txt ]; then | ||||
|     echo "Caselist generation failed" | ||||
|     exit 1 | ||||
| fi | ||||
|  | ||||
| if [ -n "$DEQP_EXPECTED_FAILS" ]; then | ||||
|     XFAIL="--xfail-list $ARTIFACTS/$DEQP_EXPECTED_FAILS" | ||||
| fi | ||||
|  | ||||
| set +e | ||||
|  | ||||
| run_cts() { | ||||
|     deqp=$1 | ||||
|     caselist=$2 | ||||
|     output=$3 | ||||
|     deqp-runner \ | ||||
|         --deqp $deqp \ | ||||
|         --output $output \ | ||||
|         --caselist $caselist \ | ||||
|         --exclude-list $ARTIFACTS/$DEQP_SKIPS \ | ||||
|         $XFAIL \ | ||||
|         --job ${DEQP_PARALLEL:-1} \ | ||||
| 	--allow-flakes true \ | ||||
| 	$DEQP_RUNNER_OPTIONS \ | ||||
|         -- \ | ||||
|         $DEQP_OPTIONS | ||||
| } | ||||
|  | ||||
| report_flakes() { | ||||
|     if [ -z "$FLAKES_CHANNEL" ]; then | ||||
|         return 0 | ||||
|     fi | ||||
|     flakes=$1 | ||||
|     bot="$CI_RUNNER_DESCRIPTION-$CI_PIPELINE_ID" | ||||
|     channel="$FLAKES_CHANNEL" | ||||
|     ( | ||||
|     echo NICK $bot | ||||
|     echo USER $bot unused unused :Gitlab CI Notifier | ||||
|     sleep 10 | ||||
|     echo "JOIN $channel" | ||||
|     sleep 1 | ||||
|     desc="Flakes detected in job: $CI_JOB_URL on $CI_RUNNER_DESCRIPTION" | ||||
|     if [ -n "CI_MERGE_REQUEST_SOURCE_BRANCH_NAME" ]; then | ||||
|         desc="$desc on branch $CI_MERGE_REQUEST_SOURCE_BRANCH_NAME ($CI_MERGE_REQUEST_TITLE)" | ||||
|     fi | ||||
|     echo "PRIVMSG $channel :$desc" | ||||
|     for flake in `cat $flakes`; do | ||||
|         echo "PRIVMSG $channel :$flake" | ||||
|     done | ||||
|     echo "PRIVMSG $channel :See $CI_JOB_URL/artifacts/browse/results/" | ||||
|     echo "QUIT" | ||||
|     ) | nc irc.freenode.net 6667 > /dev/null | ||||
|  | ||||
| } | ||||
|  | ||||
| extract_xml_result() { | ||||
|     testcase=$1 | ||||
|     shift 1 | ||||
|     qpas=$* | ||||
|     start="#beginTestCaseResult $testcase" | ||||
|     for qpa in $qpas; do | ||||
|         while IFS= read -r line; do | ||||
|             if [ "$line" = "$start" ]; then | ||||
|                 dst="$testcase.qpa" | ||||
|                 echo "#beginSession" > $dst | ||||
|                 echo $line >> $dst | ||||
|                 while IFS= read -r line; do | ||||
|                     if [ "$line" = "#endTestCaseResult" ]; then | ||||
|                         echo $line >> $dst | ||||
|                         echo "#endSession" >> $dst | ||||
|                         /deqp/executor/testlog-to-xml $dst "$RESULTS/$testcase.xml" | ||||
|                         # copy the stylesheets here so they only end up in artifacts | ||||
|                         # if we have one or more result xml in artifacts | ||||
|                         cp /deqp/testlog.css "$RESULTS/" | ||||
|                         cp /deqp/testlog.xsl "$RESULTS/" | ||||
|                         return 0 | ||||
|                     fi | ||||
|                     echo $line >> $dst | ||||
|                 done | ||||
|                 return 1 | ||||
|             fi | ||||
|         done < $qpa | ||||
|     done | ||||
| } | ||||
|  | ||||
| extract_xml_results() { | ||||
|     qpas=$* | ||||
|     while IFS= read -r testcase; do | ||||
|         testcase=${testcase%,*} | ||||
|         extract_xml_result $testcase $qpas | ||||
|     done | ||||
| } | ||||
|  | ||||
| # Generate junit results | ||||
| generate_junit() { | ||||
|     results=$1 | ||||
|     echo "<?xml version=\"1.0\" encoding=\"utf-8\"?>" | ||||
|     echo "<testsuites>" | ||||
|     echo "<testsuite name=\"$DEQP_VER-$CI_NODE_INDEX\">" | ||||
|     while read line; do | ||||
|         testcase=${line%,*} | ||||
|         result=${line#*,} | ||||
|         # avoid counting Skip's in the # of tests: | ||||
|         if [ "$result" = "Skip" ]; then | ||||
|             continue; | ||||
|         fi | ||||
|         echo "<testcase name=\"$testcase\">" | ||||
|         if [ "$result" != "Pass" ]; then | ||||
|             echo "<failure type=\"$result\">" | ||||
|             echo "$result: See $CI_JOB_URL/artifacts/results/$testcase.xml" | ||||
|             echo "</failure>" | ||||
|         fi | ||||
|         echo "</testcase>" | ||||
|     done < $results | ||||
|     echo "</testsuite>" | ||||
|     echo "</testsuites>" | ||||
| } | ||||
|  | ||||
| # wrapper to supress +x to avoid spamming the log | ||||
| quiet() { | ||||
|     set +x | ||||
|     "$@" | ||||
|     set -x | ||||
| } | ||||
|  | ||||
| run_cts $DEQP /tmp/case-list.txt $RESULTS/cts-runner-results.txt | ||||
| DEQP_EXITCODE=$? | ||||
|  | ||||
| quiet generate_junit $RESULTS/cts-runner-results.txt > $RESULTS/results.xml | ||||
|  | ||||
| if [ $DEQP_EXITCODE -ne 0 ]; then | ||||
|     # preserve caselist files in case of failures: | ||||
|     cp /tmp/deqp_runner.*.txt $RESULTS/ | ||||
|     echo "Some unexpected results found (see cts-runner-results.txt in artifacts for full results):" | ||||
|     cat $RESULTS/cts-runner-results.txt | \ | ||||
|         grep -v ",Pass" | \ | ||||
|         grep -v ",Skip" | \ | ||||
|         grep -v ",ExpectedFail" > \ | ||||
|         $RESULTS/cts-runner-unexpected-results.txt | ||||
|     head -n 50 $RESULTS/cts-runner-unexpected-results.txt | ||||
|  | ||||
|     if [ -z "$DEQP_NO_SAVE_RESULTS" ]; then | ||||
|         # Save the logs for up to the first 50 unexpected results: | ||||
|         head -n 50 $RESULTS/cts-runner-unexpected-results.txt | quiet extract_xml_results /tmp/*.qpa | ||||
|     fi | ||||
|  | ||||
|     count=`cat $RESULTS/cts-runner-unexpected-results.txt | wc -l` | ||||
|  | ||||
|     # Re-run fails to detect flakes.  But use a small threshold, if | ||||
|     # something was fundamentally broken, we don't want to re-run | ||||
|     # the entire caselist | ||||
| else | ||||
|     cat $RESULTS/cts-runner-results.txt | \ | ||||
|         grep ",Flake" > \ | ||||
|         $RESULTS/cts-runner-flakes.txt | ||||
|  | ||||
|     count=`cat $RESULTS/cts-runner-flakes.txt | wc -l` | ||||
|     if [ $count -gt 0 ]; then | ||||
|         echo "Some flakes found (see cts-runner-flakes.txt in artifacts for full results):" | ||||
|         head -n 50 $RESULTS/cts-runner-flakes.txt | ||||
|  | ||||
|         if [ -z "$DEQP_NO_SAVE_RESULTS" ]; then | ||||
|             # Save the logs for up to the first 50 flakes: | ||||
|             head -n 50 $RESULTS/cts-runner-flakes.txt | quiet extract_xml_results /tmp/*.qpa | ||||
|         fi | ||||
|  | ||||
|         # Report the flakes to IRC channel for monitoring (if configured): | ||||
|         quiet report_flakes $RESULTS/cts-runner-flakes.txt | ||||
|     else | ||||
|         # no flakes, so clean-up: | ||||
|         rm $RESULTS/cts-runner-flakes.txt | ||||
|     fi | ||||
| fi | ||||
|  | ||||
| exit $DEQP_EXITCODE | ||||
| @@ -1,844 +0,0 @@ | ||||
| dEQP-GLES2.functional.clipping.line.wide_line_clip_viewport_center | ||||
| dEQP-GLES2.functional.clipping.line.wide_line_clip_viewport_corner | ||||
| dEQP-GLES2.functional.clipping.point.wide_point_clip | ||||
| dEQP-GLES2.functional.clipping.point.wide_point_clip_viewport_center | ||||
| dEQP-GLES2.functional.clipping.point.wide_point_clip_viewport_corner | ||||
| dEQP-GLES2.functional.clipping.triangle_vertex.clip_two.clip_neg_y_neg_z_and_neg_x_neg_y_pos_z | ||||
| dEQP-GLES2.functional.clipping.triangle_vertex.clip_two.clip_pos_y_pos_z_and_neg_x_neg_y_neg_z | ||||
| dEQP-GLES2.functional.polygon_offset.default_displacement_with_units | ||||
| dEQP-GLES2.functional.polygon_offset.fixed16_displacement_with_units | ||||
| dEQP-GLES2.functional.rasterization.interpolation.basic.line_loop_wide | ||||
| dEQP-GLES2.functional.rasterization.interpolation.basic.line_strip_wide | ||||
| dEQP-GLES2.functional.rasterization.interpolation.basic.lines_wide | ||||
| dEQP-GLES2.functional.rasterization.interpolation.projected.line_loop_wide | ||||
| dEQP-GLES2.functional.rasterization.interpolation.projected.line_strip_wide | ||||
| dEQP-GLES2.functional.rasterization.interpolation.projected.lines_wide | ||||
| dEQP-GLES2.functional.rasterization.limits.points | ||||
| dEQP-GLES2.functional.rasterization.primitives.points | ||||
| dEQP-GLES3.functional.clipping.line.wide_line_clip_viewport_center | ||||
| dEQP-GLES3.functional.clipping.line.wide_line_clip_viewport_corner | ||||
| dEQP-GLES3.functional.clipping.point.wide_point_clip | ||||
| dEQP-GLES3.functional.clipping.point.wide_point_clip_viewport_center | ||||
| dEQP-GLES3.functional.clipping.point.wide_point_clip_viewport_corner | ||||
| dEQP-GLES3.functional.clipping.triangle_vertex.clip_two.clip_neg_y_neg_z_and_neg_x_neg_y_pos_z | ||||
| dEQP-GLES3.functional.clipping.triangle_vertex.clip_two.clip_pos_y_pos_z_and_neg_x_neg_y_neg_z | ||||
| dEQP-GLES3.functional.draw.random.124 | ||||
| dEQP-GLES3.functional.fbo.depth.depth_test_clamp.depth24_stencil8 | ||||
| dEQP-GLES3.functional.fbo.depth.depth_test_clamp.depth32f_stencil8 | ||||
| dEQP-GLES3.functional.fbo.depth.depth_test_clamp.depth_component16 | ||||
| dEQP-GLES3.functional.fbo.depth.depth_test_clamp.depth_component24 | ||||
| dEQP-GLES3.functional.fbo.depth.depth_test_clamp.depth_component32f | ||||
| dEQP-GLES3.functional.fbo.depth.depth_write_clamp.depth32f_stencil8 | ||||
| dEQP-GLES3.functional.fbo.depth.depth_write_clamp.depth_component32f | ||||
| dEQP-GLES3.functional.fbo.invalidate.sub.unbind_blit_msaa_color | ||||
| dEQP-GLES3.functional.fbo.invalidate.sub.unbind_blit_msaa_depth | ||||
| dEQP-GLES3.functional.fbo.invalidate.sub.unbind_blit_msaa_depth_stencil | ||||
| dEQP-GLES3.functional.fbo.invalidate.sub.unbind_blit_msaa_stencil | ||||
| dEQP-GLES3.functional.fbo.invalidate.whole.unbind_blit_msaa_color | ||||
| dEQP-GLES3.functional.fbo.invalidate.whole.unbind_blit_msaa_depth | ||||
| dEQP-GLES3.functional.fbo.invalidate.whole.unbind_blit_msaa_depth_stencil | ||||
| dEQP-GLES3.functional.fbo.invalidate.whole.unbind_blit_msaa_stencil | ||||
| dEQP-GLES3.functional.fbo.msaa.2_samples.depth24_stencil8 | ||||
| dEQP-GLES3.functional.fbo.msaa.2_samples.depth32f_stencil8 | ||||
| dEQP-GLES3.functional.fbo.msaa.2_samples.depth_component16 | ||||
| dEQP-GLES3.functional.fbo.msaa.2_samples.depth_component24 | ||||
| dEQP-GLES3.functional.fbo.msaa.2_samples.depth_component32f | ||||
| dEQP-GLES3.functional.fbo.msaa.2_samples.r11f_g11f_b10f | ||||
| dEQP-GLES3.functional.fbo.msaa.2_samples.r16f | ||||
| dEQP-GLES3.functional.fbo.msaa.2_samples.r8 | ||||
| dEQP-GLES3.functional.fbo.msaa.2_samples.rg16f | ||||
| dEQP-GLES3.functional.fbo.msaa.2_samples.rg8 | ||||
| dEQP-GLES3.functional.fbo.msaa.2_samples.rgb10_a2 | ||||
| dEQP-GLES3.functional.fbo.msaa.2_samples.rgb565 | ||||
| dEQP-GLES3.functional.fbo.msaa.2_samples.rgb5_a1 | ||||
| dEQP-GLES3.functional.fbo.msaa.2_samples.rgb8 | ||||
| dEQP-GLES3.functional.fbo.msaa.2_samples.rgba4 | ||||
| dEQP-GLES3.functional.fbo.msaa.2_samples.rgba8 | ||||
| dEQP-GLES3.functional.fbo.msaa.2_samples.srgb8_alpha8 | ||||
| dEQP-GLES3.functional.fbo.msaa.2_samples.stencil_index8 | ||||
| dEQP-GLES3.functional.fbo.msaa.4_samples.depth24_stencil8 | ||||
| dEQP-GLES3.functional.fbo.msaa.4_samples.depth32f_stencil8 | ||||
| dEQP-GLES3.functional.fbo.msaa.4_samples.depth_component16 | ||||
| dEQP-GLES3.functional.fbo.msaa.4_samples.depth_component24 | ||||
| dEQP-GLES3.functional.fbo.msaa.4_samples.depth_component32f | ||||
| dEQP-GLES3.functional.fbo.msaa.4_samples.r11f_g11f_b10f | ||||
| dEQP-GLES3.functional.fbo.msaa.4_samples.r16f | ||||
| dEQP-GLES3.functional.fbo.msaa.4_samples.r8 | ||||
| dEQP-GLES3.functional.fbo.msaa.4_samples.rg16f | ||||
| dEQP-GLES3.functional.fbo.msaa.4_samples.rg8 | ||||
| dEQP-GLES3.functional.fbo.msaa.4_samples.rgb10_a2 | ||||
| dEQP-GLES3.functional.fbo.msaa.4_samples.rgb565 | ||||
| dEQP-GLES3.functional.fbo.msaa.4_samples.rgb5_a1 | ||||
| dEQP-GLES3.functional.fbo.msaa.4_samples.rgb8 | ||||
| dEQP-GLES3.functional.fbo.msaa.4_samples.rgba4 | ||||
| dEQP-GLES3.functional.fbo.msaa.4_samples.rgba8 | ||||
| dEQP-GLES3.functional.fbo.msaa.4_samples.srgb8_alpha8 | ||||
| dEQP-GLES3.functional.fbo.msaa.4_samples.stencil_index8 | ||||
| dEQP-GLES3.functional.multisample.fbo_max_samples.proportionality_alpha_to_coverage | ||||
| dEQP-GLES3.functional.multisample.fbo_max_samples.proportionality_sample_coverage | ||||
| dEQP-GLES3.functional.multisample.fbo_max_samples.proportionality_sample_coverage_inverted | ||||
| dEQP-GLES3.functional.multisample.fbo_max_samples.sample_coverage_invert | ||||
| dEQP-GLES3.functional.negative_api.buffer.blit_framebuffer_multisample | ||||
| dEQP-GLES3.functional.negative_api.buffer.read_pixels_fbo_format_mismatch | ||||
| dEQP-GLES3.functional.polygon_offset.default_displacement_with_units | ||||
| dEQP-GLES3.functional.polygon_offset.fixed16_displacement_with_units | ||||
| dEQP-GLES3.functional.polygon_offset.fixed24_displacement_with_units | ||||
| dEQP-GLES3.functional.polygon_offset.float32_displacement_with_units | ||||
| dEQP-GLES3.functional.rasterization.fbo.rbo_multisample_max.interpolation.lines_wide | ||||
| dEQP-GLES3.functional.rasterization.fbo.rbo_multisample_max.primitives.lines_wide | ||||
| dEQP-GLES3.functional.rasterization.fbo.rbo_singlesample.interpolation.lines_wide | ||||
| dEQP-GLES3.functional.rasterization.fbo.rbo_singlesample.primitives.points | ||||
| dEQP-GLES3.functional.rasterization.fbo.texture_2d.interpolation.lines_wide | ||||
| dEQP-GLES3.functional.rasterization.fbo.texture_2d.primitives.points | ||||
| dEQP-GLES3.functional.rasterization.interpolation.basic.line_loop_wide | ||||
| dEQP-GLES3.functional.rasterization.interpolation.basic.line_strip_wide | ||||
| dEQP-GLES3.functional.rasterization.interpolation.basic.lines_wide | ||||
| dEQP-GLES3.functional.rasterization.interpolation.projected.line_loop_wide | ||||
| dEQP-GLES3.functional.rasterization.interpolation.projected.line_strip_wide | ||||
| dEQP-GLES3.functional.rasterization.interpolation.projected.lines_wide | ||||
| dEQP-GLES3.functional.rasterization.primitives.points | ||||
| dEQP-GLES3.functional.rasterizer_discard.basic.write_depth_points | ||||
| dEQP-GLES3.functional.rasterizer_discard.basic.write_stencil_points | ||||
| dEQP-GLES3.functional.rasterizer_discard.fbo.write_depth_points | ||||
| dEQP-GLES3.functional.rasterizer_discard.fbo.write_stencil_points | ||||
| dEQP-GLES3.functional.rasterizer_discard.scissor.write_depth_points | ||||
| dEQP-GLES3.functional.rasterizer_discard.scissor.write_stencil_points | ||||
| dEQP-GLES3.functional.shaders.derivate.dfdx.fastest.fbo_msaa4.float_highp | ||||
| dEQP-GLES3.functional.shaders.derivate.dfdx.fastest.fbo_msaa4.float_mediump | ||||
| dEQP-GLES3.functional.shaders.derivate.dfdx.fastest.fbo_msaa4.vec2_highp | ||||
| dEQP-GLES3.functional.shaders.derivate.dfdx.fastest.fbo_msaa4.vec2_mediump | ||||
| dEQP-GLES3.functional.shaders.derivate.dfdx.fastest.fbo_msaa4.vec3_highp | ||||
| dEQP-GLES3.functional.shaders.derivate.dfdx.fastest.fbo_msaa4.vec3_mediump | ||||
| dEQP-GLES3.functional.shaders.derivate.dfdx.fastest.fbo_msaa4.vec4_highp | ||||
| dEQP-GLES3.functional.shaders.derivate.dfdx.fastest.fbo_msaa4.vec4_mediump | ||||
| dEQP-GLES3.functional.shaders.derivate.dfdx.fbo_msaa2.float_highp | ||||
| dEQP-GLES3.functional.shaders.derivate.dfdx.fbo_msaa2.float_mediump | ||||
| dEQP-GLES3.functional.shaders.derivate.dfdx.fbo_msaa2.vec2_highp | ||||
| dEQP-GLES3.functional.shaders.derivate.dfdx.fbo_msaa2.vec2_mediump | ||||
| dEQP-GLES3.functional.shaders.derivate.dfdx.fbo_msaa2.vec3_highp | ||||
| dEQP-GLES3.functional.shaders.derivate.dfdx.fbo_msaa2.vec3_mediump | ||||
| dEQP-GLES3.functional.shaders.derivate.dfdx.fbo_msaa2.vec4_highp | ||||
| dEQP-GLES3.functional.shaders.derivate.dfdx.fbo_msaa2.vec4_mediump | ||||
| dEQP-GLES3.functional.shaders.derivate.dfdx.fbo_msaa4.float_highp | ||||
| dEQP-GLES3.functional.shaders.derivate.dfdx.fbo_msaa4.float_mediump | ||||
| dEQP-GLES3.functional.shaders.derivate.dfdx.fbo_msaa4.vec2_highp | ||||
| dEQP-GLES3.functional.shaders.derivate.dfdx.fbo_msaa4.vec2_mediump | ||||
| dEQP-GLES3.functional.shaders.derivate.dfdx.fbo_msaa4.vec3_highp | ||||
| dEQP-GLES3.functional.shaders.derivate.dfdx.fbo_msaa4.vec3_mediump | ||||
| dEQP-GLES3.functional.shaders.derivate.dfdx.fbo_msaa4.vec4_highp | ||||
| dEQP-GLES3.functional.shaders.derivate.dfdx.fbo_msaa4.vec4_mediump | ||||
| dEQP-GLES3.functional.shaders.derivate.dfdx.nicest.fbo_msaa4.float_highp | ||||
| dEQP-GLES3.functional.shaders.derivate.dfdx.nicest.fbo_msaa4.float_mediump | ||||
| dEQP-GLES3.functional.shaders.derivate.dfdx.nicest.fbo_msaa4.vec2_highp | ||||
| dEQP-GLES3.functional.shaders.derivate.dfdx.nicest.fbo_msaa4.vec2_mediump | ||||
| dEQP-GLES3.functional.shaders.derivate.dfdx.nicest.fbo_msaa4.vec3_highp | ||||
| dEQP-GLES3.functional.shaders.derivate.dfdx.nicest.fbo_msaa4.vec3_mediump | ||||
| dEQP-GLES3.functional.shaders.derivate.dfdx.nicest.fbo_msaa4.vec4_highp | ||||
| dEQP-GLES3.functional.shaders.derivate.dfdx.nicest.fbo_msaa4.vec4_mediump | ||||
| dEQP-GLES3.functional.shaders.derivate.dfdx.texture.msaa4.float_highp | ||||
| dEQP-GLES3.functional.shaders.derivate.dfdx.texture.msaa4.float_mediump | ||||
| dEQP-GLES3.functional.shaders.derivate.dfdx.texture.msaa4.vec2_highp | ||||
| dEQP-GLES3.functional.shaders.derivate.dfdx.texture.msaa4.vec2_mediump | ||||
| dEQP-GLES3.functional.shaders.derivate.dfdx.texture.msaa4.vec3_highp | ||||
| dEQP-GLES3.functional.shaders.derivate.dfdx.texture.msaa4.vec3_mediump | ||||
| dEQP-GLES3.functional.shaders.derivate.dfdx.texture.msaa4.vec4_highp | ||||
| dEQP-GLES3.functional.shaders.derivate.dfdx.texture.msaa4.vec4_mediump | ||||
| dEQP-GLES3.functional.shaders.derivate.dfdy.fastest.fbo_msaa4.float_highp | ||||
| dEQP-GLES3.functional.shaders.derivate.dfdy.fastest.fbo_msaa4.float_mediump | ||||
| dEQP-GLES3.functional.shaders.derivate.dfdy.fastest.fbo_msaa4.vec2_highp | ||||
| dEQP-GLES3.functional.shaders.derivate.dfdy.fastest.fbo_msaa4.vec2_mediump | ||||
| dEQP-GLES3.functional.shaders.derivate.dfdy.fastest.fbo_msaa4.vec3_highp | ||||
| dEQP-GLES3.functional.shaders.derivate.dfdy.fastest.fbo_msaa4.vec3_mediump | ||||
| dEQP-GLES3.functional.shaders.derivate.dfdy.fastest.fbo_msaa4.vec4_highp | ||||
| dEQP-GLES3.functional.shaders.derivate.dfdy.fastest.fbo_msaa4.vec4_mediump | ||||
| dEQP-GLES3.functional.shaders.derivate.dfdy.fbo_msaa2.float_highp | ||||
| dEQP-GLES3.functional.shaders.derivate.dfdy.fbo_msaa2.float_mediump | ||||
| dEQP-GLES3.functional.shaders.derivate.dfdy.fbo_msaa2.vec2_highp | ||||
| dEQP-GLES3.functional.shaders.derivate.dfdy.fbo_msaa2.vec2_mediump | ||||
| dEQP-GLES3.functional.shaders.derivate.dfdy.fbo_msaa2.vec3_highp | ||||
| dEQP-GLES3.functional.shaders.derivate.dfdy.fbo_msaa2.vec3_mediump | ||||
| dEQP-GLES3.functional.shaders.derivate.dfdy.fbo_msaa2.vec4_highp | ||||
| dEQP-GLES3.functional.shaders.derivate.dfdy.fbo_msaa2.vec4_mediump | ||||
| dEQP-GLES3.functional.shaders.derivate.dfdy.fbo_msaa4.float_highp | ||||
| dEQP-GLES3.functional.shaders.derivate.dfdy.fbo_msaa4.float_mediump | ||||
| dEQP-GLES3.functional.shaders.derivate.dfdy.fbo_msaa4.vec2_highp | ||||
| dEQP-GLES3.functional.shaders.derivate.dfdy.fbo_msaa4.vec2_mediump | ||||
| dEQP-GLES3.functional.shaders.derivate.dfdy.fbo_msaa4.vec3_highp | ||||
| dEQP-GLES3.functional.shaders.derivate.dfdy.fbo_msaa4.vec3_mediump | ||||
| dEQP-GLES3.functional.shaders.derivate.dfdy.fbo_msaa4.vec4_highp | ||||
| dEQP-GLES3.functional.shaders.derivate.dfdy.fbo_msaa4.vec4_mediump | ||||
| dEQP-GLES3.functional.shaders.derivate.dfdy.nicest.fbo_msaa4.float_highp | ||||
| dEQP-GLES3.functional.shaders.derivate.dfdy.nicest.fbo_msaa4.float_mediump | ||||
| dEQP-GLES3.functional.shaders.derivate.dfdy.nicest.fbo_msaa4.vec2_highp | ||||
| dEQP-GLES3.functional.shaders.derivate.dfdy.nicest.fbo_msaa4.vec2_mediump | ||||
| dEQP-GLES3.functional.shaders.derivate.dfdy.nicest.fbo_msaa4.vec3_highp | ||||
| dEQP-GLES3.functional.shaders.derivate.dfdy.nicest.fbo_msaa4.vec3_mediump | ||||
| dEQP-GLES3.functional.shaders.derivate.dfdy.nicest.fbo_msaa4.vec4_highp | ||||
| dEQP-GLES3.functional.shaders.derivate.dfdy.nicest.fbo_msaa4.vec4_mediump | ||||
| dEQP-GLES3.functional.shaders.derivate.dfdy.texture.msaa4.float_highp | ||||
| dEQP-GLES3.functional.shaders.derivate.dfdy.texture.msaa4.float_mediump | ||||
| dEQP-GLES3.functional.shaders.derivate.dfdy.texture.msaa4.vec2_highp | ||||
| dEQP-GLES3.functional.shaders.derivate.dfdy.texture.msaa4.vec2_mediump | ||||
| dEQP-GLES3.functional.shaders.derivate.dfdy.texture.msaa4.vec3_highp | ||||
| dEQP-GLES3.functional.shaders.derivate.dfdy.texture.msaa4.vec3_mediump | ||||
| dEQP-GLES3.functional.shaders.derivate.dfdy.texture.msaa4.vec4_highp | ||||
| dEQP-GLES3.functional.shaders.derivate.dfdy.texture.msaa4.vec4_mediump | ||||
| dEQP-GLES3.functional.shaders.derivate.fwidth.fastest.fbo_msaa4.float_highp | ||||
| dEQP-GLES3.functional.shaders.derivate.fwidth.fastest.fbo_msaa4.float_mediump | ||||
| dEQP-GLES3.functional.shaders.derivate.fwidth.fastest.fbo_msaa4.vec2_highp | ||||
| dEQP-GLES3.functional.shaders.derivate.fwidth.fastest.fbo_msaa4.vec2_mediump | ||||
| dEQP-GLES3.functional.shaders.derivate.fwidth.fastest.fbo_msaa4.vec3_highp | ||||
| dEQP-GLES3.functional.shaders.derivate.fwidth.fastest.fbo_msaa4.vec3_mediump | ||||
| dEQP-GLES3.functional.shaders.derivate.fwidth.fastest.fbo_msaa4.vec4_highp | ||||
| dEQP-GLES3.functional.shaders.derivate.fwidth.fastest.fbo_msaa4.vec4_mediump | ||||
| dEQP-GLES3.functional.shaders.derivate.fwidth.fbo_msaa2.float_highp | ||||
| dEQP-GLES3.functional.shaders.derivate.fwidth.fbo_msaa2.float_mediump | ||||
| dEQP-GLES3.functional.shaders.derivate.fwidth.fbo_msaa2.vec2_highp | ||||
| dEQP-GLES3.functional.shaders.derivate.fwidth.fbo_msaa2.vec2_mediump | ||||
| dEQP-GLES3.functional.shaders.derivate.fwidth.fbo_msaa2.vec3_highp | ||||
| dEQP-GLES3.functional.shaders.derivate.fwidth.fbo_msaa2.vec3_mediump | ||||
| dEQP-GLES3.functional.shaders.derivate.fwidth.fbo_msaa2.vec4_highp | ||||
| dEQP-GLES3.functional.shaders.derivate.fwidth.fbo_msaa2.vec4_mediump | ||||
| dEQP-GLES3.functional.shaders.derivate.fwidth.fbo_msaa4.float_highp | ||||
| dEQP-GLES3.functional.shaders.derivate.fwidth.fbo_msaa4.float_mediump | ||||
| dEQP-GLES3.functional.shaders.derivate.fwidth.fbo_msaa4.vec2_highp | ||||
| dEQP-GLES3.functional.shaders.derivate.fwidth.fbo_msaa4.vec2_mediump | ||||
| dEQP-GLES3.functional.shaders.derivate.fwidth.fbo_msaa4.vec3_highp | ||||
| dEQP-GLES3.functional.shaders.derivate.fwidth.fbo_msaa4.vec3_mediump | ||||
| dEQP-GLES3.functional.shaders.derivate.fwidth.fbo_msaa4.vec4_highp | ||||
| dEQP-GLES3.functional.shaders.derivate.fwidth.fbo_msaa4.vec4_mediump | ||||
| dEQP-GLES3.functional.shaders.derivate.fwidth.nicest.fbo_msaa4.float_highp | ||||
| dEQP-GLES3.functional.shaders.derivate.fwidth.nicest.fbo_msaa4.float_mediump | ||||
| dEQP-GLES3.functional.shaders.derivate.fwidth.nicest.fbo_msaa4.vec2_highp | ||||
| dEQP-GLES3.functional.shaders.derivate.fwidth.nicest.fbo_msaa4.vec2_mediump | ||||
| dEQP-GLES3.functional.shaders.derivate.fwidth.nicest.fbo_msaa4.vec3_highp | ||||
| dEQP-GLES3.functional.shaders.derivate.fwidth.nicest.fbo_msaa4.vec3_mediump | ||||
| dEQP-GLES3.functional.shaders.derivate.fwidth.nicest.fbo_msaa4.vec4_highp | ||||
| dEQP-GLES3.functional.shaders.derivate.fwidth.nicest.fbo_msaa4.vec4_mediump | ||||
| dEQP-GLES3.functional.shaders.derivate.fwidth.texture.msaa4.float_highp | ||||
| dEQP-GLES3.functional.shaders.derivate.fwidth.texture.msaa4.float_mediump | ||||
| dEQP-GLES3.functional.shaders.derivate.fwidth.texture.msaa4.vec2_highp | ||||
| dEQP-GLES3.functional.shaders.derivate.fwidth.texture.msaa4.vec2_mediump | ||||
| dEQP-GLES3.functional.shaders.derivate.fwidth.texture.msaa4.vec3_highp | ||||
| dEQP-GLES3.functional.shaders.derivate.fwidth.texture.msaa4.vec3_mediump | ||||
| dEQP-GLES3.functional.shaders.derivate.fwidth.texture.msaa4.vec4_highp | ||||
| dEQP-GLES3.functional.shaders.derivate.fwidth.texture.msaa4.vec4_mediump | ||||
| dEQP-GLES3.functional.state_query.integers.max_samples_getfloat | ||||
| dEQP-GLES3.functional.state_query.integers.max_samples_getinteger64 | ||||
| dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_linear_clamp_clamp_mirror | ||||
| dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_linear_clamp_clamp_repeat | ||||
| dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_linear_clamp_mirror_mirror | ||||
| dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_linear_clamp_mirror_repeat | ||||
| dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_linear_clamp_repeat_mirror | ||||
| dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_linear_clamp_repeat_repeat | ||||
| dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_linear_mirror_clamp_mirror | ||||
| dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_linear_mirror_clamp_repeat | ||||
| dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_linear_mirror_mirror_mirror | ||||
| dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_linear_mirror_mirror_repeat | ||||
| dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_linear_mirror_repeat_mirror | ||||
| dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_linear_mirror_repeat_repeat | ||||
| dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_linear_repeat_clamp_mirror | ||||
| dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_linear_repeat_clamp_repeat | ||||
| dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_linear_repeat_mirror_mirror | ||||
| dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_linear_repeat_mirror_repeat | ||||
| dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_linear_repeat_repeat_mirror | ||||
| dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_linear_repeat_repeat_repeat | ||||
| dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_mipmap_linear_linear_clamp_clamp_repeat | ||||
| dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_mipmap_linear_linear_clamp_mirror_repeat | ||||
| dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_mipmap_linear_linear_clamp_repeat_repeat | ||||
| dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_mipmap_linear_linear_mirror_clamp_repeat | ||||
| dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_mipmap_linear_linear_mirror_mirror_repeat | ||||
| dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_mipmap_linear_linear_mirror_repeat_repeat | ||||
| dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_mipmap_linear_linear_repeat_clamp_mirror | ||||
| dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_mipmap_linear_linear_repeat_clamp_repeat | ||||
| dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_mipmap_linear_linear_repeat_mirror_mirror | ||||
| dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_mipmap_linear_linear_repeat_mirror_repeat | ||||
| dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_mipmap_linear_linear_repeat_repeat_mirror | ||||
| dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_mipmap_linear_linear_repeat_repeat_repeat | ||||
| dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_mipmap_linear_nearest_repeat_clamp_mirror | ||||
| dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_mipmap_linear_nearest_repeat_clamp_repeat | ||||
| dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_mipmap_linear_nearest_repeat_mirror_mirror | ||||
| dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_mipmap_linear_nearest_repeat_mirror_repeat | ||||
| dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_mipmap_linear_nearest_repeat_repeat_mirror | ||||
| dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_mipmap_linear_nearest_repeat_repeat_repeat | ||||
| dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_mipmap_nearest_linear_clamp_clamp_repeat | ||||
| dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_mipmap_nearest_linear_clamp_mirror_repeat | ||||
| dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_mipmap_nearest_linear_clamp_repeat_repeat | ||||
| dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_mipmap_nearest_linear_mirror_clamp_repeat | ||||
| dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_mipmap_nearest_linear_mirror_mirror_repeat | ||||
| dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_mipmap_nearest_linear_mirror_repeat_repeat | ||||
| dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_mipmap_nearest_linear_repeat_clamp_mirror | ||||
| dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_mipmap_nearest_linear_repeat_clamp_repeat | ||||
| dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_mipmap_nearest_linear_repeat_mirror_mirror | ||||
| dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_mipmap_nearest_linear_repeat_mirror_repeat | ||||
| dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_mipmap_nearest_linear_repeat_repeat_mirror | ||||
| dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_mipmap_nearest_linear_repeat_repeat_repeat | ||||
| dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_mipmap_nearest_nearest_repeat_clamp_mirror | ||||
| dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_mipmap_nearest_nearest_repeat_clamp_repeat | ||||
| dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_mipmap_nearest_nearest_repeat_mirror_mirror | ||||
| dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_mipmap_nearest_nearest_repeat_mirror_repeat | ||||
| dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_mipmap_nearest_nearest_repeat_repeat_mirror | ||||
| dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_mipmap_nearest_nearest_repeat_repeat_repeat | ||||
| dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_nearest_clamp_clamp_mirror | ||||
| dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_nearest_clamp_clamp_repeat | ||||
| dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_nearest_clamp_mirror_mirror | ||||
| dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_nearest_clamp_mirror_repeat | ||||
| dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_nearest_clamp_repeat_mirror | ||||
| dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_nearest_clamp_repeat_repeat | ||||
| dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_nearest_mirror_clamp_mirror | ||||
| dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_nearest_mirror_clamp_repeat | ||||
| dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_nearest_mirror_mirror_mirror | ||||
| dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_nearest_mirror_mirror_repeat | ||||
| dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_nearest_mirror_repeat_mirror | ||||
| dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_nearest_mirror_repeat_repeat | ||||
| dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_nearest_repeat_clamp_mirror | ||||
| dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_nearest_repeat_clamp_repeat | ||||
| dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_nearest_repeat_mirror_mirror | ||||
| dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_nearest_repeat_mirror_repeat | ||||
| dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_nearest_repeat_repeat_mirror | ||||
| dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_nearest_repeat_repeat_repeat | ||||
| dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_linear_clamp_clamp_repeat | ||||
| dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_linear_clamp_mirror_repeat | ||||
| dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_linear_clamp_repeat_repeat | ||||
| dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_linear_mirror_clamp_repeat | ||||
| dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_linear_mirror_mirror_repeat | ||||
| dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_linear_mirror_repeat_repeat | ||||
| dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_linear_repeat_clamp_mirror | ||||
| dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_linear_repeat_clamp_repeat | ||||
| dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_linear_repeat_mirror_mirror | ||||
| dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_linear_repeat_mirror_repeat | ||||
| dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_linear_repeat_repeat_mirror | ||||
| dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_linear_repeat_repeat_repeat | ||||
| dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_mipmap_linear_linear_clamp_clamp_repeat | ||||
| dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_mipmap_linear_linear_clamp_mirror_repeat | ||||
| dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_mipmap_linear_linear_clamp_repeat_repeat | ||||
| dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_mipmap_linear_linear_mirror_clamp_repeat | ||||
| dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_mipmap_linear_linear_mirror_mirror_repeat | ||||
| dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_mipmap_linear_linear_mirror_repeat_repeat | ||||
| dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_mipmap_linear_linear_repeat_clamp_mirror | ||||
| dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_mipmap_linear_linear_repeat_clamp_repeat | ||||
| dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_mipmap_linear_linear_repeat_mirror_mirror | ||||
| dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_mipmap_linear_linear_repeat_mirror_repeat | ||||
| dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_mipmap_linear_linear_repeat_repeat_mirror | ||||
| dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_mipmap_linear_linear_repeat_repeat_repeat | ||||
| dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_mipmap_nearest_linear_clamp_clamp_repeat | ||||
| dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_mipmap_nearest_linear_clamp_mirror_repeat | ||||
| dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_mipmap_nearest_linear_clamp_repeat_repeat | ||||
| dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_mipmap_nearest_linear_mirror_clamp_repeat | ||||
| dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_mipmap_nearest_linear_mirror_mirror_repeat | ||||
| dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_mipmap_nearest_linear_mirror_repeat_repeat | ||||
| dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_mipmap_nearest_linear_repeat_clamp_mirror | ||||
| dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_mipmap_nearest_linear_repeat_clamp_repeat | ||||
| dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_mipmap_nearest_linear_repeat_mirror_mirror | ||||
| dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_mipmap_nearest_linear_repeat_mirror_repeat | ||||
| dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_mipmap_nearest_linear_repeat_repeat_mirror | ||||
| dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_mipmap_nearest_linear_repeat_repeat_repeat | ||||
| dEQP-GLES3.functional.texture.filtering.3d.formats.r11f_g11f_b10f_linear | ||||
| dEQP-GLES3.functional.texture.filtering.3d.formats.r11f_g11f_b10f_linear_mipmap_linear | ||||
| dEQP-GLES3.functional.texture.filtering.3d.formats.r11f_g11f_b10f_linear_mipmap_nearest | ||||
| dEQP-GLES3.functional.texture.filtering.3d.formats.r11f_g11f_b10f_nearest_mipmap_linear | ||||
| dEQP-GLES3.functional.texture.filtering.3d.formats.r11f_g11f_b10f_nearest_mipmap_nearest | ||||
| dEQP-GLES3.functional.texture.filtering.3d.formats.rgb10_a2_linear | ||||
| dEQP-GLES3.functional.texture.filtering.3d.formats.rgb10_a2_linear_mipmap_linear | ||||
| dEQP-GLES3.functional.texture.filtering.3d.formats.rgb10_a2_linear_mipmap_nearest | ||||
| dEQP-GLES3.functional.texture.filtering.3d.formats.rgb10_a2_nearest_mipmap_linear | ||||
| dEQP-GLES3.functional.texture.filtering.3d.formats.rgb10_a2_nearest_mipmap_nearest | ||||
| dEQP-GLES3.functional.texture.filtering.3d.formats.rgb565_linear | ||||
| dEQP-GLES3.functional.texture.filtering.3d.formats.rgb565_linear_mipmap_linear | ||||
| dEQP-GLES3.functional.texture.filtering.3d.formats.rgb565_linear_mipmap_nearest | ||||
| dEQP-GLES3.functional.texture.filtering.3d.formats.rgb565_nearest_mipmap_linear | ||||
| dEQP-GLES3.functional.texture.filtering.3d.formats.rgb565_nearest_mipmap_nearest | ||||
| dEQP-GLES3.functional.texture.filtering.3d.formats.rgb5_a1_linear | ||||
| dEQP-GLES3.functional.texture.filtering.3d.formats.rgb5_a1_linear_mipmap_linear | ||||
| dEQP-GLES3.functional.texture.filtering.3d.formats.rgb5_a1_linear_mipmap_nearest | ||||
| dEQP-GLES3.functional.texture.filtering.3d.formats.rgb5_a1_nearest_mipmap_linear | ||||
| dEQP-GLES3.functional.texture.filtering.3d.formats.rgb5_a1_nearest_mipmap_nearest | ||||
| dEQP-GLES3.functional.texture.filtering.3d.formats.rgb9_e5_linear | ||||
| dEQP-GLES3.functional.texture.filtering.3d.formats.rgb9_e5_linear_mipmap_linear | ||||
| dEQP-GLES3.functional.texture.filtering.3d.formats.rgb9_e5_linear_mipmap_nearest | ||||
| dEQP-GLES3.functional.texture.filtering.3d.formats.rgb9_e5_nearest_mipmap_linear | ||||
| dEQP-GLES3.functional.texture.filtering.3d.formats.rgb9_e5_nearest_mipmap_nearest | ||||
| dEQP-GLES3.functional.texture.filtering.3d.formats.rgba16f_linear | ||||
| dEQP-GLES3.functional.texture.filtering.3d.formats.rgba16f_linear_mipmap_linear | ||||
| dEQP-GLES3.functional.texture.filtering.3d.formats.rgba16f_linear_mipmap_nearest | ||||
| dEQP-GLES3.functional.texture.filtering.3d.formats.rgba16f_nearest_mipmap_linear | ||||
| dEQP-GLES3.functional.texture.filtering.3d.formats.rgba16f_nearest_mipmap_nearest | ||||
| dEQP-GLES3.functional.texture.filtering.3d.formats.rgba4_linear | ||||
| dEQP-GLES3.functional.texture.filtering.3d.formats.rgba4_linear_mipmap_linear | ||||
| dEQP-GLES3.functional.texture.filtering.3d.formats.rgba4_linear_mipmap_nearest | ||||
| dEQP-GLES3.functional.texture.filtering.3d.formats.rgba4_nearest_mipmap_linear | ||||
| dEQP-GLES3.functional.texture.filtering.3d.formats.rgba4_nearest_mipmap_nearest | ||||
| dEQP-GLES3.functional.texture.filtering.3d.formats.rgba8_linear | ||||
| dEQP-GLES3.functional.texture.filtering.3d.formats.rgba8_linear_mipmap_linear | ||||
| dEQP-GLES3.functional.texture.filtering.3d.formats.rgba8_linear_mipmap_nearest | ||||
| dEQP-GLES3.functional.texture.filtering.3d.formats.rgba8_nearest_mipmap_linear | ||||
| dEQP-GLES3.functional.texture.filtering.3d.formats.rgba8_nearest_mipmap_nearest | ||||
| dEQP-GLES3.functional.texture.filtering.3d.formats.rgba8_snorm_linear | ||||
| dEQP-GLES3.functional.texture.filtering.3d.formats.rgba8_snorm_linear_mipmap_linear | ||||
| dEQP-GLES3.functional.texture.filtering.3d.formats.rgba8_snorm_linear_mipmap_nearest | ||||
| dEQP-GLES3.functional.texture.filtering.3d.formats.rgba8_snorm_nearest_mipmap_linear | ||||
| dEQP-GLES3.functional.texture.filtering.3d.formats.rgba8_snorm_nearest_mipmap_nearest | ||||
| dEQP-GLES3.functional.texture.filtering.3d.formats.srgb8_alpha8_linear | ||||
| dEQP-GLES3.functional.texture.filtering.3d.formats.srgb8_alpha8_linear_mipmap_linear | ||||
| dEQP-GLES3.functional.texture.filtering.3d.formats.srgb8_alpha8_linear_mipmap_nearest | ||||
| dEQP-GLES3.functional.texture.filtering.3d.formats.srgb8_alpha8_nearest_mipmap_linear | ||||
| dEQP-GLES3.functional.texture.filtering.3d.formats.srgb8_alpha8_nearest_mipmap_nearest | ||||
| dEQP-GLES3.functional.texture.filtering.3d.formats.srgb_r8_linear | ||||
| dEQP-GLES3.functional.texture.filtering.3d.formats.srgb_r8_linear_mipmap_linear | ||||
| dEQP-GLES3.functional.texture.filtering.3d.formats.srgb_r8_linear_mipmap_nearest | ||||
| dEQP-GLES3.functional.texture.filtering.3d.formats.srgb_r8_nearest_mipmap_linear | ||||
| dEQP-GLES3.functional.texture.filtering.3d.formats.srgb_r8_nearest_mipmap_nearest | ||||
| dEQP-GLES3.functional.texture.filtering.3d.sizes.128x32x64_linear | ||||
| dEQP-GLES3.functional.texture.filtering.3d.sizes.128x32x64_linear_mipmap_linear | ||||
| dEQP-GLES3.functional.texture.filtering.3d.sizes.128x32x64_linear_mipmap_nearest | ||||
| dEQP-GLES3.functional.texture.filtering.3d.sizes.128x32x64_nearest_mipmap_linear | ||||
| dEQP-GLES3.functional.texture.filtering.3d.sizes.128x32x64_nearest_mipmap_nearest | ||||
| dEQP-GLES3.functional.texture.filtering.3d.sizes.63x63x63_linear | ||||
| dEQP-GLES3.functional.texture.filtering.3d.sizes.63x63x63_linear_mipmap_linear | ||||
| dEQP-GLES3.functional.texture.filtering.3d.sizes.63x63x63_linear_mipmap_nearest | ||||
| dEQP-GLES3.functional.texture.filtering.3d.sizes.63x63x63_nearest_mipmap_linear | ||||
| dEQP-GLES3.functional.texture.filtering.3d.sizes.63x63x63_nearest_mipmap_nearest | ||||
| dEQP-GLES3.functional.texture.vertex.3d.filtering.linear_linear_clamp | ||||
| dEQP-GLES3.functional.texture.vertex.3d.filtering.linear_linear_mirror | ||||
| dEQP-GLES3.functional.texture.vertex.3d.filtering.linear_linear_repeat | ||||
| dEQP-GLES3.functional.texture.vertex.3d.filtering.linear_mipmap_linear_linear_clamp | ||||
| dEQP-GLES3.functional.texture.vertex.3d.filtering.linear_mipmap_linear_linear_mirror | ||||
| dEQP-GLES3.functional.texture.vertex.3d.filtering.linear_mipmap_linear_linear_repeat | ||||
| dEQP-GLES3.functional.texture.vertex.3d.filtering.linear_mipmap_linear_nearest_clamp | ||||
| dEQP-GLES3.functional.texture.vertex.3d.filtering.linear_mipmap_linear_nearest_mirror | ||||
| dEQP-GLES3.functional.texture.vertex.3d.filtering.linear_mipmap_linear_nearest_repeat | ||||
| dEQP-GLES3.functional.texture.vertex.3d.filtering.linear_mipmap_nearest_linear_repeat | ||||
| dEQP-GLES3.functional.texture.vertex.3d.filtering.linear_nearest_clamp | ||||
| dEQP-GLES3.functional.texture.vertex.3d.filtering.linear_nearest_mirror | ||||
| dEQP-GLES3.functional.texture.vertex.3d.filtering.linear_nearest_repeat | ||||
| dEQP-GLES3.functional.texture.vertex.3d.filtering.nearest_linear_repeat | ||||
| dEQP-GLES3.functional.texture.vertex.3d.filtering.nearest_mipmap_linear_linear_repeat | ||||
| dEQP-GLES3.functional.texture.vertex.3d.filtering.nearest_mipmap_nearest_linear_repeat | ||||
| dEQP-GLES3.functional.texture.vertex.3d.wrap.clamp_clamp_clamp | ||||
| dEQP-GLES3.functional.texture.vertex.3d.wrap.clamp_clamp_mirror | ||||
| dEQP-GLES3.functional.texture.vertex.3d.wrap.clamp_clamp_repeat | ||||
| dEQP-GLES3.functional.texture.vertex.3d.wrap.clamp_mirror_mirror | ||||
| dEQP-GLES3.functional.texture.vertex.3d.wrap.clamp_mirror_repeat | ||||
| dEQP-GLES3.functional.texture.vertex.3d.wrap.clamp_repeat_mirror | ||||
| dEQP-GLES3.functional.texture.vertex.3d.wrap.clamp_repeat_repeat | ||||
| dEQP-GLES3.functional.texture.vertex.3d.wrap.mirror_clamp_clamp | ||||
| dEQP-GLES3.functional.texture.vertex.3d.wrap.mirror_clamp_mirror | ||||
| dEQP-GLES3.functional.texture.vertex.3d.wrap.mirror_clamp_repeat | ||||
| dEQP-GLES3.functional.texture.vertex.3d.wrap.mirror_mirror_mirror | ||||
| dEQP-GLES3.functional.texture.vertex.3d.wrap.mirror_mirror_repeat | ||||
| dEQP-GLES3.functional.texture.vertex.3d.wrap.mirror_repeat_mirror | ||||
| dEQP-GLES3.functional.texture.vertex.3d.wrap.mirror_repeat_repeat | ||||
| dEQP-GLES3.functional.texture.vertex.3d.wrap.repeat_clamp_clamp | ||||
| dEQP-GLES3.functional.texture.vertex.3d.wrap.repeat_clamp_mirror | ||||
| dEQP-GLES3.functional.texture.vertex.3d.wrap.repeat_clamp_repeat | ||||
| dEQP-GLES3.functional.texture.vertex.3d.wrap.repeat_mirror_clamp | ||||
| dEQP-GLES3.functional.texture.vertex.3d.wrap.repeat_mirror_mirror | ||||
| dEQP-GLES3.functional.texture.vertex.3d.wrap.repeat_mirror_repeat | ||||
| dEQP-GLES3.functional.texture.vertex.3d.wrap.repeat_repeat_clamp | ||||
| dEQP-GLES3.functional.texture.vertex.3d.wrap.repeat_repeat_mirror | ||||
| dEQP-GLES3.functional.texture.vertex.3d.wrap.repeat_repeat_repeat | ||||
| dEQP-GLES3.functional.texture.wrap.astc_8x8.repeat_repeat_linear_divisible | ||||
| dEQP-GLES3.functional.texture.wrap.astc_8x8.repeat_repeat_linear_not_divisible | ||||
| dEQP-GLES3.functional.texture.wrap.astc_8x8_srgb.repeat_repeat_linear_divisible | ||||
| dEQP-GLES3.functional.texture.wrap.astc_8x8_srgb.repeat_repeat_linear_not_divisible | ||||
| dEQP-GLES3.functional.vertex_arrays.single_attribute.normalize.int2_10_10_10.components4_quads1 | ||||
| dEQP-GLES3.functional.vertex_arrays.single_attribute.normalize.int2_10_10_10.components4_quads256 | ||||
| dEQP-GLES31.functional.debug.error_filters.case_29 | ||||
| dEQP-GLES31.functional.debug.negative_coverage.callbacks.buffer.read_pixels_fbo_format_mismatch | ||||
| dEQP-GLES31.functional.debug.negative_coverage.get_error.buffer.blit_framebuffer_multisample | ||||
| dEQP-GLES31.functional.debug.negative_coverage.get_error.buffer.read_pixels_fbo_format_mismatch | ||||
| dEQP-GLES31.functional.debug.negative_coverage.log.buffer.read_pixels_fbo_format_mismatch | ||||
| dEQP-GLES31.functional.draw_base_vertex.draw_elements_instanced_base_vertex.line_loop.instanced_attributes | ||||
| dEQP-GLES31.functional.draw_buffers_indexed.overwrite_indexed.common_color_mask_buffer_color_mask | ||||
| dEQP-GLES31.functional.draw_buffers_indexed.random.max_implementation_draw_buffers.0 | ||||
| dEQP-GLES31.functional.draw_buffers_indexed.random.max_implementation_draw_buffers.1 | ||||
| dEQP-GLES31.functional.draw_buffers_indexed.random.max_implementation_draw_buffers.10 | ||||
| dEQP-GLES31.functional.draw_buffers_indexed.random.max_implementation_draw_buffers.11 | ||||
| dEQP-GLES31.functional.draw_buffers_indexed.random.max_implementation_draw_buffers.12 | ||||
| dEQP-GLES31.functional.draw_buffers_indexed.random.max_implementation_draw_buffers.14 | ||||
| dEQP-GLES31.functional.draw_buffers_indexed.random.max_implementation_draw_buffers.16 | ||||
| dEQP-GLES31.functional.draw_buffers_indexed.random.max_implementation_draw_buffers.17 | ||||
| dEQP-GLES31.functional.draw_buffers_indexed.random.max_implementation_draw_buffers.19 | ||||
| dEQP-GLES31.functional.draw_buffers_indexed.random.max_implementation_draw_buffers.2 | ||||
| dEQP-GLES31.functional.draw_buffers_indexed.random.max_implementation_draw_buffers.3 | ||||
| dEQP-GLES31.functional.draw_buffers_indexed.random.max_implementation_draw_buffers.4 | ||||
| dEQP-GLES31.functional.draw_buffers_indexed.random.max_implementation_draw_buffers.5 | ||||
| dEQP-GLES31.functional.draw_buffers_indexed.random.max_implementation_draw_buffers.6 | ||||
| dEQP-GLES31.functional.draw_buffers_indexed.random.max_implementation_draw_buffers.7 | ||||
| dEQP-GLES31.functional.draw_buffers_indexed.random.max_implementation_draw_buffers.8 | ||||
| dEQP-GLES31.functional.draw_buffers_indexed.random.max_implementation_draw_buffers.9 | ||||
| dEQP-GLES31.functional.draw_buffers_indexed.random.max_required_draw_buffers.0 | ||||
| dEQP-GLES31.functional.draw_buffers_indexed.random.max_required_draw_buffers.1 | ||||
| dEQP-GLES31.functional.draw_buffers_indexed.random.max_required_draw_buffers.14 | ||||
| dEQP-GLES31.functional.draw_buffers_indexed.random.max_required_draw_buffers.15 | ||||
| dEQP-GLES31.functional.draw_buffers_indexed.random.max_required_draw_buffers.16 | ||||
| dEQP-GLES31.functional.draw_buffers_indexed.random.max_required_draw_buffers.17 | ||||
| dEQP-GLES31.functional.draw_buffers_indexed.random.max_required_draw_buffers.19 | ||||
| dEQP-GLES31.functional.draw_buffers_indexed.random.max_required_draw_buffers.2 | ||||
| dEQP-GLES31.functional.draw_buffers_indexed.random.max_required_draw_buffers.4 | ||||
| dEQP-GLES31.functional.draw_buffers_indexed.random.max_required_draw_buffers.5 | ||||
| dEQP-GLES31.functional.draw_buffers_indexed.random.max_required_draw_buffers.7 | ||||
| dEQP-GLES31.functional.draw_buffers_indexed.random.max_required_draw_buffers.9 | ||||
| dEQP-GLES31.functional.draw_indirect.draw_arrays_indirect.line_strip.multiple_attributes | ||||
| dEQP-GLES31.functional.fbo.no_attachments.interaction.17x512ms4_default_16x16ms2 | ||||
| dEQP-GLES31.functional.fbo.no_attachments.interaction.1x1ms0_default_2048x2048ms4 | ||||
| dEQP-GLES31.functional.fbo.no_attachments.interaction.2048x2048ms4_default_1x1ms0 | ||||
| dEQP-GLES31.functional.fbo.no_attachments.interaction.256x256ms0_default_512x512ms2 | ||||
| dEQP-GLES31.functional.fbo.no_attachments.interaction.256x256ms2_default_128x512ms0 | ||||
| dEQP-GLES31.functional.fbo.no_attachments.multisample.samples2 | ||||
| dEQP-GLES31.functional.fbo.no_attachments.multisample.samples3 | ||||
| dEQP-GLES31.functional.fbo.no_attachments.multisample.samples4 | ||||
| dEQP-GLES31.functional.fbo.no_attachments.random.1 | ||||
| dEQP-GLES31.functional.fbo.no_attachments.random.11 | ||||
| dEQP-GLES31.functional.fbo.no_attachments.random.14 | ||||
| dEQP-GLES31.functional.fbo.no_attachments.random.15 | ||||
| dEQP-GLES31.functional.fbo.no_attachments.random.4 | ||||
| dEQP-GLES31.functional.fbo.no_attachments.random.9 | ||||
| dEQP-GLES31.functional.geometry_shading.query.primitives_generated_amplification | ||||
| dEQP-GLES31.functional.geometry_shading.query.primitives_generated_instanced | ||||
| dEQP-GLES31.functional.geometry_shading.query.primitives_generated_no_amplification | ||||
| dEQP-GLES31.functional.geometry_shading.query.primitives_generated_no_geometry | ||||
| dEQP-GLES31.functional.geometry_shading.query.primitives_generated_partial_primitives | ||||
| dEQP-GLES31.functional.image_load_store.early_fragment_tests.early_fragment_tests_stencil | ||||
| dEQP-GLES31.functional.image_load_store.early_fragment_tests.early_fragment_tests_stencil_fbo | ||||
| dEQP-GLES31.functional.image_load_store.early_fragment_tests.no_early_fragment_tests_depth | ||||
| dEQP-GLES31.functional.image_load_store.early_fragment_tests.no_early_fragment_tests_depth_fbo | ||||
| dEQP-GLES31.functional.shaders.opaque_type_indexing.ubo.dynamically_uniform_geometry | ||||
| dEQP-GLES31.functional.state_query.integer.max_framebuffer_samples_getfloat | ||||
| dEQP-GLES31.functional.state_query.integer.max_framebuffer_samples_getinteger | ||||
| dEQP-GLES31.functional.state_query.integer.max_framebuffer_samples_getinteger64 | ||||
| dEQP-GLES31.functional.state_query.texture.texture_2d_multisample.texture_immutable_format_float | ||||
| dEQP-GLES31.functional.state_query.texture.texture_2d_multisample.texture_immutable_format_integer | ||||
| dEQP-GLES31.functional.state_query.texture.texture_2d_multisample.texture_immutable_format_pure_int | ||||
| dEQP-GLES31.functional.state_query.texture.texture_2d_multisample.texture_immutable_format_pure_uint | ||||
| dEQP-GLES31.functional.state_query.texture.texture_2d_multisample.texture_immutable_levels_float | ||||
| dEQP-GLES31.functional.state_query.texture.texture_2d_multisample.texture_immutable_levels_integer | ||||
| dEQP-GLES31.functional.state_query.texture.texture_2d_multisample.texture_immutable_levels_pure_int | ||||
| dEQP-GLES31.functional.state_query.texture.texture_2d_multisample.texture_immutable_levels_pure_uint | ||||
| dEQP-GLES31.functional.state_query.texture.texture_2d_multisample_array.texture_immutable_format_float | ||||
| dEQP-GLES31.functional.state_query.texture.texture_2d_multisample_array.texture_immutable_format_integer | ||||
| dEQP-GLES31.functional.state_query.texture.texture_2d_multisample_array.texture_immutable_format_pure_int | ||||
| dEQP-GLES31.functional.state_query.texture.texture_2d_multisample_array.texture_immutable_format_pure_uint | ||||
| dEQP-GLES31.functional.state_query.texture.texture_2d_multisample_array.texture_immutable_levels_float | ||||
| dEQP-GLES31.functional.state_query.texture.texture_2d_multisample_array.texture_immutable_levels_integer | ||||
| dEQP-GLES31.functional.state_query.texture.texture_2d_multisample_array.texture_immutable_levels_pure_int | ||||
| dEQP-GLES31.functional.state_query.texture.texture_2d_multisample_array.texture_immutable_levels_pure_uint | ||||
| dEQP-GLES31.functional.texture.border_clamp.depth_compare_mode.depth32f_stencil8.linear_size_npot | ||||
| dEQP-GLES31.functional.texture.border_clamp.depth_compare_mode.depth32f_stencil8.linear_size_pot | ||||
| dEQP-GLES31.functional.texture.filtering.cube_array.combinations.nearest_linear_clamp_repeat | ||||
| dEQP-GLES31.functional.texture.filtering.cube_array.combinations.nearest_linear_mirror_repeat | ||||
| dEQP-GLES31.functional.texture.filtering.cube_array.combinations.nearest_linear_repeat_clamp | ||||
| dEQP-GLES31.functional.texture.filtering.cube_array.combinations.nearest_linear_repeat_mirror | ||||
| dEQP-GLES31.functional.texture.filtering.cube_array.combinations.nearest_linear_repeat_repeat | ||||
| dEQP-GLES31.functional.texture.filtering.cube_array.combinations.nearest_mipmap_linear_linear_clamp_repeat | ||||
| dEQP-GLES31.functional.texture.filtering.cube_array.combinations.nearest_mipmap_linear_linear_mirror_repeat | ||||
| dEQP-GLES31.functional.texture.filtering.cube_array.combinations.nearest_mipmap_linear_linear_repeat_clamp | ||||
| dEQP-GLES31.functional.texture.filtering.cube_array.combinations.nearest_mipmap_linear_linear_repeat_repeat | ||||
| dEQP-GLES31.functional.texture.filtering.cube_array.combinations.nearest_mipmap_linear_nearest_clamp_repeat | ||||
| dEQP-GLES31.functional.texture.filtering.cube_array.combinations.nearest_mipmap_linear_nearest_mirror_repeat | ||||
| dEQP-GLES31.functional.texture.filtering.cube_array.combinations.nearest_mipmap_linear_nearest_repeat_clamp | ||||
| dEQP-GLES31.functional.texture.filtering.cube_array.combinations.nearest_mipmap_linear_nearest_repeat_mirror | ||||
| dEQP-GLES31.functional.texture.filtering.cube_array.combinations.nearest_mipmap_nearest_linear_clamp_repeat | ||||
| dEQP-GLES31.functional.texture.filtering.cube_array.combinations.nearest_mipmap_nearest_linear_mirror_repeat | ||||
| dEQP-GLES31.functional.texture.filtering.cube_array.combinations.nearest_mipmap_nearest_linear_repeat_clamp | ||||
| dEQP-GLES31.functional.texture.filtering.cube_array.combinations.nearest_mipmap_nearest_linear_repeat_mirror | ||||
| dEQP-GLES31.functional.texture.filtering.cube_array.combinations.nearest_mipmap_nearest_nearest_repeat_clamp | ||||
| dEQP-GLES31.functional.texture.filtering.cube_array.combinations.nearest_mipmap_nearest_nearest_repeat_mirror | ||||
| dEQP-GLES31.functional.texture.filtering.cube_array.combinations.nearest_mipmap_nearest_nearest_repeat_repeat | ||||
| dEQP-GLES31.functional.texture.filtering.cube_array.combinations.nearest_nearest_repeat_mirror | ||||
| dEQP-GLES31.functional.texture.filtering.cube_array.formats.rgb10_a2_linear_mipmap_linear | ||||
| dEQP-GLES31.functional.texture.filtering.cube_array.formats.rgb10_a2_nearest | ||||
| dEQP-GLES31.functional.texture.filtering.cube_array.formats.rgb10_a2_nearest_mipmap_linear | ||||
| dEQP-GLES31.functional.texture.filtering.cube_array.formats.rgb10_a2_nearest_mipmap_nearest | ||||
| dEQP-GLES31.functional.texture.filtering.cube_array.formats.rgb565_nearest | ||||
| dEQP-GLES31.functional.texture.filtering.cube_array.formats.rgb565_nearest_mipmap_linear | ||||
| dEQP-GLES31.functional.texture.filtering.cube_array.formats.rgb5_a1_nearest | ||||
| dEQP-GLES31.functional.texture.filtering.cube_array.formats.rgb5_a1_nearest_mipmap_linear | ||||
| dEQP-GLES31.functional.texture.filtering.cube_array.formats.rgb9_e5_nearest_mipmap_linear | ||||
| dEQP-GLES31.functional.texture.filtering.cube_array.formats.rgb9_e5_nearest_mipmap_nearest | ||||
| dEQP-GLES31.functional.texture.filtering.cube_array.formats.rgba16f_nearest_mipmap_linear | ||||
| dEQP-GLES31.functional.texture.filtering.cube_array.formats.rgba16f_nearest_mipmap_nearest | ||||
| dEQP-GLES31.functional.texture.filtering.cube_array.formats.rgba4_nearest | ||||
| dEQP-GLES31.functional.texture.filtering.cube_array.formats.rgba4_nearest_mipmap_linear | ||||
| dEQP-GLES31.functional.texture.filtering.cube_array.formats.rgba8_nearest_mipmap_linear | ||||
| dEQP-GLES31.functional.texture.filtering.cube_array.formats.rgba8_nearest_mipmap_nearest | ||||
| dEQP-GLES31.functional.texture.filtering.cube_array.formats.rgba8_snorm_nearest | ||||
| dEQP-GLES31.functional.texture.filtering.cube_array.formats.rgba8_snorm_nearest_mipmap_nearest | ||||
| dEQP-GLES31.functional.texture.filtering.cube_array.formats.sr8_nearest_mipmap_nearest | ||||
| dEQP-GLES31.functional.texture.filtering.cube_array.formats.srgb8_alpha8_nearest | ||||
| dEQP-GLES31.functional.texture.filtering.cube_array.formats.srgb8_alpha8_nearest_mipmap_linear | ||||
| dEQP-GLES31.functional.texture.filtering.cube_array.sizes.128x128x12_linear | ||||
| dEQP-GLES31.functional.texture.filtering.cube_array.sizes.128x128x12_linear_mipmap_linear | ||||
| dEQP-GLES31.functional.texture.filtering.cube_array.sizes.128x128x12_linear_mipmap_nearest | ||||
| dEQP-GLES31.functional.texture.filtering.cube_array.sizes.128x128x12_nearest_mipmap_linear | ||||
| dEQP-GLES31.functional.texture.filtering.cube_array.sizes.128x128x12_nearest_mipmap_nearest | ||||
| dEQP-GLES31.functional.texture.filtering.cube_array.sizes.63x63x18_nearest_mipmap_nearest | ||||
| dEQP-GLES31.functional.texture.filtering.cube_array.sizes.64x64x12_nearest_mipmap_linear | ||||
| dEQP-GLES31.functional.texture.filtering.cube_array.sizes.64x64x12_nearest_mipmap_nearest | ||||
| dEQP-GLES31.functional.texture.filtering.cube_array.sizes.8x8x6_nearest | ||||
| dEQP-GLES31.functional.texture.gather.basic.2d.rgba8i.texture_swizzle.alpha_zero_one_red | ||||
| dEQP-GLES31.functional.texture.gather.basic.2d.rgba8i.texture_swizzle.blue_alpha_zero_one | ||||
| dEQP-GLES31.functional.texture.gather.basic.2d.rgba8i.texture_swizzle.one_red_green_blue | ||||
| dEQP-GLES31.functional.texture.gather.basic.2d.rgba8i.texture_swizzle.zero_one_red_green | ||||
| dEQP-GLES31.functional.texture.gather.basic.2d.rgba8ui.texture_swizzle.alpha_zero_one_red | ||||
| dEQP-GLES31.functional.texture.gather.basic.2d.rgba8ui.texture_swizzle.blue_alpha_zero_one | ||||
| dEQP-GLES31.functional.texture.gather.basic.2d.rgba8ui.texture_swizzle.one_red_green_blue | ||||
| dEQP-GLES31.functional.texture.gather.basic.2d.rgba8ui.texture_swizzle.zero_one_red_green | ||||
| dEQP-GLES31.functional.texture.gather.basic.2d_array.rgba8i.texture_swizzle.alpha_zero_one_red | ||||
| dEQP-GLES31.functional.texture.gather.basic.2d_array.rgba8i.texture_swizzle.blue_alpha_zero_one | ||||
| dEQP-GLES31.functional.texture.gather.basic.2d_array.rgba8i.texture_swizzle.one_red_green_blue | ||||
| dEQP-GLES31.functional.texture.gather.basic.2d_array.rgba8i.texture_swizzle.zero_one_red_green | ||||
| dEQP-GLES31.functional.texture.gather.basic.2d_array.rgba8ui.texture_swizzle.alpha_zero_one_red | ||||
| dEQP-GLES31.functional.texture.gather.basic.2d_array.rgba8ui.texture_swizzle.blue_alpha_zero_one | ||||
| dEQP-GLES31.functional.texture.gather.basic.2d_array.rgba8ui.texture_swizzle.one_red_green_blue | ||||
| dEQP-GLES31.functional.texture.gather.basic.2d_array.rgba8ui.texture_swizzle.zero_one_red_green | ||||
| dEQP-GLES31.functional.texture.gather.basic.cube.rgba8.no_corners.size_pot.clamp_to_edge_repeat | ||||
| dEQP-GLES31.functional.texture.gather.basic.cube.rgba8.no_corners.size_pot.mirrored_repeat_clamp_to_edge | ||||
| dEQP-GLES31.functional.texture.gather.basic.cube.rgba8.no_corners.size_pot.repeat_mirrored_repeat | ||||
| dEQP-GLES31.functional.texture.gather.basic.cube.rgba8i.no_corners.size_pot.clamp_to_edge_repeat | ||||
| dEQP-GLES31.functional.texture.gather.basic.cube.rgba8i.no_corners.size_pot.mirrored_repeat_clamp_to_edge | ||||
| dEQP-GLES31.functional.texture.gather.basic.cube.rgba8i.no_corners.size_pot.repeat_mirrored_repeat | ||||
| dEQP-GLES31.functional.texture.gather.basic.cube.rgba8i.texture_swizzle.alpha_zero_one_red | ||||
| dEQP-GLES31.functional.texture.gather.basic.cube.rgba8i.texture_swizzle.blue_alpha_zero_one | ||||
| dEQP-GLES31.functional.texture.gather.basic.cube.rgba8i.texture_swizzle.one_red_green_blue | ||||
| dEQP-GLES31.functional.texture.gather.basic.cube.rgba8i.texture_swizzle.zero_one_red_green | ||||
| dEQP-GLES31.functional.texture.gather.basic.cube.rgba8ui.no_corners.size_pot.clamp_to_edge_repeat | ||||
| dEQP-GLES31.functional.texture.gather.basic.cube.rgba8ui.no_corners.size_pot.mirrored_repeat_clamp_to_edge | ||||
| dEQP-GLES31.functional.texture.gather.basic.cube.rgba8ui.no_corners.size_pot.repeat_mirrored_repeat | ||||
| dEQP-GLES31.functional.texture.gather.basic.cube.rgba8ui.texture_swizzle.alpha_zero_one_red | ||||
| dEQP-GLES31.functional.texture.gather.basic.cube.rgba8ui.texture_swizzle.blue_alpha_zero_one | ||||
| dEQP-GLES31.functional.texture.gather.basic.cube.rgba8ui.texture_swizzle.one_red_green_blue | ||||
| dEQP-GLES31.functional.texture.gather.basic.cube.rgba8ui.texture_swizzle.zero_one_red_green | ||||
| dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d.rgba8i.texture_swizzle.alpha_zero_one_red | ||||
| dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d.rgba8i.texture_swizzle.blue_alpha_zero_one | ||||
| dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d.rgba8i.texture_swizzle.one_red_green_blue | ||||
| dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d.rgba8i.texture_swizzle.zero_one_red_green | ||||
| dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d.rgba8ui.texture_swizzle.alpha_zero_one_red | ||||
| dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d.rgba8ui.texture_swizzle.blue_alpha_zero_one | ||||
| dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d.rgba8ui.texture_swizzle.one_red_green_blue | ||||
| dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d.rgba8ui.texture_swizzle.zero_one_red_green | ||||
| dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d_array.rgba8i.texture_swizzle.alpha_zero_one_red | ||||
| dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d_array.rgba8i.texture_swizzle.blue_alpha_zero_one | ||||
| dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d_array.rgba8i.texture_swizzle.one_red_green_blue | ||||
| dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d_array.rgba8i.texture_swizzle.zero_one_red_green | ||||
| dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d_array.rgba8ui.texture_swizzle.alpha_zero_one_red | ||||
| dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d_array.rgba8ui.texture_swizzle.blue_alpha_zero_one | ||||
| dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d_array.rgba8ui.texture_swizzle.one_red_green_blue | ||||
| dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d_array.rgba8ui.texture_swizzle.zero_one_red_green | ||||
| dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.depth32f.base_level.level_1 | ||||
| dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.depth32f.base_level.level_2 | ||||
| dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.depth32f.filter_mode.min_linear_mag_linear | ||||
| dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.depth32f.filter_mode.min_linear_mipmap_linear_mag_linear | ||||
| dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.depth32f.filter_mode.min_linear_mipmap_nearest_mag_linear | ||||
| dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.depth32f.filter_mode.min_nearest_mipmap_linear_mag_linear | ||||
| dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.depth32f.filter_mode.min_nearest_mipmap_nearest_mag_linear | ||||
| dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.depth32f.size_npot.compare_greater.clamp_to_edge_repeat | ||||
| dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.depth32f.size_npot.compare_greater.mirrored_repeat_clamp_to_edge | ||||
| dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.depth32f.size_npot.compare_greater.repeat_mirrored_repeat | ||||
| dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.depth32f.size_npot.compare_less.clamp_to_edge_repeat | ||||
| dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.depth32f.size_npot.compare_less.mirrored_repeat_clamp_to_edge | ||||
| dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.depth32f.size_npot.compare_less.repeat_mirrored_repeat | ||||
| dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.depth32f.size_pot.compare_greater.clamp_to_edge_repeat | ||||
| dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.depth32f.size_pot.compare_greater.mirrored_repeat_clamp_to_edge | ||||
| dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.depth32f.size_pot.compare_greater.repeat_mirrored_repeat | ||||
| dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.depth32f.size_pot.compare_less.clamp_to_edge_repeat | ||||
| dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.depth32f.size_pot.compare_less.mirrored_repeat_clamp_to_edge | ||||
| dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.depth32f.size_pot.compare_less.repeat_mirrored_repeat | ||||
| dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.rgba8.base_level.level_1 | ||||
| dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.rgba8.base_level.level_2 | ||||
| dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.rgba8.filter_mode.min_linear_mag_linear | ||||
| dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.rgba8.filter_mode.min_linear_mipmap_linear_mag_linear | ||||
| dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.rgba8.filter_mode.min_linear_mipmap_nearest_mag_linear | ||||
| dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.rgba8.filter_mode.min_nearest_mipmap_linear_mag_linear | ||||
| dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.rgba8.filter_mode.min_nearest_mipmap_nearest_mag_linear | ||||
| dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.rgba8.size_npot.clamp_to_edge_repeat | ||||
| dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.rgba8.size_npot.mirrored_repeat_clamp_to_edge | ||||
| dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.rgba8.size_npot.repeat_mirrored_repeat | ||||
| dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.rgba8.size_pot.clamp_to_edge_repeat | ||||
| dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.rgba8.size_pot.mirrored_repeat_clamp_to_edge | ||||
| dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.rgba8.size_pot.repeat_mirrored_repeat | ||||
| dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.rgba8.texture_swizzle.alpha_zero_one_red | ||||
| dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.rgba8.texture_swizzle.blue_alpha_zero_one | ||||
| dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.rgba8.texture_swizzle.green_blue_alpha_zero | ||||
| dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.rgba8.texture_swizzle.one_red_green_blue | ||||
| dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.rgba8.texture_swizzle.red_green_blue_alpha | ||||
| dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.rgba8.texture_swizzle.zero_one_red_green | ||||
| dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.rgba8i.base_level.level_1 | ||||
| dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.rgba8i.base_level.level_2 | ||||
| dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.rgba8i.filter_mode.min_nearest_mipmap_nearest_mag_nearest | ||||
| dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.rgba8i.size_npot.clamp_to_edge_repeat | ||||
| dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.rgba8i.size_npot.mirrored_repeat_clamp_to_edge | ||||
| dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.rgba8i.size_npot.repeat_mirrored_repeat | ||||
| dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.rgba8i.size_pot.clamp_to_edge_repeat | ||||
| dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.rgba8i.size_pot.mirrored_repeat_clamp_to_edge | ||||
| dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.rgba8i.size_pot.repeat_mirrored_repeat | ||||
| dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.rgba8i.texture_swizzle.alpha_zero_one_red | ||||
| dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.rgba8i.texture_swizzle.blue_alpha_zero_one | ||||
| dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.rgba8i.texture_swizzle.green_blue_alpha_zero | ||||
| dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.rgba8i.texture_swizzle.one_red_green_blue | ||||
| dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.rgba8i.texture_swizzle.red_green_blue_alpha | ||||
| dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.rgba8i.texture_swizzle.zero_one_red_green | ||||
| dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.rgba8ui.base_level.level_1 | ||||
| dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.rgba8ui.base_level.level_2 | ||||
| dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.rgba8ui.filter_mode.min_nearest_mipmap_nearest_mag_nearest | ||||
| dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.rgba8ui.size_npot.clamp_to_edge_repeat | ||||
| dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.rgba8ui.size_npot.mirrored_repeat_clamp_to_edge | ||||
| dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.rgba8ui.size_npot.repeat_mirrored_repeat | ||||
| dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.rgba8ui.size_pot.clamp_to_edge_repeat | ||||
| dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.rgba8ui.size_pot.mirrored_repeat_clamp_to_edge | ||||
| dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.rgba8ui.size_pot.repeat_mirrored_repeat | ||||
| dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.rgba8ui.texture_swizzle.alpha_zero_one_red | ||||
| dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.rgba8ui.texture_swizzle.blue_alpha_zero_one | ||||
| dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.rgba8ui.texture_swizzle.green_blue_alpha_zero | ||||
| dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.rgba8ui.texture_swizzle.one_red_green_blue | ||||
| dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.rgba8ui.texture_swizzle.red_green_blue_alpha | ||||
| dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.rgba8ui.texture_swizzle.zero_one_red_green | ||||
| dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.depth32f.base_level.level_1 | ||||
| dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.depth32f.base_level.level_2 | ||||
| dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.depth32f.filter_mode.min_linear_mag_linear | ||||
| dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.depth32f.filter_mode.min_linear_mipmap_linear_mag_linear | ||||
| dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.depth32f.filter_mode.min_linear_mipmap_nearest_mag_linear | ||||
| dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.depth32f.filter_mode.min_nearest_mipmap_linear_mag_linear | ||||
| dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.depth32f.filter_mode.min_nearest_mipmap_nearest_mag_linear | ||||
| dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.depth32f.size_npot.compare_greater.clamp_to_edge_repeat | ||||
| dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.depth32f.size_npot.compare_greater.mirrored_repeat_clamp_to_edge | ||||
| dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.depth32f.size_npot.compare_greater.repeat_mirrored_repeat | ||||
| dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.depth32f.size_npot.compare_less.clamp_to_edge_repeat | ||||
| dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.depth32f.size_npot.compare_less.mirrored_repeat_clamp_to_edge | ||||
| dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.depth32f.size_npot.compare_less.repeat_mirrored_repeat | ||||
| dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.depth32f.size_pot.compare_greater.clamp_to_edge_repeat | ||||
| dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.depth32f.size_pot.compare_greater.mirrored_repeat_clamp_to_edge | ||||
| dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.depth32f.size_pot.compare_greater.repeat_mirrored_repeat | ||||
| dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.depth32f.size_pot.compare_less.clamp_to_edge_repeat | ||||
| dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.depth32f.size_pot.compare_less.mirrored_repeat_clamp_to_edge | ||||
| dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.depth32f.size_pot.compare_less.repeat_mirrored_repeat | ||||
| dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.rgba8.base_level.level_1 | ||||
| dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.rgba8.base_level.level_2 | ||||
| dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.rgba8.filter_mode.min_linear_mag_linear | ||||
| dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.rgba8.filter_mode.min_linear_mipmap_linear_mag_linear | ||||
| dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.rgba8.filter_mode.min_linear_mipmap_nearest_mag_linear | ||||
| dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.rgba8.filter_mode.min_nearest_mipmap_linear_mag_linear | ||||
| dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.rgba8.filter_mode.min_nearest_mipmap_nearest_mag_linear | ||||
| dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.rgba8.size_npot.clamp_to_edge_repeat | ||||
| dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.rgba8.size_npot.mirrored_repeat_clamp_to_edge | ||||
| dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.rgba8.size_npot.repeat_mirrored_repeat | ||||
| dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.rgba8.size_pot.clamp_to_edge_repeat | ||||
| dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.rgba8.size_pot.mirrored_repeat_clamp_to_edge | ||||
| dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.rgba8.size_pot.repeat_mirrored_repeat | ||||
| dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.rgba8.texture_swizzle.alpha_zero_one_red | ||||
| dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.rgba8.texture_swizzle.blue_alpha_zero_one | ||||
| dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.rgba8.texture_swizzle.green_blue_alpha_zero | ||||
| dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.rgba8.texture_swizzle.one_red_green_blue | ||||
| dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.rgba8.texture_swizzle.red_green_blue_alpha | ||||
| dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.rgba8.texture_swizzle.zero_one_red_green | ||||
| dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.rgba8i.base_level.level_1 | ||||
| dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.rgba8i.base_level.level_2 | ||||
| dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.rgba8i.filter_mode.min_nearest_mipmap_nearest_mag_nearest | ||||
| dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.rgba8i.size_npot.clamp_to_edge_repeat | ||||
| dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.rgba8i.size_npot.mirrored_repeat_clamp_to_edge | ||||
| dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.rgba8i.size_npot.repeat_mirrored_repeat | ||||
| dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.rgba8i.size_pot.clamp_to_edge_repeat | ||||
| dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.rgba8i.size_pot.mirrored_repeat_clamp_to_edge | ||||
| dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.rgba8i.size_pot.repeat_mirrored_repeat | ||||
| dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.rgba8i.texture_swizzle.alpha_zero_one_red | ||||
| dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.rgba8i.texture_swizzle.blue_alpha_zero_one | ||||
| dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.rgba8i.texture_swizzle.green_blue_alpha_zero | ||||
| dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.rgba8i.texture_swizzle.one_red_green_blue | ||||
| dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.rgba8i.texture_swizzle.red_green_blue_alpha | ||||
| dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.rgba8i.texture_swizzle.zero_one_red_green | ||||
| dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.rgba8ui.base_level.level_1 | ||||
| dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.rgba8ui.base_level.level_2 | ||||
| dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.rgba8ui.filter_mode.min_nearest_mipmap_nearest_mag_nearest | ||||
| dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.rgba8ui.size_npot.clamp_to_edge_repeat | ||||
| dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.rgba8ui.size_npot.mirrored_repeat_clamp_to_edge | ||||
| dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.rgba8ui.size_npot.repeat_mirrored_repeat | ||||
| dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.rgba8ui.size_pot.clamp_to_edge_repeat | ||||
| dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.rgba8ui.size_pot.mirrored_repeat_clamp_to_edge | ||||
| dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.rgba8ui.size_pot.repeat_mirrored_repeat | ||||
| dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.rgba8ui.texture_swizzle.alpha_zero_one_red | ||||
| dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.rgba8ui.texture_swizzle.blue_alpha_zero_one | ||||
| dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.rgba8ui.texture_swizzle.green_blue_alpha_zero | ||||
| dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.rgba8ui.texture_swizzle.one_red_green_blue | ||||
| dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.rgba8ui.texture_swizzle.red_green_blue_alpha | ||||
| dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.rgba8ui.texture_swizzle.zero_one_red_green | ||||
| dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d.depth32f.size_npot.compare_greater.clamp_to_edge_repeat | ||||
| dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d.depth32f.size_npot.compare_greater.mirrored_repeat_clamp_to_edge | ||||
| dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d.depth32f.size_npot.compare_greater.repeat_mirrored_repeat | ||||
| dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d.depth32f.size_npot.compare_less.clamp_to_edge_repeat | ||||
| dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d.depth32f.size_npot.compare_less.mirrored_repeat_clamp_to_edge | ||||
| dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d.depth32f.size_npot.compare_less.repeat_mirrored_repeat | ||||
| dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d.depth32f.size_pot.compare_greater.clamp_to_edge_repeat | ||||
| dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d.depth32f.size_pot.compare_greater.mirrored_repeat_clamp_to_edge | ||||
| dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d.depth32f.size_pot.compare_greater.repeat_mirrored_repeat | ||||
| dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d.depth32f.size_pot.compare_less.clamp_to_edge_repeat | ||||
| dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d.depth32f.size_pot.compare_less.mirrored_repeat_clamp_to_edge | ||||
| dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d.depth32f.size_pot.compare_less.repeat_mirrored_repeat | ||||
| dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d.rgba8.size_npot.clamp_to_edge_repeat | ||||
| dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d.rgba8.size_npot.mirrored_repeat_clamp_to_edge | ||||
| dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d.rgba8.size_npot.repeat_mirrored_repeat | ||||
| dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d.rgba8.size_pot.clamp_to_edge_repeat | ||||
| dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d.rgba8.size_pot.mirrored_repeat_clamp_to_edge | ||||
| dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d.rgba8.size_pot.repeat_mirrored_repeat | ||||
| dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d.rgba8i.size_npot.clamp_to_edge_repeat | ||||
| dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d.rgba8i.size_npot.mirrored_repeat_clamp_to_edge | ||||
| dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d.rgba8i.size_npot.repeat_mirrored_repeat | ||||
| dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d.rgba8i.size_pot.clamp_to_edge_repeat | ||||
| dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d.rgba8i.size_pot.mirrored_repeat_clamp_to_edge | ||||
| dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d.rgba8i.size_pot.repeat_mirrored_repeat | ||||
| dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d.rgba8ui.size_npot.clamp_to_edge_repeat | ||||
| dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d.rgba8ui.size_npot.mirrored_repeat_clamp_to_edge | ||||
| dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d.rgba8ui.size_npot.repeat_mirrored_repeat | ||||
| dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d.rgba8ui.size_pot.clamp_to_edge_repeat | ||||
| dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d.rgba8ui.size_pot.mirrored_repeat_clamp_to_edge | ||||
| dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d.rgba8ui.size_pot.repeat_mirrored_repeat | ||||
| dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d_array.depth32f.size_npot.compare_greater.clamp_to_edge_repeat | ||||
| dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d_array.depth32f.size_npot.compare_greater.mirrored_repeat_clamp_to_edge | ||||
| dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d_array.depth32f.size_npot.compare_greater.repeat_mirrored_repeat | ||||
| dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d_array.depth32f.size_npot.compare_less.clamp_to_edge_repeat | ||||
| dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d_array.depth32f.size_npot.compare_less.mirrored_repeat_clamp_to_edge | ||||
| dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d_array.depth32f.size_npot.compare_less.repeat_mirrored_repeat | ||||
| dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d_array.depth32f.size_pot.compare_greater.clamp_to_edge_repeat | ||||
| dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d_array.depth32f.size_pot.compare_greater.mirrored_repeat_clamp_to_edge | ||||
| dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d_array.depth32f.size_pot.compare_greater.repeat_mirrored_repeat | ||||
| dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d_array.depth32f.size_pot.compare_less.clamp_to_edge_repeat | ||||
| dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d_array.depth32f.size_pot.compare_less.mirrored_repeat_clamp_to_edge | ||||
| dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d_array.depth32f.size_pot.compare_less.repeat_mirrored_repeat | ||||
| dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d_array.rgba8.size_npot.clamp_to_edge_repeat | ||||
| dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d_array.rgba8.size_npot.mirrored_repeat_clamp_to_edge | ||||
| dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d_array.rgba8.size_npot.repeat_mirrored_repeat | ||||
| dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d_array.rgba8.size_pot.clamp_to_edge_repeat | ||||
| dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d_array.rgba8.size_pot.mirrored_repeat_clamp_to_edge | ||||
| dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d_array.rgba8.size_pot.repeat_mirrored_repeat | ||||
| dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d_array.rgba8i.size_npot.clamp_to_edge_repeat | ||||
| dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d_array.rgba8i.size_npot.mirrored_repeat_clamp_to_edge | ||||
| dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d_array.rgba8i.size_npot.repeat_mirrored_repeat | ||||
| dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d_array.rgba8i.size_pot.clamp_to_edge_repeat | ||||
| dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d_array.rgba8i.size_pot.mirrored_repeat_clamp_to_edge | ||||
| dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d_array.rgba8i.size_pot.repeat_mirrored_repeat | ||||
| dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d_array.rgba8ui.size_npot.clamp_to_edge_repeat | ||||
| dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d_array.rgba8ui.size_npot.mirrored_repeat_clamp_to_edge | ||||
| dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d_array.rgba8ui.size_npot.repeat_mirrored_repeat | ||||
| dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d_array.rgba8ui.size_pot.clamp_to_edge_repeat | ||||
| dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d_array.rgba8ui.size_pot.mirrored_repeat_clamp_to_edge | ||||
| dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d_array.rgba8ui.size_pot.repeat_mirrored_repeat | ||||
| dEQP-GLES31.functional.texture.gather.offsets.implementation_offset.2d.rgba8i.texture_swizzle.alpha_zero_one_red | ||||
| dEQP-GLES31.functional.texture.gather.offsets.implementation_offset.2d.rgba8i.texture_swizzle.blue_alpha_zero_one | ||||
| dEQP-GLES31.functional.texture.gather.offsets.implementation_offset.2d.rgba8i.texture_swizzle.one_red_green_blue | ||||
| dEQP-GLES31.functional.texture.gather.offsets.implementation_offset.2d.rgba8i.texture_swizzle.zero_one_red_green | ||||
| dEQP-GLES31.functional.texture.gather.offsets.implementation_offset.2d.rgba8ui.texture_swizzle.alpha_zero_one_red | ||||
| dEQP-GLES31.functional.texture.gather.offsets.implementation_offset.2d.rgba8ui.texture_swizzle.blue_alpha_zero_one | ||||
| dEQP-GLES31.functional.texture.gather.offsets.implementation_offset.2d.rgba8ui.texture_swizzle.one_red_green_blue | ||||
| dEQP-GLES31.functional.texture.gather.offsets.implementation_offset.2d.rgba8ui.texture_swizzle.zero_one_red_green | ||||
| dEQP-GLES31.functional.texture.gather.offsets.implementation_offset.2d_array.rgba8i.texture_swizzle.alpha_zero_one_red | ||||
| dEQP-GLES31.functional.texture.gather.offsets.implementation_offset.2d_array.rgba8i.texture_swizzle.blue_alpha_zero_one | ||||
| dEQP-GLES31.functional.texture.gather.offsets.implementation_offset.2d_array.rgba8i.texture_swizzle.one_red_green_blue | ||||
| dEQP-GLES31.functional.texture.gather.offsets.implementation_offset.2d_array.rgba8i.texture_swizzle.zero_one_red_green | ||||
| dEQP-GLES31.functional.texture.gather.offsets.implementation_offset.2d_array.rgba8ui.texture_swizzle.alpha_zero_one_red | ||||
| dEQP-GLES31.functional.texture.gather.offsets.implementation_offset.2d_array.rgba8ui.texture_swizzle.blue_alpha_zero_one | ||||
| dEQP-GLES31.functional.texture.gather.offsets.implementation_offset.2d_array.rgba8ui.texture_swizzle.one_red_green_blue | ||||
| dEQP-GLES31.functional.texture.gather.offsets.implementation_offset.2d_array.rgba8ui.texture_swizzle.zero_one_red_green | ||||
| dEQP-GLES31.functional.texture.multisample.samples_1.sample_mask_and_alpha_to_coverage | ||||
| dEQP-GLES31.functional.texture.multisample.samples_1.sample_mask_and_sample_coverage | ||||
| dEQP-GLES31.functional.texture.multisample.samples_1.sample_mask_and_sample_coverage_and_alpha_to_coverage | ||||
| dEQP-GLES31.functional.texture.multisample.samples_1.sample_mask_non_effective_bits | ||||
| dEQP-GLES31.functional.texture.multisample.samples_1.sample_mask_only | ||||
| @@ -1,16 +0,0 @@ | ||||
| # Note: skips lists for CI are just a list of lines that, when | ||||
| # non-zero-length and not starting with '#', will regex match to | ||||
| # delete lines from the test list.  Be careful. | ||||
|  | ||||
| # Skip the perf/stress tests to keep runtime manageable | ||||
| dEQP-GLES[0-9]*.performance.* | ||||
| dEQP-GLES[0-9]*.stress.* | ||||
|  | ||||
| # These are really slow on tiling architectures (including llvmpipe). | ||||
| dEQP-GLES[0-9]*.functional.flush_finish.* | ||||
|  | ||||
| # Random failures | ||||
| dEQP-GLES31.functional.shaders.builtin_functions.*geometry | ||||
|  | ||||
| dEQP-GLES31.functional.fbo.no_attachments.maximums.all | ||||
| dEQP-GLES31.functional.fbo.no_attachments.maximums.size | ||||
| @@ -1,45 +0,0 @@ | ||||
| #!/usr/bin/env python3 | ||||
|  | ||||
| from jinja2 import Environment, FileSystemLoader | ||||
| import argparse | ||||
| import os | ||||
|  | ||||
| parser = argparse.ArgumentParser() | ||||
| parser.add_argument("--template") | ||||
| parser.add_argument("--pipeline-info") | ||||
| parser.add_argument("--base-artifacts-url") | ||||
| parser.add_argument("--device-type") | ||||
| parser.add_argument("--kernel-image-name") | ||||
| parser.add_argument("--kernel-image-type", nargs='?', default="") | ||||
| parser.add_argument("--gpu-version") | ||||
| parser.add_argument("--boot-method") | ||||
| parser.add_argument("--lava-tags", nargs='?', default="") | ||||
| parser.add_argument("--env-vars", nargs='?', default="") | ||||
| parser.add_argument("--deqp-version") | ||||
| parser.add_argument("--arch") | ||||
| parser.add_argument("--ci-node-index") | ||||
| parser.add_argument("--ci-node-total") | ||||
| args = parser.parse_args() | ||||
|  | ||||
| env = Environment(loader = FileSystemLoader(os.path.dirname(args.template)), trim_blocks=True, lstrip_blocks=True) | ||||
| template = env.get_template(os.path.basename(args.template)) | ||||
|  | ||||
| values = {} | ||||
| values['pipeline_info'] = args.pipeline_info | ||||
| values['base_artifacts_url'] = args.base_artifacts_url | ||||
| values['device_type'] = args.device_type | ||||
| values['kernel_image_name'] = args.kernel_image_name | ||||
| values['kernel_image_type'] = args.kernel_image_type | ||||
| values['gpu_version'] = args.gpu_version | ||||
| values['boot_method'] = args.boot_method | ||||
| values['tags'] = args.lava_tags | ||||
| values['env_vars'] = args.env_vars | ||||
| values['deqp_version'] = args.deqp_version | ||||
| values['arch'] = args.arch | ||||
| values['ci_node_index'] = args.ci_node_index | ||||
| values['ci_node_total'] = args.ci_node_total | ||||
|  | ||||
| f = open('lava-deqp.yml', "w") | ||||
| f.write(template.render(values)) | ||||
| f.close() | ||||
|  | ||||
| @@ -1,93 +0,0 @@ | ||||
| job_name: mesa-deqp-{{ gpu_version }} {{ pipeline_info }} | ||||
| device_type: {{ device_type }} | ||||
| timeouts: | ||||
|   job: | ||||
|     minutes: 40 | ||||
|   action: | ||||
|    minutes: 10 | ||||
|   actions: | ||||
|     power-off: | ||||
|       seconds: 30 | ||||
| priority: 75 | ||||
| visibility: public | ||||
| {% if tags %} | ||||
| tags: | ||||
| {% for tag in tags %} | ||||
|   - {{ tag }} | ||||
| {% endfor %} | ||||
| {% endif %} | ||||
| actions: | ||||
| - deploy: | ||||
|     timeout: | ||||
|       minutes: 10 | ||||
|     to: tftp | ||||
|     kernel: | ||||
|       url: {{ base_artifacts_url }}/{{ kernel_image_name }} | ||||
| {% if kernel_image_type %} | ||||
|       {{ kernel_image_type }} | ||||
| {% endif %} | ||||
|     ramdisk: | ||||
|       url: {{ base_artifacts_url }}/lava-rootfs-{{ arch }}.cpio.gz | ||||
|       compression: gz | ||||
|     dtb: | ||||
|       url: {{ base_artifacts_url }}/{{ device_type }}.dtb | ||||
|     os: oe | ||||
| - boot: | ||||
|     timeout: | ||||
|       minutes: 5 | ||||
|     method: {{ boot_method }} | ||||
|     commands: ramdisk | ||||
|     prompts: | ||||
|       - '#'  | ||||
| - test: | ||||
|     timeout: | ||||
|       minutes: 60 | ||||
|     definitions: | ||||
|     - repository: | ||||
|         metadata: | ||||
|           format: Lava-Test Test Definition 1.0 | ||||
|           name: deqp | ||||
|           description: "Mesa dEQP test plan" | ||||
|           os: | ||||
|           - oe | ||||
|           scope: | ||||
|           - functional | ||||
|         run: | ||||
|           steps: | ||||
|           - mount -t proc none /proc | ||||
|           - mount -t sysfs none /sys  | ||||
|           - mount -t devtmpfs none /dev | ||||
|           - mkdir -p /dev/pts | ||||
|           - mount -t devpts devpts /dev/pts | ||||
|  | ||||
| {% if env_vars %} | ||||
|           - export {{ env_vars }} | ||||
| {% endif %} | ||||
|  | ||||
|           - export DEQP_NO_SAVE_RESULTS=1 | ||||
|           - 'export DEQP_RUNNER_OPTIONS="--compact-display false --shuffle false"' | ||||
|           - export DEQP_EXPECTED_FAILS=deqp-{{ gpu_version }}-fails.txt | ||||
|           - export DEQP_SKIPS=deqp-{{ gpu_version }}-skips.txt | ||||
|           - export DEQP_VER={{ deqp_version }} | ||||
|           - export LIBGL_DRIVERS_PATH=`pwd`/install/lib/dri | ||||
|           - export CI_NODE_INDEX={{ ci_node_index }} | ||||
|           - export CI_NODE_TOTAL={{ ci_node_total }} | ||||
|  | ||||
|           # Put stuff where the runner script expects it | ||||
|           - mkdir artifacts | ||||
|           - mkdir results | ||||
|           - mkdir -p install/lib | ||||
|           - cp /deqp/$DEQP_EXPECTED_FAILS artifacts/. | ||||
|           - cp /deqp/$DEQP_SKIPS artifacts/. | ||||
|           - mv /mesa/lib/* install/lib/. | ||||
|  | ||||
|           - "if sh /deqp/deqp-runner.sh; then | ||||
|                   echo 'deqp: pass'; | ||||
|              else | ||||
|                   echo 'deqp: fail'; | ||||
|              fi" | ||||
|         parse: | ||||
|           pattern: '(?P<test_case_id>\S*):\s+(?P<result>(pass|fail))' | ||||
|       from: inline | ||||
|       name: deqp | ||||
|       path: inline/mesa-deqp.yaml | ||||
| @@ -1,122 +0,0 @@ | ||||
| .lava-test: | ||||
|   extends: | ||||
|     - .ci-run-policy | ||||
|   stage: test | ||||
|   variables: | ||||
|     GIT_STRATEGY: none # testing doesn't build anything from source | ||||
|     ENV_VARS: "MESA_GLES_VERSION_OVERRIDE=3.0 DEQP_PARALLEL=6" | ||||
|   script: | ||||
|     - BUILD_JOB_ID=`cat artifacts/build_job_id.txt` | ||||
|     - > | ||||
|       artifacts/generate_lava.py \ | ||||
|         --template artifacts/lava-deqp.yml.jinja2 \ | ||||
|         --pipeline-info "$CI_PIPELINE_URL on $CI_COMMIT_REF_NAME ${CI_NODE_INDEX}/${CI_NODE_TOTAL}" \ | ||||
|         --base-artifacts-url $CI_PROJECT_URL/-/jobs/$BUILD_JOB_ID/artifacts/raw/artifacts \ | ||||
|         --device-type ${DEVICE_TYPE} \ | ||||
|         --env-vars "${ENV_VARS}" \ | ||||
|         --arch ${ARCH} \ | ||||
|         --deqp-version gles2 \ | ||||
|         --kernel-image-name ${KERNEL_IMAGE_NAME} \ | ||||
|         --kernel-image-type "${KERNEL_IMAGE_TYPE}" \ | ||||
|         --gpu-version ${GPU_VERSION} \ | ||||
|         --boot-method ${BOOT_METHOD} \ | ||||
|         --lava-tags "${LAVA_TAGS}" \ | ||||
|         --ci-node-index "${CI_NODE_INDEX}" \ | ||||
|         --ci-node-total "${CI_NODE_TOTAL}" | ||||
|     - lava_job_id=`lavacli jobs submit lava-deqp.yml` | ||||
|     - echo $lava_job_id | ||||
|     - rm -rf artifacts/* | ||||
|     - cp lava-deqp.yml artifacts/. | ||||
|     - lavacli jobs logs $lava_job_id | grep -a -v "{'case':" | tee artifacts/lava-deqp-$lava_job_id.log | ||||
|     - lavacli jobs show $lava_job_id | ||||
|     - result=`lavacli results $lava_job_id 0_deqp deqp | head -1` | ||||
|     - echo $result | ||||
|     - '[[ "$result" == "pass" ]]' | ||||
|   artifacts: | ||||
|     when: always | ||||
|     paths: | ||||
|       - artifacts/ | ||||
|  | ||||
| .lava-test:armhf: | ||||
|   variables: | ||||
|     ARCH: armhf | ||||
|     KERNEL_IMAGE_NAME: zImage | ||||
|     KERNEL_IMAGE_TYPE: "type:\ zimage" | ||||
|     BOOT_METHOD: u-boot | ||||
|   extends: | ||||
|     - .lava-test | ||||
|     - .use-arm_build | ||||
|   dependencies: | ||||
|     - meson-armhf | ||||
|   needs: | ||||
|     - meson-armhf | ||||
|  | ||||
| .lava-test:arm64: | ||||
|   variables: | ||||
|     ARCH: arm64 | ||||
|     KERNEL_IMAGE_NAME: Image | ||||
|     KERNEL_IMAGE_TYPE: "type:\ image" | ||||
|     BOOT_METHOD: u-boot | ||||
|   extends: | ||||
|     - .lava-test | ||||
|     - .use-arm_build | ||||
|   dependencies: | ||||
|     - meson-arm64 | ||||
|   needs: | ||||
|     - meson-arm64 | ||||
|  | ||||
| panfrost-t720-test:arm64: | ||||
|   extends: .lava-test:arm64 | ||||
|   variables: | ||||
|     DEVICE_TYPE: sun50i-h6-pine-h64 | ||||
|     GPU_VERSION: panfrost-t720 | ||||
|   tags: | ||||
|     - lava-sun50i-h6-pine-h64 | ||||
|  | ||||
| panfrost-t760-test:armhf: | ||||
|   extends: .lava-test:armhf | ||||
|   variables: | ||||
|     DEVICE_TYPE: rk3288-veyron-jaq | ||||
|     GPU_VERSION: panfrost-t760 | ||||
|     BOOT_METHOD: depthcharge | ||||
|     KERNEL_IMAGE_TYPE: "" | ||||
|   tags: | ||||
|     - lava-rk3288-veyron-jaq | ||||
|  | ||||
| panfrost-t860-test:arm64: | ||||
|   extends: .lava-test:arm64 | ||||
|   variables: | ||||
|     DEVICE_TYPE: rk3399-gru-kevin | ||||
|     GPU_VERSION: panfrost-t860 | ||||
|     BOOT_METHOD: depthcharge | ||||
|     KERNEL_IMAGE_TYPE: "" | ||||
|   tags: | ||||
|     - lava-rk3399-gru-kevin | ||||
|  | ||||
| panfrost-t820-test:arm64: | ||||
|   extends: .lava-test:arm64 | ||||
|   variables: | ||||
|     DEVICE_TYPE: meson-gxm-khadas-vim2 | ||||
|     GPU_VERSION: panfrost-t820 | ||||
|     LAVA_TAGS: panfrost | ||||
|   tags: | ||||
|     - lava-meson-gxm-khadas-vim2 | ||||
|  | ||||
| .lima-mali400-test:armhf: | ||||
|   parallel: 2 | ||||
|   extends: .lava-test:armhf | ||||
|   variables: | ||||
|     DEVICE_TYPE: sun8i-h3-libretech-all-h3-cc | ||||
|     GPU_VERSION: lima | ||||
|     ENV_VARS: "DEQP_PARALLEL=3" | ||||
|   tags: | ||||
|     - lava-sun8i-h3-libretech-all-h3-cc | ||||
|  | ||||
| lima-mali450-test:arm64: | ||||
|   extends: .lava-test:arm64 | ||||
|   variables: | ||||
|     DEVICE_TYPE: meson-gxl-s905x-libretech-cc | ||||
|     GPU_VERSION: lima | ||||
|     ENV_VARS: "DEQP_PARALLEL=6" | ||||
|   tags: | ||||
|     - lava-meson-gxl-s905x-libretech-cc | ||||
| @@ -1,13 +0,0 @@ | ||||
| call "C:\Program Files (x86)\Microsoft Visual Studio\%VERSION%\Common7\Tools\VsDevCmd.bat" -arch=%ARCH% | ||||
|  | ||||
| del /Q /S _build | ||||
| meson _build ^ | ||||
|         -Dbuild-tests=true ^ | ||||
|         -Db_vscrt=mtd ^ | ||||
|         -Dbuildtype=release ^ | ||||
|         -Dllvm=false ^ | ||||
|         -Dgallium-drivers=swrast ^ | ||||
|         -Dosmesa=gallium | ||||
| meson configure _build | ||||
| ninja -C _build | ||||
| ninja -C _build test | ||||
| @@ -1,64 +0,0 @@ | ||||
| #!/bin/bash | ||||
|  | ||||
| set -e | ||||
| set -o xtrace | ||||
|  | ||||
| CROSS_FILE=/cross_file-"$CROSS".txt | ||||
|  | ||||
| # We need to control the version of llvm-config we're using, so we'll | ||||
| # tweak the cross file or generate a native file to do so. | ||||
| if test -n "$LLVM_VERSION"; then | ||||
|     LLVM_CONFIG="llvm-config-${LLVM_VERSION}" | ||||
|     echo -e "[binaries]\nllvm-config = '`which $LLVM_CONFIG`'" > native.file | ||||
|     if [ -n "$CROSS" ]; then | ||||
|         sed -i -e '/\[binaries\]/a\' -e "llvm-config = '`which $LLVM_CONFIG`'" $CROSS_FILE | ||||
|     fi | ||||
|     $LLVM_CONFIG --version | ||||
| else | ||||
|     rm -f native.file | ||||
|     touch native.file | ||||
| fi | ||||
|  | ||||
| # cross-xfail-$CROSS, if it exists, contains a list of tests that are expected | ||||
| # to fail for the $CROSS configuration, one per line. you can then mark those | ||||
| # tests in their meson.build with: | ||||
| # | ||||
| # test(..., | ||||
| #      should_fail: meson.get_cross_property('xfail', '').contains(t), | ||||
| #     ) | ||||
| # | ||||
| # where t is the name of the test, and the '' is the string to search when | ||||
| # not cross-compiling (which is empty, because for amd64 everything is | ||||
| # expected to pass). | ||||
| if [ -n "$CROSS" ]; then | ||||
|     CROSS_XFAIL=.gitlab-ci/cross-xfail-"$CROSS" | ||||
|     if [ -s "$CROSS_XFAIL" ]; then | ||||
|         sed -i \ | ||||
|             -e '/\[properties\]/a\' \ | ||||
|             -e "xfail = '$(tr '\n' , < $CROSS_XFAIL)'" \ | ||||
|             "$CROSS_FILE" | ||||
|     fi | ||||
| fi | ||||
|  | ||||
| rm -rf _build | ||||
| meson _build --native-file=native.file \ | ||||
|       --wrap-mode=nofallback \ | ||||
|       ${CROSS+--cross "$CROSS_FILE"} \ | ||||
|       -D prefix=`pwd`/install \ | ||||
|       -D libdir=lib \ | ||||
|       -D buildtype=${BUILDTYPE:-debug} \ | ||||
|       -D build-tests=true \ | ||||
|       -D libunwind=${UNWIND} \ | ||||
|       ${DRI_LOADERS} \ | ||||
|       -D dri-drivers=${DRI_DRIVERS:-[]} \ | ||||
|       ${GALLIUM_ST} \ | ||||
|       -D gallium-drivers=${GALLIUM_DRIVERS:-[]} \ | ||||
|       -D vulkan-drivers=${VULKAN_DRIVERS:-[]} \ | ||||
|       -D I-love-half-baked-turnips=true \ | ||||
|       ${EXTRA_OPTION} | ||||
| cd _build | ||||
| meson configure | ||||
| ninja -j4 | ||||
| LC_ALL=C.UTF-8 ninja test | ||||
| ninja install | ||||
| cd .. | ||||
| @@ -1,36 +0,0 @@ | ||||
| diff --git a/generated_tests/CMakeLists.txt b/generated_tests/CMakeLists.txt | ||||
| index 738526546..6f89048cd 100644 | ||||
| --- a/generated_tests/CMakeLists.txt | ||||
| +++ b/generated_tests/CMakeLists.txt | ||||
| @@ -206,11 +206,6 @@ piglit_make_generated_tests( | ||||
| 	templates/gen_variable_index_write_tests/vs.shader_test.mako | ||||
| 	templates/gen_variable_index_write_tests/fs.shader_test.mako | ||||
| 	templates/gen_variable_index_write_tests/helpers.mako) | ||||
| -piglit_make_generated_tests( | ||||
| -	vs_in_fp64.list | ||||
| -	gen_vs_in_fp64.py | ||||
| -	templates/gen_vs_in_fp64/columns.shader_test.mako | ||||
| -	templates/gen_vs_in_fp64/regular.shader_test.mako) | ||||
|  piglit_make_generated_tests( | ||||
| 	shader_framebuffer_fetch_tests.list | ||||
| 	gen_shader_framebuffer_fetch_tests.py) | ||||
| @@ -279,7 +274,6 @@ add_custom_target(gen-gl-tests | ||||
| 			gen_extensions_defined.list | ||||
| 			vp-tex.list | ||||
| 			variable_index_write_tests.list | ||||
| -			vs_in_fp64.list | ||||
| 			gpu_shader4_tests.list | ||||
|  ) | ||||
|  | ||||
| diff --git a/tests/sanity.py b/tests/sanity.py | ||||
| index 12f1614c9..9019087e2 100644 | ||||
| --- a/tests/sanity.py | ||||
| +++ b/tests/sanity.py | ||||
| @@ -100,7 +100,6 @@ shader_tests = ( | ||||
|      'spec/arb_tessellation_shader/execution/barrier-patch.shader_test', | ||||
|      'spec/arb_tessellation_shader/execution/built-in-functions/tcs-any-bvec4-using-if.shader_test', | ||||
|      'spec/arb_tessellation_shader/execution/sanity.shader_test', | ||||
| -    'spec/arb_vertex_attrib_64bit/execution/vs_in/vs-input-uint_uvec4-double_dmat3x4_array2-position.shader_test', | ||||
|      'spec/glsl-1.50/execution/geometry-basic.shader_test', | ||||
|      'spec/oes_viewport_array/viewport-gs-write-simple.shader_test', | ||||
|  ) | ||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| @@ -1,29 +0,0 @@ | ||||
| #!/bin/bash | ||||
|  | ||||
| set -e | ||||
| set -o xtrace | ||||
|  | ||||
| VERSION=`cat artifacts/VERSION` | ||||
|  | ||||
| cd /piglit | ||||
|  | ||||
| PIGLIT_OPTIONS=$(echo $PIGLIT_OPTIONS | head -n 1) | ||||
| xvfb-run --server-args="-noreset" sh -c \ | ||||
|          "export LD_LIBRARY_PATH=$OLDPWD/install/lib; | ||||
|          wflinfo --platform glx --api gl --profile core | grep \"Mesa $VERSION\\\$\" && | ||||
|          ./piglit run -j4 $PIGLIT_OPTIONS $PIGLIT_PROFILES $OLDPWD/results" | ||||
|  | ||||
| PIGLIT_RESULTS=${PIGLIT_RESULTS:-$PIGLIT_PROFILES} | ||||
| mkdir -p .gitlab-ci/piglit | ||||
| cp $OLDPWD/artifacts/piglit/$PIGLIT_RESULTS.txt .gitlab-ci/piglit/$PIGLIT_RESULTS.txt.baseline | ||||
| ./piglit summary console $OLDPWD/results | head -n -1 | grep -v ": pass" >.gitlab-ci/piglit/$PIGLIT_RESULTS.txt | ||||
|  | ||||
| if diff -q .gitlab-ci/piglit/$PIGLIT_RESULTS.txt{.baseline,}; then | ||||
|     exit 0 | ||||
| fi | ||||
|  | ||||
| ./piglit summary html --exclude-details=pass $OLDPWD/summary $OLDPWD/results | ||||
|  | ||||
| echo Unexpected change in results: | ||||
| diff -u .gitlab-ci/piglit/$PIGLIT_RESULTS.txt{.baseline,} | ||||
| exit 1 | ||||
| @@ -1,59 +0,0 @@ | ||||
| #!/bin/bash | ||||
|  | ||||
| set -e | ||||
| set -o xtrace | ||||
|  | ||||
| CROSS_FILE=/cross_file-"$CROSS".txt | ||||
|  | ||||
| # Delete unused bin and includes from artifacts to save space. | ||||
| rm -rf install/bin install/include | ||||
|  | ||||
| # Strip the drivers in the artifacts to cut 80% of the artifacts size. | ||||
| if [ -n "$CROSS" ]; then | ||||
|     STRIP=`sed -n -E "s/strip\s*=\s*'(.*)'/\1/p" "$CROSS_FILE"` | ||||
|     if [ -z "$STRIP" ]; then | ||||
|         echo "Failed to find strip command in cross file" | ||||
|         exit 1 | ||||
|     fi | ||||
| else | ||||
|     STRIP="strip" | ||||
| fi | ||||
| find install -name \*.so -exec $STRIP {} \; | ||||
|  | ||||
| # Test runs don't pull down the git tree, so put the dEQP helper | ||||
| # script and associated bits there. | ||||
| mkdir -p artifacts/ | ||||
| cp VERSION artifacts/ | ||||
| cp -Rp .gitlab-ci/deqp* artifacts/ | ||||
| cp -Rp .gitlab-ci/piglit artifacts/ | ||||
|  | ||||
| # Tar up the install dir so that symlinks and hardlinks aren't each | ||||
| # packed separately in the zip file. | ||||
| tar -cf artifacts/install.tar install | ||||
|  | ||||
| # If the container has LAVA stuff, prepare the artifacts for LAVA jobs | ||||
| if [ -d /lava-files ]; then | ||||
|         # Copy kernel and device trees for LAVA | ||||
|         cp /lava-files/*Image artifacts/. | ||||
|         cp /lava-files/*.dtb artifacts/. | ||||
|  | ||||
|         # Pack ramdisk for LAVA | ||||
|         mkdir -p /lava-files/rootfs-${CROSS:-arm64}/mesa | ||||
|         cp -a install/* /lava-files/rootfs-${CROSS:-arm64}/mesa/. | ||||
|  | ||||
|         cp .gitlab-ci/deqp-runner.sh /lava-files/rootfs-${CROSS:-arm64}/deqp/. | ||||
|         cp .gitlab-ci/deqp-*-fails.txt /lava-files/rootfs-${CROSS:-arm64}/deqp/. | ||||
|         cp .gitlab-ci/deqp-*-skips.txt /lava-files/rootfs-${CROSS:-arm64}/deqp/. | ||||
|         find /lava-files/rootfs-${CROSS:-arm64}/ -type f -printf "%s\t%i\t%p\n" | sort -n | tail -100 | ||||
|  | ||||
|         pushd /lava-files/rootfs-${CROSS:-arm64}/ | ||||
|         find -H  |  cpio -H newc -o | gzip -c - > $CI_PROJECT_DIR/artifacts/lava-rootfs-${CROSS:-arm64}.cpio.gz | ||||
|         popd | ||||
|  | ||||
|         # Store job ID so the test stage can build URLs to the artifacts | ||||
|         echo $CI_JOB_ID > artifacts/build_job_id.txt | ||||
|  | ||||
|         # Pass needed files to the test stage | ||||
|         cp $CI_PROJECT_DIR/.gitlab-ci/generate_lava.py artifacts/. | ||||
|         cp $CI_PROJECT_DIR/.gitlab-ci/lava-deqp.yml.jinja2 artifacts/. | ||||
| fi | ||||
| @@ -1,17 +0,0 @@ | ||||
| set -e | ||||
| set -v | ||||
|  | ||||
| ARTIFACTSDIR=`pwd`/shader-db | ||||
| mkdir -p $ARTIFACTSDIR | ||||
| export DRM_SHIM_DEBUG=true | ||||
|  | ||||
| LIBDIR=`pwd`/install/lib | ||||
| export LD_LIBRARY_PATH=$LIBDIR | ||||
|  | ||||
| cd /usr/local/shader-db | ||||
|  | ||||
| for driver in freedreno v3d; do | ||||
|     env LD_PRELOAD=$LIBDIR/lib${driver}_noop_drm_shim.so \ | ||||
|         ./run -j 4 ./shaders \ | ||||
|             > $ARTIFACTSDIR/${driver}-shader-db.txt | ||||
| done | ||||
| @@ -1,12 +0,0 @@ | ||||
| #!/bin/bash | ||||
|  | ||||
| set -e | ||||
| set -o xtrace | ||||
|  | ||||
| if test -n "$LLVM_VERSION"; then | ||||
|     export LLVM_CONFIG="llvm-config-${LLVM_VERSION}" | ||||
| fi | ||||
|  | ||||
| rm -rf build | ||||
| scons $SCONS_TARGET force_scons=on | ||||
| eval $SCONS_CHECK_COMMAND  | ||||
| @@ -1,20 +0,0 @@ | ||||
| [binaries] | ||||
| c = ['ccache', 'x86_64-w64-mingw32-gcc'] | ||||
| cpp = ['ccache', 'x86_64-w64-mingw32-g++'] | ||||
| ar = 'x86_64-w64-mingw32-ar' | ||||
| strip = 'x86_64-w64-mingw32-strip' | ||||
| pkgconfig = '/usr/local/bin/x86_64-w64-mingw32-pkg-config' | ||||
| windres = 'x86_64-w64-mingw32-windres' | ||||
| exe_wrapper = ['wine64'] | ||||
|  | ||||
| [properties] | ||||
| needs_exe_wrapper = True | ||||
| sys_root = '/usr/x86_64-w64-mingw32/' | ||||
|  | ||||
| [host_machine] | ||||
| system = 'windows' | ||||
| cpu_family = 'x86_64' | ||||
| cpu = 'x86_64' | ||||
| endian = 'little' | ||||
|  | ||||
| ; vim: ft=dosini | ||||
							
								
								
									
										490
									
								
								.mailmap
									
									
									
									
									
								
							
							
						
						
									
										490
									
								
								.mailmap
									
									
									
									
									
								
							| @@ -1,490 +0,0 @@ | ||||
| Aapo Tahkola <aet@rasterburn.org> <aapo@aapo-desktop.(none)> | ||||
|  | ||||
| Adam Jackson <ajax@redhat.com> <ajax@benzedrine.nwnk.net> | ||||
| Adam Jackson <ajax@redhat.com> <ajax@freedesktop.org> | ||||
|  | ||||
| Adrian Marius Negreanu <adrian.m.negreanu@intel.com> Adrian Negreanu <adrian.m.negreanu@intel.com> | ||||
| Adrian Marius Negreanu <adrian.m.negreanu@intel.com> Negreanu Marius Adrian <adrian.m.negreanu@intel.com> | ||||
|  | ||||
| Dave Airlie <airlied@redhat.com> <airliedfreedesktop.org> | ||||
| Dave Airlie <airlied@redhat.com> airlied <airlied@unused-12-215.bne.redhat.com> | ||||
| Dave Airlie <airlied@redhat.com> <airlied@dhcp-1-203.bne.redhat.com> | ||||
| Dave Airlie <airlied@redhat.com> <airlied@gmail.com> | ||||
| Dave Airlie <airlied@redhat.com> <airlied@itt42.(none)> | ||||
| Dave Airlie <airlied@redhat.com> <airlied@linux.ie> | ||||
| Dave Airlie <airlied@redhat.com> <airlied@nx6125b.(none)> | ||||
| Dave Airlie <airlied@redhat.com> <airlied@panoply-rh.(none)> | ||||
| Dave Airlie <airlied@redhat.com> <airlied@ppcg5.localdomain> | ||||
|  | ||||
| Alan Coopersmith <alan.coopersmith@oracle.com> <alan.coopersmith@sun.com> | ||||
|  | ||||
| Alan Hourihane <alanh@vmware.com> <alanh@tungstengraphics.com> | ||||
| Alan Hourihane <alanh@vmware.com> <alanh@fairlite.demon.co.uk> | ||||
| Alan Hourihane <alanh@vmware.com> <alanh@jetpack.(none)> | ||||
|  | ||||
| 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> | ||||
|  | ||||
| Alex Deucher <alexdeucher@gmail.com> <alexander.deucher@amd.com> | ||||
| Alex Deucher <alexdeucher@gmail.com> <agd5f@yahoo.com> | ||||
| Alex Deucher <alexdeucher@gmail.com> <alex@botch2.com> | ||||
| Alex Deucher <alexdeucher@gmail.com> <alex@botch2.(none)> | ||||
| Alex Deucher <alexdeucher@gmail.com> <alex@cube.(none)> | ||||
| Alex Deucher <alexdeucher@gmail.com> <alex@samba.(none)> | ||||
|  | ||||
| Andreas Fänger <a.faenger@e-sign.com> <a.faenger@e-sign.com> | ||||
|  | ||||
| Andreas Hartmetz <ahartmetz@gmail.com> <andreas.hartmetz@kdab.com> | ||||
|  | ||||
| Andre Heider <a.heider@gmail.com> | ||||
| Andreas Heider <andreas@heider.io> | ||||
|  | ||||
| Andreas Pokorny <andreas.pokorny@canonical.com> <andreas.pokorny@elektrobit.com> | ||||
|  | ||||
| Andrew Randrianasulu <randrianasulu@gmail.com> <randrik_a@yahoo.com> | ||||
| 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)> | ||||
| Ben Skeggs <bskeggs@redhat.com> <darktama@iinet.net.au> | ||||
| Ben Skeggs <bskeggs@redhat.com> <darktama@nisroch.keine.ath.cx> | ||||
| Ben Skeggs <bskeggs@redhat.com> <skeggsb-at-gmail.com> | ||||
| Ben Skeggs <bskeggs@redhat.com> <skeggsb@gmail.com> | ||||
| Ben Skeggs <bskeggs@redhat.com> <skeggsb@localhost.localdomain> | ||||
| Ben Skeggs <bskeggs@redhat.com> <skeggsb@nisroch.keine.ath.cx> | ||||
|  | ||||
| Ben Widawsky <benjamin.widawsky@intel.com> Ben Widawsky <ben@bwidawsk.net> | ||||
|  | ||||
| Blair Sadewitz <blair.sadewitz@gmail.com> Blair Sadewitz <blair.sadewitz.gmail.com> | ||||
|  | ||||
| Boris Peterbarg <reist@users.sourceforge.net> reist <reist> | ||||
|  | ||||
| Brian Paul <brianp@vmware.com> Brian <brian.paul@tungstengraphics.com> | ||||
| Brian Paul <brianp@vmware.com> <brian.paul@tungstengraphics.com> | ||||
| Brian Paul <brianp@vmware.com> <brian.e.paul@gmail.com> | ||||
| Brian Paul <brianp@vmware.com> <brianp@kemper.freedesktop.org> | ||||
| Brian Paul <brianp@vmware.com> brian <brian@cvp965.(none)> | ||||
| Brian Paul <brianp@vmware.com> Brian <brian@i915.localnet.net> | ||||
| Brian Paul <brianp@vmware.com> Brian <brian@nostromo.localnet.net> | ||||
| Brian Paul <brianp@vmware.com> Brian <brian@poulsbo.localnet.net> | ||||
| Brian Paul <brianp@vmware.com> Brian <brian@ps3.localnet.net> | ||||
| Brian Paul <brianp@vmware.com> Brian <brianp@vmware.com> | ||||
| Brian Paul <brianp@vmware.com> Brian <brian@yutani.localnet.net> | ||||
| Brian Paul <brianp@vmware.com> root <brian.paul@tungstengraphics.com> | ||||
| Brian Paul <brianp@vmware.com> root <root@i915.localnet.net> | ||||
| Brian Paul <brianp@vmware.com> root <root@nostromo.localnet.net> | ||||
| Brian Paul <brianp@vmware.com> root <root@i965.localnet.net> | ||||
|  | ||||
| Bruce Merry <bmerry@users.sourceforge.net> <bmerry@gmail.com> | ||||
|  | ||||
| Carl-Philip Hänsch <cphaensch@googlemail.com> Carl-Philip Haensch <s3734770@mail.zih.tu-dresden.de> | ||||
| Carl-Philip Hänsch <cphaensch@googlemail.com> Carl-Philip Haensch <carli@carli-laptop.(none)> | ||||
| Carl-Philip Hänsch <cphaensch@googlemail.com> Carl-Philip Haensch <Carl-Philip.Haensch@mailbox.tu-dresden.de> | ||||
|  | ||||
| Chad Versace <chadversary@chromium.org> <chad@kiwitree.net> | ||||
| Chad Versace <chadversary@chromium.org> <chad@chad-versace.us> | ||||
| Chad Versace <chadversary@chromium.org> <Chad Versace chad@chad-versace.us> | ||||
| Chad Versace <chadversary@chromium.org> <chad.versace@intel.com> | ||||
| Chad Versace <chadversary@chromium.org> <chad.versace@linux.intel.com> | ||||
|  | ||||
| Chia-I Wu <olvaffe@gmail.com> <olv@lunarg.com> | ||||
| Chia-I Wu <olvaffe@gmail.com> Chia-Wu <olvaffe@gmail.com> | ||||
|  | ||||
| Chih-Wei Huang <cwhuang@linux.org.tw> Chih-Wei Huang <cwhuang@android-x86.org> | ||||
|  | ||||
| Christian König <christian.koenig@amd.com> Christian Koenig <christian.koenig@amd.com> | ||||
| Christian König <christian.koenig@amd.com> Christian König <christian.koenig at amd.com> | ||||
| Christian König <christian.koenig@amd.com> Christian König <deathsimple@vodafone.de> | ||||
|  | ||||
| Christoph Brill <egore911@egore911.de> Christoph Bill <egore@gmx.de> | ||||
| Christoph Brill <egore911@egore911.de> <egore@gmx.de> | ||||
|  | ||||
| Christoph Bumiller <christoph.bumiller@speed.at> <e0425955@student.tuwien.ac.at> | ||||
|  | ||||
| Christopher James Halse Rogers <christopher.halse.rogers@canonical.com> Christopher James Halse Rogers <raof@ubuntu.com> | ||||
|  | ||||
| Claudio Ciccani <klan@directfb.org> <klan@users.sf.net> | ||||
| Claudio Ciccani <klan@directfb.org> <klan@users.sourceforge.net> | ||||
|  | ||||
| Connor Abbott <cwabbott0@gmail.com> <connor.w.abbott@intel.com> | ||||
| Connor Abbott <cwabbott0@gmail.com> <connor.abbott@intel.com> | ||||
|  | ||||
| Corbin Simpson <MostAwesomeDude@gmail.com> <mostawesomed...@gmail.com> | ||||
| Corbin Simpson <MostAwesomeDude@gmail.com> <mostawesomedude@gmail.com> | ||||
|  | ||||
| Courtney Goeltzenleuchter <courtney@lunarg.com> <courtney@LunarG.com> | ||||
|  | ||||
| Daniel Skinner <sio@users.sourceforge.net> sio <sio> | ||||
|  | ||||
| Daniel Stone <daniels@collabora.com> <daniel@fooishbar.org> | ||||
|  | ||||
| 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 Reveman <reveman@chromium.org> <c99drn@cs.umu.se> | ||||
|  | ||||
| Dieter Nützel <Dieter@nuetzel-hh.de> Dieter Nützel <dieter@nuetzel-hh.de> | ||||
|  | ||||
| Dmitry Cherkassov <dcherkassov@gmail.com> Dmitry Cherkasov <dcherkassov@gmail.com> | ||||
|  | ||||
| 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> | ||||
| 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> | ||||
|  | ||||
| Hans de Goede <hdegoede@redhat.com> Hans de Goede <j.w..r..degoede@hhs.nl> | ||||
|  | ||||
| Homer Hsing <dongsheng.xing@intel.com> <homer.hsing@gmail.com> | ||||
|  | ||||
| Hui Qi Tay <hqtay@vmware.com> <tayhuiqithq@gmail.com> | ||||
|  | ||||
| Ian Romanick <ian.d.romanick@intel.com> <idr@freedesktop.org> | ||||
| Ian Romanick <ian.d.romanick@intel.com> <idr@us.ibm.com> | ||||
|  | ||||
| Jakob Bornecrantz <wallbraker@gmail.com> <jakob@vmware.com> | ||||
| 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> | ||||
|  | ||||
| James Legg <jlegg@feralinteractive.com> <lankyleggy@gmail.com> | ||||
|  | ||||
| Jan Vesely <jano.vesely@gmail.com> Jan Vesely <jan.vesely@rutgers.edu> | ||||
|  | ||||
| Jason Ekstrand <jason@jlekstrand.net> <jason.ekstrand@intel.com> | ||||
|  | ||||
| Jeremy Huddleston <jeremyhu@apple.com> <jeremyhu@freedesktop.org> | ||||
| Jeremy Huddleston <jeremyhu@apple.com> <jeremy@tifa.local> | ||||
| Jeremy Huddleston <jeremyhu@apple.com> <jeremy@vincent.local> | ||||
| Jeremy Huddleston <jeremyhu@apple.com> <jeremy@yuffie.local> | ||||
| Jeremy Huddleston <jeremyhu@apple.com> Jeremy Huddleston Sequoia <jeremyhu@apple.com> | ||||
|  | ||||
| Jeremy Kolb <jkolb@freedesktop.org> <jkolb@brandeis.edu> | ||||
|  | ||||
| Jerome Glisse <jglisse@redhat.com> <glisse@freedesktop.org> | ||||
| Jerome Glisse <jglisse@redhat.com> <glisse@kemper.freedesktop.org> | ||||
| Jerome Glisse <jglisse@redhat.com> John Doe <glisse@barney.(none)> | ||||
| Jerome Glisse <jglisse@redhat.com> John Doe <glisse@localhost.localdomain> | ||||
|  | ||||
| Jesse Barnes <jesse.barnes@intel.com> <jbarnes@hobbes.lan> | ||||
| Jesse Barnes <jesse.barnes@intel.com> <jbarnes@hobbes.(none)> | ||||
| Jesse Barnes <jesse.barnes@intel.com> <jbarnes@jbarnes-desktop.localdomain> | ||||
| Jesse Barnes <jesse.barnes@intel.com> <jbarnes@jbarnes-t61.(none)> | ||||
| Jesse Barnes <jesse.barnes@intel.com> <jbarnes@virtuousgeek.org> | ||||
|  | ||||
| Joakim Sindholt <bacn@zhasha.com> <opensource@zhasha.com> | ||||
| Joakim Sindholt <bacn@zhasha.com> <zhasha@gallium-dev.(none)> | ||||
|  | ||||
| Jochen Gerlach <jtg@users.sourceforge.net> jtg <jtg> | ||||
|  | ||||
| Joel Bosveld <joel.bosveld@gmail.com> <Joel.Bosveld@gmail.com> | ||||
|  | ||||
| Jonathan Adamczewski <jadamcze@utas.edu.au> <jadamcze@utas.edu.a> | ||||
|  | ||||
| Jon Turney <jon.turney@dronecode.org.uk> Jon TURNEY <jon.turney@dronecode.org.uk> | ||||
|  | ||||
| José Fonseca <jfonseca@vmware.com> Jose Fonseca <jfonseca@vmware.com> | ||||
| José Fonseca <jfonseca@vmware.com> Jose Fonseca <jrfonseca@tungstengraphics.com> | ||||
| José Fonseca <jfonseca@vmware.com> <jfonseca@pegasus.(none)> | ||||
| José Fonseca <jfonseca@vmware.com> <jfonseca@titan.(none)> | ||||
| José Fonseca <jfonseca@vmware.com> <jose.r.fonseca@gmail.com> | ||||
| José Fonseca <jfonseca@vmware.com> <jrfonseca@tungstengraphics.com> | ||||
| José Fonseca <jfonseca@vmware.com> <j_r_fonseca@yahoo.co.uk> | ||||
|  | ||||
| Jouk Jansen <joukj@hrem.nano.tudelft.nl> Jouk Jansen <jouk@hrem.nano.tudelft.nl> | ||||
| Jouk Jansen <joukj@hrem.nano.tudelft.nl> Jouk Jansen <joukj@hrem.stm.tudelft.nl> | ||||
| Jouk Jansen <joukj@hrem.nano.tudelft.nl> joukj <joukj@tarantella.(none)> | ||||
| Jouk Jansen <joukj@hrem.nano.tudelft.nl> Jouk <joukj@tarantella.nano.tudelft.nl> | ||||
| Jouk Jansen <joukj@hrem.nano.tudelft.nl> Jouk <joukj@tarantella.(none)> | ||||
| Jouk Jansen <joukj@hrem.nano.tudelft.nl> J.Jansen <joukj@tarantella.nano.tudelft.nl> | ||||
|  | ||||
| Juan Zhao <juan.j.zhao@intel.com> <juan.j.zhao@linux.intel.com> | ||||
|  | ||||
| Julien Cristau <jcristau@debian.org> <julien.cristau@logilab.fr> | ||||
|  | ||||
| Julien Isorce <j.isorce@samsung.com> <julien.isorce@gmail.com> | ||||
|  | ||||
| Kalyan Kondapally <kalyan.kondapally@intel.com> <kondapallykalyancontribute@gmail.com> | ||||
|  | ||||
| Karl Schultz <karl.w.schultz@gmail.com> Karl Schultze <k.w.schultz@comcast.net> | ||||
| Karl Schultz <karl.w.schultz@gmail.com> unknown <kwschult@.na.qualcomm.com> | ||||
| Karl Schultz <karl.w.schultz@gmail.com> <k.w.schultz@comcast.net> | ||||
| Karl Schultz <karl.w.schultz@gmail.com> <Karl.W.Schultz@gmail.com> | ||||
| Karl Schultz <karl.w.schultz@gmail.com> <kschultz@freedesktop.org> | ||||
|  | ||||
| Keith Harrison <sio2@users.sourceforge.net> sio2 <sio2> | ||||
|  | ||||
| Keith Packard <keithp@keithp.com> <keithp@koto.keithp.com> | ||||
| Keith Packard <keithp@keithp.com> <keithp@neko.keithp.com> | ||||
|  | ||||
| Keith Whitwell <keithw@vmware.com> <keith@tungstengraphics.com> | ||||
| Keith Whitwell <keithw@vmware.com> keithw <keithw@keithw-laptop.(none)> | ||||
|  | ||||
| Kristian Høgsberg <krh@bitplanet.net> <krh@redhat.com> | ||||
| 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> | ||||
|  | ||||
| Li Peng <peng.li@intel.com> <peng.li@linux.intel.com> | ||||
|  | ||||
| Lucas Stach <dev@lynxeye.de> <l.stach@pengutronix.de> | ||||
|  | ||||
| Maarten Lankhorst <maarten.lankhorst@ubuntu.com> <dev@mblankhorst.nl> | ||||
| Maarten Lankhorst <maarten.lankhorst@ubuntu.com> <m.b.lankhorst@gmail.com> | ||||
| Maarten Lankhorst <maarten.lankhorst@ubuntu.com> <maarten.lankhorst@canonical.com> | ||||
|  | ||||
| Maciej Cencora <m.cencora@gmail.com> <maciej@osiris.(none)> | ||||
|  | ||||
| Marc-André Lureau <marcandre.lureau@gmail.com> Marc-Andre Lureau <marcandre.lureau@gmail.com> | ||||
|  | ||||
| Marc Dietrich <marvin24@gmx.de> Marc <marvin24@gmx.de> | ||||
| Marc Dietrich <marvin24@gmx.de> marvin24 <marvin24@gmx.de> | ||||
|  | ||||
| Marcin Ślusarz <marcin.slusarz@gmail.com> Marcin Slusarz <marcin.slusarz@gmail.com> | ||||
|  | ||||
| Marek Olšák <maraeo@gmail.com> <marek.olsak@amd.com> | ||||
|  | ||||
| Mario Kleiner <mario.kleiner.de@gmail.com> kleinerm <mario.kleiner@tuebingen.mpg.de> | ||||
| Mario Kleiner <mario.kleiner.de@gmail.com> <mario.kleiner@tuebingen.mpg.de> | ||||
|  | ||||
| Mark Mueller <markkmueller@gmail.com> <MarkKMueller@gmail.com> | ||||
|  | ||||
| Marta Lofstedt <marta.lofstedt@intel.com> <marta.lofstedt@linux.intel.com> | ||||
|  | ||||
| Martin Peres <martin.peres@linux.intel.com> <martin.peres@labri.fr> | ||||
|  | ||||
| Mathias Fröhlich <mathias.froehlich@gmx.net> Mathias Froehlich <Mathias.Froehlich@gmx.net> | ||||
| Mathias Fröhlich <mathias.froehlich@gmx.net> Mathias Froehlich <Mathias.Froehlich@web.de> | ||||
| Mathias Fröhlich <mathias.froehlich@gmx.net> Mathias Frohlich <M.Froehlich@science-computing.de> | ||||
| Mathias Fröhlich <mathias.froehlich@gmx.net> <frohlich8@users.sourceforge.net> | ||||
| Mathias Fröhlich <mathias.froehlich@gmx.net> <Mathias.Froehlich@gmx.net> | ||||
| Mathias Fröhlich <mathias.froehlich@gmx.net> <Mathias.Froehlich@web.de> | ||||
| Mathias Fröhlich <mathias.froehlich@gmx.net> M.Froehlich@science-computing.de <M.Froehlich@science-computing.de> | ||||
|  | ||||
| Matthew W. S. Bell <matthew@bells23.org.uk> Matthew Bell <matthew@bells23.org.uk> | ||||
|  | ||||
| Maxence Le Doré <maxence.ledore@gmail.com> Maxence Le Dore <maxence.ledore@gmail.com> | ||||
|  | ||||
| Micah Fedke <micah.fedke@collabora.co.uk> <M.Fedke@Astronautics.com> | ||||
|  | ||||
| Michal Krol <michal@vmware.com> <michal@tungstengraphics.com> | ||||
| Michal Krol <michal@vmware.com> Michal Krol <michal@ubuntu-vbox.(none)> | ||||
| Michal Krol <michal@vmware.com> Michal Krol <mjkrol@gmail.org> | ||||
| Michal Krol <michal@vmware.com> michal <michal@capacitor.(none)> | ||||
| Michal Krol <michal@vmware.com> michal <michal@michal-laptop.(none)> | ||||
| Michal Krol <michal@vmware.com> michal <michal@quad.(none)> | ||||
| Michal Krol <michal@vmware.com> michal <michal@transistor.(none)> | ||||
| Michal Krol <michal@vmware.com> Michal <michal@tungstengraphics.com> | ||||
| Michal Krol <michal@vmware.com> michal <michal@wmvare.com> | ||||
|  | ||||
| Michel Dänzer <michel@daenzer.net> <michel.daenzer@amd.com> | ||||
| 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> | ||||
|  | ||||
| Mike Stroyan <mike@lunarg.com> <mike@LunarG.com> | ||||
|  | ||||
| Nian Wu <nian.wu@intel.com> <nian@graphics.(none)> | ||||
| Nian Wu <nian.wu@intel.com> <nian@tinderbox.sh.intel.com> | ||||
|  | ||||
| Nick Bowler <nbowler@draconx.ca> | ||||
|  | ||||
| Nick Sarnie <commendsarnex@gmail.com> | ||||
|  | ||||
| Nicolai Hähnle <nicolai.haehnle@amd.com> <nhaehnle@gmail.com> | ||||
| Nicolai Hähnle <nicolai.haehnle@amd.com> Nicolai Haehnle <nhaehnle@gmail.com> | ||||
| Nicolai Hähnle <nicolai.haehnle@amd.com> Nicolai Haehnle <prefect_@gmx.net> | ||||
| Nicolai Hähnle <nicolai.haehnle@amd.com> Nicolai Haehnle <prefect@upb.de> | ||||
|  | ||||
| Nigel Stewart <nigels@users.sourceforge.net> <nigels@sourceforge.net> | ||||
| Nigel Stewart <nigels@users.sourceforge.net> <nstewart@nvidia.com> | ||||
|  | ||||
| nobled <nobled@dreamwidth.org> <nobled2@nobled2-karmic.(none)> | ||||
|  | ||||
| Oliver McFadden <oliver.mcfadden@linux.intel.com> <z3ro.geek@gmail.com> | ||||
|  | ||||
| Owain Ainsworth <zerooa@googlemail.com> Owain G. Ainsworth <oga@openbsd.org> | ||||
|  | ||||
| Owen W. Taylor <otaylor@fishsoup.net> Owen Taylor <otaylor@snell.localdomain> | ||||
|  | ||||
| Patrice Mandin <patmandin@gmail.com> <patrice@manoir.racoon.city> | ||||
| Patrice Mandin <patmandin@gmail.com> <pmandin@caramail.com> | ||||
| Patrice Mandin <patmandin@gmail.com> <pmandin@freedesktop.org> | ||||
|  | ||||
| Pauli Nieminen <pauli.nieminen@linux.intel.com> <suokkos@gmail.com> | ||||
|  | ||||
| Paulo Zanoni <paulo.r.zanoni@intel.com> Paulo Zanoni <pzanoni@mandriva.com> | ||||
|  | ||||
| Paul Seidler <sepek@exherbo.org> Paul Seidler <pl.seidler@googlemail.com> | ||||
|  | ||||
| Pekka Paalanen <pekka.paalanen@collabora.co.uk> <ppaalanen@gmail.com> | ||||
| Pekka Paalanen <pekka.paalanen@collabora.co.uk> <pq@iki.fi> | ||||
|  | ||||
| Peter Hutterer <peter.hutterer@who-t.net> <peter@cs.unisa.edu.au> | ||||
|  | ||||
| Pierre-Eric Pelloux-Prayer <pelloux@gmail.com> pepp <pelloux@gmail.com> | ||||
|  | ||||
| Pierre Willenbrock <pierre@pirsoft.de> Pierre Willenbrok <pierre@pirsoft.de> | ||||
|  | ||||
| Quentin Glidic <sardemff7+git@sardemff7.net> <sardemff7@sardemff7.net> | ||||
|  | ||||
| RALOVICH, Kristóf <tade60@freemail.hu> <kristof.ralovich@gmail.com> | ||||
|  | ||||
| Richard Li <richardradeon@gmail.com> <RichardZ.Li@amd.com> | ||||
| # The next ones are not 100% sure | ||||
| Richard Li <richardradeon@gmail.com> richard <richard@richard-desktop3.(none)> | ||||
| Richard Li <richardradeon@gmail.com> richard <richard@richard-desktop.(none)> | ||||
| Richard Li <richardradeon@gmail.com> root <root@richard-desktop.(none)> | ||||
|  | ||||
| Richard Sandiford <rsandifo@linux.vnet.ibm.com> <r.sandiford@uk.ibm.com> | ||||
|  | ||||
| Rob Clark <robclark@freedesktop.org> <Rob Clark robdclark@freedesktop.org> | ||||
| Rob Clark <robclark@freedesktop.org> <robdclark@gmail.com> | ||||
|  | ||||
| Robert Bragg <robert@sixbynine.org> <robert@linux.intel.com> | ||||
|  | ||||
| Robert Ellison <papillo@vmware.com> <papillo@i965-laptop.(none)> | ||||
| Robert Ellison <papillo@vmware.com> <papillo@tungstengraphics.com> | ||||
|  | ||||
| Robert Hooker <sarvatt@ubuntu.com> <robert.hooker@canonical.com> | ||||
|  | ||||
| Roland Scheidegger <sroland@vmware.com> <rscheidegger@gmx.ch> | ||||
| Roland Scheidegger <sroland@vmware.com> <sroland@tungstengraphics.com> | ||||
|  | ||||
| Roy Spliet <rspliet@eclipso.eu> <r.spliet@student.tudelft.nl> | ||||
|  | ||||
| Rune Petersen <rune@megahurts.dk> Rune Peterson <rune@megahurts.dk> | ||||
|  | ||||
| Ryan Houdek <sonicadvance1@gmail.com> <Sonicadvance1@gmail.com> | ||||
|  | ||||
| Sam Hocevar <sam@hocevar.net> Sam Hocevar <sam@zoy.org> | ||||
|  | ||||
| Samuel Iglesias Gonsálvez <siglesias@igalia.com> Samuel Iglesias Gonsalvez <siglesias@igalia.com> | ||||
|  | ||||
| Sean D'Epagnier <sean@depagnier.com> <geckosenator@freedesktop.org> | ||||
|  | ||||
| Serge Martin <edb+mesa@sigluy.net> Serge Martin (EdB) <edb+mesa@sigluy.net> | ||||
| Serge Martin <edb+mesa@sigluy.net> EdB <edb+mesa@sigluy.net> | ||||
|  | ||||
| Sinclair Yeh <syeh@vmware.com> <sinclair.yeh@intel.com> | ||||
|  | ||||
| Stefan Brüns <stefan.bruens@rwth-aachen.de> <Stefan.Bruens@rwth-aachen.de> | ||||
|  | ||||
| Stéphane Marchesin <marcheu@chromium.org> Stephane Marchesin <marchesin@icps.u-strasbg.fr> | ||||
| Stéphane Marchesin <marcheu@chromium.org> Stephane Marchesin <stephane.marchesin@gmail.com> | ||||
|  | ||||
| Sven M. Hallberg <pesco@users.sourceforge.net> pesco <pesco> | ||||
|  | ||||
| Tapani Pälli <tapani.palli@intel.com> <tapani.palli@gmail.com> | ||||
| Tapani Pälli <tapani.palli@intel.com> Tapani <tapani.palli@intel.com> | ||||
|  | ||||
| Thierry Reding <treding@nvidia.com> <thierry@gilfi.de> | ||||
| Thierry Reding <treding@nvidia.com> <thierry.reding@avionic-design.de> | ||||
|  | ||||
| Thierry Vignaud <thierry.vignaud@gmail.com> <tvignaud@mandriva.com> | ||||
|  | ||||
| Thomas Balling Sørensen <tball@io.dk> <tball@tball-laptop.(none)> | ||||
|  | ||||
| Thomas Hellstrom <thellstrom@vmware.com> Thomas <thellstrom@vmware.com> | ||||
| Thomas Hellstrom <thellstrom@vmware.com> Thomas Hellstrom <thellstrom-at-vmware-dot-com> | ||||
| Thomas Hellstrom <thellstrom@vmware.com> Thomas Hellstrom <thomas-at-tungstengraphics-dot-com> | ||||
| Thomas Hellstrom <thellstrom@vmware.com> Thomas Hellstrom <thomas@tungstengraphics.com> | ||||
| Thomas Hellstrom <thellstrom@vmware.com> Thomas Hellström <thomas@tungstengraphics.com> | ||||
|  | ||||
| Thomas Tanner <tanner@gmx.net> tanner <tanner> | ||||
|  | ||||
| Tilman Sauerbeck <tilman@code-monkey.de> <tilman@freedesktop.org> | ||||
|  | ||||
| Timothy Arceri <timothy.arceri@collabora.com> <t_arceri@yahoo.com.au> | ||||
| Timothy Arceri <timothy.arceri@collabora.com> Timothy <t_arceri@yahoo.com.au> | ||||
|  | ||||
| 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> | ||||
| Török Edwin <edwin+mesa@etorok.net> <edwintorok@gmail.com> | ||||
|  | ||||
| Ville Syrjälä <ville.syrjala@linux.intel.com> Ville Syrjala <syrjala@freedesktop.org> | ||||
| Ville Syrjälä <ville.syrjala@linux.intel.com> Ville Syrjala <syrjala@sci.fi> | ||||
|  | ||||
| Vincent Lejeune <vljn@ovi.com> <peluche.canard@gmail.com> | ||||
|  | ||||
| Vinson Lee <vlee@freedesktop.org> <vlee@vmware.com> | ||||
|  | ||||
| Zhenyu Wang <zhenyuw@linux.intel.com> Wang Zhenyu <zhenyu.z.wang@intel.com> | ||||
|  | ||||
| Zack Rusin <zackr@vmware.com> <zack@kde.org> | ||||
| Zack Rusin <zackr@vmware.com> <zack@pixel.(none)> | ||||
| Zack Rusin <zackr@vmware.com> <zack@tungstengraphics.com> | ||||
|  | ||||
| Zhang <zxpmyth@yahoo.com.cn> zhang <zxpmyth@yahoo.com.cn> | ||||
							
								
								
									
										18029
									
								
								.pick_status.json
									
									
									
									
									
								
							
							
						
						
									
										18029
									
								
								.pick_status.json
									
									
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										64
									
								
								.travis.yml
									
									
									
									
									
								
							
							
						
						
									
										64
									
								
								.travis.yml
									
									
									
									
									
								
							| @@ -1,64 +0,0 @@ | ||||
| language: c | ||||
|  | ||||
| os: osx | ||||
|  | ||||
| cache: | ||||
|   ccache: true | ||||
|  | ||||
| env: | ||||
|   global: | ||||
|     - PKG_CONFIG_PATH="" | ||||
|  | ||||
| matrix: | ||||
|   include: | ||||
|     - env: | ||||
|       - BUILD=meson | ||||
|     - 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}" | ||||
|  | ||||
| install: | ||||
|   - 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 | ||||
|  | ||||
| script: | ||||
|   - if test "x$BUILD" = xmeson; then | ||||
|       meson _build -Dbuild-tests=true; | ||||
|       ninja -C _build || travis_terminate 1; | ||||
|       ninja -C _build test || travis_terminate 1; | ||||
|       ninja -C _build install || travis_terminate 1; | ||||
|     fi | ||||
|   - if test "x$BUILD" = xscons; then | ||||
|       scons force_scons=1 || travis_terminate 1; | ||||
|       scons force_scons=1 check || travis_terminate 1; | ||||
|     fi | ||||
| @@ -1,132 +0,0 @@ | ||||
| # Mesa 3-D graphics library | ||||
| # | ||||
| # Copyright (C) 2010-2011 Chia-I Wu <olvaffe@gmail.com> | ||||
| # Copyright (C) 2010-2011 LunarG Inc. | ||||
| # | ||||
| # 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. | ||||
|  | ||||
| ifeq ($(LOCAL_IS_HOST_MODULE),true) | ||||
| LOCAL_CFLAGS += -D_GNU_SOURCE | ||||
| endif | ||||
|  | ||||
| LOCAL_C_INCLUDES += \ | ||||
| 	$(MESA_TOP)/src \ | ||||
| 	$(MESA_TOP)/include | ||||
|  | ||||
| MESA_VERSION := $(shell cat $(MESA_TOP)/VERSION) | ||||
| LOCAL_CFLAGS += \ | ||||
| 	-Wno-error \ | ||||
| 	-Werror=incompatible-pointer-types \ | ||||
| 	-Wno-unused-parameter \ | ||||
| 	-Wno-pointer-arith \ | ||||
| 	-Wno-missing-field-initializers \ | ||||
| 	-Wno-initializer-overrides \ | ||||
| 	-Wno-mismatched-tags \ | ||||
| 	-DPACKAGE_VERSION=\"$(MESA_VERSION)\" \ | ||||
| 	-DPACKAGE_BUGREPORT=\"https://gitlab.freedesktop.org/mesa/mesa/issues\" | ||||
|  | ||||
| # XXX: The following __STDC_*_MACROS defines should not be needed. | ||||
| # It's likely due to a bug elsewhere, but let's temporarily add them | ||||
| # here to fix the radeonsi build. | ||||
| LOCAL_CFLAGS += \ | ||||
| 	-DANDROID_API_LEVEL=$(PLATFORM_SDK_VERSION) \ | ||||
| 	-DENABLE_SHADER_CACHE \ | ||||
| 	-D__STDC_CONSTANT_MACROS \ | ||||
| 	-D__STDC_LIMIT_MACROS \ | ||||
| 	-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 \ | ||||
| 	-DHAVE___BUILTIN_CLZ \ | ||||
| 	-DHAVE___BUILTIN_CLZLL \ | ||||
| 	-DHAVE___BUILTIN_UNREACHABLE \ | ||||
| 	-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 += \ | ||||
| 	-D__STDC_CONSTANT_MACROS \ | ||||
| 	-D__STDC_FORMAT_MACROS \ | ||||
| 	-D__STDC_LIMIT_MACROS \ | ||||
| 	-Wno-error=non-virtual-dtor \ | ||||
| 	-Wno-non-virtual-dtor | ||||
|  | ||||
| # mesa requires at least c99 compiler | ||||
| 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 ($(TARGET_ARCH),x86) | ||||
| LOCAL_CFLAGS += \ | ||||
| 	-DUSE_X86_ASM | ||||
| endif | ||||
| ifeq ($(ARCH_ARM_HAVE_NEON),true) | ||||
| LOCAL_CFLAGS_arm += -DUSE_ARM_ASM | ||||
| endif | ||||
| LOCAL_CFLAGS_arm64 += -DUSE_AARCH64_ASM | ||||
|  | ||||
| ifneq ($(LOCAL_IS_HOST_MODULE),true) | ||||
| LOCAL_CFLAGS += -DHAVE_LIBDRM | ||||
| LOCAL_SHARED_LIBRARIES += libdrm | ||||
| endif | ||||
|  | ||||
| LOCAL_CFLAGS_32 += -DDEFAULT_DRIVER_DIR=\"/vendor/lib/$(MESA_DRI_MODULE_REL_PATH)\" | ||||
| LOCAL_CFLAGS_64 += -DDEFAULT_DRIVER_DIR=\"/vendor/lib64/$(MESA_DRI_MODULE_REL_PATH)\" | ||||
| LOCAL_PROPRIETARY_MODULE := true | ||||
|  | ||||
| # uncomment to keep the debug symbols | ||||
| #LOCAL_STRIP_MODULE := false | ||||
|  | ||||
| ifeq ($(strip $(LOCAL_MODULE_TAGS)),) | ||||
| LOCAL_MODULE_TAGS := optional | ||||
| endif | ||||
|  | ||||
| # Quiet down the build system and remove any .h files from the sources | ||||
| LOCAL_SRC_FILES := $(patsubst %.h, , $(LOCAL_SRC_FILES)) | ||||
							
								
								
									
										119
									
								
								Android.mk
									
									
									
									
									
								
							
							
						
						
									
										119
									
								
								Android.mk
									
									
									
									
									
								
							| @@ -1,119 +0,0 @@ | ||||
| # Mesa 3-D graphics library | ||||
| # | ||||
| # Copyright (C) 2010-2011 Chia-I Wu <olvaffe@gmail.com> | ||||
| # Copyright (C) 2010-2011 LunarG Inc. | ||||
| # | ||||
| # 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. | ||||
|  | ||||
| # 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 | ||||
| # | ||||
| # 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. | ||||
|  | ||||
| MESA_TOP := $(call my-dir) | ||||
|  | ||||
| MESA_ANDROID_MAJOR_VERSION := $(word 1, $(subst ., , $(PLATFORM_VERSION))) | ||||
| ifneq ($(filter 2 4, $(MESA_ANDROID_MAJOR_VERSION)),) | ||||
| $(error "Android 4.4 and earlier not supported") | ||||
| 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> | ||||
| classic_drivers := i915.HAVE_I915_DRI i965.HAVE_I965_DRI | ||||
| gallium_drivers := \ | ||||
| 	swrast.HAVE_GALLIUM_SOFTPIPE \ | ||||
| 	freedreno.HAVE_GALLIUM_FREEDRENO \ | ||||
| 	i915g.HAVE_GALLIUM_I915 \ | ||||
| 	nouveau.HAVE_GALLIUM_NOUVEAU \ | ||||
| 	kmsro.HAVE_GALLIUM_KMSRO \ | ||||
| 	r300g.HAVE_GALLIUM_R300 \ | ||||
| 	r600g.HAVE_GALLIUM_R600 \ | ||||
| 	radeonsi.HAVE_GALLIUM_RADEONSI \ | ||||
| 	vmwgfx.HAVE_GALLIUM_VMWGFX \ | ||||
| 	vc4.HAVE_GALLIUM_VC4 \ | ||||
| 	virgl.HAVE_GALLIUM_VIRGL \ | ||||
| 	etnaviv.HAVE_GALLIUM_ETNAVIV \ | ||||
| 	iris.HAVE_GALLIUM_IRIS \ | ||||
| 	lima.HAVE_GALLIUM_LIMA \ | ||||
| 	panfrost.HAVE_GALLIUM_PANFROST | ||||
|  | ||||
| ifeq ($(BOARD_GPU_DRIVERS),all) | ||||
| MESA_BUILD_CLASSIC := $(filter HAVE_%, $(subst ., , $(classic_drivers))) | ||||
| MESA_BUILD_GALLIUM := $(filter HAVE_%, $(subst ., , $(gallium_drivers))) | ||||
| else | ||||
| # Warn if we have any invalid driver names | ||||
| $(foreach d, $(BOARD_GPU_DRIVERS), \ | ||||
| 	$(if $(findstring $(d).,$(classic_drivers) $(gallium_drivers)), \ | ||||
| 		, \ | ||||
| 		$(warning invalid GPU driver: $(d)) \ | ||||
| 	) \ | ||||
| ) | ||||
| MESA_BUILD_CLASSIC := $(strip $(foreach d, $(BOARD_GPU_DRIVERS), $(patsubst $(d).%,%, $(filter $(d).%, $(classic_drivers))))) | ||||
| MESA_BUILD_GALLIUM := $(strip $(foreach d, $(BOARD_GPU_DRIVERS), $(patsubst $(d).%,%, $(filter $(d).%, $(gallium_drivers))))) | ||||
| endif | ||||
| ifeq ($(filter x86%,$(TARGET_ARCH)),) | ||||
| 	MESA_BUILD_CLASSIC := | ||||
| endif | ||||
|  | ||||
| $(foreach d, $(MESA_BUILD_CLASSIC) $(MESA_BUILD_GALLIUM), $(eval $(d) := true)) | ||||
|  | ||||
| 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), \ | ||||
|     $(warning Unsupported LLVM version in Android $(MESA_ANDROID_MAJOR_VERSION)),) \ | ||||
|   $(eval LOCAL_CFLAGS += -DLLVM_AVAILABLE -DMESA_LLVM_VERSION_STRING=\"3.9\") \ | ||||
|   $(eval LOCAL_SHARED_LIBRARIES += libLLVM) | ||||
| endef | ||||
|  | ||||
| # add subdirectories | ||||
| SUBDIRS := \ | ||||
| 	src/etnaviv \ | ||||
| 	src/freedreno \ | ||||
| 	src/gbm \ | ||||
| 	src/loader \ | ||||
| 	src/mapi \ | ||||
| 	src/compiler \ | ||||
| 	src/mesa \ | ||||
| 	src/util \ | ||||
| 	src/egl \ | ||||
| 	src/amd \ | ||||
| 	src/broadcom \ | ||||
| 	src/intel \ | ||||
| 	src/mesa/drivers/dri \ | ||||
| 	src/vulkan \ | ||||
| 	src/panfrost \ | ||||
|  | ||||
| INC_DIRS := $(call all-named-subdir-makefiles,$(SUBDIRS)) | ||||
| INC_DIRS += $(call all-named-subdir-makefiles,src/gallium) | ||||
| include $(INC_DIRS) | ||||
							
								
								
									
										16
									
								
								CleanSpec.mk
									
									
									
									
									
								
							
							
						
						
									
										16
									
								
								CleanSpec.mk
									
									
									
									
									
								
							| @@ -1,16 +0,0 @@ | ||||
| $(call add-clean-step, rm -rf $(PRODUCT_OUT)/obj/STATIC_LIBRARIES/libmesa_*_intermediates) | ||||
| $(call add-clean-step, rm -rf $(PRODUCT_OUT)/obj/SHARED_LIBRARIES/i9*5_dri_intermediates) | ||||
| $(call add-clean-step, rm -rf $(PRODUCT_OUT)/obj/SHARED_LIBRARIES/libglapi_intermediates) | ||||
| $(call add-clean-step, rm -rf $(PRODUCT_OUT)/obj/SHARED_LIBRARIES/libGLES_mesa_intermediates) | ||||
| $(call add-clean-step, rm -rf $(OUT_DIR)/host/$(HOST_OS)-$(HOST_ARCH)/obj/EXECUTABLES/mesa_*_intermediates) | ||||
| $(call add-clean-step, rm -rf $(OUT_DIR)/host/$(HOST_OS)-$(HOST_ARCH)/obj/EXECUTABLES/glsl_compiler_intermediates) | ||||
| $(call add-clean-step, rm -rf $(OUT_DIR)/host/$(HOST_OS)-$(HOST_ARCH)/obj/STATIC_LIBRARIES/libmesa_glsl_utils_intermediates) | ||||
|  | ||||
| $(call add-clean-step, rm -rf $(PRODUCT_OUT)/*/STATIC_LIBRARIES/libmesa_*_intermediates) | ||||
| $(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 $(PRODUCT_OUT)/*/SHARED_LIBRARIES/*_dri_intermediates) | ||||
							
								
								
									
										533
									
								
								Makefile
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										533
									
								
								Makefile
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,533 @@ | ||||
| # Top-level Mesa makefile | ||||
|  | ||||
| TOP = . | ||||
|  | ||||
| SUBDIRS = src progs | ||||
|  | ||||
|  | ||||
| default: $(TOP)/configs/current | ||||
| 	@for dir in $(SUBDIRS) ; do \ | ||||
| 		if [ -d $$dir ] ; then \ | ||||
| 			(cd $$dir && $(MAKE)) || exit 1 ; \ | ||||
| 		fi \ | ||||
| 	done | ||||
|  | ||||
|  | ||||
| doxygen: | ||||
| 	cd doxygen && $(MAKE) | ||||
|  | ||||
| clean: | ||||
| 	-@touch $(TOP)/configs/current | ||||
| 	-@for dir in $(SUBDIRS) ; do \ | ||||
| 		if [ -d $$dir ] ; then \ | ||||
| 			(cd $$dir && $(MAKE) clean) ; \ | ||||
| 		fi \ | ||||
| 	done | ||||
| 	-@test -s $(TOP)/configs/current || rm -f $(TOP)/configs/current | ||||
|  | ||||
|  | ||||
| realclean: clean | ||||
| 	-rm -rf lib* | ||||
| 	-rm -f $(TOP)/configs/current | ||||
| 	-rm -f $(TOP)/configs/autoconf | ||||
| 	-rm -rf autom4te.cache | ||||
| 	-find . '(' -name '*.o' -o -name '*.a' -o -name '*.so' -o \ | ||||
| 	  -name depend -o -name depend.bak ')' -exec rm -f '{}' ';' | ||||
|  | ||||
|  | ||||
|  | ||||
| install: | ||||
| 	@for dir in $(SUBDIRS) ; do \ | ||||
| 		if [ -d $$dir ] ; then \ | ||||
| 			(cd $$dir && $(MAKE) install) || exit 1 ; \ | ||||
| 		fi \ | ||||
| 	done | ||||
|  | ||||
|  | ||||
| # DirectFBGL module installation | ||||
| linux-directfb-install: | ||||
| 	cd src/mesa/drivers/directfb && $(MAKE) install | ||||
|  | ||||
| .PHONY: default doxygen clean realclean install linux-directfb-install | ||||
|  | ||||
| # If there's no current configuration file | ||||
| $(TOP)/configs/current: | ||||
| 	@echo | ||||
| 	@echo | ||||
| 	@echo "Please choose a configuration from the following list:" | ||||
| 	@ls -1 $(TOP)/configs | grep -v "current\|default\|CVS\|autoconf.*" | ||||
| 	@echo | ||||
| 	@echo "Then type 'make <config>' (ex: 'make linux-x86')" | ||||
| 	@echo | ||||
| 	@echo "Or, run './configure' then 'make'" | ||||
| 	@echo "See './configure --help' for details" | ||||
| 	@echo | ||||
| 	@echo "(ignore the following error message)" | ||||
| 	@exit 1 | ||||
|  | ||||
|  | ||||
| # Rules to set/install a specific build configuration | ||||
| aix \ | ||||
| aix-64 \ | ||||
| aix-64-static \ | ||||
| aix-gcc \ | ||||
| aix-static \ | ||||
| autoconf \ | ||||
| bluegene-osmesa \ | ||||
| bluegene-xlc-osmesa \ | ||||
| beos \ | ||||
| catamount-osmesa-pgi \ | ||||
| darwin \ | ||||
| darwin-fat-32bit \ | ||||
| darwin-fat-all \ | ||||
| darwin-static \ | ||||
| darwin-static-x86ppc \ | ||||
| freebsd \ | ||||
| freebsd-dri \ | ||||
| freebsd-dri-amd64 \ | ||||
| freebsd-dri-x86 \ | ||||
| hpux10 \ | ||||
| hpux10-gcc \ | ||||
| hpux10-static \ | ||||
| hpux11-32 \ | ||||
| hpux11-32-static \ | ||||
| hpux11-32-static-nothreads \ | ||||
| hpux11-64 \ | ||||
| hpux11-64-static \ | ||||
| hpux11-ia64 \ | ||||
| hpux11-ia64-static \ | ||||
| hpux9 \ | ||||
| hpux9-gcc \ | ||||
| irix6-64 \ | ||||
| irix6-64-static \ | ||||
| irix6-n32 \ | ||||
| irix6-n32-static \ | ||||
| irix6-o32 \ | ||||
| irix6-o32-static \ | ||||
| linux \ | ||||
| linux-alpha \ | ||||
| linux-alpha-static \ | ||||
| linux-debug \ | ||||
| linux-directfb \ | ||||
| linux-dri \ | ||||
| linux-dri-debug \ | ||||
| linux-dri-x86 \ | ||||
| linux-dri-x86-64 \ | ||||
| linux-dri-ppc \ | ||||
| linux-dri-xcb \ | ||||
| linux-indirect \ | ||||
| linux-fbdev \ | ||||
| linux-glide \ | ||||
| linux-ia64-icc \ | ||||
| linux-ia64-icc-static \ | ||||
| linux-icc \ | ||||
| linux-icc-static \ | ||||
| linux-osmesa \ | ||||
| linux-osmesa16 \ | ||||
| linux-osmesa16-static \ | ||||
| linux-osmesa32 \ | ||||
| linux-ppc \ | ||||
| linux-ppc-static \ | ||||
| linux-solo \ | ||||
| linux-solo-x86 \ | ||||
| linux-solo-ia64 \ | ||||
| linux-sparc \ | ||||
| linux-sparc5 \ | ||||
| linux-static \ | ||||
| linux-ultrasparc \ | ||||
| linux-tcc \ | ||||
| linux-x86 \ | ||||
| linux-x86-debug \ | ||||
| linux-x86-32 \ | ||||
| linux-x86-64 \ | ||||
| linux-x86-64-debug \ | ||||
| linux-x86-64-static \ | ||||
| linux-x86-glide \ | ||||
| linux-x86-static \ | ||||
| netbsd \ | ||||
| openbsd \ | ||||
| osf1 \ | ||||
| osf1-static \ | ||||
| solaris-x86 \ | ||||
| solaris-x86-gcc \ | ||||
| solaris-x86-gcc-static \ | ||||
| sunos4 \ | ||||
| sunos4-gcc \ | ||||
| sunos4-static \ | ||||
| sunos5 \ | ||||
| sunos5-gcc \ | ||||
| sunos5-64-gcc \ | ||||
| sunos5-smp \ | ||||
| sunos5-v8 \ | ||||
| sunos5-v8-static \ | ||||
| sunos5-v9 \ | ||||
| sunos5-v9-static \ | ||||
| sunos5-v9-cc-g++ \ | ||||
| ultrix-gcc: | ||||
| 	@ if test -f configs/current || test -L configs/current ; then \ | ||||
| 		echo "Please run 'make realclean' before changing configs" ; \ | ||||
| 		exit 1 ; \ | ||||
| 	fi | ||||
| 	(cd configs && rm -f current && ln -s $@ current) | ||||
| 	$(MAKE) default | ||||
|  | ||||
|  | ||||
| # Rules for making release tarballs | ||||
|  | ||||
| VERSION=7.4-rc1 | ||||
| DIRECTORY = Mesa-$(VERSION) | ||||
| LIB_NAME = MesaLib-$(VERSION) | ||||
| DEMO_NAME = MesaDemos-$(VERSION) | ||||
| GLUT_NAME = MesaGLUT-$(VERSION) | ||||
|  | ||||
| MAIN_FILES = \ | ||||
| 	$(DIRECTORY)/Makefile*						\ | ||||
| 	$(DIRECTORY)/configure						\ | ||||
| 	$(DIRECTORY)/configure.ac					\ | ||||
| 	$(DIRECTORY)/acinclude.m4					\ | ||||
| 	$(DIRECTORY)/aclocal.m4						\ | ||||
| 	$(DIRECTORY)/descrip.mms					\ | ||||
| 	$(DIRECTORY)/mms-config.					\ | ||||
| 	$(DIRECTORY)/bin/config.guess					\ | ||||
| 	$(DIRECTORY)/bin/config.sub					\ | ||||
| 	$(DIRECTORY)/bin/install-sh					\ | ||||
| 	$(DIRECTORY)/bin/mklib						\ | ||||
| 	$(DIRECTORY)/bin/minstall					\ | ||||
| 	$(DIRECTORY)/bin/version.mk					\ | ||||
| 	$(DIRECTORY)/configs/[a-z]*					\ | ||||
| 	$(DIRECTORY)/docs/*.html					\ | ||||
| 	$(DIRECTORY)/docs/COPYING					\ | ||||
| 	$(DIRECTORY)/docs/README.*					\ | ||||
| 	$(DIRECTORY)/docs/RELNOTES*					\ | ||||
| 	$(DIRECTORY)/docs/*.spec					\ | ||||
| 	$(DIRECTORY)/include/GL/internal/glcore.h			\ | ||||
| 	$(DIRECTORY)/include/GL/dmesa.h					\ | ||||
| 	$(DIRECTORY)/include/GL/ggimesa.h				\ | ||||
| 	$(DIRECTORY)/include/GL/gl.h					\ | ||||
| 	$(DIRECTORY)/include/GL/glext.h					\ | ||||
| 	$(DIRECTORY)/include/GL/gl_mangle.h				\ | ||||
| 	$(DIRECTORY)/include/GL/glu.h					\ | ||||
| 	$(DIRECTORY)/include/GL/glu_mangle.h				\ | ||||
| 	$(DIRECTORY)/include/GL/glx.h					\ | ||||
| 	$(DIRECTORY)/include/GL/glxext.h				\ | ||||
| 	$(DIRECTORY)/include/GL/glx_mangle.h				\ | ||||
| 	$(DIRECTORY)/include/GL/glfbdev.h				\ | ||||
| 	$(DIRECTORY)/include/GL/mesa_wgl.h				\ | ||||
| 	$(DIRECTORY)/include/GL/mglmesa.h				\ | ||||
| 	$(DIRECTORY)/include/GL/osmesa.h				\ | ||||
| 	$(DIRECTORY)/include/GL/svgamesa.h				\ | ||||
| 	$(DIRECTORY)/include/GL/vms_x_fix.h				\ | ||||
| 	$(DIRECTORY)/include/GL/wmesa.h					\ | ||||
| 	$(DIRECTORY)/src/Makefile					\ | ||||
| 	$(DIRECTORY)/src/descrip.mms					\ | ||||
| 	$(DIRECTORY)/src/mesa/Makefile*					\ | ||||
| 	$(DIRECTORY)/src/mesa/sources					\ | ||||
| 	$(DIRECTORY)/src/mesa/descrip.mms				\ | ||||
| 	$(DIRECTORY)/src/mesa/gl.pc.in					\ | ||||
| 	$(DIRECTORY)/src/mesa/osmesa.pc.in				\ | ||||
| 	$(DIRECTORY)/src/mesa/depend					\ | ||||
| 	$(DIRECTORY)/src/mesa/main/*.[chS]				\ | ||||
| 	$(DIRECTORY)/src/mesa/main/descrip.mms				\ | ||||
| 	$(DIRECTORY)/src/mesa/glapi/*.[chS]				\ | ||||
| 	$(DIRECTORY)/src/mesa/glapi/descrip.mms				\ | ||||
| 	$(DIRECTORY)/src/mesa/math/*.[ch]				\ | ||||
| 	$(DIRECTORY)/src/mesa/math/descrip.mms				\ | ||||
| 	$(DIRECTORY)/src/mesa/shader/*.[ch]				\ | ||||
| 	$(DIRECTORY)/src/mesa/shader/descrip.mms			\ | ||||
| 	$(DIRECTORY)/src/mesa/shader/grammar/*.[ch]			\ | ||||
| 	$(DIRECTORY)/src/mesa/shader/grammar/descrip.mms		\ | ||||
| 	$(DIRECTORY)/src/mesa/shader/slang/*.[ch]			\ | ||||
| 	$(DIRECTORY)/src/mesa/shader/slang/descrip.mms			\ | ||||
| 	$(DIRECTORY)/src/mesa/shader/slang/library/*.[ch]		\ | ||||
| 	$(DIRECTORY)/src/mesa/shader/slang/library/*.gc			\ | ||||
| 	$(DIRECTORY)/src/mesa/shader/slang/library/*.syn		\ | ||||
| 	$(DIRECTORY)/src/mesa/shader/slang/library/Makefile		\ | ||||
| 	$(DIRECTORY)/src/mesa/swrast/*.[ch]				\ | ||||
| 	$(DIRECTORY)/src/mesa/swrast/descrip.mms			\ | ||||
| 	$(DIRECTORY)/src/mesa/swrast_setup/*.[ch]			\ | ||||
| 	$(DIRECTORY)/src/mesa/swrast_setup/descrip.mms			\ | ||||
| 	$(DIRECTORY)/src/mesa/vbo/*.[chS]				\ | ||||
| 	$(DIRECTORY)/src/mesa/vbo/descrip.mms				\ | ||||
| 	$(DIRECTORY)/src/mesa/tnl/*.[chS]				\ | ||||
| 	$(DIRECTORY)/src/mesa/tnl/descrip.mms				\ | ||||
| 	$(DIRECTORY)/src/mesa/tnl_dd/*.[ch]				\ | ||||
| 	$(DIRECTORY)/src/mesa/tnl_dd/imm/*.[ch]				\ | ||||
| 	$(DIRECTORY)/src/mesa/tnl_dd/imm/NOTES.imm			\ | ||||
| 	$(DIRECTORY)/src/mesa/drivers/Makefile				\ | ||||
| 	$(DIRECTORY)/src/mesa/drivers/beos/*.cpp			\ | ||||
| 	$(DIRECTORY)/src/mesa/drivers/beos/Makefile			\ | ||||
| 	$(DIRECTORY)/src/mesa/drivers/common/*.[ch]			\ | ||||
| 	$(DIRECTORY)/src/mesa/drivers/common/descrip.mms		\ | ||||
| 	$(DIRECTORY)/src/mesa/drivers/directfb/*.[ch]			\ | ||||
| 	$(DIRECTORY)/src/mesa/drivers/directfb/Makefile			\ | ||||
| 	$(DIRECTORY)/src/mesa/drivers/dos/*.[chS]			\ | ||||
| 	$(DIRECTORY)/src/mesa/drivers/fbdev/Makefile			\ | ||||
| 	$(DIRECTORY)/src/mesa/drivers/fbdev/glfbdev.c			\ | ||||
| 	$(DIRECTORY)/src/mesa/drivers/glide/*.[ch]			\ | ||||
| 	$(DIRECTORY)/src/mesa/drivers/ggi/*.[ch]			\ | ||||
| 	$(DIRECTORY)/src/mesa/drivers/ggi/ggimesa.conf.in		\ | ||||
| 	$(DIRECTORY)/src/mesa/drivers/ggi/default/*.c			\ | ||||
| 	$(DIRECTORY)/src/mesa/drivers/ggi/default/genkgi.conf.in	\ | ||||
| 	$(DIRECTORY)/src/mesa/drivers/ggi/display/*.c			\ | ||||
| 	$(DIRECTORY)/src/mesa/drivers/ggi/display/fbdev.conf.in		\ | ||||
| 	$(DIRECTORY)/src/mesa/drivers/ggi/include/ggi/mesa/*.h		\ | ||||
| 	$(DIRECTORY)/src/mesa/drivers/osmesa/Makefile			\ | ||||
| 	$(DIRECTORY)/src/mesa/drivers/osmesa/Makefile.win		\ | ||||
| 	$(DIRECTORY)/src/mesa/drivers/osmesa/descrip.mms		\ | ||||
| 	$(DIRECTORY)/src/mesa/drivers/osmesa/osmesa.def			\ | ||||
| 	$(DIRECTORY)/src/mesa/drivers/osmesa/*.[ch]			\ | ||||
| 	$(DIRECTORY)/src/mesa/drivers/svga/*.[ch]			\ | ||||
| 	$(DIRECTORY)/src/mesa/drivers/windows/*/*.[ch]			\ | ||||
| 	$(DIRECTORY)/src/mesa/drivers/windows/*/*.def			\ | ||||
| 	$(DIRECTORY)/src/mesa/drivers/x11/Makefile			\ | ||||
| 	$(DIRECTORY)/src/mesa/drivers/x11/descrip.mms			\ | ||||
| 	$(DIRECTORY)/src/mesa/drivers/x11/*.[ch]			\ | ||||
| 	$(DIRECTORY)/src/mesa/drivers/glslcompiler/Makefile		\ | ||||
| 	$(DIRECTORY)/src/mesa/drivers/glslcompiler/glslcompiler.c	\ | ||||
| 	$(DIRECTORY)/src/mesa/ppc/*.[ch]				\ | ||||
| 	$(DIRECTORY)/src/mesa/sparc/*.[chS]				\ | ||||
| 	$(DIRECTORY)/src/mesa/x86/Makefile				\ | ||||
| 	$(DIRECTORY)/src/mesa/x86/*.[ch]				\ | ||||
| 	$(DIRECTORY)/src/mesa/x86/*.S					\ | ||||
| 	$(DIRECTORY)/src/mesa/x86/rtasm/*.[ch]				\ | ||||
| 	$(DIRECTORY)/src/mesa/x86-64/*.[chS]				\ | ||||
| 	$(DIRECTORY)/src/mesa/x86-64/Makefile				\ | ||||
| 	$(DIRECTORY)/progs/Makefile					\ | ||||
| 	$(DIRECTORY)/progs/util/README					\ | ||||
| 	$(DIRECTORY)/progs/util/*.[ch]					\ | ||||
| 	$(DIRECTORY)/progs/util/sampleMakefile				\ | ||||
| 	$(DIRECTORY)/vms/analyze_map.com				\ | ||||
| 	$(DIRECTORY)/vms/xlib.opt					\ | ||||
| 	$(DIRECTORY)/vms/xlib_share.opt					\ | ||||
| 	$(DIRECTORY)/windows/VC8/ | ||||
|  | ||||
|  | ||||
| DRI_FILES = \ | ||||
| 	$(DIRECTORY)/include/GL/internal/dri_interface.h		\ | ||||
| 	$(DIRECTORY)/include/GL/internal/glcore.h			\ | ||||
| 	$(DIRECTORY)/include/GL/internal/sarea.h			\ | ||||
| 	$(DIRECTORY)/src/glx/Makefile					\ | ||||
| 	$(DIRECTORY)/src/glx/x11/Makefile				\ | ||||
| 	$(DIRECTORY)/src/glx/x11/*.[ch]					\ | ||||
| 	$(DIRECTORY)/src/mesa/drivers/dri/Makefile			\ | ||||
| 	$(DIRECTORY)/src/mesa/drivers/dri/Makefile.template		\ | ||||
| 	$(DIRECTORY)/src/mesa/drivers/dri/dri.pc.in			\ | ||||
| 	$(DIRECTORY)/src/mesa/drivers/dri/common/xmlpool/*.[ch]		\ | ||||
| 	$(DIRECTORY)/src/mesa/drivers/dri/common/xmlpool/*.po		\ | ||||
| 	$(DIRECTORY)/src/mesa/drivers/dri/*/*.[chS]			\ | ||||
| 	$(DIRECTORY)/src/mesa/drivers/dri/*/Makefile			\ | ||||
| 	$(DIRECTORY)/src/mesa/drivers/dri/*/Doxyfile			\ | ||||
| 	$(DIRECTORY)/src/mesa/drivers/dri/*/server/*.[ch] | ||||
|  | ||||
| SGI_GLU_FILES = \ | ||||
| 	$(DIRECTORY)/src/glu/Makefile					\ | ||||
| 	$(DIRECTORY)/src/glu/descrip.mms				\ | ||||
| 	$(DIRECTORY)/src/glu/glu.pc.in					\ | ||||
| 	$(DIRECTORY)/src/glu/sgi/Makefile				\ | ||||
| 	$(DIRECTORY)/src/glu/sgi/Makefile.mgw				\ | ||||
| 	$(DIRECTORY)/src/glu/sgi/Makefile.win				\ | ||||
| 	$(DIRECTORY)/src/glu/sgi/Makefile.DJ				\ | ||||
| 	$(DIRECTORY)/src/glu/sgi/glu.def				\ | ||||
| 	$(DIRECTORY)/src/glu/sgi/dummy.cc				\ | ||||
| 	$(DIRECTORY)/src/glu/sgi/descrip.mms				\ | ||||
| 	$(DIRECTORY)/src/glu/sgi/glu.exports				\ | ||||
| 	$(DIRECTORY)/src/glu/sgi/glu.exports.darwin			\ | ||||
| 	$(DIRECTORY)/src/glu/sgi/mesaglu.opt				\ | ||||
| 	$(DIRECTORY)/src/glu/sgi/include/gluos.h			\ | ||||
| 	$(DIRECTORY)/src/glu/sgi/libnurbs/interface/*.h			\ | ||||
| 	$(DIRECTORY)/src/glu/sgi/libnurbs/interface/*.cc		\ | ||||
| 	$(DIRECTORY)/src/glu/sgi/libnurbs/internals/*.h			\ | ||||
| 	$(DIRECTORY)/src/glu/sgi/libnurbs/internals/*.cc		\ | ||||
| 	$(DIRECTORY)/src/glu/sgi/libnurbs/nurbtess/*.h			\ | ||||
| 	$(DIRECTORY)/src/glu/sgi/libnurbs/nurbtess/*.cc			\ | ||||
| 	$(DIRECTORY)/src/glu/sgi/libtess/README				\ | ||||
| 	$(DIRECTORY)/src/glu/sgi/libtess/alg-outline			\ | ||||
| 	$(DIRECTORY)/src/glu/sgi/libtess/*.[ch]				\ | ||||
| 	$(DIRECTORY)/src/glu/sgi/libutil/*.[ch] | ||||
|  | ||||
| MESA_GLU_FILES = \ | ||||
| 	$(DIRECTORY)/src/glu/mesa/README[12]		\ | ||||
| 	$(DIRECTORY)/src/glu/mesa/Makefile*		\ | ||||
| 	$(DIRECTORY)/src/glu/mesa/descrip.mms		\ | ||||
| 	$(DIRECTORY)/src/glu/mesa/mms_depend		\ | ||||
| 	$(DIRECTORY)/src/glu/mesa/*.def			\ | ||||
| 	$(DIRECTORY)/src/glu/mesa/depend		\ | ||||
| 	$(DIRECTORY)/src/glu/mesa/*.[ch] | ||||
|  | ||||
| GLW_FILES = \ | ||||
| 	$(DIRECTORY)/src/glw/*.[ch]			\ | ||||
| 	$(DIRECTORY)/src/glw/Makefile*			\ | ||||
| 	$(DIRECTORY)/src/glw/README			\ | ||||
| 	$(DIRECTORY)/src/glw/glw.pc.in			\ | ||||
| 	$(DIRECTORY)/src/glw/depend | ||||
|  | ||||
| DEMO_FILES = \ | ||||
| 	$(DIRECTORY)/progs/beos/*.cpp			\ | ||||
| 	$(DIRECTORY)/progs/beos/Makefile		\ | ||||
| 	$(DIRECTORY)/progs/images/*.rgb			\ | ||||
| 	$(DIRECTORY)/progs/images/*.rgba		\ | ||||
| 	$(DIRECTORY)/progs/demos/Makefile*		\ | ||||
| 	$(DIRECTORY)/progs/demos/descrip.mms		\ | ||||
| 	$(DIRECTORY)/progs/demos/*.[ch]			\ | ||||
| 	$(DIRECTORY)/progs/demos/*.cxx			\ | ||||
| 	$(DIRECTORY)/progs/demos/*.dat			\ | ||||
| 	$(DIRECTORY)/progs/demos/README			\ | ||||
| 	$(DIRECTORY)/progs/fbdev/Makefile		\ | ||||
| 	$(DIRECTORY)/progs/fbdev/glfbdevtest.c		\ | ||||
| 	$(DIRECTORY)/progs/osdemos/Makefile		\ | ||||
| 	$(DIRECTORY)/progs/osdemos/*.c			\ | ||||
| 	$(DIRECTORY)/progs/xdemos/Makefile*		\ | ||||
| 	$(DIRECTORY)/progs/xdemos/descrip.mms		\ | ||||
| 	$(DIRECTORY)/progs/xdemos/*.[chf]		\ | ||||
| 	$(DIRECTORY)/progs/redbook/Makefile*		\ | ||||
| 	$(DIRECTORY)/progs/redbook/README		\ | ||||
| 	$(DIRECTORY)/progs/redbook/*.[ch]		\ | ||||
| 	$(DIRECTORY)/progs/samples/Makefile*		\ | ||||
| 	$(DIRECTORY)/progs/samples/README		\ | ||||
| 	$(DIRECTORY)/progs/samples/*.c			\ | ||||
| 	$(DIRECTORY)/progs/glsl/Makefile*		\ | ||||
| 	$(DIRECTORY)/progs/glsl/*.c			\ | ||||
| 	$(DIRECTORY)/progs/glsl/*.frag			\ | ||||
| 	$(DIRECTORY)/progs/glsl/*.vert			\ | ||||
| 	$(DIRECTORY)/progs/windml/Makefile.ugl		\ | ||||
| 	$(DIRECTORY)/progs/windml/*.c			\ | ||||
| 	$(DIRECTORY)/progs/windml/*.bmp			\ | ||||
| 	$(DIRECTORY)/progs/ggi/*.c			\ | ||||
| 	$(DIRECTORY)/windows/VC6/progs/demos/*.dsp	\ | ||||
| 	$(DIRECTORY)/windows/VC6/progs/progs.dsw	\ | ||||
| 	$(DIRECTORY)/windows/VC7/progs/demos/*.vcproj	\ | ||||
| 	$(DIRECTORY)/windows/VC7/progs/progs.sln | ||||
|  | ||||
| GLUT_FILES = \ | ||||
| 	$(DIRECTORY)/include/GL/glut.h			\ | ||||
| 	$(DIRECTORY)/include/GL/glutf90.h		\ | ||||
| 	$(DIRECTORY)/src/glut/glx/Makefile*		\ | ||||
| 	$(DIRECTORY)/src/glut/glx/depend		\ | ||||
| 	$(DIRECTORY)/src/glut/glx/glut.pc.in		\ | ||||
| 	$(DIRECTORY)/src/glut/glx/*def			\ | ||||
| 	$(DIRECTORY)/src/glut/glx/descrip.mms		\ | ||||
| 	$(DIRECTORY)/src/glut/glx/mms_depend		\ | ||||
| 	$(DIRECTORY)/src/glut/glx/*.[ch]		\ | ||||
| 	$(DIRECTORY)/src/glut/beos/*.[ch]		\ | ||||
| 	$(DIRECTORY)/src/glut/beos/*.cpp		\ | ||||
| 	$(DIRECTORY)/src/glut/beos/Makefile		\ | ||||
| 	$(DIRECTORY)/src/glut/dos/*.[ch]		\ | ||||
| 	$(DIRECTORY)/src/glut/dos/Makefile.DJ		\ | ||||
| 	$(DIRECTORY)/src/glut/dos/PC_HW/*.[chS]		\ | ||||
| 	$(DIRECTORY)/src/glut/ggi/*.[ch]		\ | ||||
| 	$(DIRECTORY)/src/glut/ggi/Makefile		\ | ||||
| 	$(DIRECTORY)/src/glut/fbdev/Makefile		\ | ||||
| 	$(DIRECTORY)/src/glut/fbdev/*[ch]		\ | ||||
| 	$(DIRECTORY)/src/glut/mini/*[ch]		\ | ||||
| 	$(DIRECTORY)/src/glut/mini/glut.pc.in		\ | ||||
| 	$(DIRECTORY)/src/glut/directfb/Makefile		\ | ||||
| 	$(DIRECTORY)/src/glut/directfb/NOTES		\ | ||||
| 	$(DIRECTORY)/src/glut/directfb/*[ch]		\ | ||||
| 	$(DIRECTORY)/windows/VC6/progs/glut/glut.dsp	\ | ||||
| 	$(DIRECTORY)/windows/VC7/progs/glut/glut.vcproj | ||||
|  | ||||
| DEPEND_FILES = \ | ||||
| 	$(TOP)/src/mesa/depend		\ | ||||
| 	$(TOP)/src/glx/x11/depend	\ | ||||
| 	$(TOP)/src/glw/depend		\ | ||||
| 	$(TOP)/src/glut/glx/depend	\ | ||||
| 	$(TOP)/src/glu/sgi/depend | ||||
|  | ||||
|  | ||||
| LIB_FILES = $(MAIN_FILES) $(DRI_FILES) $(SGI_GLU_FILES) $(GLW_FILES) | ||||
|  | ||||
|  | ||||
| # Everything for new a Mesa release: | ||||
| tarballs: rm_depend configure aclocal.m4 lib_gz demo_gz glut_gz \ | ||||
| 	lib_bz2 demo_bz2 glut_bz2 lib_zip demo_zip glut_zip md5 | ||||
|  | ||||
|  | ||||
| # Helper for autoconf builds | ||||
| ACLOCAL = aclocal | ||||
| ACLOCAL_FLAGS = | ||||
| AUTOCONF = autoconf | ||||
| AC_FLAGS = | ||||
| aclocal.m4: configure.ac acinclude.m4 | ||||
| 	$(ACLOCAL) $(ACLOCAL_FLAGS) | ||||
| configure: configure.ac aclocal.m4 acinclude.m4 | ||||
| 	$(AUTOCONF) $(AC_FLAGS) | ||||
|  | ||||
| rm_depend: | ||||
| 	@for dep in $(DEPEND_FILES) ; do \ | ||||
| 		rm -f $$dep ; \ | ||||
| 		touch $$dep ; \ | ||||
| 	done | ||||
|  | ||||
| lib_gz: | ||||
| 	rm -f configs/current ; \ | ||||
| 	rm -f configs/autoconf ; \ | ||||
| 	cd .. ; \ | ||||
| 	tar -cf $(LIB_NAME).tar $(LIB_FILES) ; \ | ||||
| 	gzip $(LIB_NAME).tar ; \ | ||||
| 	mv $(LIB_NAME).tar.gz $(DIRECTORY) | ||||
|  | ||||
| demo_gz: | ||||
| 	cd .. ; \ | ||||
| 	tar -cf $(DEMO_NAME).tar $(DEMO_FILES) ; \ | ||||
| 	gzip $(DEMO_NAME).tar ; \ | ||||
| 	mv $(DEMO_NAME).tar.gz $(DIRECTORY) | ||||
|  | ||||
| glut_gz: | ||||
| 	cd .. ; \ | ||||
| 	tar -cf $(GLUT_NAME).tar $(GLUT_FILES) ; \ | ||||
| 	gzip $(GLUT_NAME).tar ; \ | ||||
| 	mv $(GLUT_NAME).tar.gz $(DIRECTORY) | ||||
|  | ||||
| lib_bz2: | ||||
| 	rm -f configs/current ; \ | ||||
| 	rm -f configs/autoconf ; \ | ||||
| 	cd .. ; \ | ||||
| 	tar -cf $(LIB_NAME).tar $(LIB_FILES) ; \ | ||||
| 	bzip2 $(LIB_NAME).tar ; \ | ||||
| 	mv $(LIB_NAME).tar.bz2 $(DIRECTORY) | ||||
|  | ||||
| demo_bz2: | ||||
| 	cd .. ; \ | ||||
| 	tar -cf $(DEMO_NAME).tar $(DEMO_FILES) ; \ | ||||
| 	bzip2 $(DEMO_NAME).tar ; \ | ||||
| 	mv $(DEMO_NAME).tar.bz2 $(DIRECTORY) | ||||
|  | ||||
| glut_bz2: | ||||
| 	cd .. ; \ | ||||
| 	tar -cf $(GLUT_NAME).tar $(GLUT_FILES) ; \ | ||||
| 	bzip2 $(GLUT_NAME).tar ; \ | ||||
| 	mv $(GLUT_NAME).tar.bz2 $(DIRECTORY) | ||||
|  | ||||
| lib_zip: | ||||
| 	rm -f configs/current ; \ | ||||
| 	rm -f configs/autoconf ; \ | ||||
| 	rm -f $(LIB_NAME).zip ; \ | ||||
| 	cd .. ; \ | ||||
| 	zip -qr $(LIB_NAME).zip $(LIB_FILES) ; \ | ||||
| 	mv $(LIB_NAME).zip $(DIRECTORY) | ||||
|  | ||||
| demo_zip: | ||||
| 	rm -f $(DEMO_NAME).zip ; \ | ||||
| 	cd .. ; \ | ||||
| 	zip -qr $(DEMO_NAME).zip $(DEMO_FILES) ; \ | ||||
| 	mv $(DEMO_NAME).zip $(DIRECTORY) | ||||
|  | ||||
| glut_zip: | ||||
| 	rm -f $(GLUT_NAME).zip ; \ | ||||
| 	cd .. ; \ | ||||
| 	zip -qr $(GLUT_NAME).zip $(GLUT_FILES) ; \ | ||||
| 	mv $(GLUT_NAME).zip $(DIRECTORY) | ||||
|  | ||||
| md5: | ||||
| 	@-md5sum $(LIB_NAME).tar.gz | ||||
| 	@-md5sum $(LIB_NAME).tar.bz2 | ||||
| 	@-md5sum $(LIB_NAME).zip | ||||
| 	@-md5sum $(DEMO_NAME).tar.gz | ||||
| 	@-md5sum $(DEMO_NAME).tar.bz2 | ||||
| 	@-md5sum $(DEMO_NAME).zip | ||||
| 	@-md5sum $(GLUT_NAME).tar.gz | ||||
| 	@-md5sum $(GLUT_NAME).tar.bz2 | ||||
| 	@-md5sum $(GLUT_NAME).zip | ||||
|  | ||||
| .PHONY: tarballs rm_depend lib_gz demo_gz glut_gz lib_bz2 demo_bz2 \ | ||||
| 	glut_bz2 lib_zip demo_zip glut_zip md5 | ||||
							
								
								
									
										88
									
								
								Makefile.DJ
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										88
									
								
								Makefile.DJ
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,88 @@ | ||||
| # Mesa 3-D graphics library | ||||
| # Version:  4.0 | ||||
| #  | ||||
| # Copyright (C) 1999  Brian Paul   All Rights Reserved. | ||||
| #  | ||||
| # 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 | ||||
| # BRIAN PAUL 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. | ||||
|  | ||||
| # DOS/DJGPP makefile for Mesa | ||||
| # | ||||
| #  Author: Daniel Borca | ||||
| #  Email : dborca@users.sourceforge.net | ||||
| #  Web   : http://www.geocities.com/dborca | ||||
|  | ||||
|  | ||||
| # | ||||
| #  Available options: | ||||
| # | ||||
| #    Environment variables: | ||||
| #	GLIDE		path to Glide3 SDK; used with FX. | ||||
| #			default = $(TOP)/glide3 | ||||
| #	FX=1		build for 3dfx Glide3. Note that this disables | ||||
| #			compilation of most DMesa code and requires fxMesa. | ||||
| #			As a consequence, you'll need the DJGPP Glide3 | ||||
| #			library to build any application. | ||||
| #			default = no | ||||
| #	X86=1		optimize for x86 (if possible, use MMX, SSE, 3DNow). | ||||
| #			default = no | ||||
| # | ||||
| #    Targets: | ||||
| #	all:		build everything | ||||
| #	libgl:		build GL | ||||
| #	libglu:		build GLU | ||||
| #	libglut:	build GLUT | ||||
| #	clean:		remove object files | ||||
| #	realclean:	remove all generated files | ||||
| # | ||||
|  | ||||
|  | ||||
|  | ||||
| .PHONY : all libgl libglu libglut clean realclean | ||||
|  | ||||
| CFLAGS = -Wall -W -pedantic | ||||
| CFLAGS += -O2 -ffast-math | ||||
|  | ||||
| export CFLAGS | ||||
|  | ||||
| ifeq ($(wildcard $(addsuffix /rm.exe,$(subst ;, ,$(PATH)))),) | ||||
| UNLINK = del $(subst /,\,$(1)) | ||||
| else | ||||
| UNLINK = $(RM) $(1) | ||||
| endif | ||||
|  | ||||
| all: libgl libglu libglut | ||||
|  | ||||
| libgl: lib | ||||
| 	$(MAKE) -f Makefile.DJ -C src/mesa | ||||
| libglu: lib | ||||
| 	$(MAKE) -f Makefile.DJ -C src/glu/sgi | ||||
| libglut: lib | ||||
| 	$(MAKE) -f Makefile.DJ -C src/glut/dos | ||||
|  | ||||
| lib: | ||||
| 	mkdir lib | ||||
|  | ||||
| clean: | ||||
| 	$(MAKE) -f Makefile.DJ clean -C src/mesa | ||||
| 	$(MAKE) -f Makefile.DJ clean -C src/glu/mesa | ||||
| 	$(MAKE) -f Makefile.DJ clean -C src/glu/sgi | ||||
| 	$(MAKE) -f Makefile.DJ clean -C src/glut/dos | ||||
|  | ||||
| realclean: clean | ||||
| 	-$(call UNLINK,lib/*.a) | ||||
| 	-$(call UNLINK,lib/*.dxe) | ||||
							
								
								
									
										110
									
								
								Makefile.mgw
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										110
									
								
								Makefile.mgw
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,110 @@ | ||||
| # Mesa 3-D graphics library | ||||
| # Version:  4.0 | ||||
| #  | ||||
| # Copyright (C) 1999  Brian Paul   All Rights Reserved. | ||||
| #  | ||||
| # 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 | ||||
| # BRIAN PAUL 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. | ||||
|  | ||||
| # MinGW makefile v1.2 for Mesa | ||||
| # | ||||
| #  Copyright (C) 2002 - Daniel Borca | ||||
| #  Email : dborca@users.sourceforge.net | ||||
| #  Web   : http://www.geocities.com/dborca | ||||
|  | ||||
|  | ||||
| # | ||||
| #  Available options: | ||||
| # | ||||
| #    Environment variables: | ||||
| #	GLIDE		path to Glide3 SDK; used with FX. | ||||
| #			default = $(TOP)/glide3 | ||||
| #	FX=1		build for 3dfx Glide3. Note that this disables | ||||
| #			compilation of most WMesa code and requires fxMesa. | ||||
| #			As a consequence, you'll need the Win32 Glide3 | ||||
| #			library to build any application. | ||||
| #			default = no | ||||
| #	ICD=1		build the installable client driver interface | ||||
| #			(windows opengl driver interface) | ||||
| #			default = no | ||||
| #	X86=1		optimize for x86 (if possible, use MMX, SSE, 3DNow). | ||||
| #			default = no | ||||
| # | ||||
| #    Targets: | ||||
| #	all:		build everything | ||||
| #	libgl:		build GL | ||||
| #	clean:		remove object files | ||||
| #	realclean:	remove all generated files | ||||
| # | ||||
|  | ||||
| # MinGW core makefile updated for Mesa 7.0 | ||||
| # | ||||
| #  Updated : by Heromyth, on 2007-7-21 | ||||
| #  Email   : zxpmyth@yahoo.com.cn | ||||
| #  Bugs    : 1) All the default settings work fine. But the setting X86=1 can't work.  | ||||
| #            The others havn't been tested yet. | ||||
| #            2) The generated DLLs are *not* compatible with the ones built | ||||
| #            with the other compilers like VC8, especially for GLUT.  | ||||
| #            3) MAlthough more tests are needed, it can be used individually! | ||||
|  | ||||
|  | ||||
| .PHONY : all libgl clean realclean | ||||
|  | ||||
| ifeq ($(ICD),1) | ||||
|   # when -std=c99 mingw will not define WIN32 | ||||
|   CFLAGS = -Wall -Werror | ||||
| else | ||||
|   # I love c89 | ||||
|   CFLAGS = -Wall -pedantic | ||||
| endif | ||||
| CFLAGS += -O2 -ffast-math | ||||
|  | ||||
| export CFLAGS | ||||
|  | ||||
|  | ||||
| ifeq ($(wildcard $(addsuffix /rm.exe,$(subst ;, ,$(PATH)))),) | ||||
| UNLINK = del $(subst /,\,$(1)) | ||||
| else | ||||
| UNLINK = $(RM) $(1) | ||||
| endif | ||||
|  | ||||
| all: libgl libglu libglut example | ||||
|  | ||||
| libgl: lib | ||||
| 	$(MAKE) -f Makefile.mgw -C src/mesa | ||||
|  | ||||
| libglu: libgl | ||||
| 	$(MAKE) -f Makefile.mgw -C src/glu/sgi | ||||
|  | ||||
| libglut: libglu  | ||||
| 	$(MAKE) -f Makefile.mgw -C src/glut/glx | ||||
|  | ||||
| example: libglut  | ||||
| 	$(MAKE) -f Makefile.mgw star -C progs/samples | ||||
| 	copy progs\samples\star.exe lib | ||||
|  | ||||
| lib: | ||||
| 	mkdir lib | ||||
|  | ||||
| clean: | ||||
| 	$(MAKE) -f Makefile.mgw clean -C src/mesa | ||||
| 	$(MAKE) -f Makefile.mgw clean -C src/glu/sgi | ||||
| 	$(MAKE) -f Makefile.mgw clean -C src/glut/glx | ||||
|  | ||||
| realclean: clean | ||||
| 	-$(call UNLINK,lib/*.a) | ||||
| 	-$(call UNLINK,lib/*.dll) | ||||
							
								
								
									
										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. | ||||
							
								
								
									
										120
									
								
								REVIEWERS
									
									
									
									
									
								
							
							
						
						
									
										120
									
								
								REVIEWERS
									
									
									
									
									
								
							| @@ -1,120 +0,0 @@ | ||||
| Overview: | ||||
|  | ||||
| 	This file is similar in syntax (or more precisly a subset) of what is | ||||
| 	used by the MAINTAINERS file in the linux kernel. | ||||
| 	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. | ||||
|  | ||||
| Descriptions of section entries: | ||||
|  | ||||
| 	R: Designated reviewer: FullName <address@domain> | ||||
| 	   These reviewers should be CCed on patches. | ||||
| 	F: Files and directories with wildcard patterns. | ||||
| 	   A trailing slash includes all files and subdirectory files. | ||||
| 	   F:	drivers/net/	all files in and below drivers/net | ||||
| 	   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. | ||||
|  | ||||
| Maintainers List (try to look for most precise areas first) | ||||
|  | ||||
| Note: this is an opt-in system, I have not tried to add anyone who hasn't | ||||
| either asked me or sent a patch to add themselves. | ||||
|  | ||||
| 		----------------------------------- | ||||
|  | ||||
| NIR | ||||
| R:	Jason Ekstrand <jason@jlekstrand.net> | ||||
| F:	src/compiler/nir/ | ||||
|  | ||||
| DOCUMENTATION | ||||
| R: Emil Velikov <emil.l.velikov@gmail.com> | ||||
| R: Eric Engestrom <eric@engestrom.ch> | ||||
| F: docs/ | ||||
| F: doxygen/ | ||||
|  | ||||
| COMPATIBILITY HEADERS | ||||
| R: Emil Velikov <emil.l.velikov@gmail.com> | ||||
| F: include/c99* | ||||
|  | ||||
| DRI LOADER | ||||
| R: Emil Velikov <emil.l.velikov@gmail.com> | ||||
| 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> | ||||
| F: src/gallium/auxiliary/pipe-loader/ | ||||
| F: src/gallium/auxiliary/target-helpers/ | ||||
|  | ||||
| GALLIUM TARGETS | ||||
| R: Emil Velikov <emil.l.velikov@gmail.com> | ||||
| F: src/gallium/targets/ | ||||
|  | ||||
| SCONS BUILD | ||||
| F: scons/ | ||||
| F: */SConscript* | ||||
| F: */Makefile.sources | ||||
|  | ||||
| ANDROID BUILD | ||||
| R: Emil Velikov <emil.l.velikov@gmail.com> | ||||
| R: Rob Herring <robh@kernel.org> | ||||
| F: CleanSpec.mk | ||||
| F: */Android.*mk | ||||
| F: */Makefile.sources | ||||
|  | ||||
| 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 | ||||
| R: Rob Herring <robh@kernel.org> | ||||
| R: Tomasz Figa <tfiga@chromium.org> | ||||
| F: src/egl/drivers/dri2/platform_android.c | ||||
|  | ||||
| WAYLAND EGL SUPPORT | ||||
| R: Daniel Stone <daniels@collabora.com> | ||||
| F: src/egl/wayland/* | ||||
| F: src/egl/drivers/dri2/platform_wayland.c | ||||
|  | ||||
| FREEDRENO | ||||
| R:	Rob Clark <robclark@freedesktop.org> | ||||
| 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/ | ||||
							
								
								
									
										187
									
								
								SConstruct
									
									
									
									
									
								
							
							
						
						
									
										187
									
								
								SConstruct
									
									
									
									
									
								
							| @@ -1,187 +0,0 @@ | ||||
| ####################################################################### | ||||
| # Top-level SConstruct | ||||
| # | ||||
| # For example, invoke scons as | ||||
| # | ||||
| #   scons build=debug llvm=yes machine=x86 | ||||
| # | ||||
| # to set configuration variables. Or you can write those options to a file | ||||
| # named config.py: | ||||
| # | ||||
| #   # config.py | ||||
| #   build='debug' | ||||
| #   llvm=True | ||||
| #   machine='x86' | ||||
| # | ||||
| # Invoke | ||||
| # | ||||
| #   scons -h | ||||
| # | ||||
| # 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 | ||||
| import SCons.Util | ||||
|  | ||||
| import common | ||||
|  | ||||
| ####################################################################### | ||||
| # Minimal scons version | ||||
|  | ||||
| EnsureSConsVersion(2, 4) | ||||
| EnsurePythonVersion(2, 7) | ||||
|  | ||||
|  | ||||
| ####################################################################### | ||||
| # Configuration options | ||||
|  | ||||
| opts = Variables('config.py') | ||||
| common.AddOptions(opts) | ||||
|  | ||||
| env = Environment( | ||||
| 	options = opts, | ||||
| 	tools = ['gallium'], | ||||
| 	toolpath = ['#scons'], | ||||
| 	ENV = os.environ, | ||||
| ) | ||||
|  | ||||
| # XXX: This creates a many problems as it saves... | ||||
| #opts.Save('config.py', env) | ||||
|  | ||||
| # Backwards compatability with old target configuration variable | ||||
| try: | ||||
|     targets = ARGUMENTS['targets'] | ||||
| except KeyError: | ||||
|     pass | ||||
| else: | ||||
|     targets = targets.split(',') | ||||
|     print('scons: warning: targets option is deprecated; pass the targets on their own such as') | ||||
|     print() | ||||
|     print('  scons %s' % ' '.join(targets)) | ||||
|     print() | ||||
|     COMMAND_LINE_TARGETS.append(targets) | ||||
|  | ||||
|  | ||||
| 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 | ||||
|  | ||||
| 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\\"'), | ||||
| ]) | ||||
|  | ||||
| # Includes | ||||
| env.Prepend(CPPPATH = [ | ||||
| 	'#/include', | ||||
| ]) | ||||
| env.Append(CPPPATH = [ | ||||
| 	'#/src/gallium/include', | ||||
| 	'#/src/gallium/auxiliary', | ||||
| 	'#/src/gallium/drivers', | ||||
| 	'#/src/gallium/winsys', | ||||
| ]) | ||||
|  | ||||
| # for debugging | ||||
| #print env.Dump() | ||||
|  | ||||
|  | ||||
| # Add a check target for running tests | ||||
| check = env.Alias('check') | ||||
| env.AlwaysBuild(check) | ||||
|  | ||||
|  | ||||
| ####################################################################### | ||||
| # Invoke host SConscripts | ||||
| # | ||||
| # For things that are meant to be run on the native host build machine, instead | ||||
| # of the target machine. | ||||
| # | ||||
|  | ||||
| # Create host environent | ||||
| if env['crosscompile'] and not env['embedded']: | ||||
|     host_env = Environment( | ||||
|         options = opts, | ||||
|         # no tool used | ||||
|         tools = [], | ||||
|         toolpath = ['#scons'], | ||||
|         ENV = os.environ, | ||||
|     ) | ||||
|  | ||||
|     # Override options | ||||
|     host_env['platform'] = common.host_platform | ||||
|     host_env['machine'] = common.host_machine | ||||
|     host_env['toolchain'] = 'default' | ||||
|     host_env['llvm'] = False | ||||
|  | ||||
|     host_env.Tool('gallium') | ||||
|  | ||||
|     host_env['hostonly'] = True | ||||
|     assert host_env['crosscompile'] == False | ||||
|  | ||||
|     target_env = env | ||||
|     env = host_env | ||||
|     Export('env') | ||||
|  | ||||
|     SConscript( | ||||
|         'src/SConscript', | ||||
|         variant_dir = host_env['build_dir'], | ||||
|         duplicate = 0, # http://www.scons.org/doc/0.97/HTML/scons-user/x2261.html | ||||
|     ) | ||||
|  | ||||
|     env = target_env | ||||
|  | ||||
| Export('env') | ||||
|  | ||||
| ####################################################################### | ||||
| # Invoke SConscripts | ||||
|  | ||||
| # TODO: Build several variants at the same time? | ||||
| # http://www.scons.org/wiki/SimultaneousVariantBuilds | ||||
|  | ||||
| SConscript( | ||||
| 	'src/SConscript', | ||||
| 	variant_dir = env['build_dir'], | ||||
| 	duplicate = 0 # http://www.scons.org/doc/0.97/HTML/scons-user/x2261.html | ||||
| ) | ||||
|  | ||||
|  | ||||
| ######################################################################## | ||||
| # List all aliases | ||||
|  | ||||
| try: | ||||
|     from SCons.Node.Alias import default_ans | ||||
| except ImportError: | ||||
|     pass | ||||
| else: | ||||
|     aliases = sorted(default_ans.keys()) | ||||
|     env.Help('\n') | ||||
|     env.Help('Recognized targets:\n') | ||||
|     for alias in aliases: | ||||
|         env.Help('    %s\n' % alias) | ||||
							
								
								
									
										119
									
								
								acinclude.m4
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										119
									
								
								acinclude.m4
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,119 @@ | ||||
| # A few convenience macros for Mesa, mostly to keep all the platform | ||||
| # specifics out of configure.ac. | ||||
|  | ||||
| # MESA_PIC_FLAGS() | ||||
| # | ||||
| # Find out whether to build PIC code using the option --enable-pic and | ||||
| # the configure enable_static/enable_shared settings. If PIC is needed, | ||||
| # figure out the necessary flags for the platform and compiler. | ||||
| # | ||||
| # The platform checks have been shamelessly taken from libtool and | ||||
| # stripped down to just what's needed for Mesa. See _LT_COMPILER_PIC in | ||||
| # /usr/share/aclocal/libtool.m4 or | ||||
| # http://git.savannah.gnu.org/gitweb/?p=libtool.git;a=blob;f=libltdl/m4/libtool.m4;hb=HEAD | ||||
| # | ||||
| AC_DEFUN([MESA_PIC_FLAGS], | ||||
| [AC_REQUIRE([AC_PROG_CC])dnl | ||||
| AC_ARG_VAR([PIC_FLAGS], [compiler flags for PIC code]) | ||||
| AC_ARG_ENABLE([pic], | ||||
|     [AS_HELP_STRING([--disable-pic], | ||||
|         [compile PIC objects @<:@default=enabled for shared builds | ||||
|         on supported platforms@:>@])], | ||||
|     [enable_pic="$enableval" | ||||
|     test "x$enable_pic" = x && enable_pic=auto], | ||||
|     [enable_pic=auto]) | ||||
| # disable PIC by default for static builds | ||||
| if test "$enable_pic" = auto && test "$enable_static" = yes; then | ||||
|     enable_pic=no | ||||
| fi | ||||
| # if PIC hasn't been explicitly disabled, try to figure out the flags | ||||
| if test "$enable_pic" != no; then | ||||
|     AC_MSG_CHECKING([for $CC option to produce PIC]) | ||||
|     # allow the user's flags to override | ||||
|     if test "x$PIC_FLAGS" = x; then | ||||
|         # see if we're using GCC | ||||
|         if test "x$GCC" = xyes; then | ||||
|             case "$host_os" in | ||||
|             aix*|beos*|cygwin*|irix5*|irix6*|osf3*|osf4*|osf5*) | ||||
|                 # PIC is the default for these OSes. | ||||
|                 ;; | ||||
|             mingw*|os2*|pw32*) | ||||
|                 # This hack is so that the source file can tell whether | ||||
|                 # it is being built for inclusion in a dll (and should | ||||
|                 # export symbols for example). | ||||
|                 PIC_FLAGS="-DDLL_EXPORT" | ||||
|                 ;; | ||||
|             darwin*|rhapsody*) | ||||
|                 # PIC is the default on this platform | ||||
|                 # Common symbols not allowed in MH_DYLIB files | ||||
|                 PIC_FLAGS="-fno-common" | ||||
|                 ;; | ||||
|             hpux*) | ||||
|                 # PIC is the default for IA64 HP-UX and 64-bit HP-UX, | ||||
|                 # but not for PA HP-UX. | ||||
|                 case $host_cpu in | ||||
|                 hppa*64*|ia64*) | ||||
|                     ;; | ||||
|                 *) | ||||
|                     PIC_FLAGS="-fPIC" | ||||
|                     ;; | ||||
|                 esac | ||||
|                 ;; | ||||
|             *) | ||||
|                 # Everyone else on GCC uses -fPIC | ||||
|                 PIC_FLAGS="-fPIC" | ||||
|                 ;; | ||||
|             esac | ||||
|         else # !GCC | ||||
|             case "$host_os" in | ||||
|             hpux9*|hpux10*|hpux11*) | ||||
|                 # PIC is the default for IA64 HP-UX and 64-bit HP-UX, | ||||
|                 # but not for PA HP-UX. | ||||
|                 case "$host_cpu" in | ||||
|                 hppa*64*|ia64*) | ||||
|                     # +Z the default | ||||
|                     ;; | ||||
|                 *) | ||||
|                     PIC_FLAGS="+Z" | ||||
|                     ;; | ||||
|                 esac | ||||
|                 ;; | ||||
|             linux*|k*bsd*-gnu) | ||||
|                 case `basename "$CC"` in | ||||
|                 icc*|ecc*|ifort*) | ||||
|                     PIC_FLAGS="-KPIC" | ||||
|                     ;; | ||||
|                 pgcc*|pgf77*|pgf90*|pgf95*) | ||||
|                     # Portland Group compilers (*not* the Pentium gcc | ||||
|                     # compiler, which looks to be a dead project) | ||||
|                     PIC_FLAGS="-fpic" | ||||
|                     ;; | ||||
|                 ccc*) | ||||
|                     # All Alpha code is PIC. | ||||
|                     ;; | ||||
|                 xl*) | ||||
|                     # IBM XL C 8.0/Fortran 10.1 on PPC | ||||
|                     PIC_FLAGS="-qpic" | ||||
|                     ;; | ||||
|                 *) | ||||
|                     case `$CC -V 2>&1 | sed 5q` in | ||||
|                     *Sun\ C*|*Sun\ F*) | ||||
|                         # Sun C 5.9 or Sun Fortran | ||||
|                         PIC_FLAGS="-KPIC" | ||||
|                         ;; | ||||
|                     esac | ||||
|                 esac | ||||
|                 ;; | ||||
|             solaris*) | ||||
|                 PIC_FLAGS="-KPIC" | ||||
|                 ;; | ||||
|             sunos4*) | ||||
|                 PIC_FLAGS="-PIC" | ||||
|                 ;; | ||||
|             esac | ||||
|         fi # GCC | ||||
|     fi # PIC_FLAGS | ||||
|     AC_MSG_RESULT([$PIC_FLAGS]) | ||||
| fi | ||||
| AC_SUBST([PIC_FLAGS]) | ||||
| ])# MESA_PIC_FLAGS | ||||
							
								
								
									
										73
									
								
								appveyor.yml
									
									
									
									
									
								
							
							
						
						
									
										73
									
								
								appveyor.yml
									
									
									
									
									
								
							| @@ -1,73 +0,0 @@ | ||||
| # http://www.appveyor.com/docs/appveyor-yml | ||||
| # | ||||
| # To setup AppVeyor for your own personal repositories do the following: | ||||
| # - Sign up | ||||
| # - Add a new project | ||||
| # - Select Git and fill in the Git clone URL | ||||
| # - Setup a Git hook as explained in | ||||
| #   https://github.com/appveyor/webhooks#installing-git-hook | ||||
| # - Check 'Settings > General > Skip branches without appveyor.yml' | ||||
| # - Check 'Settings > General > Rolling builds' | ||||
| # - Setup the global or project notifications to your liking | ||||
| # | ||||
| # Note that kicking (or restarting) a build via the web UI will not work, as it | ||||
| # will fail to find appveyor.yml .  The Git hook is the most practical way to | ||||
| # kick a build. | ||||
| # | ||||
| # See also: | ||||
| # - http://help.appveyor.com/discussions/problems/2209-node-grunt-build-specify-a-project-or-solution-file-the-directory-does-not-contain-a-project-or-solution-file | ||||
| # - http://help.appveyor.com/discussions/questions/1184-build-config-vs-appveyoryaml | ||||
|  | ||||
| version: '{build}' | ||||
|  | ||||
| branches: | ||||
|   except: | ||||
|   - /^travis.*$/ | ||||
|  | ||||
| # Don't download the full Mesa history to speed up cloning.  However the clone | ||||
| # depth must not be too small, otherwise builds might fail when lots of patches | ||||
| # are committed in succession, because the desired commit is not found on the | ||||
| # truncated history. | ||||
| # | ||||
| # See also: | ||||
| # - 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 | ||||
|  | ||||
| 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 | ||||
|  | ||||
| environment: | ||||
|   WINFLEXBISON_VERSION: 2.5.15 | ||||
|   LLVM_ARCHIVE: llvm-5.0.1-msvc2017-mtd.7z | ||||
|   matrix: | ||||
|   - compiler: msvc | ||||
|     buildsystem: scons | ||||
|   - compiler: msvc | ||||
|     buildsystem: meson | ||||
|     path: C:\Python38-x64;C:\Python38-x64\Scripts;%path% | ||||
|  | ||||
| install: | ||||
| - cmd: .appveyor\appveyor_msvc.bat install | ||||
|  | ||||
| build_script: | ||||
| - cmd: .appveyor\appveyor_msvc.bat build_script | ||||
|  | ||||
| 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 | ||||
| # doing so would cause the notification settings to be replicated across all | ||||
| # repos, which is most likely undesired.  So it's better to rely on the | ||||
| # Appveyor global/project notification settings. | ||||
							
								
								
									
										16
									
								
								autogen.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										16
									
								
								autogen.sh
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,16 @@ | ||||
| #! /bin/sh | ||||
|  | ||||
| srcdir=`dirname "$0"` | ||||
| test -z "$srcdir" && srcdir=. | ||||
|  | ||||
| SRCDIR=`(cd "$srcdir" && pwd)` | ||||
| ORIGDIR=`pwd` | ||||
|  | ||||
| if test "x$SRCDIR" != "x$ORIGDIR"; then | ||||
| 	echo "Mesa cannot be built when srcdir != builddir" 1>&2 | ||||
| 	exit 1 | ||||
| fi | ||||
|  | ||||
| autoreconf -v --install || exit 1 | ||||
|  | ||||
| "$srcdir"/configure "$@" | ||||
| @@ -1,2 +0,0 @@ | ||||
| [*.sh] | ||||
| indent_style = tab | ||||
							
								
								
									
										48
									
								
								bin/confdiff.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										48
									
								
								bin/confdiff.sh
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,48 @@ | ||||
| #!/bin/bash -e | ||||
|  | ||||
| usage() | ||||
| { | ||||
| 	echo "Usage: $0 <target1> <target2>" | ||||
| 	echo "Highlight differences between Mesa configs" | ||||
| 	echo "Example:" | ||||
| 	echo "  $0 linux linux-x86" | ||||
| } | ||||
|  | ||||
| die() | ||||
| { | ||||
| 	echo "$@" >&2 | ||||
| 	return 1 | ||||
| } | ||||
|  | ||||
| case "$1" in | ||||
| -h|--help) usage; exit 0;; | ||||
| esac | ||||
|  | ||||
| [ $# -lt 2 ] && die 2 targets needed. See $0 --help | ||||
| target1=$1 | ||||
| target2=$2 | ||||
|  | ||||
| topdir=$(cd "`dirname $0`"/..; pwd) | ||||
| cd "$topdir" | ||||
|  | ||||
| [ -f "./configs/$target1" ] || die Missing configs/$target1 | ||||
| [ -f "./configs/$target2" ] || die Missing configs/$target2 | ||||
|  | ||||
| trap 'rm -f "$t1" "$t2"' 0 | ||||
|  | ||||
| t1=$(mktemp) | ||||
| t2=$(mktemp) | ||||
|  | ||||
| make -f- -n -p <<EOF | sed '/^# Not a target/,/^$/d' > $t1 | ||||
| TOP = . | ||||
| include \$(TOP)/configs/$target1 | ||||
| default: | ||||
| EOF | ||||
|  | ||||
| make -f- -n -p <<EOF | sed '/^# Not a target/,/^$/d' > $t2 | ||||
| TOP = . | ||||
| include \$(TOP)/configs/$target2 | ||||
| default: | ||||
| EOF | ||||
|  | ||||
| diff -pu -I'^#' $t1 $t2 | ||||
							
								
								
									
										1516
									
								
								bin/config.guess
									
									
									
									
										vendored
									
									
										Executable file
									
								
							
							
						
						
									
										1516
									
								
								bin/config.guess
									
									
									
									
										vendored
									
									
										Executable file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										1626
									
								
								bin/config.sub
									
									
									
									
										vendored
									
									
										Executable file
									
								
							
							
						
						
									
										1626
									
								
								bin/config.sub
									
									
									
									
										vendored
									
									
										Executable file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| @@ -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 | ||||
| @@ -1,45 +0,0 @@ | ||||
| #!/bin/sh | ||||
|  | ||||
| # Script for generating a list of candidates which fix commits that have been | ||||
| # previously cherry-picked to a stable branch. | ||||
| # | ||||
| # Usage examples: | ||||
| # | ||||
| # $ bin/get-extra-pick-list.sh | ||||
| # $ bin/get-extra-pick-list.sh > picklist | ||||
| # $ bin/get-extra-pick-list.sh | tee picklist | ||||
|  | ||||
| # 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 | ||||
|  | ||||
| # For each cherry-picked commit... | ||||
| cat already_picked | cut -c -8 |\ | ||||
| while read sha | ||||
| do | ||||
| 	# ... check if it's referenced (fixed by another) patch | ||||
| 	git log -n1 --pretty=oneline --grep=$sha $latest_branchpoint..origin/master |\ | ||||
| 		cut -c -8 |\ | ||||
| 	while read candidate | ||||
| 	do | ||||
| 		# And flag up if it hasn't landed in branch yet. | ||||
| 		if grep -q ^$candidate already_picked ; then | ||||
| 			continue | ||||
| 		fi | ||||
| 		# Or if it isn't in the ignore list. | ||||
| 		if [ -f bin/.cherry-ignore ] ; then | ||||
| 			if grep -q ^$candidate bin/.cherry-ignore ; then | ||||
| 				continue | ||||
| 			fi | ||||
| 		fi | ||||
| 		printf "Commit \"%s\" references %s\n" \ | ||||
| 		       "`git log -n1 --pretty=oneline $candidate`" \ | ||||
| 		       "$sha" | ||||
| 	done | ||||
| done | ||||
|  | ||||
| rm -f already_picked | ||||
| @@ -1,150 +0,0 @@ | ||||
| #!/bin/sh | ||||
|  | ||||
| # Script for generating a list of candidates for cherry-picking to a stable branch | ||||
| # | ||||
| # Usage examples: | ||||
| # | ||||
| # $ 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 "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 |\ | ||||
| while read sha | ||||
| do | ||||
| 	# Check to see whether the patch is on the ignore list. | ||||
| 	if test -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 | ||||
|  | ||||
| 	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 | ||||
| done | ||||
|  | ||||
| rm -f already_picked | ||||
| rm -f already_landed | ||||
| @@ -1,50 +0,0 @@ | ||||
| """ | ||||
| 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 | ||||
| import sys | ||||
|  | ||||
|  | ||||
| def get_git_sha1(): | ||||
|     """Try to get the git SHA1 with git rev-parse.""" | ||||
|     git_dir = os.path.join(os.path.dirname(sys.argv[0]), '..', '.git') | ||||
|     try: | ||||
|         git_sha1 = subprocess.check_output([ | ||||
|             'git', | ||||
|             '--git-dir=' + git_dir, | ||||
|             'rev-parse', | ||||
|             'HEAD', | ||||
|         ], stderr=open(os.devnull, 'w')).decode("ascii") | ||||
|     except: | ||||
|         # don't print anything if it fails | ||||
|         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 ""') | ||||
							
								
								
									
										1
									
								
								bin/install-sh
									
									
									
									
									
										Symbolic link
									
								
							
							
						
						
									
										1
									
								
								bin/install-sh
									
									
									
									
									
										Symbolic link
									
								
							| @@ -0,0 +1 @@ | ||||
| minstall | ||||
| @@ -1,84 +0,0 @@ | ||||
| #!/usr/bin/env python3 | ||||
| # encoding=utf-8 | ||||
| # Copyright 2017-2018 Intel Corporation | ||||
|  | ||||
| # Permission is hereby granted, free of charge, to any person obtaining a copy | ||||
| # of this software and associated documentation files (the "Software"), to deal | ||||
| # 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. | ||||
|  | ||||
| """Script to install megadriver symlinks for meson.""" | ||||
|  | ||||
| from __future__ import print_function | ||||
| import argparse | ||||
| import os | ||||
|  | ||||
|  | ||||
| def main(): | ||||
|     parser = argparse.ArgumentParser() | ||||
|     parser.add_argument('megadriver') | ||||
|     parser.add_argument('libdir') | ||||
|     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) | ||||
|  | ||||
|     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) | ||||
|  | ||||
|     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 | ||||
|     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__': | ||||
|     main() | ||||
							
								
								
									
										74
									
								
								bin/installmesa
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										74
									
								
								bin/installmesa
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,74 @@ | ||||
| #!/bin/sh | ||||
|  | ||||
| # | ||||
| # Simple shell script for installing Mesa's header and library files. | ||||
| # If the copy commands below don't work on a particular system (i.e. the | ||||
| # -f or -d flags), we may need to branch on `uname` to do the right thing. | ||||
| # | ||||
|  | ||||
|  | ||||
| TOP=. | ||||
|  | ||||
| INCLUDE_DIR="/usr/local/include" | ||||
| LIB_DIR="/usr/local/lib" | ||||
|  | ||||
| if [ "x$#" = "x0" ] ; then | ||||
| echo | ||||
| echo "***** Mesa installation - You may need root privileges to do this *****" | ||||
| echo | ||||
| echo "Default directory for header files is:" ${INCLUDE_DIR} | ||||
| echo "Enter new directory or press <Enter> to accept this default." | ||||
|  | ||||
| read INPUT | ||||
| if [ "x${INPUT}" != "x" ] ; then | ||||
| 	INCLUDE_DIR=${INPUT} | ||||
| fi | ||||
|  | ||||
| echo | ||||
| echo "Default directory for library files is:" ${LIB_DIR} | ||||
| echo "Enter new directory or press <Enter> to accept this default." | ||||
|  | ||||
| read INPUT | ||||
| if [ "x${INPUT}" != "x" ] ; then | ||||
| 	LIB_DIR=${INPUT} | ||||
| fi | ||||
|  | ||||
| echo | ||||
| echo "About to install Mesa header files (GL/*.h) in: " ${INCLUDE_DIR}/GL | ||||
| echo "and Mesa library files (libGL.*, etc) in: " ${LIB_DIR} | ||||
| echo "Press <Enter> to continue, or <ctrl>-C to abort." | ||||
|  | ||||
| read INPUT | ||||
|  | ||||
| else | ||||
| INCLUDE_DIR=$1/include | ||||
| LIB_DIR=$1/lib | ||||
| fi | ||||
|  | ||||
| # flags: | ||||
| #  -f = force | ||||
| #  -d = preserve symlinks (does not work on BSD) | ||||
|  | ||||
| if [ `uname` = "FreeBSD" ] ; then | ||||
| 	CP_FLAGS="-f" | ||||
| elif [ `uname` = "Darwin" ] ; then | ||||
| 	CP_FLAGS="-f" | ||||
| elif [ `uname` = "AIX" ] ; then | ||||
| 	CP_FLAGS="-fh" | ||||
| else | ||||
| 	CP_FLAGS="-fd" | ||||
| fi | ||||
|  | ||||
|  | ||||
| set -v | ||||
|  | ||||
| mkdir -p ${INCLUDE_DIR} | ||||
| mkdir -p ${INCLUDE_DIR}/GL | ||||
| # NOT YET: mkdir -p ${INCLUDE_DIR}/GLES | ||||
| mkdir -p ${LIB_DIR} | ||||
| cp -f ${TOP}/include/GL/*.h ${INCLUDE_DIR}/GL | ||||
| cp -f ${TOP}/src/glw/*.h ${INCLUDE_DIR}/GL | ||||
| # NOT YET: cp -f ${TOP}/include/GLES/*.h ${INCLUDE_DIR}/GLES | ||||
| cp ${CP_FLAGS} ${TOP}/lib*/lib* ${LIB_DIR} | ||||
|  | ||||
| echo "Done." | ||||
| @@ -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() | ||||
							
								
								
									
										90
									
								
								bin/minstall
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										90
									
								
								bin/minstall
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,90 @@ | ||||
| #!/bin/sh | ||||
|  | ||||
|  | ||||
| # A minimal replacement for 'install' that supports installing symbolic links. | ||||
| # Only a limited number of options are supported: | ||||
| # -d dir          Create a directory | ||||
| # -m mode         Sets a file's mode when installing | ||||
|  | ||||
|  | ||||
| # If these commands aren't portable, we'll need some "if (arch)" type stuff | ||||
| SYMLINK="ln -s" | ||||
| MKDIR="mkdir -p" | ||||
| RM="rm -f" | ||||
|  | ||||
| MODE="" | ||||
|  | ||||
| if [ "$1" = "-d" ] ; then | ||||
| 	# make a directory path | ||||
| 	$MKDIR "$2" | ||||
| 	exit 0 | ||||
| fi | ||||
|  | ||||
| if [ "$1" = "-m" ] ; then | ||||
| 	# set file mode | ||||
| 	MODE=$2 | ||||
| 	shift 2 | ||||
| fi | ||||
|  | ||||
| # install file(s) into destination | ||||
| if [ $# -ge 2 ] ; then | ||||
|  | ||||
| 	# Last cmd line arg is the dest dir | ||||
| 	for FILE in $@ ; do | ||||
| 		DEST="$FILE" | ||||
| 	done | ||||
|  | ||||
| 	# Loop over args, moving them to DEST directory | ||||
| 	I=1 | ||||
| 	for FILE in $@ ; do | ||||
| 		if [ $I = $# ] ; then | ||||
| 			# stop, don't want to install $DEST into $DEST | ||||
| 			exit 0 | ||||
| 		fi | ||||
|  | ||||
| 		PWDSAVE=`pwd` | ||||
|  | ||||
| 		# determine file's type | ||||
| 		if [ -h "$FILE" ] ; then | ||||
| 			#echo $FILE is a symlink | ||||
| 			# Unfortunately, cp -d isn't universal so we have to | ||||
| 			# use a work-around. | ||||
|  | ||||
| 			# Use ls -l to find the target that the link points to | ||||
| 			LL=`ls -l "$FILE"` | ||||
| 			for L in $LL ; do | ||||
| 				TARGET=$L | ||||
| 			done | ||||
| 			#echo $FILE is a symlink pointing to $TARGET | ||||
|  | ||||
| 			FILE=`basename "$FILE"` | ||||
| 			# Go to $DEST and make the link | ||||
| 			cd "$DEST"        # pushd | ||||
| 				$RM "$FILE" | ||||
| 				$SYMLINK "$TARGET" "$FILE" | ||||
| 			cd "$PWDSAVE"     # popd | ||||
|  | ||||
| 		elif [ -f "$FILE" ] ; then | ||||
| 			#echo "$FILE" is a regular file | ||||
| 			$RM "$DEST/`basename $FILE`" | ||||
| 			cp "$FILE" "$DEST" | ||||
| 			if [ $MODE ] ; then | ||||
| 				FILE=`basename "$FILE"` | ||||
| 				chmod $MODE "$DEST/$FILE" | ||||
| 			fi | ||||
| 		else | ||||
| 			echo "Unknown type of argument: " "$FILE" | ||||
| 			exit 1 | ||||
| 		fi | ||||
|  | ||||
| 		I=`expr $I + 1` | ||||
| 	done | ||||
|  | ||||
| 	exit 0 | ||||
| fi | ||||
|  | ||||
| # If we get here, we didn't find anything to do | ||||
| echo "Usage:" | ||||
| echo "  install -d dir                      Create named directory" | ||||
| echo "  install [-m mode] file [...] dest   Install files in destination" | ||||
|  | ||||
							
								
								
									
										916
									
								
								bin/mklib
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										916
									
								
								bin/mklib
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,916 @@ | ||||
| #!/bin/sh | ||||
|  | ||||
| # Make a shared library. | ||||
| # This script should be useful for projects other than Mesa. | ||||
| # Improvements/fixes are welcome. | ||||
|  | ||||
|  | ||||
| # Copyright (C) 1999-2006  Brian Paul   All Rights Reserved. | ||||
| # | ||||
| # 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 | ||||
| # BRIAN PAUL 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. | ||||
|  | ||||
|  | ||||
| # | ||||
| # Option defaults | ||||
| # | ||||
| LIBNAME="" | ||||
| MAJOR=1 | ||||
| MINOR=0 | ||||
| PATCH="" | ||||
| DEPS="" | ||||
| LINK="" | ||||
| LDFLAGS="" | ||||
| CPLUSPLUS=0 | ||||
| STATIC=0 | ||||
| DLOPEN=0 | ||||
| INSTALLDIR="." | ||||
| ARCH="auto" | ||||
| ARCHOPT="" | ||||
| NOPREFIX=0 | ||||
| EXPORTS="" | ||||
| ID="" | ||||
|  | ||||
| # | ||||
| # Parse arguments | ||||
| # | ||||
| while true | ||||
| do | ||||
|     case $1 in | ||||
| 	'-h' | '--help') | ||||
| 	    echo 'Usage: mklib [options] objects' | ||||
| 	    echo 'Create a shared library from object files.' | ||||
| 	    echo '  -o LIBRARY    specifies the name of the resulting library, without' | ||||
| 	    echo '                the leading "lib" or any suffix.' | ||||
| 	    echo '                (eg: "-o GL" might result in "libGL.so" being made)' | ||||
| 	    echo '  -major N      specifies major version number (default is 1)' | ||||
| 	    echo '  -minor N      specifies minor version number (default is 0)' | ||||
| 	    echo '  -patch N      specifies patch version number (default is 0)' | ||||
| 	    echo '  -lLIBRARY     specifies a dependency on LIBRARY' | ||||
| 	    echo '  -LDIR         search in DIR for library dependencies at build time' | ||||
| 	    echo '  -RDIR         search in DIR for library dependencies at run time' | ||||
| 	    echo '  -linker L     explicity specify the linker program to use (eg: gcc, g++)' | ||||
| 	    echo '                Not observed on all systems at this time.' | ||||
| 	    echo '  -ldflags OPT  specify any additional linker flags in OPT' | ||||
| 	    echo '  -cplusplus    link with C++ runtime' | ||||
| 	    echo '  -static       make a static library (default is dynamic/shared)' | ||||
| 	    echo '  -dlopen       make a shared library suitable for dynamic loading' | ||||
| 	    echo '  -install DIR  put resulting library file(s) in DIR' | ||||
| 	    echo '  -arch ARCH    override using `uname` to determine host system' | ||||
| 	    echo '  -archopt OPT  specify an extra achitecture-specific option OPT' | ||||
| 	    echo '  -altopts OPTS alternate options to override all others' | ||||
| 	    echo "  -noprefix     don't prefix library name with 'lib' nor add any suffix" | ||||
| 	    echo '  -exports FILE only export the symbols listed in FILE' | ||||
| 	    echo '  -id NAME      Sets the id of the dylib (Darwin)' | ||||
| 	    echo '  -h, --help    display this information and exit' | ||||
| 	    exit 1 | ||||
| 	    ;; | ||||
| 	'-o') | ||||
| 	    shift 1; | ||||
| 	    LIBNAME=$1 | ||||
| 	    ;; | ||||
| 	'-major') | ||||
| 	    shift 1; | ||||
| 	    MAJOR=$1 | ||||
| 	    ;; | ||||
| 	'-minor') | ||||
| 	    shift 1; | ||||
| 	    MINOR=$1 | ||||
| 	    ;; | ||||
| 	'-patch') | ||||
| 	    shift 1; | ||||
| 	    PATCH=$1 | ||||
| 	    ;; | ||||
| 	'-linker') | ||||
| 	    shift 1; | ||||
| 	    LINK=$1 | ||||
| 	    ;; | ||||
| 	'-ldflags') | ||||
| 	    shift 1; | ||||
| 	    LDFLAGS=$1 | ||||
| 	    ;; | ||||
| 	-l*) | ||||
| 	    DEPS="$DEPS $1" | ||||
| 	    ;; | ||||
| 	-L*) | ||||
| 	    DEPS="$DEPS $1" | ||||
| 	    ;; | ||||
| 	-R*) | ||||
| 	    DEPS="$DEPS $1" | ||||
| 	    ;; | ||||
| 	-Wl*) | ||||
|             DEPS="$DEPS $1" | ||||
|             ;; | ||||
| 	-pthread) | ||||
| 	    # this is a special case (see bugzilla 10876) | ||||
| 	    DEPS="$DEPS $1" | ||||
| 	    ;; | ||||
| 	'-pthread') | ||||
| 	    DEPS="$DEPS -pthread" | ||||
| 	    ;; | ||||
| 	'-cplusplus') | ||||
| 	    CPLUSPLUS=1 | ||||
| 	    ;; | ||||
| 	'-static') | ||||
| 	    STATIC=1 | ||||
| 	    ;; | ||||
| 	'-dlopen') | ||||
| 	    DLOPEN=1 | ||||
| 	    ;; | ||||
| 	'-install') | ||||
| 	    shift 1; | ||||
| 	    INSTALLDIR=$1 | ||||
| 	    ;; | ||||
| 	'-arch') | ||||
| 	    shift 1; | ||||
| 	    ARCH=$1 | ||||
| 	    ;; | ||||
| 	'-archopt') | ||||
| 	    shift 1; | ||||
| 	    ARCHOPT=$1 | ||||
| 	    ;; | ||||
| 	'-altopts') | ||||
|             shift 1; | ||||
|             ALTOPTS=$1 | ||||
|             ;; | ||||
| 	'-noprefix') | ||||
| 	    NOPREFIX=1 | ||||
| 	    ;; | ||||
| 	'-exports') | ||||
| 	    shift 1; | ||||
| 	    EXPORTS=$1 | ||||
| 	    ;; | ||||
| 	'-id') | ||||
| 	    shift 1; | ||||
| 	    ID=$1 | ||||
| 	    ;; | ||||
| 	-*) | ||||
| 	    echo "mklib: Unknown option: " $1 ; | ||||
| 	    exit 1 | ||||
| 	    ;; | ||||
| 	*) | ||||
| 	    # This should be the first object file, stop parsing | ||||
| 	    break | ||||
|     esac | ||||
|     shift 1 | ||||
| done | ||||
| OBJECTS=$@ | ||||
|  | ||||
|  | ||||
| if [ ${ARCH} = "auto" ] ; then | ||||
|     ARCH=`uname` | ||||
| fi | ||||
|  | ||||
|  | ||||
| # | ||||
| # Error checking | ||||
| # | ||||
| if [ "x${LIBNAME}" = "x" ] ; then | ||||
|     echo "mklib: Error: no library name specified" | ||||
|     exit 1 | ||||
| fi | ||||
| if [ "x${OBJECTS}" = "x" ] ; then | ||||
|     echo "mklib: Error: no object files specified" | ||||
|     exit 1 | ||||
| fi | ||||
|  | ||||
|  | ||||
| # | ||||
| # Debugging info | ||||
| # | ||||
| if [  ]  ; then | ||||
|     echo "-----------------" | ||||
|     echo ARCH is $ARCH | ||||
|     echo LIBNAME is $LIBNAME | ||||
|     echo MAJOR is $MAJOR | ||||
|     echo MINOR is $MINOR | ||||
|     echo PATCH is $PATCH | ||||
|     echo DEPS are $DEPS | ||||
|     echo "EXPORTS in" $EXPORTS | ||||
|     echo ID is $ID | ||||
|     echo "-----------------" | ||||
| fi | ||||
|  | ||||
|  | ||||
| # | ||||
| # OK, make the library now | ||||
| # | ||||
| case $ARCH in | ||||
|  | ||||
|     'Linux' | 'OpenBSD' | 'DragonFly' | 'GNU' | GNU/*) | ||||
| 	# we assume gcc | ||||
|  | ||||
| 	if [ "x$LINK" = "x" ] ; then | ||||
| 	    # -linker was not specified so set default link command now | ||||
|             if [ $CPLUSPLUS = 1 ] ; then | ||||
|                 LINK=g++ | ||||
|             else | ||||
|                 LINK=gcc | ||||
|             fi | ||||
| 	fi | ||||
|  | ||||
| 	if [ $NOPREFIX = 1 ] ; then | ||||
| 	    # No "lib" or ".so" part | ||||
| 	    echo "mklib: Making" $ARCH "shared library: " ${LIBNAME} | ||||
| 	    case $ARCH in 'Linux' | 'GNU' | GNU/*) | ||||
| 		OPTS="-Xlinker -Bsymbolic -shared" | ||||
| 	    ;; | ||||
| 	    *) | ||||
| 		OPTS="-shared" | ||||
| 	    ;; | ||||
| 	    esac | ||||
|  | ||||
| 	    # Check if objects are 32-bit and we're running in 64-bit | ||||
| 	    # environment.  If so, pass -m32 flag to linker. | ||||
| 	    set ${OBJECTS} | ||||
| 	    ABI32=`file $1 | grep 32-bit` | ||||
| 	    if [ "${ABI32}" -a `uname -m` = "x86_64" ] ; then | ||||
| 		OPTS="-m32 ${OPTS}" | ||||
| 	    fi | ||||
|  | ||||
|             if [ "${ALTOPTS}" ] ; then | ||||
|                 OPTS=${ALTOPTS} | ||||
|             fi | ||||
|  | ||||
|             rm -f ${LIBNAME} | ||||
|             # make lib | ||||
|             ${LINK} ${OPTS} ${LDFLAGS} -o ${LIBNAME} ${OBJECTS} ${DEPS} | ||||
|             # finish up | ||||
|             FINAL_LIBS="${LIBNAME}" | ||||
|         elif [ $STATIC = 1 ] ; then | ||||
|             LIBNAME="lib${LIBNAME}.a"     # prefix with "lib", suffix with ".a" | ||||
|             echo "mklib: Making" $ARCH "static library: " ${LIBNAME} | ||||
|             LINK="ar" | ||||
|             OPTS="-ru" | ||||
|             if [ "${ALTOPTS}" ] ; then | ||||
|                 OPTS=${ALTOPTS} | ||||
|             fi | ||||
|             rm -f ${LIBNAME} | ||||
|  | ||||
| 	    # expand any .a objects into constituent .o files. | ||||
| 	    NEWOBJECTS="" | ||||
| 	    DELETIA="" | ||||
| 	    for OBJ in ${OBJECTS} ; do | ||||
| 		if [ `expr match $OBJ '.*\.a'` -gt 0 ] ; then | ||||
| 		    # extract the .o files from this .a archive | ||||
| 		    FILES=`ar t $OBJ` | ||||
| 		    ar x $OBJ | ||||
| 		    NEWOBJECTS="$NEWOBJECTS $FILES" | ||||
| 		    # keep track of temporary .o files and delete them below | ||||
| 		    DELETIA="$DELETIA $FILES" | ||||
| 		else | ||||
| 		    # ordinary .o file | ||||
| 		    NEWOBJECTS="$NEWOBJECTS $OBJ" | ||||
| 		fi | ||||
| 	    done | ||||
|  | ||||
|             # make lib | ||||
|             ${LINK} ${OPTS} ${LIBNAME} ${NEWOBJECTS} | ||||
|             ranlib ${LIBNAME} | ||||
|  | ||||
| 	    # remove temporary extracted .o files | ||||
| 	    rm -f ${DELETIA} | ||||
|  | ||||
|             # finish up | ||||
|             FINAL_LIBS=${LIBNAME} | ||||
|         else | ||||
| 	    LIBNAME="lib${LIBNAME}"     # prefix with "lib" | ||||
| 	    case $ARCH in 'Linux' | 'GNU' | GNU/*) | ||||
| 		OPTS="-Xlinker -Bsymbolic -shared -Wl,-soname,${LIBNAME}.so.${MAJOR}" | ||||
| 	    ;; | ||||
| 	    *) | ||||
| 		OPTS="-shared -Wl,-soname,${LIBNAME}.so.${MAJOR}" | ||||
| 	    ;; | ||||
| 	    esac | ||||
| 	    if [ $EXPORTS ] ; then | ||||
| 		#OPTS="${OPTS} -Xlinker --retain-symbols-file ${EXPORTS}" | ||||
| 		# Make the 'exptmp' file for --version-script option | ||||
| 		echo "{" > exptmp | ||||
| 		echo "global:" >> exptmp | ||||
| 		sed 's/$/;/' ${EXPORTS} >> exptmp | ||||
| 		echo "local:" >> exptmp | ||||
| 		echo "*;" >> exptmp | ||||
| 		echo "};" >> exptmp | ||||
| 		OPTS="${OPTS} -Xlinker --version-script=exptmp" | ||||
| 		# exptmp is removed below | ||||
| 	    fi | ||||
|  | ||||
| 	    # Check if objects are 32-bit and we're running in 64-bit | ||||
| 	    # environment.  If so, pass -m32 flag to linker. | ||||
| 	    set ${OBJECTS} | ||||
| 	    ABI32=`file $1 | grep 32-bit` | ||||
| 	    if [ "${ABI32}" -a `uname -m` = "x86_64" ] ; then | ||||
| 		OPTS="-m32 ${OPTS}" | ||||
| 	    fi | ||||
|             if [ "${ALTOPTS}" ] ; then | ||||
|                 OPTS=${ALTOPTS} | ||||
|             fi | ||||
|  | ||||
| 	    if [ x${PATCH} = "x" ] ; then | ||||
| 		VERSION="${MAJOR}.${MINOR}" | ||||
| 	    else | ||||
| 		VERSION="${MAJOR}.${MINOR}.${PATCH}" | ||||
| 	    fi | ||||
|  | ||||
|             echo "mklib: Making" $ARCH "shared library: " ${LIBNAME}.so.${VERSION} | ||||
|  | ||||
|             # rm any old libs | ||||
|             rm -f ${LIBNAME}.so.${VERSION} | ||||
|             rm -f ${LIBNAME}.so.${MAJOR} | ||||
|             rm -f ${LIBNAME}.so | ||||
|  | ||||
|             # make lib | ||||
|             ${LINK} ${OPTS} ${LDFLAGS} -o ${LIBNAME}.so.${VERSION} ${OBJECTS} ${DEPS} | ||||
|             # make usual symlinks | ||||
|             ln -s ${LIBNAME}.so.${VERSION} ${LIBNAME}.so.${MAJOR} | ||||
|             ln -s ${LIBNAME}.so.${MAJOR} ${LIBNAME}.so | ||||
|             # finish up | ||||
|             FINAL_LIBS="${LIBNAME}.so.${VERSION} ${LIBNAME}.so.${MAJOR} ${LIBNAME}.so" | ||||
| #	    rm -f exptmp | ||||
|         fi | ||||
| 	;; | ||||
|  | ||||
|     'SunOS') | ||||
|         if [ $STATIC = 1 ] ; then | ||||
| 	    LIBNAME="lib${LIBNAME}.a" | ||||
| 	    echo "mklib: Making SunOS static library: " ${LIBNAME} | ||||
| 	    rm -f ${LIBNAME} | ||||
| 	    ar -ruv ${LIBNAME} ${OBJECTS} | ||||
| 	    FINAL_LIBS=${LIBNAME} | ||||
| 	else | ||||
| 	    if [ $NOPREFIX = 0 ] ; then | ||||
| 		LIBNAME="lib${LIBNAME}.so" | ||||
| 	    fi | ||||
| 	    echo "mklib: Making SunOS shared library: " ${LIBNAME} | ||||
|  | ||||
| 	    if [ "x$LINK" = "x" ] ; then | ||||
| 		# -linker was not specified, choose default linker now | ||||
| 		if [ $CPLUSPLUS = 1 ] ; then | ||||
| 		    # determine linker and options for C++ code | ||||
| 		    if [ `which c++` ] ; then | ||||
| 			# use Sun c++ | ||||
| 			LINK="c++" | ||||
| 		    elif [ `type g++` ] ; then | ||||
| 			# use g++ | ||||
| 			LINK="g++" | ||||
| 		    else | ||||
| 			echo "mklib: warning: can't find C++ compiler, trying CC." | ||||
| 			LINK="CC" | ||||
| 		    fi | ||||
| 		else | ||||
| 		    # use native Sun linker for C code | ||||
| 		    LINK="ld" | ||||
| 		fi | ||||
| 	    fi | ||||
|  | ||||
| 	    # linker options | ||||
| 	    if [ ${LINK} = "ld" -o ${LINK} = "cc" -o ${LINK} = "CC" ] ; then | ||||
| 		# SunOS tools, -G to make shared libs | ||||
| 		OPTS="-G" | ||||
| 	    else | ||||
| 		# gcc linker | ||||
| 		# Check if objects are 32-bit and we're running in 64-bit | ||||
| 		# environment.  If so, pass -m32 flag to linker. | ||||
| 		set ${OBJECTS} | ||||
| 		ABI32=`file $1 | grep 32-bit` | ||||
| 		if [ "${ABI32}" ] ; then | ||||
| 		    OPTS="-m32 -shared -Wl,-Bdynamic" | ||||
| 		else | ||||
| 		    OPTS="-m64 -shared -Wl,-Bdynamic" | ||||
| 		fi | ||||
| 	    fi | ||||
|  | ||||
| 	    # Check if objects are SPARC v9 | ||||
| 	    # file says: ELF 64-bit MSB relocatable SPARCV9 Version 1 | ||||
| 	    set ${OBJECTS} | ||||
| 	    if [ ${LINK} = "cc" -o ${LINK} = "CC" ] ; then | ||||
| 		SPARCV9=`file $1 | grep SPARCV9` | ||||
| 		if [ "${SPARCV9}" ] ; then | ||||
| 		    OPTS="${OPTS} -xarch=v9" | ||||
| 		fi | ||||
| 	    fi | ||||
|             if [ "${ALTOPTS}" ] ; then | ||||
|                 OPTS=${ALTOPTS} | ||||
|             fi | ||||
| 	    # for debug: | ||||
| 	    #echo "mklib: linker is" ${LINK} ${OPTS} | ||||
| 	    if [ $NOPREFIX = 1 ] ; then | ||||
| 		rm -f ${LIBNAME} | ||||
| 		${LINK} ${OPTS} ${LDFLAGS} -o ${LIBNAME} ${OBJECTS} ${DEPS} | ||||
| 	    else | ||||
| 		rm -f ${LIBNAME}.${MAJOR} ${LIBNAME} | ||||
| 		${LINK} ${OPTS} ${LDFLAGS} -o ${LIBNAME}.${MAJOR} -h ${LIBNAME}.${MAJOR} ${OBJECTS} ${DEPS} | ||||
| 		ln -s ${LIBNAME}.${MAJOR} ${LIBNAME} | ||||
| 	    fi | ||||
| 	    FINAL_LIBS="${LIBNAME}.${MAJOR} ${LIBNAME}" | ||||
| 	fi | ||||
| 	;; | ||||
|  | ||||
|     'FreeBSD') | ||||
| 	# we assume gcc | ||||
|  | ||||
| 	if [ "x$LINK" = "x" ] ; then | ||||
| 	    # -linker was not specified so set default link command now | ||||
|             if [ $CPLUSPLUS = 1 ] ; then | ||||
|                 LINK=g++ | ||||
|             else | ||||
|                 LINK=gcc | ||||
|             fi | ||||
| 	fi | ||||
|  | ||||
| 	if [ $NOPREFIX = 1 ] ; then | ||||
| 	    # No "lib" or ".so" part | ||||
| 	    echo "mklib: Making FreeBSD shared library: " ${LIBNAME} | ||||
| 	    OPTS="-shared" | ||||
|             if [ "${ALTOPTS}" ] ; then | ||||
|                 OPTS=${ALTOPTS} | ||||
|             fi | ||||
| 	    rm -f ${LIBNAME} | ||||
| 	    ${LINK} ${OPTS} ${LDFLAGS} -o ${LIBNAME} ${OBJECTS} ${DEPS} | ||||
| 	    FINAL_LIBS=${LIBNAME} | ||||
|         elif [ $STATIC = 1 ] ; then | ||||
| 	    STLIB="lib${LIBNAME}.a" | ||||
| 	    echo "mklib: Making FreeBSD static library: " ${STLIB} | ||||
| 	    rm -f ${STLIB} | ||||
| 	    ar cq ${STLIB} ${OBJECTS} | ||||
| 	    ranlib ${STLIB} | ||||
| 	    FINAL_LIBS=${STLIB} | ||||
| 	else | ||||
| 	    SHLIB="lib${LIBNAME}.so.${MAJOR}" | ||||
| 	    OPTS="-shared -Wl,-soname,${SHLIB}" | ||||
|             if [ "${ALTOPTS}" ] ; then | ||||
|                 OPTS=${ALTOPTS} | ||||
|             fi | ||||
| 	    echo "mklib: Making FreeBSD shared library: " ${SHLIB} | ||||
| 	    rm -f ${SHLIB} | ||||
| 	    ${LINK} ${OPTS} ${LDFLAGS} -o ${SHLIB} ${OBJECTS} ${DEPS} | ||||
| 	    ln -sf ${SHLIB} "lib${LIBNAME}.so" | ||||
| 	    FINAL_LIBS="${SHLIB} lib${LIBNAME}.so" | ||||
| 	fi | ||||
| 	;; | ||||
|  | ||||
|     'NetBSD') | ||||
|         if [ $STATIC = 1 ] ; then | ||||
| 	    LIBNAME="lib${LIBNAME}_pic.a" | ||||
| 	    echo "mklib: Making NetBSD PIC static library: " ${LIBNAME} | ||||
| 	    rm -f ${LIBNAME} | ||||
| 	    ar cq ${LIBNAME} ${OBJECTS} | ||||
| 	    ranlib ${LIBNAME} | ||||
| 	    FINAL_LIBS=${LIBNAME} | ||||
| 	else | ||||
| 	    LIBNAME="lib${LIBNAME}.so.${MAJOR}.${MINOR}" | ||||
| 	    echo "mklib: Making NetBSD PIC shared library: " ${LIBNAME} | ||||
| 	    rm -f ${LIBNAME} | ||||
| 	    ld -x -Bshareable -Bforcearchive -o ${LIBNAME} ${OBJECTS} | ||||
| 	    FINAL_LIBS=${LIBNAME} | ||||
| 	fi | ||||
| 	;; | ||||
|  | ||||
|     'IRIX' | 'IRIX64') | ||||
|         if [ $STATIC = 1 ] ; then | ||||
| 	    LIBNAME="lib${LIBNAME}.a" | ||||
| 	    rm -f ${LIBNAME} | ||||
| 	    ar rc ${LIBNAME} ${OBJECTS} | ||||
| 	    FINAL_LIBS=${LIBNAME} | ||||
| 	else | ||||
| 	    LIBNAME="lib${LIBNAME}.so"  # prefix with "lib", suffix with ".so" | ||||
|  | ||||
| 	    # examine first object to determine ABI | ||||
|     	    set ${OBJECTS} | ||||
| 	    ABI_O32=`file $1 | grep 'ELF 32-bit'` | ||||
| 	    ABI_N32=`file $1 | grep 'ELF N32'` | ||||
| 	    ABI_N64=`file $1 | grep 'ELF 64-bit'` | ||||
| 	    if [ "${ABI_O32}" ] ; then | ||||
| 		OPTS="-32 -shared -all" | ||||
| 		ABI="o32-bit" | ||||
| 	    elif [ "${ABI_N32}" ] ; then | ||||
| 		OPTS="-n32 -shared -all" | ||||
| 		ABI="n32-bit" | ||||
| 	    elif [ "${ABI_N64}" ] ; then | ||||
| 		OPTS="-64 -shared -all" | ||||
| 		ABI="64-bit" | ||||
| 	    else | ||||
| 		echo "Error: Unexpected IRIX ABI!" | ||||
| 		exit 1 | ||||
| 	    fi | ||||
|  | ||||
|             if [ "${ALTOPTS}" ] ; then | ||||
|                 OPTS=${ALTOPTS} | ||||
|             fi | ||||
|  | ||||
| 	    if [ $CPLUSPLUS = 1 ] ; then | ||||
| 		LINK="CC" | ||||
| 	    else | ||||
| 		LINK="ld" | ||||
| 	    fi | ||||
|  | ||||
| 	    echo "mklib: Making IRIX " ${ABI} " shared library: " ${LIBNAME} | ||||
| 	    ${LINK} ${OPTS} ${LDFLAGS} -o ${LIBNAME} ${OBJECTS} ${DEPS} | ||||
| 	    FINAL_LIBS=${LIBNAME} | ||||
| 	fi | ||||
| 	;; | ||||
|  | ||||
|     'linux-cygwin') | ||||
| 	LIBNAME="lib${LIBNAME}.a" | ||||
| 	echo "mklib: Making linux-cygwin library: " ${LIBNAME} | ||||
| 	rm -f ${LIBNAME} | ||||
| 	gnuwin32ar ruv ${LIBNAME} ${OBJECTS} | ||||
| 	FINAL_LIBS=${LIBNAME} | ||||
| 	;; | ||||
|  | ||||
|     'HP-UX') | ||||
|         if [ $STATIC = 1 ] ; then | ||||
| 	    LIBNAME="lib${LIBNAME}.a" | ||||
| 	    echo "mklib: Making HP-UX static library: " ${LIBNAME} | ||||
| 	    rm -f ${LIBNAME} | ||||
| 	    ar -ruv ${LIBNAME} ${OBJECTS} | ||||
| 	    FINAL_LIBS=${LIBNAME} | ||||
| 	else | ||||
|             # HP uses a .2 for their current GL/GLU libraries | ||||
| 	    if [ ${LIBNAME} = "GL" -o ${LIBNAME} = "GLU" ] ; then | ||||
| 	       MAJOR=2 | ||||
| 	    fi | ||||
| 	    RUNLIB="lib${LIBNAME}.${MAJOR}" | ||||
| 	    DEVLIB="lib${LIBNAME}.sl" | ||||
| 	    echo "mklib: Making HP-UX shared library: " ${RUNLIB} ${DEVLIB} | ||||
| 	    ld -b -o ${RUNLIB} +b ${RUNLIB} ${OBJECTS} ${DEPS} | ||||
| 	    ln -s ${RUNLIB} ${DEVLIB} | ||||
| 	    FINAL_LIBS="${RUNLIB} ${DEVLIB}" | ||||
| 	fi | ||||
| 	;; | ||||
|  | ||||
|     'AIX' ) | ||||
| 	# examine first object to determine ABI | ||||
|     	set ${OBJECTS} | ||||
| 	ABI_64=`file $1 | grep '64-bit'` | ||||
| 	if [ "${ABI_64}" ] ; then | ||||
| 	    X64="-X64" | ||||
| 	    Q64="-q64" | ||||
| 	    OFILE=shr_64.o | ||||
| 	else | ||||
| 	    OFILE=shr.o  #Want to be consistent with the IBM libGL.a | ||||
| 	fi | ||||
|  | ||||
| 	if [ $STATIC = 1 ] ; then | ||||
| 	    LIBNAME="lib${LIBNAME}.a" | ||||
| 	    echo "mklib: Making AIX static library: " ${LIBNAME} | ||||
| 	    ar -ruv ${X64} ${LIBNAME} ${OBJECTS} | ||||
| 	    FINAL_LIBS=${LIBNAME} | ||||
| 	else | ||||
| 	    EXPFILE="lib${LIBNAME}.exp" | ||||
| 	    LIBNAME="lib${LIBNAME}.a"  # shared objects are still stored in the .a libraries | ||||
| 	    OPTS="-bE:${EXPFILE} -bM:SRE -bnoentry ${Q64}" | ||||
| 	    rm -f ${EXPFILE} ${OFILE} | ||||
| 	    NM="/bin/nm -eC ${X64}" | ||||
| 	    echo "#! /usr/lib/${LIBNAME}" > ${EXPFILE} | ||||
| 	    ${NM} ${OBJECTS} | awk '{ | ||||
| 	    if ((($2 == "T") || ($2 == "D") || ($2 == "B")) \ | ||||
| 	    && ( substr($1,1,1) != ".")) { | ||||
| 		    if (substr ($1, 1, 7) != "__sinit" && | ||||
| 			    substr ($1, 1, 7) != "__sterm") { | ||||
| 			    if (substr ($1, 1, 5) == "__tf1") | ||||
| 				print (substr ($1, 7)) | ||||
| 			    else if (substr ($1, 1, 5) == "__tf9") | ||||
| 				print (substr ($1, 15)) | ||||
| 			    else | ||||
| 				print $1 | ||||
| 			} | ||||
| 		} | ||||
| 	    }' | sort -u >> ${EXPFILE} | ||||
|  | ||||
|             if [ "${ALTOPTS}" ] ; then | ||||
|                 OPTS=${ALTOPTS} | ||||
|             fi | ||||
|  | ||||
|             # On AIX a shared library is linked differently when | ||||
|             # you want to dlopen the file | ||||
| 	    if [ $DLOPEN = "1" ] ; then | ||||
| 		cc -G ${OPTS} ${LDFLAGS} -o ${LIBNAME} ${OBJECTS} ${DEPS} | ||||
| 	    else | ||||
| 		cc ${OPTS} ${LDFLAGS} -o ${OFILE} ${OBJECTS} ${DEPS} | ||||
| 		ar ${X64} -r ${LIBNAME} ${OFILE} | ||||
| 	    fi | ||||
|  | ||||
|             FINAL_LIBS="${LIBNAME}" | ||||
|         fi | ||||
|         ;; | ||||
|  | ||||
|     'OpenSTEP') | ||||
| 	LIBNAME="lib${LIBNAME}.a" | ||||
| 	echo "mklib: Making OpenSTEP static library: " ${LIBNAME} | ||||
| 	libtool -static -o ${LIBNAME} - ${OBJECTS} | ||||
| 	FINAL_LIBS=${LIBNAME} | ||||
| 	;; | ||||
|  | ||||
|     'OSF1') | ||||
|         if [ $STATIC = 1 ] ; then | ||||
| 	    LIBNAME="lib${LIBNAME}.a" | ||||
| 	    echo "mklib: Making OSF/1 static library: " ${LIBNAME} | ||||
| 	    rm -f ${LIBNAME} | ||||
| 	    ar -ruv ${LIBNAME} ${OBJECTS} | ||||
| 	    FINAL_LIBS=${LIBNAME} | ||||
| 	else | ||||
| 	    VERSION="${MAJOR}.${MINOR}" | ||||
| 	    LIBNAME="lib${LIBNAME}.so" | ||||
| 	    echo "mklib: Making OSF/1 shared library: " ${LIBNAME} | ||||
| 	    if [ "x$LINK" = "x" ] ; then | ||||
| 		if [ $CPLUSPLUS = 1 ] ; then | ||||
| 		    LINK=cxx | ||||
| 		else | ||||
| 		    LINK=cc | ||||
| 		fi | ||||
| 	    fi | ||||
| 	    rm -f ${LIBNAME}.${VERSION} | ||||
| 	    ${LINK} -o ${LIBNAME}.${VERSION} -shared -set_version ${VERSION} -soname ${LIBNAME}.${VERSION} -expect_unresolved \* -all ${OBJECTS} ${DEPS} | ||||
| 	    ln -sf ${LIBNAME}.${VERSION} ${LIBNAME} | ||||
| 	    FINAL_LIBS="${LIBNAME} ${LIBNAME}.${VERSION}" | ||||
| 	fi | ||||
| 	;; | ||||
|  | ||||
|     'Darwin') | ||||
|         if [ $STATIC = 1 ] ; then | ||||
|             LIBNAME="lib${LIBNAME}.a" | ||||
|             echo "mklib: Making Darwin static library: " ${LIBNAME} | ||||
|             LINK="ar" | ||||
|             OPTS="-ruvs" | ||||
|             if [ "${ALTOPTS}" ] ; then | ||||
|                 OPTS=${ALTOPTS} | ||||
|             fi | ||||
|             ${LINK} ${OPTS} ${LIBNAME} ${OBJECTS} | ||||
|             FINAL_LIBS=${LIBNAME} | ||||
|         else | ||||
|             # On Darwin a .bundle is used for a library that you want to dlopen | ||||
|             if [ $DLOPEN = "1" ] ; then | ||||
|                 LIBSUFFIX="bundle" | ||||
|                 OPTS="${ARCHOPT} -bundle -multiply_defined suppress" | ||||
|             else | ||||
|                 LIBSUFFIX="dylib" | ||||
|                 if [ -z "$ID" ] ; then | ||||
|                     ID="lib${LIBNAME}.${MAJOR}.${LIBSUFFIX}" | ||||
|                 fi | ||||
|                 OPTS="${ARCHOPT} -dynamiclib -multiply_defined suppress -current_version ${MAJOR}.${MINOR}.0 -compatibility_version ${MAJOR}.${MINOR}.0 -install_name ${ID}" | ||||
|             fi | ||||
|  | ||||
|             if [ ${EXPORTS} ] ; then | ||||
|                 if [ -f ${EXPORTS}".darwin" ] ; then | ||||
|                     EXPORTS=$EXPORTS".darwin" | ||||
|                 fi | ||||
|                 OPTS="${OPTS} -exported_symbols_list ${EXPORTS}" | ||||
|             fi | ||||
|  | ||||
|             LINKNAME="lib${LIBNAME}.${MAJOR}.${LIBSUFFIX}" | ||||
|             LINKNAME2="lib${LIBNAME}.${LIBSUFFIX}" | ||||
|             LIBNAME="lib${LIBNAME}.${MAJOR}.${MINOR}.${LIBSUFFIX}" | ||||
|  | ||||
| 	    # examine first object to determine ABI | ||||
|     	    set ${OBJECTS} | ||||
|             ABI_PPC=`file $1 | grep ' ppc'` | ||||
|             ABI_I386=`file $1 | grep ' i386'` | ||||
|             ABI_PPC64=`file $1 | grep ' ppc64'` | ||||
|             ABI_X86_64=`file $1 | grep ' x86_64'` | ||||
|             if [ "${ABI_PPC}" ] ; then | ||||
|                 OPTS="${OPTS} -arch ppc" | ||||
|             fi | ||||
|             if [ "${ABI_I386}" ] ; then | ||||
|                 OPTS="${OPTS} -arch i386" | ||||
|             fi | ||||
|             if [ "${ABI_PPC64}" ] ; then | ||||
|                 OPTS="${OPTS} -arch ppc64" | ||||
|             fi | ||||
|             if [ "${ABI_X86_64}" ] ; then | ||||
|                 OPTS="${OPTS} -arch x86_64" | ||||
|             fi | ||||
|  | ||||
|             if [ "${ALTOPTS}" ] ; then | ||||
|                 OPTS=${ALTOPTS} | ||||
|             fi | ||||
|  | ||||
| 	    # XXX can we always add -isysroot /Developer/SDKs/MacOSX10.4u.sdk | ||||
| 	    # to OPTS here? | ||||
|  | ||||
| 	    # determine linker | ||||
| 	    if [ $CPLUSPLUS = 1 ] ; then | ||||
| 		LINK="g++" | ||||
| 	    else | ||||
| 		LINK="cc" | ||||
| 	    fi | ||||
|  | ||||
|             echo "mklib: Making Darwin shared library: " ${LIBNAME} | ||||
|  | ||||
|             ${LINK} ${OPTS} ${LDFLAGS} -o ${LIBNAME} ${OBJECTS} ${DEPS} | ||||
|             ln -s ${LIBNAME} ${LINKNAME} | ||||
|             ln -s ${LIBNAME} ${LINKNAME2} | ||||
|             FINAL_LIBS="${LIBNAME} ${LINKNAME} ${LINKNAME2}" | ||||
|         fi | ||||
|         ;; | ||||
|  | ||||
|     'LynxOS') | ||||
| 	LIBNAME="lib${LIBNAME}.a" | ||||
| 	echo "mklib: Making LynxOS static library: " ${LIBNAME} | ||||
| 	rm -f ${LIBNAME} | ||||
| 	ar ru ${LIBNAME} ${OBJECTS} | ||||
| 	FINAL_LIBS=${LIBNAME} | ||||
| 	;; | ||||
|  | ||||
|     'BeOS') | ||||
|         if [ $STATIC = 1 ] ; then | ||||
|             LIBNAME="lib${LIBNAME}.a" | ||||
|             echo "mklib: Making BeOS static library: " ${LIBNAME} | ||||
|             ar -cru "${LIBNAME}" ${OBJECTS} | ||||
|         else | ||||
| 	    LIBNAME="lib${LIBNAME}.so" | ||||
| 	    echo "mklib: Making BeOS shared library: " ${LIBNAME} | ||||
| 	    gcc -nostart -Xlinker "-soname=${LIBNAME}" -L/Be/develop/lib/x86 -lbe ${DEPS} ${OBJECTS} -o "${LIBNAME}" | ||||
| 	    mimeset -f "${LIBNAME}" | ||||
| 	    # XXX remove the Mesa3D stuff here since mklib isn't mesa-specific. | ||||
| 	    setversion "${LIBNAME}" -app ${MAJOR} ${MINOR} ${PATCH} -short "Powered by Mesa3D!" -long "Powered by Mesa3D!" | ||||
| 	fi | ||||
| 	FINAL_LIBS=${LIBNAME} | ||||
| 	;; | ||||
|  | ||||
|     'QNX') | ||||
| 	LIBNAME="lib${LIBNAME}.a" | ||||
| 	echo "mklib: Making QNX library: " ${LIBNAME} | ||||
| 	wlib ${LIBNAME} ${OBJECTS} | ||||
| 	FINAL_LIBS=${LIBNAME} | ||||
| 	;; | ||||
|  | ||||
|     'MorphOS') | ||||
| 	LIBNAME="lib${LIBNAME}.a" | ||||
| 	echo "mklib: Making MorphOS library: " ${LIBNAME} | ||||
| 	ppc-morphos-ar rc ${LIBNAME} ${OBJECTS} | ||||
| 	FINAL_LIBS="${LIBNAME}" | ||||
| 	;; | ||||
|  | ||||
|     'icc' | 'icc-istatic') | ||||
| 	# Intel C compiler | ||||
| 	# This should get merged into the Linux code, above, since this isn't | ||||
| 	# really a different architecture. | ||||
| 	LIBNAME="lib${LIBNAME}"     # prefix with "lib" | ||||
|  | ||||
|         if [ $STATIC = 1 ] ; then | ||||
|             echo "mklib: Making Intel ICC static library: " ${LIBNAME}.a | ||||
|             LINK="ar" | ||||
|             OPTS="-ruv" | ||||
|             if [ "${ALTOPTS}" ] ; then | ||||
|                 OPTS=${ALTOPTS} | ||||
|             fi | ||||
|             # make lib | ||||
|             ${LINK} ${OPTS} ${LIBNAME}.a ${OBJECTS} | ||||
|             # finish up | ||||
|             FINAL_LIBS="${LIBNAME}.a" | ||||
|         else | ||||
|             if [ $ARCH = icc-istatic ] ; then | ||||
|                  OPTS="-shared -i-static -cxxlib-icc" | ||||
|             else | ||||
|                  OPTS="-shared" | ||||
|             fi | ||||
|             if [ "${ALTOPTS}" ] ; then | ||||
|                 OPTS=${ALTOPTS} | ||||
|             fi | ||||
|             VERSION="${MAJOR}.${MINOR}.${PATCH}" | ||||
|             echo "mklib: Making Intel ICC shared library: " ${LIBNAME}.so.${VERSION} | ||||
|  | ||||
|             if [ $CPLUSPLUS = 1 ] ; then | ||||
|                 LINK="icpc" | ||||
|             else | ||||
|                 LINK="icc" | ||||
|             fi | ||||
|             # rm any old libs | ||||
|             rm -f ${LIBNAME}.so.${VERSION} | ||||
|             rm -f ${LIBNAME}.so.${MAJOR} | ||||
|             rm -f ${LIBNAME}.so | ||||
|             # make lib | ||||
|             ${LINK} ${OPTS} ${LDFLAGS} -o ${LIBNAME}.so.${VERSION} ${OBJECTS} ${DEPS} | ||||
|             # make usual symlinks | ||||
|             ln -s ${LIBNAME}.so.${VERSION} ${LIBNAME}.so.${MAJOR} | ||||
|             ln -s ${LIBNAME}.so.${MAJOR} ${LIBNAME}.so | ||||
|             # finish up | ||||
|             FINAL_LIBS="${LIBNAME}.so.${VERSION} ${LIBNAME}.so.${MAJOR} ${LIBNAME}.so" | ||||
|         fi | ||||
| 	;; | ||||
|  | ||||
|     'aix-gcc') | ||||
| 	# AIX with gcc | ||||
|         if [ $STATIC = 1 ] ; then | ||||
| 	    LIBNAME="lib${LIBNAME}.a" | ||||
| 	    echo "mklib: Making AIX GCC static library: " ${LIBNAME} | ||||
| 	    rm -f ${LIBNAME} | ||||
| 	    ar ru ${LIBNAME} ${OBJECTS} | ||||
| 	    FINAL_LIBS=${LIBNAME} | ||||
| 	else | ||||
| 	    LIBNAME="lib${LIBNAME}.so"  # prefix with "lib", suffix with ".so" | ||||
| 	    echo "mklib: Making AIX GCC shared library: " ${LIBNAME} | ||||
| 	    # remove old lib | ||||
| 	    rm -f ${LIBNAME} | ||||
| 	    # make the lib | ||||
| 	    gcc -shared -Wl,-G ${OBJECTS} ${DEPS} -o ${LIBNAME} | ||||
| 	    # NOTE: the application linking with this library must specify | ||||
| 	    # the -Wl,-brtl flags to gcc | ||||
| 	    FINAL_LIBS=${LIBNAME} | ||||
| 	fi | ||||
| 	;; | ||||
|  | ||||
|     'ultrix') | ||||
| 	# XXX untested | ||||
|         if [ $STATIC = 0 ] ; then | ||||
| 	    echo "mklib: Warning shared libs not supported on Ultrix" | ||||
| 	fi | ||||
| 	LIBNAME="lib${LIBNAME}.a" | ||||
| 	echo "mklib: Making static library for Ultrix: " ${LIBNAME} | ||||
| 	rm -f ${LIBNAME} | ||||
| 	ar ru ${LIBNAME} ${OBJECTS} | ||||
| 	FINAL_LIBS="${LIBNAME}" | ||||
| 	;; | ||||
|  | ||||
|      CYGWIN*) | ||||
| 	# GCC-based environment | ||||
| 	CYGNAME="cyg${LIBNAME}"     # prefix with "cyg" | ||||
| 	LIBNAME="lib${LIBNAME}"     # prefix with "lib" | ||||
|  | ||||
|         if [ $STATIC = 1 ] ; then | ||||
|             echo "mklib: Making" $ARCH "static library: " ${LIBNAME}.a | ||||
|             LINK="ar" | ||||
|             OPTS="-ru" | ||||
|             if [ "${ALTOPTS}" ] ; then | ||||
|                 OPTS=${ALTOPTS} | ||||
|             fi | ||||
|             # make lib | ||||
|             ${LINK} ${OPTS} ${LIBNAME}.a ${OBJECTS} | ||||
| 	    ranlib ${LIBNAME}.a | ||||
|             # finish up | ||||
|             FINAL_LIBS=${LIBNAME}.a | ||||
|         else | ||||
| 	    OPTS="-shared -Wl,-export-all -Wl,--out-implib=${LIBNAME}-${MAJOR}.dll.a" | ||||
|             if [ "${ALTOPTS}" ] ; then | ||||
|                 OPTS=${ALTOPTS} | ||||
|             fi | ||||
|             echo "mklib: Making" $ARCH "shared library: " ${LIBNAME}-${MAJOR}.dll | ||||
|  | ||||
|             if [ $CPLUSPLUS = 1 ] ; then | ||||
|                 LINK="g++" | ||||
|             else | ||||
|                 LINK="gcc" | ||||
|             fi | ||||
|  | ||||
|             # rm any old libs | ||||
|             rm -f ${LIBNAME}-${MAJOR}.dll | ||||
|             rm -f ${LIBNAME}.dll.a | ||||
|             rm -f ${LIBNAME}.a | ||||
|  | ||||
|             # make lib | ||||
|             ${LINK} ${OPTS} ${LDFLAGS} -o ${CYGNAME}-${MAJOR}.dll ${OBJECTS} ${DEPS} | ||||
|             # make usual symlinks | ||||
|             ln -s ${LIBNAME}-${MAJOR}.dll.a ${LIBNAME}.dll.a | ||||
|             # finish up | ||||
|             FINAL_LIBS="${LIBNAME}-${MAJOR}.dll.a ${LIBNAME}.dll.a" | ||||
| 	    # special case for installing in bin | ||||
|             FINAL_BINS="${CYGNAME}-${MAJOR}.dll" | ||||
|         fi | ||||
| 	;; | ||||
|  | ||||
|     'example') | ||||
| 	# If you're adding support for a new architecture, you can | ||||
| 	# start with this: | ||||
|         if [ $STATIC = 1 ] ; then | ||||
| 	    LIBNAME="lib${LIBNAME}.a" | ||||
| 	    echo "mklib: Making static library for example arch: " ${LIBNAME} | ||||
| 	    rm -f ${LIBNAME} | ||||
| 	    ar rv ${LIBNAME} ${OBJECTS} | ||||
| 	    FINAL_LIBS="${LIBNAME}" | ||||
| 	else | ||||
| 	    LIBNAME="lib${LIBNAME}.so"  # prefix with "lib", suffix with ".so" | ||||
| 	    echo "mklib: Making shared library for example arch: " ${LIBNAME} | ||||
| 	    ld -o ${LIBNAME} ${OBJECTS} ${DEPS} | ||||
| 	    FINAL_LIBS="${LIBNAME}" | ||||
| 	fi | ||||
| 	;; | ||||
|  | ||||
|     *) | ||||
| 	echo "mklib: ERROR: Don't know how to make a static/shared library for" ${ARCH} | ||||
| 	echo "mklib: Please add necessary commands to mklib script." | ||||
| 	;; | ||||
| esac | ||||
|  | ||||
|  | ||||
| # | ||||
| # Put library files into installation directory if specified. | ||||
| # | ||||
| if [ ${INSTALLDIR} != "." ] ; then | ||||
|     echo "mklib: Installing" ${FINAL_LIBS} "in" ${INSTALLDIR} | ||||
|     mv ${FINAL_LIBS} ${INSTALLDIR}/ | ||||
| fi | ||||
| @@ -1,251 +0,0 @@ | ||||
| #!/usr/bin/env python | ||||
| # | ||||
| # Copyright 2012 VMware Inc | ||||
| # Copyright 2008-2009 Jose Fonseca | ||||
| # | ||||
| # 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. | ||||
| # | ||||
|  | ||||
| """Perf annotate for JIT code. | ||||
|  | ||||
| Linux `perf annotate` does not work with JIT code.  This script takes the data | ||||
| produced by `perf script` command, plus the diassemblies outputed by gallivm | ||||
| into /tmp/perf-XXXXX.map.asm and produces output similar to `perf annotate`. | ||||
|  | ||||
| See docs/llvmpipe.html for usage instructions. | ||||
|  | ||||
| The `perf script` output parser was derived from the gprof2dot.py script. | ||||
| """ | ||||
|  | ||||
|  | ||||
| import sys | ||||
| import os.path | ||||
| import re | ||||
| import optparse | ||||
| import subprocess | ||||
|  | ||||
|  | ||||
| class Parser: | ||||
|     """Parser interface.""" | ||||
|  | ||||
|     def __init__(self): | ||||
|         pass | ||||
|  | ||||
|     def parse(self): | ||||
|         raise NotImplementedError | ||||
|  | ||||
|  | ||||
| class LineParser(Parser): | ||||
|     """Base class for parsers that read line-based formats.""" | ||||
|  | ||||
|     def __init__(self, file): | ||||
|         Parser.__init__(self) | ||||
|         self._file = file | ||||
|         self.__line = None | ||||
|         self.__eof = False | ||||
|         self.line_no = 0 | ||||
|  | ||||
|     def readline(self): | ||||
|         line = self._file.readline() | ||||
|         if not line: | ||||
|             self.__line = '' | ||||
|             self.__eof = True | ||||
|         else: | ||||
|             self.line_no += 1 | ||||
|         self.__line = line.rstrip('\r\n') | ||||
|  | ||||
|     def lookahead(self): | ||||
|         assert self.__line is not None | ||||
|         return self.__line | ||||
|  | ||||
|     def consume(self): | ||||
|         assert self.__line is not None | ||||
|         line = self.__line | ||||
|         self.readline() | ||||
|         return line | ||||
|  | ||||
|     def eof(self): | ||||
|         assert self.__line is not None | ||||
|         return self.__eof | ||||
|  | ||||
|  | ||||
| mapFile = None | ||||
|  | ||||
| def lookupMap(filename, matchSymbol): | ||||
|     global mapFile | ||||
|     mapFile = filename | ||||
|     stream = open(filename, 'rt') | ||||
|     for line in stream: | ||||
|         start, length, symbol = line.split() | ||||
|  | ||||
|         start = int(start, 16) | ||||
|         length = int(length,16) | ||||
|  | ||||
|         if symbol == matchSymbol: | ||||
|             return start | ||||
|  | ||||
|     return None | ||||
|  | ||||
| def lookupAsm(filename, desiredFunction): | ||||
|     stream = open(filename + '.asm', 'rt') | ||||
|     while stream.readline() != desiredFunction + ':\n': | ||||
|         pass | ||||
|  | ||||
|     asm = [] | ||||
|     line = stream.readline().strip() | ||||
|     while line: | ||||
|         addr, instr = line.split(':', 1) | ||||
|         addr = int(addr) | ||||
|         asm.append((addr, instr)) | ||||
|         line = stream.readline().strip() | ||||
|  | ||||
|     return asm | ||||
|  | ||||
|  | ||||
|  | ||||
| samples = {} | ||||
|  | ||||
|  | ||||
| class PerfParser(LineParser): | ||||
|     """Parser for linux perf callgraph output. | ||||
|  | ||||
|     It expects output generated with | ||||
|  | ||||
|         perf record -g | ||||
|         perf script | ||||
|     """ | ||||
|  | ||||
|     def __init__(self, infile, symbol): | ||||
|         LineParser.__init__(self, infile) | ||||
|         self.symbol = symbol | ||||
|  | ||||
|     def readline(self): | ||||
|         # Override LineParser.readline to ignore comment lines | ||||
|         while True: | ||||
|             LineParser.readline(self) | ||||
|             if self.eof() or not self.lookahead().startswith('#'): | ||||
|                 break | ||||
|  | ||||
|     def parse(self): | ||||
|         # read lookahead | ||||
|         self.readline() | ||||
|  | ||||
|         while not self.eof(): | ||||
|             self.parse_event() | ||||
|  | ||||
|         asm = lookupAsm(mapFile, self.symbol) | ||||
|  | ||||
|         addresses = samples.keys() | ||||
|         addresses.sort() | ||||
|         total_samples = 0 | ||||
|  | ||||
|         sys.stdout.write('%s:\n' % self.symbol) | ||||
|         for address, instr in asm: | ||||
|             try: | ||||
|                 sample = samples.pop(address) | ||||
|             except KeyError: | ||||
|                 sys.stdout.write(6*' ') | ||||
|             else: | ||||
|                 sys.stdout.write('%6u' % (sample)) | ||||
|                 total_samples += sample | ||||
|             sys.stdout.write('%6u: %s\n' % (address, instr)) | ||||
|         print 'total:', total_samples | ||||
|         assert len(samples) == 0 | ||||
|  | ||||
|         sys.exit(0) | ||||
|  | ||||
|     def parse_event(self): | ||||
|         if self.eof(): | ||||
|             return | ||||
|  | ||||
|         line = self.consume() | ||||
|         assert line | ||||
|  | ||||
|         callchain = self.parse_callchain() | ||||
|         if not callchain: | ||||
|             return | ||||
|  | ||||
|     def parse_callchain(self): | ||||
|         callchain = [] | ||||
|         while self.lookahead(): | ||||
|             function = self.parse_call(len(callchain) == 0) | ||||
|             if function is None: | ||||
|                 break | ||||
|             callchain.append(function) | ||||
|         if self.lookahead() == '': | ||||
|             self.consume() | ||||
|         return callchain | ||||
|  | ||||
|     call_re = re.compile(r'^\s+(?P<address>[0-9a-fA-F]+)\s+(?P<symbol>.*)\s+\((?P<module>[^)]*)\)$') | ||||
|  | ||||
|     def parse_call(self, first): | ||||
|         line = self.consume() | ||||
|         mo = self.call_re.match(line) | ||||
|         assert mo | ||||
|         if not mo: | ||||
|             return None | ||||
|  | ||||
|         if not first: | ||||
|             return None | ||||
|  | ||||
|         function_name = mo.group('symbol') | ||||
|         if not function_name: | ||||
|             function_name = mo.group('address') | ||||
|  | ||||
|         module = mo.group('module') | ||||
|  | ||||
|         function_id = function_name + ':' + module | ||||
|  | ||||
|         address = mo.group('address') | ||||
|         address = int(address, 16) | ||||
|  | ||||
|         if function_name != self.symbol: | ||||
|             return None | ||||
|  | ||||
|         start_address = lookupMap(module, function_name) | ||||
|         address -= start_address | ||||
|  | ||||
|         #print function_name, module, address | ||||
|  | ||||
|         samples[address] = samples.get(address, 0) + 1 | ||||
|  | ||||
|         return True | ||||
|  | ||||
|  | ||||
| def main(): | ||||
|     """Main program.""" | ||||
|  | ||||
|     optparser = optparse.OptionParser( | ||||
|         usage="\n\t%prog [options] symbol_name") | ||||
|     (options, args) = optparser.parse_args(sys.argv[1:]) | ||||
|     if len(args) != 1: | ||||
|         optparser.error('wrong number of arguments') | ||||
|  | ||||
|     symbol = args[0] | ||||
|  | ||||
|     p = subprocess.Popen(['perf', 'script'], stdout=subprocess.PIPE, stderr=subprocess.PIPE) | ||||
|     parser = PerfParser(p.stdout, symbol) | ||||
|     parser.parse() | ||||
|  | ||||
|  | ||||
| if __name__ == '__main__': | ||||
|     main() | ||||
|  | ||||
|  | ||||
| # vim: set sw=4 et: | ||||
| @@ -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() | ||||
| @@ -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() | ||||
Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user