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}]
 | 
			
		||||
indent_style = space
 | 
			
		||||
indent_size = 3
 | 
			
		||||
max_line_length = 78
 | 
			
		||||
 | 
			
		||||
[{Makefile*,*.mk}]
 | 
			
		||||
indent_style = tab
 | 
			
		||||
@@ -35,6 +34,6 @@ indent_size = 2
 | 
			
		||||
[*.patch]
 | 
			
		||||
trim_trailing_whitespace = false
 | 
			
		||||
 | 
			
		||||
[{meson.build,meson_options.txt}]
 | 
			
		||||
[meson.build,meson_options.txt]
 | 
			
		||||
indent_style = space
 | 
			
		||||
indent_size = 2
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										4
									
								
								.gitattributes
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								.gitattributes
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,4 @@
 | 
			
		||||
*.dsp -crlf
 | 
			
		||||
*.dsw -crlf
 | 
			
		||||
*.sln -crlf
 | 
			
		||||
*.vcproj -crlf
 | 
			
		||||
							
								
								
									
										52
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										52
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							@@ -1,4 +1,54 @@
 | 
			
		||||
*.a
 | 
			
		||||
*.dll
 | 
			
		||||
*.exe
 | 
			
		||||
*.ilk
 | 
			
		||||
*.la
 | 
			
		||||
*.lo
 | 
			
		||||
*.log
 | 
			
		||||
*.o
 | 
			
		||||
*.obj
 | 
			
		||||
*.orig
 | 
			
		||||
*.os
 | 
			
		||||
*.pc
 | 
			
		||||
*.pdb
 | 
			
		||||
*.pyc
 | 
			
		||||
*.pyo
 | 
			
		||||
*.out
 | 
			
		||||
*.rej
 | 
			
		||||
*.so
 | 
			
		||||
*.so.*
 | 
			
		||||
*.sw[a-z]
 | 
			
		||||
*.tar
 | 
			
		||||
*.tar.bz2
 | 
			
		||||
*.tar.gz
 | 
			
		||||
*.tar.xz
 | 
			
		||||
*.trs
 | 
			
		||||
*.zip
 | 
			
		||||
*~
 | 
			
		||||
depend
 | 
			
		||||
depend.bak
 | 
			
		||||
bin/ltmain.sh
 | 
			
		||||
lib
 | 
			
		||||
lib64
 | 
			
		||||
configure
 | 
			
		||||
configure.lineno
 | 
			
		||||
autom4te.cache
 | 
			
		||||
aclocal.m4
 | 
			
		||||
config.log
 | 
			
		||||
config.status
 | 
			
		||||
cscope*
 | 
			
		||||
tags
 | 
			
		||||
.scon*
 | 
			
		||||
config.py
 | 
			
		||||
build
 | 
			
		||||
libtool
 | 
			
		||||
manifest.txt
 | 
			
		||||
.dir-locals.el
 | 
			
		||||
.deps/
 | 
			
		||||
.dirstamp
 | 
			
		||||
.libs/
 | 
			
		||||
Makefile
 | 
			
		||||
Makefile.in
 | 
			
		||||
.install-mesa-links
 | 
			
		||||
.install-gallium-links
 | 
			
		||||
/src/git_sha1.h
 | 
			
		||||
TAGS
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										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>
 | 
			
		||||
 | 
			
		||||
Alexandros Frantzis <alexandros.frantzis@collabora.com> <Alexandros.Frantzis@canonical.com>
 | 
			
		||||
 | 
			
		||||
Alex Corscadden <alexc@vmware.com> <alexc@alexc-dev1.prom.eng.vmware.com>
 | 
			
		||||
Alex Corscadden <alexc@vmware.com> <alexc@alexc-dev1.vmware.com>
 | 
			
		||||
 | 
			
		||||
@@ -52,8 +50,6 @@ Andrew Randrianasulu <randrianasulu@gmail.com> <randrik@mail.ru>
 | 
			
		||||
 | 
			
		||||
Arthur Huillet <arthur.huillet@free.fr> Arthur HUILLET <arthur.huillet@free.fr>
 | 
			
		||||
 | 
			
		||||
Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl> <basni@chromium.org>
 | 
			
		||||
 | 
			
		||||
Benjamin Franzke <benjaminfranzke@googlemail.com> ben <benjaminfranzke@googlemail.com>
 | 
			
		||||
 | 
			
		||||
Ben Skeggs <bskeggs@redhat.com> <darktama@beleth.(none)>
 | 
			
		||||
@@ -146,22 +142,12 @@ Dylan Baker <dylanx.c.baker@intel.com> <baker.dylan.c@gmail.com>
 | 
			
		||||
 | 
			
		||||
Edward O'Callaghan <funfunctor@folklore1984.net> <eocallaghan@alterapraxis.com>
 | 
			
		||||
 | 
			
		||||
Elie Tournier <tournier.elie@gmail.com>
 | 
			
		||||
 | 
			
		||||
Emeric Grange <emeric.grange@gmail.com> Emeric <emeric.grange@gmail.com>
 | 
			
		||||
 | 
			
		||||
Emil Velikov <emil.l.velikov@gmail.com> <emil.velikov@collabora.com>
 | 
			
		||||
Emil Velikov <emil.l.velikov@gmail.com> <emil.veliko@collabora.com>
 | 
			
		||||
Emil Velikov <emil.l.velikov@gmail.com> <emil.velikov@collabora.co.uk>
 | 
			
		||||
Emil Velikov <emil.l.velikov@gmail.com> <emil.veliikov@collabora.com>
 | 
			
		||||
Emil Velikov <emil.l.velikov@gmail.com> <emil.velikov@gmail.com>
 | 
			
		||||
Emil Velikov <emil.l.velikov@gmail.com> <emmil.velikov@collabora.com>
 | 
			
		||||
 | 
			
		||||
Eric Anholt <eric@anholt.net> Eric Anholt <anholt@FreeBSD.org>
 | 
			
		||||
 | 
			
		||||
Eric Engestrom <eric@engestrom.ch> <eric.engestrom@imgtec.com>
 | 
			
		||||
Eric Engestrom <eric@engestrom.ch> <eric.engestrom@intel.com>
 | 
			
		||||
 | 
			
		||||
Eugeni Dodonov <eugeni.dodonov@intel.com> <eugeni@mandriva.com>
 | 
			
		||||
 | 
			
		||||
Fabian Bieler <der.fabe@gmx.net> <fabianbieler@fastmail.fm>
 | 
			
		||||
@@ -169,14 +155,10 @@ Fabian Bieler <der.fabe@gmx.net> <<der.fabe@gmx.net>>
 | 
			
		||||
 | 
			
		||||
Feng, Haitao <haitao.feng@intel.com> Haitao Feng <haitao.feng@intel.com>
 | 
			
		||||
 | 
			
		||||
Frank Binns <frank.binns@imgtec.com> <francisbinns@gmail.com>
 | 
			
		||||
 | 
			
		||||
Frank Henigman <fjhenigman@google.com> <fjhenigman@chromium.org>
 | 
			
		||||
 | 
			
		||||
George Sapountzis <gsapountzis@gmail.com> George Sapountzis <gsap7@yahoo.gr>
 | 
			
		||||
 | 
			
		||||
Gert Wollny <gert.wollny@collabora.com> <gw.fossdev@gmail.com>
 | 
			
		||||
 | 
			
		||||
Gwenole Beauchesne <gwenole.beauchesne@intel.com> <gb.devel@gmail.com>
 | 
			
		||||
 | 
			
		||||
Hamish Marson <hmarson@users.sourceforge.net> hmarson <hmarson>
 | 
			
		||||
@@ -195,8 +177,6 @@ Jakob Bornecrantz <wallbraker@gmail.com> <jakob@aurora.(none)>
 | 
			
		||||
Jakob Bornecrantz <wallbraker@gmail.com> <jakob@aurora.walkyrie.se>
 | 
			
		||||
Jakob Bornecrantz <wallbraker@gmail.com> <jakob@tungstengraphics.com>
 | 
			
		||||
Jakob Bornecrantz <wallbraker@gmail.com> <wallbraker 'at' gmail 'dot' com>
 | 
			
		||||
Jakob Bornecrantz <wallbraker@gmail.com> <jakob.bornecrantz@collabora.com>
 | 
			
		||||
Jakob Bornecrantz <wallbraker@gmail.com> <jakob@collabora.com>
 | 
			
		||||
 | 
			
		||||
Jakub Bogusz <qboosh@pld-linux.org> <gboosh@pld-linux.org>
 | 
			
		||||
 | 
			
		||||
@@ -278,9 +258,6 @@ Kristian Høgsberg <krh@bitplanet.net> <krh@hinata.boston.redhat.com>
 | 
			
		||||
Kristian Høgsberg <krh@bitplanet.net> <krh@sasori.boston.redhat.com>
 | 
			
		||||
Kristian Høgsberg <krh@bitplanet.net> <krh@temari.boston.redhat.com>
 | 
			
		||||
Kristian Høgsberg <krh@bitplanet.net> <kristian.h.kristensen@intel.com>
 | 
			
		||||
Kristian Høgsberg <krh@bitplanet.net> <hoegsberg@chromium.org>
 | 
			
		||||
Kristian Høgsberg <krh@bitplanet.net> <hoegsberg@google.com>
 | 
			
		||||
Kristian Høgsberg <krh@bitplanet.net> <hoegsberg@gmail.com>
 | 
			
		||||
 | 
			
		||||
Krzesimir Nowak <qdlacz@gmail.com> <krzesimir@kinvolk.io>
 | 
			
		||||
 | 
			
		||||
@@ -341,7 +318,6 @@ Michel Dänzer <michel@daenzer.net> <daenzer@vmware.com>
 | 
			
		||||
Michel Dänzer <michel@daenzer.net> <michel@tungstengraphics.com>
 | 
			
		||||
Michel Dänzer <michel@daenzer.net> Michel Daenzer <michel.daenzer@amd.com>
 | 
			
		||||
Michel Dänzer <michel@daenzer.net> Michel Daenzer <daenzer@localhost.(none)>
 | 
			
		||||
Michel Dänzer <michel@daenzer.net> <mdaenzer@redhat.com>
 | 
			
		||||
 | 
			
		||||
Mike Kaplinskiy <mike.kaplinskiy@gmail.com> Mike Kaplinksiy <mike.kaplinskiy@gmail.com>
 | 
			
		||||
Mike Kaplinskiy <mike.kaplinskiy@gmail.com> <mike.kaplinskiy@gmai.com>
 | 
			
		||||
@@ -467,8 +443,6 @@ Tom Fogal <tfogal@alumni.unh.edu> <tfogal@sci.utah.edu>
 | 
			
		||||
Tom Stellard <thomas.stellard@amd.com> <tstellar@gmail.com>
 | 
			
		||||
Tom Stellard <thomas.stellard@amd.com> Thomas Stellard <tom.stellard@amd.com>
 | 
			
		||||
 | 
			
		||||
Tomeu Vizoso <tomeu.vizoso@collabora.com> <tomeu@tomeuvizoso.net>
 | 
			
		||||
 | 
			
		||||
Tormod Volden <debian.tormod@gmail.com> <lists.tormod@gmail.com>
 | 
			
		||||
 | 
			
		||||
Török Edwin <edwin+mesa@etorok.net> Török Edvin <edwintorok@gmail.com>
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										536
									
								
								.travis.yml
									
									
									
									
									
								
							
							
						
						
									
										536
									
								
								.travis.yml
									
									
									
									
									
								
							@@ -1,63 +1,519 @@
 | 
			
		||||
language: c
 | 
			
		||||
 | 
			
		||||
os: osx
 | 
			
		||||
sudo: false
 | 
			
		||||
dist: trusty
 | 
			
		||||
 | 
			
		||||
cache:
 | 
			
		||||
  apt: true
 | 
			
		||||
  ccache: true
 | 
			
		||||
 | 
			
		||||
env:
 | 
			
		||||
  global:
 | 
			
		||||
    - PKG_CONFIG_PATH=""
 | 
			
		||||
    - XORG_RELEASES=http://xorg.freedesktop.org/releases/individual
 | 
			
		||||
    - XCB_RELEASES=http://xcb.freedesktop.org/dist
 | 
			
		||||
    - WAYLAND_RELEASES=http://wayland.freedesktop.org/releases
 | 
			
		||||
    - XORGMACROS_VERSION=util-macros-1.19.0
 | 
			
		||||
    - GLPROTO_VERSION=glproto-1.4.17
 | 
			
		||||
    - DRI2PROTO_VERSION=dri2proto-2.8
 | 
			
		||||
    - LIBPCIACCESS_VERSION=libpciaccess-0.13.4
 | 
			
		||||
    - LIBDRM_VERSION=libdrm-2.4.74
 | 
			
		||||
    - XCBPROTO_VERSION=xcb-proto-1.11
 | 
			
		||||
    - LIBXCB_VERSION=libxcb-1.11
 | 
			
		||||
    - LIBXSHMFENCE_VERSION=libxshmfence-1.2
 | 
			
		||||
    - LIBVDPAU_VERSION=libvdpau-1.1
 | 
			
		||||
    - LIBVA_VERSION=libva-1.6.2
 | 
			
		||||
    - LIBWAYLAND_VERSION=wayland-1.11.1
 | 
			
		||||
    - WAYLAND_PROTOCOLS_VERSION=wayland-protocols-1.8
 | 
			
		||||
    - PKG_CONFIG_PATH=$HOME/prefix/lib/pkgconfig:$HOME/prefix/share/pkgconfig
 | 
			
		||||
    - LD_LIBRARY_PATH="$HOME/prefix/lib:$LD_LIBRARY_PATH"
 | 
			
		||||
    - PATH="$HOME/prefix/bin:$PATH"
 | 
			
		||||
 | 
			
		||||
matrix:
 | 
			
		||||
  include:
 | 
			
		||||
    - env:
 | 
			
		||||
      - BUILD=meson
 | 
			
		||||
        - LABEL="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:
 | 
			
		||||
      - BUILD=scons
 | 
			
		||||
 | 
			
		||||
before_install:
 | 
			
		||||
  - HOMEBREW_NO_AUTO_UPDATE=1 brew install expat gettext
 | 
			
		||||
  - if test "x$BUILD" = xmeson; then
 | 
			
		||||
      HOMEBREW_NO_AUTO_UPDATE=1 brew install ninja;
 | 
			
		||||
    fi
 | 
			
		||||
  - if test "x$BUILD" = xscons; then
 | 
			
		||||
      HOMEBREW_NO_AUTO_UPDATE=1 brew install scons;
 | 
			
		||||
    fi
 | 
			
		||||
 | 
			
		||||
  # Set PATH for homebrew pip3 installs
 | 
			
		||||
  - PATH="$HOME/Library/Python/3.6/bin:${PATH}"
 | 
			
		||||
  # Set PKG_CONFIG_PATH for keg-only expat
 | 
			
		||||
  - PKG_CONFIG_PATH="/usr/local/opt/expat/lib/pkgconfig:${PKG_CONFIG_PATH}"
 | 
			
		||||
  # Set PATH for keg-only gettext
 | 
			
		||||
  - PATH="/usr/local/opt/gettext/bin:${PATH}"
 | 
			
		||||
 | 
			
		||||
  # Install xquartz for prereqs ...
 | 
			
		||||
  - XQUARTZ_VERSION="2.7.11"
 | 
			
		||||
  - wget -nv https://dl.bintray.com/xquartz/downloads/XQuartz-${XQUARTZ_VERSION}.dmg
 | 
			
		||||
  - hdiutil attach XQuartz-${XQUARTZ_VERSION}.dmg
 | 
			
		||||
  - sudo installer -pkg /Volumes/XQuartz-${XQUARTZ_VERSION}/XQuartz.pkg -target /
 | 
			
		||||
  - hdiutil detach /Volumes/XQuartz-${XQUARTZ_VERSION}
 | 
			
		||||
  # ... and set paths
 | 
			
		||||
  - PKG_CONFIG_PATH="/opt/X11/share/pkgconfig:/opt/X11/lib/pkgconfig:${PKG_CONFIG_PATH}"
 | 
			
		||||
        - LABEL="meson loaders/classic DRI"
 | 
			
		||||
        - BUILD=meson
 | 
			
		||||
        - MESON_OPTIONS="-Dvulkan-drivers= -Dgallium-drivers="
 | 
			
		||||
      addons:
 | 
			
		||||
        apt:
 | 
			
		||||
          packages:
 | 
			
		||||
            - xz-utils
 | 
			
		||||
            - x11proto-xf86vidmode-dev
 | 
			
		||||
            - libexpat1-dev
 | 
			
		||||
            - libx11-xcb-dev
 | 
			
		||||
            - libxdamage-dev
 | 
			
		||||
            - libxfixes-dev
 | 
			
		||||
            - python3-pip
 | 
			
		||||
    - env:
 | 
			
		||||
        - LABEL="make loaders/classic DRI"
 | 
			
		||||
        - BUILD=make
 | 
			
		||||
        - MAKEFLAGS="-j4"
 | 
			
		||||
        - MAKE_CHECK_COMMAND="make check"
 | 
			
		||||
        - DRI_LOADERS="--enable-glx --enable-gbm --enable-egl --with-platforms=x11,drm,surfaceless,wayland --enable-osmesa"
 | 
			
		||||
        - DRI_DRIVERS="i915,i965,radeon,r200,swrast,nouveau"
 | 
			
		||||
        - GALLIUM_ST="--enable-dri --disable-opencl --disable-xa --disable-nine --disable-xvmc --disable-vdpau --disable-va --disable-omx-bellagio --disable-gallium-osmesa"
 | 
			
		||||
        - GALLIUM_DRIVERS=""
 | 
			
		||||
        - VULKAN_DRIVERS=""
 | 
			
		||||
        - LIBUNWIND_FLAGS="--disable-libunwind"
 | 
			
		||||
      addons:
 | 
			
		||||
        apt:
 | 
			
		||||
          packages:
 | 
			
		||||
            - xz-utils
 | 
			
		||||
            - x11proto-xf86vidmode-dev
 | 
			
		||||
            - 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:
 | 
			
		||||
  - pip install --user mako
 | 
			
		||||
 | 
			
		||||
  # Install the latest meson from pip, since the version in the ubuntu repos is
 | 
			
		||||
  # often quite old.
 | 
			
		||||
  - if test "x$BUILD" = xmeson; then
 | 
			
		||||
      pip3 install --user meson;
 | 
			
		||||
      pip3 install --user mako;
 | 
			
		||||
    fi
 | 
			
		||||
  - if test "x$BUILD" = xscons; then
 | 
			
		||||
      pip2 install --user mako;
 | 
			
		||||
    fi
 | 
			
		||||
 | 
			
		||||
  # Since libdrm gets updated in configure.ac regularly, try to pick up the
 | 
			
		||||
  # latest version from there.
 | 
			
		||||
  - for line in `grep "^LIBDRM.*_REQUIRED=" configure.ac`; do
 | 
			
		||||
      old_ver=`echo $LIBDRM_VERSION | sed 's/libdrm-//'`;
 | 
			
		||||
      new_ver=`echo $line | sed 's/.*REQUIRED=//'`;
 | 
			
		||||
      if `echo "$old_ver,$new_ver" | tr ',' '\n' | sort -Vc 2> /dev/null`; then
 | 
			
		||||
        export LIBDRM_VERSION="libdrm-$new_ver";
 | 
			
		||||
      fi;
 | 
			
		||||
    done
 | 
			
		||||
 | 
			
		||||
  # Install dependencies where we require specific versions (or where
 | 
			
		||||
  # disallowed by Travis CI's package whitelisting).
 | 
			
		||||
 | 
			
		||||
  - wget $XORG_RELEASES/util/$XORGMACROS_VERSION.tar.bz2
 | 
			
		||||
  - tar -jxvf $XORGMACROS_VERSION.tar.bz2
 | 
			
		||||
  - (cd $XORGMACROS_VERSION && ./configure --prefix=$HOME/prefix && make install)
 | 
			
		||||
 | 
			
		||||
  - wget $XORG_RELEASES/proto/$GLPROTO_VERSION.tar.bz2
 | 
			
		||||
  - tar -jxvf $GLPROTO_VERSION.tar.bz2
 | 
			
		||||
  - (cd $GLPROTO_VERSION && ./configure --prefix=$HOME/prefix && make install)
 | 
			
		||||
 | 
			
		||||
  - wget $XORG_RELEASES/proto/$DRI2PROTO_VERSION.tar.bz2
 | 
			
		||||
  - tar -jxvf $DRI2PROTO_VERSION.tar.bz2
 | 
			
		||||
  - (cd $DRI2PROTO_VERSION && ./configure --prefix=$HOME/prefix && make install)
 | 
			
		||||
 | 
			
		||||
  - wget $XCB_RELEASES/$XCBPROTO_VERSION.tar.bz2
 | 
			
		||||
  - tar -jxvf $XCBPROTO_VERSION.tar.bz2
 | 
			
		||||
  - (cd $XCBPROTO_VERSION && ./configure --prefix=$HOME/prefix && make install)
 | 
			
		||||
 | 
			
		||||
  - wget $XCB_RELEASES/$LIBXCB_VERSION.tar.bz2
 | 
			
		||||
  - tar -jxvf $LIBXCB_VERSION.tar.bz2
 | 
			
		||||
  - (cd $LIBXCB_VERSION && ./configure --prefix=$HOME/prefix && make install)
 | 
			
		||||
 | 
			
		||||
  - wget $XORG_RELEASES/lib/$LIBPCIACCESS_VERSION.tar.bz2
 | 
			
		||||
  - tar -jxvf $LIBPCIACCESS_VERSION.tar.bz2
 | 
			
		||||
  - (cd $LIBPCIACCESS_VERSION && ./configure --prefix=$HOME/prefix && make install)
 | 
			
		||||
 | 
			
		||||
  - wget http://dri.freedesktop.org/libdrm/$LIBDRM_VERSION.tar.bz2
 | 
			
		||||
  - tar -jxvf $LIBDRM_VERSION.tar.bz2
 | 
			
		||||
  - (cd $LIBDRM_VERSION && ./configure --prefix=$HOME/prefix --enable-vc4 --enable-freedreno --enable-etnaviv-experimental-api && make install)
 | 
			
		||||
 | 
			
		||||
  - wget $XORG_RELEASES/lib/$LIBXSHMFENCE_VERSION.tar.bz2
 | 
			
		||||
  - tar -jxvf $LIBXSHMFENCE_VERSION.tar.bz2
 | 
			
		||||
  - (cd $LIBXSHMFENCE_VERSION && ./configure --prefix=$HOME/prefix && make install)
 | 
			
		||||
 | 
			
		||||
  - wget http://people.freedesktop.org/~aplattner/vdpau/$LIBVDPAU_VERSION.tar.bz2
 | 
			
		||||
  - tar -jxvf $LIBVDPAU_VERSION.tar.bz2
 | 
			
		||||
  - (cd $LIBVDPAU_VERSION && ./configure --prefix=$HOME/prefix && make install)
 | 
			
		||||
 | 
			
		||||
  - wget http://www.freedesktop.org/software/vaapi/releases/libva/$LIBVA_VERSION.tar.bz2
 | 
			
		||||
  - tar -jxvf $LIBVA_VERSION.tar.bz2
 | 
			
		||||
  - (cd $LIBVA_VERSION && ./configure --prefix=$HOME/prefix --disable-wayland --disable-dummy-driver && make install)
 | 
			
		||||
 | 
			
		||||
  - wget $WAYLAND_RELEASES/$LIBWAYLAND_VERSION.tar.xz
 | 
			
		||||
  - tar -axvf $LIBWAYLAND_VERSION.tar.xz
 | 
			
		||||
  - (cd $LIBWAYLAND_VERSION && ./configure --prefix=$HOME/prefix --enable-libraries --without-host-scanner --disable-documentation --disable-dtd-validation && make install)
 | 
			
		||||
 | 
			
		||||
  - wget $WAYLAND_RELEASES/$WAYLAND_PROTOCOLS_VERSION.tar.xz
 | 
			
		||||
  - tar -axvf $WAYLAND_PROTOCOLS_VERSION.tar.xz
 | 
			
		||||
  - (cd $WAYLAND_PROTOCOLS_VERSION && ./configure --prefix=$HOME/prefix && make install)
 | 
			
		||||
 | 
			
		||||
  # Meson requires ninja >= 1.6, but trusty has 1.3.x
 | 
			
		||||
  - wget https://github.com/ninja-build/ninja/releases/download/v1.6.0/ninja-linux.zip;
 | 
			
		||||
  - unzip ninja-linux.zip
 | 
			
		||||
  - mv ninja $HOME/prefix/bin/
 | 
			
		||||
 | 
			
		||||
  # Generate the header since one is missing on the Travis instance
 | 
			
		||||
  - mkdir -p linux
 | 
			
		||||
  - printf "%s\n" \
 | 
			
		||||
           "#ifndef _LINUX_MEMFD_H" \
 | 
			
		||||
           "#define _LINUX_MEMFD_H" \
 | 
			
		||||
           "" \
 | 
			
		||||
           "#define __NR_memfd_create 319" \
 | 
			
		||||
           "#define SYS_memfd_create __NR_memfd_create" \
 | 
			
		||||
           "" \
 | 
			
		||||
           "#define MFD_CLOEXEC             0x0001U" \
 | 
			
		||||
           "#define MFD_ALLOW_SEALING       0x0002U" \
 | 
			
		||||
           "" \
 | 
			
		||||
           "#endif /* _LINUX_MEMFD_H */" > linux/memfd.h
 | 
			
		||||
 | 
			
		||||
script:
 | 
			
		||||
  - if test "x$BUILD" = xmeson; then
 | 
			
		||||
      meson _build -Dbuild-tests=true;
 | 
			
		||||
      ninja -C _build || travis_terminate 1;
 | 
			
		||||
      ninja -C _build test || travis_terminate 1;
 | 
			
		||||
      ninja -C _build install || travis_terminate 1;
 | 
			
		||||
  - if test "x$BUILD" = xmake; then
 | 
			
		||||
      test -n "$OVERRIDE_CC" && export CC="$OVERRIDE_CC";
 | 
			
		||||
      test -n "$OVERRIDE_CXX" && export CXX="$OVERRIDE_CXX";
 | 
			
		||||
      test -n "$OVERRIDE_PATH" && export PATH="$OVERRIDE_PATH:$PATH";
 | 
			
		||||
 | 
			
		||||
      export CFLAGS="$CFLAGS -isystem`pwd`";
 | 
			
		||||
 | 
			
		||||
      ./autogen.sh --enable-debug
 | 
			
		||||
        $LIBUNWIND_FLAGS
 | 
			
		||||
        $DRI_LOADERS
 | 
			
		||||
        --with-dri-drivers=$DRI_DRIVERS
 | 
			
		||||
        $GALLIUM_ST
 | 
			
		||||
        --with-gallium-drivers=$GALLIUM_DRIVERS
 | 
			
		||||
        --with-vulkan-drivers=$VULKAN_DRIVERS
 | 
			
		||||
        --disable-llvm-shared-libs
 | 
			
		||||
        &&
 | 
			
		||||
      make && eval $MAKE_CHECK_COMMAND;
 | 
			
		||||
    fi
 | 
			
		||||
 | 
			
		||||
  - if test "x$BUILD" = xscons; then
 | 
			
		||||
      scons force_scons=1 || travis_terminate 1;
 | 
			
		||||
      scons force_scons=1 check || travis_terminate 1;
 | 
			
		||||
      test -n "$OVERRIDE_CC" && export CC="$OVERRIDE_CC";
 | 
			
		||||
      test -n "$OVERRIDE_CXX" && export CXX="$OVERRIDE_CXX";
 | 
			
		||||
      scons $SCONS_TARGET && eval $SCONS_CHECK_COMMAND;
 | 
			
		||||
    fi
 | 
			
		||||
 | 
			
		||||
  - if test "x$BUILD" = xmeson; then
 | 
			
		||||
      export CFLAGS="$CFLAGS -isystem`pwd`";
 | 
			
		||||
      meson _build $MESON_OPTIONS;
 | 
			
		||||
      ninja -C _build;
 | 
			
		||||
    fi
 | 
			
		||||
 
 | 
			
		||||
@@ -31,15 +31,14 @@ LOCAL_C_INCLUDES += \
 | 
			
		||||
 | 
			
		||||
MESA_VERSION := $(shell cat $(MESA_TOP)/VERSION)
 | 
			
		||||
LOCAL_CFLAGS += \
 | 
			
		||||
	-Wno-error \
 | 
			
		||||
	-Werror=incompatible-pointer-types \
 | 
			
		||||
	-Wno-unused-parameter \
 | 
			
		||||
	-Wno-pointer-arith \
 | 
			
		||||
	-Wno-missing-field-initializers \
 | 
			
		||||
	-Wno-initializer-overrides \
 | 
			
		||||
	-Wno-mismatched-tags \
 | 
			
		||||
	-DVERSION=\"$(MESA_VERSION)\" \
 | 
			
		||||
	-DPACKAGE_VERSION=\"$(MESA_VERSION)\" \
 | 
			
		||||
	-DPACKAGE_BUGREPORT=\"https://gitlab.freedesktop.org/mesa/mesa/issues\"
 | 
			
		||||
	-DPACKAGE_BUGREPORT=\"https://bugs.freedesktop.org/enter_bug.cgi?product=Mesa\"
 | 
			
		||||
 | 
			
		||||
# XXX: The following __STDC_*_MACROS defines should not be needed.
 | 
			
		||||
# It's likely due to a bug elsewhere, but let's temporarily add them
 | 
			
		||||
@@ -52,15 +51,11 @@ LOCAL_CFLAGS += \
 | 
			
		||||
	-DHAVE___BUILTIN_EXPECT \
 | 
			
		||||
	-DHAVE___BUILTIN_FFS \
 | 
			
		||||
	-DHAVE___BUILTIN_FFSLL \
 | 
			
		||||
	-DHAVE_DLFCN_H \
 | 
			
		||||
	-DHAVE_FUNC_ATTRIBUTE_FLATTEN \
 | 
			
		||||
	-DHAVE_FUNC_ATTRIBUTE_UNUSED \
 | 
			
		||||
	-DHAVE_FUNC_ATTRIBUTE_FORMAT \
 | 
			
		||||
	-DHAVE_FUNC_ATTRIBUTE_PACKED \
 | 
			
		||||
	-DHAVE_FUNC_ATTRIBUTE_ALIAS \
 | 
			
		||||
	-DHAVE_FUNC_ATTRIBUTE_NORETURN \
 | 
			
		||||
	-DHAVE_FUNC_ATTRIBUTE_RETURNS_NONNULL \
 | 
			
		||||
	-DHAVE_FUNC_ATTRIBUTE_WARN_UNUSED_RESULT \
 | 
			
		||||
	-DHAVE___BUILTIN_CTZ \
 | 
			
		||||
	-DHAVE___BUILTIN_POPCOUNT \
 | 
			
		||||
	-DHAVE___BUILTIN_POPCOUNTLL \
 | 
			
		||||
@@ -70,14 +65,8 @@ LOCAL_CFLAGS += \
 | 
			
		||||
	-DHAVE_PTHREAD=1 \
 | 
			
		||||
	-DHAVE_DLADDR \
 | 
			
		||||
	-DHAVE_DL_ITERATE_PHDR \
 | 
			
		||||
	-DHAVE_LINUX_FUTEX_H \
 | 
			
		||||
	-DHAVE_ENDIAN_H \
 | 
			
		||||
	-DHAVE_ZLIB \
 | 
			
		||||
	-DMAJOR_IN_SYSMACROS \
 | 
			
		||||
	-DVK_USE_PLATFORM_ANDROID_KHR \
 | 
			
		||||
	-fvisibility=hidden \
 | 
			
		||||
	-fno-math-errno \
 | 
			
		||||
	-fno-trapping-math \
 | 
			
		||||
	-Wno-sign-compare
 | 
			
		||||
 | 
			
		||||
LOCAL_CPPFLAGS += \
 | 
			
		||||
@@ -91,18 +80,6 @@ LOCAL_CPPFLAGS += \
 | 
			
		||||
LOCAL_CONLYFLAGS += \
 | 
			
		||||
	-std=c99
 | 
			
		||||
 | 
			
		||||
# c11 timespec_get is part of bionic as well
 | 
			
		||||
# https://android-review.googlesource.com/c/718518
 | 
			
		||||
# This means releases from P and earlier won't need this
 | 
			
		||||
ifeq ($(filter 5 6 7 8 9, $(MESA_ANDROID_MAJOR_VERSION)),)
 | 
			
		||||
LOCAL_CFLAGS += -DHAVE_TIMESPEC_GET
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
# Android's libc began supporting shm in Oreo
 | 
			
		||||
ifeq ($(shell test $(PLATFORM_SDK_VERSION) -ge 26 && echo true),true)
 | 
			
		||||
LOCAL_CFLAGS += -DHAVE_SYS_SHM_H
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
ifeq ($(strip $(MESA_ENABLE_ASM)),true)
 | 
			
		||||
ifeq ($(TARGET_ARCH),x86)
 | 
			
		||||
LOCAL_CFLAGS += \
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										22
									
								
								Android.mk
									
									
									
									
									
								
							
							
						
						
									
										22
									
								
								Android.mk
									
									
									
									
									
								
							@@ -24,7 +24,7 @@
 | 
			
		||||
# BOARD_GPU_DRIVERS should be defined.  The valid values are
 | 
			
		||||
#
 | 
			
		||||
#   classic drivers: i915 i965
 | 
			
		||||
#   gallium drivers: swrast freedreno i915g nouveau kmsro r300g r600g radeonsi vc4 virgl vmwgfx etnaviv iris lima
 | 
			
		||||
#   gallium drivers: swrast freedreno i915g nouveau pl111 r300g r600g radeonsi vc4 virgl vmwgfx etnaviv imx
 | 
			
		||||
#
 | 
			
		||||
# The main target is libGLES_mesa.  For each classic driver enabled, a DRI
 | 
			
		||||
# module will also be built.  DRI modules will be loaded by libGLES_mesa.
 | 
			
		||||
@@ -52,7 +52,7 @@ gallium_drivers := \
 | 
			
		||||
	freedreno.HAVE_GALLIUM_FREEDRENO \
 | 
			
		||||
	i915g.HAVE_GALLIUM_I915 \
 | 
			
		||||
	nouveau.HAVE_GALLIUM_NOUVEAU \
 | 
			
		||||
	kmsro.HAVE_GALLIUM_KMSRO \
 | 
			
		||||
	pl111.HAVE_GALLIUM_PL111 \
 | 
			
		||||
	r300g.HAVE_GALLIUM_R300 \
 | 
			
		||||
	r600g.HAVE_GALLIUM_R600 \
 | 
			
		||||
	radeonsi.HAVE_GALLIUM_RADEONSI \
 | 
			
		||||
@@ -60,8 +60,7 @@ gallium_drivers := \
 | 
			
		||||
	vc4.HAVE_GALLIUM_VC4 \
 | 
			
		||||
	virgl.HAVE_GALLIUM_VIRGL \
 | 
			
		||||
	etnaviv.HAVE_GALLIUM_ETNAVIV \
 | 
			
		||||
	iris.HAVE_GALLIUM_IRIS \
 | 
			
		||||
	lima.HAVE_GALLIUM_LIMA
 | 
			
		||||
	imx.HAVE_GALLIUM_IMX
 | 
			
		||||
 | 
			
		||||
ifeq ($(BOARD_GPU_DRIVERS),all)
 | 
			
		||||
MESA_BUILD_CLASSIC := $(filter HAVE_%, $(subst ., , $(classic_drivers)))
 | 
			
		||||
