Compare commits
	
		
			120 Commits
		
	
	
		
			mesa-20.0.
			...
			mesa_5_0_1
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|  | 6faeeb59ba | ||
|  | 0670bb52e2 | ||
|  | 42ed7b78c3 | ||
|  | c44e5d39a5 | ||
|  | af709ec217 | ||
|  | c6c35a0d7e | ||
|  | 4ccebff103 | ||
|  | 0a89996605 | ||
|  | 3bff7aed0e | ||
|  | 605b7859c2 | ||
|  | bc0359a076 | ||
|  | 6677a919f1 | ||
|  | b099d2137e | ||
|  | b58c0dec59 | ||
|  | 9935d3434d | ||
|  | b28cbbf5a4 | ||
|  | a5213e2cac | ||
|  | e62a6bdb3a | ||
|  | 7709bd06f2 | ||
|  | 4b3f54ecb1 | ||
|  | 3a55d83d21 | ||
|  | 6899598be8 | ||
|  | 88db8b061b | ||
|  | 8b0f7c5ab7 | ||
|  | 683dba1164 | ||
|  | 4965446dbd | ||
|  | 9c3b611b85 | ||
|  | 48f8949cd2 | ||
|  | cd4fc963a4 | ||
|  | c24d9b330e | ||
|  | 62968d677c | ||
|  | 5e4a96980e | ||
|  | 6397f53174 | ||
|  | 3de75f6f68 | ||
|  | d1f324a779 | ||
|  | 3442cd9a9f | ||
|  | 324616ed83 | ||
|  | 6c59c0b9ec | ||
|  | 2ccb06cb4e | ||
|  | 7b1b099af3 | ||
|  | 6accaacbed | ||
|  | 30beb26dbb | ||
|  | 735a8aee5a | ||
|  | 764b1d5455 | ||
|  | b87a9089da | ||
|  | 69a4ff186a | ||
|  | d16d5fb06a | ||
|  | 8fee42cd6f | ||
|  | 34af895a99 | ||
|  | 4c5745b081 | ||
|  | dd2f83fb0e | ||
|  | 379c151989 | ||
|  | 379412994f | ||
|  | c5e6bd00be | ||
|  | bf490e3ae5 | ||
|  | 984f7e5324 | ||
|  | 7a23c68f35 | ||
|  | cb2eaf84a3 | ||
|  | 8829f949f8 | ||
|  | 015c4787d7 | ||
|  | 19c628d279 | ||
|  | 50bfa18670 | ||
|  | 57f9dc808a | ||
|  | ef2d42b144 | ||
|  | e3aa4c1d98 | ||
|  | d7facf95f8 | ||
|  | 3543b12519 | ||
|  | cfdb6711f8 | ||
|  | 283eab087b | ||
|  | 9c04e1c1d9 | ||
|  | 16a832fa89 | ||
|  | 5b8c98abee | ||
|  | 8126d169ec | ||
|  | 27a2f9fdfd | ||
|  | ad6514aac0 | ||
|  | de0c25a481 | ||
|  | a77151fb44 | ||
|  | df27002ac9 | ||
|  | 7e07dfb604 | ||
|  | 76cb735d0c | ||
|  | 530ce7f0ed | ||
|  | d856a056d3 | ||
|  | 7e7415fbab | ||
|  | 789d79e882 | ||
|  | 0e4e3606a3 | ||
|  | b53092916f | ||
|  | 92b132b966 | ||
|  | a5eb3c6a37 | ||
|  | 050268971b | ||
|  | dbdc9e92b5 | ||
|  | ca3d8e4605 | ||
|  | fc16876967 | ||
|  | 83666eb33f | ||
|  | adbf94ca38 | ||
|  | 7b3a50acf1 | ||
|  | 4396dd1a3b | ||
|  | 8f5f0fd6f8 | ||
|  | ce733f495e | ||
|  | b0e246bf9a | ||
|  | 7ffbdc48b6 | ||
|  | bd77908248 | ||
|  | b319c105ea | ||
|  | a987857ca5 | ||
|  | b6af31d4c6 | ||
|  | 3cfadcf097 | ||
|  | 10174c5efd | ||
|  | f24e9c8ad7 | ||
|  | 8f47c7f0df | ||
|  | dce96e2450 | ||
|  | c264409c46 | ||
|  | 83df49f95d | ||
|  | ffb4ef6929 | ||
|  | 1f7aeedf55 | ||
|  | 2e5a88ab6a | ||
|  | d520ff08d0 | ||
|  | ef0e1dcc2e | ||
|  | 6412641b19 | ||
|  | 3ee066b48f | ||
|  | 33c0b3e233 | ||
|  | 658145bd82 | 
| @@ -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
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										4
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							| @@ -1,4 +0,0 @@ | ||||
| *.pyc | ||||
| *.pyo | ||||
| *.out | ||||
| build | ||||
							
								
								
									
										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,205 +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.1 | ||||
| dEQP-GLES2.functional.shaders.random.trigonometric.fragment.65 | ||||
| dEQP-GLES2.functional.shaders.random.trigonometric.fragment.69 | ||||
| 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,46 +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.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.random.exponential.fragment.94 | ||||
| dEQP-GLES2.functional.shaders.random.all_features.fragment.55 | ||||
| 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 | ||||
|  | ||||
| # 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> | ||||
							
								
								
									
										2594
									
								
								.pick_status.json
									
									
									
									
									
								
							
							
						
						
									
										2594
									
								
								.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)) | ||||
							
								
								
									
										118
									
								
								Android.mk
									
									
									
									
									
								
							
							
						
						
									
										118
									
								
								Android.mk
									
									
									
									
									
								
							| @@ -1,118 +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 | ||||
