Compare commits
	
		
			30 Commits
		
	
	
		
			mesa-19.3.
			...
			chadv/revi
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|  | e44b35b37e | ||
|  | 944e61008a | ||
|  | d545897f1a | ||
|  | bd1790f1d9 | ||
|  | 2685679968 | ||
|  | 373ecbf8ab | ||
|  | c8f0b002da | ||
|  | 8e166eecee | ||
|  | 4cd3a73ed1 | ||
|  | 70161846d8 | ||
|  | 17ef581adb | ||
|  | d71413dd6b | ||
|  | 22478b2a77 | ||
|  | a104d1cd49 | ||
|  | a4486851a9 | ||
|  | d83cea80e2 | ||
|  | 609011efdf | ||
|  | 8c0913a9df | ||
|  | ef2210dc92 | ||
|  | 05d4bee6e6 | ||
|  | a1129f62cd | ||
|  | 819d1bf09e | ||
|  | 2a6da977c1 | ||
|  | 76386219f2 | ||
|  | 3db0bb0364 | ||
|  | 0d43429ede | ||
|  | 6a309c52c7 | ||
|  | 24f839f53a | ||
|  | 39f8866a85 | ||
|  | 05c3ec7e89 | 
| @@ -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==1.0.7 meson |  | ||||||
|     meson --version |  | ||||||
|  |  | ||||||
|     rem Install pkg-config, which meson requires even on windows |  | ||||||
|     cinst -y pkgconfiglite |  | ||||||
| ) |  | ||||||
|  |  | ||||||
| rem Install flex/bison |  | ||||||
| set WINFLEXBISON_ARCHIVE=win_flex_bison-%WINFLEXBISON_VERSION%.zip |  | ||||||
| if not exist "%WINFLEXBISON_ARCHIVE%" appveyor DownloadFile "https://github.com/lexxmark/winflexbison/releases/download/v%WINFLEXBISON_VERSION%/%WINFLEXBISON_ARCHIVE%" |  | ||||||
| 7z x -y -owinflexbison\ "%WINFLEXBISON_ARCHIVE%" > nul |  | ||||||
| set Path=%CD%\winflexbison;%Path% |  | ||||||
| win_flex --version |  | ||||||
| win_bison --version |  | ||||||
| rem Download and extract LLVM |  | ||||||
| if not exist "%LLVM_ARCHIVE%" appveyor DownloadFile "https://people.freedesktop.org/~jrfonseca/llvm/%LLVM_ARCHIVE%" |  | ||||||
| 7z x -y "%LLVM_ARCHIVE%" > nul |  | ||||||
| if "%buildsystem%" == "scons" ( |  | ||||||
|     mkdir llvm\bin |  | ||||||
|     set LLVM=%CD%\llvm |  | ||||||
| ) else ( |  | ||||||
|     move llvm subprojects\ |  | ||||||
|     copy .appveyor\llvm-wrap.meson subprojects\llvm\meson.build |  | ||||||
| ) |  | ||||||
| goto :eof |  | ||||||
|  |  | ||||||
| :build_script |  | ||||||
| if "%buildsystem%" == "scons" ( |  | ||||||
|     call scons -j%NUMBER_OF_PROCESSORS% MSVC_VERSION=14.1 llvm=1 |  | ||||||
| ) else ( |  | ||||||
|     call "C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\Tools\VsDevCmd.bat" -arch=x86 |  | ||||||
|     rem We use default-library as static to affect any wraps (such as expat and zlib) |  | ||||||
|     rem it would be better if we could set subprojects buildtype independently, |  | ||||||
|     rem but I haven't written that patch yet :) |  | ||||||
|     call meson builddir --backend=vs2017 --default-library=static -Dbuild-tests=true -Db_vscrt=mtd --buildtype=release -Dllvm=true -Dgallium-drivers=swrast -Dosmesa=gallium |  | ||||||
|     pushd builddir |  | ||||||
|     call msbuild mesa.sln /m |  | ||||||
|     popd |  | ||||||
| ) |  | ||||||
| goto :eof |  | ||||||
|  |  | ||||||
| :test_script |  | ||||||
| if "%buildsystem%" == "scons" ( |  | ||||||
|     call scons -j%NUMBER_OF_PROCESSORS% MSVC_VERSION=14.1 llvm=1 check |  | ||||||
| ) else ( |  | ||||||
|     call meson test -C builddir |  | ||||||
| ) |  | ||||||
| goto :eof |  | ||||||
| @@ -1,36 +0,0 @@ | |||||||
| # A meson.build file for binary wrapping the LLVM used in the appvyeor CI |  | ||||||
| project('llvm', ['cpp']) |  | ||||||
|  |  | ||||||
| cpp = meson.get_compiler('cpp') |  | ||||||
|  |  | ||||||
| _deps = [] |  | ||||||
| _search = join_paths(meson.current_source_dir(), 'lib') |  | ||||||
| foreach d : ['LLVMAnalysis', 'LLVMAsmParser', 'LLVMAsmPrinter', |  | ||||||
|              'LLVMBinaryFormat', 'LLVMBitReader', 'LLVMBitWriter', |  | ||||||
|              'LLVMCodeGen', 'LLVMCore', 'LLVMCoroutines', 'LLVMCoverage', |  | ||||||
|              'LLVMDebugInfoCodeView', 'LLVMDebugInfoDWARF', |  | ||||||
|              'LLVMDebugInfoMSF', 'LLVMDebugInfoPDB', 'LLVMDemangle', |  | ||||||
|              'LLVMDlltoolDriver', 'LLVMExecutionEngine', 'LLVMGlobalISel', |  | ||||||
|              'LLVMInstCombine', 'LLVMInstrumentation', 'LLVMInterpreter', |  | ||||||
|              'LLVMipo', 'LLVMIRReader', 'LLVMLibDriver', 'LLVMLineEditor', |  | ||||||
|              'LLVMLinker', 'LLVMLTO', 'LLVMMCDisassembler', 'LLVMMCJIT', |  | ||||||
|              'LLVMMC', 'LLVMMCParser', 'LLVMMIRParser', 'LLVMObjCARCOpts', |  | ||||||
|              'LLVMObject', 'LLVMObjectYAML', 'LLVMOption', 'LLVMOrcJIT', |  | ||||||
|              'LLVMPasses', 'LLVMProfileData', 'LLVMRuntimeDyld', |  | ||||||
|              'LLVMScalarOpts', 'LLVMSelectionDAG', 'LLVMSupport', |  | ||||||
|              'LLVMSymbolize', 'LLVMTableGen', 'LLVMTarget', |  | ||||||
|              'LLVMTransformUtils', 'LLVMVectorize', 'LLVMX86AsmParser', |  | ||||||
|              'LLVMX86AsmPrinter', 'LLVMX86CodeGen', 'LLVMX86Desc', |  | ||||||
|              'LLVMX86Disassembler', 'LLVMX86Info', 'LLVMX86Utils', |  | ||||||
|              'LLVMXRay'] |  | ||||||
|   _deps += cpp.find_library(d, dirs : _search) |  | ||||||
| endforeach |  | ||||||
|  |  | ||||||
| dep_llvm = declare_dependency( |  | ||||||
|   include_directories : include_directories('include'), |  | ||||||
|   dependencies : _deps, |  | ||||||
|   version : '5.0.1', |  | ||||||
| ) |  | ||||||
|  |  | ||||||
| has_rtti = false |  | ||||||
| irbuilder_h = files('include/llvm/IR/IRBuilder.h') |  | ||||||
| @@ -11,7 +11,6 @@ tab_width = 8 | |||||||
| [*.{c,h,cpp,hpp,cc,hh}] | [*.{c,h,cpp,hpp,cc,hh}] | ||||||
| indent_style = space | indent_style = space | ||||||
| indent_size = 3 | indent_size = 3 | ||||||
| max_line_length = 78 |  | ||||||
|  |  | ||||||
| [{Makefile*,*.mk}] | [{Makefile*,*.mk}] | ||||||
| indent_style = tab | indent_style = tab | ||||||
| @@ -35,6 +34,6 @@ indent_size = 2 | |||||||
| [*.patch] | [*.patch] | ||||||
| trim_trailing_whitespace = false | trim_trailing_whitespace = false | ||||||
|  |  | ||||||
| [{meson.build,meson_options.txt}] | [meson.build,meson_options.txt] | ||||||
| indent_style = space | indent_style = space | ||||||
| indent_size = 2 | indent_size = 2 | ||||||
|   | |||||||
							
								
								
									
										4
									
								
								.gitattributes
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								.gitattributes
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,4 @@ | |||||||
|  | *.dsp -crlf | ||||||
|  | *.dsw -crlf | ||||||
|  | *.sln -crlf | ||||||
|  | *.vcproj -crlf | ||||||
							
								
								
									
										52
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										52
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							| @@ -1,4 +1,54 @@ | |||||||
|  | *.a | ||||||
|  | *.dll | ||||||
|  | *.exe | ||||||
|  | *.ilk | ||||||
|  | *.la | ||||||
|  | *.lo | ||||||
|  | *.log | ||||||
|  | *.o | ||||||
|  | *.obj | ||||||
|  | *.orig | ||||||
|  | *.os | ||||||
|  | *.pc | ||||||
|  | *.pdb | ||||||
| *.pyc | *.pyc | ||||||
| *.pyo | *.pyo | ||||||
| *.out | *.rej | ||||||
|  | *.so | ||||||
|  | *.so.* | ||||||
|  | *.sw[a-z] | ||||||
|  | *.tar | ||||||
|  | *.tar.bz2 | ||||||
|  | *.tar.gz | ||||||
|  | *.tar.xz | ||||||
|  | *.trs | ||||||
|  | *.zip | ||||||
|  | *~ | ||||||
|  | depend | ||||||
|  | depend.bak | ||||||
|  | bin/ltmain.sh | ||||||
|  | lib | ||||||
|  | lib64 | ||||||
|  | configure | ||||||
|  | configure.lineno | ||||||
|  | autom4te.cache | ||||||
|  | aclocal.m4 | ||||||
|  | config.log | ||||||
|  | config.status | ||||||
|  | cscope* | ||||||
|  | tags | ||||||
|  | .scon* | ||||||
|  | config.py | ||||||
| build | build | ||||||
|  | libtool | ||||||
|  | manifest.txt | ||||||
|  | .dir-locals.el | ||||||
|  | .deps/ | ||||||
|  | .dirstamp | ||||||
|  | .libs/ | ||||||
|  | Makefile | ||||||
|  | Makefile.in | ||||||
|  | .install-mesa-links | ||||||
|  | .install-gallium-links | ||||||
|  | /src/git_sha1.h | ||||||
|  | TAGS | ||||||
|   | |||||||
							
								
								
									
										532
									
								
								.gitlab-ci.yml
									
									
									
									
									
								
							
							
						
						
									
										532
									
								
								.gitlab-ci.yml
									
									
									
									
									
								
							| @@ -1,532 +0,0 @@ | |||||||
| # This is the tag of the docker image used for the build jobs. If the |  | ||||||
| # image doesn't exist yet, the containers stage 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. |  | ||||||
| variables: |  | ||||||
|   UPSTREAM_REPO: mesa/mesa |  | ||||||
|   DEBIAN_TAG: "2019-10-29" |  | ||||||
|   DEBIAN_ARM64_TAG: "arm64v8-2019-10-23" |  | ||||||
|   STRETCH_TAG: "2019-09-18" |  | ||||||
|   DEBIAN_VERSION: buster-slim |  | ||||||
|   STRETCH_VERSION: stretch-slim |  | ||||||
|   DEBIAN_IMAGE: "$CI_REGISTRY_IMAGE/debian/$DEBIAN_VERSION:$DEBIAN_TAG" |  | ||||||
|   DEBIAN_ARM64_IMAGE: "$CI_REGISTRY_IMAGE/debian/$DEBIAN_VERSION:$DEBIAN_ARM64_TAG" |  | ||||||
|   STRETCH_IMAGE: "$CI_REGISTRY_IMAGE/debian/$STRETCH_VERSION:$STRETCH_TAG" |  | ||||||
|  |  | ||||||
| include: |  | ||||||
|   - project: 'wayland/ci-templates' |  | ||||||
|     ref: 1f7f57c64ff4ebbf7292e3b7a13600518b8cb24c |  | ||||||
|     file: '/templates/debian.yml' |  | ||||||
|  |  | ||||||
| include: |  | ||||||
|   - local: '.gitlab-ci/lava-gitlab-ci.yml' |  | ||||||
|  |  | ||||||
| stages: |  | ||||||
|   - container |  | ||||||
|   - build |  | ||||||
|   - test |  | ||||||
|  |  | ||||||
|  |  | ||||||
| # When to automatically run the CI |  | ||||||
| .ci-run-policy: |  | ||||||
|   only: |  | ||||||
|     refs: |  | ||||||
|       - branches@mesa/mesa |  | ||||||
|       - merge_requests |  | ||||||
|       - /^ci([-/].*)?$/ |  | ||||||
|     changes: |  | ||||||
|       - VERSION |  | ||||||
|       - bin/**/* |  | ||||||
|       # GitLab CI |  | ||||||
|       - .gitlab-ci.yml |  | ||||||
|       - .gitlab-ci/**/* |  | ||||||
|       # Meson |  | ||||||
|       - meson* |  | ||||||
|       - build-support/**/* |  | ||||||
|       - subprojects/**/* |  | ||||||
|       # SCons |  | ||||||
|       - SConstruct |  | ||||||
|       - scons/**/* |  | ||||||
|       - common.py |  | ||||||
|       # Source code |  | ||||||
|       - include/**/* |  | ||||||
|       - src/**/* |  | ||||||
|   retry: |  | ||||||
|     max: 2 |  | ||||||
|     when: |  | ||||||
|       - runner_system_failure |  | ||||||
|  |  | ||||||
| .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 normal CI native and cross-build docker images. |  | ||||||
|  |  | ||||||
| .container: |  | ||||||
|   stage: container |  | ||||||
|   extends: |  | ||||||
|     - .ci-run-policy |  | ||||||
|   variables: |  | ||||||
|     # no need to pull the whole repo to build the container image |  | ||||||
|     GIT_STRATEGY: none |  | ||||||
|  |  | ||||||
| debian-10:amd64: |  | ||||||
|   extends: |  | ||||||
|     - .debian@container-ifnot-exists |  | ||||||
|     - .container |  | ||||||
|   variables: |  | ||||||
|     DEBIAN_EXEC: 'bash .gitlab-ci/debian-install.sh' |  | ||||||
|  |  | ||||||
| .use-debian-10:amd64: |  | ||||||
|   image: $DEBIAN_IMAGE |  | ||||||
|   needs: |  | ||||||
|     - debian-10:amd64 |  | ||||||
|  |  | ||||||
| debian-9:amd64: |  | ||||||
|   extends: debian-10:amd64 |  | ||||||
|   variables: |  | ||||||
|     DEBIAN_TAG: $STRETCH_TAG |  | ||||||
|     DEBIAN_VERSION: $STRETCH_VERSION |  | ||||||
|     DEBIAN_IMAGE: $STRETCH_IMAGE |  | ||||||
|     DEBIAN_EXEC: 'bash .gitlab-ci/debian-stretch-install.sh' |  | ||||||
|  |  | ||||||
| .use-debian-9:amd64: |  | ||||||
|   image: $STRETCH_IMAGE |  | ||||||
|   needs: |  | ||||||
|     - debian-9:amd64 |  | ||||||
|  |  | ||||||
| debian-10:arm64: |  | ||||||
|   extends: |  | ||||||
|     - .debian@container-ifnot-exists@arm64v8 |  | ||||||
|     - .container |  | ||||||
|   variables: |  | ||||||
|     DEBIAN_TAG: "$DEBIAN_ARM64_TAG" |  | ||||||
|     DEBIAN_EXEC: 'bash .gitlab-ci/debian-arm64-install.sh' |  | ||||||
|  |  | ||||||
|  |  | ||||||
| # 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 |  | ||||||
|   cache: |  | ||||||
|     key: ${CI_JOB_NAME} |  | ||||||
|     paths: |  | ||||||
|       - ccache |  | ||||||
|   variables: |  | ||||||
|     CCACHE_COMPILERCHECK: "content" |  | ||||||
|   # Use ccache transparently, and print stats before/after |  | ||||||
|   before_script: |  | ||||||
|     - export PATH="/usr/lib/ccache:$PATH" |  | ||||||
|     - export CCACHE_BASEDIR="$PWD" |  | ||||||
|     - export CCACHE_DIR="$PWD/ccache" |  | ||||||
|     - ccache --max-size=1500M |  | ||||||
|     - ccache --zero-stats || true |  | ||||||
|     - ccache --show-stats || true |  | ||||||
|   after_script: |  | ||||||
|     # In case the install dir is being saved as artifacts, tar it up |  | ||||||
|     # so that symlinks and hardlinks aren't each packed separately in |  | ||||||
|     # the zip file. |  | ||||||
|     - if [ -d install ]; then |  | ||||||
|         tar -cf artifacts/install.tar install; |  | ||||||
|       fi |  | ||||||
|     - export CCACHE_DIR="$PWD/ccache" |  | ||||||
|     - 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-debian-10:amd64 |  | ||||||
|   script: |  | ||||||
|     - .gitlab-ci/meson-build.sh |  | ||||||
|  |  | ||||||
| .scons-build: |  | ||||||
|   extends: |  | ||||||
|     - .build-linux |  | ||||||
|     - .use-debian-10:amd64 |  | ||||||
|   variables: |  | ||||||
|     SCONSFLAGS: "-j4" |  | ||||||
|   script: |  | ||||||
|     - .gitlab-ci/scons-build.sh |  | ||||||
|  |  | ||||||
| meson-main: |  | ||||||
|   extends: |  | ||||||
|     - .meson-build |  | ||||||
|     - .ci-deqp-artifacts |  | ||||||
|   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,swrast,svga,v3d,vc4,virgl,etnaviv,panfrost,lima,zink" |  | ||||||
|     LLVM_VERSION: "7" |  | ||||||
|     EXTRA_OPTION: > |  | ||||||
|       -D osmesa=gallium |  | ||||||
|       -D tools=all |  | ||||||
|     MESON_SHADERDB: "true" |  | ||||||
|     BUILDTYPE: "debugoptimized" |  | ||||||
|  |  | ||||||
| .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 |  | ||||||
|   image: $DEBIAN_ARM64_IMAGE |  | ||||||
|   variables: |  | ||||||
|     VULKAN_DRIVERS: freedreno |  | ||||||
|     GALLIUM_DRIVERS: "etnaviv,freedreno,kmsro,lima,nouveau,panfrost,swrast,tegra,v3d,vc4" |  | ||||||
|     EXTRA_OPTION: > |  | ||||||
|       -D I-love-half-baked-turnips=true |  | ||||||
|   needs: |  | ||||||
|     - debian-10:arm64 |  | ||||||
|   tags: |  | ||||||
|     - aarch64 |  | ||||||
|  |  | ||||||
| meson-armhf: |  | ||||||
|   extends: .meson-arm |  | ||||||
|   variables: |  | ||||||
|     CROSS: armhf |  | ||||||
|     LLVM_VERSION: "7" |  | ||||||
|  |  | ||||||
| meson-arm64: |  | ||||||
|   extends: |  | ||||||
|     - .meson-arm |  | ||||||
|     - .ci-deqp-artifacts |  | ||||||
|   variables: |  | ||||||
|     BUILDTYPE: "debugoptimized" |  | ||||||
|  |  | ||||||
| # NOTE: Building SWR is 2x (yes two) times slower than all the other |  | ||||||
| # gallium drivers combined. |  | ||||||
| # Start this early so that it doesn't limit the total run time. |  | ||||||
| # |  | ||||||
| # We also stick the glvnd build here, since we want non-glvnd in |  | ||||||
| # meson-main for actual driver CI. |  | ||||||
| meson-swr-glvnd: |  | ||||||
|   extends: .meson-build |  | ||||||
|   variables: |  | ||||||
|     UNWIND: "true" |  | ||||||
|     DRI_LOADERS: > |  | ||||||
|       -D glvnd=true |  | ||||||
|       -D egl=true |  | ||||||
|     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 |  | ||||||
|     GALLIUM_DRIVERS: "swr,iris" |  | ||||||
|     LLVM_VERSION: "6.0" |  | ||||||
|  |  | ||||||
| meson-clang: |  | ||||||
|   extends: .meson-build |  | ||||||
|   variables: |  | ||||||
|     UNWIND: "true" |  | ||||||
|     DRI_DRIVERS: "auto" |  | ||||||
|     GALLIUM_DRIVERS: "auto" |  | ||||||
|     VULKAN_DRIVERS: intel,amd,freedreno |  | ||||||
|     CC: "ccache clang-8" |  | ||||||
|     CXX: "ccache clang++-8" |  | ||||||
|  |  | ||||||
| .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-debian-9:amd64 |  | ||||||
|   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 |  | ||||||
|     LLVM_VERSION: "8" |  | ||||||
|     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 |  | ||||||
|  |  | ||||||
| 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=6.0 .gitlab-ci/scons-build.sh |  | ||||||
|     - LLVM_VERSION=7 .gitlab-ci/scons-build.sh |  | ||||||
|     - LLVM_VERSION=8 .gitlab-ci/scons-build.sh |  | ||||||
|  |  | ||||||
| scons-old-llvm: |  | ||||||
|   extends: |  | ||||||
|     - scons |  | ||||||
|     - .use-debian-9:amd64 |  | ||||||
|   script: |  | ||||||
|     - LLVM_VERSION=3.9 .gitlab-ci/scons-build.sh |  | ||||||
|     - LLVM_VERSION=4.0 .gitlab-ci/scons-build.sh |  | ||||||
|     - LLVM_VERSION=5.0 .gitlab-ci/scons-build.sh |  | ||||||
|  |  | ||||||
| .test: |  | ||||||
|   extends: .ci-run-policy |  | ||||||
|   stage: test |  | ||||||
|   variables: |  | ||||||
|     GIT_STRATEGY: none # testing doesn't build anything from source |  | ||||||
|  |  | ||||||
| .deqp-test: |  | ||||||
|   extends: |  | ||||||
|     - .test |  | ||||||
|     - .use-debian-10:amd64 |  | ||||||
|   variables: |  | ||||||
|     DEQP_SKIPS: deqp-default-skips.txt |  | ||||||
|   script: |  | ||||||
|     # Note: Build dir (and thus install) may be dirty due to GIT_STRATEGY |  | ||||||
|     - rm -rf install |  | ||||||
|     - tar -xf artifacts/install.tar |  | ||||||
|     - ./artifacts/deqp-runner.sh |  | ||||||
|   artifacts: |  | ||||||
|     when: on_failure |  | ||||||
|     name: "$CI_JOB_NAME-$CI_COMMIT_REF_NAME" |  | ||||||
|     paths: |  | ||||||
|       - results/ |  | ||||||
|   dependencies: |  | ||||||
|     - meson-main |  | ||||||
|   needs: |  | ||||||
|     - meson-main |  | ||||||
|     - debian-10:amd64 |  | ||||||
|  |  | ||||||
| test-llvmpipe-gles2: |  | ||||||
|   parallel: 4 |  | ||||||
|   variables: |  | ||||||
|     DEQP_VER: gles2 |  | ||||||
|     DEQP_EXPECTED_FAILS: deqp-llvmpipe-fails.txt |  | ||||||
|     LIBGL_ALWAYS_SOFTWARE: "true" |  | ||||||
|     DEQP_RENDERER_MATCH: "llvmpipe" |  | ||||||
|   extends: .deqp-test |  | ||||||
|  |  | ||||||
| test-softpipe-gles2: |  | ||||||
|   extends: test-llvmpipe-gles2 |  | ||||||
|   variables: |  | ||||||
|     DEQP_EXPECTED_FAILS: deqp-softpipe-fails.txt |  | ||||||
|     DEQP_RENDERER_MATCH: "softpipe" |  | ||||||
|     GALLIUM_DRIVER: "softpipe" |  | ||||||
|  |  | ||||||
| # The GLES2 CTS run takes about 8 minutes of CPU time, while GLES3 is |  | ||||||
| # 25 minutes.  Until we can get its runtime down, just do a partial |  | ||||||
| # (every 10 tests) run. |  | ||||||
| test-softpipe-gles3-limited: |  | ||||||
|   variables: |  | ||||||
|     DEQP_VER: gles3 |  | ||||||
|     DEQP_EXPECTED_FAILS: deqp-softpipe-fails.txt |  | ||||||
|     LIBGL_ALWAYS_SOFTWARE: "true" |  | ||||||
|     DEQP_RENDERER_MATCH: "softpipe" |  | ||||||
|     GALLIUM_DRIVER: "softpipe" |  | ||||||
|     CI_NODE_INDEX: 1 |  | ||||||
|     CI_NODE_TOTAL: 10 |  | ||||||
|   extends: .deqp-test |  | ||||||
|  |  | ||||||
| arm64_a630_gles2: |  | ||||||
|   extends: .deqp-test |  | ||||||
|   image: $DEBIAN_ARM64_IMAGE |  | ||||||
|   variables: |  | ||||||
|     DEQP_VER: gles2 |  | ||||||
|     DEQP_RENDERER_MATCH: "FD630" |  | ||||||
|     DEQP_EXPECTED_FAILS: deqp-freedreno-a630-fails.txt |  | ||||||
|     DEQP_SKIPS: deqp-freedreno-a630-skips.txt |  | ||||||
|     NIR_VALIDATE: 0 |  | ||||||
|   tags: |  | ||||||
|     - mesa-cheza |  | ||||||
|   dependencies: |  | ||||||
|     - meson-arm64 |  | ||||||
|   needs: |  | ||||||
|     - meson-arm64 |  | ||||||
|     - debian-10:arm64 |  | ||||||
|  |  | ||||||
| arm64_a630_gles31: |  | ||||||
|   extends: arm64_a630_gles2 |  | ||||||
|   parallel: 4 |  | ||||||
|   variables: |  | ||||||
|     DEQP_VER: gles31 |  | ||||||
|  |  | ||||||
| arm64_a630_gles3: |  | ||||||
|   parallel: 6 |  | ||||||
|   extends: arm64_a630_gles2 |  | ||||||
|   variables: |  | ||||||
|     DEQP_VER: gles3 |  | ||||||
|  |  | ||||||
| arm64_a306_gles2: |  | ||||||
|   parallel: 4 |  | ||||||
|   extends: arm64_a630_gles2 |  | ||||||
|   variables: |  | ||||||
|     DEQP_EXPECTED_FAILS: deqp-freedreno-a307-fails.txt |  | ||||||
|     DEQP_SKIPS: deqp-default-skips.txt |  | ||||||
|     DEQP_RENDERER_MATCH: "FD307" |  | ||||||
|   tags: |  | ||||||
|     - db410c |  | ||||||
| @@ -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,84 +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_SUNXI=n |  | ||||||
| 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,185 +0,0 @@ | |||||||
| #!/bin/sh |  | ||||||
|  |  | ||||||
| set -ex |  | ||||||
|  |  | ||||||
| apt-get -y install --no-install-recommends initramfs-tools libpng16-16 strace libsensors5 libexpat1 libdrm2 |  | ||||||
| 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 "\ |  | ||||||
| "gnupg "\ |  | ||||||
| "gpgv "\ |  | ||||||
| "hostname "\ |  | ||||||
| "adduser "\ |  | ||||||
| "debian-archive-keyring "\ |  | ||||||
| "libgl1 libgl1-mesa-dri libglapi-mesa libglvnd0 libglx-mesa0 libegl-mesa0 libgles2 "\ |  | ||||||
| "libllvm7 "\ |  | ||||||
| "libx11-data libthai-data "\ |  | ||||||
| "systemd dbus "\ |  | ||||||
|  |  | ||||||
| # 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,121 +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 \ |  | ||||||
| 	bzip2 \ |  | ||||||
| 	ccache \ |  | ||||||
| 	cmake \ |  | ||||||
| 	crossbuild-essential-armhf \ |  | ||||||
| 	curl \ |  | ||||||
| 	flex \ |  | ||||||
| 	g++ \ |  | ||||||
| 	gettext \ |  | ||||||
| 	git \ |  | ||||||
| 	libdrm-dev \ |  | ||||||
| 	libdrm-dev:armhf \ |  | ||||||
| 	libelf-dev \ |  | ||||||
| 	libelf-dev:armhf \ |  | ||||||
| 	libexpat1-dev \ |  | ||||||
| 	libexpat1-dev:armhf \ |  | ||||||
| 	libgbm-dev \ |  | ||||||
| 	libgles2-mesa-dev \ |  | ||||||
| 	libpng-dev \ |  | ||||||
| 	libssl-dev \ |  | ||||||
| 	llvm-7-dev:armhf \ |  | ||||||
| 	llvm-8-dev \ |  | ||||||
| 	meson \ |  | ||||||
| 	ninja-build \ |  | ||||||
| 	pkg-config \ |  | ||||||
| 	procps \ |  | ||||||
| 	python \ |  | ||||||
| 	python3-mako \ |  | ||||||
| 	wget \ |  | ||||||
| 	zlib1g-dev |  | ||||||
|  |  | ||||||
| ############### 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" |  | ||||||
|  |  | ||||||
| export             LIBDRM_VERSION=libdrm-2.4.99 |  | ||||||
|  |  | ||||||
| ############### Build libdrm |  | ||||||
|  |  | ||||||
| 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/ -Detnaviv=true; ninja -C build/ install; cd .. |  | ||||||
| rm -rf $LIBDRM_VERSION |  | ||||||
|  |  | ||||||
| ############### Build dEQP |  | ||||||
|  |  | ||||||
| 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 |  | ||||||
| cd /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 |  | ||||||
| cd /deqp |  | ||||||
| cmake -G Ninja \ |  | ||||||
|       -DDEQP_TARGET=surfaceless               \ |  | ||||||
|       -DCMAKE_BUILD_TYPE=Release              \ |  | ||||||
|       /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 |  | ||||||
|  |  | ||||||
| rm -rf /deqp/external |  | ||||||
| rm -rf /deqp/modules/internal |  | ||||||
| rm -rf /deqp/executor |  | ||||||
| rm -rf /deqp/execserver |  | ||||||
| rm -rf /deqp/modules/egl |  | ||||||
| rm -rf /deqp/framework |  | ||||||
| du -sh * |  | ||||||
| rm -rf /VK-GL-CTS |  | ||||||
|  |  | ||||||
| ############### Uninstall the build software |  | ||||||
|  |  | ||||||
| apt-get purge -y \ |  | ||||||
|         cmake \ |  | ||||||
|         git \ |  | ||||||
|         libgbm-dev \ |  | ||||||
|         libgles2-mesa-dev \ |  | ||||||
|         wget |  | ||||||
|  |  | ||||||
| apt-get autoremove -y --purge |  | ||||||
| @@ -1,285 +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 \ |  | ||||||
|       wget \ |  | ||||||
|       unzip |  | ||||||
|  |  | ||||||
| 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 \ |  | ||||||
|       llvm-6.0-dev \ |  | ||||||
|       libclang-6.0-dev \ |  | ||||||
|       llvm-7-dev \ |  | ||||||
|       libclang-7-dev \ |  | ||||||
|       llvm-8-dev \ |  | ||||||
|       libclang-8-dev \ |  | ||||||
|       g++ \ |  | ||||||
|       clang-8 \ |  | ||||||
|       git \ |  | ||||||
|       bzip2 \ |  | ||||||
|       zlib1g-dev \ |  | ||||||
|       pkg-config \ |  | ||||||
|       libxrender-dev \ |  | ||||||
|       libxdamage-dev \ |  | ||||||
|       libxxf86vm-dev \ |  | ||||||
|       gcc \ |  | ||||||
|       git \ |  | ||||||
|       libepoxy-dev \ |  | ||||||
|       libegl1-mesa-dev \ |  | ||||||
|       libgbm-dev \ |  | ||||||
|       libclc-dev \ |  | ||||||
|       libxvmc-dev \ |  | ||||||
|       libomxil-bellagio-dev \ |  | ||||||
|       xz-utils \ |  | ||||||
|       libexpat1-dev \ |  | ||||||
|       libx11-xcb-dev \ |  | ||||||
|       libelf-dev \ |  | ||||||
|       libunwind-dev \ |  | ||||||
|       libglvnd-dev \ |  | ||||||
|       libgtk-3-dev \ |  | ||||||
|       libpng-dev \ |  | ||||||
|       libgbm-dev \ |  | ||||||
|       libgles2-mesa-dev \ |  | ||||||
|       libvulkan-dev \ |  | ||||||
|       python-mako \ |  | ||||||
|       python3-mako \ |  | ||||||
|       bison \ |  | ||||||
|       flex \ |  | ||||||
|       gettext \ |  | ||||||
|       cmake \ |  | ||||||
|       meson \ |  | ||||||
|       scons |  | ||||||
|  |  | ||||||
| # Cross-build Mesa deps |  | ||||||
| for arch in $CROSS_ARCHITECTURES; do |  | ||||||
|     apt-get install -y --no-remove \ |  | ||||||
|             libdrm-dev:${arch} \ |  | ||||||
|             libexpat1-dev:${arch} \ |  | ||||||
|             libelf-dev:${arch} \ |  | ||||||
|             crossbuild-essential-${arch} |  | ||||||
| done |  | ||||||
|  |  | ||||||
| # for 64bit windows cross-builds |  | ||||||
| apt-get install -y --no-remove \ |  | ||||||
|     mingw-w64 \ |  | ||||||
|     libz-mingw-w64-dev \ |  | ||||||
|     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            GLPROTO_VERSION=glproto-1.4.17 |  | ||||||
| export          DRI2PROTO_VERSION=dri2proto-2.8 |  | ||||||
| export       LIBPCIACCESS_VERSION=libpciaccess-0.13.4 |  | ||||||
| export             LIBDRM_VERSION=libdrm-2.4.100 |  | ||||||
| export           XCBPROTO_VERSION=xcb-proto-1.13 |  | ||||||
| export         RANDRPROTO_VERSION=randrproto-1.5.0 |  | ||||||
| export          LIBXRANDR_VERSION=libXrandr-1.5.0 |  | ||||||
| export             LIBXCB_VERSION=libxcb-1.13 |  | ||||||
| export       LIBXSHMFENCE_VERSION=libxshmfence-1.3 |  | ||||||
| export           LIBVDPAU_VERSION=libvdpau-1.1 |  | ||||||
| export              LIBVA_VERSION=libva-1.7.0 |  | ||||||
| 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 $XORG_RELEASES/proto/$GLPROTO_VERSION.tar.bz2 |  | ||||||
| tar -xvf $GLPROTO_VERSION.tar.bz2 && rm $GLPROTO_VERSION.tar.bz2 |  | ||||||
| cd $GLPROTO_VERSION; ./configure; make install; cd .. |  | ||||||
| rm -rf $GLPROTO_VERSION |  | ||||||
|  |  | ||||||
| wget $XORG_RELEASES/proto/$DRI2PROTO_VERSION.tar.bz2 |  | ||||||
| tar -xvf $DRI2PROTO_VERSION.tar.bz2 && rm $DRI2PROTO_VERSION.tar.bz2 |  | ||||||
| cd $DRI2PROTO_VERSION; ./configure; make install; cd .. |  | ||||||
| rm -rf $DRI2PROTO_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 $XORG_RELEASES/lib/$LIBPCIACCESS_VERSION.tar.bz2 |  | ||||||
| tar -xvf $LIBPCIACCESS_VERSION.tar.bz2 && rm $LIBPCIACCESS_VERSION.tar.bz2 |  | ||||||
| cd $LIBPCIACCESS_VERSION; ./configure; make install; cd .. |  | ||||||
| rm -rf $LIBPCIACCESS_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; ./configure --enable-vc4 --enable-freedreno --enable-etnaviv-experimental-api; make install; cd .. |  | ||||||
| rm -rf $LIBDRM_VERSION |  | ||||||
|  |  | ||||||
| wget $XORG_RELEASES/proto/$RANDRPROTO_VERSION.tar.bz2 |  | ||||||
| tar -xvf $RANDRPROTO_VERSION.tar.bz2 && rm $RANDRPROTO_VERSION.tar.bz2 |  | ||||||
| cd $RANDRPROTO_VERSION; ./configure; make install; cd .. |  | ||||||
| rm -rf $RANDRPROTO_VERSION |  | ||||||
|  |  | ||||||
| wget $XORG_RELEASES/lib/$LIBXRANDR_VERSION.tar.bz2 |  | ||||||
| tar -xvf $LIBXRANDR_VERSION.tar.bz2 && rm $LIBXRANDR_VERSION.tar.bz2 |  | ||||||
| cd $LIBXRANDR_VERSION; ./configure; make install; cd .. |  | ||||||
| rm -rf $LIBXRANDR_VERSION |  | ||||||
|  |  | ||||||
| wget $XORG_RELEASES/lib/$LIBXSHMFENCE_VERSION.tar.bz2 |  | ||||||
| tar -xvf $LIBXSHMFENCE_VERSION.tar.bz2 && rm $LIBXSHMFENCE_VERSION.tar.bz2 |  | ||||||
| cd $LIBXSHMFENCE_VERSION; ./configure; make install; cd .. |  | ||||||
| rm -rf $LIBXSHMFENCE_VERSION |  | ||||||
|  |  | ||||||
| wget https://people.freedesktop.org/~aplattner/vdpau/$LIBVDPAU_VERSION.tar.bz2 |  | ||||||
| tar -xvf $LIBVDPAU_VERSION.tar.bz2 && rm $LIBVDPAU_VERSION.tar.bz2 |  | ||||||
| cd $LIBVDPAU_VERSION; ./configure; make install; cd .. |  | ||||||
| rm -rf $LIBVDPAU_VERSION |  | ||||||
|  |  | ||||||
| wget https://www.freedesktop.org/software/vaapi/releases/libva/$LIBVA_VERSION.tar.bz2 |  | ||||||
| tar -xvf $LIBVA_VERSION.tar.bz2 && rm $LIBVA_VERSION.tar.bz2 |  | ||||||
| cd $LIBVA_VERSION; ./configure --disable-wayland --disable-dummy-driver; make install; cd .. |  | ||||||
| rm -rf $LIBVA_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 |  | ||||||
|  |  | ||||||
| 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 |  | ||||||
|  |  | ||||||
|  |  | ||||||
| ############### Build dEQP |  | ||||||
| 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 |  | ||||||
| cd /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 |  | ||||||
|  |  | ||||||
| python3 external/fetch_sources.py |  | ||||||
|  |  | ||||||
| mkdir -p /deqp |  | ||||||
| cd /deqp |  | ||||||
| cmake -G Ninja \ |  | ||||||
|       -DDEQP_TARGET=surfaceless               \ |  | ||||||
|       -DCMAKE_BUILD_TYPE=Release              \ |  | ||||||
|       /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 |  | ||||||
|  |  | ||||||
| # Remove the rest of the build products that we don't need. |  | ||||||
| rm -rf /deqp/external |  | ||||||
| rm -rf /deqp/modules/internal |  | ||||||
| rm -rf /deqp/executor |  | ||||||
| rm -rf /deqp/execserver |  | ||||||
| rm -rf /deqp/modules/egl |  | ||||||
| rm -rf /deqp/framework |  | ||||||
| du -sh * |  | ||||||
| rm -rf /VK-GL-CTS |  | ||||||
|  |  | ||||||
| ############### Uninstall the build software |  | ||||||
|  |  | ||||||
| apt-get purge -y \ |  | ||||||
|       wget \ |  | ||||||
|       unzip \ |  | ||||||
|       cmake \ |  | ||||||
|       git \ |  | ||||||
|       libgles2-mesa-dev \ |  | ||||||
|       libgbm-dev |  | ||||||
|  |  | ||||||
| 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,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,29 +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.* |  | ||||||
| dEQP-GLES31.functional.primitive_bounding_box.* |  | ||||||
| dEQP-GLES31.functional.layout_binding.ssbo.fragment_binding_array |  | ||||||
|  |  | ||||||
| # Seen a couple flakes on this one.  Note that valgrind complains about |  | ||||||
| # some things in deqp reference renderer on this one.  Not sure if that |  | ||||||
| # is a real problem or perhaps valgrind gets confused about unitialized |  | ||||||
| # z24 channel in z24s8??  Let's just skip this one for now: |  | ||||||
| dEQP-GLES3.functional.fbo.msaa.2_samples.stencil_index8 |  | ||||||
|  |  | ||||||
| # Two reports of spurious failures on unrelated MRs (2019-09-27, 2019-10-05) |  | ||||||
| dEQP-GLES3.functional.texture.specification.texsubimage2d_pbo.r16ui_2d |  | ||||||
|  |  | ||||||
| # Layered rendering is sysmem only and needs working clears |  | ||||||
| dEQP-GLES31.functional.geometry_shading.layered.* |  | ||||||
| dEQP-GLES31.functional.geometry_shading.instanced.*layer.* |  | ||||||
| @@ -1,982 +0,0 @@ | |||||||
| dEQP-GLES2.functional.depth_stencil_clear.stencil Fail |  | ||||||
| dEQP-GLES2.functional.depth_stencil_clear.stencil_masked Fail |  | ||||||
| dEQP-GLES2.functional.depth_stencil_clear.stencil_scissored Fail |  | ||||||
| dEQP-GLES2.functional.depth_stencil_clear.stencil_scissored_masked Fail |  | ||||||
| dEQP-GLES2.functional.depth_stencil_clear.depth_stencil Fail |  | ||||||
| dEQP-GLES2.functional.depth_stencil_clear.depth_stencil_masked Fail |  | ||||||
| dEQP-GLES2.functional.depth_stencil_clear.depth_stencil_scissored Fail |  | ||||||
| dEQP-GLES2.functional.depth_stencil_clear.depth_stencil_scissored_masked Fail |  | ||||||
| dEQP-GLES2.functional.buffer.write.use.index_array.array Fail |  | ||||||
| dEQP-GLES2.functional.buffer.write.use.index_array.element_array Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.strides.buffer_0_8_float2_vec4_dynamic_draw_quads_1 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.strides.buffer_0_32_float2_vec4_dynamic_draw_quads_1 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.strides.buffer_0_8_float2_vec4_dynamic_draw_quads_256 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.strides.buffer_0_32_float2_vec4_dynamic_draw_quads_256 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.strides.buffer_0_12_float3_vec4_dynamic_draw_quads_1 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.strides.buffer_0_32_float3_vec4_dynamic_draw_quads_1 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.strides.buffer_0_12_float3_vec4_dynamic_draw_quads_256 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.strides.buffer_0_32_float3_vec4_dynamic_draw_quads_256 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.strides.buffer_0_16_float4_vec4_dynamic_draw_quads_1 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.strides.buffer_0_32_float4_vec4_dynamic_draw_quads_1 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.strides.buffer_0_16_float4_vec4_dynamic_draw_quads_256 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.strides.buffer_0_32_float4_vec4_dynamic_draw_quads_256 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.strides.buffer_0_4_short2_vec4_dynamic_draw_quads_1 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.strides.buffer_0_32_short2_vec4_dynamic_draw_quads_1 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.strides.buffer_0_4_short2_vec4_dynamic_draw_quads_256 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.strides.buffer_0_32_short2_vec4_dynamic_draw_quads_256 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.strides.buffer_0_6_short3_vec4_dynamic_draw_quads_1 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.strides.buffer_0_32_short3_vec4_dynamic_draw_quads_1 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.strides.buffer_0_6_short3_vec4_dynamic_draw_quads_256 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.strides.buffer_0_32_short3_vec4_dynamic_draw_quads_256 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.strides.buffer_0_8_short4_vec4_dynamic_draw_quads_1 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.strides.buffer_0_32_short4_vec4_dynamic_draw_quads_1 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.strides.buffer_0_8_short4_vec4_dynamic_draw_quads_256 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.strides.buffer_0_32_short4_vec4_dynamic_draw_quads_256 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.strides.buffer_0_17_byte2_vec4_dynamic_draw_quads_1 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.strides.buffer_0_32_byte2_vec4_dynamic_draw_quads_1 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.strides.buffer_0_2_byte2_vec4_dynamic_draw_quads_256 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.strides.buffer_0_17_byte2_vec4_dynamic_draw_quads_256 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.strides.buffer_0_32_byte2_vec4_dynamic_draw_quads_256 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.strides.buffer_0_3_byte3_vec4_dynamic_draw_quads_1 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.strides.buffer_0_17_byte3_vec4_dynamic_draw_quads_1 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.strides.buffer_0_32_byte3_vec4_dynamic_draw_quads_1 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.strides.buffer_0_3_byte3_vec4_dynamic_draw_quads_256 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.strides.buffer_0_17_byte3_vec4_dynamic_draw_quads_256 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.strides.buffer_0_32_byte3_vec4_dynamic_draw_quads_256 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.strides.buffer_0_4_byte4_vec4_dynamic_draw_quads_1 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.strides.buffer_0_17_byte4_vec4_dynamic_draw_quads_1 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.strides.buffer_0_32_byte4_vec4_dynamic_draw_quads_1 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.strides.buffer_0_4_byte4_vec4_dynamic_draw_quads_256 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.strides.buffer_0_17_byte4_vec4_dynamic_draw_quads_256 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.strides.buffer_0_32_byte4_vec4_dynamic_draw_quads_256 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.strides.buffer_0_8_fixed2_vec4_dynamic_draw_quads_1 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.strides.buffer_0_32_fixed2_vec4_dynamic_draw_quads_1 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.strides.buffer_0_8_fixed2_vec4_dynamic_draw_quads_256 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.strides.buffer_0_32_fixed2_vec4_dynamic_draw_quads_256 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.strides.buffer_0_12_fixed3_vec4_dynamic_draw_quads_1 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.strides.buffer_0_32_fixed3_vec4_dynamic_draw_quads_1 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.strides.buffer_0_12_fixed3_vec4_dynamic_draw_quads_256 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.strides.buffer_0_32_fixed3_vec4_dynamic_draw_quads_256 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.strides.buffer_0_16_fixed4_vec4_dynamic_draw_quads_1 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.strides.buffer_0_32_fixed4_vec4_dynamic_draw_quads_1 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.strides.buffer_0_16_fixed4_vec4_dynamic_draw_quads_256 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.strides.buffer_0_32_fixed4_vec4_dynamic_draw_quads_256 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.normalize.user_ptr_0_0_float2_normalized_vec4_dynamic_draw_quads_1 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.normalize.user_ptr_0_0_float2_normalized_vec4_dynamic_draw_quads_256 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.normalize.user_ptr_0_0_float3_normalized_vec4_dynamic_draw_quads_1 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.normalize.user_ptr_0_0_float3_normalized_vec4_dynamic_draw_quads_256 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.normalize.user_ptr_0_0_float4_normalized_vec4_dynamic_draw_quads_1 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.normalize.user_ptr_0_0_float4_normalized_vec4_dynamic_draw_quads_256 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.normalize.user_ptr_0_0_short2_normalized_vec4_dynamic_draw_quads_1 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.normalize.user_ptr_0_0_short2_normalized_vec4_dynamic_draw_quads_256 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.normalize.user_ptr_0_0_short3_normalized_vec4_dynamic_draw_quads_1 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.normalize.user_ptr_0_0_short3_normalized_vec4_dynamic_draw_quads_256 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.normalize.user_ptr_0_0_short4_normalized_vec4_dynamic_draw_quads_1 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.normalize.user_ptr_0_0_short4_normalized_vec4_dynamic_draw_quads_256 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.normalize.user_ptr_0_0_byte2_normalized_vec4_dynamic_draw_quads_1 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.normalize.user_ptr_0_0_byte2_normalized_vec4_dynamic_draw_quads_256 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.normalize.user_ptr_0_0_byte3_normalized_vec4_dynamic_draw_quads_1 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.normalize.user_ptr_0_0_byte3_normalized_vec4_dynamic_draw_quads_256 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.normalize.user_ptr_0_0_byte4_normalized_vec4_dynamic_draw_quads_1 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.normalize.user_ptr_0_0_byte4_normalized_vec4_dynamic_draw_quads_256 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.normalize.user_ptr_0_0_unsigned_short2_normalized_vec4_dynamic_draw_quads_256 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.normalize.user_ptr_0_0_unsigned_short3_normalized_vec4_dynamic_draw_quads_256 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.normalize.user_ptr_0_0_unsigned_short4_normalized_vec4_dynamic_draw_quads_1 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.normalize.user_ptr_0_0_unsigned_short4_normalized_vec4_dynamic_draw_quads_256 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.normalize.user_ptr_0_0_unsigned_byte2_normalized_vec4_dynamic_draw_quads_1 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.normalize.user_ptr_0_0_unsigned_byte2_normalized_vec4_dynamic_draw_quads_256 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.normalize.user_ptr_0_0_unsigned_byte3_normalized_vec4_dynamic_draw_quads_1 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.normalize.user_ptr_0_0_unsigned_byte3_normalized_vec4_dynamic_draw_quads_256 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.normalize.user_ptr_0_0_unsigned_byte4_normalized_vec4_dynamic_draw_quads_1 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.normalize.user_ptr_0_0_unsigned_byte4_normalized_vec4_dynamic_draw_quads_256 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.normalize.user_ptr_0_0_fixed2_normalized_vec4_dynamic_draw_quads_1 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.normalize.user_ptr_0_0_fixed2_normalized_vec4_dynamic_draw_quads_256 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.normalize.user_ptr_0_0_fixed3_normalized_vec4_dynamic_draw_quads_1 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.normalize.user_ptr_0_0_fixed3_normalized_vec4_dynamic_draw_quads_256 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.normalize.user_ptr_0_0_fixed4_normalized_vec4_dynamic_draw_quads_1 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.normalize.user_ptr_0_0_fixed4_normalized_vec4_dynamic_draw_quads_256 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.output_types.user_ptr_0_0_float2_vec2_dynamic_draw_quads_1 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.output_types.user_ptr_0_0_float2_vec2_dynamic_draw_quads_256 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.output_types.user_ptr_0_0_float3_vec2_dynamic_draw_quads_1 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.output_types.user_ptr_0_0_float3_vec2_dynamic_draw_quads_256 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.output_types.user_ptr_0_0_float4_vec2_dynamic_draw_quads_1 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.output_types.user_ptr_0_0_float4_vec2_dynamic_draw_quads_256 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.output_types.user_ptr_0_0_float2_vec3_dynamic_draw_quads_1 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.output_types.user_ptr_0_0_float2_vec3_dynamic_draw_quads_256 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.output_types.user_ptr_0_0_float3_vec3_dynamic_draw_quads_1 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.output_types.user_ptr_0_0_float3_vec3_dynamic_draw_quads_256 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.output_types.user_ptr_0_0_float4_vec3_dynamic_draw_quads_1 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.output_types.user_ptr_0_0_float4_vec3_dynamic_draw_quads_256 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.output_types.user_ptr_0_0_float2_vec4_dynamic_draw_quads_1 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.output_types.user_ptr_0_0_float2_vec4_dynamic_draw_quads_256 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.output_types.user_ptr_0_0_float3_vec4_dynamic_draw_quads_1 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.output_types.user_ptr_0_0_float3_vec4_dynamic_draw_quads_256 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.output_types.user_ptr_0_0_float4_vec4_dynamic_draw_quads_256 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.output_types.user_ptr_0_0_short2_vec2_dynamic_draw_quads_1 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.output_types.user_ptr_0_0_short2_vec2_dynamic_draw_quads_256 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.output_types.user_ptr_0_0_short3_vec2_dynamic_draw_quads_1 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.output_types.user_ptr_0_0_short3_vec2_dynamic_draw_quads_256 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.output_types.user_ptr_0_0_short4_vec2_dynamic_draw_quads_1 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.output_types.user_ptr_0_0_short4_vec2_dynamic_draw_quads_256 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.output_types.user_ptr_0_0_short2_vec3_dynamic_draw_quads_1 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.output_types.user_ptr_0_0_short2_vec3_dynamic_draw_quads_256 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.output_types.user_ptr_0_0_short3_vec3_dynamic_draw_quads_1 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.output_types.user_ptr_0_0_short3_vec3_dynamic_draw_quads_256 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.output_types.user_ptr_0_0_short4_vec3_dynamic_draw_quads_1 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.output_types.user_ptr_0_0_short4_vec3_dynamic_draw_quads_256 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.output_types.user_ptr_0_0_short2_vec4_dynamic_draw_quads_1 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.output_types.user_ptr_0_0_short2_vec4_dynamic_draw_quads_256 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.output_types.user_ptr_0_0_short3_vec4_dynamic_draw_quads_1 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.output_types.user_ptr_0_0_short3_vec4_dynamic_draw_quads_256 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.output_types.user_ptr_0_0_short4_vec4_dynamic_draw_quads_1 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.output_types.user_ptr_0_0_short4_vec4_dynamic_draw_quads_256 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.output_types.user_ptr_0_0_byte2_vec2_dynamic_draw_quads_1 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.output_types.user_ptr_0_0_byte2_vec2_dynamic_draw_quads_256 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.output_types.user_ptr_0_0_byte3_vec2_dynamic_draw_quads_1 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.output_types.user_ptr_0_0_byte3_vec2_dynamic_draw_quads_256 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.output_types.user_ptr_0_0_byte4_vec2_dynamic_draw_quads_1 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.output_types.user_ptr_0_0_byte4_vec2_dynamic_draw_quads_256 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.output_types.user_ptr_0_0_byte2_vec3_dynamic_draw_quads_1 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.output_types.user_ptr_0_0_byte2_vec3_dynamic_draw_quads_256 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.output_types.user_ptr_0_0_byte3_vec3_dynamic_draw_quads_1 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.output_types.user_ptr_0_0_byte3_vec3_dynamic_draw_quads_256 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.output_types.user_ptr_0_0_byte4_vec3_dynamic_draw_quads_1 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.output_types.user_ptr_0_0_byte4_vec3_dynamic_draw_quads_256 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.output_types.user_ptr_0_0_byte2_vec4_dynamic_draw_quads_1 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.output_types.user_ptr_0_0_byte2_vec4_dynamic_draw_quads_256 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.output_types.user_ptr_0_0_byte3_vec4_dynamic_draw_quads_256 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.output_types.user_ptr_0_0_byte4_vec4_dynamic_draw_quads_1 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.output_types.user_ptr_0_0_byte4_vec4_dynamic_draw_quads_256 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.output_types.user_ptr_0_0_unsigned_short2_vec2_dynamic_draw_quads_1 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.output_types.user_ptr_0_0_unsigned_short2_vec2_dynamic_draw_quads_256 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.output_types.user_ptr_0_0_unsigned_short3_vec2_dynamic_draw_quads_1 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.output_types.user_ptr_0_0_unsigned_short3_vec2_dynamic_draw_quads_256 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.output_types.user_ptr_0_0_unsigned_short4_vec2_dynamic_draw_quads_1 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.output_types.user_ptr_0_0_unsigned_short4_vec2_dynamic_draw_quads_256 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.output_types.user_ptr_0_0_unsigned_short2_vec3_dynamic_draw_quads_1 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.output_types.user_ptr_0_0_unsigned_short2_vec3_dynamic_draw_quads_256 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.output_types.user_ptr_0_0_unsigned_short3_vec3_dynamic_draw_quads_1 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.output_types.user_ptr_0_0_unsigned_short3_vec3_dynamic_draw_quads_256 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.output_types.user_ptr_0_0_unsigned_short4_vec3_dynamic_draw_quads_256 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.output_types.user_ptr_0_0_unsigned_short2_vec4_dynamic_draw_quads_1 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.output_types.user_ptr_0_0_unsigned_short2_vec4_dynamic_draw_quads_256 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.output_types.user_ptr_0_0_unsigned_short3_vec4_dynamic_draw_quads_1 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.output_types.user_ptr_0_0_unsigned_short3_vec4_dynamic_draw_quads_256 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.output_types.user_ptr_0_0_unsigned_short4_vec4_dynamic_draw_quads_1 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.output_types.user_ptr_0_0_unsigned_short4_vec4_dynamic_draw_quads_256 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.output_types.user_ptr_0_0_unsigned_byte2_vec2_dynamic_draw_quads_1 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.output_types.user_ptr_0_0_unsigned_byte2_vec2_dynamic_draw_quads_256 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.output_types.user_ptr_0_0_unsigned_byte3_vec2_dynamic_draw_quads_1 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.output_types.user_ptr_0_0_unsigned_byte3_vec2_dynamic_draw_quads_256 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.output_types.user_ptr_0_0_unsigned_byte4_vec2_dynamic_draw_quads_1 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.output_types.user_ptr_0_0_unsigned_byte4_vec2_dynamic_draw_quads_256 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.output_types.user_ptr_0_0_unsigned_byte2_vec3_dynamic_draw_quads_1 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.output_types.user_ptr_0_0_unsigned_byte2_vec3_dynamic_draw_quads_256 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.output_types.user_ptr_0_0_unsigned_byte3_vec3_dynamic_draw_quads_1 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.output_types.user_ptr_0_0_unsigned_byte3_vec3_dynamic_draw_quads_256 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.output_types.user_ptr_0_0_unsigned_byte4_vec3_dynamic_draw_quads_1 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.output_types.user_ptr_0_0_unsigned_byte4_vec3_dynamic_draw_quads_256 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.output_types.user_ptr_0_0_unsigned_byte2_vec4_dynamic_draw_quads_1 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.output_types.user_ptr_0_0_unsigned_byte2_vec4_dynamic_draw_quads_256 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.output_types.user_ptr_0_0_unsigned_byte3_vec4_dynamic_draw_quads_1 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.output_types.user_ptr_0_0_unsigned_byte3_vec4_dynamic_draw_quads_256 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.output_types.user_ptr_0_0_unsigned_byte4_vec4_dynamic_draw_quads_1 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.output_types.user_ptr_0_0_unsigned_byte4_vec4_dynamic_draw_quads_256 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.output_types.user_ptr_0_0_fixed2_vec2_dynamic_draw_quads_1 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.output_types.user_ptr_0_0_fixed2_vec2_dynamic_draw_quads_256 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.output_types.user_ptr_0_0_fixed3_vec2_dynamic_draw_quads_1 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.output_types.user_ptr_0_0_fixed3_vec2_dynamic_draw_quads_256 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.output_types.user_ptr_0_0_fixed4_vec2_dynamic_draw_quads_1 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.output_types.user_ptr_0_0_fixed4_vec2_dynamic_draw_quads_256 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.output_types.user_ptr_0_0_fixed2_vec3_dynamic_draw_quads_1 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.output_types.user_ptr_0_0_fixed2_vec3_dynamic_draw_quads_256 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.output_types.user_ptr_0_0_fixed3_vec3_dynamic_draw_quads_1 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.output_types.user_ptr_0_0_fixed3_vec3_dynamic_draw_quads_256 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.output_types.user_ptr_0_0_fixed4_vec3_dynamic_draw_quads_1 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.output_types.user_ptr_0_0_fixed4_vec3_dynamic_draw_quads_256 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.output_types.user_ptr_0_0_fixed2_vec4_dynamic_draw_quads_1 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.output_types.user_ptr_0_0_fixed2_vec4_dynamic_draw_quads_256 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.output_types.user_ptr_0_0_fixed3_vec4_dynamic_draw_quads_1 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.output_types.user_ptr_0_0_fixed3_vec4_dynamic_draw_quads_256 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.output_types.user_ptr_0_0_fixed4_vec4_dynamic_draw_quads_1 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.output_types.user_ptr_0_0_fixed4_vec4_dynamic_draw_quads_256 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.usages.buffer_0_0_float2_vec2_static_draw_quads_1 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.usages.buffer_0_0_float2_vec2_stream_draw_quads_1 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.usages.buffer_0_0_float2_vec2_dynamic_draw_quads_1 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.usages.buffer_0_8_float2_vec2_static_draw_quads_1 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.usages.buffer_0_8_float2_vec2_stream_draw_quads_1 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.usages.buffer_0_8_float2_vec2_dynamic_draw_quads_1 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.usages.buffer_0_32_float2_vec2_static_draw_quads_1 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.usages.buffer_0_32_float2_vec2_stream_draw_quads_1 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.usages.buffer_0_32_float2_vec2_dynamic_draw_quads_1 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.usages.buffer_0_0_float2_vec2_static_draw_quads_256 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.usages.buffer_0_0_float2_vec2_stream_draw_quads_256 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.usages.buffer_0_0_float2_vec2_dynamic_draw_quads_256 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.usages.buffer_0_8_float2_vec2_static_draw_quads_256 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.usages.buffer_0_8_float2_vec2_stream_draw_quads_256 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.usages.buffer_0_8_float2_vec2_dynamic_draw_quads_256 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.usages.buffer_0_32_float2_vec2_static_draw_quads_256 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.usages.buffer_0_32_float2_vec2_stream_draw_quads_256 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.usages.buffer_0_32_float2_vec2_dynamic_draw_quads_256 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.usages.buffer_0_0_fixed2_vec2_static_draw_quads_1 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.usages.buffer_0_0_fixed2_vec2_stream_draw_quads_1 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.usages.buffer_0_0_fixed2_vec2_dynamic_draw_quads_1 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.usages.buffer_0_8_fixed2_vec2_static_draw_quads_1 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.usages.buffer_0_8_fixed2_vec2_stream_draw_quads_1 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.usages.buffer_0_8_fixed2_vec2_dynamic_draw_quads_1 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.usages.buffer_0_32_fixed2_vec2_static_draw_quads_1 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.usages.buffer_0_32_fixed2_vec2_stream_draw_quads_1 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.usages.buffer_0_32_fixed2_vec2_dynamic_draw_quads_1 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.usages.buffer_0_0_fixed2_vec2_static_draw_quads_256 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.usages.buffer_0_0_fixed2_vec2_stream_draw_quads_256 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.usages.buffer_0_0_fixed2_vec2_dynamic_draw_quads_256 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.usages.buffer_0_8_fixed2_vec2_static_draw_quads_256 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.usages.buffer_0_8_fixed2_vec2_stream_draw_quads_256 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.usages.buffer_0_8_fixed2_vec2_dynamic_draw_quads_256 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.usages.buffer_0_32_fixed2_vec2_static_draw_quads_256 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.usages.buffer_0_32_fixed2_vec2_stream_draw_quads_256 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.usages.buffer_0_32_fixed2_vec2_dynamic_draw_quads_256 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.usages.buffer_0_0_short2_vec2_static_draw_quads_1 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.usages.buffer_0_0_short2_vec2_stream_draw_quads_1 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.usages.buffer_0_0_short2_vec2_dynamic_draw_quads_1 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.usages.buffer_0_4_short2_vec2_static_draw_quads_1 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.usages.buffer_0_4_short2_vec2_stream_draw_quads_1 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.usages.buffer_0_4_short2_vec2_dynamic_draw_quads_1 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.usages.buffer_0_32_short2_vec2_static_draw_quads_1 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.usages.buffer_0_32_short2_vec2_stream_draw_quads_1 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.usages.buffer_0_32_short2_vec2_dynamic_draw_quads_1 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.usages.buffer_0_0_short2_vec2_static_draw_quads_256 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.usages.buffer_0_0_short2_vec2_stream_draw_quads_256 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.usages.buffer_0_0_short2_vec2_dynamic_draw_quads_256 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.usages.buffer_0_4_short2_vec2_static_draw_quads_256 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.usages.buffer_0_4_short2_vec2_stream_draw_quads_256 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.usages.buffer_0_4_short2_vec2_dynamic_draw_quads_256 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.usages.buffer_0_32_short2_vec2_static_draw_quads_256 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.usages.buffer_0_32_short2_vec2_stream_draw_quads_256 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.usages.buffer_0_32_short2_vec2_dynamic_draw_quads_256 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.usages.buffer_0_0_byte2_vec2_static_draw_quads_1 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.usages.buffer_0_0_byte2_vec2_stream_draw_quads_1 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.usages.buffer_0_0_byte2_vec2_dynamic_draw_quads_1 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.usages.buffer_0_2_byte2_vec2_static_draw_quads_1 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.usages.buffer_0_2_byte2_vec2_stream_draw_quads_1 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.usages.buffer_0_2_byte2_vec2_dynamic_draw_quads_1 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.usages.buffer_0_17_byte2_vec2_static_draw_quads_1 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.usages.buffer_0_17_byte2_vec2_stream_draw_quads_1 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.usages.buffer_0_17_byte2_vec2_dynamic_draw_quads_1 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.usages.buffer_0_32_byte2_vec2_static_draw_quads_1 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.usages.buffer_0_32_byte2_vec2_stream_draw_quads_1 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.usages.buffer_0_32_byte2_vec2_dynamic_draw_quads_1 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.usages.buffer_0_0_byte2_vec2_static_draw_quads_256 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.usages.buffer_0_0_byte2_vec2_stream_draw_quads_256 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.usages.buffer_0_0_byte2_vec2_dynamic_draw_quads_256 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.usages.buffer_0_2_byte2_vec2_static_draw_quads_256 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.usages.buffer_0_2_byte2_vec2_stream_draw_quads_256 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.usages.buffer_0_2_byte2_vec2_dynamic_draw_quads_256 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.usages.buffer_0_17_byte2_vec2_static_draw_quads_256 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.usages.buffer_0_17_byte2_vec2_stream_draw_quads_256 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.usages.buffer_0_17_byte2_vec2_dynamic_draw_quads_256 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.usages.buffer_0_32_byte2_vec2_static_draw_quads_256 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.usages.buffer_0_32_byte2_vec2_stream_draw_quads_256 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.usages.buffer_0_32_byte2_vec2_dynamic_draw_quads_256 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.offset.buffer_4_8_float2_vec2_dynamic_draw_quads_1 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.offset.buffer_4_32_float2_vec2_dynamic_draw_quads_1 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.offset.buffer_4_8_float2_vec2_dynamic_draw_quads_256 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.offset.buffer_4_32_float2_vec2_dynamic_draw_quads_256 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.offset.buffer_32_8_float2_vec2_dynamic_draw_quads_1 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.offset.buffer_32_32_float2_vec2_dynamic_draw_quads_1 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.offset.buffer_32_8_float2_vec2_dynamic_draw_quads_256 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.offset.buffer_32_32_float2_vec2_dynamic_draw_quads_256 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.offset.buffer_1_2_byte2_vec2_dynamic_draw_quads_1 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.offset.buffer_1_17_byte2_vec2_dynamic_draw_quads_1 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.offset.buffer_1_32_byte2_vec2_dynamic_draw_quads_1 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.offset.buffer_1_2_byte2_vec2_dynamic_draw_quads_256 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.offset.buffer_1_17_byte2_vec2_dynamic_draw_quads_256 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.offset.buffer_1_32_byte2_vec2_dynamic_draw_quads_256 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.offset.buffer_4_2_byte2_vec2_dynamic_draw_quads_1 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.offset.buffer_4_17_byte2_vec2_dynamic_draw_quads_1 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.offset.buffer_4_32_byte2_vec2_dynamic_draw_quads_1 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.offset.buffer_4_2_byte2_vec2_dynamic_draw_quads_256 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.offset.buffer_4_17_byte2_vec2_dynamic_draw_quads_256 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.offset.buffer_4_32_byte2_vec2_dynamic_draw_quads_256 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.offset.buffer_17_2_byte2_vec2_dynamic_draw_quads_1 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.offset.buffer_17_17_byte2_vec2_dynamic_draw_quads_1 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.offset.buffer_17_32_byte2_vec2_dynamic_draw_quads_1 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.offset.buffer_17_2_byte2_vec2_dynamic_draw_quads_256 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.offset.buffer_17_17_byte2_vec2_dynamic_draw_quads_256 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.offset.buffer_17_32_byte2_vec2_dynamic_draw_quads_256 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.offset.buffer_32_2_byte2_vec2_dynamic_draw_quads_1 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.offset.buffer_32_17_byte2_vec2_dynamic_draw_quads_1 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.offset.buffer_32_32_byte2_vec2_dynamic_draw_quads_1 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.offset.buffer_32_2_byte2_vec2_dynamic_draw_quads_256 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.offset.buffer_32_17_byte2_vec2_dynamic_draw_quads_256 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.offset.buffer_32_32_byte2_vec2_dynamic_draw_quads_256 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.offset.buffer_4_8_fixed2_vec2_dynamic_draw_quads_1 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.offset.buffer_4_32_fixed2_vec2_dynamic_draw_quads_1 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.offset.buffer_4_8_fixed2_vec2_dynamic_draw_quads_256 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.offset.buffer_4_32_fixed2_vec2_dynamic_draw_quads_256 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.offset.buffer_32_8_fixed2_vec2_dynamic_draw_quads_1 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.offset.buffer_32_32_fixed2_vec2_dynamic_draw_quads_1 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.offset.buffer_32_8_fixed2_vec2_dynamic_draw_quads_256 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.offset.buffer_32_32_fixed2_vec2_dynamic_draw_quads_256 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.first.float_first6_offset16_stride8_quads5 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.first.float_first24_offset16_stride8_quads5 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.first.float_first6_offset16_stride32_quads5 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.first.float_first24_offset16_stride32_quads5 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.first.float_first6_offset16_stride8_quads256 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.first.float_first24_offset16_stride8_quads256 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.first.float_first6_offset16_stride32_quads256 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.first.float_first24_offset16_stride32_quads256 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.first.byte_first6_offset1_stride2_quads5 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.first.byte_first24_offset1_stride2_quads5 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.first.byte_first6_offset1_stride17_quads5 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.first.byte_first24_offset1_stride17_quads5 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.first.byte_first6_offset1_stride32_quads5 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.first.byte_first24_offset1_stride32_quads5 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.first.byte_first6_offset1_stride2_quads256 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.first.byte_first24_offset1_stride2_quads256 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.first.byte_first6_offset1_stride17_quads256 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.first.byte_first24_offset1_stride17_quads256 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.first.byte_first6_offset1_stride32_quads256 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.first.byte_first24_offset1_stride32_quads256 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.first.byte_first6_offset16_stride2_quads5 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.first.byte_first24_offset16_stride2_quads5 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.first.byte_first6_offset16_stride17_quads5 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.first.byte_first24_offset16_stride17_quads5 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.first.byte_first6_offset16_stride32_quads5 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.first.byte_first24_offset16_stride32_quads5 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.first.byte_first6_offset16_stride2_quads256 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.first.byte_first24_offset16_stride2_quads256 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.first.byte_first6_offset16_stride17_quads256 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.first.byte_first24_offset16_stride17_quads256 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.first.byte_first6_offset16_stride32_quads256 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.first.byte_first24_offset16_stride32_quads256 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.first.byte_first6_offset17_stride2_quads5 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.first.byte_first24_offset17_stride2_quads5 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.first.byte_first6_offset17_stride17_quads5 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.first.byte_first24_offset17_stride17_quads5 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.first.byte_first6_offset17_stride32_quads5 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.first.byte_first24_offset17_stride32_quads5 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.first.byte_first6_offset17_stride2_quads256 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.first.byte_first24_offset17_stride2_quads256 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.first.byte_first6_offset17_stride17_quads256 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.first.byte_first24_offset17_stride17_quads256 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.first.byte_first6_offset17_stride32_quads256 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.first.byte_first24_offset17_stride32_quads256 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.first.fixed_first6_offset16_stride8_quads5 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.first.fixed_first24_offset16_stride8_quads5 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.first.fixed_first6_offset16_stride32_quads5 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.first.fixed_first24_offset16_stride32_quads5 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.first.fixed_first6_offset16_stride8_quads256 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.first.fixed_first24_offset16_stride8_quads256 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.first.fixed_first6_offset16_stride32_quads256 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.single_attribute.first.fixed_first24_offset16_stride32_quads256 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.multiple_attributes.attribute_count.2 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.multiple_attributes.attribute_count.3 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.multiple_attributes.attribute_count.4 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.multiple_attributes.attribute_count.5 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.multiple_attributes.attribute_count.6 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.multiple_attributes.attribute_count.7 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.multiple_attributes.attribute_count.8 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.multiple_attributes.storage.3_user_ptr_user_ptr_buffer Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.multiple_attributes.storage.3_user_ptr_buffer_user_ptr Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.multiple_attributes.storage.3_user_ptr_buffer_buffer Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.multiple_attributes.storage.3_buffer_user_ptr_user_ptr Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.multiple_attributes.storage.3_buffer_user_ptr_buffer Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.multiple_attributes.storage.3_buffer_buffer_user_ptr Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.multiple_attributes.storage.3_buffer_buffer_buffer Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.multiple_attributes.stride.3_float2_0_float2_0_float2_0 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.multiple_attributes.stride.3_float2_0_float2_0_float2_8 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.multiple_attributes.stride.3_float2_0_float2_0_float2_17 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.multiple_attributes.stride.3_float2_0_float2_0_float2_32 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.multiple_attributes.stride.3_float2_0_float2_8_float2_0 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.multiple_attributes.stride.3_float2_0_float2_8_float2_8 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.multiple_attributes.stride.3_float2_0_float2_8_float2_17 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.multiple_attributes.stride.3_float2_0_float2_8_float2_32 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.multiple_attributes.stride.3_float2_0_float2_17_float2_0 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.multiple_attributes.stride.3_float2_0_float2_17_float2_8 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.multiple_attributes.stride.3_float2_0_float2_17_float2_17 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.multiple_attributes.stride.3_float2_0_float2_17_float2_32 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.multiple_attributes.stride.3_float2_0_float2_32_float2_0 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.multiple_attributes.stride.3_float2_0_float2_32_float2_8 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.multiple_attributes.stride.3_float2_0_float2_32_float2_17 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.multiple_attributes.stride.3_float2_0_float2_32_float2_32 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.multiple_attributes.stride.3_float2_8_float2_0_float2_0 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.multiple_attributes.stride.3_float2_8_float2_0_float2_8 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.multiple_attributes.stride.3_float2_8_float2_0_float2_17 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.multiple_attributes.stride.3_float2_8_float2_0_float2_32 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.multiple_attributes.stride.3_float2_8_float2_8_float2_0 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.multiple_attributes.stride.3_float2_8_float2_8_float2_8 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.multiple_attributes.stride.3_float2_8_float2_8_float2_17 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.multiple_attributes.stride.3_float2_8_float2_8_float2_32 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.multiple_attributes.stride.3_float2_8_float2_17_float2_0 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.multiple_attributes.stride.3_float2_8_float2_17_float2_8 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.multiple_attributes.stride.3_float2_8_float2_17_float2_17 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.multiple_attributes.stride.3_float2_8_float2_17_float2_32 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.multiple_attributes.stride.3_float2_8_float2_32_float2_0 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.multiple_attributes.stride.3_float2_8_float2_32_float2_8 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.multiple_attributes.stride.3_float2_8_float2_32_float2_17 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.multiple_attributes.stride.3_float2_8_float2_32_float2_32 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.multiple_attributes.stride.3_float2_17_float2_0_float2_0 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.multiple_attributes.stride.3_float2_17_float2_0_float2_8 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.multiple_attributes.stride.3_float2_17_float2_0_float2_17 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.multiple_attributes.stride.3_float2_17_float2_0_float2_32 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.multiple_attributes.stride.3_float2_17_float2_8_float2_0 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.multiple_attributes.stride.3_float2_17_float2_8_float2_8 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.multiple_attributes.stride.3_float2_17_float2_8_float2_17 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.multiple_attributes.stride.3_float2_17_float2_8_float2_32 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.multiple_attributes.stride.3_float2_17_float2_17_float2_0 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.multiple_attributes.stride.3_float2_17_float2_17_float2_8 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.multiple_attributes.stride.3_float2_17_float2_17_float2_17 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.multiple_attributes.stride.3_float2_17_float2_17_float2_32 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.multiple_attributes.stride.3_float2_17_float2_32_float2_0 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.multiple_attributes.stride.3_float2_17_float2_32_float2_8 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.multiple_attributes.stride.3_float2_17_float2_32_float2_17 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.multiple_attributes.stride.3_float2_17_float2_32_float2_32 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.multiple_attributes.stride.3_float2_32_float2_0_float2_0 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.multiple_attributes.stride.3_float2_32_float2_0_float2_8 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.multiple_attributes.stride.3_float2_32_float2_0_float2_17 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.multiple_attributes.stride.3_float2_32_float2_0_float2_32 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.multiple_attributes.stride.3_float2_32_float2_8_float2_0 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.multiple_attributes.stride.3_float2_32_float2_8_float2_8 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.multiple_attributes.stride.3_float2_32_float2_8_float2_17 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.multiple_attributes.stride.3_float2_32_float2_8_float2_32 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.multiple_attributes.stride.3_float2_32_float2_17_float2_0 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.multiple_attributes.stride.3_float2_32_float2_17_float2_8 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.multiple_attributes.stride.3_float2_32_float2_17_float2_17 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.multiple_attributes.stride.3_float2_32_float2_17_float2_32 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.multiple_attributes.stride.3_float2_32_float2_32_float2_0 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.multiple_attributes.stride.3_float2_32_float2_32_float2_8 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.multiple_attributes.stride.3_float2_32_float2_32_float2_17 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.multiple_attributes.stride.3_float2_32_float2_32_float2_32 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.multiple_attributes.input_types.3_fixed2_vec2_fixed2_vec2_fixed2_vec2 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.multiple_attributes.input_types.3_fixed2_vec2_fixed2_vec2_byte2_vec2 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.multiple_attributes.input_types.3_fixed2_vec2_fixed2_vec2_short2_vec2 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.multiple_attributes.input_types.3_fixed2_vec2_fixed2_vec2_unsigned_byte2_vec2 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.multiple_attributes.input_types.3_fixed2_vec2_fixed2_vec2_unsigned_short2_vec2 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.multiple_attributes.input_types.3_fixed2_vec2_byte2_vec2_fixed2_vec2 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.multiple_attributes.input_types.3_fixed2_vec2_byte2_vec2_byte2_vec2 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.multiple_attributes.input_types.3_fixed2_vec2_byte2_vec2_short2_vec2 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.multiple_attributes.input_types.3_fixed2_vec2_byte2_vec2_unsigned_byte2_vec2 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.multiple_attributes.input_types.3_fixed2_vec2_byte2_vec2_unsigned_short2_vec2 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.multiple_attributes.input_types.3_fixed2_vec2_short2_vec2_fixed2_vec2 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.multiple_attributes.input_types.3_fixed2_vec2_short2_vec2_byte2_vec2 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.multiple_attributes.input_types.3_fixed2_vec2_short2_vec2_short2_vec2 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.multiple_attributes.input_types.3_fixed2_vec2_short2_vec2_unsigned_byte2_vec2 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.multiple_attributes.input_types.3_fixed2_vec2_short2_vec2_unsigned_short2_vec2 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.multiple_attributes.input_types.3_fixed2_vec2_unsigned_byte2_vec2_fixed2_vec2 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.multiple_attributes.input_types.3_fixed2_vec2_unsigned_byte2_vec2_byte2_vec2 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.multiple_attributes.input_types.3_fixed2_vec2_unsigned_byte2_vec2_short2_vec2 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.multiple_attributes.input_types.3_fixed2_vec2_unsigned_byte2_vec2_unsigned_byte2_vec2 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.multiple_attributes.input_types.3_fixed2_vec2_unsigned_byte2_vec2_unsigned_short2_vec2 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.multiple_attributes.input_types.3_fixed2_vec2_unsigned_short2_vec2_fixed2_vec2 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.multiple_attributes.input_types.3_fixed2_vec2_unsigned_short2_vec2_byte2_vec2 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.multiple_attributes.input_types.3_fixed2_vec2_unsigned_short2_vec2_short2_vec2 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.multiple_attributes.input_types.3_fixed2_vec2_unsigned_short2_vec2_unsigned_byte2_vec2 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.multiple_attributes.input_types.3_fixed2_vec2_unsigned_short2_vec2_unsigned_short2_vec2 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.multiple_attributes.input_types.3_byte2_vec2_fixed2_vec2_fixed2_vec2 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.multiple_attributes.input_types.3_byte2_vec2_fixed2_vec2_byte2_vec2 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.multiple_attributes.input_types.3_byte2_vec2_fixed2_vec2_short2_vec2 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.multiple_attributes.input_types.3_byte2_vec2_fixed2_vec2_unsigned_byte2_vec2 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.multiple_attributes.input_types.3_byte2_vec2_fixed2_vec2_unsigned_short2_vec2 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.multiple_attributes.input_types.3_byte2_vec2_byte2_vec2_fixed2_vec2 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.multiple_attributes.input_types.3_byte2_vec2_byte2_vec2_byte2_vec2 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.multiple_attributes.input_types.3_byte2_vec2_byte2_vec2_short2_vec2 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.multiple_attributes.input_types.3_byte2_vec2_byte2_vec2_unsigned_byte2_vec2 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.multiple_attributes.input_types.3_byte2_vec2_byte2_vec2_unsigned_short2_vec2 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.multiple_attributes.input_types.3_byte2_vec2_short2_vec2_fixed2_vec2 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.multiple_attributes.input_types.3_byte2_vec2_short2_vec2_byte2_vec2 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.multiple_attributes.input_types.3_byte2_vec2_short2_vec2_short2_vec2 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.multiple_attributes.input_types.3_byte2_vec2_short2_vec2_unsigned_byte2_vec2 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.multiple_attributes.input_types.3_byte2_vec2_short2_vec2_unsigned_short2_vec2 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.multiple_attributes.input_types.3_byte2_vec2_unsigned_byte2_vec2_fixed2_vec2 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.multiple_attributes.input_types.3_byte2_vec2_unsigned_byte2_vec2_byte2_vec2 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.multiple_attributes.input_types.3_byte2_vec2_unsigned_byte2_vec2_short2_vec2 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.multiple_attributes.input_types.3_byte2_vec2_unsigned_byte2_vec2_unsigned_byte2_vec2 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.multiple_attributes.input_types.3_byte2_vec2_unsigned_byte2_vec2_unsigned_short2_vec2 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.multiple_attributes.input_types.3_byte2_vec2_unsigned_short2_vec2_fixed2_vec2 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.multiple_attributes.input_types.3_byte2_vec2_unsigned_short2_vec2_byte2_vec2 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.multiple_attributes.input_types.3_byte2_vec2_unsigned_short2_vec2_short2_vec2 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.multiple_attributes.input_types.3_byte2_vec2_unsigned_short2_vec2_unsigned_byte2_vec2 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.multiple_attributes.input_types.3_byte2_vec2_unsigned_short2_vec2_unsigned_short2_vec2 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.multiple_attributes.input_types.3_short2_vec2_fixed2_vec2_fixed2_vec2 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.multiple_attributes.input_types.3_short2_vec2_fixed2_vec2_byte2_vec2 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.multiple_attributes.input_types.3_short2_vec2_fixed2_vec2_short2_vec2 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.multiple_attributes.input_types.3_short2_vec2_fixed2_vec2_unsigned_byte2_vec2 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.multiple_attributes.input_types.3_short2_vec2_fixed2_vec2_unsigned_short2_vec2 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.multiple_attributes.input_types.3_short2_vec2_byte2_vec2_fixed2_vec2 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.multiple_attributes.input_types.3_short2_vec2_byte2_vec2_byte2_vec2 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.multiple_attributes.input_types.3_short2_vec2_byte2_vec2_short2_vec2 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.multiple_attributes.input_types.3_short2_vec2_byte2_vec2_unsigned_byte2_vec2 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.multiple_attributes.input_types.3_short2_vec2_byte2_vec2_unsigned_short2_vec2 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.multiple_attributes.input_types.3_short2_vec2_short2_vec2_fixed2_vec2 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.multiple_attributes.input_types.3_short2_vec2_short2_vec2_byte2_vec2 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.multiple_attributes.input_types.3_short2_vec2_short2_vec2_short2_vec2 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.multiple_attributes.input_types.3_short2_vec2_short2_vec2_unsigned_byte2_vec2 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.multiple_attributes.input_types.3_short2_vec2_short2_vec2_unsigned_short2_vec2 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.multiple_attributes.input_types.3_short2_vec2_unsigned_byte2_vec2_fixed2_vec2 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.multiple_attributes.input_types.3_short2_vec2_unsigned_byte2_vec2_byte2_vec2 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.multiple_attributes.input_types.3_short2_vec2_unsigned_byte2_vec2_short2_vec2 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.multiple_attributes.input_types.3_short2_vec2_unsigned_byte2_vec2_unsigned_byte2_vec2 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.multiple_attributes.input_types.3_short2_vec2_unsigned_byte2_vec2_unsigned_short2_vec2 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.multiple_attributes.input_types.3_short2_vec2_unsigned_short2_vec2_fixed2_vec2 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.multiple_attributes.input_types.3_short2_vec2_unsigned_short2_vec2_byte2_vec2 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.multiple_attributes.input_types.3_short2_vec2_unsigned_short2_vec2_short2_vec2 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.multiple_attributes.input_types.3_short2_vec2_unsigned_short2_vec2_unsigned_byte2_vec2 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.multiple_attributes.input_types.3_short2_vec2_unsigned_short2_vec2_unsigned_short2_vec2 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.multiple_attributes.input_types.3_unsigned_byte2_vec2_fixed2_vec2_fixed2_vec2 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.multiple_attributes.input_types.3_unsigned_byte2_vec2_fixed2_vec2_byte2_vec2 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.multiple_attributes.input_types.3_unsigned_byte2_vec2_fixed2_vec2_short2_vec2 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.multiple_attributes.input_types.3_unsigned_byte2_vec2_fixed2_vec2_unsigned_byte2_vec2 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.multiple_attributes.input_types.3_unsigned_byte2_vec2_fixed2_vec2_unsigned_short2_vec2 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.multiple_attributes.input_types.3_unsigned_byte2_vec2_byte2_vec2_fixed2_vec2 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.multiple_attributes.input_types.3_unsigned_byte2_vec2_byte2_vec2_byte2_vec2 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.multiple_attributes.input_types.3_unsigned_byte2_vec2_byte2_vec2_short2_vec2 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.multiple_attributes.input_types.3_unsigned_byte2_vec2_byte2_vec2_unsigned_byte2_vec2 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.multiple_attributes.input_types.3_unsigned_byte2_vec2_byte2_vec2_unsigned_short2_vec2 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.multiple_attributes.input_types.3_unsigned_byte2_vec2_short2_vec2_fixed2_vec2 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.multiple_attributes.input_types.3_unsigned_byte2_vec2_short2_vec2_byte2_vec2 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.multiple_attributes.input_types.3_unsigned_byte2_vec2_short2_vec2_short2_vec2 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.multiple_attributes.input_types.3_unsigned_byte2_vec2_short2_vec2_unsigned_byte2_vec2 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.multiple_attributes.input_types.3_unsigned_byte2_vec2_short2_vec2_unsigned_short2_vec2 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.multiple_attributes.input_types.3_unsigned_byte2_vec2_unsigned_byte2_vec2_fixed2_vec2 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.multiple_attributes.input_types.3_unsigned_byte2_vec2_unsigned_byte2_vec2_byte2_vec2 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.multiple_attributes.input_types.3_unsigned_byte2_vec2_unsigned_byte2_vec2_short2_vec2 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.multiple_attributes.input_types.3_unsigned_byte2_vec2_unsigned_byte2_vec2_unsigned_byte2_vec2 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.multiple_attributes.input_types.3_unsigned_byte2_vec2_unsigned_byte2_vec2_unsigned_short2_vec2 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.multiple_attributes.input_types.3_unsigned_byte2_vec2_unsigned_short2_vec2_fixed2_vec2 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.multiple_attributes.input_types.3_unsigned_byte2_vec2_unsigned_short2_vec2_byte2_vec2 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.multiple_attributes.input_types.3_unsigned_byte2_vec2_unsigned_short2_vec2_short2_vec2 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.multiple_attributes.input_types.3_unsigned_byte2_vec2_unsigned_short2_vec2_unsigned_byte2_vec2 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.multiple_attributes.input_types.3_unsigned_byte2_vec2_unsigned_short2_vec2_unsigned_short2_vec2 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.multiple_attributes.input_types.3_unsigned_short2_vec2_fixed2_vec2_fixed2_vec2 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.multiple_attributes.input_types.3_unsigned_short2_vec2_fixed2_vec2_byte2_vec2 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.multiple_attributes.input_types.3_unsigned_short2_vec2_fixed2_vec2_short2_vec2 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.multiple_attributes.input_types.3_unsigned_short2_vec2_fixed2_vec2_unsigned_byte2_vec2 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.multiple_attributes.input_types.3_unsigned_short2_vec2_fixed2_vec2_unsigned_short2_vec2 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.multiple_attributes.input_types.3_unsigned_short2_vec2_byte2_vec2_fixed2_vec2 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.multiple_attributes.input_types.3_unsigned_short2_vec2_byte2_vec2_byte2_vec2 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.multiple_attributes.input_types.3_unsigned_short2_vec2_byte2_vec2_short2_vec2 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.multiple_attributes.input_types.3_unsigned_short2_vec2_byte2_vec2_unsigned_byte2_vec2 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.multiple_attributes.input_types.3_unsigned_short2_vec2_byte2_vec2_unsigned_short2_vec2 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.multiple_attributes.input_types.3_unsigned_short2_vec2_short2_vec2_fixed2_vec2 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.multiple_attributes.input_types.3_unsigned_short2_vec2_short2_vec2_byte2_vec2 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.multiple_attributes.input_types.3_unsigned_short2_vec2_short2_vec2_short2_vec2 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.multiple_attributes.input_types.3_unsigned_short2_vec2_short2_vec2_unsigned_byte2_vec2 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.multiple_attributes.input_types.3_unsigned_short2_vec2_short2_vec2_unsigned_short2_vec2 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.multiple_attributes.input_types.3_unsigned_short2_vec2_unsigned_byte2_vec2_fixed2_vec2 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.multiple_attributes.input_types.3_unsigned_short2_vec2_unsigned_byte2_vec2_byte2_vec2 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.multiple_attributes.input_types.3_unsigned_short2_vec2_unsigned_byte2_vec2_short2_vec2 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.multiple_attributes.input_types.3_unsigned_short2_vec2_unsigned_byte2_vec2_unsigned_byte2_vec2 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.multiple_attributes.input_types.3_unsigned_short2_vec2_unsigned_byte2_vec2_unsigned_short2_vec2 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.multiple_attributes.input_types.3_unsigned_short2_vec2_unsigned_short2_vec2_fixed2_vec2 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.multiple_attributes.input_types.3_unsigned_short2_vec2_unsigned_short2_vec2_byte2_vec2 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.multiple_attributes.input_types.3_unsigned_short2_vec2_unsigned_short2_vec2_short2_vec2 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.multiple_attributes.input_types.3_unsigned_short2_vec2_unsigned_short2_vec2_unsigned_byte2_vec2 Fail |  | ||||||
| dEQP-GLES2.functional.vertex_arrays.multiple_attributes.input_types.3_unsigned_short2_vec2_unsigned_short2_vec2_unsigned_short2_vec2 Fail |  | ||||||
| dEQP-GLES2.functional.negative_api.texture.copyteximage2d_width_height_max_cube_neg_z BadTerminatePass |  | ||||||
| dEQP-GLES2.functional.negative_api.texture.copyteximage2d_invalid_border_tex2d BadTerminatePass |  | ||||||
| dEQP-GLES2.functional.negative_api.texture.copyteximage2d_invalid_border_cube_pos_x BadTerminatePass |  | ||||||
| dEQP-GLES2.functional.negative_api.texture.copyteximage2d_invalid_border_cube_pos_y BadTerminatePass |  | ||||||
| dEQP-GLES2.functional.negative_api.texture.copyteximage2d_invalid_border_cube_pos_z BadTerminatePass |  | ||||||
| dEQP-GLES2.functional.negative_api.texture.copyteximage2d_invalid_border_cube_neg_x BadTerminatePass |  | ||||||
| dEQP-GLES2.functional.negative_api.texture.copyteximage2d_invalid_border_cube_neg_y BadTerminatePass |  | ||||||
| dEQP-GLES2.functional.negative_api.texture.copyteximage2d_invalid_border_cube_neg_z BadTerminatePass |  | ||||||
| dEQP-GLES2.functional.negative_api.texture.copyteximage2d_incomplete_framebuffer BadTerminatePass |  | ||||||
| dEQP-GLES2.functional.negative_api.texture.copytexsubimage2d_invalid_target BadTerminatePass |  | ||||||
| dEQP-GLES2.functional.negative_api.texture.copytexsubimage2d_neg_level_tex2d BadTerminatePass |  | ||||||
| dEQP-GLES2.functional.negative_api.texture.copytexsubimage2d_neg_level_cube BadTerminate |  | ||||||
| dEQP-GLES2.functional.negative_api.texture.copytexsubimage2d_level_max_tex2d BadTerminate |  | ||||||
| dEQP-GLES2.functional.negative_api.texture.copytexsubimage2d_level_max_cube_pos BadTerminate |  | ||||||
| dEQP-GLES2.functional.negative_api.texture.copytexsubimage2d_neg_offset BadTerminate |  | ||||||
| dEQP-GLES2.functional.negative_api.texture.copytexsubimage2d_offset_allowed BadTerminate |  | ||||||
| dEQP-GLES2.functional.negative_api.texture.copytexsubimage2d_neg_wdt_hgt BadTerminatePass |  | ||||||
| dEQP-GLES2.functional.negative_api.texture.copytexsubimage2d_incomplete_framebuffer BadTerminate |  | ||||||
| dEQP-GLES2.functional.negative_api.texture.deletetextures_invalid_number BadTerminate |  | ||||||
| dEQP-GLES2.functional.negative_api.texture.deletetextures_invalid_number_bind BadTerminate |  | ||||||
| dEQP-GLES2.functional.negative_api.texture.generatemipmap_invalid_target BadTerminate |  | ||||||
| dEQP-GLES2.functional.negative_api.texture.generatemipmap_npot_wdt_hgt BadTerminate |  | ||||||
| dEQP-GLES2.functional.negative_api.texture.generatemipmap_zero_level_array_compressed BadTerminate |  | ||||||
| dEQP-GLES2.functional.negative_api.texture.generatemipmap_incomplete_cube BadTerminate |  | ||||||
| dEQP-GLES2.functional.negative_api.texture.gentextures_invalid_size BadTerminate |  | ||||||
| dEQP-GLES2.functional.negative_api.texture.pixelstorei_invalid_pname BadTerminate |  | ||||||
| dEQP-GLES2.functional.negative_api.texture.pixelstorei_invalid_param BadTerminate |  | ||||||
| dEQP-GLES2.functional.negative_api.texture.teximage2d_invalid_target BadTerminate |  | ||||||
| dEQP-GLES2.functional.negative_api.texture.teximage2d_invalid_format BadTerminate |  | ||||||
| dEQP-GLES2.functional.negative_api.texture.teximage2d_invalid_type BadTerminate |  | ||||||
| dEQP-GLES2.functional.negative_api.texture.teximage2d_inequal_width_height_cube BadTerminate |  | ||||||
| dEQP-GLES2.functional.negative_api.texture.teximage2d_neg_level_tex2d BadTerminate |  | ||||||
| dEQP-GLES2.functional.negative_api.texture.teximage2d_width_height_max_cube_neg_y BadTerminatePass |  | ||||||
| dEQP-GLES2.functional.negative_api.texture.teximage2d_width_height_max_cube_neg_z BadTerminatePass |  | ||||||
| dEQP-GLES2.functional.negative_api.texture.teximage2d_invalid_border BadTerminatePass |  | ||||||
| dEQP-GLES2.functional.negative_api.texture.teximage2d_format_mismatch BadTerminatePass |  | ||||||
| dEQP-GLES2.functional.negative_api.texture.teximage2d_type_format_mismatch BadTerminatePass |  | ||||||
| dEQP-GLES2.functional.negative_api.texture.texsubimage2d_invalid_target BadTerminatePass |  | ||||||
| dEQP-GLES2.functional.negative_api.texture.texsubimage2d_invalid_format BadTerminatePass |  | ||||||
| dEQP-GLES2.functional.negative_api.texture.texsubimage2d_invalid_type BadTerminatePass |  | ||||||
| dEQP-GLES2.functional.negative_api.texture.texsubimage2d_neg_level_tex2d BadTerminatePass |  | ||||||
| dEQP-GLES2.functional.negative_api.texture.texsubimage2d_neg_level_cube BadTerminate |  | ||||||
| dEQP-GLES2.functional.negative_api.texture.texsubimage2d_level_max_tex2d BadTerminate |  | ||||||
| dEQP-GLES2.functional.negative_api.texture.texsubimage2d_level_max_cube BadTerminate |  | ||||||
| dEQP-GLES2.functional.negative_api.texture.texsubimage2d_neg_offset BadTerminate |  | ||||||
| dEQP-GLES2.functional.negative_api.texture.texsubimage2d_offset_allowed BadTerminate |  | ||||||
| dEQP-GLES2.functional.negative_api.texture.texsubimage2d_neg_wdt_hgt BadTerminate |  | ||||||
| dEQP-GLES2.functional.negative_api.texture.texsubimage2d_type_format_mismatch BadTerminate |  | ||||||
| dEQP-GLES2.functional.rasterization.primitives.triangles Fail |  | ||||||
| dEQP-GLES2.functional.rasterization.primitives.triangle_strip Fail |  | ||||||
| dEQP-GLES2.functional.rasterization.primitives.triangle_fan Fail |  | ||||||
| dEQP-GLES2.functional.rasterization.primitives.lines Fail |  | ||||||
| dEQP-GLES2.functional.rasterization.primitives.line_strip Fail |  | ||||||
| dEQP-GLES2.functional.rasterization.primitives.line_loop Fail |  | ||||||
| dEQP-GLES2.functional.rasterization.primitives.lines_wide Fail |  | ||||||
| dEQP-GLES2.functional.rasterization.primitives.line_strip_wide Fail |  | ||||||
| dEQP-GLES2.functional.rasterization.primitives.line_loop_wide Fail |  | ||||||
| dEQP-GLES2.functional.rasterization.primitives.points Fail |  | ||||||
| dEQP-GLES2.functional.rasterization.fill_rules.basic_quad Fail |  | ||||||
| dEQP-GLES2.functional.rasterization.fill_rules.basic_quad_reverse Fail |  | ||||||
| dEQP-GLES2.functional.rasterization.fill_rules.clipped_full Fail |  | ||||||
| dEQP-GLES2.functional.rasterization.fill_rules.clipped_partly Fail |  | ||||||
| dEQP-GLES2.functional.rasterization.fill_rules.projected Fail |  | ||||||
| dEQP-GLES2.functional.rasterization.culling.front_triangles Fail |  | ||||||
| dEQP-GLES2.functional.rasterization.culling.front_triangles_reverse Fail |  | ||||||
| dEQP-GLES2.functional.rasterization.culling.front_triangle_strip Fail |  | ||||||
| dEQP-GLES2.functional.rasterization.culling.front_triangle_strip_reverse Fail |  | ||||||
| dEQP-GLES2.functional.rasterization.culling.front_triangle_fan Fail |  | ||||||
| dEQP-GLES2.functional.rasterization.culling.front_triangle_fan_reverse Fail |  | ||||||
| dEQP-GLES2.functional.rasterization.culling.back_triangles Fail |  | ||||||
| dEQP-GLES2.functional.rasterization.culling.back_triangles_reverse Fail |  | ||||||
| dEQP-GLES2.functional.rasterization.culling.back_triangle_strip Fail |  | ||||||
| dEQP-GLES2.functional.rasterization.culling.back_triangle_strip_reverse Fail |  | ||||||
| dEQP-GLES2.functional.rasterization.culling.back_triangle_fan Fail |  | ||||||
| dEQP-GLES2.functional.rasterization.culling.back_triangle_fan_reverse Fail |  | ||||||
| dEQP-GLES2.functional.rasterization.interpolation.basic.triangles Fail |  | ||||||
| dEQP-GLES2.functional.rasterization.interpolation.basic.triangle_strip Fail |  | ||||||
| dEQP-GLES2.functional.rasterization.interpolation.basic.triangle_fan Fail |  | ||||||
| dEQP-GLES2.functional.rasterization.interpolation.basic.lines Fail |  | ||||||
| dEQP-GLES2.functional.rasterization.interpolation.basic.line_strip Fail |  | ||||||
| dEQP-GLES2.functional.rasterization.interpolation.basic.line_loop Fail |  | ||||||
| dEQP-GLES2.functional.rasterization.interpolation.basic.lines_wide Fail |  | ||||||
| dEQP-GLES2.functional.rasterization.interpolation.basic.line_strip_wide Fail |  | ||||||
| dEQP-GLES2.functional.rasterization.interpolation.basic.line_loop_wide Fail |  | ||||||
| dEQP-GLES2.functional.rasterization.interpolation.projected.triangles Fail |  | ||||||
| dEQP-GLES2.functional.rasterization.interpolation.projected.triangle_strip Fail |  | ||||||
| dEQP-GLES2.functional.rasterization.interpolation.projected.triangle_fan Fail |  | ||||||
| dEQP-GLES2.functional.rasterization.interpolation.projected.lines Fail |  | ||||||
| dEQP-GLES2.functional.rasterization.interpolation.projected.line_strip Fail |  | ||||||
| dEQP-GLES2.functional.rasterization.interpolation.projected.line_loop Fail |  | ||||||
| dEQP-GLES2.functional.rasterization.interpolation.projected.lines_wide Fail |  | ||||||
| dEQP-GLES2.functional.rasterization.interpolation.projected.line_strip_wide Fail |  | ||||||
| dEQP-GLES2.functional.rasterization.interpolation.projected.line_loop_wide Fail |  | ||||||
| dEQP-GLES2.functional.uniform_api.value.initial.render.basic.bvec2_both BadTerminatePass |  | ||||||
| dEQP-GLES2.functional.uniform_api.value.initial.render.basic.bvec3_vertex BadTerminatePass |  | ||||||
| dEQP-GLES2.functional.uniform_api.value.initial.render.basic.bvec3_fragment BadTerminatePass |  | ||||||
| dEQP-GLES2.functional.uniform_api.value.initial.render.basic.bvec3_both BadTerminatePass |  | ||||||
| dEQP-GLES2.functional.uniform_api.value.initial.render.basic.bvec4_vertex BadTerminatePass |  | ||||||
| dEQP-GLES2.functional.uniform_api.value.initial.render.basic.bvec4_fragment BadTerminatePass |  | ||||||
| dEQP-GLES2.functional.uniform_api.value.initial.render.basic.bvec4_both BadTerminatePass |  | ||||||
| dEQP-GLES2.functional.uniform_api.value.initial.render.basic.sampler2D_vertex BadTerminate |  | ||||||
| dEQP-GLES2.functional.uniform_api.value.initial.render.basic.sampler2D_fragment BadTerminatePass |  | ||||||
| dEQP-GLES2.functional.uniform_api.value.initial.render.basic.sampler2D_both BadTerminate |  | ||||||
| dEQP-GLES2.functional.uniform_api.value.initial.render.basic.samplerCube_vertex BadTerminate |  | ||||||
| dEQP-GLES2.functional.uniform_api.value.initial.render.basic.samplerCube_fragment BadTerminate |  | ||||||
| dEQP-GLES2.functional.uniform_api.value.initial.render.basic.samplerCube_both BadTerminate |  | ||||||
| dEQP-GLES2.functional.uniform_api.value.initial.render.basic_array.float_vertex BadTerminate |  | ||||||
| dEQP-GLES2.functional.uniform_api.value.initial.render.basic_array.float_fragment BadTerminate |  | ||||||
| dEQP-GLES2.functional.uniform_api.value.initial.render.basic_array.float_both BadTerminate |  | ||||||
| dEQP-GLES2.functional.uniform_api.value.assigned.by_pointer.render.basic.bool_fragment BadTerminatePass |  | ||||||
| dEQP-GLES2.functional.uniform_api.value.assigned.by_pointer.render.basic.bool_both BadTerminatePass |  | ||||||
| dEQP-GLES2.functional.uniform_api.value.assigned.by_pointer.render.basic.bvec2_vertex BadTerminatePass |  | ||||||
| dEQP-GLES2.functional.uniform_api.value.assigned.by_pointer.render.basic.bvec2_fragment BadTerminatePass |  | ||||||
| dEQP-GLES2.functional.uniform_api.value.assigned.by_pointer.render.basic.bvec2_both BadTerminatePass |  | ||||||
| dEQP-GLES2.functional.uniform_api.value.assigned.by_pointer.render.basic.bvec3_vertex BadTerminatePass |  | ||||||
| dEQP-GLES2.functional.uniform_api.value.assigned.by_pointer.render.basic.bvec3_fragment BadTerminatePass |  | ||||||
| dEQP-GLES2.functional.uniform_api.value.assigned.by_pointer.render.basic.bvec3_both BadTerminatePass |  | ||||||
| dEQP-GLES2.functional.uniform_api.value.assigned.by_pointer.render.basic.bvec4_vertex BadTerminatePass |  | ||||||
| dEQP-GLES2.functional.uniform_api.value.assigned.by_pointer.render.basic.bvec4_fragment BadTerminatePass |  | ||||||
| dEQP-GLES2.functional.uniform_api.value.assigned.by_pointer.render.basic.bvec4_both BadTerminatePass |  | ||||||
| dEQP-GLES2.functional.uniform_api.value.assigned.by_pointer.render.basic.sampler2D_vertex BadTerminate |  | ||||||
| dEQP-GLES2.functional.uniform_api.value.assigned.by_pointer.render.basic.sampler2D_fragment BadTerminatePass |  | ||||||
| dEQP-GLES2.functional.uniform_api.value.assigned.by_pointer.render.basic.sampler2D_both BadTerminate |  | ||||||
| dEQP-GLES2.functional.uniform_api.value.assigned.by_pointer.render.basic.samplerCube_vertex BadTerminate |  | ||||||
| dEQP-GLES2.functional.uniform_api.value.assigned.by_pointer.render.basic.samplerCube_fragment BadTerminate |  | ||||||
| dEQP-GLES2.functional.uniform_api.value.assigned.by_pointer.render.basic_struct.int_ivec4_fragment BadTerminatePass |  | ||||||
| dEQP-GLES2.functional.uniform_api.value.assigned.by_pointer.render.basic_struct.int_ivec4_both BadTerminatePass |  | ||||||
| dEQP-GLES2.functional.uniform_api.value.assigned.by_pointer.render.basic_struct.bool_bvec4_vertex BadTerminatePass |  | ||||||
| dEQP-GLES2.functional.uniform_api.value.assigned.by_pointer.render.basic_struct.bool_bvec4_fragment BadTerminatePass |  | ||||||
| dEQP-GLES2.functional.uniform_api.value.assigned.by_pointer.render.basic_struct.bool_bvec4_both BadTerminatePass |  | ||||||
| dEQP-GLES2.functional.uniform_api.value.assigned.by_pointer.render.basic_struct.sampler2D_samplerCube_vertex BadTerminate |  | ||||||
| dEQP-GLES2.functional.uniform_api.value.assigned.by_pointer.render.basic_struct.sampler2D_samplerCube_fragment BadTerminate |  | ||||||
| dEQP-GLES2.functional.uniform_api.value.assigned.by_pointer.render.basic_struct.sampler2D_samplerCube_both BadTerminate |  | ||||||
| dEQP-GLES2.functional.uniform_api.value.assigned.by_pointer.render.struct_in_array.float_vec4_vertex BadTerminate |  | ||||||
| dEQP-GLES2.functional.uniform_api.value.assigned.by_pointer.render.struct_in_array.float_vec4_fragment BadTerminate |  | ||||||
| dEQP-GLES2.functional.uniform_api.value.assigned.by_pointer.render.struct_in_array.float_vec4_both BadTerminate |  | ||||||
| dEQP-GLES2.functional.uniform_api.value.assigned.by_pointer.render.struct_in_array.mat4_mat2_vertex BadTerminate |  | ||||||
| dEQP-GLES2.functional.uniform_api.value.assigned.by_pointer.render.struct_in_array.mat4_mat2_fragment BadTerminate |  | ||||||
| dEQP-GLES2.functional.uniform_api.value.assigned.by_pointer.render.struct_in_array.mat4_mat2_both BadTerminate |  | ||||||
| dEQP-GLES2.functional.uniform_api.value.assigned.by_pointer.render.struct_in_array.int_ivec4_vertex BadTerminate |  | ||||||
| dEQP-GLES2.functional.uniform_api.value.assigned.by_pointer.render.struct_in_array.int_ivec4_fragment BadTerminate |  | ||||||
| dEQP-GLES2.functional.uniform_api.value.assigned.by_pointer.render.struct_in_array.int_ivec4_both BadTerminatePass |  | ||||||
| dEQP-GLES2.functional.uniform_api.value.assigned.by_pointer.render.struct_in_array.bool_bvec4_vertex BadTerminatePass |  | ||||||
| dEQP-GLES2.functional.uniform_api.value.assigned.by_pointer.render.struct_in_array.bool_bvec4_fragment BadTerminatePass |  | ||||||
| dEQP-GLES2.functional.uniform_api.value.assigned.by_pointer.render.struct_in_array.bool_bvec4_both BadTerminatePass |  | ||||||
| dEQP-GLES2.functional.uniform_api.value.assigned.by_pointer.render.struct_in_array.sampler2D_samplerCube_vertex BadTerminate |  | ||||||
| dEQP-GLES2.functional.uniform_api.value.assigned.by_pointer.render.struct_in_array.sampler2D_samplerCube_fragment BadTerminate |  | ||||||
| dEQP-GLES2.functional.uniform_api.value.assigned.by_pointer.render.struct_in_array.sampler2D_samplerCube_both BadTerminate |  | ||||||
| dEQP-GLES2.functional.uniform_api.value.assigned.by_pointer.render.array_in_struct.float_vec4_vertex BadTerminate |  | ||||||
| dEQP-GLES2.functional.uniform_api.value.assigned.by_pointer.render.array_in_struct.float_vec4_fragment BadTerminate |  | ||||||
| dEQP-GLES2.functional.uniform_api.value.assigned.by_pointer.render.array_in_struct.float_vec4_both BadTerminate |  | ||||||
| dEQP-GLES2.functional.uniform_api.value.assigned.by_pointer.render.array_in_struct.mat4_mat2_vertex BadTerminate |  | ||||||
| dEQP-GLES2.functional.uniform_api.value.assigned.by_pointer.render.array_in_struct.mat4_mat2_fragment BadTerminate |  | ||||||
| dEQP-GLES2.functional.uniform_api.value.assigned.by_pointer.render.array_in_struct.mat4_mat2_both BadTerminate |  | ||||||
| dEQP-GLES2.functional.uniform_api.value.assigned.by_pointer.render.array_in_struct.int_ivec4_vertex BadTerminate |  | ||||||
| dEQP-GLES2.functional.uniform_api.value.assigned.by_pointer.render.array_in_struct.int_ivec4_fragment BadTerminate |  | ||||||
| dEQP-GLES2.functional.uniform_api.value.assigned.by_pointer.render.array_in_struct.int_ivec4_both BadTerminate |  | ||||||
| dEQP-GLES2.functional.uniform_api.value.assigned.by_pointer.render.array_in_struct.bool_bvec4_vertex BadTerminatePass |  | ||||||
| dEQP-GLES2.functional.uniform_api.value.assigned.by_pointer.render.array_in_struct.bool_bvec4_fragment BadTerminatePass |  | ||||||
| dEQP-GLES2.functional.uniform_api.value.assigned.by_pointer.render.array_in_struct.bool_bvec4_both BadTerminatePass |  | ||||||
| dEQP-GLES2.functional.uniform_api.value.assigned.by_pointer.render.array_in_struct.sampler2D_samplerCube_vertex BadTerminate |  | ||||||
| dEQP-GLES2.functional.uniform_api.value.assigned.by_pointer.render.array_in_struct.sampler2D_samplerCube_fragment BadTerminate |  | ||||||
| dEQP-GLES2.functional.uniform_api.value.assigned.by_pointer.render.array_in_struct.sampler2D_samplerCube_both BadTerminate |  | ||||||
| dEQP-GLES2.functional.uniform_api.value.assigned.by_pointer.render.nested_structs_arrays.float_vec4_vertex BadTerminate |  | ||||||
| dEQP-GLES2.functional.uniform_api.value.assigned.by_pointer.render.nested_structs_arrays.float_vec4_fragment BadTerminate |  | ||||||
| dEQP-GLES2.functional.uniform_api.value.assigned.by_pointer.render.nested_structs_arrays.float_vec4_both BadTerminate |  | ||||||
| dEQP-GLES2.functional.uniform_api.value.assigned.by_pointer.render.nested_structs_arrays.mat4_mat2_vertex BadTerminate |  | ||||||
| dEQP-GLES2.functional.uniform_api.value.assigned.by_pointer.render.nested_structs_arrays.mat4_mat2_fragment BadTerminate |  | ||||||
| dEQP-GLES2.functional.uniform_api.value.assigned.by_pointer.render.nested_structs_arrays.mat4_mat2_both BadTerminate |  | ||||||
| dEQP-GLES2.functional.uniform_api.value.assigned.by_pointer.render.nested_structs_arrays.int_ivec4_vertex BadTerminate |  | ||||||
| dEQP-GLES2.functional.uniform_api.value.assigned.by_pointer.render.nested_structs_arrays.int_ivec4_fragment BadTerminate |  | ||||||
| dEQP-GLES2.functional.uniform_api.value.assigned.by_pointer.render.nested_structs_arrays.int_ivec4_both BadTerminate |  | ||||||
| dEQP-GLES2.functional.uniform_api.value.assigned.by_pointer.render.nested_structs_arrays.bool_bvec4_vertex BadTerminate |  | ||||||
| dEQP-GLES2.functional.uniform_api.value.assigned.by_pointer.render.nested_structs_arrays.bool_bvec4_fragment BadTerminatePass |  | ||||||
| dEQP-GLES2.functional.uniform_api.value.assigned.by_pointer.render.nested_structs_arrays.bool_bvec4_both BadTerminatePass |  | ||||||
| dEQP-GLES2.functional.uniform_api.value.assigned.by_pointer.render.nested_structs_arrays.sampler2D_samplerCube_vertex BadTerminate |  | ||||||
| dEQP-GLES2.functional.uniform_api.value.assigned.by_pointer.render.nested_structs_arrays.sampler2D_samplerCube_fragment BadTerminate |  | ||||||
| dEQP-GLES2.functional.uniform_api.value.assigned.by_pointer.render.nested_structs_arrays.sampler2D_samplerCube_both BadTerminate |  | ||||||
| dEQP-GLES2.functional.uniform_api.value.assigned.by_pointer.render.multiple_basic.vertex BadTerminate |  | ||||||
| dEQP-GLES2.functional.uniform_api.value.assigned.by_pointer.render.multiple_basic.fragment BadTerminate |  | ||||||
| dEQP-GLES2.functional.uniform_api.value.assigned.by_pointer.render.multiple_basic.both BadTerminate |  | ||||||
| dEQP-GLES2.functional.uniform_api.value.assigned.by_pointer.render.multiple_basic_array.vertex BadTerminate |  | ||||||
| dEQP-GLES2.functional.uniform_api.value.assigned.by_pointer.render.multiple_basic_array.fragment BadTerminate |  | ||||||
| dEQP-GLES2.functional.uniform_api.value.assigned.by_pointer.render.multiple_basic_array.both BadTerminate |  | ||||||
| dEQP-GLES2.functional.uniform_api.value.assigned.by_pointer.render.multiple_nested_structs_arrays.vertex BadTerminate |  | ||||||
| dEQP-GLES2.functional.uniform_api.value.assigned.by_pointer.render.multiple_nested_structs_arrays.fragment BadTerminate |  | ||||||
| dEQP-GLES2.functional.uniform_api.value.assigned.by_pointer.render.multiple_nested_structs_arrays.both BadTerminate |  | ||||||
| dEQP-GLES2.functional.uniform_api.value.assigned.by_value.get_uniform.basic.float_vertex BadTerminate |  | ||||||
| dEQP-GLES2.functional.uniform_api.value.assigned.by_value.get_uniform.basic.float_fragment BadTerminate |  | ||||||
| dEQP-GLES2.functional.uniform_api.value.assigned.by_value.render.basic.bvec3_both BadTerminatePass |  | ||||||
| dEQP-GLES2.functional.uniform_api.value.assigned.by_value.render.basic.bvec4_vertex BadTerminatePass |  | ||||||
| dEQP-GLES2.functional.uniform_api.value.assigned.by_value.render.basic.bvec4_fragment BadTerminatePass |  | ||||||
| dEQP-GLES2.functional.uniform_api.value.assigned.by_value.render.basic.bvec4_both BadTerminatePass |  | ||||||
| dEQP-GLES2.functional.uniform_api.value.assigned.by_value.render.basic.sampler2D_vertex BadTerminate |  | ||||||
| dEQP-GLES2.functional.uniform_api.value.assigned.by_value.render.basic.sampler2D_fragment BadTerminatePass |  | ||||||
| dEQP-GLES2.functional.uniform_api.value.assigned.by_value.render.basic.sampler2D_both BadTerminate |  | ||||||
| dEQP-GLES2.functional.uniform_api.value.assigned.by_value.render.basic.samplerCube_vertex BadTerminate |  | ||||||
| dEQP-GLES2.functional.uniform_api.value.assigned.by_value.render.basic.samplerCube_fragment BadTerminate |  | ||||||
| dEQP-GLES2.functional.uniform_api.value.assigned.by_value.render.basic.samplerCube_both BadTerminate |  | ||||||
| dEQP-GLES2.functional.uniform_api.value.assigned.by_value.render.basic_array.float_vertex BadTerminate |  | ||||||
| dEQP-GLES2.functional.uniform_api.value.assigned.by_value.render.basic_array.float_fragment BadTerminate |  | ||||||
| dEQP-GLES2.functional.uniform_api.value.assigned.by_value.render.basic_array.float_both BadTerminate |  | ||||||
| dEQP-GLES2.functional.uniform_api.value.assigned.by_value.render.basic_array.vec4_vertex BadTerminate |  | ||||||
| dEQP-GLES2.functional.uniform_api.value.assigned.by_value.render.basic_array.vec4_fragment BadTerminate |  | ||||||
| dEQP-GLES2.functional.uniform_api.value.assigned.by_value.render.basic_array.vec4_both BadTerminate |  | ||||||
| dEQP-GLES2.functional.uniform_api.value.assigned.by_value.render.basic_struct.float_vec4_fragment BadTerminatePass |  | ||||||
| dEQP-GLES2.functional.uniform_api.value.assigned.by_value.render.basic_struct.float_vec4_both BadTerminatePass |  | ||||||
| dEQP-GLES2.functional.uniform_api.value.assigned.by_value.render.basic_struct.int_ivec4_vertex BadTerminatePass |  | ||||||
| dEQP-GLES2.functional.uniform_api.value.assigned.by_value.render.basic_struct.int_ivec4_fragment BadTerminatePass |  | ||||||
| dEQP-GLES2.functional.uniform_api.value.assigned.by_value.render.basic_struct.int_ivec4_both BadTerminatePass |  | ||||||
| dEQP-GLES2.functional.uniform_api.value.assigned.by_value.render.basic_struct.bool_bvec4_vertex BadTerminatePass |  | ||||||
| dEQP-GLES2.functional.uniform_api.value.assigned.by_value.render.basic_struct.bool_bvec4_fragment BadTerminatePass |  | ||||||
| dEQP-GLES2.functional.uniform_api.value.assigned.by_value.render.basic_struct.bool_bvec4_both BadTerminatePass |  | ||||||
| dEQP-GLES2.functional.uniform_api.value.assigned.by_value.render.basic_struct.sampler2D_samplerCube_vertex BadTerminate |  | ||||||
| dEQP-GLES2.functional.uniform_api.value.assigned.by_value.render.basic_struct.sampler2D_samplerCube_fragment BadTerminate |  | ||||||
| dEQP-GLES2.functional.uniform_api.value.assigned.by_value.render.basic_struct.sampler2D_samplerCube_both BadTerminate |  | ||||||
| dEQP-GLES2.functional.uniform_api.value.assigned.by_value.render.struct_in_array.float_vec4_vertex BadTerminate |  | ||||||
| dEQP-GLES2.functional.uniform_api.value.assigned.by_value.render.struct_in_array.float_vec4_fragment BadTerminate |  | ||||||
| dEQP-GLES2.functional.uniform_api.value.assigned.by_value.render.struct_in_array.float_vec4_both BadTerminate |  | ||||||
| dEQP-GLES2.functional.uniform_api.value.assigned.by_value.render.struct_in_array.int_ivec4_vertex BadTerminate |  | ||||||
| dEQP-GLES2.functional.uniform_api.value.assigned.by_value.render.struct_in_array.int_ivec4_fragment BadTerminate |  | ||||||
| dEQP-GLES2.functional.uniform_api.value.assigned.by_value.render.struct_in_array.int_ivec4_both BadTerminatePass |  | ||||||
| dEQP-GLES2.functional.uniform_api.value.assigned.by_value.render.struct_in_array.bool_bvec4_vertex BadTerminatePass |  | ||||||
| dEQP-GLES2.functional.uniform_api.value.assigned.by_value.render.struct_in_array.bool_bvec4_fragment BadTerminatePass |  | ||||||
| dEQP-GLES2.functional.uniform_api.value.assigned.by_value.render.struct_in_array.bool_bvec4_both BadTerminatePass |  | ||||||
| dEQP-GLES2.functional.uniform_api.value.assigned.by_value.render.struct_in_array.sampler2D_samplerCube_vertex BadTerminate |  | ||||||
| dEQP-GLES2.functional.uniform_api.value.assigned.by_value.render.struct_in_array.sampler2D_samplerCube_fragment BadTerminate |  | ||||||
| dEQP-GLES2.functional.uniform_api.value.assigned.by_value.render.struct_in_array.sampler2D_samplerCube_both BadTerminate |  | ||||||
| dEQP-GLES2.functional.uniform_api.value.assigned.by_value.render.array_in_struct.float_vec4_vertex BadTerminate |  | ||||||
| dEQP-GLES2.functional.uniform_api.value.assigned.by_value.render.array_in_struct.float_vec4_fragment BadTerminate |  | ||||||
| dEQP-GLES2.functional.uniform_api.value.assigned.by_value.render.array_in_struct.float_vec4_both BadTerminate |  | ||||||
| dEQP-GLES2.functional.uniform_api.value.assigned.by_value.render.array_in_struct.int_ivec4_vertex BadTerminate |  | ||||||
| dEQP-GLES2.functional.uniform_api.value.assigned.by_value.render.array_in_struct.int_ivec4_fragment BadTerminate |  | ||||||
| dEQP-GLES2.functional.uniform_api.value.assigned.by_value.render.array_in_struct.int_ivec4_both BadTerminate |  | ||||||
| dEQP-GLES2.functional.uniform_api.value.assigned.by_value.render.array_in_struct.bool_bvec4_vertex BadTerminate |  | ||||||
| dEQP-GLES2.functional.uniform_api.value.assigned.by_value.render.array_in_struct.bool_bvec4_fragment BadTerminate |  | ||||||
| dEQP-GLES2.functional.uniform_api.value.assigned.by_value.render.array_in_struct.bool_bvec4_both BadTerminate |  | ||||||
| dEQP-GLES2.functional.uniform_api.value.assigned.by_value.render.array_in_struct.sampler2D_samplerCube_vertex BadTerminate |  | ||||||
| dEQP-GLES2.functional.uniform_api.value.assigned.by_value.render.array_in_struct.sampler2D_samplerCube_fragment BadTerminate |  | ||||||
| dEQP-GLES2.functional.uniform_api.value.assigned.by_value.render.array_in_struct.sampler2D_samplerCube_both BadTerminate |  | ||||||
| dEQP-GLES2.functional.uniform_api.value.assigned.by_value.render.nested_structs_arrays.float_vec4_vertex BadTerminate |  | ||||||
| dEQP-GLES2.functional.uniform_api.value.assigned.by_value.render.nested_structs_arrays.float_vec4_fragment BadTerminate |  | ||||||
| dEQP-GLES2.functional.uniform_api.value.assigned.by_value.render.nested_structs_arrays.float_vec4_both BadTerminate |  | ||||||
| dEQP-GLES2.functional.uniform_api.value.assigned.by_value.render.nested_structs_arrays.int_ivec4_vertex BadTerminate |  | ||||||
| dEQP-GLES2.functional.uniform_api.value.assigned.by_value.render.nested_structs_arrays.int_ivec4_fragment BadTerminate |  | ||||||
| dEQP-GLES2.functional.uniform_api.value.assigned.by_value.render.nested_structs_arrays.int_ivec4_both BadTerminate |  | ||||||
| dEQP-GLES2.functional.uniform_api.value.assigned.by_value.render.nested_structs_arrays.bool_bvec4_vertex BadTerminate |  | ||||||
| dEQP-GLES2.functional.uniform_api.value.assigned.by_value.render.nested_structs_arrays.bool_bvec4_fragment BadTerminate |  | ||||||
| dEQP-GLES2.functional.uniform_api.value.assigned.by_value.render.nested_structs_arrays.bool_bvec4_both BadTerminate |  | ||||||
| dEQP-GLES2.functional.uniform_api.value.assigned.by_value.render.nested_structs_arrays.sampler2D_samplerCube_vertex BadTerminate |  | ||||||
| dEQP-GLES2.functional.uniform_api.value.assigned.by_value.render.nested_structs_arrays.sampler2D_samplerCube_fragment BadTerminate |  | ||||||
| dEQP-GLES2.functional.uniform_api.value.assigned.by_value.render.nested_structs_arrays.sampler2D_samplerCube_both BadTerminate |  | ||||||
| dEQP-GLES2.functional.uniform_api.value.assigned.by_value.render.multiple_basic_array.vertex BadTerminate |  | ||||||
| dEQP-GLES2.functional.uniform_api.random.40 BadTerminatePass |  | ||||||
| dEQP-GLES2.functional.uniform_api.random.41 BadTerminate |  | ||||||
| dEQP-GLES2.functional.uniform_api.random.42 BadTerminatePass |  | ||||||
| dEQP-GLES2.functional.uniform_api.random.43 BadTerminatePass |  | ||||||
| dEQP-GLES2.functional.uniform_api.random.44 BadTerminatePass |  | ||||||
| dEQP-GLES2.functional.uniform_api.random.45 BadTerminatePass |  | ||||||
| dEQP-GLES2.functional.uniform_api.random.46 BadTerminatePass |  | ||||||
| dEQP-GLES2.functional.uniform_api.random.47 BadTerminatePass |  | ||||||
| dEQP-GLES2.functional.uniform_api.random.48 BadTerminate |  | ||||||
| dEQP-GLES2.functional.uniform_api.random.49 BadTerminate |  | ||||||
| dEQP-GLES2.functional.uniform_api.random.50 BadTerminate |  | ||||||
| dEQP-GLES2.functional.uniform_api.random.51 BadTerminate |  | ||||||
| dEQP-GLES2.functional.uniform_api.random.52 BadTerminate |  | ||||||
| dEQP-GLES2.functional.uniform_api.random.53 BadTerminate |  | ||||||
| dEQP-GLES2.functional.uniform_api.random.54 BadTerminate |  | ||||||
| dEQP-GLES2.functional.uniform_api.random.55 BadTerminate |  | ||||||
| dEQP-GLES2.functional.uniform_api.random.88 BadTerminate |  | ||||||
| dEQP-GLES2.functional.uniform_api.random.89 BadTerminatePass |  | ||||||
| dEQP-GLES2.functional.uniform_api.random.90 BadTerminatePass |  | ||||||
| dEQP-GLES2.functional.uniform_api.random.91 BadTerminatePass |  | ||||||
| dEQP-GLES2.functional.uniform_api.random.92 BadTerminatePass |  | ||||||
| dEQP-GLES2.functional.uniform_api.random.93 BadTerminate |  | ||||||
| dEQP-GLES2.functional.uniform_api.random.94 BadTerminate |  | ||||||
| dEQP-GLES2.functional.uniform_api.random.95 BadTerminate |  | ||||||
| dEQP-GLES2.functional.uniform_api.random.96 BadTerminate |  | ||||||
| dEQP-GLES2.functional.uniform_api.random.97 BadTerminate |  | ||||||
| dEQP-GLES2.functional.uniform_api.random.98 BadTerminate |  | ||||||
| dEQP-GLES2.functional.uniform_api.random.99 BadTerminate |  | ||||||
| dEQP-GLES2.functional.read_pixels.rgba_ubyte_align_1 BadTerminate |  | ||||||
| dEQP-GLES2.functional.read_pixels.rgba_ubyte_align_2 BadTerminate |  | ||||||
| dEQP-GLES2.functional.read_pixels.rgba_ubyte_align_4 BadTerminate |  | ||||||
| dEQP-GLES2.functional.read_pixels.rgba_ubyte_align_8 BadTerminate |  | ||||||
| dEQP-GLES2.functional.depth_range.write.reverse Fail |  | ||||||
| dEQP-GLES2.functional.depth_range.write.half_to_zero Fail |  | ||||||
| dEQP-GLES2.functional.depth_range.write.one_to_half Fail |  | ||||||
| dEQP-GLES2.functional.depth_range.write.0_8_to_third Fail |  | ||||||
| dEQP-GLES2.functional.depth_range.write.half_to_half Fail |  | ||||||
| dEQP-GLES2.functional.depth_range.compare.reverse Fail |  | ||||||
| dEQP-GLES2.functional.depth_range.compare.half_to_zero Fail |  | ||||||
| dEQP-GLES2.functional.depth_range.compare.one_to_half Fail |  | ||||||
| dEQP-GLES2.functional.depth_range.compare.0_8_to_third Fail |  | ||||||
| dEQP-GLES2.functional.depth_range.compare.half_to_half Fail |  | ||||||
| dEQP-GLES2.functional.dither.disabled.gradient_white Fail |  | ||||||
| dEQP-GLES2.functional.dither.disabled.gradient_red Fail |  | ||||||
| dEQP-GLES2.functional.dither.disabled.gradient_green Fail |  | ||||||
| dEQP-GLES2.functional.dither.disabled.gradient_blue Fail |  | ||||||
| dEQP-GLES2.functional.dither.disabled.gradient_alpha Fail |  | ||||||
| dEQP-GLES2.functional.dither.disabled.unicolored_quad_white Fail |  | ||||||
| dEQP-GLES2.functional.dither.disabled.unicolored_quad_red Fail |  | ||||||
| dEQP-GLES2.functional.dither.disabled.unicolored_quad_green Fail |  | ||||||
| dEQP-GLES2.functional.dither.disabled.unicolored_quad_blue Fail |  | ||||||
| dEQP-GLES2.functional.dither.disabled.unicolored_quad_alpha Fail |  | ||||||
| dEQP-GLES2.functional.state_query.fbo.framebuffer_attachment_texture_cube_map_face BadTerminate |  | ||||||
| dEQP-GLES2.functional.state_query.rbo.renderbuffer_size BadTerminate |  | ||||||
| dEQP-GLES2.functional.state_query.rbo.renderbuffer_internal_format BadTerminate |  | ||||||
| dEQP-GLES2.functional.state_query.rbo.renderbuffer_component_size_color BadTerminate |  | ||||||
| dEQP-GLES2.functional.draw.draw_arrays.first.first_0 Fail |  | ||||||
| dEQP-GLES2.functional.draw.draw_arrays.first.first_1 Fail |  | ||||||
| dEQP-GLES2.functional.draw.draw_arrays.first.first_17 Fail |  | ||||||
| dEQP-GLES2.functional.draw.draw_arrays.points.single_attribute Fail |  | ||||||
| dEQP-GLES2.functional.draw.draw_arrays.points.multiple_attributes Fail |  | ||||||
| dEQP-GLES2.functional.draw.draw_arrays.points.default_attribute Fail |  | ||||||
| dEQP-GLES2.functional.draw.draw_arrays.triangles.single_attribute Fail |  | ||||||
| dEQP-GLES2.functional.draw.draw_arrays.triangles.multiple_attributes Fail |  | ||||||
| dEQP-GLES2.functional.draw.draw_arrays.triangles.default_attribute Fail |  | ||||||
| dEQP-GLES2.functional.draw.draw_arrays.triangle_fan.single_attribute Fail |  | ||||||
| dEQP-GLES2.functional.draw.draw_arrays.triangle_fan.multiple_attributes Fail |  | ||||||
| dEQP-GLES2.functional.draw.draw_arrays.triangle_fan.default_attribute Fail |  | ||||||
| dEQP-GLES2.functional.draw.draw_arrays.triangle_strip.single_attribute Fail |  | ||||||
| dEQP-GLES2.functional.draw.draw_arrays.triangle_strip.multiple_attributes Fail |  | ||||||
| dEQP-GLES2.functional.draw.draw_arrays.triangle_strip.default_attribute Fail |  | ||||||
| dEQP-GLES2.functional.draw.draw_arrays.lines.single_attribute Fail |  | ||||||
| dEQP-GLES2.functional.draw.draw_arrays.lines.multiple_attributes Fail |  | ||||||
| dEQP-GLES2.functional.draw.draw_arrays.lines.default_attribute Fail |  | ||||||
| dEQP-GLES2.functional.draw.draw_arrays.line_strip.single_attribute Fail |  | ||||||
| dEQP-GLES2.functional.draw.draw_arrays.line_strip.multiple_attributes Fail |  | ||||||
| dEQP-GLES2.functional.draw.draw_arrays.line_strip.default_attribute Fail |  | ||||||
| dEQP-GLES2.functional.draw.draw_arrays.line_loop.single_attribute Fail |  | ||||||
| dEQP-GLES2.functional.draw.draw_arrays.line_loop.multiple_attributes Fail |  | ||||||
| dEQP-GLES2.functional.draw.draw_arrays.line_loop.default_attribute Fail |  | ||||||
| dEQP-GLES2.functional.draw.draw_elements.indices.user_ptr.index_byte Fail |  | ||||||
| dEQP-GLES2.functional.draw.draw_elements.indices.user_ptr.index_short Fail |  | ||||||
| dEQP-GLES2.functional.draw.draw_elements.indices.unaligned_user_ptr.index_short Fail |  | ||||||
| dEQP-GLES2.functional.draw.draw_elements.indices.buffer.index_byte Fail |  | ||||||
| dEQP-GLES2.functional.draw.draw_elements.indices.buffer.index_short Fail |  | ||||||
| dEQP-GLES2.functional.draw.draw_elements.points.single_attribute Fail |  | ||||||
| dEQP-GLES2.functional.draw.draw_elements.points.multiple_attributes Fail |  | ||||||
| dEQP-GLES2.functional.draw.draw_elements.points.default_attribute Fail |  | ||||||
| dEQP-GLES2.functional.draw.draw_elements.triangles.single_attribute Fail |  | ||||||
| dEQP-GLES2.functional.draw.draw_elements.triangles.multiple_attributes Fail |  | ||||||
| dEQP-GLES2.functional.draw.draw_elements.triangles.default_attribute Fail |  | ||||||
| dEQP-GLES2.functional.draw.draw_elements.triangle_fan.single_attribute Fail |  | ||||||
| dEQP-GLES2.functional.draw.draw_elements.triangle_fan.multiple_attributes Fail |  | ||||||
| dEQP-GLES2.functional.draw.draw_elements.triangle_fan.default_attribute Fail |  | ||||||
| dEQP-GLES2.functional.draw.draw_elements.triangle_strip.single_attribute Fail |  | ||||||
| dEQP-GLES2.functional.draw.draw_elements.triangle_strip.multiple_attributes Fail |  | ||||||
| dEQP-GLES2.functional.draw.draw_elements.triangle_strip.default_attribute Fail |  | ||||||
| dEQP-GLES2.functional.draw.draw_elements.lines.single_attribute Fail |  | ||||||
| dEQP-GLES2.functional.draw.draw_elements.lines.multiple_attributes Fail |  | ||||||
| dEQP-GLES2.functional.draw.draw_elements.lines.default_attribute Fail |  | ||||||
| dEQP-GLES2.functional.draw.draw_elements.line_strip.single_attribute Fail |  | ||||||
| dEQP-GLES2.functional.draw.draw_elements.line_strip.multiple_attributes Fail |  | ||||||
| dEQP-GLES2.functional.draw.draw_elements.line_strip.default_attribute Fail |  | ||||||
| dEQP-GLES2.functional.draw.draw_elements.line_loop.single_attribute Fail |  | ||||||
| dEQP-GLES2.functional.draw.draw_elements.line_loop.multiple_attributes Fail |  | ||||||
| dEQP-GLES2.functional.draw.draw_elements.line_loop.default_attribute Fail |  | ||||||
| dEQP-GLES2.functional.draw.random.0 Fail |  | ||||||
| dEQP-GLES2.functional.draw.random.1 Fail |  | ||||||
| dEQP-GLES2.functional.draw.random.2 Fail |  | ||||||
| dEQP-GLES2.functional.draw.random.6 Fail |  | ||||||
| dEQP-GLES2.functional.draw.random.8 Fail |  | ||||||
| dEQP-GLES2.functional.draw.random.9 Fail |  | ||||||
| dEQP-GLES2.functional.draw.random.10 Fail |  | ||||||
| dEQP-GLES2.functional.draw.random.12 Fail |  | ||||||
| dEQP-GLES2.functional.draw.random.14 Fail |  | ||||||
| dEQP-GLES2.functional.draw.random.16 Fail |  | ||||||
| dEQP-GLES2.functional.draw.random.17 Fail |  | ||||||
| dEQP-GLES2.functional.draw.random.18 Fail |  | ||||||
| dEQP-GLES2.functional.draw.random.20 Fail |  | ||||||
| dEQP-GLES2.functional.draw.random.21 Fail |  | ||||||
| dEQP-GLES2.functional.draw.random.25 Fail |  | ||||||
| dEQP-GLES2.functional.draw.random.26 Fail |  | ||||||
| dEQP-GLES2.functional.draw.random.28 Fail |  | ||||||
| dEQP-GLES2.functional.draw.random.30 Fail |  | ||||||
| dEQP-GLES2.functional.draw.random.31 Fail |  | ||||||
| dEQP-GLES2.functional.draw.random.32 Fail |  | ||||||
| dEQP-GLES2.functional.draw.random.33 Fail |  | ||||||
| dEQP-GLES2.functional.draw.random.34 Fail |  | ||||||
| dEQP-GLES2.functional.draw.random.36 Fail |  | ||||||
| dEQP-GLES2.functional.draw.random.37 Fail |  | ||||||
| dEQP-GLES2.functional.draw.random.39 Fail |  | ||||||
| dEQP-GLES2.functional.draw.random.40 Fail |  | ||||||
| dEQP-GLES2.functional.draw.random.41 Fail |  | ||||||
| dEQP-GLES2.functional.draw.random.42 Fail |  | ||||||
| dEQP-GLES2.functional.draw.random.43 Fail |  | ||||||
| dEQP-GLES2.functional.draw.random.44 Fail |  | ||||||
| dEQP-GLES2.functional.draw.random.45 Fail |  | ||||||
| dEQP-GLES2.functional.draw.random.46 Fail |  | ||||||
| dEQP-GLES2.functional.draw.random.47 Fail |  | ||||||
| dEQP-GLES2.functional.draw.random.48 Fail |  | ||||||
| dEQP-GLES2.functional.draw.random.49 Fail |  | ||||||
| dEQP-GLES2.functional.draw.random.50 Fail |  | ||||||
| dEQP-GLES2.functional.draw.random.51 Fail |  | ||||||
| dEQP-GLES2.functional.draw.random.52 Fail |  | ||||||
| dEQP-GLES2.functional.draw.random.56 Fail |  | ||||||
| dEQP-GLES2.functional.draw.random.58 Fail |  | ||||||
| dEQP-GLES2.functional.draw.random.61 Fail |  | ||||||
| dEQP-GLES2.functional.draw.random.62 Fail |  | ||||||
| dEQP-GLES2.functional.draw.random.63 Fail |  | ||||||
| dEQP-GLES2.functional.draw.random.65 Fail |  | ||||||
| dEQP-GLES2.functional.draw.random.67 Fail |  | ||||||
| dEQP-GLES2.functional.draw.random.69 Fail |  | ||||||
| dEQP-GLES2.functional.draw.random.70 Fail |  | ||||||
| dEQP-GLES2.functional.draw.random.71 Fail |  | ||||||
| @@ -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 |  | ||||||
|  |  | ||||||
| dEQP-GLES2.accuracy.texture.* |  | ||||||
| dEQP-GLES2.functional.clipping.* |  | ||||||
| dEQP-GLES2.functional.fbo.render.depth.* |  | ||||||
| dEQP-GLES2.functional.fbo.render.* |  | ||||||
| dEQP-GLES2.functional.fbo.completeness.* |  | ||||||
| dEQP-GLES2.functional.fragment_ops.* |  | ||||||
| dEQP-GLES2.functional.light_amount.* |  | ||||||
| dEQP-GLES2.functional.polygon_offset.* |  | ||||||
| dEQP-GLES2.functional.shaders.* |  | ||||||
| dEQP-GLES2.functional.texture.* |  | ||||||
| @@ -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,728 +0,0 @@ | |||||||
| dEQP-GLES2.functional.depth_range.write.0_8_to_third Fail |  | ||||||
| dEQP-GLES2.functional.depth_range.write.clamp_both Fail |  | ||||||
| dEQP-GLES2.functional.depth_range.write.clamp_far Fail |  | ||||||
| dEQP-GLES2.functional.depth_range.write.clamp_near Fail |  | ||||||
| dEQP-GLES2.functional.depth_range.write.default Fail |  | ||||||
| dEQP-GLES2.functional.depth_range.write.half_to_half Fail |  | ||||||
| dEQP-GLES2.functional.depth_range.write.half_to_one Fail |  | ||||||
| dEQP-GLES2.functional.depth_range.write.half_to_zero Fail |  | ||||||
| dEQP-GLES2.functional.depth_range.write.one_to_half Fail |  | ||||||
| dEQP-GLES2.functional.depth_range.write.one_to_one Fail |  | ||||||
| dEQP-GLES2.functional.depth_range.write.reverse Fail |  | ||||||
| dEQP-GLES2.functional.depth_range.write.third_to_0_8 Fail |  | ||||||
| dEQP-GLES2.functional.depth_range.write.zero_to_half Fail |  | ||||||
| dEQP-GLES2.functional.depth_stencil_clear.depth Fail |  | ||||||
| dEQP-GLES2.functional.depth_stencil_clear.depth_scissored Fail |  | ||||||
| dEQP-GLES2.functional.depth_stencil_clear.depth_scissored_masked Fail |  | ||||||
| dEQP-GLES2.functional.depth_stencil_clear.depth_stencil Fail |  | ||||||
| dEQP-GLES2.functional.depth_stencil_clear.depth_stencil_masked Fail |  | ||||||
| dEQP-GLES2.functional.depth_stencil_clear.depth_stencil_scissored Fail |  | ||||||
| dEQP-GLES2.functional.depth_stencil_clear.depth_stencil_scissored_masked Fail |  | ||||||
| dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.no_rebind_rbo_rgb565_depth_component16 Fail |  | ||||||
| dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.no_rebind_rbo_rgb565_stencil_index8 Fail |  | ||||||
| dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.no_rebind_rbo_rgb5_a1_depth_component16 Fail |  | ||||||
| dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.no_rebind_rbo_rgb5_a1_stencil_index8 Fail |  | ||||||
| dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.no_rebind_rbo_rgba4_depth_component16 Fail |  | ||||||
| dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.no_rebind_rbo_rgba4_stencil_index8 Fail |  | ||||||
| dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.no_rebind_tex2d_rgba_depth_component16 Fail |  | ||||||
| dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.no_rebind_tex2d_rgba_stencil_index8 Fail |  | ||||||
| dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.no_rebind_tex2d_rgb_depth_component16 Fail |  | ||||||
| dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.no_rebind_tex2d_rgb_stencil_index8 Fail |  | ||||||
| dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.rebind_rbo_rgb565_depth_component16 Fail |  | ||||||
| dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.rebind_rbo_rgb565_stencil_index8 Fail |  | ||||||
| dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.rebind_rbo_rgb5_a1_depth_component16 Fail |  | ||||||
| dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.rebind_rbo_rgb5_a1_stencil_index8 Fail |  | ||||||
| dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.rebind_rbo_rgba4_depth_component16 Fail |  | ||||||
| dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.rebind_rbo_rgba4_stencil_index8 Fail |  | ||||||
| dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.rebind_tex2d_rgba_depth_component16 Fail |  | ||||||
| dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.rebind_tex2d_rgba_stencil_index8 Fail |  | ||||||
| dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.rebind_tex2d_rgb_depth_component16 Fail |  | ||||||
| dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.rebind_tex2d_rgb_stencil_index8 Fail |  | ||||||
| dEQP-GLES2.functional.fbo.render.shared_colorbuffer.rbo_rgb565_depth_component16 Fail |  | ||||||
| dEQP-GLES2.functional.fbo.render.shared_colorbuffer.tex2d_rgba_depth_component16 Fail |  | ||||||
| dEQP-GLES2.functional.fbo.render.shared_colorbuffer.tex2d_rgb_depth_component16 Fail |  | ||||||
| dEQP-GLES2.functional.fbo.render.shared_depthbuffer.rbo_rgb565_depth_component16 Fail |  | ||||||
| dEQP-GLES2.functional.fbo.render.shared_depthbuffer.tex2d_rgba_depth_component16 Fail |  | ||||||
| dEQP-GLES2.functional.fbo.render.shared_depthbuffer.tex2d_rgb_depth_component16 Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.blend.equation_src_func_dst_func.add_dst_color_one_minus_src_color Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.blend.equation_src_func_dst_func.reverse_subtract_zero_dst_alpha Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.blend.equation_src_func_dst_func.reverse_subtract_zero_dst_color Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.blend.equation_src_func_dst_func.reverse_subtract_zero_one Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.blend.rgb_func_alpha_func.dst.one_minus_src_color_one_minus_src_alpha Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.blend.rgb_func_alpha_func.dst.one_minus_src_color_one_minus_src_color Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.random.0 Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.random.10 Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.random.11 Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.random.12 Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.random.13 Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.random.14 Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.random.15 Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.random.16 Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.random.17 Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.random.18 Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.random.19 Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.random.1 Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.random.20 Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.random.21 Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.random.22 Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.random.23 Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.random.24 Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.random.2 Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.random.3 Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.random.4 Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.random.5 Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.random.6 Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.random.7 Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.random.8 Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.random.9 Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_depth_funcs.no_stencil_depth_always Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_depth_funcs.no_stencil_depth_equal Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_depth_funcs.no_stencil_depth_gequal Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_depth_funcs.no_stencil_depth_greater Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_depth_funcs.no_stencil_depth_lequal Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_depth_funcs.no_stencil_depth_less Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_depth_funcs.no_stencil_depth_never Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_depth_funcs.no_stencil_depth_notequal Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_depth_funcs.no_stencil_no_depth Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_depth_funcs.stencil_always_depth_always Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_depth_funcs.stencil_always_depth_equal Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_depth_funcs.stencil_always_depth_gequal Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_depth_funcs.stencil_always_depth_greater Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_depth_funcs.stencil_always_depth_lequal Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_depth_funcs.stencil_always_depth_less Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_depth_funcs.stencil_always_depth_never Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_depth_funcs.stencil_always_depth_notequal Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_depth_funcs.stencil_always_no_depth Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_depth_funcs.stencil_equal_depth_always Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_depth_funcs.stencil_equal_depth_equal Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_depth_funcs.stencil_equal_depth_gequal Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_depth_funcs.stencil_equal_depth_greater Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_depth_funcs.stencil_equal_depth_lequal Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_depth_funcs.stencil_equal_depth_less Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_depth_funcs.stencil_equal_depth_never Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_depth_funcs.stencil_equal_depth_notequal Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_depth_funcs.stencil_equal_no_depth Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_depth_funcs.stencil_gequal_depth_always Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_depth_funcs.stencil_gequal_depth_equal Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_depth_funcs.stencil_gequal_depth_gequal Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_depth_funcs.stencil_gequal_depth_greater Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_depth_funcs.stencil_gequal_depth_lequal Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_depth_funcs.stencil_gequal_depth_less Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_depth_funcs.stencil_gequal_depth_never Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_depth_funcs.stencil_gequal_depth_notequal Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_depth_funcs.stencil_gequal_no_depth Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_depth_funcs.stencil_greater_depth_always Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_depth_funcs.stencil_greater_depth_equal Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_depth_funcs.stencil_greater_depth_gequal Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_depth_funcs.stencil_greater_depth_greater Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_depth_funcs.stencil_greater_depth_lequal Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_depth_funcs.stencil_greater_depth_less Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_depth_funcs.stencil_greater_depth_never Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_depth_funcs.stencil_greater_depth_notequal Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_depth_funcs.stencil_greater_no_depth Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_depth_funcs.stencil_lequal_depth_always Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_depth_funcs.stencil_lequal_depth_equal Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_depth_funcs.stencil_lequal_depth_gequal Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_depth_funcs.stencil_lequal_depth_greater Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_depth_funcs.stencil_lequal_depth_lequal Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_depth_funcs.stencil_lequal_depth_less Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_depth_funcs.stencil_lequal_depth_never Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_depth_funcs.stencil_lequal_depth_notequal Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_depth_funcs.stencil_lequal_no_depth Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_depth_funcs.stencil_less_depth_always Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_depth_funcs.stencil_less_depth_equal Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_depth_funcs.stencil_less_depth_gequal Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_depth_funcs.stencil_less_depth_greater Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_depth_funcs.stencil_less_depth_lequal Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_depth_funcs.stencil_less_depth_less Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_depth_funcs.stencil_less_depth_never Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_depth_funcs.stencil_less_depth_notequal Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_depth_funcs.stencil_less_no_depth Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_depth_funcs.stencil_never_depth_always Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_depth_funcs.stencil_never_depth_equal Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_depth_funcs.stencil_never_depth_gequal Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_depth_funcs.stencil_never_depth_greater Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_depth_funcs.stencil_never_depth_lequal Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_depth_funcs.stencil_never_depth_less Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_depth_funcs.stencil_never_depth_never Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_depth_funcs.stencil_never_depth_notequal Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_depth_funcs.stencil_never_no_depth Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_depth_funcs.stencil_notequal_depth_always Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_depth_funcs.stencil_notequal_depth_equal Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_depth_funcs.stencil_notequal_depth_gequal Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_depth_funcs.stencil_notequal_depth_greater Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_depth_funcs.stencil_notequal_depth_lequal Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_depth_funcs.stencil_notequal_depth_less Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_depth_funcs.stencil_notequal_depth_never Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_depth_funcs.stencil_notequal_depth_notequal Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_depth_funcs.stencil_notequal_no_depth Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_decr_decr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_decr_decr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_decr_incr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_decr_incr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_decr_invert Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_decr_keep Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_decr_replace Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_decr_wrap_decr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_decr_wrap_decr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_decr_wrap_incr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_decr_wrap_incr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_decr_wrap_invert Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_decr_wrap_keep Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_decr_wrap_replace Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_decr_wrap_zero Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_decr_zero Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_incr_decr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_incr_decr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_incr_incr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_incr_incr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_incr_invert Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_incr_keep Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_incr_replace Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_incr_wrap_decr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_incr_wrap_decr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_incr_wrap_incr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_incr_wrap_incr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_incr_wrap_invert Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_incr_wrap_keep Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_incr_wrap_replace Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_incr_wrap_zero Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_incr_zero Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_invert_decr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_invert_decr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_invert_incr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_invert_incr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_invert_invert Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_invert_keep Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_invert_replace Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_invert_zero Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_keep_decr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_keep_decr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_keep_incr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_keep_incr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_keep_invert Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_keep_keep Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_keep_replace Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_keep_zero Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_replace_decr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_replace_decr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_replace_incr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_replace_incr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_replace_invert Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_replace_keep Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_replace_replace Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_replace_zero Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_wrap_decr_decr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_wrap_decr_decr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_wrap_decr_incr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_wrap_decr_incr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_wrap_decr_invert Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_wrap_decr_keep Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_wrap_decr_replace Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_wrap_decr_wrap_decr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_wrap_decr_wrap_decr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_wrap_decr_wrap_incr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_wrap_decr_wrap_incr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_wrap_decr_wrap_invert Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_wrap_decr_wrap_keep Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_wrap_decr_wrap_replace Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_wrap_decr_wrap_zero Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_wrap_decr_zero Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_wrap_incr_decr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_wrap_incr_decr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_wrap_incr_incr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_wrap_incr_incr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_wrap_incr_invert Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_wrap_incr_keep Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_wrap_incr_replace Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_wrap_incr_wrap_decr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_wrap_incr_wrap_decr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_wrap_incr_wrap_incr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_wrap_incr_wrap_incr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_wrap_incr_wrap_invert Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_wrap_incr_wrap_keep Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_wrap_incr_wrap_replace Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_wrap_incr_wrap_zero Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_wrap_incr_zero Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_wrap_invert_decr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_wrap_invert_decr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_wrap_invert_incr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_wrap_invert_incr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_wrap_invert_invert Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_wrap_invert_keep Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_wrap_invert_replace Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_wrap_invert_zero Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_wrap_keep_decr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_wrap_keep_decr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_wrap_keep_incr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_wrap_keep_incr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_wrap_keep_invert Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_wrap_keep_keep Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_wrap_keep_replace Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_wrap_keep_zero Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_wrap_replace_decr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_wrap_replace_decr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_wrap_replace_incr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_wrap_replace_incr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_wrap_replace_invert Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_wrap_replace_keep Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_wrap_replace_replace Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_wrap_replace_zero Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_wrap_zero_decr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_wrap_zero_decr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_wrap_zero_incr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_wrap_zero_incr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_wrap_zero_invert Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_wrap_zero_keep Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_wrap_zero_replace Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_wrap_zero_zero Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_zero_decr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_zero_decr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_zero_incr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_zero_incr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_zero_invert Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_zero_keep Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_zero_replace Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_zero_zero Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_decr_decr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_decr_decr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_decr_incr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_decr_incr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_decr_invert Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_decr_keep Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_decr_replace Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_decr_wrap_decr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_decr_wrap_decr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_decr_wrap_incr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_decr_wrap_incr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_decr_wrap_invert Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_decr_wrap_keep Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_decr_wrap_replace Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_decr_wrap_zero Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_decr_zero Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_incr_decr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_incr_decr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_incr_incr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_incr_incr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_incr_invert Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_incr_keep Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_incr_replace Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_incr_wrap_decr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_incr_wrap_decr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_incr_wrap_incr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_incr_wrap_incr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_incr_wrap_invert Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_incr_wrap_keep Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_incr_wrap_replace Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_incr_wrap_zero Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_incr_zero Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_invert_decr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_invert_decr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_invert_incr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_invert_incr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_invert_invert Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_invert_keep Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_invert_replace Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_invert_zero Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_keep_decr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_keep_decr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_keep_incr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_keep_incr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_keep_invert Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_keep_keep Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_keep_replace Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_keep_zero Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_replace_decr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_replace_decr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_replace_incr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_replace_incr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_replace_invert Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_replace_keep Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_replace_replace Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_replace_zero Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_wrap_decr_decr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_wrap_decr_decr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_wrap_decr_incr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_wrap_decr_incr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_wrap_decr_invert Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_wrap_decr_keep Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_wrap_decr_replace Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_wrap_decr_wrap_decr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_wrap_decr_wrap_decr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_wrap_decr_wrap_incr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_wrap_decr_wrap_incr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_wrap_decr_wrap_invert Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_wrap_decr_wrap_keep Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_wrap_decr_wrap_replace Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_wrap_decr_wrap_zero Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_wrap_decr_zero Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_wrap_incr_decr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_wrap_incr_decr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_wrap_incr_incr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_wrap_incr_incr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_wrap_incr_invert Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_wrap_incr_keep Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_wrap_incr_replace Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_wrap_incr_wrap_decr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_wrap_incr_wrap_decr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_wrap_incr_wrap_incr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_wrap_incr_wrap_incr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_wrap_incr_wrap_invert Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_wrap_incr_wrap_keep Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_wrap_incr_wrap_replace Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_wrap_incr_wrap_zero Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_wrap_incr_zero Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_wrap_invert_decr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_wrap_invert_decr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_wrap_invert_incr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_wrap_invert_incr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_wrap_invert_invert Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_wrap_invert_keep Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_wrap_invert_replace Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_wrap_invert_zero Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_wrap_keep_decr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_wrap_keep_decr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_wrap_keep_incr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_wrap_keep_incr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_wrap_keep_invert Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_wrap_keep_keep Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_wrap_keep_replace Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_wrap_keep_zero Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_wrap_replace_decr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_wrap_replace_decr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_wrap_replace_incr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_wrap_replace_incr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_wrap_replace_invert Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_wrap_replace_keep Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_wrap_replace_replace Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_wrap_replace_zero Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_wrap_zero_decr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_wrap_zero_decr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_wrap_zero_incr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_wrap_zero_incr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_wrap_zero_invert Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_wrap_zero_keep Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_wrap_zero_replace Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_wrap_zero_zero Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_zero_decr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_zero_decr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_zero_incr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_zero_incr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_zero_invert Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_zero_keep Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_zero_replace Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_zero_zero Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.invert_decr_decr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.invert_decr_decr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.invert_decr_incr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.invert_decr_incr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.invert_decr_invert Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.invert_decr_keep Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.invert_decr_replace Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.invert_decr_wrap_decr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.invert_decr_wrap_decr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.invert_decr_wrap_incr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.invert_decr_wrap_incr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.invert_decr_wrap_invert Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.invert_decr_wrap_keep Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.invert_decr_wrap_replace Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.invert_decr_wrap_zero Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.invert_decr_zero Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.invert_incr_decr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.invert_incr_decr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.invert_incr_incr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.invert_incr_incr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.invert_incr_invert Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.invert_incr_keep Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.invert_incr_replace Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.invert_incr_wrap_decr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.invert_incr_wrap_decr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.invert_incr_wrap_incr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.invert_incr_wrap_incr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.invert_incr_wrap_invert Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.invert_incr_wrap_keep Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.invert_incr_wrap_replace Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.invert_incr_wrap_zero Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.invert_incr_zero Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.invert_invert_decr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.invert_invert_decr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.invert_invert_incr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.invert_invert_incr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.invert_invert_invert Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.invert_invert_keep Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.invert_invert_replace Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.invert_invert_zero Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.invert_keep_decr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.invert_keep_decr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.invert_keep_incr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.invert_keep_incr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.invert_keep_invert Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.invert_keep_keep Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.invert_keep_replace Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.invert_keep_zero Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.invert_replace_decr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.invert_replace_decr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.invert_replace_incr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.invert_replace_incr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.invert_replace_invert Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.invert_replace_keep Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.invert_replace_replace Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.invert_replace_zero Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.invert_zero_decr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.invert_zero_decr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.invert_zero_incr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.invert_zero_incr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.invert_zero_invert Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.invert_zero_keep Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.invert_zero_replace Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.invert_zero_zero Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.keep_decr_decr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.keep_decr_decr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.keep_decr_incr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.keep_decr_incr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.keep_decr_invert Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.keep_decr_keep Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.keep_decr_replace Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.keep_decr_wrap_decr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.keep_decr_wrap_decr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.keep_decr_wrap_incr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.keep_decr_wrap_incr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.keep_decr_wrap_invert Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.keep_decr_wrap_keep Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.keep_decr_wrap_replace Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.keep_decr_wrap_zero Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.keep_decr_zero Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.keep_incr_decr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.keep_incr_decr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.keep_incr_incr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.keep_incr_incr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.keep_incr_invert Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.keep_incr_keep Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.keep_incr_replace Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.keep_incr_wrap_decr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.keep_incr_wrap_decr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.keep_incr_wrap_incr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.keep_incr_wrap_incr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.keep_incr_wrap_invert Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.keep_incr_wrap_keep Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.keep_incr_wrap_replace Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.keep_incr_wrap_zero Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.keep_incr_zero Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.keep_invert_decr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.keep_invert_decr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.keep_invert_incr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.keep_invert_incr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.keep_invert_invert Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.keep_invert_keep Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.keep_invert_replace Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.keep_invert_zero Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.keep_keep_decr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.keep_keep_decr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.keep_keep_incr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.keep_keep_incr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.keep_keep_invert Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.keep_keep_keep Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.keep_keep_replace Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.keep_keep_zero Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.keep_replace_decr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.keep_replace_decr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.keep_replace_incr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.keep_replace_incr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.keep_replace_invert Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.keep_replace_keep Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.keep_replace_replace Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.keep_replace_zero Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.keep_zero_decr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.keep_zero_decr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.keep_zero_incr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.keep_zero_incr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.keep_zero_invert Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.keep_zero_keep Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.keep_zero_replace Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.keep_zero_zero Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.replace_decr_decr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.replace_decr_decr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.replace_decr_incr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.replace_decr_incr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.replace_decr_invert Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.replace_decr_keep Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.replace_decr_replace Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.replace_decr_wrap_decr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.replace_decr_wrap_decr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.replace_decr_wrap_incr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.replace_decr_wrap_incr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.replace_decr_wrap_invert Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.replace_decr_wrap_keep Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.replace_decr_wrap_replace Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.replace_decr_wrap_zero Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.replace_decr_zero Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.replace_incr_decr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.replace_incr_decr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.replace_incr_incr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.replace_incr_incr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.replace_incr_invert Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.replace_incr_keep Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.replace_incr_replace Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.replace_incr_wrap_decr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.replace_incr_wrap_decr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.replace_incr_wrap_incr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.replace_incr_wrap_incr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.replace_incr_wrap_invert Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.replace_incr_wrap_keep Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.replace_incr_wrap_replace Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.replace_incr_wrap_zero Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.replace_incr_zero Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.replace_invert_decr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.replace_invert_decr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.replace_invert_incr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.replace_invert_incr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.replace_invert_invert Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.replace_invert_keep Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.replace_invert_replace Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.replace_invert_zero Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.replace_keep_decr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.replace_keep_decr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.replace_keep_incr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.replace_keep_incr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.replace_keep_invert Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.replace_keep_keep Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.replace_keep_replace Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.replace_keep_zero Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.replace_replace_decr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.replace_replace_decr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.replace_replace_incr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.replace_replace_incr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.replace_replace_invert Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.replace_replace_keep Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.replace_replace_replace Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.replace_replace_zero Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.replace_zero_decr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.replace_zero_decr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.replace_zero_incr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.replace_zero_incr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.replace_zero_invert Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.replace_zero_keep Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.replace_zero_replace Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.replace_zero_zero Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.zero_decr_decr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.zero_decr_decr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.zero_decr_incr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.zero_decr_incr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.zero_decr_invert Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.zero_decr_keep Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.zero_decr_replace Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.zero_decr_wrap_decr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.zero_decr_wrap_decr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.zero_decr_wrap_incr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.zero_decr_wrap_incr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.zero_decr_wrap_invert Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.zero_decr_wrap_keep Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.zero_decr_wrap_replace Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.zero_decr_wrap_zero Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.zero_decr_zero Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.zero_incr_decr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.zero_incr_decr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.zero_incr_incr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.zero_incr_incr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.zero_incr_invert Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.zero_incr_keep Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.zero_incr_replace Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.zero_incr_wrap_decr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.zero_incr_wrap_decr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.zero_incr_wrap_incr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.zero_incr_wrap_incr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.zero_incr_wrap_invert Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.zero_incr_wrap_keep Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.zero_incr_wrap_replace Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.zero_incr_wrap_zero Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.zero_incr_zero Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.zero_invert_decr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.zero_invert_decr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.zero_invert_incr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.zero_invert_incr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.zero_invert_invert Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.zero_invert_keep Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.zero_invert_replace Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.zero_invert_zero Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.zero_keep_decr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.zero_keep_decr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.zero_keep_incr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.zero_keep_incr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.zero_keep_invert Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.zero_keep_keep Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.zero_keep_replace Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.zero_keep_zero Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.zero_replace_decr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.zero_replace_decr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.zero_replace_incr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.zero_replace_incr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.zero_replace_invert Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.zero_replace_keep Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.zero_replace_replace Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.zero_replace_zero Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.zero_zero_decr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.zero_zero_decr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.zero_zero_incr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.zero_zero_incr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.zero_zero_invert Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.zero_zero_keep Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.zero_zero_replace Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.zero_zero_zero Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.write_mask.both Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.write_mask.depth Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.write_mask.stencil Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.11 Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.13 Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.15 Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.17 Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.18 Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.19 Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.20 Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.22 Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.26 Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.39 Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.42 Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.44 Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.47 Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.48 Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.57 Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.60 Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.61 Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.64 Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.68 Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.72 Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.75 Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.77 Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.79 Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.8 Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.93 Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.98 Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.random.0 Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.random.11 Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.random.19 Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.random.24 Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.random.25 Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.random.32 Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.random.37 Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.random.3 Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.random.45 Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.random.48 Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.random.53 Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.random.56 Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.random.63 Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.random.65 Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.random.66 Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.random.67 Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.random.68 Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.random.6 Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.random.72 Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.random.75 Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.random.81 Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.random.87 Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.random.94 Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.random.96 Fail |  | ||||||
| dEQP-GLES2.functional.polygon_offset.default_render_with_units Fail |  | ||||||
| dEQP-GLES2.functional.polygon_offset.fixed16_factor_1_slope Fail |  | ||||||
| dEQP-GLES2.functional.polygon_offset.fixed16_render_with_units Fail |  | ||||||
| dEQP-GLES2.functional.shaders.scoping.valid.local_variable_hides_function_parameter_fragment Fail |  | ||||||
| dEQP-GLES2.functional.shaders.scoping.valid.local_variable_hides_function_parameter_vertex Fail |  | ||||||
| @@ -1,63 +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 |  | ||||||
|  |  | ||||||
| dEQP-GLES2.functional.fbo.render.depth.* |  | ||||||
| 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.clipping.triangle_vertex.clip_three.clip_pos_y_pos_z_and_neg_x_neg_y_pos_z_and_pos_x_pos_y_neg_z |  | ||||||
| dEQP-GLES2.functional.fbo.render.color.blend_rbo_rgb5_a1 |  | ||||||
| dEQP-GLES2.functional.fbo.render.color.blend_rbo_rgb5_a1_depth_component16 |  | ||||||
| dEQP-GLES2.functional.fbo.render.color.blend_rbo_rgba4 |  | ||||||
| dEQP-GLES2.functional.fbo.render.color.blend_rbo_rgba4_depth_component16 |  | ||||||
| dEQP-GLES2.functional.fbo.render.color.blend_npot_rbo_rgb5_a1 |  | ||||||
| dEQP-GLES2.functional.fbo.render.color.blend_npot_rbo_rgb5_a1_depth_component16 |  | ||||||
| dEQP-GLES2.functional.fbo.render.color.blend_npot_rbo_rgba4 |  | ||||||
| dEQP-GLES2.functional.fbo.render.color.blend_npot_rbo_rgba4_depth_component16 |  | ||||||
| dEQP-GLES2.functional.fbo.render.color_clear.rbo_rgb5_a1 |  | ||||||
| dEQP-GLES2.functional.fbo.render.color_clear.rbo_rgb5_a1_depth_component16 |  | ||||||
| dEQP-GLES2.functional.fbo.render.color_clear.rbo_rgb5_a1_stencil_index8 |  | ||||||
| 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.recreate_depthbuffer.* |  | ||||||
| dEQP-GLES2.functional.fbo.render.recreate_stencilbuffer.* |  | ||||||
| dEQP-GLES2.functional.fbo.render.shared_colorbuffer_clear.rbo_rgb5_a1 |  | ||||||
| dEQP-GLES2.functional.fbo.render.shared_colorbuffer_clear.rbo_rgba4 |  | ||||||
| dEQP-GLES2.functional.fbo.render.shared_colorbuffer_clear.tex2d_rgb |  | ||||||
| dEQP-GLES2.functional.fbo.render.shared_colorbuffer_clear.tex2d_rgba |  | ||||||
| dEQP-GLES2.functional.fbo.render.shared_colorbuffer.rbo_rgb5_a1 |  | ||||||
| dEQP-GLES2.functional.fbo.render.shared_colorbuffer.rbo_rgba4 |  | ||||||
| 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.stencil_clear.rbo_rgb5_a1_stencil_index8 |  | ||||||
| dEQP-GLES2.functional.fbo.render.stencil.npot_rbo_rgb5_a1_stencil_index8 |  | ||||||
| dEQP-GLES2.functional.fbo.render.stencil.npot_rbo_rgba4_stencil_index8 |  | ||||||
| dEQP-GLES2.functional.fbo.render.stencil.rbo_rgb5_a1_stencil_index8 |  | ||||||
| dEQP-GLES2.functional.fbo.render.stencil.rbo_rgba4_stencil_index8 |  | ||||||
| dEQP-GLES2.functional.lifetime.attach.deleted_input.renderbuffer_framebuffer |  | ||||||
| dEQP-GLES2.functional.lifetime.attach.deleted_output.renderbuffer_framebuffer |  | ||||||
| dEQP-GLES2.functional.polygon_offset.fixed16_factor_0_slope |  | ||||||
| dEQP-GLES2.functional.polygon_offset.fixed16_factor_1_slope |  | ||||||
| dEQP-GLES2.functional.shaders.invariance.highp.loop_4 |  | ||||||
| dEQP-GLES2.functional.shaders.matrix.mul.dynamic_highp_mat4_vec4_vertex |  | ||||||
| dEQP-GLES2.functional.shaders.matrix.mul.dynamic_highp_vec4_mat4_fragment |  | ||||||
| dEQP-GLES2.functional.shaders.operator.common_functions.smoothstep.mediump_vec3_vertex |  | ||||||
| dEQP-GLES2.functional.shaders.random.all_features.fragment.12 |  | ||||||
| dEQP-GLES2.functional.shaders.random.all_features.fragment.37 |  | ||||||
| dEQP-GLES2.functional.texture.units.2_units.mixed.1 |  | ||||||
| dEQP-GLES2.functional.texture.units.2_units.mixed.3 |  | ||||||
| dEQP-GLES2.functional.texture.units.2_units.only_2d.2 |  | ||||||
| dEQP-GLES2.functional.texture.units.4_units.mixed.5 |  | ||||||
| dEQP-GLES2.functional.texture.units.4_units.only_2d.0 |  | ||||||
| dEQP-GLES2.functional.texture.units.8_units.only_cube.2 |  | ||||||
| dEQP-GLES2.functional.texture.units.all_units.mixed.6 |  | ||||||
| dEQP-GLES2.functional.texture.units.all_units.only_cube.4 |  | ||||||
| dEQP-GLES2.functional.texture.units.all_units.only_cube.7 |  | ||||||
| dEQP-GLES2.functional.texture.units.all_units.only_cube.8 |  | ||||||
|  |  | ||||||
| @@ -1,722 +0,0 @@ | |||||||
| dEQP-GLES2.functional.depth_range.write.0_8_to_third Fail |  | ||||||
| dEQP-GLES2.functional.depth_range.write.clamp_both Fail |  | ||||||
| dEQP-GLES2.functional.depth_range.write.clamp_far Fail |  | ||||||
| dEQP-GLES2.functional.depth_range.write.clamp_near Fail |  | ||||||
| dEQP-GLES2.functional.depth_range.write.default Fail |  | ||||||
| dEQP-GLES2.functional.depth_range.write.half_to_half Fail |  | ||||||
| dEQP-GLES2.functional.depth_range.write.half_to_one Fail |  | ||||||
| dEQP-GLES2.functional.depth_range.write.half_to_zero Fail |  | ||||||
| dEQP-GLES2.functional.depth_range.write.one_to_half Fail |  | ||||||
| dEQP-GLES2.functional.depth_range.write.one_to_one Fail |  | ||||||
| dEQP-GLES2.functional.depth_range.write.reverse Fail |  | ||||||
| dEQP-GLES2.functional.depth_range.write.third_to_0_8 Fail |  | ||||||
| dEQP-GLES2.functional.depth_range.write.zero_to_half Fail |  | ||||||
| dEQP-GLES2.functional.depth_stencil_clear.depth Fail |  | ||||||
| dEQP-GLES2.functional.depth_stencil_clear.depth_scissored Fail |  | ||||||
| dEQP-GLES2.functional.depth_stencil_clear.depth_scissored_masked Fail |  | ||||||
| dEQP-GLES2.functional.depth_stencil_clear.depth_stencil Fail |  | ||||||
| dEQP-GLES2.functional.depth_stencil_clear.depth_stencil_masked Fail |  | ||||||
| dEQP-GLES2.functional.depth_stencil_clear.depth_stencil_scissored Fail |  | ||||||
| dEQP-GLES2.functional.depth_stencil_clear.depth_stencil_scissored_masked Fail |  | ||||||
| dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.no_rebind_rbo_rgb565_depth_component16 Fail |  | ||||||
| dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.no_rebind_rbo_rgb565_stencil_index8 Fail |  | ||||||
| dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.no_rebind_rbo_rgb5_a1_depth_component16 Fail |  | ||||||
| dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.no_rebind_rbo_rgb5_a1_stencil_index8 Fail |  | ||||||
| dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.no_rebind_rbo_rgba4_depth_component16 Fail |  | ||||||
| dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.no_rebind_rbo_rgba4_stencil_index8 Fail |  | ||||||
| dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.no_rebind_tex2d_rgba_depth_component16 Fail |  | ||||||
| dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.no_rebind_tex2d_rgba_stencil_index8 Fail |  | ||||||
| dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.no_rebind_tex2d_rgb_depth_component16 Fail |  | ||||||
| dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.no_rebind_tex2d_rgb_stencil_index8 Fail |  | ||||||
| dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.rebind_rbo_rgb565_depth_component16 Fail |  | ||||||
| dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.rebind_rbo_rgb565_stencil_index8 Fail |  | ||||||
| dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.rebind_rbo_rgb5_a1_depth_component16 Fail |  | ||||||
| dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.rebind_rbo_rgb5_a1_stencil_index8 Fail |  | ||||||
| dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.rebind_rbo_rgba4_depth_component16 Fail |  | ||||||
| dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.rebind_rbo_rgba4_stencil_index8 Fail |  | ||||||
| dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.rebind_tex2d_rgba_depth_component16 Fail |  | ||||||
| dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.rebind_tex2d_rgba_stencil_index8 Fail |  | ||||||
| dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.rebind_tex2d_rgb_depth_component16 Fail |  | ||||||
| dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.rebind_tex2d_rgb_stencil_index8 Fail |  | ||||||
| dEQP-GLES2.functional.fbo.render.shared_colorbuffer.rbo_rgb565_depth_component16 Fail |  | ||||||
| dEQP-GLES2.functional.fbo.render.shared_colorbuffer.tex2d_rgba_depth_component16 Fail |  | ||||||
| dEQP-GLES2.functional.fbo.render.shared_colorbuffer.tex2d_rgb_depth_component16 Fail |  | ||||||
| dEQP-GLES2.functional.fbo.render.shared_depthbuffer.rbo_rgb565_depth_component16 Fail |  | ||||||
| dEQP-GLES2.functional.fbo.render.shared_depthbuffer.tex2d_rgba_depth_component16 Fail |  | ||||||
| dEQP-GLES2.functional.fbo.render.shared_depthbuffer.tex2d_rgb_depth_component16 Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.random.0 Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.random.10 Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.random.11 Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.random.12 Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.random.13 Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.random.14 Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.random.15 Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.random.16 Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.random.17 Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.random.18 Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.random.19 Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.random.1 Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.random.20 Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.random.21 Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.random.22 Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.random.23 Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.random.24 Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.random.2 Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.random.3 Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.random.4 Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.random.5 Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.random.6 Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.random.7 Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.random.8 Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.random.9 Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_depth_funcs.no_stencil_depth_always Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_depth_funcs.no_stencil_depth_equal Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_depth_funcs.no_stencil_depth_gequal Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_depth_funcs.no_stencil_depth_greater Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_depth_funcs.no_stencil_depth_lequal Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_depth_funcs.no_stencil_depth_less Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_depth_funcs.no_stencil_depth_never Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_depth_funcs.no_stencil_depth_notequal Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_depth_funcs.no_stencil_no_depth Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_depth_funcs.stencil_always_depth_always Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_depth_funcs.stencil_always_depth_equal Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_depth_funcs.stencil_always_depth_gequal Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_depth_funcs.stencil_always_depth_greater Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_depth_funcs.stencil_always_depth_lequal Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_depth_funcs.stencil_always_depth_less Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_depth_funcs.stencil_always_depth_never Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_depth_funcs.stencil_always_depth_notequal Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_depth_funcs.stencil_always_no_depth Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_depth_funcs.stencil_equal_depth_always Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_depth_funcs.stencil_equal_depth_equal Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_depth_funcs.stencil_equal_depth_gequal Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_depth_funcs.stencil_equal_depth_greater Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_depth_funcs.stencil_equal_depth_lequal Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_depth_funcs.stencil_equal_depth_less Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_depth_funcs.stencil_equal_depth_never Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_depth_funcs.stencil_equal_depth_notequal Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_depth_funcs.stencil_equal_no_depth Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_depth_funcs.stencil_gequal_depth_always Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_depth_funcs.stencil_gequal_depth_equal Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_depth_funcs.stencil_gequal_depth_gequal Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_depth_funcs.stencil_gequal_depth_greater Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_depth_funcs.stencil_gequal_depth_lequal Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_depth_funcs.stencil_gequal_depth_less Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_depth_funcs.stencil_gequal_depth_never Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_depth_funcs.stencil_gequal_depth_notequal Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_depth_funcs.stencil_gequal_no_depth Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_depth_funcs.stencil_greater_depth_always Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_depth_funcs.stencil_greater_depth_equal Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_depth_funcs.stencil_greater_depth_gequal Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_depth_funcs.stencil_greater_depth_greater Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_depth_funcs.stencil_greater_depth_lequal Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_depth_funcs.stencil_greater_depth_less Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_depth_funcs.stencil_greater_depth_never Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_depth_funcs.stencil_greater_depth_notequal Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_depth_funcs.stencil_greater_no_depth Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_depth_funcs.stencil_lequal_depth_always Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_depth_funcs.stencil_lequal_depth_equal Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_depth_funcs.stencil_lequal_depth_gequal Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_depth_funcs.stencil_lequal_depth_greater Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_depth_funcs.stencil_lequal_depth_lequal Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_depth_funcs.stencil_lequal_depth_less Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_depth_funcs.stencil_lequal_depth_never Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_depth_funcs.stencil_lequal_depth_notequal Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_depth_funcs.stencil_lequal_no_depth Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_depth_funcs.stencil_less_depth_always Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_depth_funcs.stencil_less_depth_equal Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_depth_funcs.stencil_less_depth_gequal Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_depth_funcs.stencil_less_depth_greater Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_depth_funcs.stencil_less_depth_lequal Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_depth_funcs.stencil_less_depth_less Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_depth_funcs.stencil_less_depth_never Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_depth_funcs.stencil_less_depth_notequal Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_depth_funcs.stencil_less_no_depth Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_depth_funcs.stencil_never_depth_always Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_depth_funcs.stencil_never_depth_equal Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_depth_funcs.stencil_never_depth_gequal Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_depth_funcs.stencil_never_depth_greater Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_depth_funcs.stencil_never_depth_lequal Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_depth_funcs.stencil_never_depth_less Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_depth_funcs.stencil_never_depth_never Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_depth_funcs.stencil_never_depth_notequal Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_depth_funcs.stencil_never_no_depth Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_depth_funcs.stencil_notequal_depth_always Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_depth_funcs.stencil_notequal_depth_equal Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_depth_funcs.stencil_notequal_depth_gequal Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_depth_funcs.stencil_notequal_depth_greater Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_depth_funcs.stencil_notequal_depth_lequal Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_depth_funcs.stencil_notequal_depth_less Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_depth_funcs.stencil_notequal_depth_never Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_depth_funcs.stencil_notequal_depth_notequal Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_depth_funcs.stencil_notequal_no_depth Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_decr_decr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_decr_decr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_decr_incr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_decr_incr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_decr_invert Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_decr_keep Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_decr_replace Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_decr_wrap_decr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_decr_wrap_decr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_decr_wrap_incr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_decr_wrap_incr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_decr_wrap_invert Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_decr_wrap_keep Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_decr_wrap_replace Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_decr_wrap_zero Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_decr_zero Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_incr_decr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_incr_decr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_incr_incr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_incr_incr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_incr_invert Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_incr_keep Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_incr_replace Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_incr_wrap_decr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_incr_wrap_decr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_incr_wrap_incr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_incr_wrap_incr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_incr_wrap_invert Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_incr_wrap_keep Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_incr_wrap_replace Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_incr_wrap_zero Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_incr_zero Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_invert_decr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_invert_decr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_invert_incr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_invert_incr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_invert_invert Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_invert_keep Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_invert_replace Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_invert_zero Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_keep_decr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_keep_decr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_keep_incr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_keep_incr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_keep_invert Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_keep_keep Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_keep_replace Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_keep_zero Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_replace_decr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_replace_decr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_replace_incr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_replace_incr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_replace_invert Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_replace_keep Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_replace_replace Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_replace_zero Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_wrap_decr_decr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_wrap_decr_decr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_wrap_decr_incr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_wrap_decr_incr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_wrap_decr_invert Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_wrap_decr_keep Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_wrap_decr_replace Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_wrap_decr_wrap_decr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_wrap_decr_wrap_decr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_wrap_decr_wrap_incr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_wrap_decr_wrap_incr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_wrap_decr_wrap_invert Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_wrap_decr_wrap_keep Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_wrap_decr_wrap_replace Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_wrap_decr_wrap_zero Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_wrap_decr_zero Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_wrap_incr_decr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_wrap_incr_decr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_wrap_incr_incr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_wrap_incr_incr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_wrap_incr_invert Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_wrap_incr_keep Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_wrap_incr_replace Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_wrap_incr_wrap_decr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_wrap_incr_wrap_decr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_wrap_incr_wrap_incr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_wrap_incr_wrap_incr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_wrap_incr_wrap_invert Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_wrap_incr_wrap_keep Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_wrap_incr_wrap_replace Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_wrap_incr_wrap_zero Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_wrap_incr_zero Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_wrap_invert_decr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_wrap_invert_decr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_wrap_invert_incr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_wrap_invert_incr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_wrap_invert_invert Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_wrap_invert_keep Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_wrap_invert_replace Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_wrap_invert_zero Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_wrap_keep_decr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_wrap_keep_decr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_wrap_keep_incr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_wrap_keep_incr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_wrap_keep_invert Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_wrap_keep_keep Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_wrap_keep_replace Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_wrap_keep_zero Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_wrap_replace_decr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_wrap_replace_decr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_wrap_replace_incr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_wrap_replace_incr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_wrap_replace_invert Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_wrap_replace_keep Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_wrap_replace_replace Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_wrap_replace_zero Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_wrap_zero_decr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_wrap_zero_decr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_wrap_zero_incr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_wrap_zero_incr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_wrap_zero_invert Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_wrap_zero_keep Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_wrap_zero_replace Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_wrap_zero_zero Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_zero_decr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_zero_decr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_zero_incr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_zero_incr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_zero_invert Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_zero_keep Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_zero_replace Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_zero_zero Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_decr_decr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_decr_decr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_decr_incr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_decr_incr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_decr_invert Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_decr_keep Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_decr_replace Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_decr_wrap_decr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_decr_wrap_decr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_decr_wrap_incr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_decr_wrap_incr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_decr_wrap_invert Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_decr_wrap_keep Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_decr_wrap_replace Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_decr_wrap_zero Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_decr_zero Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_incr_decr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_incr_decr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_incr_incr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_incr_incr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_incr_invert Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_incr_keep Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_incr_replace Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_incr_wrap_decr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_incr_wrap_decr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_incr_wrap_incr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_incr_wrap_incr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_incr_wrap_invert Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_incr_wrap_keep Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_incr_wrap_replace Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_incr_wrap_zero Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_incr_zero Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_invert_decr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_invert_decr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_invert_incr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_invert_incr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_invert_invert Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_invert_keep Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_invert_replace Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_invert_zero Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_keep_decr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_keep_decr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_keep_incr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_keep_incr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_keep_invert Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_keep_keep Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_keep_replace Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_keep_zero Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_replace_decr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_replace_decr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_replace_incr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_replace_incr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_replace_invert Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_replace_keep Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_replace_replace Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_replace_zero Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_wrap_decr_decr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_wrap_decr_decr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_wrap_decr_incr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_wrap_decr_incr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_wrap_decr_invert Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_wrap_decr_keep Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_wrap_decr_replace Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_wrap_decr_wrap_decr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_wrap_decr_wrap_decr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_wrap_decr_wrap_incr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_wrap_decr_wrap_incr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_wrap_decr_wrap_invert Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_wrap_decr_wrap_keep Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_wrap_decr_wrap_replace Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_wrap_decr_wrap_zero Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_wrap_decr_zero Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_wrap_incr_decr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_wrap_incr_decr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_wrap_incr_incr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_wrap_incr_incr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_wrap_incr_invert Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_wrap_incr_keep Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_wrap_incr_replace Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_wrap_incr_wrap_decr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_wrap_incr_wrap_decr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_wrap_incr_wrap_incr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_wrap_incr_wrap_incr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_wrap_incr_wrap_invert Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_wrap_incr_wrap_keep Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_wrap_incr_wrap_replace Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_wrap_incr_wrap_zero Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_wrap_incr_zero Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_wrap_invert_decr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_wrap_invert_decr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_wrap_invert_incr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_wrap_invert_incr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_wrap_invert_invert Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_wrap_invert_keep Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_wrap_invert_replace Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_wrap_invert_zero Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_wrap_keep_decr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_wrap_keep_decr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_wrap_keep_incr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_wrap_keep_incr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_wrap_keep_invert Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_wrap_keep_keep Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_wrap_keep_replace Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_wrap_keep_zero Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_wrap_replace_decr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_wrap_replace_decr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_wrap_replace_incr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_wrap_replace_incr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_wrap_replace_invert Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_wrap_replace_keep Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_wrap_replace_replace Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_wrap_replace_zero Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_wrap_zero_decr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_wrap_zero_decr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_wrap_zero_incr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_wrap_zero_incr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_wrap_zero_invert Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_wrap_zero_keep Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_wrap_zero_replace Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_wrap_zero_zero Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_zero_decr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_zero_decr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_zero_incr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_zero_incr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_zero_invert Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_zero_keep Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_zero_replace Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_zero_zero Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.invert_decr_decr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.invert_decr_decr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.invert_decr_incr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.invert_decr_incr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.invert_decr_invert Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.invert_decr_keep Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.invert_decr_replace Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.invert_decr_wrap_decr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.invert_decr_wrap_decr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.invert_decr_wrap_incr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.invert_decr_wrap_incr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.invert_decr_wrap_invert Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.invert_decr_wrap_keep Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.invert_decr_wrap_replace Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.invert_decr_wrap_zero Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.invert_decr_zero Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.invert_incr_decr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.invert_incr_decr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.invert_incr_incr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.invert_incr_incr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.invert_incr_invert Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.invert_incr_keep Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.invert_incr_replace Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.invert_incr_wrap_decr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.invert_incr_wrap_decr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.invert_incr_wrap_incr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.invert_incr_wrap_incr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.invert_incr_wrap_invert Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.invert_incr_wrap_keep Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.invert_incr_wrap_replace Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.invert_incr_wrap_zero Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.invert_incr_zero Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.invert_invert_decr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.invert_invert_decr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.invert_invert_incr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.invert_invert_incr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.invert_invert_invert Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.invert_invert_keep Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.invert_invert_replace Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.invert_invert_zero Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.invert_keep_decr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.invert_keep_decr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.invert_keep_incr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.invert_keep_incr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.invert_keep_invert Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.invert_keep_keep Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.invert_keep_replace Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.invert_keep_zero Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.invert_replace_decr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.invert_replace_decr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.invert_replace_incr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.invert_replace_incr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.invert_replace_invert Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.invert_replace_keep Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.invert_replace_replace Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.invert_replace_zero Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.invert_zero_decr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.invert_zero_decr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.invert_zero_incr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.invert_zero_incr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.invert_zero_invert Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.invert_zero_keep Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.invert_zero_replace Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.invert_zero_zero Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.keep_decr_decr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.keep_decr_decr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.keep_decr_incr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.keep_decr_incr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.keep_decr_invert Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.keep_decr_keep Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.keep_decr_replace Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.keep_decr_wrap_decr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.keep_decr_wrap_decr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.keep_decr_wrap_incr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.keep_decr_wrap_incr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.keep_decr_wrap_invert Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.keep_decr_wrap_keep Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.keep_decr_wrap_replace Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.keep_decr_wrap_zero Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.keep_decr_zero Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.keep_incr_decr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.keep_incr_decr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.keep_incr_incr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.keep_incr_incr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.keep_incr_invert Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.keep_incr_keep Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.keep_incr_replace Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.keep_incr_wrap_decr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.keep_incr_wrap_decr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.keep_incr_wrap_incr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.keep_incr_wrap_incr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.keep_incr_wrap_invert Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.keep_incr_wrap_keep Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.keep_incr_wrap_replace Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.keep_incr_wrap_zero Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.keep_incr_zero Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.keep_invert_decr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.keep_invert_decr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.keep_invert_incr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.keep_invert_incr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.keep_invert_invert Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.keep_invert_keep Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.keep_invert_replace Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.keep_invert_zero Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.keep_keep_decr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.keep_keep_decr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.keep_keep_incr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.keep_keep_incr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.keep_keep_invert Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.keep_keep_keep Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.keep_keep_replace Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.keep_keep_zero Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.keep_replace_decr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.keep_replace_decr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.keep_replace_incr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.keep_replace_incr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.keep_replace_invert Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.keep_replace_keep Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.keep_replace_replace Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.keep_replace_zero Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.keep_zero_decr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.keep_zero_decr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.keep_zero_incr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.keep_zero_incr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.keep_zero_invert Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.keep_zero_keep Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.keep_zero_replace Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.keep_zero_zero Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.replace_decr_decr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.replace_decr_decr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.replace_decr_incr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.replace_decr_incr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.replace_decr_invert Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.replace_decr_keep Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.replace_decr_replace Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.replace_decr_wrap_decr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.replace_decr_wrap_decr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.replace_decr_wrap_incr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.replace_decr_wrap_incr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.replace_decr_wrap_invert Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.replace_decr_wrap_keep Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.replace_decr_wrap_replace Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.replace_decr_wrap_zero Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.replace_decr_zero Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.replace_incr_decr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.replace_incr_decr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.replace_incr_incr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.replace_incr_incr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.replace_incr_invert Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.replace_incr_keep Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.replace_incr_replace Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.replace_incr_wrap_decr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.replace_incr_wrap_decr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.replace_incr_wrap_incr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.replace_incr_wrap_incr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.replace_incr_wrap_invert Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.replace_incr_wrap_keep Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.replace_incr_wrap_replace Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.replace_incr_wrap_zero Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.replace_incr_zero Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.replace_invert_decr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.replace_invert_decr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.replace_invert_incr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.replace_invert_incr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.replace_invert_invert Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.replace_invert_keep Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.replace_invert_replace Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.replace_invert_zero Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.replace_keep_decr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.replace_keep_decr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.replace_keep_incr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.replace_keep_incr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.replace_keep_invert Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.replace_keep_keep Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.replace_keep_replace Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.replace_keep_zero Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.replace_replace_decr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.replace_replace_decr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.replace_replace_incr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.replace_replace_incr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.replace_replace_invert Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.replace_replace_keep Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.replace_replace_replace Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.replace_replace_zero Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.replace_zero_decr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.replace_zero_decr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.replace_zero_incr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.replace_zero_incr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.replace_zero_invert Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.replace_zero_keep Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.replace_zero_replace Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.replace_zero_zero Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.zero_decr_decr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.zero_decr_decr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.zero_decr_incr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.zero_decr_incr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.zero_decr_invert Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.zero_decr_keep Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.zero_decr_replace Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.zero_decr_wrap_decr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.zero_decr_wrap_decr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.zero_decr_wrap_incr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.zero_decr_wrap_incr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.zero_decr_wrap_invert Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.zero_decr_wrap_keep Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.zero_decr_wrap_replace Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.zero_decr_wrap_zero Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.zero_decr_zero Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.zero_incr_decr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.zero_incr_decr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.zero_incr_incr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.zero_incr_incr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.zero_incr_invert Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.zero_incr_keep Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.zero_incr_replace Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.zero_incr_wrap_decr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.zero_incr_wrap_decr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.zero_incr_wrap_incr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.zero_incr_wrap_incr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.zero_incr_wrap_invert Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.zero_incr_wrap_keep Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.zero_incr_wrap_replace Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.zero_incr_wrap_zero Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.zero_incr_zero Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.zero_invert_decr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.zero_invert_decr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.zero_invert_incr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.zero_invert_incr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.zero_invert_invert Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.zero_invert_keep Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.zero_invert_replace Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.zero_invert_zero Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.zero_keep_decr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.zero_keep_decr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.zero_keep_incr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.zero_keep_incr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.zero_keep_invert Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.zero_keep_keep Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.zero_keep_replace Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.zero_keep_zero Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.zero_replace_decr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.zero_replace_decr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.zero_replace_incr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.zero_replace_incr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.zero_replace_invert Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.zero_replace_keep Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.zero_replace_replace Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.zero_replace_zero Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.zero_zero_decr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.zero_zero_decr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.zero_zero_incr Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.zero_zero_incr_wrap Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.zero_zero_invert Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.zero_zero_keep Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.zero_zero_replace Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.zero_zero_zero Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.write_mask.both Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.write_mask.depth Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.depth_stencil.write_mask.stencil Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.11 Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.13 Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.15 Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.17 Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.18 Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.19 Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.20 Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.22 Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.26 Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.39 Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.42 Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.44 Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.47 Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.48 Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.57 Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.60 Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.61 Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.64 Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.68 Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.72 Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.75 Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.77 Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.79 Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.8 Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.93 Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.98 Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.random.0 Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.random.11 Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.random.19 Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.random.24 Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.random.25 Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.random.32 Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.random.37 Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.random.3 Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.random.45 Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.random.48 Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.random.53 Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.random.56 Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.random.63 Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.random.65 Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.random.66 Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.random.67 Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.random.68 Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.random.6 Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.random.72 Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.random.75 Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.random.81 Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.random.87 Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.random.94 Fail |  | ||||||
| dEQP-GLES2.functional.fragment_ops.random.96 Fail |  | ||||||
| dEQP-GLES2.functional.polygon_offset.default_render_with_units Fail |  | ||||||
| dEQP-GLES2.functional.polygon_offset.fixed16_factor_1_slope Fail |  | ||||||
| dEQP-GLES2.functional.polygon_offset.fixed16_render_with_units Fail |  | ||||||
| dEQP-GLES2.functional.shaders.scoping.valid.local_variable_hides_function_parameter_fragment Fail |  | ||||||
| dEQP-GLES2.functional.shaders.scoping.valid.local_variable_hides_function_parameter_vertex Fail |  | ||||||
| @@ -1,63 +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 |  | ||||||
|  |  | ||||||
| dEQP-GLES2.functional.fbo.render.depth.* |  | ||||||
| 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.clipping.triangle_vertex.clip_three.clip_pos_y_pos_z_and_neg_x_neg_y_pos_z_and_pos_x_pos_y_neg_z |  | ||||||
| dEQP-GLES2.functional.fbo.render.color.blend_rbo_rgb5_a1 |  | ||||||
| dEQP-GLES2.functional.fbo.render.color.blend_rbo_rgb5_a1_depth_component16 |  | ||||||
| dEQP-GLES2.functional.fbo.render.color.blend_rbo_rgba4 |  | ||||||
| dEQP-GLES2.functional.fbo.render.color.blend_rbo_rgba4_depth_component16 |  | ||||||
| dEQP-GLES2.functional.fbo.render.color.blend_npot_rbo_rgb5_a1 |  | ||||||
| dEQP-GLES2.functional.fbo.render.color.blend_npot_rbo_rgb5_a1_depth_component16 |  | ||||||
| dEQP-GLES2.functional.fbo.render.color.blend_npot_rbo_rgba4 |  | ||||||
| dEQP-GLES2.functional.fbo.render.color.blend_npot_rbo_rgba4_depth_component16 |  | ||||||
| dEQP-GLES2.functional.fbo.render.color_clear.rbo_rgb5_a1 |  | ||||||
| dEQP-GLES2.functional.fbo.render.color_clear.rbo_rgb5_a1_depth_component16 |  | ||||||
| dEQP-GLES2.functional.fbo.render.color_clear.rbo_rgb5_a1_stencil_index8 |  | ||||||
| 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.recreate_depthbuffer.* |  | ||||||
| dEQP-GLES2.functional.fbo.render.recreate_stencilbuffer.* |  | ||||||
| dEQP-GLES2.functional.fbo.render.shared_colorbuffer_clear.rbo_rgb5_a1 |  | ||||||
| dEQP-GLES2.functional.fbo.render.shared_colorbuffer_clear.rbo_rgba4 |  | ||||||
| dEQP-GLES2.functional.fbo.render.shared_colorbuffer_clear.tex2d_rgb |  | ||||||
| dEQP-GLES2.functional.fbo.render.shared_colorbuffer_clear.tex2d_rgba |  | ||||||
| dEQP-GLES2.functional.fbo.render.shared_colorbuffer.rbo_rgb5_a1 |  | ||||||
| dEQP-GLES2.functional.fbo.render.shared_colorbuffer.rbo_rgba4 |  | ||||||
| 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.stencil_clear.rbo_rgb5_a1_stencil_index8 |  | ||||||
| dEQP-GLES2.functional.fbo.render.stencil.npot_rbo_rgb5_a1_stencil_index8 |  | ||||||
| dEQP-GLES2.functional.fbo.render.stencil.npot_rbo_rgba4_stencil_index8 |  | ||||||
| dEQP-GLES2.functional.fbo.render.stencil.rbo_rgb5_a1_stencil_index8 |  | ||||||
| dEQP-GLES2.functional.fbo.render.stencil.rbo_rgba4_stencil_index8 |  | ||||||
| dEQP-GLES2.functional.lifetime.attach.deleted_input.renderbuffer_framebuffer |  | ||||||
| dEQP-GLES2.functional.lifetime.attach.deleted_output.renderbuffer_framebuffer |  | ||||||
| dEQP-GLES2.functional.polygon_offset.fixed16_factor_0_slope |  | ||||||
| dEQP-GLES2.functional.polygon_offset.fixed16_factor_1_slope |  | ||||||
| dEQP-GLES2.functional.shaders.invariance.highp.loop_4 |  | ||||||
| dEQP-GLES2.functional.shaders.matrix.mul.dynamic_highp_mat4_vec4_vertex |  | ||||||
| dEQP-GLES2.functional.shaders.matrix.mul.dynamic_highp_vec4_mat4_fragment |  | ||||||
| dEQP-GLES2.functional.shaders.operator.common_functions.smoothstep.mediump_vec3_vertex |  | ||||||
| dEQP-GLES2.functional.shaders.random.all_features.fragment.12 |  | ||||||
| dEQP-GLES2.functional.shaders.random.all_features.fragment.37 |  | ||||||
| dEQP-GLES2.functional.texture.units.2_units.mixed.1 |  | ||||||
| dEQP-GLES2.functional.texture.units.2_units.mixed.3 |  | ||||||
| dEQP-GLES2.functional.texture.units.2_units.only_2d.2 |  | ||||||
| dEQP-GLES2.functional.texture.units.4_units.mixed.5 |  | ||||||
| dEQP-GLES2.functional.texture.units.4_units.only_2d.0 |  | ||||||
| dEQP-GLES2.functional.texture.units.8_units.only_cube.2 |  | ||||||
| dEQP-GLES2.functional.texture.units.all_units.mixed.6 |  | ||||||
| dEQP-GLES2.functional.texture.units.all_units.only_cube.4 |  | ||||||
| dEQP-GLES2.functional.texture.units.all_units.only_cube.7 |  | ||||||
| dEQP-GLES2.functional.texture.units.all_units.only_cube.8 |  | ||||||
|  |  | ||||||
| @@ -1,136 +0,0 @@ | |||||||
| #!/bin/bash |  | ||||||
|  |  | ||||||
| set -ex |  | ||||||
|  |  | ||||||
| DEQP_OPTIONS=(--deqp-surface-width=256 --deqp-surface-height=256) |  | ||||||
| DEQP_OPTIONS+=(--deqp-surface-type=pbuffer) |  | ||||||
| DEQP_OPTIONS+=(--deqp-gl-config-name=rgba8888d24s8ms0) |  | ||||||
| DEQP_OPTIONS+=(--deqp-visibility=hidden) |  | ||||||
| DEQP_OPTIONS+=(--deqp-log-images=disable) |  | ||||||
| DEQP_OPTIONS+=(--deqp-crashhandler=enable) |  | ||||||
|  |  | ||||||
| # 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-watchdog=enable) |  | ||||||
|  |  | ||||||
| if [ -z "$DEQP_VER" ]; then |  | ||||||
|    echo 'DEQP_VER must be set to something like "gles2" or "gles31" for the test run' |  | ||||||
|    exit 1 |  | ||||||
| fi |  | ||||||
|  |  | ||||||
| if [ -z "$DEQP_SKIPS" ]; then |  | ||||||
|    echo 'DEQP_SKIPS must be set to something like "deqp-default-skips.txt"' |  | ||||||
|    exit 1 |  | ||||||
| fi |  | ||||||
|  |  | ||||||
| # Prep the expected failure list |  | ||||||
| if [ -n "$DEQP_EXPECTED_FAILS" ]; then |  | ||||||
|    export DEQP_EXPECTED_FAILS=`pwd`/artifacts/$DEQP_EXPECTED_FAILS |  | ||||||
| else |  | ||||||
|    export DEQP_EXPECTED_FAILS=/tmp/expect-no-failures.txt |  | ||||||
|    touch $DEQP_EXPECTED_FAILS |  | ||||||
| fi |  | ||||||
| sort < $DEQP_EXPECTED_FAILS > /tmp/expected-fails.txt |  | ||||||
|  |  | ||||||
| # Fix relative paths on inputs. |  | ||||||
| export DEQP_SKIPS=`pwd`/artifacts/$DEQP_SKIPS |  | ||||||
|  |  | ||||||
| # Be a good citizen on the shared runners. |  | ||||||
| export LP_NUM_THREADS=4 |  | ||||||
|  |  | ||||||
| # Set up the driver environment. |  | ||||||
| export LD_LIBRARY_PATH=`pwd`/install/lib/ |  | ||||||
| export EGL_PLATFORM=surfaceless |  | ||||||
|  |  | ||||||
| # 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 |  | ||||||
|  |  | ||||||
| cd /deqp/modules/$DEQP_VER |  | ||||||
|  |  | ||||||
| # Generate test case list file |  | ||||||
| cp /deqp/mustpass/$DEQP_VER-master.txt /tmp/case-list.txt |  | ||||||
|  |  | ||||||
| # Note: not using sorted input and comm, becuase I want to run the tests in |  | ||||||
| # the same order that dEQP would. |  | ||||||
| while read -r line; do |  | ||||||
|    if echo "$line" | grep -q '^[^#]'; then |  | ||||||
|        sed -i "/$line/d" /tmp/case-list.txt |  | ||||||
|    fi |  | ||||||
| done < $DEQP_SKIPS |  | ||||||
|  |  | ||||||
| # 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 |  | ||||||
|  |  | ||||||
| # Cannot use tee because dash doesn't have pipefail |  | ||||||
| touch /tmp/result.txt |  | ||||||
| tail -f /tmp/result.txt & |  | ||||||
|  |  | ||||||
| ./deqp-$DEQP_VER "${DEQP_OPTIONS[@]}" --deqp-log-filename=$RESULTS/results.qpa --deqp-caselist-file=/tmp/case-list.txt >> /tmp/result.txt |  | ||||||
| DEQP_EXITCODE=$? |  | ||||||
|  |  | ||||||
| sed -ne \ |  | ||||||
|     '/StatusCode="Fail"/{x;p}; s/#beginTestCaseResult //; T; h' \ |  | ||||||
|     $RESULTS/results.qpa \ |  | ||||||
|     > /tmp/unsorted-fails.txt |  | ||||||
|  |  | ||||||
| # Scrape out the renderer that the test run used, so we can validate that the |  | ||||||
| # right driver was used. |  | ||||||
| if grep -q "dEQP-.*.info.renderer" /tmp/case-list.txt; then |  | ||||||
|     # This is an ugly dependency on the .qpa format: Print 3 lines after the |  | ||||||
|     # match, which happens to contain the result. |  | ||||||
|     RENDERER=`sed -n '/#beginTestCaseResult dEQP-.*.info.renderer/{n;n;n;p}' $RESULTS/results.qpa | sed -n -E "s|<Text>(.*)</Text>|\1|p"` |  | ||||||
|  |  | ||||||
|     echo "GL_RENDERER for this test run: $RENDERER" |  | ||||||
|  |  | ||||||
|     if [ -n "$DEQP_RENDERER_MATCH" ]; then |  | ||||||
|         echo $RENDERER | grep -q $DEQP_RENDERER_MATCH > /dev/null |  | ||||||
|     fi |  | ||||||
| fi |  | ||||||
|  |  | ||||||
| if grep -q "dEQP-.*.info.version" /tmp/case-list.txt; then |  | ||||||
|     # This is an ugly dependency on the .qpa format: Print 3 lines after the |  | ||||||
|     # match, which happens to contain the result. |  | ||||||
|     VERSION=`sed -n '/#beginTestCaseResult dEQP-.*.info.version/{n;n;n;p}' $RESULTS/results.qpa | sed -n -E "s|<Text>(.*)</Text>|\1|p"` |  | ||||||
|     echo "Driver version tested: $VERSION" |  | ||||||
| fi |  | ||||||
|  |  | ||||||
| if [ $DEQP_EXITCODE -ne 0 ]; then |  | ||||||
|    exit $DEQP_EXITCODE |  | ||||||
| fi |  | ||||||
|  |  | ||||||
| sort < /tmp/unsorted-fails.txt > $RESULTS/fails.txt |  | ||||||
|  |  | ||||||
| comm -23 $RESULTS/fails.txt /tmp/expected-fails.txt > /tmp/new-fails.txt |  | ||||||
| if [ -s /tmp/new-fails.txt ]; then |  | ||||||
|     echo "Unexpected failures:" |  | ||||||
|     cat /tmp/new-fails.txt |  | ||||||
|     exit 1 |  | ||||||
| else |  | ||||||
|     echo "No new failures" |  | ||||||
| fi |  | ||||||
|  |  | ||||||
| sort /tmp/case-list.txt > /tmp/sorted-case-list.txt |  | ||||||
| comm -12 /tmp/sorted-case-list.txt /tmp/expected-fails.txt > /tmp/expected-fails-in-caselist.txt |  | ||||||
| comm -13 $RESULTS/fails.txt /tmp/expected-fails-in-caselist.txt > /tmp/new-passes.txt |  | ||||||
| if [ -s /tmp/new-passes.txt ]; then |  | ||||||
|     echo "Unexpected passes, please update $DEQP_EXPECTED_FAILS (or add flaky tests to $DEQP_SKIPS):" |  | ||||||
|     cat /tmp/new-passes.txt |  | ||||||
|     exit 1 |  | ||||||
| else |  | ||||||
|     echo "No new passes" |  | ||||||
| fi |  | ||||||
| @@ -1,445 +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 |  | ||||||
| @@ -1,58 +0,0 @@ | |||||||
| #!/usr/bin/env python3 |  | ||||||
|  |  | ||||||
| from jinja2 import Environment, FileSystemLoader |  | ||||||
| import argparse |  | ||||||
|  |  | ||||||
| device_types = { |  | ||||||
|     "rk3288-veyron-jaq": { |  | ||||||
|         "gpu_version": "panfrost-t760", |  | ||||||
|         "boot_method": "depthcharge", |  | ||||||
|         "lava_device_type": "rk3288-veyron-jaq", |  | ||||||
|         "kernel_image_type": "", |  | ||||||
|     }, |  | ||||||
|     "rk3399-gru-kevin": { |  | ||||||
|         "gpu_version": "panfrost-t860", |  | ||||||
|         "boot_method": "depthcharge", |  | ||||||
|         "lava_device_type": "rk3399-gru-kevin", |  | ||||||
|         "kernel_image_type": "", |  | ||||||
|     }, |  | ||||||
|     "sun8i-h3-libretech-all-h3-cc": { |  | ||||||
|         "gpu_version": "lima", |  | ||||||
|         "boot_method": "u-boot", |  | ||||||
|         "lava_device_type": "sun8i-h3-libretech-all-h3-cc", |  | ||||||
|         "kernel_image_type": "type: zimage", |  | ||||||
|     }, |  | ||||||
|     "meson-gxl-s905x-libretech-cc": { |  | ||||||
|         "gpu_version": "lima", |  | ||||||
|         "boot_method": "u-boot", |  | ||||||
|         "lava_device_type": "meson-gxl-s905x-libretech-cc", |  | ||||||
|         "kernel_image_type": "type: image", |  | ||||||
|     }, |  | ||||||
| } |  | ||||||
|  |  | ||||||
| parser = argparse.ArgumentParser() |  | ||||||
| parser.add_argument("--template") |  | ||||||
| parser.add_argument("--base-artifacts-url") |  | ||||||
| parser.add_argument("--arch") |  | ||||||
| parser.add_argument("--device-types", nargs="+") |  | ||||||
| parser.add_argument("--kernel-image-name") |  | ||||||
| args = parser.parse_args() |  | ||||||
|  |  | ||||||
| env = Environment(loader = FileSystemLoader('.'), trim_blocks=True, lstrip_blocks=True) |  | ||||||
| template = env.get_template(args.template) |  | ||||||
|  |  | ||||||
| for device_type in args.device_types: |  | ||||||
|     values = {} |  | ||||||
|     values['base_artifacts_url'] = args.base_artifacts_url |  | ||||||
|     values['arch'] = args.arch |  | ||||||
|     values['device_type'] = device_type |  | ||||||
|     values['kernel_image_name'] = args.kernel_image_name |  | ||||||
|     values['lava_device_type'] = device_types[device_type]['lava_device_type'] |  | ||||||
|     values['gpu_version'] = device_types[device_type]['gpu_version'] |  | ||||||
|     values['boot_method'] = device_types[device_type]['boot_method'] |  | ||||||
|     values['kernel_image_type'] = device_types[device_type]['kernel_image_type'] |  | ||||||
|  |  | ||||||
|     f = open('results/lava-deqp-%s.yml' % device_type, "w") |  | ||||||
|     f.write(template.render(values)) |  | ||||||
|     f.close() |  | ||||||
|  |  | ||||||
| @@ -1,187 +0,0 @@ | |||||||
| #!/bin/bash |  | ||||||
|  |  | ||||||
| set -e |  | ||||||
| set -o xtrace |  | ||||||
|  |  | ||||||
| ############### Install packages for building |  | ||||||
| dpkg --add-architecture ${DEBIAN_ARCH} |  | ||||||
| echo 'deb-src https://deb.debian.org/debian testing main' > /etc/apt/sources.list.d/deb-src.list |  | ||||||
| apt-get update |  | ||||||
| apt-get -y install ca-certificates |  | ||||||
| apt-get -y install --no-install-recommends \ |  | ||||||
| 	crossbuild-essential-${DEBIAN_ARCH} \ |  | ||||||
| 	meson \ |  | ||||||
| 	g++ \ |  | ||||||
| 	git \ |  | ||||||
| 	ccache \ |  | ||||||
| 	pkg-config \ |  | ||||||
| 	python3-mako \ |  | ||||||
| 	python-numpy \ |  | ||||||
| 	python-six \ |  | ||||||
| 	python-mako \ |  | ||||||
| 	python3-pip \ |  | ||||||
| 	python3-setuptools \ |  | ||||||
| 	python3-six \ |  | ||||||
| 	python3-wheel \ |  | ||||||
| 	python3-jinja2 \ |  | ||||||
| 	bison \ |  | ||||||
| 	flex \ |  | ||||||
| 	gettext \ |  | ||||||
| 	cmake \ |  | ||||||
| 	bc \ |  | ||||||
| 	libssl-dev \ |  | ||||||
| 	lqa \ |  | ||||||
| 	csvkit \ |  | ||||||
| 	curl \ |  | ||||||
| 	unzip \ |  | ||||||
| 	wget \ |  | ||||||
| 	debootstrap \ |  | ||||||
| 	procps \ |  | ||||||
| 	qemu-user-static \ |  | ||||||
| 	cpio \ |  | ||||||
| 	clang-8 \ |  | ||||||
| 	llvm-8 \ |  | ||||||
| 	libclang-8-dev \ |  | ||||||
| 	llvm-8-dev \ |  | ||||||
| 	gdc-9 \ |  | ||||||
| 	lld-8 \ |  | ||||||
| 	nasm \ |  | ||||||
| 	libegl1-mesa-dev \ |  | ||||||
| 	\ |  | ||||||
| 	libdrm-dev:${DEBIAN_ARCH} \ |  | ||||||
| 	libx11-dev:${DEBIAN_ARCH} \ |  | ||||||
| 	libxxf86vm-dev:${DEBIAN_ARCH} \ |  | ||||||
| 	libexpat1-dev:${DEBIAN_ARCH} \ |  | ||||||
| 	libsensors-dev:${DEBIAN_ARCH} \ |  | ||||||
| 	libxfixes-dev:${DEBIAN_ARCH} \ |  | ||||||
| 	libxdamage-dev:${DEBIAN_ARCH} \ |  | ||||||
| 	libxext-dev:${DEBIAN_ARCH} \ |  | ||||||
| 	x11proto-dev:${DEBIAN_ARCH} \ |  | ||||||
| 	libx11-xcb-dev:${DEBIAN_ARCH} \ |  | ||||||
| 	libxcb-dri2-0-dev:${DEBIAN_ARCH} \ |  | ||||||
| 	libxcb-glx0-dev:${DEBIAN_ARCH} \ |  | ||||||
| 	libxcb-xfixes0-dev:${DEBIAN_ARCH} \ |  | ||||||
| 	libxcb-dri3-dev:${DEBIAN_ARCH} \ |  | ||||||
| 	libxcb-present-dev:${DEBIAN_ARCH} \ |  | ||||||
| 	libxcb-randr0-dev:${DEBIAN_ARCH} \ |  | ||||||
| 	libxcb-sync-dev:${DEBIAN_ARCH} \ |  | ||||||
| 	libxrandr-dev:${DEBIAN_ARCH} \ |  | ||||||
| 	libxshmfence-dev:${DEBIAN_ARCH} \ |  | ||||||
| 	libelf-dev:${DEBIAN_ARCH} \ |  | ||||||
| 	zlib1g-dev:${DEBIAN_ARCH} \ |  | ||||||
| 	libglvnd-core-dev:${DEBIAN_ARCH} \ |  | ||||||
| 	libgles2-mesa-dev:${DEBIAN_ARCH} \ |  | ||||||
| 	libegl1-mesa-dev:${DEBIAN_ARCH} \ |  | ||||||
| 	libpng-dev:${DEBIAN_ARCH} |  | ||||||
|  |  | ||||||
|  |  | ||||||
| ############### Install lavacli (remove after it's back into Debian testing) |  | ||||||
| mkdir -p lavacli |  | ||||||
| wget -qO- https://git.lavasoftware.org/lava/lavacli/-/archive/v0.9.8/lavacli-v0.9.8.tar.gz | tar -xz --strip-components=1 -C lavacli |  | ||||||
| pushd lavacli |  | ||||||
| python3 ./setup.py install |  | ||||||
| popd |  | ||||||
|  |  | ||||||
|  |  | ||||||
| ############### Cross-build dEQP |  | ||||||
| mkdir -p /artifacts/rootfs/deqp |  | ||||||
|  |  | ||||||
| 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 |  | ||||||
| cd /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 |  | ||||||
|  |  | ||||||
| python3 external/fetch_sources.py |  | ||||||
|  |  | ||||||
| cd /artifacts/rootfs/deqp |  | ||||||
| cmake -G Ninja                                \ |  | ||||||
|       -DDEQP_TARGET=surfaceless               \ |  | ||||||
|       -DCMAKE_BUILD_TYPE=Release              \ |  | ||||||
|       -DCMAKE_C_COMPILER=${GCC_ARCH}-gcc      \ |  | ||||||
|       -DCMAKE_CXX_COMPILER=${GCC_ARCH}-g++    \ |  | ||||||
|       /VK-GL-CTS |  | ||||||
| ninja |  | ||||||
| rm -rf /artifacts/rootfs/deqp/external |  | ||||||
| rm -rf /artifacts/rootfs/deqp/modules/gles31 |  | ||||||
| rm -rf /artifacts/rootfs/deqp/modules/internal |  | ||||||
| rm -rf /artifacts/rootfs/deqp/executor |  | ||||||
| rm -rf /artifacts/rootfs/deqp/execserver |  | ||||||
| rm -rf /artifacts/rootfs/deqp/modules/egl |  | ||||||
| rm -rf /artifacts/rootfs/deqp/framework |  | ||||||
| find . -name CMakeFiles | xargs rm -rf |  | ||||||
| find . -name lib\*.a | xargs rm -rf |  | ||||||
| du -sh * |  | ||||||
| rm -rf /VK-GL-CTS-opengl-es-cts-3.2.5.0 |  | ||||||
|  |  | ||||||
|  |  | ||||||
| ############### Cross-build Volt dEQP runner |  | ||||||
| mkdir -p /battery |  | ||||||
| cd /battery |  | ||||||
| wget https://github.com/VoltLang/Battery/releases/download/v0.1.23/battery-0.1.23-x86_64-linux.tar.gz |  | ||||||
| tar xzvf battery-0.1.23-x86_64-linux.tar.gz |  | ||||||
| rm battery-0.1.23-x86_64-linux.tar.gz |  | ||||||
| mv battery /usr/local/bin |  | ||||||
| rm -rf /battery |  | ||||||
|  |  | ||||||
| mkdir -p /volt |  | ||||||
| cd /volt |  | ||||||
| mkdir -p Watt Volta dEQP |  | ||||||
| wget -qO- https://github.com/VoltLang/Watt/archive/v0.1.3.tar.gz | tar -xz --strip-components=1 -C ./Watt |  | ||||||
| wget -qO- https://github.com/VoltLang/Volta/archive/v0.1.3.tar.gz | tar -xz --strip-components=1 -C ./Volta |  | ||||||
| wget -qO- https://github.com/Wallbraker/dEQP/archive/v0.1.4.tar.gz | tar -xz --strip-components=1 -C ./dEQP |  | ||||||
| battery config --release --lto Volta Watt |  | ||||||
| battery build |  | ||||||
| battery config --arch ${VOLT_ARCH} --cmd-volta Volta/volta Volta/rt Watt dEQP |  | ||||||
| battery build |  | ||||||
| rm /usr/local/bin/battery |  | ||||||
| cp dEQP/deqp /artifacts/rootfs/deqp/deqp-volt |  | ||||||
| rm -rf /volt |  | ||||||
|  |  | ||||||
|  |  | ||||||
| ############### Remove LLVM now, so the container image is smaller |  | ||||||
| apt-get -y remove \*llvm\* |  | ||||||
|  |  | ||||||
|  |  | ||||||
| ############### Cross-build kernel |  | ||||||
| KERNEL_URL="https://gitlab.freedesktop.org/tomeu/linux/-/archive/panfrost-veyron-fix/linux-panfrost-veyron-fix.tar.gz" |  | ||||||
| export ARCH=${KERNEL_ARCH} |  | ||||||
| export CROSS_COMPILE="${GCC_ARCH}-" |  | ||||||
|  |  | ||||||
| mkdir -p /kernel |  | ||||||
| wget -qO- ${KERNEL_URL} | tar -xz --strip-components=1 -C /kernel |  | ||||||
| cd /kernel |  | ||||||
| ./scripts/kconfig/merge_config.sh ${DEFCONFIG} /tmp/clone/.gitlab-ci/${KERNEL_ARCH}.config |  | ||||||
| make -j12 ${KERNEL_IMAGE_NAME} dtbs |  | ||||||
| cp arch/${KERNEL_ARCH}/boot/${KERNEL_IMAGE_NAME} /artifacts/. |  | ||||||
| cp ${DEVICE_TREES} /artifacts/. |  | ||||||
| rm -rf /kernel |  | ||||||
|  |  | ||||||
|  |  | ||||||
| ############### Create rootfs |  | ||||||
| cp /tmp/clone/.gitlab-ci/create-rootfs.sh /artifacts/rootfs/. |  | ||||||
| mkdir -p /artifacts/rootfs/bin |  | ||||||
| cp /usr/bin/qemu-aarch64-static /artifacts/rootfs/bin |  | ||||||
| cp /usr/bin/qemu-arm-static /artifacts/rootfs/bin |  | ||||||
|  |  | ||||||
| set +e |  | ||||||
| debootstrap --variant=minbase --arch=${DEBIAN_ARCH} testing /artifacts/rootfs/ http://deb.debian.org/debian |  | ||||||
| cat /artifacts/rootfs/debootstrap/debootstrap.log |  | ||||||
| set -e |  | ||||||
| chroot /artifacts/rootfs sh /create-rootfs.sh |  | ||||||
|  |  | ||||||
| rm /artifacts/rootfs/bin/qemu-arm-static |  | ||||||
| rm /artifacts/rootfs/bin/qemu-aarch64-static |  | ||||||
| rm /artifacts/rootfs/create-rootfs.sh |  | ||||||
|  |  | ||||||
| @@ -1,51 +0,0 @@ | |||||||
| #!/bin/sh |  | ||||||
|  |  | ||||||
| GPU_VERSION="$1" |  | ||||||
|  |  | ||||||
| DEQP_OPTIONS="--deqp-surface-width=256 --deqp-surface-height=256" |  | ||||||
| DEQP_OPTIONS="$DEQP_OPTIONS --deqp-visibility=hidden" |  | ||||||
| DEQP_OPTIONS="$DEQP_OPTIONS --deqp-log-images=disable" |  | ||||||
| DEQP_OPTIONS="$DEQP_OPTIONS --deqp-watchdog=enable" |  | ||||||
| DEQP_OPTIONS="$DEQP_OPTIONS --deqp-crashhandler=enable" |  | ||||||
| DEQP_OPTIONS="$DEQP_OPTIONS --deqp-surface-type=pbuffer" |  | ||||||
|  |  | ||||||
| export LIBGL_DRIVERS_PATH=/mesa/lib/dri/ |  | ||||||
| export LD_LIBRARY_PATH=/mesa/lib/ |  | ||||||
| export MESA_GLES_VERSION_OVERRIDE=3.0 |  | ||||||
|  |  | ||||||
| DEVFREQ_GOVERNOR=`echo /sys/devices/platform/*.gpu/devfreq/devfreq0/governor` |  | ||||||
| echo performance > $DEVFREQ_GOVERNOR |  | ||||||
|  |  | ||||||
| cd /deqp/modules/gles2 |  | ||||||
|  |  | ||||||
| # Generate test case list file |  | ||||||
| ./deqp-gles2 $DEQP_OPTIONS --deqp-runmode=stdout-caselist | grep "TEST: dEQP-GLES2" | cut -d ' ' -f 2 > /tmp/case-list.txt |  | ||||||
|  |  | ||||||
| # Note: not using sorted input and comm, becuase I want to run the tests in |  | ||||||
| # the same order that dEQP would. |  | ||||||
| while read -r line; do |  | ||||||
|    if echo "$line" | grep -q '^[^#]'; then |  | ||||||
|        sed -i "/$line/d" /tmp/case-list.txt |  | ||||||
|    fi |  | ||||||
| done < /deqp/deqp-$GPU_VERSION-skips.txt |  | ||||||
|  |  | ||||||
| /deqp/deqp-volt --cts-build-dir=/deqp \ |  | ||||||
|                 --threads=8 \ |  | ||||||
|                 --test-names-file=/tmp/case-list.txt \ |  | ||||||
|                 --results-file=/tmp/results.txt \ |  | ||||||
|                 --no-passed-results \ |  | ||||||
|                 --regression-file=/deqp/deqp-$GPU_VERSION-fails.txt \ |  | ||||||
|                 --no-rerun-tests \ |  | ||||||
|                 --print-regression \ |  | ||||||
|                 --no-print-fail \ |  | ||||||
|                 --no-print-quality \ |  | ||||||
|                 --no-colour-term \ |  | ||||||
|                  $DEQP_OPTIONS |  | ||||||
|  |  | ||||||
| if [ $? -ne 0 ]; then |  | ||||||
|     echo "Regressions detected" |  | ||||||
|     echo "deqp: fail" |  | ||||||
| else |  | ||||||
|     echo "No regressions detected" |  | ||||||
|     echo "deqp: pass" |  | ||||||
| fi |  | ||||||
| @@ -1,61 +0,0 @@ | |||||||
| job_name: mesa-deqp-{{ gpu_version }} |  | ||||||
| device_type: {{ lava_device_type }} |  | ||||||
| timeouts: |  | ||||||
|   job: |  | ||||||
|     minutes: 40 |  | ||||||
|   action: |  | ||||||
|    minutes: 10 |  | ||||||
|   actions: |  | ||||||
|     power-off: |  | ||||||
|       seconds: 30 |  | ||||||
| priority: 75 |  | ||||||
| visibility: public |  | ||||||
| actions: |  | ||||||
| - deploy: |  | ||||||
|     timeout: |  | ||||||
|       minutes: 10 |  | ||||||
|     to: tftp |  | ||||||
|     kernel: |  | ||||||
|       url: {{ base_artifacts_url }}/{{ kernel_image_name }} |  | ||||||
|       {{ kernel_image_type }} |  | ||||||
|     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 |  | ||||||
|           - echo 3 > /proc/sys/kernel/printk |  | ||||||
|           - sh /deqp/lava-deqp-runner.sh {{ gpu_version }} |  | ||||||
|           - cat /proc/loadavg |  | ||||||
|         parse: |  | ||||||
|           pattern: '(?P<test_case_id>\S*):\s+(?P<result>(pass|fail))' |  | ||||||
|       from: inline |  | ||||||
|       name: deqp |  | ||||||
|       path: inline/mesa-deqp.yaml |  | ||||||
| @@ -1,209 +0,0 @@ | |||||||
| variables: |  | ||||||
|     LAVA_DEBIAN_VERSION: testing-slim |  | ||||||
|     LAVA_IMAGE_TAG: "lava-2019-10-23-1" |  | ||||||
|  |  | ||||||
| include: |  | ||||||
|   - project: 'wayland/ci-templates' |  | ||||||
|     ref: 1f7f57c64ff4ebbf7292e3b7a13600518b8cb24c |  | ||||||
|     file: '/templates/debian.yml' |  | ||||||
|  |  | ||||||
| # When to automatically run the CI |  | ||||||
| .ci-run-policy: |  | ||||||
|   only: |  | ||||||
|     - branches@mesa/mesa |  | ||||||
|     - merge_requests |  | ||||||
|     - /^ci([-/].*)?$/ |  | ||||||
|   retry: |  | ||||||
|     max: 2 |  | ||||||
|     when: |  | ||||||
|       - runner_system_failure |  | ||||||
|  |  | ||||||
| # Build Docker image with deqp, the rootfs and the build deps for Mesa |  | ||||||
| .lava-container: |  | ||||||
|   extends: |  | ||||||
|     - .debian@container-ifnot-exists |  | ||||||
|     - .container |  | ||||||
|   variables: |  | ||||||
|     DEBIAN_TAG: '${DEBIAN_ARCH}-${LAVA_IMAGE_TAG}' |  | ||||||
|     DEBIAN_EXEC: 'DEBIAN_ARCH=${DEBIAN_ARCH} |  | ||||||
|                   GCC_ARCH=${GCC_ARCH} |  | ||||||
|                   KERNEL_ARCH=${KERNEL_ARCH} |  | ||||||
|                   VOLT_ARCH=${VOLT_ARCH} |  | ||||||
|                   DEFCONFIG=${DEFCONFIG} |  | ||||||
|                   DEVICE_TREES="${DEVICE_TREES}" |  | ||||||
|                   KERNEL_IMAGE_NAME=${KERNEL_IMAGE_NAME} |  | ||||||
|                   bash .gitlab-ci/lava-debian-install.sh' |  | ||||||
|     DEBIAN_VERSION: ${LAVA_DEBIAN_VERSION} |  | ||||||
|  |  | ||||||
| lava-container:armhf: |  | ||||||
|   extends: .lava-container |  | ||||||
|   variables: |  | ||||||
|     DEBIAN_ARCH: "armhf" |  | ||||||
|     GCC_ARCH: "arm-linux-gnueabihf" |  | ||||||
|     KERNEL_ARCH: "arm" |  | ||||||
|     VOLT_ARCH: "armhf" |  | ||||||
|     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" |  | ||||||
|  |  | ||||||
| lava-container:arm64: |  | ||||||
|   extends: .lava-container |  | ||||||
|   variables: |  | ||||||
|     DEBIAN_ARCH: "arm64" |  | ||||||
|     GCC_ARCH: "aarch64-linux-gnu" |  | ||||||
|     KERNEL_ARCH: "arm64" |  | ||||||
|     VOLT_ARCH: "aarch64" |  | ||||||
|     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" |  | ||||||
|     KERNEL_IMAGE_NAME: "Image" |  | ||||||
|  |  | ||||||
| .lava-build: |  | ||||||
|   image: $CI_REGISTRY_IMAGE/debian/$LAVA_DEBIAN_VERSION:$DEBIAN_ARCH-$LAVA_IMAGE_TAG |  | ||||||
|   extends: |  | ||||||
|     - .build-linux |  | ||||||
|   # Use ccache transparently, and print stats before/after |  | ||||||
|   before_script: |  | ||||||
|     - mkdir -p results mesa-build |  | ||||||
|     - mkdir -p ccache |  | ||||||
|     - export PATH="/usr/lib/ccache:$PATH" |  | ||||||
|     - export CCACHE_BASEDIR="$PWD" |  | ||||||
|     - export CCACHE_DIR="$PWD/ccache" |  | ||||||
|     - ccache --max-size=1500M |  | ||||||
|     - ccache --zero-stats || true |  | ||||||
|     - ccache --show-stats || true |  | ||||||
|   script: |  | ||||||
|     # Build Mesa |  | ||||||
|     - /usr/share/meson/debcrossgen --arch ${DEBIAN_ARCH} -o /tmp/cross_file.txt |  | ||||||
|     - meson . mesa-build |  | ||||||
|         --cross-file /tmp/cross_file.txt |  | ||||||
|         --libdir /artifacts/rootfs/mesa/lib/ |  | ||||||
|         --buildtype debugoptimized |  | ||||||
|         -D gallium-drivers=kmsro,panfrost,lima |  | ||||||
|         -D dri-drivers= |  | ||||||
|         -D prefix=/artifacts/rootfs/mesa |  | ||||||
|         -D glx=disabled |  | ||||||
|         -D gbm=false |  | ||||||
|         -D egl=true |  | ||||||
|         -D platforms=surfaceless |  | ||||||
|         -D osmesa=none |  | ||||||
|         -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 llvm=false |  | ||||||
|     - ninja -C mesa-build -j4 |  | ||||||
|     - ninja -C mesa-build install |  | ||||||
|     - find /artifacts/rootfs/mesa/lib -name \*.so -exec ${GCC_ARCH}-strip {} \; |  | ||||||
|  |  | ||||||
|     - du -sh /artifacts/rootfs/mesa/* |  | ||||||
|     - rm -rf /artifacts/rootfs/mesa/include |  | ||||||
|  |  | ||||||
|     # Pack rootfs |  | ||||||
|     - cp .gitlab-ci/lava-deqp-runner.sh /artifacts/rootfs/deqp/. |  | ||||||
|     - cp .gitlab-ci/deqp-*-fails.txt /artifacts/rootfs/deqp/. |  | ||||||
|     - cp .gitlab-ci/deqp-*-skips.txt /artifacts/rootfs/deqp/. |  | ||||||
|     - du -sh /artifacts/rootfs/deqp/* |  | ||||||
|     - find /artifacts/rootfs/ -type f -printf "%s\t%p\n" | sort -n |  | ||||||
|     - pushd /artifacts/rootfs/ ; find -H  |  cpio -H newc -v -o | gzip -c - > $CI_PROJECT_DIR/results/lava-rootfs-${DEBIAN_ARCH}.cpio.gz; popd |  | ||||||
|  |  | ||||||
|     # Copy kernel and DT |  | ||||||
|     - cp /artifacts/${KERNEL_IMAGE_NAME} /artifacts/*.dtb $CI_PROJECT_DIR/results/. |  | ||||||
|  |  | ||||||
|     # Generate LAVA job |  | ||||||
|     - cd $CI_PROJECT_DIR |  | ||||||
|     - .gitlab-ci/generate_lava.py |  | ||||||
|         --template .gitlab-ci/lava-deqp.yml.jinja2 |  | ||||||
|         --arch ${DEBIAN_ARCH} |  | ||||||
|         --base-artifacts-url $CI_PROJECT_URL/-/jobs/$CI_JOB_ID/artifacts/raw/results |  | ||||||
|         --device-types ${DEVICE_TYPES} |  | ||||||
|         --kernel-image-name ${KERNEL_IMAGE_NAME} |  | ||||||
|   after_script: |  | ||||||
|     - export CCACHE_DIR="$PWD/ccache" |  | ||||||
|     - ccache --show-stats |  | ||||||
|   artifacts: |  | ||||||
|     when: always |  | ||||||
|     paths: |  | ||||||
|       - results/ |  | ||||||
|  |  | ||||||
| lava-build:armhf: |  | ||||||
|   extends: .lava-build |  | ||||||
|   needs: ["lava-container:armhf"] |  | ||||||
|   variables: |  | ||||||
|     DEBIAN_ARCH: "armhf" |  | ||||||
|     GCC_ARCH: "arm-linux-gnueabihf" |  | ||||||
|     DEVICE_TYPES: "rk3288-veyron-jaq sun8i-h3-libretech-all-h3-cc" |  | ||||||
|     KERNEL_IMAGE_NAME: "zImage" |  | ||||||
|  |  | ||||||
| lava-build:arm64: |  | ||||||
|   extends: .lava-build |  | ||||||
|   needs: ["lava-container:arm64"] |  | ||||||
|   variables: |  | ||||||
|     DEBIAN_ARCH: "arm64" |  | ||||||
|     GCC_ARCH: "aarch64-linux-gnu" |  | ||||||
|     DEVICE_TYPES: "rk3399-gru-kevin meson-gxl-s905x-libretech-cc" |  | ||||||
|     KERNEL_IMAGE_NAME: "Image" |  | ||||||
|  |  | ||||||
| .lava-test: |  | ||||||
|   extends: |  | ||||||
|     - .test |  | ||||||
|   script: |  | ||||||
|     - lava_job_id=`lavacli jobs submit $CI_PROJECT_DIR/results/lava-deqp-$DEVICE_TYPE.yml` |  | ||||||
|     - echo $lava_job_id |  | ||||||
|     - lavacli jobs logs $lava_job_id | grep -a -v "{'case':" | tee results/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: |  | ||||||
|       - results/ |  | ||||||
|  |  | ||||||
| .lava-test:armhf: |  | ||||||
|   image: $CI_REGISTRY_IMAGE/debian/$LAVA_DEBIAN_VERSION:armhf-$LAVA_IMAGE_TAG |  | ||||||
|   extends: .lava-test |  | ||||||
|   needs: |  | ||||||
|     - lava-container:armhf |  | ||||||
|     - lava-build:armhf |  | ||||||
|   dependencies: |  | ||||||
|     - lava-build:armhf |  | ||||||
|  |  | ||||||
| .lava-test:arm64: |  | ||||||
|   image: $CI_REGISTRY_IMAGE/debian/$LAVA_DEBIAN_VERSION:arm64-$LAVA_IMAGE_TAG |  | ||||||
|   extends: .lava-test |  | ||||||
|   needs: |  | ||||||
|     - lava-container:arm64 |  | ||||||
|     - lava-build:arm64 |  | ||||||
|   dependencies: |  | ||||||
|     - lava-build:arm64 |  | ||||||
|  |  | ||||||
| panfrost-t760-test:armhf: |  | ||||||
|   extends: .lava-test:armhf |  | ||||||
|   variables: |  | ||||||
|     DEVICE_TYPE: rk3288-veyron-jaq |  | ||||||
|   tags: |  | ||||||
|     - lava-rk3288-veyron-jaq |  | ||||||
|  |  | ||||||
| panfrost-t860-test:arm64: |  | ||||||
|   extends: .lava-test:arm64 |  | ||||||
|   variables: |  | ||||||
|     DEVICE_TYPE: rk3399-gru-kevin |  | ||||||
|   tags: |  | ||||||
|     - lava-rk3399-gru-kevin |  | ||||||
|  |  | ||||||
| lima-test:armhf: |  | ||||||
|   extends: .lava-test:armhf |  | ||||||
|   variables: |  | ||||||
|     DEVICE_TYPE: sun8i-h3-libretech-all-h3-cc |  | ||||||
|   tags: |  | ||||||
|     - lava-sun8i-h3-libretech-all-h3-cc |  | ||||||
|  |  | ||||||
| lima-test:arm64: |  | ||||||
|   extends: .lava-test:arm64 |  | ||||||
|   variables: |  | ||||||
|     DEVICE_TYPE: meson-gxl-s905x-libretech-cc |  | ||||||
|   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,89 +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 .. |  | ||||||
|  |  | ||||||
| if test -n "$MESON_SHADERDB"; then |  | ||||||
|     ./.gitlab-ci/run-shader-db.sh; |  | ||||||
| fi |  | ||||||
|  |  | ||||||
| # Delete 2MB of includes from artifacts. |  | ||||||
| rm -rf 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 -Rp .gitlab-ci/deqp* artifacts/ |  | ||||||
| # cp -Rp src/freedreno/ci/expected* artifacts/ |  | ||||||
| @@ -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 |  | ||||||
							
								
								
									
										26
									
								
								.mailmap
									
									
									
									
									
								
							
							
						
						
									
										26
									
								
								.mailmap
									
									
									
									
									
								
							| @@ -26,8 +26,6 @@ Alexander Monakov <amonakov@gmail.com> <amonakov@ispras.ru> | |||||||
|  |  | ||||||
| Alexander von Gluck IV <kallisti5@unixzen.com> Alexander von Gluck <kallisti5@unixzen.com> | 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.prom.eng.vmware.com> | ||||||
| Alex Corscadden <alexc@vmware.com> <alexc@alexc-dev1.vmware.com> | Alex Corscadden <alexc@vmware.com> <alexc@alexc-dev1.vmware.com> | ||||||
|  |  | ||||||
| @@ -52,8 +50,6 @@ Andrew Randrianasulu <randrianasulu@gmail.com> <randrik@mail.ru> | |||||||
|  |  | ||||||
| Arthur Huillet <arthur.huillet@free.fr> Arthur HUILLET <arthur.huillet@free.fr> | 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> | Benjamin Franzke <benjaminfranzke@googlemail.com> ben <benjaminfranzke@googlemail.com> | ||||||
|  |  | ||||||
| Ben Skeggs <bskeggs@redhat.com> <darktama@beleth.(none)> | Ben Skeggs <bskeggs@redhat.com> <darktama@beleth.(none)> | ||||||
| @@ -146,22 +142,12 @@ Dylan Baker <dylanx.c.baker@intel.com> <baker.dylan.c@gmail.com> | |||||||
|  |  | ||||||
| Edward O'Callaghan <funfunctor@folklore1984.net> <eocallaghan@alterapraxis.com> | 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> | 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.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 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> | Eugeni Dodonov <eugeni.dodonov@intel.com> <eugeni@mandriva.com> | ||||||
|  |  | ||||||
| Fabian Bieler <der.fabe@gmx.net> <fabianbieler@fastmail.fm> | Fabian Bieler <der.fabe@gmx.net> <fabianbieler@fastmail.fm> | ||||||
| @@ -169,14 +155,10 @@ Fabian Bieler <der.fabe@gmx.net> <<der.fabe@gmx.net>> | |||||||
|  |  | ||||||
| Feng, Haitao <haitao.feng@intel.com> Haitao Feng <haitao.feng@intel.com> | 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> | Frank Henigman <fjhenigman@google.com> <fjhenigman@chromium.org> | ||||||
|  |  | ||||||
| George Sapountzis <gsapountzis@gmail.com> George Sapountzis <gsap7@yahoo.gr> | 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> | Gwenole Beauchesne <gwenole.beauchesne@intel.com> <gb.devel@gmail.com> | ||||||
|  |  | ||||||
| Hamish Marson <hmarson@users.sourceforge.net> hmarson <hmarson> | Hamish Marson <hmarson@users.sourceforge.net> hmarson <hmarson> | ||||||
| @@ -195,8 +177,6 @@ Jakob Bornecrantz <wallbraker@gmail.com> <jakob@aurora.(none)> | |||||||
| Jakob Bornecrantz <wallbraker@gmail.com> <jakob@aurora.walkyrie.se> | Jakob Bornecrantz <wallbraker@gmail.com> <jakob@aurora.walkyrie.se> | ||||||
| Jakob Bornecrantz <wallbraker@gmail.com> <jakob@tungstengraphics.com> | Jakob Bornecrantz <wallbraker@gmail.com> <jakob@tungstengraphics.com> | ||||||
| Jakob Bornecrantz <wallbraker@gmail.com> <wallbraker 'at' gmail 'dot' 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> | Jakub Bogusz <qboosh@pld-linux.org> <gboosh@pld-linux.org> | ||||||
|  |  | ||||||
| @@ -278,9 +258,6 @@ Kristian Høgsberg <krh@bitplanet.net> <krh@hinata.boston.redhat.com> | |||||||
| Kristian Høgsberg <krh@bitplanet.net> <krh@sasori.boston.redhat.com> | Kristian Høgsberg <krh@bitplanet.net> <krh@sasori.boston.redhat.com> | ||||||
| Kristian Høgsberg <krh@bitplanet.net> <krh@temari.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> <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> | Krzesimir Nowak <qdlacz@gmail.com> <krzesimir@kinvolk.io> | ||||||
|  |  | ||||||
| @@ -341,7 +318,6 @@ Michel Dänzer <michel@daenzer.net> <daenzer@vmware.com> | |||||||
| Michel Dänzer <michel@daenzer.net> <michel@tungstengraphics.com> | Michel Dänzer <michel@daenzer.net> <michel@tungstengraphics.com> | ||||||
| Michel Dänzer <michel@daenzer.net> Michel Daenzer <michel.daenzer@amd.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> 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 Kaplinksiy <mike.kaplinskiy@gmail.com> | ||||||
| Mike Kaplinskiy <mike.kaplinskiy@gmail.com> <mike.kaplinskiy@gmai.com> | Mike Kaplinskiy <mike.kaplinskiy@gmail.com> <mike.kaplinskiy@gmai.com> | ||||||
| @@ -467,8 +443,6 @@ Tom Fogal <tfogal@alumni.unh.edu> <tfogal@sci.utah.edu> | |||||||
| Tom Stellard <thomas.stellard@amd.com> <tstellar@gmail.com> | Tom Stellard <thomas.stellard@amd.com> <tstellar@gmail.com> | ||||||
| Tom Stellard <thomas.stellard@amd.com> Thomas Stellard <tom.stellard@amd.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> | 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> Török Edvin <edwintorok@gmail.com> | ||||||
|   | |||||||
							
								
								
									
										536
									
								
								.travis.yml
									
									
									
									
									
								
							
							
						
						
									
										536
									
								
								.travis.yml
									
									
									
									
									
								
							| @@ -1,63 +1,519 @@ | |||||||
| language: c | language: c | ||||||
|  |  | ||||||
| os: osx | sudo: false | ||||||
|  | dist: trusty | ||||||
|  |  | ||||||
| cache: | cache: | ||||||
|  |   apt: true | ||||||
|   ccache: true |   ccache: true | ||||||
|  |  | ||||||
| env: | env: | ||||||
|   global: |   global: | ||||||
|     - PKG_CONFIG_PATH="" |     - XORG_RELEASES=http://xorg.freedesktop.org/releases/individual | ||||||
|  |     - XCB_RELEASES=http://xcb.freedesktop.org/dist | ||||||
|  |     - WAYLAND_RELEASES=http://wayland.freedesktop.org/releases | ||||||
|  |     - XORGMACROS_VERSION=util-macros-1.19.0 | ||||||
|  |     - GLPROTO_VERSION=glproto-1.4.17 | ||||||
|  |     - DRI2PROTO_VERSION=dri2proto-2.8 | ||||||
|  |     - LIBPCIACCESS_VERSION=libpciaccess-0.13.4 | ||||||
|  |     - LIBDRM_VERSION=libdrm-2.4.74 | ||||||
|  |     - XCBPROTO_VERSION=xcb-proto-1.11 | ||||||
|  |     - LIBXCB_VERSION=libxcb-1.11 | ||||||
|  |     - LIBXSHMFENCE_VERSION=libxshmfence-1.2 | ||||||
|  |     - LIBVDPAU_VERSION=libvdpau-1.1 | ||||||
|  |     - LIBVA_VERSION=libva-1.6.2 | ||||||
|  |     - LIBWAYLAND_VERSION=wayland-1.11.1 | ||||||
|  |     - WAYLAND_PROTOCOLS_VERSION=wayland-protocols-1.8 | ||||||
|  |     - PKG_CONFIG_PATH=$HOME/prefix/lib/pkgconfig:$HOME/prefix/share/pkgconfig | ||||||
|  |     - LD_LIBRARY_PATH="$HOME/prefix/lib:$LD_LIBRARY_PATH" | ||||||
|  |     - PATH="$HOME/prefix/bin:$PATH" | ||||||
|  |  | ||||||
| matrix: | matrix: | ||||||
|   include: |   include: | ||||||
|     - env: |     - env: | ||||||
|       - BUILD=meson |         - LABEL="meson Vulkan" | ||||||
|  |         - BUILD=meson | ||||||
|  |         - MESON_OPTIONS="-Ddri-drivers= -Dgallium-drivers=" | ||||||
|  |       addons: | ||||||
|  |         apt: | ||||||
|  |           sources: | ||||||
|  |             - llvm-toolchain-trusty-3.9 | ||||||
|  |           packages: | ||||||
|  |             # LLVM packaging is broken and misses these dependencies | ||||||
|  |             - libedit-dev | ||||||
|  |             # From sources above | ||||||
|  |             - llvm-3.9-dev | ||||||
|  |             # Common | ||||||
|  |             - xz-utils | ||||||
|  |             - libexpat1-dev | ||||||
|  |             - libelf-dev | ||||||
|  |             - python3-pip | ||||||
|     - env: |     - env: | ||||||
|       - BUILD=scons |         - LABEL="meson loaders/classic DRI" | ||||||
|  |         - BUILD=meson | ||||||
| before_install: |         - MESON_OPTIONS="-Dvulkan-drivers= -Dgallium-drivers=" | ||||||
|   - HOMEBREW_NO_AUTO_UPDATE=1 brew install expat gettext |       addons: | ||||||
|   - if test "x$BUILD" = xmeson; then |         apt: | ||||||
|       HOMEBREW_NO_AUTO_UPDATE=1 brew install ninja; |           packages: | ||||||
|     fi |             - xz-utils | ||||||
|   - if test "x$BUILD" = xscons; then |             - x11proto-xf86vidmode-dev | ||||||
|       HOMEBREW_NO_AUTO_UPDATE=1 brew install scons; |             - libexpat1-dev | ||||||
|     fi |             - libx11-xcb-dev | ||||||
|  |             - libxdamage-dev | ||||||
|   # Set PATH for homebrew pip3 installs |             - libxfixes-dev | ||||||
|   - PATH="$HOME/Library/Python/3.6/bin:${PATH}" |             - python3-pip | ||||||
|   # Set PKG_CONFIG_PATH for keg-only expat |     - env: | ||||||
|   - PKG_CONFIG_PATH="/usr/local/opt/expat/lib/pkgconfig:${PKG_CONFIG_PATH}" |         - LABEL="make loaders/classic DRI" | ||||||
|   # Set PATH for keg-only gettext |         - BUILD=make | ||||||
|   - PATH="/usr/local/opt/gettext/bin:${PATH}" |         - MAKEFLAGS="-j4" | ||||||
|  |         - MAKE_CHECK_COMMAND="make check" | ||||||
|   # Install xquartz for prereqs ... |         - DRI_LOADERS="--enable-glx --enable-gbm --enable-egl --with-platforms=x11,drm,surfaceless,wayland --enable-osmesa" | ||||||
|   - XQUARTZ_VERSION="2.7.11" |         - DRI_DRIVERS="i915,i965,radeon,r200,swrast,nouveau" | ||||||
|   - wget -nv https://dl.bintray.com/xquartz/downloads/XQuartz-${XQUARTZ_VERSION}.dmg |         - GALLIUM_ST="--enable-dri --disable-opencl --disable-xa --disable-nine --disable-xvmc --disable-vdpau --disable-va --disable-omx-bellagio --disable-gallium-osmesa" | ||||||
|   - hdiutil attach XQuartz-${XQUARTZ_VERSION}.dmg |         - GALLIUM_DRIVERS="" | ||||||
|   - sudo installer -pkg /Volumes/XQuartz-${XQUARTZ_VERSION}/XQuartz.pkg -target / |         - VULKAN_DRIVERS="" | ||||||
|   - hdiutil detach /Volumes/XQuartz-${XQUARTZ_VERSION} |         - LIBUNWIND_FLAGS="--disable-libunwind" | ||||||
|   # ... and set paths |       addons: | ||||||
|   - PKG_CONFIG_PATH="/opt/X11/share/pkgconfig:/opt/X11/lib/pkgconfig:${PKG_CONFIG_PATH}" |         apt: | ||||||
|  |           packages: | ||||||
|  |             - xz-utils | ||||||
|  |             - x11proto-xf86vidmode-dev | ||||||
|  |             - libexpat1-dev | ||||||
|  |             - libx11-xcb-dev | ||||||
|  |             - libxdamage-dev | ||||||
|  |             - libxfixes-dev | ||||||
|  |     - env: | ||||||
|  |         # NOTE: Building SWR is 2x (yes two) times slower than all the other | ||||||
|  |         # gallium drivers combined. | ||||||
|  |         # Start this early so that it doesn't hunder the run time. | ||||||
|  |         - LABEL="make Gallium Drivers SWR" | ||||||
|  |         - BUILD=make | ||||||
|  |         - MAKEFLAGS="-j4" | ||||||
|  |         - MAKE_CHECK_COMMAND="true" | ||||||
|  |         - LLVM_VERSION=3.9 | ||||||
|  |         - LLVM_CONFIG="llvm-config-${LLVM_VERSION}" | ||||||
|  |         - OVERRIDE_CC="gcc-4.8" | ||||||
|  |         - OVERRIDE_CXX="g++-4.8" | ||||||
|  |         # New binutils linker is required for llvm-3.9 | ||||||
|  |         - OVERRIDE_PATH=/usr/lib/binutils-2.26/bin | ||||||
|  |         - DRI_LOADERS="--disable-glx --disable-gbm --disable-egl" | ||||||
|  |         - DRI_DRIVERS="" | ||||||
|  |         - GALLIUM_ST="--enable-dri --disable-opencl --disable-xa --disable-nine --disable-xvmc --disable-vdpau --disable-va --disable-omx-bellagio --disable-gallium-osmesa" | ||||||
|  |         - GALLIUM_DRIVERS="swr" | ||||||
|  |         - VULKAN_DRIVERS="" | ||||||
|  |         - LIBUNWIND_FLAGS="--enable-libunwind" | ||||||
|  |       addons: | ||||||
|  |         apt: | ||||||
|  |           sources: | ||||||
|  |             - llvm-toolchain-trusty-3.9 | ||||||
|  |           packages: | ||||||
|  |             - binutils-2.26 | ||||||
|  |             # LLVM packaging is broken and misses these dependencies | ||||||
|  |             - libedit-dev | ||||||
|  |             # From sources above | ||||||
|  |             - llvm-3.9-dev | ||||||
|  |             # Common | ||||||
|  |             - xz-utils | ||||||
|  |             - x11proto-xf86vidmode-dev | ||||||
|  |             - libexpat1-dev | ||||||
|  |             - libx11-xcb-dev | ||||||
|  |             - libelf-dev | ||||||
|  |             - libunwind8-dev | ||||||
|  |     - env: | ||||||
|  |         - LABEL="make Gallium Drivers Other" | ||||||
|  |         - BUILD=make | ||||||
|  |         - MAKEFLAGS="-j4" | ||||||
|  |         - MAKE_CHECK_COMMAND="true" | ||||||
|  |         - LLVM_VERSION=3.9 | ||||||
|  |         - LLVM_CONFIG="llvm-config-${LLVM_VERSION}" | ||||||
|  |         # New binutils linker is required for llvm-3.9 | ||||||
|  |         - OVERRIDE_PATH=/usr/lib/binutils-2.26/bin | ||||||
|  |         - DRI_LOADERS="--disable-glx --disable-gbm --disable-egl" | ||||||
|  |         - DRI_DRIVERS="" | ||||||
|  |         - GALLIUM_ST="--enable-dri --disable-opencl --disable-xa --disable-nine --disable-xvmc --disable-vdpau --disable-va --disable-omx-bellagio --disable-gallium-osmesa" | ||||||
|  |         - GALLIUM_DRIVERS="i915,nouveau,pl111,r300,r600,radeonsi,freedreno,svga,swrast,vc4,virgl,etnaviv,imx" | ||||||
|  |         - VULKAN_DRIVERS="" | ||||||
|  |         - LIBUNWIND_FLAGS="--enable-libunwind" | ||||||
|  |       addons: | ||||||
|  |         apt: | ||||||
|  |           sources: | ||||||
|  |             - llvm-toolchain-trusty-3.9 | ||||||
|  |           packages: | ||||||
|  |             - binutils-2.26 | ||||||
|  |             # LLVM packaging is broken and misses these dependencies | ||||||
|  |             - libedit-dev | ||||||
|  |             # From sources above | ||||||
|  |             - llvm-3.9-dev | ||||||
|  |             # Common | ||||||
|  |             - xz-utils | ||||||
|  |             - x11proto-xf86vidmode-dev | ||||||
|  |             - libexpat1-dev | ||||||
|  |             - libx11-xcb-dev | ||||||
|  |             - libelf-dev | ||||||
|  |             - libunwind8-dev | ||||||
|  |     - env: | ||||||
|  |         # NOTE: Analogous to SWR above, building Clover is quite slow. | ||||||
|  |         - LABEL="make Gallium ST Clover LLVM-3.9" | ||||||
|  |         - BUILD=make | ||||||
|  |         - MAKEFLAGS="-j4" | ||||||
|  |         - MAKE_CHECK_COMMAND="true" | ||||||
|  |         - LLVM_VERSION=3.9 | ||||||
|  |         - LLVM_CONFIG="llvm-config-${LLVM_VERSION}" | ||||||
|  |         - OVERRIDE_CC=gcc-4.7 | ||||||
|  |         - OVERRIDE_CXX=g++-4.7 | ||||||
|  |         # New binutils linker is required for llvm-3.9 | ||||||
|  |         - OVERRIDE_PATH=/usr/lib/binutils-2.26/bin | ||||||
|  |         - DRI_LOADERS="--disable-glx --disable-gbm --disable-egl" | ||||||
|  |         - DRI_DRIVERS="" | ||||||
|  |         - GALLIUM_ST="--disable-dri --enable-opencl --enable-opencl-icd --enable-llvm --disable-xa --disable-nine --disable-xvmc --disable-vdpau --disable-va --disable-omx-bellagio --disable-gallium-osmesa" | ||||||
|  |         - GALLIUM_DRIVERS="r600,radeonsi" | ||||||
|  |         - VULKAN_DRIVERS="" | ||||||
|  |         - LIBUNWIND_FLAGS="--enable-libunwind" | ||||||
|  |       addons: | ||||||
|  |         apt: | ||||||
|  |           sources: | ||||||
|  |             - llvm-toolchain-trusty-3.9 | ||||||
|  |           packages: | ||||||
|  |             - binutils-2.26 | ||||||
|  |             - libclc-dev | ||||||
|  |             # LLVM packaging is broken and misses these dependencies | ||||||
|  |             - libedit-dev | ||||||
|  |             - g++-4.7 | ||||||
|  |             # From sources above | ||||||
|  |             - llvm-3.9-dev | ||||||
|  |             - clang-3.9 | ||||||
|  |             - libclang-3.9-dev | ||||||
|  |             # Common | ||||||
|  |             - xz-utils | ||||||
|  |             - x11proto-xf86vidmode-dev | ||||||
|  |             - libexpat1-dev | ||||||
|  |             - libx11-xcb-dev | ||||||
|  |             - libelf-dev | ||||||
|  |             - libunwind8-dev | ||||||
|  |     - env: | ||||||
|  |         # NOTE: Analogous to SWR above, building Clover is quite slow. | ||||||
|  |         - LABEL="make Gallium ST Clover LLVM-4.0" | ||||||
|  |         - BUILD=make | ||||||
|  |         - MAKEFLAGS="-j4" | ||||||
|  |         - MAKE_CHECK_COMMAND="true" | ||||||
|  |         - LLVM_VERSION=4.0 | ||||||
|  |         - LLVM_CONFIG="llvm-config-${LLVM_VERSION}" | ||||||
|  |         - OVERRIDE_CC=gcc-4.8 | ||||||
|  |         - OVERRIDE_CXX=g++-4.8 | ||||||
|  |         - DRI_LOADERS="--disable-glx --disable-gbm --disable-egl" | ||||||
|  |         - DRI_DRIVERS="" | ||||||
|  |         - GALLIUM_ST="--disable-dri --enable-opencl --enable-opencl-icd --enable-llvm --disable-xa --disable-nine --disable-xvmc --disable-vdpau --disable-va --disable-omx-bellagio --disable-gallium-osmesa" | ||||||
|  |         - GALLIUM_DRIVERS="r600,radeonsi" | ||||||
|  |         - VULKAN_DRIVERS="" | ||||||
|  |         - LIBUNWIND_FLAGS="--enable-libunwind" | ||||||
|  |       addons: | ||||||
|  |         apt: | ||||||
|  |           sources: | ||||||
|  |             - llvm-toolchain-trusty-4.0 | ||||||
|  |           packages: | ||||||
|  |             - libclc-dev | ||||||
|  |             # LLVM packaging is broken and misses these dependencies | ||||||
|  |             - libedit-dev | ||||||
|  |             - g++-4.8 | ||||||
|  |             # From sources above | ||||||
|  |             - llvm-4.0-dev | ||||||
|  |             - clang-4.0 | ||||||
|  |             - libclang-4.0-dev | ||||||
|  |             # Common | ||||||
|  |             - xz-utils | ||||||
|  |             - x11proto-xf86vidmode-dev | ||||||
|  |             - libexpat1-dev | ||||||
|  |             - libx11-xcb-dev | ||||||
|  |             - libelf-dev | ||||||
|  |             - libunwind8-dev | ||||||
|  |     - env: | ||||||
|  |         # NOTE: Analogous to SWR above, building Clover is quite slow. | ||||||
|  |         - LABEL="make Gallium ST Clover LLVM-5.0" | ||||||
|  |         - BUILD=make | ||||||
|  |         - MAKEFLAGS="-j4" | ||||||
|  |         - MAKE_CHECK_COMMAND="true" | ||||||
|  |         - LLVM_VERSION=5.0 | ||||||
|  |         - LLVM_CONFIG="llvm-config-${LLVM_VERSION}" | ||||||
|  |         - OVERRIDE_CC=gcc-4.8 | ||||||
|  |         - OVERRIDE_CXX=g++-4.8 | ||||||
|  |         - DRI_LOADERS="--disable-glx --disable-gbm --disable-egl" | ||||||
|  |         - DRI_DRIVERS="" | ||||||
|  |         - GALLIUM_ST="--disable-dri --enable-opencl --enable-opencl-icd --enable-llvm --disable-xa --disable-nine --disable-xvmc --disable-vdpau --disable-va --disable-omx-bellagio --disable-gallium-osmesa" | ||||||
|  |         - GALLIUM_DRIVERS="r600,radeonsi" | ||||||
|  |         - VULKAN_DRIVERS="" | ||||||
|  |         - LIBUNWIND_FLAGS="--enable-libunwind" | ||||||
|  |       addons: | ||||||
|  |         apt: | ||||||
|  |           sources: | ||||||
|  |             - llvm-toolchain-trusty-5.0 | ||||||
|  |           packages: | ||||||
|  |             - libclc-dev | ||||||
|  |             # LLVM packaging is broken and misses these dependencies | ||||||
|  |             - libedit-dev | ||||||
|  |             - g++-4.8 | ||||||
|  |             # From sources above | ||||||
|  |             - llvm-5.0-dev | ||||||
|  |             - clang-5.0 | ||||||
|  |             - libclang-5.0-dev | ||||||
|  |             # Common | ||||||
|  |             - xz-utils | ||||||
|  |             - x11proto-xf86vidmode-dev | ||||||
|  |             - libexpat1-dev | ||||||
|  |             - libx11-xcb-dev | ||||||
|  |             - libelf-dev | ||||||
|  |             - libunwind8-dev | ||||||
|  |     - env: | ||||||
|  |         - LABEL="make Gallium ST Other" | ||||||
|  |         - BUILD=make | ||||||
|  |         - MAKEFLAGS="-j4" | ||||||
|  |         - MAKE_CHECK_COMMAND="true" | ||||||
|  |         - LLVM_VERSION=3.3 | ||||||
|  |         - LLVM_CONFIG="llvm-config-${LLVM_VERSION}" | ||||||
|  |         - DRI_LOADERS="--disable-glx --disable-gbm --disable-egl" | ||||||
|  |         - DRI_DRIVERS="" | ||||||
|  |         - GALLIUM_ST="--enable-dri --disable-opencl --enable-xa --enable-nine --enable-xvmc --enable-vdpau --enable-va --enable-omx-bellagio --enable-gallium-osmesa" | ||||||
|  |         # We need swrast for osmesa and nine. | ||||||
|  |         # i915 most likely doesn't work with most ST. | ||||||
|  |         # Regardless - we're doing a quick build test here. | ||||||
|  |         - GALLIUM_DRIVERS="i915,swrast" | ||||||
|  |         - VULKAN_DRIVERS="" | ||||||
|  |         - LIBUNWIND_FLAGS="--enable-libunwind" | ||||||
|  |       addons: | ||||||
|  |         apt: | ||||||
|  |           packages: | ||||||
|  |             # We actually want to test against llvm-3.3 | ||||||
|  |             - llvm-3.3-dev | ||||||
|  |             # Nine requires gcc 4.6... which is the one we have right ? | ||||||
|  |             - libxvmc-dev | ||||||
|  |             # Build locally, for now. | ||||||
|  |             #- libvdpau-dev | ||||||
|  |             #- libva-dev | ||||||
|  |             - libomxil-bellagio-dev | ||||||
|  |             # LLVM packaging is broken and misses these dependencies | ||||||
|  |             - libedit-dev | ||||||
|  |             # Common | ||||||
|  |             - xz-utils | ||||||
|  |             - x11proto-xf86vidmode-dev | ||||||
|  |             - libexpat1-dev | ||||||
|  |             - libx11-xcb-dev | ||||||
|  |             - libelf-dev | ||||||
|  |             - libunwind8-dev | ||||||
|  |     - env: | ||||||
|  |         - LABEL="make Vulkan" | ||||||
|  |         - BUILD=make | ||||||
|  |         - MAKEFLAGS="-j4" | ||||||
|  |         - MAKE_CHECK_COMMAND="make -C src/gtest check && make -C src/intel check" | ||||||
|  |         - LLVM_VERSION=3.9 | ||||||
|  |         - LLVM_CONFIG="llvm-config-${LLVM_VERSION}" | ||||||
|  |         # New binutils linker is required for llvm-3.9 | ||||||
|  |         - OVERRIDE_PATH=/usr/lib/binutils-2.26/bin | ||||||
|  |         - DRI_LOADERS="--disable-glx --disable-gbm --disable-egl --with-platforms=x11,wayland" | ||||||
|  |         - DRI_DRIVERS="" | ||||||
|  |         - GALLIUM_ST="--enable-dri --enable-dri3 --disable-opencl --disable-xa --disable-nine --disable-xvmc --disable-vdpau --disable-va --disable-omx-bellagio --disable-gallium-osmesa" | ||||||
|  |         - GALLIUM_DRIVERS="" | ||||||
|  |         - VULKAN_DRIVERS="intel,radeon" | ||||||
|  |         - LIBUNWIND_FLAGS="--disable-libunwind" | ||||||
|  |       addons: | ||||||
|  |         apt: | ||||||
|  |           sources: | ||||||
|  |             - llvm-toolchain-trusty-3.9 | ||||||
|  |           packages: | ||||||
|  |             - binutils-2.26 | ||||||
|  |             # LLVM packaging is broken and misses these dependencies | ||||||
|  |             - libedit-dev | ||||||
|  |             # From sources above | ||||||
|  |             - llvm-3.9-dev | ||||||
|  |             # Common | ||||||
|  |             - xz-utils | ||||||
|  |             - x11proto-xf86vidmode-dev | ||||||
|  |             - libexpat1-dev | ||||||
|  |             - libx11-xcb-dev | ||||||
|  |             - libelf-dev | ||||||
|  |     - env: | ||||||
|  |         - LABEL="scons" | ||||||
|  |         - BUILD=scons | ||||||
|  |         - SCONSFLAGS="-j4" | ||||||
|  |         # Explicitly disable. | ||||||
|  |         - SCONS_TARGET="llvm=0" | ||||||
|  |         # Keep it symmetrical to the make build. | ||||||
|  |         - SCONS_CHECK_COMMAND="scons llvm=0 check" | ||||||
|  |       addons: | ||||||
|  |         apt: | ||||||
|  |           packages: | ||||||
|  |             - scons | ||||||
|  |             # Common | ||||||
|  |             - xz-utils | ||||||
|  |             - x11proto-xf86vidmode-dev | ||||||
|  |             - libexpat1-dev | ||||||
|  |             - libx11-xcb-dev | ||||||
|  |             - libelf-dev | ||||||
|  |     - env: | ||||||
|  |         - LABEL="scons LLVM" | ||||||
|  |         - BUILD=scons | ||||||
|  |         - SCONSFLAGS="-j4" | ||||||
|  |         - SCONS_TARGET="llvm=1" | ||||||
|  |         # Keep it symmetrical to the make build. | ||||||
|  |         - SCONS_CHECK_COMMAND="scons llvm=1 check" | ||||||
|  |         - LLVM_VERSION=3.3 | ||||||
|  |         - LLVM_CONFIG="llvm-config-${LLVM_VERSION}" | ||||||
|  |       addons: | ||||||
|  |         apt: | ||||||
|  |           packages: | ||||||
|  |             - scons | ||||||
|  |             # LLVM packaging is broken and misses these dependencies | ||||||
|  |             - libedit-dev | ||||||
|  |             - llvm-3.3-dev | ||||||
|  |             # Common | ||||||
|  |             - xz-utils | ||||||
|  |             - x11proto-xf86vidmode-dev | ||||||
|  |             - libexpat1-dev | ||||||
|  |             - libx11-xcb-dev | ||||||
|  |             - libelf-dev | ||||||
|  |     - env: | ||||||
|  |         - LABEL="scons SWR" | ||||||
|  |         - BUILD=scons | ||||||
|  |         - SCONSFLAGS="-j4" | ||||||
|  |         - SCONS_TARGET="swr=1" | ||||||
|  |         - LLVM_VERSION=3.9 | ||||||
|  |         - LLVM_CONFIG="llvm-config-${LLVM_VERSION}" | ||||||
|  |         # Keep it symmetrical to the make build. There's no actual SWR, yet. | ||||||
|  |         - SCONS_CHECK_COMMAND="true" | ||||||
|  |         - OVERRIDE_CC="gcc-4.8" | ||||||
|  |         - OVERRIDE_CXX="g++-4.8" | ||||||
|  |       addons: | ||||||
|  |         apt: | ||||||
|  |           sources: | ||||||
|  |             - llvm-toolchain-trusty-3.9 | ||||||
|  |           packages: | ||||||
|  |             - scons | ||||||
|  |             # LLVM packaging is broken and misses these dependencies | ||||||
|  |             - libedit-dev | ||||||
|  |             # From sources above | ||||||
|  |             - llvm-3.9-dev | ||||||
|  |             # Common | ||||||
|  |             - xz-utils | ||||||
|  |             - x11proto-xf86vidmode-dev | ||||||
|  |             - libexpat1-dev | ||||||
|  |             - libx11-xcb-dev | ||||||
|  |             - libelf-dev | ||||||
|  |  | ||||||
| install: | install: | ||||||
|  |   - pip install --user mako | ||||||
|  |  | ||||||
|  |   # Install the latest meson from pip, since the version in the ubuntu repos is | ||||||
|  |   # often quite old. | ||||||
|   - if test "x$BUILD" = xmeson; then |   - if test "x$BUILD" = xmeson; then | ||||||
|       pip3 install --user meson; |       pip3 install --user meson; | ||||||
|       pip3 install --user mako; |  | ||||||
|     fi |  | ||||||
|   - if test "x$BUILD" = xscons; then |  | ||||||
|       pip2 install --user mako; |  | ||||||
|     fi |     fi | ||||||
|  |  | ||||||
|  |   # Since libdrm gets updated in configure.ac regularly, try to pick up the | ||||||
|  |   # latest version from there. | ||||||
|  |   - for line in `grep "^LIBDRM.*_REQUIRED=" configure.ac`; do | ||||||
|  |       old_ver=`echo $LIBDRM_VERSION | sed 's/libdrm-//'`; | ||||||
|  |       new_ver=`echo $line | sed 's/.*REQUIRED=//'`; | ||||||
|  |       if `echo "$old_ver,$new_ver" | tr ',' '\n' | sort -Vc 2> /dev/null`; then | ||||||
|  |         export LIBDRM_VERSION="libdrm-$new_ver"; | ||||||
|  |       fi; | ||||||
|  |     done | ||||||
|  |  | ||||||
|  |   # Install dependencies where we require specific versions (or where | ||||||
|  |   # disallowed by Travis CI's package whitelisting). | ||||||
|  |  | ||||||
|  |   - wget $XORG_RELEASES/util/$XORGMACROS_VERSION.tar.bz2 | ||||||
|  |   - tar -jxvf $XORGMACROS_VERSION.tar.bz2 | ||||||
|  |   - (cd $XORGMACROS_VERSION && ./configure --prefix=$HOME/prefix && make install) | ||||||
|  |  | ||||||
|  |   - wget $XORG_RELEASES/proto/$GLPROTO_VERSION.tar.bz2 | ||||||
|  |   - tar -jxvf $GLPROTO_VERSION.tar.bz2 | ||||||
|  |   - (cd $GLPROTO_VERSION && ./configure --prefix=$HOME/prefix && make install) | ||||||
|  |  | ||||||
|  |   - wget $XORG_RELEASES/proto/$DRI2PROTO_VERSION.tar.bz2 | ||||||
|  |   - tar -jxvf $DRI2PROTO_VERSION.tar.bz2 | ||||||
|  |   - (cd $DRI2PROTO_VERSION && ./configure --prefix=$HOME/prefix && make install) | ||||||
|  |  | ||||||
|  |   - wget $XCB_RELEASES/$XCBPROTO_VERSION.tar.bz2 | ||||||
|  |   - tar -jxvf $XCBPROTO_VERSION.tar.bz2 | ||||||
|  |   - (cd $XCBPROTO_VERSION && ./configure --prefix=$HOME/prefix && make install) | ||||||
|  |  | ||||||
|  |   - wget $XCB_RELEASES/$LIBXCB_VERSION.tar.bz2 | ||||||
|  |   - tar -jxvf $LIBXCB_VERSION.tar.bz2 | ||||||
|  |   - (cd $LIBXCB_VERSION && ./configure --prefix=$HOME/prefix && make install) | ||||||
|  |  | ||||||
|  |   - wget $XORG_RELEASES/lib/$LIBPCIACCESS_VERSION.tar.bz2 | ||||||
|  |   - tar -jxvf $LIBPCIACCESS_VERSION.tar.bz2 | ||||||
|  |   - (cd $LIBPCIACCESS_VERSION && ./configure --prefix=$HOME/prefix && make install) | ||||||
|  |  | ||||||
|  |   - wget http://dri.freedesktop.org/libdrm/$LIBDRM_VERSION.tar.bz2 | ||||||
|  |   - tar -jxvf $LIBDRM_VERSION.tar.bz2 | ||||||
|  |   - (cd $LIBDRM_VERSION && ./configure --prefix=$HOME/prefix --enable-vc4 --enable-freedreno --enable-etnaviv-experimental-api && make install) | ||||||
|  |  | ||||||
|  |   - wget $XORG_RELEASES/lib/$LIBXSHMFENCE_VERSION.tar.bz2 | ||||||
|  |   - tar -jxvf $LIBXSHMFENCE_VERSION.tar.bz2 | ||||||
|  |   - (cd $LIBXSHMFENCE_VERSION && ./configure --prefix=$HOME/prefix && make install) | ||||||
|  |  | ||||||
|  |   - wget http://people.freedesktop.org/~aplattner/vdpau/$LIBVDPAU_VERSION.tar.bz2 | ||||||
|  |   - tar -jxvf $LIBVDPAU_VERSION.tar.bz2 | ||||||
|  |   - (cd $LIBVDPAU_VERSION && ./configure --prefix=$HOME/prefix && make install) | ||||||
|  |  | ||||||
|  |   - wget http://www.freedesktop.org/software/vaapi/releases/libva/$LIBVA_VERSION.tar.bz2 | ||||||
|  |   - tar -jxvf $LIBVA_VERSION.tar.bz2 | ||||||
|  |   - (cd $LIBVA_VERSION && ./configure --prefix=$HOME/prefix --disable-wayland --disable-dummy-driver && make install) | ||||||
|  |  | ||||||
|  |   - wget $WAYLAND_RELEASES/$LIBWAYLAND_VERSION.tar.xz | ||||||
|  |   - tar -axvf $LIBWAYLAND_VERSION.tar.xz | ||||||
|  |   - (cd $LIBWAYLAND_VERSION && ./configure --prefix=$HOME/prefix --enable-libraries --without-host-scanner --disable-documentation --disable-dtd-validation && make install) | ||||||
|  |  | ||||||
|  |   - wget $WAYLAND_RELEASES/$WAYLAND_PROTOCOLS_VERSION.tar.xz | ||||||
|  |   - tar -axvf $WAYLAND_PROTOCOLS_VERSION.tar.xz | ||||||
|  |   - (cd $WAYLAND_PROTOCOLS_VERSION && ./configure --prefix=$HOME/prefix && make install) | ||||||
|  |  | ||||||
|  |   # Meson requires ninja >= 1.6, but trusty has 1.3.x | ||||||
|  |   - wget https://github.com/ninja-build/ninja/releases/download/v1.6.0/ninja-linux.zip; | ||||||
|  |   - unzip ninja-linux.zip | ||||||
|  |   - mv ninja $HOME/prefix/bin/ | ||||||
|  |  | ||||||
|  |   # Generate the header since one is missing on the Travis instance | ||||||
|  |   - mkdir -p linux | ||||||
|  |   - printf "%s\n" \ | ||||||
|  |            "#ifndef _LINUX_MEMFD_H" \ | ||||||
|  |            "#define _LINUX_MEMFD_H" \ | ||||||
|  |            "" \ | ||||||
|  |            "#define __NR_memfd_create 319" \ | ||||||
|  |            "#define SYS_memfd_create __NR_memfd_create" \ | ||||||
|  |            "" \ | ||||||
|  |            "#define MFD_CLOEXEC             0x0001U" \ | ||||||
|  |            "#define MFD_ALLOW_SEALING       0x0002U" \ | ||||||
|  |            "" \ | ||||||
|  |            "#endif /* _LINUX_MEMFD_H */" > linux/memfd.h | ||||||
|  |  | ||||||
| script: | script: | ||||||
|   - if test "x$BUILD" = xmeson; then |   - if test "x$BUILD" = xmake; then | ||||||
|       meson _build -Dbuild-tests=true; |       test -n "$OVERRIDE_CC" && export CC="$OVERRIDE_CC"; | ||||||
|       ninja -C _build || travis_terminate 1; |       test -n "$OVERRIDE_CXX" && export CXX="$OVERRIDE_CXX"; | ||||||
|       ninja -C _build test || travis_terminate 1; |       test -n "$OVERRIDE_PATH" && export PATH="$OVERRIDE_PATH:$PATH"; | ||||||
|       ninja -C _build install || travis_terminate 1; |  | ||||||
|  |       export CFLAGS="$CFLAGS -isystem`pwd`"; | ||||||
|  |  | ||||||
|  |       ./autogen.sh --enable-debug | ||||||
|  |         $LIBUNWIND_FLAGS | ||||||
|  |         $DRI_LOADERS | ||||||
|  |         --with-dri-drivers=$DRI_DRIVERS | ||||||
|  |         $GALLIUM_ST | ||||||
|  |         --with-gallium-drivers=$GALLIUM_DRIVERS | ||||||
|  |         --with-vulkan-drivers=$VULKAN_DRIVERS | ||||||
|  |         --disable-llvm-shared-libs | ||||||
|  |         && | ||||||
|  |       make && eval $MAKE_CHECK_COMMAND; | ||||||
|     fi |     fi | ||||||
|  |  | ||||||
|   - if test "x$BUILD" = xscons; then |   - if test "x$BUILD" = xscons; then | ||||||
|       scons force_scons=1 || travis_terminate 1; |       test -n "$OVERRIDE_CC" && export CC="$OVERRIDE_CC"; | ||||||
|       scons force_scons=1 check || travis_terminate 1; |       test -n "$OVERRIDE_CXX" && export CXX="$OVERRIDE_CXX"; | ||||||
|  |       scons $SCONS_TARGET && eval $SCONS_CHECK_COMMAND; | ||||||
|  |     fi | ||||||
|  |  | ||||||
|  |   - if test "x$BUILD" = xmeson; then | ||||||
|  |       export CFLAGS="$CFLAGS -isystem`pwd`"; | ||||||
|  |       meson _build $MESON_OPTIONS; | ||||||
|  |       ninja -C _build; | ||||||
|     fi |     fi | ||||||
|   | |||||||
| @@ -31,15 +31,14 @@ LOCAL_C_INCLUDES += \ | |||||||
|  |  | ||||||
| MESA_VERSION := $(shell cat $(MESA_TOP)/VERSION) | MESA_VERSION := $(shell cat $(MESA_TOP)/VERSION) | ||||||
| LOCAL_CFLAGS += \ | LOCAL_CFLAGS += \ | ||||||
| 	-Wno-error \ |  | ||||||
| 	-Werror=incompatible-pointer-types \ |  | ||||||
| 	-Wno-unused-parameter \ | 	-Wno-unused-parameter \ | ||||||
| 	-Wno-pointer-arith \ | 	-Wno-pointer-arith \ | ||||||
| 	-Wno-missing-field-initializers \ | 	-Wno-missing-field-initializers \ | ||||||
| 	-Wno-initializer-overrides \ | 	-Wno-initializer-overrides \ | ||||||
| 	-Wno-mismatched-tags \ | 	-Wno-mismatched-tags \ | ||||||
|  | 	-DVERSION=\"$(MESA_VERSION)\" \ | ||||||
| 	-DPACKAGE_VERSION=\"$(MESA_VERSION)\" \ | 	-DPACKAGE_VERSION=\"$(MESA_VERSION)\" \ | ||||||
| 	-DPACKAGE_BUGREPORT=\"https://gitlab.freedesktop.org/mesa/mesa/issues\" | 	-DPACKAGE_BUGREPORT=\"https://bugs.freedesktop.org/enter_bug.cgi?product=Mesa\" | ||||||
|  |  | ||||||
| # XXX: The following __STDC_*_MACROS defines should not be needed. | # XXX: The following __STDC_*_MACROS defines should not be needed. | ||||||
| # It's likely due to a bug elsewhere, but let's temporarily add them | # It's likely due to a bug elsewhere, but let's temporarily add them | ||||||
| @@ -52,15 +51,11 @@ LOCAL_CFLAGS += \ | |||||||
| 	-DHAVE___BUILTIN_EXPECT \ | 	-DHAVE___BUILTIN_EXPECT \ | ||||||
| 	-DHAVE___BUILTIN_FFS \ | 	-DHAVE___BUILTIN_FFS \ | ||||||
| 	-DHAVE___BUILTIN_FFSLL \ | 	-DHAVE___BUILTIN_FFSLL \ | ||||||
| 	-DHAVE_DLFCN_H \ |  | ||||||
| 	-DHAVE_FUNC_ATTRIBUTE_FLATTEN \ | 	-DHAVE_FUNC_ATTRIBUTE_FLATTEN \ | ||||||
| 	-DHAVE_FUNC_ATTRIBUTE_UNUSED \ | 	-DHAVE_FUNC_ATTRIBUTE_UNUSED \ | ||||||
| 	-DHAVE_FUNC_ATTRIBUTE_FORMAT \ | 	-DHAVE_FUNC_ATTRIBUTE_FORMAT \ | ||||||
| 	-DHAVE_FUNC_ATTRIBUTE_PACKED \ | 	-DHAVE_FUNC_ATTRIBUTE_PACKED \ | ||||||
| 	-DHAVE_FUNC_ATTRIBUTE_ALIAS \ | 	-DHAVE_FUNC_ATTRIBUTE_ALIAS \ | ||||||
| 	-DHAVE_FUNC_ATTRIBUTE_NORETURN \ |  | ||||||
| 	-DHAVE_FUNC_ATTRIBUTE_RETURNS_NONNULL \ |  | ||||||
| 	-DHAVE_FUNC_ATTRIBUTE_WARN_UNUSED_RESULT \ |  | ||||||
| 	-DHAVE___BUILTIN_CTZ \ | 	-DHAVE___BUILTIN_CTZ \ | ||||||
| 	-DHAVE___BUILTIN_POPCOUNT \ | 	-DHAVE___BUILTIN_POPCOUNT \ | ||||||
| 	-DHAVE___BUILTIN_POPCOUNTLL \ | 	-DHAVE___BUILTIN_POPCOUNTLL \ | ||||||
| @@ -70,14 +65,8 @@ LOCAL_CFLAGS += \ | |||||||
| 	-DHAVE_PTHREAD=1 \ | 	-DHAVE_PTHREAD=1 \ | ||||||
| 	-DHAVE_DLADDR \ | 	-DHAVE_DLADDR \ | ||||||
| 	-DHAVE_DL_ITERATE_PHDR \ | 	-DHAVE_DL_ITERATE_PHDR \ | ||||||
| 	-DHAVE_LINUX_FUTEX_H \ |  | ||||||
| 	-DHAVE_ENDIAN_H \ |  | ||||||
| 	-DHAVE_ZLIB \ |  | ||||||
| 	-DMAJOR_IN_SYSMACROS \ | 	-DMAJOR_IN_SYSMACROS \ | ||||||
| 	-DVK_USE_PLATFORM_ANDROID_KHR \ |  | ||||||
| 	-fvisibility=hidden \ | 	-fvisibility=hidden \ | ||||||
| 	-fno-math-errno \ |  | ||||||
| 	-fno-trapping-math \ |  | ||||||
| 	-Wno-sign-compare | 	-Wno-sign-compare | ||||||
|  |  | ||||||
| LOCAL_CPPFLAGS += \ | LOCAL_CPPFLAGS += \ | ||||||
| @@ -91,18 +80,6 @@ LOCAL_CPPFLAGS += \ | |||||||
| LOCAL_CONLYFLAGS += \ | LOCAL_CONLYFLAGS += \ | ||||||
| 	-std=c99 | 	-std=c99 | ||||||
|  |  | ||||||
| # c11 timespec_get is part of bionic as well |  | ||||||
| # https://android-review.googlesource.com/c/718518 |  | ||||||
| # This means releases from P and earlier won't need this |  | ||||||
| ifeq ($(filter 5 6 7 8 9, $(MESA_ANDROID_MAJOR_VERSION)),) |  | ||||||
| LOCAL_CFLAGS += -DHAVE_TIMESPEC_GET |  | ||||||
| endif |  | ||||||
|  |  | ||||||
| # Android's libc began supporting shm in Oreo |  | ||||||
| ifeq ($(shell test $(PLATFORM_SDK_VERSION) -ge 26 && echo true),true) |  | ||||||
| LOCAL_CFLAGS += -DHAVE_SYS_SHM_H |  | ||||||
| endif |  | ||||||
|  |  | ||||||
| ifeq ($(strip $(MESA_ENABLE_ASM)),true) | ifeq ($(strip $(MESA_ENABLE_ASM)),true) | ||||||
| ifeq ($(TARGET_ARCH),x86) | ifeq ($(TARGET_ARCH),x86) | ||||||
| LOCAL_CFLAGS += \ | LOCAL_CFLAGS += \ | ||||||
|   | |||||||
							
								
								
									
										22
									
								
								Android.mk
									
									
									
									
									
								
							
							
						
						
									
										22
									
								
								Android.mk
									
									
									
									
									
								
							| @@ -24,7 +24,7 @@ | |||||||
| # BOARD_GPU_DRIVERS should be defined.  The valid values are | # BOARD_GPU_DRIVERS should be defined.  The valid values are | ||||||
| # | # | ||||||
| #   classic drivers: i915 i965 | #   classic drivers: i915 i965 | ||||||
| #   gallium drivers: swrast freedreno i915g nouveau kmsro r300g r600g radeonsi vc4 virgl vmwgfx etnaviv iris lima | #   gallium drivers: swrast freedreno i915g nouveau pl111 r300g r600g radeonsi vc4 virgl vmwgfx etnaviv imx | ||||||
| # | # | ||||||
| # The main target is libGLES_mesa.  For each classic driver enabled, a DRI | # 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. | # module will also be built.  DRI modules will be loaded by libGLES_mesa. | ||||||
| @@ -52,7 +52,7 @@ gallium_drivers := \ | |||||||
| 	freedreno.HAVE_GALLIUM_FREEDRENO \ | 	freedreno.HAVE_GALLIUM_FREEDRENO \ | ||||||
| 	i915g.HAVE_GALLIUM_I915 \ | 	i915g.HAVE_GALLIUM_I915 \ | ||||||
| 	nouveau.HAVE_GALLIUM_NOUVEAU \ | 	nouveau.HAVE_GALLIUM_NOUVEAU \ | ||||||
| 	kmsro.HAVE_GALLIUM_KMSRO \ | 	pl111.HAVE_GALLIUM_PL111 \ | ||||||
| 	r300g.HAVE_GALLIUM_R300 \ | 	r300g.HAVE_GALLIUM_R300 \ | ||||||
| 	r600g.HAVE_GALLIUM_R600 \ | 	r600g.HAVE_GALLIUM_R600 \ | ||||||
| 	radeonsi.HAVE_GALLIUM_RADEONSI \ | 	radeonsi.HAVE_GALLIUM_RADEONSI \ | ||||||
| @@ -60,8 +60,7 @@ gallium_drivers := \ | |||||||
| 	vc4.HAVE_GALLIUM_VC4 \ | 	vc4.HAVE_GALLIUM_VC4 \ | ||||||
| 	virgl.HAVE_GALLIUM_VIRGL \ | 	virgl.HAVE_GALLIUM_VIRGL \ | ||||||
| 	etnaviv.HAVE_GALLIUM_ETNAVIV \ | 	etnaviv.HAVE_GALLIUM_ETNAVIV \ | ||||||
| 	iris.HAVE_GALLIUM_IRIS \ | 	imx.HAVE_GALLIUM_IMX | ||||||
| 	lima.HAVE_GALLIUM_LIMA |  | ||||||
|  |  | ||||||
| ifeq ($(BOARD_GPU_DRIVERS),all) | ifeq ($(BOARD_GPU_DRIVERS),all) | ||||||
| MESA_BUILD_CLASSIC := $(filter HAVE_%, $(subst ., , $(classic_drivers))) | MESA_BUILD_CLASSIC := $(filter HAVE_%, $(subst ., , $(classic_drivers))) | ||||||
| @@ -95,15 +94,21 @@ MESA_ENABLE_LLVM := true | |||||||
| endif | endif | ||||||
|  |  | ||||||
| define mesa-build-with-llvm | define mesa-build-with-llvm | ||||||
|   $(if $(filter $(MESA_ANDROID_MAJOR_VERSION), 4 5 6 7), \ |   $(if $(filter $(MESA_ANDROID_MAJOR_VERSION), 4 5), \ | ||||||
|     $(warning Unsupported LLVM version in Android $(MESA_ANDROID_MAJOR_VERSION)),) \ |     $(warning Unsupported LLVM version in Android $(MESA_ANDROID_MAJOR_VERSION)),) \ | ||||||
|   $(eval LOCAL_CFLAGS += -DLLVM_AVAILABLE -DMESA_LLVM_VERSION_STRING=\"3.9\") \ |   $(if $(filter 6,$(MESA_ANDROID_MAJOR_VERSION)), \ | ||||||
|  |     $(eval LOCAL_CFLAGS += -DHAVE_LLVM=0x0307 -DMESA_LLVM_VERSION_PATCH=0)) \ | ||||||
|  |   $(if $(filter 7,$(MESA_ANDROID_MAJOR_VERSION)), \ | ||||||
|  |     $(eval LOCAL_CFLAGS += -DHAVE_LLVM=0x0308 -DMESA_LLVM_VERSION_PATCH=0)) \ | ||||||
|  |   $(if $(filter 8,$(MESA_ANDROID_MAJOR_VERSION)), \ | ||||||
|  |     $(eval LOCAL_CFLAGS += -DHAVE_LLVM=0x0309 -DMESA_LLVM_VERSION_PATCH=0)) \ | ||||||
|  |   $(if $(filter P,$(MESA_ANDROID_MAJOR_VERSION)), \ | ||||||
|  |     $(eval LOCAL_CFLAGS += -DHAVE_LLVM=0x0309 -DMESA_LLVM_VERSION_PATCH=0)) \ | ||||||
|   $(eval LOCAL_SHARED_LIBRARIES += libLLVM) |   $(eval LOCAL_SHARED_LIBRARIES += libLLVM) | ||||||
| endef | endef | ||||||
|  |  | ||||||
| # add subdirectories | # add subdirectories | ||||||
| SUBDIRS := \ | SUBDIRS := \ | ||||||
| 	src/freedreno \ |  | ||||||
| 	src/gbm \ | 	src/gbm \ | ||||||
| 	src/loader \ | 	src/loader \ | ||||||
| 	src/mapi \ | 	src/mapi \ | ||||||
| @@ -115,8 +120,7 @@ SUBDIRS := \ | |||||||
| 	src/broadcom \ | 	src/broadcom \ | ||||||
| 	src/intel \ | 	src/intel \ | ||||||
| 	src/mesa/drivers/dri \ | 	src/mesa/drivers/dri \ | ||||||
| 	src/vulkan \ | 	src/vulkan | ||||||
| 	src/panfrost \ |  | ||||||
|  |  | ||||||
| INC_DIRS := $(call all-named-subdir-makefiles,$(SUBDIRS)) | INC_DIRS := $(call all-named-subdir-makefiles,$(SUBDIRS)) | ||||||
| INC_DIRS += $(call all-named-subdir-makefiles,src/gallium) | INC_DIRS += $(call all-named-subdir-makefiles,src/gallium) | ||||||
|   | |||||||
| @@ -10,7 +10,7 @@ $(call add-clean-step, rm -rf $(PRODUCT_OUT)/*/STATIC_LIBRARIES/libmesa_*_interm | |||||||
| $(call add-clean-step, rm -rf $(PRODUCT_OUT)/*/SHARED_LIBRARIES/i9?5_dri_intermediates) | $(call add-clean-step, rm -rf $(PRODUCT_OUT)/*/SHARED_LIBRARIES/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/libglapi_intermediates) | ||||||
| $(call add-clean-step, rm -rf $(PRODUCT_OUT)/*/SHARED_LIBRARIES/libGLES_mesa_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_release)/*/EXECUTABLES/mesa_*_intermediates) | ||||||
| $(call add-clean-step, rm -rf $(HOST_OUT)/*/EXECUTABLES/glsl_compiler_intermediates) | $(call add-clean-step, rm -rf $(HOST_OUT_release)/*/EXECUTABLES/glsl_compiler_intermediates) | ||||||
| $(call add-clean-step, rm -rf $(HOST_OUT)/*/STATIC_LIBRARIES/libmesa_*_intermediates) | $(call add-clean-step, rm -rf $(HOST_OUT_release)/*/STATIC_LIBRARIES/libmesa_*_intermediates) | ||||||
| $(call add-clean-step, rm -rf $(PRODUCT_OUT)/*/SHARED_LIBRARIES/*_dri_intermediates) | $(call add-clean-step, rm -rf $(PRODUCT_OUT)/*/SHARED_LIBRARIES/*_dri_intermediates) | ||||||
|   | |||||||
							
								
								
									
										82
									
								
								Makefile.am
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										82
									
								
								Makefile.am
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,82 @@ | |||||||
|  | # Copyright © 2012 Intel Corporation | ||||||
|  | # | ||||||
|  | # Permission is hereby granted, free of charge, to any person obtaining a | ||||||
|  | # copy of this software and associated documentation files (the "Software"), | ||||||
|  | # to deal in the Software without restriction, including without limitation | ||||||
|  | # the rights to use, copy, modify, merge, publish, distribute, sublicense, | ||||||
|  | # and/or sell copies of the Software, and to permit persons to whom the | ||||||
|  | # Software is furnished to do so, subject to the following conditions: | ||||||
|  | # | ||||||
|  | # The above copyright notice and this permission notice (including the next | ||||||
|  | # paragraph) shall be included in all copies or substantial portions of the | ||||||
|  | # Software. | ||||||
|  | # | ||||||
|  | # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||||||
|  | # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||||||
|  | # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL | ||||||
|  | # THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | ||||||
|  | # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING | ||||||
|  | # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS | ||||||
|  | # IN THE SOFTWARE. | ||||||
|  |  | ||||||
|  | SUBDIRS = src | ||||||
|  |  | ||||||
|  | AM_DISTCHECK_CONFIGURE_FLAGS = \ | ||||||
|  | 	--enable-dri \ | ||||||
|  | 	--enable-dri3 \ | ||||||
|  | 	--enable-egl \ | ||||||
|  | 	--enable-gallium-tests \ | ||||||
|  | 	--enable-gallium-osmesa \ | ||||||
|  | 	--enable-llvm \ | ||||||
|  | 	--enable-gbm \ | ||||||
|  | 	--enable-gles1 \ | ||||||
|  | 	--enable-gles2 \ | ||||||
|  | 	--enable-glx \ | ||||||
|  | 	--enable-glx-tls \ | ||||||
|  | 	--enable-nine \ | ||||||
|  | 	--enable-opencl \ | ||||||
|  | 	--enable-opengl \ | ||||||
|  | 	--enable-va \ | ||||||
|  | 	--enable-vdpau \ | ||||||
|  | 	--enable-xa \ | ||||||
|  | 	--enable-xvmc \ | ||||||
|  | 	--enable-llvm-shared-libs \ | ||||||
|  | 	--enable-libunwind \ | ||||||
|  | 	--with-platforms=x11,wayland,drm,surfaceless \ | ||||||
|  | 	--with-dri-drivers=i915,i965,nouveau,radeon,r200,swrast \ | ||||||
|  | 	--with-gallium-drivers=i915,nouveau,r300,pl111,r600,radeonsi,freedreno,svga,swrast,vc4,virgl,swr,etnaviv,imx \ | ||||||
|  | 	--with-vulkan-drivers=intel,radeon | ||||||
|  |  | ||||||
|  | ACLOCAL_AMFLAGS = -I m4 | ||||||
|  |  | ||||||
|  | EXTRA_DIST = \ | ||||||
|  | 	autogen.sh \ | ||||||
|  | 	common.py \ | ||||||
|  | 	docs \ | ||||||
|  | 	doxygen \ | ||||||
|  | 	bin/git_sha1_gen.py \ | ||||||
|  | 	scons \ | ||||||
|  | 	SConstruct \ | ||||||
|  | 	build-support/conftest.dyn \ | ||||||
|  | 	build-support/conftest.map | ||||||
|  |  | ||||||
|  | noinst_HEADERS = \ | ||||||
|  | 	include/c99_alloca.h \ | ||||||
|  | 	include/c99_compat.h \ | ||||||
|  | 	include/c99_math.h \ | ||||||
|  | 	include/c11 \ | ||||||
|  | 	include/drm-uapi/drm.h \ | ||||||
|  | 	include/drm-uapi/drm_fourcc.h \ | ||||||
|  | 	include/drm-uapi/drm_mode.h \ | ||||||
|  | 	include/drm-uapi/i915_drm.h \ | ||||||
|  | 	include/drm-uapi/vc4_drm.h \ | ||||||
|  | 	include/D3D9 \ | ||||||
|  | 	include/GL/wglext.h \ | ||||||
|  | 	include/HaikuGL \ | ||||||
|  | 	include/no_extern_c.h \ | ||||||
|  | 	include/pci_ids | ||||||
|  |  | ||||||
|  | # We list some directories in EXTRA_DIST, but don't actually want to include | ||||||
|  | # the .gitignore files in the tarball. | ||||||
|  | dist-hook: | ||||||
|  | 	find $(distdir) -name .gitignore -exec $(RM) {} + | ||||||
							
								
								
									
										60
									
								
								README.rst
									
									
									
									
									
								
							
							
						
						
									
										60
									
								
								README.rst
									
									
									
									
									
								
							| @@ -1,60 +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 email mailing-lists for patches submission, review and |  | ||||||
| discussions. |  | ||||||
							
								
								
									
										66
									
								
								REVIEWERS
									
									
									
									
									
								
							
							
						
						
									
										66
									
								
								REVIEWERS
									
									
									
									
									
								
							| @@ -1,11 +1,30 @@ | |||||||
| Overview: | Overview: | ||||||
|  |  | ||||||
| 	This file is similar in syntax (or more precisly a subset) of what is | 	This file is similar in syntax (or more precisly a subset) of what is | ||||||
| 	used by the MAINTAINERS file in the linux kernel. | 	used by the MAINTAINERS file in the linux kernel.  Some fields do not | ||||||
|  | 	apply, for example, in all cases, send patches to: | ||||||
|  |  | ||||||
|  | 		mesa-dev@lists.freedesktop.org | ||||||
|  |  | ||||||
|  | 	and in all cases the patchwork instance is: | ||||||
|  |  | ||||||
|  | 		https://patchwork.freedesktop.org/project/mesa/ | ||||||
|  |  | ||||||
| 	The purpose is not exactly the same the MAINTAINERS file in the linux | 	The purpose is not exactly the same the MAINTAINERS file in the linux | ||||||
| 	kernel, as there are not official/formal maintainers of different | 	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 | 	subsystems in mesa, but is meant to give an idea of who to CC for | ||||||
| 	various patches for review. | 	various patches for review, and to allow the use of | ||||||
|  | 	scripts/get_reviewer.pl as git --cc-cmd. | ||||||
|  |  | ||||||
|  | Usage: | ||||||
|  |  | ||||||
|  | 	When sending patches: | ||||||
|  |  | ||||||
|  | 		git send-email --cc-cmd ./scripts/get_reviewer.pl ... | ||||||
|  |  | ||||||
|  | 	Or to configure as default: | ||||||
|  |  | ||||||
|  | 		git config sendemail.cccmd ./scripts/get_reviewer.pl | ||||||
|  |  | ||||||
| Descriptions of section entries: | Descriptions of section entries: | ||||||
|  |  | ||||||
| @@ -17,6 +36,14 @@ Descriptions of section entries: | |||||||
| 	   F:	drivers/net/*	all files in drivers/net, but not below | 	   F:	drivers/net/*	all files in drivers/net, but not below | ||||||
| 	   F:	*/net/*		all files in "any top level directory"/net | 	   F:	*/net/*		all files in "any top level directory"/net | ||||||
| 	   One pattern per line.  Multiple F: lines acceptable. | 	   One pattern per line.  Multiple F: lines acceptable. | ||||||
|  | 	N: Files and directories with regex patterns. | ||||||
|  | 	   N:	[^a-z]tegra	all files whose path contains the word tegra | ||||||
|  | 	   One pattern per line.  Multiple N: lines acceptable. | ||||||
|  | 	   scripts/get_maintainer.pl has different behavior for files that | ||||||
|  | 	   match F: pattern and matches of N: patterns.  By default, | ||||||
|  | 	   get_maintainer will not look at git log history when an F: pattern | ||||||
|  | 	   match occurs.  When an N: match occurs, git log history is used | ||||||
|  | 	   to also notify the people that have git commit signatures. | ||||||
|  |  | ||||||
| Maintainers List (try to look for most precise areas first) | Maintainers List (try to look for most precise areas first) | ||||||
|  |  | ||||||
| @@ -45,18 +72,7 @@ F: src/loader/ | |||||||
|  |  | ||||||
| EGL | EGL | ||||||
| R: Eric Engestrom <eric@engestrom.ch> | R: Eric Engestrom <eric@engestrom.ch> | ||||||
| R: Emil Velikov <emil.l.velikov@gmail.com> |  | ||||||
| F: src/egl/ | 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 | GALLIUM LOADER | ||||||
| R: Emil Velikov <emil.l.velikov@gmail.com> | R: Emil Velikov <emil.l.velikov@gmail.com> | ||||||
| @@ -67,6 +83,14 @@ GALLIUM TARGETS | |||||||
| R: Emil Velikov <emil.l.velikov@gmail.com> | R: Emil Velikov <emil.l.velikov@gmail.com> | ||||||
| F: src/gallium/targets/ | F: src/gallium/targets/ | ||||||
|  |  | ||||||
|  | AUTOCONF BUILD | ||||||
|  | R: Emil Velikov <emil.l.velikov@gmail.com> | ||||||
|  | F: autogen.sh | ||||||
|  | F: configure.ac | ||||||
|  | F: */Automake.inc | ||||||
|  | F: */Makefile.*am | ||||||
|  | F: */Makefile.sources | ||||||
|  |  | ||||||
| SCONS BUILD | SCONS BUILD | ||||||
| F: scons/ | F: scons/ | ||||||
| F: */SConscript* | F: */SConscript* | ||||||
| @@ -83,7 +107,6 @@ MESON BUILD | |||||||
| R: Dylan Baker <dylan@pnwbakers.com> | R: Dylan Baker <dylan@pnwbakers.com> | ||||||
| R: Eric Engestrom <eric@engestrom.ch> | R: Eric Engestrom <eric@engestrom.ch> | ||||||
| F: */meson.build | F: */meson.build | ||||||
| F: meson.build |  | ||||||
| F: meson_options.txt | F: meson_options.txt | ||||||
|  |  | ||||||
| ANDROID EGL SUPPORT | ANDROID EGL SUPPORT | ||||||
| @@ -103,18 +126,3 @@ F:	src/gallium/drivers/freedreno/ | |||||||
| GLX | GLX | ||||||
| R: Adam Jackson <ajax@redhat.com> | R: Adam Jackson <ajax@redhat.com> | ||||||
| F: src/glx/ | F: src/glx/ | ||||||
|  |  | ||||||
| VULKAN |  | ||||||
| R: Eric Engestrom <eric@engestrom.ch> |  | ||||||
| F: src/vulkan/ |  | ||||||
| F: include/vulkan/ |  | ||||||
|  |  | ||||||
| VMWARE DRIVER |  | ||||||
| R: Brian Paul <brianp@vmware.com> |  | ||||||
| R: Charmaine Lee <charmainel@vmware.com> |  | ||||||
| F: src/gallium/drivers/svga/ |  | ||||||
|  |  | ||||||
| VMWARE WINSYS CODE |  | ||||||
| R: Thomas Hellstrom <thellstrom@vmware.com> |  | ||||||
| R: Deepak Rawat <drawat@vmware.com> |  | ||||||
| F: src/gallium/winsys/svga/ |  | ||||||
|   | |||||||
							
								
								
									
										30
									
								
								SConstruct
									
									
									
									
									
								
							
							
						
						
									
										30
									
								
								SConstruct
									
									
									
									
									
								
							| @@ -20,7 +20,6 @@ | |||||||
| # to get the full list of options. See scons manpage for more info. | # to get the full list of options. See scons manpage for more info. | ||||||
| # | # | ||||||
|  |  | ||||||
| from __future__ import print_function |  | ||||||
| import os | import os | ||||||
| import os.path | import os.path | ||||||
| import sys | import sys | ||||||
| @@ -28,13 +27,6 @@ import SCons.Util | |||||||
|  |  | ||||||
| import common | import common | ||||||
|  |  | ||||||
| ####################################################################### |  | ||||||
| # Minimal scons version |  | ||||||
|  |  | ||||||
| EnsureSConsVersion(2, 4) |  | ||||||
| EnsurePythonVersion(2, 7) |  | ||||||
|  |  | ||||||
|  |  | ||||||
| ####################################################################### | ####################################################################### | ||||||
| # Configuration options | # Configuration options | ||||||
|  |  | ||||||
| @@ -67,26 +59,6 @@ else: | |||||||
|  |  | ||||||
| Help(opts.GenerateHelpText(env)) | 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 | # Environment setup | ||||||
|  |  | ||||||
| @@ -94,7 +66,7 @@ with open("VERSION") as f: | |||||||
|   mesa_version = f.read().strip() |   mesa_version = f.read().strip() | ||||||
| env.Append(CPPDEFINES = [ | env.Append(CPPDEFINES = [ | ||||||
|     ('PACKAGE_VERSION', '\\"%s\\"' % mesa_version), |     ('PACKAGE_VERSION', '\\"%s\\"' % mesa_version), | ||||||
|     ('PACKAGE_BUGREPORT', '\\"https://gitlab.freedesktop.org/mesa/mesa/issues\\"'), |     ('PACKAGE_BUGREPORT', '\\"https://bugs.freedesktop.org/enter_bug.cgi?product=Mesa\\"'), | ||||||
| ]) | ]) | ||||||
|  |  | ||||||
| # Includes | # Includes | ||||||
|   | |||||||
							
								
								
									
										55
									
								
								appveyor.yml
									
									
									
									
									
								
							
							
						
						
									
										55
									
								
								appveyor.yml
									
									
									
									
									
								
							| @@ -33,38 +33,47 @@ branches: | |||||||
| # - https://www.appveyor.com/blog/2014/06/04/shallow-clone-for-git-repositories | # - https://www.appveyor.com/blog/2014/06/04/shallow-clone-for-git-repositories | ||||||
| clone_depth: 100 | clone_depth: 100 | ||||||
|  |  | ||||||
| # https://www.appveyor.com/docs/build-cache/ |  | ||||||
| cache: | cache: | ||||||
| - '%LOCALAPPDATA%\pip\Cache -> appveyor.yml' | - win_flex_bison-2.5.9.zip | ||||||
| - win_flex_bison-2.5.15.zip | - llvm-3.3.1-msvc2013-mtd.7z | ||||||
| - llvm-5.0.1-msvc2017-mtd.7z |  | ||||||
| - subprojects\packagecache -> subprojects\*.wrap |  | ||||||
|  |  | ||||||
| os: Visual Studio 2017 | os: Visual Studio 2013 | ||||||
|  |  | ||||||
| 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: | environment: | ||||||
|   WINFLEXBISON_VERSION: 2.5.15 |   WINFLEXBISON_ARCHIVE: win_flex_bison-2.5.9.zip | ||||||
|   LLVM_ARCHIVE: llvm-5.0.1-msvc2017-mtd.7z |   LLVM_ARCHIVE: llvm-3.3.1-msvc2013-mtd.7z | ||||||
|   matrix: |  | ||||||
|   - compiler: msvc |  | ||||||
|     buildsystem: scons |  | ||||||
|   - compiler: msvc |  | ||||||
|     buildsystem: meson |  | ||||||
|     path: C:\Python37-x64;C:\Python37-x64\Scripts;%path% |  | ||||||
|  |  | ||||||
| install: | install: | ||||||
| - cmd: .appveyor\appveyor_msvc.bat install | # Check pip | ||||||
|  | - python --version | ||||||
|  | - python -m pip --version | ||||||
|  | # Install Mako | ||||||
|  | - python -m pip install Mako==1.0.6 | ||||||
|  | # Install pywin32 extensions, needed by SCons | ||||||
|  | - python -m pip install pypiwin32 | ||||||
|  | # Install python wheels, necessary to install SCons via pip | ||||||
|  | - python -m pip install wheel | ||||||
|  | # Install SCons | ||||||
|  | - python -m pip install scons==2.5.1 | ||||||
|  | - scons --version | ||||||
|  | # Install flex/bison | ||||||
|  | - if not exist "%WINFLEXBISON_ARCHIVE%" appveyor DownloadFile "https://downloads.sourceforge.net/project/winflexbison/old_versions/%WINFLEXBISON_ARCHIVE%" | ||||||
|  | - 7z x -y -owinflexbison\ "%WINFLEXBISON_ARCHIVE%" > nul | ||||||
|  | - set Path=%CD%\winflexbison;%Path% | ||||||
|  | - win_flex --version | ||||||
|  | - win_bison --version | ||||||
|  | # Download and extract LLVM | ||||||
|  | - if not exist "%LLVM_ARCHIVE%" appveyor DownloadFile "https://people.freedesktop.org/~jrfonseca/llvm/%LLVM_ARCHIVE%" | ||||||
|  | - 7z x -y "%LLVM_ARCHIVE%" > nul | ||||||
|  | - mkdir llvm\bin | ||||||
|  | - set LLVM=%CD%\llvm | ||||||
|  |  | ||||||
| build_script: | build_script: | ||||||
| - cmd: .appveyor\appveyor_msvc.bat build_script | - scons -j%NUMBER_OF_PROCESSORS% MSVC_VERSION=12.0 llvm=1 | ||||||
|  |  | ||||||
|  | after_build: | ||||||
|  | - scons -j%NUMBER_OF_PROCESSORS% MSVC_VERSION=12.0 llvm=1 check | ||||||
|  |  | ||||||
| test_script: |  | ||||||
| - cmd: .appveyor\appveyor_msvc.bat test_script |  | ||||||
|  |  | ||||||
| # It's possible to setup notification here, as described in | # It's possible to setup notification here, as described in | ||||||
| # http://www.appveyor.com/docs/notifications#appveyor-yml-configuration , but | # http://www.appveyor.com/docs/notifications#appveyor-yml-configuration , but | ||||||
|   | |||||||
							
								
								
									
										14
									
								
								autogen.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										14
									
								
								autogen.sh
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,14 @@ | |||||||
|  | #! /bin/sh | ||||||
|  |  | ||||||
|  | srcdir=`dirname "$0"` | ||||||
|  | test -z "$srcdir" && srcdir=. | ||||||
|  |  | ||||||
|  | ORIGDIR=`pwd` | ||||||
|  | cd "$srcdir" | ||||||
|  |  | ||||||
|  | autoreconf --force --verbose --install || exit 1 | ||||||
|  | cd "$ORIGDIR" || exit $? | ||||||
|  |  | ||||||
|  | if test -z "$NOCONFIGURE"; then | ||||||
|  |     "$srcdir"/configure "$@" | ||||||
|  | fi | ||||||
| @@ -1,2 +0,0 @@ | |||||||
| # This is reverted shortly after landing |  | ||||||
| 4432a2d14d80081d062f7939a950d65ea3a16eed |  | ||||||
							
								
								
									
										9
									
								
								bin/.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								bin/.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,9 @@ | |||||||
|  | config.guess | ||||||
|  | config.sub | ||||||
|  | install-sh | ||||||
|  | /depcomp | ||||||
|  | /missing | ||||||
|  | ylwrap | ||||||
|  | compile | ||||||
|  | ar-lib | ||||||
|  | /test-driver | ||||||
							
								
								
									
										35
									
								
								bin/bugzilla_mesa.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										35
									
								
								bin/bugzilla_mesa.sh
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,35 @@ | |||||||
|  | #!/bin/sh | ||||||
|  |  | ||||||
|  | # This script is used to generate the list of fixed bugs that | ||||||
|  | # appears in the release notes files, with HTML formatting. | ||||||
|  | # | ||||||
|  | # Note: This script could take a while until all details have | ||||||
|  | #       been fetched from bugzilla. | ||||||
|  | # | ||||||
|  | # Usage examples: | ||||||
|  | # | ||||||
|  | # $ bin/bugzilla_mesa.sh mesa-9.0.2..mesa-9.0.3 | ||||||
|  | # $ bin/bugzilla_mesa.sh mesa-9.0.2..mesa-9.0.3 > bugfixes | ||||||
|  | # $ bin/bugzilla_mesa.sh mesa-9.0.2..mesa-9.0.3 | tee bugfixes | ||||||
|  |  | ||||||
|  |  | ||||||
|  | # regex pattern: trim before bug number | ||||||
|  | trim_before='s/.*show_bug.cgi?id=\([0-9]*\).*/\1/' | ||||||
|  |  | ||||||
|  | # regex pattern: reconstruct the url | ||||||
|  | use_after='s,^,https://bugs.freedesktop.org/show_bug.cgi?id=,' | ||||||
|  |  | ||||||
|  | echo "<ul>" | ||||||
|  | echo "" | ||||||
|  |  | ||||||
|  | # extract fdo urls from commit log | ||||||
|  | git log $* | grep 'bugs.freedesktop.org/show_bug' | sed -e $trim_before | sort -n -u | sed -e $use_after |\ | ||||||
|  | while read url | ||||||
|  | do | ||||||
|  | 	id=$(echo $url | cut -d'=' -f2) | ||||||
|  | 	summary=$(wget --quiet -O - $url | grep -e '<title>.*</title>' | sed -e 's/ *<title>[0-9]\+ – \(.*\)<\/title>/\1/') | ||||||
|  | 	echo "<li><a href=\"$url\">Bug $id</a> - $summary</li>" | ||||||
|  | 	echo "" | ||||||
|  | done | ||||||
|  |  | ||||||
|  | echo "</ul>" | ||||||
| @@ -1,272 +0,0 @@ | |||||||
| #!/usr/bin/env python3 |  | ||||||
| # Copyright © 2019 Intel Corporation |  | ||||||
|  |  | ||||||
| # Permission is hereby granted, free of charge, to any person obtaining a copy |  | ||||||
| # of this software and associated documentation files (the "Software"), to deal |  | ||||||
| # in the Software without restriction, including without limitation the rights |  | ||||||
| # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell |  | ||||||
| # copies of the Software, and to permit persons to whom the Software is |  | ||||||
| # furnished to do so, subject to the following conditions: |  | ||||||
|  |  | ||||||
| # The above copyright notice and this permission notice shall be included in |  | ||||||
| # all copies or substantial portions of the Software. |  | ||||||
|  |  | ||||||
| # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |  | ||||||
| # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |  | ||||||
| # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |  | ||||||
| # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |  | ||||||
| # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, |  | ||||||
| # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE |  | ||||||
| # SOFTWARE. |  | ||||||
|  |  | ||||||
| """Generates release notes for a given version of mesa.""" |  | ||||||
|  |  | ||||||
| import asyncio |  | ||||||
| import datetime |  | ||||||
| import os |  | ||||||
| import pathlib |  | ||||||
| import sys |  | ||||||
| import textwrap |  | ||||||
| import typing |  | ||||||
| import urllib.parse |  | ||||||
|  |  | ||||||
| import aiohttp |  | ||||||
| from mako.template import Template |  | ||||||
| from mako import exceptions |  | ||||||
|  |  | ||||||
|  |  | ||||||
| CURRENT_GL_VERSION = '4.6' |  | ||||||
| CURRENT_VK_VERSION = '1.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 |  | ||||||
							
								
								
									
										81
									
								
								bin/get-fixes-pick-list.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										81
									
								
								bin/get-fixes-pick-list.sh
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,81 @@ | |||||||
|  | #!/bin/sh | ||||||
|  |  | ||||||
|  | # Script for generating a list of candidates [referenced by a Fixes tag] for | ||||||
|  | # cherry-picking to a stable branch | ||||||
|  | # | ||||||
|  | # Usage examples: | ||||||
|  | # | ||||||
|  | # $ bin/get-fixes-pick-list.sh | ||||||
|  | # $ bin/get-fixes-pick-list.sh > picklist | ||||||
|  | # $ bin/get-fixes-pick-list.sh | tee picklist | ||||||
|  |  | ||||||
|  | # Use the last branchpoint as our limit for the search | ||||||
|  | latest_branchpoint=`git merge-base origin/master HEAD` | ||||||
|  |  | ||||||
|  | # List all the commits between day 1 and the branch point... | ||||||
|  | git log --reverse --pretty=%H $latest_branchpoint > already_landed | ||||||
|  |  | ||||||
|  | # ... and the ones cherry-picked. | ||||||
|  | git log --reverse --grep="cherry picked from commit" $latest_branchpoint..HEAD |\ | ||||||
|  | 	grep "cherry picked from commit" |\ | ||||||
|  | 	sed -e 's/^[[:space:]]*(cherry picked from commit[[:space:]]*//' -e 's/)//'  > already_picked | ||||||
|  |  | ||||||
|  | # Grep for commits with Fixes tag | ||||||
|  | git log --reverse --pretty=%H -i --grep="fixes:" $latest_branchpoint..origin/master |\ | ||||||
|  | while read sha | ||||||
|  | do | ||||||
|  | 	# Check to see whether the patch is on the ignore list ... | ||||||
|  | 	if [ -f bin/.cherry-ignore ] ; then | ||||||
|  | 		if grep -q ^$sha bin/.cherry-ignore ; then | ||||||
|  | 			continue | ||||||
|  | 		fi | ||||||
|  | 	fi | ||||||
|  |  | ||||||
|  | 	# Skip if it has been already cherry-picked. | ||||||
|  | 	if grep -q ^$sha already_picked ; then | ||||||
|  | 		continue | ||||||
|  | 	fi | ||||||
|  |  | ||||||
|  | 	# Place every "fixes:" tag on its own line and join with the next word | ||||||
|  | 	# on its line or a later one. | ||||||
|  | 	fixes=`git show -s $sha | tr -d "\n" | sed -e 's/fixes:[[:space:]]*/\nfixes:/Ig' | grep "fixes:" | sed -e 's/\(fixes:[a-zA-Z0-9]*\).*$/\1/'` | ||||||
|  |  | ||||||
|  | 	# For each one try to extract the tag | ||||||
|  | 	fixes_count=`echo "$fixes" | wc -l` | ||||||
|  | 	warn=`(test $fixes_count -gt 1 && echo $fixes_count) || echo 0` | ||||||
|  | 	while [ $fixes_count -gt 0 ] ; do | ||||||
|  | 		# Treat only the current line | ||||||
|  | 		id=`echo "$fixes" | tail -n $fixes_count | head -n 1 | cut -d : -f 2` | ||||||
|  | 		fixes_count=$(($fixes_count-1)) | ||||||
|  |  | ||||||
|  | 		# Bail out if we cannot find suitable id. | ||||||
|  | 		# Any specific validation the $id is valid and not some junk, is | ||||||
|  | 		# implied with the follow up code | ||||||
|  | 		if [ "x$id" = x ] ; then | ||||||
|  | 			continue | ||||||
|  | 		fi | ||||||
|  |  | ||||||
|  | 		# Check if the offending commit is in branch. | ||||||
|  |  | ||||||
|  | 		# Be that cherry-picked ... | ||||||
|  | 		# ... or landed before the branchpoint. | ||||||
|  | 		if grep -q ^$id already_picked || | ||||||
|  | 		   grep -q ^$id already_landed ; then | ||||||
|  |  | ||||||
|  | 			printf "Commit \"%s\" fixes %s\n" \ | ||||||
|  | 			       "`git log -n1 --pretty=oneline $sha`" \ | ||||||
|  | 			       "$id" | ||||||
|  | 			warn=$(($warn-1)) | ||||||
|  | 		fi | ||||||
|  |  | ||||||
|  | 	done | ||||||
|  |  | ||||||
|  | 	if [ $warn -gt 0 ] ; then | ||||||
|  | 		printf "WARNING: Commit \"%s\" has more than one Fixes tag\n" \ | ||||||
|  | 		       "`git log -n1 --pretty=oneline $sha`" | ||||||
|  | 	fi | ||||||
|  |  | ||||||
|  | done | ||||||
|  |  | ||||||
|  | rm -f already_picked | ||||||
|  | rm -f already_landed | ||||||
| @@ -7,107 +7,21 @@ | |||||||
| # $ bin/get-pick-list.sh | # $ bin/get-pick-list.sh | ||||||
| # $ bin/get-pick-list.sh > picklist | # $ bin/get-pick-list.sh > picklist | ||||||
| # $ bin/get-pick-list.sh | tee 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 | # Use the last branchpoint as our limit for the search | ||||||
| latest_branchpoint=`git merge-base upstream/master HEAD` | latest_branchpoint=`git merge-base origin/master HEAD` | ||||||
|  |  | ||||||
| # List all the commits between day 1 and the branch point... | # Grep for commits with "cherry picked from commit" in the commit message. | ||||||
| git log --reverse --pretty=%H $latest_branchpoint > already_landed | git log --reverse --grep="cherry picked from commit" $latest_branchpoint..HEAD |\ | ||||||
|  |  | ||||||
| # ... and the ones cherry-picked. |  | ||||||
| git log --reverse --pretty=medium --grep="cherry picked from commit" $latest_branchpoint..HEAD |\ |  | ||||||
| 	grep "cherry picked from commit" |\ | 	grep "cherry picked from commit" |\ | ||||||
| 	sed -e 's/^[[:space:]]*(cherry picked from commit[[:space:]]*//' -e 's/)//' > already_picked | 	sed -e 's/^[[:space:]]*(cherry picked from commit[[:space:]]*//' -e 's/)//' > already_picked | ||||||
|  |  | ||||||
| # Grep for potential candidates | # Grep for commits that were marked as a candidate for the stable tree. | ||||||
| git log --reverse --pretty=%H -i --grep='^CC:.*mesa-stable\|^CC:.*mesa-dev\|\<fixes\>\|\<broken by\>\|This reverts commit' $latest_branchpoint..upstream/master |\ | git log --reverse --pretty=%H -i --grep='^CC:.*mesa-stable' $latest_branchpoint..origin/master |\ | ||||||
| while read sha | while read sha | ||||||
| do | do | ||||||
| 	# Check to see whether the patch is on the ignore list. | 	# Check to see whether the patch is on the ignore list. | ||||||
| 	if test -f bin/.cherry-ignore; then | 	if [ -f bin/.cherry-ignore ] ; then | ||||||
| 		if grep -q ^$sha bin/.cherry-ignore ; then | 		if grep -q ^$sha bin/.cherry-ignore ; then | ||||||
| 			continue | 			continue | ||||||
| 		fi | 		fi | ||||||
| @@ -118,33 +32,7 @@ do | |||||||
| 		continue | 		continue | ||||||
| 	fi | 	fi | ||||||
|  |  | ||||||
| 	if is_fixes_nomination "$sha"; then | 	git log -n1 --pretty=oneline $sha | cat | ||||||
| 		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 | done | ||||||
|  |  | ||||||
| rm -f already_picked | rm -f already_picked | ||||||
| rm -f already_landed |  | ||||||
|   | |||||||
							
								
								
									
										42
									
								
								bin/get-typod-pick-list.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										42
									
								
								bin/get-typod-pick-list.sh
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,42 @@ | |||||||
|  | #!/bin/sh | ||||||
|  |  | ||||||
|  | # Script for generating a list of candidates which have typos in the nomination line | ||||||
|  | # | ||||||
|  | # Usage examples: | ||||||
|  | # | ||||||
|  | # $ bin/get-typod-pick-list.sh | ||||||
|  | # $ bin/get-typod-pick-list.sh > picklist | ||||||
|  | # $ bin/get-typod-pick-list.sh | tee picklist | ||||||
|  |  | ||||||
|  | # NB: | ||||||
|  | # This script intentionally _never_ checks for specific version tag | ||||||
|  | # Should we consider folding it with the original get-pick-list.sh | ||||||
|  |  | ||||||
|  | # Use the last branchpoint as our limit for the search | ||||||
|  | latest_branchpoint=`git merge-base origin/master HEAD` | ||||||
|  |  | ||||||
|  | # Grep for commits with "cherry picked from commit" in the commit message. | ||||||
|  | git log --reverse --grep="cherry picked from commit" $latest_branchpoint..HEAD |\ | ||||||
|  | 	grep "cherry picked from commit" |\ | ||||||
|  | 	sed -e 's/^[[:space:]]*(cherry picked from commit[[:space:]]*//' -e 's/)//' > already_picked | ||||||
|  |  | ||||||
|  | # Grep for commits that were marked as a candidate for the stable tree. | ||||||
|  | git log --reverse --pretty=%H -i --grep='^CC:.*mesa-dev' $latest_branchpoint..origin/master |\ | ||||||
|  | while read sha | ||||||
|  | do | ||||||
|  | 	# Check to see whether the patch is on the ignore list. | ||||||
|  | 	if [ -f bin/.cherry-ignore ] ; then | ||||||
|  | 		if grep -q ^$sha bin/.cherry-ignore ; then | ||||||
|  | 			continue | ||||||
|  | 		fi | ||||||
|  | 	fi | ||||||
|  |  | ||||||
|  | 	# Check to see if it has already been picked over. | ||||||
|  | 	if grep -q ^$sha already_picked ; then | ||||||
|  | 		continue | ||||||
|  | 	fi | ||||||
|  |  | ||||||
|  | 	git log -n1 --pretty=oneline $sha | cat | ||||||
|  | done | ||||||
|  |  | ||||||
|  | rm -f already_picked | ||||||
							
								
								
									
										29
									
								
								bin/git_sha1_gen.py
									
									
									
									
									
										
										
										Normal file → Executable file
									
								
							
							
						
						
									
										29
									
								
								bin/git_sha1_gen.py
									
									
									
									
									
										
										
										Normal file → Executable file
									
								
							| @@ -1,3 +1,5 @@ | |||||||
|  | #!/usr/bin/env python | ||||||
|  |  | ||||||
| """ | """ | ||||||
| Generate the contents of the git_sha1.h file. | Generate the contents of the git_sha1.h file. | ||||||
| The output of this script goes to stdout. | The output of this script goes to stdout. | ||||||
| @@ -26,25 +28,22 @@ def get_git_sha1(): | |||||||
|         git_sha1 = '' |         git_sha1 = '' | ||||||
|     return 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 = argparse.ArgumentParser() | ||||||
| parser.add_argument('--output', help='File to write the #define in', | parser.add_argument('--output', help='File to write the #define in', | ||||||
|                     required=True) |         required=True) | ||||||
| args = parser.parse_args() | args = parser.parse_args() | ||||||
|  |  | ||||||
| git_sha1 = os.environ.get('MESA_GIT_SHA1_OVERRIDE', get_git_sha1())[:10] | git_sha1 = os.environ.get('MESA_GIT_SHA1_OVERRIDE', get_git_sha1())[:10] | ||||||
| if git_sha1: | if git_sha1: | ||||||
|     write_if_different('#define MESA_GIT_SHA1 " (git-' + git_sha1 + ')"') |     git_sha1_h_in_path = os.path.join(os.path.dirname(sys.argv[0]), | ||||||
|  |             '..', 'src', 'git_sha1.h.in') | ||||||
|  |     with open(git_sha1_h_in_path , 'r') as git_sha1_h_in: | ||||||
|  |         new_sha1 = git_sha1_h_in.read().replace('@VCS_TAG@', git_sha1) | ||||||
|  |         if os.path.isfile(args.output): | ||||||
|  |             with open(args.output, 'r') as git_sha1_h: | ||||||
|  |                 if git_sha1_h.read() == new_sha1: | ||||||
|  |                     quit() | ||||||
|  |         with open(args.output, 'w') as git_sha1_h: | ||||||
|  |             git_sha1_h.write(new_sha1) | ||||||
| else: | else: | ||||||
|     write_if_different('#define MESA_GIT_SHA1 ""') |     open(args.output, 'w').close() | ||||||
|   | |||||||
							
								
								
									
										50
									
								
								bin/install_megadrivers.py
									
									
									
									
									
										
										
										Normal file → Executable file
									
								
							
							
						
						
									
										50
									
								
								bin/install_megadrivers.py
									
									
									
									
									
										
										
										Normal file → Executable file
									
								
							| @@ -1,5 +1,6 @@ | |||||||
|  | #!/usr/bin/env python | ||||||
| # encoding=utf-8 | # encoding=utf-8 | ||||||
| # Copyright © 2017-2018 Intel Corporation | # Copyright © 2017 Intel Corporation | ||||||
|  |  | ||||||
| # Permission is hereby granted, free of charge, to any person obtaining a copy | # Permission is hereby granted, free of charge, to any person obtaining a copy | ||||||
| # of this software and associated documentation files (the "Software"), to deal | # of this software and associated documentation files (the "Software"), to deal | ||||||
| @@ -24,6 +25,7 @@ | |||||||
| from __future__ import print_function | from __future__ import print_function | ||||||
| import argparse | import argparse | ||||||
| import os | import os | ||||||
|  | import shutil | ||||||
|  |  | ||||||
|  |  | ||||||
| def main(): | def main(): | ||||||
| @@ -33,50 +35,20 @@ def main(): | |||||||
|     parser.add_argument('drivers', nargs='+') |     parser.add_argument('drivers', nargs='+') | ||||||
|     args = parser.parse_args() |     args = parser.parse_args() | ||||||
|  |  | ||||||
|     if os.path.isabs(args.libdir): |     to = os.path.join(os.environ.get('MESON_INSTALL_DESTDIR_PREFIX'), 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)) |     master = os.path.join(to, os.path.basename(args.megadriver)) | ||||||
|  |  | ||||||
|     if not os.path.exists(to): |     if not os.path.exists(to): | ||||||
|         if os.path.lexists(to): |  | ||||||
|             os.unlink(to) |  | ||||||
|         os.makedirs(to) |         os.makedirs(to) | ||||||
|  |     shutil.copy(args.megadriver, master) | ||||||
|  |  | ||||||
|     for driver in args.drivers: |     for each in args.drivers: | ||||||
|         abs_driver = os.path.join(to, driver) |         driver = os.path.join(to, each) | ||||||
|  |         if os.path.exists(driver): | ||||||
|         if os.path.lexists(abs_driver): |             os.unlink(driver) | ||||||
|             os.unlink(abs_driver) |         print('installing {} to {}'.format(args.megadriver, driver)) | ||||||
|         print('installing {} to {}'.format(args.megadriver, abs_driver)) |         os.link(master, 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) |     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__': | if __name__ == '__main__': | ||||||
|   | |||||||
| @@ -1,88 +0,0 @@ | |||||||
| #!/usr/bin/env python3 |  | ||||||
| # Copyright © 2019 Intel Corporation |  | ||||||
|  |  | ||||||
| # Permission is hereby granted, free of charge, to any person obtaining a copy |  | ||||||
| # of this software and associated documentation files (the "Software"), to deal |  | ||||||
| # in the Software without restriction, including without limitation the rights |  | ||||||
| # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell |  | ||||||
| # copies of the Software, and to permit persons to whom the Software is |  | ||||||
| # furnished to do so, subject to the following conditions: |  | ||||||
|  |  | ||||||
| # The above copyright notice and this permission notice shall be included in |  | ||||||
| # all copies or substantial portions of the Software. |  | ||||||
|  |  | ||||||
| # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |  | ||||||
| # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |  | ||||||
| # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |  | ||||||
| # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |  | ||||||
| # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, |  | ||||||
| # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE |  | ||||||
| # SOFTWARE. |  | ||||||
|  |  | ||||||
| """This script reads a meson build directory and gives back the command line it |  | ||||||
| was configured with. |  | ||||||
|  |  | ||||||
| This only works for meson 0.49.0 and newer. |  | ||||||
| """ |  | ||||||
|  |  | ||||||
| import argparse |  | ||||||
| import ast |  | ||||||
| import configparser |  | ||||||
| import pathlib |  | ||||||
| import sys |  | ||||||
|  |  | ||||||
|  |  | ||||||
| def parse_args() -> argparse.Namespace: |  | ||||||
|     """Parse arguments.""" |  | ||||||
|     parser = argparse.ArgumentParser() |  | ||||||
|     parser.add_argument( |  | ||||||
|         'build_dir', |  | ||||||
|         help='Path the meson build directory') |  | ||||||
|     args = parser.parse_args() |  | ||||||
|     return args |  | ||||||
|  |  | ||||||
|  |  | ||||||
| def load_config(path: pathlib.Path) -> configparser.ConfigParser: |  | ||||||
|     """Load config file.""" |  | ||||||
|     conf = configparser.ConfigParser() |  | ||||||
|     with path.open() as f: |  | ||||||
|         conf.read_file(f) |  | ||||||
|     return conf |  | ||||||
|  |  | ||||||
|  |  | ||||||
| def build_cmd(conf: configparser.ConfigParser) -> str: |  | ||||||
|     """Rebuild the command line.""" |  | ||||||
|     args = [] |  | ||||||
|     for k, v in conf['options'].items(): |  | ||||||
|         if ' ' in v: |  | ||||||
|             args.append(f'-D{k}="{v}"') |  | ||||||
|         else: |  | ||||||
|             args.append(f'-D{k}={v}') |  | ||||||
|  |  | ||||||
|     cf = conf['properties'].get('cross_file') |  | ||||||
|     if cf: |  | ||||||
|         args.append('--cross-file={}'.format(cf)) |  | ||||||
|     nf = conf['properties'].get('native_file') |  | ||||||
|     if nf: |  | ||||||
|         # this will be in the form "['str', 'str']", so use ast.literal_eval to |  | ||||||
|         # convert it to a list of strings. |  | ||||||
|         nf = ast.literal_eval(nf) |  | ||||||
|         args.extend(['--native-file={}'.format(f) for f in nf]) |  | ||||||
|     return ' '.join(args) |  | ||||||
|  |  | ||||||
|  |  | ||||||
| def main(): |  | ||||||
|     args = parse_args() |  | ||||||
|     path = pathlib.Path(args.build_dir, 'meson-private', 'cmd_line.txt') |  | ||||||
|     if not path.exists(): |  | ||||||
|         print('Cannot find the necessary file to rebuild command line. ' |  | ||||||
|               'Is your meson version >= 0.49.0?', file=sys.stderr) |  | ||||||
|         sys.exit(1) |  | ||||||
|  |  | ||||||
|     conf = load_config(path) |  | ||||||
|     cmd = build_cmd(conf) |  | ||||||
|     print(cmd) |  | ||||||
|  |  | ||||||
|  |  | ||||||
| if __name__ == '__main__': |  | ||||||
|     main() |  | ||||||
| @@ -1,63 +0,0 @@ | |||||||
| #!/usr/bin/env python3 |  | ||||||
|  |  | ||||||
| from os import get_terminal_size |  | ||||||
| from textwrap import wrap |  | ||||||
| from mesonbuild import coredata |  | ||||||
| from mesonbuild import optinterpreter |  | ||||||
|  |  | ||||||
| (COLUMNS, _) = get_terminal_size() |  | ||||||
|  |  | ||||||
| def describe_option(option_name: str, option_default_value: str, |  | ||||||
|                     option_type: str, option_message: str) -> None: |  | ||||||
|     print('name:    ' + option_name) |  | ||||||
|     print('default: ' + option_default_value) |  | ||||||
|     print('type:    ' + option_type) |  | ||||||
|     for line in wrap(option_message, width=COLUMNS - 9): |  | ||||||
|         print('         ' + line) |  | ||||||
|     print('---') |  | ||||||
|  |  | ||||||
| oi = optinterpreter.OptionInterpreter('') |  | ||||||
| oi.process('meson_options.txt') |  | ||||||
|  |  | ||||||
| for (name, value) in oi.options.items(): |  | ||||||
|     if isinstance(value, coredata.UserStringOption): |  | ||||||
|         describe_option(name, |  | ||||||
|                         value.value, |  | ||||||
|                         'string', |  | ||||||
|                         "You can type what you want, but make sure it makes sense") |  | ||||||
|     elif isinstance(value, coredata.UserBooleanOption): |  | ||||||
|         describe_option(name, |  | ||||||
|                         'true' if value.value else 'false', |  | ||||||
|                         'boolean', |  | ||||||
|                         "You can set it to 'true' or 'false'") |  | ||||||
|     elif isinstance(value, coredata.UserIntegerOption): |  | ||||||
|         describe_option(name, |  | ||||||
|                         str(value.value), |  | ||||||
|                         'integer', |  | ||||||
|                         "You can set it to any integer value between '{}' and '{}'".format(value.min_value, value.max_value)) |  | ||||||
|     elif isinstance(value, coredata.UserUmaskOption): |  | ||||||
|         describe_option(name, |  | ||||||
|                         str(value.value), |  | ||||||
|                         'umask', |  | ||||||
|                         "You can set it to 'preserve' or a value between '0000' and '0777'") |  | ||||||
|     elif isinstance(value, coredata.UserComboOption): |  | ||||||
|         choices = '[' + ', '.join(["'" + v + "'" for v in value.choices]) + ']' |  | ||||||
|         describe_option(name, |  | ||||||
|                         value.value, |  | ||||||
|                         'combo', |  | ||||||
|                         "You can set it to any one of those values: " + choices) |  | ||||||
|     elif isinstance(value, coredata.UserArrayOption): |  | ||||||
|         choices = '[' + ', '.join(["'" + v + "'" for v in value.choices]) + ']' |  | ||||||
|         value = '[' + ', '.join(["'" + v + "'" for v in value.value]) + ']' |  | ||||||
|         describe_option(name, |  | ||||||
|                         value, |  | ||||||
|                         'array', |  | ||||||
|                         "You can set it to one or more of those values: " + choices) |  | ||||||
|     elif isinstance(value, coredata.UserFeatureOption): |  | ||||||
|         describe_option(name, |  | ||||||
|                         value.value, |  | ||||||
|                         'feature', |  | ||||||
|                         "You can set it to 'auto', 'enabled', or 'disabled'") |  | ||||||
|     else: |  | ||||||
|         print(name + ' is an option of a type unknown to this script') |  | ||||||
|         print('---') |  | ||||||
| @@ -19,4 +19,3 @@ | |||||||
| # SOFTWARE. | # SOFTWARE. | ||||||
|  |  | ||||||
| git_sha1_gen_py = files('git_sha1_gen.py') | git_sha1_gen_py = files('git_sha1_gen.py') | ||||||
| symbols_check = find_program('symbols-check.py') |  | ||||||
|   | |||||||
| @@ -1,35 +0,0 @@ | |||||||
| #!/usr/bin/env python |  | ||||||
| # encoding=utf-8 |  | ||||||
| # Copyright © 2017 Intel Corporation |  | ||||||
|  |  | ||||||
| # Permission is hereby granted, free of charge, to any person obtaining a copy |  | ||||||
| # of this software and associated documentation files (the "Software"), to deal |  | ||||||
| # in the Software without restriction, including without limitation the rights |  | ||||||
| # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell |  | ||||||
| # copies of the Software, and to permit persons to whom the Software is |  | ||||||
| # furnished to do so, subject to the following conditions: |  | ||||||
|  |  | ||||||
| # The above copyright notice and this permission notice shall be included in |  | ||||||
| # all copies or substantial portions of the Software. |  | ||||||
|  |  | ||||||
| # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |  | ||||||
| # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |  | ||||||
| # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |  | ||||||
| # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |  | ||||||
| # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, |  | ||||||
| # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE |  | ||||||
| # SOFTWARE. |  | ||||||
|  |  | ||||||
| from __future__ import print_function |  | ||||||
| import os |  | ||||||
|  |  | ||||||
|  |  | ||||||
| def main(): |  | ||||||
|     filename = os.path.join(os.environ['MESON_SOURCE_ROOT'], 'VERSION') |  | ||||||
|     with open(filename) as f: |  | ||||||
|         version = f.read().strip() |  | ||||||
|     print(version, end='') |  | ||||||
|  |  | ||||||
|  |  | ||||||
| if __name__ == '__main__': |  | ||||||
|     main() |  | ||||||
| @@ -1,117 +0,0 @@ | |||||||
| #!/usr/bin/env python3 |  | ||||||
| # Copyright © 2019 Intel Corporation |  | ||||||
|  |  | ||||||
| # Permission is hereby granted, free of charge, to any person obtaining a copy |  | ||||||
| # of this software and associated documentation files (the "Software"), to deal |  | ||||||
| # in the Software without restriction, including without limitation the rights |  | ||||||
| # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell |  | ||||||
| # copies of the Software, and to permit persons to whom the Software is |  | ||||||
| # furnished to do so, subject to the following conditions: |  | ||||||
|  |  | ||||||
| # The above copyright notice and this permission notice shall be included in |  | ||||||
| # all copies or substantial portions of the Software. |  | ||||||
|  |  | ||||||
| # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |  | ||||||
| # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |  | ||||||
| # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |  | ||||||
| # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |  | ||||||
| # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, |  | ||||||
| # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE |  | ||||||
| # SOFTWARE. |  | ||||||
|  |  | ||||||
| """Update the main page, release notes, and calendar.""" |  | ||||||
|  |  | ||||||
| import argparse |  | ||||||
| import calendar |  | ||||||
| import datetime |  | ||||||
| import pathlib |  | ||||||
| from lxml import ( |  | ||||||
|     etree, |  | ||||||
|     html, |  | ||||||
| ) |  | ||||||
|  |  | ||||||
|  |  | ||||||
| def calculate_previous_version(version: str, is_point: bool) -> str: |  | ||||||
|     """Calculate the previous version to compare to. |  | ||||||
|  |  | ||||||
|     In the case of -rc to final that verison is the previous .0 release, |  | ||||||
|     (19.3.0 in the case of 20.0.0, for example). for point releases that is |  | ||||||
|     the last point release. This value will be the same as the input value |  | ||||||
|     for a poiont release, but different for a major release. |  | ||||||
|     """ |  | ||||||
|     if '-' in version: |  | ||||||
|         version = version.split('-')[0] |  | ||||||
|     if is_point: |  | ||||||
|         return version |  | ||||||
|     base = version.split('.') |  | ||||||
|     if base[1] == '0': |  | ||||||
|         base[0] = str(int(base[0]) - 1) |  | ||||||
|         base[1] = '3' |  | ||||||
|     else: |  | ||||||
|         base[1] = str(int(base[1]) - 1) |  | ||||||
|     return '.'.join(base) |  | ||||||
|  |  | ||||||
|  |  | ||||||
| def is_point_release(version: str) -> bool: |  | ||||||
|     return not version.endswith('.0') |  | ||||||
|  |  | ||||||
|  |  | ||||||
| def update_index(is_point: bool, version: str, previous_version: str) -> None: |  | ||||||
|     p = pathlib.Path(__file__).parent.parent / 'docs' / 'index.html' |  | ||||||
|     with p.open('rt') as f: |  | ||||||
|         tree = html.parse(f) |  | ||||||
|  |  | ||||||
|     news = tree.xpath('.//h1')[0] |  | ||||||
|  |  | ||||||
|     date = datetime.date.today() |  | ||||||
|     month = calendar.month_name[date.month] |  | ||||||
|     header = etree.Element('h2') |  | ||||||
|     header.text = f"{month} {date.day}, {date.year}" |  | ||||||
|  |  | ||||||
|     body = etree.Element('p') |  | ||||||
|     a = etree.SubElement( |  | ||||||
|         body, 'a', attrib={'href': f'relnotes/{previous_version}.html'}) |  | ||||||
|     a.text = f"Mesa {previous_version}" |  | ||||||
|     if is_point: |  | ||||||
|         a.tail = " is released. This is a bug fix release." |  | ||||||
|     else: |  | ||||||
|         a.tail = (" is released. This is a new development release. " |  | ||||||
|                   "See the release notes for mor information about this release.") |  | ||||||
|  |  | ||||||
|     root = news.getparent() |  | ||||||
|     index = root.index(news) + 1 |  | ||||||
|     root.insert(index, body) |  | ||||||
|     root.insert(index, header) |  | ||||||
|  |  | ||||||
|     tree.write(p.as_posix(), method='html') |  | ||||||
|  |  | ||||||
|  |  | ||||||
| def update_release_notes(previous_version: str) -> None: |  | ||||||
|     p = pathlib.Path(__file__).parent.parent / 'docs' / 'relnotes.html' |  | ||||||
|     with p.open('rt') as f: |  | ||||||
|         tree = html.parse(f) |  | ||||||
|  |  | ||||||
|     li = etree.Element('li') |  | ||||||
|     a = etree.SubElement(li, 'a', href=f'relnotes/{previous_version}.html') |  | ||||||
|     a.text = f'{previous_version} release notes' |  | ||||||
|  |  | ||||||
|     ul = tree.xpath('.//ul')[0] |  | ||||||
|     ul.insert(0, li) |  | ||||||
|  |  | ||||||
|     tree.write(p.as_posix(), method='html') |  | ||||||
|  |  | ||||||
|  |  | ||||||
| def main() -> None: |  | ||||||
|     parser = argparse.ArgumentParser() |  | ||||||
|     parser.add_argument('version', help="The released version.") |  | ||||||
|     args = parser.parse_args() |  | ||||||
|  |  | ||||||
|     is_point = is_point_release(args.version) |  | ||||||
|     previous_version = calculate_previous_version(args.version, is_point) |  | ||||||
|  |  | ||||||
|     update_index(is_point, args.version, previous_version) |  | ||||||
|     update_release_notes(previous_version) |  | ||||||
|  |  | ||||||
|  |  | ||||||
| if __name__ == "__main__": |  | ||||||
|     main() |  | ||||||
							
								
								
									
										29
									
								
								bin/shortlog_mesa.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										29
									
								
								bin/shortlog_mesa.sh
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,29 @@ | |||||||
|  | #!/bin/sh | ||||||
|  |  | ||||||
|  | # This script is used to generate the list of changes that | ||||||
|  | # appears in the release notes files, with HTML formatting. | ||||||
|  | # | ||||||
|  | # Usage examples: | ||||||
|  | # | ||||||
|  | # $ bin/shortlog_mesa.sh mesa-9.0.2..mesa-9.0.3 | ||||||
|  | # $ bin/shortlog_mesa.sh mesa-9.0.2..mesa-9.0.3 > changes | ||||||
|  | # $ bin/shortlog_mesa.sh mesa-9.0.2..mesa-9.0.3 | tee changes | ||||||
|  |  | ||||||
|  |  | ||||||
|  | in_log=0 | ||||||
|  |  | ||||||
|  | git shortlog $* | while read l | ||||||
|  | do | ||||||
|  |     if [ $in_log -eq 0 ]; then | ||||||
|  | 	echo '<p>'$l'</p>' | ||||||
|  | 	echo '<ul>' | ||||||
|  | 	in_log=1 | ||||||
|  |     elif echo "$l" | egrep -q '^$' ; then | ||||||
|  | 	echo '</ul>' | ||||||
|  | 	echo | ||||||
|  | 	in_log=0 | ||||||
|  |     else | ||||||
|  |         mesg=$(echo $l | sed 's/ (cherry picked from commit [0-9a-f]\+)//;s/\&/&/g;s/</\</g;s/>/\>/g') | ||||||
|  | 	echo '  <li>'${mesg}'</li>' | ||||||
|  |     fi | ||||||
|  | done | ||||||
| @@ -1,134 +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, lib): |  | ||||||
|     ''' |  | ||||||
|     List all the (non platform-specific) symbols exported by the library |  | ||||||
|     ''' |  | ||||||
|     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 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', |  | ||||||
|                         required=True, |  | ||||||
|                         help='path to binary (or name in $PATH)') |  | ||||||
|     args = parser.parse_args() |  | ||||||
|  |  | ||||||
|     try: |  | ||||||
|         lib_symbols = get_symbols(args.nm, args.lib) |  | ||||||
|     except: |  | ||||||
|         # We can't run this test, but we haven't technically failed it either |  | ||||||
|         # Return the GNU "skip" error code |  | ||||||
|         exit(77) |  | ||||||
|     mandatory_symbols = [] |  | ||||||
|     optional_symbols = [] |  | ||||||
|     with open(args.symbols_file) as symbols_file: |  | ||||||
|         qualifier_optional = '(optional)' |  | ||||||
|         for line in symbols_file.readlines(): |  | ||||||
|  |  | ||||||
|             # Strip comments |  | ||||||
|             line = line.split('#')[0] |  | ||||||
|             line = line.strip() |  | ||||||
|             if not line: |  | ||||||
|                 continue |  | ||||||
|  |  | ||||||
|             # Line format: |  | ||||||
|             # [qualifier] symbol |  | ||||||
|             qualifier = None |  | ||||||
|             symbol = None |  | ||||||
|  |  | ||||||
|             fields = line.split() |  | ||||||
|             if len(fields) == 1: |  | ||||||
|                 symbol = fields[0] |  | ||||||
|             elif len(fields) == 2: |  | ||||||
|                 qualifier = fields[0] |  | ||||||
|                 symbol = fields[1] |  | ||||||
|             else: |  | ||||||
|                 print(args.symbols_file + ': invalid format: ' + line) |  | ||||||
|                 exit(1) |  | ||||||
|  |  | ||||||
|             # The only supported qualifier is 'optional', which means the |  | ||||||
|             # symbol doesn't have to be exported by the library |  | ||||||
|             if qualifier and not qualifier == qualifier_optional: |  | ||||||
|                 print(args.symbols_file + ': invalid qualifier: ' + qualifier) |  | ||||||
|                 exit(1) |  | ||||||
|  |  | ||||||
|             if qualifier == qualifier_optional: |  | ||||||
|                 optional_symbols.append(symbol) |  | ||||||
|             else: |  | ||||||
|                 mandatory_symbols.append(symbol) |  | ||||||
|  |  | ||||||
|     unknown_symbols = [] |  | ||||||
|     for symbol in lib_symbols: |  | ||||||
|         if symbol in mandatory_symbols: |  | ||||||
|             continue |  | ||||||
|         if symbol in optional_symbols: |  | ||||||
|             continue |  | ||||||
|         if symbol[:2] == '_Z': |  | ||||||
|             # Ignore random C++ symbols |  | ||||||
|             #TODO: figure out if there's any way to avoid exporting them in the first place |  | ||||||
|             continue |  | ||||||
|         unknown_symbols.append(symbol) |  | ||||||
|  |  | ||||||
|     missing_symbols = [ |  | ||||||
|         sym for sym in mandatory_symbols if sym not in lib_symbols |  | ||||||
|     ] |  | ||||||
|  |  | ||||||
|     for symbol in unknown_symbols: |  | ||||||
|         print(args.lib + ': unknown symbol exported: ' + symbol) |  | ||||||
|  |  | ||||||
|     for symbol in missing_symbols: |  | ||||||
|         print(args.lib + ': missing symbol: ' + symbol) |  | ||||||
|  |  | ||||||
|     if unknown_symbols or missing_symbols: |  | ||||||
|         exit(1) |  | ||||||
|     exit(0) |  | ||||||
|  |  | ||||||
|  |  | ||||||
| if __name__ == '__main__': |  | ||||||
|     main() |  | ||||||
							
								
								
									
										21
									
								
								common.py
									
									
									
									
									
								
							
							
						
						
									
										21
									
								
								common.py
									
									
									
									
									
								
							| @@ -17,9 +17,6 @@ import SCons.Script.SConscript | |||||||
| host_platform = _platform.system().lower() | host_platform = _platform.system().lower() | ||||||
| if host_platform.startswith('cygwin'): | if host_platform.startswith('cygwin'): | ||||||
|     host_platform = '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 | # Search sys.argv[] for a "platform=foo" argument since we don't have | ||||||
| # an 'env' variable at this point. | # an 'env' variable at this point. | ||||||
| @@ -52,18 +49,9 @@ if 'PROCESSOR_ARCHITECTURE' in os.environ: | |||||||
| else: | else: | ||||||
|     host_machine = _platform.machine() |     host_machine = _platform.machine() | ||||||
| host_machine = _machine_map.get(host_machine, 'generic') | 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_machine = host_machine | ||||||
| default_toolchain = 'default' | default_toolchain = 'default' | ||||||
| # MSYS2 default toolchain selection. |  | ||||||
| if _platform.system().lower().startswith('mingw'): |  | ||||||
|     default_toolchain = 'mingw' |  | ||||||
|  |  | ||||||
| if target_platform == 'windows' and host_platform != 'windows': | if target_platform == 'windows' and host_platform != 'windows': | ||||||
|     default_machine = 'x86' |     default_machine = 'x86' | ||||||
| @@ -98,7 +86,7 @@ def AddOptions(opts): | |||||||
|         from SCons.Options.EnumOption import EnumOption |         from SCons.Options.EnumOption import EnumOption | ||||||
|     opts.Add(EnumOption('build', 'build type', 'debug', |     opts.Add(EnumOption('build', 'build type', 'debug', | ||||||
|                         allowed_values=('debug', 'checked', 'profile', |                         allowed_values=('debug', 'checked', 'profile', | ||||||
|                                         'release'))) |                                         'release', 'opt'))) | ||||||
|     opts.Add(BoolOption('verbose', 'verbose output', 'no')) |     opts.Add(BoolOption('verbose', 'verbose output', 'no')) | ||||||
|     opts.Add(EnumOption('machine', 'use machine-specific assembly code', |     opts.Add(EnumOption('machine', 'use machine-specific assembly code', | ||||||
|                         default_machine, |                         default_machine, | ||||||
| @@ -111,14 +99,17 @@ def AddOptions(opts): | |||||||
|                         'enable static code analysis where available', 'no')) |                         'enable static code analysis where available', 'no')) | ||||||
|     opts.Add(BoolOption('asan', 'enable Address Sanitizer', 'no')) |     opts.Add(BoolOption('asan', 'enable Address Sanitizer', 'no')) | ||||||
|     opts.Add('toolchain', 'compiler toolchain', default_toolchain) |     opts.Add('toolchain', 'compiler toolchain', default_toolchain) | ||||||
|  |     opts.Add(BoolOption('gles', 'EXPERIMENTAL: enable OpenGL ES support', | ||||||
|  |                         'no')) | ||||||
|     opts.Add(BoolOption('llvm', 'use LLVM', default_llvm)) |     opts.Add(BoolOption('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)', |     opts.Add(BoolOption('openmp', 'EXPERIMENTAL: compile with openmp (swrast)', | ||||||
|                         'no')) |                         'no')) | ||||||
|     opts.Add(BoolOption('debug', 'DEPRECATED: debug build', 'yes')) |     opts.Add(BoolOption('debug', 'DEPRECATED: debug build', 'yes')) | ||||||
|     opts.Add(BoolOption('profile', 'DEPRECATED: profile build', 'no')) |     opts.Add(BoolOption('profile', 'DEPRECATED: profile build', 'no')) | ||||||
|     opts.Add(BoolOption('quiet', 'DEPRECATED: profile build', 'yes')) |     opts.Add(BoolOption('quiet', 'DEPRECATED: profile build', 'yes')) | ||||||
|  |     opts.Add(BoolOption('texture_float', | ||||||
|  |                         'enable floating-point textures and renderbuffers', | ||||||
|  |                         'no')) | ||||||
|     opts.Add(BoolOption('swr', 'Build OpenSWR', 'no')) |     opts.Add(BoolOption('swr', 'Build OpenSWR', 'no')) | ||||||
|     if host_platform == 'windows': |     if host_platform == 'windows': | ||||||
|         opts.Add('MSVC_VERSION', 'Microsoft Visual C/C++ version') |         opts.Add('MSVC_VERSION', 'Microsoft Visual C/C++ version') | ||||||
|         opts.Add('MSVC_USE_SCRIPT', 'Microsoft Visual C/C++ vcvarsall script', True) |  | ||||||
|   | |||||||
							
								
								
									
										3133
									
								
								configure.ac
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3133
									
								
								configure.ac
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| @@ -8,7 +8,7 @@ | |||||||
| <body> | <body> | ||||||
|  |  | ||||||
| <div class="header"> | <div class="header"> | ||||||
|   The Mesa 3D Graphics Library |   <h1>The Mesa 3D Graphics Library</h1> | ||||||
| </div> | </div> | ||||||
|  |  | ||||||
| <iframe src="contents.html"></iframe> | <iframe src="contents.html"></iframe> | ||||||
| @@ -48,25 +48,23 @@ start-up because of an extension string buffer-overflow problem. | |||||||
|  |  | ||||||
| <p> | <p> | ||||||
| The problem is a modern OpenGL driver will return a very long string | The problem is a modern OpenGL driver will return a very long string | ||||||
| for the <code>glGetString(GL_EXTENSIONS)</code> query and if the application | for the glGetString(GL_EXTENSIONS) query and if the application | ||||||
| naively copies the string into a fixed-size buffer it can overflow the | naively copies the string into a fixed-size buffer it can overflow the | ||||||
| buffer and crash the application. | buffer and crash the application. | ||||||
| </p> | </p> | ||||||
|  |  | ||||||
| <p> | <p> | ||||||
| The work-around is to set the <code>MESA_EXTENSION_MAX_YEAR</code> | The work-around is to set the MESA_EXTENSION_MAX_YEAR environment variable | ||||||
| environment variable to the approximate release year of the game. | to the approximate release year of the game. | ||||||
| This will cause the <code>glGetString(GL_EXTENSIONS)</code> query to only report | This will cause the glGetString(GL_EXTENSIONS) query to only report extensions | ||||||
| extensions older than the given year. | older than the given year. | ||||||
| </p> | </p> | ||||||
|  |  | ||||||
| <p> | <p> | ||||||
| For example, if the game was released in 2001, do | For example, if the game was released in 2001, do | ||||||
| </p> |  | ||||||
| <pre> | <pre> | ||||||
| export MESA_EXTENSION_MAX_YEAR=2001 | export MESA_EXTENSION_MAX_YEAR=2001 | ||||||
| </pre> | </pre> | ||||||
| <p> |  | ||||||
| before running the game. | before running the game. | ||||||
| </p> | </p> | ||||||
|  |  | ||||||
|   | |||||||
							
								
								
									
										257
									
								
								docs/autoconf.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										257
									
								
								docs/autoconf.html
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,257 @@ | |||||||
|  | <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> | ||||||
|  | <html lang="en"> | ||||||
|  | <head> | ||||||
|  |   <meta http-equiv="content-type" content="text/html; charset=utf-8"> | ||||||
|  |   <title>Compilation and Installation using Autoconf</title> | ||||||
|  |   <link rel="stylesheet" type="text/css" href="mesa.css"> | ||||||
|  | </head> | ||||||
|  | <body> | ||||||
|  |  | ||||||
|  | <div class="header"> | ||||||
|  |   <h1>The Mesa 3D Graphics Library</h1> | ||||||
|  | </div> | ||||||
|  |  | ||||||
|  | <iframe src="contents.html"></iframe> | ||||||
|  | <div class="content"> | ||||||
|  |  | ||||||
|  | <h1>Compilation and Installation using Autoconf</h1> | ||||||
|  |  | ||||||
|  | <ol> | ||||||
|  | <li><p><a href="#basic">Basic Usage</a></li> | ||||||
|  | <li><p><a href="#driver">Driver Options</a> | ||||||
|  |   <ul> | ||||||
|  |   <li><a href="#xlib">Xlib Driver Options</a></li> | ||||||
|  |   <li><a href="#dri">DRI Driver Options</a></li> | ||||||
|  |   <li><a href="#osmesa">OSMesa Driver Options</a></li> | ||||||
|  |   </ul> | ||||||
|  | </ol> | ||||||
|  |  | ||||||
|  |  | ||||||
|  | <h2 id="basic">1. Basic Usage</h2> | ||||||
|  |  | ||||||
|  | <p> | ||||||
|  | The autoconf generated configure script can be used to guess your | ||||||
|  | platform and change various options for building Mesa. To use the | ||||||
|  | configure script, type: | ||||||
|  | </p> | ||||||
|  |  | ||||||
|  | <pre> | ||||||
|  |     ./configure | ||||||
|  | </pre> | ||||||
|  |  | ||||||
|  | <p> | ||||||
|  | To see a short description of all the options, type <code>./configure | ||||||
|  | --help</code>. If you are using a development snapshot and the configure | ||||||
|  | script does not exist, type <code>./autogen.sh</code> to generate it | ||||||
|  | first. If you know the options you want to pass to | ||||||
|  | <code>configure</code>, you can pass them to <code>autogen.sh</code>. It | ||||||
|  | will run <code>configure</code> with these options after it is | ||||||
|  | generated. Once you have run <code>configure</code> and set the options | ||||||
|  | to your preference, type: | ||||||
|  | </p> | ||||||
|  |  | ||||||
|  | <pre> | ||||||
|  |     make | ||||||
|  | </pre> | ||||||
|  |  | ||||||
|  | <p> | ||||||
|  | This will produce libGL.so and/or several other libraries depending on the | ||||||
|  | options you have chosen. Later, if you want to rebuild for a different | ||||||
|  | configuration run <code>make realclean</code> before rebuilding. | ||||||
|  | </p> | ||||||
|  |  | ||||||
|  | <p> | ||||||
|  | Some of the generic autoconf options are used with Mesa: | ||||||
|  | </p> | ||||||
|  | <dl> | ||||||
|  | <dt><code>--prefix=PREFIX</code></dt> | ||||||
|  | <dd><p>This is the root directory where | ||||||
|  | files will be installed by <code>make install</code>. The default is | ||||||
|  | <code>/usr/local</code>.</p> | ||||||
|  | </dd> | ||||||
|  |  | ||||||
|  | <dt><code>--exec-prefix=EPREFIX</code></dt> | ||||||
|  | <dd><p>This is the root directory | ||||||
|  | where architecture-dependent files will be installed. In Mesa, this is | ||||||
|  | only used to derive the directory for the libraries. The default is | ||||||
|  | <code>${prefix}</code>.</p> | ||||||
|  | </dd> | ||||||
|  |  | ||||||
|  | <dt><code>--libdir=LIBDIR</code></dt> | ||||||
|  | <dd><p>This option specifies the directory | ||||||
|  | where the GL libraries will be installed. The default is | ||||||
|  | <code>${exec_prefix}/lib</code>. It also serves as the name of the | ||||||
|  | library staging area in the source tree. For instance, if the option | ||||||
|  | <code>--libdir=/usr/local/lib64</code> is used, the libraries will be | ||||||
|  | created in a <code>lib64</code> directory at the top of the Mesa source | ||||||
|  | tree.</p> | ||||||
|  | </dd> | ||||||
|  |  | ||||||
|  | <dt><code>--sysconfdir=DIR</code></dt> | ||||||
|  | <dd><p>This option specifies the directory where the configuration | ||||||
|  | files will be installed. The default is <code>${prefix}/etc</code>. | ||||||
|  | Currently there's only one config file provided when dri drivers are | ||||||
|  | enabled - it's <code>drirc</code>.</p> | ||||||
|  | </dd> | ||||||
|  |  | ||||||
|  | <dt><code>--enable-static, --disable-shared</code></dt> | ||||||
|  | <dd><p>By default, Mesa | ||||||
|  | will build shared libraries. Either of these options will force static | ||||||
|  | libraries to be built. It is not currently possible to build static and | ||||||
|  | shared libraries in a single pass.</p> | ||||||
|  | </dd> | ||||||
|  |  | ||||||
|  | <dt><code>CC, CFLAGS, CXX, CXXFLAGS</code></dt> | ||||||
|  | <dd><p>These environment variables | ||||||
|  | control the C and C++ compilers used during the build. By default, | ||||||
|  | <code>gcc</code> and <code>g++</code> are used and the debug/optimisation | ||||||
|  | level is left unchanged.</p> | ||||||
|  | </dd> | ||||||
|  |  | ||||||
|  | <dt><code>LDFLAGS</code></dt> | ||||||
|  | <dd><p>An environment variable specifying flags to | ||||||
|  | pass when linking programs. These should be empty and | ||||||
|  | <code>PKG_CONFIG_PATH</code> is recommended to be used instead. If needed | ||||||
|  | it can be used to direct the linker to use libraries in nonstandard | ||||||
|  | directories. For example, <code>LDFLAGS="-L/usr/X11R6/lib"</code>.</p> | ||||||
|  | </dd> | ||||||
|  |  | ||||||
|  | <dt><code>PKG_CONFIG_PATH</code></dt> | ||||||
|  | <dd><p>The | ||||||
|  | <code>pkg-config</code> utility is a hard requirement for configuring and | ||||||
|  | building mesa. It is used to search for external libraries | ||||||
|  | on the system. This environment variable is used to control the search | ||||||
|  | path for <code>pkg-config</code>. For instance, setting | ||||||
|  | <code>PKG_CONFIG_PATH=/usr/X11R6/lib/pkgconfig</code> will search for | ||||||
|  | package metadata in <code>/usr/X11R6</code> before the standard | ||||||
|  | directories.</p> | ||||||
|  | </dd> | ||||||
|  | </dl> | ||||||
|  |  | ||||||
|  | <p> | ||||||
|  | There are also a few general options for altering the Mesa build: | ||||||
|  | </p> | ||||||
|  | <dl> | ||||||
|  | <dt><code>--enable-debug</code></dt> | ||||||
|  | <dd><p>This option will set the compiler debug/optimisation levels (if the user | ||||||
|  | hasn't already set them via the CFLAGS/CXXFLAGS) and macros to aid in | ||||||
|  | debugging the Mesa libraries.</p> | ||||||
|  |  | ||||||
|  | <p>Note that enabling this option can lead to noticeable loss of performance.</p> | ||||||
|  |  | ||||||
|  | <dt><code>--disable-asm</code></dt> | ||||||
|  | <dd><p>There are assembly routines | ||||||
|  | available for a few architectures. These will be used by default if | ||||||
|  | one of these architectures is detected. This option ensures that | ||||||
|  | assembly will not be used.</p> | ||||||
|  | </dd> | ||||||
|  |  | ||||||
|  | <dt><code>--build=</code></dt> | ||||||
|  | <dt><code>--host=</code></dt> | ||||||
|  | <dd><p>By default, the build will compile code for the architecture that | ||||||
|  | it's running on. In order to build cross-compile Mesa on a x86-64 machine | ||||||
|  | that is to run on a i686, one would need to set the options to:</p> | ||||||
|  |  | ||||||
|  | <p><code>--build=x86_64-pc-linux-gnu --host=i686-pc-linux-gnu</code></p> | ||||||
|  |  | ||||||
|  | Note that these can vary from distribution to distribution. For more | ||||||
|  | information check with the | ||||||
|  | <a href="https://www.gnu.org/savannah-checkouts/gnu/autoconf/manual/autoconf-2.69/html_node/Specifying-Target-Triplets.html"> | ||||||
|  | autoconf manual</a>. | ||||||
|  | Note that you will need to correctly set <code>PKG_CONFIG_PATH</code> as well. | ||||||
|  |  | ||||||
|  |  | ||||||
|  | <p>In some cases a single compiler is capable of handling both architectures | ||||||
|  | (multilib) in that case one would need to set the <code>CC,CXX</code> variables | ||||||
|  | appending the correct machine options. Seek your compiler documentation for | ||||||
|  | further information - | ||||||
|  | <a href="https://gcc.gnu.org/onlinedocs/gcc/Submodel-Options.html"> gcc | ||||||
|  | machine dependent options</a></p> | ||||||
|  |  | ||||||
|  | <p>In addition to specifying correct <code>PKG_CONFIG_PATH</code> for the target | ||||||
|  | architecture, the following should be sufficient to configure multilib Mesa</p> | ||||||
|  |  | ||||||
|  | <code>./configure CC="gcc -m32" CXX="g++ -m32" --build=x86_64-pc-linux-gnu --host=i686-pc-linux-gnu ...</code> | ||||||
|  | </dd> | ||||||
|  | </dl> | ||||||
|  |  | ||||||
|  |  | ||||||
|  | <h2 id="driver">2. GL Driver Options</h2> | ||||||
|  |  | ||||||
|  | <p> | ||||||
|  | There are several different driver modes that Mesa can use. These are | ||||||
|  | described in more detail in the <a href="install.html">basic | ||||||
|  | installation instructions</a>. The Mesa driver is controlled through the | ||||||
|  | configure options <code>--enable-glx</code> and <code>--enable-osmesa</code> | ||||||
|  | </p> | ||||||
|  |  | ||||||
|  | <h3 id="xlib">Xlib</h3><p> | ||||||
|  | It uses Xlib as a software renderer to do all rendering. It corresponds | ||||||
|  | to the option <code>--enable-glx=xlib</code> or <code>--enable-glx=gallium-xlib</code>. | ||||||
|  |  | ||||||
|  | <h3 id="dri">DRI</h3><p>This mode uses the DRI hardware drivers for | ||||||
|  | accelerated OpenGL rendering. To enable use <code>--enable-glx=dri | ||||||
|  | --enable-dri</code>. | ||||||
|  |  | ||||||
|  | <!-- DRI specific options --> | ||||||
|  | <dl> | ||||||
|  | <dt><code>--with-dri-driverdir=DIR</code> | ||||||
|  | <dd><p> This option specifies the | ||||||
|  | location the DRI drivers will be installed to and the location libGL | ||||||
|  | will search for DRI drivers. The default is <code>${libdir}/dri</code>. | ||||||
|  | <dt><code>--with-dri-drivers=DRIVER,DRIVER,...</code> | ||||||
|  | <dd><p> This option | ||||||
|  | allows a specific set of DRI drivers to be built. For example, | ||||||
|  | <code>--with-dri-drivers="swrast,i965,radeon,nouveau"</code>. By | ||||||
|  | default, the drivers will be chosen depending on the target platform. | ||||||
|  | See the directory <code>src/mesa/drivers/dri</code> in the source tree | ||||||
|  | for available drivers. Beware that the swrast DRI driver is used by both | ||||||
|  | libGL and the X.Org xserver GLX module to do software rendering, so you | ||||||
|  | may run into problems if it is not available. | ||||||
|  | <!-- This explanation might be totally bogus. Kristian? --> | ||||||
|  | <dt><code>--disable-driglx-direct</code> | ||||||
|  | <dd><p> Disable direct rendering in | ||||||
|  | GLX. Normally, direct hardware rendering through the DRI drivers and | ||||||
|  | indirect software rendering are enabled in GLX. This option disables | ||||||
|  | direct rendering entirely. It can be useful on architectures where | ||||||
|  | kernel DRM modules are not available. | ||||||
|  | <dt><code>--enable-glx-tls</code> <dd><p> | ||||||
|  | Enable Thread Local Storage (TLS) in | ||||||
|  | GLX. | ||||||
|  | <dt><code>--with-expat=DIR</code> | ||||||
|  | <dd><p><strong>DEPRECATED</strong>, use <code>PKG_CONFIG_PATH</code> instead.</p> | ||||||
|  | <p>The DRI-enabled libGL uses expat to | ||||||
|  | parse the DRI configuration files in <code>${sysconfdir}/drirc</code> and | ||||||
|  | <code>~/.drirc</code>. This option allows a specific expat installation | ||||||
|  | to be used. For example, <code>--with-expat=/usr/local</code> will | ||||||
|  | search for expat headers and libraries in <code>/usr/local/include</code> | ||||||
|  | and <code>/usr/local/lib</code>, respectively. | ||||||
|  | </dl> | ||||||
|  |  | ||||||
|  | <h3 id="osmesa">OSMesa </h3><p> No libGL is built in this | ||||||
|  | mode. Instead, the driver code is built into the Off-Screen Mesa | ||||||
|  | (OSMesa) library. See the <a href="osmesa.html">Off-Screen Rendering</a> | ||||||
|  | page for more details.  It corresponds to the option | ||||||
|  | <code>--enable-osmesa</code>. | ||||||
|  |  | ||||||
|  | <!-- OSMesa specific options --> | ||||||
|  | <dl> | ||||||
|  | <dt><code>--with-osmesa-bits=BITS</code> | ||||||
|  | <dd><p> This option allows the size | ||||||
|  | of the color channel in bits to be specified. By default, an 8-bit | ||||||
|  | channel will be used, and the driver will be named libOSMesa. Other | ||||||
|  | options are 16- and 32-bit color channels, which will add the bit size | ||||||
|  | to the library name. For example, <code>--with-osmesa-bits=16</code> | ||||||
|  | will create the libOSMesa16 library with a 16-bit color channel. | ||||||
|  | </dl> | ||||||
|  |  | ||||||
|  |  | ||||||
|  | <h2 id="library">3. Library Options</h2> | ||||||
|  |  | ||||||
|  | <p> | ||||||
|  | The configure script provides more fine grained control over the libraries | ||||||
|  | that will be built. | ||||||
|  |  | ||||||
|  | </div> | ||||||
|  | </body> | ||||||
|  | </html> | ||||||
| @@ -2,19 +2,19 @@ | |||||||
| <html lang="en"> | <html lang="en"> | ||||||
| <head> | <head> | ||||||
|   <meta http-equiv="content-type" content="text/html; charset=utf-8"> |   <meta http-equiv="content-type" content="text/html; charset=utf-8"> | ||||||
|   <title>Report a Bug</title> |   <title>Mesa Bug Reporting</title> | ||||||
|   <link rel="stylesheet" type="text/css" href="mesa.css"> |   <link rel="stylesheet" type="text/css" href="mesa.css"> | ||||||
| </head> | </head> | ||||||
| <body> | <body> | ||||||
|  |  | ||||||
| <div class="header"> | <div class="header"> | ||||||
|   The Mesa 3D Graphics Library |   <h1>The Mesa 3D Graphics Library</h1> | ||||||
| </div> | </div> | ||||||
|  |  | ||||||
| <iframe src="contents.html"></iframe> | <iframe src="contents.html"></iframe> | ||||||
| <div class="content"> | <div class="content"> | ||||||
|  |  | ||||||
| <h1>Report a Bug</h1> | <h1>Bug Database</h1> | ||||||
|  |  | ||||||
| <p> | <p> | ||||||
| The Mesa bug database is hosted on | The Mesa bug database is hosted on | ||||||
| @@ -24,8 +24,8 @@ The old bug database on SourceForge is no longer used. | |||||||
|  |  | ||||||
| <p> | <p> | ||||||
| To file a Mesa bug, go to | To file a Mesa bug, go to | ||||||
| <a href="https://gitlab.freedesktop.org/mesa/mesa/issues"> | <a href="https://bugs.freedesktop.org/enter_bug.cgi?product=Mesa"> | ||||||
| GitLab on freedesktop.org</a> | Bugzilla on freedesktop.org</a> | ||||||
| </p> | </p> | ||||||
|  |  | ||||||
| <p> | <p> | ||||||
|   | |||||||
| @@ -8,7 +8,7 @@ | |||||||
| <body> | <body> | ||||||
|  |  | ||||||
| <div class="header"> | <div class="header"> | ||||||
|   The Mesa 3D Graphics Library |   <h1>The Mesa 3D Graphics Library</h1> | ||||||
| </div> | </div> | ||||||
|  |  | ||||||
| <iframe src="contents.html"></iframe> | <iframe src="contents.html"></iframe> | ||||||
| @@ -48,19 +48,19 @@ For example: | |||||||
|    } |    } | ||||||
| </pre> | </pre> | ||||||
|  |  | ||||||
| <li>Put a space before/after operators.  For example, <code>a = b + c;</code> | <li>Put a space before/after operators.  For example, <tt>a = b + c;</tt> | ||||||
| and not <code>a=b+c;</code> | and not <tt>a=b+c;</tt> | ||||||
|  |  | ||||||
| <li>This GNU indent command generally does the right thing for formatting: | <li>This GNU indent command generally does the right thing for formatting: | ||||||
| <pre> | <pre> | ||||||
|    indent -br -i3 -npcs --no-tabs infile.c -o outfile.c |    indent -br -i3 -npcs --no-tabs infile.c -o outfile.c | ||||||
| </pre> | </pre> | ||||||
|  |  | ||||||
| <li> | <li>Use comments wherever you think it would be helpful for other developers. | ||||||
| <p>Use comments wherever you think it would be helpful for other developers. |  | ||||||
| Several specific cases and style examples follow.  Note that we roughly | Several specific cases and style examples follow.  Note that we roughly | ||||||
| follow <a href="http://www.doxygen.nl">Doxygen</a> conventions. | follow <a href="https://www.stack.nl/~dimitri/doxygen/">Doxygen</a> conventions. | ||||||
| </p> | <br> | ||||||
|  | <br> | ||||||
| Single-line comments: | Single-line comments: | ||||||
| <pre> | <pre> | ||||||
|    /* null-out pointer to prevent dangling reference below */ |    /* null-out pointer to prevent dangling reference below */ | ||||||
| @@ -83,7 +83,7 @@ We try to quote the OpenGL specification where prudent: | |||||||
|     *     "An INVALID_OPERATION error is generated for any of the following |     *     "An INVALID_OPERATION error is generated for any of the following | ||||||
|     *     conditions: |     *     conditions: | ||||||
|     * |     * | ||||||
|     *     * <length> is zero." |     *     * <length> is zero." | ||||||
|     * |     * | ||||||
|     * Additionally, page 94 of the PDF of the OpenGL 4.5 core spec |     * Additionally, page 94 of the PDF of the OpenGL 4.5 core spec | ||||||
|     * (30.10.2014) also says this, so it's no longer allowed for desktop GL, |     * (30.10.2014) also says this, so it's no longer allowed for desktop GL, | ||||||
| @@ -94,7 +94,7 @@ Function comment example: | |||||||
| <pre> | <pre> | ||||||
|    /** |    /** | ||||||
|     * Create and initialize a new buffer object.  Called via the |     * Create and initialize a new buffer object.  Called via the | ||||||
|     * ctx->Driver.CreateObject() driver callback function. |     * ctx->Driver.CreateObject() driver callback function. | ||||||
|     * \param  name  integer name of the object |     * \param  name  integer name of the object | ||||||
|     * \param  type  one of GL_FOO, GL_BAR, etc. |     * \param  type  one of GL_FOO, GL_BAR, etc. | ||||||
|     * \return  pointer to new object or NULL if error |     * \return  pointer to new object or NULL if error | ||||||
| @@ -120,23 +120,22 @@ the opening brace goes on the next line by itself (see above.) | |||||||
|    _mesa_foo_bar()  - an internal non-static Mesa function |    _mesa_foo_bar()  - an internal non-static Mesa function | ||||||
| </pre> | </pre> | ||||||
|  |  | ||||||
| <li>Constants, macros and enum names are <code>ALL_UPPERCASE</code>, with _ | <li>Constants, macros and enum names are ALL_UPPERCASE, with _ between | ||||||
| between words. | words. | ||||||
| <li>Mesa usually uses camel case for local variables (Ex: | <li>Mesa usually uses camel case for local variables (Ex: "localVarname") | ||||||
| <code>localVarname</code>) while gallium typically uses underscores (Ex: | while gallium typically uses underscores (Ex: "local_var_name"). | ||||||
| <code>local_var_name</code>). |  | ||||||
| <li>Global variables are almost never used because Mesa should be thread-safe. | <li>Global variables are almost never used because Mesa should be thread-safe. | ||||||
|  |  | ||||||
| <li>Booleans.  Places that are not directly visible to the GL API | <li>Booleans.  Places that are not directly visible to the GL API | ||||||
| should prefer the use of <code>bool</code>, <code>true</code>, and | should prefer the use of <tt>bool</tt>, <tt>true</tt>, and | ||||||
| <code>false</code> over <code>GLboolean</code>, <code>GL_TRUE</code>, and | <tt>false</tt> over <tt>GLboolean</tt>, <tt>GL_TRUE</tt>, and | ||||||
| <code>GL_FALSE</code>.  In C code, this may mean that | <tt>GL_FALSE</tt>.  In C code, this may mean that | ||||||
| <code>#include <stdbool.h></code> needs to be added.  The | <tt>#include <stdbool.h></tt> needs to be added.  The | ||||||
| <code>try_emit_*</code> methods in <code>src/mesa/program/ir_to_mesa.cpp</code> | <tt>try_emit_</tt>* methods in src/mesa/program/ir_to_mesa.cpp and | ||||||
| and <code>src/mesa/state_tracker/st_glsl_to_tgsi.cpp</code> can serve as | src/mesa/state_tracker/st_glsl_to_tgsi.cpp can serve as examples. | ||||||
| examples. |  | ||||||
|  |  | ||||||
| </ul> | </ul> | ||||||
|  | </p> | ||||||
|  |  | ||||||
| </div> | </div> | ||||||
| </body> | </body> | ||||||
|   | |||||||
| @@ -2,19 +2,19 @@ | |||||||
| <html lang="en"> | <html lang="en"> | ||||||
| <head> | <head> | ||||||
|   <meta http-equiv="content-type" content="text/html; charset=utf-8"> |   <meta http-equiv="content-type" content="text/html; charset=utf-8"> | ||||||
|   <title>Conformance Testing</title> |   <title>Conformance</title> | ||||||
|   <link rel="stylesheet" type="text/css" href="mesa.css"> |   <link rel="stylesheet" type="text/css" href="mesa.css"> | ||||||
| </head> | </head> | ||||||
| <body> | <body> | ||||||
|  |  | ||||||
| <div class="header"> | <div class="header"> | ||||||
|   The Mesa 3D Graphics Library |   <h1>The Mesa 3D Graphics Library</h1> | ||||||
| </div> | </div> | ||||||
|  |  | ||||||
| <iframe src="contents.html"></iframe> | <iframe src="contents.html"></iframe> | ||||||
| <div class="content"> | <div class="content"> | ||||||
|  |  | ||||||
| <h1>Conformance Testing</h1> | <h1>Conformance</h1> | ||||||
|  |  | ||||||
| <p> | <p> | ||||||
| The SGI OpenGL conformance tests verify correct operation of OpenGL | The SGI OpenGL conformance tests verify correct operation of OpenGL | ||||||
|   | |||||||
| @@ -12,10 +12,6 @@ | |||||||
|       background-color: #cccccc; |       background-color: #cccccc; | ||||||
|       color: black; |       color: black; | ||||||
|     } |     } | ||||||
|     h2 { |  | ||||||
|       font-size: inherit; |  | ||||||
|       font-weight: bold; |  | ||||||
|     } |  | ||||||
|     a:link { |     a:link { | ||||||
|       color: #000; |       color: #000; | ||||||
|     } |     } | ||||||
| @@ -27,56 +23,58 @@ | |||||||
| </head> | </head> | ||||||
| <body> | <body> | ||||||
|  |  | ||||||
| <h2>Documentation</h2> | <b>Documentation</b> | ||||||
| <ul> | <ul> | ||||||
| <li><a href="intro.html" target="_parent">Introduction</a> | <li><a href="intro.html" target="_parent">Introduction</a> | ||||||
| <li><a href="index.html" target="_parent">News</a> | <li><a href="index.html" target="_parent">News</a> | ||||||
| <li><a href="developers.html" target="_parent">Developers</a> | <li><a href="developers.html" target="_parent">Developers</a> | ||||||
| <li><a href="systems.html" target="_parent">Platforms and Drivers</a> | <li><a href="systems.html" target="_parent">Platforms and Drivers</a> | ||||||
| <li><a href="license.html" target="_parent">License and Copyright</a> | <li><a href="license.html" target="_parent">License & Copyright</a> | ||||||
| <li><a href="faq.html" target="_parent">Frequently Asked Questions</a> | <li><a href="faq.html" target="_parent">FAQ</a> | ||||||
| <li><a href="relnotes.html" target="_parent">Release Notes</a> | <li><a href="relnotes.html" target="_parent">Release Notes</a> | ||||||
| <li><a href="thanks.html" target="_parent">Acknowledgements</a> | <li><a href="thanks.html" target="_parent">Acknowledgements</a> | ||||||
| <li><a href="conform.html" target="_parent">Conformance Testing</a> | <li><a href="conform.html" target="_parent">Conformance Testing</a> | ||||||
|  | <li>more docs below... | ||||||
| </ul> | </ul> | ||||||
|  |  | ||||||
| <h2>Download and Install</h2> | <b>Download / Install</b> | ||||||
| <ul> | <ul> | ||||||
| <li><a href="download.html" target="_parent">Downloading and Unpacking</a> | <li><a href="download.html" target="_parent">Downloading / Unpacking</a> | ||||||
| <li><a href="install.html" target="_parent">Compiling and Installing</a> | <li><a href="install.html" target="_parent">Compiling / Installing</a> | ||||||
|   <ul> |   <ul> | ||||||
|     <li><a href="meson.html" target="_parent">Meson</a></li> |     <li><a href="autoconf.html" target="_parent">Autoconf</a></li> | ||||||
|   </ul> |   </ul> | ||||||
| </li> | </li> | ||||||
| <li><a href="precompiled.html" target="_parent">Precompiled Libraries</a> | <li><a href="precompiled.html" target="_parent">Precompiled Libraries</a> | ||||||
| </ul> | </ul> | ||||||
|  |  | ||||||
| <h2>Need help?</h2> | <b>Resources</b> | ||||||
| <ul> | <ul> | ||||||
| <li><a href="lists.html" target="_parent">Mailing Lists</a> | <li><a href="lists.html" target="_parent">Mailing Lists</a> | ||||||
| <li><a href="bugs.html" target="_parent">Report a bug</a> | <li><a href="bugs.html" target="_parent">Bug Database</a> | ||||||
| <li><a href="webmaster.html" target="_parent">Webmaster</a> | <li><a href="webmaster.html" target="_parent">Webmaster</a> | ||||||
| <li><a href="https://dri.freedesktop.org/" target="_parent">Mesa/DRI Wiki</a> | <li><a href="https://dri.freedesktop.org/" target="_parent">Mesa/DRI Wiki</a> | ||||||
| </ul> | </ul> | ||||||
|  |  | ||||||
| <h2>User Topics</h2> | <b>User Topics</b> | ||||||
| <ul> | <ul> | ||||||
| <li><a href="shading.html" target="_parent">Shading Language</a> | <li><a href="shading.html" target="_parent">Shading Language</a> | ||||||
| <li><a href="egl.html" target="_parent">EGL</a> | <li><a href="egl.html" target="_parent">EGL</a> | ||||||
| <li><a href="opengles.html" target="_parent">OpenGL ES</a> | <li><a href="opengles.html" target="_parent">OpenGL ES</a> | ||||||
| <li><a href="envvars.html" target="_parent">Environment Variables</a> | <li><a href="envvars.html" target="_parent">Environment Variables</a> | ||||||
| <li><a href="osmesa.html" target="_parent">Off-screen Rendering</a> | <li><a href="osmesa.html" target="_parent">Off-Screen Rendering</a> | ||||||
| <li><a href="debugging.html" target="_parent">Debugging Tips</a> | <li><a href="debugging.html" target="_parent">Debugging Tips</a> | ||||||
| <li><a href="perf.html" target="_parent">Performance Tips</a> | <li><a href="perf.html" target="_parent">Performance Tips</a> | ||||||
| <li><a href="extensions.html" target="_parent">Mesa Extensions</a> | <li><a href="extensions.html" target="_parent">Mesa Extensions</a> | ||||||
| <li><a href="llvmpipe.html" target="_parent">Gallium LLVMpipe Driver</a> | <li><a href="mangling.html" target="_parent">GL Function Name Mangling</a> | ||||||
| <li><a href="vmware-guest.html" target="_parent">VMware SVGA3D Guest Driver</a> | <li><a href="llvmpipe.html" target="_parent">Gallium llvmpipe driver</a> | ||||||
| <li><a href="postprocess.html" target="_parent">Gallium Post-processing</a> | <li><a href="vmware-guest.html" target="_parent">VMware SVGA3D guest driver</a> | ||||||
|  | <li><a href="postprocess.html" target="_parent">Gallium post-processing</a> | ||||||
| <li><a href="application-issues.html" target="_parent">Application Issues</a> | <li><a href="application-issues.html" target="_parent">Application Issues</a> | ||||||
| <li><a href="viewperf.html" target="_parent">Viewperf Issues</a> | <li><a href="viewperf.html" target="_parent">Viewperf Issues</a> | ||||||
| </ul> | </ul> | ||||||
|  |  | ||||||
| <h2>Developer Topics</h2> | <b>Developer Topics</b> | ||||||
| <ul> | <ul> | ||||||
| <li><a href="repository.html" target="_parent">Source Code Repository</a> | <li><a href="repository.html" target="_parent">Source Code Repository</a> | ||||||
| <li><a href="sourcetree.html" target="_parent">Source Code Tree</a> | <li><a href="sourcetree.html" target="_parent">Source Code Tree</a> | ||||||
| @@ -84,25 +82,26 @@ | |||||||
| <li><a href="helpwanted.html" target="_parent">Help Wanted</a> | <li><a href="helpwanted.html" target="_parent">Help Wanted</a> | ||||||
| <li><a href="devinfo.html" target="_parent">Development Notes</a> | <li><a href="devinfo.html" target="_parent">Development Notes</a> | ||||||
| <li><a href="codingstyle.html" target="_parent">Coding Style</a> | <li><a href="codingstyle.html" target="_parent">Coding Style</a> | ||||||
| <li><a href="submittingpatches.html" target="_parent">Submitting Patches</a> | <li><a href="submittingpatches.html" target="_parent">Submitting patches</a> | ||||||
| <li><a href="releasing.html" target="_parent">Releasing Process</a> | <li><a href="releasing.html" target="_parent">Releasing process</a> | ||||||
| <li><a href="release-calendar.html" target="_parent">Release Calendar</a> | <li><a href="release-calendar.html" target="_parent">Release calendar</a> | ||||||
| <li><a href="sourcedocs.html" target="_parent">Source Documentation</a> | <li><a href="sourcedocs.html" target="_parent">Source Documentation</a> | ||||||
| <li><a href="dispatch.html" target="_parent">GL Dispatch</a> | <li><a href="dispatch.html" target="_parent">GL Dispatch</a> | ||||||
| </ul> | </ul> | ||||||
|  |  | ||||||
| <h2>Links</h2> | <b>Links</b> | ||||||
| <ul> | <ul> | ||||||
| <li><a href="https://www.opengl.org" target="_parent">OpenGL Website</a> | <li><a href="https://www.opengl.org" target="_parent">OpenGL website</a> | ||||||
| <li><a href="https://dri.freedesktop.org" target="_parent">DRI Website</a> | <li><a href="https://dri.freedesktop.org" target="_parent">DRI website</a> | ||||||
| <li><a href="https://www.freedesktop.org" target="_parent">freedesktop.org</a> | <li><a href="https://www.freedesktop.org" target="_parent">freedesktop.org</a> | ||||||
| <li><a href="https://planet.freedesktop.org" target="_parent">Developer Blogs</a> | <li><a href="https://planet.freedesktop.org" target="_parent">Developer blogs</a> | ||||||
| </ul> | </ul> | ||||||
|  |  | ||||||
| <h2>Hosted by:</h2> | <b>Hosted by:</b> | ||||||
| <dl> | <br> | ||||||
| <dd><a href="https://www.freedesktop.org" target="_parent">freedesktop.org</a> | <blockquote> | ||||||
| </dl> | <a href="https://freedesktop.org" target="_parent">freedesktop.org</a> | ||||||
|  | </blockquote> | ||||||
|  |  | ||||||
| </body> | </body> | ||||||
| </html> | </html> | ||||||
|   | |||||||
| @@ -8,7 +8,7 @@ | |||||||
| <body> | <body> | ||||||
|  |  | ||||||
| <div class="header"> | <div class="header"> | ||||||
|   The Mesa 3D Graphics Library |   <h1>The Mesa 3D Graphics Library</h1> | ||||||
| </div> | </div> | ||||||
|  |  | ||||||
| <iframe src="contents.html"></iframe> | <iframe src="contents.html"></iframe> | ||||||
| @@ -20,22 +20,26 @@ | |||||||
|    Normally Mesa (and OpenGL) records but does not notify the user of |    Normally Mesa (and OpenGL) records but does not notify the user of | ||||||
|    errors.  It is up to the application to call |    errors.  It is up to the application to call | ||||||
|    <code>glGetError</code> to check for errors.  Mesa supports an |    <code>glGetError</code> to check for errors.  Mesa supports an | ||||||
|    environment variable, <code>MESA_DEBUG</code>, to help with debugging.  If |    environment variable, MESA_DEBUG, to help with debugging.  If | ||||||
|    <code>MESA_DEBUG</code> is defined, a message will be printed to stdout |    MESA_DEBUG is defined, a message will be printed to stdout whenever | ||||||
|    whenever an error occurs. |    an error occurs. | ||||||
| </p> | </p> | ||||||
|  |  | ||||||
| <p> | <p> | ||||||
|    More extensive error checking is done in DEBUG builds |    More extensive error checking is done when Mesa is compiled with the | ||||||
|    (<code>--buildtype debug</code> for meson, <code>build=debug</code> for scons). |    DEBUG symbol defined.  You'll have to edit the Make-config file and | ||||||
|  |    add -DDEBUG to the CFLAGS line for your system configuration.  You may | ||||||
|  |    also want to replace any optimization flags with the -g flag so you can | ||||||
|  |    use your debugger.  After you've edited Make-config type 'make clean' | ||||||
|  |    before recompiling. | ||||||
| </p> | </p> | ||||||
| <p> | <p> | ||||||
|    In your debugger you can set a breakpoint in <code>_mesa_error()</code> to trap |    In your debugger you can set a breakpoint in _mesa_error() to trap Mesa | ||||||
|    Mesa errors. |    errors. | ||||||
| </p> | </p> | ||||||
| <p> | <p> | ||||||
|    There is a display list printing/debugging facility.  See the end of |    There is a display list printing/debugging facility.  See the end of | ||||||
|    <code>src/dlist.c</code> for details. |    src/dlist.c for details. | ||||||
| </p> | </p> | ||||||
|  |  | ||||||
| </div> | </div> | ||||||
|   | |||||||
| @@ -8,7 +8,7 @@ | |||||||
| <body> | <body> | ||||||
|  |  | ||||||
| <div class="header"> | <div class="header"> | ||||||
|   The Mesa 3D Graphics Library |   <h1>The Mesa 3D Graphics Library</h1> | ||||||
| </div> | </div> | ||||||
|  |  | ||||||
| <iframe src="contents.html"></iframe> | <iframe src="contents.html"></iframe> | ||||||
|   | |||||||
| @@ -8,7 +8,7 @@ | |||||||
| <body> | <body> | ||||||
|  |  | ||||||
| <div class="header"> | <div class="header"> | ||||||
|   The Mesa 3D Graphics Library |   <h1>The Mesa 3D Graphics Library</h1> | ||||||
| </div> | </div> | ||||||
|  |  | ||||||
| <iframe src="contents.html"></iframe> | <iframe src="contents.html"></iframe> | ||||||
| @@ -25,12 +25,11 @@ | |||||||
|  |  | ||||||
| <p> | <p> | ||||||
| To add a new GL extension to Mesa you have to do at least the following. | To add a new GL extension to Mesa you have to do at least the following. | ||||||
| </p> |  | ||||||
|  |  | ||||||
| <ul> | <ul> | ||||||
| <li> | <li> | ||||||
|    If <code>glext.h</code> doesn't define the extension, edit |    If glext.h doesn't define the extension, edit include/GL/gl.h and add | ||||||
|    <code>include/GL/gl.h</code> and add code like this: |    code like this: | ||||||
|    <pre> |    <pre> | ||||||
|      #ifndef GL_EXT_the_extension_name |      #ifndef GL_EXT_the_extension_name | ||||||
|      #define GL_EXT_the_extension_name 1 |      #define GL_EXT_the_extension_name 1 | ||||||
| @@ -41,18 +40,18 @@ To add a new GL extension to Mesa you have to do at least the following. | |||||||
|    </pre> |    </pre> | ||||||
| </li> | </li> | ||||||
| <li> | <li> | ||||||
|    In the <code>src/mapi/glapi/gen/</code> directory, add the new extension |    In the src/mapi/glapi/gen/ directory, add the new extension functions and | ||||||
|    functions and enums to the <code>gl_API.xml</code> file. |    enums to the gl_API.xml file. | ||||||
|    Then, a bunch of source files must be regenerated by executing the |    Then, a bunch of source files must be regenerated by executing the | ||||||
|    corresponding Python scripts. |    corresponding Python scripts. | ||||||
| </li> | </li> | ||||||
| <li> | <li> | ||||||
|    Add a new entry to the <code>gl_extensions</code> struct in |    Add a new entry to the <code>gl_extensions</code> struct in mtypes.h | ||||||
|    <code>mtypes.h</code> if the extension requires driver capabilities not |    if the extension requires driver capabilities not already exposed by | ||||||
|    already exposed by another extension. |    another extension. | ||||||
| </li> | </li> | ||||||
| <li> | <li> | ||||||
|    Add a new entry to the <code>src/mesa/main/extensions_table.h</code> file. |    Add a new entry to the src/mesa/main/extensions_table.h file. | ||||||
| </li> | </li> | ||||||
| <li> | <li> | ||||||
|    From this point, the best way to proceed is to find another extension, |    From this point, the best way to proceed is to find another extension, | ||||||
| @@ -60,22 +59,21 @@ To add a new GL extension to Mesa you have to do at least the following. | |||||||
|    as an example. |    as an example. | ||||||
| </li> | </li> | ||||||
| <li> | <li> | ||||||
|    If the new extension adds new GL state, the functions in |    If the new extension adds new GL state, the functions in get.c, enable.c | ||||||
|    <code>get.c</code>, <code>enable.c</code> and <code>attrib.c</code> |    and attrib.c will most likely require new code. | ||||||
|    will most likely require new code. |  | ||||||
| </li> | </li> | ||||||
| <li> | <li> | ||||||
|    To determine if the new extension is active in the current context, |    To determine if the new extension is active in the current context, | ||||||
|    use the auto-generated <code>_mesa_has_##name_str()</code> function |    use the auto-generated _mesa_has_##name_str() function defined in | ||||||
|    defined in <code>src/mesa/main/extensions.h</code>. |    src/mesa/main/extensions.h. | ||||||
| </li> | </li> | ||||||
| <li> | <li> | ||||||
|    The dispatch tests <code>check_table.cpp</code> and |    The dispatch tests check_table.cpp and dispatch_sanity.cpp | ||||||
|    <code>dispatch_sanity.cpp</code> should be updated with details about |    should be updated with details about the new extensions functions. These | ||||||
|    the new extensions functions. These tests are run using |    tests are run using 'make check' | ||||||
|    <code>meson test</code>. |  | ||||||
| </li> | </li> | ||||||
| </ul> | </ul> | ||||||
|  | </p> | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|   | |||||||
| @@ -2,19 +2,19 @@ | |||||||
| <html lang="en"> | <html lang="en"> | ||||||
| <head> | <head> | ||||||
|   <meta http-equiv="content-type" content="text/html; charset=utf-8"> |   <meta http-equiv="content-type" content="text/html; charset=utf-8"> | ||||||
|   <title>GL Dispatch</title> |   <title>GL Dispatch in Mesa</title> | ||||||
|   <link rel="stylesheet" type="text/css" href="mesa.css"> |   <link rel="stylesheet" type="text/css" href="mesa.css"> | ||||||
| </head> | </head> | ||||||
| <body> | <body> | ||||||
|  |  | ||||||
| <div class="header"> | <div class="header"> | ||||||
|   The Mesa 3D Graphics Library |   <h1>The Mesa 3D Graphics Library</h1> | ||||||
| </div> | </div> | ||||||
|  |  | ||||||
| <iframe src="contents.html"></iframe> | <iframe src="contents.html"></iframe> | ||||||
| <div class="content"> | <div class="content"> | ||||||
|  |  | ||||||
| <h1>GL Dispatch</h1> | <h1>GL Dispatch in Mesa</h1> | ||||||
|  |  | ||||||
| <p>Several factors combine to make efficient dispatch of OpenGL functions | <p>Several factors combine to make efficient dispatch of OpenGL functions | ||||||
| fairly complicated.  This document attempts to explain some of the issues | fairly complicated.  This document attempts to explain some of the issues | ||||||
| @@ -30,28 +30,28 @@ of the GL related state for the application.  Every texture, every buffer | |||||||
| object, every enable, and much, much more is stored in the context.  Since | object, every enable, and much, much more is stored in the context.  Since | ||||||
| an application can have more than one context, the context to be used is | an application can have more than one context, the context to be used is | ||||||
| selected by a window-system dependent function such as | selected by a window-system dependent function such as | ||||||
| <code>glXMakeContextCurrent</code>.</p> | <tt>glXMakeContextCurrent</tt>.</p> | ||||||
|  |  | ||||||
| <p>In environments that implement OpenGL with X-Windows using GLX, every GL | <p>In environments that implement OpenGL with X-Windows using GLX, every GL | ||||||
| function, including the pointers returned by <code>glXGetProcAddress</code>, are | function, including the pointers returned by <tt>glXGetProcAddress</tt>, are | ||||||
| <em>context independent</em>.  This means that no matter what context is | <em>context independent</em>.  This means that no matter what context is | ||||||
| currently active, the same <code>glVertex3fv</code> function is used.</p> | currently active, the same <tt>glVertex3fv</tt> function is used.</p> | ||||||
|  |  | ||||||
| <p>This creates the first bit of dispatch complexity.  An application can | <p>This creates the first bit of dispatch complexity.  An application can | ||||||
| have two GL contexts.  One context is a direct rendering context where | have two GL contexts.  One context is a direct rendering context where | ||||||
| function calls are routed directly to a driver loaded within the | function calls are routed directly to a driver loaded within the | ||||||
| application's address space.  The other context is an indirect rendering | application's address space.  The other context is an indirect rendering | ||||||
| context where function calls are converted to GLX protocol and sent to a | context where function calls are converted to GLX protocol and sent to a | ||||||
| server.  The same <code>glVertex3fv</code> has to do the right thing depending | server.  The same <tt>glVertex3fv</tt> has to do the right thing depending | ||||||
| on which context is current.</p> | on which context is current.</p> | ||||||
|  |  | ||||||
| <p>Highly optimized drivers or GLX protocol implementations may want to | <p>Highly optimized drivers or GLX protocol implementations may want to | ||||||
| change the behavior of GL functions depending on current state.  For | change the behavior of GL functions depending on current state.  For | ||||||
| example, <code>glFogCoordf</code> may operate differently depending on whether | example, <tt>glFogCoordf</tt> may operate differently depending on whether | ||||||
| or not fog is enabled.</p> | or not fog is enabled.</p> | ||||||
|  |  | ||||||
| <p>In multi-threaded environments, it is possible for each thread to have a | <p>In multi-threaded environments, it is possible for each thread to have a | ||||||
| different GL context current.  This means that poor old <code>glVertex3fv</code> | different GL context current.  This means that poor old <tt>glVertex3fv</tt> | ||||||
| has to know which GL context is current in the thread where it is being | has to know which GL context is current in the thread where it is being | ||||||
| called.</p> | called.</p> | ||||||
|  |  | ||||||
| @@ -64,18 +64,18 @@ dispatch table stores pointers to functions that actually implement | |||||||
| specific GL functions.  Each time a new context is made current in a thread, | specific GL functions.  Each time a new context is made current in a thread, | ||||||
| these pointers a updated.</p> | these pointers a updated.</p> | ||||||
|  |  | ||||||
| <p>The implementation of functions such as <code>glVertex3fv</code> becomes | <p>The implementation of functions such as <tt>glVertex3fv</tt> becomes | ||||||
| conceptually simple:</p> | conceptually simple:</p> | ||||||
|  |  | ||||||
| <ul> | <ul> | ||||||
| <li>Fetch the current dispatch table pointer.</li> | <li>Fetch the current dispatch table pointer.</li> | ||||||
| <li>Fetch the pointer to the real <code>glVertex3fv</code> function from the | <li>Fetch the pointer to the real <tt>glVertex3fv</tt> function from the | ||||||
| table.</li> | table.</li> | ||||||
| <li>Call the real function.</li> | <li>Call the real function.</li> | ||||||
| </ul> | </ul> | ||||||
|  |  | ||||||
| <p>This can be implemented in just a few lines of C code.  The file | <p>This can be implemented in just a few lines of C code.  The file | ||||||
| <code>src/mesa/glapi/glapitemp.h</code> contains code very similar to this.</p> | <tt>src/mesa/glapi/glapitemp.h</tt> contains code very similar to this.</p> | ||||||
|  |  | ||||||
| <blockquote> | <blockquote> | ||||||
| <table border="1"> | <table border="1"> | ||||||
| @@ -93,9 +93,9 @@ void glVertex3f(GLfloat x, GLfloat y, GLfloat z) | |||||||
| overhead that it adds to every GL function call.</p> | overhead that it adds to every GL function call.</p> | ||||||
|  |  | ||||||
| <p>In a multithreaded environment, a naive implementation of | <p>In a multithreaded environment, a naive implementation of | ||||||
| <code>GET_DISPATCH</code> involves a call to <code>pthread_getspecific</code> or a | <tt>GET_DISPATCH</tt> involves a call to <tt>pthread_getspecific</tt> or a | ||||||
| similar function.  Mesa provides a wrapper function called | similar function.  Mesa provides a wrapper function called | ||||||
| <code>_glapi_get_dispatch</code> that is used by default.</p> | <tt>_glapi_get_dispatch</tt> that is used by default.</p> | ||||||
|  |  | ||||||
| <h2>3. Optimizations</h2> | <h2>3. Optimizations</h2> | ||||||
|  |  | ||||||
| @@ -109,7 +109,7 @@ each can or cannot be used are listed.</p> | |||||||
| <p>The vast majority of OpenGL applications use the API in a single threaded | <p>The vast majority of OpenGL applications use the API in a single threaded | ||||||
| manner.  That is, the application has only one thread that makes calls into | manner.  That is, the application has only one thread that makes calls into | ||||||
| the GL.  In these cases, not only do the calls to | the GL.  In these cases, not only do the calls to | ||||||
| <code>pthread_getspecific</code> hurt performance, but they are completely | <tt>pthread_getspecific</tt> hurt performance, but they are completely | ||||||
| unnecessary!  It is possible to detect this common case and avoid these | unnecessary!  It is possible to detect this common case and avoid these | ||||||
| calls.</p> | calls.</p> | ||||||
|  |  | ||||||
| @@ -118,15 +118,15 @@ of the executing thread.  If the same thread ID is always seen, Mesa knows | |||||||
| that the application is, from OpenGL's point of view, single threaded.</p> | that the application is, from OpenGL's point of view, single threaded.</p> | ||||||
|  |  | ||||||
| <p>As long as an application is single threaded, Mesa stores a pointer to | <p>As long as an application is single threaded, Mesa stores a pointer to | ||||||
| the dispatch table in a global variable called <code>_glapi_Dispatch</code>. | the dispatch table in a global variable called <tt>_glapi_Dispatch</tt>. | ||||||
| The pointer is also stored in a per-thread location via | The pointer is also stored in a per-thread location via | ||||||
| <code>pthread_setspecific</code>.  When Mesa detects that an application has | <tt>pthread_setspecific</tt>.  When Mesa detects that an application has | ||||||
| become multithreaded, <code>NULL</code> is stored in <code>_glapi_Dispatch</code>.</p> | become multithreaded, <tt>NULL</tt> is stored in <tt>_glapi_Dispatch</tt>.</p> | ||||||
|  |  | ||||||
| <p>Using this simple mechanism the dispatch functions can detect the | <p>Using this simple mechanism the dispatch functions can detect the | ||||||
| multithreaded case by comparing <code>_glapi_Dispatch</code> to <code>NULL</code>. | multithreaded case by comparing <tt>_glapi_Dispatch</tt> to <tt>NULL</tt>. | ||||||
| The resulting implementation of <code>GET_DISPATCH</code> is slightly more | The resulting implementation of <tt>GET_DISPATCH</tt> is slightly more | ||||||
| complex, but it avoids the expensive <code>pthread_getspecific</code> call in | complex, but it avoids the expensive <tt>pthread_getspecific</tt> call in | ||||||
| the common case.</p> | the common case.</p> | ||||||
|  |  | ||||||
| <blockquote> | <blockquote> | ||||||
| @@ -134,9 +134,9 @@ the common case.</p> | |||||||
| <tr><td><pre> | <tr><td><pre> | ||||||
| #define GET_DISPATCH() \ | #define GET_DISPATCH() \ | ||||||
|     (_glapi_Dispatch != NULL) \ |     (_glapi_Dispatch != NULL) \ | ||||||
|         ? _glapi_Dispatch : pthread_getspecific(&_glapi_Dispatch_key) |         ? _glapi_Dispatch : pthread_getspecific(&_glapi_Dispatch_key) | ||||||
| </pre></td></tr> | </pre></td></tr> | ||||||
| <tr><td>Improved <code>GET_DISPATCH</code> Implementation</td></tr></table> | <tr><td>Improved <tt>GET_DISPATCH</tt> Implementation</td></tr></table> | ||||||
| </blockquote> | </blockquote> | ||||||
|  |  | ||||||
| <h3>3.2. ELF TLS</h3> | <h3>3.2. ELF TLS</h3> | ||||||
| @@ -144,14 +144,14 @@ the common case.</p> | |||||||
| <p>Starting with the 2.4.20 Linux kernel, each thread is allocated an area | <p>Starting with the 2.4.20 Linux kernel, each thread is allocated an area | ||||||
| of per-thread, global storage.  Variables can be put in this area using some | of per-thread, global storage.  Variables can be put in this area using some | ||||||
| extensions to GCC.  By storing the dispatch table pointer in this area, the | extensions to GCC.  By storing the dispatch table pointer in this area, the | ||||||
| expensive call to <code>pthread_getspecific</code> and the test of | expensive call to <tt>pthread_getspecific</tt> and the test of | ||||||
| <code>_glapi_Dispatch</code> can be avoided.</p> | <tt>_glapi_Dispatch</tt> can be avoided.</p> | ||||||
|  |  | ||||||
| <p>The dispatch table pointer is stored in a new variable called | <p>The dispatch table pointer is stored in a new variable called | ||||||
| <code>_glapi_tls_Dispatch</code>.  A new variable name is used so that a single | <tt>_glapi_tls_Dispatch</tt>.  A new variable name is used so that a single | ||||||
| libGL can implement both interfaces.  This allows the libGL to operate with | libGL can implement both interfaces.  This allows the libGL to operate with | ||||||
| direct rendering drivers that use either interface.  Once the pointer is | direct rendering drivers that use either interface.  Once the pointer is | ||||||
| properly declared, <code>GET_DISPACH</code> becomes a simple variable | properly declared, <tt>GET_DISPACH</tt> becomes a simple variable | ||||||
| reference.</p> | reference.</p> | ||||||
|  |  | ||||||
| <blockquote> | <blockquote> | ||||||
| @@ -162,12 +162,12 @@ extern __thread struct _glapi_table *_glapi_tls_Dispatch | |||||||
|  |  | ||||||
| #define GET_DISPATCH() _glapi_tls_Dispatch | #define GET_DISPATCH() _glapi_tls_Dispatch | ||||||
| </pre></td></tr> | </pre></td></tr> | ||||||
| <tr><td>TLS <code>GET_DISPATCH</code> Implementation</td></tr></table> | <tr><td>TLS <tt>GET_DISPATCH</tt> Implementation</td></tr></table> | ||||||
| </blockquote> | </blockquote> | ||||||
|  |  | ||||||
| <p>Use of this path is controlled by the preprocessor define | <p>Use of this path is controlled by the preprocessor define | ||||||
| <code>USE_ELF_TLS</code>.  Any platform capable of using ELF TLS should use this | <tt>GLX_USE_TLS</tt>.  Any platform capable of using TLS should use this as | ||||||
| as the default dispatch method.</p> | the default dispatch method.</p> | ||||||
|  |  | ||||||
| <h3>3.3. Assembly Language Dispatch Stubs</h3> | <h3>3.3. Assembly Language Dispatch Stubs</h3> | ||||||
|  |  | ||||||
| @@ -185,13 +185,13 @@ ways that the dispatch table pointer can be accessed.  There are four | |||||||
| different methods that can be used:</p> | different methods that can be used:</p> | ||||||
|  |  | ||||||
| <ol> | <ol> | ||||||
| <li>Using <code>_glapi_Dispatch</code> directly in builds for non-multithreaded | <li>Using <tt>_glapi_Dispatch</tt> directly in builds for non-multithreaded | ||||||
| environments.</li> | environments.</li> | ||||||
| <li>Using <code>_glapi_Dispatch</code> and <code>_glapi_get_dispatch</code> in | <li>Using <tt>_glapi_Dispatch</tt> and <tt>_glapi_get_dispatch</tt> in | ||||||
| multithreaded environments.</li> | multithreaded environments.</li> | ||||||
| <li>Using <code>_glapi_Dispatch</code> and <code>pthread_getspecific</code> in | <li>Using <tt>_glapi_Dispatch</tt> and <tt>pthread_getspecific</tt> in | ||||||
| multithreaded environments.</li> | multithreaded environments.</li> | ||||||
| <li>Using <code>_glapi_tls_Dispatch</code> directly in TLS enabled | <li>Using <tt>_glapi_tls_Dispatch</tt> directly in TLS enabled | ||||||
| multithreaded environments.</li> | multithreaded environments.</li> | ||||||
| </ol> | </ol> | ||||||
|  |  | ||||||
| @@ -204,13 +204,13 @@ terribly relevant.</p> | |||||||
| few preprocessor defines.</p> | few preprocessor defines.</p> | ||||||
|  |  | ||||||
| <ul> | <ul> | ||||||
| <li>If <code>USE_ELF_TLS</code> is defined, method #3 is used.</li> | <li>If <tt>GLX_USE_TLS</tt> is defined, method #3 is used.</li> | ||||||
| <li>If <code>HAVE_PTHREAD</code> is defined, method #2 is used.</li> | <li>If <tt>HAVE_PTHREAD</tt> is defined, method #2 is used.</li> | ||||||
| <li>If none of the preceding are defined, method #1 is used.</li> | <li>If none of the preceding are defined, method #1 is used.</li> | ||||||
| </ul> | </ul> | ||||||
|  |  | ||||||
| <p>Two different techniques are used to handle the various different cases. | <p>Two different techniques are used to handle the various different cases. | ||||||
| On x86 and SPARC, a macro called <code>GL_STUB</code> is used.  In the preamble | On x86 and SPARC, a macro called <tt>GL_STUB</tt> is used.  In the preamble | ||||||
| of the assembly source file different implementations of the macro are | of the assembly source file different implementations of the macro are | ||||||
| selected based on the defined preprocessor variables.  The assembly code | selected based on the defined preprocessor variables.  The assembly code | ||||||
| then consists of a series of invocations of the macros such as: | then consists of a series of invocations of the macros such as: | ||||||
| @@ -220,7 +220,7 @@ then consists of a series of invocations of the macros such as: | |||||||
| <tr><td><pre> | <tr><td><pre> | ||||||
| GL_STUB(Color3fv, _gloffset_Color3fv) | GL_STUB(Color3fv, _gloffset_Color3fv) | ||||||
| </pre></td></tr> | </pre></td></tr> | ||||||
| <tr><td>SPARC Assembly Implementation of <code>glColor3fv</code></td></tr></table> | <tr><td>SPARC Assembly Implementation of <tt>glColor3fv</tt></td></tr></table> | ||||||
| </blockquote> | </blockquote> | ||||||
|  |  | ||||||
| <p>The benefit of this technique is that changes to the calling pattern | <p>The benefit of this technique is that changes to the calling pattern | ||||||
| @@ -231,32 +231,32 @@ changed lines in the assembly code.</p> | |||||||
| implementation does not change based on the parameters passed to the | implementation does not change based on the parameters passed to the | ||||||
| function.  For example, since x86 passes all parameters on the stack, no | function.  For example, since x86 passes all parameters on the stack, no | ||||||
| additional code is needed to save and restore function parameters around a | additional code is needed to save and restore function parameters around a | ||||||
| call to <code>pthread_getspecific</code>.  Since x86-64 passes parameters in | call to <tt>pthread_getspecific</tt>.  Since x86-64 passes parameters in | ||||||
| registers, varying amounts of code needs to be inserted around the call to | registers, varying amounts of code needs to be inserted around the call to | ||||||
| <code>pthread_getspecific</code> to save and restore the GL function's | <tt>pthread_getspecific</tt> to save and restore the GL function's | ||||||
| parameters.</p> | parameters.</p> | ||||||
|  |  | ||||||
| <p>The other technique, used by platforms like x86-64 that cannot use the | <p>The other technique, used by platforms like x86-64 that cannot use the | ||||||
| first technique, is to insert <code>#ifdef</code> within the assembly | first technique, is to insert <tt>#ifdef</tt> within the assembly | ||||||
| implementation of each function.  This makes the assembly file considerably | implementation of each function.  This makes the assembly file considerably | ||||||
| larger (e.g., 29,332 lines for <code>glapi_x86-64.S</code> versus 1,155 lines for | larger (e.g., 29,332 lines for <tt>glapi_x86-64.S</tt> versus 1,155 lines for | ||||||
| <code>glapi_x86.S</code>) and causes simple changes to the function | <tt>glapi_x86.S</tt>) and causes simple changes to the function | ||||||
| implementation to generate many lines of diffs.  Since the assembly files | implementation to generate many lines of diffs.  Since the assembly files | ||||||
| are typically generated by scripts (see <a href="#autogen">below</a>), this | are typically generated by scripts (see <a href="#autogen">below</a>), this | ||||||
| isn't a significant problem.</p> | isn't a significant problem.</p> | ||||||
|  |  | ||||||
| <p>Once a new assembly file is created, it must be inserted in the build | <p>Once a new assembly file is created, it must be inserted in the build | ||||||
| system.  There are two steps to this.  The file must first be added to | system.  There are two steps to this.  The file must first be added to | ||||||
| <code>src/mesa/sources</code>.  That gets the file built and linked.  The second | <tt>src/mesa/sources</tt>.  That gets the file built and linked.  The second | ||||||
| step is to add the correct <code>#ifdef</code> magic to | step is to add the correct <tt>#ifdef</tt> magic to | ||||||
| <code>src/mesa/glapi/glapi_dispatch.c</code> to prevent the C version of the | <tt>src/mesa/glapi/glapi_dispatch.c</tt> to prevent the C version of the | ||||||
| dispatch functions from being built.</p> | dispatch functions from being built.</p> | ||||||
|  |  | ||||||
| <h3 id="fixedsize">3.4. Fixed-Length Dispatch Stubs</h3> | <h3 id="fixedsize">3.4. Fixed-Length Dispatch Stubs</h3> | ||||||
|  |  | ||||||
| <p>To implement <code>glXGetProcAddress</code>, Mesa stores a table that | <p>To implement <tt>glXGetProcAddress</tt>, Mesa stores a table that | ||||||
| associates function names with pointers to those functions.  This table is | associates function names with pointers to those functions.  This table is | ||||||
| stored in <code>src/mesa/glapi/glprocs.h</code>.  For different reasons on | stored in <tt>src/mesa/glapi/glprocs.h</tt>.  For different reasons on | ||||||
| different platforms, storing all of those pointers is inefficient.  On most | different platforms, storing all of those pointers is inefficient.  On most | ||||||
| platforms, including all known platforms that support TLS, we can avoid this | platforms, including all known platforms that support TLS, we can avoid this | ||||||
| added overhead.</p> | added overhead.</p> | ||||||
| @@ -267,8 +267,8 @@ calculated by multiplying the size of the dispatch stub by the offset of the | |||||||
| function in the table.  This value is then added to the address of the first | function in the table.  This value is then added to the address of the first | ||||||
| dispatch stub.</p> | dispatch stub.</p> | ||||||
|  |  | ||||||
| <p>This path is activated by adding the correct <code>#ifdef</code> magic to | <p>This path is activated by adding the correct <tt>#ifdef</tt> magic to | ||||||
| <code>src/mesa/glapi/glapi.c</code> just before <code>glprocs.h</code> is | <tt>src/mesa/glapi/glapi.c</tt> just before <tt>glprocs.h</tt> is | ||||||
| included.</p> | included.</p> | ||||||
|  |  | ||||||
| <h2 id="autogen">4. Automatic Generation of Dispatch Stubs</h2> | <h2 id="autogen">4. Automatic Generation of Dispatch Stubs</h2> | ||||||
|   | |||||||
| @@ -2,21 +2,19 @@ | |||||||
| <html lang="en"> | <html lang="en"> | ||||||
| <head> | <head> | ||||||
|   <meta http-equiv="content-type" content="text/html; charset=utf-8"> |   <meta http-equiv="content-type" content="text/html; charset=utf-8"> | ||||||
|   <title>Downloading and Unpacking</title> |   <title>Getting Mesa</title> | ||||||
|   <link rel="stylesheet" type="text/css" href="mesa.css"> |   <link rel="stylesheet" type="text/css" href="mesa.css"> | ||||||
| </head> | </head> | ||||||
| <body> | <body> | ||||||
|  |  | ||||||
| <div class="header"> | <div class="header"> | ||||||
|   The Mesa 3D Graphics Library |   <h1>The Mesa 3D Graphics Library</h1> | ||||||
| </div> | </div> | ||||||
|  |  | ||||||
| <iframe src="contents.html"></iframe> | <iframe src="contents.html"></iframe> | ||||||
| <div class="content"> | <div class="content"> | ||||||
|  |  | ||||||
| <h1>Downloading and Unpacking</h1> | <h1>Downloading</h1> | ||||||
|  |  | ||||||
| <h2>Downloading</h2> |  | ||||||
|  |  | ||||||
| <p> | <p> | ||||||
| Primary Mesa download site: | Primary Mesa download site: | ||||||
| @@ -27,38 +25,54 @@ or <a href="https://mesa.freedesktop.org/archive/">mesa.freedesktop.org</a> | |||||||
|  |  | ||||||
| <p> | <p> | ||||||
| Starting with the first release of 2017, Mesa's version scheme is | Starting with the first release of 2017, Mesa's version scheme is | ||||||
| year-based. Filenames are in the form <code>mesa-Y.N.P.tar.gz</code>, where | year-based. Filenames are in the form <tt>mesa-Y.N.P.tar.gz</tt>, where | ||||||
| <code>Y</code> is the year (two digits), <code>N</code> is an incremental number | <tt>Y</tt> is the year (two digits), <tt>N</tt> is an incremental number | ||||||
| (starting at 0) and <code>P</code> is the patch number (0 for the first | (starting at 0) and <tt>P</tt> is the patch number (0 for the first | ||||||
| release, 1 for the first patch after that). | release, 1 for the first patch after that). | ||||||
| </p> | </p> | ||||||
|  |  | ||||||
| <p> | <p> | ||||||
| When a new release is coming, release candidates (betas) may be found | When a new release is coming, release candidates (betas) may be found | ||||||
| in the same directory, and are recognisable by the | in the same directory, and are recognisable by the | ||||||
| <code>mesa-Y.N.P-<b>rc</b>X.tar.gz</code> filename. | <tt>mesa-Y.N.P-<b>rc</b>X.tar.gz</tt> filename. | ||||||
| </p> | </p> | ||||||
|  |  | ||||||
|  |  | ||||||
| <h2>Unpacking</h2> | <h1>Unpacking</h1> | ||||||
|  |  | ||||||
| <p> | <p> | ||||||
| Mesa releases are available in two formats: <code>.tar.xz</code> and <code>.tar.gz</code>. | Mesa releases are available in two formats: <tt>.tar.xz</tt> and <tt>.tar.gz</tt>. | ||||||
| </p> | </p> | ||||||
|  |  | ||||||
| <p> | <p> | ||||||
| To unpack the tarball: | To unpack the tarball: | ||||||
| </p> |  | ||||||
| <pre> | <pre> | ||||||
| 	tar xf mesa-Y.N.P.tar.xz | 	tar xf mesa-Y.N.P.tar.xz | ||||||
| </pre> | </pre> | ||||||
| <p>or</p> | or | ||||||
| <pre> | <pre> | ||||||
| 	tar xf mesa-Y.N.P.tar.gz | 	tar xf mesa-Y.N.P.tar.gz | ||||||
| </pre> | </pre> | ||||||
|  | </p> | ||||||
|  |  | ||||||
|  |  | ||||||
| <h2>Contents</h2> | <h1>Contents</h1> | ||||||
|  |  | ||||||
|  | <p> | ||||||
|  | After unpacking you'll have these files and directories (among others): | ||||||
|  | </p> | ||||||
|  | <pre> | ||||||
|  | autogen.sh	- Autoconf script for *nix systems | ||||||
|  | scons/		- SCons script for Windows builds | ||||||
|  | include/	- GL header (include) files | ||||||
|  | bin/		- shell scripts for making shared libraries, etc | ||||||
|  | docs/		- documentation | ||||||
|  | src/		- source code for libraries | ||||||
|  | src/mesa	- sources for the main Mesa library and device drivers | ||||||
|  | src/gallium     - sources for Gallium and Gallium drivers | ||||||
|  | src/glx		- sources for building libGL with full GLX and DRI support | ||||||
|  | </pre> | ||||||
|  |  | ||||||
|  |  | ||||||
| <p> | <p> | ||||||
| Proceed to the <a href="install.html">compilation and installation | Proceed to the <a href="install.html">compilation and installation | ||||||
| @@ -66,7 +80,7 @@ instructions</a>. | |||||||
| </p> | </p> | ||||||
|  |  | ||||||
|  |  | ||||||
| <h2>Demos, GLUT, and GLU</h2> | <h1>Demos, GLUT, and GLU</h1> | ||||||
|  |  | ||||||
| <p> | <p> | ||||||
| A package of SGI's GLU library is available | A package of SGI's GLU library is available | ||||||
| @@ -88,9 +102,9 @@ In the past, GLUT, GLU and the Mesa demos were released in conjunction with | |||||||
| Mesa releases.  But since GLUT, GLU and the demos change infrequently, they | Mesa releases.  But since GLUT, GLU and the demos change infrequently, they | ||||||
| were split off into their own git repositories: | were split off into their own git repositories: | ||||||
|  |  | ||||||
| <a href="https://gitlab.freedesktop.org/mesa/glut">GLUT</a>, | <a href="https://cgit.freedesktop.org/mesa/glut/">GLUT</a>, | ||||||
| <a href="https://gitlab.freedesktop.org/mesa/glu">GLU</a> and | <a href="https://cgit.freedesktop.org/mesa/glu/">GLU</a> and | ||||||
| <a href="https://gitlab.freedesktop.org/mesa/demos">Demos</a>, | <a href="https://cgit.freedesktop.org/mesa/demos/">Demos</a>, | ||||||
| </p> | </p> | ||||||
|  |  | ||||||
| </div> | </div> | ||||||
|   | |||||||
| @@ -2,19 +2,19 @@ | |||||||
| <html lang="en"> | <html lang="en"> | ||||||
| <head> | <head> | ||||||
|   <meta http-equiv="content-type" content="text/html; charset=utf-8"> |   <meta http-equiv="content-type" content="text/html; charset=utf-8"> | ||||||
|   <title>EGL</title> |   <title>Mesa EGL</title> | ||||||
|   <link rel="stylesheet" type="text/css" href="mesa.css"> |   <link rel="stylesheet" type="text/css" href="mesa.css"> | ||||||
| </head> | </head> | ||||||
| <body> | <body> | ||||||
|  |  | ||||||
| <div class="header"> | <div class="header"> | ||||||
|   The Mesa 3D Graphics Library |   <h1>The Mesa 3D Graphics Library</h1> | ||||||
| </div> | </div> | ||||||
|  |  | ||||||
| <iframe src="contents.html"></iframe> | <iframe src="contents.html"></iframe> | ||||||
| <div class="content"> | <div class="content"> | ||||||
|  |  | ||||||
| <h1>EGL</h1> | <h1>Mesa EGL</h1> | ||||||
|  |  | ||||||
| <p>The current version of EGL in Mesa implements EGL 1.4.  More information | <p>The current version of EGL in Mesa implements EGL 1.4.  More information | ||||||
| about EGL can be found at | about EGL can be found at | ||||||
| @@ -33,16 +33,13 @@ directly dispatched to the drivers.</p> | |||||||
|  |  | ||||||
| <ol> | <ol> | ||||||
| <li> | <li> | ||||||
| <p>Configure your build with the desired client APIs and enable | <p>Run <code>configure</code> with the desired client APIs and enable | ||||||
| the driver for your hardware.  For example:</p> | the driver for your hardware.  For example</p> | ||||||
|  |  | ||||||
| <pre> | <pre> | ||||||
| $ meson configure \ |   $ ./configure --enable-gles1 --enable-gles2 \ | ||||||
|         -D egl=true \ |                 --with-dri-drivers=... \ | ||||||
|         -D gles1=true \ |                 --with-gallium-drivers=... | ||||||
|         -D gles2=true \ |  | ||||||
|         -D dri-drivers=... \ |  | ||||||
|         -D gallium-drivers=... |  | ||||||
| </pre> | </pre> | ||||||
|  |  | ||||||
| <p>The main library and OpenGL is enabled by default.  The first two options | <p>The main library and OpenGL is enabled by default.  The first two options | ||||||
| @@ -64,7 +61,7 @@ or more EGL drivers.</p> | |||||||
| time</p> | time</p> | ||||||
|  |  | ||||||
| <dl> | <dl> | ||||||
| <dt><code>-D egl=true</code></dt> | <dt><code>--enable-egl</code></dt> | ||||||
| <dd> | <dd> | ||||||
|  |  | ||||||
| <p>By default, EGL is enabled.  When disabled, the main library and the drivers | <p>By default, EGL is enabled.  When disabled, the main library and the drivers | ||||||
| @@ -72,11 +69,19 @@ will not be built.</p> | |||||||
|  |  | ||||||
| </dd> | </dd> | ||||||
|  |  | ||||||
| <dt><code>-D platforms=...</code></dt> | <dt><code>--with-egl-driver-dir</code></dt> | ||||||
|  | <dd> | ||||||
|  |  | ||||||
|  | <p>The directory EGL drivers should be installed to.  If not specified, EGL | ||||||
|  | drivers will be installed to <code>${libdir}/egl</code>.</p> | ||||||
|  |  | ||||||
|  | </dd> | ||||||
|  |  | ||||||
|  | <dt><code>--with-platforms</code></dt> | ||||||
| <dd> | <dd> | ||||||
|  |  | ||||||
| <p>List the platforms (window systems) to support.  Its argument is a comma | <p>List the platforms (window systems) to support.  Its argument is a comma | ||||||
| separated string such as <code>-D platforms=x11,drm</code>.  It decides | separated string such as <code>--with-platforms=x11,drm</code>.  It decides | ||||||
| the platforms a driver may support.  The first listed platform is also used by | the platforms a driver may support.  The first listed platform is also used by | ||||||
| the main library to decide the native platform.</p> | the main library to decide the native platform.</p> | ||||||
|  |  | ||||||
| @@ -85,13 +90,15 @@ the main library to decide the native platform.</p> | |||||||
| and <code>haiku</code>. | and <code>haiku</code>. | ||||||
| The <code>android</code> platform can either be built as a system | The <code>android</code> platform can either be built as a system | ||||||
| component, part of AOSP, using <code>Android.mk</code> files, or | component, part of AOSP, using <code>Android.mk</code> files, or | ||||||
| cross-compiled using appropriate options. | cross-compiled using appropriate <code>configure</code> options. | ||||||
|  | The <code>haiku</code> platform can only be built with SCons. | ||||||
| Unless for special needs, the build system should | Unless for special needs, the build system should | ||||||
| select the right platforms automatically.</p> | select the right platforms automatically.</p> | ||||||
|  |  | ||||||
| </dd> | </dd> | ||||||
|  |  | ||||||
| <dt><code>-D gles1=true</code> and <code>-D gles2=true</code></dt> | <dt><code>--enable-gles1</code></dt> | ||||||
|  | <dt><code>--enable-gles2</code></dt> | ||||||
| <dd> | <dd> | ||||||
|  |  | ||||||
| <p>These options enable OpenGL ES support in OpenGL.  The result is one big | <p>These options enable OpenGL ES support in OpenGL.  The result is one big | ||||||
| @@ -99,7 +106,7 @@ internal library that supports multiple APIs.</p> | |||||||
|  |  | ||||||
| </dd> | </dd> | ||||||
|  |  | ||||||
| <dt><code>-D shared-glapi=true</code></dt> | <dt><code>--enable-shared-glapi</code></dt> | ||||||
| <dd> | <dd> | ||||||
|  |  | ||||||
| <p>By default, <code>libGL</code> has its own copy of <code>libglapi</code>. | <p>By default, <code>libGL</code> has its own copy of <code>libglapi</code>. | ||||||
| @@ -127,9 +134,9 @@ runtime</p> | |||||||
| <dd> | <dd> | ||||||
|  |  | ||||||
| <p>This variable specifies the native platform.  The valid values are the same | <p>This variable specifies the native platform.  The valid values are the same | ||||||
| as those for <code>-D platforms=...</code>.  When the variable is not set, | as those for <code>--with-platforms</code>.  When the variable is not set, | ||||||
| the main library uses the first platform listed in | the main library uses the first platform listed in | ||||||
| <code>-D platforms=...</code> as the native platform.</p> | <code>--with-platforms</code> as the native platform.</p> | ||||||
|  |  | ||||||
| <p>Extensions like <code>EGL_MESA_drm_display</code> define new functions to | <p>Extensions like <code>EGL_MESA_drm_display</code> define new functions to | ||||||
| create displays for non-native platforms.  These extensions are usually used by | create displays for non-native platforms.  These extensions are usually used by | ||||||
| @@ -161,7 +168,6 @@ the X server directly using (XCB-)DRI2 protocol.</p> | |||||||
| <p>This driver can share DRI drivers with <code>libGL</code>.</p> | <p>This driver can share DRI drivers with <code>libGL</code>.</p> | ||||||
|  |  | ||||||
| </dd> | </dd> | ||||||
| </dl> |  | ||||||
|  |  | ||||||
| <h2>Packaging</h2> | <h2>Packaging</h2> | ||||||
|  |  | ||||||
|   | |||||||
| @@ -8,7 +8,7 @@ | |||||||
| <body> | <body> | ||||||
|  |  | ||||||
| <div class="header"> | <div class="header"> | ||||||
|   The Mesa 3D Graphics Library |   <h1>The Mesa 3D Graphics Library</h1> | ||||||
| </div> | </div> | ||||||
|  |  | ||||||
| <iframe src="contents.html"></iframe> | <iframe src="contents.html"></iframe> | ||||||
| @@ -25,206 +25,117 @@ sometimes be useful for debugging end-user issues. | |||||||
|  |  | ||||||
| <h2>LibGL environment variables</h2> | <h2>LibGL environment variables</h2> | ||||||
|  |  | ||||||
| <dl> | <ul> | ||||||
| <dt><code>LIBGL_DEBUG</code></dt> | <li>LIBGL_DEBUG - If defined debug information will be printed to stderr. | ||||||
| <dd>If defined debug information will be printed to stderr. |    If set to 'verbose' additional information will be printed. | ||||||
|     If set to <code>verbose</code> additional information will be | <li>LIBGL_DRIVERS_PATH - colon-separated list of paths to search for DRI drivers | ||||||
|     printed.</dd> | <li>LIBGL_ALWAYS_INDIRECT - if set to `true`, forces an indirect rendering context/connection. | ||||||
| <dt><code>LIBGL_DRIVERS_PATH</code></dt> | <li>LIBGL_ALWAYS_SOFTWARE - if set to `true`, always use software rendering | ||||||
| <dd>colon-separated list of paths to search for DRI drivers</dd> | <li>LIBGL_NO_DRAWARRAYS - if set to `true`, do not use DrawArrays GLX protocol (for debugging) | ||||||
| <dt><code>LIBGL_ALWAYS_INDIRECT</code></dt> | <li>LIBGL_SHOW_FPS - print framerate to stdout based on the number of glXSwapBuffers | ||||||
| <dd>if set to <code>true</code>, forces an indirect rendering |     calls per second. | ||||||
|     context/connection.</dd> | <li>LIBGL_DRI3_DISABLE - disable DRI3 if set to `true`. | ||||||
| <dt><code>LIBGL_ALWAYS_SOFTWARE</code></dt> | </ul> | ||||||
| <dd>if set to <code>true</code>, always use software rendering</dd> |  | ||||||
| <dt><code>LIBGL_NO_DRAWARRAYS</code></dt> |  | ||||||
| <dd>if set to <code>true</code>, do not use DrawArrays GLX protocol |  | ||||||
|     (for debugging)</dd> |  | ||||||
| <dt><code>LIBGL_SHOW_FPS</code></dt> |  | ||||||
| <dd>print framerate to stdout based on the number of |  | ||||||
|     <code>glXSwapBuffers</code> calls per second.</dd> |  | ||||||
| <dt><code>LIBGL_DRI3_DISABLE</code></dt> |  | ||||||
| <dd>disable DRI3 if set to <code>true</code>.</dd> |  | ||||||
| </dl> |  | ||||||
|  |  | ||||||
| <h2>Core Mesa environment variables</h2> | <h2>Core Mesa environment variables</h2> | ||||||
|  |  | ||||||
| <dl> |  | ||||||
| <dt><code>MESA_NO_ASM</code></dt> |  | ||||||
| <dd>if set, disables all assembly language optimizations</dd> |  | ||||||
| <dt><code>MESA_NO_MMX</code></dt> |  | ||||||
| <dd>if set, disables Intel MMX optimizations</dd> |  | ||||||
| <dt><code>MESA_NO_3DNOW</code></dt> |  | ||||||
| <dd>if set, disables AMD 3DNow! optimizations</dd> |  | ||||||
| <dt><code>MESA_NO_SSE</code></dt> |  | ||||||
| <dd>if set, disables Intel SSE optimizations</dd> |  | ||||||
| <dt><code>MESA_NO_ERROR</code></dt> |  | ||||||
| <dd>if set to 1, error checking is disabled as per <code>KHR_no_error</code>. |  | ||||||
|     This will result in undefined behaviour for invalid use of the api, but |  | ||||||
|     can reduce CPU use for apps that are known to be error free.</dd> |  | ||||||
| <dt><code>MESA_DEBUG</code></dt> |  | ||||||
| <dd>if set, error messages are printed to stderr.  For example, |  | ||||||
|     if the application generates a <code>GL_INVALID_ENUM</code> error, a |  | ||||||
|     corresponding error message indicating where the error occurred, and |  | ||||||
|     possibly why, will be printed to stderr. For release builds, |  | ||||||
|     <code>MESA_DEBUG</code> defaults to off (no debug output). |  | ||||||
|     <code>MESA_DEBUG</code> accepts the following comma-separated list of |  | ||||||
|     named flags, which adds extra behaviour to just set |  | ||||||
|     <code>MESA_DEBUG=1</code>: |  | ||||||
|     <dl> |  | ||||||
|       <dt><code>silent</code></dt> |  | ||||||
|       <dd>turn off debug messages. Only useful for debug builds.</dd> |  | ||||||
|       <dt><code>flush</code></dt> |  | ||||||
|       <dd>flush after each drawing command</dd> |  | ||||||
|       <dt><code>incomplete_tex</code></dt> |  | ||||||
|       <dd>extra debug messages when a texture is incomplete</dd> |  | ||||||
|       <dt><code>incomplete_fbo</code></dt> |  | ||||||
|       <dd>extra debug messages when a fbo is incomplete</dd> |  | ||||||
|       <dt><code>context</code></dt> |  | ||||||
|       <dd>create a debug context (see <code>GLX_CONTEXT_DEBUG_BIT_ARB</code>) |  | ||||||
|           and print error and performance messages to stderr (or |  | ||||||
|           <code>MESA_LOG_FILE</code>).</dd> |  | ||||||
|     </dl> |  | ||||||
| </dd> |  | ||||||
| <dt><code>MESA_LOG_FILE</code></dt> |  | ||||||
| <dd>specifies a file name for logging all errors, warnings, |  | ||||||
|     etc., rather than stderr</dd> |  | ||||||
| <dt><code>MESA_TEX_PROG</code></dt> |  | ||||||
| <dd>if set, implement conventional texture env modes with |  | ||||||
|     fragment programs (intended for developers only)</dd> |  | ||||||
| <dt><code>MESA_TNL_PROG</code></dt> |  | ||||||
| <dd>if set, implement conventional vertex transformation operations with |  | ||||||
|     vertex programs (intended for developers only). Setting this variable |  | ||||||
|     automatically sets the <code>MESA_TEX_PROG</code> variable as well.</dd> |  | ||||||
| <dt><code>MESA_EXTENSION_OVERRIDE</code></dt> |  | ||||||
| <dd>can be used to enable/disable extensions. A value such as |  | ||||||
|     <code>GL_EXT_foo -GL_EXT_bar</code> will enable the |  | ||||||
|     <code>GL_EXT_foo</code> extension and disable the |  | ||||||
|     <code>GL_EXT_bar</code> extension.</dd> |  | ||||||
| <dt><code>MESA_EXTENSION_MAX_YEAR</code></dt> |  | ||||||
| <dd>The <code>GL_EXTENSIONS</code> string returned by Mesa is sorted by |  | ||||||
|     extension year. If this variable is set to year X, only extensions |  | ||||||
|     defined on or before year X will be reported. This is to work-around a |  | ||||||
|     bug in some games where the extension string is copied into a fixed-size |  | ||||||
|     buffer without truncating. If the extension string is too long, the |  | ||||||
|     buffer overrun can cause the game to crash. This is a work-around for |  | ||||||
|     that.</dd> |  | ||||||
| <dt><code>MESA_GL_VERSION_OVERRIDE</code></dt> |  | ||||||
| <dd>changes the value returned by |  | ||||||
| <code>glGetString(GL_VERSION)</code> and possibly the GL API type. |  | ||||||
| <ul> | <ul> | ||||||
|   <li>The format should be <code>MAJOR.MINOR[FC|COMPAT]</code> | <li>MESA_NO_ASM - if set, disables all assembly language optimizations | ||||||
|   <li><code>FC</code> is an optional suffix that indicates a forward | <li>MESA_NO_MMX - if set, disables Intel MMX optimizations | ||||||
|       compatible context. This is only valid for versions >= 3.0. | <li>MESA_NO_3DNOW - if set, disables AMD 3DNow! optimizations | ||||||
|   <li><code>COMPAT</code> is an optional suffix that indicates a | <li>MESA_NO_SSE - if set, disables Intel SSE optimizations | ||||||
|       compatibility context or <code>GL_ARB_compatibility</code> support. | <li>MESA_NO_ERROR - if set to 1, error checking is disabled as per KHR_no_error. | ||||||
|       This is only valid for versions >= 3.1. |    This will result in undefined behaviour for invalid use of the api, but | ||||||
|   <li>GL versions <= 3.0 are set to a compatibility (non-Core) |    can reduce CPU use for apps that are known to be error free.</li> | ||||||
|       profile | <li>MESA_DEBUG - if set, error messages are printed to stderr.  For example, | ||||||
|   <li>GL versions = 3.1, depending on the driver, it may or may not |    if the application generates a GL_INVALID_ENUM error, a corresponding error | ||||||
|       have the <code>ARB_compatibility</code> extension enabled. |    message indicating where the error occurred, and possibly why, will be | ||||||
|   <li>GL versions >= 3.2 are set to a Core profile |    printed to stderr.<br> | ||||||
|   <li>Examples: |  | ||||||
|   <dl> |    For release builds, MESA_DEBUG defaults to off (no debug output). | ||||||
|     <dt><code>2.1</code></dt> |  | ||||||
|     <dd>select a compatibility (non-Core) profile with GL version 2.1.</dd> |    MESA_DEBUG accepts the following comma-separated list of named | ||||||
|     <dt><code>3.0</code></dt> |    flags, which adds extra behaviour to just set MESA_DEBUG=1: | ||||||
|     <dd>select a compatibility (non-Core) profile with GL version 3.0.</dd> |    <ul> | ||||||
|     <dt><code>3.0FC</code></dt> |      <li>silent - turn off debug messages. Only useful for debug builds.</li> | ||||||
|     <dd>select a Core+Forward Compatible profile with GL version 3.0.</dd> |      <li>flush - flush after each drawing command</li> | ||||||
|     <dt><code>3.1</code></dt> |      <li>incomplete_tex - extra debug messages when a texture is incomplete</li> | ||||||
|     <dd>select GL version 3.1 with <code>GL_ARB_compatibility</code> |      <li>incomplete_fbo - extra debug messages when a fbo is incomplete</li> | ||||||
|         enabled per the driver default.</dd> |      <li>context - create a debug context (see GLX_CONTEXT_DEBUG_BIT_ARB) and | ||||||
|     <dt><code>3.1FC</code></dt> |          print error and performance messages to stderr (or MESA_LOG_FILE).</li> | ||||||
|     <dd>select GL version 3.1 with forward compatibility and |    </ul> | ||||||
|         <code>GL_ARB_compatibility</code> disabled.</dd> | <li>MESA_LOG_FILE - specifies a file name for logging all errors, warnings, | ||||||
|     <dt><code>3.1COMPAT</code></dt> | etc., rather than stderr | ||||||
|     <dd>select GL version 3.1 with <code>GL_ARB_compatibility</code> | <li>MESA_TEX_PROG - if set, implement conventional texture env modes with | ||||||
|         enabled.</dd> | fragment programs (intended for developers only) | ||||||
|     <dt><code>X.Y</code></dt> | <li>MESA_TNL_PROG - if set, implement conventional vertex transformation | ||||||
|     <dd>override GL version to X.Y without changing the profile.</dd> | operations with vertex programs (intended for developers only). | ||||||
|     <dt><code>X.YFC</code></dt> | Setting this variable automatically sets the MESA_TEX_PROG variable as well. | ||||||
|     <dd>select a Core+Forward Compatible profile with GL version X.Y.</dd> | <li>MESA_EXTENSION_OVERRIDE - can be used to enable/disable extensions. | ||||||
|     <dt><code>X.YCOMPAT</code></dt> | A value such as "GL_EXT_foo -GL_EXT_bar" will enable the GL_EXT_foo extension | ||||||
|     <dd>select a Compatibility profile with GL version X.Y.</dd> | and disable the GL_EXT_bar extension. | ||||||
|   </dl> | <li>MESA_EXTENSION_MAX_YEAR - The GL_EXTENSIONS string returned by Mesa is sorted | ||||||
|   <li>Mesa may not really implement all the features of the given | by extension year. | ||||||
|       version. (for developers only) | If this variable is set to year X, only extensions defined on or before year | ||||||
|  | X will be reported. | ||||||
|  | This is to work-around a bug in some games where the extension string is | ||||||
|  | copied into a fixed-size buffer without truncating. | ||||||
|  | If the extension string is too long, the buffer overrun can cause the game | ||||||
|  | to crash. | ||||||
|  | This is a work-around for that. | ||||||
|  | <li>MESA_GL_VERSION_OVERRIDE - changes the value returned by | ||||||
|  | glGetString(GL_VERSION) and possibly the GL API type. | ||||||
|  | <ul> | ||||||
|  | <li> The format should be MAJOR.MINOR[FC] | ||||||
|  | <li> FC is an optional suffix that indicates a forward compatible context. | ||||||
|  | This is only valid for versions >= 3.0. | ||||||
|  | <li> GL versions < 3.0 are set to a compatibility (non-Core) profile | ||||||
|  | <li> GL versions = 3.0, see below | ||||||
|  | <li> GL versions > 3.0 are set to a Core profile | ||||||
|  | <li> Examples: 2.1, 3.0, 3.0FC, 3.1, 3.1FC | ||||||
|  | <ul> | ||||||
|  | <li> 2.1 - select a compatibility (non-Core) profile with GL version 2.1 | ||||||
|  | <li> 3.0 - select a compatibility (non-Core) profile with GL version 3.0 | ||||||
|  | <li> 3.0FC - select a Core+Forward Compatible profile with GL version 3.0 | ||||||
|  | <li> 3.1 - select a Core profile with GL version 3.1 | ||||||
|  | <li> 3.1FC - select a Core+Forward Compatible profile with GL version 3.1 | ||||||
| </ul> | </ul> | ||||||
| </dd> |  | ||||||
| <dt><code>MESA_GLES_VERSION_OVERRIDE</code></dt> |  | ||||||
| <dd>changes the value returned by <code>glGetString(GL_VERSION)</code> |  | ||||||
|     for OpenGL ES. |  | ||||||
| <ul> |  | ||||||
| <li> The format should be <code>MAJOR.MINOR</code> |  | ||||||
| <li> Examples: <code>2.0</code>, <code>3.0</code>, <code>3.1</code> |  | ||||||
| <li> Mesa may not really implement all the features of the given version. | <li> Mesa may not really implement all the features of the given version. | ||||||
| (for developers only) | (for developers only) | ||||||
| </ul> | </ul> | ||||||
| </dd> | <li>MESA_GLES_VERSION_OVERRIDE - changes the value returned by | ||||||
| <dt><code>MESA_GLSL_VERSION_OVERRIDE</code></dt> | glGetString(GL_VERSION) for OpenGL ES. | ||||||
| <dd>changes the value returned by | <ul> | ||||||
|     <code>glGetString(GL_SHADING_LANGUAGE_VERSION)</code>. | <li> The format should be MAJOR.MINOR | ||||||
|     Valid values are integers, such as <code>130</code>.  Mesa will not | <li> Examples: 2.0, 3.0, 3.1 | ||||||
|     really implement all the features of the given language version if | <li> Mesa may not really implement all the features of the given version. | ||||||
|     it's higher than what's normally reported. (for developers only) | (for developers only) | ||||||
| </dd> | </ul> | ||||||
| <dt><code>MESA_GLSL_CACHE_DISABLE</code></dt> | <li>MESA_GLSL_VERSION_OVERRIDE - changes the value returned by | ||||||
| <dd>if set to <code>true</code>, disables the GLSL shader cache</dd> | glGetString(GL_SHADING_LANGUAGE_VERSION). Valid values are integers, such as | ||||||
| <dt><code>MESA_GLSL_CACHE_MAX_SIZE</code></dt> | "130".  Mesa will not really implement all the features of the given language version | ||||||
| <dd>if set, determines the maximum size of the on-disk cache of compiled GLSL | if it's higher than what's normally reported. (for developers only) | ||||||
|     programs. Should be set to a number optionally followed by <code>K</code>, | <li>MESA_GLSL_CACHE_DISABLE - if set to `true`, disables the GLSL shader cache | ||||||
|     <code>M</code>, or <code>G</code> to specify a size in kilobytes, | <li>MESA_GLSL_CACHE_MAX_SIZE - if set, determines the maximum size of | ||||||
|     megabytes, or gigabytes. By default, gigabytes will be assumed. And if | the on-disk cache of compiled GLSL programs. Should be set to a number | ||||||
|     unset, a maximum size of 1GB will be used. Note: A separate cache might | optionally followed by 'K', 'M', or 'G' to specify a size in | ||||||
|     be created for each architecture that Mesa is installed for on your | kilobytes, megabytes, or gigabytes. By default, gigabytes will be | ||||||
|     system. For example under the default settings you may end up with a 1GB | assumed. And if unset, a maximum size of 1GB will be used. Note: A separate | ||||||
|     cache for x86_64 and another 1GB cache for i386.</dd> | cache might be created for each architecture that Mesa is installed for on | ||||||
| <dt><code>MESA_GLSL_CACHE_DIR</code></dt> | your system. For example under the default settings you may end up with a 1GB | ||||||
| <dd>if set, determines the directory to be used for the on-disk cache of | cache for x86_64 and another 1GB cache for i386. | ||||||
|     compiled GLSL programs. If this variable is not set, then the cache will | <li>MESA_GLSL_CACHE_DIR - if set, determines the directory to be used | ||||||
|     be stored in <code>$XDG_CACHE_HOME/mesa_shader_cache</code> (if that | for the on-disk cache of compiled GLSL programs. If this variable is | ||||||
|     variable is set), or else within <code>.cache/mesa_shader_cache</code> | not set, then the cache will be stored in $XDG_CACHE_HOME/mesa (if | ||||||
|     within the user's home directory. | that variable is set), or else within .cache/mesa within the user's | ||||||
| </dd> | home directory. | ||||||
| <dt><code>MESA_GLSL</code></dt> | <li>MESA_GLSL - <a href="shading.html#envvars">shading language compiler options</a> | ||||||
| <dd><a href="shading.html#envvars">shading language compiler options</a></dd> | <li>MESA_NO_MINMAX_CACHE - when set, the minmax index cache is globally disabled. | ||||||
| <dt><code>MESA_NO_MINMAX_CACHE</code></dt> | <li>MESA_SHADER_CAPTURE_PATH - see <a href="shading.html#capture">Capturing Shaders</a></li> | ||||||
| <dd>when set, the minmax index cache is globally disabled.</dd> | <li>MESA_SHADER_DUMP_PATH and MESA_SHADER_READ_PATH - see <a href="shading.html#replacement">Experimenting with Shader Replacements</a></li> | ||||||
| <dt><code>MESA_SHADER_CAPTURE_PATH</code></dt> | </ul> | ||||||
| <dd>see <a href="shading.html#capture">Capturing Shaders</a></dd> |  | ||||||
| <dt><code>MESA_SHADER_DUMP_PATH</code> and <code>MESA_SHADER_READ_PATH</code></dt> |  | ||||||
| <dd>see <a href="shading.html#replacement">Experimenting with Shader Replacements</a></dd> |  | ||||||
| <dt><code>MESA_VK_VERSION_OVERRIDE</code></dt> |  | ||||||
| <dd>changes the Vulkan physical device version |  | ||||||
|     as returned in <code>VkPhysicalDeviceProperties::apiVersion</code>. |  | ||||||
|   <ul> |  | ||||||
|     <li>The format should be <code>MAJOR.MINOR[.PATCH]</code></li> |  | ||||||
|     <li>This will not let you force a version higher than the driver's |  | ||||||
|         instance version as advertised by |  | ||||||
|         <code>vkEnumerateInstanceVersion</code></li> |  | ||||||
|     <li>This can be very useful for debugging but some features may not be |  | ||||||
|         implemented correctly. (For developers only)</li> |  | ||||||
|   </ul> |  | ||||||
| </dd> |  | ||||||
| </dl> |  | ||||||
|  |  | ||||||
|  |  | ||||||
| <h2>NIR passes enviroment variables</h2> |  | ||||||
| <p> |  | ||||||
| The following are only applicable for drivers that uses NIR, as they |  | ||||||
| modify the behaviour for the common NIR_PASS and NIR_PASS_V macros, |  | ||||||
| that wrap calls to NIR lowering/optimizations. |  | ||||||
| </p> |  | ||||||
|  |  | ||||||
| <dl> |  | ||||||
|   <dt><code>NIR_PRINT</code></dt> |  | ||||||
|   <dd>If defined, the resulting NIR shader will be printed out at each succesful NIR lowering/optimization call.</dd> |  | ||||||
|   <dt><code>NIR_TEST_CLONE</code></dt> |  | ||||||
|   <dd>If defined, cloning a NIR shader would be tested at each succesful NIR lowering/optimization call.</dd> |  | ||||||
|   <dt><code>NIR_TEST_SERIALIZE</code></dt> |  | ||||||
|   <dd>If defined, serialize and deserialize a NIR shader would be tested at each succesful NIR lowering/optimization call.</dd> |  | ||||||
| </dl> |  | ||||||
|  |  | ||||||
|  |  | ||||||
| <h2>Mesa Xlib driver environment variables</h2> | <h2>Mesa Xlib driver environment variables</h2> | ||||||
| @@ -233,139 +144,80 @@ that wrap calls to NIR lowering/optimizations. | |||||||
| The following are only applicable to the Mesa Xlib software driver. | The following are only applicable to the Mesa Xlib software driver. | ||||||
| See the <a href="xlibdriver.html">Xlib software driver page</a> for details. | See the <a href="xlibdriver.html">Xlib software driver page</a> for details. | ||||||
| </p> | </p> | ||||||
| <dl> | <ul> | ||||||
| <dt><code>MESA_RGB_VISUAL</code></dt> | <li>MESA_RGB_VISUAL - specifies the X visual and depth for RGB mode | ||||||
| <dd>specifies the X visual and depth for RGB mode</dd> | <li>MESA_CI_VISUAL - specifies the X visual and depth for CI mode | ||||||
| <dt><code>MESA_CI_VISUAL</code></dt> | <li>MESA_BACK_BUFFER - specifies how to implement the back color buffer, | ||||||
| <dd>specifies the X visual and depth for CI mode</dd> |     either "pixmap" or "ximage" | ||||||
| <dt><code>MESA_BACK_BUFFER</code></dt> | <li>MESA_GAMMA - gamma correction coefficients for red, green, blue channels | ||||||
| <dd>specifies how to implement the back color buffer, either | <li>MESA_XSYNC - enable synchronous X behavior (for debugging only) | ||||||
|     <code>pixmap</code> or <code>ximage</code></dd> | <li>MESA_GLX_FORCE_CI - if set, force GLX to treat 8bpp visuals as CI visuals | ||||||
| <dt><code>MESA_GAMMA</code></dt> | <li>MESA_GLX_FORCE_ALPHA - if set, forces RGB windows to have an alpha channel. | ||||||
| <dd>gamma correction coefficients for red, green, blue channels</dd> | <li>MESA_GLX_DEPTH_BITS - specifies default number of bits for depth buffer. | ||||||
| <dt><code>MESA_XSYNC</code></dt> | <li>MESA_GLX_ALPHA_BITS - specifies default number of bits for alpha channel. | ||||||
| <dd>enable synchronous X behavior (for debugging only)</dd> | </ul> | ||||||
| <dt><code>MESA_GLX_FORCE_CI</code></dt> |  | ||||||
| <dd>if set, force GLX to treat 8bpp visuals as CI visuals</dd> |  | ||||||
| <dt><code>MESA_GLX_FORCE_ALPHA</code></dt> |  | ||||||
| <dd>if set, forces RGB windows to have an alpha channel.</dd> |  | ||||||
| <dt><code>MESA_GLX_DEPTH_BITS</code></dt> |  | ||||||
| <dd>specifies default number of bits for depth buffer.</dd> |  | ||||||
| <dt><code>MESA_GLX_ALPHA_BITS</code></dt> |  | ||||||
| <dd>specifies default number of bits for alpha channel.</dd> |  | ||||||
| </dl> |  | ||||||
|  |  | ||||||
|  |  | ||||||
| <h2>i945/i965 driver environment variables (non-Gallium)</h2> | <h2>i945/i965 driver environment variables (non-Gallium)</h2> | ||||||
|  |  | ||||||
| <dl> | <ul> | ||||||
| <dt><code>INTEL_NO_HW</code></dt> | <li>INTEL_NO_HW - if set to 1, prevents batches from being submitted to the hardware. | ||||||
| <dd>if set to 1, prevents batches from being submitted to the hardware. |    This is useful for debugging hangs, etc.</li> | ||||||
|     This is useful for debugging hangs, etc.</dd> | <li>INTEL_DEBUG - a comma-separated list of named flags, which do various things: | ||||||
| <dt><code>INTEL_DEBUG</code></dt> | <ul> | ||||||
| <dd>a comma-separated list of named flags, which do various things: |    <li>ann - annotate IR in assembly dumps</li> | ||||||
| <dl> |    <li>aub - dump batches into an AUB trace for use with simulation tools</li> | ||||||
|    <dt><code>ann</code></dt> |    <li>bat - emit batch information</li> | ||||||
|    <dd>annotate IR in assembly dumps</dd> |    <li>blit - emit messages about blit operations</li> | ||||||
|    <dt><code>aub</code></dt> |    <li>blorp - emit messages about the blorp operations (blits & clears)</li> | ||||||
|    <dd>dump batches into an AUB trace for use with simulation tools</dd> |    <li>buf - emit messages about buffer objects</li> | ||||||
|    <dt><code>bat</code></dt> |    <li>clip - emit messages about the clip unit (for old gens, includes the CLIP program)</li> | ||||||
|    <dd>emit batch information</dd> |    <li>color - use color in output</li> | ||||||
|    <dt><code>blit</code></dt> |    <li>cs - dump shader assembly for compute shaders</li> | ||||||
|    <dd>emit messages about blit operations</dd> |    <li>do32 - generate compute shader SIMD32 programs even if workgroup size doesn't exceed the SIMD16 limit</li> | ||||||
|    <dt><code>blorp</code></dt> |    <li>dri - emit messages about the DRI interface</li> | ||||||
|    <dd>emit messages about the blorp operations (blits & clears)</dd> |    <li>fbo - emit messages about framebuffers</li> | ||||||
|    <dt><code>buf</code></dt> |    <li>fs - dump shader assembly for fragment shaders</li> | ||||||
|    <dd>emit messages about buffer objects</dd> |    <li>gs - dump shader assembly for geometry shaders</li> | ||||||
|    <dt><code>clip</code></dt> |    <li>hex - print instruction hex dump with the disassembly</li> | ||||||
|    <dd>emit messages about the clip unit (for old gens, includes the CLIP program)</dd> |    <li>l3 - emit messages about the new L3 state during transitions</li> | ||||||
|    <dt><code>color</code></dt> |    <li>miptree - emit messages about miptrees</li> | ||||||
|    <dd>use color in output</dd> |    <li>no8 - don't generate SIMD8 fragment shader</li> | ||||||
|    <dt><code>cs</code></dt> |    <li>no16 - suppress generation of 16-wide fragment shaders. useful for debugging broken shaders</li> | ||||||
|    <dd>dump shader assembly for compute shaders</dd> |    <li>nocompact - disable instruction compaction</li> | ||||||
|    <dt><code>do32</code></dt> |    <li>nodualobj - suppress generation of dual-object geometry shader code</li> | ||||||
|    <dd>generate compute shader SIMD32 programs even if workgroup size doesn't exceed the SIMD16 limit</dd> |    <li>norbc - disable single sampled render buffer compression</li> | ||||||
|    <dt><code>dri</code></dt> |    <li>optimizer - dump shader assembly to files at each optimization pass and iteration that make progress</li> | ||||||
|    <dd>emit messages about the DRI interface</dd> |    <li>perf - emit messages about performance issues</li> | ||||||
|    <dt><code>fbo</code></dt> |    <li>perfmon - emit messages about AMD_performance_monitor</li> | ||||||
|    <dd>emit messages about framebuffers</dd> |    <li>pix - emit messages about pixel operations</li> | ||||||
|    <dt><code>fs</code></dt> |    <li>prim - emit messages about drawing primitives</li> | ||||||
|    <dd>dump shader assembly for fragment shaders</dd> |    <li>reemit - mark all state dirty on each draw call</li> | ||||||
|    <dt><code>gs</code></dt> |    <li>sf - emit messages about the strips & fans unit (for old gens, includes the SF program)</li> | ||||||
|    <dd>dump shader assembly for geometry shaders</dd> |    <li>shader_time - record how much GPU time is spent in each shader</li> | ||||||
|    <dt><code>hex</code></dt> |    <li>spill_fs - force spilling of all registers in the scalar backend (useful to debug spilling code)</li> | ||||||
|    <dd>print instruction hex dump with the disassembly</dd> |    <li>spill_vec4 - force spilling of all registers in the vec4 backend (useful to debug spilling code)</li> | ||||||
|    <dt><code>l3</code></dt> |    <li>state - emit messages about state flag tracking</li> | ||||||
|    <dd>emit messages about the new L3 state during transitions</dd> |    <li>submit - emit batchbuffer usage statistics</li> | ||||||
|    <dt><code>miptree</code></dt> |    <li>sync - after sending each batch, emit a message and wait for that batch to finish rendering</li> | ||||||
|    <dd>emit messages about miptrees</dd> |    <li>tcs - dump shader assembly for tessellation control shaders</li> | ||||||
|    <dt><code>no8</code></dt> |    <li>tes - dump shader assembly for tessellation evaluation shaders</li> | ||||||
|    <dd>don't generate SIMD8 fragment shader</dd> |    <li>tex - emit messages about textures.</li> | ||||||
|    <dt><code>no16</code></dt> |    <li>urb - emit messages about URB setup</li> | ||||||
|    <dd>suppress generation of 16-wide fragment shaders. useful for debugging broken shaders</dd> |    <li>vert - emit messages about vertex assembly</li> | ||||||
|    <dt><code>nocompact</code></dt> |    <li>vs - dump shader assembly for vertex shaders</li> | ||||||
|    <dd>disable instruction compaction</dd> | </ul> | ||||||
|    <dt><code>nodualobj</code></dt> | <li>INTEL_SCALAR_VS (or TCS, TES, GS) - force scalar/vec4 mode for a shader stage (Gen8-9 only)</li> | ||||||
|    <dd>suppress generation of dual-object geometry shader code</dd> | <li>INTEL_PRECISE_TRIG - if set to 1, true or yes, then the driver prefers | ||||||
|    <dt><code>nofc</code></dt> |    accuracy over performance in trig functions.</li> | ||||||
|    <dd>disable fast clears</dd> | </ul> | ||||||
|    <dt><code>norbc</code></dt> |  | ||||||
|    <dd>disable single sampled render buffer compression</dd> |  | ||||||
|    <dt><code>optimizer</code></dt> |  | ||||||
|    <dd>dump shader assembly to files at each optimization pass and iteration that make progress</dd> |  | ||||||
|    <dt><code>perf</code></dt> |  | ||||||
|    <dd>emit messages about performance issues</dd> |  | ||||||
|    <dt><code>perfmon</code></dt> |  | ||||||
|    <dd>emit messages about <code>AMD_performance_monitor</code></dd> |  | ||||||
|    <dt><code>pix</code></dt> |  | ||||||
|    <dd>emit messages about pixel operations</dd> |  | ||||||
|    <dt><code>prim</code></dt> |  | ||||||
|    <dd>emit messages about drawing primitives</dd> |  | ||||||
|    <dt><code>reemit</code></dt> |  | ||||||
|    <dd>mark all state dirty on each draw call</dd> |  | ||||||
|    <dt><code>sf</code></dt> |  | ||||||
|    <dd>emit messages about the strips & fans unit (for old gens, includes the SF program)</dd> |  | ||||||
|    <dt><code>shader_time</code></dt> |  | ||||||
|    <dd>record how much GPU time is spent in each shader</dd> |  | ||||||
|    <dt><code>spill_fs</code></dt> |  | ||||||
|    <dd>force spilling of all registers in the scalar backend (useful to debug spilling code)</dd> |  | ||||||
|    <dt><code>spill_vec4</code></dt> |  | ||||||
|    <dd>force spilling of all registers in the vec4 backend (useful to debug spilling code)</dd> |  | ||||||
|    <dt><code>state</code></dt> |  | ||||||
|    <dd>emit messages about state flag tracking</dd> |  | ||||||
|    <dt><code>submit</code></dt> |  | ||||||
|    <dd>emit batchbuffer usage statistics</dd> |  | ||||||
|    <dt><code>sync</code></dt> |  | ||||||
|    <dd>after sending each batch, emit a message and wait for that batch to finish rendering</dd> |  | ||||||
|    <dt><code>tcs</code></dt> |  | ||||||
|    <dd>dump shader assembly for tessellation control shaders</dd> |  | ||||||
|    <dt><code>tes</code></dt> |  | ||||||
|    <dd>dump shader assembly for tessellation evaluation shaders</dd> |  | ||||||
|    <dt><code>tex</code></dt> |  | ||||||
|    <dd>emit messages about textures.</dd> |  | ||||||
|    <dt><code>urb</code></dt> |  | ||||||
|    <dd>emit messages about URB setup</dd> |  | ||||||
|    <dt><code>vert</code></dt> |  | ||||||
|    <dd>emit messages about vertex assembly</dd> |  | ||||||
|    <dt><code>vs</code></dt> |  | ||||||
|    <dd>dump shader assembly for vertex shaders</dd> |  | ||||||
| </dl> |  | ||||||
| </dd> |  | ||||||
| <dt><code>INTEL_SCALAR_VS</code> (or <code>TCS</code>, <code>TES</code>, |  | ||||||
|     <code>GS</code>)</dt> |  | ||||||
| <dd>force scalar/vec4 mode for a shader stage (Gen8-9 only)</dd> |  | ||||||
| <dt><code>INTEL_PRECISE_TRIG</code></dt> |  | ||||||
| <dd>if set to 1, true or yes, then the driver prefers accuracy over |  | ||||||
|     performance in trig functions.</dd> |  | ||||||
| </dl> |  | ||||||
|  |  | ||||||
|  |  | ||||||
| <h2>Radeon driver environment variables (radeon, r200, and r300g)</h2> | <h2>Radeon driver environment variables (radeon, r200, and r300g)</h2> | ||||||
|  |  | ||||||
| <dl> | <ul> | ||||||
| <dt><code>RADEON_NO_TCL</code></dt> | <li>RADEON_NO_TCL - if set, disable hardware-accelerated Transform/Clip/Lighting. | ||||||
| <dd>if set, disable hardware-accelerated Transform/Clip/Lighting.</dd> | </ul> | ||||||
| </dl> |  | ||||||
|  |  | ||||||
|  |  | ||||||
| <h2>EGL environment variables</h2> | <h2>EGL environment variables</h2> | ||||||
| @@ -378,170 +230,113 @@ Mesa EGL supports different sets of environment variables.  See the | |||||||
|  |  | ||||||
| <h2>Gallium environment variables</h2> | <h2>Gallium environment variables</h2> | ||||||
|  |  | ||||||
| <dl> | <ul> | ||||||
| <dt><code>GALLIUM_HUD</code></dt> | <li>GALLIUM_HUD - draws various information on the screen, like framerate, | ||||||
| <dd>draws various information on the screen, like framerate, |  | ||||||
|     cpu load, driver statistics, performance counters, etc. |     cpu load, driver statistics, performance counters, etc. | ||||||
|     Set <code>GALLIUM_HUD=help</code> and run e.g. |     Set GALLIUM_HUD=help and run e.g. glxgears for more info. | ||||||
|     <code>glxgears</code> for more info.</dd> | <li>GALLIUM_HUD_PERIOD - sets the hud update rate in seconds (float). Use zero | ||||||
| <dt><code>GALLIUM_HUD_PERIOD</code></dt> |     to update every frame. The default period is 1/2 second. | ||||||
| <dd>sets the hud update rate in seconds (float). Use zero | <li>GALLIUM_HUD_VISIBLE - control default visibility, defaults to true. | ||||||
|     to update every frame. The default period is 1/2 second.</dd> | <li>GALLIUM_HUD_TOGGLE_SIGNAL - toggle visibility via user specified signal. | ||||||
| <dt><code>GALLIUM_HUD_VISIBLE</code></dt> |  | ||||||
| <dd>control default visibility, defaults to true.</dd> |  | ||||||
| <dt><code>GALLIUM_HUD_TOGGLE_SIGNAL</code></dt> |  | ||||||
| <dd>toggle visibility via user specified signal. |  | ||||||
|     Especially useful to toggle hud at specific points of application and |     Especially useful to toggle hud at specific points of application and | ||||||
|     disable for unencumbered viewing the rest of the time. For example, set |     disable for unencumbered viewing the rest of the time. For example, set | ||||||
|     <code>GALLIUM_HUD_VISIBLE</code> to <code>false</code> and |     GALLIUM_HUD_VISIBLE to false and GALLIUM_HUD_TOGGLE_SIGNAL to 10 (SIGUSR1). | ||||||
|     <code>GALLIUM_HUD_TOGGLE_SIGNAL</code> to <code>10</code> |     Use kill -10 <pid> to toggle the hud as desired. | ||||||
|     (<code>SIGUSR1</code>). | <li>GALLIUM_HUD_DUMP_DIR - specifies a directory for writing the displayed | ||||||
|     Use <code>kill -10 <pid></code> to toggle the hud as desired.</dd> |     hud values into files. | ||||||
| <dt><code>GALLIUM_HUD_DUMP_DIR</code></dt> | <li>GALLIUM_DRIVER - useful in combination with LIBGL_ALWAYS_SOFTWARE=true for | ||||||
| <dd>specifies a directory for writing the displayed hud values into files.</dd> |     choosing one of the software renderers "softpipe", "llvmpipe" or "swr". | ||||||
| <dt><code>GALLIUM_DRIVER</code></dt> | <li>GALLIUM_LOG_FILE - specifies a file for logging all errors, warnings, etc. | ||||||
| <dd>useful in combination with <code>LIBGL_ALWAYS_SOFTWARE=true</code> for |     rather than stderr. | ||||||
|     choosing one of the software renderers <code>softpipe</code>, | <li>GALLIUM_PRINT_OPTIONS - if non-zero, print all the Gallium environment | ||||||
|     <code>llvmpipe</code> or <code>swr</code>.</dd> |     variables which are used, and their current values. | ||||||
| <dt><code>GALLIUM_LOG_FILE</code></dt> | <li>GALLIUM_DUMP_CPU - if non-zero, print information about the CPU on start-up | ||||||
| <dd>specifies a file for logging all errors, warnings, etc. | <li>TGSI_PRINT_SANITY - if set, do extra sanity checking on TGSI shaders and | ||||||
|     rather than stderr.</dd> |     print any errors to stderr. | ||||||
| <dt><code>GALLIUM_PRINT_OPTIONS</code></dt> | <LI>DRAW_FSE - ??? | ||||||
| <dd>if non-zero, print all the Gallium environment variables which are | <LI>DRAW_NO_FSE - ??? | ||||||
|     used, and their current values.</dd> | <li>DRAW_USE_LLVM - if set to zero, the draw module will not use LLVM to execute | ||||||
| <dt><code>GALLIUM_DUMP_CPU</code></dt> |     shaders, vertex fetch, etc. | ||||||
| <dd>if non-zero, print information about the CPU on start-up</dd> | <li>ST_DEBUG - controls debug output from the Mesa/Gallium state tracker. | ||||||
| <dt><code>TGSI_PRINT_SANITY</code></dt> | Setting to "tgsi", for example, will print all the TGSI shaders. | ||||||
| <dd>if set, do extra sanity checking on TGSI shaders and | See src/mesa/state_tracker/st_debug.c for other options. | ||||||
|     print any errors to stderr.</dd> | </ul> | ||||||
| <dt><code>DRAW_FSE</code></dt> |  | ||||||
| <dd>???</dd> |  | ||||||
| <dt><code>DRAW_NO_FSE</code></dt> |  | ||||||
| <dd>???</dd> |  | ||||||
| <dt><code>DRAW_USE_LLVM</code></dt> |  | ||||||
| <dd>if set to zero, the draw module will not use LLVM to execute |  | ||||||
|     shaders, vertex fetch, etc.</dd> |  | ||||||
| <dt><code>ST_DEBUG</code></dt> |  | ||||||
| <dd>controls debug output from the Mesa/Gallium state tracker. |  | ||||||
|     Setting to <code>tgsi</code>, for example, will print all the TGSI |  | ||||||
|     shaders. See <code>src/mesa/state_tracker/st_debug.c</code> for other |  | ||||||
|     options.</dd> |  | ||||||
| </dl> |  | ||||||
|  |  | ||||||
| <h3>Clover state tracker environment variables</h3> | <h3>Clover state tracker environment variables</h3> | ||||||
|  |  | ||||||
| <dl> | <ul> | ||||||
| <dt><code>CLOVER_EXTRA_BUILD_OPTIONS</code></dt> | <li>CLOVER_EXTRA_BUILD_OPTIONS - allows specifying additional compiler and linker | ||||||
| <dd>allows specifying additional compiler and linker |  | ||||||
|     options. Specified options are appended after the options set by the OpenCL |     options. Specified options are appended after the options set by the OpenCL | ||||||
|     program in <code>clBuildProgram</code>.</dd> |     program in clBuildProgram. | ||||||
| <dt><code>CLOVER_EXTRA_COMPILE_OPTIONS</code></dt> | <li>CLOVER_EXTRA_COMPILE_OPTIONS - allows specifying additional compiler | ||||||
| <dd>allows specifying additional compiler |  | ||||||
|     options. Specified options are appended after the options set by the OpenCL |     options. Specified options are appended after the options set by the OpenCL | ||||||
|     program in <code>clCompileProgram</code>.</dd> |     program in clCompileProgram. | ||||||
| <dt><code>CLOVER_EXTRA_LINK_OPTIONS</code></dt> | <li>CLOVER_EXTRA_LINK_OPTIONS - allows specifying additional linker | ||||||
| <dd>allows specifying additional linker |  | ||||||
|     options. Specified options are appended after the options set by the OpenCL |     options. Specified options are appended after the options set by the OpenCL | ||||||
|     program in <code>clLinkProgram</code>.</dd> |     program in clLinkProgram. | ||||||
| </dl> | </ul> | ||||||
|  |  | ||||||
|  |  | ||||||
| <h3>Softpipe driver environment variables</h3> | <h3>Softpipe driver environment variables</h3> | ||||||
| <dl> | <ul> | ||||||
| <dt><code>SOFTPIPE_DUMP_FS</code></dt> | <li>SOFTPIPE_DUMP_FS - if set, the softpipe driver will print fragment shaders | ||||||
| <dd>if set, the softpipe driver will print fragment shaders to stderr</dd> |     to stderr | ||||||
| <dt><code>SOFTPIPE_DUMP_GS</code></dt> | <li>SOFTPIPE_DUMP_GS - if set, the softpipe driver will print geometry shaders | ||||||
| <dd>if set, the softpipe driver will print geometry shaders to stderr</dd> |     to stderr | ||||||
| <dt><code>SOFTPIPE_NO_RAST</code></dt> | <li>SOFTPIPE_NO_RAST - if set, rasterization is no-op'd.  For profiling purposes. | ||||||
| <dd>if set, rasterization is no-op'd.  For profiling purposes.</dd> | <li>SOFTPIPE_USE_LLVM - if set, the softpipe driver will try to use LLVM JIT for | ||||||
| <dt><code>SOFTPIPE_USE_LLVM</code></dt> |     vertex shading processing. | ||||||
| <dd>if set, the softpipe driver will try to use LLVM JIT for | </ul> | ||||||
|     vertex shading processing.</dd> |  | ||||||
| </dl> |  | ||||||
|  |  | ||||||
|  |  | ||||||
| <h3>LLVMpipe driver environment variables</h3> | <h3>LLVMpipe driver environment variables</h3> | ||||||
| <dl> | <ul> | ||||||
| <dt><code>LP_NO_RAST</code></dt> | <li>LP_NO_RAST - if set LLVMpipe will no-op rasterization | ||||||
| <dd>if set LLVMpipe will no-op rasterization</dd> | <li>LP_DEBUG - a comma-separated list of debug options is accepted.  See the | ||||||
| <dt><code>LP_DEBUG</code></dt> |     source code for details. | ||||||
| <dd>a comma-separated list of debug options is accepted.  See the | <li>LP_PERF - a comma-separated list of options to selectively no-op various | ||||||
|     source code for details.</dd> |     parts of the driver.  See the source code for details. | ||||||
| <dt><code>LP_PERF</code></dt> | <li>LP_NUM_THREADS - an integer indicating how many threads to use for rendering. | ||||||
| <dd>a comma-separated list of options to selectively no-op various |  | ||||||
|     parts of the driver.  See the source code for details.</dd> |  | ||||||
| <dt><code>LP_NUM_THREADS</code></dt> |  | ||||||
| <dd>an integer indicating how many threads to use for rendering. |  | ||||||
|     Zero turns off threading completely.  The default value is the number of CPU |     Zero turns off threading completely.  The default value is the number of CPU | ||||||
|     cores present.</dd> |     cores present. | ||||||
| </dl> | </ul> | ||||||
|  |  | ||||||
| <h3>VMware SVGA driver environment variables</h3> | <h3>VMware SVGA driver environment variables</h3> | ||||||
| <dl> | <ul> | ||||||
| <dt><code>SVGA_FORCE_SWTNL</code></dt> | <li>SVGA_FORCE_SWTNL - force use of software vertex transformation | ||||||
| <dd>force use of software vertex transformation</dd> | <li>SVGA_NO_SWTNL - don't allow software vertex transformation fallbacks | ||||||
| <dt><code>SVGA_NO_SWTNL</code></dt> | (will often result in incorrect rendering). | ||||||
| <dd>don't allow software vertex transformation fallbacks (will often result | <li>SVGA_DEBUG - for dumping shaders, constant buffers, etc.  See the code | ||||||
|     in incorrect rendering).</dd> | for details. | ||||||
| <dt><code>SVGA_DEBUG</code></dt> | <li>SVGA_EXTRA_LOGGING - if set, enables extra logging to the vmware.log file, | ||||||
| <dd>for dumping shaders, constant buffers, etc.  See the code for | such as the OpenGL program's name and command line arguments. | ||||||
|     details.</dd> | <li>See the driver code for other, lesser-used variables. | ||||||
| <dt><code>SVGA_EXTRA_LOGGING</code></dt> | </ul> | ||||||
| <dd>if set, enables extra logging to the <code>vmware.log</code> file, |  | ||||||
|     such as the OpenGL program's name and command line arguments.</dd> |  | ||||||
| <dt><code>SVGA_NO_LOGGING</code></dt> |  | ||||||
| <dd>if set, disables logging to the <code>vmware.log</code> file. This is |  | ||||||
|     useful when using Valgrind because it otherwise crashes when |  | ||||||
|     initializing the host log feature.</dd> |  | ||||||
| </dl> |  | ||||||
| <p>See the driver code for other, lesser-used variables.</p> |  | ||||||
|  |  | ||||||
| <h3>WGL environment variables</h3> |  | ||||||
| <dl> |  | ||||||
| <dt><code>WGL_SWAP_INTERVAL</code></dt> |  | ||||||
| <dd>to set a swap interval, equivalent to calling |  | ||||||
|     <code>wglSwapIntervalEXT()</code> in an application.  If this |  | ||||||
|     environment variable is set, application calls to |  | ||||||
|     <code>wglSwapIntervalEXT()</code> will have no effect.</dd> |  | ||||||
| </dl> |  | ||||||
|  |  | ||||||
| <h3>VA-API state tracker environment variables</h3> | <h3>VA-API state tracker environment variables</h3> | ||||||
| <dl> | <ul> | ||||||
| <dt><code>VAAPI_MPEG4_ENABLED</code></dt> | <li>VAAPI_MPEG4_ENABLED - enable MPEG4 for VA-API, disabled by default. | ||||||
| <dd>enable MPEG4 for VA-API, disabled by default.</dd> | </ul> | ||||||
| </dl> |  | ||||||
|  |  | ||||||
|  |  | ||||||
| <h3>VC4 driver environment variables</h3> | <h3>VC4 driver environment variables</h3> | ||||||
| <dl> | <ul> | ||||||
| <dt><code>VC4_DEBUG</code></dt> | <li>VC4_DEBUG - a comma-separated list of named flags, which do various things: | ||||||
| <dd>a comma-separated list of named flags, which do various things: | <ul> | ||||||
| <dl> |    <li>cl - dump command list during creation</li> | ||||||
|    <dt><code>cl</code></dt> |    <li>qpu - dump generated QPU instructions</li> | ||||||
|    <dd>dump command list during creation</dd> |    <li>qir - dump QPU IR during program compile</li> | ||||||
|    <dt><code>qpu</code></dt> |    <li>nir - dump NIR during program compile</li> | ||||||
|    <dd>dump generated QPU instructions</dd> |    <li>tgsi - dump TGSI during program compile</li> | ||||||
|    <dt><code>qir</code></dt> |    <li>shaderdb - dump program compile information for shader-db analysis</li> | ||||||
|    <dd>dump QPU IR during program compile</dd> |    <li>perf - print during performance-related events</li> | ||||||
|    <dt><code>nir</code></dt> |    <li>norast - skip actual hardware execution of commands</li> | ||||||
|    <dd>dump NIR during program compile</dd> |    <li>always_flush - flush after each draw call</li> | ||||||
|    <dt><code>tgsi</code></dt> |    <li>always_sync - wait for finish after each flush</li> | ||||||
|    <dd>dump TGSI during program compile</dd> |    <li>dump - write a GPU command stream trace file (VC4 simulator only)</li> | ||||||
|    <dt><code>shaderdb</code></dt> | </ul> | ||||||
|    <dd>dump program compile information for shader-db analysis</dd> | </ul> | ||||||
|    <dt><code>perf</code></dt> |  | ||||||
|    <dd>print during performance-related events</dd> |  | ||||||
|    <dt><code>norast</code></dt> |  | ||||||
|    <dd>skip actual hardware execution of commands</dd> |  | ||||||
|    <dt><code>always_flush</code></dt> |  | ||||||
|    <dd>flush after each draw call</dd> |  | ||||||
|    <dt><code>always_sync</code></dt> |  | ||||||
|    <dd>wait for finish after each flush</dd> |  | ||||||
|    <dt><code>dump</code></dt> |  | ||||||
|    <dd>write a GPU command stream trace file (VC4 simulator only)</dd> |  | ||||||
| </dl> |  | ||||||
| </dd> |  | ||||||
| </dl> |  | ||||||
|  |  | ||||||
|  |  | ||||||
| <p> | <p> | ||||||
|   | |||||||
| @@ -8,7 +8,7 @@ | |||||||
| <body> | <body> | ||||||
|  |  | ||||||
| <div class="header"> | <div class="header"> | ||||||
|   The Mesa 3D Graphics Library |   <h1>The Mesa 3D Graphics Library</h1> | ||||||
| </div> | </div> | ||||||
|  |  | ||||||
| <iframe src="contents.html"></iframe> | <iframe src="contents.html"></iframe> | ||||||
| @@ -23,7 +23,7 @@ The specifications follow. | |||||||
|  |  | ||||||
|  |  | ||||||
| <ul> | <ul> | ||||||
| <li><a href="specs/OLD/MESA_agp_offset.spec">MESA_agp_offset.spec</a> | <li><a href="specs/MESA_agp_offset.spec">MESA_agp_offset.spec</a> | ||||||
| <li><a href="specs/MESA_copy_sub_buffer.spec">MESA_copy_sub_buffer.spec</a> | <li><a href="specs/MESA_copy_sub_buffer.spec">MESA_copy_sub_buffer.spec</a> | ||||||
| <li><a href="specs/MESA_drm_image.spec">MESA_drm_image.spec</a> | <li><a href="specs/MESA_drm_image.spec">MESA_drm_image.spec</a> | ||||||
| <li><a href="specs/MESA_multithread_makecurrent.spec">MESA_multithread_makecurrent.spec</a> | <li><a href="specs/MESA_multithread_makecurrent.spec">MESA_multithread_makecurrent.spec</a> | ||||||
| @@ -33,7 +33,7 @@ The specifications follow. | |||||||
| <li><a href="specs/OLD/MESA_program_debug.spec">MESA_program_debug.spec</a> (obsolete) | <li><a href="specs/OLD/MESA_program_debug.spec">MESA_program_debug.spec</a> (obsolete) | ||||||
| <li><a href="specs/MESA_release_buffers.spec">MESA_release_buffers.spec</a> | <li><a href="specs/MESA_release_buffers.spec">MESA_release_buffers.spec</a> | ||||||
| <li><a href="specs/OLD/MESA_resize_buffers.spec">MESA_resize_buffers.spec</a> (obsolete) | <li><a href="specs/OLD/MESA_resize_buffers.spec">MESA_resize_buffers.spec</a> (obsolete) | ||||||
| <li><a href="specs/OLD/MESA_set_3dfx_mode.spec">MESA_set_3dfx_mode.spec</a> | <li><a href="specs/MESA_set_3dfx_mode.spec">MESA_set_3dfx_mode.spec</a> | ||||||
| <li><a href="specs/MESA_shader_debug.spec">MESA_shader_debug.spec</a> | <li><a href="specs/MESA_shader_debug.spec">MESA_shader_debug.spec</a> | ||||||
| <li><a href="specs/OLD/MESA_sprite_point.spec">MESA_sprite_point.spec</a> (obsolete) | <li><a href="specs/OLD/MESA_sprite_point.spec">MESA_sprite_point.spec</a> (obsolete) | ||||||
| <li><a href="specs/MESA_swap_control.spec">MESA_swap_control.spec</a> | <li><a href="specs/MESA_swap_control.spec">MESA_swap_control.spec</a> | ||||||
|   | |||||||
							
								
								
									
										190
									
								
								docs/faq.html
									
									
									
									
									
								
							
							
						
						
									
										190
									
								
								docs/faq.html
									
									
									
									
									
								
							| @@ -2,32 +2,42 @@ | |||||||
| <html lang="en"> | <html lang="en"> | ||||||
| <head> | <head> | ||||||
|   <meta http-equiv="content-type" content="text/html; charset=utf-8"> |   <meta http-equiv="content-type" content="text/html; charset=utf-8"> | ||||||
|   <title>Frequently Asked Questions</title> |   <title>Mesa FAQ</title> | ||||||
|   <link rel="stylesheet" type="text/css" href="mesa.css"> |   <link rel="stylesheet" type="text/css" href="mesa.css"> | ||||||
| </head> | </head> | ||||||
| <body> | <body> | ||||||
|  |  | ||||||
| <div class="header"> | <div class="header"> | ||||||
|   The Mesa 3D Graphics Library |   <h1>The Mesa 3D Graphics Library</h1> | ||||||
| </div> | </div> | ||||||
|  |  | ||||||
| <iframe src="contents.html"></iframe> | <iframe src="contents.html"></iframe> | ||||||
| <div class="content"> | <div class="content"> | ||||||
|  |  | ||||||
| <h1>Frequently Asked Questions</h1> | <center> | ||||||
| Last updated: 19 September 2018 | <h1>Mesa Frequently Asked Questions</h1> | ||||||
|  | Last updated: 9 October 2012 | ||||||
|  | </center> | ||||||
|  |  | ||||||
|  | <br> | ||||||
|  | <br> | ||||||
| <h2>Index</h2> | <h2>Index</h2> | ||||||
| <ol> | <a href="#part1">1. High-level Questions and Answers</a> | ||||||
|   <li><a href="#part1">High-level Questions and Answers</a></li> | <br> | ||||||
|   <li><a href="#part2">Compilation and Installation Problems</a></li> | <a href="#part2">2. Compilation and Installation Problems</a> | ||||||
|   <li><a href="#part3">Runtime / Rendering Problems</a></li> | <br> | ||||||
|   <li><a href="#part4">Developer Questions</a></li> | <a href="#part3">3. Runtime / Rendering Problems</a> | ||||||
| </ol> | <br> | ||||||
|  | <a href="#part4">4. Developer Questions</a> | ||||||
|  | <br> | ||||||
|  | <br> | ||||||
|  | <br> | ||||||
|  |  | ||||||
| <h2 id="part1">1. High-level Questions and Answers</h2> |  | ||||||
|  |  | ||||||
| <h3>1.1 What is Mesa?</h3> |  | ||||||
|  | <h1 id="part1">1. High-level Questions and Answers</h1> | ||||||
|  |  | ||||||
|  | <h2>1.1 What is Mesa?</h2> | ||||||
| <p> | <p> | ||||||
| Mesa is an open-source implementation of the OpenGL specification. | Mesa is an open-source implementation of the OpenGL specification. | ||||||
| OpenGL is a programming library for writing interactive 3D applications. | OpenGL is a programming library for writing interactive 3D applications. | ||||||
| @@ -96,17 +106,17 @@ the Xlib API: | |||||||
| <li>The GLX wire protocol is not supported and there's no OpenGL extension | <li>The GLX wire protocol is not supported and there's no OpenGL extension | ||||||
|     loaded by the X server. |     loaded by the X server. | ||||||
| <li>There is no hardware acceleration. | <li>There is no hardware acceleration. | ||||||
| <li>The OpenGL library, <code>libGL.so</code>, contains everything (the | <li>The OpenGL library, libGL.so, contains everything (the programming API, | ||||||
|     programming API, the GLX functions and all the rendering code). |     the GLX functions and all the rendering code). | ||||||
| </ul> | </ul> | ||||||
| <p> | <p> | ||||||
| Alternately, Mesa acts as the core for a number of OpenGL hardware drivers | Alternately, Mesa acts as the core for a number of OpenGL hardware drivers | ||||||
| within the DRI (Direct Rendering Infrastructure): | within the DRI (Direct Rendering Infrastructure): | ||||||
| <ul> | <ul> | ||||||
| <li>The <code>libGL.so</code> library provides the GL and GLX API functions, | <li>The libGL.so library provides the GL and GLX API functions, a GLX | ||||||
|     a GLX protocol encoder, and a device driver loader. |     protocol encoder, and a device driver loader. | ||||||
| <li>The device driver modules (such as <code>r200_dri.so</code>) contain | <li>The device driver modules (such as r200_dri.so) contain a built-in | ||||||
|     a built-in copy of the core Mesa code. |     copy of the core Mesa code. | ||||||
| <li>The X server loads the GLX module. | <li>The X server loads the GLX module. | ||||||
|     The GLX module decodes incoming GLX protocol and dispatches the commands |     The GLX module decodes incoming GLX protocol and dispatches the commands | ||||||
|     to a rendering module. |     to a rendering module. | ||||||
| @@ -126,7 +136,7 @@ Just follow the Mesa <a href="install.html">compilation instructions</a>. | |||||||
|  |  | ||||||
| <h2>1.6 Are there other open-source implementations of OpenGL?</h2> | <h2>1.6 Are there other open-source implementations of OpenGL?</h2> | ||||||
| <p> | <p> | ||||||
| Yes, SGI's <a href="http://web.archive.org/web/20171010115110_/http://oss.sgi.com/projects/ogl-sample/index.html"> | Yes, SGI's <a href="http://oss.sgi.com/projects/ogl-sample/index.html"> | ||||||
| OpenGL Sample Implementation (SI)</a> is available. | OpenGL Sample Implementation (SI)</a> is available. | ||||||
| The SI was written during the time that OpenGL was originally designed. | The SI was written during the time that OpenGL was originally designed. | ||||||
| Unfortunately, development of the SI has stagnated. | Unfortunately, development of the SI has stagnated. | ||||||
| @@ -138,9 +148,8 @@ Mesa is much more up to date with modern features and extensions. | |||||||
| an open-source implementation of OpenGL ES for mobile devices. | an open-source implementation of OpenGL ES for mobile devices. | ||||||
|  |  | ||||||
| <p> | <p> | ||||||
| <a href="http://web.archive.org/web/20130830162848/http://www.dsbox.com/minigl.html">miniGL</a> | <a href="http://www.dsbox.com/minigl.html">miniGL</a> | ||||||
| is a subset of OpenGL for PalmOS devices. The website is gone, but the source | is a subset of OpenGL for PalmOS devices. | ||||||
| code can still be found on <a href="https://sourceforge.net/projects/minigl/">sourceforge.net</a>. |  | ||||||
|  |  | ||||||
| <p> | <p> | ||||||
| <a href="http://bellard.org/TinyGL/">TinyGL</a> | <a href="http://bellard.org/TinyGL/">TinyGL</a> | ||||||
| @@ -170,16 +179,22 @@ popular and feature-complete. | |||||||
| </p> | </p> | ||||||
|  |  | ||||||
|  |  | ||||||
| <h2 id="part2">2. Compilation and Installation Problems</h2> |  | ||||||
|  |  | ||||||
| <h3>2.1 What's the easiest way to install Mesa?</h3> | <br> | ||||||
|  | <br> | ||||||
|  |  | ||||||
|  |  | ||||||
|  | <h1 id="part2">2. Compilation and Installation Problems</h1> | ||||||
|  |  | ||||||
|  |  | ||||||
|  | <h2>2.1 What's the easiest way to install Mesa?</h2> | ||||||
| <p> | <p> | ||||||
| If you're using a Linux-based system, your distro CD most likely already | If you're using a Linux-based system, your distro CD most likely already | ||||||
| has Mesa packages (like RPM or DEB) which you can easily install. | has Mesa packages (like RPM or DEB) which you can easily install. | ||||||
| </p> | </p> | ||||||
|  |  | ||||||
|  |  | ||||||
| <h3>2.2 I get undefined symbols such as bgnpolygon, v3f, etc...</h3> | <h2>2.2 I get undefined symbols such as bgnpolygon, v3f, etc...</h2> | ||||||
| <p> | <p> | ||||||
| You're application is written in IRIS GL, not OpenGL. | You're application is written in IRIS GL, not OpenGL. | ||||||
| IRIS GL was the predecessor to OpenGL and is a different thing (almost) | IRIS GL was the predecessor to OpenGL and is a different thing (almost) | ||||||
| @@ -188,72 +203,63 @@ Mesa's not the solution. | |||||||
| </p> | </p> | ||||||
|  |  | ||||||
|  |  | ||||||
| <h3>2.3 Where is the GLUT library?</h3> | <h2>2.3 Where is the GLUT library?</h2> | ||||||
| <p> | <p> | ||||||
| GLUT (OpenGL Utility Toolkit) is no longer in the separate | GLUT (OpenGL Utility Toolkit) is no longer in the separate MesaGLUT-x.y.z.tar.gz file. | ||||||
| <code>MesaGLUT-x.y.z.tar.gz</code> file. |  | ||||||
| If you don't already have GLUT installed, you should grab  | If you don't already have GLUT installed, you should grab  | ||||||
| <a href="http://freeglut.sourceforge.net/">freeglut</a>. | <a href="http://freeglut.sourceforge.net/">freeglut</a>. | ||||||
| </p> | </p> | ||||||
|  |  | ||||||
|  |  | ||||||
| <h3>2.4 Where is the GLw library?</h3> | <h2>2.4 Where is the GLw library?</h2> | ||||||
| <p> | <p> | ||||||
| GLw (OpenGL widget library) is now available from a separate <a href="https://gitlab.freedesktop.org/mesa/glw">git repository</a>.  Unless you're using very old Xt/Motif applications with OpenGL, you shouldn't need it. | GLw (OpenGL widget library) is now available from a separate <a href="https://cgit.freedesktop.org/mesa/glw/">git repository</a>.  Unless you're using very old Xt/Motif applications with OpenGL, you shouldn't need it. | ||||||
| </p> | </p> | ||||||
|  |  | ||||||
|  |  | ||||||
| <h2>2.5 What's the proper place for the libraries and headers?</h2> | <h2>2.5 What's the proper place for the libraries and headers?</h2> | ||||||
| <p> | <p> | ||||||
| On Linux-based systems you'll want to follow the | On Linux-based systems you'll want to follow the | ||||||
| <a href="https://www.khronos.org/registry/OpenGL/ABI/">Linux ABI</a> standard. | <a href="http://oss.sgi.com/projects/ogl-sample/ABI/index.html">Linux ABI</a> standard. | ||||||
| Basically you'll want the following: | Basically you'll want the following: | ||||||
| </p> | </p> | ||||||
| <dl> | <ul> | ||||||
| <dt><code>/usr/include/GL/gl.h</code></dt> | <li>/usr/include/GL/gl.h - the main OpenGL header | ||||||
| <dd>the main OpenGL header</dd> | </li><li>/usr/include/GL/glu.h - the OpenGL GLU (utility) header | ||||||
| <dt><code>/usr/include/GL/glu.h</code></dt> | </li><li>/usr/include/GL/glx.h - the OpenGL GLX header | ||||||
| <dd>the OpenGL GLU (utility) header</dd> | </li><li>/usr/include/GL/glext.h - the OpenGL extensions header | ||||||
| <dt><code>/usr/include/GL/glx.h</code></dt> | </li><li>/usr/include/GL/glxext.h - the OpenGL GLX extensions header | ||||||
| <dd>the OpenGL GLX header</dd> | </li><li>/usr/include/GL/osmesa.h - the Mesa off-screen rendering header | ||||||
| <dt><code>/usr/include/GL/glext.h</code></dt> | </li><li>/usr/lib/libGL.so - a symlink to libGL.so.1 | ||||||
| <dd>the OpenGL extensions header</dd> | </li><li>/usr/lib/libGL.so.1 - a symlink to libGL.so.1.xyz | ||||||
| <dt><code>/usr/include/GL/glxext.h</code></dt> | </li><li>/usr/lib/libGL.so.xyz - the actual OpenGL/Mesa library.  xyz denotes the | ||||||
| <dd>the OpenGL GLX extensions header</dd> |  | ||||||
| <dt><code>/usr/include/GL/osmesa.h</code></dt> |  | ||||||
| <dd>the Mesa off-screen rendering header</dd> |  | ||||||
| <dt><code>/usr/lib/libGL.so</code></dt> |  | ||||||
| <dd>a symlink to <code>libGL.so.1</code></dd> |  | ||||||
| <dt><code>/usr/lib/libGL.so.1</code></dt> |  | ||||||
| <dd>a symlink to <code>libGL.so.1.xyz</code></dd> |  | ||||||
| <dt><code>/usr/lib/libGL.so.xyz</code></dt> |  | ||||||
| <dd>the actual OpenGL/Mesa library.  xyz denotes the |  | ||||||
| Mesa version number. | Mesa version number. | ||||||
| </dd> | </li></ul> | ||||||
| </dl> |  | ||||||
| <p> | <p> | ||||||
| When configuring Mesa, there are three meson options that affect the install | When configuring Mesa, there are three autoconf options that affect the install | ||||||
| location that you should take care with: <code>--prefix</code>, | location that you should take care with: <code>--prefix</code>, | ||||||
| <code>--libdir</code>, and <code>-D dri-drivers-path</code>. To install Mesa | <code>--libdir</code>, and <code>--with-dri-driverdir</code>. To install Mesa | ||||||
| into the system location where it will be available for all programs to use, set | into the system location where it will be available for all programs to use, set | ||||||
| <code>--prefix=/usr</code>. Set <code>--libdir</code> to where your Linux | <code>--prefix=/usr</code>. Set <code>--libdir</code> to where your Linux | ||||||
| distribution installs system libraries, usually either <code>/usr/lib</code> or | distribution installs system libraries, usually either <code>/usr/lib</code> or | ||||||
| <code>/usr/lib64</code>. Set <code>-D dri-drivers-path</code> to the directory | <code>/usr/lib64</code>. Set <code>--with-dri-driverdir</code> to the directory | ||||||
| where your Linux distribution installs DRI drivers. To find your system's DRI | where your Linux distribution installs DRI drivers. To find your system's DRI | ||||||
| driver directory, try executing <code>find /usr -type d -name dri</code>. For | driver directory, try executing <code>find /usr -type d -name dri</code>. For | ||||||
| example, if the <code>find</code> command listed <code>/usr/lib64/dri</code>, | example, if the <code>find</code> command listed <code>/usr/lib64/dri</code>, | ||||||
| then set <code>-D dri-drivers-path=/usr/lib64/dri</code>. | then set <code>--with-dri-driverdir=/usr/lib64/dri</code>. | ||||||
| </p> | </p> | ||||||
| <p> | <p> | ||||||
| After determining the correct values for the install location, configure Mesa | After determining the correct values for the install location, configure Mesa | ||||||
| with <code>meson configure --prefix=/usr --libdir=xxx -D dri-drivers-path=xxx</code> | with <code>./configure --prefix=/usr --libdir=xxx --with-dri-driverdir=xxx</code> | ||||||
| and then install with <code>sudo ninja install</code>. | and then install with <code>sudo make install</code>. | ||||||
| </p> | </p> | ||||||
|  | <br> | ||||||
|  | <br> | ||||||
|  |  | ||||||
|  |  | ||||||
| <h2 id="part3">3. Runtime / Rendering Problems</h2> | <h1 id="part3">3. Runtime / Rendering Problems</h1> | ||||||
|  |  | ||||||
| <h3>3.1 Rendering is slow / why isn't my graphics hardware being used?</h3> | <h2>3.1 Rendering is slow / why isn't my graphics hardware being used?</h2> | ||||||
| <p> | <p> | ||||||
| If Mesa can't use its hardware accelerated drivers it falls back on one of its software renderers. | If Mesa can't use its hardware accelerated drivers it falls back on one of its software renderers. | ||||||
| (eg. classic swrast, softpipe or llvmpipe) | (eg. classic swrast, softpipe or llvmpipe) | ||||||
| @@ -274,57 +280,60 @@ If your DRI-based driver isn't working, go to the | |||||||
| </p> | </p> | ||||||
|  |  | ||||||
|  |  | ||||||
| <h3>3.2 I'm seeing errors in depth (Z) buffering.  Why?</h3> | <h2>3.2 I'm seeing errors in depth (Z) buffering.  Why?</h2> | ||||||
| <p> | <p> | ||||||
| Make sure the ratio of the far to near clipping planes isn't too great. | Make sure the ratio of the far to near clipping planes isn't too great. | ||||||
| Look | Look | ||||||
| <a href="https://www.opengl.org/archives/resources/faq/technical/depthbuffer.htm#0040">here</a> | <a href="https://www.opengl.org/resources/faq/technical/depthbuffer.htm#0040">here</a> | ||||||
| for details. | for details. | ||||||
| </p> | </p> | ||||||
| <p> | <p> | ||||||
| Mesa uses a 16-bit depth buffer by default which is smaller and faster | Mesa uses a 16-bit depth buffer by default which is smaller and faster | ||||||
| to clear than a 32-bit buffer but not as accurate. | to clear than a 32-bit buffer but not as accurate. | ||||||
| If you need a deeper you can modify the parameters to | If you need a deeper you can modify the parameters to | ||||||
| <code>glXChooseVisual</code> in your code. | <code> glXChooseVisual</code> in your code. | ||||||
| </p> | </p> | ||||||
|  |  | ||||||
|  |  | ||||||
| <h3>3.3 Why Isn't depth buffering working at all?</h3> | <h2>3.3 Why Isn't depth buffering working at all?</h2> | ||||||
| <p> | <p> | ||||||
| Be sure you're requesting a depth buffered-visual.  If you set the | Be sure you're requesting a depth buffered-visual.  If you set the MESA_DEBUG | ||||||
| <code>MESA_DEBUG</code> environment variable it will warn you about trying | environment variable it will warn you about trying to enable depth testing | ||||||
| to enable depth testing when you don't have a depth buffer. | when you don't have a depth buffer. | ||||||
| </p> | </p> | ||||||
| <p>Specifically, make sure <code>glutInitDisplayMode</code> is being called | <p>Specifically, make sure <code>glutInitDisplayMode</code> is being called | ||||||
| with <code>GLUT_DEPTH</code> or <code>glXChooseVisual</code> is being | with <code>GLUT_DEPTH</code> or <code>glXChooseVisual</code> is being | ||||||
| called with a non-zero value for <code>GLX_DEPTH_SIZE</code>. | called with a non-zero value for GLX_DEPTH_SIZE. | ||||||
| </p> | </p> | ||||||
| <p>This discussion applies to stencil buffers, accumulation buffers and | <p>This discussion applies to stencil buffers, accumulation buffers and | ||||||
| alpha channels too. | alpha channels too. | ||||||
| </p> | </p> | ||||||
|  |  | ||||||
|  |  | ||||||
| <h3>3.4 Why does <code>glGetString()</code> always return <code>NULL</code>?</h3> | <h2>3.4 Why does glGetString() always return NULL?</h2> | ||||||
| <p> | <p> | ||||||
| Be sure you have an active/current OpenGL rendering context before | Be sure you have an active/current OpenGL rendering context before | ||||||
| calling <code>glGetString</code>. | calling glGetString. | ||||||
| </p> | </p> | ||||||
|  |  | ||||||
|  |  | ||||||
| <h3>3.5 <code>GL_POINTS</code> and <code>GL_LINES</code> don't touch the | <h2>3.5 GL_POINTS and GL_LINES don't touch the right pixels</h2> | ||||||
| right pixels</h3> |  | ||||||
| <p> | <p> | ||||||
| If you're trying to draw a filled region by using <code>GL_POINTS</code> or | If you're trying to draw a filled region by using GL_POINTS or GL_LINES | ||||||
| <code>GL_LINES</code> and seeing holes or gaps it's because of a float-to-int | and seeing holes or gaps it's because of a float-to-int rounding problem. | ||||||
| rounding problem. But this is not a bug. See Appendix H of the OpenGL | But this is not a bug. | ||||||
| Programming Guide - "OpenGL Correctness Tips". Basically, applying a | See Appendix H of the OpenGL Programming Guide - "OpenGL Correctness Tips". | ||||||
| translation of (0.375, 0.375, 0.0) to your coordinates will fix the problem. | Basically, applying a translation of (0.375, 0.375, 0.0) to your coordinates | ||||||
|  | will fix the problem. | ||||||
| </p> | </p> | ||||||
|  |  | ||||||
|  | <br> | ||||||
|  | <br> | ||||||
|  |  | ||||||
| <h2 id="part4">4. Developer Questions</h2> |  | ||||||
|  |  | ||||||
| <h3>4.1 How can I contribute?</h3> | <h1 id="part4">4. Developer Questions</h1> | ||||||
|  |  | ||||||
|  | <h2>4.1 How can I contribute?</h2> | ||||||
| <p> | <p> | ||||||
| First, join the <a href="lists.html">mesa-dev mailing list</a>. | First, join the <a href="lists.html">mesa-dev mailing list</a>. | ||||||
| That's where Mesa development is discussed. | That's where Mesa development is discussed. | ||||||
| @@ -338,7 +347,7 @@ You should read it. | |||||||
| extensions, writing hardware drivers (for the DRI), and code optimization. | extensions, writing hardware drivers (for the DRI), and code optimization. | ||||||
| </p> | </p> | ||||||
|  |  | ||||||
| <h3>4.2 How do I write a new device driver?</h3> | <h2>4.2 How do I write a new device driver?</h2> | ||||||
| <p> | <p> | ||||||
| Unfortunately, writing a device driver isn't easy. | Unfortunately, writing a device driver isn't easy. | ||||||
| It requires detailed understanding of OpenGL, the Mesa code, and your | It requires detailed understanding of OpenGL, the Mesa code, and your | ||||||
| @@ -362,19 +371,20 @@ the archives) is a good way to get information. | |||||||
| </p> | </p> | ||||||
|  |  | ||||||
|  |  | ||||||
| <h3>4.3 Why isn't <code>GL_EXT_texture_compression_s3tc</code> implemented in | <h2>4.3 Why isn't GL_EXT_texture_compression_s3tc implemented in Mesa?</h2> | ||||||
| Mesa?</h3> |  | ||||||
| <p> | <p> | ||||||
| Oh but it is! Prior to 2nd October 2017, the Mesa project did not include s3tc | The <a href="http://oss.sgi.com/projects/ogl-sample/registry/EXT/texture_compression_s3tc.txt">specification for the extension</a> | ||||||
| support due to intellectual property (IP) and/or patent issues around the s3tc | indicates that there are intellectual property (IP) and/or patent issues | ||||||
| algorithm. | to be dealt with. | ||||||
|  | </p> | ||||||
|  | <p>We've been unsuccessful in getting a response from S3 (or whoever owns | ||||||
|  | the IP nowadays) to indicate whether or not an open source project can | ||||||
|  | implement the extension (specifically the compression/decompression | ||||||
|  | algorithms). | ||||||
| </p> | </p> | ||||||
| <p> | <p> | ||||||
| As of Mesa 17.3.0, Mesa now officially supports s3tc, as the patent has expired. | In the mean time, a 3rd party <a href="https://dri.freedesktop.org/wiki/S3TC"> | ||||||
| </p> | plug-in library</a> is available. | ||||||
| <p> |  | ||||||
| In versions prior to this, a 3rd party <a href="https://dri.freedesktop.org/wiki/S3TC"> |  | ||||||
| plug-in library</a> was required. |  | ||||||
| </p> | </p> | ||||||
|  |  | ||||||
| </div> | </div> | ||||||
|   | |||||||
							
								
								
									
										
											BIN
										
									
								
								docs/favicon.ico
									
									
									
									
									
								
							
							
						
						
									
										
											BIN
										
									
								
								docs/favicon.ico
									
									
									
									
									
								
							
										
											Binary file not shown.
										
									
								
							| Before Width: | Height: | Size: 13 KiB | 
							
								
								
									
										
											BIN
										
									
								
								docs/favicon.png
									
									
									
									
									
								
							
							
						
						
									
										
											BIN
										
									
								
								docs/favicon.png
									
									
									
									
									
								
							
										
											Binary file not shown.
										
									
								
							| Before Width: | Height: | Size: 2.9 KiB | 
| @@ -24,19 +24,16 @@ not started | |||||||
|  |  | ||||||
| # OpenGL Core and Compatibility context support | # OpenGL Core and Compatibility context support | ||||||
|  |  | ||||||
| Some drivers do not support the Compatibility profile or the | OpenGL 3.1 and later versions are only supported with the Core profile. | ||||||
| ARB_compatibility extensions.  If an application does not request a | There are no plans to support GL_ARB_compatibility. The last supported OpenGL | ||||||
| specific version without the forward-compatiblity flag, such drivers | version with all deprecated features is 3.0. Some of the later GL features | ||||||
| will be limited to OpenGL 3.0.  If an application requests OpenGL 3.1, | are exposed in the 3.0 context as extensions. | ||||||
| it will get a context that may or may not have the ARB_compatibility |  | ||||||
| extension enabled.  Some of the later GL features are exposed in the 3.0 |  | ||||||
| context as extensions. |  | ||||||
|  |  | ||||||
|  |  | ||||||
| Feature                                                 Status | Feature                                                 Status | ||||||
| ------------------------------------------------------- ------------------------ | ------------------------------------------------------- ------------------------ | ||||||
|  |  | ||||||
| GL 3.0, GLSL 1.30 --- all DONE: freedreno, i965, nv50, nvc0, r600, radeonsi, llvmpipe, softpipe, swr, virgl | GL 3.0, GLSL 1.30 --- all DONE: freedreno, i965, nv50, nvc0, r600, radeonsi, llvmpipe, softpipe, swr | ||||||
|  |  | ||||||
|   glBindFragDataLocation, glGetFragDataLocation         DONE |   glBindFragDataLocation, glGetFragDataLocation         DONE | ||||||
|   GL_NV_conditional_render (Conditional rendering)      DONE () |   GL_NV_conditional_render (Conditional rendering)      DONE () | ||||||
| @@ -63,12 +60,12 @@ GL 3.0, GLSL 1.30 --- all DONE: freedreno, i965, nv50, nvc0, r600, radeonsi, llv | |||||||
|   glVertexAttribI commands                              DONE |   glVertexAttribI commands                              DONE | ||||||
|   Depth format cube textures                            DONE () |   Depth format cube textures                            DONE () | ||||||
|   GLX_ARB_create_context (GLX 1.4 is required)          DONE |   GLX_ARB_create_context (GLX 1.4 is required)          DONE | ||||||
|   Multisample anti-aliasing                             DONE (freedreno/a5xx+, freedreno (*), llvmpipe (*), softpipe (*), swr (*)) |   Multisample anti-aliasing                             DONE (freedreno (*), llvmpipe (*), softpipe (*), swr (*)) | ||||||
|  |  | ||||||
| (*) freedreno (a2xx-a4xx), llvmpipe, softpipe, and swr have fake Multisample anti-aliasing support | (*) freedreno, llvmpipe, softpipe, and swr have fake Multisample anti-aliasing support | ||||||
|  |  | ||||||
|  |  | ||||||
| GL 3.1, GLSL 1.40 --- all DONE: freedreno, i965, nv50, nvc0, r600, radeonsi, llvmpipe, softpipe, swr, virgl | GL 3.1, GLSL 1.40 --- all DONE: freedreno, i965, nv50, nvc0, r600, radeonsi, llvmpipe, softpipe, swr | ||||||
|  |  | ||||||
|   Forward compatible context support/deprecations       DONE () |   Forward compatible context support/deprecations       DONE () | ||||||
|   GL_ARB_draw_instanced (Instanced drawing)             DONE () |   GL_ARB_draw_instanced (Instanced drawing)             DONE () | ||||||
| @@ -81,7 +78,7 @@ GL 3.1, GLSL 1.40 --- all DONE: freedreno, i965, nv50, nvc0, r600, radeonsi, llv | |||||||
|   GL_EXT_texture_snorm (Signed normalized textures)     DONE () |   GL_EXT_texture_snorm (Signed normalized textures)     DONE () | ||||||
|  |  | ||||||
|  |  | ||||||
| GL 3.2, GLSL 1.50 --- all DONE: i965, nv50, nvc0, r600, radeonsi, llvmpipe, softpipe, swr, virgl | GL 3.2, GLSL 1.50 --- all DONE: i965, nv50, nvc0, r600, radeonsi, llvmpipe, softpipe, swr | ||||||
|  |  | ||||||
|   Core/compatibility profiles                           DONE |   Core/compatibility profiles                           DONE | ||||||
|   Geometry shaders                                      DONE () |   Geometry shaders                                      DONE () | ||||||
| @@ -90,13 +87,13 @@ GL 3.2, GLSL 1.50 --- all DONE: i965, nv50, nvc0, r600, radeonsi, llvmpipe, soft | |||||||
|   GL_ARB_fragment_coord_conventions (Frag shader coord) DONE (freedreno) |   GL_ARB_fragment_coord_conventions (Frag shader coord) DONE (freedreno) | ||||||
|   GL_ARB_provoking_vertex (Provoking vertex)            DONE (freedreno) |   GL_ARB_provoking_vertex (Provoking vertex)            DONE (freedreno) | ||||||
|   GL_ARB_seamless_cube_map (Seamless cubemaps)          DONE (freedreno) |   GL_ARB_seamless_cube_map (Seamless cubemaps)          DONE (freedreno) | ||||||
|   GL_ARB_texture_multisample (Multisample textures)     DONE (freedreno/a5xx+) |   GL_ARB_texture_multisample (Multisample textures)     DONE () | ||||||
|   GL_ARB_depth_clamp (Frag depth clamp)                 DONE (freedreno) |   GL_ARB_depth_clamp (Frag depth clamp)                 DONE (freedreno) | ||||||
|   GL_ARB_sync (Fence objects)                           DONE (freedreno) |   GL_ARB_sync (Fence objects)                           DONE (freedreno) | ||||||
|   GLX_ARB_create_context_profile                        DONE |   GLX_ARB_create_context_profile                        DONE | ||||||
|  |  | ||||||
|  |  | ||||||
| GL 3.3, GLSL 3.30 --- all DONE: i965, nv50, nvc0, r600, radeonsi, llvmpipe, softpipe, virgl | GL 3.3, GLSL 3.30 --- all DONE: i965, nv50, nvc0, r600, radeonsi, llvmpipe, softpipe | ||||||
|  |  | ||||||
|   GL_ARB_blend_func_extended                            DONE (freedreno/a3xx, swr) |   GL_ARB_blend_func_extended                            DONE (freedreno/a3xx, swr) | ||||||
|   GL_ARB_explicit_attrib_location                       DONE (all drivers that support GLSL) |   GL_ARB_explicit_attrib_location                       DONE (all drivers that support GLSL) | ||||||
| @@ -105,162 +102,162 @@ GL 3.3, GLSL 3.30 --- all DONE: i965, nv50, nvc0, r600, radeonsi, llvmpipe, soft | |||||||
|   GL_ARB_shader_bit_encoding                            DONE (freedreno, swr) |   GL_ARB_shader_bit_encoding                            DONE (freedreno, swr) | ||||||
|   GL_ARB_texture_rgb10_a2ui                             DONE (freedreno, swr) |   GL_ARB_texture_rgb10_a2ui                             DONE (freedreno, swr) | ||||||
|   GL_ARB_texture_swizzle                                DONE (freedreno, swr) |   GL_ARB_texture_swizzle                                DONE (freedreno, swr) | ||||||
|   GL_ARB_timer_query                                    DONE (freedreno, swr) |   GL_ARB_timer_query                                    DONE (swr) | ||||||
|   GL_ARB_instanced_arrays                               DONE (freedreno, swr) |   GL_ARB_instanced_arrays                               DONE (freedreno, swr) | ||||||
|   GL_ARB_vertex_type_2_10_10_10_rev                     DONE (freedreno, swr) |   GL_ARB_vertex_type_2_10_10_10_rev                     DONE (freedreno, swr) | ||||||
|  |  | ||||||
|  |  | ||||||
| GL 4.0, GLSL 4.00 --- all DONE: i965/gen7+, nvc0, r600, radeonsi, virgl | GL 4.0, GLSL 4.00 --- all DONE: i965/gen7+, nvc0, r600, radeonsi | ||||||
|  |  | ||||||
|   GL_ARB_draw_buffers_blend                             DONE (freedreno, i965/gen6+, nv50, llvmpipe, softpipe, swr) |   GL_ARB_draw_buffers_blend                             DONE (freedreno, i965/gen6+, nv50, llvmpipe, softpipe, swr) | ||||||
|   GL_ARB_draw_indirect                                  DONE (freedreno, i965/gen7+, llvmpipe, softpipe, swr) |   GL_ARB_draw_indirect                                  DONE (i965/gen7+, llvmpipe, softpipe, swr) | ||||||
|   GL_ARB_gpu_shader5                                    DONE (i965/gen7+) |   GL_ARB_gpu_shader5                                    DONE (i965/gen7+) | ||||||
|   - 'precise' qualifier                                 DONE (softpipe) |   - 'precise' qualifier                                 DONE | ||||||
|   - Dynamically uniform sampler array indices           DONE (softpipe) |   - Dynamically uniform sampler array indices           DONE (softpipe) | ||||||
|   - Dynamically uniform UBO array indices               DONE (freedreno, softpipe) |   - Dynamically uniform UBO array indices               DONE () | ||||||
|   - Implicit signed -> unsigned conversions             DONE (softpipe) |   - Implicit signed -> unsigned conversions             DONE | ||||||
|   - Fused multiply-add                                  DONE (softpipe) |   - Fused multiply-add                                  DONE () | ||||||
|   - Packing/bitfield/conversion functions               DONE (freedreno, softpipe) |   - Packing/bitfield/conversion functions               DONE (softpipe) | ||||||
|   - Enhanced textureGather                              DONE (freedreno, softpipe) |   - Enhanced textureGather                              DONE (softpipe) | ||||||
|   - Geometry shader instancing                          DONE (llvmpipe, softpipe) |   - Geometry shader instancing                          DONE (llvmpipe, softpipe) | ||||||
|   - Geometry shader multiple streams                    DONE (softpipe) |   - Geometry shader multiple streams                    DONE () | ||||||
|   - Enhanced per-sample shading                         DONE () |   - Enhanced per-sample shading                         DONE () | ||||||
|   - Interpolation functions                             DONE (softpipe) |   - Interpolation functions                             DONE () | ||||||
|   - New overload resolution rules                       DONE (softpipe) |   - New overload resolution rules                       DONE | ||||||
|   GL_ARB_gpu_shader_fp64                                DONE (i965/gen7+, llvmpipe, softpipe, swr) |   GL_ARB_gpu_shader_fp64                                DONE (i965/gen7+, llvmpipe, softpipe) | ||||||
|   GL_ARB_sample_shading                                 DONE (freedreno/a6xx, i965/gen6+, nv50) |   GL_ARB_sample_shading                                 DONE (i965/gen6+, nv50) | ||||||
|   GL_ARB_shader_subroutine                              DONE (freedreno, i965/gen6+, nv50, llvmpipe, softpipe, swr) |   GL_ARB_shader_subroutine                              DONE (i965/gen6+, nv50, llvmpipe, softpipe, swr) | ||||||
|   GL_ARB_tessellation_shader                            DONE (i965/gen7+) |   GL_ARB_tessellation_shader                            DONE (i965/gen7+) | ||||||
|   GL_ARB_texture_buffer_object_rgb32                    DONE (freedreno, i965/gen6+, llvmpipe, softpipe, swr) |   GL_ARB_texture_buffer_object_rgb32                    DONE (i965/gen6+, llvmpipe, softpipe, swr) | ||||||
|   GL_ARB_texture_cube_map_array                         DONE (i965/gen6+, nv50, llvmpipe, softpipe, swr) |   GL_ARB_texture_cube_map_array                         DONE (i965/gen6+, nv50, llvmpipe, softpipe) | ||||||
|   GL_ARB_texture_gather                                 DONE (freedreno, i965/gen6+, nv50, llvmpipe, softpipe, swr) |   GL_ARB_texture_gather                                 DONE (i965/gen6+, nv50, llvmpipe, softpipe, swr) | ||||||
|   GL_ARB_texture_query_lod                              DONE (freedreno, i965, nv50, llvmpipe, softpipe, swr) |   GL_ARB_texture_query_lod                              DONE (i965, nv50, llvmpipe, softpipe) | ||||||
|   GL_ARB_transform_feedback2                            DONE (i965/gen6+, nv50, llvmpipe, softpipe, swr) |   GL_ARB_transform_feedback2                            DONE (i965/gen6+, nv50, llvmpipe, softpipe, swr) | ||||||
|   GL_ARB_transform_feedback3                            DONE (i965/gen7+, llvmpipe, softpipe, swr) |   GL_ARB_transform_feedback3                            DONE (i965/gen7+, llvmpipe, softpipe, swr) | ||||||
|  |  | ||||||
|  |  | ||||||
| GL 4.1, GLSL 4.10 --- all DONE: i965/gen7+, nvc0, r600, radeonsi, virgl | GL 4.1, GLSL 4.10 --- all DONE: i965/gen7+, nvc0, r600, radeonsi | ||||||
|  |  | ||||||
|   GL_ARB_ES2_compatibility                              DONE (freedreno, i965, nv50, llvmpipe, softpipe, swr) |   GL_ARB_ES2_compatibility                              DONE (i965, nv50, llvmpipe, softpipe, swr) | ||||||
|   GL_ARB_get_program_binary                             DONE (0 or 1 binary formats) |   GL_ARB_get_program_binary                             DONE (0 binary formats) | ||||||
|   GL_ARB_separate_shader_objects                        DONE (all drivers) |   GL_ARB_separate_shader_objects                        DONE (all drivers) | ||||||
|   GL_ARB_shader_precision                               DONE (i965/gen7+, all drivers that support GLSL 4.10) |   GL_ARB_shader_precision                               DONE (i965/gen7+, all drivers that support GLSL 4.10) | ||||||
|   GL_ARB_vertex_attrib_64bit                            DONE (i965/gen7+, llvmpipe, softpipe, swr) |   GL_ARB_vertex_attrib_64bit                            DONE (i965/gen7+, llvmpipe, softpipe) | ||||||
|   GL_ARB_viewport_array                                 DONE (i965, nv50, llvmpipe, softpipe, swr) |   GL_ARB_viewport_array                                 DONE (i965, nv50, llvmpipe, softpipe) | ||||||
|  |  | ||||||
|  |  | ||||||
| GL 4.2, GLSL 4.20 -- all DONE: i965/gen7+, nvc0, r600, radeonsi, virgl | GL 4.2, GLSL 4.20 -- all DONE: i965/gen7+, nvc0, radeonsi | ||||||
|  |  | ||||||
|   GL_ARB_texture_compression_bptc                       DONE (freedreno, i965) |   GL_ARB_texture_compression_bptc                       DONE (i965, r600) | ||||||
|   GL_ARB_compressed_texture_pixel_storage               DONE (all drivers) |   GL_ARB_compressed_texture_pixel_storage               DONE (all drivers) | ||||||
|   GL_ARB_shader_atomic_counters                         DONE (freedreno/a5xx+, i965, llvmpipe, softpipe) |   GL_ARB_shader_atomic_counters                         DONE (i965, softpipe) | ||||||
|   GL_ARB_texture_storage                                DONE (all drivers) |   GL_ARB_texture_storage                                DONE (all drivers) | ||||||
|   GL_ARB_transform_feedback_instanced                   DONE (freedreno, i965, nv50, llvmpipe, softpipe, swr) |   GL_ARB_transform_feedback_instanced                   DONE (i965, nv50, r600, llvmpipe, softpipe, swr) | ||||||
|   GL_ARB_base_instance                                  DONE (freedreno, i965, nv50, llvmpipe, softpipe, swr) |   GL_ARB_base_instance                                  DONE (i965, nv50, r600, llvmpipe, softpipe, swr) | ||||||
|   GL_ARB_shader_image_load_store                        DONE (freedreno/a5xx+, i965, llvmpipe, softpipe) |   GL_ARB_shader_image_load_store                        DONE (i965, softpipe) | ||||||
|   GL_ARB_conservative_depth                             DONE (all drivers that support GLSL 1.30) |   GL_ARB_conservative_depth                             DONE (all drivers that support GLSL 1.30) | ||||||
|   GL_ARB_shading_language_420pack                       DONE (all drivers that support GLSL 1.30) |   GL_ARB_shading_language_420pack                       DONE (all drivers that support GLSL 1.30) | ||||||
|   GL_ARB_shading_language_packing                       DONE (all drivers) |   GL_ARB_shading_language_packing                       DONE (all drivers) | ||||||
|   GL_ARB_internalformat_query                           DONE (freedreno, i965, nv50, llvmpipe, softpipe, swr) |   GL_ARB_internalformat_query                           DONE (i965, nv50, r600, llvmpipe, softpipe, swr) | ||||||
|   GL_ARB_map_buffer_alignment                           DONE (all drivers) |   GL_ARB_map_buffer_alignment                           DONE (all drivers) | ||||||
|  |  | ||||||
|  |  | ||||||
| GL 4.3, GLSL 4.30 -- all DONE: i965/gen8+, nvc0, r600, radeonsi, virgl | GL 4.3, GLSL 4.30 -- all DONE: i965/gen8+, nvc0, radeonsi | ||||||
|  |  | ||||||
|   GL_ARB_arrays_of_arrays                               DONE (all drivers that support GLSL 1.30) |   GL_ARB_arrays_of_arrays                               DONE (all drivers that support GLSL 1.30) | ||||||
|   GL_ARB_ES3_compatibility                              DONE (all drivers that support GLSL 3.30) |   GL_ARB_ES3_compatibility                              DONE (all drivers that support GLSL 3.30) | ||||||
|   GL_ARB_clear_buffer_object                            DONE (all drivers) |   GL_ARB_clear_buffer_object                            DONE (all drivers) | ||||||
|   GL_ARB_compute_shader                                 DONE (freedreno/a5xx+, i965, llvmpipe, softpipe) |   GL_ARB_compute_shader                                 DONE (i965, softpipe) | ||||||
|   GL_ARB_copy_image                                     DONE (i965, nv50, softpipe, llvmpipe, swr) |   GL_ARB_copy_image                                     DONE (i965, nv50, r600, softpipe, llvmpipe) | ||||||
|   GL_KHR_debug                                          DONE (all drivers) |   GL_KHR_debug                                          DONE (all drivers) | ||||||
|   GL_ARB_explicit_uniform_location                      DONE (all drivers that support GLSL) |   GL_ARB_explicit_uniform_location                      DONE (all drivers that support GLSL) | ||||||
|   GL_ARB_fragment_layer_viewport                        DONE (i965, nv50, llvmpipe, softpipe, swr) |   GL_ARB_fragment_layer_viewport                        DONE (i965, nv50, r600, llvmpipe, softpipe) | ||||||
|   GL_ARB_framebuffer_no_attachments                     DONE (freedreno, i965, llvmpipe, softpipe) |   GL_ARB_framebuffer_no_attachments                     DONE (i965, r600, softpipe) | ||||||
|   GL_ARB_internalformat_query2                          DONE (all drivers) |   GL_ARB_internalformat_query2                          DONE (all drivers) | ||||||
|   GL_ARB_invalidate_subdata                             DONE (all drivers) |   GL_ARB_invalidate_subdata                             DONE (all drivers) | ||||||
|   GL_ARB_multi_draw_indirect                            DONE (freedreno, i965, llvmpipe, softpipe, swr) |   GL_ARB_multi_draw_indirect                            DONE (i965, r600, llvmpipe, softpipe, swr) | ||||||
|   GL_ARB_program_interface_query                        DONE (all drivers) |   GL_ARB_program_interface_query                        DONE (all drivers) | ||||||
|   GL_ARB_robust_buffer_access_behavior                  DONE (i965) |   GL_ARB_robust_buffer_access_behavior                  DONE (i965) | ||||||
|   GL_ARB_shader_image_size                              DONE (freedreno/a5xx+, i965, llvmpipe, softpipe) |   GL_ARB_shader_image_size                              DONE (i965, softpipe) | ||||||
|   GL_ARB_shader_storage_buffer_object                   DONE (freedreno/a5xx+, i965, llvmpipe, softpipe) |   GL_ARB_shader_storage_buffer_object                   DONE (i965, softpipe) | ||||||
|   GL_ARB_stencil_texturing                              DONE (freedreno, i965/hsw+, nv50, llvmpipe, softpipe, swr) |   GL_ARB_stencil_texturing                              DONE (i965/hsw+, nv50, r600, llvmpipe, softpipe, swr) | ||||||
|   GL_ARB_texture_buffer_range                           DONE (freedreno, nv50, i965, softpipe, llvmpipe, swr) |   GL_ARB_texture_buffer_range                           DONE (nv50, i965, r600, llvmpipe) | ||||||
|   GL_ARB_texture_query_levels                           DONE (all drivers that support GLSL 1.30) |   GL_ARB_texture_query_levels                           DONE (all drivers that support GLSL 1.30) | ||||||
|   GL_ARB_texture_storage_multisample                    DONE (all drivers that support GL_ARB_texture_multisample) |   GL_ARB_texture_storage_multisample                    DONE (all drivers that support GL_ARB_texture_multisample) | ||||||
|   GL_ARB_texture_view                                   DONE (freedreno, i965, nv50, llvmpipe, softpipe, swr) |   GL_ARB_texture_view                                   DONE (i965, nv50, r600, llvmpipe, softpipe, swr) | ||||||
|   GL_ARB_vertex_attrib_binding                          DONE (all drivers) |   GL_ARB_vertex_attrib_binding                          DONE (all drivers) | ||||||
|  |  | ||||||
|  |  | ||||||
| GL 4.4, GLSL 4.40 -- all DONE: i965/gen8+, nvc0, r600, radeonsi | GL 4.4, GLSL 4.40 -- all DONE: i965/gen8+, nvc0, radeonsi | ||||||
|  |  | ||||||
|   GL_MAX_VERTEX_ATTRIB_STRIDE                           DONE (all drivers) |   GL_MAX_VERTEX_ATTRIB_STRIDE                           DONE (all drivers) | ||||||
|   GL_ARB_buffer_storage                                 DONE (freedreno, i965, nv50, llvmpipe, swr) |   GL_ARB_buffer_storage                                 DONE (i965, nv50, r600, llvmpipe, swr) | ||||||
|   GL_ARB_clear_texture                                  DONE (i965, nv50, llvmpipe, softpipe, swr) |   GL_ARB_clear_texture                                  DONE (i965, nv50, r600, llvmpipe, softpipe, swr) | ||||||
|   GL_ARB_enhanced_layouts                               DONE (i965, nv50, llvmpipe, softpipe, virgl) |   GL_ARB_enhanced_layouts                               DONE (i965, nv50, llvmpipe, softpipe) | ||||||
|   - compile-time constant expressions                   DONE |   - compile-time constant expressions                   DONE | ||||||
|   - explicit byte offsets for blocks                    DONE |   - explicit byte offsets for blocks                    DONE | ||||||
|   - forced alignment within blocks                      DONE |   - forced alignment within blocks                      DONE | ||||||
|   - specified vec4-slot component numbers               DONE |   - specified vec4-slot component numbers               DONE (i965, nv50, llvmpipe, softpipe) | ||||||
|   - specified transform/feedback layout                 DONE |   - specified transform/feedback layout                 DONE | ||||||
|   - input/output block locations                        DONE |   - input/output block locations                        DONE | ||||||
|   GL_ARB_multi_bind                                     DONE (all drivers) |   GL_ARB_multi_bind                                     DONE (all drivers) | ||||||
|   GL_ARB_query_buffer_object                            DONE (i965/hsw+, virgl) |   GL_ARB_query_buffer_object                            DONE (i965/hsw+) | ||||||
|   GL_ARB_texture_mirror_clamp_to_edge                   DONE (i965, nv50, llvmpipe, softpipe, swr, virgl) |   GL_ARB_texture_mirror_clamp_to_edge                   DONE (i965, nv50, r600, llvmpipe, softpipe, swr) | ||||||
|   GL_ARB_texture_stencil8                               DONE (freedreno, i965/hsw+, nv50, llvmpipe, softpipe, swr, virgl) |   GL_ARB_texture_stencil8                               DONE (i965/hsw+, nv50, r600, llvmpipe, softpipe, swr) | ||||||
|   GL_ARB_vertex_type_10f_11f_11f_rev                    DONE (i965, nv50, llvmpipe, softpipe, swr, virgl) |   GL_ARB_vertex_type_10f_11f_11f_rev                    DONE (i965, nv50, r600, llvmpipe, softpipe, swr) | ||||||
|  |  | ||||||
| GL 4.5, GLSL 4.50 -- all DONE: nvc0, radeonsi, r600 | GL 4.5, GLSL 4.50 -- all DONE: nvc0, radeonsi | ||||||
|  |  | ||||||
|   GL_ARB_ES3_1_compatibility                            DONE (i965/hsw+, softpipe, virgl) |   GL_ARB_ES3_1_compatibility                            DONE (i965/hsw+) | ||||||
|   GL_ARB_clip_control                                   DONE (freedreno, i965, nv50, llvmpipe, softpipe, swr) |   GL_ARB_clip_control                                   DONE (i965, nv50, r600, llvmpipe, softpipe, swr) | ||||||
|   GL_ARB_conditional_render_inverted                    DONE (freedreno, i965, nv50, llvmpipe, softpipe, swr, virgl) |   GL_ARB_conditional_render_inverted                    DONE (i965, nv50, r600, llvmpipe, softpipe, swr) | ||||||
|   GL_ARB_cull_distance                                  DONE (i965, nv50, llvmpipe, softpipe, swr, virgl) |   GL_ARB_cull_distance                                  DONE (i965, nv50, llvmpipe, softpipe, swr) | ||||||
|   GL_ARB_derivative_control                             DONE (i965, nv50, softpipe, virgl) |   GL_ARB_derivative_control                             DONE (i965, nv50, r600) | ||||||
|   GL_ARB_direct_state_access                            DONE (all drivers) |   GL_ARB_direct_state_access                            DONE (all drivers) | ||||||
|   GL_ARB_get_texture_sub_image                          DONE (all drivers) |   GL_ARB_get_texture_sub_image                          DONE (all drivers) | ||||||
|   GL_ARB_shader_texture_image_samples                   DONE (i965, nv50, virgl) |   GL_ARB_shader_texture_image_samples                   DONE (i965, nv50, r600) | ||||||
|   GL_ARB_texture_barrier                                DONE (freedreno, i965, nv50, virgl) |   GL_ARB_texture_barrier                                DONE (i965, nv50, r600) | ||||||
|   GL_KHR_context_flush_control                          DONE (all - but needs GLX/EGL extension to be useful) |   GL_KHR_context_flush_control                          DONE (all - but needs GLX/EGL extension to be useful) | ||||||
|   GL_KHR_robustness                                     DONE (freedreno, i965) |   GL_KHR_robustness                                     DONE (i965) | ||||||
|   GL_EXT_shader_integer_mix                             DONE (all drivers that support GLSL) |   GL_EXT_shader_integer_mix                             DONE (all drivers that support GLSL) | ||||||
|  |  | ||||||
| GL 4.6, GLSL 4.60 | GL 4.6, GLSL 4.60 | ||||||
|  |  | ||||||
|   GL_ARB_gl_spirv                                       DONE (i965/gen7+) |   GL_ARB_gl_spirv                                       in progress (Nicolai Hähnle, Ian Romanick) | ||||||
|   GL_ARB_indirect_parameters                            DONE (i965/gen7+, nvc0, radeonsi, virgl) |   GL_ARB_indirect_parameters                            DONE (i965/gen7+, nvc0, radeonsi) | ||||||
|   GL_ARB_pipeline_statistics_query                      DONE (i965, nvc0, r600, radeonsi, llvmpipe, softpipe, swr) |   GL_ARB_pipeline_statistics_query                      DONE (i965, nvc0, radeonsi, llvmpipe, softpipe, swr) | ||||||
|   GL_ARB_polygon_offset_clamp                           DONE (freedreno, i965, nv50, nvc0, r600, radeonsi, llvmpipe, swr, virgl) |   GL_ARB_polygon_offset_clamp                           DONE (i965, nv50, nvc0, r600, radeonsi, llvmpipe, swr) | ||||||
|   GL_ARB_shader_atomic_counter_ops                      DONE (freedreno/a5xx+, i965/gen7+, nvc0, r600, radeonsi, llvmpipe, softpipe, virgl) |   GL_ARB_shader_atomic_counter_ops                      DONE (i965/gen7+, nvc0, radeonsi, softpipe) | ||||||
|   GL_ARB_shader_draw_parameters                         DONE (i965, nvc0, radeonsi) |   GL_ARB_shader_draw_parameters                         DONE (i965, nvc0, radeonsi) | ||||||
|   GL_ARB_shader_group_vote                              DONE (i965, nvc0, radeonsi) |   GL_ARB_shader_group_vote                              DONE (i965, nvc0, radeonsi) | ||||||
|   GL_ARB_spirv_extensions                               DONE (i965/gen7+) |   GL_ARB_spirv_extensions                               in progress (Nicolai Hähnle, Ian Romanick) | ||||||
|   GL_ARB_texture_filter_anisotropic                     DONE (freedreno, i965, nv50, nvc0, r600, radeonsi, softpipe (*), llvmpipe (*)) |   GL_ARB_texture_filter_anisotropic                     DONE (i965, nv50, nvc0, r600, radeonsi, softpipe (*), llvmpipe (*)) | ||||||
|   GL_ARB_transform_feedback_overflow_query              DONE (i965/gen6+, nvc0, radeonsi, llvmpipe, softpipe, virgl) |   GL_ARB_transform_feedback_overflow_query              DONE (i965/gen6+, radeonsi, llvmpipe, softpipe) | ||||||
|   GL_KHR_no_error                                       DONE (all drivers) |   GL_KHR_no_error                                       DONE (all drivers) | ||||||
|  |  | ||||||
| (*) softpipe and llvmpipe advertise 16x anisotropy but simply ignore the setting | (*) softpipe and llvmpipe advertise 16x anisotropy but simply ignore the setting | ||||||
|  |  | ||||||
| These are the extensions cherry-picked to make GLES 3.1 | These are the extensions cherry-picked to make GLES 3.1 | ||||||
| GLES3.1, GLSL ES 3.1 -- all DONE: i965/hsw+, nvc0, r600, radeonsi, virgl | GLES3.1, GLSL ES 3.1 -- all DONE: i965/hsw+, nvc0, radeonsi | ||||||
|  |  | ||||||
|   GL_ARB_arrays_of_arrays                               DONE (all drivers that support GLSL 1.30) |   GL_ARB_arrays_of_arrays                               DONE (all drivers that support GLSL 1.30) | ||||||
|   GL_ARB_compute_shader                                 DONE (freedreno/a5xx+, i965/gen7+, llvmpipe, softpipe) |   GL_ARB_compute_shader                                 DONE (i965/gen7+, softpipe) | ||||||
|   GL_ARB_draw_indirect                                  DONE (freedreno, i965/gen7+, llvmpipe, softpipe, swr) |   GL_ARB_draw_indirect                                  DONE (i965/gen7+, r600, llvmpipe, softpipe, swr) | ||||||
|   GL_ARB_explicit_uniform_location                      DONE (all drivers that support GLSL) |   GL_ARB_explicit_uniform_location                      DONE (all drivers that support GLSL) | ||||||
|   GL_ARB_framebuffer_no_attachments                     DONE (freedreno, i965/gen7+, llvmpipe, softpipe) |   GL_ARB_framebuffer_no_attachments                     DONE (i965/gen7+, r600, softpipe) | ||||||
|   GL_ARB_program_interface_query                        DONE (all drivers) |   GL_ARB_program_interface_query                        DONE (all drivers) | ||||||
|   GL_ARB_shader_atomic_counters                         DONE (freedreno/a5xx+, i965/gen7+, llvmpipe, softpipe) |   GL_ARB_shader_atomic_counters                         DONE (i965/gen7+, softpipe) | ||||||
|   GL_ARB_shader_image_load_store                        DONE (freedreno/a5xx+, i965/gen7+, llvmpipe, softpipe) |   GL_ARB_shader_image_load_store                        DONE (i965/gen7+, softpipe) | ||||||
|   GL_ARB_shader_image_size                              DONE (freedreno/a5xx+, i965/gen7+, llvmpipe, softpipe) |   GL_ARB_shader_image_size                              DONE (i965/gen7+, softpipe) | ||||||
|   GL_ARB_shader_storage_buffer_object                   DONE (freedreno/a5xx+, i965/gen7+, llvmpipe, softpipe) |   GL_ARB_shader_storage_buffer_object                   DONE (i965/gen7+, softpipe) | ||||||
|   GL_ARB_shading_language_packing                       DONE (all drivers) |   GL_ARB_shading_language_packing                       DONE (all drivers) | ||||||
|   GL_ARB_separate_shader_objects                        DONE (all drivers) |   GL_ARB_separate_shader_objects                        DONE (all drivers) | ||||||
|   GL_ARB_stencil_texturing                              DONE (freedreno, nv50, llvmpipe, softpipe, swr) |   GL_ARB_stencil_texturing                              DONE (nv50, r600, llvmpipe, softpipe, swr) | ||||||
|   GL_ARB_texture_multisample (Multisample textures)     DONE (freedreno/a5xx+, i965/gen7+, nv50, llvmpipe, softpipe) |   GL_ARB_texture_multisample (Multisample textures)     DONE (i965/gen7+, nv50, r600, llvmpipe, softpipe) | ||||||
|   GL_ARB_texture_storage_multisample                    DONE (all drivers that support GL_ARB_texture_multisample) |   GL_ARB_texture_storage_multisample                    DONE (all drivers that support GL_ARB_texture_multisample) | ||||||
|   GL_ARB_vertex_attrib_binding                          DONE (all drivers) |   GL_ARB_vertex_attrib_binding                          DONE (all drivers) | ||||||
|   GS5 Enhanced textureGather                            DONE (freedreno, i965/gen7+) |   GS5 Enhanced textureGather                            DONE (i965/gen7+, r600) | ||||||
|   GS5 Packing/bitfield/conversion functions             DONE (freedreno/a5xx+, i965/gen6+) |   GS5 Packing/bitfield/conversion functions             DONE (i965/gen6+, r600) | ||||||
|   GL_EXT_shader_integer_mix                             DONE (all drivers that support GLSL) |   GL_EXT_shader_integer_mix                             DONE (all drivers that support GLSL) | ||||||
|  |  | ||||||
|   Additional functionality not covered above: |   Additional functionality not covered above: | ||||||
| @@ -269,47 +266,47 @@ GLES3.1, GLSL ES 3.1 -- all DONE: i965/hsw+, nvc0, r600, radeonsi, virgl | |||||||
|       glGetBooleani_v - restrict to GLES enums |       glGetBooleani_v - restrict to GLES enums | ||||||
|       gl_HelperInvocation support                       DONE (i965, r600) |       gl_HelperInvocation support                       DONE (i965, r600) | ||||||
|  |  | ||||||
| GLES3.2, GLSL ES 3.2 -- all DONE: i965/gen9+, radeonsi, virgl | GLES3.2, GLSL ES 3.2 -- all DONE: i965/gen9+ | ||||||
|  |  | ||||||
|   GL_EXT_color_buffer_float                             DONE (all drivers) |   GL_EXT_color_buffer_float                             DONE (all drivers) | ||||||
|   GL_KHR_blend_equation_advanced                        DONE (freedreno/a6xx, i965, nvc0) |   GL_KHR_blend_equation_advanced                        DONE (i965, nvc0) | ||||||
|   GL_KHR_debug                                          DONE (all drivers) |   GL_KHR_debug                                          DONE (all drivers) | ||||||
|   GL_KHR_robustness                                     DONE (freedreno, i965, nvc0) |   GL_KHR_robustness                                     DONE (i965, nvc0, radeonsi) | ||||||
|   GL_KHR_texture_compression_astc_ldr                   DONE (freedreno, i965/gen9+) |   GL_KHR_texture_compression_astc_ldr                   DONE (i965/gen9+) | ||||||
|   GL_OES_copy_image                                     DONE (all drivers) |   GL_OES_copy_image                                     DONE (all drivers) | ||||||
|   GL_OES_draw_buffers_indexed                           DONE (all drivers that support GL_ARB_draw_buffers_blend) |   GL_OES_draw_buffers_indexed                           DONE (all drivers that support GL_ARB_draw_buffers_blend) | ||||||
|   GL_OES_draw_elements_base_vertex                      DONE (all drivers) |   GL_OES_draw_elements_base_vertex                      DONE (all drivers) | ||||||
|   GL_OES_geometry_shader                                DONE (i965/hsw+, nvc0, softpipe) |   GL_OES_geometry_shader                                DONE (i965/hsw+, nvc0, radeonsi) | ||||||
|   GL_OES_gpu_shader5                                    DONE (freedreno/a6xx, all drivers that support GL_ARB_gpu_shader5) |   GL_OES_gpu_shader5                                    DONE (all drivers that support GL_ARB_gpu_shader5) | ||||||
|   GL_OES_primitive_bounding_box                         DONE (freedreno/a5xx+, i965/gen7+, nvc0, softpipe) |   GL_OES_primitive_bounding_box                         DONE (i965/gen7+, nvc0, radeonsi) | ||||||
|   GL_OES_sample_shading                                 DONE (freedreno/a6xx, i965, nvc0, r600) |   GL_OES_sample_shading                                 DONE (i965, nvc0, r600, radeonsi) | ||||||
|   GL_OES_sample_variables                               DONE (freedreno/a6xx, i965, nvc0, r600) |   GL_OES_sample_variables                               DONE (i965, nvc0, r600, radeonsi) | ||||||
|   GL_OES_shader_image_atomic                            DONE (all drivers that support GL_ARB_shader_image_load_store) |   GL_OES_shader_image_atomic                            DONE (all drivers that support GL_ARB_shader_image_load_store) | ||||||
|   GL_OES_shader_io_blocks                               DONE (All drivers that support GLES 3.1) |   GL_OES_shader_io_blocks                               DONE (All drivers that support GLES 3.1) | ||||||
|   GL_OES_shader_multisample_interpolation               DONE (freedreno/a6xx, i965, nvc0, r600) |   GL_OES_shader_multisample_interpolation               DONE (i965, nvc0, r600, radeonsi) | ||||||
|   GL_OES_tessellation_shader                            DONE (all drivers that support GL_ARB_tessellation_shader) |   GL_OES_tessellation_shader                            DONE (all drivers that support GL_ARB_tessellation_shader) | ||||||
|   GL_OES_texture_border_clamp                           DONE (all drivers) |   GL_OES_texture_border_clamp                           DONE (all drivers) | ||||||
|   GL_OES_texture_buffer                                 DONE (freedreno, i965, nvc0, softpipe) |   GL_OES_texture_buffer                                 DONE (i965, nvc0, radeonsi) | ||||||
|   GL_OES_texture_cube_map_array                         DONE (i965/hsw+, nvc0, softpipe) |   GL_OES_texture_cube_map_array                         DONE (i965/hsw+, nvc0, radeonsi) | ||||||
|   GL_OES_texture_stencil8                               DONE (all drivers that support GL_ARB_texture_stencil8) |   GL_OES_texture_stencil8                               DONE (all drivers that support GL_ARB_texture_stencil8) | ||||||
|   GL_OES_texture_storage_multisample_2d_array           DONE (all drivers that support GL_ARB_texture_multisample) |   GL_OES_texture_storage_multisample_2d_array           DONE (all drivers that support GL_ARB_texture_multisample) | ||||||
|  |  | ||||||
| Khronos, ARB, and OES extensions that are not part of any OpenGL or OpenGL ES version: | Khronos, ARB, and OES extensions that are not part of any OpenGL or OpenGL ES version: | ||||||
|  |  | ||||||
|   GL_ARB_bindless_texture                               DONE (nvc0, radeonsi) |   GL_ARB_bindless_texture                               DONE (radeonsi) | ||||||
|   GL_ARB_cl_event                                       not started |   GL_ARB_cl_event                                       not started | ||||||
|   GL_ARB_compute_variable_group_size                    DONE (nvc0, radeonsi) |   GL_ARB_compute_variable_group_size                    DONE (nvc0, radeonsi) | ||||||
|   GL_ARB_ES3_2_compatibility                            DONE (i965/gen8+, radeonsi, virgl) |   GL_ARB_ES3_2_compatibility                            DONE (i965/gen8+) | ||||||
|   GL_ARB_fragment_shader_interlock                      DONE (i965) |   GL_ARB_fragment_shader_interlock                      not started | ||||||
|   GL_ARB_gpu_shader_int64                               DONE (i965/gen8+, nvc0, radeonsi, softpipe, llvmpipe) |   GL_ARB_gpu_shader_int64                               DONE (i965/gen8+, nvc0, radeonsi, softpipe, llvmpipe) | ||||||
|   GL_ARB_parallel_shader_compile                        DONE (all drivers) |   GL_ARB_parallel_shader_compile                        not started, but Chia-I Wu did some related work in 2014 | ||||||
|   GL_ARB_post_depth_coverage                            DONE (i965, nvc0, radeonsi) |   GL_ARB_post_depth_coverage                            DONE (i965) | ||||||
|   GL_ARB_robustness_isolation                           not started |   GL_ARB_robustness_isolation                           not started | ||||||
|   GL_ARB_sample_locations                               DONE (nvc0) |   GL_ARB_sample_locations                               not started | ||||||
|   GL_ARB_seamless_cubemap_per_texture                   DONE (etnaviv/SEAMLESS_CUBE_MAP, freedreno, i965, nvc0, radeonsi, r600, softpipe, swr, virgl) |   GL_ARB_seamless_cubemap_per_texture                   DONE (i965, nvc0, radeonsi, r600, softpipe, swr) | ||||||
|   GL_ARB_shader_ballot                                  DONE (i965/gen8+, nvc0, radeonsi) |   GL_ARB_shader_ballot                                  DONE (i965/gen8+, nvc0, radeonsi) | ||||||
|   GL_ARB_shader_clock                                   DONE (i965/gen7+, nv50, nvc0, r600, radeonsi, virgl) |   GL_ARB_shader_clock                                   DONE (i965/gen7+, nv50, nvc0, radeonsi) | ||||||
|   GL_ARB_shader_stencil_export                          DONE (i965/gen9+, r600, radeonsi, softpipe, llvmpipe, swr, virgl) |   GL_ARB_shader_stencil_export                          DONE (i965/gen9+, radeonsi, softpipe, llvmpipe, swr) | ||||||
|   GL_ARB_shader_viewport_layer_array                    DONE (i965/gen6+, nvc0, radeonsi) |   GL_ARB_shader_viewport_layer_array                    DONE (i965/gen6+, nvc0, radeonsi) | ||||||
|   GL_ARB_sparse_buffer                                  DONE (radeonsi/CIK+) |   GL_ARB_sparse_buffer                                  DONE (radeonsi/CIK+) | ||||||
|   GL_ARB_sparse_texture                                 not started |   GL_ARB_sparse_texture                                 not started | ||||||
| @@ -319,90 +316,28 @@ Khronos, ARB, and OES extensions that are not part of any OpenGL or OpenGL ES ve | |||||||
|   GL_EXT_memory_object                                  DONE (radeonsi) |   GL_EXT_memory_object                                  DONE (radeonsi) | ||||||
|   GL_EXT_memory_object_fd                               DONE (radeonsi) |   GL_EXT_memory_object_fd                               DONE (radeonsi) | ||||||
|   GL_EXT_memory_object_win32                            not started |   GL_EXT_memory_object_win32                            not started | ||||||
|   GL_EXT_render_snorm                                   DONE (i965, radeonsi) |   GL_EXT_semaphore                                      not started | ||||||
|   GL_EXT_semaphore                                      DONE (radeonsi) |   GL_EXT_semaphore_fd                                   not started | ||||||
|   GL_EXT_semaphore_fd                                   DONE (radeonsi) |  | ||||||
|   GL_EXT_semaphore_win32                                not started |   GL_EXT_semaphore_win32                                not started | ||||||
|   GL_EXT_sRGB_write_control                             DONE (all drivers that support GLES 3.0+) |  | ||||||
|   GL_EXT_texture_norm16                                 DONE (freedreno, i965, r600, radeonsi, nvc0) |  | ||||||
|   GL_EXT_texture_sRGB_R8                                DONE (all drivers that support GLES 3.0+) |  | ||||||
|   GL_KHR_blend_equation_advanced_coherent               DONE (i965/gen9+) |   GL_KHR_blend_equation_advanced_coherent               DONE (i965/gen9+) | ||||||
|   GL_KHR_texture_compression_astc_hdr                   DONE (i965/bxt) |   GL_KHR_texture_compression_astc_hdr                   DONE (i965/bxt) | ||||||
|   GL_KHR_texture_compression_astc_sliced_3d             DONE (i965/gen9+, radeonsi) |   GL_KHR_texture_compression_astc_sliced_3d             DONE (i965/gen9+) | ||||||
|   GL_OES_depth_texture_cube_map                         DONE (all drivers that support GLSL 1.30+) |   GL_OES_depth_texture_cube_map                         DONE (all drivers that support GLSL 1.30+) | ||||||
|   GL_OES_EGL_image                                      DONE (all drivers) |   GL_OES_EGL_image                                      DONE (all drivers) | ||||||
|   GL_OES_EGL_image_external                             DONE (all drivers) |   GL_OES_EGL_image_external_essl3                       not started | ||||||
|   GL_OES_EGL_image_external_essl3                       DONE (all drivers) |  | ||||||
|   GL_OES_required_internalformat                        DONE (all drivers) |   GL_OES_required_internalformat                        DONE (all drivers) | ||||||
|   GL_OES_surfaceless_context                            DONE (all drivers) |   GL_OES_surfaceless_context                            DONE (all drivers) | ||||||
|   GL_OES_texture_compression_astc                       DONE (core only) |   GL_OES_texture_compression_astc                       DONE (core only) | ||||||
|   GL_OES_texture_float                                  DONE (freedreno, i965, r300, r600, radeonsi, nv30, nv50, nvc0, softpipe, llvmpipe) |   GL_OES_texture_float                                  DONE (i965, r300, r600, radeonsi, nv30, nv50, nvc0, softpipe, llvmpipe) | ||||||
|   GL_OES_texture_float_linear                           DONE (freedreno, i965, r300, r600, radeonsi, nv30, nv50, nvc0, softpipe, llvmpipe) |   GL_OES_texture_float_linear                           DONE (i965, r300, r600, radeonsi, nv30, nv50, nvc0, softpipe, llvmpipe) | ||||||
|   GL_OES_texture_half_float                             DONE (freedreno, i965, r300, r600, radeonsi, nv30, nv50, nvc0, softpipe, llvmpipe) |   GL_OES_texture_half_float                             DONE (i965, r300, r600, radeonsi, nv30, nv50, nvc0, softpipe, llvmpipe) | ||||||
|   GL_OES_texture_half_float_linear                      DONE (freedreno, i965, r300, r600, radeonsi, nv30, nv50, nvc0, softpipe, llvmpipe) |   GL_OES_texture_half_float_linear                      DONE (i965, r300, r600, radeonsi, nv30, nv50, nvc0, softpipe, llvmpipe) | ||||||
|   GL_OES_texture_view                                   DONE (freedreno, i965/gen8+, r600, radeonsi, nv50, nvc0, softpipe, llvmpipe, swr) |   GL_OES_texture_view                                   not started - based on GL_ARB_texture_view | ||||||
|   GL_OES_viewport_array                                 DONE (i965, nvc0, radeonsi, softpipe) |   GL_OES_viewport_array                                 DONE (i965, nvc0, radeonsi) | ||||||
|   GLX_ARB_context_flush_control                         not started |   GLX_ARB_context_flush_control                         DONE | ||||||
|   GLX_ARB_robustness_application_isolation              not started |   GLX_ARB_robustness_application_isolation              not started | ||||||
|   GLX_ARB_robustness_share_group_isolation              not started |   GLX_ARB_robustness_share_group_isolation              not started | ||||||
|  |  | ||||||
| GL_EXT_direct_state_access subfeatures (in the spec order): |  | ||||||
|   GL 1.1: Client commands                               not started |  | ||||||
|   GL 1.0-1.3: Matrix and transpose matrix commands      not started |  | ||||||
|   GL 1.1-1.2: Texture commands                          not started |  | ||||||
|   GL 1.2: 3D texture commands                           not started |  | ||||||
|   GL 1.2.1: Multitexture commands                       not started |  | ||||||
|   GL 1.2.1-3.0: Indexed texture commands                not started |  | ||||||
|   GL 1.2.1-3.0: Indexed generic queries                 not started |  | ||||||
|   GL 1.2.1: EnableIndexed.. Get*Indexed                 not started |  | ||||||
|   GL_ARB_vertex_program                                 not started |  | ||||||
|   GL 1.3: Compressed texture and multitexture commands  not started |  | ||||||
|   GL 1.5: Buffer commands                               not started |  | ||||||
|   GL 2.0-2.1: Uniform and uniform matrix commands       not started |  | ||||||
|   GL_EXT_texture_buffer_object                          not started |  | ||||||
|   GL_EXT_texture_integer                                not started |  | ||||||
|   GL_EXT_gpu_shader4                                    not started |  | ||||||
|   GL_EXT_gpu_program_parameters                         not started |  | ||||||
|   GL_NV_gpu_program4                                    n/a |  | ||||||
|   GL_NV_framebuffer_multisample_coverage                n/a |  | ||||||
|   GL 3.0: Renderbuffer/framebuffer commands, Gen*Mipmap not started |  | ||||||
|   GL 3.0: CopyBuffer command                            not started |  | ||||||
|   GL_EXT_geometry_shader4 commands (expose in GL 3.2)   not started |  | ||||||
|   GL_NV_explicit_multisample                            n/a |  | ||||||
|   GL 3.0: Vertex array/attrib/query/map commands        not started |  | ||||||
|   Matrix GL tokens                                      not started |  | ||||||
|  |  | ||||||
| GL_EXT_direct_state_access additions from other extensions (complete list): |  | ||||||
|   GL_AMD_framebuffer_sample_positions                   n/a |  | ||||||
|   GL_AMD_gpu_shader_int64                               not started |  | ||||||
|   GL_ARB_bindless_texture                               not started |  | ||||||
|   GL_ARB_buffer_storage                                 not started |  | ||||||
|   GL_ARB_clear_buffer_object                            not started |  | ||||||
|   GL_ARB_framebuffer_no_attachments                     not started |  | ||||||
|   GL_ARB_gpu_shader_fp64                                not started |  | ||||||
|   GL_ARB_instanced_arrays                               not started |  | ||||||
|   GL_ARB_internalformat_query2                          not started |  | ||||||
|   GL_ARB_sparse_texture                                 n/a |  | ||||||
|   GL_ARB_sparse_buffer                                  not started |  | ||||||
|   GL_ARB_texture_buffer_range                           not started |  | ||||||
|   GL_ARB_texture_storage                                not started |  | ||||||
|   GL_ARB_texture_storage_multisample                    not started |  | ||||||
|   GL_ARB_vertex_attrib_64bit                            not started |  | ||||||
|   GL_ARB_vertex_attrib_binding                          not started |  | ||||||
|   GL_EXT_buffer_storage                                 not started |  | ||||||
|   GL_EXT_external_buffer                                not started |  | ||||||
|   GL_EXT_separate_shader_objects                        n/a |  | ||||||
|   GL_EXT_sparse_texture                                 n/a |  | ||||||
|   GL_EXT_texture_storage                                n/a |  | ||||||
|   GL_EXT_vertex_attrib_64bit                            not started |  | ||||||
|   GL_EXT_EGL_image_storage                              n/a |  | ||||||
|   GL_NV_bindless_texture                                n/a |  | ||||||
|   GL_NV_gpu_shader5                                     n/a |  | ||||||
|   GL_NV_texture_multisample                             n/a |  | ||||||
|   GL_NV_vertex_buffer_unified_memory                    n/a |  | ||||||
|   GL_NVX_linked_gpu_multicast                           n/a |  | ||||||
|   GLX_NV_copy_buffer                                    n/a |  | ||||||
|  |  | ||||||
| The following extensions are not part of any OpenGL or OpenGL ES version, and | The following extensions are not part of any OpenGL or OpenGL ES version, and | ||||||
| we DO NOT WANT implementations of these extensions for Mesa. | we DO NOT WANT implementations of these extensions for Mesa. | ||||||
|  |  | ||||||
| @@ -414,68 +349,39 @@ we DO NOT WANT implementations of these extensions for Mesa. | |||||||
|  |  | ||||||
| Vulkan 1.0 -- all DONE: anv, radv | Vulkan 1.0 -- all DONE: anv, radv | ||||||
|  |  | ||||||
| Vulkan 1.1 -- all DONE: anv, radv | Khronos extensions that are not part of any Vulkan version: | ||||||
|  |   VK_KHR_16bit_storage                                  in progress (Alejandro) | ||||||
|   VK_KHR_16bit_storage                                  DONE (anv/gen8+, radv) |   VK_KHR_android_surface                                not started | ||||||
|   VK_KHR_bind_memory2                                   DONE (anv, radv) |  | ||||||
|   VK_KHR_dedicated_allocation                           DONE (anv, radv) |   VK_KHR_dedicated_allocation                           DONE (anv, radv) | ||||||
|   VK_KHR_descriptor_update_template                     DONE (anv, radv) |   VK_KHR_descriptor_update_template                     DONE (anv, radv) | ||||||
|   VK_KHR_device_group                                   not started |   VK_KHR_display                                        not started | ||||||
|   VK_KHR_device_group_creation                          not started |   VK_KHR_display_swapchain                              not started | ||||||
|   VK_KHR_external_fence                                 DONE (anv, radv) |   VK_KHR_external_fence                                 not started | ||||||
|   VK_KHR_external_fence_capabilities                    DONE (anv, radv) |   VK_KHR_external_fence_capabilities                    not started | ||||||
|  |   VK_KHR_external_fence_fd                              not started | ||||||
|  |   VK_KHR_external_fence_win32                           not started | ||||||
|   VK_KHR_external_memory                                DONE (anv, radv) |   VK_KHR_external_memory                                DONE (anv, radv) | ||||||
|   VK_KHR_external_memory_capabilities                   DONE (anv, radv) |   VK_KHR_external_memory_capabilities                   DONE (anv, radv) | ||||||
|   VK_KHR_external_semaphore                             DONE (anv, radv) |  | ||||||
|   VK_KHR_external_semaphore_capabilities                DONE (anv, radv) |  | ||||||
|   VK_KHR_get_memory_requirements2                       DONE (anv, radv) |  | ||||||
|   VK_KHR_get_physical_device_properties2                DONE (anv, radv) |  | ||||||
|   VK_KHR_maintenance1                                   DONE (anv, radv) |  | ||||||
|   VK_KHR_maintenance2                                   DONE (anv, radv) |  | ||||||
|   VK_KHR_maintenance3                                   DONE (anv, radv) |  | ||||||
|   VK_KHR_multiview                                      DONE (anv, radv) |  | ||||||
|   VK_KHR_relaxed_block_layout                           DONE (anv, radv) |  | ||||||
|   VK_KHR_sampler_ycbcr_conversion                       DONE (anv, radv) |  | ||||||
|   VK_KHR_shader_draw_parameters                         DONE (anv, radv) |  | ||||||
|   VK_KHR_storage_buffer_storage_class                   DONE (anv, radv) |  | ||||||
|   VK_KHR_variable_pointers                              DONE (anv, radv) |  | ||||||
|  |  | ||||||
| Khronos extensions that are not part of any Vulkan version: |  | ||||||
|  |  | ||||||
|   VK_KHR_8bit_storage                                   DONE (anv/gen8+, radv) |  | ||||||
|   VK_KHR_android_surface                                not started |  | ||||||
|   VK_KHR_create_renderpass2                             DONE (anv, radv) |  | ||||||
|   VK_KHR_depth_stencil_resolve                          DONE (anv, radv) |  | ||||||
|   VK_KHR_display                                        DONE (anv, radv) |  | ||||||
|   VK_KHR_display_swapchain                              not started |  | ||||||
|   VK_KHR_draw_indirect_count                            DONE (anv, radv) |  | ||||||
|   VK_KHR_driver_properties                              DONE (anv, radv) |  | ||||||
|   VK_KHR_external_fence_fd                              DONE (anv, radv) |  | ||||||
|   VK_KHR_external_fence_win32                           not started |  | ||||||
|   VK_KHR_external_memory_fd                             DONE (anv, radv) |   VK_KHR_external_memory_fd                             DONE (anv, radv) | ||||||
|   VK_KHR_external_memory_win32                          not started |   VK_KHR_external_memory_win32                          not started | ||||||
|   VK_KHR_external_semaphore_fd                          DONE (anv, radv) |   VK_KHR_external_semaphore                             DONE (radv) | ||||||
|  |   VK_KHR_external_semaphore_capabilities                DONE (radv) | ||||||
|  |   VK_KHR_external_semaphore_fd                          DONE (radv) | ||||||
|   VK_KHR_external_semaphore_win32                       not started |   VK_KHR_external_semaphore_win32                       not started | ||||||
|   VK_KHR_get_display_properties2                        DONE (anv, radv) |   VK_KHR_get_memory_requirements2                       DONE (anv, radv) | ||||||
|   VK_KHR_get_surface_capabilities2                      DONE (anv, radv) |   VK_KHR_get_physical_device_properties2                DONE (anv, radv) | ||||||
|   VK_KHR_image_format_list                              DONE (anv, radv) |   VK_KHR_get_surface_capabilities2                      DONE (anv) | ||||||
|   VK_KHR_imageless_framebuffer                          DONE (anv, radv) |  | ||||||
|   VK_KHR_incremental_present                            DONE (anv, radv) |   VK_KHR_incremental_present                            DONE (anv, radv) | ||||||
|  |   VK_KHR_maintenance1                                   DONE (anv, radv) | ||||||
|   VK_KHR_mir_surface                                    not started |   VK_KHR_mir_surface                                    not started | ||||||
|   VK_KHR_pipeline_executable_properties                 DONE (anv, radv) |  | ||||||
|   VK_KHR_push_descriptor                                DONE (anv, radv) |   VK_KHR_push_descriptor                                DONE (anv, radv) | ||||||
|   VK_KHR_sampler_mirror_clamp_to_edge                   DONE (anv, radv) |   VK_KHR_sampler_mirror_clamp_to_edge                   DONE (anv, radv) | ||||||
|   VK_KHR_shader_atomic_int64                            DONE (anv, radv) |   VK_KHR_shader_draw_parameters                         DONE (anv, radv) | ||||||
|   VK_KHR_shader_float16_int8                            DONE (anv/gen8+, radv) |  | ||||||
|   VK_KHR_shader_float_controls                          DONE (anv/gen8+) |  | ||||||
|   VK_KHR_shader_subgroup_extended_types                 not started |  | ||||||
|   VK_KHR_shared_presentable_image                       not started |   VK_KHR_shared_presentable_image                       not started | ||||||
|  |   VK_KHR_storage_buffer_storage_class                   DONE (anv, radv) | ||||||
|   VK_KHR_surface                                        DONE (anv, radv) |   VK_KHR_surface                                        DONE (anv, radv) | ||||||
|   VK_KHR_surface_protected_capabilities                 DONE (anv, radv) |  | ||||||
|   VK_KHR_swapchain                                      DONE (anv, radv) |   VK_KHR_swapchain                                      DONE (anv, radv) | ||||||
|   VK_KHR_swapchain_mutable_format                       not started |   VK_KHR_variable_pointers                              DONE (anv, radv) | ||||||
|   VK_KHR_uniform_buffer_standard_layout                 DONE (anv, radv) |  | ||||||
|   VK_KHR_vulkan_memory_model                            not started |  | ||||||
|   VK_KHR_wayland_surface                                DONE (anv, radv) |   VK_KHR_wayland_surface                                DONE (anv, radv) | ||||||
|   VK_KHR_win32_keyed_mutex                              not started |   VK_KHR_win32_keyed_mutex                              not started | ||||||
|   VK_KHR_win32_surface                                  not started |   VK_KHR_win32_surface                                  not started | ||||||
|   | |||||||
| @@ -8,13 +8,13 @@ | |||||||
| <body> | <body> | ||||||
|  |  | ||||||
| <div class="header"> | <div class="header"> | ||||||
|   The Mesa 3D Graphics Library |   <h1>The Mesa 3D Graphics Library</h1> | ||||||
| </div> | </div> | ||||||
|  |  | ||||||
| <iframe src="contents.html"></iframe> | <iframe src="contents.html"></iframe> | ||||||
| <div class="content"> | <div class="content"> | ||||||
|  |  | ||||||
| <h1>Help Wanted</h1> | <h1>Help Wanted / To-Do List</h1> | ||||||
|  |  | ||||||
| <p> | <p> | ||||||
| We can always use more help with the Mesa project. | We can always use more help with the Mesa project. | ||||||
| @@ -29,11 +29,11 @@ immediately checked into git because not enough people are testing them. | |||||||
| Just applying patches, testing and reporting back is helpful. | Just applying patches, testing and reporting back is helpful. | ||||||
| <li> | <li> | ||||||
| <b>Driver debugging.</b> | <b>Driver debugging.</b> | ||||||
| There are plenty of open bugs in the <a href="https://gitlab.freedesktop.org/mesa/mesa/issues">bug database</a>. | There are plenty of open bugs in the <a href="https://bugs.freedesktop.org/describecomponents.cgi?product=Mesa">bug database</a>. | ||||||
| <li> | <li> | ||||||
| <b>Remove aliasing warnings.</b> | <b>Remove aliasing warnings.</b> | ||||||
| Enable gcc's <code>-Wstrict-aliasing=2 -fstrict-aliasing</code> arguments, and | Enable gcc -Wstrict-aliasing=2 -fstrict-aliasing and track down aliasing | ||||||
| track down aliasing issues in the code. | issues in the code. | ||||||
| <li> | <li> | ||||||
| <b>Contribute more tests to | <b>Contribute more tests to | ||||||
| <a href="https://piglit.freedesktop.org/">Piglit</a>.</b> | <a href="https://piglit.freedesktop.org/">Piglit</a>.</b> | ||||||
| @@ -47,9 +47,8 @@ You can find some further To-do lists here: | |||||||
| <b>Common To-Do lists:</b> | <b>Common To-Do lists:</b> | ||||||
| </p> | </p> | ||||||
| <ul> | <ul> | ||||||
|   <li><a href="https://gitlab.freedesktop.org/mesa/mesa/blob/master/docs/features.txt"> |   <li><a href="https://cgit.freedesktop.org/mesa/mesa/tree/docs/features.txt"> | ||||||
|     <code>features.txt</code></a> - Status of OpenGL 3.x / 4.x features in |     <b>features.txt</b></a> - Status of OpenGL 3.x / 4.x features in Mesa.</li> | ||||||
|     Mesa.</li> |  | ||||||
| </ul> | </ul> | ||||||
|  |  | ||||||
| <p> | <p> | ||||||
| @@ -57,9 +56,9 @@ You can find some further To-do lists here: | |||||||
| </p> | </p> | ||||||
| <ul> | <ul> | ||||||
|   <li><a href="https://dri.freedesktop.org/wiki/R600ToDo"> |   <li><a href="https://dri.freedesktop.org/wiki/R600ToDo"> | ||||||
|     <code>r600g</code></a> - Driver for ATI/AMD R600 - Northern Island.</li> |     <b>r600g</b></a> - Driver for ATI/AMD R600 - Northern Island.</li> | ||||||
|   <li><a href="https://dri.freedesktop.org/wiki/R300ToDo"> |   <li><a href="https://dri.freedesktop.org/wiki/R300ToDo"> | ||||||
|     <code>r300g</code></a> - Driver for ATI R300 - R500.</li> |     <b>r300g</b></a> - Driver for ATI R300 - R500.</li> | ||||||
| </ul> | </ul> | ||||||
|  |  | ||||||
| <p> | <p> | ||||||
|   | |||||||
							
								
								
									
										527
									
								
								docs/index.html
									
									
									
									
									
								
							
							
						
						
									
										527
									
								
								docs/index.html
									
									
									
									
									
								
							| @@ -8,7 +8,7 @@ | |||||||
| <body> | <body> | ||||||
|  |  | ||||||
| <div class="header"> | <div class="header"> | ||||||
|   The Mesa 3D Graphics Library |   <h1>The Mesa 3D Graphics Library</h1> | ||||||
| </div> | </div> | ||||||
|  |  | ||||||
| <iframe src="contents.html"></iframe> | <iframe src="contents.html"></iframe> | ||||||
| @@ -16,441 +16,6 @@ | |||||||
|  |  | ||||||
| <h1>News</h1> | <h1>News</h1> | ||||||
|  |  | ||||||
| <h2>October 24, 2019</h2><p><a href="relnotes/19.2.2.html">Mesa 19.2.2</a> is released. This is a bug fix release.</p><h2>October 21, 2019</h2> |  | ||||||
| <p> |  | ||||||
| <a href="relnotes/19.1.8.html">Mesa 19.1.8</a> is released. |  | ||||||
| This is a bug-fix release. |  | ||||||
| </p> |  | ||||||
| <p> |  | ||||||
| NOTE: It is anticipated that 19.1.8 will be the final release in the |  | ||||||
| 19.1 series. Users of 19.1 are encouraged to migrate to the 19.2 |  | ||||||
| series in order to obtain future fixes. |  | ||||||
| </p> |  | ||||||
|  |  | ||||||
| <h2>October 9, 2019</h2><p><a href="relnotes/19.2.1.html">Mesa 19.2.1</a> is released. This is a bug fix release.</p><h2>September 25, 2019</h2> |  | ||||||
| <p> |  | ||||||
| <a href="relnotes/19.2.0.html">Mesa 19.2.0</a> is released. |  | ||||||
| This is a new development release. See the release notes for more |  | ||||||
| information about this release |  | ||||||
| </p> |  | ||||||
|  |  | ||||||
| <h2>September 17, 2019</h2> |  | ||||||
| <p> |  | ||||||
| <a href="relnotes/19.1.7.html">Mesa 19.1.7</a> is released. |  | ||||||
| This is a bug-fix release. |  | ||||||
| </p> |  | ||||||
|  |  | ||||||
| <h2>September 3, 2019</h2> |  | ||||||
| <p> |  | ||||||
| <a href="relnotes/19.1.6.html">Mesa 19.1.6</a> is released. |  | ||||||
| This is a bug-fix release. |  | ||||||
| </p> |  | ||||||
|  |  | ||||||
| <h2>August 23, 2019</h2> |  | ||||||
| <p> |  | ||||||
| <a href="relnotes/19.1.5.html">Mesa 19.1.5</a> is released. |  | ||||||
| This is a bug-fix release. |  | ||||||
| </p> |  | ||||||
|  |  | ||||||
| <h2>August 7, 2019</h2> |  | ||||||
| <p> |  | ||||||
| <a href="relnotes/19.1.4.html">Mesa 19.1.4</a> is released. |  | ||||||
| This is a bug-fix release. |  | ||||||
| </p> |  | ||||||
|  |  | ||||||
| <h2>July 23, 2019</h2> |  | ||||||
| <p> |  | ||||||
| <a href="relnotes/19.1.3.html">Mesa 19.1.3</a> is released. |  | ||||||
| This is a bug-fix release. |  | ||||||
| </p> |  | ||||||
|  |  | ||||||
| <h2>July 9, 2019</h2> |  | ||||||
| <p> |  | ||||||
| <a href="relnotes/19.1.2.html">Mesa 19.1.2</a> is released. |  | ||||||
| This is a bug-fix release. |  | ||||||
| </p> |  | ||||||
|  |  | ||||||
| <h2>June 26, 2019</h2> |  | ||||||
| <p> |  | ||||||
| <a href="relnotes/19.0.8.html">Mesa 19.0.8</a> is released. |  | ||||||
| This is an emergency bug fix release. Users of 19.0.7 should updated to 19.0.8 |  | ||||||
| or 19.1.1 immediately. |  | ||||||
| </p> |  | ||||||
|  |  | ||||||
| <h2>June 25, 2019</h2> |  | ||||||
| <p> |  | ||||||
| <a href="relnotes/19.1.1.html">Mesa 19.1.1</a> is released. |  | ||||||
| This is a bug-fix release. |  | ||||||
| </p> |  | ||||||
|  |  | ||||||
| <h2>June 24, 2019</h2> |  | ||||||
| <p> |  | ||||||
| <a href="relnotes/19.0.7.html">Mesa 19.0.7</a> is released. |  | ||||||
| This is a bug-fix release. |  | ||||||
| </p> |  | ||||||
| <p> |  | ||||||
| NOTE: It is anticipated that 19.0.7 will be the final release in the |  | ||||||
| 19.0 series. Users of 19.0 are encouraged to migrate to the 19.1 |  | ||||||
| series in order to obtain future fixes. |  | ||||||
| </p> |  | ||||||
|  |  | ||||||
| <h2>June 11, 2019</h2> |  | ||||||
| <p> |  | ||||||
| <a href="relnotes/19.1.0.html">Mesa 19.1.0</a> is released. |  | ||||||
| This is a new development release. See the release notes for more |  | ||||||
| information about this release |  | ||||||
| </p> |  | ||||||
| <h2>June 5, 2019</h2> |  | ||||||
| <p> |  | ||||||
| <a href="relnotes/19.0.6.html">Mesa 19.0.6</a> is released. |  | ||||||
| This is a bug-fix release. |  | ||||||
| </p> |  | ||||||
|  |  | ||||||
| <h2>May 21, 2019</h2> |  | ||||||
| <p> |  | ||||||
| <a href="relnotes/19.0.5.html">Mesa 19.0.5</a> is released. |  | ||||||
| This is a bug-fix release. |  | ||||||
| </p> |  | ||||||
|  |  | ||||||
| <h2>May 9, 2019</h2> |  | ||||||
| <p> |  | ||||||
| <a href="relnotes/19.0.4.html">Mesa 19.0.4</a> is released. |  | ||||||
| This is a bug-fix release. |  | ||||||
| </p> |  | ||||||
|  |  | ||||||
| <h2>April 24, 2019</h2> |  | ||||||
| <p> |  | ||||||
| <a href="relnotes/19.0.3.html">Mesa 19.0.3</a> is released. |  | ||||||
| This is a bug-fix release. |  | ||||||
| </p> |  | ||||||
|  |  | ||||||
| <h2>April 10, 2019</h2> |  | ||||||
| <p> |  | ||||||
| <a href="relnotes/19.0.2.html">Mesa 19.0.2</a> is released. |  | ||||||
| This is a bug-fix release. |  | ||||||
| </p> |  | ||||||
|  |  | ||||||
| <h2>April 5, 2019</h2> |  | ||||||
| <p> |  | ||||||
| <a href="relnotes/18.3.6.html">Mesa 18.3.6</a> is released. |  | ||||||
| This is a bug-fix release. |  | ||||||
| </p> |  | ||||||
| <p> |  | ||||||
| NOTE: It is anticipated that 18.3.6 will be the final release in the |  | ||||||
| 18.3 series. Users of 18.3 are encouraged to migrate to the 19.0 |  | ||||||
| series in order to obtain future fixes. |  | ||||||
| </p> |  | ||||||
|  |  | ||||||
| <h2>March 27, 2019</h2> |  | ||||||
| <p> |  | ||||||
| <a href="relnotes/19.0.1.html">Mesa 19.0.1</a> is released. |  | ||||||
| This is a bug-fix release. |  | ||||||
| </p> |  | ||||||
|  |  | ||||||
| <h2>March 18, 2019</h2> |  | ||||||
| <p> |  | ||||||
| <a href="relnotes/18.3.5.html">Mesa 18.3.5</a> is released. |  | ||||||
| This is a bug-fix release. |  | ||||||
| </p> |  | ||||||
|  |  | ||||||
| <h2>March 13, 2019</h2> |  | ||||||
| <p> |  | ||||||
| <a href="relnotes/19.0.0.html">Mesa 19.0.0</a> is released. |  | ||||||
| This is a new development release. See the release notes for more |  | ||||||
| information about this release |  | ||||||
| </p> |  | ||||||
|  |  | ||||||
| <h2>February 18, 2019</h2> |  | ||||||
| <p> |  | ||||||
| <a href="relnotes/18.3.4.html">Mesa 18.3.4</a> is released. |  | ||||||
| This is a bug-fix release. |  | ||||||
| </p> |  | ||||||
|  |  | ||||||
| <h2>January 31, 2019</h2> |  | ||||||
| <p> |  | ||||||
| <a href="relnotes/18.3.3.html">Mesa 18.3.3</a> is released. |  | ||||||
| This is a bug-fix release. |  | ||||||
| </p> |  | ||||||
|  |  | ||||||
| <h2>January 17, 2019</h2> |  | ||||||
| <p> |  | ||||||
| <a href="relnotes/18.3.2.html">Mesa 18.3.2</a> is released. |  | ||||||
| This is a bug-fix release. |  | ||||||
| </p> |  | ||||||
|  |  | ||||||
| <h2>December 27, 2018</h2> |  | ||||||
| <p> |  | ||||||
| <a href="relnotes/18.2.8.html">Mesa 18.2.8</a> is released. |  | ||||||
| This is a bug-fix release. |  | ||||||
| </p> |  | ||||||
| <p> |  | ||||||
| NOTE: It is anticipated that 18.2.8 will be the final release in the |  | ||||||
| 18.2 series. Users of 18.2 are encouraged to migrate to the 18.3 |  | ||||||
| series in order to obtain future fixes. |  | ||||||
| </p> |  | ||||||
|  |  | ||||||
| <h2>December 13, 2018</h2> |  | ||||||
| <p> |  | ||||||
| <a href="relnotes/18.2.7.html">Mesa 18.2.7</a> is released. |  | ||||||
| This is a bug-fix release. |  | ||||||
| </p> |  | ||||||
|  |  | ||||||
| <h2>December 11, 2018</h2> |  | ||||||
| <p> |  | ||||||
| <a href="relnotes/18.3.1.html">Mesa 18.3.1</a> is released. |  | ||||||
| This is a bug-fix release. |  | ||||||
| </p> |  | ||||||
|  |  | ||||||
| <h2>December 7, 2018</h2> |  | ||||||
| <p> |  | ||||||
| <a href="relnotes/18.3.0.html">Mesa 18.3.0</a> is released.  This is a |  | ||||||
| new development release.  See the release notes for more information |  | ||||||
| about the release. |  | ||||||
| </p> |  | ||||||
|  |  | ||||||
| <h2>November 28, 2018</h2> |  | ||||||
| <p> |  | ||||||
| <a href="relnotes/18.2.6.html">Mesa 18.2.6</a> is released. |  | ||||||
| This is a bug-fix release. |  | ||||||
| </p> |  | ||||||
|  |  | ||||||
| <h2>November 15, 2018</h2> |  | ||||||
| <p> |  | ||||||
| <a href="relnotes/18.2.5.html">Mesa 18.2.5</a> is released. |  | ||||||
| This is a bug-fix release. |  | ||||||
| </p> |  | ||||||
|  |  | ||||||
| <h2>October 31, 2018</h2> |  | ||||||
| <p> |  | ||||||
| <a href="relnotes/18.2.4.html">Mesa 18.2.4</a> is released. |  | ||||||
| This is a bug-fix release. |  | ||||||
| </p> |  | ||||||
|  |  | ||||||
| <h2>October 19, 2018</h2> |  | ||||||
| <p> |  | ||||||
| <a href="relnotes/18.2.3.html">Mesa 18.2.3</a> is released. |  | ||||||
| This is a bug-fix release. |  | ||||||
| </p> |  | ||||||
|  |  | ||||||
| <h2>October 5, 2018</h2> |  | ||||||
| <p> |  | ||||||
| <a href="relnotes/18.2.2.html">Mesa 18.2.2</a> is released. |  | ||||||
| This is a bug-fix release. |  | ||||||
| </p> |  | ||||||
|  |  | ||||||
| <h2>September 24, 2018</h2> |  | ||||||
| <p> |  | ||||||
| <a href="relnotes/18.1.9.html">Mesa 18.1.9</a> is released. |  | ||||||
| This is a bug-fix release. |  | ||||||
| </p> |  | ||||||
| <p> |  | ||||||
| NOTE: It is anticipated that 18.1.9 will be the final release in the |  | ||||||
| 18.1 series. Users of 18.1 are encouraged to migrate to the 18.2 |  | ||||||
| series in order to obtain future fixes. |  | ||||||
| </p> |  | ||||||
|  |  | ||||||
| <h2>September 21, 2018</h2> |  | ||||||
| <p> |  | ||||||
| <a href="relnotes/18.2.1.html">Mesa 18.2.1</a> is released. |  | ||||||
| This is a bug-fix release. |  | ||||||
| </p> |  | ||||||
|  |  | ||||||
| <h2>September 7, 2018</h2> |  | ||||||
| <p> |  | ||||||
| <a href="relnotes/18.1.8.html">Mesa 18.1.8</a> and |  | ||||||
| <a href="relnotes/18.2.0.html">Mesa 18.2.0</a> are released. |  | ||||||
|  |  | ||||||
| These are, respectively, a bug-fix release from the 18.1 branch and a |  | ||||||
| new development release.  See the release notes for more information |  | ||||||
| about the releases. |  | ||||||
| </p> |  | ||||||
|  |  | ||||||
| <h2>August 24, 2018</h2> |  | ||||||
| <p> |  | ||||||
| <a href="relnotes/18.1.7.html">Mesa 18.1.7</a> is released. |  | ||||||
| This is a bug-fix release. |  | ||||||
| </p> |  | ||||||
|  |  | ||||||
| <h2>August 13, 2018</h2> |  | ||||||
| <p> |  | ||||||
| <a href="relnotes/18.1.6.html">Mesa 18.1.6</a> is released. |  | ||||||
| This is a bug-fix release. |  | ||||||
| </p> |  | ||||||
|  |  | ||||||
| <h2>July 27, 2018</h2> |  | ||||||
| <p> |  | ||||||
| <a href="relnotes/18.1.5.html">Mesa 18.1.5</a> is released. |  | ||||||
| This is a bug-fix release. |  | ||||||
| </p> |  | ||||||
|  |  | ||||||
| <h2>July 13, 2018</h2> |  | ||||||
| <p> |  | ||||||
| <a href="relnotes/18.1.4.html">Mesa 18.1.4</a> is released. |  | ||||||
| This is a bug-fix release. |  | ||||||
| </p> |  | ||||||
|  |  | ||||||
| <h2>June 29, 2018</h2> |  | ||||||
| <p> |  | ||||||
| <a href="relnotes/18.1.3.html">Mesa 18.1.3</a> is released. |  | ||||||
| This is a bug-fix release. |  | ||||||
| </p> |  | ||||||
|  |  | ||||||
| <h2>June 15, 2018</h2> |  | ||||||
| <p> |  | ||||||
| <a href="relnotes/18.1.2.html">Mesa 18.1.2</a> is released. |  | ||||||
| This is a bug-fix release. |  | ||||||
| </p> |  | ||||||
|  |  | ||||||
| <h2>June 3, 2018</h2> |  | ||||||
| <p> |  | ||||||
| <a href="relnotes/18.0.5.html">Mesa 18.0.5</a> is released. |  | ||||||
| This is a bug-fix release. |  | ||||||
| </p> |  | ||||||
| <p> |  | ||||||
| NOTE: It is anticipated that 18.0.5 will be the final release in the |  | ||||||
| 18.0 series. Users of 18.0 are encouraged to migrate to the 18.1 |  | ||||||
| series in order to obtain future fixes. |  | ||||||
| </p> |  | ||||||
|  |  | ||||||
| <h2>June 1, 2018</h2> |  | ||||||
| <p> |  | ||||||
| <a href="relnotes/18.1.1.html">Mesa 18.1.1</a> is released. |  | ||||||
| This is a bug-fix release. |  | ||||||
| </p> |  | ||||||
|  |  | ||||||
| <h2>May 18, 2018</h2> |  | ||||||
| <p> |  | ||||||
| <a href="relnotes/18.1.0.html">Mesa 18.1.0</a> is released.  This is a |  | ||||||
| new development release.  See the release notes for more information |  | ||||||
| about the release. |  | ||||||
| </p> |  | ||||||
|  |  | ||||||
| <h2>May 17, 2018</h2> |  | ||||||
| <p> |  | ||||||
| <a href="relnotes/18.0.4.html">Mesa 18.0.4</a> is released. |  | ||||||
| This is a bug-fix release. |  | ||||||
| </p> |  | ||||||
|  |  | ||||||
| <h2>May 7, 2018</h2> |  | ||||||
| <p> |  | ||||||
| <a href="relnotes/18.0.3.html">Mesa 18.0.3</a> is released. |  | ||||||
| This is a bug-fix release. |  | ||||||
| </p> |  | ||||||
|  |  | ||||||
| <h2>April 28, 2018</h2> |  | ||||||
| <p> |  | ||||||
| <a href="relnotes/18.0.2.html">Mesa 18.0.2</a> is released. |  | ||||||
| This is a bug-fix release. |  | ||||||
| </p> |  | ||||||
|  |  | ||||||
| <h2>April 18, 2018</h2> |  | ||||||
| <p> |  | ||||||
| <a href="relnotes/18.0.1.html">Mesa 18.0.1</a> is released. |  | ||||||
| This is a bug-fix release. |  | ||||||
| </p> |  | ||||||
|  |  | ||||||
| <h2>April 18, 2018</h2> |  | ||||||
| <p> |  | ||||||
| <a href="relnotes/17.3.9.html">Mesa 17.3.9</a> is released. |  | ||||||
| This is a bug-fix release. |  | ||||||
| </p> |  | ||||||
| <p> |  | ||||||
| NOTE: It is anticipated that 17.3.9 will be the final release in the |  | ||||||
| 17.3 series. Users of 17.3 are encouraged to migrate to the 18.0 |  | ||||||
| series in order to obtain future fixes. |  | ||||||
| </p> |  | ||||||
|  |  | ||||||
| <h2>April 03, 2018</h2> |  | ||||||
| <p> |  | ||||||
| <a href="relnotes/17.3.8.html">Mesa 17.3.8</a> is released. |  | ||||||
| This is a bug-fix release. |  | ||||||
| </p> |  | ||||||
|  |  | ||||||
| <h2>March 27, 2018</h2> |  | ||||||
| <p> |  | ||||||
| <a href="relnotes/18.0.0.html">Mesa 18.0.0</a> is released.  This is a |  | ||||||
| new development release.  See the release notes for more information |  | ||||||
| about the release. |  | ||||||
| </p> |  | ||||||
|  |  | ||||||
| <h2>March 21, 2018</h2> |  | ||||||
| <p> |  | ||||||
| <a href="relnotes/17.3.7.html">Mesa 17.3.7</a> is released. |  | ||||||
| This is a bug-fix release. |  | ||||||
| </p> |  | ||||||
|  |  | ||||||
| <h2>February 26, 2018</h2> |  | ||||||
| <p> |  | ||||||
| <a href="relnotes/17.3.6.html">Mesa 17.3.6</a> is released. |  | ||||||
| This is a bug-fix release. |  | ||||||
| </p> |  | ||||||
|  |  | ||||||
| <h2>February 19, 2018</h2> |  | ||||||
| <p> |  | ||||||
| <a href="relnotes/17.3.5.html">Mesa 17.3.5</a> is released. |  | ||||||
| This is a bug-fix release. |  | ||||||
| </p> |  | ||||||
|  |  | ||||||
| <h2>February 15, 2018</h2> |  | ||||||
| <p> |  | ||||||
| <a href="relnotes/17.3.4.html">Mesa 17.3.4</a> is released. |  | ||||||
| This is a bug-fix release. |  | ||||||
| </p> |  | ||||||
|  |  | ||||||
| <h2>January 18, 2018</h2> |  | ||||||
| <p> |  | ||||||
| <a href="relnotes/17.3.3.html">Mesa 17.3.3</a> is released. |  | ||||||
| This is a bug-fix release. |  | ||||||
| </p> |  | ||||||
|  |  | ||||||
| <h2>January 8, 2018</h2> |  | ||||||
| <p> |  | ||||||
| <a href="relnotes/17.3.2.html">Mesa 17.3.2</a> is released. |  | ||||||
| This is a bug-fix release. |  | ||||||
| </p> |  | ||||||
|  |  | ||||||
| <h2>December 22, 2017</h2> |  | ||||||
| <p> |  | ||||||
| <a href="relnotes/17.2.8.html">Mesa 17.2.8</a> is released. |  | ||||||
| This is a bug-fix release. |  | ||||||
| </p> |  | ||||||
| <p> |  | ||||||
| NOTE: It is anticipated that 17.2.8 will be the final release in the |  | ||||||
| 17.2 series. Users of 17.2 are encouraged to migrate to the 17.3 |  | ||||||
| series in order to obtain future fixes. |  | ||||||
| </p> |  | ||||||
|  |  | ||||||
| <h2>December 21, 2017</h2> |  | ||||||
| <p> |  | ||||||
| <a href="relnotes/17.3.1.html">Mesa 17.3.1</a> is released. |  | ||||||
| This is a bug-fix release. |  | ||||||
| </p> |  | ||||||
|  |  | ||||||
| <h2>December 14, 2017</h2> |  | ||||||
| <p> |  | ||||||
| <a href="relnotes/17.2.7.html">Mesa 17.2.7</a> is released. |  | ||||||
| This is a bug-fix release. |  | ||||||
| </p> |  | ||||||
|  |  | ||||||
| <h2>December 8, 2017</h2> |  | ||||||
| <p> |  | ||||||
| <a href="relnotes/17.3.0.html">Mesa 17.3.0</a> is released.  This is a |  | ||||||
| new development release.  See the release notes for more information |  | ||||||
| about the release. |  | ||||||
| </p> |  | ||||||
|  |  | ||||||
| <h2>November 25, 2017</h2> |  | ||||||
| <p> |  | ||||||
| <a href="relnotes/17.2.6.html">Mesa 17.2.6</a> is released. |  | ||||||
| This is a bug-fix release. |  | ||||||
| </p> |  | ||||||
|  |  | ||||||
| <h2>November 10, 2017</h2> |  | ||||||
| <p> |  | ||||||
| <a href="relnotes/17.2.5.html">Mesa 17.2.5</a> is released. |  | ||||||
| This is a bug-fix release. |  | ||||||
| </p> |  | ||||||
|  |  | ||||||
| <h2>October 30, 2017</h2> | <h2>October 30, 2017</h2> | ||||||
| <p> | <p> | ||||||
| <a href="relnotes/17.2.4.html">Mesa 17.2.4</a> is released. | <a href="relnotes/17.2.4.html">Mesa 17.2.4</a> is released. | ||||||
| @@ -474,11 +39,6 @@ This is a bug-fix release. | |||||||
| <a href="relnotes/17.1.10.html">Mesa 17.1.10</a> is released. | <a href="relnotes/17.1.10.html">Mesa 17.1.10</a> is released. | ||||||
| This is a bug-fix release. | This is a bug-fix release. | ||||||
| </p> | </p> | ||||||
| <p> |  | ||||||
| NOTE: It is anticipated that 17.1.10 will be the final release in the |  | ||||||
| 17.1 series. Users of 17.1 are encouraged to migrate to the 17.2 |  | ||||||
| series in order to obtain future fixes. |  | ||||||
| </p> |  | ||||||
|  |  | ||||||
| <h2>September 17, 2017</h2> | <h2>September 17, 2017</h2> | ||||||
| <p> | <p> | ||||||
| @@ -545,8 +105,7 @@ This is a bug-fix release. | |||||||
| <p> | <p> | ||||||
| <a href="relnotes/17.0.7.html">Mesa 17.0.7</a> is released. | <a href="relnotes/17.0.7.html">Mesa 17.0.7</a> is released. | ||||||
| This is a bug-fix release. | This is a bug-fix release. | ||||||
| </p> | <br> | ||||||
| <p> |  | ||||||
| NOTE: It is anticipated that 17.0.7 will be the final release in the 17.0 | NOTE: It is anticipated that 17.0.7 will be the final release in the 17.0 | ||||||
| series. Users of 17.0 are encouraged to migrate to the 17.1 series in order | series. Users of 17.0 are encouraged to migrate to the 17.1 series in order | ||||||
| to obtain future fixes. | to obtain future fixes. | ||||||
| @@ -595,8 +154,7 @@ This is a bug-fix release. | |||||||
| <a href="relnotes/17.0.2.html">Mesa 17.0.2</a> are released. | <a href="relnotes/17.0.2.html">Mesa 17.0.2</a> are released. | ||||||
|  |  | ||||||
| These are bug-fix releases from the 13.0 and 17.0 branches, respectively. | These are bug-fix releases from the 13.0 and 17.0 branches, respectively. | ||||||
| </p> | <br> | ||||||
| <p> |  | ||||||
| NOTE: It is anticipated that 13.0.6 will be the final release in the 13.0 | NOTE: It is anticipated that 13.0.6 will be the final release in the 13.0 | ||||||
| series. Users of 13.0 are encouraged to migrate to the 17.0 series in order | series. Users of 13.0 are encouraged to migrate to the 17.0 series in order | ||||||
| to obtain future fixes. | to obtain future fixes. | ||||||
| @@ -631,8 +189,7 @@ This is a bug-fix release. | |||||||
| <p> | <p> | ||||||
| <a href="relnotes/12.0.6.html">Mesa 12.0.6</a> is released. | <a href="relnotes/12.0.6.html">Mesa 12.0.6</a> is released. | ||||||
| This is a bug-fix release. | This is a bug-fix release. | ||||||
| </p> | <br> | ||||||
| <p> |  | ||||||
| NOTE: This is an extra release for the 12.0 stable branch, as per developers' | NOTE: This is an extra release for the 12.0 stable branch, as per developers' | ||||||
| feedback. It is anticipated that 12.0.6 will be the final release in the 12.0 | feedback. It is anticipated that 12.0.6 will be the final release in the 12.0 | ||||||
| series. Users of 12.0 are encouraged to migrate to the 13.0 series in order | series. Users of 12.0 are encouraged to migrate to the 13.0 series in order | ||||||
| @@ -649,8 +206,7 @@ This is a bug-fix release. | |||||||
| <p> | <p> | ||||||
| <a href="relnotes/12.0.5.html">Mesa 12.0.5</a> is released. | <a href="relnotes/12.0.5.html">Mesa 12.0.5</a> is released. | ||||||
| This is a bug-fix release. | This is a bug-fix release. | ||||||
| </p> | <br> | ||||||
| <p> |  | ||||||
| NOTE: It is anticipated that 12.0.5 will be the final release in the 12.0 | NOTE: It is anticipated that 12.0.5 will be the final release in the 12.0 | ||||||
| series. Users of 12.0 are encouraged to migrate to the 13.0 series in order | series. Users of 12.0 are encouraged to migrate to the 13.0 series in order | ||||||
| to obtain future fixes. | to obtain future fixes. | ||||||
| @@ -712,8 +268,7 @@ about the release. | |||||||
| <a href="relnotes/11.2.2.html">Mesa 11.2.2</a> are released. | <a href="relnotes/11.2.2.html">Mesa 11.2.2</a> are released. | ||||||
|  |  | ||||||
| These are bug-fix releases from the 11.1 and 11.2 branches, respectively. | These are bug-fix releases from the 11.1 and 11.2 branches, respectively. | ||||||
| </p> | <br> | ||||||
| <p> |  | ||||||
| NOTE: It is anticipated that 11.1.4 will be the final release in the 11.1.4 | NOTE: It is anticipated that 11.1.4 will be the final release in the 11.1.4 | ||||||
| series. Users of 11.1 are encouraged to migrate to the 11.2 series in order | series. Users of 11.1 are encouraged to migrate to the 11.2 series in order | ||||||
| to obtain future fixes. | to obtain future fixes. | ||||||
| @@ -744,8 +299,7 @@ This is a bug-fix release. | |||||||
| <p> | <p> | ||||||
| <a href="relnotes/11.0.9.html">Mesa 11.0.9</a> is released. | <a href="relnotes/11.0.9.html">Mesa 11.0.9</a> is released. | ||||||
| This is a bug-fix release. | This is a bug-fix release. | ||||||
| </p> | <br> | ||||||
| <p> |  | ||||||
| NOTE: It is anticipated that 11.0.9 will be the final release in the 11.0 | NOTE: It is anticipated that 11.0.9 will be the final release in the 11.0 | ||||||
| series. Users of 11.0 are encouraged to migrate to the 11.1 series in order | series. Users of 11.0 are encouraged to migrate to the 11.1 series in order | ||||||
| to obtain future fixes. | to obtain future fixes. | ||||||
| @@ -809,8 +363,7 @@ This is a bug-fix release. | |||||||
| <p> | <p> | ||||||
| <a href="relnotes/10.6.9.html">Mesa 10.6.9</a> is released. | <a href="relnotes/10.6.9.html">Mesa 10.6.9</a> is released. | ||||||
| This is a bug-fix release. | This is a bug-fix release. | ||||||
| </p> | <br> | ||||||
| <p> |  | ||||||
| NOTE: It is anticipated that 10.6.9 will be the final release in the 10.6 | NOTE: It is anticipated that 10.6.9 will be the final release in the 10.6 | ||||||
| series. Users of 10.6 are encouraged to migrate to the 11.0 series in order | series. Users of 10.6 are encouraged to migrate to the 11.0 series in order | ||||||
| to obtain future fixes. | to obtain future fixes. | ||||||
| @@ -881,8 +434,7 @@ This is a bug-fix release. | |||||||
| <p> | <p> | ||||||
| <a href="relnotes/10.5.9.html">Mesa 10.5.9</a> is released. | <a href="relnotes/10.5.9.html">Mesa 10.5.9</a> is released. | ||||||
| This is a bug-fix release. | This is a bug-fix release. | ||||||
| </p> | <br> | ||||||
| <p> |  | ||||||
| NOTE: It is anticipated that 10.5.9 will be the final release in the 10.5 | NOTE: It is anticipated that 10.5.9 will be the final release in the 10.5 | ||||||
| series. Users of 10.5 are encouraged to migrate to the 10.6 series in order | series. Users of 10.5 are encouraged to migrate to the 10.6 series in order | ||||||
| to obtain future fixes. | to obtain future fixes. | ||||||
| @@ -992,8 +544,7 @@ This is a bug-fix release. | |||||||
| and <a href="relnotes/10.4.2.html">Mesa 10.4.2</a> are released. | and <a href="relnotes/10.4.2.html">Mesa 10.4.2</a> are released. | ||||||
|  |  | ||||||
| These are bug-fix releases from the 10.3 and 10.4 branches, respectively. | These are bug-fix releases from the 10.3 and 10.4 branches, respectively. | ||||||
| </p> | <br> | ||||||
| <p> |  | ||||||
| NOTE: It is anticipated that 10.3.7 will be the final release in the 10.3 | NOTE: It is anticipated that 10.3.7 will be the final release in the 10.3 | ||||||
| series. Users of 10.3 are encouraged to migrate to the 10.4 series in order | series. Users of 10.3 are encouraged to migrate to the 10.4 series in order | ||||||
| to obtain future fixes. | to obtain future fixes. | ||||||
| @@ -1044,8 +595,7 @@ This is a bug-fix release. | |||||||
| and <a href="relnotes/10.3.1.html">Mesa 10.3.1</a> are released. | and <a href="relnotes/10.3.1.html">Mesa 10.3.1</a> are released. | ||||||
|  |  | ||||||
| These are bug-fix releases from the 10.2 and 10.3 branches, respectively. | These are bug-fix releases from the 10.2 and 10.3 branches, respectively. | ||||||
| </p> | <br> | ||||||
| <p> |  | ||||||
| NOTE: It is anticipated that 10.2.9 will be the final release in the 10.2 | NOTE: It is anticipated that 10.2.9 will be the final release in the 10.2 | ||||||
| series. Users of 10.2 are encouraged to migrate to the 10.3 series in order | series. Users of 10.2 are encouraged to migrate to the 10.3 series in order | ||||||
| to obtain future fixes. | to obtain future fixes. | ||||||
| @@ -1157,8 +707,7 @@ This is a bug-fix release. | |||||||
| <p> | <p> | ||||||
| <a href="relnotes/10.0.5.html">Mesa 10.0.5</a> is released. | <a href="relnotes/10.0.5.html">Mesa 10.0.5</a> is released. | ||||||
| This is a bug-fix release. | This is a bug-fix release. | ||||||
| </p> | <br> | ||||||
| <p> |  | ||||||
| NOTE: Since the 10.1.1 release is being released concurrently, it is | NOTE: Since the 10.1.1 release is being released concurrently, it is | ||||||
| anticipated that 10.0.5 will be the final release in the 10.0 | anticipated that 10.0.5 will be the final release in the 10.0 | ||||||
| series. Users of 10.0 are encouraged to migrate to the 10.1 series in | series. Users of 10.0 are encouraged to migrate to the 10.1 series in | ||||||
| @@ -1637,9 +1186,9 @@ with a new test that does over 130 tests of the | |||||||
| shading language and built-in functions. | shading language and built-in functions. | ||||||
| </p> | </p> | ||||||
|  |  | ||||||
| <h2>April 4, 2007</h2> | <h2>April 2007</h2> | ||||||
| <p> | <p> | ||||||
| Thomas Hellström of Tungsten Graphics has written a whitepaper | Thomas Hellström of Tungsten Graphics has written a whitepaper | ||||||
| describing the new DRI memory management system. | describing the new DRI memory management system. | ||||||
| </p> | </p> | ||||||
|  |  | ||||||
| @@ -2037,7 +1586,7 @@ d2b5ba32b53e0ad0576c637a4cc1fb41  MesaDemos-5.1.zip | |||||||
| </pre> | </pre> | ||||||
|  |  | ||||||
|  |  | ||||||
| <h2>November 12, 2003</h2> | <H2>November 12, 2003</H2> | ||||||
|  |  | ||||||
| <p> | <p> | ||||||
| New Mesa 5.0.2 tarballs have been uploaded to SourceForge which fix a | New Mesa 5.0.2 tarballs have been uploaded to SourceForge which fix a | ||||||
| @@ -2090,7 +1639,7 @@ Mesa 5.0.2 has been released.  This is a stable, bug-fix release. | |||||||
| </pre> | </pre> | ||||||
|  |  | ||||||
|  |  | ||||||
| <h2>June 8, 2003</h2> | <h2>June 2003</h2> | ||||||
|  |  | ||||||
| <p> | <p> | ||||||
| Mesa's directory tree has been overhauled. | Mesa's directory tree has been overhauled. | ||||||
| @@ -2467,7 +2016,7 @@ Here's what's new:</p> | |||||||
|  |  | ||||||
| <h2>April 29, 2001</h2> | <h2>April 29, 2001</h2> | ||||||
| <p>New Mesa website</p> | <p>New Mesa website</p> | ||||||
| <p>Mark Manning produced the new website. Thanks, Mark!</p> | <p>Mark Manning produced the new website.<br>Thanks, Mark!</p> | ||||||
|  |  | ||||||
|  |  | ||||||
| <h2>February 14, 2001</h2> | <h2>February 14, 2001</h2> | ||||||
| @@ -2586,9 +2135,8 @@ just bug fixes.</p> | |||||||
| </pre> | </pre> | ||||||
|  |  | ||||||
| <p>Please report any problems with this release ASAP. Bugs should be filed on the | <p>Please report any problems with this release ASAP. Bugs should be filed on the | ||||||
| Mesa3D website at sourceforge. | Mesa3D website at sourceforge.<br> | ||||||
| </p> | After 3.2 is wrapped up I hope to release 3.3 beta 1 soon afterward.</p> | ||||||
| <p>After 3.2 is wrapped up I hope to release 3.3 beta 1 soon afterward.</p> |  | ||||||
| <p>-- Brian</p> | <p>-- Brian</p> | ||||||
|  |  | ||||||
| <h2>December 17, 1999</h2> | <h2>December 17, 1999</h2> | ||||||
| @@ -2633,27 +2181,21 @@ ftp, and CVS services aren't fully restored yet. Please be patient.</p> | |||||||
| <p>-Brian</p> | <p>-Brian</p> | ||||||
|  |  | ||||||
| <h2>June 7, 1999</h2> | <h2>June 7, 1999</h2> | ||||||
| <p>RPMS of the nVidia RIVA server can be found at | <p>RPMS of the nVidia RIVA server can be found at <code>ftp://ftp.mesa3d.org/mesa/misc/nVidia/</code>.</p> | ||||||
| <a href="ftp://ftp.mesa3d.org/mesa/misc/nVidia/"> |  | ||||||
| ftp://ftp.mesa3d.org/mesa/misc/nVidia/</a>.</p> |  | ||||||
|  |  | ||||||
| <h2>June 2, 1999</h2> | <h2>June 2, 1999</h2> | ||||||
| <p><a href="https://www.nvidia.com/">nVidia</a> has released some Linux binaries for | <p><a href="https://www.nvidia.com/">nVidia</a> has released some Linux binaries for | ||||||
| xfree86 3.3.3.1, along with the <b>full source</b>, which includes GLX acceleration | xfree86 3.3.3.1, along with the <b>full source</b>, which includes GLX acceleration | ||||||
| based on Mesa 3.0. They can be downloaded from | based on Mesa 3.0. They can be downloaded from <code>https://www.nvidia.com/Products.nsf/htmlmedia/software_drivers.html</code>.</p> | ||||||
| <a href="https://www.nvidia.com/Products.nsf/htmlmedia/software_drivers.html"> |  | ||||||
| https://www.nvidia.com/Products.nsf/htmlmedia/software_drivers.html</a>.</p> |  | ||||||
|  |  | ||||||
| <h2>May 24, 1999</h2> | <h2>May 24, 1999</h2> | ||||||
| <p>Beta 2 of Mesa 3.1 has been make available at | <p>Beta 2 of Mesa 3.1 has been make available at <code>ftp://ftp.mesa3d.org/mesa/beta/</code>. | ||||||
| <a href="ftp://ftp.mesa3d.org/mesa/beta/">ftp://ftp.mesa3d.org/mesa/beta/</a>. If you are into the | If you are into the quake scene, you may want to try this out, as it contains some | ||||||
| quake scene, you may want to try this out, as it contains some optimizations | optimizations specifically in the Q3A rendering path. | ||||||
| specifically in the Q3A rendering path. |  | ||||||
|  |  | ||||||
| </p><h2>May 13, 1999</h2> | <h2>May 13, 1999</h2> | ||||||
| <p>For those interested in the integration of Mesa into XFree86 4.0, Precision Insight | <p>For those interested in the integration of Mesa into XFree86 4.0, Precision Insight | ||||||
| has posted their lowlevel design documents at | has posted their lowlevel design documents at <code>http://www.precisioninsight.com</code>.</p> | ||||||
| <a href="http://www.precisioninsight.com">www.precisioninsight.com</a>.</p> |  | ||||||
|  |  | ||||||
| <h2>May 13, 1999</h2> | <h2>May 13, 1999</h2> | ||||||
| <pre>May 1999 - John Carmack of id Software, Inc. has made a donation of | <pre>May 1999 - John Carmack of id Software, Inc. has made a donation of | ||||||
| @@ -2679,11 +2221,11 @@ grateful. | |||||||
|  |  | ||||||
| <h2>May 1, 1999</h2> | <h2>May 1, 1999</h2> | ||||||
| <p>John Carmack made an interesting .plan update yesterday:</p> | <p>John Carmack made an interesting .plan update yesterday:</p> | ||||||
| <pre> | <blockquote> | ||||||
| I put together a document on optimizing OpenGL drivers for Q3 that should be helpful to the various Linux 3D teams. |     <i>"I put together a document on optimizing OpenGL drivers for Q3 that | ||||||
|  |     should be helpful to the various Linux 3D teams.</i><br> | ||||||
| http://www.quake3arena.com/news/glopt.html |     http://www.quake3arena.com/news/glopt.html" | ||||||
| </pre> | </blockquote> | ||||||
|  |  | ||||||
| <h2>April 7, 1999</h2> | <h2>April 7, 1999</h2> | ||||||
| <p>Updated the Mesa contributors section and added links to RPM Mesa packages.</p> | <p>Updated the Mesa contributors section and added links to RPM Mesa packages.</p> | ||||||
| @@ -2691,14 +2233,13 @@ http://www.quake3arena.com/news/glopt.html | |||||||
| <h2>March 18, 1999</h2> | <h2>March 18, 1999</h2> | ||||||
| <p>The new webpages are now online. Enjoy, and let me know if you find any errors. | <p>The new webpages are now online. Enjoy, and let me know if you find any errors. | ||||||
|  |  | ||||||
| </p><h2>February 16, 1999</h2> | <h2>February 16, 1999</h2> | ||||||
| <p><a href="https://www.sgi.com/">SGI</a> releases its | <p><a href="https://www.sgi.com/">SGI</a> releases its | ||||||
| <a href="http://web.archive.org/web/20040805154836/http://www.sgi.com/software/opensource/glx/download.html">GLX source code</a>. | <a href="https://www.sgi.com/software/opensource/glx/">GLX source code</a>.</p> | ||||||
| </p> |  | ||||||
|  |  | ||||||
| <h2>January 22, 1999</h2> | <h2>January 22, 1999</h2> | ||||||
| <p><a href="https://www.mesa3d.org">www.mesa3d.org</a> established</p> | <p><a href="https://www.mesa3d.org">www.mesa3d.org</a> established</p> | ||||||
|  |  | ||||||
| </div> | </div> | ||||||
| </body> | </body> | ||||||
| </html> | </html> | ||||||
|   | |||||||
| @@ -8,7 +8,7 @@ | |||||||
| <body> | <body> | ||||||
|  |  | ||||||
| <div class="header"> | <div class="header"> | ||||||
|   The Mesa 3D Graphics Library |   <h1>The Mesa 3D Graphics Library</h1> | ||||||
| </div> | </div> | ||||||
|  |  | ||||||
| <iframe src="contents.html"></iframe> | <iframe src="contents.html"></iframe> | ||||||
| @@ -22,7 +22,7 @@ | |||||||
|   <li><a href="#prereq-general">General prerequisites</a> |   <li><a href="#prereq-general">General prerequisites</a> | ||||||
|   <li><a href="#prereq-dri">For DRI and hardware acceleration</a> |   <li><a href="#prereq-dri">For DRI and hardware acceleration</a> | ||||||
|   </ul> |   </ul> | ||||||
| <li><a href="#meson">Building with meson</a> | <li><a href="#autoconf">Building with autoconf (Linux/Unix/X11)</a> | ||||||
| <li><a href="#scons">Building with SCons (Windows/Linux)</a> | <li><a href="#scons">Building with SCons (Windows/Linux)</a> | ||||||
| <li><a href="#android">Building with AOSP (Android)</a> | <li><a href="#android">Building with AOSP (Android)</a> | ||||||
| <li><a href="#libs">Library Information</a> | <li><a href="#libs">Library Information</a> | ||||||
| @@ -30,23 +30,25 @@ | |||||||
| </ol> | </ol> | ||||||
|  |  | ||||||
|  |  | ||||||
| <h2 id="prereq-general">1. Prerequisites for building</h2> | <h1 id="prereq-general">1. Prerequisites for building</h1> | ||||||
|  |  | ||||||
| <h3>1.1 General</h3> | <h2>1.1 General</h2> | ||||||
|  |  | ||||||
| <h4>Build system</h4> | <p> | ||||||
|  | Build system. | ||||||
|  | </p> | ||||||
|  |  | ||||||
| <ul> | <ul> | ||||||
| <li><a href="https://mesonbuild.com">meson</a> is required when building on *nix platforms and is supported on windows. | <li>Autoconf is required when building on *nix platforms. | ||||||
| <li><a href="http://www.scons.org/">SCons</a> is an alternative for building on | <li><a href="http://www.scons.org/">SCons</a> is required for building on | ||||||
| Windows and Linux. | Windows and optional for Linux (it's an alternative to autoconf/automake.) | ||||||
| </li> | </li> | ||||||
| <li>Android Build system when building as native Android component. Meson | <li>Android Build system when building as native Android component. Autoconf | ||||||
| is used when when building ARC. | is used when when building ARC. | ||||||
| </li> | </li> | ||||||
| </ul> | </ul> | ||||||
|  |  | ||||||
| <h4>Compiler</h4> |  | ||||||
| <p> | <p> | ||||||
| The following compilers are known to work, if you know of others or you're | The following compilers are known to work, if you know of others or you're | ||||||
| willing to maintain support for other compiler get in touch. | willing to maintain support for other compiler get in touch. | ||||||
| @@ -55,29 +57,35 @@ willing to maintain support for other compiler get in touch. | |||||||
| <ul> | <ul> | ||||||
| <li>GCC 4.2.0 or later (some parts of Mesa may require later versions) | <li>GCC 4.2.0 or later (some parts of Mesa may require later versions) | ||||||
| <li>clang - exact minimum requirement is currently unknown. | <li>clang - exact minimum requirement is currently unknown. | ||||||
| <li>Microsoft Visual Studio 2015 or later is required, for building on Windows. | <li>Microsoft Visual Studio 2013 Update 4 or later is required, for building on Windows. | ||||||
| </ul> | </ul> | ||||||
|  |  | ||||||
|  |  | ||||||
| <h4>Third party/extra tools.</h4> | <p> | ||||||
|  | Third party/extra tools. | ||||||
|  | <br> | ||||||
|  | <strong>Note</strong>: These should not be required, when building from a release tarball. If | ||||||
|  | you think you've spotted a bug let developers know by filing a | ||||||
|  | <a href="bugs.html">bug report</a>. | ||||||
|  | </p> | ||||||
|  |  | ||||||
|  |  | ||||||
| <ul> | <ul> | ||||||
| <li><a href="https://www.python.org/">Python</a> - Python is required. | <li><a href="https://www.python.org/">Python</a> - Python is required. | ||||||
| When building with scons 2.7 is required. | Version 2.6.4 or later should work. | ||||||
| When building with meson 3.5 or newer is required. |  | ||||||
| </li> | </li> | ||||||
| <li><a href="http://www.makotemplates.org/">Python Mako module</a> - | <li><a href="http://www.makotemplates.org/">Python Mako module</a> - | ||||||
| Python Mako module is required. Version 0.8.0 or later should work. | Python Mako module is required. Version 0.3.4 or later should work. | ||||||
| </li> | </li> | ||||||
| <li>lex / yacc - for building the Mesa IR and GLSL compiler. | <li>lex / yacc - for building the Mesa IR and GLSL compiler. | ||||||
| <p> | <div> | ||||||
| On Linux systems, flex and bison versions 2.5.35 and 2.4.1, respectively, | On Linux systems, flex and bison versions 2.5.35 and 2.4.1, respectively, | ||||||
| (or later) should work. | (or later) should work. | ||||||
| On Windows with MinGW, install flex and bison with: | On Windows with MinGW, install flex and bison with: | ||||||
| <pre>mingw-get install msys-flex msys-bison</pre> | <pre>mingw-get install msys-flex msys-bison</pre> | ||||||
| For MSVC on Windows, install | For MSVC on Windows, install | ||||||
| <a href="http://winflexbison.sourceforge.net/">Win flex-bison</a>. | <a href="http://winflexbison.sourceforge.net/">Win flex-bison</a>. | ||||||
| </p> | </div> | ||||||
| </ul> | </ul> | ||||||
| <p><strong>Note</strong>: Some versions can be buggy (eg. flex 2.6.2) so do try others if things fail.</p> | <p><strong>Note</strong>: Some versions can be buggy (eg. flex 2.6.2) so do try others if things fail.</p> | ||||||
|  |  | ||||||
| @@ -103,51 +111,29 @@ the packaging tool used by your distro. | |||||||
|   ... # others |   ... # others | ||||||
| </pre> | </pre> | ||||||
|  |  | ||||||
| <h2 id="meson">2. Building with meson</h2> |  | ||||||
|  |  | ||||||
| <p><string>Meson &6t;= 0.46.0 is required</string></p> | <h1 id="autoconf">2. Building with autoconf (Linux/Unix/X11)</h1> | ||||||
|  |  | ||||||
| <p> | <p> | ||||||
| Meson is the latest build system in mesa, it is currently able to build for | The primary method to build Mesa on Unix systems is with autoconf. | ||||||
| *nix systems like Linux and BSD, macOS, Haiku, and Windows. |  | ||||||
| </p> | </p> | ||||||
|  |  | ||||||
| <p> | <p> | ||||||
| The general approach is: | The general approach is the standard: | ||||||
| </p> | </p> | ||||||
| <pre> | <pre> | ||||||
|   meson builddir/ |   ./configure | ||||||
|   ninja -C builddir/ |   make | ||||||
|   sudo ninja -C builddir/ install |   sudo make install | ||||||
| </pre> | </pre> | ||||||
|  |  | ||||||
| <p>On windows you can also use the visual studio backend</p> |  | ||||||
| <pre> |  | ||||||
|   meson builddir --backend=vs |  | ||||||
|   cd builddir |  | ||||||
|   msbuild mesa.sln /m |  | ||||||
| </pre> |  | ||||||
|  |  | ||||||
| <p> | <p> | ||||||
| Please read the <a href="meson.html">detailed meson instructions</a> | But please read the <a href="autoconf.html">detailed autoconf instructions</a> | ||||||
| for more information | for more details. | ||||||
| </p> |  | ||||||
|  |  | ||||||
| <p>On windows you can also use the visual studio backend</p> |  | ||||||
| <pre> |  | ||||||
|   meson builddir --backend=vs |  | ||||||
|   cd builddir |  | ||||||
|   msbuild mesa.sln /m |  | ||||||
| </pre> |  | ||||||
|  |  | ||||||
| <p> |  | ||||||
| Please read the <a href="meson.html">detailed meson instructions</a> |  | ||||||
| for more information |  | ||||||
| </p> | </p> | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
| <h2 id="scons">3. Building with SCons (Windows/Linux)</h2> | <h1 id="scons">3. Building with SCons (Windows/Linux)</h1> | ||||||
|  |  | ||||||
| <p> | <p> | ||||||
| To build Mesa with SCons on Linux or Windows do | To build Mesa with SCons on Linux or Windows do | ||||||
| @@ -183,7 +169,7 @@ Additional information is available in <a href="README.WIN32">README.WIN32</a>. | |||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
| <h2 id="android">4. Building with AOSP (Android)</h2> | <h1 id="android">4. Building with AOSP (Android)</h1> | ||||||
|  |  | ||||||
| <p> | <p> | ||||||
| Currently one can build Mesa for Android as part of the AOSP project, yet | Currently one can build Mesa for Android as part of the AOSP project, yet | ||||||
| @@ -202,7 +188,7 @@ Android-x86 and/or other resources. | |||||||
| </p> | </p> | ||||||
|  |  | ||||||
|  |  | ||||||
| <h2 id="libs">5. Library Information</h2> | <h1 id="libs">5. Library Information</h1> | ||||||
|  |  | ||||||
| <p> | <p> | ||||||
| When compilation has finished, look in the top-level <code>lib/</code> | When compilation has finished, look in the top-level <code>lib/</code> | ||||||
| @@ -210,17 +196,18 @@ When compilation has finished, look in the top-level <code>lib/</code> | |||||||
| You'll see a set of library files similar to this: | You'll see a set of library files similar to this: | ||||||
| </p> | </p> | ||||||
| <pre> | <pre> | ||||||
| lrwxrwxrwx    1 brian    users          10 Mar 26 07:53 libGL.so -> libGL.so.1* | lrwxrwxrwx    1 brian    users          10 Mar 26 07:53 libGL.so -> libGL.so.1* | ||||||
| lrwxrwxrwx    1 brian    users          19 Mar 26 07:53 libGL.so.1 -> libGL.so.1.5.060100* | lrwxrwxrwx    1 brian    users          19 Mar 26 07:53 libGL.so.1 -> libGL.so.1.5.060100* | ||||||
| -rwxr-xr-x    1 brian    users     3375861 Mar 26 07:53 libGL.so.1.5.060100* | -rwxr-xr-x    1 brian    users     3375861 Mar 26 07:53 libGL.so.1.5.060100* | ||||||
| lrwxrwxrwx    1 brian    users          14 Mar 26 07:53 libOSMesa.so -> libOSMesa.so.6* | lrwxrwxrwx    1 brian    users          14 Mar 26 07:53 libOSMesa.so -> libOSMesa.so.6* | ||||||
| lrwxrwxrwx    1 brian    users          23 Mar 26 07:53 libOSMesa.so.6 -> libOSMesa.so.6.1.060100* | lrwxrwxrwx    1 brian    users          23 Mar 26 07:53 libOSMesa.so.6 -> libOSMesa.so.6.1.060100* | ||||||
| -rwxr-xr-x    1 brian    users       23871 Mar 26 07:53 libOSMesa.so.6.1.060100* | -rwxr-xr-x    1 brian    users       23871 Mar 26 07:53 libOSMesa.so.6.1.060100* | ||||||
| </pre> | </pre> | ||||||
|  |  | ||||||
| <p> | <p> | ||||||
| <b>libGL</b> is the main OpenGL library (i.e. Mesa), while <b>libOSMesa</b> | <b>libGL</b> is the main OpenGL library (i.e. Mesa). | ||||||
| is the OSMesa (Off-Screen) interface library. | <br> | ||||||
|  | <b>libOSMesa</b> is the OSMesa (Off-Screen) interface library. | ||||||
| </p> | </p> | ||||||
|  |  | ||||||
| <p> | <p> | ||||||
| @@ -239,10 +226,10 @@ versions of libGL and device drivers. | |||||||
| </p> | </p> | ||||||
|  |  | ||||||
|  |  | ||||||
| <h2 id="pkg-config">6. Building OpenGL programs with pkg-config</h2> | <h1 id="pkg-config">6. Building OpenGL programs with pkg-config</h1> | ||||||
|  |  | ||||||
| <p> | <p> | ||||||
| Running <code>ninja install</code> will install package configuration files | Running <code>make install</code> will install package configuration files | ||||||
| for the pkg-config utility. | for the pkg-config utility. | ||||||
| </p> | </p> | ||||||
|  |  | ||||||
| @@ -258,6 +245,8 @@ For example, compiling and linking a GLUT application can be done with: | |||||||
|    gcc `pkg-config --cflags --libs glut` mydemo.c -o mydemo |    gcc `pkg-config --cflags --libs glut` mydemo.c -o mydemo | ||||||
| </pre> | </pre> | ||||||
|  |  | ||||||
|  | <br> | ||||||
|  |  | ||||||
| </div> | </div> | ||||||
| </body> | </body> | ||||||
| </html> | </html> | ||||||
|   | |||||||
| @@ -2,13 +2,13 @@ | |||||||
| <html lang="en"> | <html lang="en"> | ||||||
| <head> | <head> | ||||||
|   <meta http-equiv="content-type" content="text/html; charset=utf-8"> |   <meta http-equiv="content-type" content="text/html; charset=utf-8"> | ||||||
|   <title>Introduction</title> |   <title>Mesa Introduction</title> | ||||||
|   <link rel="stylesheet" type="text/css" href="mesa.css"> |   <link rel="stylesheet" type="text/css" href="mesa.css"> | ||||||
| </head> | </head> | ||||||
| <body> | <body> | ||||||
|  |  | ||||||
| <div class="header"> | <div class="header"> | ||||||
|   The Mesa 3D Graphics Library |   <h1>The Mesa 3D Graphics Library</h1> | ||||||
| </div> | </div> | ||||||
|  |  | ||||||
| <iframe src="contents.html"></iframe> | <iframe src="contents.html"></iframe> | ||||||
| @@ -50,7 +50,7 @@ systems. | |||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
| <h2>Project History</h2> | <h1>Project History</h1> | ||||||
|  |  | ||||||
| <p> | <p> | ||||||
| The Mesa project was originally started by Brian Paul. | The Mesa project was originally started by Brian Paul. | ||||||
| @@ -185,7 +185,7 @@ of the OpenGL, OpenGL ES and Vulkan specifications. | |||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
| <h2>Major Versions</h2> | <h1>Major Versions</h1> | ||||||
|  |  | ||||||
| <p> | <p> | ||||||
| This is a summary of the major versions of Mesa. | This is a summary of the major versions of Mesa. | ||||||
| @@ -194,7 +194,7 @@ of the OpenGL specification is implemented. | |||||||
| </p> | </p> | ||||||
|  |  | ||||||
|  |  | ||||||
| <h3>Version 12.x features</h3> | <h2>Version 12.x features</h2> | ||||||
| <p> | <p> | ||||||
| Version 12.x of Mesa implements the OpenGL 4.3 API, but not all drivers | Version 12.x of Mesa implements the OpenGL 4.3 API, but not all drivers | ||||||
| support OpenGL 4.3. | support OpenGL 4.3. | ||||||
| @@ -204,21 +204,21 @@ Initial support for Vulkan is also included. | |||||||
| </p> | </p> | ||||||
|  |  | ||||||
|  |  | ||||||
| <h3>Version 11.x features</h3> | <h2>Version 11.x features</h2> | ||||||
| <p> | <p> | ||||||
| Version 11.x of Mesa implements the OpenGL 4.1 API, but not all drivers | Version 11.x of Mesa implements the OpenGL 4.1 API, but not all drivers | ||||||
| support OpenGL 4.1. | support OpenGL 4.1. | ||||||
| </p> | </p> | ||||||
|  |  | ||||||
|  |  | ||||||
| <h3>Version 10.x features</h3> | <h2>Version 10.x features</h2> | ||||||
| <p> | <p> | ||||||
| Version 10.x of Mesa implements the OpenGL 3.3 API, but not all drivers | Version 10.x of Mesa implements the OpenGL 3.3 API, but not all drivers | ||||||
| support OpenGL 3.3. | support OpenGL 3.3. | ||||||
| </p> | </p> | ||||||
|  |  | ||||||
|  |  | ||||||
| <h3>Version 9.x features</h3> | <h2>Version 9.x features</h2> | ||||||
| <p> | <p> | ||||||
| Version 9.x of Mesa implements the OpenGL 3.1 API. | Version 9.x of Mesa implements the OpenGL 3.1 API. | ||||||
| While the driver for Intel Sandy Bridge and Ivy Bridge is the only | While the driver for Intel Sandy Bridge and Ivy Bridge is the only | ||||||
| @@ -233,7 +233,7 @@ tracker for OpenCL. | |||||||
| </p> | </p> | ||||||
|  |  | ||||||
|  |  | ||||||
| <h3>Version 8.x features</h3> | <h2>Version 8.x features</h2> | ||||||
| <p> | <p> | ||||||
| Version 8.x of Mesa implements the OpenGL 3.0 API. | Version 8.x of Mesa implements the OpenGL 3.0 API. | ||||||
| The developers at Intel deserve a lot of credit for implementing most | The developers at Intel deserve a lot of credit for implementing most | ||||||
| @@ -242,14 +242,14 @@ the i965 driver. | |||||||
| </p> | </p> | ||||||
|  |  | ||||||
|  |  | ||||||
| <h3>Version 7.x features</h3> | <h2>Version 7.x features</h2> | ||||||
| <p> | <p> | ||||||
| Version 7.x of Mesa implements the OpenGL 2.1 API.  The main feature | Version 7.x of Mesa implements the OpenGL 2.1 API.  The main feature | ||||||
| of OpenGL 2.x is the OpenGL Shading Language. | of OpenGL 2.x is the OpenGL Shading Language. | ||||||
| </p> | </p> | ||||||
|  |  | ||||||
|  |  | ||||||
| <h3>Version 6.x features</h3> | <h2>Version 6.x features</h2> | ||||||
| <p> | <p> | ||||||
| Version 6.x of Mesa implements the OpenGL 1.5 API with the following | Version 6.x of Mesa implements the OpenGL 1.5 API with the following | ||||||
| extensions incorporated as standard features: | extensions incorporated as standard features: | ||||||
| @@ -289,7 +289,7 @@ OpenGL specification</a> for more details. | |||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
| <h3>Version 5.x features</h3> | <h2>Version 5.x features</h2> | ||||||
| <p> | <p> | ||||||
| Version 5.x of Mesa implements the OpenGL 1.4 API with the following | Version 5.x of Mesa implements the OpenGL 1.4 API with the following | ||||||
| extensions incorporated as standard features: | extensions incorporated as standard features: | ||||||
| @@ -315,7 +315,7 @@ extensions incorporated as standard features: | |||||||
| </ul> | </ul> | ||||||
|  |  | ||||||
|  |  | ||||||
| <h3>Version 4.x features</h3> | <h2>Version 4.x features</h2> | ||||||
|  |  | ||||||
| <p> | <p> | ||||||
| Version 4.x of Mesa implements the OpenGL 1.3 API with the following | Version 4.x of Mesa implements the OpenGL 1.3 API with the following | ||||||
| @@ -334,7 +334,7 @@ extensions incorporated as standard features: | |||||||
| <li>GL_ARB_transpose_matrix | <li>GL_ARB_transpose_matrix | ||||||
| </ul> | </ul> | ||||||
|  |  | ||||||
| <h3>Version 3.x features</h3> | <h2>Version 3.x features</h2> | ||||||
|  |  | ||||||
| <p> | <p> | ||||||
| Version 3.x of Mesa implements the OpenGL 1.2 API with the following | Version 3.x of Mesa implements the OpenGL 1.2 API with the following | ||||||
| @@ -350,7 +350,7 @@ features: | |||||||
| </ul> | </ul> | ||||||
|  |  | ||||||
|  |  | ||||||
| <h3>Version 2.x features</h3> | <h2>Version 2.x features</h2> | ||||||
| <p> | <p> | ||||||
| Version 2.x of Mesa implements the OpenGL 1.1 API with the following | Version 2.x of Mesa implements the OpenGL 1.1 API with the following | ||||||
| features. | features. | ||||||
|   | |||||||
| @@ -2,21 +2,19 @@ | |||||||
| <html lang="en"> | <html lang="en"> | ||||||
| <head> | <head> | ||||||
|   <meta http-equiv="content-type" content="text/html; charset=utf-8"> |   <meta http-equiv="content-type" content="text/html; charset=utf-8"> | ||||||
|   <title>License and Copyright</title> |   <title>License / Copyright Information</title> | ||||||
|   <link rel="stylesheet" type="text/css" href="mesa.css"> |   <link rel="stylesheet" type="text/css" href="mesa.css"> | ||||||
| </head> | </head> | ||||||
| <body> | <body> | ||||||
|  |  | ||||||
| <div class="header"> | <div class="header"> | ||||||
|   The Mesa 3D Graphics Library |   <h1>The Mesa 3D Graphics Library</h1> | ||||||
| </div> | </div> | ||||||
|  |  | ||||||
| <iframe src="contents.html"></iframe> | <iframe src="contents.html"></iframe> | ||||||
| <div class="content"> | <div class="content"> | ||||||
|  |  | ||||||
| <h1>License and Copyright</h1> | <h1>Disclaimer</h1> | ||||||
|  |  | ||||||
| <h2>Disclaimer</h2> |  | ||||||
|  |  | ||||||
| <p> | <p> | ||||||
| Mesa is a 3-D graphics library with an API which is very similar to | Mesa is a 3-D graphics library with an API which is very similar to | ||||||
| @@ -34,7 +32,7 @@ vendor. | |||||||
| <p> | <p> | ||||||
| Please do not refer to the library as <em>MesaGL</em> (for legal | Please do not refer to the library as <em>MesaGL</em> (for legal | ||||||
| reasons). It's just <em>Mesa</em> or <em>The Mesa 3-D graphics | reasons). It's just <em>Mesa</em> or <em>The Mesa 3-D graphics | ||||||
| library</em>. | library</em>. <br> | ||||||
| </p> | </p> | ||||||
|  |  | ||||||
| <p> | <p> | ||||||
| @@ -44,7 +42,7 @@ library</em>. | |||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
| <h2>License / Copyright Information</h2> | <h1>License / Copyright Information</h1> | ||||||
|  |  | ||||||
| <p> | <p> | ||||||
| The Mesa distribution consists of several components.  Different copyrights | The Mesa distribution consists of several components.  Different copyrights | ||||||
| @@ -84,7 +82,7 @@ SOFTWARE. | |||||||
| </pre> | </pre> | ||||||
|  |  | ||||||
|  |  | ||||||
| <h2>Attention, Contributors</h2> | <h1>Attention, Contributors</h1> | ||||||
|  |  | ||||||
| <p> | <p> | ||||||
| When contributing to the Mesa project you must agree to the licensing terms | When contributing to the Mesa project you must agree to the licensing terms | ||||||
| @@ -94,7 +92,7 @@ and their respective licenses. | |||||||
| </p> | </p> | ||||||
|  |  | ||||||
|  |  | ||||||
| <h2>Mesa Component Licenses</h2> | <h1>Mesa Component Licenses</h1> | ||||||
|  |  | ||||||
| <pre> | <pre> | ||||||
| Component         Location               License | Component         Location               License | ||||||
|   | |||||||
| @@ -2,13 +2,13 @@ | |||||||
| <html lang="en"> | <html lang="en"> | ||||||
| <head> | <head> | ||||||
|   <meta http-equiv="content-type" content="text/html; charset=utf-8"> |   <meta http-equiv="content-type" content="text/html; charset=utf-8"> | ||||||
|   <title>Mailing Lists</title> |   <title>Mesa Mailing Lists</title> | ||||||
|   <link rel="stylesheet" type="text/css" href="mesa.css"> |   <link rel="stylesheet" type="text/css" href="mesa.css"> | ||||||
| </head> | </head> | ||||||
| <body> | <body> | ||||||
|  |  | ||||||
| <div class="header"> | <div class="header"> | ||||||
|   The Mesa 3D Graphics Library |   <h1>The Mesa 3D Graphics Library</h1> | ||||||
| </div> | </div> | ||||||
|  |  | ||||||
| <iframe src="contents.html"></iframe> | <iframe src="contents.html"></iframe> | ||||||
| @@ -68,14 +68,14 @@ kernels, see the | |||||||
| </p> | </p> | ||||||
|  |  | ||||||
|  |  | ||||||
| <h2>IRC</h2> | <h1>IRC</h1> | ||||||
|  |  | ||||||
| <p>join <a href="irc://chat.freenode.net#dri-devel">#dri-devel channel</a> | <p>join <a href="irc://chat.freenode.net#dri-devel">#dri-devel channel</a> | ||||||
| on <a href="https://webchat.freenode.net/">irc.freenode.net</a> | on <a href="https://webchat.freenode.net/">irc.freenode.net</a> | ||||||
| </p> | </p> | ||||||
|  |  | ||||||
|  |  | ||||||
| <h2>OpenGL Forums</h2> | <h1>OpenGL Forums</h1> | ||||||
|  |  | ||||||
| <p> | <p> | ||||||
| Here are some other OpenGL-related forums you might find useful: | Here are some other OpenGL-related forums you might find useful: | ||||||
|   | |||||||
| @@ -2,27 +2,25 @@ | |||||||
| <html lang="en"> | <html lang="en"> | ||||||
| <head> | <head> | ||||||
|   <meta http-equiv="content-type" content="text/html; charset=utf-8"> |   <meta http-equiv="content-type" content="text/html; charset=utf-8"> | ||||||
|   <title>Gallium LLVMpipe Driver</title> |   <title>llvmpipe</title> | ||||||
|   <link rel="stylesheet" type="text/css" href="mesa.css"> |   <link rel="stylesheet" type="text/css" href="mesa.css"> | ||||||
| </head> | </head> | ||||||
| <body> | <body> | ||||||
|  |  | ||||||
| <div class="header"> | <div class="header"> | ||||||
|   The Mesa 3D Graphics Library |   <h1>The Mesa 3D Graphics Library</h1> | ||||||
| </div> | </div> | ||||||
|  |  | ||||||
| <iframe src="contents.html"></iframe> | <iframe src="contents.html"></iframe> | ||||||
| <div class="content"> | <div class="content"> | ||||||
|  |  | ||||||
| <h1>Gallium LLVMpipe Driver</h1> | <h1>Introduction</h1> | ||||||
|  |  | ||||||
| <h2>Introduction</h2> |  | ||||||
|  |  | ||||||
| <p> | <p> | ||||||
| The Gallium llvmpipe driver is a software rasterizer that uses LLVM to | The Gallium llvmpipe driver is a software rasterizer that uses LLVM to | ||||||
| do runtime code generation. | do runtime code generation. | ||||||
| Shaders, point/line/triangle rasterization and vertex processing are | Shaders, point/line/triangle rasterization and vertex processing are | ||||||
| implemented with LLVM IR which is translated to x86, x86-64, or ppc64le machine | implemented with LLVM IR which is translated to x86 or x86-64 machine | ||||||
| code. | code. | ||||||
| Also, the driver is multithreaded to take advantage of multiple CPU cores | Also, the driver is multithreaded to take advantage of multiple CPU cores | ||||||
| (up to 8 at this time). | (up to 8 at this time). | ||||||
| @@ -30,40 +28,28 @@ It's the fastest software rasterizer for Mesa. | |||||||
| </p> | </p> | ||||||
|  |  | ||||||
|  |  | ||||||
| <h2>Requirements</h2> | <h1>Requirements</h1> | ||||||
|  |  | ||||||
| <ul> | <ul> | ||||||
| <li> | <li> | ||||||
|  |    <p>An x86 or amd64 processor; 64-bit mode recommended.</p> | ||||||
|    <p> |    <p> | ||||||
|    For x86 or amd64 processors, 64-bit mode is recommended. |  | ||||||
|    Support for SSE2 is strongly encouraged.  Support for SSE3 and SSE4.1 will |    Support for SSE2 is strongly encouraged.  Support for SSE3 and SSE4.1 will | ||||||
|    yield the most efficient code.  The fewer features the CPU has the more |    yield the most efficient code.  The fewer features the CPU has the more | ||||||
|    likely it is that you will run into underperforming, buggy, or incomplete code. |    likely is that you run into underperforming, buggy, or incomplete code. | ||||||
|    </p> |    </p> | ||||||
|    <p> |    <p> | ||||||
|    For ppc64le processors, use of the Altivec feature (the Vector |    See /proc/cpuinfo to know what your CPU supports. | ||||||
|    Facility) is recommended if supported; use of the VSX feature (the |  | ||||||
|    Vector-Scalar Facility) is recommended if supported AND Mesa is |  | ||||||
|    built with LLVM version 4.0 or later. |  | ||||||
|    </p> |  | ||||||
|    <p> |  | ||||||
|    See <code>/proc/cpuinfo</code> to know what your CPU supports. |  | ||||||
|    </p> |    </p> | ||||||
| </li> | </li> | ||||||
| <li> | <li> | ||||||
|    <p>Unless otherwise stated, LLVM version 3.4 is recommended; 3.3 or later is required.</p> |    <p>LLVM: version 3.4 recommended; 3.3 or later required.</p> | ||||||
|    <p> |    <p> | ||||||
|    For Linux, on a recent Debian based distribution do: |    For Linux, on a recent Debian based distribution do: | ||||||
|    </p> |    </p> | ||||||
| <pre> | <pre> | ||||||
|      aptitude install llvm-dev |      aptitude install llvm-dev | ||||||
| </pre> | </pre> | ||||||
|    <p> |  | ||||||
|    If you want development snapshot builds of LLVM for Debian and derived |  | ||||||
|    distributions like Ubuntu, you can use the APT repository at <a |  | ||||||
|    href="https://apt.llvm.org/" title="Debian Development packages for LLVM" |  | ||||||
|    >apt.llvm.org</a>, which are maintained by Debian's LLVM maintainer. |  | ||||||
|    </p> |  | ||||||
|    <p> |    <p> | ||||||
|    For a RPM-based distribution do: |    For a RPM-based distribution do: | ||||||
|    </p> |    </p> | ||||||
| @@ -73,9 +59,8 @@ It's the fastest software rasterizer for Mesa. | |||||||
|  |  | ||||||
|    <p> |    <p> | ||||||
|    For Windows you will need to build LLVM from source with MSVC or MINGW |    For Windows you will need to build LLVM from source with MSVC or MINGW | ||||||
|    (either natively or through cross compilers) and CMake, and set the |    (either natively or through cross compilers) and CMake, and set the LLVM | ||||||
|    <code>LLVM</code> environment variable to the directory you installed |    environment variable to the directory you installed it to. | ||||||
|    it to. |  | ||||||
|  |  | ||||||
|    LLVM will be statically linked, so when building on MSVC it needs to be |    LLVM will be statically linked, so when building on MSVC it needs to be | ||||||
|    built with a matching CRT as Mesa, and you'll need to pass |    built with a matching CRT as Mesa, and you'll need to pass | ||||||
| @@ -104,8 +89,8 @@ It's the fastest software rasterizer for Mesa. | |||||||
|    </table> |    </table> | ||||||
|  |  | ||||||
|    <p> |    <p> | ||||||
|    You can build only the x86 target by passing |    You can build only the x86 target by passing -DLLVM_TARGETS_TO_BUILD=X86 | ||||||
|    <code>-DLLVM_TARGETS_TO_BUILD=X86</code> to cmake. |    to cmake. | ||||||
|    </p> |    </p> | ||||||
| </li> | </li> | ||||||
|  |  | ||||||
| @@ -115,7 +100,7 @@ It's the fastest software rasterizer for Mesa. | |||||||
| </ul> | </ul> | ||||||
|  |  | ||||||
|  |  | ||||||
| <h2>Building</h2> | <h1>Building</h1> | ||||||
|  |  | ||||||
| To build everything on Linux invoke scons as: | To build everything on Linux invoke scons as: | ||||||
|  |  | ||||||
| @@ -123,12 +108,10 @@ To build everything on Linux invoke scons as: | |||||||
|   scons build=debug libgl-xlib |   scons build=debug libgl-xlib | ||||||
| </pre> | </pre> | ||||||
|  |  | ||||||
| Alternatively, you can build it with meson with: | Alternatively, you can build it with GNU make, if you prefer, by invoking it as | ||||||
|  |  | ||||||
| <pre> | <pre> | ||||||
|   mkdir build |   make linux-llvm | ||||||
|   cd build |  | ||||||
|   meson -D glx=gallium-xlib -D gallium-drivers=swrast |  | ||||||
|   ninja |  | ||||||
| </pre> | </pre> | ||||||
|  |  | ||||||
| but the rest of these instructions assume that scons is used. | but the rest of these instructions assume that scons is used. | ||||||
| @@ -140,12 +123,11 @@ For Windows the procedure is similar except the target: | |||||||
| </pre> | </pre> | ||||||
|  |  | ||||||
|  |  | ||||||
| <h2>Using</h2> | <h1>Using</h1> | ||||||
|  |  | ||||||
| <h3>Linux</h3> | <h2>Linux</h2> | ||||||
|  |  | ||||||
| <p>On Linux, building will create a drop-in alternative for | <p>On Linux, building will create a drop-in alternative for libGL.so into</p> | ||||||
| <code>libGL.so</code> into</p> |  | ||||||
|  |  | ||||||
| <pre> | <pre> | ||||||
|   build/foo/gallium/targets/libgl-xlib/libGL.so |   build/foo/gallium/targets/libgl-xlib/libGL.so | ||||||
| @@ -155,15 +137,13 @@ or | |||||||
|   lib/gallium/libGL.so |   lib/gallium/libGL.so | ||||||
| </pre> | </pre> | ||||||
|  |  | ||||||
| <p>To use it set the <code>LD_LIBRARY_PATH</code> environment variable | <p>To use it set the LD_LIBRARY_PATH environment variable accordingly.</p> | ||||||
| accordingly.</p> |  | ||||||
|  |  | ||||||
| <p>For performance evaluation pass <code>build=release</code> to scons, | <p>For performance evaluation pass build=release to scons, and use the corresponding | ||||||
| and use the corresponding lib directory without the <code>-debug</code> | lib directory without the "-debug" suffix.</p> | ||||||
| suffix.</p> |  | ||||||
|  |  | ||||||
|  |  | ||||||
| <h3>Windows</h3> | <h2>Windows</h2> | ||||||
|  |  | ||||||
| <p> | <p> | ||||||
| On Windows, building will create | On Windows, building will create | ||||||
| @@ -181,9 +161,7 @@ any OpenGL drivers): | |||||||
| </p> | </p> | ||||||
|  |  | ||||||
| <ul> | <ul> | ||||||
|   <li><p>copy <code>build/windows-x86-debug/gallium/targets/libgl-gdi/opengl32.dll</code> |   <li><p>copy build/windows-x86-debug/gallium/targets/libgl-gdi/opengl32.dll to C:\Windows\SysWOW64\mesadrv.dll</p></li> | ||||||
|          to <code>C:\Windows\SysWOW64\mesadrv.dll</code> |  | ||||||
|   </p></li> |  | ||||||
|   <li><p>load this registry settings:</p> |   <li><p>load this registry settings:</p> | ||||||
|   <pre>REGEDIT4 |   <pre>REGEDIT4 | ||||||
|  |  | ||||||
| @@ -200,7 +178,7 @@ any OpenGL drivers): | |||||||
| </ul> | </ul> | ||||||
|  |  | ||||||
|  |  | ||||||
| <h2>Profiling</h2> | <h1>Profiling</h1> | ||||||
|  |  | ||||||
| <p> | <p> | ||||||
| To profile llvmpipe you should build as | To profile llvmpipe you should build as | ||||||
| @@ -214,7 +192,7 @@ This will ensure that frame pointers are used both in C and JIT functions, and | |||||||
| that no tail call optimizations are done by gcc. | that no tail call optimizations are done by gcc. | ||||||
| </p> | </p> | ||||||
|  |  | ||||||
| <h3>Linux perf integration</h3> | <h2>Linux perf integration</h2> | ||||||
|  |  | ||||||
| <p> | <p> | ||||||
| On Linux, it is possible to have symbol resolution of JIT code with <a href="https://perf.wiki.kernel.org/">Linux perf</a>: | On Linux, it is possible to have symbol resolution of JIT code with <a href="https://perf.wiki.kernel.org/">Linux perf</a>: | ||||||
| @@ -226,64 +204,61 @@ On Linux, it is possible to have symbol resolution of JIT code with <a href="htt | |||||||
| </pre> | </pre> | ||||||
|  |  | ||||||
| <p> | <p> | ||||||
| When run inside Linux perf, llvmpipe will create a | When run inside Linux perf, llvmpipe will create a /tmp/perf-XXXXX.map file with | ||||||
| <code>/tmp/perf-XXXXX.map</code> file with symbol address table.  It also | symbol address table.  It also dumps assembly code to /tmp/perf-XXXXX.map.asm, | ||||||
| dumps assembly code to <code>/tmp/perf-XXXXX.map.asm</code>, which can be | which can be used by the bin/perf-annotate-jit.py script to produce disassembly of | ||||||
| used by the <code>bin/perf-annotate-jit.py</code> script to produce | the generated code annotated with the samples. | ||||||
| disassembly of the generated code annotated with the samples. |  | ||||||
| </p> | </p> | ||||||
|  |  | ||||||
| <p>You can obtain a call graph via | <p>You can obtain a call graph via | ||||||
| <a href="https://github.com/jrfonseca/gprof2dot#linux-perf">Gprof2Dot</a>.</p> | <a href="https://github.com/jrfonseca/gprof2dot#linux-perf">Gprof2Dot</a>.</p> | ||||||
|  |  | ||||||
|  |  | ||||||
| <h2>Unit testing</h2> | <h1>Unit testing</h1> | ||||||
|  |  | ||||||
| <p> | <p> | ||||||
| Building will also create several unit tests in | Building will also create several unit tests in | ||||||
| <code>build/linux-???-debug/gallium/drivers/llvmpipe</code>: | build/linux-???-debug/gallium/drivers/llvmpipe: | ||||||
| </p> | </p> | ||||||
|  |  | ||||||
| <ul> | <ul> | ||||||
| <li> <code>lp_test_blend</code>: blending | <li> lp_test_blend: blending | ||||||
| <li> <code>lp_test_conv</code>: SIMD vector conversion | <li> lp_test_conv: SIMD vector conversion | ||||||
| <li> <code>lp_test_format</code>: pixel unpacking/packing | <li> lp_test_format: pixel unpacking/packing | ||||||
| </ul> | </ul> | ||||||
|  |  | ||||||
| <p> | <p> | ||||||
| Some of these tests can output results and benchmarks to a tab-separated file | Some of this tests can output results and benchmarks to a tab-separated-file | ||||||
| for later analysis, e.g.: | for posterior analysis, e.g.: | ||||||
| </p> | </p> | ||||||
| <pre> | <pre> | ||||||
|   build/linux-x86_64-debug/gallium/drivers/llvmpipe/lp_test_blend -o blend.tsv |   build/linux-x86_64-debug/gallium/drivers/llvmpipe/lp_test_blend -o blend.tsv | ||||||
| </pre> | </pre> | ||||||
|  |  | ||||||
|  |  | ||||||
| <h2>Development Notes</h2> | <h1>Development Notes</h1> | ||||||
|  |  | ||||||
| <ul> | <ul> | ||||||
| <li> | <li> | ||||||
|   When looking at this code for the first time, start in lp_state_fs.c, and |   When looking to this code by the first time start in lp_state_fs.c, and  | ||||||
|   then skim through the <code>lp_bld_*</code> functions called there, and |   then skim through the lp_bld_* functions called in there, and the comments | ||||||
|   the comments at the top of the <code>lp_bld_*.c</code> functions. |   at the top of the lp_bld_*.c functions. | ||||||
| </li> | </li> | ||||||
| <li> | <li> | ||||||
|   The driver-independent parts of the LLVM / Gallium code are found in |   The driver-independent parts of the LLVM / Gallium code are found in | ||||||
|   <code>src/gallium/auxiliary/gallivm/</code>.  The filenames and function |   src/gallium/auxiliary/gallivm/.  The filenames and function prefixes | ||||||
|   prefixes need to be renamed from <code>lp_bld_</code> to something else |   need to be renamed from "lp_bld_" to something else though. | ||||||
|   though. |  | ||||||
| </li> | </li> | ||||||
| <li> | <li> | ||||||
|   We use LLVM-C bindings for now. They are not documented, but follow the C++ |   We use LLVM-C bindings for now. They are not documented, but follow the C++ | ||||||
|   interfaces very closely, and appear to be complete enough for code |   interfaces very closely, and appear to be complete enough for code | ||||||
|   generation. See  |   generation. See  | ||||||
|   <a href="https://npcontemplation.blogspot.com/2008/06/secret-of-llvm-c-bindings.html"> |   <a href="https://npcontemplation.blogspot.com/2008/06/secret-of-llvm-c-bindings.html"> | ||||||
|   this stand-alone example</a>.  See the <code>llvm-c/Core.h</code> file for |   this stand-alone example</a>.  See the llvm-c/Core.h file for reference. | ||||||
|   reference. |  | ||||||
| </li> | </li> | ||||||
| </ul> | </ul> | ||||||
|  |  | ||||||
| <h2 id="recommended_reading">Recommended Reading</h2> | <h1 id="recommended_reading">Recommended Reading</h1> | ||||||
|  |  | ||||||
| <ul> | <ul> | ||||||
|   <li> |   <li> | ||||||
| @@ -319,7 +294,7 @@ for later analysis, e.g.: | |||||||
|       <li><a href="http://www.drdobbs.com/optimizing-pixomatic-for-modern-x86-proc/184405807">Optimizing Pixomatic For Modern x86 Processors</a></li> |       <li><a href="http://www.drdobbs.com/optimizing-pixomatic-for-modern-x86-proc/184405807">Optimizing Pixomatic For Modern x86 Processors</a></li> | ||||||
|       <li><a href="http://www.intel.com/content/www/us/en/architecture-and-technology/64-ia-32-architectures-optimization-manual.html">Intel 64 and IA-32 Architectures Optimization Reference Manual</a></li> |       <li><a href="http://www.intel.com/content/www/us/en/architecture-and-technology/64-ia-32-architectures-optimization-manual.html">Intel 64 and IA-32 Architectures Optimization Reference Manual</a></li> | ||||||
|       <li><a href="http://www.agner.org/optimize/">Software optimization resources</a></li> |       <li><a href="http://www.agner.org/optimize/">Software optimization resources</a></li> | ||||||
|       <li><a href="https://software.intel.com/en-us/articles/intel-intrinsics-guide">Intel Intrinsics Guide</a></li> |       <li><a href="https://software.intel.com/en-us/articles/intel-intrinsics-guide">Intel Intrinsics Guide</a><li> | ||||||
|     </ul> |     </ul> | ||||||
|   </li> |   </li> | ||||||
|   <li> |   <li> | ||||||
|   | |||||||
							
								
								
									
										37
									
								
								docs/mangling.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										37
									
								
								docs/mangling.html
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,37 @@ | |||||||
|  | <!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>GL Function Name Mangling</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>GL Function Name Mangling</h1> | ||||||
|  |  | ||||||
|  | <p> | ||||||
|  | If you want to use both Mesa and another OpenGL library in the same | ||||||
|  | application at the same time you may find it useful to compile Mesa with | ||||||
|  | <i>name mangling</i>. | ||||||
|  | This results in all the Mesa functions being prefixed with | ||||||
|  | <b>mgl</b> instead of <b>gl</b>. | ||||||
|  | </p> | ||||||
|  |  | ||||||
|  | <p> | ||||||
|  | This option is supported only with the autoconf build. To use it add | ||||||
|  | --enable-mangling to your configure line. | ||||||
|  | </p> | ||||||
|  | <pre> | ||||||
|  | <code>./configure --enable-mangling ...</code> | ||||||
|  | </pre> | ||||||
|  |  | ||||||
|  | </div> | ||||||
|  | </body> | ||||||
|  | </html> | ||||||
| @@ -3,48 +3,61 @@ body { | |||||||
| 	background-color: #ffffff; | 	background-color: #ffffff; | ||||||
| 	font: 14px 'Lucida Grande', Geneva, Arial, Verdana, sans-serif; | 	font: 14px 'Lucida Grande', Geneva, Arial, Verdana, sans-serif; | ||||||
| 	color: black; | 	color: black; | ||||||
|  |  	link: #111188; | ||||||
| } | } | ||||||
|  |  | ||||||
| h1 { | h1 { | ||||||
| 	font-size: 24px; | 	font: 24px 'Lucida Grande', Geneva, Arial, Verdana, sans-serif; | ||||||
| 	font-weight: bold; | 	font-weight: bold; | ||||||
|  | 	color: black; | ||||||
| } | } | ||||||
|  |  | ||||||
| h2 { | h2 { | ||||||
| 	font-size: 18px; | 	font: 18px 'Lucida Grande', Geneva, Arial, Verdana, sans-serif, bold; | ||||||
| 	font-weight: bold; | 	font-weight: bold; | ||||||
|  | 	color: black; | ||||||
| } | } | ||||||
|  |  | ||||||
| code { | code { | ||||||
| 	font-family: monospace; | 	font-family: monospace; | ||||||
| 	font-size: 10pt; | 	font-size: 10pt; | ||||||
|  | 	color: black; | ||||||
| } | } | ||||||
|  |  | ||||||
|  |  | ||||||
| pre { | pre { | ||||||
|  | 	/*font-family: monospace;*/ | ||||||
| 	font-size: 10pt; | 	font-size: 10pt; | ||||||
| 	background-color: #eee; | 	/*color: black;*/ | ||||||
| 	margin-left: 2em; |  | ||||||
| 	padding: .5em; |  | ||||||
| } | } | ||||||
|  |  | ||||||
| iframe { | iframe { | ||||||
| 	width: 19em; |   width: 19em; | ||||||
| 	height: 80em; |   height: 80em; | ||||||
| 	border: none; |   border: none; | ||||||
| 	float: left; |   float: left; | ||||||
| } | } | ||||||
|  |  | ||||||
| .content { | .content { | ||||||
| 	position: absolute; |   position: absolute; | ||||||
| 	left: 20em; |   left: 20em; | ||||||
| 	right: 10px; |   right: 10px; | ||||||
| 	overflow: hidden; |   overflow: hidden | ||||||
| } | } | ||||||
|  |  | ||||||
| .header { | .header { | ||||||
| 	background: url('gears.png') 15px no-repeat, black url('gears.png') right no-repeat; |   background: black url('gears.png') 15px no-repeat; | ||||||
| 	padding: 1.75rem; |   margin:0; | ||||||
| 	text-align: center; |   padding: 5px; | ||||||
| 	color: white; |   clear:both; | ||||||
| 	font: x-large sans-serif; | } | ||||||
|  |  | ||||||
|  | .header h1 { | ||||||
|  |   background: url('gears.png') right no-repeat; | ||||||
|  |   color: white; | ||||||
|  |   font: x-large sans-serif; | ||||||
|  |   text-align: center; | ||||||
|  |   height: 50px; | ||||||
|  |   margin: 0; | ||||||
|  |   padding-top: 30px; | ||||||
| } | } | ||||||
|   | |||||||
							
								
								
									
										557
									
								
								docs/meson.html
									
									
									
									
									
								
							
							
						
						
									
										557
									
								
								docs/meson.html
									
									
									
									
									
								
							| @@ -1,557 +0,0 @@ | |||||||
| <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> |  | ||||||
| <html lang="en"> |  | ||||||
| <head> |  | ||||||
|   <meta http-equiv="content-type" content="text/html; charset=utf-8"> |  | ||||||
|   <title>Compilation and Installation Using Meson</title> |  | ||||||
|   <link rel="stylesheet" type="text/css" href="mesa.css"> |  | ||||||
| </head> |  | ||||||
| <body> |  | ||||||
|  |  | ||||||
| <div class="header"> |  | ||||||
|   The Mesa 3D Graphics Library |  | ||||||
| </div> |  | ||||||
|  |  | ||||||
| <iframe src="contents.html"></iframe> |  | ||||||
| <div class="content"> |  | ||||||
|  |  | ||||||
| <h1>Compilation and Installation Using Meson</h1> |  | ||||||
|  |  | ||||||
| <ul> |  | ||||||
|   <li><a href="#intro">Introduction</a></li> |  | ||||||
|   <li><a href="#basic">Basic Usage</a></li> |  | ||||||
|   <li><a href="#advanced">Advanced Usage</a></li> |  | ||||||
|   <li><a href="#cross-compilation">Cross-compilation and 32-bit builds</a></li> |  | ||||||
| </ul> |  | ||||||
|  |  | ||||||
| <h2 id="intro">1. Introduction</h2> |  | ||||||
|  |  | ||||||
| <p>For general information about Meson see the |  | ||||||
| <a href="https://mesonbuild.com/">Meson website</a>.</p> |  | ||||||
|  |  | ||||||
| <p><strong>Mesa's Meson build system is generally considered stable and ready |  | ||||||
| for production.</strong></p> |  | ||||||
|  |  | ||||||
| <p><strong>Mesa requires Meson >= 0.46.0 to build.</strong> |  | ||||||
|  |  | ||||||
| <p>The Meson build of Mesa is tested on Linux, macOS, Windows, Cygwin, Haiku, FreeBSD, |  | ||||||
| DragonflyBSD, NetBSD, and should work on OpenBSD.</p> |  | ||||||
|  |  | ||||||
| <h4>Unix-like OSes</h4> |  | ||||||
|  |  | ||||||
| <p>If Meson is not already installed on your system, you can typically |  | ||||||
| install it with your package installer.  For example:</p> |  | ||||||
| <pre> |  | ||||||
| sudo apt-get install meson   # Ubuntu |  | ||||||
| </pre> |  | ||||||
| or |  | ||||||
| <pre> |  | ||||||
| sudo dnf install meson   # Fedora |  | ||||||
| </pre> |  | ||||||
|  |  | ||||||
| Some older versions of meson do not check that they are too old and will error |  | ||||||
| out in odd ways. |  | ||||||
| </p> |  | ||||||
|  |  | ||||||
| <p>You'll also need <a href="https://ninja-build.org/">Ninja</a>. |  | ||||||
| If it's not already installed, use apt-get or dnf to install |  | ||||||
| the <em>ninja-build</em> package. |  | ||||||
| </p> |  | ||||||
|  |  | ||||||
| <h4>Windows</h4> |  | ||||||
|  |  | ||||||
| <p> |  | ||||||
| You will need to install python3 and meson as a module using pip. This is |  | ||||||
| because we use python for generating code, and rely on external modules |  | ||||||
| (mako). You also need pkg-config (a hard dependency of meson), flex, and bison. |  | ||||||
|  |  | ||||||
| The easiest way to install everything you need is with <a |  | ||||||
| href="https://chocolatey.org/">chocolatey</a>. |  | ||||||
| </p> |  | ||||||
| <pre> |  | ||||||
|   choco install python3 winflexbison pkgconfiglite |  | ||||||
| </pre> |  | ||||||
| <p>You can even use chocolatey to install mingw and ninja (ninja can be used with MSVC as well)</p> |  | ||||||
| <pre> |  | ||||||
|   choco install ninja mingw |  | ||||||
| </pre> |  | ||||||
| <p>Then install meson using pip</p> |  | ||||||
| <pre> |  | ||||||
|   py -3 -m pip install meson mako |  | ||||||
| </pre> |  | ||||||
|  |  | ||||||
| You may need to add the python3 scripts directory to your path for meson. |  | ||||||
|  |  | ||||||
| <h2 id="basic">2. Basic Usage</h2> |  | ||||||
|  |  | ||||||
| <p> |  | ||||||
| The meson program is used to configure the source directory and generates |  | ||||||
| either a ninja build file or Visual Studio® build files. The latter must |  | ||||||
| be enabled via the <code>--backend</code> switch, as ninja is the default |  | ||||||
| backend on all operating systems. |  | ||||||
| </p> |  | ||||||
|  |  | ||||||
| <p> |  | ||||||
| Meson only supports out-of-tree builds, and must be passed a |  | ||||||
| directory to put built and generated sources into. We'll call that directory |  | ||||||
| "build" here. |  | ||||||
| It's recommended to create a |  | ||||||
| <a href="https://mesonbuild.com/Using-multiple-build-directories.html"> |  | ||||||
| separate build directory</a> for each configuration you might want to use. |  | ||||||
| </p> |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
| <p>Basic configuration is done with:</p> |  | ||||||
|  |  | ||||||
| <pre> |  | ||||||
| meson build/ |  | ||||||
| </pre> |  | ||||||
|  |  | ||||||
| <p> |  | ||||||
| This will create the build directory. |  | ||||||
| If any dependencies are missing, you can install them, or try to remove |  | ||||||
| the dependency with a Meson configuration option (see below). |  | ||||||
| </p> |  | ||||||
|  |  | ||||||
| <p> |  | ||||||
| To review the options which Meson chose, run: |  | ||||||
| </p> |  | ||||||
| <pre> |  | ||||||
| meson configure build/ |  | ||||||
| </pre> |  | ||||||
|  |  | ||||||
| <p> |  | ||||||
| Meson does not currently support listing configuration options before |  | ||||||
| running "meson build/" but this feature is being discussed upstream. |  | ||||||
| For now, we have a <code>bin/meson-options.py</code> script that prints |  | ||||||
| the options for you. |  | ||||||
| If that script doesn't work for some reason, you can always look in the |  | ||||||
| <a href="https://gitlab.freedesktop.org/mesa/mesa/blob/master/meson_options.txt"> |  | ||||||
| meson_options.txt</a> file at the root of the project. |  | ||||||
| </p> |  | ||||||
|  |  | ||||||
| <p> |  | ||||||
| With additional arguments <code>meson configure</code> can be used to change |  | ||||||
| options for a previously configured build directory. |  | ||||||
| All options passed to this command are in the form |  | ||||||
| <code>-D "option"="value"</code>. |  | ||||||
| For example: |  | ||||||
| </p> |  | ||||||
|  |  | ||||||
| <pre> |  | ||||||
| meson configure build/ -Dprefix=/tmp/install -Dglx=true |  | ||||||
| </pre> |  | ||||||
|  |  | ||||||
| <p> |  | ||||||
| Note that options taking lists (such as <code>platforms</code>) are |  | ||||||
| <a href="https://mesonbuild.com/Build-options.html#using-build-options">a bit |  | ||||||
| more complicated</a>, but the simplest form compatible with Mesa options |  | ||||||
| is to use a comma to separate values (<code>-D platforms=drm,wayland</code>) |  | ||||||
| and brackets to represent an empty list (<code>-D platforms=[]</code>). |  | ||||||
| </p> |  | ||||||
|  |  | ||||||
| <p> |  | ||||||
| Once you've run the initial <code>meson</code> command successfully you can use |  | ||||||
| your configured backend to build the project in your build directory: |  | ||||||
| </p> |  | ||||||
|  |  | ||||||
| <pre> |  | ||||||
| ninja -C build/ |  | ||||||
| </pre> |  | ||||||
|  |  | ||||||
| <p> |  | ||||||
| The next step is to install the Mesa libraries, drivers, etc. |  | ||||||
| This also finishes up some final steps of the build process (such as creating |  | ||||||
| symbolic links for drivers).  To install: |  | ||||||
| </p> |  | ||||||
|  |  | ||||||
| <pre> |  | ||||||
| ninja -C build/ install |  | ||||||
| </pre> |  | ||||||
|  |  | ||||||
| <p> |  | ||||||
| Note: autotools automatically updated translation files (used by the DRI |  | ||||||
| configuration tool) as part of the build process, |  | ||||||
| Meson does not do this.  Instead, you will need do this: |  | ||||||
| </p> |  | ||||||
| <pre> |  | ||||||
| ninja -C build/ xmlpool-pot xmlpool-update-po xmlpool-gmo |  | ||||||
| </pre> |  | ||||||
|  |  | ||||||
| <h4>Windows specific instructions</h4> |  | ||||||
|  |  | ||||||
| <p> |  | ||||||
| On windows you have a couple of choices for compilers. If you installed mingw |  | ||||||
| with chocolatey and want to use ninja you should be able to open any shell |  | ||||||
| and follow the instructions above. If you want to you MSVC, clang-cl, or ICL |  | ||||||
| (the Intel Compiler), read on. |  | ||||||
| </p> |  | ||||||
| <p> |  | ||||||
| Both ICL and MSVC come with shell environments, the easiest way to use meson |  | ||||||
| with these it to open a shell. For clang-cl you will need to open an MSVC |  | ||||||
| shell, and then override the compilers, either using a <a |  | ||||||
| href="https://mesonbuild.com/Native-environments.html">native file</a>, or |  | ||||||
| with the CC and CXX environment variables. |  | ||||||
| </p> |  | ||||||
| <p> |  | ||||||
| All of these compilers are tested and work with ninja, but if you want visual |  | ||||||
| studio integration or you just like msbuild, passing |  | ||||||
| <code>--backend=vs</code> to meson will generate a visual studio solution. If |  | ||||||
| you want to use ICL or clang-cl with the vsbackend you will need meson 0.52.0 |  | ||||||
| or greater. Older versions always use the microsoft compiler. |  | ||||||
| </p> |  | ||||||
|  |  | ||||||
| <h2 id="advanced">3. Advanced Usage</h2> |  | ||||||
|  |  | ||||||
| <dl> |  | ||||||
|  |  | ||||||
| <dt>Installation Location</dt> |  | ||||||
| <dd> |  | ||||||
| <p> |  | ||||||
| Meson default to installing libGL.so in your system's main lib/ directory |  | ||||||
| and DRI drivers to a dri/ subdirectory. |  | ||||||
| </p> |  | ||||||
| <p> |  | ||||||
| Developers will often want to install Mesa to a testing directory rather |  | ||||||
| than the system library directory. |  | ||||||
| This can be done with the --prefix option.  For example: |  | ||||||
| </p> |  | ||||||
| <pre> |  | ||||||
| meson --prefix="${PWD}/build/install" build/ |  | ||||||
| </pre> |  | ||||||
| <p> |  | ||||||
| will put the final libraries and drivers into the build/install/ |  | ||||||
| directory. |  | ||||||
| Then you can set LD_LIBRARY_PATH and LIBGL_DRIVERS_PATH to that location |  | ||||||
| to run/test the driver. |  | ||||||
| </p> |  | ||||||
| <p> |  | ||||||
| Meson also honors <code>DESTDIR</code> for installs. |  | ||||||
| </p> |  | ||||||
| </dd> |  | ||||||
|  |  | ||||||
| <dt>Compiler Options</dt> |  | ||||||
| <dd> |  | ||||||
| <p>Meson supports the common CFLAGS, CXXFLAGS, etc. environment |  | ||||||
| variables but their use is discouraged because of the many caveats |  | ||||||
| in using them. |  | ||||||
| </p> |  | ||||||
| <p>Instead, it is recomended to use <code>-D${lang}_args</code> and |  | ||||||
| <code>-D${lang}_link_args</code>. Among the benefits of these options |  | ||||||
| is that they are guaranteed to persist across rebuilds and reconfigurations. |  | ||||||
| </p> |  | ||||||
| <p> |  | ||||||
| This example sets -fmax-errors for compiling C sources and -DMAGIC=123 |  | ||||||
| for C++ sources: |  | ||||||
| </p> |  | ||||||
| <pre> |  | ||||||
| meson builddir/ -Dc_args=-fmax-errors=10 -Dcpp_args=-DMAGIC=123 |  | ||||||
| </pre> |  | ||||||
| </dd> |  | ||||||
|  |  | ||||||
|  |  | ||||||
| <dt>Compiler Specification</dt> |  | ||||||
| <dd> |  | ||||||
| <p> |  | ||||||
| Meson supports the standard CC and CXX environment variables for |  | ||||||
| changing the default compiler.  Note that Meson does not allow |  | ||||||
| changing the compilers in a configured builddir so you will need |  | ||||||
| to create a new build dir for a different compiler. |  | ||||||
| </p> |  | ||||||
| <p> |  | ||||||
| This is an example of specifying the clang compilers and cleaning |  | ||||||
| the build directory before reconfiguring with an extra C option: |  | ||||||
| </p> |  | ||||||
| <pre> |  | ||||||
| CC=clang CXX=clang++ meson build-clang |  | ||||||
| ninja -C build-clang |  | ||||||
| ninja -C build-clang clean |  | ||||||
| meson configure build -Dc_args="-Wno-typedef-redefinition" |  | ||||||
| ninja -C build-clang |  | ||||||
| </pre> |  | ||||||
| <p> |  | ||||||
| The default compilers depends on your operating system. Meson supports most of |  | ||||||
| the popular compilers, a complete list is available |  | ||||||
| <a href="https://mesonbuild.com/Reference-tables.html#compiler-ids">here</a>. |  | ||||||
| </p> |  | ||||||
| </dd> |  | ||||||
|  |  | ||||||
| <dt>LLVM</dt> |  | ||||||
| <dd><p>Meson includes upstream logic to wrap llvm-config using its standard |  | ||||||
| dependency interface. |  | ||||||
| </p></dd> |  | ||||||
|  |  | ||||||
| <dd><p> |  | ||||||
| As of meson 0.51.0 meson can use cmake to find llvm (the cmake finder |  | ||||||
| was added in meson 0.49.0, but LLVM cannot be found until 0.51) Due to the |  | ||||||
| way LLVM implements its cmake finder it will only find static libraries, it |  | ||||||
| will never find libllvm.so. |  | ||||||
|  |  | ||||||
| There is also a <pre>-Dcmake_module_path</pre> option in this meson version, |  | ||||||
| which points to the root of an alternative installation (the prefix). For |  | ||||||
| example: |  | ||||||
| <pre> |  | ||||||
|         meson builddir -Dcmake_module_path=/home/user/mycmake/prefix |  | ||||||
| </pre> |  | ||||||
| </p></dd> |  | ||||||
|  |  | ||||||
| <dd><p> |  | ||||||
| As of meson 0.49.0 meson also has the concept of a |  | ||||||
| <a href="https://mesonbuild.com/Native-environments.html">"native file"</a>, |  | ||||||
| these files provide information about the native build environment (as opposed |  | ||||||
| to a cross build environment). They are ini formatted and can override where to |  | ||||||
| find llvm-config: |  | ||||||
| </p> |  | ||||||
|  |  | ||||||
| custom-llvm.ini |  | ||||||
| <pre> |  | ||||||
|     [binaries] |  | ||||||
|     llvm-config = '/usr/local/bin/llvm/llvm-config' |  | ||||||
| </pre> |  | ||||||
|  |  | ||||||
| Then configure meson: |  | ||||||
|  |  | ||||||
| <pre> |  | ||||||
|     meson builddir/ --native-file custom-llvm.ini |  | ||||||
| </pre> |  | ||||||
| </dd> |  | ||||||
|  |  | ||||||
| <dd><p> |  | ||||||
| Meson < 0.49 doesn't support native files, so to specify a custom |  | ||||||
| <code>llvm-config</code> you need to modify your <code>$PATH</code> (or |  | ||||||
| <code>%PATH%</code> on windows), which will be searched for |  | ||||||
| <code>llvm-config</code>, <code>llvm-config<i>$version</i></code>, |  | ||||||
| and <code>llvm-config-<i>$version</i></code>: |  | ||||||
| </p> |  | ||||||
| <pre> |  | ||||||
| PATH=/path/to/folder/with/llvm-config:$PATH meson build |  | ||||||
| </pre> |  | ||||||
| </dd> |  | ||||||
|  |  | ||||||
| <dd><p> |  | ||||||
| For selecting llvm-config for cross compiling a |  | ||||||
| <a href="https://mesonbuild.com/Cross-compilation.html#defining-the-environment">"cross file"</a> |  | ||||||
| should be used. It uses the same format as the native file above: |  | ||||||
| </p> |  | ||||||
|  |  | ||||||
| <p>cross-llvm.ini</p> |  | ||||||
| <pre> |  | ||||||
|     [binaries] |  | ||||||
|     ... |  | ||||||
|     llvm-config = '/usr/lib/llvm-config-32' |  | ||||||
|     cmake = '/usr/bin/cmake-for-my-arch' |  | ||||||
| </pre> |  | ||||||
|  |  | ||||||
| <p>Obviously, only cmake or llvm-config is required.</p> |  | ||||||
|  |  | ||||||
| <p>Then configure meson:</p> |  | ||||||
| <pre> |  | ||||||
|     meson builddir/ --cross-file cross-llvm.ini |  | ||||||
| </pre> |  | ||||||
|  |  | ||||||
| See the <a href="#cross-compilation">Cross Compilation</a> section for more information. |  | ||||||
| </dd> |  | ||||||
|  |  | ||||||
| <dd><p>On windows (and in other cases), using llvm-config or cmake may be |  | ||||||
| either undesirable or impossible. Meson's solution for this is a |  | ||||||
| <a href="https://mesonbuild.com/Wrap-dependency-system-manual.html">wrap</a>, in |  | ||||||
| this case a "binary wrap". Follow the steps below:</p> |  | ||||||
| <ul> |  | ||||||
|     <li>Install the binaries and headers into the <code>$mesa_src/subprojects/llvm</code></li> |  | ||||||
|     <li>Add a meson build.build file to that directory (more on that later)</li> |  | ||||||
| </ul> |  | ||||||
|  |  | ||||||
| <p>The wrap file must define the following:</p> |  | ||||||
| <ul> |  | ||||||
|     <li><code>dep_llvm</code>: a <code>declare_dependency()</code> object with include_directories, dependencies, and version set)</li> |  | ||||||
| </ul> |  | ||||||
|  |  | ||||||
| <p>It may also define:</p> |  | ||||||
| <ul> |  | ||||||
|     <li><code>irbuilder_h</code>: a <code>files()</code> object pointing to llvm/IR/IRBuilder.h (this is requred for SWR)</li> |  | ||||||
|     <li><code>has_rtti</code>: a <code>bool</code> that declares whether LLVM was built with RTTI. Defaults to true</li> |  | ||||||
| </ul> |  | ||||||
|  |  | ||||||
| <p>such a meson.build file might look like:</p> |  | ||||||
| <pre> |  | ||||||
| project('llvm', ['cpp']) |  | ||||||
|  |  | ||||||
| cpp = meson.get_compiler('cpp') |  | ||||||
|  |  | ||||||
| _deps = [] |  | ||||||
| _search = join_paths(meson.current_source_dir(), 'lib') |  | ||||||
| foreach d : ['libLLVMCodeGen', 'libLLVMScalarOpts', 'libLLVMAnalysis', |  | ||||||
|              'libLLVMTransformUtils', 'libLLVMCore', 'libLLVMX86CodeGen', |  | ||||||
|              'libLLVMSelectionDAG', 'libLLVMipo', 'libLLVMAsmPrinter', |  | ||||||
|              'libLLVMInstCombine', 'libLLVMInstrumentation', 'libLLVMMC', |  | ||||||
|              'libLLVMGlobalISel', 'libLLVMObjectYAML', 'libLLVMDebugInfoPDB', |  | ||||||
|              'libLLVMVectorize', 'libLLVMPasses', 'libLLVMSupport', |  | ||||||
|              'libLLVMLTO', 'libLLVMObject', 'libLLVMDebugInfoCodeView', |  | ||||||
|              'libLLVMDebugInfoDWARF', 'libLLVMOrcJIT', 'libLLVMProfileData', |  | ||||||
|              'libLLVMObjCARCOpts', 'libLLVMBitReader', 'libLLVMCoroutines', |  | ||||||
|              'libLLVMBitWriter', 'libLLVMRuntimeDyld', 'libLLVMMIRParser', |  | ||||||
|              'libLLVMX86Desc', 'libLLVMAsmParser', 'libLLVMTableGen', |  | ||||||
|              'libLLVMFuzzMutate', 'libLLVMLinker', 'libLLVMMCParser', |  | ||||||
|              'libLLVMExecutionEngine', 'libLLVMCoverage', 'libLLVMInterpreter', |  | ||||||
|              'libLLVMTarget', 'libLLVMX86AsmParser', 'libLLVMSymbolize', |  | ||||||
|              'libLLVMDebugInfoMSF', 'libLLVMMCJIT', 'libLLVMXRay', |  | ||||||
|              'libLLVMX86AsmPrinter', 'libLLVMX86Disassembler', |  | ||||||
|              'libLLVMMCDisassembler', 'libLLVMOption', 'libLLVMIRReader', |  | ||||||
|              'libLLVMLibDriver', 'libLLVMDlltoolDriver', 'libLLVMDemangle', |  | ||||||
|              'libLLVMBinaryFormat', 'libLLVMLineEditor', |  | ||||||
|              'libLLVMWindowsManifest', 'libLLVMX86Info', 'libLLVMX86Utils'] |  | ||||||
|   _deps += cpp.find_library(d, dirs : _search) |  | ||||||
| endforeach |  | ||||||
|  |  | ||||||
| dep_llvm = declare_dependency( |  | ||||||
|   include_directories : include_directories('include'), |  | ||||||
|   dependencies : _deps, |  | ||||||
|   version : '6.0.0', |  | ||||||
| ) |  | ||||||
|  |  | ||||||
| has_rtti = false |  | ||||||
| irbuilder_h = files('include/llvm/IR/IRBuilder.h') |  | ||||||
| </pre> |  | ||||||
|  |  | ||||||
| <p>It is very important that version is defined and is accurate, if it is not, |  | ||||||
| workarounds for the wrong version of LLVM might be used resulting in build |  | ||||||
| failures.</p> |  | ||||||
|  |  | ||||||
| </dd> |  | ||||||
| </dl> |  | ||||||
|  |  | ||||||
| <dt><code>PKG_CONFIG_PATH</code></dt> |  | ||||||
| <dd><p>The |  | ||||||
| <code>pkg-config</code> utility is a hard requirement for configuring and |  | ||||||
| building Mesa on Unix-like systems. It is used to search for external libraries |  | ||||||
| on the system. This environment variable is used to control the search path for |  | ||||||
| <code>pkg-config</code>. For instance, setting |  | ||||||
| <code>PKG_CONFIG_PATH=/usr/X11R6/lib/pkgconfig</code> will search for package |  | ||||||
| metadata in <code>/usr/X11R6</code> before the standard directories.</p> |  | ||||||
| </dd> |  | ||||||
| </dl> |  | ||||||
|  |  | ||||||
| <p> |  | ||||||
| One of the oddities of meson is that some options are different when passed to |  | ||||||
| the <code>meson</code> than to <code>meson configure</code>. These options are |  | ||||||
| passed as --option=foo to <code>meson</code>, but -Doption=foo to <code>meson |  | ||||||
| configure</code>. Mesa defined options are always passed as -Doption=foo. |  | ||||||
| </p> |  | ||||||
|  |  | ||||||
| <p>For those coming from autotools be aware of the following:</p> |  | ||||||
|  |  | ||||||
| <dl> |  | ||||||
| <dt><code>--buildtype/-Dbuildtype</code></dt> |  | ||||||
| <dd><p>This option will set the compiler debug/optimisation levels to aid |  | ||||||
| debugging the Mesa libraries.</p> |  | ||||||
|  |  | ||||||
| <p>Note that in meson this defaults to <code>debugoptimized</code>, and |  | ||||||
| not setting it to <code>release</code> will yield non-optimal |  | ||||||
| performance and binary size. Not using <code>debug</code> may interfere |  | ||||||
| with debugging as some code and validation will be optimized away. |  | ||||||
| </p> |  | ||||||
|  |  | ||||||
| <p> For those wishing to pass their own optimization flags, use the <code>plain</code> |  | ||||||
| buildtype, which causes meson to inject no additional compiler arguments, only |  | ||||||
| those in the C/CXXFLAGS and those that mesa itself defines.</p> |  | ||||||
| </dd> |  | ||||||
|  |  | ||||||
| <dt><code>-Db_ndebug</code></dt> |  | ||||||
| <dd><p>This option controls assertions in meson projects. When set to <code>false</code> |  | ||||||
| (the default) assertions are enabled, when set to true they are disabled. This |  | ||||||
| is unrelated to the <code>buildtype</code>; setting the latter to |  | ||||||
| <code>release</code> will not turn off assertions. |  | ||||||
| </p> |  | ||||||
| </dd> |  | ||||||
| </dl> |  | ||||||
|  |  | ||||||
| <h2 id="cross-compilation">4. Cross-compilation and 32-bit builds</h2> |  | ||||||
|  |  | ||||||
| <p><a href="https://mesonbuild.com/Cross-compilation.html">Meson supports |  | ||||||
| cross-compilation</a> by specifying a number of binary paths and |  | ||||||
| settings in a file and passing this file to <code>meson</code> or |  | ||||||
| <code>meson configure</code> with the <code>--cross-file</code> |  | ||||||
| parameter.</p> |  | ||||||
|  |  | ||||||
| <p>This file can live at any location, but you can use the bare filename |  | ||||||
| (without the folder path) if you put it in $XDG_DATA_HOME/meson/cross or |  | ||||||
| ~/.local/share/meson/cross</p> |  | ||||||
|  |  | ||||||
| <p>Below are a few example of cross files, but keep in mind that you |  | ||||||
| will likely have to alter them for your system.</p> |  | ||||||
|  |  | ||||||
| <p> |  | ||||||
| Those running on ArchLinux can use the AUR-maintained packages for some |  | ||||||
| of those, as they'll have the right values for your system: |  | ||||||
| </p> |  | ||||||
| <ul> |  | ||||||
|   <li><a href="https://aur.archlinux.org/packages/meson-cross-x86-linux-gnu">meson-cross-x86-linux-gnu</a></li> |  | ||||||
|   <li><a href="https://aur.archlinux.org/packages/meson-cross-aarch64-linux-gnu">meson-cross-aarch64-linux-gnu</a></li> |  | ||||||
| </ul> |  | ||||||
|  |  | ||||||
| <p> |  | ||||||
| 32-bit build on x86 linux: |  | ||||||
| </p> |  | ||||||
| <pre> |  | ||||||
| [binaries] |  | ||||||
| c = '/usr/bin/gcc' |  | ||||||
| cpp = '/usr/bin/g++' |  | ||||||
| ar = '/usr/bin/gcc-ar' |  | ||||||
| strip = '/usr/bin/strip' |  | ||||||
| pkgconfig = '/usr/bin/pkg-config-32' |  | ||||||
| llvm-config = '/usr/bin/llvm-config32' |  | ||||||
|  |  | ||||||
| [properties] |  | ||||||
| c_args = ['-m32'] |  | ||||||
| c_link_args = ['-m32'] |  | ||||||
| cpp_args = ['-m32'] |  | ||||||
| cpp_link_args = ['-m32'] |  | ||||||
|  |  | ||||||
| [host_machine] |  | ||||||
| system = 'linux' |  | ||||||
| cpu_family = 'x86' |  | ||||||
| cpu = 'i686' |  | ||||||
| endian = 'little' |  | ||||||
| </pre> |  | ||||||
|  |  | ||||||
| <p> |  | ||||||
| 64-bit build on ARM linux: |  | ||||||
| </p> |  | ||||||
| <pre> |  | ||||||
| [binaries] |  | ||||||
| c = '/usr/bin/aarch64-linux-gnu-gcc' |  | ||||||
| cpp = '/usr/bin/aarch64-linux-gnu-g++' |  | ||||||
| ar = '/usr/bin/aarch64-linux-gnu-gcc-ar' |  | ||||||
| strip = '/usr/bin/aarch64-linux-gnu-strip' |  | ||||||
| pkgconfig = '/usr/bin/aarch64-linux-gnu-pkg-config' |  | ||||||
| exe_wrapper = '/usr/bin/qemu-aarch64-static' |  | ||||||
|  |  | ||||||
| [host_machine] |  | ||||||
| system = 'linux' |  | ||||||
| cpu_family = 'aarch64' |  | ||||||
| cpu = 'aarch64' |  | ||||||
| endian = 'little' |  | ||||||
| </pre> |  | ||||||
|  |  | ||||||
| <p> |  | ||||||
| 64-bit build on x86 windows: |  | ||||||
| </p> |  | ||||||
| <pre> |  | ||||||
| [binaries] |  | ||||||
| c = '/usr/bin/x86_64-w64-mingw32-gcc' |  | ||||||
| cpp = '/usr/bin/x86_64-w64-mingw32-g++' |  | ||||||
| ar = '/usr/bin/x86_64-w64-mingw32-ar' |  | ||||||
| strip = '/usr/bin/x86_64-w64-mingw32-strip' |  | ||||||
| pkgconfig = '/usr/bin/x86_64-w64-mingw32-pkg-config' |  | ||||||
| exe_wrapper = 'wine' |  | ||||||
|  |  | ||||||
| [host_machine] |  | ||||||
| system = 'windows' |  | ||||||
| cpu_family = 'x86_64' |  | ||||||
| cpu = 'i686' |  | ||||||
| endian = 'little' |  | ||||||
| </pre> |  | ||||||
|  |  | ||||||
| </div> |  | ||||||
| </body> |  | ||||||
| </html> |  | ||||||
| @@ -8,7 +8,7 @@ | |||||||
| <body> | <body> | ||||||
|  |  | ||||||
| <div class="header"> | <div class="header"> | ||||||
|   The Mesa 3D Graphics Library |   <h1>The Mesa 3D Graphics Library</h1> | ||||||
| </div> | </div> | ||||||
|  |  | ||||||
| <iframe src="contents.html"></iframe> | <iframe src="contents.html"></iframe> | ||||||
| @@ -25,7 +25,7 @@ https://www.khronos.org/opengles/</a>.</p> | |||||||
|  |  | ||||||
| <h2>Build the Libraries</h2> | <h2>Build the Libraries</h2> | ||||||
| <ol> | <ol> | ||||||
| <li>Run <code>meson configure</code> with <code>-D gles1=true -D gles2=true</code> and enable the Gallium driver for your hardware.</li> | <li>Run <code>configure</code> with <code>--enable-gles1 --enable-gles2</code> and enable the Gallium driver for your hardware.</li> | ||||||
| <li>Build and install Mesa as usual.</li> | <li>Build and install Mesa as usual.</li> | ||||||
| </ol> | </ol> | ||||||
|  |  | ||||||
| @@ -33,7 +33,7 @@ Alternatively, if XCB-DRI2 is installed on the system, one can use | |||||||
| <code>egl_dri2</code> EGL driver with OpenGL|ES-enabled DRI drivers | <code>egl_dri2</code> EGL driver with OpenGL|ES-enabled DRI drivers | ||||||
|  |  | ||||||
| <ol> | <ol> | ||||||
| <li>Run <code>meson configure</code> with <code>-D gles1=true -D gles2=true</code>.</li> | <li>Run <code>configure</code> with <code>--enable-gles1 --enable-gles2</code>.</li> | ||||||
| <li>Build and install Mesa as usual.</li> | <li>Build and install Mesa as usual.</li> | ||||||
| </ol> | </ol> | ||||||
|  |  | ||||||
|   | |||||||
| @@ -8,7 +8,7 @@ | |||||||
| <body> | <body> | ||||||
|  |  | ||||||
| <div class="header"> | <div class="header"> | ||||||
|   The Mesa 3D Graphics Library |   <h1>The Mesa 3D Graphics Library</h1> | ||||||
| </div> | </div> | ||||||
|  |  | ||||||
| <iframe src="contents.html"></iframe> | <iframe src="contents.html"></iframe> | ||||||
| @@ -45,14 +45,14 @@ The OSMesa interface may be used with any of three software renderers: | |||||||
| There are several examples of OSMesa in the mesa/demos repository. | There are several examples of OSMesa in the mesa/demos repository. | ||||||
| </p> | </p> | ||||||
|  |  | ||||||
| <h2>Building OSMesa</h2> | <h1>Building OSMesa</h1> | ||||||
|  |  | ||||||
| <p> | <p> | ||||||
| Configure and build Mesa with something like: | Configure and build Mesa with something like: | ||||||
|  |  | ||||||
| <pre> | <pre> | ||||||
| meson builddir -Dosmesa=gallium -Dgallium-drivers=swrast -Ddri-drivers=[] -Dvulkan-drivers=[] -Dprefix=$PWD/builddir/install | configure --enable-osmesa --disable-driglx-direct --disable-dri --with-gallium-drivers=swrast | ||||||
| ninja -C builddir install | make | ||||||
| </pre> | </pre> | ||||||
|  |  | ||||||
| <p> | <p> | ||||||
| @@ -63,12 +63,13 @@ Make sure you have LLVM installed first if you want to use the llvmpipe driver. | |||||||
| When the build is complete you should find: | When the build is complete you should find: | ||||||
| </p> | </p> | ||||||
| <pre> | <pre> | ||||||
| $PWD/builddir/install/lib/libOSMesa.so  (swrast-based OSMesa) | lib/libOSMesa.so  (swrast-based OSMesa) | ||||||
| $PWD/builddir/install/lib/gallium/libOSMsea.so  (gallium-based OSMesa) | lib/gallium/libOSMsea.so  (gallium-based OSMesa) | ||||||
| </pre> | </pre> | ||||||
|  |  | ||||||
| <p> | <p> | ||||||
| Set your LD_LIBRARY_PATH to point to $PWD/builddir/install to use the libraries | Set your LD_LIBRARY_PATH to point to one directory or the other to select | ||||||
|  | the library you want to use. | ||||||
| </p> | </p> | ||||||
|  |  | ||||||
| <p> | <p> | ||||||
|   | |||||||
							
								
								
									
										31
									
								
								docs/patents.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										31
									
								
								docs/patents.txt
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,31 @@ | |||||||
|  | ARB_texture_float: | ||||||
|  |  | ||||||
|  |     Silicon Graphics, Inc. owns US Patent #6,650,327, issued November 18, | ||||||
|  |     2003 [1]. | ||||||
|  |  | ||||||
|  |     SGI believes this patent contains necessary IP for graphics systems | ||||||
|  |     implementing floating point rasterization and floating point | ||||||
|  |     framebuffer capabilities described in ARB_texture_float extension, and | ||||||
|  |     will discuss licensing on RAND terms, on an individual basis with | ||||||
|  |     companies wishing to use this IP in the context of conformant OpenGL | ||||||
|  |     implementations [2]. | ||||||
|  |  | ||||||
|  |     The source code to implement ARB_texture_float extension is included | ||||||
|  |     and can be toggled on at compile time, for those who purchased a | ||||||
|  |     license from SGI, or are in a country where the patent does not apply, | ||||||
|  |     etc. | ||||||
|  |  | ||||||
|  |     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. | ||||||
|  |  | ||||||
|  |     You should contact a lawyer or SGI's legal department if you want to | ||||||
|  |     enable this extension. | ||||||
|  |  | ||||||
|  |  | ||||||
|  | [1] https://www.google.com/patents/about?id=mIIOAAAAEBAJ&dq=6650327 | ||||||
|  | [2] https://www.opengl.org/registry/specs/ARB/texture_float.txt | ||||||
Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user