@@ -95,15 +94,21 @@ MESA_ENABLE_LLVM := true
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
define mesa-build-with-llvm
 | 
			
		||||
  $(if $(filter $(MESA_ANDROID_MAJOR_VERSION), 4 5 6 7), \
 | 
			
		||||
  $(if $(filter $(MESA_ANDROID_MAJOR_VERSION), 4 5), \
 | 
			
		||||
    $(warning Unsupported LLVM version in Android $(MESA_ANDROID_MAJOR_VERSION)),) \
 | 
			
		||||
  $(eval LOCAL_CFLAGS += -DLLVM_AVAILABLE -DMESA_LLVM_VERSION_STRING=\"3.9\") \
 | 
			
		||||
  $(if $(filter 6,$(MESA_ANDROID_MAJOR_VERSION)), \
 | 
			
		||||
    $(eval LOCAL_CFLAGS += -DHAVE_LLVM=0x0307 -DMESA_LLVM_VERSION_PATCH=0)) \
 | 
			
		||||
  $(if $(filter 7,$(MESA_ANDROID_MAJOR_VERSION)), \
 | 
			
		||||
    $(eval LOCAL_CFLAGS += -DHAVE_LLVM=0x0308 -DMESA_LLVM_VERSION_PATCH=0)) \
 | 
			
		||||
  $(if $(filter 8,$(MESA_ANDROID_MAJOR_VERSION)), \
 | 
			
		||||
    $(eval LOCAL_CFLAGS += -DHAVE_LLVM=0x0309 -DMESA_LLVM_VERSION_PATCH=0)) \
 | 
			
		||||
  $(if $(filter P,$(MESA_ANDROID_MAJOR_VERSION)), \
 | 
			
		||||
    $(eval LOCAL_CFLAGS += -DHAVE_LLVM=0x0309 -DMESA_LLVM_VERSION_PATCH=0)) \
 | 
			
		||||
  $(eval LOCAL_SHARED_LIBRARIES += libLLVM)
 | 
			
		||||
endef
 | 
			
		||||
 | 
			
		||||
# add subdirectories
 | 
			
		||||
SUBDIRS := \
 | 
			
		||||
	src/freedreno \
 | 
			
		||||
	src/gbm \
 | 
			
		||||
	src/loader \
 | 
			
		||||
	src/mapi \
 | 
			
		||||
@@ -115,8 +120,7 @@ SUBDIRS := \
 | 
			
		||||
	src/broadcom \
 | 
			
		||||
	src/intel \
 | 
			
		||||
	src/mesa/drivers/dri \
 | 
			
		||||
	src/vulkan \
 | 
			
		||||
	src/panfrost \
 | 
			
		||||
	src/vulkan
 | 
			
		||||
 | 
			
		||||
INC_DIRS := $(call all-named-subdir-makefiles,$(SUBDIRS))
 | 
			
		||||
INC_DIRS += $(call all-named-subdir-makefiles,src/gallium)
 | 
			
		||||
 
 | 
			
		||||
@@ -10,7 +10,7 @@ $(call add-clean-step, rm -rf $(PRODUCT_OUT)/*/STATIC_LIBRARIES/libmesa_*_interm
 | 
			
		||||
$(call add-clean-step, rm -rf $(PRODUCT_OUT)/*/SHARED_LIBRARIES/i9?5_dri_intermediates)
 | 
			
		||||
$(call add-clean-step, rm -rf $(PRODUCT_OUT)/*/SHARED_LIBRARIES/libglapi_intermediates)
 | 
			
		||||
$(call add-clean-step, rm -rf $(PRODUCT_OUT)/*/SHARED_LIBRARIES/libGLES_mesa_intermediates)
 | 
			
		||||
$(call add-clean-step, rm -rf $(HOST_OUT)/*/EXECUTABLES/mesa_*_intermediates)
 | 
			
		||||
$(call add-clean-step, rm -rf $(HOST_OUT)/*/EXECUTABLES/glsl_compiler_intermediates)
 | 
			
		||||
$(call add-clean-step, rm -rf $(HOST_OUT)/*/STATIC_LIBRARIES/libmesa_*_intermediates)
 | 
			
		||||
$(call add-clean-step, rm -rf $(HOST_OUT_release)/*/EXECUTABLES/mesa_*_intermediates)
 | 
			
		||||
$(call add-clean-step, rm -rf $(HOST_OUT_release)/*/EXECUTABLES/glsl_compiler_intermediates)
 | 
			
		||||
$(call add-clean-step, rm -rf $(HOST_OUT_release)/*/STATIC_LIBRARIES/libmesa_*_intermediates)
 | 
			
		||||
$(call add-clean-step, rm -rf $(PRODUCT_OUT)/*/SHARED_LIBRARIES/*_dri_intermediates)
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										82
									
								
								Makefile.am
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										82
									
								
								Makefile.am
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,82 @@
 | 
			
		||||
# Copyright © 2012 Intel Corporation
 | 
			
		||||
#
 | 
			
		||||
# Permission is hereby granted, free of charge, to any person obtaining a
 | 
			
		||||
# copy of this software and associated documentation files (the "Software"),
 | 
			
		||||
# to deal in the Software without restriction, including without limitation
 | 
			
		||||
# the rights to use, copy, modify, merge, publish, distribute, sublicense,
 | 
			
		||||
# and/or sell copies of the Software, and to permit persons to whom the
 | 
			
		||||
# Software is furnished to do so, subject to the following conditions:
 | 
			
		||||
#
 | 
			
		||||
# The above copyright notice and this permission notice (including the next
 | 
			
		||||
# paragraph) shall be included in all copies or substantial portions of the
 | 
			
		||||
# Software.
 | 
			
		||||
#
 | 
			
		||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 | 
			
		||||
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 | 
			
		||||
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
 | 
			
		||||
# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 | 
			
		||||
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
 | 
			
		||||
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
 | 
			
		||||
# IN THE SOFTWARE.
 | 
			
		||||
 | 
			
		||||
SUBDIRS = src
 | 
			
		||||
 | 
			
		||||
AM_DISTCHECK_CONFIGURE_FLAGS = \
 | 
			
		||||
	--enable-dri \
 | 
			
		||||
	--enable-dri3 \
 | 
			
		||||
	--enable-egl \
 | 
			
		||||
	--enable-gallium-tests \
 | 
			
		||||
	--enable-gallium-osmesa \
 | 
			
		||||
	--enable-llvm \
 | 
			
		||||
	--enable-gbm \
 | 
			
		||||
	--enable-gles1 \
 | 
			
		||||
	--enable-gles2 \
 | 
			
		||||
	--enable-glx \
 | 
			
		||||
	--enable-glx-tls \
 | 
			
		||||
	--enable-nine \
 | 
			
		||||
	--enable-opencl \
 | 
			
		||||
	--enable-opengl \
 | 
			
		||||
	--enable-va \
 | 
			
		||||
	--enable-vdpau \
 | 
			
		||||
	--enable-xa \
 | 
			
		||||
	--enable-xvmc \
 | 
			
		||||
	--enable-llvm-shared-libs \
 | 
			
		||||
	--enable-libunwind \
 | 
			
		||||
	--with-platforms=x11,wayland,drm,surfaceless \
 | 
			
		||||
	--with-dri-drivers=i915,i965,nouveau,radeon,r200,swrast \
 | 
			
		||||
	--with-gallium-drivers=i915,nouveau,r300,pl111,r600,radeonsi,freedreno,svga,swrast,vc4,virgl,swr,etnaviv,imx \
 | 
			
		||||
	--with-vulkan-drivers=intel,radeon
 | 
			
		||||
 | 
			
		||||
ACLOCAL_AMFLAGS = -I m4
 | 
			
		||||
 | 
			
		||||
EXTRA_DIST = \
 | 
			
		||||
	autogen.sh \
 | 
			
		||||
	common.py \
 | 
			
		||||
	docs \
 | 
			
		||||
	doxygen \
 | 
			
		||||
	bin/git_sha1_gen.py \
 | 
			
		||||
	scons \
 | 
			
		||||
	SConstruct \
 | 
			
		||||
	build-support/conftest.dyn \
 | 
			
		||||
	build-support/conftest.map
 | 
			
		||||
 | 
			
		||||
noinst_HEADERS = \
 | 
			
		||||
	include/c99_alloca.h \
 | 
			
		||||
	include/c99_compat.h \
 | 
			
		||||
	include/c99_math.h \
 | 
			
		||||
	include/c11 \
 | 
			
		||||
	include/drm-uapi/drm.h \
 | 
			
		||||
	include/drm-uapi/drm_fourcc.h \
 | 
			
		||||
	include/drm-uapi/drm_mode.h \
 | 
			
		||||
	include/drm-uapi/i915_drm.h \
 | 
			
		||||
	include/drm-uapi/vc4_drm.h \
 | 
			
		||||
	include/D3D9 \
 | 
			
		||||
	include/GL/wglext.h \
 | 
			
		||||
	include/HaikuGL \
 | 
			
		||||
	include/no_extern_c.h \
 | 
			
		||||
	include/pci_ids
 | 
			
		||||
 | 
			
		||||
# We list some directories in EXTRA_DIST, but don't actually want to include
 | 
			
		||||
# the .gitignore files in the tarball.
 | 
			
		||||
dist-hook:
 | 
			
		||||
	find $(distdir) -name .gitignore -exec $(RM) {} +
 | 
			
		||||
							
								
								
									
										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:
 | 
			
		||||
 | 
			
		||||
	This file is similar in syntax (or more precisly a subset) of what is
 | 
			
		||||
	used by the MAINTAINERS file in the linux kernel.
 | 
			
		||||
	used by the MAINTAINERS file in the linux kernel.  Some fields do not
 | 
			
		||||
	apply, for example, in all cases, send patches to:
 | 
			
		||||
 | 
			
		||||
		mesa-dev@lists.freedesktop.org
 | 
			
		||||
 | 
			
		||||
	and in all cases the patchwork instance is:
 | 
			
		||||
 | 
			
		||||
		https://patchwork.freedesktop.org/project/mesa/
 | 
			
		||||
 | 
			
		||||
	The purpose is not exactly the same the MAINTAINERS file in the linux
 | 
			
		||||
	kernel, as there are not official/formal maintainers of different
 | 
			
		||||
	subsystems in mesa, but is meant to give an idea of who to CC for
 | 
			
		||||
	various patches for review.
 | 
			
		||||
	various patches for review, and to allow the use of
 | 
			
		||||
	scripts/get_reviewer.pl as git --cc-cmd.
 | 
			
		||||
 | 
			
		||||
Usage:
 | 
			
		||||
 | 
			
		||||
	When sending patches:
 | 
			
		||||
 | 
			
		||||
		git send-email --cc-cmd ./scripts/get_reviewer.pl ...
 | 
			
		||||
 | 
			
		||||
	Or to configure as default:
 | 
			
		||||
 | 
			
		||||
		git config sendemail.cccmd ./scripts/get_reviewer.pl
 | 
			
		||||
 | 
			
		||||
Descriptions of section entries:
 | 
			
		||||
 | 
			
		||||
@@ -17,6 +36,14 @@ Descriptions of section entries:
 | 
			
		||||
	   F:	drivers/net/*	all files in drivers/net, but not below
 | 
			
		||||
	   F:	*/net/*		all files in "any top level directory"/net
 | 
			
		||||
	   One pattern per line.  Multiple F: lines acceptable.
 | 
			
		||||
	N: Files and directories with regex patterns.
 | 
			
		||||
	   N:	[^a-z]tegra	all files whose path contains the word tegra
 | 
			
		||||
	   One pattern per line.  Multiple N: lines acceptable.
 | 
			
		||||
	   scripts/get_maintainer.pl has different behavior for files that
 | 
			
		||||
	   match F: pattern and matches of N: patterns.  By default,
 | 
			
		||||
	   get_maintainer will not look at git log history when an F: pattern
 | 
			
		||||
	   match occurs.  When an N: match occurs, git log history is used
 | 
			
		||||
	   to also notify the people that have git commit signatures.
 | 
			
		||||
 | 
			
		||||
Maintainers List (try to look for most precise areas first)
 | 
			
		||||
 | 
			
		||||
@@ -45,18 +72,7 @@ F: src/loader/
 | 
			
		||||
 | 
			
		||||
EGL
 | 
			
		||||
R: Eric Engestrom <eric@engestrom.ch>
 | 
			
		||||
R: Emil Velikov <emil.l.velikov@gmail.com>
 | 
			
		||||
F: src/egl/
 | 
			
		||||
F: include/EGL/
 | 
			
		||||
 | 
			
		||||
HAIKU
 | 
			
		||||
R: Alexander von Gluck IV <kallisti5@unixzen.com>
 | 
			
		||||
F: include/HaikuGL/
 | 
			
		||||
F: src/egl/drivers/haiku/
 | 
			
		||||
F: src/gallium/state_trackers/hgl/
 | 
			
		||||
F: src/gallium/targets/haiku-softpipe/
 | 
			
		||||
F: src/gallium/winsys/sw/hgl/
 | 
			
		||||
F: src/hgl/
 | 
			
		||||
 | 
			
		||||
GALLIUM LOADER
 | 
			
		||||
R: Emil Velikov <emil.l.velikov@gmail.com>
 | 
			
		||||
@@ -67,6 +83,14 @@ GALLIUM TARGETS
 | 
			
		||||
R: Emil Velikov <emil.l.velikov@gmail.com>
 | 
			
		||||
F: src/gallium/targets/
 | 
			
		||||
 | 
			
		||||
AUTOCONF BUILD
 | 
			
		||||
R: Emil Velikov <emil.l.velikov@gmail.com>
 | 
			
		||||
F: autogen.sh
 | 
			
		||||
F: configure.ac
 | 
			
		||||
F: */Automake.inc
 | 
			
		||||
F: */Makefile.*am
 | 
			
		||||
F: */Makefile.sources
 | 
			
		||||
 | 
			
		||||
SCONS BUILD
 | 
			
		||||
F: scons/
 | 
			
		||||
F: */SConscript*
 | 
			
		||||
@@ -83,7 +107,6 @@ MESON BUILD
 | 
			
		||||
R: Dylan Baker <dylan@pnwbakers.com>
 | 
			
		||||
R: Eric Engestrom <eric@engestrom.ch>
 | 
			
		||||
F: */meson.build
 | 
			
		||||
F: meson.build
 | 
			
		||||
F: meson_options.txt
 | 
			
		||||
 | 
			
		||||
ANDROID EGL SUPPORT
 | 
			
		||||
@@ -103,18 +126,3 @@ F:	src/gallium/drivers/freedreno/
 | 
			
		||||
GLX
 | 
			
		||||
R: Adam Jackson <ajax@redhat.com>
 | 
			
		||||
F: src/glx/
 | 
			
		||||
 | 
			
		||||
VULKAN
 | 
			
		||||
R: Eric Engestrom <eric@engestrom.ch>
 | 
			
		||||
F: src/vulkan/
 | 
			
		||||
F: include/vulkan/
 | 
			
		||||
 | 
			
		||||
VMWARE DRIVER
 | 
			
		||||
R: Brian Paul <brianp@vmware.com>
 | 
			
		||||
R: Charmaine Lee <charmainel@vmware.com>
 | 
			
		||||
F: src/gallium/drivers/svga/
 | 
			
		||||
 | 
			
		||||
VMWARE WINSYS CODE
 | 
			
		||||
R: Thomas Hellstrom <thellstrom@vmware.com>
 | 
			
		||||
R: Deepak Rawat <drawat@vmware.com>
 | 
			
		||||
F: src/gallium/winsys/svga/
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										30
									
								
								SConstruct
									
									
									
									
									
								
							
							
						
						
									
										30
									
								
								SConstruct
									
									
									
									
									
								
							@@ -20,7 +20,6 @@
 | 
			
		||||
# to get the full list of options. See scons manpage for more info.
 | 
			
		||||
#
 | 
			
		||||
 | 
			
		||||
from __future__ import print_function
 | 
			
		||||
import os
 | 
			
		||||
import os.path
 | 
			
		||||
import sys
 | 
			
		||||
@@ -28,13 +27,6 @@ import SCons.Util
 | 
			
		||||
 | 
			
		||||
import common
 | 
			
		||||
 | 
			
		||||
#######################################################################
 | 
			
		||||
# Minimal scons version
 | 
			
		||||
 | 
			
		||||
EnsureSConsVersion(2, 4)
 | 
			
		||||
EnsurePythonVersion(2, 7)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#######################################################################
 | 
			
		||||
# Configuration options
 | 
			
		||||
 | 
			
		||||
@@ -67,26 +59,6 @@ else:
 | 
			
		||||
 | 
			
		||||
Help(opts.GenerateHelpText(env))
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#######################################################################
 | 
			
		||||
# Print a deprecation warning for using scons on non-windows
 | 
			
		||||
 | 
			
		||||
if common.host_platform != 'windows' and env['platform'] != 'windows':
 | 
			
		||||
    if env['force_scons']:
 | 
			
		||||
        print("WARNING: Scons is deprecated for non-windows platforms (including cygwin) "
 | 
			
		||||
              "please use meson instead.", file=sys.stderr)
 | 
			
		||||
    else:
 | 
			
		||||
        print("ERROR: Scons is deprecated for non-windows platforms (including cygwin) "
 | 
			
		||||
              "please use meson instead. If you really need to use scons you "
 | 
			
		||||
              "can add `force_scons=1` to the scons command line.", file=sys.stderr)
 | 
			
		||||
        sys.exit(1)
 | 
			
		||||
else:
 | 
			
		||||
    print("WARNING: Scons support is in the process of being deprecated on "
 | 
			
		||||
          "on windows platforms (including mingw). If you haven't already "
 | 
			
		||||
          "please try using meson for windows builds. Be sure to report any "
 | 
			
		||||
          "issues you run into", file=sys.stderr)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#######################################################################
 | 
			
		||||
# Environment setup
 | 
			
		||||
 | 
			
		||||
@@ -94,7 +66,7 @@ with open("VERSION") as f:
 | 
			
		||||
  mesa_version = f.read().strip()
 | 
			
		||||
env.Append(CPPDEFINES = [
 | 
			
		||||
    ('PACKAGE_VERSION', '\\"%s\\"' % mesa_version),
 | 
			
		||||
    ('PACKAGE_BUGREPORT', '\\"https://gitlab.freedesktop.org/mesa/mesa/issues\\"'),
 | 
			
		||||
    ('PACKAGE_BUGREPORT', '\\"https://bugs.freedesktop.org/enter_bug.cgi?product=Mesa\\"'),
 | 
			
		||||
])
 | 
			
		||||
 | 
			
		||||
# Includes
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										55
									
								
								appveyor.yml
									
									
									
									
									
								
							
							
						
						
									
										55
									
								
								appveyor.yml
									
									
									
									
									
								
							@@ -33,38 +33,47 @@ branches:
 | 
			
		||||
# - https://www.appveyor.com/blog/2014/06/04/shallow-clone-for-git-repositories
 | 
			
		||||
clone_depth: 100
 | 
			
		||||
 | 
			
		||||
# https://www.appveyor.com/docs/build-cache/
 | 
			
		||||
cache:
 | 
			
		||||
- '%LOCALAPPDATA%\pip\Cache -> appveyor.yml'
 | 
			
		||||
- win_flex_bison-2.5.15.zip
 | 
			
		||||
- llvm-5.0.1-msvc2017-mtd.7z
 | 
			
		||||
- subprojects\packagecache -> subprojects\*.wrap
 | 
			
		||||
- win_flex_bison-2.5.9.zip
 | 
			
		||||
- llvm-3.3.1-msvc2013-mtd.7z
 | 
			
		||||
 | 
			
		||||
os: Visual Studio 2017
 | 
			
		||||
 | 
			
		||||
init:
 | 
			
		||||
# Appveyor defaults core.autocrlf to input instead of the default (true), but
 | 
			
		||||
# that can hide problems processing CRLF text on Windows
 | 
			
		||||
- git config --global core.autocrlf true
 | 
			
		||||
os: Visual Studio 2013
 | 
			
		||||
 | 
			
		||||
environment:
 | 
			
		||||
  WINFLEXBISON_VERSION: 2.5.15
 | 
			
		||||
  LLVM_ARCHIVE: llvm-5.0.1-msvc2017-mtd.7z
 | 
			
		||||
  matrix:
 | 
			
		||||
  - compiler: msvc
 | 
			
		||||
    buildsystem: scons
 | 
			
		||||
  - compiler: msvc
 | 
			
		||||
    buildsystem: meson
 | 
			
		||||
    path: C:\Python37-x64;C:\Python37-x64\Scripts;%path%
 | 
			
		||||
  WINFLEXBISON_ARCHIVE: win_flex_bison-2.5.9.zip
 | 
			
		||||
  LLVM_ARCHIVE: llvm-3.3.1-msvc2013-mtd.7z
 | 
			
		||||
 | 
			
		||||
install:
 | 
			
		||||
- cmd: .appveyor\appveyor_msvc.bat install
 | 
			
		||||
# Check pip
 | 
			
		||||
- python --version
 | 
			
		||||
- python -m pip --version
 | 
			
		||||
# Install Mako
 | 
			
		||||
- python -m pip install Mako==1.0.6
 | 
			
		||||
# Install pywin32 extensions, needed by SCons
 | 
			
		||||
- python -m pip install pypiwin32
 | 
			
		||||
# Install python wheels, necessary to install SCons via pip
 | 
			
		||||
- python -m pip install wheel
 | 
			
		||||
# Install SCons
 | 
			
		||||
- python -m pip install scons==2.5.1
 | 
			
		||||
- scons --version
 | 
			
		||||
# Install flex/bison
 | 
			
		||||
- if not exist "%WINFLEXBISON_ARCHIVE%" appveyor DownloadFile "https://downloads.sourceforge.net/project/winflexbison/old_versions/%WINFLEXBISON_ARCHIVE%"
 | 
			
		||||
- 7z x -y -owinflexbison\ "%WINFLEXBISON_ARCHIVE%" > nul
 | 
			
		||||
- set Path=%CD%\winflexbison;%Path%
 | 
			
		||||
- win_flex --version
 | 
			
		||||
- win_bison --version
 | 
			
		||||
# Download and extract LLVM
 | 
			
		||||
- if not exist "%LLVM_ARCHIVE%" appveyor DownloadFile "https://people.freedesktop.org/~jrfonseca/llvm/%LLVM_ARCHIVE%"
 | 
			
		||||
- 7z x -y "%LLVM_ARCHIVE%" > nul
 | 
			
		||||
- mkdir llvm\bin
 | 
			
		||||
- set LLVM=%CD%\llvm
 | 
			
		||||
 | 
			
		||||
build_script:
 | 
			
		||||
- cmd: .appveyor\appveyor_msvc.bat build_script
 | 
			
		||||
- scons -j%NUMBER_OF_PROCESSORS% MSVC_VERSION=12.0 llvm=1
 | 
			
		||||
 | 
			
		||||
after_build:
 | 
			
		||||
- scons -j%NUMBER_OF_PROCESSORS% MSVC_VERSION=12.0 llvm=1 check
 | 
			
		||||
 | 
			
		||||
test_script:
 | 
			
		||||
- cmd: .appveyor\appveyor_msvc.bat test_script
 | 
			
		||||
 | 
			
		||||
# It's possible to setup notification here, as described in
 | 
			
		||||
# http://www.appveyor.com/docs/notifications#appveyor-yml-configuration , but
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										14
									
								
								autogen.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										14
									
								
								autogen.sh
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,14 @@
 | 
			
		||||
#! /bin/sh
 | 
			
		||||
 | 
			
		||||
srcdir=`dirname "$0"`
 | 
			
		||||
test -z "$srcdir" && srcdir=.
 | 
			
		||||
 | 
			
		||||
ORIGDIR=`pwd`
 | 
			
		||||
cd "$srcdir"
 | 
			
		||||
 | 
			
		||||
autoreconf --force --verbose --install || exit 1
 | 
			
		||||
cd "$ORIGDIR" || exit $?
 | 
			
		||||
 | 
			
		||||
if test -z "$NOCONFIGURE"; then
 | 
			
		||||
    "$srcdir"/configure "$@"
 | 
			
		||||
fi
 | 
			
		||||
@@ -1,6 +0,0 @@
 | 
			
		||||
# This is reverted shortly after landing
 | 
			
		||||
4432a2d14d80081d062f7939a950d65ea3a16eed
 | 
			
		||||
 | 
			
		||||
# This was manually backported
 | 
			
		||||
21be5c8edd3ad156f6cbfbceb96e7939716d9f2c
 | 
			
		||||
4b392ced2d744fccffe95490ff57e6b41033c266
 | 
			
		||||
							
								
								
									
										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 > picklist
 | 
			
		||||
# $ bin/get-pick-list.sh | tee picklist
 | 
			
		||||
#
 | 
			
		||||
# The output is as follows:
 | 
			
		||||
# [nomination_type] commit_sha commit summary
 | 
			
		||||
 | 
			
		||||
is_stable_nomination()
 | 
			
		||||
{
 | 
			
		||||
	git show --pretty=medium --summary "$1" | grep -q -i -o "CC:.*mesa-stable"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
is_typod_nomination()
 | 
			
		||||
{
 | 
			
		||||
	git show --pretty=medium --summary "$1" | grep -q -i -o "CC:.*mesa-dev"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
fixes=
 | 
			
		||||
 | 
			
		||||
# Helper to handle various mistypos of the fixes tag.
 | 
			
		||||
# The tag string itself is passed as argument and normalised within.
 | 
			
		||||
#
 | 
			
		||||
# Resulting string in the global variable "fixes" and contains entries
 | 
			
		||||
# in the form "fixes:$sha"
 | 
			
		||||
is_sha_nomination()
 | 
			
		||||
{
 | 
			
		||||
	fixes=`git show --pretty=medium -s $1 | tr -d "\n" | \
 | 
			
		||||
		sed -e 's/'"$2"'/\nfixes:/Ig' | \
 | 
			
		||||
		grep -Eo 'fixes:[a-f0-9]{4,40}'`
 | 
			
		||||
 | 
			
		||||
	fixes_count=`echo "$fixes" | grep "fixes:" | wc -l`
 | 
			
		||||
	if test $fixes_count -eq 0; then
 | 
			
		||||
		return 1
 | 
			
		||||
	fi
 | 
			
		||||
 | 
			
		||||
	# Throw a warning for each invalid sha
 | 
			
		||||
	while test $fixes_count -gt 0; do
 | 
			
		||||
		# Treat only the current line
 | 
			
		||||
		id=`echo "$fixes" | tail -n $fixes_count | head -n 1 | cut -d : -f 2`
 | 
			
		||||
		fixes_count=$(($fixes_count-1))
 | 
			
		||||
		if ! git show $id >/dev/null 2>&1; then
 | 
			
		||||
			echo WARNING: Commit $1 lists invalid sha $id
 | 
			
		||||
		fi
 | 
			
		||||
	done
 | 
			
		||||
 | 
			
		||||
	return 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# Checks if at least one of offending commits, listed in the global
 | 
			
		||||
# "fixes", is in branch.
 | 
			
		||||
sha_in_range()
 | 
			
		||||
{
 | 
			
		||||
	fixes_count=`echo "$fixes" | grep "fixes:" | wc -l`
 | 
			
		||||
	while test $fixes_count -gt 0; do
 | 
			
		||||
		# Treat only the current line
 | 
			
		||||
		id=`echo "$fixes" | tail -n $fixes_count | head -n 1 | cut -d : -f 2`
 | 
			
		||||
		fixes_count=$(($fixes_count-1))
 | 
			
		||||
 | 
			
		||||
		# Be that cherry-picked ...
 | 
			
		||||
		# ... or landed before the branchpoint.
 | 
			
		||||
		if grep -q ^$id already_picked ||
 | 
			
		||||
		   grep -q ^$id already_landed ; then
 | 
			
		||||
			return 0
 | 
			
		||||
		fi
 | 
			
		||||
	done
 | 
			
		||||
	return 1
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
is_fixes_nomination()
 | 
			
		||||
{
 | 
			
		||||
	is_sha_nomination "$1" "fixes:[[:space:]]*"
 | 
			
		||||
	if test $? -eq 0; then
 | 
			
		||||
		return 0
 | 
			
		||||
	fi
 | 
			
		||||
	is_sha_nomination "$1" "fixes[[:space:]]\+"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
is_brokenby_nomination()
 | 
			
		||||
{
 | 
			
		||||
	is_sha_nomination "$1" "broken by"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
is_revert_nomination()
 | 
			
		||||
{
 | 
			
		||||
	is_sha_nomination "$1" "This reverts commit "
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# Use the last branchpoint as our limit for the search
 | 
			
		||||
latest_branchpoint=`git merge-base upstream/master HEAD`
 | 
			
		||||
latest_branchpoint=`git merge-base origin/master HEAD`
 | 
			
		||||
 | 
			
		||||
# List all the commits between day 1 and the branch point...
 | 
			
		||||
git log --reverse --pretty=%H $latest_branchpoint > already_landed
 | 
			
		||||
 | 
			
		||||
# ... and the ones cherry-picked.
 | 
			
		||||
git log --reverse --pretty=medium --grep="cherry picked from commit" $latest_branchpoint..HEAD |\
 | 
			
		||||
# Grep for commits with "cherry picked from commit" in the commit message.
 | 
			
		||||
git log --reverse --grep="cherry picked from commit" $latest_branchpoint..HEAD |\
 | 
			
		||||
	grep "cherry picked from commit" |\
 | 
			
		||||
	sed -e 's/^[[:space:]]*(cherry picked from commit[[:space:]]*//' -e 's/)//' > already_picked
 | 
			
		||||
 | 
			
		||||
# Grep for potential candidates
 | 
			
		||||
git log --reverse --pretty=%H -i --grep='^CC:.*mesa-stable\|^CC:.*mesa-dev\|\<fixes\>\|\<broken by\>\|This reverts commit' $latest_branchpoint..upstream/master |\
 | 
			
		||||
# Grep for commits that were marked as a candidate for the stable tree.
 | 
			
		||||
git log --reverse --pretty=%H -i --grep='^CC:.*mesa-stable' $latest_branchpoint..origin/master |\
 | 
			
		||||
while read sha
 | 
			
		||||
do
 | 
			
		||||
	# Check to see whether the patch is on the ignore list.
 | 
			
		||||
	if test -f bin/.cherry-ignore; then
 | 
			
		||||
	if [ -f bin/.cherry-ignore ] ; then
 | 
			
		||||
		if grep -q ^$sha bin/.cherry-ignore ; then
 | 
			
		||||
			continue
 | 
			
		||||
		fi
 | 
			
		||||
@@ -118,33 +32,7 @@ do
 | 
			
		||||
		continue
 | 
			
		||||
	fi
 | 
			
		||||
 | 
			
		||||
	if is_fixes_nomination "$sha"; then
 | 
			
		||||
		tag=fixes
 | 
			
		||||
	elif is_brokenby_nomination "$sha"; then
 | 
			
		||||
		tag=brokenby
 | 
			
		||||
	elif is_revert_nomination "$sha"; then
 | 
			
		||||
		tag=revert
 | 
			
		||||
	elif is_stable_nomination "$sha"; then
 | 
			
		||||
		tag=stable
 | 
			
		||||
	elif is_typod_nomination "$sha"; then
 | 
			
		||||
		tag=typod
 | 
			
		||||
	else
 | 
			
		||||
		continue
 | 
			
		||||
	fi
 | 
			
		||||
 | 
			
		||||
	case "$tag" in
 | 
			
		||||
	fixes | brokenby | revert )
 | 
			
		||||
		if ! sha_in_range; then
 | 
			
		||||
			continue
 | 
			
		||||
		fi
 | 
			
		||||
		;;
 | 
			
		||||
	* )
 | 
			
		||||
		;;
 | 
			
		||||
	esac
 | 
			
		||||
 | 
			
		||||
	printf "[ %8s ] " "$tag"
 | 
			
		||||
	git --no-pager show --no-patch --pretty=oneline $sha
 | 
			
		||||
	git log -n1 --pretty=oneline $sha | cat
 | 
			
		||||
done
 | 
			
		||||
 | 
			
		||||
rm -f already_picked
 | 
			
		||||
rm -f already_landed
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										42
									
								
								bin/get-typod-pick-list.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										42
									
								
								bin/get-typod-pick-list.sh
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,42 @@
 | 
			
		||||
#!/bin/sh
 | 
			
		||||
 | 
			
		||||
# Script for generating a list of candidates which have typos in the nomination line
 | 
			
		||||
#
 | 
			
		||||
# Usage examples:
 | 
			
		||||
#
 | 
			
		||||
# $ bin/get-typod-pick-list.sh
 | 
			
		||||
# $ bin/get-typod-pick-list.sh > picklist
 | 
			
		||||
# $ bin/get-typod-pick-list.sh | tee picklist
 | 
			
		||||
 | 
			
		||||
# NB:
 | 
			
		||||
# This script intentionally _never_ checks for specific version tag
 | 
			
		||||
# Should we consider folding it with the original get-pick-list.sh
 | 
			
		||||
 | 
			
		||||
# Use the last branchpoint as our limit for the search
 | 
			
		||||
latest_branchpoint=`git merge-base origin/master HEAD`
 | 
			
		||||
 | 
			
		||||
# Grep for commits with "cherry picked from commit" in the commit message.
 | 
			
		||||
git log --reverse --grep="cherry picked from commit" $latest_branchpoint..HEAD |\
 | 
			
		||||
	grep "cherry picked from commit" |\
 | 
			
		||||
	sed -e 's/^[[:space:]]*(cherry picked from commit[[:space:]]*//' -e 's/)//' > already_picked
 | 
			
		||||
 | 
			
		||||
# Grep for commits that were marked as a candidate for the stable tree.
 | 
			
		||||
git log --reverse --pretty=%H -i --grep='^CC:.*mesa-dev' $latest_branchpoint..origin/master |\
 | 
			
		||||
while read sha
 | 
			
		||||
do
 | 
			
		||||
	# Check to see whether the patch is on the ignore list.
 | 
			
		||||
	if [ -f bin/.cherry-ignore ] ; then
 | 
			
		||||
		if grep -q ^$sha bin/.cherry-ignore ; then
 | 
			
		||||
			continue
 | 
			
		||||
		fi
 | 
			
		||||
	fi
 | 
			
		||||
 | 
			
		||||
	# Check to see if it has already been picked over.
 | 
			
		||||
	if grep -q ^$sha already_picked ; then
 | 
			
		||||
		continue
 | 
			
		||||
	fi
 | 
			
		||||
 | 
			
		||||
	git log -n1 --pretty=oneline $sha | cat
 | 
			
		||||
done
 | 
			
		||||
 | 
			
		||||
rm -f already_picked
 | 
			
		||||
							
								
								
									
										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.
 | 
			
		||||
The output of this script goes to stdout.
 | 
			
		||||
@@ -26,25 +28,22 @@ def get_git_sha1():
 | 
			
		||||
        git_sha1 = ''
 | 
			
		||||
    return git_sha1
 | 
			
		||||
 | 
			
		||||
def write_if_different(contents):
 | 
			
		||||
    """
 | 
			
		||||
    Avoid touching the output file if it doesn't need modifications
 | 
			
		||||
    Useful to avoid triggering rebuilds when nothing has changed.
 | 
			
		||||
    """
 | 
			
		||||
    if os.path.isfile(args.output):
 | 
			
		||||
        with open(args.output, 'r') as file:
 | 
			
		||||
            if file.read() == contents:
 | 
			
		||||
                return
 | 
			
		||||
    with open(args.output, 'w') as file:
 | 
			
		||||
        file.write(contents)
 | 
			
		||||
 | 
			
		||||
parser = argparse.ArgumentParser()
 | 
			
		||||
parser.add_argument('--output', help='File to write the #define in',
 | 
			
		||||
                    required=True)
 | 
			
		||||
        required=True)
 | 
			
		||||
args = parser.parse_args()
 | 
			
		||||
 | 
			
		||||
git_sha1 = os.environ.get('MESA_GIT_SHA1_OVERRIDE', get_git_sha1())[:10]
 | 
			
		||||
if git_sha1:
 | 
			
		||||
    write_if_different('#define MESA_GIT_SHA1 " (git-' + git_sha1 + ')"')
 | 
			
		||||
    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:
 | 
			
		||||
    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
 | 
			
		||||
# Copyright © 2017-2018 Intel Corporation
 | 
			
		||||
# Copyright © 2017 Intel Corporation
 | 
			
		||||
 | 
			
		||||
# Permission is hereby granted, free of charge, to any person obtaining a copy
 | 
			
		||||
# of this software and associated documentation files (the "Software"), to deal
 | 
			
		||||
@@ -24,6 +25,7 @@
 | 
			
		||||
from __future__ import print_function
 | 
			
		||||
import argparse
 | 
			
		||||
import os
 | 
			
		||||
import shutil
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def main():
 | 
			
		||||
@@ -33,50 +35,20 @@ def main():
 | 
			
		||||
    parser.add_argument('drivers', nargs='+')
 | 
			
		||||
    args = parser.parse_args()
 | 
			
		||||
 | 
			
		||||
    if os.path.isabs(args.libdir):
 | 
			
		||||
        destdir = os.environ.get('DESTDIR')
 | 
			
		||||
        if destdir:
 | 
			
		||||
            to = os.path.join(destdir, args.libdir[1:])
 | 
			
		||||
        else:
 | 
			
		||||
            to = args.libdir
 | 
			
		||||
    else:
 | 
			
		||||
        to = os.path.join(os.environ['MESON_INSTALL_DESTDIR_PREFIX'], args.libdir)
 | 
			
		||||
 | 
			
		||||
    to = os.path.join(os.environ.get('MESON_INSTALL_DESTDIR_PREFIX'), args.libdir)
 | 
			
		||||
    master = os.path.join(to, os.path.basename(args.megadriver))
 | 
			
		||||
 | 
			
		||||
    if not os.path.exists(to):
 | 
			
		||||
        if os.path.lexists(to):
 | 
			
		||||
            os.unlink(to)
 | 
			
		||||
        os.makedirs(to)
 | 
			
		||||
    shutil.copy(args.megadriver, master)
 | 
			
		||||
 | 
			
		||||
    for driver in args.drivers:
 | 
			
		||||
        abs_driver = os.path.join(to, driver)
 | 
			
		||||
 | 
			
		||||
        if os.path.lexists(abs_driver):
 | 
			
		||||
            os.unlink(abs_driver)
 | 
			
		||||
        print('installing {} to {}'.format(args.megadriver, abs_driver))
 | 
			
		||||
        os.link(master, abs_driver)
 | 
			
		||||
 | 
			
		||||
        try:
 | 
			
		||||
            ret = os.getcwd()
 | 
			
		||||
            os.chdir(to)
 | 
			
		||||
 | 
			
		||||
            name, ext = os.path.splitext(driver)
 | 
			
		||||
            while ext != '.so':
 | 
			
		||||
                if os.path.lexists(name):
 | 
			
		||||
                    os.unlink(name)
 | 
			
		||||
                os.symlink(driver, name)
 | 
			
		||||
                name, ext = os.path.splitext(name)
 | 
			
		||||
        finally:
 | 
			
		||||
            os.chdir(ret)
 | 
			
		||||
 | 
			
		||||
    # Remove meson-created master .so and symlinks
 | 
			
		||||
    for each in args.drivers:
 | 
			
		||||
        driver = os.path.join(to, each)
 | 
			
		||||
        if os.path.exists(driver):
 | 
			
		||||
            os.unlink(driver)
 | 
			
		||||
        print('installing {} to {}'.format(args.megadriver, driver))
 | 
			
		||||
        os.link(master, driver)
 | 
			
		||||
    os.unlink(master)
 | 
			
		||||
    name, ext = os.path.splitext(master)
 | 
			
		||||
    while ext != '.so':
 | 
			
		||||
        if os.path.lexists(name):
 | 
			
		||||
            os.unlink(name)
 | 
			
		||||
        name, ext = os.path.splitext(name)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
if __name__ == '__main__':
 | 
			
		||||
 
 | 
			
		||||
@@ -1,88 +0,0 @@
 | 
			
		||||
#!/usr/bin/env python3
 | 
			
		||||
# Copyright © 2019 Intel Corporation
 | 
			
		||||
 | 
			
		||||
# Permission is hereby granted, free of charge, to any person obtaining a copy
 | 
			
		||||
# of this software and associated documentation files (the "Software"), to deal
 | 
			
		||||
# in the Software without restriction, including without limitation the rights
 | 
			
		||||
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 | 
			
		||||
# copies of the Software, and to permit persons to whom the Software is
 | 
			
		||||
# furnished to do so, subject to the following conditions:
 | 
			
		||||
 | 
			
		||||
# The above copyright notice and this permission notice shall be included in
 | 
			
		||||
# all copies or substantial portions of the Software.
 | 
			
		||||
 | 
			
		||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 | 
			
		||||
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 | 
			
		||||
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 | 
			
		||||
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 | 
			
		||||
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 | 
			
		||||
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 | 
			
		||||
# SOFTWARE.
 | 
			
		||||
 | 
			
		||||
"""This script reads a meson build directory and gives back the command line it
 | 
			
		||||
was configured with.
 | 
			
		||||
 | 
			
		||||
This only works for meson 0.49.0 and newer.
 | 
			
		||||
"""
 | 
			
		||||
 | 
			
		||||
import argparse
 | 
			
		||||
import ast
 | 
			
		||||
import configparser
 | 
			
		||||
import pathlib
 | 
			
		||||
import sys
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def parse_args() -> argparse.Namespace:
 | 
			
		||||
    """Parse arguments."""
 | 
			
		||||
    parser = argparse.ArgumentParser()
 | 
			
		||||
    parser.add_argument(
 | 
			
		||||
        'build_dir',
 | 
			
		||||
        help='Path the meson build directory')
 | 
			
		||||
    args = parser.parse_args()
 | 
			
		||||
    return args
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def load_config(path: pathlib.Path) -> configparser.ConfigParser:
 | 
			
		||||
    """Load config file."""
 | 
			
		||||
    conf = configparser.ConfigParser()
 | 
			
		||||
    with path.open() as f:
 | 
			
		||||
        conf.read_file(f)
 | 
			
		||||
    return conf
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def build_cmd(conf: configparser.ConfigParser) -> str:
 | 
			
		||||
    """Rebuild the command line."""
 | 
			
		||||
    args = []
 | 
			
		||||
    for k, v in conf['options'].items():
 | 
			
		||||
        if ' ' in v:
 | 
			
		||||
            args.append(f'-D{k}="{v}"')
 | 
			
		||||
        else:
 | 
			
		||||
            args.append(f'-D{k}={v}')
 | 
			
		||||
 | 
			
		||||
    cf = conf['properties'].get('cross_file')
 | 
			
		||||
    if cf:
 | 
			
		||||
        args.append('--cross-file={}'.format(cf))
 | 
			
		||||
    nf = conf['properties'].get('native_file')
 | 
			
		||||
    if nf:
 | 
			
		||||
        # this will be in the form "['str', 'str']", so use ast.literal_eval to
 | 
			
		||||
        # convert it to a list of strings.
 | 
			
		||||
        nf = ast.literal_eval(nf)
 | 
			
		||||
        args.extend(['--native-file={}'.format(f) for f in nf])
 | 
			
		||||
    return ' '.join(args)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def main():
 | 
			
		||||
    args = parse_args()
 | 
			
		||||
    path = pathlib.Path(args.build_dir, 'meson-private', 'cmd_line.txt')
 | 
			
		||||
    if not path.exists():
 | 
			
		||||
        print('Cannot find the necessary file to rebuild command line. '
 | 
			
		||||
              'Is your meson version >= 0.49.0?', file=sys.stderr)
 | 
			
		||||
        sys.exit(1)
 | 
			
		||||
 | 
			
		||||
    conf = load_config(path)
 | 
			
		||||
    cmd = build_cmd(conf)
 | 
			
		||||
    print(cmd)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
if __name__ == '__main__':
 | 
			
		||||
    main()
 | 
			
		||||
@@ -1,63 +0,0 @@
 | 
			
		||||
#!/usr/bin/env python3
 | 
			
		||||
 | 
			
		||||
from os import get_terminal_size
 | 
			
		||||
from textwrap import wrap
 | 
			
		||||
from mesonbuild import coredata
 | 
			
		||||
from mesonbuild import optinterpreter
 | 
			
		||||
 | 
			
		||||
(COLUMNS, _) = get_terminal_size()
 | 
			
		||||
 | 
			
		||||
def describe_option(option_name: str, option_default_value: str,
 | 
			
		||||
                    option_type: str, option_message: str) -> None:
 | 
			
		||||
    print('name:    ' + option_name)
 | 
			
		||||
    print('default: ' + option_default_value)
 | 
			
		||||
    print('type:    ' + option_type)
 | 
			
		||||
    for line in wrap(option_message, width=COLUMNS - 9):
 | 
			
		||||
        print('         ' + line)
 | 
			
		||||
    print('---')
 | 
			
		||||
 | 
			
		||||
oi = optinterpreter.OptionInterpreter('')
 | 
			
		||||
oi.process('meson_options.txt')
 | 
			
		||||
 | 
			
		||||
for (name, value) in oi.options.items():
 | 
			
		||||
    if isinstance(value, coredata.UserStringOption):
 | 
			
		||||
        describe_option(name,
 | 
			
		||||
                        value.value,
 | 
			
		||||
                        'string',
 | 
			
		||||
                        "You can type what you want, but make sure it makes sense")
 | 
			
		||||
    elif isinstance(value, coredata.UserBooleanOption):
 | 
			
		||||
        describe_option(name,
 | 
			
		||||
                        'true' if value.value else 'false',
 | 
			
		||||
                        'boolean',
 | 
			
		||||
                        "You can set it to 'true' or 'false'")
 | 
			
		||||
    elif isinstance(value, coredata.UserIntegerOption):
 | 
			
		||||
        describe_option(name,
 | 
			
		||||
                        str(value.value),
 | 
			
		||||
                        'integer',
 | 
			
		||||
                        "You can set it to any integer value between '{}' and '{}'".format(value.min_value, value.max_value))
 | 
			
		||||
    elif isinstance(value, coredata.UserUmaskOption):
 | 
			
		||||
        describe_option(name,
 | 
			
		||||
                        str(value.value),
 | 
			
		||||
                        'umask',
 | 
			
		||||
                        "You can set it to 'preserve' or a value between '0000' and '0777'")
 | 
			
		||||
    elif isinstance(value, coredata.UserComboOption):
 | 
			
		||||
        choices = '[' + ', '.join(["'" + v + "'" for v in value.choices]) + ']'
 | 
			
		||||
        describe_option(name,
 | 
			
		||||
                        value.value,
 | 
			
		||||
                        'combo',
 | 
			
		||||
                        "You can set it to any one of those values: " + choices)
 | 
			
		||||
    elif isinstance(value, coredata.UserArrayOption):
 | 
			
		||||
        choices = '[' + ', '.join(["'" + v + "'" for v in value.choices]) + ']'
 | 
			
		||||
        value = '[' + ', '.join(["'" + v + "'" for v in value.value]) + ']'
 | 
			
		||||
        describe_option(name,
 | 
			
		||||
                        value,
 | 
			
		||||
                        'array',
 | 
			
		||||
                        "You can set it to one or more of those values: " + choices)
 | 
			
		||||
    elif isinstance(value, coredata.UserFeatureOption):
 | 
			
		||||
        describe_option(name,
 | 
			
		||||
                        value.value,
 | 
			
		||||
                        'feature',
 | 
			
		||||
                        "You can set it to 'auto', 'enabled', or 'disabled'")
 | 
			
		||||
    else:
 | 
			
		||||
        print(name + ' is an option of a type unknown to this script')
 | 
			
		||||
        print('---')
 | 
			
		||||
@@ -19,4 +19,3 @@
 | 
			
		||||
# SOFTWARE.
 | 
			
		||||
 | 
			
		||||
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()
 | 
			
		||||
if host_platform.startswith('cygwin'):
 | 
			
		||||
    host_platform = 'cygwin'
 | 
			
		||||
# MSYS2 default platform selection.
 | 
			
		||||
if host_platform.startswith('mingw'):
 | 
			
		||||
    host_platform = 'windows'
 | 
			
		||||
 | 
			
		||||
# Search sys.argv[] for a "platform=foo" argument since we don't have
 | 
			
		||||
# an 'env' variable at this point.
 | 
			
		||||
@@ -52,18 +49,9 @@ if 'PROCESSOR_ARCHITECTURE' in os.environ:
 | 
			
		||||
else:
 | 
			
		||||
    host_machine = _platform.machine()
 | 
			
		||||
host_machine = _machine_map.get(host_machine, 'generic')
 | 
			
		||||
# MSYS2 default machine selection.
 | 
			
		||||
if _platform.system().lower().startswith('mingw') and 'MSYSTEM' in os.environ:
 | 
			
		||||
    if os.environ['MSYSTEM'] == 'MINGW32':
 | 
			
		||||
        host_machine = 'x86'
 | 
			
		||||
    if os.environ['MSYSTEM'] == 'MINGW64':
 | 
			
		||||
        host_machine = 'x86_64'
 | 
			
		||||
 | 
			
		||||
default_machine = host_machine
 | 
			
		||||
default_toolchain = 'default'
 | 
			
		||||
# MSYS2 default toolchain selection.
 | 
			
		||||
if _platform.system().lower().startswith('mingw'):
 | 
			
		||||
    default_toolchain = 'mingw'
 | 
			
		||||
 | 
			
		||||
if target_platform == 'windows' and host_platform != 'windows':
 | 
			
		||||
    default_machine = 'x86'
 | 
			
		||||
@@ -98,7 +86,7 @@ def AddOptions(opts):
 | 
			
		||||
        from SCons.Options.EnumOption import EnumOption
 | 
			
		||||
    opts.Add(EnumOption('build', 'build type', 'debug',
 | 
			
		||||
                        allowed_values=('debug', 'checked', 'profile',
 | 
			
		||||
                                        'release')))
 | 
			
		||||
                                        'release', 'opt')))
 | 
			
		||||
    opts.Add(BoolOption('verbose', 'verbose output', 'no'))
 | 
			
		||||
    opts.Add(EnumOption('machine', 'use machine-specific assembly code',
 | 
			
		||||
                        default_machine,
 | 
			
		||||
@@ -111,14 +99,17 @@ def AddOptions(opts):
 | 
			
		||||
                        'enable static code analysis where available', 'no'))
 | 
			
		||||
    opts.Add(BoolOption('asan', 'enable Address Sanitizer', 'no'))
 | 
			
		||||
    opts.Add('toolchain', 'compiler toolchain', default_toolchain)
 | 
			
		||||
    opts.Add(BoolOption('gles', 'EXPERIMENTAL: enable OpenGL ES support',
 | 
			
		||||
                        'no'))
 | 
			
		||||
    opts.Add(BoolOption('llvm', 'use LLVM', default_llvm))
 | 
			
		||||
    opts.Add(BoolOption('force_scons', 'Force enable scons on deprecated platforms', 'false'))
 | 
			
		||||
    opts.Add(BoolOption('openmp', 'EXPERIMENTAL: compile with openmp (swrast)',
 | 
			
		||||
                        'no'))
 | 
			
		||||
    opts.Add(BoolOption('debug', 'DEPRECATED: debug build', 'yes'))
 | 
			
		||||
    opts.Add(BoolOption('profile', 'DEPRECATED: profile build', 'no'))
 | 
			
		||||
    opts.Add(BoolOption('quiet', 'DEPRECATED: profile build', 'yes'))
 | 
			
		||||
    opts.Add(BoolOption('texture_float',
 | 
			
		||||
                        'enable floating-point textures and renderbuffers',
 | 
			
		||||
                        'no'))
 | 
			
		||||
    opts.Add(BoolOption('swr', 'Build OpenSWR', 'no'))
 | 
			
		||||
    if host_platform == 'windows':
 | 
			
		||||
        opts.Add('MSVC_VERSION', 'Microsoft Visual C/C++ version')
 | 
			
		||||
        opts.Add('MSVC_USE_SCRIPT', 'Microsoft Visual C/C++ vcvarsall script', True)
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										3133
									
								
								configure.ac
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3133
									
								
								configure.ac
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							@@ -8,7 +8,7 @@
 | 
			
		||||
<body>
 | 
			
		||||
 | 
			
		||||
<div class="header">
 | 
			
		||||
  The Mesa 3D Graphics Library
 | 
			
		||||
  <h1>The Mesa 3D Graphics Library</h1>
 | 
			
		||||
</div>
 | 
			
		||||
 | 
			
		||||
<iframe src="contents.html"></iframe>
 | 
			
		||||
@@ -48,25 +48,23 @@ start-up because of an extension string buffer-overflow problem.
 | 
			
		||||
 | 
			
		||||
<p>
 | 
			
		||||
The problem is a modern OpenGL driver will return a very long string
 | 
			
		||||
for the <code>glGetString(GL_EXTENSIONS)</code> query and if the application
 | 
			
		||||
for the glGetString(GL_EXTENSIONS) query and if the application
 | 
			
		||||
naively copies the string into a fixed-size buffer it can overflow the
 | 
			
		||||
buffer and crash the application.
 | 
			
		||||
</p>
 | 
			
		||||
 | 
			
		||||
<p>
 | 
			
		||||
The work-around is to set the <code>MESA_EXTENSION_MAX_YEAR</code>
 | 
			
		||||
environment variable to the approximate release year of the game.
 | 
			
		||||
This will cause the <code>glGetString(GL_EXTENSIONS)</code> query to only report
 | 
			
		||||
extensions older than the given year.
 | 
			
		||||
The work-around is to set the MESA_EXTENSION_MAX_YEAR environment variable
 | 
			
		||||
to the approximate release year of the game.
 | 
			
		||||
This will cause the glGetString(GL_EXTENSIONS) query to only report extensions
 | 
			
		||||
older than the given year.
 | 
			
		||||
</p>
 | 
			
		||||
 | 
			
		||||
<p>
 | 
			
		||||
For example, if the game was released in 2001, do
 | 
			
		||||
</p>
 | 
			
		||||
<pre>
 | 
			
		||||
export MESA_EXTENSION_MAX_YEAR=2001
 | 
			
		||||
</pre>
 | 
			
		||||
<p>
 | 
			
		||||
before running the game.
 | 
			
		||||
</p>
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										257
									
								
								docs/autoconf.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										257
									
								
								docs/autoconf.html
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,257 @@
 | 
			
		||||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
 | 
			
		||||
<html lang="en">
 | 
			
		||||
<head>
 | 
			
		||||
  <meta http-equiv="content-type" content="text/html; charset=utf-8">
 | 
			
		||||
  <title>Compilation and Installation using Autoconf</title>
 | 
			
		||||
  <link rel="stylesheet" type="text/css" href="mesa.css">
 | 
			
		||||
</head>
 | 
			
		||||
<body>
 | 
			
		||||
 | 
			
		||||
<div class="header">
 | 
			
		||||
  <h1>The Mesa 3D Graphics Library</h1>
 | 
			
		||||
</div>
 | 
			
		||||
 | 
			
		||||
<iframe src="contents.html"></iframe>
 | 
			
		||||
<div class="content">
 | 
			
		||||
 | 
			
		||||
<h1>Compilation and Installation using Autoconf</h1>
 | 
			
		||||
 | 
			
		||||
<ol>
 | 
			
		||||
<li><p><a href="#basic">Basic Usage</a></li>
 | 
			
		||||
<li><p><a href="#driver">Driver Options</a>
 | 
			
		||||
  <ul>
 | 
			
		||||
  <li><a href="#xlib">Xlib Driver Options</a></li>
 | 
			
		||||
  <li><a href="#dri">DRI Driver Options</a></li>
 | 
			
		||||
  <li><a href="#osmesa">OSMesa Driver Options</a></li>
 | 
			
		||||
  </ul>
 | 
			
		||||
</ol>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
<h2 id="basic">1. Basic Usage</h2>
 | 
			
		||||
 | 
			
		||||
<p>
 | 
			
		||||
The autoconf generated configure script can be used to guess your
 | 
			
		||||
platform and change various options for building Mesa. To use the
 | 
			
		||||
configure script, type:
 | 
			
		||||
</p>
 | 
			
		||||
 | 
			
		||||
<pre>
 | 
			
		||||
    ./configure
 | 
			
		||||
</pre>
 | 
			
		||||
 | 
			
		||||
<p>
 | 
			
		||||
To see a short description of all the options, type <code>./configure
 | 
			
		||||
--help</code>. If you are using a development snapshot and the configure
 | 
			
		||||
script does not exist, type <code>./autogen.sh</code> to generate it
 | 
			
		||||
first. If you know the options you want to pass to
 | 
			
		||||
<code>configure</code>, you can pass them to <code>autogen.sh</code>. It
 | 
			
		||||
will run <code>configure</code> with these options after it is
 | 
			
		||||
generated. Once you have run <code>configure</code> and set the options
 | 
			
		||||
to your preference, type:
 | 
			
		||||
</p>
 | 
			
		||||
 | 
			
		||||
<pre>
 | 
			
		||||
    make
 | 
			
		||||
</pre>
 | 
			
		||||
 | 
			
		||||
<p>
 | 
			
		||||
This will produce libGL.so and/or several other libraries depending on the
 | 
			
		||||
options you have chosen. Later, if you want to rebuild for a different
 | 
			
		||||
configuration run <code>make realclean</code> before rebuilding.
 | 
			
		||||
</p>
 | 
			
		||||
 | 
			
		||||
<p>
 | 
			
		||||
Some of the generic autoconf options are used with Mesa:
 | 
			
		||||
</p>
 | 
			
		||||
<dl>
 | 
			
		||||
<dt><code>--prefix=PREFIX</code></dt>
 | 
			
		||||
<dd><p>This is the root directory where
 | 
			
		||||
files will be installed by <code>make install</code>. The default is
 | 
			
		||||
<code>/usr/local</code>.</p>
 | 
			
		||||
</dd>
 | 
			
		||||
 | 
			
		||||
<dt><code>--exec-prefix=EPREFIX</code></dt>
 | 
			
		||||
<dd><p>This is the root directory
 | 
			
		||||
where architecture-dependent files will be installed. In Mesa, this is
 | 
			
		||||
only used to derive the directory for the libraries. The default is
 | 
			
		||||
<code>${prefix}</code>.</p>
 | 
			
		||||
</dd>
 | 
			
		||||
 | 
			
		||||
<dt><code>--libdir=LIBDIR</code></dt>
 | 
			
		||||
<dd><p>This option specifies the directory
 | 
			
		||||
where the GL libraries will be installed. The default is
 | 
			
		||||
<code>${exec_prefix}/lib</code>. It also serves as the name of the
 | 
			
		||||
library staging area in the source tree. For instance, if the option
 | 
			
		||||
<code>--libdir=/usr/local/lib64</code> is used, the libraries will be
 | 
			
		||||
created in a <code>lib64</code> directory at the top of the Mesa source
 | 
			
		||||
tree.</p>
 | 
			
		||||
</dd>
 | 
			
		||||
 | 
			
		||||
<dt><code>--sysconfdir=DIR</code></dt>
 | 
			
		||||
<dd><p>This option specifies the directory where the configuration
 | 
			
		||||
files will be installed. The default is <code>${prefix}/etc</code>.
 | 
			
		||||
Currently there's only one config file provided when dri drivers are
 | 
			
		||||
enabled - it's <code>drirc</code>.</p>
 | 
			
		||||
</dd>
 | 
			
		||||
 | 
			
		||||
<dt><code>--enable-static, --disable-shared</code></dt>
 | 
			
		||||
<dd><p>By default, Mesa
 | 
			
		||||
will build shared libraries. Either of these options will force static
 | 
			
		||||
libraries to be built. It is not currently possible to build static and
 | 
			
		||||
shared libraries in a single pass.</p>
 | 
			
		||||
</dd>
 | 
			
		||||
 | 
			
		||||
<dt><code>CC, CFLAGS, CXX, CXXFLAGS</code></dt>
 | 
			
		||||
<dd><p>These environment variables
 | 
			
		||||
control the C and C++ compilers used during the build. By default,
 | 
			
		||||
<code>gcc</code> and <code>g++</code> are used and the debug/optimisation
 | 
			
		||||
level is left unchanged.</p>
 | 
			
		||||
</dd>
 | 
			
		||||
 | 
			
		||||
<dt><code>LDFLAGS</code></dt>
 | 
			
		||||
<dd><p>An environment variable specifying flags to
 | 
			
		||||
pass when linking programs. These should be empty and
 | 
			
		||||
<code>PKG_CONFIG_PATH</code> is recommended to be used instead. If needed
 | 
			
		||||
it can be used to direct the linker to use libraries in nonstandard
 | 
			
		||||
directories. For example, <code>LDFLAGS="-L/usr/X11R6/lib"</code>.</p>
 | 
			
		||||
</dd>
 | 
			
		||||
 | 
			
		||||
<dt><code>PKG_CONFIG_PATH</code></dt>
 | 
			
		||||
<dd><p>The
 | 
			
		||||
<code>pkg-config</code> utility is a hard requirement for configuring and
 | 
			
		||||
building mesa. It is used to search for external libraries
 | 
			
		||||
on the system. This environment variable is used to control the search
 | 
			
		||||
path for <code>pkg-config</code>. For instance, setting
 | 
			
		||||
<code>PKG_CONFIG_PATH=/usr/X11R6/lib/pkgconfig</code> will search for
 | 
			
		||||
package metadata in <code>/usr/X11R6</code> before the standard
 | 
			
		||||
directories.</p>
 | 
			
		||||
</dd>
 | 
			
		||||
</dl>
 | 
			
		||||
 | 
			
		||||
<p>
 | 
			
		||||
There are also a few general options for altering the Mesa build:
 | 
			
		||||
</p>
 | 
			
		||||
<dl>
 | 
			
		||||
<dt><code>--enable-debug</code></dt>
 | 
			
		||||
<dd><p>This option will set the compiler debug/optimisation levels (if the user
 | 
			
		||||
hasn't already set them via the CFLAGS/CXXFLAGS) and macros to aid in
 | 
			
		||||
debugging the Mesa libraries.</p>
 | 
			
		||||
 | 
			
		||||
<p>Note that enabling this option can lead to noticeable loss of performance.</p>
 | 
			
		||||
 | 
			
		||||
<dt><code>--disable-asm</code></dt>
 | 
			
		||||
<dd><p>There are assembly routines
 | 
			
		||||
available for a few architectures. These will be used by default if
 | 
			
		||||
one of these architectures is detected. This option ensures that
 | 
			
		||||
assembly will not be used.</p>
 | 
			
		||||
</dd>
 | 
			
		||||
 | 
			
		||||
<dt><code>--build=</code></dt>
 | 
			
		||||
<dt><code>--host=</code></dt>
 | 
			
		||||
<dd><p>By default, the build will compile code for the architecture that
 | 
			
		||||
it's running on. In order to build cross-compile Mesa on a x86-64 machine
 | 
			
		||||
that is to run on a i686, one would need to set the options to:</p>
 | 
			
		||||
 | 
			
		||||
<p><code>--build=x86_64-pc-linux-gnu --host=i686-pc-linux-gnu</code></p>
 | 
			
		||||
 | 
			
		||||
Note that these can vary from distribution to distribution. For more
 | 
			
		||||
information check with the
 | 
			
		||||
<a href="https://www.gnu.org/savannah-checkouts/gnu/autoconf/manual/autoconf-2.69/html_node/Specifying-Target-Triplets.html">
 | 
			
		||||
autoconf manual</a>.
 | 
			
		||||
Note that you will need to correctly set <code>PKG_CONFIG_PATH</code> as well.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
<p>In some cases a single compiler is capable of handling both architectures
 | 
			
		||||
(multilib) in that case one would need to set the <code>CC,CXX</code> variables
 | 
			
		||||
appending the correct machine options. Seek your compiler documentation for
 | 
			
		||||
further information -
 | 
			
		||||
<a href="https://gcc.gnu.org/onlinedocs/gcc/Submodel-Options.html"> gcc
 | 
			
		||||
machine dependent options</a></p>
 | 
			
		||||
 | 
			
		||||
<p>In addition to specifying correct <code>PKG_CONFIG_PATH</code> for the target
 | 
			
		||||
architecture, the following should be sufficient to configure multilib Mesa</p>
 | 
			
		||||
 | 
			
		||||
<code>./configure CC="gcc -m32" CXX="g++ -m32" --build=x86_64-pc-linux-gnu --host=i686-pc-linux-gnu ...</code>
 | 
			
		||||
</dd>
 | 
			
		||||
</dl>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
<h2 id="driver">2. GL Driver Options</h2>
 | 
			
		||||
 | 
			
		||||
<p>
 | 
			
		||||
There are several different driver modes that Mesa can use. These are
 | 
			
		||||
described in more detail in the <a href="install.html">basic
 | 
			
		||||
installation instructions</a>. The Mesa driver is controlled through the
 | 
			
		||||
configure options <code>--enable-glx</code> and <code>--enable-osmesa</code>
 | 
			
		||||
</p>
 | 
			
		||||
 | 
			
		||||
<h3 id="xlib">Xlib</h3><p>
 | 
			
		||||
It uses Xlib as a software renderer to do all rendering. It corresponds
 | 
			
		||||
to the option <code>--enable-glx=xlib</code> or <code>--enable-glx=gallium-xlib</code>.
 | 
			
		||||
 | 
			
		||||
<h3 id="dri">DRI</h3><p>This mode uses the DRI hardware drivers for
 | 
			
		||||
accelerated OpenGL rendering. To enable use <code>--enable-glx=dri
 | 
			
		||||
--enable-dri</code>.
 | 
			
		||||
 | 
			
		||||
<!-- DRI specific options -->
 | 
			
		||||
<dl>
 | 
			
		||||
<dt><code>--with-dri-driverdir=DIR</code>
 | 
			
		||||
<dd><p> This option specifies the
 | 
			
		||||
location the DRI drivers will be installed to and the location libGL
 | 
			
		||||
will search for DRI drivers. The default is <code>${libdir}/dri</code>.
 | 
			
		||||
<dt><code>--with-dri-drivers=DRIVER,DRIVER,...</code>
 | 
			
		||||
<dd><p> This option
 | 
			
		||||
allows a specific set of DRI drivers to be built. For example,
 | 
			
		||||
<code>--with-dri-drivers="swrast,i965,radeon,nouveau"</code>. By
 | 
			
		||||
default, the drivers will be chosen depending on the target platform.
 | 
			
		||||
See the directory <code>src/mesa/drivers/dri</code> in the source tree
 | 
			
		||||
for available drivers. Beware that the swrast DRI driver is used by both
 | 
			
		||||
libGL and the X.Org xserver GLX module to do software rendering, so you
 | 
			
		||||
may run into problems if it is not available.
 | 
			
		||||
<!-- This explanation might be totally bogus. Kristian? -->
 | 
			
		||||
<dt><code>--disable-driglx-direct</code>
 | 
			
		||||
<dd><p> Disable direct rendering in
 | 
			
		||||
GLX. Normally, direct hardware rendering through the DRI drivers and
 | 
			
		||||
indirect software rendering are enabled in GLX. This option disables
 | 
			
		||||
direct rendering entirely. It can be useful on architectures where
 | 
			
		||||
kernel DRM modules are not available.
 | 
			
		||||
<dt><code>--enable-glx-tls</code> <dd><p>
 | 
			
		||||
Enable Thread Local Storage (TLS) in
 | 
			
		||||
GLX.
 | 
			
		||||
<dt><code>--with-expat=DIR</code>
 | 
			
		||||
<dd><p><strong>DEPRECATED</strong>, use <code>PKG_CONFIG_PATH</code> instead.</p>
 | 
			
		||||
<p>The DRI-enabled libGL uses expat to
 | 
			
		||||
parse the DRI configuration files in <code>${sysconfdir}/drirc</code> and
 | 
			
		||||
<code>~/.drirc</code>. This option allows a specific expat installation
 | 
			
		||||
to be used. For example, <code>--with-expat=/usr/local</code> will
 | 
			
		||||
search for expat headers and libraries in <code>/usr/local/include</code>
 | 
			
		||||
and <code>/usr/local/lib</code>, respectively.
 | 
			
		||||
</dl>
 | 
			
		||||
 | 
			
		||||
<h3 id="osmesa">OSMesa </h3><p> No libGL is built in this
 | 
			
		||||
mode. Instead, the driver code is built into the Off-Screen Mesa
 | 
			
		||||
(OSMesa) library. See the <a href="osmesa.html">Off-Screen Rendering</a>
 | 
			
		||||
page for more details.  It corresponds to the option
 | 
			
		||||
<code>--enable-osmesa</code>.
 | 
			
		||||
 | 
			
		||||
<!-- OSMesa specific options -->
 | 
			
		||||
<dl>
 | 
			
		||||
<dt><code>--with-osmesa-bits=BITS</code>
 | 
			
		||||
<dd><p> This option allows the size
 | 
			
		||||
of the color channel in bits to be specified. By default, an 8-bit
 | 
			
		||||
channel will be used, and the driver will be named libOSMesa. Other
 | 
			
		||||
options are 16- and 32-bit color channels, which will add the bit size
 | 
			
		||||
to the library name. For example, <code>--with-osmesa-bits=16</code>
 | 
			
		||||
will create the libOSMesa16 library with a 16-bit color channel.
 | 
			
		||||
</dl>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
<h2 id="library">3. Library Options</h2>
 | 
			
		||||
 | 
			
		||||
<p>
 | 
			
		||||
The configure script provides more fine grained control over the libraries
 | 
			
		||||
that will be built.
 | 
			
		||||
 | 
			
		||||
</div>
 | 
			
		||||
</body>
 | 
			
		||||
</html>
 | 
			
		||||
@@ -2,19 +2,19 @@
 | 
			
		||||
<html lang="en">
 | 
			
		||||
<head>
 | 
			
		||||
  <meta http-equiv="content-type" content="text/html; charset=utf-8">
 | 
			
		||||
  <title>Report a Bug</title>
 | 
			
		||||
  <title>Mesa Bug Reporting</title>
 | 
			
		||||
  <link rel="stylesheet" type="text/css" href="mesa.css">
 | 
			
		||||
</head>
 | 
			
		||||
<body>
 | 
			
		||||
 | 
			
		||||
<div class="header">
 | 
			
		||||
  The Mesa 3D Graphics Library
 | 
			
		||||
  <h1>The Mesa 3D Graphics Library</h1>
 | 
			
		||||
</div>
 | 
			
		||||
 | 
			
		||||
<iframe src="contents.html"></iframe>
 | 
			
		||||
<div class="content">
 | 
			
		||||
 | 
			
		||||
<h1>Report a Bug</h1>
 | 
			
		||||
<h1>Bug Database</h1>
 | 
			
		||||
 | 
			
		||||
<p>
 | 
			
		||||
The Mesa bug database is hosted on
 | 
			
		||||
@@ -24,8 +24,8 @@ The old bug database on SourceForge is no longer used.
 | 
			
		||||
 | 
			
		||||
<p>
 | 
			
		||||
To file a Mesa bug, go to
 | 
			
		||||
<a href="https://gitlab.freedesktop.org/mesa/mesa/issues">
 | 
			
		||||
GitLab on freedesktop.org</a>
 | 
			
		||||
<a href="https://bugs.freedesktop.org/enter_bug.cgi?product=Mesa">
 | 
			
		||||
Bugzilla on freedesktop.org</a>
 | 
			
		||||
</p>
 | 
			
		||||
 | 
			
		||||
<p>
 | 
			
		||||
 
 | 
			
		||||
@@ -8,7 +8,7 @@
 | 
			
		||||
<body>
 | 
			
		||||
 | 
			
		||||
<div class="header">
 | 
			
		||||
  The Mesa 3D Graphics Library
 | 
			
		||||
  <h1>The Mesa 3D Graphics Library</h1>
 | 
			
		||||
</div>
 | 
			
		||||
 | 
			
		||||
<iframe src="contents.html"></iframe>
 | 
			
		||||
@@ -48,19 +48,19 @@ For example:
 | 
			
		||||
   }
 | 
			
		||||
</pre>
 | 
			
		||||
 | 
			
		||||
<li>Put a space before/after operators.  For example, <code>a = b + c;</code>
 | 
			
		||||
and not <code>a=b+c;</code>
 | 
			
		||||
<li>Put a space before/after operators.  For example, <tt>a = b + c;</tt>
 | 
			
		||||
and not <tt>a=b+c;</tt>
 | 
			
		||||
 | 
			
		||||
<li>This GNU indent command generally does the right thing for formatting:
 | 
			
		||||
<pre>
 | 
			
		||||
   indent -br -i3 -npcs --no-tabs infile.c -o outfile.c
 | 
			
		||||
</pre>
 | 
			
		||||
 | 
			
		||||
<li>
 | 
			
		||||
<p>Use comments wherever you think it would be helpful for other developers.
 | 
			
		||||
<li>Use comments wherever you think it would be helpful for other developers.
 | 
			
		||||
Several specific cases and style examples follow.  Note that we roughly
 | 
			
		||||
follow <a href="http://www.doxygen.nl">Doxygen</a> conventions.
 | 
			
		||||
</p>
 | 
			
		||||
follow <a href="https://www.stack.nl/~dimitri/doxygen/">Doxygen</a> conventions.
 | 
			
		||||
<br>
 | 
			
		||||
<br>
 | 
			
		||||
Single-line comments:
 | 
			
		||||
<pre>
 | 
			
		||||
   /* null-out pointer to prevent dangling reference below */
 | 
			
		||||
@@ -83,7 +83,7 @@ We try to quote the OpenGL specification where prudent:
 | 
			
		||||
    *     "An INVALID_OPERATION error is generated for any of the following
 | 
			
		||||
    *     conditions:
 | 
			
		||||
    *
 | 
			
		||||
    *     * <length> is zero."
 | 
			
		||||
    *     * <length> is zero."
 | 
			
		||||
    *
 | 
			
		||||
    * Additionally, page 94 of the PDF of the OpenGL 4.5 core spec
 | 
			
		||||
    * (30.10.2014) also says this, so it's no longer allowed for desktop GL,
 | 
			
		||||
@@ -94,7 +94,7 @@ Function comment example:
 | 
			
		||||
<pre>
 | 
			
		||||
   /**
 | 
			
		||||
    * 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  type  one of GL_FOO, GL_BAR, etc.
 | 
			
		||||
    * \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
 | 
			
		||||
</pre>
 | 
			
		||||
 | 
			
		||||
<li>Constants, macros and enum names are <code>ALL_UPPERCASE</code>, with _
 | 
			
		||||
between words.
 | 
			
		||||
<li>Mesa usually uses camel case for local variables (Ex:
 | 
			
		||||
<code>localVarname</code>) while gallium typically uses underscores (Ex:
 | 
			
		||||
<code>local_var_name</code>).
 | 
			
		||||
<li>Constants, macros and enum names are ALL_UPPERCASE, with _ between
 | 
			
		||||
words.
 | 
			
		||||
<li>Mesa usually uses camel case for local variables (Ex: "localVarname")
 | 
			
		||||
while gallium typically uses underscores (Ex: "local_var_name").
 | 
			
		||||
<li>Global variables are almost never used because Mesa should be thread-safe.
 | 
			
		||||
 | 
			
		||||
<li>Booleans.  Places that are not directly visible to the GL API
 | 
			
		||||
should prefer the use of <code>bool</code>, <code>true</code>, and
 | 
			
		||||
<code>false</code> over <code>GLboolean</code>, <code>GL_TRUE</code>, and
 | 
			
		||||
<code>GL_FALSE</code>.  In C code, this may mean that
 | 
			
		||||
<code>#include <stdbool.h></code> needs to be added.  The
 | 
			
		||||
<code>try_emit_*</code> methods in <code>src/mesa/program/ir_to_mesa.cpp</code>
 | 
			
		||||
and <code>src/mesa/state_tracker/st_glsl_to_tgsi.cpp</code> can serve as
 | 
			
		||||
examples.
 | 
			
		||||
should prefer the use of <tt>bool</tt>, <tt>true</tt>, and
 | 
			
		||||
<tt>false</tt> over <tt>GLboolean</tt>, <tt>GL_TRUE</tt>, and
 | 
			
		||||
<tt>GL_FALSE</tt>.  In C code, this may mean that
 | 
			
		||||
<tt>#include <stdbool.h></tt> needs to be added.  The
 | 
			
		||||
<tt>try_emit_</tt>* methods in src/mesa/program/ir_to_mesa.cpp and
 | 
			
		||||
src/mesa/state_tracker/st_glsl_to_tgsi.cpp can serve as examples.
 | 
			
		||||
 | 
			
		||||
</ul>
 | 
			
		||||
</p>
 | 
			
		||||
 | 
			
		||||
</div>
 | 
			
		||||
</body>
 | 
			
		||||
 
 | 
			
		||||
@@ -2,19 +2,19 @@
 | 
			
		||||
<html lang="en">
 | 
			
		||||
<head>
 | 
			
		||||
  <meta http-equiv="content-type" content="text/html; charset=utf-8">
 | 
			
		||||
  <title>Conformance Testing</title>
 | 
			
		||||
  <title>Conformance</title>
 | 
			
		||||
  <link rel="stylesheet" type="text/css" href="mesa.css">
 | 
			
		||||
</head>
 | 
			
		||||
<body>
 | 
			
		||||
 | 
			
		||||
<div class="header">
 | 
			
		||||
  The Mesa 3D Graphics Library
 | 
			
		||||
  <h1>The Mesa 3D Graphics Library</h1>
 | 
			
		||||
</div>
 | 
			
		||||
 | 
			
		||||
<iframe src="contents.html"></iframe>
 | 
			
		||||
<div class="content">
 | 
			
		||||
 | 
			
		||||
<h1>Conformance Testing</h1>
 | 
			
		||||
<h1>Conformance</h1>
 | 
			
		||||
 | 
			
		||||
<p>
 | 
			
		||||
The SGI OpenGL conformance tests verify correct operation of OpenGL
 | 
			
		||||
 
 | 
			
		||||
@@ -12,10 +12,6 @@
 | 
			
		||||
      background-color: #cccccc;
 | 
			
		||||
      color: black;
 | 
			
		||||
    }
 | 
			
		||||
    h2 {
 | 
			
		||||
      font-size: inherit;
 | 
			
		||||
      font-weight: bold;
 | 
			
		||||
    }
 | 
			
		||||
    a:link {
 | 
			
		||||
      color: #000;
 | 
			
		||||
    }
 | 
			
		||||
@@ -27,56 +23,58 @@
 | 
			
		||||
</head>
 | 
			
		||||
<body>
 | 
			
		||||
 | 
			
		||||
<h2>Documentation</h2>
 | 
			
		||||
<b>Documentation</b>
 | 
			
		||||
<ul>
 | 
			
		||||
<li><a href="intro.html" target="_parent">Introduction</a>
 | 
			
		||||
<li><a href="index.html" target="_parent">News</a>
 | 
			
		||||
<li><a href="developers.html" target="_parent">Developers</a>
 | 
			
		||||
<li><a href="systems.html" target="_parent">Platforms and Drivers</a>
 | 
			
		||||
<li><a href="license.html" target="_parent">License and Copyright</a>
 | 
			
		||||
<li><a href="faq.html" target="_parent">Frequently Asked Questions</a>
 | 
			
		||||
<li><a href="license.html" target="_parent">License & Copyright</a>
 | 
			
		||||
<li><a href="faq.html" target="_parent">FAQ</a>
 | 
			
		||||
<li><a href="relnotes.html" target="_parent">Release Notes</a>
 | 
			
		||||
<li><a href="thanks.html" target="_parent">Acknowledgements</a>
 | 
			
		||||
<li><a href="conform.html" target="_parent">Conformance Testing</a>
 | 
			
		||||
<li>more docs below...
 | 
			
		||||
</ul>
 | 
			
		||||
 | 
			
		||||
<h2>Download and Install</h2>
 | 
			
		||||
<b>Download / Install</b>
 | 
			
		||||
<ul>
 | 
			
		||||
<li><a href="download.html" target="_parent">Downloading and Unpacking</a>
 | 
			
		||||
<li><a href="install.html" target="_parent">Compiling and Installing</a>
 | 
			
		||||
<li><a href="download.html" target="_parent">Downloading / Unpacking</a>
 | 
			
		||||
<li><a href="install.html" target="_parent">Compiling / Installing</a>
 | 
			
		||||
  <ul>
 | 
			
		||||
    <li><a href="meson.html" target="_parent">Meson</a></li>
 | 
			
		||||
    <li><a href="autoconf.html" target="_parent">Autoconf</a></li>
 | 
			
		||||
  </ul>
 | 
			
		||||
</li>
 | 
			
		||||
<li><a href="precompiled.html" target="_parent">Precompiled Libraries</a>
 | 
			
		||||
</ul>
 | 
			
		||||
 | 
			
		||||
<h2>Need help?</h2>
 | 
			
		||||
<b>Resources</b>
 | 
			
		||||
<ul>
 | 
			
		||||
<li><a href="lists.html" target="_parent">Mailing Lists</a>
 | 
			
		||||
<li><a href="bugs.html" target="_parent">Report a bug</a>
 | 
			
		||||
<li><a href="bugs.html" target="_parent">Bug Database</a>
 | 
			
		||||
<li><a href="webmaster.html" target="_parent">Webmaster</a>
 | 
			
		||||
<li><a href="https://dri.freedesktop.org/" target="_parent">Mesa/DRI Wiki</a>
 | 
			
		||||
</ul>
 | 
			
		||||
 | 
			
		||||
<h2>User Topics</h2>
 | 
			
		||||
<b>User Topics</b>
 | 
			
		||||
<ul>
 | 
			
		||||
<li><a href="shading.html" target="_parent">Shading Language</a>
 | 
			
		||||
<li><a href="egl.html" target="_parent">EGL</a>
 | 
			
		||||
<li><a href="opengles.html" target="_parent">OpenGL ES</a>
 | 
			
		||||
<li><a href="envvars.html" target="_parent">Environment Variables</a>
 | 
			
		||||
<li><a href="osmesa.html" target="_parent">Off-screen Rendering</a>
 | 
			
		||||
<li><a href="osmesa.html" target="_parent">Off-Screen Rendering</a>
 | 
			
		||||
<li><a href="debugging.html" target="_parent">Debugging Tips</a>
 | 
			
		||||
<li><a href="perf.html" target="_parent">Performance Tips</a>
 | 
			
		||||
<li><a href="extensions.html" target="_parent">Mesa Extensions</a>
 | 
			
		||||
<li><a href="llvmpipe.html" target="_parent">Gallium LLVMpipe Driver</a>
 | 
			
		||||
<li><a href="vmware-guest.html" target="_parent">VMware SVGA3D Guest Driver</a>
 | 
			
		||||
<li><a href="postprocess.html" target="_parent">Gallium Post-processing</a>
 | 
			
		||||
<li><a href="mangling.html" target="_parent">GL Function Name Mangling</a>
 | 
			
		||||
<li><a href="llvmpipe.html" target="_parent">Gallium llvmpipe driver</a>
 | 
			
		||||
<li><a href="vmware-guest.html" target="_parent">VMware SVGA3D guest driver</a>
 | 
			
		||||
<li><a href="postprocess.html" target="_parent">Gallium post-processing</a>
 | 
			
		||||
<li><a href="application-issues.html" target="_parent">Application Issues</a>
 | 
			
		||||
<li><a href="viewperf.html" target="_parent">Viewperf Issues</a>
 | 
			
		||||
</ul>
 | 
			
		||||
 | 
			
		||||
<h2>Developer Topics</h2>
 | 
			
		||||
<b>Developer Topics</b>
 | 
			
		||||
<ul>
 | 
			
		||||
<li><a href="repository.html" target="_parent">Source Code Repository</a>
 | 
			
		||||
<li><a href="sourcetree.html" target="_parent">Source Code Tree</a>
 | 
			
		||||
@@ -84,25 +82,26 @@
 | 
			
		||||
<li><a href="helpwanted.html" target="_parent">Help Wanted</a>
 | 
			
		||||
<li><a href="devinfo.html" target="_parent">Development Notes</a>
 | 
			
		||||
<li><a href="codingstyle.html" target="_parent">Coding Style</a>
 | 
			
		||||
<li><a href="submittingpatches.html" target="_parent">Submitting Patches</a>
 | 
			
		||||
<li><a href="releasing.html" target="_parent">Releasing Process</a>
 | 
			
		||||
<li><a href="release-calendar.html" target="_parent">Release Calendar</a>
 | 
			
		||||
<li><a href="submittingpatches.html" target="_parent">Submitting patches</a>
 | 
			
		||||
<li><a href="releasing.html" target="_parent">Releasing process</a>
 | 
			
		||||
<li><a href="release-calendar.html" target="_parent">Release calendar</a>
 | 
			
		||||
<li><a href="sourcedocs.html" target="_parent">Source Documentation</a>
 | 
			
		||||
<li><a href="dispatch.html" target="_parent">GL Dispatch</a>
 | 
			
		||||
</ul>
 | 
			
		||||
 | 
			
		||||
<h2>Links</h2>
 | 
			
		||||
<b>Links</b>
 | 
			
		||||
<ul>
 | 
			
		||||
<li><a href="https://www.opengl.org" target="_parent">OpenGL Website</a>
 | 
			
		||||
<li><a href="https://dri.freedesktop.org" target="_parent">DRI Website</a>
 | 
			
		||||
<li><a href="https://www.opengl.org" target="_parent">OpenGL website</a>
 | 
			
		||||
<li><a href="https://dri.freedesktop.org" target="_parent">DRI website</a>
 | 
			
		||||
<li><a href="https://www.freedesktop.org" target="_parent">freedesktop.org</a>
 | 
			
		||||
<li><a href="https://planet.freedesktop.org" target="_parent">Developer Blogs</a>
 | 
			
		||||
<li><a href="https://planet.freedesktop.org" target="_parent">Developer blogs</a>
 | 
			
		||||
</ul>
 | 
			
		||||
 | 
			
		||||
<h2>Hosted by:</h2>
 | 
			
		||||
<dl>
 | 
			
		||||
<dd><a href="https://www.freedesktop.org" target="_parent">freedesktop.org</a>
 | 
			
		||||
</dl>
 | 
			
		||||
<b>Hosted by:</b>
 | 
			
		||||
<br>
 | 
			
		||||
<blockquote>
 | 
			
		||||
<a href="https://freedesktop.org" target="_parent">freedesktop.org</a>
 | 
			
		||||
</blockquote>
 | 
			
		||||
 | 
			
		||||
</body>
 | 
			
		||||
</html>
 | 
			
		||||
 
 | 
			
		||||
@@ -8,7 +8,7 @@
 | 
			
		||||
<body>
 | 
			
		||||
 | 
			
		||||
<div class="header">
 | 
			
		||||
  The Mesa 3D Graphics Library
 | 
			
		||||
  <h1>The Mesa 3D Graphics Library</h1>
 | 
			
		||||
</div>
 | 
			
		||||
 | 
			
		||||
<iframe src="contents.html"></iframe>
 | 
			
		||||
@@ -20,22 +20,26 @@
 | 
			
		||||
   Normally Mesa (and OpenGL) records but does not notify the user of
 | 
			
		||||
   errors.  It is up to the application to call
 | 
			
		||||
   <code>glGetError</code> to check for errors.  Mesa supports an
 | 
			
		||||
   environment variable, <code>MESA_DEBUG</code>, to help with debugging.  If
 | 
			
		||||
   <code>MESA_DEBUG</code> is defined, a message will be printed to stdout
 | 
			
		||||
   whenever an error occurs.
 | 
			
		||||
   environment variable, MESA_DEBUG, to help with debugging.  If
 | 
			
		||||
   MESA_DEBUG is defined, a message will be printed to stdout whenever
 | 
			
		||||
   an error occurs.
 | 
			
		||||
</p>
 | 
			
		||||
 | 
			
		||||
<p>
 | 
			
		||||
   More extensive error checking is done in DEBUG builds
 | 
			
		||||
   (<code>--buildtype debug</code> for meson, <code>build=debug</code> for scons).
 | 
			
		||||
   More extensive error checking is done when Mesa is compiled with the
 | 
			
		||||
   DEBUG symbol defined.  You'll have to edit the Make-config file and
 | 
			
		||||
   add -DDEBUG to the CFLAGS line for your system configuration.  You may
 | 
			
		||||
   also want to replace any optimization flags with the -g flag so you can
 | 
			
		||||
   use your debugger.  After you've edited Make-config type 'make clean'
 | 
			
		||||
   before recompiling.
 | 
			
		||||
</p>
 | 
			
		||||
<p>
 | 
			
		||||
   In your debugger you can set a breakpoint in <code>_mesa_error()</code> to trap
 | 
			
		||||
   Mesa errors.
 | 
			
		||||
   In your debugger you can set a breakpoint in _mesa_error() to trap Mesa
 | 
			
		||||
   errors.
 | 
			
		||||
</p>
 | 
			
		||||
<p>
 | 
			
		||||
   There is a display list printing/debugging facility.  See the end of
 | 
			
		||||
   <code>src/dlist.c</code> for details.
 | 
			
		||||
   src/dlist.c for details.
 | 
			
		||||
</p>
 | 
			
		||||
 | 
			
		||||
</div>
 | 
			
		||||
 
 | 
			
		||||
@@ -8,7 +8,7 @@
 | 
			
		||||
<body>
 | 
			
		||||
 | 
			
		||||
<div class="header">
 | 
			
		||||
  The Mesa 3D Graphics Library
 | 
			
		||||
  <h1>The Mesa 3D Graphics Library</h1>
 | 
			
		||||
</div>
 | 
			
		||||
 | 
			
		||||
<iframe src="contents.html"></iframe>
 | 
			
		||||
 
 | 
			
		||||
@@ -8,7 +8,7 @@
 | 
			
		||||
<body>
 | 
			
		||||
 | 
			
		||||
<div class="header">
 | 
			
		||||
  The Mesa 3D Graphics Library
 | 
			
		||||
  <h1>The Mesa 3D Graphics Library</h1>
 | 
			
		||||
</div>
 | 
			
		||||
 | 
			
		||||
<iframe src="contents.html"></iframe>
 | 
			
		||||
@@ -25,12 +25,11 @@
 | 
			
		||||
 | 
			
		||||
<p>
 | 
			
		||||
To add a new GL extension to Mesa you have to do at least the following.
 | 
			
		||||
</p>
 | 
			
		||||
 | 
			
		||||
<ul>
 | 
			
		||||
<li>
 | 
			
		||||
   If <code>glext.h</code> doesn't define the extension, edit
 | 
			
		||||
   <code>include/GL/gl.h</code> and add code like this:
 | 
			
		||||
   If glext.h doesn't define the extension, edit include/GL/gl.h and add
 | 
			
		||||
   code like this:
 | 
			
		||||
   <pre>
 | 
			
		||||
     #ifndef GL_EXT_the_extension_name
 | 
			
		||||
     #define GL_EXT_the_extension_name 1
 | 
			
		||||
@@ -41,18 +40,18 @@ To add a new GL extension to Mesa you have to do at least the following.
 | 
			
		||||
   </pre>
 | 
			
		||||
</li>
 | 
			
		||||
<li>
 | 
			
		||||
   In the <code>src/mapi/glapi/gen/</code> directory, add the new extension
 | 
			
		||||
   functions and enums to the <code>gl_API.xml</code> file.
 | 
			
		||||
   In the src/mapi/glapi/gen/ directory, add the new extension functions and
 | 
			
		||||
   enums to the gl_API.xml file.
 | 
			
		||||
   Then, a bunch of source files must be regenerated by executing the
 | 
			
		||||
   corresponding Python scripts.
 | 
			
		||||
</li>
 | 
			
		||||
<li>
 | 
			
		||||
   Add a new entry to the <code>gl_extensions</code> struct in
 | 
			
		||||
   <code>mtypes.h</code> if the extension requires driver capabilities not
 | 
			
		||||
   already exposed by another extension.
 | 
			
		||||
   Add a new entry to the <code>gl_extensions</code> struct in mtypes.h
 | 
			
		||||
   if the extension requires driver capabilities not already exposed by
 | 
			
		||||
   another extension.
 | 
			
		||||
</li>
 | 
			
		||||
<li>
 | 
			
		||||
   Add a new entry to the <code>src/mesa/main/extensions_table.h</code> file.
 | 
			
		||||
   Add a new entry to the src/mesa/main/extensions_table.h file.
 | 
			
		||||
</li>
 | 
			
		||||
<li>
 | 
			
		||||
   From this point, the best way to proceed is to find another extension,
 | 
			
		||||
@@ -60,22 +59,21 @@ To add a new GL extension to Mesa you have to do at least the following.
 | 
			
		||||
   as an example.
 | 
			
		||||
</li>
 | 
			
		||||
<li>
 | 
			
		||||
   If the new extension adds new GL state, the functions in
 | 
			
		||||
   <code>get.c</code>, <code>enable.c</code> and <code>attrib.c</code>
 | 
			
		||||
   will most likely require new code.
 | 
			
		||||
   If the new extension adds new GL state, the functions in get.c, enable.c
 | 
			
		||||
   and attrib.c will most likely require new code.
 | 
			
		||||
</li>
 | 
			
		||||
<li>
 | 
			
		||||
   To determine if the new extension is active in the current context,
 | 
			
		||||
   use the auto-generated <code>_mesa_has_##name_str()</code> function
 | 
			
		||||
   defined in <code>src/mesa/main/extensions.h</code>.
 | 
			
		||||
   use the auto-generated _mesa_has_##name_str() function defined in
 | 
			
		||||
   src/mesa/main/extensions.h.
 | 
			
		||||
</li>
 | 
			
		||||
<li>
 | 
			
		||||
   The dispatch tests <code>check_table.cpp</code> and
 | 
			
		||||
   <code>dispatch_sanity.cpp</code> should be updated with details about
 | 
			
		||||
   the new extensions functions. These tests are run using
 | 
			
		||||
   <code>meson test</code>.
 | 
			
		||||
   The dispatch tests check_table.cpp and dispatch_sanity.cpp
 | 
			
		||||
   should be updated with details about the new extensions functions. These
 | 
			
		||||
   tests are run using 'make check'
 | 
			
		||||
</li>
 | 
			
		||||
</ul>
 | 
			
		||||
</p>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -2,19 +2,19 @@
 | 
			
		||||
<html lang="en">
 | 
			
		||||
<head>
 | 
			
		||||
  <meta http-equiv="content-type" content="text/html; charset=utf-8">
 | 
			
		||||
  <title>GL Dispatch</title>
 | 
			
		||||
  <title>GL Dispatch in Mesa</title>
 | 
			
		||||
  <link rel="stylesheet" type="text/css" href="mesa.css">
 | 
			
		||||
</head>
 | 
			
		||||
<body>
 | 
			
		||||
 | 
			
		||||
<div class="header">
 | 
			
		||||
  The Mesa 3D Graphics Library
 | 
			
		||||
  <h1>The Mesa 3D Graphics Library</h1>
 | 
			
		||||
</div>
 | 
			
		||||
 | 
			
		||||
<iframe src="contents.html"></iframe>
 | 
			
		||||
<div class="content">
 | 
			
		||||
 | 
			
		||||
<h1>GL Dispatch</h1>
 | 
			
		||||
<h1>GL Dispatch in Mesa</h1>
 | 
			
		||||
 | 
			
		||||
<p>Several factors combine to make efficient dispatch of OpenGL functions
 | 
			
		||||
fairly complicated.  This document attempts to explain some of the issues
 | 
			
		||||
@@ -30,28 +30,28 @@ of the GL related state for the application.  Every texture, every buffer
 | 
			
		||||
object, every enable, and much, much more is stored in the context.  Since
 | 
			
		||||
an application can have more than one context, the context to be used is
 | 
			
		||||
selected by a window-system dependent function such as
 | 
			
		||||
<code>glXMakeContextCurrent</code>.</p>
 | 
			
		||||
<tt>glXMakeContextCurrent</tt>.</p>
 | 
			
		||||
 | 
			
		||||
<p>In environments that implement OpenGL with X-Windows using GLX, every GL
 | 
			
		||||
function, including the pointers returned by <code>glXGetProcAddress</code>, are
 | 
			
		||||
function, including the pointers returned by <tt>glXGetProcAddress</tt>, are
 | 
			
		||||
<em>context independent</em>.  This means that no matter what context is
 | 
			
		||||
currently active, the same <code>glVertex3fv</code> function is used.</p>
 | 
			
		||||
currently active, the same <tt>glVertex3fv</tt> function is used.</p>
 | 
			
		||||
 | 
			
		||||
<p>This creates the first bit of dispatch complexity.  An application can
 | 
			
		||||
have two GL contexts.  One context is a direct rendering context where
 | 
			
		||||
function calls are routed directly to a driver loaded within the
 | 
			
		||||
application's address space.  The other context is an indirect rendering
 | 
			
		||||
context where function calls are converted to GLX protocol and sent to a
 | 
			
		||||
server.  The same <code>glVertex3fv</code> has to do the right thing depending
 | 
			
		||||
server.  The same <tt>glVertex3fv</tt> has to do the right thing depending
 | 
			
		||||
on which context is current.</p>
 | 
			
		||||
 | 
			
		||||
<p>Highly optimized drivers or GLX protocol implementations may want to
 | 
			
		||||
change the behavior of GL functions depending on current state.  For
 | 
			
		||||
example, <code>glFogCoordf</code> may operate differently depending on whether
 | 
			
		||||
example, <tt>glFogCoordf</tt> may operate differently depending on whether
 | 
			
		||||
or not fog is enabled.</p>
 | 
			
		||||
 | 
			
		||||
<p>In multi-threaded environments, it is possible for each thread to have a
 | 
			
		||||
different GL context current.  This means that poor old <code>glVertex3fv</code>
 | 
			
		||||
different GL context current.  This means that poor old <tt>glVertex3fv</tt>
 | 
			
		||||
has to know which GL context is current in the thread where it is being
 | 
			
		||||
called.</p>
 | 
			
		||||
 | 
			
		||||
@@ -64,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,
 | 
			
		||||
these pointers a updated.</p>
 | 
			
		||||
 | 
			
		||||
<p>The implementation of functions such as <code>glVertex3fv</code> becomes
 | 
			
		||||
<p>The implementation of functions such as <tt>glVertex3fv</tt> becomes
 | 
			
		||||
conceptually simple:</p>
 | 
			
		||||
 | 
			
		||||
<ul>
 | 
			
		||||
<li>Fetch the current dispatch table pointer.</li>
 | 
			
		||||
<li>Fetch the pointer to the real <code>glVertex3fv</code> function from the
 | 
			
		||||
<li>Fetch the pointer to the real <tt>glVertex3fv</tt> function from the
 | 
			
		||||
table.</li>
 | 
			
		||||
<li>Call the real function.</li>
 | 
			
		||||
</ul>
 | 
			
		||||
 | 
			
		||||
<p>This can be implemented in just a few lines of C code.  The file
 | 
			
		||||
<code>src/mesa/glapi/glapitemp.h</code> contains code very similar to this.</p>
 | 
			
		||||
<tt>src/mesa/glapi/glapitemp.h</tt> contains code very similar to this.</p>
 | 
			
		||||
 | 
			
		||||
<blockquote>
 | 
			
		||||
<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>
 | 
			
		||||
 | 
			
		||||
<p>In a multithreaded environment, a naive implementation of
 | 
			
		||||
<code>GET_DISPATCH</code> involves a call to <code>pthread_getspecific</code> or a
 | 
			
		||||
<tt>GET_DISPATCH</tt> involves a call to <tt>pthread_getspecific</tt> or a
 | 
			
		||||
similar function.  Mesa provides a wrapper function called
 | 
			
		||||
<code>_glapi_get_dispatch</code> that is used by default.</p>
 | 
			
		||||
<tt>_glapi_get_dispatch</tt> that is used by default.</p>
 | 
			
		||||
 | 
			
		||||
<h2>3. Optimizations</h2>
 | 
			
		||||
 | 
			
		||||
@@ -109,7 +109,7 @@ each can or cannot be used are listed.</p>
 | 
			
		||||
<p>The vast majority of OpenGL applications use the API in a single threaded
 | 
			
		||||
manner.  That is, the application has only one thread that makes calls into
 | 
			
		||||
the GL.  In these cases, not only do the calls to
 | 
			
		||||
<code>pthread_getspecific</code> hurt performance, but they are completely
 | 
			
		||||
<tt>pthread_getspecific</tt> hurt performance, but they are completely
 | 
			
		||||
unnecessary!  It is possible to detect this common case and avoid these
 | 
			
		||||
calls.</p>
 | 
			
		||||
 | 
			
		||||
@@ -118,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>
 | 
			
		||||
 | 
			
		||||
<p>As long as an application is single threaded, Mesa stores a pointer to
 | 
			
		||||
the dispatch table in a global variable called <code>_glapi_Dispatch</code>.
 | 
			
		||||
the dispatch table in a global variable called <tt>_glapi_Dispatch</tt>.
 | 
			
		||||
The pointer is also stored in a per-thread location via
 | 
			
		||||
<code>pthread_setspecific</code>.  When Mesa detects that an application has
 | 
			
		||||
become multithreaded, <code>NULL</code> is stored in <code>_glapi_Dispatch</code>.</p>
 | 
			
		||||
<tt>pthread_setspecific</tt>.  When Mesa detects that an application has
 | 
			
		||||
become multithreaded, <tt>NULL</tt> is stored in <tt>_glapi_Dispatch</tt>.</p>
 | 
			
		||||
 | 
			
		||||
<p>Using this simple mechanism the dispatch functions can detect the
 | 
			
		||||
multithreaded case by comparing <code>_glapi_Dispatch</code> to <code>NULL</code>.
 | 
			
		||||
The resulting implementation of <code>GET_DISPATCH</code> is slightly more
 | 
			
		||||
complex, but it avoids the expensive <code>pthread_getspecific</code> call in
 | 
			
		||||
multithreaded case by comparing <tt>_glapi_Dispatch</tt> to <tt>NULL</tt>.
 | 
			
		||||
The resulting implementation of <tt>GET_DISPATCH</tt> is slightly more
 | 
			
		||||
complex, but it avoids the expensive <tt>pthread_getspecific</tt> call in
 | 
			
		||||
the common case.</p>
 | 
			
		||||
 | 
			
		||||
<blockquote>
 | 
			
		||||
@@ -134,9 +134,9 @@ the common case.</p>
 | 
			
		||||
<tr><td><pre>
 | 
			
		||||
#define GET_DISPATCH() \
 | 
			
		||||
    (_glapi_Dispatch != NULL) \
 | 
			
		||||
        ? _glapi_Dispatch : pthread_getspecific(&_glapi_Dispatch_key)
 | 
			
		||||
        ? _glapi_Dispatch : pthread_getspecific(&_glapi_Dispatch_key)
 | 
			
		||||
</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>
 | 
			
		||||
 | 
			
		||||
<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
 | 
			
		||||
of per-thread, global storage.  Variables can be put in this area using some
 | 
			
		||||
extensions to GCC.  By storing the dispatch table pointer in this area, the
 | 
			
		||||
expensive call to <code>pthread_getspecific</code> and the test of
 | 
			
		||||
<code>_glapi_Dispatch</code> can be avoided.</p>
 | 
			
		||||
expensive call to <tt>pthread_getspecific</tt> and the test of
 | 
			
		||||
<tt>_glapi_Dispatch</tt> can be avoided.</p>
 | 
			
		||||
 | 
			
		||||
<p>The dispatch table pointer is stored in a new variable called
 | 
			
		||||
<code>_glapi_tls_Dispatch</code>.  A new variable name is used so that a single
 | 
			
		||||
<tt>_glapi_tls_Dispatch</tt>.  A new variable name is used so that a single
 | 
			
		||||
libGL can implement both interfaces.  This allows the libGL to operate with
 | 
			
		||||
direct rendering drivers that use either interface.  Once the pointer is
 | 
			
		||||
properly declared, <code>GET_DISPACH</code> becomes a simple variable
 | 
			
		||||
properly declared, <tt>GET_DISPACH</tt> becomes a simple variable
 | 
			
		||||
reference.</p>
 | 
			
		||||
 | 
			
		||||
<blockquote>
 | 
			
		||||
@@ -162,12 +162,12 @@ extern __thread struct _glapi_table *_glapi_tls_Dispatch
 | 
			
		||||
 | 
			
		||||
#define GET_DISPATCH() _glapi_tls_Dispatch
 | 
			
		||||
</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>
 | 
			
		||||
 | 
			
		||||
<p>Use of this path is controlled by the preprocessor define
 | 
			
		||||
<code>USE_ELF_TLS</code>.  Any platform capable of using ELF TLS should use this
 | 
			
		||||
as the default dispatch method.</p>
 | 
			
		||||
<tt>GLX_USE_TLS</tt>.  Any platform capable of using TLS should use this as
 | 
			
		||||
the default dispatch method.</p>
 | 
			
		||||
 | 
			
		||||
<h3>3.3. Assembly Language Dispatch Stubs</h3>
 | 
			
		||||
 | 
			
		||||
@@ -185,13 +185,13 @@ ways that the dispatch table pointer can be accessed.  There are four
 | 
			
		||||
different methods that can be used:</p>
 | 
			
		||||
 | 
			
		||||
<ol>
 | 
			
		||||
<li>Using <code>_glapi_Dispatch</code> directly in builds for non-multithreaded
 | 
			
		||||
<li>Using <tt>_glapi_Dispatch</tt> directly in builds for non-multithreaded
 | 
			
		||||
environments.</li>
 | 
			
		||||
<li>Using <code>_glapi_Dispatch</code> and <code>_glapi_get_dispatch</code> in
 | 
			
		||||
<li>Using <tt>_glapi_Dispatch</tt> and <tt>_glapi_get_dispatch</tt> in
 | 
			
		||||
multithreaded environments.</li>
 | 
			
		||||
<li>Using <code>_glapi_Dispatch</code> and <code>pthread_getspecific</code> in
 | 
			
		||||
<li>Using <tt>_glapi_Dispatch</tt> and <tt>pthread_getspecific</tt> in
 | 
			
		||||
multithreaded environments.</li>
 | 
			
		||||
<li>Using <code>_glapi_tls_Dispatch</code> directly in TLS enabled
 | 
			
		||||
<li>Using <tt>_glapi_tls_Dispatch</tt> directly in TLS enabled
 | 
			
		||||
multithreaded environments.</li>
 | 
			
		||||
</ol>
 | 
			
		||||
 | 
			
		||||
@@ -204,13 +204,13 @@ terribly relevant.</p>
 | 
			
		||||
few preprocessor defines.</p>
 | 
			
		||||
 | 
			
		||||
<ul>
 | 
			
		||||
<li>If <code>USE_ELF_TLS</code> is defined, method #3 is used.</li>
 | 
			
		||||
<li>If <code>HAVE_PTHREAD</code> is defined, method #2 is used.</li>
 | 
			
		||||
<li>If <tt>GLX_USE_TLS</tt> is defined, method #3 is used.</li>
 | 
			
		||||
<li>If <tt>HAVE_PTHREAD</tt> is defined, method #2 is used.</li>
 | 
			
		||||
<li>If none of the preceding are defined, method #1 is used.</li>
 | 
			
		||||
</ul>
 | 
			
		||||
 | 
			
		||||
<p>Two different techniques are used to handle the various different cases.
 | 
			
		||||
On x86 and SPARC, a macro called <code>GL_STUB</code> is used.  In the preamble
 | 
			
		||||
On x86 and SPARC, a macro called <tt>GL_STUB</tt> is used.  In the preamble
 | 
			
		||||
of the assembly source file different implementations of the macro are
 | 
			
		||||
selected based on the defined preprocessor variables.  The assembly code
 | 
			
		||||
then consists of a series of invocations of the macros such as:
 | 
			
		||||
@@ -220,7 +220,7 @@ then consists of a series of invocations of the macros such as:
 | 
			
		||||
<tr><td><pre>
 | 
			
		||||
GL_STUB(Color3fv, _gloffset_Color3fv)
 | 
			
		||||
</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>
 | 
			
		||||
 | 
			
		||||
<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
 | 
			
		||||
function.  For example, since x86 passes all parameters on the stack, no
 | 
			
		||||
additional code is needed to save and restore function parameters around a
 | 
			
		||||
call to <code>pthread_getspecific</code>.  Since x86-64 passes parameters in
 | 
			
		||||
call to <tt>pthread_getspecific</tt>.  Since x86-64 passes parameters in
 | 
			
		||||
registers, varying amounts of code needs to be inserted around the call to
 | 
			
		||||
<code>pthread_getspecific</code> to save and restore the GL function's
 | 
			
		||||
<tt>pthread_getspecific</tt> to save and restore the GL function's
 | 
			
		||||
parameters.</p>
 | 
			
		||||
 | 
			
		||||
<p>The other technique, used by platforms like x86-64 that cannot use the
 | 
			
		||||
first technique, is to insert <code>#ifdef</code> within the assembly
 | 
			
		||||
first technique, is to insert <tt>#ifdef</tt> within the assembly
 | 
			
		||||
implementation of each function.  This makes the assembly file considerably
 | 
			
		||||
larger (e.g., 29,332 lines for <code>glapi_x86-64.S</code> versus 1,155 lines for
 | 
			
		||||
<code>glapi_x86.S</code>) and causes simple changes to the function
 | 
			
		||||
larger (e.g., 29,332 lines for <tt>glapi_x86-64.S</tt> versus 1,155 lines for
 | 
			
		||||
<tt>glapi_x86.S</tt>) and causes simple changes to the function
 | 
			
		||||
implementation to generate many lines of diffs.  Since the assembly files
 | 
			
		||||
are typically generated by scripts (see <a href="#autogen">below</a>), this
 | 
			
		||||
isn't a significant problem.</p>
 | 
			
		||||
 | 
			
		||||
<p>Once a new assembly file is created, it must be inserted in the build
 | 
			
		||||
system.  There are two steps to this.  The file must first be added to
 | 
			
		||||
<code>src/mesa/sources</code>.  That gets the file built and linked.  The second
 | 
			
		||||
step is to add the correct <code>#ifdef</code> magic to
 | 
			
		||||
<code>src/mesa/glapi/glapi_dispatch.c</code> to prevent the C version of the
 | 
			
		||||
<tt>src/mesa/sources</tt>.  That gets the file built and linked.  The second
 | 
			
		||||
step is to add the correct <tt>#ifdef</tt> magic to
 | 
			
		||||
<tt>src/mesa/glapi/glapi_dispatch.c</tt> to prevent the C version of the
 | 
			
		||||
dispatch functions from being built.</p>
 | 
			
		||||
 | 
			
		||||
<h3 id="fixedsize">3.4. Fixed-Length Dispatch Stubs</h3>
 | 
			
		||||
 | 
			
		||||
<p>To implement <code>glXGetProcAddress</code>, Mesa stores a table that
 | 
			
		||||
<p>To implement <tt>glXGetProcAddress</tt>, Mesa stores a table that
 | 
			
		||||
associates function names with pointers to those functions.  This table is
 | 
			
		||||
stored in <code>src/mesa/glapi/glprocs.h</code>.  For different reasons on
 | 
			
		||||
stored in <tt>src/mesa/glapi/glprocs.h</tt>.  For different reasons on
 | 
			
		||||
different platforms, storing all of those pointers is inefficient.  On most
 | 
			
		||||
platforms, including all known platforms that support TLS, we can avoid this
 | 
			
		||||
added overhead.</p>
 | 
			
		||||
@@ -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
 | 
			
		||||
dispatch stub.</p>
 | 
			
		||||
 | 
			
		||||
<p>This path is activated by adding the correct <code>#ifdef</code> magic to
 | 
			
		||||
<code>src/mesa/glapi/glapi.c</code> just before <code>glprocs.h</code> is
 | 
			
		||||
<p>This path is activated by adding the correct <tt>#ifdef</tt> magic to
 | 
			
		||||
<tt>src/mesa/glapi/glapi.c</tt> just before <tt>glprocs.h</tt> is
 | 
			
		||||
included.</p>
 | 
			
		||||
 | 
			
		||||
<h2 id="autogen">4. Automatic Generation of Dispatch Stubs</h2>
 | 
			
		||||
 
 | 
			
		||||
@@ -2,21 +2,19 @@
 | 
			
		||||
<html lang="en">
 | 
			
		||||
<head>
 | 
			
		||||
  <meta http-equiv="content-type" content="text/html; charset=utf-8">
 | 
			
		||||
  <title>Downloading and Unpacking</title>
 | 
			
		||||
  <title>Getting Mesa</title>
 | 
			
		||||
  <link rel="stylesheet" type="text/css" href="mesa.css">
 | 
			
		||||
</head>
 | 
			
		||||
<body>
 | 
			
		||||
 | 
			
		||||
<div class="header">
 | 
			
		||||
  The Mesa 3D Graphics Library
 | 
			
		||||
  <h1>The Mesa 3D Graphics Library</h1>
 | 
			
		||||
</div>
 | 
			
		||||
 | 
			
		||||
<iframe src="contents.html"></iframe>
 | 
			
		||||
<div class="content">
 | 
			
		||||
 | 
			
		||||
<h1>Downloading and Unpacking</h1>
 | 
			
		||||
 | 
			
		||||
<h2>Downloading</h2>
 | 
			
		||||
<h1>Downloading</h1>
 | 
			
		||||
 | 
			
		||||
<p>
 | 
			
		||||
Primary Mesa download site:
 | 
			
		||||
@@ -27,38 +25,54 @@ or <a href="https://mesa.freedesktop.org/archive/">mesa.freedesktop.org</a>
 | 
			
		||||
 | 
			
		||||
<p>
 | 
			
		||||
Starting with the first release of 2017, Mesa's version scheme is
 | 
			
		||||
year-based. Filenames are in the form <code>mesa-Y.N.P.tar.gz</code>, where
 | 
			
		||||
<code>Y</code> is the year (two digits), <code>N</code> is an incremental number
 | 
			
		||||
(starting at 0) and <code>P</code> is the patch number (0 for the first
 | 
			
		||||
year-based. Filenames are in the form <tt>mesa-Y.N.P.tar.gz</tt>, where
 | 
			
		||||
<tt>Y</tt> is the year (two digits), <tt>N</tt> is an incremental number
 | 
			
		||||
(starting at 0) and <tt>P</tt> is the patch number (0 for the first
 | 
			
		||||
release, 1 for the first patch after that).
 | 
			
		||||
</p>
 | 
			
		||||
 | 
			
		||||
<p>
 | 
			
		||||
When a new release is coming, release candidates (betas) may be found
 | 
			
		||||
in the same directory, and are recognisable by the
 | 
			
		||||
<code>mesa-Y.N.P-<b>rc</b>X.tar.gz</code> filename.
 | 
			
		||||
<tt>mesa-Y.N.P-<b>rc</b>X.tar.gz</tt> filename.
 | 
			
		||||
</p>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
<h2>Unpacking</h2>
 | 
			
		||||
<h1>Unpacking</h1>
 | 
			
		||||
 | 
			
		||||
<p>
 | 
			
		||||
Mesa releases are available in two formats: <code>.tar.xz</code> and <code>.tar.gz</code>.
 | 
			
		||||
Mesa releases are available in two formats: <tt>.tar.xz</tt> and <tt>.tar.gz</tt>.
 | 
			
		||||
</p>
 | 
			
		||||
 | 
			
		||||
<p>
 | 
			
		||||
To unpack the tarball:
 | 
			
		||||
</p>
 | 
			
		||||
<pre>
 | 
			
		||||
	tar xf mesa-Y.N.P.tar.xz
 | 
			
		||||
</pre>
 | 
			
		||||
<p>or</p>
 | 
			
		||||
or
 | 
			
		||||
<pre>
 | 
			
		||||
	tar xf mesa-Y.N.P.tar.gz
 | 
			
		||||
</pre>
 | 
			
		||||
</p>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
<h2>Contents</h2>
 | 
			
		||||
<h1>Contents</h1>
 | 
			
		||||
 | 
			
		||||
<p>
 | 
			
		||||
After unpacking you'll have these files and directories (among others):
 | 
			
		||||
</p>
 | 
			
		||||
<pre>
 | 
			
		||||
autogen.sh	- Autoconf script for *nix systems
 | 
			
		||||
scons/		- SCons script for Windows builds
 | 
			
		||||
include/	- GL header (include) files
 | 
			
		||||
bin/		- shell scripts for making shared libraries, etc
 | 
			
		||||
docs/		- documentation
 | 
			
		||||
src/		- source code for libraries
 | 
			
		||||
src/mesa	- sources for the main Mesa library and device drivers
 | 
			
		||||
src/gallium     - sources for Gallium and Gallium drivers
 | 
			
		||||
src/glx		- sources for building libGL with full GLX and DRI support
 | 
			
		||||
</pre>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
<p>
 | 
			
		||||
Proceed to the <a href="install.html">compilation and installation
 | 
			
		||||
@@ -66,7 +80,7 @@ instructions</a>.
 | 
			
		||||
</p>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
<h2>Demos, GLUT, and GLU</h2>
 | 
			
		||||
<h1>Demos, GLUT, and GLU</h1>
 | 
			
		||||
 | 
			
		||||
<p>
 | 
			
		||||
A package of SGI's GLU library is available
 | 
			
		||||
@@ -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
 | 
			
		||||
were split off into their own git repositories:
 | 
			
		||||
 | 
			
		||||
<a href="https://gitlab.freedesktop.org/mesa/glut">GLUT</a>,
 | 
			
		||||
<a href="https://gitlab.freedesktop.org/mesa/glu">GLU</a> and
 | 
			
		||||
<a href="https://gitlab.freedesktop.org/mesa/demos">Demos</a>,
 | 
			
		||||
<a href="https://cgit.freedesktop.org/mesa/glut/">GLUT</a>,
 | 
			
		||||
<a href="https://cgit.freedesktop.org/mesa/glu/">GLU</a> and
 | 
			
		||||
<a href="https://cgit.freedesktop.org/mesa/demos/">Demos</a>,
 | 
			
		||||
</p>
 | 
			
		||||
 | 
			
		||||
</div>
 | 
			
		||||
 
 | 
			
		||||
@@ -2,19 +2,19 @@
 | 
			
		||||
<html lang="en">
 | 
			
		||||
<head>
 | 
			
		||||
  <meta http-equiv="content-type" content="text/html; charset=utf-8">
 | 
			
		||||
  <title>EGL</title>
 | 
			
		||||
  <title>Mesa EGL</title>
 | 
			
		||||
  <link rel="stylesheet" type="text/css" href="mesa.css">
 | 
			
		||||
</head>
 | 
			
		||||
<body>
 | 
			
		||||
 | 
			
		||||
<div class="header">
 | 
			
		||||
  The Mesa 3D Graphics Library
 | 
			
		||||
  <h1>The Mesa 3D Graphics Library</h1>
 | 
			
		||||
</div>
 | 
			
		||||
 | 
			
		||||
<iframe src="contents.html"></iframe>
 | 
			
		||||
<div class="content">
 | 
			
		||||
 | 
			
		||||
<h1>EGL</h1>
 | 
			
		||||
<h1>Mesa EGL</h1>
 | 
			
		||||
 | 
			
		||||
<p>The current version of EGL in Mesa implements EGL 1.4.  More information
 | 
			
		||||
about EGL can be found at
 | 
			
		||||
@@ -33,16 +33,13 @@ directly dispatched to the drivers.</p>
 | 
			
		||||
 | 
			
		||||
<ol>
 | 
			
		||||
<li>
 | 
			
		||||
<p>Configure your build with the desired client APIs and enable
 | 
			
		||||
the driver for your hardware.  For example:</p>
 | 
			
		||||
<p>Run <code>configure</code> with the desired client APIs and enable
 | 
			
		||||
the driver for your hardware.  For example</p>
 | 
			
		||||
 | 
			
		||||
<pre>
 | 
			
		||||
$ meson configure \
 | 
			
		||||
        -D egl=true \
 | 
			
		||||
        -D gles1=true \
 | 
			
		||||
        -D gles2=true \
 | 
			
		||||
        -D dri-drivers=... \
 | 
			
		||||
        -D gallium-drivers=...
 | 
			
		||||
  $ ./configure --enable-gles1 --enable-gles2 \
 | 
			
		||||
                --with-dri-drivers=... \
 | 
			
		||||
                --with-gallium-drivers=...
 | 
			
		||||
</pre>
 | 
			
		||||
 | 
			
		||||
<p>The main library and OpenGL is enabled by default.  The first two options
 | 
			
		||||
@@ -64,7 +61,7 @@ or more EGL drivers.</p>
 | 
			
		||||
time</p>
 | 
			
		||||
 | 
			
		||||
<dl>
 | 
			
		||||
<dt><code>-D egl=true</code></dt>
 | 
			
		||||
<dt><code>--enable-egl</code></dt>
 | 
			
		||||
<dd>
 | 
			
		||||
 | 
			
		||||
<p>By default, EGL is enabled.  When disabled, the main library and the drivers
 | 
			
		||||
@@ -72,11 +69,19 @@ will not be built.</p>
 | 
			
		||||
 | 
			
		||||
</dd>
 | 
			
		||||
 | 
			
		||||
<dt><code>-D platforms=...</code></dt>
 | 
			
		||||
<dt><code>--with-egl-driver-dir</code></dt>
 | 
			
		||||
<dd>
 | 
			
		||||
 | 
			
		||||
<p>The directory EGL drivers should be installed to.  If not specified, EGL
 | 
			
		||||
drivers will be installed to <code>${libdir}/egl</code>.</p>
 | 
			
		||||
 | 
			
		||||
</dd>
 | 
			
		||||
 | 
			
		||||
<dt><code>--with-platforms</code></dt>
 | 
			
		||||
<dd>
 | 
			
		||||
 | 
			
		||||
<p>List the platforms (window systems) to support.  Its argument is a comma
 | 
			
		||||
separated string such as <code>-D platforms=x11,drm</code>.  It decides
 | 
			
		||||
separated string such as <code>--with-platforms=x11,drm</code>.  It decides
 | 
			
		||||
the platforms a driver may support.  The first listed platform is also used by
 | 
			
		||||
the main library to decide the native platform.</p>
 | 
			
		||||
 | 
			
		||||
@@ -85,13 +90,15 @@ the main library to decide the native platform.</p>
 | 
			
		||||
and <code>haiku</code>.
 | 
			
		||||
The <code>android</code> platform can either be built as a system
 | 
			
		||||
component, part of AOSP, using <code>Android.mk</code> files, or
 | 
			
		||||
cross-compiled using appropriate options.
 | 
			
		||||
cross-compiled using appropriate <code>configure</code> options.
 | 
			
		||||
The <code>haiku</code> platform can only be built with SCons.
 | 
			
		||||
Unless for special needs, the build system should
 | 
			
		||||
select the right platforms automatically.</p>
 | 
			
		||||
 | 
			
		||||
</dd>
 | 
			
		||||
 | 
			
		||||
<dt><code>-D gles1=true</code> and <code>-D gles2=true</code></dt>
 | 
			
		||||
<dt><code>--enable-gles1</code></dt>
 | 
			
		||||
<dt><code>--enable-gles2</code></dt>
 | 
			
		||||
<dd>
 | 
			
		||||
 | 
			
		||||
<p>These options enable OpenGL ES support in OpenGL.  The result is one big
 | 
			
		||||
@@ -99,7 +106,7 @@ internal library that supports multiple APIs.</p>
 | 
			
		||||
 | 
			
		||||
</dd>
 | 
			
		||||
 | 
			
		||||
<dt><code>-D shared-glapi=true</code></dt>
 | 
			
		||||
<dt><code>--enable-shared-glapi</code></dt>
 | 
			
		||||
<dd>
 | 
			
		||||
 | 
			
		||||
<p>By default, <code>libGL</code> has its own copy of <code>libglapi</code>.
 | 
			
		||||
@@ -127,9 +134,9 @@ runtime</p>
 | 
			
		||||
<dd>
 | 
			
		||||
 | 
			
		||||
<p>This variable specifies the native platform.  The valid values are the same
 | 
			
		||||
as those for <code>-D platforms=...</code>.  When the variable is not set,
 | 
			
		||||
as those for <code>--with-platforms</code>.  When the variable is not set,
 | 
			
		||||
the main library uses the first platform listed in
 | 
			
		||||
<code>-D platforms=...</code> as the native platform.</p>
 | 
			
		||||
<code>--with-platforms</code> as the native platform.</p>
 | 
			
		||||
 | 
			
		||||
<p>Extensions like <code>EGL_MESA_drm_display</code> define new functions to
 | 
			
		||||
create displays for non-native platforms.  These extensions are usually used by
 | 
			
		||||
@@ -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>
 | 
			
		||||
 | 
			
		||||
</dd>
 | 
			
		||||
</dl>
 | 
			
		||||
 | 
			
		||||
<h2>Packaging</h2>
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -8,7 +8,7 @@
 | 
			
		||||
<body>
 | 
			
		||||
 | 
			
		||||
<div class="header">
 | 
			
		||||
  The Mesa 3D Graphics Library
 | 
			
		||||
  <h1>The Mesa 3D Graphics Library</h1>
 | 
			
		||||
</div>
 | 
			
		||||
 | 
			
		||||
<iframe src="contents.html"></iframe>
 | 
			
		||||
@@ -25,206 +25,117 @@ sometimes be useful for debugging end-user issues.
 | 
			
		||||
 | 
			
		||||
<h2>LibGL environment variables</h2>
 | 
			
		||||
 | 
			
		||||
<dl>
 | 
			
		||||
<dt><code>LIBGL_DEBUG</code></dt>
 | 
			
		||||
<dd>If defined debug information will be printed to stderr.
 | 
			
		||||
    If set to <code>verbose</code> additional information will be
 | 
			
		||||
    printed.</dd>
 | 
			
		||||
<dt><code>LIBGL_DRIVERS_PATH</code></dt>
 | 
			
		||||
<dd>colon-separated list of paths to search for DRI drivers</dd>
 | 
			
		||||
<dt><code>LIBGL_ALWAYS_INDIRECT</code></dt>
 | 
			
		||||
<dd>if set to <code>true</code>, forces an indirect rendering
 | 
			
		||||
    context/connection.</dd>
 | 
			
		||||
<dt><code>LIBGL_ALWAYS_SOFTWARE</code></dt>
 | 
			
		||||
<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>
 | 
			
		||||
<ul>
 | 
			
		||||
<li>LIBGL_DEBUG - If defined debug information will be printed to stderr.
 | 
			
		||||
   If set to 'verbose' additional information will be printed.
 | 
			
		||||
<li>LIBGL_DRIVERS_PATH - colon-separated list of paths to search for DRI drivers
 | 
			
		||||
<li>LIBGL_ALWAYS_INDIRECT - if set to `true`, forces an indirect rendering context/connection.
 | 
			
		||||
<li>LIBGL_ALWAYS_SOFTWARE - if set to `true`, always use software rendering
 | 
			
		||||
<li>LIBGL_NO_DRAWARRAYS - if set to `true`, do not use DrawArrays GLX protocol (for debugging)
 | 
			
		||||
<li>LIBGL_SHOW_FPS - print framerate to stdout based on the number of glXSwapBuffers
 | 
			
		||||
    calls per second.
 | 
			
		||||
<li>LIBGL_DRI3_DISABLE - disable DRI3 if set to `true`.
 | 
			
		||||
</ul>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
<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>
 | 
			
		||||
  <li>The format should be <code>MAJOR.MINOR[FC|COMPAT]</code>
 | 
			
		||||
  <li><code>FC</code> is an optional suffix that indicates a forward
 | 
			
		||||
      compatible context. This is only valid for versions >= 3.0.
 | 
			
		||||
  <li><code>COMPAT</code> is an optional suffix that indicates a
 | 
			
		||||
      compatibility context or <code>GL_ARB_compatibility</code> support.
 | 
			
		||||
      This is only valid for versions >= 3.1.
 | 
			
		||||
  <li>GL versions <= 3.0 are set to a compatibility (non-Core)
 | 
			
		||||
      profile
 | 
			
		||||
  <li>GL versions = 3.1, depending on the driver, it may or may not
 | 
			
		||||
      have the <code>ARB_compatibility</code> extension enabled.
 | 
			
		||||
  <li>GL versions >= 3.2 are set to a Core profile
 | 
			
		||||
  <li>Examples:
 | 
			
		||||
  <dl>
 | 
			
		||||
    <dt><code>2.1</code></dt>
 | 
			
		||||
    <dd>select a compatibility (non-Core) profile with GL version 2.1.</dd>
 | 
			
		||||
    <dt><code>3.0</code></dt>
 | 
			
		||||
    <dd>select a compatibility (non-Core) profile with GL version 3.0.</dd>
 | 
			
		||||
    <dt><code>3.0FC</code></dt>
 | 
			
		||||
    <dd>select a Core+Forward Compatible profile with GL version 3.0.</dd>
 | 
			
		||||
    <dt><code>3.1</code></dt>
 | 
			
		||||
    <dd>select GL version 3.1 with <code>GL_ARB_compatibility</code>
 | 
			
		||||
        enabled per the driver default.</dd>
 | 
			
		||||
    <dt><code>3.1FC</code></dt>
 | 
			
		||||
    <dd>select GL version 3.1 with forward compatibility and
 | 
			
		||||
        <code>GL_ARB_compatibility</code> disabled.</dd>
 | 
			
		||||
    <dt><code>3.1COMPAT</code></dt>
 | 
			
		||||
    <dd>select GL version 3.1 with <code>GL_ARB_compatibility</code>
 | 
			
		||||
        enabled.</dd>
 | 
			
		||||
    <dt><code>X.Y</code></dt>
 | 
			
		||||
    <dd>override GL version to X.Y without changing the profile.</dd>
 | 
			
		||||
    <dt><code>X.YFC</code></dt>
 | 
			
		||||
    <dd>select a Core+Forward Compatible profile with GL version X.Y.</dd>
 | 
			
		||||
    <dt><code>X.YCOMPAT</code></dt>
 | 
			
		||||
    <dd>select a Compatibility profile with GL version X.Y.</dd>
 | 
			
		||||
  </dl>
 | 
			
		||||
  <li>Mesa may not really implement all the features of the given
 | 
			
		||||
      version. (for developers only)
 | 
			
		||||
<li>MESA_NO_ASM - if set, disables all assembly language optimizations
 | 
			
		||||
<li>MESA_NO_MMX - if set, disables Intel MMX optimizations
 | 
			
		||||
<li>MESA_NO_3DNOW - if set, disables AMD 3DNow! optimizations
 | 
			
		||||
<li>MESA_NO_SSE - if set, disables Intel SSE optimizations
 | 
			
		||||
<li>MESA_NO_ERROR - if set to 1, error checking is disabled as per KHR_no_error.
 | 
			
		||||
   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.</li>
 | 
			
		||||
<li>MESA_DEBUG - if set, error messages are printed to stderr.  For example,
 | 
			
		||||
   if the application generates a GL_INVALID_ENUM error, a corresponding error
 | 
			
		||||
   message indicating where the error occurred, and possibly why, will be
 | 
			
		||||
   printed to stderr.<br>
 | 
			
		||||
 | 
			
		||||
   For release builds, MESA_DEBUG defaults to off (no debug output).
 | 
			
		||||
 | 
			
		||||
   MESA_DEBUG accepts the following comma-separated list of named
 | 
			
		||||
   flags, which adds extra behaviour to just set MESA_DEBUG=1:
 | 
			
		||||
   <ul>
 | 
			
		||||
     <li>silent - turn off debug messages. Only useful for debug builds.</li>
 | 
			
		||||
     <li>flush - flush after each drawing command</li>
 | 
			
		||||
     <li>incomplete_tex - extra debug messages when a texture is incomplete</li>
 | 
			
		||||
     <li>incomplete_fbo - extra debug messages when a fbo is incomplete</li>
 | 
			
		||||
     <li>context - create a debug context (see GLX_CONTEXT_DEBUG_BIT_ARB) and
 | 
			
		||||
         print error and performance messages to stderr (or MESA_LOG_FILE).</li>
 | 
			
		||||
   </ul>
 | 
			
		||||
<li>MESA_LOG_FILE - specifies a file name for logging all errors, warnings,
 | 
			
		||||
etc., rather than stderr
 | 
			
		||||
<li>MESA_TEX_PROG - if set, implement conventional texture env modes with
 | 
			
		||||
fragment programs (intended for developers only)
 | 
			
		||||
<li>MESA_TNL_PROG - if set, implement conventional vertex transformation
 | 
			
		||||
operations with vertex programs (intended for developers only).
 | 
			
		||||
Setting this variable automatically sets the MESA_TEX_PROG variable as well.
 | 
			
		||||
<li>MESA_EXTENSION_OVERRIDE - can be used to enable/disable extensions.
 | 
			
		||||
A value such as "GL_EXT_foo -GL_EXT_bar" will enable the GL_EXT_foo extension
 | 
			
		||||
and disable the GL_EXT_bar extension.
 | 
			
		||||
<li>MESA_EXTENSION_MAX_YEAR - The GL_EXTENSIONS 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.
 | 
			
		||||
<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>
 | 
			
		||||
</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.
 | 
			
		||||
(for developers only)
 | 
			
		||||
</ul>
 | 
			
		||||
</dd>
 | 
			
		||||
<dt><code>MESA_GLSL_VERSION_OVERRIDE</code></dt>
 | 
			
		||||
<dd>changes the value returned by
 | 
			
		||||
    <code>glGetString(GL_SHADING_LANGUAGE_VERSION)</code>.
 | 
			
		||||
    Valid values are integers, such as <code>130</code>.  Mesa will not
 | 
			
		||||
    really implement all the features of the given language version if
 | 
			
		||||
    it's higher than what's normally reported. (for developers only)
 | 
			
		||||
</dd>
 | 
			
		||||
<dt><code>MESA_GLSL_CACHE_DISABLE</code></dt>
 | 
			
		||||
<dd>if set to <code>true</code>, disables the GLSL shader cache</dd>
 | 
			
		||||
<dt><code>MESA_GLSL_CACHE_MAX_SIZE</code></dt>
 | 
			
		||||
<dd>if set, determines the maximum size of the on-disk cache of compiled GLSL
 | 
			
		||||
    programs. Should be set to a number optionally followed by <code>K</code>,
 | 
			
		||||
    <code>M</code>, or <code>G</code> to specify a size in kilobytes,
 | 
			
		||||
    megabytes, or gigabytes. By default, gigabytes will be assumed. And if
 | 
			
		||||
    unset, a maximum size of 1GB will be used. Note: A separate cache might
 | 
			
		||||
    be created for each architecture that Mesa is installed for on your
 | 
			
		||||
    system. For example under the default settings you may end up with a 1GB
 | 
			
		||||
    cache for x86_64 and another 1GB cache for i386.</dd>
 | 
			
		||||
<dt><code>MESA_GLSL_CACHE_DIR</code></dt>
 | 
			
		||||
<dd>if set, determines the directory to be used for the on-disk cache of
 | 
			
		||||
    compiled GLSL programs. If this variable is not set, then the cache will
 | 
			
		||||
    be stored in <code>$XDG_CACHE_HOME/mesa_shader_cache</code> (if that
 | 
			
		||||
    variable is set), or else within <code>.cache/mesa_shader_cache</code>
 | 
			
		||||
    within the user's home directory.
 | 
			
		||||
</dd>
 | 
			
		||||
<dt><code>MESA_GLSL</code></dt>
 | 
			
		||||
<dd><a href="shading.html#envvars">shading language compiler options</a></dd>
 | 
			
		||||
<dt><code>MESA_NO_MINMAX_CACHE</code></dt>
 | 
			
		||||
<dd>when set, the minmax index cache is globally disabled.</dd>
 | 
			
		||||
<dt><code>MESA_SHADER_CAPTURE_PATH</code></dt>
 | 
			
		||||
<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>
 | 
			
		||||
<li>MESA_GLES_VERSION_OVERRIDE - changes the value returned by
 | 
			
		||||
glGetString(GL_VERSION) for OpenGL ES.
 | 
			
		||||
<ul>
 | 
			
		||||
<li> The format should be MAJOR.MINOR
 | 
			
		||||
<li> Examples: 2.0, 3.0, 3.1
 | 
			
		||||
<li> Mesa may not really implement all the features of the given version.
 | 
			
		||||
(for developers only)
 | 
			
		||||
</ul>
 | 
			
		||||
<li>MESA_GLSL_VERSION_OVERRIDE - changes the value returned by
 | 
			
		||||
glGetString(GL_SHADING_LANGUAGE_VERSION). Valid values are integers, such as
 | 
			
		||||
"130".  Mesa will not really implement all the features of the given language version
 | 
			
		||||
if it's higher than what's normally reported. (for developers only)
 | 
			
		||||
<li>MESA_GLSL_CACHE_DISABLE - if set to `true`, disables the GLSL shader cache
 | 
			
		||||
<li>MESA_GLSL_CACHE_MAX_SIZE - if set, determines the maximum size of
 | 
			
		||||
the on-disk cache of compiled GLSL programs. Should be set to a number
 | 
			
		||||
optionally followed by 'K', 'M', or 'G' to specify a size in
 | 
			
		||||
kilobytes, megabytes, or gigabytes. By default, gigabytes will be
 | 
			
		||||
assumed. And if unset, a maximum size of 1GB will be used. Note: A separate
 | 
			
		||||
cache might be created for each architecture that Mesa is installed for on
 | 
			
		||||
your system. For example under the default settings you may end up with a 1GB
 | 
			
		||||
cache for x86_64 and another 1GB cache for i386.
 | 
			
		||||
<li>MESA_GLSL_CACHE_DIR - if set, determines the directory to be used
 | 
			
		||||
for the on-disk cache of compiled GLSL programs. If this variable is
 | 
			
		||||
not set, then the cache will be stored in $XDG_CACHE_HOME/mesa (if
 | 
			
		||||
that variable is set), or else within .cache/mesa within the user's
 | 
			
		||||
home directory.
 | 
			
		||||
<li>MESA_GLSL - <a href="shading.html#envvars">shading language compiler options</a>
 | 
			
		||||
<li>MESA_NO_MINMAX_CACHE - when set, the minmax index cache is globally disabled.
 | 
			
		||||
<li>MESA_SHADER_CAPTURE_PATH - see <a href="shading.html#capture">Capturing Shaders</a></li>
 | 
			
		||||
<li>MESA_SHADER_DUMP_PATH and MESA_SHADER_READ_PATH - see <a href="shading.html#replacement">Experimenting with Shader Replacements</a></li>
 | 
			
		||||
</ul>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
<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.
 | 
			
		||||
See the <a href="xlibdriver.html">Xlib software driver page</a> for details.
 | 
			
		||||
</p>
 | 
			
		||||
<dl>
 | 
			
		||||
<dt><code>MESA_RGB_VISUAL</code></dt>
 | 
			
		||||
<dd>specifies the X visual and depth for RGB mode</dd>
 | 
			
		||||
<dt><code>MESA_CI_VISUAL</code></dt>
 | 
			
		||||
<dd>specifies the X visual and depth for CI mode</dd>
 | 
			
		||||
<dt><code>MESA_BACK_BUFFER</code></dt>
 | 
			
		||||
<dd>specifies how to implement the back color buffer, either
 | 
			
		||||
    <code>pixmap</code> or <code>ximage</code></dd>
 | 
			
		||||
<dt><code>MESA_GAMMA</code></dt>
 | 
			
		||||
<dd>gamma correction coefficients for red, green, blue channels</dd>
 | 
			
		||||
<dt><code>MESA_XSYNC</code></dt>
 | 
			
		||||
<dd>enable synchronous X behavior (for debugging only)</dd>
 | 
			
		||||
<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>
 | 
			
		||||
<ul>
 | 
			
		||||
<li>MESA_RGB_VISUAL - specifies the X visual and depth for RGB mode
 | 
			
		||||
<li>MESA_CI_VISUAL - specifies the X visual and depth for CI mode
 | 
			
		||||
<li>MESA_BACK_BUFFER - specifies how to implement the back color buffer,
 | 
			
		||||
    either "pixmap" or "ximage"
 | 
			
		||||
<li>MESA_GAMMA - gamma correction coefficients for red, green, blue channels
 | 
			
		||||
<li>MESA_XSYNC - enable synchronous X behavior (for debugging only)
 | 
			
		||||
<li>MESA_GLX_FORCE_CI - if set, force GLX to treat 8bpp visuals as CI visuals
 | 
			
		||||
<li>MESA_GLX_FORCE_ALPHA - if set, forces RGB windows to have an alpha channel.
 | 
			
		||||
<li>MESA_GLX_DEPTH_BITS - specifies default number of bits for depth buffer.
 | 
			
		||||
<li>MESA_GLX_ALPHA_BITS - specifies default number of bits for alpha channel.
 | 
			
		||||
</ul>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
<h2>i945/i965 driver environment variables (non-Gallium)</h2>
 | 
			
		||||
 | 
			
		||||
<dl>
 | 
			
		||||
<dt><code>INTEL_NO_HW</code></dt>
 | 
			
		||||
<dd>if set to 1, prevents batches from being submitted to the hardware.
 | 
			
		||||
    This is useful for debugging hangs, etc.</dd>
 | 
			
		||||
<dt><code>INTEL_DEBUG</code></dt>
 | 
			
		||||
<dd>a comma-separated list of named flags, which do various things:
 | 
			
		||||
<dl>
 | 
			
		||||
   <dt><code>ann</code></dt>
 | 
			
		||||
   <dd>annotate IR in assembly dumps</dd>
 | 
			
		||||
   <dt><code>aub</code></dt>
 | 
			
		||||
   <dd>dump batches into an AUB trace for use with simulation tools</dd>
 | 
			
		||||
   <dt><code>bat</code></dt>
 | 
			
		||||
   <dd>emit batch information</dd>
 | 
			
		||||
   <dt><code>blit</code></dt>
 | 
			
		||||
   <dd>emit messages about blit operations</dd>
 | 
			
		||||
   <dt><code>blorp</code></dt>
 | 
			
		||||
   <dd>emit messages about the blorp operations (blits & clears)</dd>
 | 
			
		||||
   <dt><code>buf</code></dt>
 | 
			
		||||
   <dd>emit messages about buffer objects</dd>
 | 
			
		||||
   <dt><code>clip</code></dt>
 | 
			
		||||
   <dd>emit messages about the clip unit (for old gens, includes the CLIP program)</dd>
 | 
			
		||||
   <dt><code>color</code></dt>
 | 
			
		||||
   <dd>use color in output</dd>
 | 
			
		||||
   <dt><code>cs</code></dt>
 | 
			
		||||
   <dd>dump shader assembly for compute shaders</dd>
 | 
			
		||||
   <dt><code>do32</code></dt>
 | 
			
		||||
   <dd>generate compute shader SIMD32 programs even if workgroup size doesn't exceed the SIMD16 limit</dd>
 | 
			
		||||
   <dt><code>dri</code></dt>
 | 
			
		||||
   <dd>emit messages about the DRI interface</dd>
 | 
			
		||||
   <dt><code>fbo</code></dt>
 | 
			
		||||
   <dd>emit messages about framebuffers</dd>
 | 
			
		||||
   <dt><code>fs</code></dt>
 | 
			
		||||
   <dd>dump shader assembly for fragment shaders</dd>
 | 
			
		||||
   <dt><code>gs</code></dt>
 | 
			
		||||
   <dd>dump shader assembly for geometry shaders</dd>
 | 
			
		||||
   <dt><code>hex</code></dt>
 | 
			
		||||
   <dd>print instruction hex dump with the disassembly</dd>
 | 
			
		||||
   <dt><code>l3</code></dt>
 | 
			
		||||
   <dd>emit messages about the new L3 state during transitions</dd>
 | 
			
		||||
   <dt><code>miptree</code></dt>
 | 
			
		||||
   <dd>emit messages about miptrees</dd>
 | 
			
		||||
   <dt><code>no8</code></dt>
 | 
			
		||||
   <dd>don't generate SIMD8 fragment shader</dd>
 | 
			
		||||
   <dt><code>no16</code></dt>
 | 
			
		||||
   <dd>suppress generation of 16-wide fragment shaders. useful for debugging broken shaders</dd>
 | 
			
		||||
   <dt><code>nocompact</code></dt>
 | 
			
		||||
   <dd>disable instruction compaction</dd>
 | 
			
		||||
   <dt><code>nodualobj</code></dt>
 | 
			
		||||
   <dd>suppress generation of dual-object geometry shader code</dd>
 | 
			
		||||
   <dt><code>nofc</code></dt>
 | 
			
		||||
   <dd>disable fast clears</dd>
 | 
			
		||||
   <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>
 | 
			
		||||
<ul>
 | 
			
		||||
<li>INTEL_NO_HW - if set to 1, prevents batches from being submitted to the hardware.
 | 
			
		||||
   This is useful for debugging hangs, etc.</li>
 | 
			
		||||
<li>INTEL_DEBUG - a comma-separated list of named flags, which do various things:
 | 
			
		||||
<ul>
 | 
			
		||||
   <li>ann - annotate IR in assembly dumps</li>
 | 
			
		||||
   <li>aub - dump batches into an AUB trace for use with simulation tools</li>
 | 
			
		||||
   <li>bat - emit batch information</li>
 | 
			
		||||
   <li>blit - emit messages about blit operations</li>
 | 
			
		||||
   <li>blorp - emit messages about the blorp operations (blits & clears)</li>
 | 
			
		||||
   <li>buf - emit messages about buffer objects</li>
 | 
			
		||||
   <li>clip - emit messages about the clip unit (for old gens, includes the CLIP program)</li>
 | 
			
		||||
   <li>color - use color in output</li>
 | 
			
		||||
   <li>cs - dump shader assembly for compute shaders</li>
 | 
			
		||||
   <li>do32 - generate compute shader SIMD32 programs even if workgroup size doesn't exceed the SIMD16 limit</li>
 | 
			
		||||
   <li>dri - emit messages about the DRI interface</li>
 | 
			
		||||
   <li>fbo - emit messages about framebuffers</li>
 | 
			
		||||
   <li>fs - dump shader assembly for fragment shaders</li>
 | 
			
		||||
   <li>gs - dump shader assembly for geometry shaders</li>
 | 
			
		||||
   <li>hex - print instruction hex dump with the disassembly</li>
 | 
			
		||||
   <li>l3 - emit messages about the new L3 state during transitions</li>
 | 
			
		||||
   <li>miptree - emit messages about miptrees</li>
 | 
			
		||||
   <li>no8 - don't generate SIMD8 fragment shader</li>
 | 
			
		||||
   <li>no16 - suppress generation of 16-wide fragment shaders. useful for debugging broken shaders</li>
 | 
			
		||||
   <li>nocompact - disable instruction compaction</li>
 | 
			
		||||
   <li>nodualobj - suppress generation of dual-object geometry shader code</li>
 | 
			
		||||
   <li>norbc - disable single sampled render buffer compression</li>
 | 
			
		||||
   <li>optimizer - dump shader assembly to files at each optimization pass and iteration that make progress</li>
 | 
			
		||||
   <li>perf - emit messages about performance issues</li>
 | 
			
		||||
   <li>perfmon - emit messages about AMD_performance_monitor</li>
 | 
			
		||||
   <li>pix - emit messages about pixel operations</li>
 | 
			
		||||
   <li>prim - emit messages about drawing primitives</li>
 | 
			
		||||
   <li>reemit - mark all state dirty on each draw call</li>
 | 
			
		||||
   <li>sf - emit messages about the strips & fans unit (for old gens, includes the SF program)</li>
 | 
			
		||||
   <li>shader_time - record how much GPU time is spent in each shader</li>
 | 
			
		||||
   <li>spill_fs - force spilling of all registers in the scalar backend (useful to debug spilling code)</li>
 | 
			
		||||
   <li>spill_vec4 - force spilling of all registers in the vec4 backend (useful to debug spilling code)</li>
 | 
			
		||||
   <li>state - emit messages about state flag tracking</li>
 | 
			
		||||
   <li>submit - emit batchbuffer usage statistics</li>
 | 
			
		||||
   <li>sync - after sending each batch, emit a message and wait for that batch to finish rendering</li>
 | 
			
		||||
   <li>tcs - dump shader assembly for tessellation control shaders</li>
 | 
			
		||||
   <li>tes - dump shader assembly for tessellation evaluation shaders</li>
 | 
			
		||||
   <li>tex - emit messages about textures.</li>
 | 
			
		||||
   <li>urb - emit messages about URB setup</li>
 | 
			
		||||
   <li>vert - emit messages about vertex assembly</li>
 | 
			
		||||
   <li>vs - dump shader assembly for vertex shaders</li>
 | 
			
		||||
</ul>
 | 
			
		||||
<li>INTEL_SCALAR_VS (or TCS, TES, GS) - force scalar/vec4 mode for a shader stage (Gen8-9 only)</li>
 | 
			
		||||
<li>INTEL_PRECISE_TRIG - if set to 1, true or yes, then the driver prefers
 | 
			
		||||
   accuracy over performance in trig functions.</li>
 | 
			
		||||
</ul>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
<h2>Radeon driver environment variables (radeon, r200, and r300g)</h2>
 | 
			
		||||
 | 
			
		||||
<dl>
 | 
			
		||||
<dt><code>RADEON_NO_TCL</code></dt>
 | 
			
		||||
<dd>if set, disable hardware-accelerated Transform/Clip/Lighting.</dd>
 | 
			
		||||
</dl>
 | 
			
		||||
<ul>
 | 
			
		||||
<li>RADEON_NO_TCL - if set, disable hardware-accelerated Transform/Clip/Lighting.
 | 
			
		||||
</ul>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
<h2>EGL environment variables</h2>
 | 
			
		||||
@@ -378,170 +230,113 @@ Mesa EGL supports different sets of environment variables.  See the
 | 
			
		||||
 | 
			
		||||
<h2>Gallium environment variables</h2>
 | 
			
		||||
 | 
			
		||||
<dl>
 | 
			
		||||
<dt><code>GALLIUM_HUD</code></dt>
 | 
			
		||||
<dd>draws various information on the screen, like framerate,
 | 
			
		||||
<ul>
 | 
			
		||||
<li>GALLIUM_HUD - draws various information on the screen, like framerate,
 | 
			
		||||
    cpu load, driver statistics, performance counters, etc.
 | 
			
		||||
    Set <code>GALLIUM_HUD=help</code> and run e.g.
 | 
			
		||||
    <code>glxgears</code> for more info.</dd>
 | 
			
		||||
<dt><code>GALLIUM_HUD_PERIOD</code></dt>
 | 
			
		||||
<dd>sets the hud update rate in seconds (float). Use zero
 | 
			
		||||
    to update every frame. The default period is 1/2 second.</dd>
 | 
			
		||||
<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.
 | 
			
		||||
    Set GALLIUM_HUD=help and run e.g. glxgears for more info.
 | 
			
		||||
<li>GALLIUM_HUD_PERIOD - sets the hud update rate in seconds (float). Use zero
 | 
			
		||||
    to update every frame. The default period is 1/2 second.
 | 
			
		||||
<li>GALLIUM_HUD_VISIBLE - control default visibility, defaults to true.
 | 
			
		||||
<li>GALLIUM_HUD_TOGGLE_SIGNAL - toggle visibility via user specified signal.
 | 
			
		||||
    Especially useful to toggle hud at specific points of application and
 | 
			
		||||
    disable for unencumbered viewing the rest of the time. For example, set
 | 
			
		||||
    <code>GALLIUM_HUD_VISIBLE</code> to <code>false</code> and
 | 
			
		||||
    <code>GALLIUM_HUD_TOGGLE_SIGNAL</code> to <code>10</code>
 | 
			
		||||
    (<code>SIGUSR1</code>).
 | 
			
		||||
    Use <code>kill -10 <pid></code> to toggle the hud as desired.</dd>
 | 
			
		||||
<dt><code>GALLIUM_HUD_DUMP_DIR</code></dt>
 | 
			
		||||
<dd>specifies a directory for writing the displayed hud values into files.</dd>
 | 
			
		||||
<dt><code>GALLIUM_DRIVER</code></dt>
 | 
			
		||||
<dd>useful in combination with <code>LIBGL_ALWAYS_SOFTWARE=true</code> for
 | 
			
		||||
    choosing one of the software renderers <code>softpipe</code>,
 | 
			
		||||
    <code>llvmpipe</code> or <code>swr</code>.</dd>
 | 
			
		||||
<dt><code>GALLIUM_LOG_FILE</code></dt>
 | 
			
		||||
<dd>specifies a file for logging all errors, warnings, etc.
 | 
			
		||||
    rather than stderr.</dd>
 | 
			
		||||
<dt><code>GALLIUM_PRINT_OPTIONS</code></dt>
 | 
			
		||||
<dd>if non-zero, print all the Gallium environment variables which are
 | 
			
		||||
    used, and their current values.</dd>
 | 
			
		||||
<dt><code>GALLIUM_DUMP_CPU</code></dt>
 | 
			
		||||
<dd>if non-zero, print information about the CPU on start-up</dd>
 | 
			
		||||
<dt><code>TGSI_PRINT_SANITY</code></dt>
 | 
			
		||||
<dd>if set, do extra sanity checking on TGSI shaders and
 | 
			
		||||
    print any errors to stderr.</dd>
 | 
			
		||||
<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>
 | 
			
		||||
    GALLIUM_HUD_VISIBLE to false and GALLIUM_HUD_TOGGLE_SIGNAL to 10 (SIGUSR1).
 | 
			
		||||
    Use kill -10 <pid> to toggle the hud as desired.
 | 
			
		||||
<li>GALLIUM_HUD_DUMP_DIR - specifies a directory for writing the displayed
 | 
			
		||||
    hud values into files.
 | 
			
		||||
<li>GALLIUM_DRIVER - useful in combination with LIBGL_ALWAYS_SOFTWARE=true for
 | 
			
		||||
    choosing one of the software renderers "softpipe", "llvmpipe" or "swr".
 | 
			
		||||
<li>GALLIUM_LOG_FILE - specifies a file for logging all errors, warnings, etc.
 | 
			
		||||
    rather than stderr.
 | 
			
		||||
<li>GALLIUM_PRINT_OPTIONS - if non-zero, print all the Gallium environment
 | 
			
		||||
    variables which are used, and their current values.
 | 
			
		||||
<li>GALLIUM_DUMP_CPU - if non-zero, print information about the CPU on start-up
 | 
			
		||||
<li>TGSI_PRINT_SANITY - if set, do extra sanity checking on TGSI shaders and
 | 
			
		||||
    print any errors to stderr.
 | 
			
		||||
<LI>DRAW_FSE - ???
 | 
			
		||||
<LI>DRAW_NO_FSE - ???
 | 
			
		||||
<li>DRAW_USE_LLVM - if set to zero, the draw module will not use LLVM to execute
 | 
			
		||||
    shaders, vertex fetch, etc.
 | 
			
		||||
<li>ST_DEBUG - controls debug output from the Mesa/Gallium state tracker.
 | 
			
		||||
Setting to "tgsi", for example, will print all the TGSI shaders.
 | 
			
		||||
See src/mesa/state_tracker/st_debug.c for other options.
 | 
			
		||||
</ul>
 | 
			
		||||
 | 
			
		||||
<h3>Clover state tracker environment variables</h3>
 | 
			
		||||
 | 
			
		||||
<dl>
 | 
			
		||||
<dt><code>CLOVER_EXTRA_BUILD_OPTIONS</code></dt>
 | 
			
		||||
<dd>allows specifying additional compiler and linker
 | 
			
		||||
<ul>
 | 
			
		||||
<li>CLOVER_EXTRA_BUILD_OPTIONS - allows specifying additional compiler and linker
 | 
			
		||||
    options. Specified options are appended after the options set by the OpenCL
 | 
			
		||||
    program in <code>clBuildProgram</code>.</dd>
 | 
			
		||||
<dt><code>CLOVER_EXTRA_COMPILE_OPTIONS</code></dt>
 | 
			
		||||
<dd>allows specifying additional compiler
 | 
			
		||||
    program in clBuildProgram.
 | 
			
		||||
<li>CLOVER_EXTRA_COMPILE_OPTIONS - allows specifying additional compiler
 | 
			
		||||
    options. Specified options are appended after the options set by the OpenCL
 | 
			
		||||
    program in <code>clCompileProgram</code>.</dd>
 | 
			
		||||
<dt><code>CLOVER_EXTRA_LINK_OPTIONS</code></dt>
 | 
			
		||||
<dd>allows specifying additional linker
 | 
			
		||||
    program in clCompileProgram.
 | 
			
		||||
<li>CLOVER_EXTRA_LINK_OPTIONS - allows specifying additional linker
 | 
			
		||||
    options. Specified options are appended after the options set by the OpenCL
 | 
			
		||||
    program in <code>clLinkProgram</code>.</dd>
 | 
			
		||||
</dl>
 | 
			
		||||
    program in clLinkProgram.
 | 
			
		||||
</ul>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
<h3>Softpipe driver environment variables</h3>
 | 
			
		||||
<dl>
 | 
			
		||||
<dt><code>SOFTPIPE_DUMP_FS</code></dt>
 | 
			
		||||
<dd>if set, the softpipe driver will print fragment shaders to stderr</dd>
 | 
			
		||||
<dt><code>SOFTPIPE_DUMP_GS</code></dt>
 | 
			
		||||
<dd>if set, the softpipe driver will print geometry shaders to stderr</dd>
 | 
			
		||||
<dt><code>SOFTPIPE_NO_RAST</code></dt>
 | 
			
		||||
<dd>if set, rasterization is no-op'd.  For profiling purposes.</dd>
 | 
			
		||||
<dt><code>SOFTPIPE_USE_LLVM</code></dt>
 | 
			
		||||
<dd>if set, the softpipe driver will try to use LLVM JIT for
 | 
			
		||||
    vertex shading processing.</dd>
 | 
			
		||||
</dl>
 | 
			
		||||
<ul>
 | 
			
		||||
<li>SOFTPIPE_DUMP_FS - if set, the softpipe driver will print fragment shaders
 | 
			
		||||
    to stderr
 | 
			
		||||
<li>SOFTPIPE_DUMP_GS - if set, the softpipe driver will print geometry shaders
 | 
			
		||||
    to stderr
 | 
			
		||||
<li>SOFTPIPE_NO_RAST - if set, rasterization is no-op'd.  For profiling purposes.
 | 
			
		||||
<li>SOFTPIPE_USE_LLVM - if set, the softpipe driver will try to use LLVM JIT for
 | 
			
		||||
    vertex shading processing.
 | 
			
		||||
</ul>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
<h3>LLVMpipe driver environment variables</h3>
 | 
			
		||||
<dl>
 | 
			
		||||
<dt><code>LP_NO_RAST</code></dt>
 | 
			
		||||
<dd>if set LLVMpipe will no-op rasterization</dd>
 | 
			
		||||
<dt><code>LP_DEBUG</code></dt>
 | 
			
		||||
<dd>a comma-separated list of debug options is accepted.  See the
 | 
			
		||||
    source code for details.</dd>
 | 
			
		||||
<dt><code>LP_PERF</code></dt>
 | 
			
		||||
<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.
 | 
			
		||||
<ul>
 | 
			
		||||
<li>LP_NO_RAST - if set LLVMpipe will no-op rasterization
 | 
			
		||||
<li>LP_DEBUG - a comma-separated list of debug options is accepted.  See the
 | 
			
		||||
    source code for details.
 | 
			
		||||
<li>LP_PERF - a comma-separated list of options to selectively no-op various
 | 
			
		||||
    parts of the driver.  See the source code for details.
 | 
			
		||||
<li>LP_NUM_THREADS - an integer indicating how many threads to use for rendering.
 | 
			
		||||
    Zero turns off threading completely.  The default value is the number of CPU
 | 
			
		||||
    cores present.</dd>
 | 
			
		||||
</dl>
 | 
			
		||||
    cores present.
 | 
			
		||||
</ul>
 | 
			
		||||
 | 
			
		||||
<h3>VMware SVGA driver environment variables</h3>
 | 
			
		||||
<dl>
 | 
			
		||||
<dt><code>SVGA_FORCE_SWTNL</code></dt>
 | 
			
		||||
<dd>force use of software vertex transformation</dd>
 | 
			
		||||
<dt><code>SVGA_NO_SWTNL</code></dt>
 | 
			
		||||
<dd>don't allow software vertex transformation fallbacks (will often result
 | 
			
		||||
    in incorrect rendering).</dd>
 | 
			
		||||
<dt><code>SVGA_DEBUG</code></dt>
 | 
			
		||||
<dd>for dumping shaders, constant buffers, etc.  See the code for
 | 
			
		||||
    details.</dd>
 | 
			
		||||
<dt><code>SVGA_EXTRA_LOGGING</code></dt>
 | 
			
		||||
<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>
 | 
			
		||||
<ul>
 | 
			
		||||
<li>SVGA_FORCE_SWTNL - force use of software vertex transformation
 | 
			
		||||
<li>SVGA_NO_SWTNL - don't allow software vertex transformation fallbacks
 | 
			
		||||
(will often result in incorrect rendering).
 | 
			
		||||
<li>SVGA_DEBUG - for dumping shaders, constant buffers, etc.  See the code
 | 
			
		||||
for details.
 | 
			
		||||
<li>SVGA_EXTRA_LOGGING - if set, enables extra logging to the vmware.log file,
 | 
			
		||||
such as the OpenGL program's name and command line arguments.
 | 
			
		||||
<li>See the driver code for other, lesser-used variables.
 | 
			
		||||
</ul>
 | 
			
		||||
 | 
			
		||||
<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>
 | 
			
		||||
<dl>
 | 
			
		||||
<dt><code>VAAPI_MPEG4_ENABLED</code></dt>
 | 
			
		||||
<dd>enable MPEG4 for VA-API, disabled by default.</dd>
 | 
			
		||||
</dl>
 | 
			
		||||
<ul>
 | 
			
		||||
<li>VAAPI_MPEG4_ENABLED - enable MPEG4 for VA-API, disabled by default.
 | 
			
		||||
</ul>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
<h3>VC4 driver environment variables</h3>
 | 
			
		||||
<dl>
 | 
			
		||||
<dt><code>VC4_DEBUG</code></dt>
 | 
			
		||||
<dd>a comma-separated list of named flags, which do various things:
 | 
			
		||||
<dl>
 | 
			
		||||
   <dt><code>cl</code></dt>
 | 
			
		||||
   <dd>dump command list during creation</dd>
 | 
			
		||||
   <dt><code>qpu</code></dt>
 | 
			
		||||
   <dd>dump generated QPU instructions</dd>
 | 
			
		||||
   <dt><code>qir</code></dt>
 | 
			
		||||
   <dd>dump QPU IR during program compile</dd>
 | 
			
		||||
   <dt><code>nir</code></dt>
 | 
			
		||||
   <dd>dump NIR during program compile</dd>
 | 
			
		||||
   <dt><code>tgsi</code></dt>
 | 
			
		||||
   <dd>dump TGSI during program compile</dd>
 | 
			
		||||
   <dt><code>shaderdb</code></dt>
 | 
			
		||||
   <dd>dump program compile information for shader-db analysis</dd>
 | 
			
		||||
   <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>
 | 
			
		||||
<ul>
 | 
			
		||||
<li>VC4_DEBUG - a comma-separated list of named flags, which do various things:
 | 
			
		||||
<ul>
 | 
			
		||||
   <li>cl - dump command list during creation</li>
 | 
			
		||||
   <li>qpu - dump generated QPU instructions</li>
 | 
			
		||||
   <li>qir - dump QPU IR during program compile</li>
 | 
			
		||||
   <li>nir - dump NIR during program compile</li>
 | 
			
		||||
   <li>tgsi - dump TGSI during program compile</li>
 | 
			
		||||
   <li>shaderdb - dump program compile information for shader-db analysis</li>
 | 
			
		||||
   <li>perf - print during performance-related events</li>
 | 
			
		||||
   <li>norast - skip actual hardware execution of commands</li>
 | 
			
		||||
   <li>always_flush - flush after each draw call</li>
 | 
			
		||||
   <li>always_sync - wait for finish after each flush</li>
 | 
			
		||||
   <li>dump - write a GPU command stream trace file (VC4 simulator only)</li>
 | 
			
		||||
</ul>
 | 
			
		||||
</ul>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
<p>
 | 
			
		||||
 
 | 
			
		||||
@@ -8,7 +8,7 @@
 | 
			
		||||
<body>
 | 
			
		||||
 | 
			
		||||
<div class="header">
 | 
			
		||||
  The Mesa 3D Graphics Library
 | 
			
		||||
  <h1>The Mesa 3D Graphics Library</h1>
 | 
			
		||||
</div>
 | 
			
		||||
 | 
			
		||||
<iframe src="contents.html"></iframe>
 | 
			
		||||
@@ -23,7 +23,7 @@ The specifications follow.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
<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_drm_image.spec">MESA_drm_image.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/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_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/OLD/MESA_sprite_point.spec">MESA_sprite_point.spec</a> (obsolete)
 | 
			
		||||
<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">
 | 
			
		||||
<head>
 | 
			
		||||
  <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">
 | 
			
		||||
</head>
 | 
			
		||||
<body>
 | 
			
		||||
 | 
			
		||||
<div class="header">
 | 
			
		||||
  The Mesa 3D Graphics Library
 | 
			
		||||
  <h1>The Mesa 3D Graphics Library</h1>
 | 
			
		||||
</div>
 | 
			
		||||
 | 
			
		||||
<iframe src="contents.html"></iframe>
 | 
			
		||||
<div class="content">
 | 
			
		||||
 | 
			
		||||
<h1>Frequently Asked Questions</h1>
 | 
			
		||||
Last updated: 19 September 2018
 | 
			
		||||
<center>
 | 
			
		||||
<h1>Mesa Frequently Asked Questions</h1>
 | 
			
		||||
Last updated: 9 October 2012
 | 
			
		||||
</center>
 | 
			
		||||
 | 
			
		||||
<br>
 | 
			
		||||
<br>
 | 
			
		||||
<h2>Index</h2>
 | 
			
		||||
<ol>
 | 
			
		||||
  <li><a href="#part1">High-level Questions and Answers</a></li>
 | 
			
		||||
  <li><a href="#part2">Compilation and Installation Problems</a></li>
 | 
			
		||||
  <li><a href="#part3">Runtime / Rendering Problems</a></li>
 | 
			
		||||
  <li><a href="#part4">Developer Questions</a></li>
 | 
			
		||||
</ol>
 | 
			
		||||
<a href="#part1">1. High-level Questions and Answers</a>
 | 
			
		||||
<br>
 | 
			
		||||
<a href="#part2">2. Compilation and Installation Problems</a>
 | 
			
		||||
<br>
 | 
			
		||||
<a href="#part3">3. Runtime / Rendering Problems</a>
 | 
			
		||||
<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>
 | 
			
		||||
Mesa is an open-source implementation of the OpenGL specification.
 | 
			
		||||
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
 | 
			
		||||
    loaded by the X server.
 | 
			
		||||
<li>There is no hardware acceleration.
 | 
			
		||||
<li>The OpenGL library, <code>libGL.so</code>, contains everything (the
 | 
			
		||||
    programming API, the GLX functions and all the rendering code).
 | 
			
		||||
<li>The OpenGL library, libGL.so, contains everything (the programming API,
 | 
			
		||||
    the GLX functions and all the rendering code).
 | 
			
		||||
</ul>
 | 
			
		||||
<p>
 | 
			
		||||
Alternately, Mesa acts as the core for a number of OpenGL hardware drivers
 | 
			
		||||
within the DRI (Direct Rendering Infrastructure):
 | 
			
		||||
<ul>
 | 
			
		||||
<li>The <code>libGL.so</code> library provides the GL and GLX API functions,
 | 
			
		||||
    a GLX protocol encoder, and a device driver loader.
 | 
			
		||||
<li>The device driver modules (such as <code>r200_dri.so</code>) contain
 | 
			
		||||
    a built-in copy of the core Mesa code.
 | 
			
		||||
<li>The libGL.so library provides the GL and GLX API functions, a GLX
 | 
			
		||||
    protocol encoder, and a device driver loader.
 | 
			
		||||
<li>The device driver modules (such as r200_dri.so) contain a built-in
 | 
			
		||||
    copy of the core Mesa code.
 | 
			
		||||
<li>The X server loads the GLX module.
 | 
			
		||||
    The GLX module decodes incoming GLX protocol and dispatches the commands
 | 
			
		||||
    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>
 | 
			
		||||
<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.
 | 
			
		||||
The SI was written during the time that OpenGL was originally designed.
 | 
			
		||||
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.
 | 
			
		||||
 | 
			
		||||
<p>
 | 
			
		||||
<a href="http://web.archive.org/web/20130830162848/http://www.dsbox.com/minigl.html">miniGL</a>
 | 
			
		||||
is a subset of OpenGL for PalmOS devices. The website is gone, but the source
 | 
			
		||||
code can still be found on <a href="https://sourceforge.net/projects/minigl/">sourceforge.net</a>.
 | 
			
		||||
<a href="http://www.dsbox.com/minigl.html">miniGL</a>
 | 
			
		||||
is a subset of OpenGL for PalmOS devices.
 | 
			
		||||
 | 
			
		||||
<p>
 | 
			
		||||
<a href="http://bellard.org/TinyGL/">TinyGL</a>
 | 
			
		||||
@@ -170,16 +179,22 @@ popular and feature-complete.
 | 
			
		||||
</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>
 | 
			
		||||
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.
 | 
			
		||||
</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>
 | 
			
		||||
You're application is written in IRIS GL, not OpenGL.
 | 
			
		||||
IRIS GL was the predecessor to OpenGL and is a different thing (almost)
 | 
			
		||||
@@ -188,72 +203,63 @@ Mesa's not the solution.
 | 
			
		||||
</p>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
<h3>2.3 Where is the GLUT library?</h3>
 | 
			
		||||
<h2>2.3 Where is the GLUT library?</h2>
 | 
			
		||||
<p>
 | 
			
		||||
GLUT (OpenGL Utility Toolkit) is no longer in the separate
 | 
			
		||||
<code>MesaGLUT-x.y.z.tar.gz</code> file.
 | 
			
		||||
GLUT (OpenGL Utility Toolkit) is no longer in the separate MesaGLUT-x.y.z.tar.gz file.
 | 
			
		||||
If you don't already have GLUT installed, you should grab 
 | 
			
		||||
<a href="http://freeglut.sourceforge.net/">freeglut</a>.
 | 
			
		||||
</p>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
<h3>2.4 Where is the GLw library?</h3>
 | 
			
		||||
<h2>2.4 Where is the GLw library?</h2>
 | 
			
		||||
<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>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
<h2>2.5 What's the proper place for the libraries and headers?</h2>
 | 
			
		||||
<p>
 | 
			
		||||
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:
 | 
			
		||||
</p>
 | 
			
		||||
<dl>
 | 
			
		||||
<dt><code>/usr/include/GL/gl.h</code></dt>
 | 
			
		||||
<dd>the main OpenGL header</dd>
 | 
			
		||||
<dt><code>/usr/include/GL/glu.h</code></dt>
 | 
			
		||||
<dd>the OpenGL GLU (utility) header</dd>
 | 
			
		||||
<dt><code>/usr/include/GL/glx.h</code></dt>
 | 
			
		||||
<dd>the OpenGL GLX header</dd>
 | 
			
		||||
<dt><code>/usr/include/GL/glext.h</code></dt>
 | 
			
		||||
<dd>the OpenGL extensions header</dd>
 | 
			
		||||
<dt><code>/usr/include/GL/glxext.h</code></dt>
 | 
			
		||||
<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
 | 
			
		||||
<ul>
 | 
			
		||||
<li>/usr/include/GL/gl.h - the main OpenGL header
 | 
			
		||||
</li><li>/usr/include/GL/glu.h - the OpenGL GLU (utility) header
 | 
			
		||||
</li><li>/usr/include/GL/glx.h - the OpenGL GLX header
 | 
			
		||||
</li><li>/usr/include/GL/glext.h - the OpenGL extensions header
 | 
			
		||||
</li><li>/usr/include/GL/glxext.h - the OpenGL GLX extensions header
 | 
			
		||||
</li><li>/usr/include/GL/osmesa.h - the Mesa off-screen rendering header
 | 
			
		||||
</li><li>/usr/lib/libGL.so - a symlink to libGL.so.1
 | 
			
		||||
</li><li>/usr/lib/libGL.so.1 - a symlink to libGL.so.1.xyz
 | 
			
		||||
</li><li>/usr/lib/libGL.so.xyz - the actual OpenGL/Mesa library.  xyz denotes the
 | 
			
		||||
Mesa version number.
 | 
			
		||||
</dd>
 | 
			
		||||
</dl>
 | 
			
		||||
</li></ul>
 | 
			
		||||
<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>,
 | 
			
		||||
<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
 | 
			
		||||
<code>--prefix=/usr</code>. Set <code>--libdir</code> to where your Linux
 | 
			
		||||
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
 | 
			
		||||
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>,
 | 
			
		||||
then set <code>-D dri-drivers-path=/usr/lib64/dri</code>.
 | 
			
		||||
then set <code>--with-dri-driverdir=/usr/lib64/dri</code>.
 | 
			
		||||
</p>
 | 
			
		||||
<p>
 | 
			
		||||
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>
 | 
			
		||||
and then install with <code>sudo ninja install</code>.
 | 
			
		||||
with <code>./configure --prefix=/usr --libdir=xxx --with-dri-driverdir=xxx</code>
 | 
			
		||||
and then install with <code>sudo make install</code>.
 | 
			
		||||
</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>
 | 
			
		||||
If Mesa can't use its hardware accelerated drivers it falls back on one of its software renderers.
 | 
			
		||||
(eg. classic swrast, softpipe or llvmpipe)
 | 
			
		||||
@@ -274,57 +280,60 @@ If your DRI-based driver isn't working, go to the
 | 
			
		||||
</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>
 | 
			
		||||
Make sure the ratio of the far to near clipping planes isn't too great.
 | 
			
		||||
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.
 | 
			
		||||
</p>
 | 
			
		||||
<p>
 | 
			
		||||
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.
 | 
			
		||||
If you need a deeper you can modify the parameters to
 | 
			
		||||
<code>glXChooseVisual</code> in your code.
 | 
			
		||||
<code> glXChooseVisual</code> in your code.
 | 
			
		||||
</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>
 | 
			
		||||
Be sure you're requesting a depth buffered-visual.  If you set the
 | 
			
		||||
<code>MESA_DEBUG</code> environment variable it will warn you about trying
 | 
			
		||||
to enable depth testing when you don't have a depth buffer.
 | 
			
		||||
Be sure you're requesting a depth buffered-visual.  If you set the MESA_DEBUG
 | 
			
		||||
environment variable it will warn you about trying to enable depth testing
 | 
			
		||||
when you don't have a depth buffer.
 | 
			
		||||
</p>
 | 
			
		||||
<p>Specifically, make sure <code>glutInitDisplayMode</code> is being called
 | 
			
		||||
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>This discussion applies to stencil buffers, accumulation buffers and
 | 
			
		||||
alpha channels too.
 | 
			
		||||
</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>
 | 
			
		||||
Be sure you have an active/current OpenGL rendering context before
 | 
			
		||||
calling <code>glGetString</code>.
 | 
			
		||||
calling glGetString.
 | 
			
		||||
</p>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
<h3>3.5 <code>GL_POINTS</code> and <code>GL_LINES</code> don't touch the
 | 
			
		||||
right pixels</h3>
 | 
			
		||||
<h2>3.5 GL_POINTS and GL_LINES don't touch the right pixels</h2>
 | 
			
		||||
<p>
 | 
			
		||||
If you're trying to draw a filled region by using <code>GL_POINTS</code> or
 | 
			
		||||
<code>GL_LINES</code> and seeing holes or gaps it's because of a float-to-int
 | 
			
		||||
rounding problem. But this is not a bug. See Appendix H of the OpenGL
 | 
			
		||||
Programming Guide - "OpenGL Correctness Tips". Basically, applying a
 | 
			
		||||
translation of (0.375, 0.375, 0.0) to your coordinates will fix the problem.
 | 
			
		||||
If you're trying to draw a filled region by using GL_POINTS or GL_LINES
 | 
			
		||||
and seeing holes or gaps it's because of a float-to-int rounding problem.
 | 
			
		||||
But this is not a bug.
 | 
			
		||||
See Appendix H of the OpenGL Programming Guide - "OpenGL Correctness Tips".
 | 
			
		||||
Basically, applying a translation of (0.375, 0.375, 0.0) to your coordinates
 | 
			
		||||
will fix the problem.
 | 
			
		||||
</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>
 | 
			
		||||
First, join the <a href="lists.html">mesa-dev mailing list</a>.
 | 
			
		||||
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.
 | 
			
		||||
</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>
 | 
			
		||||
Unfortunately, writing a device driver isn't easy.
 | 
			
		||||
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>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
<h3>4.3 Why isn't <code>GL_EXT_texture_compression_s3tc</code> implemented in
 | 
			
		||||
Mesa?</h3>
 | 
			
		||||
<h2>4.3 Why isn't GL_EXT_texture_compression_s3tc implemented in Mesa?</h2>
 | 
			
		||||
<p>
 | 
			
		||||
Oh but it is! Prior to 2nd October 2017, the Mesa project did not include s3tc
 | 
			
		||||
support due to intellectual property (IP) and/or patent issues around the s3tc
 | 
			
		||||
algorithm.
 | 
			
		||||
The <a href="http://oss.sgi.com/projects/ogl-sample/registry/EXT/texture_compression_s3tc.txt">specification for the extension</a>
 | 
			
		||||
indicates that there are intellectual property (IP) and/or patent issues
 | 
			
		||||
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>
 | 
			
		||||
As of Mesa 17.3.0, Mesa now officially supports s3tc, as the patent has expired.
 | 
			
		||||
</p>
 | 
			
		||||
<p>
 | 
			
		||||
In versions prior to this, a 3rd party <a href="https://dri.freedesktop.org/wiki/S3TC">
 | 
			
		||||
plug-in library</a> was required.
 | 
			
		||||
In the mean time, a 3rd party <a href="https://dri.freedesktop.org/wiki/S3TC">
 | 
			
		||||
plug-in library</a> is available.
 | 
			
		||||
</p>
 | 
			
		||||
 | 
			
		||||
</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
 | 
			
		||||
 | 
			
		||||
Some drivers do not support the Compatibility profile or the
 | 
			
		||||
ARB_compatibility extensions.  If an application does not request a
 | 
			
		||||
specific version without the forward-compatiblity flag, such drivers
 | 
			
		||||
will be limited to OpenGL 3.0.  If an application requests OpenGL 3.1,
 | 
			
		||||
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.
 | 
			
		||||
OpenGL 3.1 and later versions are only supported with the Core profile.
 | 
			
		||||
There are no plans to support GL_ARB_compatibility. The last supported OpenGL
 | 
			
		||||
version with all deprecated features is 3.0. Some of the later GL features
 | 
			
		||||
are exposed in the 3.0 context as extensions.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
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
 | 
			
		||||
  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
 | 
			
		||||
  Depth format cube textures                            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 ()
 | 
			
		||||
  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 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
 | 
			
		||||
  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_provoking_vertex (Provoking vertex)            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_sync (Fence objects)                           DONE (freedreno)
 | 
			
		||||
  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_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_texture_rgb10_a2ui                             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_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_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+)
 | 
			
		||||
  - 'precise' qualifier                                 DONE (softpipe)
 | 
			
		||||
  - 'precise' qualifier                                 DONE
 | 
			
		||||
  - Dynamically uniform sampler array indices           DONE (softpipe)
 | 
			
		||||
  - Dynamically uniform UBO array indices               DONE (freedreno, softpipe)
 | 
			
		||||
  - Implicit signed -> unsigned conversions             DONE (softpipe)
 | 
			
		||||
  - Fused multiply-add                                  DONE (softpipe)
 | 
			
		||||
  - Packing/bitfield/conversion functions               DONE (freedreno, softpipe)
 | 
			
		||||
  - Enhanced textureGather                              DONE (freedreno, softpipe)
 | 
			
		||||
  - Dynamically uniform UBO array indices               DONE ()
 | 
			
		||||
  - Implicit signed -> unsigned conversions             DONE
 | 
			
		||||
  - Fused multiply-add                                  DONE ()
 | 
			
		||||
  - Packing/bitfield/conversion functions               DONE (softpipe)
 | 
			
		||||
  - Enhanced textureGather                              DONE (softpipe)
 | 
			
		||||
  - Geometry shader instancing                          DONE (llvmpipe, softpipe)
 | 
			
		||||
  - Geometry shader multiple streams                    DONE (softpipe)
 | 
			
		||||
  - Geometry shader multiple streams                    DONE ()
 | 
			
		||||
  - Enhanced per-sample shading                         DONE ()
 | 
			
		||||
  - Interpolation functions                             DONE (softpipe)
 | 
			
		||||
  - New overload resolution rules                       DONE (softpipe)
 | 
			
		||||
  GL_ARB_gpu_shader_fp64                                DONE (i965/gen7+, llvmpipe, softpipe, swr)
 | 
			
		||||
  GL_ARB_sample_shading                                 DONE (freedreno/a6xx, i965/gen6+, nv50)
 | 
			
		||||
  GL_ARB_shader_subroutine                              DONE (freedreno, i965/gen6+, nv50, llvmpipe, softpipe, swr)
 | 
			
		||||
  - Interpolation functions                             DONE ()
 | 
			
		||||
  - New overload resolution rules                       DONE
 | 
			
		||||
  GL_ARB_gpu_shader_fp64                                DONE (i965/gen7+, llvmpipe, softpipe)
 | 
			
		||||
  GL_ARB_sample_shading                                 DONE (i965/gen6+, nv50)
 | 
			
		||||
  GL_ARB_shader_subroutine                              DONE (i965/gen6+, nv50, llvmpipe, softpipe, swr)
 | 
			
		||||
  GL_ARB_tessellation_shader                            DONE (i965/gen7+)
 | 
			
		||||
  GL_ARB_texture_buffer_object_rgb32                    DONE (freedreno, i965/gen6+, llvmpipe, softpipe, swr)
 | 
			
		||||
  GL_ARB_texture_cube_map_array                         DONE (i965/gen6+, nv50, llvmpipe, softpipe, swr)
 | 
			
		||||
  GL_ARB_texture_gather                                 DONE (freedreno, i965/gen6+, nv50, llvmpipe, softpipe, swr)
 | 
			
		||||
  GL_ARB_texture_query_lod                              DONE (freedreno, i965, nv50, 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)
 | 
			
		||||
  GL_ARB_texture_gather                                 DONE (i965/gen6+, 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_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_get_program_binary                             DONE (0 or 1 binary formats)
 | 
			
		||||
  GL_ARB_ES2_compatibility                              DONE (i965, nv50, llvmpipe, softpipe, swr)
 | 
			
		||||
  GL_ARB_get_program_binary                             DONE (0 binary formats)
 | 
			
		||||
  GL_ARB_separate_shader_objects                        DONE (all drivers)
 | 
			
		||||
  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_viewport_array                                 DONE (i965, nv50, llvmpipe, softpipe, swr)
 | 
			
		||||
  GL_ARB_vertex_attrib_64bit                            DONE (i965/gen7+, llvmpipe, softpipe)
 | 
			
		||||
  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_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_transform_feedback_instanced                   DONE (freedreno, i965, nv50, llvmpipe, softpipe, swr)
 | 
			
		||||
  GL_ARB_base_instance                                  DONE (freedreno, i965, nv50, llvmpipe, softpipe, swr)
 | 
			
		||||
  GL_ARB_shader_image_load_store                        DONE (freedreno/a5xx+, i965, llvmpipe, softpipe)
 | 
			
		||||
  GL_ARB_transform_feedback_instanced                   DONE (i965, nv50, r600, llvmpipe, softpipe, swr)
 | 
			
		||||
  GL_ARB_base_instance                                  DONE (i965, nv50, r600, llvmpipe, softpipe, swr)
 | 
			
		||||
  GL_ARB_shader_image_load_store                        DONE (i965, softpipe)
 | 
			
		||||
  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_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 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_ES3_compatibility                              DONE (all drivers that support GLSL 3.30)
 | 
			
		||||
  GL_ARB_clear_buffer_object                            DONE (all drivers)
 | 
			
		||||
  GL_ARB_compute_shader                                 DONE (freedreno/a5xx+, i965, llvmpipe, softpipe)
 | 
			
		||||
  GL_ARB_copy_image                                     DONE (i965, nv50, softpipe, llvmpipe, swr)
 | 
			
		||||
  GL_ARB_compute_shader                                 DONE (i965, softpipe)
 | 
			
		||||
  GL_ARB_copy_image                                     DONE (i965, nv50, r600, softpipe, llvmpipe)
 | 
			
		||||
  GL_KHR_debug                                          DONE (all drivers)
 | 
			
		||||
  GL_ARB_explicit_uniform_location                      DONE (all drivers that support GLSL)
 | 
			
		||||
  GL_ARB_fragment_layer_viewport                        DONE (i965, nv50, llvmpipe, softpipe, swr)
 | 
			
		||||
  GL_ARB_framebuffer_no_attachments                     DONE (freedreno, i965, llvmpipe, softpipe)
 | 
			
		||||
  GL_ARB_fragment_layer_viewport                        DONE (i965, nv50, r600, llvmpipe, softpipe)
 | 
			
		||||
  GL_ARB_framebuffer_no_attachments                     DONE (i965, r600, softpipe)
 | 
			
		||||
  GL_ARB_internalformat_query2                          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_robust_buffer_access_behavior                  DONE (i965)
 | 
			
		||||
  GL_ARB_shader_image_size                              DONE (freedreno/a5xx+, i965, llvmpipe, softpipe)
 | 
			
		||||
  GL_ARB_shader_storage_buffer_object                   DONE (freedreno/a5xx+, i965, llvmpipe, softpipe)
 | 
			
		||||
  GL_ARB_stencil_texturing                              DONE (freedreno, i965/hsw+, nv50, llvmpipe, softpipe, swr)
 | 
			
		||||
  GL_ARB_texture_buffer_range                           DONE (freedreno, nv50, i965, softpipe, llvmpipe, swr)
 | 
			
		||||
  GL_ARB_shader_image_size                              DONE (i965, softpipe)
 | 
			
		||||
  GL_ARB_shader_storage_buffer_object                   DONE (i965, softpipe)
 | 
			
		||||
  GL_ARB_stencil_texturing                              DONE (i965/hsw+, nv50, r600, llvmpipe, softpipe, 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_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 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_ARB_buffer_storage                                 DONE (freedreno, i965, nv50, llvmpipe, swr)
 | 
			
		||||
  GL_ARB_clear_texture                                  DONE (i965, nv50, llvmpipe, softpipe, swr)
 | 
			
		||||
  GL_ARB_enhanced_layouts                               DONE (i965, nv50, llvmpipe, softpipe, virgl)
 | 
			
		||||
  GL_ARB_buffer_storage                                 DONE (i965, nv50, r600, llvmpipe, swr)
 | 
			
		||||
  GL_ARB_clear_texture                                  DONE (i965, nv50, r600, llvmpipe, softpipe, swr)
 | 
			
		||||
  GL_ARB_enhanced_layouts                               DONE (i965, nv50, llvmpipe, softpipe)
 | 
			
		||||
  - compile-time constant expressions                   DONE
 | 
			
		||||
  - explicit byte offsets for 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
 | 
			
		||||
  - input/output block locations                        DONE
 | 
			
		||||
  GL_ARB_multi_bind                                     DONE (all drivers)
 | 
			
		||||
  GL_ARB_query_buffer_object                            DONE (i965/hsw+, virgl)
 | 
			
		||||
  GL_ARB_texture_mirror_clamp_to_edge                   DONE (i965, nv50, llvmpipe, softpipe, swr, virgl)
 | 
			
		||||
  GL_ARB_texture_stencil8                               DONE (freedreno, i965/hsw+, nv50, llvmpipe, softpipe, swr, virgl)
 | 
			
		||||
  GL_ARB_vertex_type_10f_11f_11f_rev                    DONE (i965, nv50, llvmpipe, softpipe, swr, virgl)
 | 
			
		||||
  GL_ARB_query_buffer_object                            DONE (i965/hsw+)
 | 
			
		||||
  GL_ARB_texture_mirror_clamp_to_edge                   DONE (i965, nv50, r600, llvmpipe, softpipe, swr)
 | 
			
		||||
  GL_ARB_texture_stencil8                               DONE (i965/hsw+, nv50, r600, llvmpipe, softpipe, swr)
 | 
			
		||||
  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_clip_control                                   DONE (freedreno, i965, nv50, llvmpipe, softpipe, swr)
 | 
			
		||||
  GL_ARB_conditional_render_inverted                    DONE (freedreno, i965, nv50, llvmpipe, softpipe, swr, virgl)
 | 
			
		||||
  GL_ARB_cull_distance                                  DONE (i965, nv50, llvmpipe, softpipe, swr, virgl)
 | 
			
		||||
  GL_ARB_derivative_control                             DONE (i965, nv50, softpipe, virgl)
 | 
			
		||||
  GL_ARB_ES3_1_compatibility                            DONE (i965/hsw+)
 | 
			
		||||
  GL_ARB_clip_control                                   DONE (i965, nv50, r600, llvmpipe, softpipe, swr)
 | 
			
		||||
  GL_ARB_conditional_render_inverted                    DONE (i965, nv50, r600, llvmpipe, softpipe, swr)
 | 
			
		||||
  GL_ARB_cull_distance                                  DONE (i965, nv50, llvmpipe, softpipe, swr)
 | 
			
		||||
  GL_ARB_derivative_control                             DONE (i965, nv50, r600)
 | 
			
		||||
  GL_ARB_direct_state_access                            DONE (all drivers)
 | 
			
		||||
  GL_ARB_get_texture_sub_image                          DONE (all drivers)
 | 
			
		||||
  GL_ARB_shader_texture_image_samples                   DONE (i965, nv50, virgl)
 | 
			
		||||
  GL_ARB_texture_barrier                                DONE (freedreno, i965, nv50, virgl)
 | 
			
		||||
  GL_ARB_shader_texture_image_samples                   DONE (i965, nv50, r600)
 | 
			
		||||
  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_robustness                                     DONE (freedreno, i965)
 | 
			
		||||
  GL_KHR_robustness                                     DONE (i965)
 | 
			
		||||
  GL_EXT_shader_integer_mix                             DONE (all drivers that support GLSL)
 | 
			
		||||
 | 
			
		||||
GL 4.6, GLSL 4.60
 | 
			
		||||
 | 
			
		||||
  GL_ARB_gl_spirv                                       DONE (i965/gen7+)
 | 
			
		||||
  GL_ARB_indirect_parameters                            DONE (i965/gen7+, nvc0, radeonsi, virgl)
 | 
			
		||||
  GL_ARB_pipeline_statistics_query                      DONE (i965, nvc0, r600, radeonsi, llvmpipe, softpipe, swr)
 | 
			
		||||
  GL_ARB_polygon_offset_clamp                           DONE (freedreno, i965, nv50, nvc0, r600, radeonsi, llvmpipe, swr, virgl)
 | 
			
		||||
  GL_ARB_shader_atomic_counter_ops                      DONE (freedreno/a5xx+, i965/gen7+, nvc0, r600, radeonsi, llvmpipe, softpipe, virgl)
 | 
			
		||||
  GL_ARB_gl_spirv                                       in progress (Nicolai Hähnle, Ian Romanick)
 | 
			
		||||
  GL_ARB_indirect_parameters                            DONE (i965/gen7+, nvc0, radeonsi)
 | 
			
		||||
  GL_ARB_pipeline_statistics_query                      DONE (i965, nvc0, radeonsi, llvmpipe, softpipe, swr)
 | 
			
		||||
  GL_ARB_polygon_offset_clamp                           DONE (i965, nv50, nvc0, r600, radeonsi, llvmpipe, swr)
 | 
			
		||||
  GL_ARB_shader_atomic_counter_ops                      DONE (i965/gen7+, nvc0, radeonsi, softpipe)
 | 
			
		||||
  GL_ARB_shader_draw_parameters                         DONE (i965, nvc0, radeonsi)
 | 
			
		||||
  GL_ARB_shader_group_vote                              DONE (i965, nvc0, radeonsi)
 | 
			
		||||
  GL_ARB_spirv_extensions                               DONE (i965/gen7+)
 | 
			
		||||
  GL_ARB_texture_filter_anisotropic                     DONE (freedreno, i965, nv50, nvc0, r600, radeonsi, softpipe (*), llvmpipe (*))
 | 
			
		||||
  GL_ARB_transform_feedback_overflow_query              DONE (i965/gen6+, nvc0, radeonsi, llvmpipe, softpipe, virgl)
 | 
			
		||||
  GL_ARB_spirv_extensions                               in progress (Nicolai Hähnle, Ian Romanick)
 | 
			
		||||
  GL_ARB_texture_filter_anisotropic                     DONE (i965, nv50, nvc0, r600, radeonsi, softpipe (*), llvmpipe (*))
 | 
			
		||||
  GL_ARB_transform_feedback_overflow_query              DONE (i965/gen6+, radeonsi, llvmpipe, softpipe)
 | 
			
		||||
  GL_KHR_no_error                                       DONE (all drivers)
 | 
			
		||||
 | 
			
		||||
(*) softpipe and llvmpipe advertise 16x anisotropy but simply ignore the setting
 | 
			
		||||
 | 
			
		||||
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_compute_shader                                 DONE (freedreno/a5xx+, i965/gen7+, llvmpipe, softpipe)
 | 
			
		||||
  GL_ARB_draw_indirect                                  DONE (freedreno, i965/gen7+, llvmpipe, softpipe, swr)
 | 
			
		||||
  GL_ARB_compute_shader                                 DONE (i965/gen7+, softpipe)
 | 
			
		||||
  GL_ARB_draw_indirect                                  DONE (i965/gen7+, r600, llvmpipe, softpipe, swr)
 | 
			
		||||
  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_shader_atomic_counters                         DONE (freedreno/a5xx+, i965/gen7+, llvmpipe, softpipe)
 | 
			
		||||
  GL_ARB_shader_image_load_store                        DONE (freedreno/a5xx+, i965/gen7+, llvmpipe, softpipe)
 | 
			
		||||
  GL_ARB_shader_image_size                              DONE (freedreno/a5xx+, i965/gen7+, llvmpipe, softpipe)
 | 
			
		||||
  GL_ARB_shader_storage_buffer_object                   DONE (freedreno/a5xx+, i965/gen7+, llvmpipe, softpipe)
 | 
			
		||||
  GL_ARB_shader_atomic_counters                         DONE (i965/gen7+, softpipe)
 | 
			
		||||
  GL_ARB_shader_image_load_store                        DONE (i965/gen7+, softpipe)
 | 
			
		||||
  GL_ARB_shader_image_size                              DONE (i965/gen7+, softpipe)
 | 
			
		||||
  GL_ARB_shader_storage_buffer_object                   DONE (i965/gen7+, softpipe)
 | 
			
		||||
  GL_ARB_shading_language_packing                       DONE (all drivers)
 | 
			
		||||
  GL_ARB_separate_shader_objects                        DONE (all drivers)
 | 
			
		||||
  GL_ARB_stencil_texturing                              DONE (freedreno, nv50, llvmpipe, softpipe, swr)
 | 
			
		||||
  GL_ARB_texture_multisample (Multisample textures)     DONE (freedreno/a5xx+, i965/gen7+, nv50, llvmpipe, softpipe)
 | 
			
		||||
  GL_ARB_stencil_texturing                              DONE (nv50, r600, llvmpipe, softpipe, swr)
 | 
			
		||||
  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_vertex_attrib_binding                          DONE (all drivers)
 | 
			
		||||
  GS5 Enhanced textureGather                            DONE (freedreno, i965/gen7+)
 | 
			
		||||
  GS5 Packing/bitfield/conversion functions             DONE (freedreno/a5xx+, i965/gen6+)
 | 
			
		||||
  GS5 Enhanced textureGather                            DONE (i965/gen7+, r600)
 | 
			
		||||
  GS5 Packing/bitfield/conversion functions             DONE (i965/gen6+, r600)
 | 
			
		||||
  GL_EXT_shader_integer_mix                             DONE (all drivers that support GLSL)
 | 
			
		||||
 | 
			
		||||
  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
 | 
			
		||||
      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_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_robustness                                     DONE (freedreno, i965, nvc0)
 | 
			
		||||
  GL_KHR_texture_compression_astc_ldr                   DONE (freedreno, i965/gen9+)
 | 
			
		||||
  GL_KHR_robustness                                     DONE (i965, nvc0, radeonsi)
 | 
			
		||||
  GL_KHR_texture_compression_astc_ldr                   DONE (i965/gen9+)
 | 
			
		||||
  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_elements_base_vertex                      DONE (all drivers)
 | 
			
		||||
  GL_OES_geometry_shader                                DONE (i965/hsw+, nvc0, softpipe)
 | 
			
		||||
  GL_OES_gpu_shader5                                    DONE (freedreno/a6xx, all drivers that support GL_ARB_gpu_shader5)
 | 
			
		||||
  GL_OES_primitive_bounding_box                         DONE (freedreno/a5xx+, i965/gen7+, nvc0, softpipe)
 | 
			
		||||
  GL_OES_sample_shading                                 DONE (freedreno/a6xx, i965, nvc0, r600)
 | 
			
		||||
  GL_OES_sample_variables                               DONE (freedreno/a6xx, i965, nvc0, r600)
 | 
			
		||||
  GL_OES_geometry_shader                                DONE (i965/hsw+, nvc0, radeonsi)
 | 
			
		||||
  GL_OES_gpu_shader5                                    DONE (all drivers that support GL_ARB_gpu_shader5)
 | 
			
		||||
  GL_OES_primitive_bounding_box                         DONE (i965/gen7+, nvc0, radeonsi)
 | 
			
		||||
  GL_OES_sample_shading                                 DONE (i965, nvc0, r600, radeonsi)
 | 
			
		||||
  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_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_texture_border_clamp                           DONE (all drivers)
 | 
			
		||||
  GL_OES_texture_buffer                                 DONE (freedreno, i965, nvc0, softpipe)
 | 
			
		||||
  GL_OES_texture_cube_map_array                         DONE (i965/hsw+, nvc0, softpipe)
 | 
			
		||||
  GL_OES_texture_buffer                                 DONE (i965, nvc0, radeonsi)
 | 
			
		||||
  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_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:
 | 
			
		||||
 | 
			
		||||
  GL_ARB_bindless_texture                               DONE (nvc0, radeonsi)
 | 
			
		||||
  GL_ARB_bindless_texture                               DONE (radeonsi)
 | 
			
		||||
  GL_ARB_cl_event                                       not started
 | 
			
		||||
  GL_ARB_compute_variable_group_size                    DONE (nvc0, radeonsi)
 | 
			
		||||
  GL_ARB_ES3_2_compatibility                            DONE (i965/gen8+, radeonsi, virgl)
 | 
			
		||||
  GL_ARB_fragment_shader_interlock                      DONE (i965)
 | 
			
		||||
  GL_ARB_ES3_2_compatibility                            DONE (i965/gen8+)
 | 
			
		||||
  GL_ARB_fragment_shader_interlock                      not started
 | 
			
		||||
  GL_ARB_gpu_shader_int64                               DONE (i965/gen8+, nvc0, radeonsi, softpipe, llvmpipe)
 | 
			
		||||
  GL_ARB_parallel_shader_compile                        DONE (all drivers)
 | 
			
		||||
  GL_ARB_post_depth_coverage                            DONE (i965, nvc0, radeonsi)
 | 
			
		||||
  GL_ARB_parallel_shader_compile                        not started, but Chia-I Wu did some related work in 2014
 | 
			
		||||
  GL_ARB_post_depth_coverage                            DONE (i965)
 | 
			
		||||
  GL_ARB_robustness_isolation                           not started
 | 
			
		||||
  GL_ARB_sample_locations                               DONE (nvc0)
 | 
			
		||||
  GL_ARB_seamless_cubemap_per_texture                   DONE (etnaviv/SEAMLESS_CUBE_MAP, freedreno, i965, nvc0, radeonsi, r600, softpipe, swr, virgl)
 | 
			
		||||
  GL_ARB_sample_locations                               not started
 | 
			
		||||
  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_clock                                   DONE (i965/gen7+, nv50, nvc0, r600, radeonsi, virgl)
 | 
			
		||||
  GL_ARB_shader_stencil_export                          DONE (i965/gen9+, r600, radeonsi, softpipe, llvmpipe, swr, virgl)
 | 
			
		||||
  GL_ARB_shader_clock                                   DONE (i965/gen7+, nv50, nvc0, radeonsi)
 | 
			
		||||
  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_sparse_buffer                                  DONE (radeonsi/CIK+)
 | 
			
		||||
  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_fd                               DONE (radeonsi)
 | 
			
		||||
  GL_EXT_memory_object_win32                            not started
 | 
			
		||||
  GL_EXT_render_snorm                                   DONE (i965, radeonsi)
 | 
			
		||||
  GL_EXT_semaphore                                      DONE (radeonsi)
 | 
			
		||||
  GL_EXT_semaphore_fd                                   DONE (radeonsi)
 | 
			
		||||
  GL_EXT_semaphore                                      not started
 | 
			
		||||
  GL_EXT_semaphore_fd                                   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_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_EGL_image                                      DONE (all drivers)
 | 
			
		||||
  GL_OES_EGL_image_external                             DONE (all drivers)
 | 
			
		||||
  GL_OES_EGL_image_external_essl3                       DONE (all drivers)
 | 
			
		||||
  GL_OES_EGL_image_external_essl3                       not started
 | 
			
		||||
  GL_OES_required_internalformat                        DONE (all drivers)
 | 
			
		||||
  GL_OES_surfaceless_context                            DONE (all drivers)
 | 
			
		||||
  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_linear                           DONE (freedreno, 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_linear                      DONE (freedreno, 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_viewport_array                                 DONE (i965, nvc0, radeonsi, softpipe)
 | 
			
		||||
  GLX_ARB_context_flush_control                         not started
 | 
			
		||||
  GL_OES_texture_float                                  DONE (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 (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                                   not started - based on GL_ARB_texture_view
 | 
			
		||||
  GL_OES_viewport_array                                 DONE (i965, nvc0, radeonsi)
 | 
			
		||||
  GLX_ARB_context_flush_control                         DONE
 | 
			
		||||
  GLX_ARB_robustness_application_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
 | 
			
		||||
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.1 -- all DONE: anv, radv
 | 
			
		||||
 | 
			
		||||
  VK_KHR_16bit_storage                                  DONE (anv/gen8+, radv)
 | 
			
		||||
  VK_KHR_bind_memory2                                   DONE (anv, radv)
 | 
			
		||||
Khronos extensions that are not part of any Vulkan version:
 | 
			
		||||
  VK_KHR_16bit_storage                                  in progress (Alejandro)
 | 
			
		||||
  VK_KHR_android_surface                                not started
 | 
			
		||||
  VK_KHR_dedicated_allocation                           DONE (anv, radv)
 | 
			
		||||
  VK_KHR_descriptor_update_template                     DONE (anv, radv)
 | 
			
		||||
  VK_KHR_device_group                                   not started
 | 
			
		||||
  VK_KHR_device_group_creation                          not started
 | 
			
		||||
  VK_KHR_external_fence                                 DONE (anv, radv)
 | 
			
		||||
  VK_KHR_external_fence_capabilities                    DONE (anv, radv)
 | 
			
		||||
  VK_KHR_display                                        not started
 | 
			
		||||
  VK_KHR_display_swapchain                              not started
 | 
			
		||||
  VK_KHR_external_fence                                 not started
 | 
			
		||||
  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_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_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_get_display_properties2                        DONE (anv, radv)
 | 
			
		||||
  VK_KHR_get_surface_capabilities2                      DONE (anv, radv)
 | 
			
		||||
  VK_KHR_image_format_list                              DONE (anv, radv)
 | 
			
		||||
  VK_KHR_imageless_framebuffer                          DONE (anv, radv)
 | 
			
		||||
  VK_KHR_get_memory_requirements2                       DONE (anv, radv)
 | 
			
		||||
  VK_KHR_get_physical_device_properties2                DONE (anv, radv)
 | 
			
		||||
  VK_KHR_get_surface_capabilities2                      DONE (anv)
 | 
			
		||||
  VK_KHR_incremental_present                            DONE (anv, radv)
 | 
			
		||||
  VK_KHR_maintenance1                                   DONE (anv, radv)
 | 
			
		||||
  VK_KHR_mir_surface                                    not started
 | 
			
		||||
  VK_KHR_pipeline_executable_properties                 DONE (anv, radv)
 | 
			
		||||
  VK_KHR_push_descriptor                                DONE (anv, radv)
 | 
			
		||||
  VK_KHR_sampler_mirror_clamp_to_edge                   DONE (anv, radv)
 | 
			
		||||
  VK_KHR_shader_atomic_int64                            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_shader_draw_parameters                         DONE (anv, radv)
 | 
			
		||||
  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_protected_capabilities                 DONE (anv, radv)
 | 
			
		||||
  VK_KHR_swapchain                                      DONE (anv, radv)
 | 
			
		||||
  VK_KHR_swapchain_mutable_format                       not started
 | 
			
		||||
  VK_KHR_uniform_buffer_standard_layout                 DONE (anv, radv)
 | 
			
		||||
  VK_KHR_vulkan_memory_model                            not started
 | 
			
		||||
  VK_KHR_variable_pointers                              DONE (anv, radv)
 | 
			
		||||
  VK_KHR_wayland_surface                                DONE (anv, radv)
 | 
			
		||||
  VK_KHR_win32_keyed_mutex                              not started
 | 
			
		||||
  VK_KHR_win32_surface                                  not started
 | 
			
		||||
 
 | 
			
		||||
@@ -8,13 +8,13 @@
 | 
			
		||||
<body>
 | 
			
		||||
 | 
			
		||||
<div class="header">
 | 
			
		||||
  The Mesa 3D Graphics Library
 | 
			
		||||
  <h1>The Mesa 3D Graphics Library</h1>
 | 
			
		||||
</div>
 | 
			
		||||
 | 
			
		||||
<iframe src="contents.html"></iframe>
 | 
			
		||||
<div class="content">
 | 
			
		||||
 | 
			
		||||
<h1>Help Wanted</h1>
 | 
			
		||||
<h1>Help Wanted / To-Do List</h1>
 | 
			
		||||
 | 
			
		||||
<p>
 | 
			
		||||
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.
 | 
			
		||||
<li>
 | 
			
		||||
<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>
 | 
			
		||||
<b>Remove aliasing warnings.</b>
 | 
			
		||||
Enable gcc's <code>-Wstrict-aliasing=2 -fstrict-aliasing</code> arguments, and
 | 
			
		||||
track down aliasing issues in the code.
 | 
			
		||||
Enable gcc -Wstrict-aliasing=2 -fstrict-aliasing and track down aliasing
 | 
			
		||||
issues in the code.
 | 
			
		||||
<li>
 | 
			
		||||
<b>Contribute more tests to
 | 
			
		||||
<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>
 | 
			
		||||
</p>
 | 
			
		||||
<ul>
 | 
			
		||||
  <li><a href="https://gitlab.freedesktop.org/mesa/mesa/blob/master/docs/features.txt">
 | 
			
		||||
    <code>features.txt</code></a> - Status of OpenGL 3.x / 4.x features in
 | 
			
		||||
    Mesa.</li>
 | 
			
		||||
  <li><a href="https://cgit.freedesktop.org/mesa/mesa/tree/docs/features.txt">
 | 
			
		||||
    <b>features.txt</b></a> - Status of OpenGL 3.x / 4.x features in Mesa.</li>
 | 
			
		||||
</ul>
 | 
			
		||||
 | 
			
		||||
<p>
 | 
			
		||||
@@ -57,9 +56,9 @@ You can find some further To-do lists here:
 | 
			
		||||
</p>
 | 
			
		||||
<ul>
 | 
			
		||||
  <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">
 | 
			
		||||
    <code>r300g</code></a> - Driver for ATI R300 - R500.</li>
 | 
			
		||||
    <b>r300g</b></a> - Driver for ATI R300 - R500.</li>
 | 
			
		||||
</ul>
 | 
			
		||||
 | 
			
		||||
<p>
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										525
									
								
								docs/index.html
									
									
									
									
									
								
							
							
						
						
									
										525
									
								
								docs/index.html
									
									
									
									
									
								
							@@ -8,7 +8,7 @@
 | 
			
		||||
<body>
 | 
			
		||||
 | 
			
		||||
<div class="header">
 | 
			
		||||
  The Mesa 3D Graphics Library
 | 
			
		||||
  <h1>The Mesa 3D Graphics Library</h1>
 | 
			
		||||
</div>
 | 
			
		||||
 | 
			
		||||
<iframe src="contents.html"></iframe>
 | 
			
		||||
@@ -16,441 +16,6 @@
 | 
			
		||||
 | 
			
		||||
<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>
 | 
			
		||||
<p>
 | 
			
		||||
<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.
 | 
			
		||||
This is a bug-fix release.
 | 
			
		||||
</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>
 | 
			
		||||
<p>
 | 
			
		||||
@@ -545,8 +105,7 @@ This is a bug-fix release.
 | 
			
		||||
<p>
 | 
			
		||||
<a href="relnotes/17.0.7.html">Mesa 17.0.7</a> is released.
 | 
			
		||||
This is a bug-fix release.
 | 
			
		||||
</p>
 | 
			
		||||
<p>
 | 
			
		||||
<br>
 | 
			
		||||
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
 | 
			
		||||
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.
 | 
			
		||||
 | 
			
		||||
These are bug-fix releases from the 13.0 and 17.0 branches, respectively.
 | 
			
		||||
</p>
 | 
			
		||||
<p>
 | 
			
		||||
<br>
 | 
			
		||||
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
 | 
			
		||||
to obtain future fixes.
 | 
			
		||||
@@ -631,8 +189,7 @@ This is a bug-fix release.
 | 
			
		||||
<p>
 | 
			
		||||
<a href="relnotes/12.0.6.html">Mesa 12.0.6</a> is released.
 | 
			
		||||
This is a bug-fix release.
 | 
			
		||||
</p>
 | 
			
		||||
<p>
 | 
			
		||||
<br>
 | 
			
		||||
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
 | 
			
		||||
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>
 | 
			
		||||
<a href="relnotes/12.0.5.html">Mesa 12.0.5</a> is released.
 | 
			
		||||
This is a bug-fix release.
 | 
			
		||||
</p>
 | 
			
		||||
<p>
 | 
			
		||||
<br>
 | 
			
		||||
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
 | 
			
		||||
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.
 | 
			
		||||
 | 
			
		||||
These are bug-fix releases from the 11.1 and 11.2 branches, respectively.
 | 
			
		||||
</p>
 | 
			
		||||
<p>
 | 
			
		||||
<br>
 | 
			
		||||
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
 | 
			
		||||
to obtain future fixes.
 | 
			
		||||
@@ -744,8 +299,7 @@ This is a bug-fix release.
 | 
			
		||||
<p>
 | 
			
		||||
<a href="relnotes/11.0.9.html">Mesa 11.0.9</a> is released.
 | 
			
		||||
This is a bug-fix release.
 | 
			
		||||
</p>
 | 
			
		||||
<p>
 | 
			
		||||
<br>
 | 
			
		||||
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
 | 
			
		||||
to obtain future fixes.
 | 
			
		||||
@@ -809,8 +363,7 @@ This is a bug-fix release.
 | 
			
		||||
<p>
 | 
			
		||||
<a href="relnotes/10.6.9.html">Mesa 10.6.9</a> is released.
 | 
			
		||||
This is a bug-fix release.
 | 
			
		||||
</p>
 | 
			
		||||
<p>
 | 
			
		||||
<br>
 | 
			
		||||
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
 | 
			
		||||
to obtain future fixes.
 | 
			
		||||
@@ -881,8 +434,7 @@ This is a bug-fix release.
 | 
			
		||||
<p>
 | 
			
		||||
<a href="relnotes/10.5.9.html">Mesa 10.5.9</a> is released.
 | 
			
		||||
This is a bug-fix release.
 | 
			
		||||
</p>
 | 
			
		||||
<p>
 | 
			
		||||
<br>
 | 
			
		||||
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
 | 
			
		||||
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.
 | 
			
		||||
 | 
			
		||||
These are bug-fix releases from the 10.3 and 10.4 branches, respectively.
 | 
			
		||||
</p>
 | 
			
		||||
<p>
 | 
			
		||||
<br>
 | 
			
		||||
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
 | 
			
		||||
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.
 | 
			
		||||
 | 
			
		||||
These are bug-fix releases from the 10.2 and 10.3 branches, respectively.
 | 
			
		||||
</p>
 | 
			
		||||
<p>
 | 
			
		||||
<br>
 | 
			
		||||
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
 | 
			
		||||
to obtain future fixes.
 | 
			
		||||
@@ -1157,8 +707,7 @@ This is a bug-fix release.
 | 
			
		||||
<p>
 | 
			
		||||
<a href="relnotes/10.0.5.html">Mesa 10.0.5</a> is released.
 | 
			
		||||
This is a bug-fix release.
 | 
			
		||||
</p>
 | 
			
		||||
<p>
 | 
			
		||||
<br>
 | 
			
		||||
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
 | 
			
		||||
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.
 | 
			
		||||
</p>
 | 
			
		||||
 | 
			
		||||
<h2>April 4, 2007</h2>
 | 
			
		||||
<h2>April 2007</h2>
 | 
			
		||||
<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.
 | 
			
		||||
</p>
 | 
			
		||||
 | 
			
		||||
@@ -2037,7 +1586,7 @@ d2b5ba32b53e0ad0576c637a4cc1fb41  MesaDemos-5.1.zip
 | 
			
		||||
</pre>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
<h2>November 12, 2003</h2>
 | 
			
		||||
<H2>November 12, 2003</H2>
 | 
			
		||||
 | 
			
		||||
<p>
 | 
			
		||||
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>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
<h2>June 8, 2003</h2>
 | 
			
		||||
<h2>June 2003</h2>
 | 
			
		||||
 | 
			
		||||
<p>
 | 
			
		||||
Mesa's directory tree has been overhauled.
 | 
			
		||||
@@ -2467,7 +2016,7 @@ Here's what's new:</p>
 | 
			
		||||
 | 
			
		||||
<h2>April 29, 2001</h2>
 | 
			
		||||
<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>
 | 
			
		||||
@@ -2586,9 +2135,8 @@ just bug fixes.</p>
 | 
			
		||||
</pre>
 | 
			
		||||
 | 
			
		||||
<p>Please report any problems with this release ASAP. Bugs should be filed on the
 | 
			
		||||
Mesa3D website at sourceforge.
 | 
			
		||||
</p>
 | 
			
		||||
<p>After 3.2 is wrapped up I hope to release 3.3 beta 1 soon afterward.</p>
 | 
			
		||||
Mesa3D website at sourceforge.<br>
 | 
			
		||||
After 3.2 is wrapped up I hope to release 3.3 beta 1 soon afterward.</p>
 | 
			
		||||
<p>-- Brian</p>
 | 
			
		||||
 | 
			
		||||
<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>
 | 
			
		||||
 | 
			
		||||
<h2>June 7, 1999</h2>
 | 
			
		||||
<p>RPMS of the nVidia RIVA server can be found at
 | 
			
		||||
<a href="ftp://ftp.mesa3d.org/mesa/misc/nVidia/">
 | 
			
		||||
ftp://ftp.mesa3d.org/mesa/misc/nVidia/</a>.</p>
 | 
			
		||||
<p>RPMS of the nVidia RIVA server can be found at <code>ftp://ftp.mesa3d.org/mesa/misc/nVidia/</code>.</p>
 | 
			
		||||
 | 
			
		||||
<h2>June 2, 1999</h2>
 | 
			
		||||
<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
 | 
			
		||||
based on Mesa 3.0. They can be downloaded from
 | 
			
		||||
<a href="https://www.nvidia.com/Products.nsf/htmlmedia/software_drivers.html">
 | 
			
		||||
https://www.nvidia.com/Products.nsf/htmlmedia/software_drivers.html</a>.</p>
 | 
			
		||||
based on Mesa 3.0. They can be downloaded from <code>https://www.nvidia.com/Products.nsf/htmlmedia/software_drivers.html</code>.</p>
 | 
			
		||||
 | 
			
		||||
<h2>May 24, 1999</h2>
 | 
			
		||||
<p>Beta 2 of Mesa 3.1 has been make available at
 | 
			
		||||
<a href="ftp://ftp.mesa3d.org/mesa/beta/">ftp://ftp.mesa3d.org/mesa/beta/</a>. If you are into the
 | 
			
		||||
quake scene, you may want to try this out, as it contains some optimizations
 | 
			
		||||
specifically in the Q3A rendering path.
 | 
			
		||||
<p>Beta 2 of Mesa 3.1 has been make available at <code>ftp://ftp.mesa3d.org/mesa/beta/</code>.
 | 
			
		||||
If you are into the quake scene, you may want to try this out, as it contains some
 | 
			
		||||
optimizations 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
 | 
			
		||||
has posted their lowlevel design documents at
 | 
			
		||||
<a href="http://www.precisioninsight.com">www.precisioninsight.com</a>.</p>
 | 
			
		||||
has posted their lowlevel design documents at <code>http://www.precisioninsight.com</code>.</p>
 | 
			
		||||
 | 
			
		||||
<h2>May 13, 1999</h2>
 | 
			
		||||
<pre>May 1999 - John Carmack of id Software, Inc. has made a donation of
 | 
			
		||||
@@ -2679,11 +2221,11 @@ grateful.
 | 
			
		||||
 | 
			
		||||
<h2>May 1, 1999</h2>
 | 
			
		||||
<p>John Carmack made an interesting .plan update yesterday:</p>
 | 
			
		||||
<pre>
 | 
			
		||||
I put together a document on optimizing OpenGL drivers for Q3 that should be helpful to the various Linux 3D teams.
 | 
			
		||||
 | 
			
		||||
http://www.quake3arena.com/news/glopt.html
 | 
			
		||||
</pre>
 | 
			
		||||
<blockquote>
 | 
			
		||||
    <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"
 | 
			
		||||
</blockquote>
 | 
			
		||||
 | 
			
		||||
<h2>April 7, 1999</h2>
 | 
			
		||||
<p>Updated the Mesa contributors section and added links to RPM Mesa packages.</p>
 | 
			
		||||
@@ -2691,10 +2233,9 @@ http://www.quake3arena.com/news/glopt.html
 | 
			
		||||
<h2>March 18, 1999</h2>
 | 
			
		||||
<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
 | 
			
		||||
<a href="http://web.archive.org/web/20040805154836/http://www.sgi.com/software/opensource/glx/download.html">GLX source code</a>.
 | 
			
		||||
</p>
 | 
			
		||||
<a href="https://www.sgi.com/software/opensource/glx/">GLX source code</a>.</p>
 | 
			
		||||
 | 
			
		||||
<h2>January 22, 1999</h2>
 | 
			
		||||
<p><a href="https://www.mesa3d.org">www.mesa3d.org</a> established</p>
 | 
			
		||||
 
 | 
			
		||||
@@ -8,7 +8,7 @@
 | 
			
		||||
<body>
 | 
			
		||||
 | 
			
		||||
<div class="header">
 | 
			
		||||
  The Mesa 3D Graphics Library
 | 
			
		||||
  <h1>The Mesa 3D Graphics Library</h1>
 | 
			
		||||
</div>
 | 
			
		||||
 | 
			
		||||
<iframe src="contents.html"></iframe>
 | 
			
		||||
@@ -22,7 +22,7 @@
 | 
			
		||||
  <li><a href="#prereq-general">General prerequisites</a>
 | 
			
		||||
  <li><a href="#prereq-dri">For DRI and hardware acceleration</a>
 | 
			
		||||
  </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="#android">Building with AOSP (Android)</a>
 | 
			
		||||
<li><a href="#libs">Library Information</a>
 | 
			
		||||
@@ -30,23 +30,25 @@
 | 
			
		||||
</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>
 | 
			
		||||
<li><a href="https://mesonbuild.com">meson</a> is required when building on *nix platforms and is supported on windows.
 | 
			
		||||
<li><a href="http://www.scons.org/">SCons</a> is an alternative for building on
 | 
			
		||||
Windows and Linux.
 | 
			
		||||
<li>Autoconf is required when building on *nix platforms.
 | 
			
		||||
<li><a href="http://www.scons.org/">SCons</a> is required for building on
 | 
			
		||||
Windows and optional for Linux (it's an alternative to autoconf/automake.)
 | 
			
		||||
</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.
 | 
			
		||||
</li>
 | 
			
		||||
</ul>
 | 
			
		||||
 | 
			
		||||
<h4>Compiler</h4>
 | 
			
		||||
 | 
			
		||||
<p>
 | 
			
		||||
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.
 | 
			
		||||
@@ -55,29 +57,35 @@ willing to maintain support for other compiler get in touch.
 | 
			
		||||
<ul>
 | 
			
		||||
<li>GCC 4.2.0 or later (some parts of Mesa may require later versions)
 | 
			
		||||
<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>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
<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>
 | 
			
		||||
<li><a href="https://www.python.org/">Python</a> - Python is required.
 | 
			
		||||
When building with scons 2.7 is required.
 | 
			
		||||
When building with meson 3.5 or newer is required.
 | 
			
		||||
Version 2.6.4 or later should work.
 | 
			
		||||
</li>
 | 
			
		||||
<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>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,
 | 
			
		||||
(or later) should work.
 | 
			
		||||
On Windows with MinGW, install flex and bison with:
 | 
			
		||||
<pre>mingw-get install msys-flex msys-bison</pre>
 | 
			
		||||
For MSVC on Windows, install
 | 
			
		||||
<a href="http://winflexbison.sourceforge.net/">Win flex-bison</a>.
 | 
			
		||||
</p>
 | 
			
		||||
</div>
 | 
			
		||||
</ul>
 | 
			
		||||
<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
 | 
			
		||||
</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>
 | 
			
		||||
Meson is the latest build system in mesa, it is currently able to build for
 | 
			
		||||
*nix systems like Linux and BSD, macOS, Haiku, and Windows.
 | 
			
		||||
The primary method to build Mesa on Unix systems is with autoconf.
 | 
			
		||||
</p>
 | 
			
		||||
 | 
			
		||||
<p>
 | 
			
		||||
The general approach is:
 | 
			
		||||
The general approach is the standard:
 | 
			
		||||
</p>
 | 
			
		||||
<pre>
 | 
			
		||||
  meson builddir/
 | 
			
		||||
  ninja -C builddir/
 | 
			
		||||
  sudo ninja -C builddir/ install
 | 
			
		||||
  ./configure
 | 
			
		||||
  make
 | 
			
		||||
  sudo make install
 | 
			
		||||
</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>
 | 
			
		||||
Please read the <a href="meson.html">detailed meson instructions</a>
 | 
			
		||||
for more information
 | 
			
		||||
</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
 | 
			
		||||
But please read the <a href="autoconf.html">detailed autoconf instructions</a>
 | 
			
		||||
for more details.
 | 
			
		||||
</p>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
<h2 id="scons">3. Building with SCons (Windows/Linux)</h2>
 | 
			
		||||
<h1 id="scons">3. Building with SCons (Windows/Linux)</h1>
 | 
			
		||||
 | 
			
		||||
<p>
 | 
			
		||||
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>
 | 
			
		||||
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>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
<h2 id="libs">5. Library Information</h2>
 | 
			
		||||
<h1 id="libs">5. Library Information</h1>
 | 
			
		||||
 | 
			
		||||
<p>
 | 
			
		||||
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:
 | 
			
		||||
</p>
 | 
			
		||||
<pre>
 | 
			
		||||
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          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*
 | 
			
		||||
-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          23 Mar 26 07:53 libOSMesa.so.6 -> libOSMesa.so.6.1.060100*
 | 
			
		||||
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*
 | 
			
		||||
-rwxr-xr-x    1 brian    users       23871 Mar 26 07:53 libOSMesa.so.6.1.060100*
 | 
			
		||||
</pre>
 | 
			
		||||
 | 
			
		||||
<p>
 | 
			
		||||
<b>libGL</b> is the main OpenGL library (i.e. Mesa), while <b>libOSMesa</b>
 | 
			
		||||
is the OSMesa (Off-Screen) interface library.
 | 
			
		||||
<b>libGL</b> is the main OpenGL library (i.e. Mesa).
 | 
			
		||||
<br>
 | 
			
		||||
<b>libOSMesa</b> is the OSMesa (Off-Screen) interface library.
 | 
			
		||||
</p>
 | 
			
		||||
 | 
			
		||||
<p>
 | 
			
		||||
@@ -239,10 +226,10 @@ versions of libGL and device drivers.
 | 
			
		||||
</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>
 | 
			
		||||
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.
 | 
			
		||||
</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
 | 
			
		||||
</pre>
 | 
			
		||||
 | 
			
		||||
<br>
 | 
			
		||||
 | 
			
		||||
</div>
 | 
			
		||||
</body>
 | 
			
		||||
</html>
 | 
			
		||||
 
 | 
			
		||||
@@ -2,13 +2,13 @@
 | 
			
		||||
<html lang="en">
 | 
			
		||||
<head>
 | 
			
		||||
  <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">
 | 
			
		||||
</head>
 | 
			
		||||
<body>
 | 
			
		||||
 | 
			
		||||
<div class="header">
 | 
			
		||||
  The Mesa 3D Graphics Library
 | 
			
		||||
  <h1>The Mesa 3D Graphics Library</h1>
 | 
			
		||||
</div>
 | 
			
		||||
 | 
			
		||||
<iframe src="contents.html"></iframe>
 | 
			
		||||
@@ -50,7 +50,7 @@ systems.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
<h2>Project History</h2>
 | 
			
		||||
<h1>Project History</h1>
 | 
			
		||||
 | 
			
		||||
<p>
 | 
			
		||||
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>
 | 
			
		||||
This is a summary of the major versions of Mesa.
 | 
			
		||||
@@ -194,7 +194,7 @@ of the OpenGL specification is implemented.
 | 
			
		||||
</p>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
<h3>Version 12.x features</h3>
 | 
			
		||||
<h2>Version 12.x features</h2>
 | 
			
		||||
<p>
 | 
			
		||||
Version 12.x of Mesa implements the OpenGL 4.3 API, but not all drivers
 | 
			
		||||
support OpenGL 4.3.
 | 
			
		||||
@@ -204,21 +204,21 @@ Initial support for Vulkan is also included.
 | 
			
		||||
</p>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
<h3>Version 11.x features</h3>
 | 
			
		||||
<h2>Version 11.x features</h2>
 | 
			
		||||
<p>
 | 
			
		||||
Version 11.x of Mesa implements the OpenGL 4.1 API, but not all drivers
 | 
			
		||||
support OpenGL 4.1.
 | 
			
		||||
</p>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
<h3>Version 10.x features</h3>
 | 
			
		||||
<h2>Version 10.x features</h2>
 | 
			
		||||
<p>
 | 
			
		||||
Version 10.x of Mesa implements the OpenGL 3.3 API, but not all drivers
 | 
			
		||||
support OpenGL 3.3.
 | 
			
		||||
</p>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
<h3>Version 9.x features</h3>
 | 
			
		||||
<h2>Version 9.x features</h2>
 | 
			
		||||
<p>
 | 
			
		||||
Version 9.x of Mesa implements the OpenGL 3.1 API.
 | 
			
		||||
While the driver for Intel Sandy Bridge and Ivy Bridge is the only
 | 
			
		||||
@@ -233,7 +233,7 @@ tracker for OpenCL.
 | 
			
		||||
</p>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
<h3>Version 8.x features</h3>
 | 
			
		||||
<h2>Version 8.x features</h2>
 | 
			
		||||
<p>
 | 
			
		||||
Version 8.x of Mesa implements the OpenGL 3.0 API.
 | 
			
		||||
The developers at Intel deserve a lot of credit for implementing most
 | 
			
		||||
@@ -242,14 +242,14 @@ the i965 driver.
 | 
			
		||||
</p>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
<h3>Version 7.x features</h3>
 | 
			
		||||
<h2>Version 7.x features</h2>
 | 
			
		||||
<p>
 | 
			
		||||
Version 7.x of Mesa implements the OpenGL 2.1 API.  The main feature
 | 
			
		||||
of OpenGL 2.x is the OpenGL Shading Language.
 | 
			
		||||
</p>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
<h3>Version 6.x features</h3>
 | 
			
		||||
<h2>Version 6.x features</h2>
 | 
			
		||||
<p>
 | 
			
		||||
Version 6.x of Mesa implements the OpenGL 1.5 API with the following
 | 
			
		||||
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>
 | 
			
		||||
Version 5.x of Mesa implements the OpenGL 1.4 API with the following
 | 
			
		||||
extensions incorporated as standard features:
 | 
			
		||||
@@ -315,7 +315,7 @@ extensions incorporated as standard features:
 | 
			
		||||
</ul>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
<h3>Version 4.x features</h3>
 | 
			
		||||
<h2>Version 4.x features</h2>
 | 
			
		||||
 | 
			
		||||
<p>
 | 
			
		||||
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
 | 
			
		||||
</ul>
 | 
			
		||||
 | 
			
		||||
<h3>Version 3.x features</h3>
 | 
			
		||||
<h2>Version 3.x features</h2>
 | 
			
		||||
 | 
			
		||||
<p>
 | 
			
		||||
Version 3.x of Mesa implements the OpenGL 1.2 API with the following
 | 
			
		||||
@@ -350,7 +350,7 @@ features:
 | 
			
		||||
</ul>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
<h3>Version 2.x features</h3>
 | 
			
		||||
<h2>Version 2.x features</h2>
 | 
			
		||||
<p>
 | 
			
		||||
Version 2.x of Mesa implements the OpenGL 1.1 API with the following
 | 
			
		||||
features.
 | 
			
		||||
 
 | 
			
		||||
@@ -2,21 +2,19 @@
 | 
			
		||||
<html lang="en">
 | 
			
		||||
<head>
 | 
			
		||||
  <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">
 | 
			
		||||
</head>
 | 
			
		||||
<body>
 | 
			
		||||
 | 
			
		||||
<div class="header">
 | 
			
		||||
  The Mesa 3D Graphics Library
 | 
			
		||||
  <h1>The Mesa 3D Graphics Library</h1>
 | 
			
		||||
</div>
 | 
			
		||||
 | 
			
		||||
<iframe src="contents.html"></iframe>
 | 
			
		||||
<div class="content">
 | 
			
		||||
 | 
			
		||||
<h1>License and Copyright</h1>
 | 
			
		||||
 | 
			
		||||
<h2>Disclaimer</h2>
 | 
			
		||||
<h1>Disclaimer</h1>
 | 
			
		||||
 | 
			
		||||
<p>
 | 
			
		||||
Mesa is a 3-D graphics library with an API which is very similar to
 | 
			
		||||
@@ -34,7 +32,7 @@ vendor.
 | 
			
		||||
<p>
 | 
			
		||||
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
 | 
			
		||||
library</em>.
 | 
			
		||||
library</em>. <br>
 | 
			
		||||
</p>
 | 
			
		||||
 | 
			
		||||
<p>
 | 
			
		||||
@@ -44,7 +42,7 @@ library</em>.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
<h2>License / Copyright Information</h2>
 | 
			
		||||
<h1>License / Copyright Information</h1>
 | 
			
		||||
 | 
			
		||||
<p>
 | 
			
		||||
The Mesa distribution consists of several components.  Different copyrights
 | 
			
		||||
@@ -84,7 +82,7 @@ SOFTWARE.
 | 
			
		||||
</pre>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
<h2>Attention, Contributors</h2>
 | 
			
		||||
<h1>Attention, Contributors</h1>
 | 
			
		||||
 | 
			
		||||
<p>
 | 
			
		||||
When contributing to the Mesa project you must agree to the licensing terms
 | 
			
		||||
@@ -94,7 +92,7 @@ and their respective licenses.
 | 
			
		||||
</p>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
<h2>Mesa Component Licenses</h2>
 | 
			
		||||
<h1>Mesa Component Licenses</h1>
 | 
			
		||||
 | 
			
		||||
<pre>
 | 
			
		||||
Component         Location               License
 | 
			
		||||
 
 | 
			
		||||
@@ -2,13 +2,13 @@
 | 
			
		||||
<html lang="en">
 | 
			
		||||
<head>
 | 
			
		||||
  <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">
 | 
			
		||||
</head>
 | 
			
		||||
<body>
 | 
			
		||||
 | 
			
		||||
<div class="header">
 | 
			
		||||
  The Mesa 3D Graphics Library
 | 
			
		||||
  <h1>The Mesa 3D Graphics Library</h1>
 | 
			
		||||
</div>
 | 
			
		||||
 | 
			
		||||
<iframe src="contents.html"></iframe>
 | 
			
		||||
@@ -68,14 +68,14 @@ kernels, see the
 | 
			
		||||
</p>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
<h2>IRC</h2>
 | 
			
		||||
<h1>IRC</h1>
 | 
			
		||||
 | 
			
		||||
<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>
 | 
			
		||||
</p>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
<h2>OpenGL Forums</h2>
 | 
			
		||||
<h1>OpenGL Forums</h1>
 | 
			
		||||
 | 
			
		||||
<p>
 | 
			
		||||
Here are some other OpenGL-related forums you might find useful:
 | 
			
		||||
 
 | 
			
		||||
@@ -2,27 +2,25 @@
 | 
			
		||||
<html lang="en">
 | 
			
		||||
<head>
 | 
			
		||||
  <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">
 | 
			
		||||
</head>
 | 
			
		||||
<body>
 | 
			
		||||
 | 
			
		||||
<div class="header">
 | 
			
		||||
  The Mesa 3D Graphics Library
 | 
			
		||||
  <h1>The Mesa 3D Graphics Library</h1>
 | 
			
		||||
</div>
 | 
			
		||||
 | 
			
		||||
<iframe src="contents.html"></iframe>
 | 
			
		||||
<div class="content">
 | 
			
		||||
 | 
			
		||||
<h1>Gallium LLVMpipe Driver</h1>
 | 
			
		||||
 | 
			
		||||
<h2>Introduction</h2>
 | 
			
		||||
<h1>Introduction</h1>
 | 
			
		||||
 | 
			
		||||
<p>
 | 
			
		||||
The Gallium llvmpipe driver is a software rasterizer that uses LLVM to
 | 
			
		||||
do runtime code generation.
 | 
			
		||||
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.
 | 
			
		||||
Also, the driver is multithreaded to take advantage of multiple CPU cores
 | 
			
		||||
(up to 8 at this time).
 | 
			
		||||
@@ -30,40 +28,28 @@ It's the fastest software rasterizer for Mesa.
 | 
			
		||||
</p>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
<h2>Requirements</h2>
 | 
			
		||||
<h1>Requirements</h1>
 | 
			
		||||
 | 
			
		||||
<ul>
 | 
			
		||||
<li>
 | 
			
		||||
   <p>An x86 or amd64 processor; 64-bit mode recommended.</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
 | 
			
		||||
   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>
 | 
			
		||||
   For ppc64le processors, use of the Altivec feature (the Vector
 | 
			
		||||
   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.
 | 
			
		||||
   See /proc/cpuinfo to know what your CPU supports.
 | 
			
		||||
   </p>
 | 
			
		||||
</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>
 | 
			
		||||
   For Linux, on a recent Debian based distribution do:
 | 
			
		||||
   </p>
 | 
			
		||||
<pre>
 | 
			
		||||
     aptitude install llvm-dev
 | 
			
		||||
</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>
 | 
			
		||||
   For a RPM-based distribution do:
 | 
			
		||||
   </p>
 | 
			
		||||
@@ -73,9 +59,8 @@ It's the fastest software rasterizer for Mesa.
 | 
			
		||||
 | 
			
		||||
   <p>
 | 
			
		||||
   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
 | 
			
		||||
   <code>LLVM</code> environment variable to the directory you installed
 | 
			
		||||
   it to.
 | 
			
		||||
   (either natively or through cross compilers) and CMake, and set the LLVM
 | 
			
		||||
   environment variable to the directory you installed it to.
 | 
			
		||||
 | 
			
		||||
   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
 | 
			
		||||
@@ -104,8 +89,8 @@ It's the fastest software rasterizer for Mesa.
 | 
			
		||||
   </table>
 | 
			
		||||
 | 
			
		||||
   <p>
 | 
			
		||||
   You can build only the x86 target by passing
 | 
			
		||||
   <code>-DLLVM_TARGETS_TO_BUILD=X86</code> to cmake.
 | 
			
		||||
   You can build only the x86 target by passing -DLLVM_TARGETS_TO_BUILD=X86
 | 
			
		||||
   to cmake.
 | 
			
		||||
   </p>
 | 
			
		||||
</li>
 | 
			
		||||
 | 
			
		||||
@@ -115,7 +100,7 @@ It's the fastest software rasterizer for Mesa.
 | 
			
		||||
</ul>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
<h2>Building</h2>
 | 
			
		||||
<h1>Building</h1>
 | 
			
		||||
 | 
			
		||||
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
 | 
			
		||||
</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>
 | 
			
		||||
  mkdir build
 | 
			
		||||
  cd build
 | 
			
		||||
  meson -D glx=gallium-xlib -D gallium-drivers=swrast
 | 
			
		||||
  ninja
 | 
			
		||||
  make linux-llvm
 | 
			
		||||
</pre>
 | 
			
		||||
 | 
			
		||||
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>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
<h2>Using</h2>
 | 
			
		||||
<h1>Using</h1>
 | 
			
		||||
 | 
			
		||||
<h3>Linux</h3>
 | 
			
		||||
<h2>Linux</h2>
 | 
			
		||||
 | 
			
		||||
<p>On Linux, building will create a drop-in alternative for
 | 
			
		||||
<code>libGL.so</code> into</p>
 | 
			
		||||
<p>On Linux, building will create a drop-in alternative for libGL.so into</p>
 | 
			
		||||
 | 
			
		||||
<pre>
 | 
			
		||||
  build/foo/gallium/targets/libgl-xlib/libGL.so
 | 
			
		||||
@@ -155,15 +137,13 @@ or
 | 
			
		||||
  lib/gallium/libGL.so
 | 
			
		||||
</pre>
 | 
			
		||||
 | 
			
		||||
<p>To use it set the <code>LD_LIBRARY_PATH</code> environment variable
 | 
			
		||||
accordingly.</p>
 | 
			
		||||
<p>To use it set the LD_LIBRARY_PATH environment variable accordingly.</p>
 | 
			
		||||
 | 
			
		||||
<p>For performance evaluation pass <code>build=release</code> to scons,
 | 
			
		||||
and use the corresponding lib directory without the <code>-debug</code>
 | 
			
		||||
suffix.</p>
 | 
			
		||||
<p>For performance evaluation pass build=release to scons, and use the corresponding
 | 
			
		||||
lib directory without the "-debug" suffix.</p>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
<h3>Windows</h3>
 | 
			
		||||
<h2>Windows</h2>
 | 
			
		||||
 | 
			
		||||
<p>
 | 
			
		||||
On Windows, building will create
 | 
			
		||||
@@ -181,9 +161,7 @@ any OpenGL drivers):
 | 
			
		||||
</p>
 | 
			
		||||
 | 
			
		||||
<ul>
 | 
			
		||||
  <li><p>copy <code>build/windows-x86-debug/gallium/targets/libgl-gdi/opengl32.dll</code>
 | 
			
		||||
         to <code>C:\Windows\SysWOW64\mesadrv.dll</code>
 | 
			
		||||
  </p></li>
 | 
			
		||||
  <li><p>copy build/windows-x86-debug/gallium/targets/libgl-gdi/opengl32.dll to C:\Windows\SysWOW64\mesadrv.dll</p></li>
 | 
			
		||||
  <li><p>load this registry settings:</p>
 | 
			
		||||
  <pre>REGEDIT4
 | 
			
		||||
 | 
			
		||||
@@ -200,7 +178,7 @@ any OpenGL drivers):
 | 
			
		||||
</ul>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
<h2>Profiling</h2>
 | 
			
		||||
<h1>Profiling</h1>
 | 
			
		||||
 | 
			
		||||
<p>
 | 
			
		||||
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.
 | 
			
		||||
</p>
 | 
			
		||||
 | 
			
		||||
<h3>Linux perf integration</h3>
 | 
			
		||||
<h2>Linux perf integration</h2>
 | 
			
		||||
 | 
			
		||||
<p>
 | 
			
		||||
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>
 | 
			
		||||
 | 
			
		||||
<p>
 | 
			
		||||
When run inside Linux perf, llvmpipe will create a
 | 
			
		||||
<code>/tmp/perf-XXXXX.map</code> file with symbol address table.  It also
 | 
			
		||||
dumps assembly code to <code>/tmp/perf-XXXXX.map.asm</code>, which can be
 | 
			
		||||
used by the <code>bin/perf-annotate-jit.py</code> script to produce
 | 
			
		||||
disassembly of the generated code annotated with the samples.
 | 
			
		||||
When run inside Linux perf, llvmpipe will create a /tmp/perf-XXXXX.map file with
 | 
			
		||||
symbol address table.  It also dumps assembly code to /tmp/perf-XXXXX.map.asm,
 | 
			
		||||
which can be used by the bin/perf-annotate-jit.py script to produce disassembly of
 | 
			
		||||
the generated code annotated with the samples.
 | 
			
		||||
</p>
 | 
			
		||||
 | 
			
		||||
<p>You can obtain a call graph via
 | 
			
		||||
<a href="https://github.com/jrfonseca/gprof2dot#linux-perf">Gprof2Dot</a>.</p>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
<h2>Unit testing</h2>
 | 
			
		||||
<h1>Unit testing</h1>
 | 
			
		||||
 | 
			
		||||
<p>
 | 
			
		||||
Building will also create several unit tests in
 | 
			
		||||
<code>build/linux-???-debug/gallium/drivers/llvmpipe</code>:
 | 
			
		||||
build/linux-???-debug/gallium/drivers/llvmpipe:
 | 
			
		||||
</p>
 | 
			
		||||
 | 
			
		||||
<ul>
 | 
			
		||||
<li> <code>lp_test_blend</code>: blending
 | 
			
		||||
<li> <code>lp_test_conv</code>: SIMD vector conversion
 | 
			
		||||
<li> <code>lp_test_format</code>: pixel unpacking/packing
 | 
			
		||||
<li> lp_test_blend: blending
 | 
			
		||||
<li> lp_test_conv: SIMD vector conversion
 | 
			
		||||
<li> lp_test_format: pixel unpacking/packing
 | 
			
		||||
</ul>
 | 
			
		||||
 | 
			
		||||
<p>
 | 
			
		||||
Some of these tests can output results and benchmarks to a tab-separated file
 | 
			
		||||
for later analysis, e.g.:
 | 
			
		||||
Some of this tests can output results and benchmarks to a tab-separated-file
 | 
			
		||||
for posterior analysis, e.g.:
 | 
			
		||||
</p>
 | 
			
		||||
<pre>
 | 
			
		||||
  build/linux-x86_64-debug/gallium/drivers/llvmpipe/lp_test_blend -o blend.tsv
 | 
			
		||||
</pre>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
<h2>Development Notes</h2>
 | 
			
		||||
<h1>Development Notes</h1>
 | 
			
		||||
 | 
			
		||||
<ul>
 | 
			
		||||
<li>
 | 
			
		||||
  When looking at this code for the first time, start in lp_state_fs.c, and
 | 
			
		||||
  then skim through the <code>lp_bld_*</code> functions called there, and
 | 
			
		||||
  the comments at the top of the <code>lp_bld_*.c</code> functions.
 | 
			
		||||
  When looking to this code by the first time start in lp_state_fs.c, and 
 | 
			
		||||
  then skim through the lp_bld_* functions called in there, and the comments
 | 
			
		||||
  at the top of the lp_bld_*.c functions.
 | 
			
		||||
</li>
 | 
			
		||||
<li>
 | 
			
		||||
  The driver-independent parts of the LLVM / Gallium code are found in
 | 
			
		||||
  <code>src/gallium/auxiliary/gallivm/</code>.  The filenames and function
 | 
			
		||||
  prefixes need to be renamed from <code>lp_bld_</code> to something else
 | 
			
		||||
  though.
 | 
			
		||||
  src/gallium/auxiliary/gallivm/.  The filenames and function prefixes
 | 
			
		||||
  need to be renamed from "lp_bld_" to something else though.
 | 
			
		||||
</li>
 | 
			
		||||
<li>
 | 
			
		||||
  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
 | 
			
		||||
  generation. See 
 | 
			
		||||
  <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
 | 
			
		||||
  reference.
 | 
			
		||||
  this stand-alone example</a>.  See the llvm-c/Core.h file for reference.
 | 
			
		||||
</li>
 | 
			
		||||
</ul>
 | 
			
		||||
 | 
			
		||||
<h2 id="recommended_reading">Recommended Reading</h2>
 | 
			
		||||
<h1 id="recommended_reading">Recommended Reading</h1>
 | 
			
		||||
 | 
			
		||||
<ul>
 | 
			
		||||
  <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.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="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>
 | 
			
		||||
  </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;
 | 
			
		||||
	font: 14px 'Lucida Grande', Geneva, Arial, Verdana, sans-serif;
 | 
			
		||||
	color: black;
 | 
			
		||||
 	link: #111188;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
h1 {
 | 
			
		||||
	font-size: 24px;
 | 
			
		||||
	font: 24px 'Lucida Grande', Geneva, Arial, Verdana, sans-serif;
 | 
			
		||||
	font-weight: bold;
 | 
			
		||||
	color: black;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
h2 {
 | 
			
		||||
	font-size: 18px;
 | 
			
		||||
	font: 18px 'Lucida Grande', Geneva, Arial, Verdana, sans-serif, bold;
 | 
			
		||||
	font-weight: bold;
 | 
			
		||||
	color: black;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
code {
 | 
			
		||||
	font-family: monospace;
 | 
			
		||||
	font-size: 10pt;
 | 
			
		||||
	color: black;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
pre {
 | 
			
		||||
	/*font-family: monospace;*/
 | 
			
		||||
	font-size: 10pt;
 | 
			
		||||
	background-color: #eee;
 | 
			
		||||
	margin-left: 2em;
 | 
			
		||||
	padding: .5em;
 | 
			
		||||
	/*color: black;*/
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
iframe {
 | 
			
		||||
	width: 19em;
 | 
			
		||||
	height: 80em;
 | 
			
		||||
	border: none;
 | 
			
		||||
	float: left;
 | 
			
		||||
  width: 19em;
 | 
			
		||||
  height: 80em;
 | 
			
		||||
  border: none;
 | 
			
		||||
  float: left;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.content {
 | 
			
		||||
	position: absolute;
 | 
			
		||||
	left: 20em;
 | 
			
		||||
	right: 10px;
 | 
			
		||||
	overflow: hidden;
 | 
			
		||||
  position: absolute;
 | 
			
		||||
  left: 20em;
 | 
			
		||||
  right: 10px;
 | 
			
		||||
  overflow: hidden
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.header {
 | 
			
		||||
	background: url('gears.png') 15px no-repeat, black url('gears.png') right no-repeat;
 | 
			
		||||
	padding: 1.75rem;
 | 
			
		||||
	text-align: center;
 | 
			
		||||
	color: white;
 | 
			
		||||
	font: x-large sans-serif;
 | 
			
		||||
  background: black url('gears.png') 15px no-repeat;
 | 
			
		||||
  margin:0;
 | 
			
		||||
  padding: 5px;
 | 
			
		||||
  clear:both;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.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>
 | 
			
		||||
 | 
			
		||||
<div class="header">
 | 
			
		||||
  The Mesa 3D Graphics Library
 | 
			
		||||
  <h1>The Mesa 3D Graphics Library</h1>
 | 
			
		||||
</div>
 | 
			
		||||
 | 
			
		||||
<iframe src="contents.html"></iframe>
 | 
			
		||||
@@ -25,7 +25,7 @@ https://www.khronos.org/opengles/</a>.</p>
 | 
			
		||||
 | 
			
		||||
<h2>Build the Libraries</h2>
 | 
			
		||||
<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>
 | 
			
		||||
</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
 | 
			
		||||
 | 
			
		||||
<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>
 | 
			
		||||
</ol>
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -8,7 +8,7 @@
 | 
			
		||||
<body>
 | 
			
		||||
 | 
			
		||||
<div class="header">
 | 
			
		||||
  The Mesa 3D Graphics Library
 | 
			
		||||
  <h1>The Mesa 3D Graphics Library</h1>
 | 
			
		||||
</div>
 | 
			
		||||
 | 
			
		||||
<iframe src="contents.html"></iframe>
 | 
			
		||||
@@ -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.
 | 
			
		||||
</p>
 | 
			
		||||
 | 
			
		||||
<h2>Building OSMesa</h2>
 | 
			
		||||
<h1>Building OSMesa</h1>
 | 
			
		||||
 | 
			
		||||
<p>
 | 
			
		||||
Configure and build Mesa with something like:
 | 
			
		||||
 | 
			
		||||
<pre>
 | 
			
		||||
meson builddir -Dosmesa=gallium -Dgallium-drivers=swrast -Ddri-drivers=[] -Dvulkan-drivers=[] -Dprefix=$PWD/builddir/install
 | 
			
		||||
ninja -C builddir install
 | 
			
		||||
configure --enable-osmesa --disable-driglx-direct --disable-dri --with-gallium-drivers=swrast
 | 
			
		||||
make
 | 
			
		||||
</pre>
 | 
			
		||||
 | 
			
		||||
<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:
 | 
			
		||||
</p>
 | 
			
		||||
<pre>
 | 
			
		||||
$PWD/builddir/install/lib/libOSMesa.so  (swrast-based OSMesa)
 | 
			
		||||
$PWD/builddir/install/lib/gallium/libOSMsea.so  (gallium-based OSMesa)
 | 
			
		||||
lib/libOSMesa.so  (swrast-based OSMesa)
 | 
			
		||||
lib/gallium/libOSMsea.so  (gallium-based OSMesa)
 | 
			
		||||
</pre>
 | 
			
		||||
 | 
			
		||||
<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>
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										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