|  | ||||
| # 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) | ||||
							
								
								
									
										1636
									
								
								Make-config
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1636
									
								
								Make-config
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										773
									
								
								Makefile.X11
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										773
									
								
								Makefile.X11
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,773 @@ | ||||
| # $Id: Makefile.X11,v 1.69.2.4 2003/03/11 15:34:29 brianp Exp $ | ||||
|  | ||||
| # Mesa 3-D graphics library | ||||
| # Version:  5.0.1 | ||||
| #  | ||||
| # Copyright (C) 1999-2003  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. | ||||
|  | ||||
|  | ||||
| # Top-level makefile for Mesa | ||||
| # To add a new configuration for your system add it to the list below | ||||
| # then update the Make-config file. | ||||
|  | ||||
| SHELL = /bin/sh | ||||
|  | ||||
|  | ||||
|  | ||||
| default: | ||||
| 	@echo "Type one of the following:" | ||||
| 	@echo "  make aix                  for IBM RS/6000 with AIX" | ||||
| 	@echo "  make aix-sl               for IBM RS/6000, make shared libs" | ||||
| 	@echo "  make amiwin               for Amiga with SAS/C and AmiWin" | ||||
| 	@echo "  make amix                 for Amiga 3000 UX  SVR4 v2.1 systems" | ||||
| 	@echo "  make beos-r4              for BeOS R4" | ||||
| 	@echo "  make bsdos                for BSD/OS from BSDI using GCC" | ||||
| 	@echo "  make bsdos4               for BSD/OS 4.x, dynamic libraries" | ||||
| 	@echo "  make cygnus               for Win95/NT using Cygnus-Win32" | ||||
| 	@echo "  make cygnus-linux         for Win95/NT using Cygnus-Win32 under Linux" | ||||
| 	@echo "  make darwin               for Darwin - Mac OS X" | ||||
| 	@echo "  make dgux                 for Data General" | ||||
| 	@echo "  make freebsd              for FreeBSD systems with GCC" | ||||
| 	@echo "  make freebsd-386          for FreeBSD systems with GCC, w/ Intel assembly" | ||||
| 	@echo "  make gcc                  for a generic system with GCC" | ||||
| 	@echo "  make hpux9                for HP systems with HPUX 9.x" | ||||
| 	@echo "  make hpux9-sl             for HP systems with HPUX 9.x, make shared libs" | ||||
| 	@echo "  make hpux9-gcc            for HP systems with HPUX 9.x using GCC" | ||||
| 	@echo "  make hpux9-gcc-sl         for HP systems with HPUX 9.x, GCC, make shared libs" | ||||
| 	@echo "  make hpux10               for HP systems with HPUX 10.x and 11.x" | ||||
| 	@echo "  make hpux10-sl            for HP systems with HPUX 10.x and 11.x, shared libs" | ||||
| 	@echo "  make hpux10-gcc           for HP systems with HPUX 10.x w/ GCC" | ||||
| 	@echo "  make hpux10-gcc-sl        for HP systems with HPUX 10.x w/ GCC, shared libs" | ||||
| 	@echo "  make irix4                for SGI systems with IRIX 4.x" | ||||
| 	@echo "  make irix5                for SGI systems with IRIX 5.x" | ||||
| 	@echo "  make irix5-gcc            for SGI systems with IRIX 5.x using GCC" | ||||
| 	@echo "  make irix5-dso            for SGI systems with IRIX 5.x, make DSOs" | ||||
| 	@echo "  make irix6-o32            for SGI systems with IRIX 6.x, make o32-bit libs" | ||||
| 	@echo "  make irix6-o32-dso        for SGI systems with IRIX 6.x, make o32-bit DSOs" | ||||
| 	@echo "  make irix6-n32            for SGI systems with IRIX 6.x, make n32-bit libs" | ||||
| 	@echo "  make irix6-n32-dso        for SGI systems with IRIX 6.x, make n32-bit DSOs" | ||||
| 	@echo "  make irix6-gcc-n32-sl     for SGI systems with IRIX 6.x, GCC, make n32 DSOs" | ||||
| 	@echo "  make irix6-64             for SGI systems with IRIX 6.x, make 64-bit libs" | ||||
| 	@echo "  make irix6-64-dso         for SGI systems with IRIX 6.x, make 64-bit DSOs" | ||||
|  | ||||
| 	@echo "  make linux                for Linux systems, make shared .so libs" | ||||
| 	@echo "  make linux-static         for Linux systems, make static .a libs" | ||||
| 	@echo "  make linux-trace          for Linux systems, with API trace extension" | ||||
| 	@echo "  make linux-x86            for Linux on Intel, make shared .so libs" | ||||
| 	@echo "  make linux-x86-static     for Linux on Intel, make static .a libs" | ||||
| 	@echo "  make linux-ggi            for Linux systems with libggi" | ||||
| 	@echo "  make linux-386-ggi        for Linux systems with libggi w/ Intel assembly" | ||||
| 	@echo "  make linux-glide          for Linux w/ 3Dfx Glide driver" | ||||
| 	@echo "  make linux-386-glide      for Linux w/ 3Dfx Glide driver, Intel assembly" | ||||
| 	@echo "  make linux-386-opt-glide  for Linux with 3Dfx Voodoo1 for GLQuake" | ||||
| 	@echo "  make linux-x86-glide      for Linux w/ all x86 asm for Glide" | ||||
| 	@echo "  make linux-alpha          for Linux on Alpha systems" | ||||
| 	@echo "  make linux-alpha-static   for Linux on Alpha systems, static libs" | ||||
| 	@echo "  make linux-ppc            for Linux on PowerPC systems" | ||||
| 	@echo "  make linux-ppc-static     for Linux on PowerPC systems, static libs" | ||||
| 	@echo "  make linux-sparc          for Linux on Sparc systems" | ||||
| 	@echo "  make linux-sparc5-elf     for Sparc5 systems, make ELF shared libs" | ||||
| 	@echo "  make linux-sparc-ultra    for UltraSparc systems, make ELF shared libs" | ||||
| 	@echo "  make linux-osmesa16       for 16-bit/channel OSMesa" | ||||
| 	@echo "  make linux-osmesa32       for 32-bit/channel OSMesa" | ||||
| 	@echo "  make linux-icc            for Linux with the Intel C/C++ compiler" | ||||
| 	@echo "  make lynxos               for LynxOS systems with GCC" | ||||
| 	@echo "  make macintosh            for Macintosh" | ||||
| 	@echo "  make machten-2.2          for Macs w/ MachTen 2.2 (68k w/ FPU)" | ||||
| 	@echo "  make machten-4.0          for Macs w/ MachTen 4.0.1 or newer with GNU make" | ||||
| 	@echo "  make mklinux              for Linux on Power Macintosh" | ||||
| 	@echo "  make netbsd               for NetBSD 1.0 systems with GCC" | ||||
| 	@echo "  make next                 for NeXT systems with NEXTSTEP 3.3" | ||||
| 	@echo "  make openbsd              for OpenBSD systems" | ||||
| 	@echo "  make openstep             for OpenStep/MacOSX Server systems" | ||||
| 	@echo "  make os2-x11              for OS/2 with XFree86" | ||||
| 	@echo "  make osf1                 for DEC Alpha systems with OSF/1" | ||||
| 	@echo "  make osf1-sl              for DEC Alpha systems with OSF/1, make shared libs" | ||||
| 	@echo "  make pgi-cygnus           for Cygnus with Portland Group, Inc. compiler" | ||||
| 	@echo "  make pgi-mingw32          for mingW32 with Portland Group, Inc. compiler" | ||||
| 	@echo "  make qnx                  for QNX V4 systems with Watcom compiler" | ||||
| 	@echo "  make sco                  for SCO Unix systems with ODT" | ||||
| 	@echo "  make sco5                 for SCO 5.0.5 OpenServer Unix" | ||||
| 	@echo "  make solaris-x86          for PCs with Solaris" | ||||
| 	@echo "  make solaris-x86-gcc      for PCs with Solaris using GCC" | ||||
| 	@echo "  make sunos4               for Suns with SunOS 4.x" | ||||
| 	@echo "  make sunos4-sl            for Suns with SunOS 4.x, make shared libs" | ||||
| 	@echo "  make sunos4-gcc           for Suns with SunOS 4.x and GCC" | ||||
| 	@echo "  make sunos4-gcc-sl        for Suns with SunOS 4.x, GCC, make shared libs" | ||||
| 	@echo "  make sunos5               for Suns with SunOS 5.x" | ||||
| 	@echo "  make sunos5-sl            for Suns with SunOS 5.x, make shared libs" | ||||
| 	@echo "  make sunos5-ultra         for Sun UltraSPARCs with SunOS 5.x" | ||||
| 	@echo "  make sunos5-ultra-sl      for Sun UltraSPARCs with SunOS 5.x, make shared libs" | ||||
| 	@echo "  make sunos5-thread        for Suns with SunOS 5.x, using Solaris threads" | ||||
| 	@echo "  make sunos5-pthread       for Suns with SunOS 5.[56] using POSIX threads" | ||||
| 	@echo "  make sunos5-gcc-thread    for Suns with SunOS 5.x and GCC, using Solaris threads" | ||||
| 	@echo "  make sunos5-gcc-pthread   for Suns with SunOS 5.[56] and GCC, using POSIX threads" | ||||
| 	@echo "  make sunos5-gcc           for Suns with SunOS 5.x and GCC" | ||||
| 	@echo "  make sunos5-gcc-sl        for Suns with SunOS 5.x, GCC, make shared libs" | ||||
| 	@echo "  make sunos5-x11r6-gcc-sl  for Suns with X11R6, GCC, make shared libs" | ||||
| 	@echo "  make sunos5-gcc-thread    for Suns with SunOS 5.x and GCC, using Solaris threads" | ||||
| 	@echo "  make sunos5-gcc-pthread   for Suns with SunOS 5.[56] and GCC, using POSIX threads" | ||||
| 	@echo "  make sunSolaris-CC        for Solaris using C++ compiler" | ||||
| 	@echo "  make ultrix-gcc           for DEC systems with Ultrix and GCC" | ||||
| 	@echo "  make unicos               for Cray C90 (and other?) systems" | ||||
| 	@echo "  make unixware             for PCs running UnixWare" | ||||
| 	@echo "  make unixware-shared      for PCs running UnixWare, shared libs" | ||||
| 	@echo "  make uwin                 for Windows NT with AT&T/Wipro UWIN" | ||||
| 	@echo "  make vistra               for Stardent Vistra systems" | ||||
| 	@echo "  make clean                remove .o files" | ||||
| 	@echo "  make realclean            remove .o, library and executable files" | ||||
|  | ||||
|  | ||||
|  | ||||
| # XXX we may have to split up this group of targets into those that | ||||
| # have a C++ compiler and those that don't for the SI-GLU library. | ||||
|  | ||||
| aix aix-sl amix bsdos bsdos4 darwin dgux freebsd freebsd-386 gcc \ | ||||
| hpux9 hpux9-sl hpux9-gcc hpux9-gcc-sl \ | ||||
| hpux10 hpux10-sl hpux10-gcc hpux10-gcc-sl \ | ||||
| irix4 irix5 irix5-gcc irix5-dso \ | ||||
| linux linux-static linux-debug linux-static-debug linux-prof \ | ||||
| linux-x86 linux-icc linux-x86-static linux-x86-debug \ | ||||
| linux-glide linux-386-glide linux-386-opt-glide \ | ||||
| linux-x86-glide linux-glide-debug linux-glide-prof \ | ||||
| linux-alpha-static linux-alpha \ | ||||
| linux-ppc-static linux-ppc \ | ||||
| linux-sparc \ | ||||
| linux-sparc5-elf \ | ||||
| linux-sparc-ultra \ | ||||
| lynxos machten-2.2 machten-4.0 \ | ||||
| mklinux netbsd osf1 osf1-sl openbsd qnx sco sco5 \ | ||||
| solaris-x86 solaris-x86-gcc sunSolaris-CC \ | ||||
| sunos4 sunos4-sl sunos4-gcc sunos4-gcc-sl sunos4-gcc-x11r6-sl \ | ||||
| sunos5 sunos5-sl sunos5-ultra sunos5-ultra-sl sunos5-gcc sunos5-gcc-sl \ | ||||
| sunos5-thread sunos5-pthread sunos5-gcc-thread sunos5-gcc-pthread \ | ||||
| sunos5-x11r6-gcc-sl ultrix-gcc unicos unixware uwin vistra: | ||||
| 	-mkdir lib | ||||
| 	if [ -d src      ] ; then touch src/depend      ; fi | ||||
| 	if [ -d si-glu   ] ; then touch si-glu/depend  ; fi | ||||
| 	if [ -d src-glut ] ; then touch src-glut/depend ; fi | ||||
| 	if [ -d widgets-sgi ] ; then touch widgets-sgi/depend ; fi | ||||
| 	if [ -d src      ] ; then cd src      ; $(MAKE) -f Makefile.X11 $@ ; fi | ||||
| 	if [ -d si-glu   ] ; then cd si-glu   ; $(MAKE) -f Makefile.X11 $@ ; fi | ||||
| 	if [ -d src-glut ] ; then cd src-glut ; $(MAKE) -f Makefile.X11 $@ ; fi | ||||
| 	if [ -d demos    ] ; then cd demos    ; $(MAKE) -f Makefile.X11 $@ ; fi | ||||
| 	if [ -d xdemos   ] ; then cd xdemos   ; $(MAKE) -f Makefile.X11 $@ ; fi | ||||
| 	if [ -d samples  ] ; then cd samples  ; $(MAKE) -f Makefile.X11 $@ ; fi | ||||
| 	if [ -d book     ] ; then cd book     ; $(MAKE) -f Makefile.X11 $@ ; fi | ||||
| 	if [ -d widgets-sgi ] ; then cd widgets-sgi; $(MAKE) -f Makefile.X11 $@ ; fi | ||||
|  | ||||
| irix6-o32 irix6-o32-dso irix6-n32 irix6-n32-dso irix6-gcc-n32-sl irix-debug: | ||||
| 	-mkdir lib32 | ||||
| 	if [ -d src      ] ; then touch src/depend      ; fi | ||||
| 	if [ -d src-glu  ] ; then touch src-glu/depend  ; fi | ||||
| 	if [ -d src-glut ] ; then touch src-glut/depend ; fi | ||||
| 	if [ -d widgets-sgi ] ; then touch widgets-sgi/depend ; fi | ||||
| 	if [ -d src      ] ; then cd src      ; $(MAKE) -f Makefile.X11 $@ ; fi | ||||
| 	if [ -d src-glu  ] ; then cd src-glu  ; $(MAKE) -f Makefile.X11 $@ ; fi | ||||
| 	if [ -d src-glut ] ; then cd src-glut ; $(MAKE) -f Makefile.X11 $@ ; fi | ||||
| 	if [ -d demos    ] ; then cd demos    ; $(MAKE) -f Makefile.X11 $@ ; fi | ||||
| 	if [ -d xdemos   ] ; then cd xdemos   ; $(MAKE) -f Makefile.X11 $@ ; fi | ||||
| 	if [ -d samples  ] ; then cd samples  ; $(MAKE) -f Makefile.X11 $@ ; fi | ||||
| 	if [ -d book     ] ; then cd book     ; $(MAKE) -f Makefile.X11 $@ ; fi | ||||
| 	if [ -d widgets-sgi ] ; then cd widgets-sgi; $(MAKE) -f Makefile.X11 $@ ; fi | ||||
|  | ||||
|  | ||||
| irix6-64 irix6-64-dso: | ||||
| 	-mkdir lib64 | ||||
| 	touch src/depend | ||||
| 	touch src-glu/depend | ||||
| 	if [ -d src-glut ] ; then touch src-glut/depend ; fi | ||||
| 	if [ -d widgets-sgi ] ; then touch widgets-sgi/depend ; fi | ||||
| 	if [ -d src      ] ; then cd src      ; $(MAKE) -f Makefile.X11 $@ ; fi | ||||
| 	if [ -d src-glu  ] ; then cd src-glu  ; $(MAKE) -f Makefile.X11 $@ ; fi | ||||
| 	if [ -d src-glut ] ; then cd src-glut ; $(MAKE) -f Makefile.X11 $@ ; fi | ||||
| 	if [ -d demos    ] ; then cd demos    ; $(MAKE) -f Makefile.X11 $@ ; fi | ||||
| 	if [ -d xdemos   ] ; then cd xdemos   ; $(MAKE) -f Makefile.X11 $@ ; fi | ||||
| 	if [ -d samples  ] ; then cd samples  ; $(MAKE) -f Makefile.X11 $@ ; fi | ||||
| 	if [ -d book     ] ; then cd book     ; $(MAKE) -f Makefile.X11 $@ ; fi | ||||
| 	if [ -d widgets-sgi ] ; then cd widgets-sgi; $(MAKE) -f Makefile.X11 $@ ; fi | ||||
|  | ||||
|  | ||||
| amiwin: | ||||
| 	bin/mklib.amiwin | ||||
|  | ||||
|  | ||||
| beos-r4: | ||||
| 	-mkdir lib | ||||
| 	-rm src/depend | ||||
| 	touch src/depend | ||||
| 	-rm src-glu/depend | ||||
| 	touch src-glu/depend | ||||
| 	if [ -d src     ] ; then cd src     ; $(MAKE) -f Makefile.BeOS-R4 $@ ; fi | ||||
| 	if [ -d src-glu ] ; then cd src-glu ; $(MAKE) -f Makefile.BeOS-R4 $@ ; fi | ||||
| 	if [ -d BeOS    ] ; then cd BeOS    ; $(MAKE)                        ; fi | ||||
| 	if [ -d src-glut.beos ] ; then cd src-glut.beos ; $(MAKE)            ; fi | ||||
| 	if [ -d src-glut.beos ] ; then cp src-glut.beos/obj*/libglut.so lib  ; fi | ||||
| 	if [ -d demos   ] ; then cd demos   ; $(MAKE) -f Makefile.BeOS-R4 $@ ; fi | ||||
| 	if [ -d samples ] ; then cd samples ; $(MAKE) -f Makefile.BeOS-R4 $@ ; fi | ||||
| 	if [ -d book    ] ; then cd book    ; $(MAKE) -f Makefile.BeOS-R4 $@ ; fi | ||||
|  | ||||
| pgi-cygnus pgi-mingw32 \ | ||||
| cygnus cygnus-linux: | ||||
| 	-mkdir lib | ||||
| 	touch src/depend | ||||
| 	touch src-glu/depend | ||||
| 	if [ -d widgets-sgi ] ; then touch widgets-sgi/depend ; fi | ||||
| 	if [ -d src      ] ; then cd src      ; $(MAKE) -f Makefile.X11 $@ ; fi | ||||
| 	if [ -d src-glu  ] ; then cd src-glu  ; $(MAKE) -f Makefile.X11 $@ ; fi | ||||
| 	if [ -d src-glut ] ; then cd src-glut ; $(MAKE) -f Makefile.X11 $@ ; fi | ||||
| 	if [ -d demos    ] ; then cd demos    ; $(MAKE) -f Makefile.X11 $@ ; fi | ||||
| 	if [ -d xdemos   ] ; then cd xdemos   ; $(MAKE) -f Makefile.X11 $@ ; fi | ||||
| 	if [ -d widgets-sgi ] ; then cd widgets-sgi; $(MAKE) -f Makefile.X11 $@ ; fi | ||||
|  | ||||
| macintosh: | ||||
| 	@echo "See the README file for Macintosh intallation information" | ||||
|  | ||||
| next: | ||||
| 	-mkdir lib | ||||
| 	cd src ; $(MAKE) -f Makefile.X11 "MYCC=${CC}" $@ | ||||
| 	cd src-glu ; $(MAKE) -f Makefile.X11 "MYCC=${CC}" $@ | ||||
|  | ||||
| openstep: | ||||
| 	-mkdir lib | ||||
| 	cd src ; $(MAKE) -f Makefile.X11 "MYCC=${CC}" $@ | ||||
| 	cd src-glu ; $(MAKE) -f Makefile.X11 "MYCC=${CC}" $@ | ||||
|  | ||||
| os2-x11: | ||||
| 	if not EXIST .\lib md lib | ||||
| 	touch src/depend | ||||
| 	touch src-glu/depend | ||||
| 	if exist src-glut touch src-glut/depend | ||||
| 	cd src     & make -f Makefile.X11 $@ | ||||
| 	cd src-glu & make -f Makefile.X11 $@ | ||||
| 	if exist src-glut  cd src-glut & make -f Makefile.X11 $@ | ||||
| 	if exist demos     cd demos    & make -f Makefile.X11 $@ | ||||
| 	if exist xdemos    cd xdemos   & make -f Makefile.X11 $@ | ||||
| 	if exist samples   cd samples  & make -f Makefile.X11 $@ | ||||
| 	if exist book      cd book     & make -f Makefile.X11 $@ | ||||
|  | ||||
| linux-ggi linux-386-ggi: | ||||
| 	-mkdir lib | ||||
| 	touch src/depend | ||||
| 	touch si-glu/depend | ||||
| 	if [ -d src-glut        ] ; then touch src-glut/depend ; fi | ||||
| 	if [ -d widgets-sgi     ] ; then touch widgets-sgi/depend ; fi | ||||
| 	if [ -d ggi             ] ; then touch ggi/depend      ; fi | ||||
| 	if [ -d src             ] ; then cd src ; $(MAKE) -f Makefile.X11 $@ ; fi | ||||
| 	if [ -d src/GGI/default ] ; then cd src/GGI/default ; $(MAKE)      ; fi | ||||
| 	if [ -d src/GGI/display ] ; then cd src/GGI/display ; $(MAKE)      ; fi | ||||
| 	if [ -d si-glu ]   ; then cd si-glu   ; $(MAKE) -f Makefile.X11 $@ ; fi | ||||
| #	if [ -d src-glut ] ; then cd src-glut ; $(MAKE) -f Makefile.X11 $@ ; fi | ||||
| 	if [ -d ggi ]      ; then cd ggi      ; $(MAKE) -f Makefile.X11 $@ ; fi | ||||
| 	if [ -d ggi ]      ; then cd ggi/demos; $(MAKE)                    ; fi | ||||
| 	if [ -d demos ]    ; then cd demos    ; $(MAKE) -f Makefile.X11 $@ ; fi | ||||
| 	if [ -d xdemos ]   ; then cd xdemos   ; $(MAKE) -f Makefile.X11 $@ ; fi | ||||
| 	if [ -d samples ]  ; then cd samples  ; $(MAKE) -f Makefile.X11 $@ ; fi | ||||
| 	if [ -d book ]     ; then cd book     ; $(MAKE) -f Makefile.X11 $@ ; fi | ||||
| 	if [ -d widgets-sgi ] ; then cd widgets-sgi; $(MAKE) -f Makefile.X11 $@ ; fi | ||||
|  | ||||
| # if you change GGI_DEST please change it in ggimesa.conf, too. | ||||
| DESTDIR=/usr/local | ||||
| GGI_DEST=lib/ggi/mesa | ||||
|  | ||||
| linux-ggi-install linux-386-ggi-install: | ||||
| 	install -d $(DESTDIR)/$(GGI_DEST)/default $(DESTDIR)/$(GGI_DEST)/display $(DESTDIR)/etc/ggi | ||||
| 	install -m 0755 src/GGI/default/*.so $(DESTDIR)/$(GGI_DEST)/default | ||||
| 	install -m 0755 src/GGI/display/*.so $(DESTDIR)/$(GGI_DEST)/display | ||||
| 	install -m 0644 src/GGI/ggimesa.conf $(DESTDIR)/etc/ggi | ||||
| #	if [ -z "`grep ggimesa $(DESTDIR)/etc/ggi/libggi.conf`" ]; then \ | ||||
| #	echo ".include $(DESTDIR)/etc/ggi/ggimesa.conf" >> $(DESTDIR)/etc/ggi/libggi.conf ; \ | ||||
| #	fi | ||||
|  | ||||
| linux-osmesa16 linux-osmesa32: | ||||
| 	-mkdir lib | ||||
| 	if [ -d src ] ; then touch src/depend ; fi | ||||
| 	if [ -d src ] ; then cd src ; $(MAKE) -f Makefile.OSMesa16 $@ ; fi | ||||
| 	 | ||||
|  | ||||
| # Remove .o files, emacs backup files, etc. | ||||
| clean: | ||||
| 	-rm -f ggi/*~ *.o | ||||
| 	-rm -f src/GGI/default/*~ *.so | ||||
| 	-rm -f src/GGI/display/*~ *.so | ||||
| 	-rm -f include/*~ | ||||
| 	-rm -f include/GL/*~ | ||||
| 	-rm -f src/*.o src/*~ src/*.a src/*/*.o src/*/*~ | ||||
| 	-rm -f src-glu/*.o src-glu/*~ src-glu/*.a | ||||
| 	-rm -f si-glu/*/*.o si-glu/*/*/*.o | ||||
| 	-rm -f src-glut/*.o | ||||
| 	-rm -f demos/*.o | ||||
| 	-rm -f book/*.o book/*~ | ||||
| 	-rm -f xdemos/*.o xdemos/*~ | ||||
| 	-rm -f samples/*.o samples/*~ | ||||
| 	-rm -f ggi/*.o ggi/demos/*.o ggi/*.a | ||||
| 	-rm -f widgets-sgi/*.o | ||||
| 	-rm -f widgets-mesa/*/*.o | ||||
|  | ||||
| # Remove everything that can be remade | ||||
| realclean: clean | ||||
| 	-rm -fr lib lib32 lib64 | ||||
| 	cd demos       && $(MAKE) -f Makefile.X11 realclean || true | ||||
| 	cd xdemos      && $(MAKE) -f Makefile.X11 realclean || true | ||||
| 	cd book        && $(MAKE) -f Makefile.X11 realclean || true | ||||
| 	cd samples     && $(MAKE) -f Makefile.X11 realclean || true | ||||
|  | ||||
|  | ||||
| DIRECTORY = Mesa-5.0.1 | ||||
| LIB_NAME = MesaLib-5.0.1 | ||||
| DEMO_NAME = MesaDemos-5.0.1 | ||||
| GLU_NAME = MesaGLU-5.0.1 | ||||
| GLUT_NAME = GLUT-3.7 | ||||
|  | ||||
|  | ||||
| LIB_FILES =	\ | ||||
| 	$(DIRECTORY)/Makefile*						\ | ||||
| 	$(DIRECTORY)/Make-config					\ | ||||
| 	$(DIRECTORY)/acconfig.h						\ | ||||
| 	$(DIRECTORY)/acinclude.m4					\ | ||||
| 	$(DIRECTORY)/aclocal.m4						\ | ||||
| 	$(DIRECTORY)/common_rules.make					\ | ||||
| 	$(DIRECTORY)/conf.h.in						\ | ||||
| 	$(DIRECTORY)/config.guess					\ | ||||
| 	$(DIRECTORY)/config.sub						\ | ||||
| 	$(DIRECTORY)/configure						\ | ||||
| 	$(DIRECTORY)/configure.in					\ | ||||
| 	$(DIRECTORY)/install-sh						\ | ||||
| 	$(DIRECTORY)/ltmain.sh						\ | ||||
| 	$(DIRECTORY)/missing						\ | ||||
| 	$(DIRECTORY)/mkinstalldirs					\ | ||||
| 	$(DIRECTORY)/stamp-h.in						\ | ||||
| 	$(DIRECTORY)/docs/CONFORM					\ | ||||
| 	$(DIRECTORY)/docs/COPYING					\ | ||||
| 	$(DIRECTORY)/docs/COPYRIGHT					\ | ||||
| 	$(DIRECTORY)/docs/DEVINFO					\ | ||||
| 	$(DIRECTORY)/docs/INSTALL					\ | ||||
| 	$(DIRECTORY)/docs/INSTALL.GNU					\ | ||||
| 	$(DIRECTORY)/docs/README					\ | ||||
| 	$(DIRECTORY)/docs/README.*					\ | ||||
| 	$(DIRECTORY)/docs/RELNOTES*					\ | ||||
| 	$(DIRECTORY)/docs/VERSIONS					\ | ||||
| 	$(DIRECTORY)/docs/*.spec					\ | ||||
| 	$(DIRECTORY)/bin/README						\ | ||||
| 	$(DIRECTORY)/bin/mklib*						\ | ||||
| 	$(DIRECTORY)/descrip.mms					\ | ||||
| 	$(DIRECTORY)/mms-config						\ | ||||
| 	$(DIRECTORY)/m4/*.m4						\ | ||||
| 	$(DIRECTORY)/xlib.opt						\ | ||||
| 	$(DIRECTORY)/mesawin32.mak					\ | ||||
| 	$(DIRECTORY)/include/GL/internal/glcore.h			\ | ||||
| 	$(DIRECTORY)/include/GL/Makefile.in				\ | ||||
| 	$(DIRECTORY)/include/GL/Makefile.am				\ | ||||
| 	$(DIRECTORY)/include/GL/dmesa.h					\ | ||||
| 	$(DIRECTORY)/include/GL/amesa.h					\ | ||||
| 	$(DIRECTORY)/include/GL/fxmesa.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/mesa_wgl.h				\ | ||||
| 	$(DIRECTORY)/include/GL/mglmesa.h				\ | ||||
| 	$(DIRECTORY)/include/GL/osmesa.h				\ | ||||
| 	$(DIRECTORY)/include/GL/svgamesa.h				\ | ||||
| 	$(DIRECTORY)/include/GL/ugl*.h					\ | ||||
| 	$(DIRECTORY)/include/GL/vms_x_fix.h				\ | ||||
| 	$(DIRECTORY)/include/GL/wmesa.h					\ | ||||
| 	$(DIRECTORY)/include/GL/xmesa.h					\ | ||||
| 	$(DIRECTORY)/include/GL/xmesa_x.h				\ | ||||
| 	$(DIRECTORY)/include/GL/xmesa_xf86.h				\ | ||||
| 	$(DIRECTORY)/include/GLView.h					\ | ||||
| 	$(DIRECTORY)/include/Makefile.in				\ | ||||
| 	$(DIRECTORY)/include/Makefile.am				\ | ||||
| 	$(DIRECTORY)/src/Makefile*					\ | ||||
| 	$(DIRECTORY)/src/libGL_la_SOURCES				\ | ||||
| 	$(DIRECTORY)/src/descrip.mms					\ | ||||
| 	$(DIRECTORY)/src/mesa.conf					\ | ||||
| 	$(DIRECTORY)/src/*.def						\ | ||||
| 	$(DIRECTORY)/src/depend						\ | ||||
| 	$(DIRECTORY)/src/*.[chS]					\ | ||||
| 	$(DIRECTORY)/src/array_cache/*.[ch]				\ | ||||
| 	$(DIRECTORY)/src/array_cache/Makefile*				\ | ||||
| 	$(DIRECTORY)/src/array_cache/libMesaAC_la_SOURCES		\ | ||||
| 	$(DIRECTORY)/src/math/*.[ch]					\ | ||||
| 	$(DIRECTORY)/src/math/Makefile*					\ | ||||
| 	$(DIRECTORY)/src/swrast/*.[ch]					\ | ||||
| 	$(DIRECTORY)/src/swrast/Makefile*				\ | ||||
| 	$(DIRECTORY)/src/swrast/libMesaSwrast_la_SOURCES		\ | ||||
| 	$(DIRECTORY)/src/swrast_setup/*.[ch]				\ | ||||
| 	$(DIRECTORY)/src/swrast_setup/Makefile*				\ | ||||
| 	$(DIRECTORY)/src/tnl/*.[ch]					\ | ||||
| 	$(DIRECTORY)/src/tnl/Makefile*					\ | ||||
| 	$(DIRECTORY)/src/tnl/libMesaTnl_la_SOURCES			\ | ||||
| 	$(DIRECTORY)/src/tnl_dd/*.[ch]					\ | ||||
| 	$(DIRECTORY)/src/tnl_dd/imm/*.[ch]				\ | ||||
| 	$(DIRECTORY)/src/tnl_dd/imm/NOTES.imm				\ | ||||
| 	$(DIRECTORY)/src/windml/*.[ch]					\ | ||||
| 	$(DIRECTORY)/src/windml/tornado/*.c				\ | ||||
| 	$(DIRECTORY)/src/windml/tornado/*.cdf				\ | ||||
| 	$(DIRECTORY)/src/windml/man3/*.3				\ | ||||
| 	$(DIRECTORY)/src/windml/man3/*.html				\ | ||||
| 	$(DIRECTORY)/src/DOS/*.[chS]					\ | ||||
| 	$(DIRECTORY)/src/DOS/mga/*.[ch]					\ | ||||
| 	$(DIRECTORY)/src/BeOS/*.cpp					\ | ||||
| 	$(DIRECTORY)/src/FX/Makefile.am					\ | ||||
| 	$(DIRECTORY)/src/FX/Makefile.in					\ | ||||
| 	$(DIRECTORY)/src/FX/libMesaFX_la_SOURCES			\ | ||||
| 	$(DIRECTORY)/src/FX/*.[ch]					\ | ||||
| 	$(DIRECTORY)/src/FX/*.def					\ | ||||
| 	$(DIRECTORY)/src/FX/X86/Makefile.am				\ | ||||
| 	$(DIRECTORY)/src/FX/X86/Makefile.in				\ | ||||
| 	$(DIRECTORY)/src/FX/X86/*.[Shc]					\ | ||||
| 	$(DIRECTORY)/src/GGI/Makefile.am				\ | ||||
| 	$(DIRECTORY)/src/GGI/Makefile.in				\ | ||||
| 	$(DIRECTORY)/src/GGI/*.[ch]					\ | ||||
| 	$(DIRECTORY)/src/GGI/ggimesa.conf.in				\ | ||||
| 	$(DIRECTORY)/src/GGI/default/*.c				\ | ||||
| 	$(DIRECTORY)/src/GGI/default/Makefile.am			\ | ||||
| 	$(DIRECTORY)/src/GGI/default/Makefile.in			\ | ||||
| 	$(DIRECTORY)/src/GGI/default/genkgi.conf.in			\ | ||||
| 	$(DIRECTORY)/src/GGI/display/*.c				\ | ||||
| 	$(DIRECTORY)/src/GGI/display/Makefile.am			\ | ||||
| 	$(DIRECTORY)/src/GGI/display/Makefile.in			\ | ||||
| 	$(DIRECTORY)/src/GGI/display/fbdev.conf.in			\ | ||||
| 	$(DIRECTORY)/src/GGI/include/Makefile.am			\ | ||||
| 	$(DIRECTORY)/src/GGI/include/Makefile.in			\ | ||||
| 	$(DIRECTORY)/src/GGI/include/ggi/Makefile.am			\ | ||||
| 	$(DIRECTORY)/src/GGI/include/ggi/Makefile.in			\ | ||||
| 	$(DIRECTORY)/src/GGI/include/ggi/mesa/Makefile.am		\ | ||||
| 	$(DIRECTORY)/src/GGI/include/ggi/mesa/Makefile.in		\ | ||||
| 	$(DIRECTORY)/src/GGI/include/ggi/mesa/*.h			\ | ||||
| 	$(DIRECTORY)/src/KNOWN_BUGS					\ | ||||
| 	$(DIRECTORY)/src/OSmesa/Makefile.am				\ | ||||
| 	$(DIRECTORY)/src/OSmesa/Makefile.in				\ | ||||
| 	$(DIRECTORY)/src/OSmesa/Makefile.win				\ | ||||
| 	$(DIRECTORY)/src/OSmesa/osmesa.def				\ | ||||
| 	$(DIRECTORY)/src/OSmesa/*.[ch]					\ | ||||
| 	$(DIRECTORY)/src/SPARC/*.[chS]					\ | ||||
| 	$(DIRECTORY)/src/SPARC/Makefile.am				\ | ||||
| 	$(DIRECTORY)/src/SPARC/Makefile.in				\ | ||||
| 	$(DIRECTORY)/src/SVGA/Makefile.am				\ | ||||
| 	$(DIRECTORY)/src/SVGA/Makefile.in				\ | ||||
| 	$(DIRECTORY)/src/SVGA/*.[ch]					\ | ||||
| 	$(DIRECTORY)/src/Trace/*.[ch]					\ | ||||
| 	$(DIRECTORY)/src/Trace/Makefile.am				\ | ||||
| 	$(DIRECTORY)/src/Trace/Makefile.in				\ | ||||
| 	$(DIRECTORY)/src/Windows/*.[ch]					\ | ||||
| 	$(DIRECTORY)/src/Windows/*.def					\ | ||||
| 	$(DIRECTORY)/src/X/Makefile.am					\ | ||||
| 	$(DIRECTORY)/src/X/Makefile.in					\ | ||||
| 	$(DIRECTORY)/src/X/*.[ch]					\ | ||||
| 	$(DIRECTORY)/src/X86/*.[ch]					\ | ||||
| 	$(DIRECTORY)/src/X86/Makefile.am				\ | ||||
| 	$(DIRECTORY)/src/X86/Makefile.in				\ | ||||
| 	$(DIRECTORY)/src/X86/*.S					\ | ||||
| 	$(DIRECTORY)/si-glu/Makefile.am					\ | ||||
| 	$(DIRECTORY)/si-glu/Makefile.in					\ | ||||
| 	$(DIRECTORY)/si-glu/Makefile.X11				\ | ||||
| 	$(DIRECTORY)/si-glu/Makefile.win				\ | ||||
| 	$(DIRECTORY)/si-glu/Makefile.DJ					\ | ||||
| 	$(DIRECTORY)/si-glu/glu.def					\ | ||||
| 	$(DIRECTORY)/si-glu/dummy.cc					\ | ||||
| 	$(DIRECTORY)/si-glu/descrip.mms					\ | ||||
| 	$(DIRECTORY)/si-glu/mesaglu.opt					\ | ||||
| 	$(DIRECTORY)/si-glu/include/gluos.h				\ | ||||
| 	$(DIRECTORY)/si-glu/include/Makefile.am				\ | ||||
| 	$(DIRECTORY)/si-glu/include/Makefile.in				\ | ||||
| 	$(DIRECTORY)/si-glu/libnurbs/Makefile.am			\ | ||||
| 	$(DIRECTORY)/si-glu/libnurbs/Makefile.in			\ | ||||
| 	$(DIRECTORY)/si-glu/libnurbs/interface/*.h			\ | ||||
| 	$(DIRECTORY)/si-glu/libnurbs/interface/*.cc			\ | ||||
| 	$(DIRECTORY)/si-glu/libnurbs/interface/libNIFac_la_SOURCES	\ | ||||
| 	$(DIRECTORY)/si-glu/libnurbs/interface/Makefile.am		\ | ||||
| 	$(DIRECTORY)/si-glu/libnurbs/interface/Makefile.in		\ | ||||
| 	$(DIRECTORY)/si-glu/libnurbs/internals/*.h			\ | ||||
| 	$(DIRECTORY)/si-glu/libnurbs/internals/*.cc			\ | ||||
| 	$(DIRECTORY)/si-glu/libnurbs/internals/libNInt_la_SOURCES	\ | ||||
| 	$(DIRECTORY)/si-glu/libnurbs/internals/Makefile.am		\ | ||||
| 	$(DIRECTORY)/si-glu/libnurbs/internals/Makefile.in		\ | ||||
| 	$(DIRECTORY)/si-glu/libnurbs/nurbtess/*.h			\ | ||||
| 	$(DIRECTORY)/si-glu/libnurbs/nurbtess/*.cc			\ | ||||
| 	$(DIRECTORY)/si-glu/libnurbs/nurbtess/libNTess_la_SOURCES	\ | ||||
| 	$(DIRECTORY)/si-glu/libnurbs/nurbtess/Makefile.am		\ | ||||
| 	$(DIRECTORY)/si-glu/libnurbs/nurbtess/Makefile.in		\ | ||||
| 	$(DIRECTORY)/si-glu/libtess/README				\ | ||||
| 	$(DIRECTORY)/si-glu/libtess/alg-outline				\ | ||||
| 	$(DIRECTORY)/si-glu/libtess/*.[ch]				\ | ||||
| 	$(DIRECTORY)/si-glu/libtess/libtess_la_SOURCES			\ | ||||
| 	$(DIRECTORY)/si-glu/libtess/Makefile.am				\ | ||||
| 	$(DIRECTORY)/si-glu/libtess/Makefile.in				\ | ||||
| 	$(DIRECTORY)/si-glu/libutil/*.[ch]				\ | ||||
| 	$(DIRECTORY)/si-glu/libutil/libutil_la_SOURCES			\ | ||||
| 	$(DIRECTORY)/si-glu/libutil/Makefile.am				\ | ||||
| 	$(DIRECTORY)/si-glu/libutil/Makefile.in				\ | ||||
| 	$(DIRECTORY)/src-glu/README[12]					\ | ||||
| 	$(DIRECTORY)/src-glu/Makefile*					\ | ||||
| 	$(DIRECTORY)/src-glu/descrip.mms				\ | ||||
| 	$(DIRECTORY)/src-glu/mms_depend					\ | ||||
| 	$(DIRECTORY)/src-glu/*.def					\ | ||||
| 	$(DIRECTORY)/src-glu/depend					\ | ||||
| 	$(DIRECTORY)/src-glu/*.[ch]					\ | ||||
| 	$(DIRECTORY)/widgets-mesa/ChangeLog				\ | ||||
| 	$(DIRECTORY)/widgets-mesa/INSTALL				\ | ||||
| 	$(DIRECTORY)/widgets-mesa/Makefile.in				\ | ||||
| 	$(DIRECTORY)/widgets-mesa/README				\ | ||||
| 	$(DIRECTORY)/widgets-mesa/TODO					\ | ||||
| 	$(DIRECTORY)/widgets-mesa/configure				\ | ||||
| 	$(DIRECTORY)/widgets-mesa/configure.in				\ | ||||
| 	$(DIRECTORY)/widgets-mesa/demos/ChangeLog			\ | ||||
| 	$(DIRECTORY)/widgets-mesa/demos/Cube				\ | ||||
| 	$(DIRECTORY)/widgets-mesa/demos/Ed				\ | ||||
| 	$(DIRECTORY)/widgets-mesa/demos/Makefile.in			\ | ||||
| 	$(DIRECTORY)/widgets-mesa/demos/Mcube				\ | ||||
| 	$(DIRECTORY)/widgets-mesa/demos/Tea				\ | ||||
| 	$(DIRECTORY)/widgets-mesa/demos/*.[ch]				\ | ||||
| 	$(DIRECTORY)/widgets-mesa/demos/events				\ | ||||
| 	$(DIRECTORY)/widgets-mesa/include/GL/ChangeLog			\ | ||||
| 	$(DIRECTORY)/widgets-mesa/include/GL/*.h			\ | ||||
| 	$(DIRECTORY)/widgets-mesa/include/GL/Makefile.in		\ | ||||
| 	$(DIRECTORY)/widgets-mesa/man/ChangeLog				\ | ||||
| 	$(DIRECTORY)/widgets-mesa/man/GL*				\ | ||||
| 	$(DIRECTORY)/widgets-mesa/man/Makefile.in			\ | ||||
| 	$(DIRECTORY)/widgets-mesa/man/Mesa*				\ | ||||
| 	$(DIRECTORY)/widgets-mesa/src/ChangeLog				\ | ||||
| 	$(DIRECTORY)/widgets-mesa/src/*.c				\ | ||||
| 	$(DIRECTORY)/widgets-mesa/src/Makefile.in			\ | ||||
| 	$(DIRECTORY)/widgets-sgi/*.[ch]					\ | ||||
| 	$(DIRECTORY)/widgets-sgi/Makefile*				\ | ||||
| 	$(DIRECTORY)/widgets-sgi/README					\ | ||||
| 	$(DIRECTORY)/util/README					\ | ||||
| 	$(DIRECTORY)/util/Makefile.am					\ | ||||
| 	$(DIRECTORY)/util/Makefile.in					\ | ||||
| 	$(DIRECTORY)/util/*.[ch]					\ | ||||
| 	$(DIRECTORY)/util/sampleMakefile				\ | ||||
| 	$(DIRECTORY)/vms/analyze_map.com				\ | ||||
| 	$(DIRECTORY)/vms/xlib.opt					\ | ||||
| 	$(DIRECTORY)/vms/xlib_share.opt					\ | ||||
| 	$(DIRECTORY)/BeOS/Makefile					\ | ||||
| 	$(DIRECTORY)/BeOS/*.cpp | ||||
|  | ||||
| OBSOLETE_LIB_FILES = \ | ||||
| 	$(DIRECTORY)/src/Allegro/*.[ch]					\ | ||||
| 	$(DIRECTORY)/src/D3D/*.cpp					\ | ||||
| 	$(DIRECTORY)/src/D3D/*.CPP					\ | ||||
| 	$(DIRECTORY)/src/D3D/*.h					\ | ||||
| 	$(DIRECTORY)/src/D3D/*.H					\ | ||||
| 	$(DIRECTORY)/src/D3D/*.c					\ | ||||
| 	$(DIRECTORY)/src/D3D/*.C					\ | ||||
| 	$(DIRECTORY)/src/D3D/MAKEFILE					\ | ||||
| 	$(DIRECTORY)/src/D3D/*bat					\ | ||||
| 	$(DIRECTORY)/src/D3D/*DEF					\ | ||||
| 	$(DIRECTORY)/src/DOS/DEPEND.DOS					\ | ||||
| 	$(DIRECTORY)/src/S3/*.[ch]					\ | ||||
| 	$(DIRECTORY)/src/S3/*.def					\ | ||||
| 	$(DIRECTORY)/src/S3/*.mak					\ | ||||
| 	$(DIRECTORY)/src/S3/*.rc					\ | ||||
| 	$(DIRECTORY)/macos/README					\ | ||||
| 	$(DIRECTORY)/macos/gli_api/*.h					\ | ||||
| 	$(DIRECTORY)/macos/cglpane/CGLPane.*				\ | ||||
| 	$(DIRECTORY)/macos/include-mac/*.h				\ | ||||
| 	$(DIRECTORY)/macos/libraries/*.stub				\ | ||||
| 	$(DIRECTORY)/macos/libraries/*Stub				\ | ||||
| 	$(DIRECTORY)/macos/projects/*.mcp				\ | ||||
| 	$(DIRECTORY)/macos/projects/*.exp				\ | ||||
| 	$(DIRECTORY)/macos/projects/*.h					\ | ||||
| 	$(DIRECTORY)/macos/resources/*.c				\ | ||||
| 	$(DIRECTORY)/macos/resources/*.r				\ | ||||
| 	$(DIRECTORY)/macos/resources/*.rsrc				\ | ||||
| 	$(DIRECTORY)/macos/src-agl/*.exp				\ | ||||
| 	$(DIRECTORY)/macos/src-agl/*.[ch]				\ | ||||
| 	$(DIRECTORY)/macos/src-gli/*.[ch]				\ | ||||
| 	$(DIRECTORY)/OpenStep | ||||
|  | ||||
|  | ||||
|  | ||||
| DEMO_FILES =	\ | ||||
| 	$(DIRECTORY)/include/GL/glut.h		\ | ||||
| 	$(DIRECTORY)/include/GL/glutf90.h	\ | ||||
| 	$(DIRECTORY)/src-glut/Makefile*		\ | ||||
| 	$(DIRECTORY)/src-glut/depend		\ | ||||
| 	$(DIRECTORY)/src-glut/*def		\ | ||||
| 	$(DIRECTORY)/src-glut/descrip.mms	\ | ||||
| 	$(DIRECTORY)/src-glut/mms_depend	\ | ||||
| 	$(DIRECTORY)/src-glut/*.[ch]		\ | ||||
| 	$(DIRECTORY)/src-glut.dos/*.[ch]	\ | ||||
| 	$(DIRECTORY)/src-glut.dos/Makefile.DJ	\ | ||||
| 	$(DIRECTORY)/src-glut.dos/PC_HW/*.[chS]	\ | ||||
| 	$(DIRECTORY)/images/*			\ | ||||
| 	$(DIRECTORY)/demos/Makefile*		\ | ||||
| 	$(DIRECTORY)/demos/descrip.mms		\ | ||||
| 	$(DIRECTORY)/demos/*.[ch]		\ | ||||
| 	$(DIRECTORY)/demos/*.cxx		\ | ||||
| 	$(DIRECTORY)/demos/*.dat		\ | ||||
| 	$(DIRECTORY)/demos/README		\ | ||||
| 	$(DIRECTORY)/xdemos/Makefile*		\ | ||||
| 	$(DIRECTORY)/xdemos/descrip.mms		\ | ||||
| 	$(DIRECTORY)/xdemos/*.[chf]		\ | ||||
| 	$(DIRECTORY)/book/Makefile*		\ | ||||
| 	$(DIRECTORY)/book/README		\ | ||||
| 	$(DIRECTORY)/book/*.[ch]		\ | ||||
| 	$(DIRECTORY)/samples/Makefile*		\ | ||||
| 	$(DIRECTORY)/samples/README		\ | ||||
| 	$(DIRECTORY)/samples/*.c		\ | ||||
| 	$(DIRECTORY)/mtdemos			\ | ||||
| 	$(DIRECTORY)/windmldemos/Makefile.ugl	\ | ||||
| 	$(DIRECTORY)/windmldemos/*.c		\ | ||||
| 	$(DIRECTORY)/windmldemos/*.bmp		\ | ||||
| 	$(DIRECTORY)/ggi | ||||
|  | ||||
| OBSOLETE_DEMO_FILES = \ | ||||
| 	$(DIRECTORY)/include/GL/glut_h.dja	\ | ||||
| 	$(DIRECTORY)/src-glut.dja/*		\ | ||||
| 	$(DIRECTORY)/src-glut.beos/Makefile	\ | ||||
| 	$(DIRECTORY)/src-glut.beos/*.cpp	\ | ||||
| 	$(DIRECTORY)/src-glut.beos/*.h		\ | ||||
|  | ||||
|  | ||||
| SI_GLU_FILES = \ | ||||
| 	$(DIRECTORY)/Makefile*				\ | ||||
| 	$(DIRECTORY)/Make-config			\ | ||||
| 	$(DIRECTORY)/bin/mklib*				\ | ||||
| 	$(DIRECTORY)/include/GL/glu.h			\ | ||||
| 	$(DIRECTORY)/si-glu/Makefile.X11		\ | ||||
| 	$(DIRECTORY)/si-glu/include/gluos.h		\ | ||||
| 	$(DIRECTORY)/si-glu/libnurbs/interface/*.h	\ | ||||
| 	$(DIRECTORY)/si-glu/libnurbs/interface/*.cc	\ | ||||
| 	$(DIRECTORY)/si-glu/libnurbs/internals/*.h	\ | ||||
| 	$(DIRECTORY)/si-glu/libnurbs/internals/*.cc	\ | ||||
| 	$(DIRECTORY)/si-glu/libnurbs/nurbstess/*.h	\ | ||||
| 	$(DIRECTORY)/si-glu/libnurbs/nurbstess/*.cc	\ | ||||
| 	$(DIRECTORY)/si-glu/libtess/README		\ | ||||
| 	$(DIRECTORY)/si-glu/libtess/alg-outline		\ | ||||
| 	$(DIRECTORY)/si-glu/libtess/*.[ch]		\ | ||||
| 	$(DIRECTORY)/si-glu/libutil/*.[ch] | ||||
|  | ||||
| GLU_FILES = \ | ||||
| 	$(DIRECTORY)/Makefile*			\ | ||||
| 	$(DIRECTORY)/Make-config		\ | ||||
| 	$(DIRECTORY)/bin/mklib*			\ | ||||
| 	$(DIRECTORY)/include/GL/gl.h		\ | ||||
| 	$(DIRECTORY)/include/GL/gl_mangle.h	\ | ||||
| 	$(DIRECTORY)/include/GL/glext.h		\ | ||||
| 	$(DIRECTORY)/include/GL/glu.h		\ | ||||
| 	$(DIRECTORY)/include/GL/glu_mangle.h	\ | ||||
| 	$(DIRECTORY)/src-glu/README[12]		\ | ||||
| 	$(DIRECTORY)/src-glu/Makefile*		\ | ||||
| 	$(DIRECTORY)/src-glu/descrip.mms	\ | ||||
| 	$(DIRECTORY)/src-glu/mms_depend		\ | ||||
| 	$(DIRECTORY)/src-glu/*.def		\ | ||||
| 	$(DIRECTORY)/src-glu/depend		\ | ||||
| 	$(DIRECTORY)/src-glu/*.[ch] | ||||
|  | ||||
| GLUT_FILES = \ | ||||
| 	$(DIRECTORY)/Makefile*			\ | ||||
| 	$(DIRECTORY)/Make-config		\ | ||||
| 	$(DIRECTORY)/bin/mklib*			\ | ||||
| 	$(DIRECTORY)/include/GL/gl.h		\ | ||||
| 	$(DIRECTORY)/include/GL/gl_mangle.h	\ | ||||
| 	$(DIRECTORY)/include/GL/glext.h		\ | ||||
| 	$(DIRECTORY)/include/GL/glu.h		\ | ||||
| 	$(DIRECTORY)/include/GL/glu_mangle.h	\ | ||||
| 	$(DIRECTORY)/include/GL/glut.h		\ | ||||
| 	$(DIRECTORY)/include/GL/glutf90.h	\ | ||||
| 	$(DIRECTORY)/src-glut/Makefile*		\ | ||||
| 	$(DIRECTORY)/src-glut/depend		\ | ||||
| 	$(DIRECTORY)/src-glut/*def		\ | ||||
| 	$(DIRECTORY)/src-glut/descrip.mms	\ | ||||
| 	$(DIRECTORY)/src-glut/mms_depend	\ | ||||
| 	$(DIRECTORY)/src-glut/*.[ch] | ||||
|  | ||||
|  | ||||
| OBSOLETE_GLUT_FILES = \ | ||||
| 	$(DIRECTORY)/include/GL/glut_h.dja	\ | ||||
| 	$(DIRECTORY)/src-glut.dja/*		\ | ||||
| 	$(DIRECTORY)/src-glut.beos/Makefile	\ | ||||
| 	$(DIRECTORY)/src-glut.beos/*.cpp	\ | ||||
| 	$(DIRECTORY)/src-glut.beos/*.h | ||||
|  | ||||
|  | ||||
| lib_gz: | ||||
| 	cp Makefile.X11 Makefile ; \ | ||||
| 	cd .. ; \ | ||||
| 	tar -cvf $(LIB_NAME).tar $(LIB_FILES) ; \ | ||||
| 	gzip $(LIB_NAME).tar ; \ | ||||
| 	mv $(LIB_NAME).tar.gz $(DIRECTORY) | ||||
|  | ||||
| demo_gz: | ||||
| 	cd .. ; \ | ||||
| 	tar -cvf $(DEMO_NAME).tar $(DEMO_FILES) ; \ | ||||
| 	gzip $(DEMO_NAME).tar ; \ | ||||
| 	mv $(DEMO_NAME).tar.gz $(DIRECTORY) | ||||
|  | ||||
| lib_bz2: | ||||
| 	cp Makefile.X11 Makefile ; \ | ||||
| 	cd .. ; \ | ||||
| 	tar -cvf $(LIB_NAME).tar $(LIB_FILES) ; \ | ||||
| 	bzip2 $(LIB_NAME).tar ; \ | ||||
| 	mv $(LIB_NAME).tar.bz2 $(DIRECTORY) | ||||
|  | ||||
| demo_bz2: | ||||
| 	cd .. ; \ | ||||
| 	tar -cvf $(DEMO_NAME).tar $(DEMO_FILES) ; \ | ||||
| 	bzip2 $(DEMO_NAME).tar ; \ | ||||
| 	mv $(DEMO_NAME).tar.bz2 $(DIRECTORY) | ||||
|  | ||||
| lib_zip: | ||||
| 	-rm $(LIB_NAME).zip ; \ | ||||
| 	cp Makefile.X11 Makefile ; \ | ||||
| 	cd .. ; \ | ||||
| 	zip -r $(LIB_NAME).zip $(LIB_FILES) ; \ | ||||
| 	mv $(LIB_NAME).zip $(DIRECTORY) | ||||
|  | ||||
| demo_zip: | ||||
| 	-rm $(DEMO_NAME).zip ; \ | ||||
| 	cd .. ; \ | ||||
| 	zip -r $(DEMO_NAME).zip $(DEMO_FILES) ; \ | ||||
| 	mv $(DEMO_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 | ||||
|  | ||||
| # Everything for new Mesa release: | ||||
| tarballs: lib_gz demo_gz lib_bz2 demo_bz2 lib_zip demo_zip md5 | ||||
|  | ||||
|  | ||||
| # not used | ||||
| glu_gz: | ||||
| 	cp Makefile.X11 Makefile ; \ | ||||
| 	cd .. ; \ | ||||
| 	tar -cvf $(GLU_NAME).tar $(GLU_FILES) ; \ | ||||
| 	gzip $(GLU_NAME).tar ; \ | ||||
| 	mv $(GLU_NAME).tar.gz $(DIRECTORY) | ||||
|  | ||||
| glut_gz: | ||||
| 	cp Makefile.X11 Makefile ; \ | ||||
| 	cd .. ; \ | ||||
| 	tar -cvf $(GLUT_NAME).tar $(GLUT_FILES) ; \ | ||||
| 	gzip $(GLUT_NAME).tar ; \ | ||||
| 	mv $(GLUT_NAME).tar.gz $(DIRECTORY) | ||||
							
								
								
									
										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) | ||||
							
								
								
									
										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. | ||||
| @@ -1,2 +0,0 @@ | ||||
| [*.sh] | ||||
| indent_style = tab | ||||
| @@ -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.1' | ||||
|  | ||||
| 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 ${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', 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,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() | ||||
| @@ -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() | ||||
							
								
								
									
										153
									
								
								bin/mklib.aix
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										153
									
								
								bin/mklib.aix
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,153 @@ | ||||
| #!/bin/ksh | ||||
|  | ||||
| # Make an AIX shared library (tricky!!!) | ||||
| # Based on a script from Athanasios G. Gaitatzes (gaitat@vnet.ibm.com) | ||||
| # Improved by Greg Thompson <gregt@visix.com> -gt | ||||
|  | ||||
| #--identification------------------------------------------------------ | ||||
|  | ||||
| # $Id: mklib.aix,v 1.2 1999/09/15 15:10:20 brianp Exp $ | ||||
|  | ||||
| # $Log: mklib.aix,v $ | ||||
| # Revision 1.2  1999/09/15 15:10:20  brianp | ||||
| # added third, tiny version number to arguments | ||||
| # | ||||
| # Revision 1.1  1999/08/19 13:52:56  brianp | ||||
| # initial check-in (post-crash) | ||||
| # | ||||
|  | ||||
|  | ||||
| #--common-------------------------------------------------------------- | ||||
|  | ||||
| LIBRARY=$1 | ||||
| shift 1 | ||||
|  | ||||
| MAJOR=$1 | ||||
| shift 1 | ||||
|  | ||||
| MINOR=$1 | ||||
| shift 1 | ||||
|  | ||||
| TINY=$1 | ||||
| shift 1 | ||||
|  | ||||
| OBJECTS=$* | ||||
|  | ||||
| #--platform------------------------------------------------------------ | ||||
|  | ||||
| # BASENAME = LIBRARY without .a suffix | ||||
| BASENAME=`echo ${LIBRARY} | sed "s/\.a//g"` | ||||
|  | ||||
| # Name of exports file | ||||
| EXPFILE=${BASENAME}.exp | ||||
|  | ||||
| # Name of temporary shared lib file | ||||
| OFILE=shr.o | ||||
| ####OFILE=${BASENAME}.o | ||||
|  | ||||
|  | ||||
| # Remove any old files from previous make | ||||
| rm -f ${LIBRARY} ${EXPFILE} ${OFILE} | ||||
|  | ||||
| # Pick a way to use nm -gt | ||||
| NM=${NM-/bin/nm -eC} | ||||
|  | ||||
| # Determine which version of AIX this is | ||||
| AIXVERSION=`uname -v` | ||||
|  | ||||
| # Pick a way to tell the linker there's no entrypoint -gt | ||||
| case ${AIXVERSION} | ||||
| { | ||||
| 	3*) | ||||
| 		ENTRY='-e _nostart' | ||||
| 		;; | ||||
| 	4*) | ||||
| 		ENTRY=-bnoentry | ||||
| 		;; | ||||
| 	*) | ||||
| 		echo "Error in mklib.aix!" | ||||
| 		exit 1 | ||||
| 		;; | ||||
| } | ||||
|  | ||||
|  | ||||
| # Other libraries which we may be dependent on.  Since we make the libraries | ||||
| # in the order libGL.a, libaGLU.a, libglut.a just depends on its predecessor. | ||||
| # modified to make otherlibs in the form of -lfoo -gt | ||||
| OTHERLIBS=`ls ../lib/*.a | sed "s/..\/lib\/lib/-l/g" | sed "s/\.a//g"` | ||||
|  | ||||
| ##echo OTHERLIBS are ${OTHERLIBS} | ||||
|  | ||||
|  | ||||
| # Make exports (.exp) file header | ||||
| echo "#! ${LIBRARY}" > ${EXPFILE} | ||||
|  | ||||
| # Append list of exported symbols to exports file -gt | ||||
| case ${AIXVERSION} | ||||
| { | ||||
|     3*) | ||||
| 	${NM} ${OBJECTS} | awk -F'|' '{ | ||||
| 	    if ($3 != "extern" || substr($7,1,1) == " ") continue | ||||
| 	    sub ("  *", "", $1); sub ("  *", "", $7) | ||||
| 	    if ( (($7 == ".text") || ($7 == ".data") || ($7 == ".bss"))  \ | ||||
| 		    && ( 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} | ||||
| 	;; | ||||
|  | ||||
|     4*) | ||||
| 	${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} | ||||
| 	;; | ||||
| } | ||||
|  | ||||
|  | ||||
| # This next line is a hack to allow full compatibility with IBM's OpenGL | ||||
| # libraries.  IBM mistakenly exports glLoadIdentity from the libGLU.a | ||||
| # library.  We have to do the same thing.  Problem reported by Yemi Adesanya | ||||
| # (adesanya@afsmail.cern.ch) and Patrick Brown (pbrown@austin.ibm.com) | ||||
| if [ "${BASENAME}" = libGLU ] ; then | ||||
|     echo "glLoadIdentity" >> ${EXPFILE} | ||||
| fi | ||||
|  | ||||
|  | ||||
| # Make the shared lib file | ||||
| cc -o ${OFILE} ${OBJECTS} -L../lib ${OTHERLIBS} -lX11 -lXext -lXmu -lXi -lm -lc -bE:${EXPFILE} -bM:SRE ${ENTRY} | ||||
|  | ||||
|  | ||||
| # Make the .a file | ||||
| ar ruv ${LIBRARY} ${OFILE} | ||||
|  | ||||
| # Put exports file in Mesa lib directory | ||||
| mv ${EXPFILE} ../lib | ||||
|  | ||||
| # Remove OFILE | ||||
| rm -f ${OFILE} | ||||
|  | ||||
|  | ||||
| #NOTES | ||||
| # AIX 4.x /usr/bin/nm -B patch from ssclift@mach.me.queensu.ca (Simon Clift) | ||||
| # Robustified symbol extraction for AIX 3 and 4 | ||||
| #   Greg Thompson <gregt@visix.com> | ||||
|  | ||||
							
								
								
									
										38
									
								
								bin/mklib.ar-ruv
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										38
									
								
								bin/mklib.ar-ruv
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,38 @@ | ||||
| #!/bin/sh | ||||
|  | ||||
| # Make a standard Unix .a library file with 'ar ruv' | ||||
|  | ||||
| #--identification------------------------------------------------------ | ||||
|  | ||||
| # $Id: mklib.ar-ruv,v 1.2 1999/09/15 15:10:20 brianp Exp $ | ||||
|  | ||||
| # $Log: mklib.ar-ruv,v $ | ||||
| # Revision 1.2  1999/09/15 15:10:20  brianp | ||||
| # added third, tiny version number to arguments | ||||
| # | ||||
| # Revision 1.1  1999/08/19 13:52:57  brianp | ||||
| # initial check-in (post-crash) | ||||
| # | ||||
|  | ||||
|  | ||||
| #--common-------------------------------------------------------------- | ||||
|  | ||||
| LIBRARY=$1 | ||||
| shift 1 | ||||
|  | ||||
| MAJOR=$1 | ||||
| shift 1 | ||||
|  | ||||
| MINOR=$1 | ||||
| shift 1 | ||||
|  | ||||
| TINY=$1 | ||||
| shift 1 | ||||
|  | ||||
| OBJECTS=$* | ||||
|  | ||||
| #--platform------------------------------------------------------------- | ||||
|  | ||||
| #ar ruv $LIBRARY $OBJECTS | ||||
| ar ru $LIBRARY $OBJECTS | ||||
|  | ||||
							
								
								
									
										52
									
								
								bin/mklib.solaris
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										52
									
								
								bin/mklib.solaris
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,52 @@ | ||||
| #!/bin/sh | ||||
|  | ||||
| # Make a Solaris shared library | ||||
| # contributed by Arno Hahma (arno@nitro.pp.utu.fi) | ||||
|  | ||||
| #--identification------------------------------------------------------ | ||||
|  | ||||
| # $Id: mklib.solaris,v 1.2 1999/09/15 15:10:20 brianp Exp $ | ||||
|  | ||||
| # $Log: mklib.solaris,v $ | ||||
| # Revision 1.2  1999/09/15 15:10:20  brianp | ||||
| # added third, tiny version number to arguments | ||||
| # | ||||
| # Revision 1.1  1999/08/19 13:53:06  brianp | ||||
| # initial check-in (post-crash) | ||||
| # | ||||
|  | ||||
|  | ||||
| #--common-------------------------------------------------------------- | ||||
|  | ||||
| LIBRARY=$1 | ||||
| shift 1 | ||||
|  | ||||
| MAJOR=$1 | ||||
| shift 1 | ||||
|  | ||||
| MINOR=$1 | ||||
| shift 1 | ||||
|  | ||||
| TINY=$1 | ||||
| shift 1 | ||||
|  | ||||
| OBJECTS=$* | ||||
|  | ||||
| #--platform------------------------------------------------------------- | ||||
|  | ||||
| set -x | ||||
|  | ||||
| LIBRARY=`basename $LIBRARY .a` | ||||
|  | ||||
| VERSION=$MAJOR.$MINOR | ||||
|  | ||||
| echo "Building shared object $LIBRARY.so.$VERSION and the archive library $LIBRARY.a" | ||||
| rm -f ${LIBRARY}.a ${LIBRARY}.so.${VERSION} | ||||
| ar ruv ${LIBRARY}.a ${OBJECTS} | ||||
|  | ||||
| ld -G -o ${LIBRARY}.so.${VERSION} ${OBJECTS} | ||||
|  | ||||
| cp ${LIBRARY}.a ${LIBRARY}.so.${VERSION} ../lib | ||||
| cd ../lib | ||||
| ln -s ${LIBRARY}.so.${VERSION} ${LIBRARY}.so | ||||
|  | ||||
| @@ -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() | ||||
| @@ -1,3 +0,0 @@ | ||||
| { | ||||
| 	radeon_drm_winsys_create; | ||||
| }; | ||||
| @@ -1,6 +0,0 @@ | ||||
| VERSION_1 { | ||||
|     global: | ||||
|         main; | ||||
|     local: | ||||
|         *; | ||||
| }; | ||||
							
								
								
									
										124
									
								
								common.py
									
									
									
									
									
								
							
							
						
						
									
										124
									
								
								common.py
									
									
									
									
									
								
							| @@ -1,124 +0,0 @@ | ||||
| ####################################################################### | ||||
| # Common SCons code | ||||
|  | ||||
| import os | ||||
| import os.path | ||||
| import re | ||||
| import subprocess | ||||
| import sys | ||||
| import platform as _platform | ||||
|  | ||||
| import SCons.Script.SConscript | ||||
|  | ||||
|  | ||||
| ####################################################################### | ||||
| # Defaults | ||||
|  | ||||
| host_platform = _platform.system().lower() | ||||
| if host_platform.startswith('cygwin'): | ||||
|     host_platform = 'cygwin' | ||||
| # MSYS2 default platform selection. | ||||
| if host_platform.startswith('mingw'): | ||||
|     host_platform = 'windows' | ||||
|  | ||||
| # Search sys.argv[] for a "platform=foo" argument since we don't have | ||||
| # an 'env' variable at this point. | ||||
| if 'platform' in SCons.Script.ARGUMENTS: | ||||
|     target_platform = SCons.Script.ARGUMENTS['platform'] | ||||
| else: | ||||
|     target_platform = host_platform | ||||
|  | ||||
| _machine_map = { | ||||
|     'x86': 'x86', | ||||
|     'i386': 'x86', | ||||
|     'i486': 'x86', | ||||
|     'i586': 'x86', | ||||
|     'i686': 'x86', | ||||
|     'BePC': 'x86', | ||||
|     'Intel': 'x86', | ||||
|     'ppc': 'ppc', | ||||
|     'BeBox': 'ppc', | ||||
|     'BeMac': 'ppc', | ||||
|     'AMD64': 'x86_64', | ||||
|     'x86_64': 'x86_64', | ||||
|     'sparc': 'sparc', | ||||
|     'sun4u': 'sparc', | ||||
| } | ||||
|  | ||||
|  | ||||
| # find host_machine value | ||||
| if 'PROCESSOR_ARCHITECTURE' in os.environ: | ||||
|     host_machine = os.environ['PROCESSOR_ARCHITECTURE'] | ||||
| else: | ||||
|     host_machine = _platform.machine() | ||||
| host_machine = _machine_map.get(host_machine, 'generic') | ||||
| # MSYS2 default machine selection. | ||||
| if _platform.system().lower().startswith('mingw') and 'MSYSTEM' in os.environ: | ||||
|     if os.environ['MSYSTEM'] == 'MINGW32': | ||||
|         host_machine = 'x86' | ||||
|     if os.environ['MSYSTEM'] == 'MINGW64': | ||||
|         host_machine = 'x86_64' | ||||
|  | ||||
| default_machine = host_machine | ||||
| default_toolchain = 'default' | ||||
| # MSYS2 default toolchain selection. | ||||
| if _platform.system().lower().startswith('mingw'): | ||||
|     default_toolchain = 'mingw' | ||||
|  | ||||
| if target_platform == 'windows' and host_platform != 'windows': | ||||
|     default_machine = 'x86' | ||||
|     default_toolchain = 'crossmingw' | ||||
|  | ||||
|  | ||||
| # find default_llvm value | ||||
| if 'LLVM' in os.environ or 'LLVM_CONFIG' in os.environ: | ||||
|     default_llvm = 'yes' | ||||
| else: | ||||
|     default_llvm = 'no' | ||||
|     try: | ||||
|         if target_platform != 'windows' and \ | ||||
|            subprocess.call(['llvm-config', '--version'], | ||||
|                            stdout=subprocess.PIPE) == 0: | ||||
|             default_llvm = 'yes' | ||||
|     except: | ||||
|         pass | ||||
|  | ||||
|  | ||||
| ####################################################################### | ||||
| # Common options | ||||
|  | ||||
| def AddOptions(opts): | ||||
|     try: | ||||
|         from SCons.Variables.BoolVariable import BoolVariable as BoolOption | ||||
|     except ImportError: | ||||
|         from SCons.Options.BoolOption import BoolOption | ||||
|     try: | ||||
|         from SCons.Variables.EnumVariable import EnumVariable as EnumOption | ||||
|     except ImportError: | ||||
|         from SCons.Options.EnumOption import EnumOption | ||||
|     opts.Add(EnumOption('build', 'build type', 'debug', | ||||
|                         allowed_values=('debug', 'checked', 'profile', | ||||
|                                         'release'))) | ||||
|     opts.Add(BoolOption('verbose', 'verbose output', 'no')) | ||||
|     opts.Add(EnumOption('machine', 'use machine-specific assembly code', | ||||
|                         default_machine, | ||||
|                         allowed_values=('generic', 'ppc', 'x86', 'x86_64'))) | ||||
|     opts.Add(EnumOption('platform', 'target platform', host_platform, | ||||
|                         allowed_values=('cygwin', 'darwin', 'freebsd', 'haiku', | ||||
|                                         'linux', 'sunos', 'windows'))) | ||||
|     opts.Add(BoolOption('embedded', 'embedded build', 'no')) | ||||
|     opts.Add(BoolOption('analyze', | ||||
|                         'enable static code analysis where available', 'no')) | ||||
|     opts.Add(BoolOption('asan', 'enable Address Sanitizer', 'no')) | ||||
|     opts.Add('toolchain', 'compiler toolchain', default_toolchain) | ||||
|     opts.Add(BoolOption('llvm', 'use LLVM', default_llvm)) | ||||
|     opts.Add(BoolOption('force_scons', 'Force enable scons on deprecated platforms', 'false')) | ||||
|     opts.Add(BoolOption('openmp', 'EXPERIMENTAL: compile with openmp (swrast)', | ||||
|                         'no')) | ||||
|     opts.Add(BoolOption('debug', 'DEPRECATED: debug build', 'yes')) | ||||
|     opts.Add(BoolOption('profile', 'DEPRECATED: profile build', 'no')) | ||||
|     opts.Add(BoolOption('quiet', 'DEPRECATED: profile build', 'yes')) | ||||
|     opts.Add(BoolOption('swr', 'Build OpenSWR', 'no')) | ||||
|     if host_platform == 'windows': | ||||
|         opts.Add('MSVC_VERSION', 'Microsoft Visual C/C++ version') | ||||
|         opts.Add('MSVC_USE_SCRIPT', 'Microsoft Visual C/C++ vcvarsall script', True) | ||||
| @@ -1,4 +0,0 @@ | ||||
| Known issues in the ARB_color_buffer_float implementation: | ||||
| - Rendering to multiple render targets, some fixed-point, some floating-point, with FIXED_ONLY fragment clamping and polygon smooth enabled may write incorrect values to the fixed point buffers (depends on spec interpretation) | ||||
| - For fragment programs with ARB_fog_* options, colors are clamped before fog application regardless of the fragment clamping setting (this depends on spec interpretation) | ||||
|  | ||||
							
								
								
									
										490
									
								
								docs/COPYING
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										490
									
								
								docs/COPYING
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,490 @@ | ||||
|  | ||||
| Some parts of Mesa are copyrighted under the GNU LGPL.  See the | ||||
| Mesa/docs/COPYRIGHT file for details. | ||||
|  | ||||
| The following is the standard GNU copyright file. | ||||
| ---------------------------------------------------------------------- | ||||
|  | ||||
|  | ||||
| 		  GNU LIBRARY GENERAL PUBLIC LICENSE | ||||
| 		       Version 2, June 1991 | ||||
|  | ||||
|  Copyright (C) 1991 Free Software Foundation, Inc. | ||||
|                     675 Mass Ave, Cambridge, MA 02139, USA | ||||
|  Everyone is permitted to copy and distribute verbatim copies | ||||
|  of this license document, but changing it is not allowed. | ||||
|  | ||||
| [This is the first released version of the library GPL.  It is | ||||
|  numbered 2 because it goes with version 2 of the ordinary GPL.] | ||||
|  | ||||
| 			    Preamble | ||||
|  | ||||
|   The licenses for most software are designed to take away your | ||||
| freedom to share and change it.  By contrast, the GNU General Public | ||||
| Licenses are intended to guarantee your freedom to share and change | ||||
| free software--to make sure the software is free for all its users. | ||||
|  | ||||
|   This license, the Library General Public License, applies to some | ||||
| specially designated Free Software Foundation software, and to any | ||||
| other libraries whose authors decide to use it.  You can use it for | ||||
| your libraries, too. | ||||
|  | ||||
|   When we speak of free software, we are referring to freedom, not | ||||
| price.  Our General Public Licenses are designed to make sure that you | ||||
| have the freedom to distribute copies of free software (and charge for | ||||
| this service if you wish), that you receive source code or can get it | ||||
| if you want it, that you can change the software or use pieces of it | ||||
| in new free programs; and that you know you can do these things. | ||||
|  | ||||
|   To protect your rights, we need to make restrictions that forbid | ||||
| anyone to deny you these rights or to ask you to surrender the rights. | ||||
| These restrictions translate to certain responsibilities for you if | ||||
| you distribute copies of the library, or if you modify it. | ||||
|  | ||||
|   For example, if you distribute copies of the library, whether gratis | ||||
| or for a fee, you must give the recipients all the rights that we gave | ||||
| you.  You must make sure that they, too, receive or can get the source | ||||
| code.  If you link a program with the library, you must provide | ||||
| complete object files to the recipients so that they can relink them | ||||
| with the library, after making changes to the library and recompiling | ||||
| it.  And you must show them these terms so they know their rights. | ||||
|  | ||||
|   Our method of protecting your rights has two steps: (1) copyright | ||||
| the library, and (2) offer you this license which gives you legal | ||||
| permission to copy, distribute and/or modify the library. | ||||
|  | ||||
|   Also, for each distributor's protection, we want to make certain | ||||
| that everyone understands that there is no warranty for this free | ||||
| library.  If the library is modified by someone else and passed on, we | ||||
| want its recipients to know that what they have is not the original | ||||
| version, so that any problems introduced by others will not reflect on | ||||
| the original authors' reputations. | ||||
|  | ||||
|   Finally, any free program is threatened constantly by software | ||||
| patents.  We wish to avoid the danger that companies distributing free | ||||
| software will individually obtain patent licenses, thus in effect | ||||
| transforming the program into proprietary software.  To prevent this, | ||||
| we have made it clear that any patent must be licensed for everyone's | ||||
| free use or not licensed at all. | ||||
|  | ||||
|   Most GNU software, including some libraries, is covered by the ordinary | ||||
| GNU General Public License, which was designed for utility programs.  This | ||||
| license, the GNU Library General Public License, applies to certain | ||||
| designated libraries.  This license is quite different from the ordinary | ||||
| one; be sure to read it in full, and don't assume that anything in it is | ||||
| the same as in the ordinary license. | ||||
|  | ||||
|   The reason we have a separate public license for some libraries is that | ||||
| they blur the distinction we usually make between modifying or adding to a | ||||
| program and simply using it.  Linking a program with a library, without | ||||
| changing the library, is in some sense simply using the library, and is | ||||
| analogous to running a utility program or application program.  However, in | ||||
| a textual and legal sense, the linked executable is a combined work, a | ||||
| derivative of the original library, and the ordinary General Public License | ||||
| treats it as such. | ||||
|  | ||||
|   Because of this blurred distinction, using the ordinary General | ||||
| Public License for libraries did not effectively promote software | ||||
| sharing, because most developers did not use the libraries.  We | ||||
| concluded that weaker conditions might promote sharing better. | ||||
|  | ||||
|   However, unrestricted linking of non-free programs would deprive the | ||||
| users of those programs of all benefit from the free status of the | ||||
| libraries themselves.  This Library General Public License is intended to | ||||
| permit developers of non-free programs to use free libraries, while | ||||
| preserving your freedom as a user of such programs to change the free | ||||
| libraries that are incorporated in them.  (We have not seen how to achieve | ||||
| this as regards changes in header files, but we have achieved it as regards | ||||
| changes in the actual functions of the Library.)  The hope is that this | ||||
| will lead to faster development of free libraries. | ||||
|  | ||||
|   The precise terms and conditions for copying, distribution and | ||||
| modification follow.  Pay close attention to the difference between a | ||||
| "work based on the library" and a "work that uses the library".  The | ||||
| former contains code derived from the library, while the latter only | ||||
| works together with the library. | ||||
|  | ||||
|   Note that it is possible for a library to be covered by the ordinary | ||||
| General Public License rather than by this special one. | ||||
|  | ||||
| 		  GNU LIBRARY GENERAL PUBLIC LICENSE | ||||
|    TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION | ||||
|  | ||||
|   0. This License Agreement applies to any software library which | ||||
| contains a notice placed by the copyright holder or other authorized | ||||
| party saying it may be distributed under the terms of this Library | ||||
| General Public License (also called "this License").  Each licensee is | ||||
| addressed as "you". | ||||
|  | ||||
|   A "library" means a collection of software functions and/or data | ||||
| prepared so as to be conveniently linked with application programs | ||||
| (which use some of those functions and data) to form executables. | ||||
|  | ||||
|   The "Library", below, refers to any such software library or work | ||||
| which has been distributed under these terms.  A "work based on the | ||||
| Library" means either the Library or any derivative work under | ||||
| copyright law: that is to say, a work containing the Library or a | ||||
| portion of it, either verbatim or with modifications and/or translated | ||||
| straightforwardly into another language.  (Hereinafter, translation is | ||||
| included without limitation in the term "modification".) | ||||
|  | ||||
|   "Source code" for a work means the preferred form of the work for | ||||
| making modifications to it.  For a library, complete source code means | ||||
| all the source code for all modules it contains, plus any associated | ||||
| interface definition files, plus the scripts used to control compilation | ||||
| and installation of the library. | ||||
|  | ||||
|   Activities other than copying, distribution and modification are not | ||||
| covered by this License; they are outside its scope.  The act of | ||||
| running a program using the Library is not restricted, and output from | ||||
| such a program is covered only if its contents constitute a work based | ||||
| on the Library (independent of the use of the Library in a tool for | ||||
| writing it).  Whether that is true depends on what the Library does | ||||
| and what the program that uses the Library does. | ||||
|    | ||||
|   1. You may copy and distribute verbatim copies of the Library's | ||||
| complete source code as you receive it, in any medium, provided that | ||||
| you conspicuously and appropriately publish on each copy an | ||||
| appropriate copyright notice and disclaimer of warranty; keep intact | ||||
| all the notices that refer to this License and to the absence of any | ||||
| warranty; and distribute a copy of this License along with the | ||||
| Library. | ||||
|  | ||||
|   You may charge a fee for the physical act of transferring a copy, | ||||
| and you may at your option offer warranty protection in exchange for a | ||||
| fee. | ||||
|  | ||||
|   2. You may modify your copy or copies of the Library or any portion | ||||
| of it, thus forming a work based on the Library, and copy and | ||||
| distribute such modifications or work under the terms of Section 1 | ||||
| above, provided that you also meet all of these conditions: | ||||
|  | ||||
|     a) The modified work must itself be a software library. | ||||
|  | ||||
|     b) You must cause the files modified to carry prominent notices | ||||
|     stating that you changed the files and the date of any change. | ||||
|  | ||||
|     c) You must cause the whole of the work to be licensed at no | ||||
|     charge to all third parties under the terms of this License. | ||||
|  | ||||
|     d) If a facility in the modified Library refers to a function or a | ||||
|     table of data to be supplied by an application program that uses | ||||
|     the facility, other than as an argument passed when the facility | ||||
|     is invoked, then you must make a good faith effort to ensure that, | ||||
|     in the event an application does not supply such function or | ||||
|     table, the facility still operates, and performs whatever part of | ||||
|     its purpose remains meaningful. | ||||
|  | ||||
|     (For example, a function in a library to compute square roots has | ||||
|     a purpose that is entirely well-defined independent of the | ||||
|     application.  Therefore, Subsection 2d requires that any | ||||
|     application-supplied function or table used by this function must | ||||
|     be optional: if the application does not supply it, the square | ||||
|     root function must still compute square roots.) | ||||
|  | ||||
| These requirements apply to the modified work as a whole.  If | ||||
| identifiable sections of that work are not derived from the Library, | ||||
| and can be reasonably considered independent and separate works in | ||||
| themselves, then this License, and its terms, do not apply to those | ||||
| sections when you distribute them as separate works.  But when you | ||||
| distribute the same sections as part of a whole which is a work based | ||||
| on the Library, the distribution of the whole must be on the terms of | ||||
| this License, whose permissions for other licensees extend to the | ||||
| entire whole, and thus to each and every part regardless of who wrote | ||||
| it. | ||||
|  | ||||
| Thus, it is not the intent of this section to claim rights or contest | ||||
| your rights to work written entirely by you; rather, the intent is to | ||||
| exercise the right to control the distribution of derivative or | ||||
| collective works based on the Library. | ||||
|  | ||||
| In addition, mere aggregation of another work not based on the Library | ||||
| with the Library (or with a work based on the Library) on a volume of | ||||
| a storage or distribution medium does not bring the other work under | ||||
| the scope of this License. | ||||
|  | ||||
|   3. You may opt to apply the terms of the ordinary GNU General Public | ||||
| License instead of this License to a given copy of the Library.  To do | ||||
| this, you must alter all the notices that refer to this License, so | ||||
| that they refer to the ordinary GNU General Public License, version 2, | ||||
| instead of to this License.  (If a newer version than version 2 of the | ||||
| ordinary GNU General Public License has appeared, then you can specify | ||||
| that version instead if you wish.)  Do not make any other change in | ||||
| these notices. | ||||
|  | ||||
|   Once this change is made in a given copy, it is irreversible for | ||||
| that copy, so the ordinary GNU General Public License applies to all | ||||
| subsequent copies and derivative works made from that copy. | ||||
|  | ||||
|   This option is useful when you wish to copy part of the code of | ||||
| the Library into a program that is not a library. | ||||
|  | ||||
|   4. You may copy and distribute the Library (or a portion or | ||||
| derivative of it, under Section 2) in object code or executable form | ||||
| under the terms of Sections 1 and 2 above provided that you accompany | ||||
| it with the complete corresponding machine-readable source code, which | ||||
| must be distributed under the terms of Sections 1 and 2 above on a | ||||
| medium customarily used for software interchange. | ||||
|  | ||||
|   If distribution of object code is made by offering access to copy | ||||
| from a designated place, then offering equivalent access to copy the | ||||
| source code from the same place satisfies the requirement to | ||||
| distribute the source code, even though third parties are not | ||||
| compelled to copy the source along with the object code. | ||||
|  | ||||
|   5. A program that contains no derivative of any portion of the | ||||
| Library, but is designed to work with the Library by being compiled or | ||||
| linked with it, is called a "work that uses the Library".  Such a | ||||
| work, in isolation, is not a derivative work of the Library, and | ||||
| therefore falls outside the scope of this License. | ||||
|  | ||||
|   However, linking a "work that uses the Library" with the Library | ||||
| creates an executable that is a derivative of the Library (because it | ||||
| contains portions of the Library), rather than a "work that uses the | ||||
| library".  The executable is therefore covered by this License. | ||||
| Section 6 states terms for distribution of such executables. | ||||
|  | ||||
|   When a "work that uses the Library" uses material from a header file | ||||
| that is part of the Library, the object code for the work may be a | ||||
| derivative work of the Library even though the source code is not. | ||||
| Whether this is true is especially significant if the work can be | ||||
| linked without the Library, or if the work is itself a library.  The | ||||
| threshold for this to be true is not precisely defined by law. | ||||
|  | ||||
|   If such an object file uses only numerical parameters, data | ||||
| structure layouts and accessors, and small macros and small inline | ||||
| functions (ten lines or less in length), then the use of the object | ||||
| file is unrestricted, regardless of whether it is legally a derivative | ||||
| work.  (Executables containing this object code plus portions of the | ||||
| Library will still fall under Section 6.) | ||||
|  | ||||
|   Otherwise, if the work is a derivative of the Library, you may | ||||
| distribute the object code for the work under the terms of Section 6. | ||||
| Any executables containing that work also fall under Section 6, | ||||
| whether or not they are linked directly with the Library itself. | ||||
|  | ||||
|   6. As an exception to the Sections above, you may also compile or | ||||
| link a "work that uses the Library" with the Library to produce a | ||||
| work containing portions of the Library, and distribute that work | ||||
| under terms of your choice, provided that the terms permit | ||||
| modification of the work for the customer's own use and reverse | ||||
| engineering for debugging such modifications. | ||||
|  | ||||
|   You must give prominent notice with each copy of the work that the | ||||
| Library is used in it and that the Library and its use are covered by | ||||
| this License.  You must supply a copy of this License.  If the work | ||||
| during execution displays copyright notices, you must include the | ||||
| copyright notice for the Library among them, as well as a reference | ||||
| directing the user to the copy of this License.  Also, you must do one | ||||
| of these things: | ||||
|  | ||||
|     a) Accompany the work with the complete corresponding | ||||
|     machine-readable source code for the Library including whatever | ||||
|     changes were used in the work (which must be distributed under | ||||
|     Sections 1 and 2 above); and, if the work is an executable linked | ||||
|     with the Library, with the complete machine-readable "work that | ||||
|     uses the Library", as object code and/or source code, so that the | ||||
|     user can modify the Library and then relink to produce a modified | ||||
|     executable containing the modified Library.  (It is understood | ||||
|     that the user who changes the contents of definitions files in the | ||||
|     Library will not necessarily be able to recompile the application | ||||
|     to use the modified definitions.) | ||||
|  | ||||
|     b) Accompany the work with a written offer, valid for at | ||||
|     least three years, to give the same user the materials | ||||
|     specified in Subsection 6a, above, for a charge no more | ||||
|     than the cost of performing this distribution. | ||||
|  | ||||
|     c) If distribution of the work is made by offering access to copy | ||||
|     from a designated place, offer equivalent access to copy the above | ||||
|     specified materials from the same place. | ||||
|  | ||||
|     d) Verify that the user has already received a copy of these | ||||
|     materials or that you have already sent this user a copy. | ||||
|  | ||||
|   For an executable, the required form of the "work that uses the | ||||
| Library" must include any data and utility programs needed for | ||||
| reproducing the executable from it.  However, as a special exception, | ||||
| the source code distributed need not include anything that is normally | ||||
| distributed (in either source or binary form) with the major | ||||
| components (compiler, kernel, and so on) of the operating system on | ||||
| which the executable runs, unless that component itself accompanies | ||||
| the executable. | ||||
|  | ||||
|   It may happen that this requirement contradicts the license | ||||
| restrictions of other proprietary libraries that do not normally | ||||
| accompany the operating system.  Such a contradiction means you cannot | ||||
| use both them and the Library together in an executable that you | ||||
| distribute. | ||||
|  | ||||
|   7. You may place library facilities that are a work based on the | ||||
| Library side-by-side in a single library together with other library | ||||
| facilities not covered by this License, and distribute such a combined | ||||
| library, provided that the separate distribution of the work based on | ||||
| the Library and of the other library facilities is otherwise | ||||
| permitted, and provided that you do these two things: | ||||
|  | ||||
|     a) Accompany the combined library with a copy of the same work | ||||
|     based on the Library, uncombined with any other library | ||||
|     facilities.  This must be distributed under the terms of the | ||||
|     Sections above. | ||||
|  | ||||
|     b) Give prominent notice with the combined library of the fact | ||||
|     that part of it is a work based on the Library, and explaining | ||||
|     where to find the accompanying uncombined form of the same work. | ||||
|  | ||||
|   8. You may not copy, modify, sublicense, link with, or distribute | ||||
| the Library except as expressly provided under this License.  Any | ||||
| attempt otherwise to copy, modify, sublicense, link with, or | ||||
| distribute the Library is void, and will automatically terminate your | ||||
| rights under this License.  However, parties who have received copies, | ||||
| or rights, from you under this License will not have their licenses | ||||
| terminated so long as such parties remain in full compliance. | ||||
|  | ||||
|   9. You are not required to accept this License, since you have not | ||||
| signed it.  However, nothing else grants you permission to modify or | ||||
| distribute the Library or its derivative works.  These actions are | ||||
| prohibited by law if you do not accept this License.  Therefore, by | ||||
| modifying or distributing the Library (or any work based on the | ||||
| Library), you indicate your acceptance of this License to do so, and | ||||
| all its terms and conditions for copying, distributing or modifying | ||||
| the Library or works based on it. | ||||
|  | ||||
|   10. Each time you redistribute the Library (or any work based on the | ||||
| Library), the recipient automatically receives a license from the | ||||
| original licensor to copy, distribute, link with or modify the Library | ||||
| subject to these terms and conditions.  You may not impose any further | ||||
| restrictions on the recipients' exercise of the rights granted herein. | ||||
| You are not responsible for enforcing compliance by third parties to | ||||
| this License. | ||||
|  | ||||
|   11. If, as a consequence of a court judgment or allegation of patent | ||||
| infringement or for any other reason (not limited to patent issues), | ||||
| conditions are imposed on you (whether by court order, agreement or | ||||
| otherwise) that contradict the conditions of this License, they do not | ||||
| excuse you from the conditions of this License.  If you cannot | ||||
| distribute so as to satisfy simultaneously your obligations under this | ||||
| License and any other pertinent obligations, then as a consequence you | ||||
| may not distribute the Library at all.  For example, if a patent | ||||
| license would not permit royalty-free redistribution of the Library by | ||||
| all those who receive copies directly or indirectly through you, then | ||||
| the only way you could satisfy both it and this License would be to | ||||
| refrain entirely from distribution of the Library. | ||||
|  | ||||
| If any portion of this section is held invalid or unenforceable under any | ||||
| particular circumstance, the balance of the section is intended to apply, | ||||
| and the section as a whole is intended to apply in other circumstances. | ||||
|  | ||||
| It is not the purpose of this section to induce you to infringe any | ||||
| patents or other property right claims or to contest validity of any | ||||
| such claims; this section has the sole purpose of protecting the | ||||
| integrity of the free software distribution system which is | ||||
| implemented by public license practices.  Many people have made | ||||
| generous contributions to the wide range of software distributed | ||||
| through that system in reliance on consistent application of that | ||||
| system; it is up to the author/donor to decide if he or she is willing | ||||
| to distribute software through any other system and a licensee cannot | ||||
| impose that choice. | ||||
|  | ||||
| This section is intended to make thoroughly clear what is believed to | ||||
| be a consequence of the rest of this License. | ||||
|  | ||||
|   12. If the distribution and/or use of the Library is restricted in | ||||
| certain countries either by patents or by copyrighted interfaces, the | ||||
| original copyright holder who places the Library under this License may add | ||||
| an explicit geographical distribution limitation excluding those countries, | ||||
| so that distribution is permitted only in or among countries not thus | ||||
| excluded.  In such case, this License incorporates the limitation as if | ||||
| written in the body of this License. | ||||
|  | ||||
|   13. The Free Software Foundation may publish revised and/or new | ||||
| versions of the Library General Public License from time to time. | ||||
| Such new versions will be similar in spirit to the present version, | ||||
| but may differ in detail to address new problems or concerns. | ||||
|  | ||||
| Each version is given a distinguishing version number.  If the Library | ||||
| specifies a version number of this License which applies to it and | ||||
| "any later version", you have the option of following the terms and | ||||
| conditions either of that version or of any later version published by | ||||
| the Free Software Foundation.  If the Library does not specify a | ||||
| license version number, you may choose any version ever published by | ||||
| the Free Software Foundation. | ||||
|  | ||||
|   14. If you wish to incorporate parts of the Library into other free | ||||
| programs whose distribution conditions are incompatible with these, | ||||
| write to the author to ask for permission.  For software which is | ||||
| copyrighted by the Free Software Foundation, write to the Free | ||||
| Software Foundation; we sometimes make exceptions for this.  Our | ||||
| decision will be guided by the two goals of preserving the free status | ||||
| of all derivatives of our free software and of promoting the sharing | ||||
| and reuse of software generally. | ||||
|  | ||||
| 			    NO WARRANTY | ||||
|  | ||||
|   15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO | ||||
| WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. | ||||
| EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR | ||||
| OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY | ||||
| KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE | ||||
| IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR | ||||
| PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE | ||||
| LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME | ||||
| THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. | ||||
|  | ||||
|   16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN | ||||
| WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY | ||||
| AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU | ||||
| FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR | ||||
| CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE | ||||
| LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING | ||||
| RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A | ||||
| FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF | ||||
| SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH | ||||
| DAMAGES. | ||||
|  | ||||
| 		     END OF TERMS AND CONDITIONS | ||||
|  | ||||
|      Appendix: How to Apply These Terms to Your New Libraries | ||||
|  | ||||
|   If you develop a new library, and you want it to be of the greatest | ||||
| possible use to the public, we recommend making it free software that | ||||
| everyone can redistribute and change.  You can do so by permitting | ||||
| redistribution under these terms (or, alternatively, under the terms of the | ||||
| ordinary General Public License). | ||||
|  | ||||
|   To apply these terms, attach the following notices to the library.  It is | ||||
| safest to attach them to the start of each source file to most effectively | ||||
| convey the exclusion of warranty; and each file should have at least the | ||||
| "copyright" line and a pointer to where the full notice is found. | ||||
|  | ||||
|     <one line to give the library's name and a brief idea of what it does.> | ||||
|     Copyright (C) <year>  <name of author> | ||||
|  | ||||
|     This library is free software; you can redistribute it and/or | ||||
|     modify it under the terms of the GNU Library General Public | ||||
|     License as published by the Free Software Foundation; either | ||||
|     version 2 of the License, or (at your option) any later version. | ||||
|  | ||||
|     This library is distributed in the hope that it will be useful, | ||||
|     but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
|     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU | ||||
|     Library General Public License for more details. | ||||
|  | ||||
|     You should have received a copy of the GNU Library General Public | ||||
|     License along with this library; if not, write to the Free | ||||
|     Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | ||||
|  | ||||
| Also add information on how to contact you by electronic and paper mail. | ||||
|  | ||||
| You should also get your employer (if you work as a programmer) or your | ||||
| school, if any, to sign a "copyright disclaimer" for the library, if | ||||
| necessary.  Here is a sample; alter the names: | ||||
|  | ||||
|   Yoyodyne, Inc., hereby disclaims all copyright interest in the | ||||
|   library `Frob' (a library for tweaking knobs) written by James Random Hacker. | ||||
|  | ||||
|   <signature of Ty Coon>, 1 April 1990 | ||||
|   Ty Coon, President of Vice | ||||
|  | ||||
| That's all there is to it! | ||||
|  | ||||
							
								
								
									
										182
									
								
								docs/INSTALL.GNU
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										182
									
								
								docs/INSTALL.GNU
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,182 @@ | ||||
| Basic Installation | ||||
| ================== | ||||
|  | ||||
|    These are generic installation instructions. | ||||
|  | ||||
|    The `configure' shell script attempts to guess correct values for | ||||
| various system-dependent variables used during compilation.  It uses | ||||
| those values to create a `Makefile' in each directory of the package. | ||||
| It may also create one or more `.h' files containing system-dependent | ||||
| definitions.  Finally, it creates a shell script `config.status' that | ||||
| you can run in the future to recreate the current configuration, a file | ||||
| `config.cache' that saves the results of its tests to speed up | ||||
| reconfiguring, and a file `config.log' containing compiler output | ||||
| (useful mainly for debugging `configure'). | ||||
|  | ||||
|    If you need to do unusual things to compile the package, please try | ||||
| to figure out how `configure' could check whether to do them, and mail | ||||
| diffs or instructions to the address given in the `README' so they can | ||||
| be considered for the next release.  If at some point `config.cache' | ||||
| contains results you don't want to keep, you may remove or edit it. | ||||
|  | ||||
|    The file `configure.in' is used to create `configure' by a program | ||||
| called `autoconf'.  You only need `configure.in' if you want to change | ||||
| it or regenerate `configure' using a newer version of `autoconf'. | ||||
|  | ||||
| The simplest way to compile this package is: | ||||
|  | ||||
|   1. `cd' to the directory containing the package's source code and type | ||||
|      `./configure' to configure the package for your system.  If you're | ||||
|      using `csh' on an old version of System V, you might need to type | ||||
|      `sh ./configure' instead to prevent `csh' from trying to execute | ||||
|      `configure' itself. | ||||
|  | ||||
|      Running `configure' takes awhile.  While running, it prints some | ||||
|      messages telling which features it is checking for. | ||||
|  | ||||
|   2. Type `make' to compile the package. | ||||
|  | ||||
|   3. Optionally, type `make check' to run any self-tests that come with | ||||
|      the package. | ||||
|  | ||||
|   4. Type `make install' to install the programs and any data files and | ||||
|      documentation. | ||||
|  | ||||
|   5. You can remove the program binaries and object files from the | ||||
|      source code directory by typing `make clean'.  To also remove the | ||||
|      files that `configure' created (so you can compile the package for | ||||
|      a different kind of computer), type `make distclean'.  There is | ||||
|      also a `make maintainer-clean' target, but that is intended mainly | ||||
|      for the package's developers.  If you use it, you may have to get | ||||
|      all sorts of other programs in order to regenerate files that came | ||||
|      with the distribution. | ||||
|  | ||||
| Compilers and Options | ||||
| ===================== | ||||
|  | ||||
|    Some systems require unusual options for compilation or linking that | ||||
| the `configure' script does not know about.  You can give `configure' | ||||
| initial values for variables by setting them in the environment.  Using | ||||
| a Bourne-compatible shell, you can do that on the command line like | ||||
| this: | ||||
|      CC=c89 CFLAGS=-O2 LIBS=-lposix ./configure | ||||
|  | ||||
| Or on systems that have the `env' program, you can do it like this: | ||||
|      env CPPFLAGS=-I/usr/local/include LDFLAGS=-s ./configure | ||||
|  | ||||
| Compiling For Multiple Architectures | ||||
| ==================================== | ||||
|  | ||||
|    You can compile the package for more than one kind of computer at the | ||||
| same time, by placing the object files for each architecture in their | ||||
| own directory.  To do this, you must use a version of `make' that | ||||
| supports the `VPATH' variable, such as GNU `make'.  `cd' to the | ||||
| directory where you want the object files and executables to go and run | ||||
| the `configure' script.  `configure' automatically checks for the | ||||
| source code in the directory that `configure' is in and in `..'. | ||||
|  | ||||
|    If you have to use a `make' that does not supports the `VPATH' | ||||
| variable, you have to compile the package for one architecture at a time | ||||
| in the source code directory.  After you have installed the package for | ||||
| one architecture, use `make distclean' before reconfiguring for another | ||||
| architecture. | ||||
|  | ||||
| Installation Names | ||||
| ================== | ||||
|  | ||||
|    By default, `make install' will install the package's files in | ||||
| `/usr/local/bin', `/usr/local/man', etc.  You can specify an | ||||
| installation prefix other than `/usr/local' by giving `configure' the | ||||
| option `--prefix=PATH'. | ||||
|  | ||||
|    You can specify separate installation prefixes for | ||||
| architecture-specific files and architecture-independent files.  If you | ||||
| give `configure' the option `--exec-prefix=PATH', the package will use | ||||
| PATH as the prefix for installing programs and libraries. | ||||
| Documentation and other data files will still use the regular prefix. | ||||
|  | ||||
|    In addition, if you use an unusual directory layout you can give | ||||
| options like `--bindir=PATH' to specify different values for particular | ||||
| kinds of files.  Run `configure --help' for a list of the directories | ||||
| you can set and what kinds of files go in them. | ||||
|  | ||||
|    If the package supports it, you can cause programs to be installed | ||||
| with an extra prefix or suffix on their names by giving `configure' the | ||||
| option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'. | ||||
|  | ||||
| Optional Features | ||||
| ================= | ||||
|  | ||||
|    Some packages pay attention to `--enable-FEATURE' options to | ||||
| `configure', where FEATURE indicates an optional part of the package. | ||||
| They may also pay attention to `--with-PACKAGE' options, where PACKAGE | ||||
| is something like `gnu-as' or `x' (for the X Window System).  The | ||||
| `README' should mention any `--enable-' and `--with-' options that the | ||||
| package recognizes. | ||||
|  | ||||
|    For packages that use the X Window System, `configure' can usually | ||||
| find the X include and library files automatically, but if it doesn't, | ||||
| you can use the `configure' options `--x-includes=DIR' and | ||||
| `--x-libraries=DIR' to specify their locations. | ||||
|  | ||||
| Specifying the System Type | ||||
| ========================== | ||||
|  | ||||
|    There may be some features `configure' can not figure out | ||||
| automatically, but needs to determine by the type of host the package | ||||
| will run on.  Usually `configure' can figure that out, but if it prints | ||||
| a message saying it can not guess the host type, give it the | ||||
| `--host=TYPE' option.  TYPE can either be a short name for the system | ||||
| type, such as `sun4', or a canonical name with three fields: | ||||
|      CPU-COMPANY-SYSTEM | ||||
|  | ||||
| See the file `config.sub' for the possible values of each field.  If | ||||
| `config.sub' isn't included in this package, then this package doesn't | ||||
| need to know the host type. | ||||
|  | ||||
|    If you are building compiler tools for cross-compiling, you can also | ||||
| use the `--target=TYPE' option to select the type of system they will | ||||
| produce code for and the `--build=TYPE' option to select the type of | ||||
| system on which you are compiling the package. | ||||
|  | ||||
| Sharing Defaults | ||||
| ================ | ||||
|  | ||||
|    If you want to set default values for `configure' scripts to share, | ||||
| you can create a site shell script called `config.site' that gives | ||||
| default values for variables like `CC', `cache_file', and `prefix'. | ||||
| `configure' looks for `PREFIX/share/config.site' if it exists, then | ||||
| `PREFIX/etc/config.site' if it exists.  Or, you can set the | ||||
| `CONFIG_SITE' environment variable to the location of the site script. | ||||
| A warning: not all `configure' scripts look for a site script. | ||||
|  | ||||
| Operation Controls | ||||
| ================== | ||||
|  | ||||
|    `configure' recognizes the following options to control how it | ||||
| operates. | ||||
|  | ||||
| `--cache-file=FILE' | ||||
|      Use and save the results of the tests in FILE instead of | ||||
|      `./config.cache'.  Set FILE to `/dev/null' to disable caching, for | ||||
|      debugging `configure'. | ||||
|  | ||||
| `--help' | ||||
|      Print a summary of the options to `configure', and exit. | ||||
|  | ||||
| `--quiet' | ||||
| `--silent' | ||||
| `-q' | ||||
|      Do not print messages saying which checks are being made.  To | ||||
|      suppress all normal output, redirect it to `/dev/null' (any error | ||||
|      messages will still be shown). | ||||
|  | ||||
| `--srcdir=DIR' | ||||
|      Look for the package's source code in directory DIR.  Usually | ||||
|      `configure' can determine that directory automatically. | ||||
|  | ||||
| `--version' | ||||
|      Print the version of Autoconf used to generate the `configure' | ||||
|      script, and exit. | ||||
|  | ||||
| `configure' also accepts some other, not widely useful, options. | ||||
| @@ -8,12 +8,13 @@ Name Strings | ||||
| 
 | ||||
| Contact | ||||
| 
 | ||||
|     Brian Paul, Tungsten Graphics, Inc. (brian.paul 'at' tungstengraphics.com) | ||||
|     Brian Paul, Tungsten Graphics, Inc. (brian 'at' tungstengraphics.com) | ||||
|     Keith Whitwell, Tungsten Graphics, Inc.  (keith 'at' tungstengraphics.com) | ||||
| 
 | ||||
| Status | ||||
| 
 | ||||
|     Obsolete. Effectively superseded by ARB_vertex_buffer_object. | ||||
|     Shipping (Mesa 4.0.4 and later.  Only implemented in particular | ||||
|     XFree86/DRI drivers.) | ||||
| 
 | ||||
| Version | ||||
| 
 | ||||
| @@ -47,7 +48,7 @@ Issues | ||||
| 
 | ||||
| New Procedures and Functions | ||||
| 
 | ||||
|     unsigned int glXGetAGPOffsetMESA( const void *pointer ) | ||||
|     GLuint glXGetAGPOffsetMESA( const GLvoid *pointer ) | ||||
| 
 | ||||
| New Tokens | ||||
| 
 | ||||
| @@ -66,7 +67,7 @@ Additions to Chapter 3 the GLX 1.4 Specification (Functions and Errors) | ||||
|     On "PC" computers, AGP memory can be allocated with glXAllocateMemoryNV | ||||
|     and freed with glXFreeMemoryNV.  Sometimes it's useful to know where a | ||||
|     block of AGP memory is located with respect to the start of the AGP | ||||
|     aperture.  The function | ||||
|     aperature.  The function | ||||
| 
 | ||||
|         GLuint glXGetAGPOffsetMESA( const GLvoid *pointer ) | ||||
| 
 | ||||
| @@ -91,4 +92,3 @@ Revision History | ||||
| 
 | ||||
|     20 September 2002 - Initial draft | ||||
|     2 October 2002 - finished GLX chapter 3 additions | ||||
|     27 July 2004 - use unsigned int instead of GLuint, void instead of GLvoid | ||||
							
								
								
									
										88
									
								
								docs/MESA_copy_sub_buffer.spec
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										88
									
								
								docs/MESA_copy_sub_buffer.spec
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,88 @@ | ||||
| Name | ||||
|  | ||||
|     MESA_copy_sub_buffer | ||||
|  | ||||
| Name Strings | ||||
|  | ||||
|     GLX_MESA_copy_sub_buffer | ||||
|  | ||||
| Contact | ||||
|  | ||||
|     Brian Paul (brian 'at' mesa3d.org) | ||||
|  | ||||
| Status | ||||
|  | ||||
|     Shipping since Mesa 2.6 in February, 1998. | ||||
|  | ||||
| Version | ||||
|  | ||||
|     Last Modified Date:  8 June 2000 | ||||
|  | ||||
| Number | ||||
|  | ||||
|     215 | ||||
|  | ||||
| Dependencies | ||||
|  | ||||
|     OpenGL 1.0 or later is required. | ||||
|     GLX 1.0 or later is required. | ||||
|  | ||||
| Overview | ||||
|  | ||||
|     The glxCopySubBufferMESA() function copies a rectangular region | ||||
|     of the back color buffer to the front color buffer.  This can be | ||||
|     used to quickly repaint 3D windows in response to expose events | ||||
|     when the back color buffer cannot be damaged by other windows. | ||||
|  | ||||
| IP Status | ||||
|  | ||||
|     Open-source; freely implementable. | ||||
|  | ||||
| Issues | ||||
|  | ||||
|     None. | ||||
|  | ||||
| New Procedures and Functions | ||||
|  | ||||
|     void glXCopySubBufferMESA( Display *dpy, GLXDrawable drawable, | ||||
| 			       int x, int y, int width, int height ); | ||||
|  | ||||
| New Tokens | ||||
|  | ||||
|     None. | ||||
|  | ||||
| Additions to Chapter 3 of the GLX 1.3 Specification (Functions and Errors) | ||||
|  | ||||
|     Add to section 3.3.10 Double Buffering: | ||||
|  | ||||
|     The function | ||||
|  | ||||
| 	 void glXCopySubBufferMESA( Display *dpy, GLXDrawable drawable, | ||||
| 				    int x, int y, int width, int height ); | ||||
|  | ||||
|     may be used to copy a rectangular region of the back color buffer to | ||||
|     the front color buffer.  This can be used to quickly repaint 3D windows | ||||
|     in response to expose events when the back color buffer cannot be | ||||
|     damaged by other windows. | ||||
|  | ||||
|     <x> and <y> indicates the lower-left corner of the region to copy and | ||||
|     <width> and <height> indicate the size in pixels.  Coordinate (0,0) | ||||
|     corresponds to the lower-left pixel of the window, like glReadPixels. | ||||
|  | ||||
| GLX Protocol | ||||
|  | ||||
|     None at this time.  The extension is implemented in terms of ordinary | ||||
|     Xlib protocol inside of Mesa. | ||||
|  | ||||
| Errors | ||||
|  | ||||
|     None. | ||||
|  | ||||
| New State | ||||
|  | ||||
|     None. | ||||
|  | ||||
| Revision History | ||||
|  | ||||
|     8 June 2000 - initial specification | ||||
|  | ||||
Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user