Compare commits
	
		
			8 Commits
		
	
	
		
			mesa-19.3.
			...
			rgb10_a2ui
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						 | 
					257f32ad20 | ||
| 
						 | 
					4e0ece34ed | ||
| 
						 | 
					8bccaa61d7 | ||
| 
						 | 
					63d5fd0376 | ||
| 
						 | 
					08bc1b7343 | ||
| 
						 | 
					9f92031355 | ||
| 
						 | 
					e56728c9d8 | ||
| 
						 | 
					644d434137 | 
@@ -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')
 | 
					 | 
				
			||||||
@@ -1,18 +1,11 @@
 | 
				
			|||||||
((nil . ((show-trailing-whitespace . t)))
 | 
					((nil
 | 
				
			||||||
 (prog-mode
 | 
					 | 
				
			||||||
  (indent-tabs-mode . nil)
 | 
					  (indent-tabs-mode . nil)
 | 
				
			||||||
  (tab-width . 8)
 | 
					  (tab-width . 8)
 | 
				
			||||||
  (c-basic-offset . 3)
 | 
					  (c-basic-offset . 3)
 | 
				
			||||||
  (c-file-style . "stroustrup")
 | 
					  (c-file-style . "stroustrup")
 | 
				
			||||||
  (fill-column . 78)
 | 
					  (fill-column . 78)
 | 
				
			||||||
  (eval . (progn
 | 
					  (eval . (progn
 | 
				
			||||||
	    (c-set-offset 'case-label '0)
 | 
					 | 
				
			||||||
	    (c-set-offset 'innamespace '0)
 | 
						    (c-set-offset 'innamespace '0)
 | 
				
			||||||
	    (c-set-offset 'inline-open '0)))
 | 
						    (c-set-offset 'inline-open '0)))
 | 
				
			||||||
  (whitespace-style face indentation)
 | 
					  )
 | 
				
			||||||
  (whitespace-line-column . 79)
 | 
					 | 
				
			||||||
  (eval ignore-errors
 | 
					 | 
				
			||||||
        (require 'whitespace)
 | 
					 | 
				
			||||||
        (whitespace-mode 1)))
 | 
					 | 
				
			||||||
 (makefile-mode (indent-tabs-mode . t))
 | 
					 | 
				
			||||||
 )
 | 
					 )
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,40 +0,0 @@
 | 
				
			|||||||
# To use this config on you editor, follow the instructions at:
 | 
					 | 
				
			||||||
# http://editorconfig.org
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
root = true
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
[*]
 | 
					 | 
				
			||||||
charset = utf-8
 | 
					 | 
				
			||||||
insert_final_newline = true
 | 
					 | 
				
			||||||
tab_width = 8
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
[*.{c,h,cpp,hpp,cc,hh}]
 | 
					 | 
				
			||||||
indent_style = space
 | 
					 | 
				
			||||||
indent_size = 3
 | 
					 | 
				
			||||||
max_line_length = 78
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
[{Makefile*,*.mk}]
 | 
					 | 
				
			||||||
indent_style = tab
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
[{*.py,SCons*}]
 | 
					 | 
				
			||||||
indent_style = space
 | 
					 | 
				
			||||||
indent_size = 4
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
[*.pl]
 | 
					 | 
				
			||||||
indent_style = space
 | 
					 | 
				
			||||||
indent_size = 4
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
[*.m4]
 | 
					 | 
				
			||||||
indent_style = space
 | 
					 | 
				
			||||||
indent_size = 2
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
[*.yml]
 | 
					 | 
				
			||||||
indent_style = space
 | 
					 | 
				
			||||||
indent_size = 2
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
[*.patch]
 | 
					 | 
				
			||||||
trim_trailing_whitespace = false
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
[{meson.build,meson_options.txt}]
 | 
					 | 
				
			||||||
indent_style = space
 | 
					 | 
				
			||||||
indent_size = 2
 | 
					 | 
				
			||||||
							
								
								
									
										4
									
								
								.gitattributes
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								.gitattributes
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,4 @@
 | 
				
			|||||||
 | 
					*.dsp -crlf
 | 
				
			||||||
 | 
					*.dsw -crlf
 | 
				
			||||||
 | 
					*.sln -crlf
 | 
				
			||||||
 | 
					*.vcproj -crlf
 | 
				
			||||||
							
								
								
									
										41
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										41
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							@@ -1,4 +1,43 @@
 | 
				
			|||||||
 | 
					*.a
 | 
				
			||||||
 | 
					*.dll
 | 
				
			||||||
 | 
					*.exe
 | 
				
			||||||
 | 
					*.ilk
 | 
				
			||||||
 | 
					*.la
 | 
				
			||||||
 | 
					*.lo
 | 
				
			||||||
 | 
					*.o
 | 
				
			||||||
 | 
					*.obj
 | 
				
			||||||
 | 
					*.os
 | 
				
			||||||
 | 
					*.pc
 | 
				
			||||||
 | 
					*.pdb
 | 
				
			||||||
*.pyc
 | 
					*.pyc
 | 
				
			||||||
*.pyo
 | 
					*.pyo
 | 
				
			||||||
*.out
 | 
					*.so
 | 
				
			||||||
 | 
					*.so.*
 | 
				
			||||||
 | 
					*.sw[a-z]
 | 
				
			||||||
 | 
					*.tar
 | 
				
			||||||
 | 
					*.tar.bz2
 | 
				
			||||||
 | 
					*.tar.gz
 | 
				
			||||||
 | 
					*.zip
 | 
				
			||||||
 | 
					*~
 | 
				
			||||||
 | 
					depend
 | 
				
			||||||
 | 
					depend.bak
 | 
				
			||||||
 | 
					bin/ltmain.sh
 | 
				
			||||||
 | 
					lib
 | 
				
			||||||
 | 
					lib64
 | 
				
			||||||
 | 
					configure
 | 
				
			||||||
 | 
					configure.lineno
 | 
				
			||||||
 | 
					autom4te.cache
 | 
				
			||||||
 | 
					aclocal.m4
 | 
				
			||||||
 | 
					config.log
 | 
				
			||||||
 | 
					config.status
 | 
				
			||||||
 | 
					cscope*
 | 
				
			||||||
 | 
					.scon*
 | 
				
			||||||
 | 
					config.py
 | 
				
			||||||
build
 | 
					build
 | 
				
			||||||
 | 
					libtool
 | 
				
			||||||
 | 
					manifest.txt
 | 
				
			||||||
 | 
					Makefile.in
 | 
				
			||||||
 | 
					.dir-locals.el
 | 
				
			||||||
 | 
					.deps/
 | 
				
			||||||
 | 
					.libs/
 | 
				
			||||||
 | 
					/Makefile
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										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
 | 
					 | 
				
			||||||
							
								
								
									
										490
									
								
								.mailmap
									
									
									
									
									
								
							
							
						
						
									
										490
									
								
								.mailmap
									
									
									
									
									
								
							@@ -1,490 +0,0 @@
 | 
				
			|||||||
Aapo Tahkola <aet@rasterburn.org> <aapo@aapo-desktop.(none)>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Adam Jackson <ajax@redhat.com> <ajax@benzedrine.nwnk.net>
 | 
					 | 
				
			||||||
Adam Jackson <ajax@redhat.com> <ajax@freedesktop.org>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Adrian Marius Negreanu <adrian.m.negreanu@intel.com> Adrian Negreanu <adrian.m.negreanu@intel.com>
 | 
					 | 
				
			||||||
Adrian Marius Negreanu <adrian.m.negreanu@intel.com> Negreanu Marius Adrian <adrian.m.negreanu@intel.com>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Dave Airlie <airlied@redhat.com> <airliedfreedesktop.org>
 | 
					 | 
				
			||||||
Dave Airlie <airlied@redhat.com> airlied <airlied@unused-12-215.bne.redhat.com>
 | 
					 | 
				
			||||||
Dave Airlie <airlied@redhat.com> <airlied@dhcp-1-203.bne.redhat.com>
 | 
					 | 
				
			||||||
Dave Airlie <airlied@redhat.com> <airlied@gmail.com>
 | 
					 | 
				
			||||||
Dave Airlie <airlied@redhat.com> <airlied@itt42.(none)>
 | 
					 | 
				
			||||||
Dave Airlie <airlied@redhat.com> <airlied@linux.ie>
 | 
					 | 
				
			||||||
Dave Airlie <airlied@redhat.com> <airlied@nx6125b.(none)>
 | 
					 | 
				
			||||||
Dave Airlie <airlied@redhat.com> <airlied@panoply-rh.(none)>
 | 
					 | 
				
			||||||
Dave Airlie <airlied@redhat.com> <airlied@ppcg5.localdomain>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Alan Coopersmith <alan.coopersmith@oracle.com> <alan.coopersmith@sun.com>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Alan Hourihane <alanh@vmware.com> <alanh@tungstengraphics.com>
 | 
					 | 
				
			||||||
Alan Hourihane <alanh@vmware.com> <alanh@fairlite.demon.co.uk>
 | 
					 | 
				
			||||||
Alan Hourihane <alanh@vmware.com> <alanh@jetpack.(none)>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Alexander Monakov <amonakov@gmail.com> <amonakov@ispras.ru>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Alexander von Gluck IV <kallisti5@unixzen.com> Alexander von Gluck <kallisti5@unixzen.com>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Alexandros Frantzis <alexandros.frantzis@collabora.com> <Alexandros.Frantzis@canonical.com>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Alex Corscadden <alexc@vmware.com> <alexc@alexc-dev1.prom.eng.vmware.com>
 | 
					 | 
				
			||||||
Alex Corscadden <alexc@vmware.com> <alexc@alexc-dev1.vmware.com>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Alex Deucher <alexdeucher@gmail.com> <alexander.deucher@amd.com>
 | 
					 | 
				
			||||||
Alex Deucher <alexdeucher@gmail.com> <agd5f@yahoo.com>
 | 
					 | 
				
			||||||
Alex Deucher <alexdeucher@gmail.com> <alex@botch2.com>
 | 
					 | 
				
			||||||
Alex Deucher <alexdeucher@gmail.com> <alex@botch2.(none)>
 | 
					 | 
				
			||||||
Alex Deucher <alexdeucher@gmail.com> <alex@cube.(none)>
 | 
					 | 
				
			||||||
Alex Deucher <alexdeucher@gmail.com> <alex@samba.(none)>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Andreas Fänger <a.faenger@e-sign.com> <a.faenger@e-sign.com>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Andreas Hartmetz <ahartmetz@gmail.com> <andreas.hartmetz@kdab.com>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Andre Heider <a.heider@gmail.com>
 | 
					 | 
				
			||||||
Andreas Heider <andreas@heider.io>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Andreas Pokorny <andreas.pokorny@canonical.com> <andreas.pokorny@elektrobit.com>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Andrew Randrianasulu <randrianasulu@gmail.com> <randrik_a@yahoo.com>
 | 
					 | 
				
			||||||
Andrew Randrianasulu <randrianasulu@gmail.com> <randrik@mail.ru>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Arthur Huillet <arthur.huillet@free.fr> Arthur HUILLET <arthur.huillet@free.fr>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl> <basni@chromium.org>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Benjamin Franzke <benjaminfranzke@googlemail.com> ben <benjaminfranzke@googlemail.com>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Ben Skeggs <bskeggs@redhat.com> <darktama@beleth.(none)>
 | 
					 | 
				
			||||||
Ben Skeggs <bskeggs@redhat.com> <darktama@iinet.net.au>
 | 
					 | 
				
			||||||
Ben Skeggs <bskeggs@redhat.com> <darktama@nisroch.keine.ath.cx>
 | 
					 | 
				
			||||||
Ben Skeggs <bskeggs@redhat.com> <skeggsb-at-gmail.com>
 | 
					 | 
				
			||||||
Ben Skeggs <bskeggs@redhat.com> <skeggsb@gmail.com>
 | 
					 | 
				
			||||||
Ben Skeggs <bskeggs@redhat.com> <skeggsb@localhost.localdomain>
 | 
					 | 
				
			||||||
Ben Skeggs <bskeggs@redhat.com> <skeggsb@nisroch.keine.ath.cx>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Ben Widawsky <benjamin.widawsky@intel.com> Ben Widawsky <ben@bwidawsk.net>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Blair Sadewitz <blair.sadewitz@gmail.com> Blair Sadewitz <blair.sadewitz.gmail.com>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Boris Peterbarg <reist@users.sourceforge.net> reist <reist>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Brian Paul <brianp@vmware.com> Brian <brian.paul@tungstengraphics.com>
 | 
					 | 
				
			||||||
Brian Paul <brianp@vmware.com> <brian.paul@tungstengraphics.com>
 | 
					 | 
				
			||||||
Brian Paul <brianp@vmware.com> <brian.e.paul@gmail.com>
 | 
					 | 
				
			||||||
Brian Paul <brianp@vmware.com> <brianp@kemper.freedesktop.org>
 | 
					 | 
				
			||||||
Brian Paul <brianp@vmware.com> brian <brian@cvp965.(none)>
 | 
					 | 
				
			||||||
Brian Paul <brianp@vmware.com> Brian <brian@i915.localnet.net>
 | 
					 | 
				
			||||||
Brian Paul <brianp@vmware.com> Brian <brian@nostromo.localnet.net>
 | 
					 | 
				
			||||||
Brian Paul <brianp@vmware.com> Brian <brian@poulsbo.localnet.net>
 | 
					 | 
				
			||||||
Brian Paul <brianp@vmware.com> Brian <brian@ps3.localnet.net>
 | 
					 | 
				
			||||||
Brian Paul <brianp@vmware.com> Brian <brianp@vmware.com>
 | 
					 | 
				
			||||||
Brian Paul <brianp@vmware.com> Brian <brian@yutani.localnet.net>
 | 
					 | 
				
			||||||
Brian Paul <brianp@vmware.com> root <brian.paul@tungstengraphics.com>
 | 
					 | 
				
			||||||
Brian Paul <brianp@vmware.com> root <root@i915.localnet.net>
 | 
					 | 
				
			||||||
Brian Paul <brianp@vmware.com> root <root@nostromo.localnet.net>
 | 
					 | 
				
			||||||
Brian Paul <brianp@vmware.com> root <root@i965.localnet.net>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Bruce Merry <bmerry@users.sourceforge.net> <bmerry@gmail.com>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Carl-Philip Hänsch <cphaensch@googlemail.com> Carl-Philip Haensch <s3734770@mail.zih.tu-dresden.de>
 | 
					 | 
				
			||||||
Carl-Philip Hänsch <cphaensch@googlemail.com> Carl-Philip Haensch <carli@carli-laptop.(none)>
 | 
					 | 
				
			||||||
Carl-Philip Hänsch <cphaensch@googlemail.com> Carl-Philip Haensch <Carl-Philip.Haensch@mailbox.tu-dresden.de>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Chad Versace <chadversary@chromium.org> <chad@kiwitree.net>
 | 
					 | 
				
			||||||
Chad Versace <chadversary@chromium.org> <chad@chad-versace.us>
 | 
					 | 
				
			||||||
Chad Versace <chadversary@chromium.org> <Chad Versace chad@chad-versace.us>
 | 
					 | 
				
			||||||
Chad Versace <chadversary@chromium.org> <chad.versace@intel.com>
 | 
					 | 
				
			||||||
Chad Versace <chadversary@chromium.org> <chad.versace@linux.intel.com>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Chia-I Wu <olvaffe@gmail.com> <olv@lunarg.com>
 | 
					 | 
				
			||||||
Chia-I Wu <olvaffe@gmail.com> Chia-Wu <olvaffe@gmail.com>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Chih-Wei Huang <cwhuang@linux.org.tw> Chih-Wei Huang <cwhuang@android-x86.org>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Christian König <christian.koenig@amd.com> Christian Koenig <christian.koenig@amd.com>
 | 
					 | 
				
			||||||
Christian König <christian.koenig@amd.com> Christian König <christian.koenig at amd.com>
 | 
					 | 
				
			||||||
Christian König <christian.koenig@amd.com> Christian König <deathsimple@vodafone.de>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Christoph Brill <egore911@egore911.de> Christoph Bill <egore@gmx.de>
 | 
					 | 
				
			||||||
Christoph Brill <egore911@egore911.de> <egore@gmx.de>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Christoph Bumiller <christoph.bumiller@speed.at> <e0425955@student.tuwien.ac.at>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Christopher James Halse Rogers <christopher.halse.rogers@canonical.com> Christopher James Halse Rogers <raof@ubuntu.com>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Claudio Ciccani <klan@directfb.org> <klan@users.sf.net>
 | 
					 | 
				
			||||||
Claudio Ciccani <klan@directfb.org> <klan@users.sourceforge.net>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Connor Abbott <cwabbott0@gmail.com> <connor.w.abbott@intel.com>
 | 
					 | 
				
			||||||
Connor Abbott <cwabbott0@gmail.com> <connor.abbott@intel.com>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Corbin Simpson <MostAwesomeDude@gmail.com> <mostawesomed...@gmail.com>
 | 
					 | 
				
			||||||
Corbin Simpson <MostAwesomeDude@gmail.com> <mostawesomedude@gmail.com>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Courtney Goeltzenleuchter <courtney@lunarg.com> <courtney@LunarG.com>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Daniel Skinner <sio@users.sourceforge.net> sio <sio>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Daniel Stone <daniels@collabora.com> <daniel@fooishbar.org>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
David Miller <davem@davemloft.net> David S. Miller <davem@davemloft.net>
 | 
					 | 
				
			||||||
David Miller <davem@davemloft.net> Dave Miller <davem@davemloft.net>
 | 
					 | 
				
			||||||
David Miller <davem@davemloft.net> davem69 <davem69>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
David Heidelberger <david.heidelberger@ixit.cz> David Heidelberg <david@ixit.cz>
 | 
					 | 
				
			||||||
David Heidelberger <david.heidelberger@ixit.cz> <d.okias@gmail.com>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
David Reveman <reveman@chromium.org> <c99drn@cs.umu.se>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Dieter Nützel <Dieter@nuetzel-hh.de> Dieter Nützel <dieter@nuetzel-hh.de>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Dmitry Cherkassov <dcherkassov@gmail.com> Dmitry Cherkasov <dcherkassov@gmail.com>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Dylan Baker <dylanx.c.baker@intel.com> <baker.dylan.c@gmail.com>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Edward O'Callaghan <funfunctor@folklore1984.net> <eocallaghan@alterapraxis.com>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Elie Tournier <tournier.elie@gmail.com>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Emeric Grange <emeric.grange@gmail.com> Emeric <emeric.grange@gmail.com>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Emil Velikov <emil.l.velikov@gmail.com> <emil.velikov@collabora.com>
 | 
					 | 
				
			||||||
Emil Velikov <emil.l.velikov@gmail.com> <emil.veliko@collabora.com>
 | 
					 | 
				
			||||||
Emil Velikov <emil.l.velikov@gmail.com> <emil.velikov@collabora.co.uk>
 | 
					 | 
				
			||||||
Emil Velikov <emil.l.velikov@gmail.com> <emil.veliikov@collabora.com>
 | 
					 | 
				
			||||||
Emil Velikov <emil.l.velikov@gmail.com> <emil.velikov@gmail.com>
 | 
					 | 
				
			||||||
Emil Velikov <emil.l.velikov@gmail.com> <emmil.velikov@collabora.com>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Eric Anholt <eric@anholt.net> Eric Anholt <anholt@FreeBSD.org>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Eric Engestrom <eric@engestrom.ch> <eric.engestrom@imgtec.com>
 | 
					 | 
				
			||||||
Eric Engestrom <eric@engestrom.ch> <eric.engestrom@intel.com>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Eugeni Dodonov <eugeni.dodonov@intel.com> <eugeni@mandriva.com>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Fabian Bieler <der.fabe@gmx.net> <fabianbieler@fastmail.fm>
 | 
					 | 
				
			||||||
Fabian Bieler <der.fabe@gmx.net> <<der.fabe@gmx.net>>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Feng, Haitao <haitao.feng@intel.com> Haitao Feng <haitao.feng@intel.com>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Frank Binns <frank.binns@imgtec.com> <francisbinns@gmail.com>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Frank Henigman <fjhenigman@google.com> <fjhenigman@chromium.org>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
George Sapountzis <gsapountzis@gmail.com> George Sapountzis <gsap7@yahoo.gr>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Gert Wollny <gert.wollny@collabora.com> <gw.fossdev@gmail.com>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Gwenole Beauchesne <gwenole.beauchesne@intel.com> <gb.devel@gmail.com>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Hamish Marson <hmarson@users.sourceforge.net> hmarson <hmarson>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Hans de Goede <hdegoede@redhat.com> Hans de Goede <j.w..r..degoede@hhs.nl>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Homer Hsing <dongsheng.xing@intel.com> <homer.hsing@gmail.com>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Hui Qi Tay <hqtay@vmware.com> <tayhuiqithq@gmail.com>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Ian Romanick <ian.d.romanick@intel.com> <idr@freedesktop.org>
 | 
					 | 
				
			||||||
Ian Romanick <ian.d.romanick@intel.com> <idr@us.ibm.com>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Jakob Bornecrantz <wallbraker@gmail.com> <jakob@vmware.com>
 | 
					 | 
				
			||||||
Jakob Bornecrantz <wallbraker@gmail.com> <jakob@aurora.(none)>
 | 
					 | 
				
			||||||
Jakob Bornecrantz <wallbraker@gmail.com> <jakob@aurora.walkyrie.se>
 | 
					 | 
				
			||||||
Jakob Bornecrantz <wallbraker@gmail.com> <jakob@tungstengraphics.com>
 | 
					 | 
				
			||||||
Jakob Bornecrantz <wallbraker@gmail.com> <wallbraker 'at' gmail 'dot' com>
 | 
					 | 
				
			||||||
Jakob Bornecrantz <wallbraker@gmail.com> <jakob.bornecrantz@collabora.com>
 | 
					 | 
				
			||||||
Jakob Bornecrantz <wallbraker@gmail.com> <jakob@collabora.com>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Jakub Bogusz <qboosh@pld-linux.org> <gboosh@pld-linux.org>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
James Legg <jlegg@feralinteractive.com> <lankyleggy@gmail.com>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Jan Vesely <jano.vesely@gmail.com> Jan Vesely <jan.vesely@rutgers.edu>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Jason Ekstrand <jason@jlekstrand.net> <jason.ekstrand@intel.com>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Jeremy Huddleston <jeremyhu@apple.com> <jeremyhu@freedesktop.org>
 | 
					 | 
				
			||||||
Jeremy Huddleston <jeremyhu@apple.com> <jeremy@tifa.local>
 | 
					 | 
				
			||||||
Jeremy Huddleston <jeremyhu@apple.com> <jeremy@vincent.local>
 | 
					 | 
				
			||||||
Jeremy Huddleston <jeremyhu@apple.com> <jeremy@yuffie.local>
 | 
					 | 
				
			||||||
Jeremy Huddleston <jeremyhu@apple.com> Jeremy Huddleston Sequoia <jeremyhu@apple.com>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Jeremy Kolb <jkolb@freedesktop.org> <jkolb@brandeis.edu>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Jerome Glisse <jglisse@redhat.com> <glisse@freedesktop.org>
 | 
					 | 
				
			||||||
Jerome Glisse <jglisse@redhat.com> <glisse@kemper.freedesktop.org>
 | 
					 | 
				
			||||||
Jerome Glisse <jglisse@redhat.com> John Doe <glisse@barney.(none)>
 | 
					 | 
				
			||||||
Jerome Glisse <jglisse@redhat.com> John Doe <glisse@localhost.localdomain>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Jesse Barnes <jesse.barnes@intel.com> <jbarnes@hobbes.lan>
 | 
					 | 
				
			||||||
Jesse Barnes <jesse.barnes@intel.com> <jbarnes@hobbes.(none)>
 | 
					 | 
				
			||||||
Jesse Barnes <jesse.barnes@intel.com> <jbarnes@jbarnes-desktop.localdomain>
 | 
					 | 
				
			||||||
Jesse Barnes <jesse.barnes@intel.com> <jbarnes@jbarnes-t61.(none)>
 | 
					 | 
				
			||||||
Jesse Barnes <jesse.barnes@intel.com> <jbarnes@virtuousgeek.org>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Joakim Sindholt <bacn@zhasha.com> <opensource@zhasha.com>
 | 
					 | 
				
			||||||
Joakim Sindholt <bacn@zhasha.com> <zhasha@gallium-dev.(none)>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Jochen Gerlach <jtg@users.sourceforge.net> jtg <jtg>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Joel Bosveld <joel.bosveld@gmail.com> <Joel.Bosveld@gmail.com>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Jonathan Adamczewski <jadamcze@utas.edu.au> <jadamcze@utas.edu.a>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Jon Turney <jon.turney@dronecode.org.uk> Jon TURNEY <jon.turney@dronecode.org.uk>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
José Fonseca <jfonseca@vmware.com> Jose Fonseca <jfonseca@vmware.com>
 | 
					 | 
				
			||||||
José Fonseca <jfonseca@vmware.com> Jose Fonseca <jrfonseca@tungstengraphics.com>
 | 
					 | 
				
			||||||
José Fonseca <jfonseca@vmware.com> <jfonseca@pegasus.(none)>
 | 
					 | 
				
			||||||
José Fonseca <jfonseca@vmware.com> <jfonseca@titan.(none)>
 | 
					 | 
				
			||||||
José Fonseca <jfonseca@vmware.com> <jose.r.fonseca@gmail.com>
 | 
					 | 
				
			||||||
José Fonseca <jfonseca@vmware.com> <jrfonseca@tungstengraphics.com>
 | 
					 | 
				
			||||||
José Fonseca <jfonseca@vmware.com> <j_r_fonseca@yahoo.co.uk>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Jouk Jansen <joukj@hrem.nano.tudelft.nl> Jouk Jansen <jouk@hrem.nano.tudelft.nl>
 | 
					 | 
				
			||||||
Jouk Jansen <joukj@hrem.nano.tudelft.nl> Jouk Jansen <joukj@hrem.stm.tudelft.nl>
 | 
					 | 
				
			||||||
Jouk Jansen <joukj@hrem.nano.tudelft.nl> joukj <joukj@tarantella.(none)>
 | 
					 | 
				
			||||||
Jouk Jansen <joukj@hrem.nano.tudelft.nl> Jouk <joukj@tarantella.nano.tudelft.nl>
 | 
					 | 
				
			||||||
Jouk Jansen <joukj@hrem.nano.tudelft.nl> Jouk <joukj@tarantella.(none)>
 | 
					 | 
				
			||||||
Jouk Jansen <joukj@hrem.nano.tudelft.nl> J.Jansen <joukj@tarantella.nano.tudelft.nl>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Juan Zhao <juan.j.zhao@intel.com> <juan.j.zhao@linux.intel.com>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Julien Cristau <jcristau@debian.org> <julien.cristau@logilab.fr>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Julien Isorce <j.isorce@samsung.com> <julien.isorce@gmail.com>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Kalyan Kondapally <kalyan.kondapally@intel.com> <kondapallykalyancontribute@gmail.com>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Karl Schultz <karl.w.schultz@gmail.com> Karl Schultze <k.w.schultz@comcast.net>
 | 
					 | 
				
			||||||
Karl Schultz <karl.w.schultz@gmail.com> unknown <kwschult@.na.qualcomm.com>
 | 
					 | 
				
			||||||
Karl Schultz <karl.w.schultz@gmail.com> <k.w.schultz@comcast.net>
 | 
					 | 
				
			||||||
Karl Schultz <karl.w.schultz@gmail.com> <Karl.W.Schultz@gmail.com>
 | 
					 | 
				
			||||||
Karl Schultz <karl.w.schultz@gmail.com> <kschultz@freedesktop.org>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Keith Harrison <sio2@users.sourceforge.net> sio2 <sio2>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Keith Packard <keithp@keithp.com> <keithp@koto.keithp.com>
 | 
					 | 
				
			||||||
Keith Packard <keithp@keithp.com> <keithp@neko.keithp.com>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Keith Whitwell <keithw@vmware.com> <keith@tungstengraphics.com>
 | 
					 | 
				
			||||||
Keith Whitwell <keithw@vmware.com> keithw <keithw@keithw-laptop.(none)>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Kristian Høgsberg <krh@bitplanet.net> <krh@redhat.com>
 | 
					 | 
				
			||||||
Kristian Høgsberg <krh@bitplanet.net> <krh@hinata.boston.redhat.com>
 | 
					 | 
				
			||||||
Kristian Høgsberg <krh@bitplanet.net> <krh@sasori.boston.redhat.com>
 | 
					 | 
				
			||||||
Kristian Høgsberg <krh@bitplanet.net> <krh@temari.boston.redhat.com>
 | 
					 | 
				
			||||||
Kristian Høgsberg <krh@bitplanet.net> <kristian.h.kristensen@intel.com>
 | 
					 | 
				
			||||||
Kristian Høgsberg <krh@bitplanet.net> <hoegsberg@chromium.org>
 | 
					 | 
				
			||||||
Kristian Høgsberg <krh@bitplanet.net> <hoegsberg@google.com>
 | 
					 | 
				
			||||||
Kristian Høgsberg <krh@bitplanet.net> <hoegsberg@gmail.com>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Krzesimir Nowak <qdlacz@gmail.com> <krzesimir@kinvolk.io>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Li Peng <peng.li@intel.com> <peng.li@linux.intel.com>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Lucas Stach <dev@lynxeye.de> <l.stach@pengutronix.de>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Maarten Lankhorst <maarten.lankhorst@ubuntu.com> <dev@mblankhorst.nl>
 | 
					 | 
				
			||||||
Maarten Lankhorst <maarten.lankhorst@ubuntu.com> <m.b.lankhorst@gmail.com>
 | 
					 | 
				
			||||||
Maarten Lankhorst <maarten.lankhorst@ubuntu.com> <maarten.lankhorst@canonical.com>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Maciej Cencora <m.cencora@gmail.com> <maciej@osiris.(none)>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Marc-André Lureau <marcandre.lureau@gmail.com> Marc-Andre Lureau <marcandre.lureau@gmail.com>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Marc Dietrich <marvin24@gmx.de> Marc <marvin24@gmx.de>
 | 
					 | 
				
			||||||
Marc Dietrich <marvin24@gmx.de> marvin24 <marvin24@gmx.de>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Marcin Ślusarz <marcin.slusarz@gmail.com> Marcin Slusarz <marcin.slusarz@gmail.com>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Marek Olšák <maraeo@gmail.com> <marek.olsak@amd.com>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Mario Kleiner <mario.kleiner.de@gmail.com> kleinerm <mario.kleiner@tuebingen.mpg.de>
 | 
					 | 
				
			||||||
Mario Kleiner <mario.kleiner.de@gmail.com> <mario.kleiner@tuebingen.mpg.de>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Mark Mueller <markkmueller@gmail.com> <MarkKMueller@gmail.com>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Marta Lofstedt <marta.lofstedt@intel.com> <marta.lofstedt@linux.intel.com>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Martin Peres <martin.peres@linux.intel.com> <martin.peres@labri.fr>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Mathias Fröhlich <mathias.froehlich@gmx.net> Mathias Froehlich <Mathias.Froehlich@gmx.net>
 | 
					 | 
				
			||||||
Mathias Fröhlich <mathias.froehlich@gmx.net> Mathias Froehlich <Mathias.Froehlich@web.de>
 | 
					 | 
				
			||||||
Mathias Fröhlich <mathias.froehlich@gmx.net> Mathias Frohlich <M.Froehlich@science-computing.de>
 | 
					 | 
				
			||||||
Mathias Fröhlich <mathias.froehlich@gmx.net> <frohlich8@users.sourceforge.net>
 | 
					 | 
				
			||||||
Mathias Fröhlich <mathias.froehlich@gmx.net> <Mathias.Froehlich@gmx.net>
 | 
					 | 
				
			||||||
Mathias Fröhlich <mathias.froehlich@gmx.net> <Mathias.Froehlich@web.de>
 | 
					 | 
				
			||||||
Mathias Fröhlich <mathias.froehlich@gmx.net> M.Froehlich@science-computing.de <M.Froehlich@science-computing.de>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Matthew W. S. Bell <matthew@bells23.org.uk> Matthew Bell <matthew@bells23.org.uk>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Maxence Le Doré <maxence.ledore@gmail.com> Maxence Le Dore <maxence.ledore@gmail.com>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Micah Fedke <micah.fedke@collabora.co.uk> <M.Fedke@Astronautics.com>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Michal Krol <michal@vmware.com> <michal@tungstengraphics.com>
 | 
					 | 
				
			||||||
Michal Krol <michal@vmware.com> Michal Krol <michal@ubuntu-vbox.(none)>
 | 
					 | 
				
			||||||
Michal Krol <michal@vmware.com> Michal Krol <mjkrol@gmail.org>
 | 
					 | 
				
			||||||
Michal Krol <michal@vmware.com> michal <michal@capacitor.(none)>
 | 
					 | 
				
			||||||
Michal Krol <michal@vmware.com> michal <michal@michal-laptop.(none)>
 | 
					 | 
				
			||||||
Michal Krol <michal@vmware.com> michal <michal@quad.(none)>
 | 
					 | 
				
			||||||
Michal Krol <michal@vmware.com> michal <michal@transistor.(none)>
 | 
					 | 
				
			||||||
Michal Krol <michal@vmware.com> Michal <michal@tungstengraphics.com>
 | 
					 | 
				
			||||||
Michal Krol <michal@vmware.com> michal <michal@wmvare.com>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Michel Dänzer <michel@daenzer.net> <michel.daenzer@amd.com>
 | 
					 | 
				
			||||||
Michel Dänzer <michel@daenzer.net> <daenzer@vmware.com>
 | 
					 | 
				
			||||||
Michel Dänzer <michel@daenzer.net> <michel@tungstengraphics.com>
 | 
					 | 
				
			||||||
Michel Dänzer <michel@daenzer.net> Michel Daenzer <michel.daenzer@amd.com>
 | 
					 | 
				
			||||||
Michel Dänzer <michel@daenzer.net> Michel Daenzer <daenzer@localhost.(none)>
 | 
					 | 
				
			||||||
Michel Dänzer <michel@daenzer.net> <mdaenzer@redhat.com>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Mike Kaplinskiy <mike.kaplinskiy@gmail.com> Mike Kaplinksiy <mike.kaplinskiy@gmail.com>
 | 
					 | 
				
			||||||
Mike Kaplinskiy <mike.kaplinskiy@gmail.com> <mike.kaplinskiy@gmai.com>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Mike Stroyan <mike@lunarg.com> <mike@LunarG.com>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Nian Wu <nian.wu@intel.com> <nian@graphics.(none)>
 | 
					 | 
				
			||||||
Nian Wu <nian.wu@intel.com> <nian@tinderbox.sh.intel.com>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Nick Bowler <nbowler@draconx.ca>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Nick Sarnie <commendsarnex@gmail.com>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Nicolai Hähnle <nicolai.haehnle@amd.com> <nhaehnle@gmail.com>
 | 
					 | 
				
			||||||
Nicolai Hähnle <nicolai.haehnle@amd.com> Nicolai Haehnle <nhaehnle@gmail.com>
 | 
					 | 
				
			||||||
Nicolai Hähnle <nicolai.haehnle@amd.com> Nicolai Haehnle <prefect_@gmx.net>
 | 
					 | 
				
			||||||
Nicolai Hähnle <nicolai.haehnle@amd.com> Nicolai Haehnle <prefect@upb.de>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Nigel Stewart <nigels@users.sourceforge.net> <nigels@sourceforge.net>
 | 
					 | 
				
			||||||
Nigel Stewart <nigels@users.sourceforge.net> <nstewart@nvidia.com>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
nobled <nobled@dreamwidth.org> <nobled2@nobled2-karmic.(none)>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Oliver McFadden <oliver.mcfadden@linux.intel.com> <z3ro.geek@gmail.com>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Owain Ainsworth <zerooa@googlemail.com> Owain G. Ainsworth <oga@openbsd.org>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Owen W. Taylor <otaylor@fishsoup.net> Owen Taylor <otaylor@snell.localdomain>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Patrice Mandin <patmandin@gmail.com> <patrice@manoir.racoon.city>
 | 
					 | 
				
			||||||
Patrice Mandin <patmandin@gmail.com> <pmandin@caramail.com>
 | 
					 | 
				
			||||||
Patrice Mandin <patmandin@gmail.com> <pmandin@freedesktop.org>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Pauli Nieminen <pauli.nieminen@linux.intel.com> <suokkos@gmail.com>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Paulo Zanoni <paulo.r.zanoni@intel.com> Paulo Zanoni <pzanoni@mandriva.com>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Paul Seidler <sepek@exherbo.org> Paul Seidler <pl.seidler@googlemail.com>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Pekka Paalanen <pekka.paalanen@collabora.co.uk> <ppaalanen@gmail.com>
 | 
					 | 
				
			||||||
Pekka Paalanen <pekka.paalanen@collabora.co.uk> <pq@iki.fi>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Peter Hutterer <peter.hutterer@who-t.net> <peter@cs.unisa.edu.au>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Pierre-Eric Pelloux-Prayer <pelloux@gmail.com> pepp <pelloux@gmail.com>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Pierre Willenbrock <pierre@pirsoft.de> Pierre Willenbrok <pierre@pirsoft.de>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Quentin Glidic <sardemff7+git@sardemff7.net> <sardemff7@sardemff7.net>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
RALOVICH, Kristóf <tade60@freemail.hu> <kristof.ralovich@gmail.com>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Richard Li <richardradeon@gmail.com> <RichardZ.Li@amd.com>
 | 
					 | 
				
			||||||
# The next ones are not 100% sure
 | 
					 | 
				
			||||||
Richard Li <richardradeon@gmail.com> richard <richard@richard-desktop3.(none)>
 | 
					 | 
				
			||||||
Richard Li <richardradeon@gmail.com> richard <richard@richard-desktop.(none)>
 | 
					 | 
				
			||||||
Richard Li <richardradeon@gmail.com> root <root@richard-desktop.(none)>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Richard Sandiford <rsandifo@linux.vnet.ibm.com> <r.sandiford@uk.ibm.com>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Rob Clark <robclark@freedesktop.org> <Rob Clark robdclark@freedesktop.org>
 | 
					 | 
				
			||||||
Rob Clark <robclark@freedesktop.org> <robdclark@gmail.com>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Robert Bragg <robert@sixbynine.org> <robert@linux.intel.com>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Robert Ellison <papillo@vmware.com> <papillo@i965-laptop.(none)>
 | 
					 | 
				
			||||||
Robert Ellison <papillo@vmware.com> <papillo@tungstengraphics.com>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Robert Hooker <sarvatt@ubuntu.com> <robert.hooker@canonical.com>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Roland Scheidegger <sroland@vmware.com> <rscheidegger@gmx.ch>
 | 
					 | 
				
			||||||
Roland Scheidegger <sroland@vmware.com> <sroland@tungstengraphics.com>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Roy Spliet <rspliet@eclipso.eu> <r.spliet@student.tudelft.nl>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Rune Petersen <rune@megahurts.dk> Rune Peterson <rune@megahurts.dk>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Ryan Houdek <sonicadvance1@gmail.com> <Sonicadvance1@gmail.com>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Sam Hocevar <sam@hocevar.net> Sam Hocevar <sam@zoy.org>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Samuel Iglesias Gonsálvez <siglesias@igalia.com> Samuel Iglesias Gonsalvez <siglesias@igalia.com>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Sean D'Epagnier <sean@depagnier.com> <geckosenator@freedesktop.org>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Serge Martin <edb+mesa@sigluy.net> Serge Martin (EdB) <edb+mesa@sigluy.net>
 | 
					 | 
				
			||||||
Serge Martin <edb+mesa@sigluy.net> EdB <edb+mesa@sigluy.net>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Sinclair Yeh <syeh@vmware.com> <sinclair.yeh@intel.com>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Stefan Brüns <stefan.bruens@rwth-aachen.de> <Stefan.Bruens@rwth-aachen.de>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Stéphane Marchesin <marcheu@chromium.org> Stephane Marchesin <marchesin@icps.u-strasbg.fr>
 | 
					 | 
				
			||||||
Stéphane Marchesin <marcheu@chromium.org> Stephane Marchesin <stephane.marchesin@gmail.com>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Sven M. Hallberg <pesco@users.sourceforge.net> pesco <pesco>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Tapani Pälli <tapani.palli@intel.com> <tapani.palli@gmail.com>
 | 
					 | 
				
			||||||
Tapani Pälli <tapani.palli@intel.com> Tapani <tapani.palli@intel.com>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Thierry Reding <treding@nvidia.com> <thierry@gilfi.de>
 | 
					 | 
				
			||||||
Thierry Reding <treding@nvidia.com> <thierry.reding@avionic-design.de>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Thierry Vignaud <thierry.vignaud@gmail.com> <tvignaud@mandriva.com>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Thomas Balling Sørensen <tball@io.dk> <tball@tball-laptop.(none)>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Thomas Hellstrom <thellstrom@vmware.com> Thomas <thellstrom@vmware.com>
 | 
					 | 
				
			||||||
Thomas Hellstrom <thellstrom@vmware.com> Thomas Hellstrom <thellstrom-at-vmware-dot-com>
 | 
					 | 
				
			||||||
Thomas Hellstrom <thellstrom@vmware.com> Thomas Hellstrom <thomas-at-tungstengraphics-dot-com>
 | 
					 | 
				
			||||||
Thomas Hellstrom <thellstrom@vmware.com> Thomas Hellstrom <thomas@tungstengraphics.com>
 | 
					 | 
				
			||||||
Thomas Hellstrom <thellstrom@vmware.com> Thomas Hellström <thomas@tungstengraphics.com>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Thomas Tanner <tanner@gmx.net> tanner <tanner>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Tilman Sauerbeck <tilman@code-monkey.de> <tilman@freedesktop.org>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Timothy Arceri <timothy.arceri@collabora.com> <t_arceri@yahoo.com.au>
 | 
					 | 
				
			||||||
Timothy Arceri <timothy.arceri@collabora.com> Timothy <t_arceri@yahoo.com.au>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Tom Fogal <tfogal@alumni.unh.edu> <tfogal@sci.utah.edu>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Tom Stellard <thomas.stellard@amd.com> <tstellar@gmail.com>
 | 
					 | 
				
			||||||
Tom Stellard <thomas.stellard@amd.com> Thomas Stellard <tom.stellard@amd.com>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Tomeu Vizoso <tomeu.vizoso@collabora.com> <tomeu@tomeuvizoso.net>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Tormod Volden <debian.tormod@gmail.com> <lists.tormod@gmail.com>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Török Edwin <edwin+mesa@etorok.net> Török Edvin <edwintorok@gmail.com>
 | 
					 | 
				
			||||||
Török Edwin <edwin+mesa@etorok.net> <edwintorok@gmail.com>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Ville Syrjälä <ville.syrjala@linux.intel.com> Ville Syrjala <syrjala@freedesktop.org>
 | 
					 | 
				
			||||||
Ville Syrjälä <ville.syrjala@linux.intel.com> Ville Syrjala <syrjala@sci.fi>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Vincent Lejeune <vljn@ovi.com> <peluche.canard@gmail.com>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Vinson Lee <vlee@freedesktop.org> <vlee@vmware.com>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Zhenyu Wang <zhenyuw@linux.intel.com> Wang Zhenyu <zhenyu.z.wang@intel.com>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Zack Rusin <zackr@vmware.com> <zack@kde.org>
 | 
					 | 
				
			||||||
Zack Rusin <zackr@vmware.com> <zack@pixel.(none)>
 | 
					 | 
				
			||||||
Zack Rusin <zackr@vmware.com> <zack@tungstengraphics.com>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Zhang <zxpmyth@yahoo.com.cn> zhang <zxpmyth@yahoo.com.cn>
 | 
					 | 
				
			||||||
							
								
								
									
										63
									
								
								.travis.yml
									
									
									
									
									
								
							
							
						
						
									
										63
									
								
								.travis.yml
									
									
									
									
									
								
							@@ -1,63 +0,0 @@
 | 
				
			|||||||
language: c
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
os: osx
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
cache:
 | 
					 | 
				
			||||||
  ccache: true
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
env:
 | 
					 | 
				
			||||||
  global:
 | 
					 | 
				
			||||||
    - PKG_CONFIG_PATH=""
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
matrix:
 | 
					 | 
				
			||||||
  include:
 | 
					 | 
				
			||||||
    - env:
 | 
					 | 
				
			||||||
      - BUILD=meson
 | 
					 | 
				
			||||||
    - env:
 | 
					 | 
				
			||||||
      - BUILD=scons
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
before_install:
 | 
					 | 
				
			||||||
  - HOMEBREW_NO_AUTO_UPDATE=1 brew install expat gettext
 | 
					 | 
				
			||||||
  - if test "x$BUILD" = xmeson; then
 | 
					 | 
				
			||||||
      HOMEBREW_NO_AUTO_UPDATE=1 brew install ninja;
 | 
					 | 
				
			||||||
    fi
 | 
					 | 
				
			||||||
  - if test "x$BUILD" = xscons; then
 | 
					 | 
				
			||||||
      HOMEBREW_NO_AUTO_UPDATE=1 brew install scons;
 | 
					 | 
				
			||||||
    fi
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  # Set PATH for homebrew pip3 installs
 | 
					 | 
				
			||||||
  - 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}"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
install:
 | 
					 | 
				
			||||||
  - if test "x$BUILD" = xmeson; then
 | 
					 | 
				
			||||||
      pip3 install --user meson;
 | 
					 | 
				
			||||||
      pip3 install --user mako;
 | 
					 | 
				
			||||||
    fi
 | 
					 | 
				
			||||||
  - if test "x$BUILD" = xscons; then
 | 
					 | 
				
			||||||
      pip2 install --user mako;
 | 
					 | 
				
			||||||
    fi
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
script:
 | 
					 | 
				
			||||||
  - if test "x$BUILD" = xmeson; then
 | 
					 | 
				
			||||||
      meson _build -Dbuild-tests=true;
 | 
					 | 
				
			||||||
      ninja -C _build || travis_terminate 1;
 | 
					 | 
				
			||||||
      ninja -C _build test || travis_terminate 1;
 | 
					 | 
				
			||||||
      ninja -C _build install || travis_terminate 1;
 | 
					 | 
				
			||||||
    fi
 | 
					 | 
				
			||||||
  - if test "x$BUILD" = xscons; then
 | 
					 | 
				
			||||||
      scons force_scons=1 || travis_terminate 1;
 | 
					 | 
				
			||||||
      scons force_scons=1 check || travis_terminate 1;
 | 
					 | 
				
			||||||
    fi
 | 
					 | 
				
			||||||
@@ -21,108 +21,39 @@
 | 
				
			|||||||
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
 | 
					# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
 | 
				
			||||||
# DEALINGS IN THE SOFTWARE.
 | 
					# DEALINGS IN THE SOFTWARE.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# use c99 compiler by default
 | 
				
			||||||
 | 
					ifeq ($(LOCAL_CC),)
 | 
				
			||||||
ifeq ($(LOCAL_IS_HOST_MODULE),true)
 | 
					ifeq ($(LOCAL_IS_HOST_MODULE),true)
 | 
				
			||||||
LOCAL_CFLAGS += -D_GNU_SOURCE
 | 
					LOCAL_CC := $(HOST_CC) -std=c99
 | 
				
			||||||
 | 
					else
 | 
				
			||||||
 | 
					LOCAL_CC := $(TARGET_CC) -std=c99
 | 
				
			||||||
 | 
					endif
 | 
				
			||||||
endif
 | 
					endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
LOCAL_C_INCLUDES += \
 | 
					LOCAL_C_INCLUDES += \
 | 
				
			||||||
	$(MESA_TOP)/src \
 | 
					 | 
				
			||||||
	$(MESA_TOP)/include
 | 
						$(MESA_TOP)/include
 | 
				
			||||||
 | 
					
 | 
				
			||||||
MESA_VERSION := $(shell cat $(MESA_TOP)/VERSION)
 | 
					# define ANDROID_VERSION (e.g., 4.0.x => 0x0400)
 | 
				
			||||||
 | 
					major := $(word 1, $(subst ., , $(PLATFORM_VERSION)))
 | 
				
			||||||
 | 
					minor := $(word 2, $(subst ., , $(PLATFORM_VERSION)))
 | 
				
			||||||
LOCAL_CFLAGS += \
 | 
					LOCAL_CFLAGS += \
 | 
				
			||||||
	-Wno-error \
 | 
						-DANDROID_VERSION=0x0$(major)0$(minor)
 | 
				
			||||||
	-Werror=incompatible-pointer-types \
 | 
					 | 
				
			||||||
	-Wno-unused-parameter \
 | 
					 | 
				
			||||||
	-Wno-pointer-arith \
 | 
					 | 
				
			||||||
	-Wno-missing-field-initializers \
 | 
					 | 
				
			||||||
	-Wno-initializer-overrides \
 | 
					 | 
				
			||||||
	-Wno-mismatched-tags \
 | 
					 | 
				
			||||||
	-DPACKAGE_VERSION=\"$(MESA_VERSION)\" \
 | 
					 | 
				
			||||||
	-DPACKAGE_BUGREPORT=\"https://gitlab.freedesktop.org/mesa/mesa/issues\"
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
# XXX: The following __STDC_*_MACROS defines should not be needed.
 | 
					 | 
				
			||||||
# It's likely due to a bug elsewhere, but let's temporarily add them
 | 
					 | 
				
			||||||
# here to fix the radeonsi build.
 | 
					 | 
				
			||||||
LOCAL_CFLAGS += \
 | 
					LOCAL_CFLAGS += \
 | 
				
			||||||
	-DANDROID_API_LEVEL=$(PLATFORM_SDK_VERSION) \
 | 
						-DPTHREADS \
 | 
				
			||||||
	-DENABLE_SHADER_CACHE \
 | 
					 | 
				
			||||||
	-D__STDC_CONSTANT_MACROS \
 | 
					 | 
				
			||||||
	-D__STDC_LIMIT_MACROS \
 | 
					 | 
				
			||||||
	-DHAVE___BUILTIN_EXPECT \
 | 
					 | 
				
			||||||
	-DHAVE___BUILTIN_FFS \
 | 
					 | 
				
			||||||
	-DHAVE___BUILTIN_FFSLL \
 | 
					 | 
				
			||||||
	-DHAVE_DLFCN_H \
 | 
					 | 
				
			||||||
	-DHAVE_FUNC_ATTRIBUTE_FLATTEN \
 | 
					 | 
				
			||||||
	-DHAVE_FUNC_ATTRIBUTE_UNUSED \
 | 
					 | 
				
			||||||
	-DHAVE_FUNC_ATTRIBUTE_FORMAT \
 | 
					 | 
				
			||||||
	-DHAVE_FUNC_ATTRIBUTE_PACKED \
 | 
					 | 
				
			||||||
	-DHAVE_FUNC_ATTRIBUTE_ALIAS \
 | 
					 | 
				
			||||||
	-DHAVE_FUNC_ATTRIBUTE_NORETURN \
 | 
					 | 
				
			||||||
	-DHAVE_FUNC_ATTRIBUTE_RETURNS_NONNULL \
 | 
					 | 
				
			||||||
	-DHAVE_FUNC_ATTRIBUTE_WARN_UNUSED_RESULT \
 | 
					 | 
				
			||||||
	-DHAVE___BUILTIN_CTZ \
 | 
					 | 
				
			||||||
	-DHAVE___BUILTIN_POPCOUNT \
 | 
					 | 
				
			||||||
	-DHAVE___BUILTIN_POPCOUNTLL \
 | 
					 | 
				
			||||||
	-DHAVE___BUILTIN_CLZ \
 | 
					 | 
				
			||||||
	-DHAVE___BUILTIN_CLZLL \
 | 
					 | 
				
			||||||
	-DHAVE___BUILTIN_UNREACHABLE \
 | 
					 | 
				
			||||||
	-DHAVE_PTHREAD=1 \
 | 
					 | 
				
			||||||
	-DHAVE_DLADDR \
 | 
					 | 
				
			||||||
	-DHAVE_DL_ITERATE_PHDR \
 | 
					 | 
				
			||||||
	-DHAVE_LINUX_FUTEX_H \
 | 
					 | 
				
			||||||
	-DHAVE_ENDIAN_H \
 | 
					 | 
				
			||||||
	-DHAVE_ZLIB \
 | 
					 | 
				
			||||||
	-DMAJOR_IN_SYSMACROS \
 | 
					 | 
				
			||||||
	-DVK_USE_PLATFORM_ANDROID_KHR \
 | 
					 | 
				
			||||||
	-fvisibility=hidden \
 | 
						-fvisibility=hidden \
 | 
				
			||||||
	-fno-math-errno \
 | 
					 | 
				
			||||||
	-fno-trapping-math \
 | 
					 | 
				
			||||||
	-Wno-sign-compare
 | 
						-Wno-sign-compare
 | 
				
			||||||
 | 
					
 | 
				
			||||||
LOCAL_CPPFLAGS += \
 | 
					 | 
				
			||||||
	-D__STDC_CONSTANT_MACROS \
 | 
					 | 
				
			||||||
	-D__STDC_FORMAT_MACROS \
 | 
					 | 
				
			||||||
	-D__STDC_LIMIT_MACROS \
 | 
					 | 
				
			||||||
	-Wno-error=non-virtual-dtor \
 | 
					 | 
				
			||||||
	-Wno-non-virtual-dtor
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# mesa requires at least c99 compiler
 | 
					 | 
				
			||||||
LOCAL_CONLYFLAGS += \
 | 
					 | 
				
			||||||
	-std=c99
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# c11 timespec_get is part of bionic as well
 | 
					 | 
				
			||||||
# https://android-review.googlesource.com/c/718518
 | 
					 | 
				
			||||||
# This means releases from P and earlier won't need this
 | 
					 | 
				
			||||||
ifeq ($(filter 5 6 7 8 9, $(MESA_ANDROID_MAJOR_VERSION)),)
 | 
					 | 
				
			||||||
LOCAL_CFLAGS += -DHAVE_TIMESPEC_GET
 | 
					 | 
				
			||||||
endif
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# Android's libc began supporting shm in Oreo
 | 
					 | 
				
			||||||
ifeq ($(shell test $(PLATFORM_SDK_VERSION) -ge 26 && echo true),true)
 | 
					 | 
				
			||||||
LOCAL_CFLAGS += -DHAVE_SYS_SHM_H
 | 
					 | 
				
			||||||
endif
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
ifeq ($(strip $(MESA_ENABLE_ASM)),true)
 | 
					ifeq ($(strip $(MESA_ENABLE_ASM)),true)
 | 
				
			||||||
ifeq ($(TARGET_ARCH),x86)
 | 
					ifeq ($(TARGET_ARCH),x86)
 | 
				
			||||||
LOCAL_CFLAGS += \
 | 
					LOCAL_CFLAGS += \
 | 
				
			||||||
	-DUSE_X86_ASM
 | 
						-DUSE_X86_ASM
 | 
				
			||||||
 | 
					 | 
				
			||||||
endif
 | 
					endif
 | 
				
			||||||
endif
 | 
					endif
 | 
				
			||||||
ifeq ($(ARCH_ARM_HAVE_NEON),true)
 | 
					 | 
				
			||||||
LOCAL_CFLAGS_arm += -DUSE_ARM_ASM
 | 
					 | 
				
			||||||
endif
 | 
					 | 
				
			||||||
LOCAL_CFLAGS_arm64 += -DUSE_AARCH64_ASM
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
ifneq ($(LOCAL_IS_HOST_MODULE),true)
 | 
					 | 
				
			||||||
LOCAL_CFLAGS += -DHAVE_LIBDRM
 | 
					 | 
				
			||||||
LOCAL_SHARED_LIBRARIES += libdrm
 | 
					 | 
				
			||||||
endif
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
LOCAL_CFLAGS_32 += -DDEFAULT_DRIVER_DIR=\"/vendor/lib/$(MESA_DRI_MODULE_REL_PATH)\"
 | 
					LOCAL_CPPFLAGS += \
 | 
				
			||||||
LOCAL_CFLAGS_64 += -DDEFAULT_DRIVER_DIR=\"/vendor/lib64/$(MESA_DRI_MODULE_REL_PATH)\"
 | 
						-Wno-error=non-virtual-dtor \
 | 
				
			||||||
LOCAL_PROPRIETARY_MODULE := true
 | 
						-Wno-non-virtual-dtor
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# uncomment to keep the debug symbols
 | 
					# uncomment to keep the debug symbols
 | 
				
			||||||
#LOCAL_STRIP_MODULE := false
 | 
					#LOCAL_STRIP_MODULE := false
 | 
				
			||||||
@@ -130,6 +61,3 @@ LOCAL_PROPRIETARY_MODULE := true
 | 
				
			|||||||
ifeq ($(strip $(LOCAL_MODULE_TAGS)),)
 | 
					ifeq ($(strip $(LOCAL_MODULE_TAGS)),)
 | 
				
			||||||
LOCAL_MODULE_TAGS := optional
 | 
					LOCAL_MODULE_TAGS := optional
 | 
				
			||||||
endif
 | 
					endif
 | 
				
			||||||
 | 
					 | 
				
			||||||
# Quiet down the build system and remove any .h files from the sources
 | 
					 | 
				
			||||||
LOCAL_SRC_FILES := $(patsubst %.h, , $(LOCAL_SRC_FILES))
 | 
					 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										119
									
								
								Android.mk
									
									
									
									
									
								
							
							
						
						
									
										119
									
								
								Android.mk
									
									
									
									
									
								
							@@ -24,64 +24,31 @@
 | 
				
			|||||||
# BOARD_GPU_DRIVERS should be defined.  The valid values are
 | 
					# BOARD_GPU_DRIVERS should be defined.  The valid values are
 | 
				
			||||||
#
 | 
					#
 | 
				
			||||||
#   classic drivers: i915 i965
 | 
					#   classic drivers: i915 i965
 | 
				
			||||||
#   gallium drivers: swrast freedreno i915g nouveau kmsro r300g r600g radeonsi vc4 virgl vmwgfx etnaviv iris lima
 | 
					#   gallium drivers: swrast i915g nouveau r300g r600g radeonsi vmwgfx
 | 
				
			||||||
#
 | 
					#
 | 
				
			||||||
# The main target is libGLES_mesa.  For each classic driver enabled, a DRI
 | 
					# The main target is libGLES_mesa.  For each classic driver enabled, a DRI
 | 
				
			||||||
# module will also be built.  DRI modules will be loaded by libGLES_mesa.
 | 
					# module will also be built.  DRI modules will be loaded by libGLES_mesa.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
MESA_TOP := $(call my-dir)
 | 
					MESA_TOP := $(call my-dir)
 | 
				
			||||||
 | 
					 | 
				
			||||||
MESA_ANDROID_MAJOR_VERSION := $(word 1, $(subst ., , $(PLATFORM_VERSION)))
 | 
					 | 
				
			||||||
ifneq ($(filter 2 4, $(MESA_ANDROID_MAJOR_VERSION)),)
 | 
					 | 
				
			||||||
$(error "Android 4.4 and earlier not supported")
 | 
					 | 
				
			||||||
endif
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
MESA_DRI_MODULE_REL_PATH := dri
 | 
					 | 
				
			||||||
MESA_DRI_MODULE_PATH := $(TARGET_OUT_SHARED_LIBRARIES)/$(MESA_DRI_MODULE_REL_PATH)
 | 
					 | 
				
			||||||
MESA_DRI_MODULE_UNSTRIPPED_PATH := $(TARGET_OUT_SHARED_LIBRARIES_UNSTRIPPED)/$(MESA_DRI_MODULE_REL_PATH)
 | 
					 | 
				
			||||||
MESA_DRI_LDFLAGS := -Wl,--build-id=sha1
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
MESA_COMMON_MK := $(MESA_TOP)/Android.common.mk
 | 
					MESA_COMMON_MK := $(MESA_TOP)/Android.common.mk
 | 
				
			||||||
MESA_PYTHON2 := python
 | 
					MESA_PYTHON2 := python
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Lists to convert driver names to boolean variables
 | 
					DRM_TOP := external/drm
 | 
				
			||||||
# in form of <driver name>.<boolean make variable>
 | 
					DRM_GRALLOC_TOP := hardware/drm_gralloc
 | 
				
			||||||
classic_drivers := i915.HAVE_I915_DRI i965.HAVE_I965_DRI
 | 
					 | 
				
			||||||
gallium_drivers := \
 | 
					 | 
				
			||||||
	swrast.HAVE_GALLIUM_SOFTPIPE \
 | 
					 | 
				
			||||||
	freedreno.HAVE_GALLIUM_FREEDRENO \
 | 
					 | 
				
			||||||
	i915g.HAVE_GALLIUM_I915 \
 | 
					 | 
				
			||||||
	nouveau.HAVE_GALLIUM_NOUVEAU \
 | 
					 | 
				
			||||||
	kmsro.HAVE_GALLIUM_KMSRO \
 | 
					 | 
				
			||||||
	r300g.HAVE_GALLIUM_R300 \
 | 
					 | 
				
			||||||
	r600g.HAVE_GALLIUM_R600 \
 | 
					 | 
				
			||||||
	radeonsi.HAVE_GALLIUM_RADEONSI \
 | 
					 | 
				
			||||||
	vmwgfx.HAVE_GALLIUM_VMWGFX \
 | 
					 | 
				
			||||||
	vc4.HAVE_GALLIUM_VC4 \
 | 
					 | 
				
			||||||
	virgl.HAVE_GALLIUM_VIRGL \
 | 
					 | 
				
			||||||
	etnaviv.HAVE_GALLIUM_ETNAVIV \
 | 
					 | 
				
			||||||
	iris.HAVE_GALLIUM_IRIS \
 | 
					 | 
				
			||||||
	lima.HAVE_GALLIUM_LIMA
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
ifeq ($(BOARD_GPU_DRIVERS),all)
 | 
					classic_drivers := i915 i965
 | 
				
			||||||
MESA_BUILD_CLASSIC := $(filter HAVE_%, $(subst ., , $(classic_drivers)))
 | 
					gallium_drivers := swrast i915g nouveau r300g r600g radeonsi vmwgfx
 | 
				
			||||||
MESA_BUILD_GALLIUM := $(filter HAVE_%, $(subst ., , $(gallium_drivers)))
 | 
					 | 
				
			||||||
else
 | 
					 | 
				
			||||||
# Warn if we have any invalid driver names
 | 
					 | 
				
			||||||
$(foreach d, $(BOARD_GPU_DRIVERS), \
 | 
					 | 
				
			||||||
	$(if $(findstring $(d).,$(classic_drivers) $(gallium_drivers)), \
 | 
					 | 
				
			||||||
		, \
 | 
					 | 
				
			||||||
		$(warning invalid GPU driver: $(d)) \
 | 
					 | 
				
			||||||
	) \
 | 
					 | 
				
			||||||
)
 | 
					 | 
				
			||||||
MESA_BUILD_CLASSIC := $(strip $(foreach d, $(BOARD_GPU_DRIVERS), $(patsubst $(d).%,%, $(filter $(d).%, $(classic_drivers)))))
 | 
					 | 
				
			||||||
MESA_BUILD_GALLIUM := $(strip $(foreach d, $(BOARD_GPU_DRIVERS), $(patsubst $(d).%,%, $(filter $(d).%, $(gallium_drivers)))))
 | 
					 | 
				
			||||||
endif
 | 
					 | 
				
			||||||
ifeq ($(filter x86%,$(TARGET_ARCH)),)
 | 
					 | 
				
			||||||
	MESA_BUILD_CLASSIC :=
 | 
					 | 
				
			||||||
endif
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
$(foreach d, $(MESA_BUILD_CLASSIC) $(MESA_BUILD_GALLIUM), $(eval $(d) := true))
 | 
					MESA_GPU_DRIVERS := $(strip $(BOARD_GPU_DRIVERS))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# warn about invalid drivers
 | 
				
			||||||
 | 
					invalid_drivers := $(filter-out \
 | 
				
			||||||
 | 
						$(classic_drivers) $(gallium_drivers), $(MESA_GPU_DRIVERS))
 | 
				
			||||||
 | 
					ifneq ($(invalid_drivers),)
 | 
				
			||||||
 | 
					$(warning invalid GPU drivers: $(invalid_drivers))
 | 
				
			||||||
 | 
					# tidy up
 | 
				
			||||||
 | 
					MESA_GPU_DRIVERS := $(filter-out $(invalid_drivers), $(MESA_GPU_DRIVERS))
 | 
				
			||||||
 | 
					endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# host and target must be the same arch to generate matypes.h
 | 
					# host and target must be the same arch to generate matypes.h
 | 
				
			||||||
ifeq ($(TARGET_ARCH),$(HOST_ARCH))
 | 
					ifeq ($(TARGET_ARCH),$(HOST_ARCH))
 | 
				
			||||||
@@ -90,34 +57,38 @@ else
 | 
				
			|||||||
MESA_ENABLE_ASM := false
 | 
					MESA_ENABLE_ASM := false
 | 
				
			||||||
endif
 | 
					endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
ifneq ($(filter true, $(HAVE_GALLIUM_RADEONSI)),)
 | 
					ifneq ($(filter $(classic_drivers), $(MESA_GPU_DRIVERS)),)
 | 
				
			||||||
MESA_ENABLE_LLVM := true
 | 
					MESA_BUILD_CLASSIC := true
 | 
				
			||||||
 | 
					else
 | 
				
			||||||
 | 
					MESA_BUILD_CLASSIC := false
 | 
				
			||||||
endif
 | 
					endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
define mesa-build-with-llvm
 | 
					ifneq ($(filter $(gallium_drivers), $(MESA_GPU_DRIVERS)),)
 | 
				
			||||||
  $(if $(filter $(MESA_ANDROID_MAJOR_VERSION), 4 5 6 7), \
 | 
					MESA_BUILD_GALLIUM := true
 | 
				
			||||||
    $(warning Unsupported LLVM version in Android $(MESA_ANDROID_MAJOR_VERSION)),) \
 | 
					else
 | 
				
			||||||
  $(eval LOCAL_CFLAGS += -DLLVM_AVAILABLE -DMESA_LLVM_VERSION_STRING=\"3.9\") \
 | 
					MESA_BUILD_GALLIUM := false
 | 
				
			||||||
  $(eval LOCAL_SHARED_LIBRARIES += libLLVM)
 | 
					endif
 | 
				
			||||||
endef
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
# add subdirectories
 | 
					# add subdirectories
 | 
				
			||||||
SUBDIRS := \
 | 
					ifneq ($(strip $(MESA_GPU_DRIVERS)),)
 | 
				
			||||||
	src/freedreno \
 | 
					 | 
				
			||||||
	src/gbm \
 | 
					 | 
				
			||||||
	src/loader \
 | 
					 | 
				
			||||||
	src/mapi \
 | 
					 | 
				
			||||||
	src/compiler \
 | 
					 | 
				
			||||||
	src/mesa \
 | 
					 | 
				
			||||||
	src/util \
 | 
					 | 
				
			||||||
	src/egl \
 | 
					 | 
				
			||||||
	src/amd \
 | 
					 | 
				
			||||||
	src/broadcom \
 | 
					 | 
				
			||||||
	src/intel \
 | 
					 | 
				
			||||||
	src/mesa/drivers/dri \
 | 
					 | 
				
			||||||
	src/vulkan \
 | 
					 | 
				
			||||||
	src/panfrost \
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
INC_DIRS := $(call all-named-subdir-makefiles,$(SUBDIRS))
 | 
					SUBDIRS := \
 | 
				
			||||||
INC_DIRS += $(call all-named-subdir-makefiles,src/gallium)
 | 
						src/mapi \
 | 
				
			||||||
include $(INC_DIRS)
 | 
						src/glsl \
 | 
				
			||||||
 | 
						src/mesa \
 | 
				
			||||||
 | 
						src/egl/main
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					ifeq ($(strip $(MESA_BUILD_CLASSIC)),true)
 | 
				
			||||||
 | 
					SUBDIRS += \
 | 
				
			||||||
 | 
						src/egl/drivers/dri2 \
 | 
				
			||||||
 | 
						src/mesa/drivers/dri
 | 
				
			||||||
 | 
					endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					ifeq ($(strip $(MESA_BUILD_GALLIUM)),true)
 | 
				
			||||||
 | 
					SUBDIRS += src/gallium
 | 
				
			||||||
 | 
					endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					mkfiles := $(patsubst %,$(MESA_TOP)/%/Android.mk,$(SUBDIRS))
 | 
				
			||||||
 | 
					include $(mkfiles)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					endif
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										16
									
								
								CleanSpec.mk
									
									
									
									
									
								
							
							
						
						
									
										16
									
								
								CleanSpec.mk
									
									
									
									
									
								
							@@ -1,16 +0,0 @@
 | 
				
			|||||||
$(call add-clean-step, rm -rf $(PRODUCT_OUT)/obj/STATIC_LIBRARIES/libmesa_*_intermediates)
 | 
					 | 
				
			||||||
$(call add-clean-step, rm -rf $(PRODUCT_OUT)/obj/SHARED_LIBRARIES/i9*5_dri_intermediates)
 | 
					 | 
				
			||||||
$(call add-clean-step, rm -rf $(PRODUCT_OUT)/obj/SHARED_LIBRARIES/libglapi_intermediates)
 | 
					 | 
				
			||||||
$(call add-clean-step, rm -rf $(PRODUCT_OUT)/obj/SHARED_LIBRARIES/libGLES_mesa_intermediates)
 | 
					 | 
				
			||||||
$(call add-clean-step, rm -rf $(OUT_DIR)/host/$(HOST_OS)-$(HOST_ARCH)/obj/EXECUTABLES/mesa_*_intermediates)
 | 
					 | 
				
			||||||
$(call add-clean-step, rm -rf $(OUT_DIR)/host/$(HOST_OS)-$(HOST_ARCH)/obj/EXECUTABLES/glsl_compiler_intermediates)
 | 
					 | 
				
			||||||
$(call add-clean-step, rm -rf $(OUT_DIR)/host/$(HOST_OS)-$(HOST_ARCH)/obj/STATIC_LIBRARIES/libmesa_glsl_utils_intermediates)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
$(call add-clean-step, rm -rf $(PRODUCT_OUT)/*/STATIC_LIBRARIES/libmesa_*_intermediates)
 | 
					 | 
				
			||||||
$(call add-clean-step, rm -rf $(PRODUCT_OUT)/*/SHARED_LIBRARIES/i9?5_dri_intermediates)
 | 
					 | 
				
			||||||
$(call add-clean-step, rm -rf $(PRODUCT_OUT)/*/SHARED_LIBRARIES/libglapi_intermediates)
 | 
					 | 
				
			||||||
$(call add-clean-step, rm -rf $(PRODUCT_OUT)/*/SHARED_LIBRARIES/libGLES_mesa_intermediates)
 | 
					 | 
				
			||||||
$(call add-clean-step, rm -rf $(HOST_OUT)/*/EXECUTABLES/mesa_*_intermediates)
 | 
					 | 
				
			||||||
$(call add-clean-step, rm -rf $(HOST_OUT)/*/EXECUTABLES/glsl_compiler_intermediates)
 | 
					 | 
				
			||||||
$(call add-clean-step, rm -rf $(HOST_OUT)/*/STATIC_LIBRARIES/libmesa_*_intermediates)
 | 
					 | 
				
			||||||
$(call add-clean-step, rm -rf $(PRODUCT_OUT)/*/SHARED_LIBRARIES/*_dri_intermediates)
 | 
					 | 
				
			||||||
							
								
								
									
										124
									
								
								Makefile.am
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										124
									
								
								Makefile.am
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,124 @@
 | 
				
			|||||||
 | 
					# 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
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					doxygen:
 | 
				
			||||||
 | 
						cd doxygen && $(MAKE)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					check-local:
 | 
				
			||||||
 | 
						$(MAKE) -C src/mapi/glapi/tests check
 | 
				
			||||||
 | 
						$(MAKE) -C src/mesa/main/tests check
 | 
				
			||||||
 | 
						$(MAKE) -C src/glsl/tests check
 | 
				
			||||||
 | 
						$(MAKE) -C src/glx/tests check
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					clean-local:
 | 
				
			||||||
 | 
						-@touch $(top_builddir)/configs/current
 | 
				
			||||||
 | 
						-@for dir in $(SUBDIRS) ; do \
 | 
				
			||||||
 | 
							if [ -d $$dir ] ; then \
 | 
				
			||||||
 | 
								(cd $$dir && $(MAKE) clean) ; \
 | 
				
			||||||
 | 
							fi \
 | 
				
			||||||
 | 
						done
 | 
				
			||||||
 | 
						-@test -s $(top_builddir)/configs/current || rm -f $(top_builddir)/configs/current
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					distclean-local:
 | 
				
			||||||
 | 
						-rm -rf lib*
 | 
				
			||||||
 | 
						-rm -f $(top_builddir)/configs/current
 | 
				
			||||||
 | 
						-find . '(' -name '*.o' -o -name '*.a' -o -name '*.so' -o \
 | 
				
			||||||
 | 
						  -name depend -o -name depend.bak ')' -exec rm -f '{}' ';'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.PHONY: doxygen
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Rules for making release tarballs
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					PACKAGE_VERSION=8.1-devel
 | 
				
			||||||
 | 
					PACKAGE_DIR = Mesa-$(PACKAGE_VERSION)
 | 
				
			||||||
 | 
					PACKAGE_NAME = MesaLib-$(PACKAGE_VERSION)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					EXTRA_FILES = \
 | 
				
			||||||
 | 
						aclocal.m4					\
 | 
				
			||||||
 | 
						configure					\
 | 
				
			||||||
 | 
						src/glsl/glsl_parser.cc				\
 | 
				
			||||||
 | 
						src/glsl/glsl_parser.h				\
 | 
				
			||||||
 | 
						src/glsl/glsl_lexer.cc				\
 | 
				
			||||||
 | 
						src/glsl/glcpp/glcpp-lex.c			\
 | 
				
			||||||
 | 
						src/glsl/glcpp/glcpp-parse.c			\
 | 
				
			||||||
 | 
						src/glsl/glcpp/glcpp-parse.h			\
 | 
				
			||||||
 | 
						src/mesa/main/api_exec_es1.c			\
 | 
				
			||||||
 | 
						src/mesa/main/api_exec_es1_dispatch.h		\
 | 
				
			||||||
 | 
						src/mesa/main/api_exec_es1_remap_helper.h	\
 | 
				
			||||||
 | 
						src/mesa/main/api_exec_es2.c			\
 | 
				
			||||||
 | 
						src/mesa/main/api_exec_es2_dispatch.h		\
 | 
				
			||||||
 | 
						src/mesa/main/api_exec_es2_remap_helper.h	\
 | 
				
			||||||
 | 
						src/mesa/program/lex.yy.c			\
 | 
				
			||||||
 | 
						src/mesa/program/program_parse.tab.c		\
 | 
				
			||||||
 | 
						src/mesa/program/program_parse.tab.h
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					IGNORE_FILES = \
 | 
				
			||||||
 | 
						-x autogen.sh
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					parsers: configure
 | 
				
			||||||
 | 
						-@touch $(top_builddir)/configs/current
 | 
				
			||||||
 | 
						$(MAKE) -C src/glsl glsl_parser.cc glsl_parser.h glsl_lexer.cc
 | 
				
			||||||
 | 
						$(MAKE) -C src/glsl/glcpp glcpp-lex.c glcpp-parse.c glcpp-parse.h
 | 
				
			||||||
 | 
						$(MAKE) -C src/mesa program/lex.yy.c program/program_parse.tab.c program/program_parse.tab.h
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Everything for new a Mesa release:
 | 
				
			||||||
 | 
					ARCHIVES = $(PACKAGE_NAME).tar.gz \
 | 
				
			||||||
 | 
						$(PACKAGE_NAME).tar.bz2 \
 | 
				
			||||||
 | 
						$(PACKAGE_NAME).zip
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					tarballs: md5
 | 
				
			||||||
 | 
						rm -f ../$(PACKAGE_DIR) $(PACKAGE_NAME).tar
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					manifest.txt: .git
 | 
				
			||||||
 | 
						( \
 | 
				
			||||||
 | 
							ls -1 $(EXTRA_FILES) ; \
 | 
				
			||||||
 | 
							git ls-files $(IGNORE_FILES) \
 | 
				
			||||||
 | 
						) | sed -e '/^\(.*\/\)\?\./d' -e "s@^@$(PACKAGE_DIR)/@" > $@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					../$(PACKAGE_DIR):
 | 
				
			||||||
 | 
						ln -s $(PWD) $@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					$(PACKAGE_NAME).tar: parsers ../$(PACKAGE_DIR) manifest.txt
 | 
				
			||||||
 | 
						cd .. ; tar -cf $(PACKAGE_DIR)/$(PACKAGE_NAME).tar -T $(PACKAGE_DIR)/manifest.txt
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					$(PACKAGE_NAME).tar.gz: $(PACKAGE_NAME).tar ../$(PACKAGE_DIR)
 | 
				
			||||||
 | 
						gzip --stdout --best $(PACKAGE_NAME).tar > $(PACKAGE_NAME).tar.gz
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					$(PACKAGE_NAME).tar.bz2: $(PACKAGE_NAME).tar
 | 
				
			||||||
 | 
						bzip2 --stdout --best $(PACKAGE_NAME).tar > $(PACKAGE_NAME).tar.bz2
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					$(PACKAGE_NAME).zip: parsers ../$(PACKAGE_DIR) manifest.txt
 | 
				
			||||||
 | 
						rm -f $(PACKAGE_NAME).zip ; \
 | 
				
			||||||
 | 
						cd .. ; \
 | 
				
			||||||
 | 
						zip -q -@ $(PACKAGE_NAME).zip < $(PACKAGE_DIR)/manifest.txt ; \
 | 
				
			||||||
 | 
						mv $(PACKAGE_NAME).zip $(PACKAGE_DIR)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					md5: $(ARCHIVES)
 | 
				
			||||||
 | 
						@-md5sum $(PACKAGE_NAME).tar.gz
 | 
				
			||||||
 | 
						@-md5sum $(PACKAGE_NAME).tar.bz2
 | 
				
			||||||
 | 
						@-md5sum $(PACKAGE_NAME).zip
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.PHONY: tarballs md5
 | 
				
			||||||
							
								
								
									
										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.
 | 
					 | 
				
			||||||
							
								
								
									
										120
									
								
								REVIEWERS
									
									
									
									
									
								
							
							
						
						
									
										120
									
								
								REVIEWERS
									
									
									
									
									
								
							@@ -1,120 +0,0 @@
 | 
				
			|||||||
Overview:
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	This file is similar in syntax (or more precisly a subset) of what is
 | 
					 | 
				
			||||||
	used by the MAINTAINERS file in the linux kernel.
 | 
					 | 
				
			||||||
	The purpose is not exactly the same the MAINTAINERS file in the linux
 | 
					 | 
				
			||||||
	kernel, as there are not official/formal maintainers of different
 | 
					 | 
				
			||||||
	subsystems in mesa, but is meant to give an idea of who to CC for
 | 
					 | 
				
			||||||
	various patches for review.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Descriptions of section entries:
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	R: Designated reviewer: FullName <address@domain>
 | 
					 | 
				
			||||||
	   These reviewers should be CCed on patches.
 | 
					 | 
				
			||||||
	F: Files and directories with wildcard patterns.
 | 
					 | 
				
			||||||
	   A trailing slash includes all files and subdirectory files.
 | 
					 | 
				
			||||||
	   F:	drivers/net/	all files in and below drivers/net
 | 
					 | 
				
			||||||
	   F:	drivers/net/*	all files in drivers/net, but not below
 | 
					 | 
				
			||||||
	   F:	*/net/*		all files in "any top level directory"/net
 | 
					 | 
				
			||||||
	   One pattern per line.  Multiple F: lines acceptable.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Maintainers List (try to look for most precise areas first)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Note: this is an opt-in system, I have not tried to add anyone who hasn't
 | 
					 | 
				
			||||||
either asked me or sent a patch to add themselves.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		-----------------------------------
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
NIR
 | 
					 | 
				
			||||||
R:	Jason Ekstrand <jason@jlekstrand.net>
 | 
					 | 
				
			||||||
F:	src/compiler/nir/
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
DOCUMENTATION
 | 
					 | 
				
			||||||
R: Emil Velikov <emil.l.velikov@gmail.com>
 | 
					 | 
				
			||||||
R: Eric Engestrom <eric@engestrom.ch>
 | 
					 | 
				
			||||||
F: docs/
 | 
					 | 
				
			||||||
F: doxygen/
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
COMPATIBILITY HEADERS
 | 
					 | 
				
			||||||
R: Emil Velikov <emil.l.velikov@gmail.com>
 | 
					 | 
				
			||||||
F: include/c99*
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
DRI LOADER
 | 
					 | 
				
			||||||
R: Emil Velikov <emil.l.velikov@gmail.com>
 | 
					 | 
				
			||||||
F: src/loader/
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
EGL
 | 
					 | 
				
			||||||
R: Eric Engestrom <eric@engestrom.ch>
 | 
					 | 
				
			||||||
R: Emil Velikov <emil.l.velikov@gmail.com>
 | 
					 | 
				
			||||||
F: src/egl/
 | 
					 | 
				
			||||||
F: include/EGL/
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
HAIKU
 | 
					 | 
				
			||||||
R: Alexander von Gluck IV <kallisti5@unixzen.com>
 | 
					 | 
				
			||||||
F: include/HaikuGL/
 | 
					 | 
				
			||||||
F: src/egl/drivers/haiku/
 | 
					 | 
				
			||||||
F: src/gallium/state_trackers/hgl/
 | 
					 | 
				
			||||||
F: src/gallium/targets/haiku-softpipe/
 | 
					 | 
				
			||||||
F: src/gallium/winsys/sw/hgl/
 | 
					 | 
				
			||||||
F: src/hgl/
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
GALLIUM LOADER
 | 
					 | 
				
			||||||
R: Emil Velikov <emil.l.velikov@gmail.com>
 | 
					 | 
				
			||||||
F: src/gallium/auxiliary/pipe-loader/
 | 
					 | 
				
			||||||
F: src/gallium/auxiliary/target-helpers/
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
GALLIUM TARGETS
 | 
					 | 
				
			||||||
R: Emil Velikov <emil.l.velikov@gmail.com>
 | 
					 | 
				
			||||||
F: src/gallium/targets/
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
SCONS BUILD
 | 
					 | 
				
			||||||
F: scons/
 | 
					 | 
				
			||||||
F: */SConscript*
 | 
					 | 
				
			||||||
F: */Makefile.sources
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
ANDROID BUILD
 | 
					 | 
				
			||||||
R: Emil Velikov <emil.l.velikov@gmail.com>
 | 
					 | 
				
			||||||
R: Rob Herring <robh@kernel.org>
 | 
					 | 
				
			||||||
F: CleanSpec.mk
 | 
					 | 
				
			||||||
F: */Android.*mk
 | 
					 | 
				
			||||||
F: */Makefile.sources
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
MESON BUILD
 | 
					 | 
				
			||||||
R: Dylan Baker <dylan@pnwbakers.com>
 | 
					 | 
				
			||||||
R: Eric Engestrom <eric@engestrom.ch>
 | 
					 | 
				
			||||||
F: */meson.build
 | 
					 | 
				
			||||||
F: meson.build
 | 
					 | 
				
			||||||
F: meson_options.txt
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
ANDROID EGL SUPPORT
 | 
					 | 
				
			||||||
R: Rob Herring <robh@kernel.org>
 | 
					 | 
				
			||||||
R: Tomasz Figa <tfiga@chromium.org>
 | 
					 | 
				
			||||||
F: src/egl/drivers/dri2/platform_android.c
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
WAYLAND EGL SUPPORT
 | 
					 | 
				
			||||||
R: Daniel Stone <daniels@collabora.com>
 | 
					 | 
				
			||||||
F: src/egl/wayland/*
 | 
					 | 
				
			||||||
F: src/egl/drivers/dri2/platform_wayland.c
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
FREEDRENO
 | 
					 | 
				
			||||||
R:	Rob Clark <robclark@freedesktop.org>
 | 
					 | 
				
			||||||
F:	src/gallium/drivers/freedreno/
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
GLX
 | 
					 | 
				
			||||||
R: Adam Jackson <ajax@redhat.com>
 | 
					 | 
				
			||||||
F: src/glx/
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
VULKAN
 | 
					 | 
				
			||||||
R: Eric Engestrom <eric@engestrom.ch>
 | 
					 | 
				
			||||||
F: src/vulkan/
 | 
					 | 
				
			||||||
F: include/vulkan/
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
VMWARE DRIVER
 | 
					 | 
				
			||||||
R: Brian Paul <brianp@vmware.com>
 | 
					 | 
				
			||||||
R: Charmaine Lee <charmainel@vmware.com>
 | 
					 | 
				
			||||||
F: src/gallium/drivers/svga/
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
VMWARE WINSYS CODE
 | 
					 | 
				
			||||||
R: Thomas Hellstrom <thellstrom@vmware.com>
 | 
					 | 
				
			||||||
R: Deepak Rawat <drawat@vmware.com>
 | 
					 | 
				
			||||||
F: src/gallium/winsys/svga/
 | 
					 | 
				
			||||||
							
								
								
									
										74
									
								
								SConstruct
									
									
									
									
									
								
							
							
						
						
									
										74
									
								
								SConstruct
									
									
									
									
									
								
							@@ -1,7 +1,7 @@
 | 
				
			|||||||
#######################################################################
 | 
					#######################################################################
 | 
				
			||||||
# Top-level SConstruct
 | 
					# Top-level SConstruct
 | 
				
			||||||
#
 | 
					#
 | 
				
			||||||
# For example, invoke scons as
 | 
					# For example, invoke scons as 
 | 
				
			||||||
#
 | 
					#
 | 
				
			||||||
#   scons build=debug llvm=yes machine=x86
 | 
					#   scons build=debug llvm=yes machine=x86
 | 
				
			||||||
#
 | 
					#
 | 
				
			||||||
@@ -12,15 +12,14 @@
 | 
				
			|||||||
#   build='debug'
 | 
					#   build='debug'
 | 
				
			||||||
#   llvm=True
 | 
					#   llvm=True
 | 
				
			||||||
#   machine='x86'
 | 
					#   machine='x86'
 | 
				
			||||||
#
 | 
					# 
 | 
				
			||||||
# Invoke
 | 
					# Invoke
 | 
				
			||||||
#
 | 
					#
 | 
				
			||||||
#   scons -h
 | 
					#   scons -h
 | 
				
			||||||
#
 | 
					#
 | 
				
			||||||
# to get the full list of options. See scons manpage for more info.
 | 
					# to get the full list of options. See scons manpage for more info.
 | 
				
			||||||
#
 | 
					#  
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from __future__ import print_function
 | 
					 | 
				
			||||||
import os
 | 
					import os
 | 
				
			||||||
import os.path
 | 
					import os.path
 | 
				
			||||||
import sys
 | 
					import sys
 | 
				
			||||||
@@ -28,13 +27,6 @@ import SCons.Util
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
import common
 | 
					import common
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#######################################################################
 | 
					 | 
				
			||||||
# Minimal scons version
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
EnsureSConsVersion(2, 4)
 | 
					 | 
				
			||||||
EnsurePythonVersion(2, 7)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#######################################################################
 | 
					#######################################################################
 | 
				
			||||||
# Configuration options
 | 
					# Configuration options
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -44,7 +36,7 @@ common.AddOptions(opts)
 | 
				
			|||||||
env = Environment(
 | 
					env = Environment(
 | 
				
			||||||
	options = opts,
 | 
						options = opts,
 | 
				
			||||||
	tools = ['gallium'],
 | 
						tools = ['gallium'],
 | 
				
			||||||
	toolpath = ['#scons'],
 | 
						toolpath = ['#scons'],	
 | 
				
			||||||
	ENV = os.environ,
 | 
						ENV = os.environ,
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -58,45 +50,25 @@ except KeyError:
 | 
				
			|||||||
    pass
 | 
					    pass
 | 
				
			||||||
else:
 | 
					else:
 | 
				
			||||||
    targets = targets.split(',')
 | 
					    targets = targets.split(',')
 | 
				
			||||||
    print('scons: warning: targets option is deprecated; pass the targets on their own such as')
 | 
					    print 'scons: warning: targets option is deprecated; pass the targets on their own such as'
 | 
				
			||||||
    print()
 | 
					    print
 | 
				
			||||||
    print('  scons %s' % ' '.join(targets))
 | 
					    print '  scons %s' % ' '.join(targets)
 | 
				
			||||||
    print()
 | 
					    print 
 | 
				
			||||||
    COMMAND_LINE_TARGETS.append(targets)
 | 
					    COMMAND_LINE_TARGETS.append(targets)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Help(opts.GenerateHelpText(env))
 | 
					Help(opts.GenerateHelpText(env))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# fail early for a common error on windows
 | 
				
			||||||
#######################################################################
 | 
					if env['gles']:
 | 
				
			||||||
# Print a deprecation warning for using scons on non-windows
 | 
					    try:
 | 
				
			||||||
 | 
					        import libxml2
 | 
				
			||||||
if common.host_platform != 'windows' and env['platform'] != 'windows':
 | 
					    except ImportError:
 | 
				
			||||||
    if env['force_scons']:
 | 
					        raise SCons.Errors.UserError, "GLES requires libxml2-python to build"
 | 
				
			||||||
        print("WARNING: Scons is deprecated for non-windows platforms (including cygwin) "
 | 
					 | 
				
			||||||
              "please use meson instead.", file=sys.stderr)
 | 
					 | 
				
			||||||
    else:
 | 
					 | 
				
			||||||
        print("ERROR: Scons is deprecated for non-windows platforms (including cygwin) "
 | 
					 | 
				
			||||||
              "please use meson instead. If you really need to use scons you "
 | 
					 | 
				
			||||||
              "can add `force_scons=1` to the scons command line.", file=sys.stderr)
 | 
					 | 
				
			||||||
        sys.exit(1)
 | 
					 | 
				
			||||||
else:
 | 
					 | 
				
			||||||
    print("WARNING: Scons support is in the process of being deprecated on "
 | 
					 | 
				
			||||||
          "on windows platforms (including mingw). If you haven't already "
 | 
					 | 
				
			||||||
          "please try using meson for windows builds. Be sure to report any "
 | 
					 | 
				
			||||||
          "issues you run into", file=sys.stderr)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
#######################################################################
 | 
					#######################################################################
 | 
				
			||||||
# Environment setup
 | 
					# Environment setup
 | 
				
			||||||
 | 
					
 | 
				
			||||||
with open("VERSION") as f:
 | 
					 | 
				
			||||||
  mesa_version = f.read().strip()
 | 
					 | 
				
			||||||
env.Append(CPPDEFINES = [
 | 
					 | 
				
			||||||
    ('PACKAGE_VERSION', '\\"%s\\"' % mesa_version),
 | 
					 | 
				
			||||||
    ('PACKAGE_BUGREPORT', '\\"https://gitlab.freedesktop.org/mesa/mesa/issues\\"'),
 | 
					 | 
				
			||||||
])
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# Includes
 | 
					# Includes
 | 
				
			||||||
env.Prepend(CPPPATH = [
 | 
					env.Prepend(CPPPATH = [
 | 
				
			||||||
	'#/include',
 | 
						'#/include',
 | 
				
			||||||
@@ -108,18 +80,16 @@ env.Append(CPPPATH = [
 | 
				
			|||||||
	'#/src/gallium/winsys',
 | 
						'#/src/gallium/winsys',
 | 
				
			||||||
])
 | 
					])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if env['msvc']:
 | 
				
			||||||
 | 
					    env.Append(CPPPATH = ['#include/c99'])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# for debugging
 | 
					# for debugging
 | 
				
			||||||
#print env.Dump()
 | 
					#print env.Dump()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Add a check target for running tests
 | 
					 | 
				
			||||||
check = env.Alias('check')
 | 
					 | 
				
			||||||
env.AlwaysBuild(check)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#######################################################################
 | 
					#######################################################################
 | 
				
			||||||
# Invoke host SConscripts
 | 
					# Invoke host SConscripts 
 | 
				
			||||||
#
 | 
					# 
 | 
				
			||||||
# For things that are meant to be run on the native host build machine, instead
 | 
					# For things that are meant to be run on the native host build machine, instead
 | 
				
			||||||
# of the target machine.
 | 
					# of the target machine.
 | 
				
			||||||
#
 | 
					#
 | 
				
			||||||
@@ -145,6 +115,9 @@ if env['crosscompile'] and not env['embedded']:
 | 
				
			|||||||
    host_env['hostonly'] = True
 | 
					    host_env['hostonly'] = True
 | 
				
			||||||
    assert host_env['crosscompile'] == False
 | 
					    assert host_env['crosscompile'] == False
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if host_env['msvc']:
 | 
				
			||||||
 | 
					        host_env.Append(CPPPATH = ['#include/c99'])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    target_env = env
 | 
					    target_env = env
 | 
				
			||||||
    env = host_env
 | 
					    env = host_env
 | 
				
			||||||
    Export('env')
 | 
					    Export('env')
 | 
				
			||||||
@@ -180,7 +153,8 @@ try:
 | 
				
			|||||||
except ImportError:
 | 
					except ImportError:
 | 
				
			||||||
    pass
 | 
					    pass
 | 
				
			||||||
else:
 | 
					else:
 | 
				
			||||||
    aliases = sorted(default_ans.keys())
 | 
					    aliases = default_ans.keys()
 | 
				
			||||||
 | 
					    aliases.sort()
 | 
				
			||||||
    env.Help('\n')
 | 
					    env.Help('\n')
 | 
				
			||||||
    env.Help('Recognized targets:\n')
 | 
					    env.Help('Recognized targets:\n')
 | 
				
			||||||
    for alias in aliases:
 | 
					    for alias in aliases:
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										119
									
								
								acinclude.m4
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										119
									
								
								acinclude.m4
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,119 @@
 | 
				
			|||||||
 | 
					# A few convenience macros for Mesa, mostly to keep all the platform
 | 
				
			||||||
 | 
					# specifics out of configure.ac.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# MESA_PIC_FLAGS()
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# Find out whether to build PIC code using the option --enable-pic and
 | 
				
			||||||
 | 
					# the configure enable_static/enable_shared settings. If PIC is needed,
 | 
				
			||||||
 | 
					# figure out the necessary flags for the platform and compiler.
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# The platform checks have been shamelessly taken from libtool and
 | 
				
			||||||
 | 
					# stripped down to just what's needed for Mesa. See _LT_COMPILER_PIC in
 | 
				
			||||||
 | 
					# /usr/share/aclocal/libtool.m4 or
 | 
				
			||||||
 | 
					# http://git.savannah.gnu.org/gitweb/?p=libtool.git;a=blob;f=libltdl/m4/libtool.m4;hb=HEAD
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					AC_DEFUN([MESA_PIC_FLAGS],
 | 
				
			||||||
 | 
					[AC_REQUIRE([AC_PROG_CC])dnl
 | 
				
			||||||
 | 
					AC_ARG_VAR([PIC_FLAGS], [compiler flags for PIC code])
 | 
				
			||||||
 | 
					AC_ARG_ENABLE([pic],
 | 
				
			||||||
 | 
					    [AS_HELP_STRING([--disable-pic],
 | 
				
			||||||
 | 
					        [compile PIC objects @<:@default=enabled for shared builds
 | 
				
			||||||
 | 
					        on supported platforms@:>@])],
 | 
				
			||||||
 | 
					    [enable_pic="$enableval"
 | 
				
			||||||
 | 
					    test "x$enable_pic" = x && enable_pic=auto],
 | 
				
			||||||
 | 
					    [enable_pic=auto])
 | 
				
			||||||
 | 
					# disable PIC by default for static builds
 | 
				
			||||||
 | 
					if test "$enable_pic" = auto && test "$enable_static" = yes; then
 | 
				
			||||||
 | 
					    enable_pic=no
 | 
				
			||||||
 | 
					fi
 | 
				
			||||||
 | 
					# if PIC hasn't been explicitly disabled, try to figure out the flags
 | 
				
			||||||
 | 
					if test "$enable_pic" != no; then
 | 
				
			||||||
 | 
					    AC_MSG_CHECKING([for $CC option to produce PIC])
 | 
				
			||||||
 | 
					    # allow the user's flags to override
 | 
				
			||||||
 | 
					    if test "x$PIC_FLAGS" = x; then
 | 
				
			||||||
 | 
					        # see if we're using GCC
 | 
				
			||||||
 | 
					        if test "x$GCC" = xyes; then
 | 
				
			||||||
 | 
					            case "$host_os" in
 | 
				
			||||||
 | 
					            aix*|beos*|cygwin*|irix5*|irix6*|osf3*|osf4*|osf5*)
 | 
				
			||||||
 | 
					                # PIC is the default for these OSes.
 | 
				
			||||||
 | 
					                ;;
 | 
				
			||||||
 | 
					            mingw*|os2*|pw32*)
 | 
				
			||||||
 | 
					                # This hack is so that the source file can tell whether
 | 
				
			||||||
 | 
					                # it is being built for inclusion in a dll (and should
 | 
				
			||||||
 | 
					                # export symbols for example).
 | 
				
			||||||
 | 
					                PIC_FLAGS="-DDLL_EXPORT"
 | 
				
			||||||
 | 
					                ;;
 | 
				
			||||||
 | 
					            darwin*|rhapsody*)
 | 
				
			||||||
 | 
					                # PIC is the default on this platform
 | 
				
			||||||
 | 
					                # Common symbols not allowed in MH_DYLIB files
 | 
				
			||||||
 | 
					                PIC_FLAGS="-fno-common"
 | 
				
			||||||
 | 
					                ;;
 | 
				
			||||||
 | 
					            hpux*)
 | 
				
			||||||
 | 
					                # PIC is the default for IA64 HP-UX and 64-bit HP-UX,
 | 
				
			||||||
 | 
					                # but not for PA HP-UX.
 | 
				
			||||||
 | 
					                case $host_cpu in
 | 
				
			||||||
 | 
					                hppa*64*|ia64*)
 | 
				
			||||||
 | 
					                    ;;
 | 
				
			||||||
 | 
					                *)
 | 
				
			||||||
 | 
					                    PIC_FLAGS="-fPIC"
 | 
				
			||||||
 | 
					                    ;;
 | 
				
			||||||
 | 
					                esac
 | 
				
			||||||
 | 
					                ;;
 | 
				
			||||||
 | 
					            *)
 | 
				
			||||||
 | 
					                # Everyone else on GCC uses -fPIC
 | 
				
			||||||
 | 
					                PIC_FLAGS="-fPIC"
 | 
				
			||||||
 | 
					                ;;
 | 
				
			||||||
 | 
					            esac
 | 
				
			||||||
 | 
					        else # !GCC
 | 
				
			||||||
 | 
					            case "$host_os" in
 | 
				
			||||||
 | 
					            hpux9*|hpux10*|hpux11*)
 | 
				
			||||||
 | 
					                # PIC is the default for IA64 HP-UX and 64-bit HP-UX,
 | 
				
			||||||
 | 
					                # but not for PA HP-UX.
 | 
				
			||||||
 | 
					                case "$host_cpu" in
 | 
				
			||||||
 | 
					                hppa*64*|ia64*)
 | 
				
			||||||
 | 
					                    # +Z the default
 | 
				
			||||||
 | 
					                    ;;
 | 
				
			||||||
 | 
					                *)
 | 
				
			||||||
 | 
					                    PIC_FLAGS="+Z"
 | 
				
			||||||
 | 
					                    ;;
 | 
				
			||||||
 | 
					                esac
 | 
				
			||||||
 | 
					                ;;
 | 
				
			||||||
 | 
					            linux*|k*bsd*-gnu)
 | 
				
			||||||
 | 
					                case `basename "$CC"` in
 | 
				
			||||||
 | 
					                icc*|ecc*|ifort*)
 | 
				
			||||||
 | 
					                    PIC_FLAGS="-KPIC"
 | 
				
			||||||
 | 
					                    ;;
 | 
				
			||||||
 | 
					                pgcc*|pgf77*|pgf90*|pgf95*)
 | 
				
			||||||
 | 
					                    # Portland Group compilers (*not* the Pentium gcc
 | 
				
			||||||
 | 
					                    # compiler, which looks to be a dead project)
 | 
				
			||||||
 | 
					                    PIC_FLAGS="-fpic"
 | 
				
			||||||
 | 
					                    ;;
 | 
				
			||||||
 | 
					                ccc*)
 | 
				
			||||||
 | 
					                    # All Alpha code is PIC.
 | 
				
			||||||
 | 
					                    ;;
 | 
				
			||||||
 | 
					                xl*)
 | 
				
			||||||
 | 
					                    # IBM XL C 8.0/Fortran 10.1 on PPC
 | 
				
			||||||
 | 
					                    PIC_FLAGS="-qpic"
 | 
				
			||||||
 | 
					                    ;;
 | 
				
			||||||
 | 
					                *)
 | 
				
			||||||
 | 
					                    case `$CC -V 2>&1 | sed 5q` in
 | 
				
			||||||
 | 
					                    *Sun\ C*|*Sun\ F*)
 | 
				
			||||||
 | 
					                        # Sun C 5.9 or Sun Fortran
 | 
				
			||||||
 | 
					                        PIC_FLAGS="-KPIC"
 | 
				
			||||||
 | 
					                        ;;
 | 
				
			||||||
 | 
					                    esac
 | 
				
			||||||
 | 
					                esac
 | 
				
			||||||
 | 
					                ;;
 | 
				
			||||||
 | 
					            solaris*)
 | 
				
			||||||
 | 
					                PIC_FLAGS="-KPIC"
 | 
				
			||||||
 | 
					                ;;
 | 
				
			||||||
 | 
					            sunos4*)
 | 
				
			||||||
 | 
					                PIC_FLAGS="-PIC"
 | 
				
			||||||
 | 
					                ;;
 | 
				
			||||||
 | 
					            esac
 | 
				
			||||||
 | 
					        fi # GCC
 | 
				
			||||||
 | 
					    fi # PIC_FLAGS
 | 
				
			||||||
 | 
					    AC_MSG_RESULT([$PIC_FLAGS])
 | 
				
			||||||
 | 
					fi
 | 
				
			||||||
 | 
					AC_SUBST([PIC_FLAGS])
 | 
				
			||||||
 | 
					])# MESA_PIC_FLAGS
 | 
				
			||||||
							
								
								
									
										73
									
								
								appveyor.yml
									
									
									
									
									
								
							
							
						
						
									
										73
									
								
								appveyor.yml
									
									
									
									
									
								
							@@ -1,73 +0,0 @@
 | 
				
			|||||||
# http://www.appveyor.com/docs/appveyor-yml
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
# To setup AppVeyor for your own personal repositories do the following:
 | 
					 | 
				
			||||||
# - Sign up
 | 
					 | 
				
			||||||
# - Add a new project
 | 
					 | 
				
			||||||
# - Select Git and fill in the Git clone URL
 | 
					 | 
				
			||||||
# - Setup a Git hook as explained in
 | 
					 | 
				
			||||||
#   https://github.com/appveyor/webhooks#installing-git-hook
 | 
					 | 
				
			||||||
# - Check 'Settings > General > Skip branches without appveyor.yml'
 | 
					 | 
				
			||||||
# - Check 'Settings > General > Rolling builds'
 | 
					 | 
				
			||||||
# - Setup the global or project notifications to your liking
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
# Note that kicking (or restarting) a build via the web UI will not work, as it
 | 
					 | 
				
			||||||
# will fail to find appveyor.yml .  The Git hook is the most practical way to
 | 
					 | 
				
			||||||
# kick a build.
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
# See also:
 | 
					 | 
				
			||||||
# - http://help.appveyor.com/discussions/problems/2209-node-grunt-build-specify-a-project-or-solution-file-the-directory-does-not-contain-a-project-or-solution-file
 | 
					 | 
				
			||||||
# - http://help.appveyor.com/discussions/questions/1184-build-config-vs-appveyoryaml
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
version: '{build}'
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
branches:
 | 
					 | 
				
			||||||
  except:
 | 
					 | 
				
			||||||
  - /^travis.*$/
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# Don't download the full Mesa history to speed up cloning.  However the clone
 | 
					 | 
				
			||||||
# depth must not be too small, otherwise builds might fail when lots of patches
 | 
					 | 
				
			||||||
# are committed in succession, because the desired commit is not found on the
 | 
					 | 
				
			||||||
# truncated history.
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
# See also:
 | 
					 | 
				
			||||||
# - https://www.appveyor.com/blog/2014/06/04/shallow-clone-for-git-repositories
 | 
					 | 
				
			||||||
clone_depth: 100
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# https://www.appveyor.com/docs/build-cache/
 | 
					 | 
				
			||||||
cache:
 | 
					 | 
				
			||||||
- '%LOCALAPPDATA%\pip\Cache -> appveyor.yml'
 | 
					 | 
				
			||||||
- win_flex_bison-2.5.15.zip
 | 
					 | 
				
			||||||
- llvm-5.0.1-msvc2017-mtd.7z
 | 
					 | 
				
			||||||
- subprojects\packagecache -> subprojects\*.wrap
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
os: Visual Studio 2017
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
init:
 | 
					 | 
				
			||||||
# Appveyor defaults core.autocrlf to input instead of the default (true), but
 | 
					 | 
				
			||||||
# that can hide problems processing CRLF text on Windows
 | 
					 | 
				
			||||||
- git config --global core.autocrlf true
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
environment:
 | 
					 | 
				
			||||||
  WINFLEXBISON_VERSION: 2.5.15
 | 
					 | 
				
			||||||
  LLVM_ARCHIVE: llvm-5.0.1-msvc2017-mtd.7z
 | 
					 | 
				
			||||||
  matrix:
 | 
					 | 
				
			||||||
  - compiler: msvc
 | 
					 | 
				
			||||||
    buildsystem: scons
 | 
					 | 
				
			||||||
  - compiler: msvc
 | 
					 | 
				
			||||||
    buildsystem: meson
 | 
					 | 
				
			||||||
    path: C:\Python37-x64;C:\Python37-x64\Scripts;%path%
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
install:
 | 
					 | 
				
			||||||
- cmd: .appveyor\appveyor_msvc.bat install
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
build_script:
 | 
					 | 
				
			||||||
- cmd: .appveyor\appveyor_msvc.bat build_script
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
test_script:
 | 
					 | 
				
			||||||
- cmd: .appveyor\appveyor_msvc.bat test_script
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# It's possible to setup notification here, as described in
 | 
					 | 
				
			||||||
# http://www.appveyor.com/docs/notifications#appveyor-yml-configuration , but
 | 
					 | 
				
			||||||
# doing so would cause the notification settings to be replicated across all
 | 
					 | 
				
			||||||
# repos, which is most likely undesired.  So it's better to rely on the
 | 
					 | 
				
			||||||
# Appveyor global/project notification settings.
 | 
					 | 
				
			||||||
							
								
								
									
										20
									
								
								autogen.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										20
									
								
								autogen.sh
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,20 @@
 | 
				
			|||||||
 | 
					#! /bin/sh
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					srcdir=`dirname "$0"`
 | 
				
			||||||
 | 
					test -z "$srcdir" && srcdir=.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					SRCDIR=`(cd "$srcdir" && pwd)`
 | 
				
			||||||
 | 
					ORIGDIR=`pwd`
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if test "x$SRCDIR" != "x$ORIGDIR"; then
 | 
				
			||||||
 | 
						echo "Mesa cannot be built when srcdir != builddir" 1>&2
 | 
				
			||||||
 | 
						exit 1
 | 
				
			||||||
 | 
					fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					MAKEFLAGS=""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					autoreconf -v --install || exit 1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if test -z "$NOCONFIGURE"; then
 | 
				
			||||||
 | 
					    "$srcdir"/configure "$@"
 | 
				
			||||||
 | 
					fi
 | 
				
			||||||
@@ -1,14 +0,0 @@
 | 
				
			|||||||
# This is reverted shortly after landing
 | 
					 | 
				
			||||||
4432a2d14d80081d062f7939a950d65ea3a16eed
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# These were manually backported
 | 
					 | 
				
			||||||
21be5c8edd3ad156f6cbfbceb96e7939716d9f2c
 | 
					 | 
				
			||||||
4b392ced2d744fccffe95490ff57e6b41033c266
 | 
					 | 
				
			||||||
b6905438514ae4de0b7f85c861e3d811ddaadda9
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# This isn't worth the effort to backport, as it only affects build with
 | 
					 | 
				
			||||||
# asserts enable, which hopefully wont happen in a stable branch.
 | 
					 | 
				
			||||||
937b9055698be0dfdb7d2e0673a989e2ecc05912
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# this is reverted, so just don't apply
 | 
					 | 
				
			||||||
973181c06cca3fe232c3a435abde31f2fc1b81ef
 | 
					 | 
				
			||||||
@@ -1,2 +0,0 @@
 | 
				
			|||||||
[*.sh]
 | 
					 | 
				
			||||||
indent_style = tab
 | 
					 | 
				
			||||||
							
								
								
									
										8
									
								
								bin/.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								bin/.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,8 @@
 | 
				
			|||||||
 | 
					config.guess
 | 
				
			||||||
 | 
					config.sub
 | 
				
			||||||
 | 
					install-sh
 | 
				
			||||||
 | 
					/depcomp
 | 
				
			||||||
 | 
					/missing
 | 
				
			||||||
 | 
					ylwrap
 | 
				
			||||||
 | 
					compile
 | 
				
			||||||
 | 
					ar-lib
 | 
				
			||||||
@@ -1,272 +0,0 @@
 | 
				
			|||||||
#!/usr/bin/env python3
 | 
					 | 
				
			||||||
# Copyright © 2019 Intel Corporation
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# Permission is hereby granted, free of charge, to any person obtaining a copy
 | 
					 | 
				
			||||||
# of this software and associated documentation files (the "Software"), to deal
 | 
					 | 
				
			||||||
# in the Software without restriction, including without limitation the rights
 | 
					 | 
				
			||||||
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 | 
					 | 
				
			||||||
# copies of the Software, and to permit persons to whom the Software is
 | 
					 | 
				
			||||||
# furnished to do so, subject to the following conditions:
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# The above copyright notice and this permission notice shall be included in
 | 
					 | 
				
			||||||
# all copies or substantial portions of the Software.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 | 
					 | 
				
			||||||
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 | 
					 | 
				
			||||||
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 | 
					 | 
				
			||||||
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 | 
					 | 
				
			||||||
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 | 
					 | 
				
			||||||
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 | 
					 | 
				
			||||||
# SOFTWARE.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
"""Generates release notes for a given version of mesa."""
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import asyncio
 | 
					 | 
				
			||||||
import datetime
 | 
					 | 
				
			||||||
import os
 | 
					 | 
				
			||||||
import pathlib
 | 
					 | 
				
			||||||
import sys
 | 
					 | 
				
			||||||
import textwrap
 | 
					 | 
				
			||||||
import typing
 | 
					 | 
				
			||||||
import urllib.parse
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import aiohttp
 | 
					 | 
				
			||||||
from mako.template import Template
 | 
					 | 
				
			||||||
from mako import exceptions
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
CURRENT_GL_VERSION = '4.6'
 | 
					 | 
				
			||||||
CURRENT_VK_VERSION = '1.1'
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
TEMPLATE = Template(textwrap.dedent("""\
 | 
					 | 
				
			||||||
    <%!
 | 
					 | 
				
			||||||
        import html
 | 
					 | 
				
			||||||
    %>
 | 
					 | 
				
			||||||
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
 | 
					 | 
				
			||||||
    <html lang="en">
 | 
					 | 
				
			||||||
    <head>
 | 
					 | 
				
			||||||
    <meta http-equiv="content-type" content="text/html; charset=utf-8">
 | 
					 | 
				
			||||||
    <title>Mesa Release Notes</title>
 | 
					 | 
				
			||||||
    <link rel="stylesheet" type="text/css" href="../mesa.css">
 | 
					 | 
				
			||||||
    </head>
 | 
					 | 
				
			||||||
    <body>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    <div class="header">
 | 
					 | 
				
			||||||
    <h1>The Mesa 3D Graphics Library</h1>
 | 
					 | 
				
			||||||
    </div>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    <iframe src="../contents.html"></iframe>
 | 
					 | 
				
			||||||
    <div class="content">
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    <h1>Mesa ${next_version} Release Notes / ${today}</h1>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    <p>
 | 
					 | 
				
			||||||
    %if not bugfix:
 | 
					 | 
				
			||||||
        Mesa ${next_version} is a new development release. People who are concerned
 | 
					 | 
				
			||||||
        with stability and reliability should stick with a previous release or
 | 
					 | 
				
			||||||
        wait for Mesa ${version[:-1]}1.
 | 
					 | 
				
			||||||
    %else:
 | 
					 | 
				
			||||||
        Mesa ${next_version} is a bug fix release which fixes bugs found since the ${version} release.
 | 
					 | 
				
			||||||
    %endif
 | 
					 | 
				
			||||||
    </p>
 | 
					 | 
				
			||||||
    <p>
 | 
					 | 
				
			||||||
    Mesa ${next_version} implements the OpenGL ${gl_version} API, but the version reported by
 | 
					 | 
				
			||||||
    glGetString(GL_VERSION) or glGetIntegerv(GL_MAJOR_VERSION) /
 | 
					 | 
				
			||||||
    glGetIntegerv(GL_MINOR_VERSION) depends on the particular driver being used.
 | 
					 | 
				
			||||||
    Some drivers don't support all the features required in OpenGL ${gl_version}. OpenGL
 | 
					 | 
				
			||||||
    ${gl_version} is <strong>only</strong> available if requested at context creation.
 | 
					 | 
				
			||||||
    Compatibility contexts may report a lower version depending on each driver.
 | 
					 | 
				
			||||||
    </p>
 | 
					 | 
				
			||||||
    <p>
 | 
					 | 
				
			||||||
    Mesa ${next_version} implements the Vulkan ${vk_version} API, but the version reported by
 | 
					 | 
				
			||||||
    the apiVersion property of the VkPhysicalDeviceProperties struct
 | 
					 | 
				
			||||||
    depends on the particular driver being used.
 | 
					 | 
				
			||||||
    </p>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    <h2>SHA256 checksum</h2>
 | 
					 | 
				
			||||||
    <pre>
 | 
					 | 
				
			||||||
    TBD.
 | 
					 | 
				
			||||||
    </pre>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    <h2>New features</h2>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    <ul>
 | 
					 | 
				
			||||||
    %for f in features:
 | 
					 | 
				
			||||||
        <li>${html.escape(f)}</li>
 | 
					 | 
				
			||||||
    %endfor
 | 
					 | 
				
			||||||
    </ul>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    <h2>Bug fixes</h2>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    <ul>
 | 
					 | 
				
			||||||
    %for b in bugs:
 | 
					 | 
				
			||||||
        <li>${html.escape(b)}</li>
 | 
					 | 
				
			||||||
    %endfor
 | 
					 | 
				
			||||||
    </ul>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    <h2>Changes</h2>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    <ul>
 | 
					 | 
				
			||||||
    %for c, author in changes:
 | 
					 | 
				
			||||||
      %if author:
 | 
					 | 
				
			||||||
        <p>${html.escape(c)}</p>
 | 
					 | 
				
			||||||
      %else:
 | 
					 | 
				
			||||||
        <li>${html.escape(c)}</li>
 | 
					 | 
				
			||||||
      %endif
 | 
					 | 
				
			||||||
    %endfor
 | 
					 | 
				
			||||||
    </ul>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    </div>
 | 
					 | 
				
			||||||
    </body>
 | 
					 | 
				
			||||||
    </html>
 | 
					 | 
				
			||||||
    """))
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
async def gather_commits(version: str) -> str:
 | 
					 | 
				
			||||||
    p = await asyncio.create_subprocess_exec(
 | 
					 | 
				
			||||||
        'git', 'log', f'mesa-{version}..', '--grep', r'Closes: \(https\|#\).*',
 | 
					 | 
				
			||||||
        stdout=asyncio.subprocess.PIPE)
 | 
					 | 
				
			||||||
    out, _ = await p.communicate()
 | 
					 | 
				
			||||||
    assert p.returncode == 0, f"git log didn't work: {version}"
 | 
					 | 
				
			||||||
    return out.decode().strip()
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
async def gather_bugs(version: str) -> typing.List[str]:
 | 
					 | 
				
			||||||
    commits = await gather_commits(version)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    issues: typing.List[str] = []
 | 
					 | 
				
			||||||
    for commit in commits.split('\n'):
 | 
					 | 
				
			||||||
        sha, message = commit.split(maxsplit=1)
 | 
					 | 
				
			||||||
        p = await asyncio.create_subprocess_exec(
 | 
					 | 
				
			||||||
            'git', 'log', '--max-count', '1', r'--format=%b', sha,
 | 
					 | 
				
			||||||
            stdout=asyncio.subprocess.PIPE)
 | 
					 | 
				
			||||||
        _out, _ = await p.communicate()
 | 
					 | 
				
			||||||
        out = _out.decode().split('\n')
 | 
					 | 
				
			||||||
        for line in reversed(out):
 | 
					 | 
				
			||||||
            if line.startswith('Closes:'):
 | 
					 | 
				
			||||||
                bug = line.lstrip('Closes:').strip()
 | 
					 | 
				
			||||||
                break
 | 
					 | 
				
			||||||
        else:
 | 
					 | 
				
			||||||
            raise Exception('No closes found?')
 | 
					 | 
				
			||||||
        if bug.startswith('h'):
 | 
					 | 
				
			||||||
            # This means we have a bug in the form "Closes: https://..."
 | 
					 | 
				
			||||||
            issues.append(os.path.basename(urllib.parse.urlparse(bug).path))
 | 
					 | 
				
			||||||
        else:
 | 
					 | 
				
			||||||
            issues.append(bug.lstrip('#'))
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    loop = asyncio.get_event_loop()
 | 
					 | 
				
			||||||
    async with aiohttp.ClientSession(loop=loop) as session:
 | 
					 | 
				
			||||||
        results = await asyncio.gather(*[get_bug(session, i) for i in issues])
 | 
					 | 
				
			||||||
    typing.cast(typing.Tuple[str, ...], results)
 | 
					 | 
				
			||||||
    return list(results)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
async def get_bug(session: aiohttp.ClientSession, bug_id: str) -> str:
 | 
					 | 
				
			||||||
    """Query gitlab to get the name of the issue that was closed."""
 | 
					 | 
				
			||||||
    # Mesa's gitlab id is 176,
 | 
					 | 
				
			||||||
    url = 'https://gitlab.freedesktop.org/api/v4/projects/176/issues'
 | 
					 | 
				
			||||||
    params = {'iids[]': bug_id}
 | 
					 | 
				
			||||||
    async with session.get(url, params=params) as response:
 | 
					 | 
				
			||||||
        content = await response.json()
 | 
					 | 
				
			||||||
    return content[0]['title']
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
async def get_shortlog(version: str) -> str:
 | 
					 | 
				
			||||||
    """Call git shortlog."""
 | 
					 | 
				
			||||||
    p = await asyncio.create_subprocess_exec('git', 'shortlog', f'mesa-{version}..',
 | 
					 | 
				
			||||||
                                             stdout=asyncio.subprocess.PIPE)
 | 
					 | 
				
			||||||
    out, _ = await p.communicate()
 | 
					 | 
				
			||||||
    assert p.returncode == 0, 'error getting shortlog'
 | 
					 | 
				
			||||||
    assert out is not None, 'just for mypy'
 | 
					 | 
				
			||||||
    return out.decode()
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
def walk_shortlog(log: str) -> typing.Generator[typing.Tuple[str, bool], None, None]:
 | 
					 | 
				
			||||||
    for l in log.split('\n'):
 | 
					 | 
				
			||||||
        if l.startswith(' '): # this means we have a patch description
 | 
					 | 
				
			||||||
            yield l, False
 | 
					 | 
				
			||||||
        else:
 | 
					 | 
				
			||||||
            yield l, True
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
def calculate_next_version(version: str, is_point: bool) -> str:
 | 
					 | 
				
			||||||
    """Calculate the version about to be released."""
 | 
					 | 
				
			||||||
    if '-' in version:
 | 
					 | 
				
			||||||
        version = version.split('-')[0]
 | 
					 | 
				
			||||||
    if is_point:
 | 
					 | 
				
			||||||
        base = version.split('.')
 | 
					 | 
				
			||||||
        base[2] = str(int(base[2]) + 1)
 | 
					 | 
				
			||||||
        return '.'.join(base)
 | 
					 | 
				
			||||||
    return version
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
def calculate_previous_version(version: str, is_point: bool) -> str:
 | 
					 | 
				
			||||||
    """Calculate the previous version to compare to.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    In the case of -rc to final that verison is the previous .0 release,
 | 
					 | 
				
			||||||
    (19.3.0 in the case of 20.0.0, for example). for point releases that is
 | 
					 | 
				
			||||||
    the last point release. This value will be the same as the input value
 | 
					 | 
				
			||||||
    for a point release, but different for a major release.
 | 
					 | 
				
			||||||
    """
 | 
					 | 
				
			||||||
    if '-' in version:
 | 
					 | 
				
			||||||
        version = version.split('-')[0]
 | 
					 | 
				
			||||||
    if is_point:
 | 
					 | 
				
			||||||
        return version
 | 
					 | 
				
			||||||
    base = version.split('.')
 | 
					 | 
				
			||||||
    if base[1] == '0':
 | 
					 | 
				
			||||||
        base[0] = str(int(base[0]) - 1)
 | 
					 | 
				
			||||||
        base[1] = '3'
 | 
					 | 
				
			||||||
    else:
 | 
					 | 
				
			||||||
        base[1] = str(int(base[1]) - 1)
 | 
					 | 
				
			||||||
    return '.'.join(base)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
def get_features(is_point_release: bool) -> typing.Generator[str, None, None]:
 | 
					 | 
				
			||||||
    p = pathlib.Path(__file__).parent.parent / 'docs' / 'relnotes' / 'new_features.txt'
 | 
					 | 
				
			||||||
    if p.exists():
 | 
					 | 
				
			||||||
        if is_point_release:
 | 
					 | 
				
			||||||
            print("WARNING: new features being introduced in a point release", file=sys.stderr)
 | 
					 | 
				
			||||||
        with p.open('rt') as f:
 | 
					 | 
				
			||||||
            for line in f:
 | 
					 | 
				
			||||||
                yield line
 | 
					 | 
				
			||||||
    else:
 | 
					 | 
				
			||||||
        yield "None"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
async def main() -> None:
 | 
					 | 
				
			||||||
    v = pathlib.Path(__file__).parent.parent / 'VERSION'
 | 
					 | 
				
			||||||
    with v.open('rt') as f:
 | 
					 | 
				
			||||||
        raw_version = f.read().strip()
 | 
					 | 
				
			||||||
    is_point_release = '-rc' not in raw_version
 | 
					 | 
				
			||||||
    assert '-devel' not in raw_version, 'Do not run this script on -devel'
 | 
					 | 
				
			||||||
    version = raw_version.split('-')[0]
 | 
					 | 
				
			||||||
    previous_version = calculate_previous_version(version, is_point_release)
 | 
					 | 
				
			||||||
    next_version = calculate_next_version(version, is_point_release)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    shortlog, bugs = await asyncio.gather(
 | 
					 | 
				
			||||||
        get_shortlog(previous_version),
 | 
					 | 
				
			||||||
        gather_bugs(previous_version),
 | 
					 | 
				
			||||||
    )
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    final = pathlib.Path(__file__).parent.parent / 'docs' / 'relnotes' / f'{next_version}.html'
 | 
					 | 
				
			||||||
    with final.open('wt') as f:
 | 
					 | 
				
			||||||
        try:
 | 
					 | 
				
			||||||
            f.write(TEMPLATE.render(
 | 
					 | 
				
			||||||
                bugfix=is_point_release,
 | 
					 | 
				
			||||||
                bugs=bugs,
 | 
					 | 
				
			||||||
                changes=walk_shortlog(shortlog),
 | 
					 | 
				
			||||||
                features=get_features(is_point_release),
 | 
					 | 
				
			||||||
                gl_version=CURRENT_GL_VERSION,
 | 
					 | 
				
			||||||
                next_version=next_version,
 | 
					 | 
				
			||||||
                today=datetime.date.today(),
 | 
					 | 
				
			||||||
                version=previous_version,
 | 
					 | 
				
			||||||
                vk_version=CURRENT_VK_VERSION,
 | 
					 | 
				
			||||||
            ))
 | 
					 | 
				
			||||||
        except:
 | 
					 | 
				
			||||||
            print(exceptions.text_error_template().render())
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
if __name__ == "__main__":
 | 
					 | 
				
			||||||
    loop = asyncio.get_event_loop()
 | 
					 | 
				
			||||||
    loop.run_until_complete(main())
 | 
					 | 
				
			||||||
@@ -1,62 +0,0 @@
 | 
				
			|||||||
# Copyright © 2019 Intel Corporation
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# Permission is hereby granted, free of charge, to any person obtaining a copy
 | 
					 | 
				
			||||||
# of this software and associated documentation files (the "Software"), to deal
 | 
					 | 
				
			||||||
# in the Software without restriction, including without limitation the rights
 | 
					 | 
				
			||||||
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 | 
					 | 
				
			||||||
# copies of the Software, and to permit persons to whom the Software is
 | 
					 | 
				
			||||||
# furnished to do so, subject to the following conditions:
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# The above copyright notice and this permission notice shall be included in
 | 
					 | 
				
			||||||
# all copies or substantial portions of the Software.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 | 
					 | 
				
			||||||
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 | 
					 | 
				
			||||||
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 | 
					 | 
				
			||||||
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 | 
					 | 
				
			||||||
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 | 
					 | 
				
			||||||
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 | 
					 | 
				
			||||||
# SOFTWARE.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
from unittest import mock
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import pytest
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
from .gen_release_notes import *
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
@pytest.mark.parametrize(
 | 
					 | 
				
			||||||
    'current, is_point, expected',
 | 
					 | 
				
			||||||
    [
 | 
					 | 
				
			||||||
        ('19.2.0', True, '19.2.1'),
 | 
					 | 
				
			||||||
        ('19.3.6', True, '19.3.7'),
 | 
					 | 
				
			||||||
        ('20.0.0-rc4', False, '20.0.0'),
 | 
					 | 
				
			||||||
    ])
 | 
					 | 
				
			||||||
def test_next_version(current: str, is_point: bool, expected: str) -> None:
 | 
					 | 
				
			||||||
    assert calculate_next_version(current, is_point) == expected
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
@pytest.mark.parametrize(
 | 
					 | 
				
			||||||
    'current, is_point, expected',
 | 
					 | 
				
			||||||
    [
 | 
					 | 
				
			||||||
        ('19.3.6', True, '19.3.6'),
 | 
					 | 
				
			||||||
        ('20.0.0-rc4', False, '19.3.0'),
 | 
					 | 
				
			||||||
    ])
 | 
					 | 
				
			||||||
def test_previous_version(current: str, is_point: bool, expected: str) -> None:
 | 
					 | 
				
			||||||
    assert calculate_previous_version(current, is_point) == expected
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
@pytest.mark.asyncio
 | 
					 | 
				
			||||||
async def test_get_shortlog():
 | 
					 | 
				
			||||||
    # Certainly not perfect, but it's something
 | 
					 | 
				
			||||||
    version = '19.2.0'
 | 
					 | 
				
			||||||
    out = await get_shortlog(version)
 | 
					 | 
				
			||||||
    assert out
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
@pytest.mark.asyncio
 | 
					 | 
				
			||||||
async def test_gather_commits():
 | 
					 | 
				
			||||||
    # Certainly not perfect, but it's something
 | 
					 | 
				
			||||||
    version = '19.2.0'
 | 
					 | 
				
			||||||
    out = await gather_commits(version)
 | 
					 | 
				
			||||||
    assert out
 | 
					 | 
				
			||||||
@@ -1,45 +0,0 @@
 | 
				
			|||||||
#!/bin/sh
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# Script for generating a list of candidates which fix commits that have been
 | 
					 | 
				
			||||||
# previously cherry-picked to a stable branch.
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
# Usage examples:
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
# $ bin/get-extra-pick-list.sh
 | 
					 | 
				
			||||||
# $ bin/get-extra-pick-list.sh > picklist
 | 
					 | 
				
			||||||
# $ bin/get-extra-pick-list.sh | tee picklist
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# Use the last branchpoint as our limit for the search
 | 
					 | 
				
			||||||
latest_branchpoint=`git merge-base origin/master HEAD`
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# Grep for commits with "cherry picked from commit" in the commit message.
 | 
					 | 
				
			||||||
git log --reverse --grep="cherry picked from commit" $latest_branchpoint..HEAD |\
 | 
					 | 
				
			||||||
	grep "cherry picked from commit" |\
 | 
					 | 
				
			||||||
	sed -e 's/^[[:space:]]*(cherry picked from commit[[:space:]]*//' -e 's/)//'  > already_picked
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# For each cherry-picked commit...
 | 
					 | 
				
			||||||
cat already_picked | cut -c -8 |\
 | 
					 | 
				
			||||||
while read sha
 | 
					 | 
				
			||||||
do
 | 
					 | 
				
			||||||
	# ... check if it's referenced (fixed by another) patch
 | 
					 | 
				
			||||||
	git log -n1 --pretty=oneline --grep=$sha $latest_branchpoint..origin/master |\
 | 
					 | 
				
			||||||
		cut -c -8 |\
 | 
					 | 
				
			||||||
	while read candidate
 | 
					 | 
				
			||||||
	do
 | 
					 | 
				
			||||||
		# And flag up if it hasn't landed in branch yet.
 | 
					 | 
				
			||||||
		if grep -q ^$candidate already_picked ; then
 | 
					 | 
				
			||||||
			continue
 | 
					 | 
				
			||||||
		fi
 | 
					 | 
				
			||||||
		# Or if it isn't in the ignore list.
 | 
					 | 
				
			||||||
		if [ -f bin/.cherry-ignore ] ; then
 | 
					 | 
				
			||||||
			if grep -q ^$candidate bin/.cherry-ignore ; then
 | 
					 | 
				
			||||||
				continue
 | 
					 | 
				
			||||||
			fi
 | 
					 | 
				
			||||||
		fi
 | 
					 | 
				
			||||||
		printf "Commit \"%s\" references %s\n" \
 | 
					 | 
				
			||||||
		       "`git log -n1 --pretty=oneline $candidate`" \
 | 
					 | 
				
			||||||
		       "$sha"
 | 
					 | 
				
			||||||
	done
 | 
					 | 
				
			||||||
done
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
rm -f already_picked
 | 
					 | 
				
			||||||
@@ -1,150 +0,0 @@
 | 
				
			|||||||
#!/bin/sh
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# Script for generating a list of candidates for cherry-picking to a stable branch
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
# Usage examples:
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
# $ bin/get-pick-list.sh
 | 
					 | 
				
			||||||
# $ bin/get-pick-list.sh > picklist
 | 
					 | 
				
			||||||
# $ bin/get-pick-list.sh | tee picklist
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
# The output is as follows:
 | 
					 | 
				
			||||||
# [nomination_type] commit_sha commit summary
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
is_stable_nomination()
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	git show --pretty=medium --summary "$1" | grep -q -i -o "CC:.*mesa-stable"
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
is_typod_nomination()
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	git show --pretty=medium --summary "$1" | grep -q -i -o "CC:.*mesa-dev"
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
fixes=
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# Helper to handle various mistypos of the fixes tag.
 | 
					 | 
				
			||||||
# The tag string itself is passed as argument and normalised within.
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
# Resulting string in the global variable "fixes" and contains entries
 | 
					 | 
				
			||||||
# in the form "fixes:$sha"
 | 
					 | 
				
			||||||
is_sha_nomination()
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	fixes=`git show --pretty=medium -s $1 | tr -d "\n" | \
 | 
					 | 
				
			||||||
		sed -e 's/'"$2"'/\nfixes:/Ig' | \
 | 
					 | 
				
			||||||
		grep -Eo 'fixes:[a-f0-9]{4,40}'`
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	fixes_count=`echo "$fixes" | grep "fixes:" | wc -l`
 | 
					 | 
				
			||||||
	if test $fixes_count -eq 0; then
 | 
					 | 
				
			||||||
		return 1
 | 
					 | 
				
			||||||
	fi
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	# Throw a warning for each invalid sha
 | 
					 | 
				
			||||||
	while test $fixes_count -gt 0; do
 | 
					 | 
				
			||||||
		# Treat only the current line
 | 
					 | 
				
			||||||
		id=`echo "$fixes" | tail -n $fixes_count | head -n 1 | cut -d : -f 2`
 | 
					 | 
				
			||||||
		fixes_count=$(($fixes_count-1))
 | 
					 | 
				
			||||||
		if ! git show $id >/dev/null 2>&1; then
 | 
					 | 
				
			||||||
			echo WARNING: Commit $1 lists invalid sha $id
 | 
					 | 
				
			||||||
		fi
 | 
					 | 
				
			||||||
	done
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	return 0
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# Checks if at least one of offending commits, listed in the global
 | 
					 | 
				
			||||||
# "fixes", is in branch.
 | 
					 | 
				
			||||||
sha_in_range()
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	fixes_count=`echo "$fixes" | grep "fixes:" | wc -l`
 | 
					 | 
				
			||||||
	while test $fixes_count -gt 0; do
 | 
					 | 
				
			||||||
		# Treat only the current line
 | 
					 | 
				
			||||||
		id=`echo "$fixes" | tail -n $fixes_count | head -n 1 | cut -d : -f 2`
 | 
					 | 
				
			||||||
		fixes_count=$(($fixes_count-1))
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		# Be that cherry-picked ...
 | 
					 | 
				
			||||||
		# ... or landed before the branchpoint.
 | 
					 | 
				
			||||||
		if grep -q ^$id already_picked ||
 | 
					 | 
				
			||||||
		   grep -q ^$id already_landed ; then
 | 
					 | 
				
			||||||
			return 0
 | 
					 | 
				
			||||||
		fi
 | 
					 | 
				
			||||||
	done
 | 
					 | 
				
			||||||
	return 1
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
is_fixes_nomination()
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	is_sha_nomination "$1" "fixes:[[:space:]]*"
 | 
					 | 
				
			||||||
	if test $? -eq 0; then
 | 
					 | 
				
			||||||
		return 0
 | 
					 | 
				
			||||||
	fi
 | 
					 | 
				
			||||||
	is_sha_nomination "$1" "fixes[[:space:]]\+"
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
is_brokenby_nomination()
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	is_sha_nomination "$1" "broken by"
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
is_revert_nomination()
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	is_sha_nomination "$1" "This reverts commit "
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# Use the last branchpoint as our limit for the search
 | 
					 | 
				
			||||||
latest_branchpoint=`git merge-base upstream/master HEAD`
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# List all the commits between day 1 and the branch point...
 | 
					 | 
				
			||||||
git log --reverse --pretty=%H $latest_branchpoint > already_landed
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# ... and the ones cherry-picked.
 | 
					 | 
				
			||||||
git log --reverse --pretty=medium --grep="cherry picked from commit" $latest_branchpoint..HEAD |\
 | 
					 | 
				
			||||||
	grep "cherry picked from commit" |\
 | 
					 | 
				
			||||||
	sed -e 's/^[[:space:]]*(cherry picked from commit[[:space:]]*//' -e 's/)//' > already_picked
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# Grep for potential candidates
 | 
					 | 
				
			||||||
git log --reverse --pretty=%H -i --grep='^CC:.*mesa-stable\|^CC:.*mesa-dev\|\<fixes\>\|\<broken by\>\|This reverts commit' $latest_branchpoint..upstream/master |\
 | 
					 | 
				
			||||||
while read sha
 | 
					 | 
				
			||||||
do
 | 
					 | 
				
			||||||
	# Check to see whether the patch is on the ignore list.
 | 
					 | 
				
			||||||
	if test -f bin/.cherry-ignore; then
 | 
					 | 
				
			||||||
		if grep -q ^$sha bin/.cherry-ignore ; then
 | 
					 | 
				
			||||||
			continue
 | 
					 | 
				
			||||||
		fi
 | 
					 | 
				
			||||||
	fi
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	# Check to see if it has already been picked over.
 | 
					 | 
				
			||||||
	if grep -q ^$sha already_picked ; then
 | 
					 | 
				
			||||||
		continue
 | 
					 | 
				
			||||||
	fi
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	if is_fixes_nomination "$sha"; then
 | 
					 | 
				
			||||||
		tag=fixes
 | 
					 | 
				
			||||||
	elif is_brokenby_nomination "$sha"; then
 | 
					 | 
				
			||||||
		tag=brokenby
 | 
					 | 
				
			||||||
	elif is_revert_nomination "$sha"; then
 | 
					 | 
				
			||||||
		tag=revert
 | 
					 | 
				
			||||||
	elif is_stable_nomination "$sha"; then
 | 
					 | 
				
			||||||
		tag=stable
 | 
					 | 
				
			||||||
	elif is_typod_nomination "$sha"; then
 | 
					 | 
				
			||||||
		tag=typod
 | 
					 | 
				
			||||||
	else
 | 
					 | 
				
			||||||
		continue
 | 
					 | 
				
			||||||
	fi
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	case "$tag" in
 | 
					 | 
				
			||||||
	fixes | brokenby | revert )
 | 
					 | 
				
			||||||
		if ! sha_in_range; then
 | 
					 | 
				
			||||||
			continue
 | 
					 | 
				
			||||||
		fi
 | 
					 | 
				
			||||||
		;;
 | 
					 | 
				
			||||||
	* )
 | 
					 | 
				
			||||||
		;;
 | 
					 | 
				
			||||||
	esac
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	printf "[ %8s ] " "$tag"
 | 
					 | 
				
			||||||
	git --no-pager show --no-patch --pretty=oneline $sha
 | 
					 | 
				
			||||||
done
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
rm -f already_picked
 | 
					 | 
				
			||||||
rm -f already_landed
 | 
					 | 
				
			||||||
@@ -1,50 +0,0 @@
 | 
				
			|||||||
"""
 | 
					 | 
				
			||||||
Generate the contents of the git_sha1.h file.
 | 
					 | 
				
			||||||
The output of this script goes to stdout.
 | 
					 | 
				
			||||||
"""
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import argparse
 | 
					 | 
				
			||||||
import os
 | 
					 | 
				
			||||||
import os.path
 | 
					 | 
				
			||||||
import subprocess
 | 
					 | 
				
			||||||
import sys
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
def get_git_sha1():
 | 
					 | 
				
			||||||
    """Try to get the git SHA1 with git rev-parse."""
 | 
					 | 
				
			||||||
    git_dir = os.path.join(os.path.dirname(sys.argv[0]), '..', '.git')
 | 
					 | 
				
			||||||
    try:
 | 
					 | 
				
			||||||
        git_sha1 = subprocess.check_output([
 | 
					 | 
				
			||||||
            'git',
 | 
					 | 
				
			||||||
            '--git-dir=' + git_dir,
 | 
					 | 
				
			||||||
            'rev-parse',
 | 
					 | 
				
			||||||
            'HEAD',
 | 
					 | 
				
			||||||
        ], stderr=open(os.devnull, 'w')).decode("ascii")
 | 
					 | 
				
			||||||
    except:
 | 
					 | 
				
			||||||
        # don't print anything if it fails
 | 
					 | 
				
			||||||
        git_sha1 = ''
 | 
					 | 
				
			||||||
    return git_sha1
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
def write_if_different(contents):
 | 
					 | 
				
			||||||
    """
 | 
					 | 
				
			||||||
    Avoid touching the output file if it doesn't need modifications
 | 
					 | 
				
			||||||
    Useful to avoid triggering rebuilds when nothing has changed.
 | 
					 | 
				
			||||||
    """
 | 
					 | 
				
			||||||
    if os.path.isfile(args.output):
 | 
					 | 
				
			||||||
        with open(args.output, 'r') as file:
 | 
					 | 
				
			||||||
            if file.read() == contents:
 | 
					 | 
				
			||||||
                return
 | 
					 | 
				
			||||||
    with open(args.output, 'w') as file:
 | 
					 | 
				
			||||||
        file.write(contents)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
parser = argparse.ArgumentParser()
 | 
					 | 
				
			||||||
parser.add_argument('--output', help='File to write the #define in',
 | 
					 | 
				
			||||||
                    required=True)
 | 
					 | 
				
			||||||
args = parser.parse_args()
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
git_sha1 = os.environ.get('MESA_GIT_SHA1_OVERRIDE', get_git_sha1())[:10]
 | 
					 | 
				
			||||||
if git_sha1:
 | 
					 | 
				
			||||||
    write_if_different('#define MESA_GIT_SHA1 " (git-' + git_sha1 + ')"')
 | 
					 | 
				
			||||||
else:
 | 
					 | 
				
			||||||
    write_if_different('#define MESA_GIT_SHA1 ""')
 | 
					 | 
				
			||||||
@@ -1,83 +0,0 @@
 | 
				
			|||||||
# encoding=utf-8
 | 
					 | 
				
			||||||
# Copyright © 2017-2018 Intel Corporation
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# Permission is hereby granted, free of charge, to any person obtaining a copy
 | 
					 | 
				
			||||||
# of this software and associated documentation files (the "Software"), to deal
 | 
					 | 
				
			||||||
# in the Software without restriction, including without limitation the rights
 | 
					 | 
				
			||||||
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 | 
					 | 
				
			||||||
# copies of the Software, and to permit persons to whom the Software is
 | 
					 | 
				
			||||||
# furnished to do so, subject to the following conditions:
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# The above copyright notice and this permission notice shall be included in
 | 
					 | 
				
			||||||
# all copies or substantial portions of the Software.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 | 
					 | 
				
			||||||
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 | 
					 | 
				
			||||||
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 | 
					 | 
				
			||||||
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 | 
					 | 
				
			||||||
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 | 
					 | 
				
			||||||
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 | 
					 | 
				
			||||||
# SOFTWARE.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
"""Script to install megadriver symlinks for meson."""
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
from __future__ import print_function
 | 
					 | 
				
			||||||
import argparse
 | 
					 | 
				
			||||||
import os
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
def main():
 | 
					 | 
				
			||||||
    parser = argparse.ArgumentParser()
 | 
					 | 
				
			||||||
    parser.add_argument('megadriver')
 | 
					 | 
				
			||||||
    parser.add_argument('libdir')
 | 
					 | 
				
			||||||
    parser.add_argument('drivers', nargs='+')
 | 
					 | 
				
			||||||
    args = parser.parse_args()
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    if os.path.isabs(args.libdir):
 | 
					 | 
				
			||||||
        destdir = os.environ.get('DESTDIR')
 | 
					 | 
				
			||||||
        if destdir:
 | 
					 | 
				
			||||||
            to = os.path.join(destdir, args.libdir[1:])
 | 
					 | 
				
			||||||
        else:
 | 
					 | 
				
			||||||
            to = args.libdir
 | 
					 | 
				
			||||||
    else:
 | 
					 | 
				
			||||||
        to = os.path.join(os.environ['MESON_INSTALL_DESTDIR_PREFIX'], args.libdir)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    master = os.path.join(to, os.path.basename(args.megadriver))
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    if not os.path.exists(to):
 | 
					 | 
				
			||||||
        if os.path.lexists(to):
 | 
					 | 
				
			||||||
            os.unlink(to)
 | 
					 | 
				
			||||||
        os.makedirs(to)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    for driver in args.drivers:
 | 
					 | 
				
			||||||
        abs_driver = os.path.join(to, driver)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        if os.path.lexists(abs_driver):
 | 
					 | 
				
			||||||
            os.unlink(abs_driver)
 | 
					 | 
				
			||||||
        print('installing {} to {}'.format(args.megadriver, abs_driver))
 | 
					 | 
				
			||||||
        os.link(master, abs_driver)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        try:
 | 
					 | 
				
			||||||
            ret = os.getcwd()
 | 
					 | 
				
			||||||
            os.chdir(to)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            name, ext = os.path.splitext(driver)
 | 
					 | 
				
			||||||
            while ext != '.so':
 | 
					 | 
				
			||||||
                if os.path.lexists(name):
 | 
					 | 
				
			||||||
                    os.unlink(name)
 | 
					 | 
				
			||||||
                os.symlink(driver, name)
 | 
					 | 
				
			||||||
                name, ext = os.path.splitext(name)
 | 
					 | 
				
			||||||
        finally:
 | 
					 | 
				
			||||||
            os.chdir(ret)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    # Remove meson-created master .so and symlinks
 | 
					 | 
				
			||||||
    os.unlink(master)
 | 
					 | 
				
			||||||
    name, ext = os.path.splitext(master)
 | 
					 | 
				
			||||||
    while ext != '.so':
 | 
					 | 
				
			||||||
        if os.path.lexists(name):
 | 
					 | 
				
			||||||
            os.unlink(name)
 | 
					 | 
				
			||||||
        name, ext = os.path.splitext(name)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
if __name__ == '__main__':
 | 
					 | 
				
			||||||
    main()
 | 
					 | 
				
			||||||
							
								
								
									
										74
									
								
								bin/installmesa
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										74
									
								
								bin/installmesa
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,74 @@
 | 
				
			|||||||
 | 
					#!/bin/sh
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# Simple shell script for installing Mesa's header and library files.
 | 
				
			||||||
 | 
					# If the copy commands below don't work on a particular system (i.e. the
 | 
				
			||||||
 | 
					# -f or -d flags), we may need to branch on `uname` to do the right thing.
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					TOP=.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					INCLUDE_DIR="/usr/local/include"
 | 
				
			||||||
 | 
					LIB_DIR="/usr/local/lib"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if [ "x$#" = "x0" ] ; then
 | 
				
			||||||
 | 
					echo
 | 
				
			||||||
 | 
					echo "***** Mesa installation - You may need root privileges to do this *****"
 | 
				
			||||||
 | 
					echo
 | 
				
			||||||
 | 
					echo "Default directory for header files is:" ${INCLUDE_DIR}
 | 
				
			||||||
 | 
					echo "Enter new directory or press <Enter> to accept this default."
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					read INPUT
 | 
				
			||||||
 | 
					if [ "x${INPUT}" != "x" ] ; then
 | 
				
			||||||
 | 
						INCLUDE_DIR=${INPUT}
 | 
				
			||||||
 | 
					fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					echo
 | 
				
			||||||
 | 
					echo "Default directory for library files is:" ${LIB_DIR}
 | 
				
			||||||
 | 
					echo "Enter new directory or press <Enter> to accept this default."
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					read INPUT
 | 
				
			||||||
 | 
					if [ "x${INPUT}" != "x" ] ; then
 | 
				
			||||||
 | 
						LIB_DIR=${INPUT}
 | 
				
			||||||
 | 
					fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					echo
 | 
				
			||||||
 | 
					echo "About to install Mesa header files (GL/*.h) in: " ${INCLUDE_DIR}/GL
 | 
				
			||||||
 | 
					echo "and Mesa library files (libGL.*, etc) in: " ${LIB_DIR}
 | 
				
			||||||
 | 
					echo "Press <Enter> to continue, or <ctrl>-C to abort."
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					read INPUT
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					else
 | 
				
			||||||
 | 
					INCLUDE_DIR=$1/include
 | 
				
			||||||
 | 
					LIB_DIR=$1/lib
 | 
				
			||||||
 | 
					fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# flags:
 | 
				
			||||||
 | 
					#  -f = force
 | 
				
			||||||
 | 
					#  -d = preserve symlinks (does not work on BSD)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if [ `uname` = "FreeBSD" ] ; then
 | 
				
			||||||
 | 
						CP_FLAGS="-f"
 | 
				
			||||||
 | 
					elif [ `uname` = "Darwin" ] ; then
 | 
				
			||||||
 | 
						CP_FLAGS="-f"
 | 
				
			||||||
 | 
					elif [ `uname` = "AIX" ] ; then
 | 
				
			||||||
 | 
						CP_FLAGS="-fh"
 | 
				
			||||||
 | 
					else
 | 
				
			||||||
 | 
						CP_FLAGS="-fd"
 | 
				
			||||||
 | 
					fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					set -v
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					mkdir -p ${INCLUDE_DIR}
 | 
				
			||||||
 | 
					mkdir -p ${INCLUDE_DIR}/GL
 | 
				
			||||||
 | 
					# NOT YET: mkdir -p ${INCLUDE_DIR}/GLES
 | 
				
			||||||
 | 
					mkdir -p ${LIB_DIR}
 | 
				
			||||||
 | 
					cp -f ${TOP}/include/GL/*.h ${INCLUDE_DIR}/GL
 | 
				
			||||||
 | 
					cp -f ${TOP}/src/glw/*.h ${INCLUDE_DIR}/GL
 | 
				
			||||||
 | 
					# NOT YET: cp -f ${TOP}/include/GLES/*.h ${INCLUDE_DIR}/GLES
 | 
				
			||||||
 | 
					cp ${CP_FLAGS} ${TOP}/lib*/lib* ${LIB_DIR}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					echo "Done."
 | 
				
			||||||
@@ -1,88 +0,0 @@
 | 
				
			|||||||
#!/usr/bin/env python3
 | 
					 | 
				
			||||||
# Copyright © 2019 Intel Corporation
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# Permission is hereby granted, free of charge, to any person obtaining a copy
 | 
					 | 
				
			||||||
# of this software and associated documentation files (the "Software"), to deal
 | 
					 | 
				
			||||||
# in the Software without restriction, including without limitation the rights
 | 
					 | 
				
			||||||
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 | 
					 | 
				
			||||||
# copies of the Software, and to permit persons to whom the Software is
 | 
					 | 
				
			||||||
# furnished to do so, subject to the following conditions:
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# The above copyright notice and this permission notice shall be included in
 | 
					 | 
				
			||||||
# all copies or substantial portions of the Software.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 | 
					 | 
				
			||||||
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 | 
					 | 
				
			||||||
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 | 
					 | 
				
			||||||
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 | 
					 | 
				
			||||||
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 | 
					 | 
				
			||||||
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 | 
					 | 
				
			||||||
# SOFTWARE.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
"""This script reads a meson build directory and gives back the command line it
 | 
					 | 
				
			||||||
was configured with.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
This only works for meson 0.49.0 and newer.
 | 
					 | 
				
			||||||
"""
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import argparse
 | 
					 | 
				
			||||||
import ast
 | 
					 | 
				
			||||||
import configparser
 | 
					 | 
				
			||||||
import pathlib
 | 
					 | 
				
			||||||
import sys
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
def parse_args() -> argparse.Namespace:
 | 
					 | 
				
			||||||
    """Parse arguments."""
 | 
					 | 
				
			||||||
    parser = argparse.ArgumentParser()
 | 
					 | 
				
			||||||
    parser.add_argument(
 | 
					 | 
				
			||||||
        'build_dir',
 | 
					 | 
				
			||||||
        help='Path the meson build directory')
 | 
					 | 
				
			||||||
    args = parser.parse_args()
 | 
					 | 
				
			||||||
    return args
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
def load_config(path: pathlib.Path) -> configparser.ConfigParser:
 | 
					 | 
				
			||||||
    """Load config file."""
 | 
					 | 
				
			||||||
    conf = configparser.ConfigParser()
 | 
					 | 
				
			||||||
    with path.open() as f:
 | 
					 | 
				
			||||||
        conf.read_file(f)
 | 
					 | 
				
			||||||
    return conf
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
def build_cmd(conf: configparser.ConfigParser) -> str:
 | 
					 | 
				
			||||||
    """Rebuild the command line."""
 | 
					 | 
				
			||||||
    args = []
 | 
					 | 
				
			||||||
    for k, v in conf['options'].items():
 | 
					 | 
				
			||||||
        if ' ' in v:
 | 
					 | 
				
			||||||
            args.append(f'-D{k}="{v}"')
 | 
					 | 
				
			||||||
        else:
 | 
					 | 
				
			||||||
            args.append(f'-D{k}={v}')
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    cf = conf['properties'].get('cross_file')
 | 
					 | 
				
			||||||
    if cf:
 | 
					 | 
				
			||||||
        args.append('--cross-file={}'.format(cf))
 | 
					 | 
				
			||||||
    nf = conf['properties'].get('native_file')
 | 
					 | 
				
			||||||
    if nf:
 | 
					 | 
				
			||||||
        # this will be in the form "['str', 'str']", so use ast.literal_eval to
 | 
					 | 
				
			||||||
        # convert it to a list of strings.
 | 
					 | 
				
			||||||
        nf = ast.literal_eval(nf)
 | 
					 | 
				
			||||||
        args.extend(['--native-file={}'.format(f) for f in nf])
 | 
					 | 
				
			||||||
    return ' '.join(args)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
def main():
 | 
					 | 
				
			||||||
    args = parse_args()
 | 
					 | 
				
			||||||
    path = pathlib.Path(args.build_dir, 'meson-private', 'cmd_line.txt')
 | 
					 | 
				
			||||||
    if not path.exists():
 | 
					 | 
				
			||||||
        print('Cannot find the necessary file to rebuild command line. '
 | 
					 | 
				
			||||||
              'Is your meson version >= 0.49.0?', file=sys.stderr)
 | 
					 | 
				
			||||||
        sys.exit(1)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    conf = load_config(path)
 | 
					 | 
				
			||||||
    cmd = build_cmd(conf)
 | 
					 | 
				
			||||||
    print(cmd)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
if __name__ == '__main__':
 | 
					 | 
				
			||||||
    main()
 | 
					 | 
				
			||||||
@@ -1,63 +0,0 @@
 | 
				
			|||||||
#!/usr/bin/env python3
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
from os import get_terminal_size
 | 
					 | 
				
			||||||
from textwrap import wrap
 | 
					 | 
				
			||||||
from mesonbuild import coredata
 | 
					 | 
				
			||||||
from mesonbuild import optinterpreter
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
(COLUMNS, _) = get_terminal_size()
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
def describe_option(option_name: str, option_default_value: str,
 | 
					 | 
				
			||||||
                    option_type: str, option_message: str) -> None:
 | 
					 | 
				
			||||||
    print('name:    ' + option_name)
 | 
					 | 
				
			||||||
    print('default: ' + option_default_value)
 | 
					 | 
				
			||||||
    print('type:    ' + option_type)
 | 
					 | 
				
			||||||
    for line in wrap(option_message, width=COLUMNS - 9):
 | 
					 | 
				
			||||||
        print('         ' + line)
 | 
					 | 
				
			||||||
    print('---')
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
oi = optinterpreter.OptionInterpreter('')
 | 
					 | 
				
			||||||
oi.process('meson_options.txt')
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
for (name, value) in oi.options.items():
 | 
					 | 
				
			||||||
    if isinstance(value, coredata.UserStringOption):
 | 
					 | 
				
			||||||
        describe_option(name,
 | 
					 | 
				
			||||||
                        value.value,
 | 
					 | 
				
			||||||
                        'string',
 | 
					 | 
				
			||||||
                        "You can type what you want, but make sure it makes sense")
 | 
					 | 
				
			||||||
    elif isinstance(value, coredata.UserBooleanOption):
 | 
					 | 
				
			||||||
        describe_option(name,
 | 
					 | 
				
			||||||
                        'true' if value.value else 'false',
 | 
					 | 
				
			||||||
                        'boolean',
 | 
					 | 
				
			||||||
                        "You can set it to 'true' or 'false'")
 | 
					 | 
				
			||||||
    elif isinstance(value, coredata.UserIntegerOption):
 | 
					 | 
				
			||||||
        describe_option(name,
 | 
					 | 
				
			||||||
                        str(value.value),
 | 
					 | 
				
			||||||
                        'integer',
 | 
					 | 
				
			||||||
                        "You can set it to any integer value between '{}' and '{}'".format(value.min_value, value.max_value))
 | 
					 | 
				
			||||||
    elif isinstance(value, coredata.UserUmaskOption):
 | 
					 | 
				
			||||||
        describe_option(name,
 | 
					 | 
				
			||||||
                        str(value.value),
 | 
					 | 
				
			||||||
                        'umask',
 | 
					 | 
				
			||||||
                        "You can set it to 'preserve' or a value between '0000' and '0777'")
 | 
					 | 
				
			||||||
    elif isinstance(value, coredata.UserComboOption):
 | 
					 | 
				
			||||||
        choices = '[' + ', '.join(["'" + v + "'" for v in value.choices]) + ']'
 | 
					 | 
				
			||||||
        describe_option(name,
 | 
					 | 
				
			||||||
                        value.value,
 | 
					 | 
				
			||||||
                        'combo',
 | 
					 | 
				
			||||||
                        "You can set it to any one of those values: " + choices)
 | 
					 | 
				
			||||||
    elif isinstance(value, coredata.UserArrayOption):
 | 
					 | 
				
			||||||
        choices = '[' + ', '.join(["'" + v + "'" for v in value.choices]) + ']'
 | 
					 | 
				
			||||||
        value = '[' + ', '.join(["'" + v + "'" for v in value.value]) + ']'
 | 
					 | 
				
			||||||
        describe_option(name,
 | 
					 | 
				
			||||||
                        value,
 | 
					 | 
				
			||||||
                        'array',
 | 
					 | 
				
			||||||
                        "You can set it to one or more of those values: " + choices)
 | 
					 | 
				
			||||||
    elif isinstance(value, coredata.UserFeatureOption):
 | 
					 | 
				
			||||||
        describe_option(name,
 | 
					 | 
				
			||||||
                        value.value,
 | 
					 | 
				
			||||||
                        'feature',
 | 
					 | 
				
			||||||
                        "You can set it to 'auto', 'enabled', or 'disabled'")
 | 
					 | 
				
			||||||
    else:
 | 
					 | 
				
			||||||
        print(name + ' is an option of a type unknown to this script')
 | 
					 | 
				
			||||||
        print('---')
 | 
					 | 
				
			||||||
@@ -1,22 +0,0 @@
 | 
				
			|||||||
# Copyright © 2017 Eric Engestrom
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# Permission is hereby granted, free of charge, to any person obtaining a copy
 | 
					 | 
				
			||||||
# of this software and associated documentation files (the "Software"), to deal
 | 
					 | 
				
			||||||
# in the Software without restriction, including without limitation the rights
 | 
					 | 
				
			||||||
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 | 
					 | 
				
			||||||
# copies of the Software, and to permit persons to whom the Software is
 | 
					 | 
				
			||||||
# furnished to do so, subject to the following conditions:
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# The above copyright notice and this permission notice shall be included in
 | 
					 | 
				
			||||||
# all copies or substantial portions of the Software.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 | 
					 | 
				
			||||||
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 | 
					 | 
				
			||||||
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 | 
					 | 
				
			||||||
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 | 
					 | 
				
			||||||
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 | 
					 | 
				
			||||||
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 | 
					 | 
				
			||||||
# SOFTWARE.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
git_sha1_gen_py = files('git_sha1_gen.py')
 | 
					 | 
				
			||||||
symbols_check = find_program('symbols-check.py')
 | 
					 | 
				
			||||||
@@ -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()
 | 
					 | 
				
			||||||
							
								
								
									
										112
									
								
								bin/minstall
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										112
									
								
								bin/minstall
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,112 @@
 | 
				
			|||||||
 | 
					#!/bin/sh
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# A minimal replacement for 'install' that supports installing symbolic links.
 | 
				
			||||||
 | 
					# Only a limited number of options are supported:
 | 
				
			||||||
 | 
					# -d dir          Create a directory
 | 
				
			||||||
 | 
					# -m mode         Sets a file's mode when installing
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# If these commands aren't portable, we'll need some "if (arch)" type stuff
 | 
				
			||||||
 | 
					SYMLINK="ln -s"
 | 
				
			||||||
 | 
					MKDIR="mkdir -p"
 | 
				
			||||||
 | 
					RM="rm -f"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					MODE=""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if [ "$1" = "-d" ] ; then
 | 
				
			||||||
 | 
						# make a directory path
 | 
				
			||||||
 | 
						$MKDIR "$2"
 | 
				
			||||||
 | 
						exit 0
 | 
				
			||||||
 | 
					fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if [ "$1" = "-m" ] ; then
 | 
				
			||||||
 | 
						# set file mode
 | 
				
			||||||
 | 
						MODE=$2
 | 
				
			||||||
 | 
						shift 2
 | 
				
			||||||
 | 
					fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# install file(s) into destination
 | 
				
			||||||
 | 
					if [ $# -ge 2 ] ; then
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						# Last cmd line arg is the dest dir
 | 
				
			||||||
 | 
						for FILE in $@ ; do
 | 
				
			||||||
 | 
							DESTDIR="$FILE"
 | 
				
			||||||
 | 
						done
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						# Loop over args, moving them to DEST directory
 | 
				
			||||||
 | 
						I=1
 | 
				
			||||||
 | 
						for FILE in $@ ; do
 | 
				
			||||||
 | 
							if [ $I = $# ] ; then
 | 
				
			||||||
 | 
								# stop, don't want to install $DEST into $DEST
 | 
				
			||||||
 | 
								exit 0
 | 
				
			||||||
 | 
							fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                DEST=$DESTDIR
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                # On CYGWIN, because DLLs are loaded by the native Win32 loader,
 | 
				
			||||||
 | 
					                # they are installed in the executable path.  Stub libraries used
 | 
				
			||||||
 | 
					                # only for linking are installed in the library path
 | 
				
			||||||
 | 
					                case `uname` in
 | 
				
			||||||
 | 
					                    CYGWIN*)
 | 
				
			||||||
 | 
					                        case $FILE in
 | 
				
			||||||
 | 
					                            *.dll)
 | 
				
			||||||
 | 
					                                DEST="$DEST/../bin"
 | 
				
			||||||
 | 
					                                ;;
 | 
				
			||||||
 | 
					                            *)
 | 
				
			||||||
 | 
					                                ;;
 | 
				
			||||||
 | 
					                        esac
 | 
				
			||||||
 | 
						                ;;
 | 
				
			||||||
 | 
					                    *)
 | 
				
			||||||
 | 
					                        ;;
 | 
				
			||||||
 | 
					                esac
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							PWDSAVE=`pwd`
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							# determine file's type
 | 
				
			||||||
 | 
							if [ -h "$FILE" ] ; then
 | 
				
			||||||
 | 
								#echo $FILE is a symlink
 | 
				
			||||||
 | 
								# Unfortunately, cp -d isn't universal so we have to
 | 
				
			||||||
 | 
								# use a work-around.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								# Use ls -l to find the target that the link points to
 | 
				
			||||||
 | 
								LL=`ls -l "$FILE"`
 | 
				
			||||||
 | 
								for L in $LL ; do
 | 
				
			||||||
 | 
									TARGET=$L
 | 
				
			||||||
 | 
								done
 | 
				
			||||||
 | 
								#echo $FILE is a symlink pointing to $TARGET
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								FILE=`basename "$FILE"`
 | 
				
			||||||
 | 
								# Go to $DEST and make the link
 | 
				
			||||||
 | 
								cd "$DEST"        # pushd
 | 
				
			||||||
 | 
									$RM "$FILE"
 | 
				
			||||||
 | 
									$SYMLINK "$TARGET" "$FILE"
 | 
				
			||||||
 | 
								cd "$PWDSAVE"     # popd
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							elif [ -f "$FILE" ] ; then
 | 
				
			||||||
 | 
								#echo "$FILE" is a regular file
 | 
				
			||||||
 | 
								# Only copy if the files differ
 | 
				
			||||||
 | 
								if ! cmp -s $FILE $DEST/`basename $FILE`; then
 | 
				
			||||||
 | 
									$RM "$DEST/`basename $FILE`"
 | 
				
			||||||
 | 
									cp "$FILE" "$DEST"
 | 
				
			||||||
 | 
								fi
 | 
				
			||||||
 | 
								if [ $MODE ] ; then
 | 
				
			||||||
 | 
									FILE=`basename "$FILE"`
 | 
				
			||||||
 | 
									chmod $MODE "$DEST/$FILE"
 | 
				
			||||||
 | 
								fi
 | 
				
			||||||
 | 
							else
 | 
				
			||||||
 | 
								echo "Unknown type of argument: " "$FILE"
 | 
				
			||||||
 | 
								exit 1
 | 
				
			||||||
 | 
							fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							I=`expr $I + 1`
 | 
				
			||||||
 | 
						done
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						exit 0
 | 
				
			||||||
 | 
					fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# If we get here, we didn't find anything to do
 | 
				
			||||||
 | 
					echo "Usage:"
 | 
				
			||||||
 | 
					echo "  install -d dir                      Create named directory"
 | 
				
			||||||
 | 
					echo "  install [-m mode] file [...] dest   Install files in destination"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -1,251 +0,0 @@
 | 
				
			|||||||
#!/usr/bin/env python
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
# Copyright 2012 VMware Inc
 | 
					 | 
				
			||||||
# Copyright 2008-2009 Jose Fonseca
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
# Permission is hereby granted, free of charge, to any person obtaining a copy
 | 
					 | 
				
			||||||
# of this software and associated documentation files (the "Software"), to deal
 | 
					 | 
				
			||||||
# in the Software without restriction, including without limitation the rights
 | 
					 | 
				
			||||||
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 | 
					 | 
				
			||||||
# copies of the Software, and to permit persons to whom the Software is
 | 
					 | 
				
			||||||
# furnished to do so, subject to the following conditions:
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
# The above copyright notice and this permission notice shall be included in
 | 
					 | 
				
			||||||
# all copies or substantial portions of the Software.
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 | 
					 | 
				
			||||||
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 | 
					 | 
				
			||||||
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 | 
					 | 
				
			||||||
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 | 
					 | 
				
			||||||
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 | 
					 | 
				
			||||||
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
 | 
					 | 
				
			||||||
# THE SOFTWARE.
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
"""Perf annotate for JIT code.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Linux `perf annotate` does not work with JIT code.  This script takes the data
 | 
					 | 
				
			||||||
produced by `perf script` command, plus the diassemblies outputed by gallivm
 | 
					 | 
				
			||||||
into /tmp/perf-XXXXX.map.asm and produces output similar to `perf annotate`.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
See docs/llvmpipe.html for usage instructions.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
The `perf script` output parser was derived from the gprof2dot.py script.
 | 
					 | 
				
			||||||
"""
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import sys
 | 
					 | 
				
			||||||
import os.path
 | 
					 | 
				
			||||||
import re
 | 
					 | 
				
			||||||
import optparse
 | 
					 | 
				
			||||||
import subprocess
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
class Parser:
 | 
					 | 
				
			||||||
    """Parser interface."""
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    def __init__(self):
 | 
					 | 
				
			||||||
        pass
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    def parse(self):
 | 
					 | 
				
			||||||
        raise NotImplementedError
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
class LineParser(Parser):
 | 
					 | 
				
			||||||
    """Base class for parsers that read line-based formats."""
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    def __init__(self, file):
 | 
					 | 
				
			||||||
        Parser.__init__(self)
 | 
					 | 
				
			||||||
        self._file = file
 | 
					 | 
				
			||||||
        self.__line = None
 | 
					 | 
				
			||||||
        self.__eof = False
 | 
					 | 
				
			||||||
        self.line_no = 0
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    def readline(self):
 | 
					 | 
				
			||||||
        line = self._file.readline()
 | 
					 | 
				
			||||||
        if not line:
 | 
					 | 
				
			||||||
            self.__line = ''
 | 
					 | 
				
			||||||
            self.__eof = True
 | 
					 | 
				
			||||||
        else:
 | 
					 | 
				
			||||||
            self.line_no += 1
 | 
					 | 
				
			||||||
        self.__line = line.rstrip('\r\n')
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    def lookahead(self):
 | 
					 | 
				
			||||||
        assert self.__line is not None
 | 
					 | 
				
			||||||
        return self.__line
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    def consume(self):
 | 
					 | 
				
			||||||
        assert self.__line is not None
 | 
					 | 
				
			||||||
        line = self.__line
 | 
					 | 
				
			||||||
        self.readline()
 | 
					 | 
				
			||||||
        return line
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    def eof(self):
 | 
					 | 
				
			||||||
        assert self.__line is not None
 | 
					 | 
				
			||||||
        return self.__eof
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
mapFile = None
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
def lookupMap(filename, matchSymbol):
 | 
					 | 
				
			||||||
    global mapFile
 | 
					 | 
				
			||||||
    mapFile = filename
 | 
					 | 
				
			||||||
    stream = open(filename, 'rt')
 | 
					 | 
				
			||||||
    for line in stream:
 | 
					 | 
				
			||||||
        start, length, symbol = line.split()
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        start = int(start, 16)
 | 
					 | 
				
			||||||
        length = int(length,16)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        if symbol == matchSymbol:
 | 
					 | 
				
			||||||
            return start
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    return None
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
def lookupAsm(filename, desiredFunction):
 | 
					 | 
				
			||||||
    stream = open(filename + '.asm', 'rt')
 | 
					 | 
				
			||||||
    while stream.readline() != desiredFunction + ':\n':
 | 
					 | 
				
			||||||
        pass
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    asm = []
 | 
					 | 
				
			||||||
    line = stream.readline().strip()
 | 
					 | 
				
			||||||
    while line:
 | 
					 | 
				
			||||||
        addr, instr = line.split(':', 1)
 | 
					 | 
				
			||||||
        addr = int(addr)
 | 
					 | 
				
			||||||
        asm.append((addr, instr))
 | 
					 | 
				
			||||||
        line = stream.readline().strip()
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    return asm
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
samples = {}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
class PerfParser(LineParser):
 | 
					 | 
				
			||||||
    """Parser for linux perf callgraph output.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    It expects output generated with
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        perf record -g
 | 
					 | 
				
			||||||
        perf script
 | 
					 | 
				
			||||||
    """
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    def __init__(self, infile, symbol):
 | 
					 | 
				
			||||||
        LineParser.__init__(self, infile)
 | 
					 | 
				
			||||||
        self.symbol = symbol
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    def readline(self):
 | 
					 | 
				
			||||||
        # Override LineParser.readline to ignore comment lines
 | 
					 | 
				
			||||||
        while True:
 | 
					 | 
				
			||||||
            LineParser.readline(self)
 | 
					 | 
				
			||||||
            if self.eof() or not self.lookahead().startswith('#'):
 | 
					 | 
				
			||||||
                break
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    def parse(self):
 | 
					 | 
				
			||||||
        # read lookahead
 | 
					 | 
				
			||||||
        self.readline()
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        while not self.eof():
 | 
					 | 
				
			||||||
            self.parse_event()
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        asm = lookupAsm(mapFile, self.symbol)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        addresses = samples.keys()
 | 
					 | 
				
			||||||
        addresses.sort()
 | 
					 | 
				
			||||||
        total_samples = 0
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        sys.stdout.write('%s:\n' % self.symbol)
 | 
					 | 
				
			||||||
        for address, instr in asm:
 | 
					 | 
				
			||||||
            try:
 | 
					 | 
				
			||||||
                sample = samples.pop(address)
 | 
					 | 
				
			||||||
            except KeyError:
 | 
					 | 
				
			||||||
                sys.stdout.write(6*' ')
 | 
					 | 
				
			||||||
            else:
 | 
					 | 
				
			||||||
                sys.stdout.write('%6u' % (sample))
 | 
					 | 
				
			||||||
                total_samples += sample
 | 
					 | 
				
			||||||
            sys.stdout.write('%6u: %s\n' % (address, instr))
 | 
					 | 
				
			||||||
        print 'total:', total_samples
 | 
					 | 
				
			||||||
        assert len(samples) == 0
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        sys.exit(0)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    def parse_event(self):
 | 
					 | 
				
			||||||
        if self.eof():
 | 
					 | 
				
			||||||
            return
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        line = self.consume()
 | 
					 | 
				
			||||||
        assert line
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        callchain = self.parse_callchain()
 | 
					 | 
				
			||||||
        if not callchain:
 | 
					 | 
				
			||||||
            return
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    def parse_callchain(self):
 | 
					 | 
				
			||||||
        callchain = []
 | 
					 | 
				
			||||||
        while self.lookahead():
 | 
					 | 
				
			||||||
            function = self.parse_call(len(callchain) == 0)
 | 
					 | 
				
			||||||
            if function is None:
 | 
					 | 
				
			||||||
                break
 | 
					 | 
				
			||||||
            callchain.append(function)
 | 
					 | 
				
			||||||
        if self.lookahead() == '':
 | 
					 | 
				
			||||||
            self.consume()
 | 
					 | 
				
			||||||
        return callchain
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    call_re = re.compile(r'^\s+(?P<address>[0-9a-fA-F]+)\s+(?P<symbol>.*)\s+\((?P<module>[^)]*)\)$')
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    def parse_call(self, first):
 | 
					 | 
				
			||||||
        line = self.consume()
 | 
					 | 
				
			||||||
        mo = self.call_re.match(line)
 | 
					 | 
				
			||||||
        assert mo
 | 
					 | 
				
			||||||
        if not mo:
 | 
					 | 
				
			||||||
            return None
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        if not first:
 | 
					 | 
				
			||||||
            return None
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        function_name = mo.group('symbol')
 | 
					 | 
				
			||||||
        if not function_name:
 | 
					 | 
				
			||||||
            function_name = mo.group('address')
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        module = mo.group('module')
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        function_id = function_name + ':' + module
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        address = mo.group('address')
 | 
					 | 
				
			||||||
        address = int(address, 16)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        if function_name != self.symbol:
 | 
					 | 
				
			||||||
            return None
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        start_address = lookupMap(module, function_name)
 | 
					 | 
				
			||||||
        address -= start_address
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        #print function_name, module, address
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        samples[address] = samples.get(address, 0) + 1
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        return True
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
def main():
 | 
					 | 
				
			||||||
    """Main program."""
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    optparser = optparse.OptionParser(
 | 
					 | 
				
			||||||
        usage="\n\t%prog [options] symbol_name")
 | 
					 | 
				
			||||||
    (options, args) = optparser.parse_args(sys.argv[1:])
 | 
					 | 
				
			||||||
    if len(args) != 1:
 | 
					 | 
				
			||||||
        optparser.error('wrong number of arguments')
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    symbol = args[0]
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    p = subprocess.Popen(['perf', 'script'], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
 | 
					 | 
				
			||||||
    parser = PerfParser(p.stdout, symbol)
 | 
					 | 
				
			||||||
    parser.parse()
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
if __name__ == '__main__':
 | 
					 | 
				
			||||||
    main()
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# vim: set sw=4 et:
 | 
					 | 
				
			||||||
@@ -1,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()
 | 
					 | 
				
			||||||
							
								
								
									
										23
									
								
								bin/shortlog_mesa.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										23
									
								
								bin/shortlog_mesa.sh
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,23 @@
 | 
				
			|||||||
 | 
					#!/bin/bash
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# This script is used to generate the list of changes that
 | 
				
			||||||
 | 
					# appears in the release notes files, with HTML formatting.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					typeset -i 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()
 | 
					 | 
				
			||||||
@@ -1,3 +0,0 @@
 | 
				
			|||||||
{
 | 
					 | 
				
			||||||
	radeon_drm_winsys_create;
 | 
					 | 
				
			||||||
};
 | 
					 | 
				
			||||||
@@ -1,6 +0,0 @@
 | 
				
			|||||||
VERSION_1 {
 | 
					 | 
				
			||||||
    global:
 | 
					 | 
				
			||||||
        main;
 | 
					 | 
				
			||||||
    local:
 | 
					 | 
				
			||||||
        *;
 | 
					 | 
				
			||||||
};
 | 
					 | 
				
			||||||
							
								
								
									
										108
									
								
								common.py
									
									
									
									
									
								
							
							
						
						
									
										108
									
								
								common.py
									
									
									
									
									
								
							@@ -17,9 +17,6 @@ import SCons.Script.SConscript
 | 
				
			|||||||
host_platform = _platform.system().lower()
 | 
					host_platform = _platform.system().lower()
 | 
				
			||||||
if host_platform.startswith('cygwin'):
 | 
					if host_platform.startswith('cygwin'):
 | 
				
			||||||
    host_platform = 'cygwin'
 | 
					    host_platform = 'cygwin'
 | 
				
			||||||
# MSYS2 default platform selection.
 | 
					 | 
				
			||||||
if host_platform.startswith('mingw'):
 | 
					 | 
				
			||||||
    host_platform = 'windows'
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Search sys.argv[] for a "platform=foo" argument since we don't have
 | 
					# Search sys.argv[] for a "platform=foo" argument since we don't have
 | 
				
			||||||
# an 'env' variable at this point.
 | 
					# an 'env' variable at this point.
 | 
				
			||||||
@@ -29,41 +26,32 @@ else:
 | 
				
			|||||||
    target_platform = host_platform
 | 
					    target_platform = host_platform
 | 
				
			||||||
 | 
					
 | 
				
			||||||
_machine_map = {
 | 
					_machine_map = {
 | 
				
			||||||
    'x86': 'x86',
 | 
						'x86': 'x86',
 | 
				
			||||||
    'i386': 'x86',
 | 
						'i386': 'x86',
 | 
				
			||||||
    'i486': 'x86',
 | 
						'i486': 'x86',
 | 
				
			||||||
    'i586': 'x86',
 | 
						'i586': 'x86',
 | 
				
			||||||
    'i686': 'x86',
 | 
						'i686': 'x86',
 | 
				
			||||||
    'BePC': 'x86',
 | 
						'BePC': 'x86',
 | 
				
			||||||
    'Intel': 'x86',
 | 
						'Intel': 'x86',
 | 
				
			||||||
    'ppc': 'ppc',
 | 
						'ppc' : 'ppc',
 | 
				
			||||||
    'BeBox': 'ppc',
 | 
						'BeBox': 'ppc',
 | 
				
			||||||
    'BeMac': 'ppc',
 | 
						'BeMac': 'ppc',
 | 
				
			||||||
    'AMD64': 'x86_64',
 | 
						'AMD64': 'x86_64',
 | 
				
			||||||
    'x86_64': 'x86_64',
 | 
						'x86_64': 'x86_64',
 | 
				
			||||||
    'sparc': 'sparc',
 | 
						'sparc': 'sparc',
 | 
				
			||||||
    'sun4u': 'sparc',
 | 
						'sun4u': 'sparc',
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# find host_machine value
 | 
					# find host_machine value
 | 
				
			||||||
if 'PROCESSOR_ARCHITECTURE' in os.environ:
 | 
					if 'PROCESSOR_ARCHITECTURE' in os.environ:
 | 
				
			||||||
    host_machine = os.environ['PROCESSOR_ARCHITECTURE']
 | 
						host_machine = os.environ['PROCESSOR_ARCHITECTURE']
 | 
				
			||||||
else:
 | 
					else:
 | 
				
			||||||
    host_machine = _platform.machine()
 | 
						host_machine = _platform.machine()
 | 
				
			||||||
host_machine = _machine_map.get(host_machine, 'generic')
 | 
					host_machine = _machine_map.get(host_machine, 'generic')
 | 
				
			||||||
# MSYS2 default machine selection.
 | 
					 | 
				
			||||||
if _platform.system().lower().startswith('mingw') and 'MSYSTEM' in os.environ:
 | 
					 | 
				
			||||||
    if os.environ['MSYSTEM'] == 'MINGW32':
 | 
					 | 
				
			||||||
        host_machine = 'x86'
 | 
					 | 
				
			||||||
    if os.environ['MSYSTEM'] == 'MINGW64':
 | 
					 | 
				
			||||||
        host_machine = 'x86_64'
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
default_machine = host_machine
 | 
					default_machine = host_machine
 | 
				
			||||||
default_toolchain = 'default'
 | 
					default_toolchain = 'default'
 | 
				
			||||||
# MSYS2 default toolchain selection.
 | 
					 | 
				
			||||||
if _platform.system().lower().startswith('mingw'):
 | 
					 | 
				
			||||||
    default_toolchain = 'mingw'
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
if target_platform == 'windows' and host_platform != 'windows':
 | 
					if target_platform == 'windows' and host_platform != 'windows':
 | 
				
			||||||
    default_machine = 'x86'
 | 
					    default_machine = 'x86'
 | 
				
			||||||
@@ -71,14 +59,13 @@ if target_platform == 'windows' and host_platform != 'windows':
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# find default_llvm value
 | 
					# find default_llvm value
 | 
				
			||||||
if 'LLVM' in os.environ or 'LLVM_CONFIG' in os.environ:
 | 
					if 'LLVM' in os.environ:
 | 
				
			||||||
    default_llvm = 'yes'
 | 
					    default_llvm = 'yes'
 | 
				
			||||||
else:
 | 
					else:
 | 
				
			||||||
    default_llvm = 'no'
 | 
					    default_llvm = 'no'
 | 
				
			||||||
    try:
 | 
					    try:
 | 
				
			||||||
        if target_platform != 'windows' and \
 | 
					        if target_platform != 'windows' and \
 | 
				
			||||||
           subprocess.call(['llvm-config', '--version'],
 | 
					           subprocess.call(['llvm-config', '--version'], stdout=subprocess.PIPE) == 0:
 | 
				
			||||||
                           stdout=subprocess.PIPE) == 0:
 | 
					 | 
				
			||||||
            default_llvm = 'yes'
 | 
					            default_llvm = 'yes'
 | 
				
			||||||
    except:
 | 
					    except:
 | 
				
			||||||
        pass
 | 
					        pass
 | 
				
			||||||
@@ -88,37 +75,28 @@ else:
 | 
				
			|||||||
# Common options
 | 
					# Common options
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def AddOptions(opts):
 | 
					def AddOptions(opts):
 | 
				
			||||||
    try:
 | 
						try:
 | 
				
			||||||
        from SCons.Variables.BoolVariable import BoolVariable as BoolOption
 | 
							from SCons.Variables.BoolVariable import BoolVariable as BoolOption
 | 
				
			||||||
    except ImportError:
 | 
						except ImportError:
 | 
				
			||||||
        from SCons.Options.BoolOption import BoolOption
 | 
							from SCons.Options.BoolOption import BoolOption
 | 
				
			||||||
    try:
 | 
						try:
 | 
				
			||||||
        from SCons.Variables.EnumVariable import EnumVariable as EnumOption
 | 
							from SCons.Variables.EnumVariable import EnumVariable as EnumOption
 | 
				
			||||||
    except ImportError:
 | 
						except ImportError:
 | 
				
			||||||
        from SCons.Options.EnumOption import EnumOption
 | 
							from SCons.Options.EnumOption import EnumOption
 | 
				
			||||||
    opts.Add(EnumOption('build', 'build type', 'debug',
 | 
						opts.Add(EnumOption('build', 'build type', 'debug',
 | 
				
			||||||
                        allowed_values=('debug', 'checked', 'profile',
 | 
						                  allowed_values=('debug', 'checked', 'profile', 'release')))
 | 
				
			||||||
                                        'release')))
 | 
						opts.Add(BoolOption('verbose', 'verbose output', 'no'))
 | 
				
			||||||
    opts.Add(BoolOption('verbose', 'verbose output', 'no'))
 | 
						opts.Add(EnumOption('machine', 'use machine-specific assembly code', default_machine,
 | 
				
			||||||
    opts.Add(EnumOption('machine', 'use machine-specific assembly code',
 | 
																 allowed_values=('generic', 'ppc', 'x86', 'x86_64')))
 | 
				
			||||||
                        default_machine,
 | 
						opts.Add(EnumOption('platform', 'target platform', host_platform,
 | 
				
			||||||
                        allowed_values=('generic', 'ppc', 'x86', 'x86_64')))
 | 
																 allowed_values=('cygwin', 'darwin', 'freebsd', 'haiku', 'linux', 'sunos', 'windows')))
 | 
				
			||||||
    opts.Add(EnumOption('platform', 'target platform', host_platform,
 | 
						opts.Add(BoolOption('embedded', 'embedded build', 'no'))
 | 
				
			||||||
                        allowed_values=('cygwin', 'darwin', 'freebsd', 'haiku',
 | 
						opts.Add('toolchain', 'compiler toolchain', default_toolchain)
 | 
				
			||||||
                                        'linux', 'sunos', 'windows')))
 | 
						opts.Add(BoolOption('gles', 'EXPERIMENTAL: enable OpenGL ES support', 'no'))
 | 
				
			||||||
    opts.Add(BoolOption('embedded', 'embedded build', 'no'))
 | 
						opts.Add(BoolOption('llvm', 'use LLVM', default_llvm))
 | 
				
			||||||
    opts.Add(BoolOption('analyze',
 | 
						opts.Add(BoolOption('openmp', 'EXPERIMENTAL: compile with openmp (swrast)', 'no'))
 | 
				
			||||||
                        'enable static code analysis where available', 'no'))
 | 
						opts.Add(BoolOption('debug', 'DEPRECATED: debug build', 'yes'))
 | 
				
			||||||
    opts.Add(BoolOption('asan', 'enable Address Sanitizer', 'no'))
 | 
						opts.Add(BoolOption('profile', 'DEPRECATED: profile build', 'no'))
 | 
				
			||||||
    opts.Add('toolchain', 'compiler toolchain', default_toolchain)
 | 
						opts.Add(BoolOption('quiet', 'DEPRECATED: profile build', 'yes'))
 | 
				
			||||||
    opts.Add(BoolOption('llvm', 'use LLVM', default_llvm))
 | 
						if host_platform == 'windows':
 | 
				
			||||||
    opts.Add(BoolOption('force_scons', 'Force enable scons on deprecated platforms', 'false'))
 | 
							opts.Add(EnumOption('MSVS_VERSION', 'MS Visual C++ version', None, allowed_values=('7.1', '8.0', '9.0')))
 | 
				
			||||||
    opts.Add(BoolOption('openmp', 'EXPERIMENTAL: compile with openmp (swrast)',
 | 
					 | 
				
			||||||
                        'no'))
 | 
					 | 
				
			||||||
    opts.Add(BoolOption('debug', 'DEPRECATED: debug build', 'yes'))
 | 
					 | 
				
			||||||
    opts.Add(BoolOption('profile', 'DEPRECATED: profile build', 'no'))
 | 
					 | 
				
			||||||
    opts.Add(BoolOption('quiet', 'DEPRECATED: profile build', 'yes'))
 | 
					 | 
				
			||||||
    opts.Add(BoolOption('swr', 'Build OpenSWR', 'no'))
 | 
					 | 
				
			||||||
    if host_platform == 'windows':
 | 
					 | 
				
			||||||
        opts.Add('MSVC_VERSION', 'Microsoft Visual C/C++ version')
 | 
					 | 
				
			||||||
        opts.Add('MSVC_USE_SCRIPT', 'Microsoft Visual C/C++ vcvarsall script', True)
 | 
					 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										2
									
								
								configs/.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								configs/.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,2 @@
 | 
				
			|||||||
 | 
					current
 | 
				
			||||||
 | 
					autoconf
 | 
				
			||||||
							
								
								
									
										226
									
								
								configs/current.in
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										226
									
								
								configs/current.in
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,226 @@
 | 
				
			|||||||
 | 
					# Autoconf configuration
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Pull in the defaults
 | 
				
			||||||
 | 
					include $(TOP)/configs/default
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# This is generated by configure
 | 
				
			||||||
 | 
					CONFIG_NAME = autoconf
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Compiler and flags
 | 
				
			||||||
 | 
					CC = @CC@
 | 
				
			||||||
 | 
					CXX = @CXX@
 | 
				
			||||||
 | 
					OPT_FLAGS = @OPT_FLAGS@
 | 
				
			||||||
 | 
					ARCH_FLAGS = @ARCH_FLAGS@
 | 
				
			||||||
 | 
					PIC_FLAGS = @PIC_FLAGS@
 | 
				
			||||||
 | 
					DEFINES = @DEFINES@
 | 
				
			||||||
 | 
					API_DEFINES = @API_DEFINES@
 | 
				
			||||||
 | 
					SHARED_GLAPI = @SHARED_GLAPI@
 | 
				
			||||||
 | 
					CFLAGS_NOVISIBILITY = @CPPFLAGS@ @CFLAGS@ \
 | 
				
			||||||
 | 
						$(OPT_FLAGS) $(PIC_FLAGS) $(ARCH_FLAGS) $(DEFINES)
 | 
				
			||||||
 | 
					CXXFLAGS_NOVISIBILITY = @CPPFLAGS@ @CXXFLAGS@ \
 | 
				
			||||||
 | 
						$(OPT_FLAGS) $(PIC_FLAGS) $(ARCH_FLAGS) $(DEFINES)
 | 
				
			||||||
 | 
					CFLAGS = $(CFLAGS_NOVISIBILITY) @VISIBILITY_CFLAGS@
 | 
				
			||||||
 | 
					CXXFLAGS = $(CXXFLAGS_NOVISIBILITY) @VISIBILITY_CXXFLAGS@
 | 
				
			||||||
 | 
					LDFLAGS = @LDFLAGS@
 | 
				
			||||||
 | 
					EXTRA_LIB_PATH = @EXTRA_LIB_PATH@
 | 
				
			||||||
 | 
					RADEON_CFLAGS = @RADEON_CFLAGS@
 | 
				
			||||||
 | 
					RADEON_LIBS = @RADEON_LIBS@
 | 
				
			||||||
 | 
					NOUVEAU_CFLAGS = @NOUVEAU_CFLAGS@
 | 
				
			||||||
 | 
					NOUVEAU_LIBS = @NOUVEAU_LIBS@
 | 
				
			||||||
 | 
					INTEL_LIBS = @INTEL_LIBS@
 | 
				
			||||||
 | 
					INTEL_CFLAGS = @INTEL_CFLAGS@
 | 
				
			||||||
 | 
					X11_LIBS = @X11_LIBS@
 | 
				
			||||||
 | 
					X11_CFLAGS = @X11_CFLAGS@
 | 
				
			||||||
 | 
					LLVM_BINDIR = @LLVM_BINDIR@
 | 
				
			||||||
 | 
					LLVM_CFLAGS = @LLVM_CFLAGS@
 | 
				
			||||||
 | 
					LLVM_CPPFLAGS = @LLVM_CPPFLAGS@
 | 
				
			||||||
 | 
					LLVM_CXXFLAGS = @LLVM_CXXFLAGS@
 | 
				
			||||||
 | 
					LLVM_LDFLAGS = @LLVM_LDFLAGS@
 | 
				
			||||||
 | 
					LLVM_LIBDIR = @LLVM_LIBDIR@
 | 
				
			||||||
 | 
					LLVM_LIBS = @LLVM_LIBS@
 | 
				
			||||||
 | 
					LLVM_INCLUDEDIR = @LLVM_INCLUDEDIR@
 | 
				
			||||||
 | 
					GLW_CFLAGS = @GLW_CFLAGS@
 | 
				
			||||||
 | 
					GLX_TLS = @GLX_TLS@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# dlopen
 | 
				
			||||||
 | 
					DLOPEN_LIBS = @DLOPEN_LIBS@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Source selection
 | 
				
			||||||
 | 
					MESA_ASM_FILES = @MESA_ASM_FILES@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Misc tools and flags
 | 
				
			||||||
 | 
					MAKE = @MAKE@
 | 
				
			||||||
 | 
					SHELL = @SHELL@
 | 
				
			||||||
 | 
					MKLIB_OPTIONS = @MKLIB_OPTIONS@
 | 
				
			||||||
 | 
					MKDEP = @MKDEP@
 | 
				
			||||||
 | 
					MKDEP_OPTIONS = @MKDEP_OPTIONS@
 | 
				
			||||||
 | 
					INSTALL = @INSTALL@
 | 
				
			||||||
 | 
					AWK = @AWK@
 | 
				
			||||||
 | 
					GREP = @GREP@
 | 
				
			||||||
 | 
					NM = @NM@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Perl
 | 
				
			||||||
 | 
					PERL = @PERL@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Indent (used for generating dispatch tables)
 | 
				
			||||||
 | 
					INDENT = @INDENT@
 | 
				
			||||||
 | 
					INDENT_FLAGS = @INDENT_FLAGS@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Python and flags (generally only needed by the developers)
 | 
				
			||||||
 | 
					PYTHON2 = @PYTHON2@
 | 
				
			||||||
 | 
					PYTHON_FLAGS = -t -O -O
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Flex and Bison for GLSL compiler
 | 
				
			||||||
 | 
					FLEX = @LEX@
 | 
				
			||||||
 | 
					BISON = @YACC@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Library names (base name)
 | 
				
			||||||
 | 
					GL_LIB = @GL_LIB@
 | 
				
			||||||
 | 
					GLU_LIB = @GLU_LIB@
 | 
				
			||||||
 | 
					GLW_LIB = GLw
 | 
				
			||||||
 | 
					OSMESA_LIB = @OSMESA_LIB@
 | 
				
			||||||
 | 
					GLESv1_CM_LIB = GLESv1_CM
 | 
				
			||||||
 | 
					GLESv2_LIB = GLESv2
 | 
				
			||||||
 | 
					VG_LIB = OpenVG
 | 
				
			||||||
 | 
					GLAPI_LIB = glapi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Library names (actual file names)
 | 
				
			||||||
 | 
					GL_LIB_NAME = @GL_LIB_NAME@
 | 
				
			||||||
 | 
					GLU_LIB_NAME = @GLU_LIB_NAME@
 | 
				
			||||||
 | 
					GLW_LIB_NAME = @GLW_LIB_NAME@
 | 
				
			||||||
 | 
					OSMESA_LIB_NAME = @OSMESA_LIB_NAME@
 | 
				
			||||||
 | 
					EGL_LIB_NAME = @EGL_LIB_NAME@
 | 
				
			||||||
 | 
					GLESv1_CM_LIB_NAME = @GLESv1_CM_LIB_NAME@
 | 
				
			||||||
 | 
					GLESv2_LIB_NAME = @GLESv2_LIB_NAME@
 | 
				
			||||||
 | 
					VG_LIB_NAME = @VG_LIB_NAME@
 | 
				
			||||||
 | 
					GLAPI_LIB_NAME = @GLAPI_LIB_NAME@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Globs used to install the lib and all symlinks
 | 
				
			||||||
 | 
					GL_LIB_GLOB = @GL_LIB_GLOB@
 | 
				
			||||||
 | 
					GLU_LIB_GLOB = @GLU_LIB_GLOB@
 | 
				
			||||||
 | 
					GLW_LIB_GLOB = @GLW_LIB_GLOB@
 | 
				
			||||||
 | 
					OSMESA_LIB_GLOB = @OSMESA_LIB_GLOB@
 | 
				
			||||||
 | 
					EGL_LIB_GLOB = @EGL_LIB_GLOB@
 | 
				
			||||||
 | 
					GLESv1_CM_LIB_GLOB = @GLESv1_CM_LIB_GLOB@
 | 
				
			||||||
 | 
					GLESv2_LIB_GLOB = @GLESv2_LIB_GLOB@
 | 
				
			||||||
 | 
					VG_LIB_GLOB = @VG_LIB_GLOB@
 | 
				
			||||||
 | 
					GLAPI_LIB_GLOB = @GLAPI_LIB_GLOB@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Directories to build
 | 
				
			||||||
 | 
					LIB_DIR = @LIB_DIR@
 | 
				
			||||||
 | 
					SRC_DIRS = @SRC_DIRS@
 | 
				
			||||||
 | 
					GLU_DIRS = @GLU_DIRS@
 | 
				
			||||||
 | 
					DRIVER_DIRS = @DRIVER_DIRS@
 | 
				
			||||||
 | 
					GALLIUM_DIRS = @GALLIUM_DIRS@
 | 
				
			||||||
 | 
					GALLIUM_DRIVERS_DIRS = @GALLIUM_DRIVERS_DIRS@
 | 
				
			||||||
 | 
					GALLIUM_WINSYS_DIRS = @GALLIUM_WINSYS_DIRS@
 | 
				
			||||||
 | 
					GALLIUM_TARGET_DIRS = @GALLIUM_TARGET_DIRS@
 | 
				
			||||||
 | 
					GALLIUM_STATE_TRACKERS_DIRS = @GALLIUM_STATE_TRACKERS_DIRS@
 | 
				
			||||||
 | 
					GALLIUM_AUXILIARIES = $(TOP)/src/gallium/auxiliary/libgallium.a
 | 
				
			||||||
 | 
					GALLIUM_DRIVERS = $(foreach DIR,$(GALLIUM_DRIVERS_DIRS),$(TOP)/src/gallium/drivers/$(DIR)/lib$(DIR).a)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Driver specific build vars
 | 
				
			||||||
 | 
					DRI_DIRS = @DRI_DIRS@
 | 
				
			||||||
 | 
					EGL_PLATFORMS = @EGL_PLATFORMS@
 | 
				
			||||||
 | 
					EGL_CLIENT_APIS = @EGL_CLIENT_APIS@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Dependencies
 | 
				
			||||||
 | 
					X11_INCLUDES = @X11_INCLUDES@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# GLw motif setup
 | 
				
			||||||
 | 
					GLW_SOURCES = @GLW_SOURCES@
 | 
				
			||||||
 | 
					MOTIF_CFLAGS = @MOTIF_CFLAGS@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Library/program dependencies
 | 
				
			||||||
 | 
					GL_LIB_DEPS = $(EXTRA_LIB_PATH) @GL_LIB_DEPS@
 | 
				
			||||||
 | 
					OSMESA_LIB_DEPS = -L$(TOP)/$(LIB_DIR) @OSMESA_MESA_DEPS@ \
 | 
				
			||||||
 | 
						$(EXTRA_LIB_PATH) @OSMESA_LIB_DEPS@
 | 
				
			||||||
 | 
					EGL_LIB_DEPS = $(EXTRA_LIB_PATH) @EGL_LIB_DEPS@
 | 
				
			||||||
 | 
					GLU_LIB_DEPS = -L$(TOP)/$(LIB_DIR) @GLU_MESA_DEPS@ \
 | 
				
			||||||
 | 
						$(EXTRA_LIB_PATH) @GLU_LIB_DEPS@
 | 
				
			||||||
 | 
					GLW_LIB_DEPS = -L$(TOP)/$(LIB_DIR) @GLW_MESA_DEPS@ \
 | 
				
			||||||
 | 
						$(EXTRA_LIB_PATH) @GLW_LIB_DEPS@
 | 
				
			||||||
 | 
					GLESv1_CM_LIB_DEPS = $(EXTRA_LIB_PATH) @GLESv1_CM_LIB_DEPS@
 | 
				
			||||||
 | 
					GLESv2_LIB_DEPS = $(EXTRA_LIB_PATH) @GLESv2_LIB_DEPS@
 | 
				
			||||||
 | 
					VG_LIB_DEPS = $(EXTRA_LIB_PATH) @VG_LIB_DEPS@
 | 
				
			||||||
 | 
					GLAPI_LIB_DEPS = $(EXTRA_LIB_PATH) @GLAPI_LIB_DEPS@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# DRI dependencies
 | 
				
			||||||
 | 
					DRI_LIB_DEPS = $(EXTRA_LIB_PATH) @DRI_LIB_DEPS@
 | 
				
			||||||
 | 
					GALLIUM_DRI_LIB_DEPS = $(EXTRA_LIB_PATH) @GALLIUM_DRI_LIB_DEPS@
 | 
				
			||||||
 | 
					LIBDRM_CFLAGS = @LIBDRM_CFLAGS@
 | 
				
			||||||
 | 
					LIBDRM_LIB = @LIBDRM_LIBS@
 | 
				
			||||||
 | 
					DRI2PROTO_CFLAGS = @DRI2PROTO_CFLAGS@
 | 
				
			||||||
 | 
					GLPROTO_CFLAGS = @GLPROTO_CFLAGS@
 | 
				
			||||||
 | 
					EXPAT_INCLUDES = @EXPAT_INCLUDES@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Autoconf directories
 | 
				
			||||||
 | 
					prefix = @prefix@
 | 
				
			||||||
 | 
					exec_prefix = @exec_prefix@
 | 
				
			||||||
 | 
					libdir = @libdir@
 | 
				
			||||||
 | 
					includedir = @includedir@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Installation directories (for make install)
 | 
				
			||||||
 | 
					INSTALL_DIR = $(prefix)
 | 
				
			||||||
 | 
					INSTALL_LIB_DIR = $(libdir)
 | 
				
			||||||
 | 
					INSTALL_INC_DIR = $(includedir)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# DRI installation directories
 | 
				
			||||||
 | 
					DRI_DRIVER_INSTALL_DIR = @DRI_DRIVER_INSTALL_DIR@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Where libGL will look for DRI hardware drivers
 | 
				
			||||||
 | 
					DRI_DRIVER_SEARCH_DIR = @DRI_DRIVER_SEARCH_DIR@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# EGL driver install directory
 | 
				
			||||||
 | 
					EGL_DRIVER_INSTALL_DIR = @EGL_DRIVER_INSTALL_DIR@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# XVMC library install directory
 | 
				
			||||||
 | 
					XVMC_LIB_INSTALL_DIR=@XVMC_LIB_INSTALL_DIR@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# VDPAU library install directory
 | 
				
			||||||
 | 
					VDPAU_LIB_INSTALL_DIR=@VDPAU_LIB_INSTALL_DIR@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# VA library install directory
 | 
				
			||||||
 | 
					VA_LIB_INSTALL_DIR=@VA_LIB_INSTALL_DIR@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Xorg driver install directory (for xorg state-tracker)
 | 
				
			||||||
 | 
					XORG_DRIVER_INSTALL_DIR = @XORG_DRIVER_INSTALL_DIR@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Path to OpenCL C library libclc
 | 
				
			||||||
 | 
					LIBCLC_PATH = @LIBCLC_PATH@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# pkg-config substitutions
 | 
				
			||||||
 | 
					GL_PC_REQ_PRIV = @GL_PC_REQ_PRIV@
 | 
				
			||||||
 | 
					GL_PC_LIB_PRIV = @GL_PC_LIB_PRIV@
 | 
				
			||||||
 | 
					GL_PC_CFLAGS = @GL_PC_CFLAGS@
 | 
				
			||||||
 | 
					DRI_PC_REQ_PRIV = @DRI_PC_REQ_PRIV@
 | 
				
			||||||
 | 
					GLU_PC_REQ = @GLU_PC_REQ@
 | 
				
			||||||
 | 
					GLU_PC_REQ_PRIV = @GLU_PC_REQ_PRIV@
 | 
				
			||||||
 | 
					GLU_PC_LIB_PRIV = @GLU_PC_LIB_PRIV@
 | 
				
			||||||
 | 
					GLU_PC_CFLAGS = @GLU_PC_CFLAGS@
 | 
				
			||||||
 | 
					GLW_PC_REQ_PRIV = @GLW_PC_REQ_PRIV@
 | 
				
			||||||
 | 
					GLW_PC_LIB_PRIV = @GLW_PC_LIB_PRIV@
 | 
				
			||||||
 | 
					GLW_PC_CFLAGS = @GLW_PC_CFLAGS@
 | 
				
			||||||
 | 
					OSMESA_PC_REQ = @OSMESA_PC_REQ@
 | 
				
			||||||
 | 
					OSMESA_PC_LIB_PRIV = @OSMESA_PC_LIB_PRIV@
 | 
				
			||||||
 | 
					GLESv1_CM_PC_LIB_PRIV = @GLESv1_CM_PC_LIB_PRIV@
 | 
				
			||||||
 | 
					GLESv2_PC_LIB_PRIV = @GLESv2_PC_LIB_PRIV@
 | 
				
			||||||
 | 
					EGL_PC_REQ_PRIV = @GL_PC_REQ_PRIV@
 | 
				
			||||||
 | 
					EGL_PC_LIB_PRIV = @GL_PC_LIB_PRIV@
 | 
				
			||||||
 | 
					EGL_PC_CFLAGS = @GL_PC_CFLAGS@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					XCB_DRI2_CFLAGS = @XCB_DRI2_CFLAGS@
 | 
				
			||||||
 | 
					XCB_DRI2_LIBS = @XCB_DRI2_LIBS@
 | 
				
			||||||
 | 
					LIBUDEV_CFLAGS = @LIBUDEV_CFLAGS@
 | 
				
			||||||
 | 
					LIBUDEV_LIBS = @LIBUDEV_LIBS@
 | 
				
			||||||
 | 
					WAYLAND_CFLAGS = @WAYLAND_CFLAGS@
 | 
				
			||||||
 | 
					WAYLAND_LIBS = @WAYLAND_LIBS@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					MESA_LLVM = @MESA_LLVM@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					LLVM_VERSION = @LLVM_VERSION@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					HAVE_XF86VIDMODE = @HAVE_XF86VIDMODE@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					GALLIUM_PIPE_LOADER_DEFINES = @GALLIUM_PIPE_LOADER_DEFINES@
 | 
				
			||||||
 | 
					GALLIUM_PIPE_LOADER_LIBS = @GALLIUM_PIPE_LOADER_LIBS@
 | 
				
			||||||
							
								
								
									
										182
									
								
								configs/default
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										182
									
								
								configs/default
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,182 @@
 | 
				
			|||||||
 | 
					# Default/template configuration
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# This is included by other config files which may override some
 | 
				
			||||||
 | 
					# of these variables.
 | 
				
			||||||
 | 
					# Think of this as a base class from which configs are derived.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					CONFIG_NAME = default
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Version info
 | 
				
			||||||
 | 
					MESA_MAJOR=8
 | 
				
			||||||
 | 
					MESA_MINOR=1
 | 
				
			||||||
 | 
					MESA_TINY=0
 | 
				
			||||||
 | 
					MESA_VERSION = $(MESA_MAJOR).$(MESA_MINOR).$(MESA_TINY)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# external projects.  This should be useless now that we use libdrm.
 | 
				
			||||||
 | 
					DRM_SOURCE_PATH=$(TOP)/../drm
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Compiler and flags
 | 
				
			||||||
 | 
					CC = cc
 | 
				
			||||||
 | 
					CXX = CC
 | 
				
			||||||
 | 
					CFLAGS = -O
 | 
				
			||||||
 | 
					CXXFLAGS = -O
 | 
				
			||||||
 | 
					LDFLAGS =
 | 
				
			||||||
 | 
					GLU_CFLAGS = 
 | 
				
			||||||
 | 
					GLX_TLS = no
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Compiler for building demos/tests/etc
 | 
				
			||||||
 | 
					APP_CC = $(CC)
 | 
				
			||||||
 | 
					APP_CXX = $(CXX)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Misc tools and flags
 | 
				
			||||||
 | 
					SHELL = /bin/sh
 | 
				
			||||||
 | 
					MKLIB = $(SHELL) $(TOP)/bin/mklib
 | 
				
			||||||
 | 
					MKLIB_OPTIONS = 
 | 
				
			||||||
 | 
					MKDEP = makedepend
 | 
				
			||||||
 | 
					MKDEP_OPTIONS = -fdepend
 | 
				
			||||||
 | 
					MAKE = make
 | 
				
			||||||
 | 
					FLEX = flex
 | 
				
			||||||
 | 
					BISON = bison
 | 
				
			||||||
 | 
					PKG_CONFIG = pkg-config
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Use MINSTALL for installing libraries, INSTALL for everything else
 | 
				
			||||||
 | 
					MINSTALL = $(SHELL) $(TOP)/bin/minstall
 | 
				
			||||||
 | 
					INSTALL = $(MINSTALL)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Tools for regenerating glapi (generally only needed by the developers)
 | 
				
			||||||
 | 
					PYTHON2 = python
 | 
				
			||||||
 | 
					PYTHON_FLAGS = -t -O -O
 | 
				
			||||||
 | 
					INDENT = indent
 | 
				
			||||||
 | 
					INDENT_FLAGS = -i4 -nut -br -brs -npcs -ce -T GLubyte -T GLbyte -T Bool
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Library names (base name)
 | 
				
			||||||
 | 
					GL_LIB = GL
 | 
				
			||||||
 | 
					GLU_LIB = GLU
 | 
				
			||||||
 | 
					GLW_LIB = GLw
 | 
				
			||||||
 | 
					OSMESA_LIB = OSMesa
 | 
				
			||||||
 | 
					EGL_LIB = EGL
 | 
				
			||||||
 | 
					GLESv1_CM_LIB = GLESv1_CM
 | 
				
			||||||
 | 
					GLESv2_LIB = GLESv2
 | 
				
			||||||
 | 
					VG_LIB = OpenVG
 | 
				
			||||||
 | 
					GLAPI_LIB = glapi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Library names (actual file names)
 | 
				
			||||||
 | 
					GL_LIB_NAME = lib$(GL_LIB).so
 | 
				
			||||||
 | 
					GLU_LIB_NAME = lib$(GLU_LIB).so
 | 
				
			||||||
 | 
					GLW_LIB_NAME = lib$(GLW_LIB).so
 | 
				
			||||||
 | 
					OSMESA_LIB_NAME = lib$(OSMESA_LIB).so
 | 
				
			||||||
 | 
					EGL_LIB_NAME = lib$(EGL_LIB).so
 | 
				
			||||||
 | 
					GLESv1_CM_LIB_NAME = lib$(GLESv1_CM_LIB).so
 | 
				
			||||||
 | 
					GLESv2_LIB_NAME = lib$(GLESv2_LIB).so
 | 
				
			||||||
 | 
					VG_LIB_NAME = lib$(VG_LIB).so
 | 
				
			||||||
 | 
					GLAPI_LIB_NAME = lib$(GLAPI_LIB).so
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# globs used to install the lib and all symlinks
 | 
				
			||||||
 | 
					GL_LIB_GLOB = $(GL_LIB_NAME)*
 | 
				
			||||||
 | 
					GLU_LIB_GLOB = $(GLU_LIB_NAME)*
 | 
				
			||||||
 | 
					GLW_LIB_GLOB = $(GLW_LIB_NAME)*
 | 
				
			||||||
 | 
					OSMESA_LIB_GLOB = $(OSMESA_LIB_NAME)*
 | 
				
			||||||
 | 
					EGL_LIB_GLOB = $(EGL_LIB_NAME)*
 | 
				
			||||||
 | 
					GLESv1_CM_LIB_GLOB = $(GLESv1_CM_LIB_NAME)*
 | 
				
			||||||
 | 
					GLESv2_LIB_GLOB = $(GLESv2_LIB_NAME)*
 | 
				
			||||||
 | 
					VG_LIB_GLOB = $(VG_LIB_NAME)*
 | 
				
			||||||
 | 
					GLAPI_LIB_GLOB = $(GLAPI_LIB_NAME)*
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Optional assembly language optimization files for libGL
 | 
				
			||||||
 | 
					MESA_ASM_FILES =
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# GLw widget sources (Append "GLwMDrawA.c" here and add -lXm to GLW_LIB_DEPS in
 | 
				
			||||||
 | 
					# order to build the Motif widget too)
 | 
				
			||||||
 | 
					GLW_SOURCES = GLwDrawA.c
 | 
				
			||||||
 | 
					MOTIF_CFLAGS = -I/usr/include/Motif1.2
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Directories to build
 | 
				
			||||||
 | 
					LIB_DIR = lib
 | 
				
			||||||
 | 
					SRC_DIRS = glsl mapi/glapi mapi/vgapi mesa \
 | 
				
			||||||
 | 
						gallium egl gallium/winsys gallium/targets glu
 | 
				
			||||||
 | 
					GLU_DIRS = sgi
 | 
				
			||||||
 | 
					DRIVER_DIRS = x11 osmesa
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Gallium directories and
 | 
				
			||||||
 | 
					GALLIUM_DIRS = auxiliary drivers state_trackers
 | 
				
			||||||
 | 
					GALLIUM_AUXILIARIES = $(TOP)/src/gallium/auxiliary/libgallium.a
 | 
				
			||||||
 | 
					GALLIUM_DRIVERS_DIRS = softpipe trace rbug noop identity galahad i915 svga r300 nvfx nv50
 | 
				
			||||||
 | 
					GALLIUM_DRIVERS = $(foreach DIR,$(GALLIUM_DRIVERS_DIRS),$(TOP)/src/gallium/drivers/$(DIR)/lib$(DIR).a)
 | 
				
			||||||
 | 
					GALLIUM_WINSYS_DIRS = sw sw/xlib
 | 
				
			||||||
 | 
					GALLIUM_TARGET_DIRS = libgl-xlib
 | 
				
			||||||
 | 
					GALLIUM_STATE_TRACKERS_DIRS = glx vega
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# native platforms EGL should support
 | 
				
			||||||
 | 
					EGL_PLATFORMS = x11
 | 
				
			||||||
 | 
					EGL_CLIENT_APIS = $(GL_LIB)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Library dependencies
 | 
				
			||||||
 | 
					#EXTRA_LIB_PATH ?=
 | 
				
			||||||
 | 
					GL_LIB_DEPS     = $(EXTRA_LIB_PATH) -lX11 -lXext -lm -lpthread
 | 
				
			||||||
 | 
					EGL_LIB_DEPS    = $(EXTRA_LIB_PATH) -ldl -lpthread
 | 
				
			||||||
 | 
					OSMESA_LIB_DEPS = $(EXTRA_LIB_PATH) -L$(TOP)/$(LIB_DIR) -l$(GL_LIB)
 | 
				
			||||||
 | 
					GLU_LIB_DEPS    = $(EXTRA_LIB_PATH) -L$(TOP)/$(LIB_DIR) -l$(GL_LIB) -lm
 | 
				
			||||||
 | 
					GLW_LIB_DEPS    = $(EXTRA_LIB_PATH) -L$(TOP)/$(LIB_DIR) -l$(GL_LIB) -lXt -lX11
 | 
				
			||||||
 | 
					GLESv1_CM_LIB_DEPS = $(EXTRA_LIB_PATH) -lpthread
 | 
				
			||||||
 | 
					GLESv2_LIB_DEPS = $(EXTRA_LIB_PATH) -lpthread
 | 
				
			||||||
 | 
					VG_LIB_DEPS    = $(EXTRA_LIB_PATH) -lpthread
 | 
				
			||||||
 | 
					GLAPI_LIB_DEPS = $(EXTRA_LIB_PATH) -lpthread
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Program dependencies - specific GL libraries added in Makefiles
 | 
				
			||||||
 | 
					X11_LIBS = -lX11
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					DLOPEN_LIBS = -ldl
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Installation directories (for make install)
 | 
				
			||||||
 | 
					INSTALL_DIR = /usr/local
 | 
				
			||||||
 | 
					INSTALL_LIB_DIR = $(INSTALL_DIR)/$(LIB_DIR)
 | 
				
			||||||
 | 
					INSTALL_INC_DIR = $(INSTALL_DIR)/include
 | 
				
			||||||
 | 
					DRI_DRIVER_INSTALL_DIR = $(INSTALL_LIB_DIR)/dri
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Where libGL will look for DRI hardware drivers
 | 
				
			||||||
 | 
					DRI_DRIVER_SEARCH_DIR = $(DRI_DRIVER_INSTALL_DIR)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# EGL driver install directory
 | 
				
			||||||
 | 
					EGL_DRIVER_INSTALL_DIR = $(INSTALL_LIB_DIR)/egl
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Xorg driver install directory (for xorg state-tracker)
 | 
				
			||||||
 | 
					XORG_DRIVER_INSTALL_DIR = $(INSTALL_LIB_DIR)/xorg/modules/drivers
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# pkg-config substitutions
 | 
				
			||||||
 | 
					GL_PC_REQ_PRIV =
 | 
				
			||||||
 | 
					GL_PC_LIB_PRIV =
 | 
				
			||||||
 | 
					GL_PC_CFLAGS =
 | 
				
			||||||
 | 
					DRI_PC_REQ_PRIV =
 | 
				
			||||||
 | 
					GLU_PC_REQ = gl
 | 
				
			||||||
 | 
					GLU_PC_REQ_PRIV =
 | 
				
			||||||
 | 
					GLU_PC_LIB_PRIV =
 | 
				
			||||||
 | 
					GLU_PC_CFLAGS =
 | 
				
			||||||
 | 
					GLW_PC_REQ_PRIV =
 | 
				
			||||||
 | 
					GLW_PC_LIB_PRIV =
 | 
				
			||||||
 | 
					GLW_PC_CFLAGS =
 | 
				
			||||||
 | 
					OSMESA_PC_REQ =
 | 
				
			||||||
 | 
					OSMESA_PC_LIB_PRIV =
 | 
				
			||||||
 | 
					GLESv1_CM_PC_REQ_PRIV =
 | 
				
			||||||
 | 
					GLESv1_CM_PC_LIB_PRIV =
 | 
				
			||||||
 | 
					GLESv1_CM_PC_CFLAGS =
 | 
				
			||||||
 | 
					GLESv2_PC_REQ_PRIV =
 | 
				
			||||||
 | 
					GLESv2_PC_LIB_PRIV =
 | 
				
			||||||
 | 
					GLESv2_PC_CFLAGS =
 | 
				
			||||||
 | 
					VG_PC_REQ_PRIV =
 | 
				
			||||||
 | 
					VG_PC_LIB_PRIV =
 | 
				
			||||||
 | 
					VG_PC_CFLAGS =
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# default targets
 | 
				
			||||||
 | 
					# this helps reduce the mismatch between our automake Makefiles and the old
 | 
				
			||||||
 | 
					# custom Makefiles while we transition.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					all: default
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					am--refresh:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					distclean: clean
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					check:
 | 
				
			||||||
 | 
					test:
 | 
				
			||||||
							
								
								
									
										2308
									
								
								configure.ac
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										2308
									
								
								configure.ac
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										490
									
								
								docs/COPYING
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										490
									
								
								docs/COPYING
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,490 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
 | 
					Some parts of Mesa are copyrighted under the GNU LGPL.  See the
 | 
				
			||||||
 | 
					Mesa/docs/COPYRIGHT file for details.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					The following is the standard GNU copyright file.
 | 
				
			||||||
 | 
					----------------------------------------------------------------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							  GNU LIBRARY GENERAL PUBLIC LICENSE
 | 
				
			||||||
 | 
							       Version 2, June 1991
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 Copyright (C) 1991 Free Software Foundation, Inc.
 | 
				
			||||||
 | 
					                    675 Mass Ave, Cambridge, MA 02139, USA
 | 
				
			||||||
 | 
					 Everyone is permitted to copy and distribute verbatim copies
 | 
				
			||||||
 | 
					 of this license document, but changing it is not allowed.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[This is the first released version of the library GPL.  It is
 | 
				
			||||||
 | 
					 numbered 2 because it goes with version 2 of the ordinary GPL.]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								    Preamble
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  The licenses for most software are designed to take away your
 | 
				
			||||||
 | 
					freedom to share and change it.  By contrast, the GNU General Public
 | 
				
			||||||
 | 
					Licenses are intended to guarantee your freedom to share and change
 | 
				
			||||||
 | 
					free software--to make sure the software is free for all its users.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  This license, the Library General Public License, applies to some
 | 
				
			||||||
 | 
					specially designated Free Software Foundation software, and to any
 | 
				
			||||||
 | 
					other libraries whose authors decide to use it.  You can use it for
 | 
				
			||||||
 | 
					your libraries, too.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  When we speak of free software, we are referring to freedom, not
 | 
				
			||||||
 | 
					price.  Our General Public Licenses are designed to make sure that you
 | 
				
			||||||
 | 
					have the freedom to distribute copies of free software (and charge for
 | 
				
			||||||
 | 
					this service if you wish), that you receive source code or can get it
 | 
				
			||||||
 | 
					if you want it, that you can change the software or use pieces of it
 | 
				
			||||||
 | 
					in new free programs; and that you know you can do these things.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  To protect your rights, we need to make restrictions that forbid
 | 
				
			||||||
 | 
					anyone to deny you these rights or to ask you to surrender the rights.
 | 
				
			||||||
 | 
					These restrictions translate to certain responsibilities for you if
 | 
				
			||||||
 | 
					you distribute copies of the library, or if you modify it.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  For example, if you distribute copies of the library, whether gratis
 | 
				
			||||||
 | 
					or for a fee, you must give the recipients all the rights that we gave
 | 
				
			||||||
 | 
					you.  You must make sure that they, too, receive or can get the source
 | 
				
			||||||
 | 
					code.  If you link a program with the library, you must provide
 | 
				
			||||||
 | 
					complete object files to the recipients so that they can relink them
 | 
				
			||||||
 | 
					with the library, after making changes to the library and recompiling
 | 
				
			||||||
 | 
					it.  And you must show them these terms so they know their rights.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  Our method of protecting your rights has two steps: (1) copyright
 | 
				
			||||||
 | 
					the library, and (2) offer you this license which gives you legal
 | 
				
			||||||
 | 
					permission to copy, distribute and/or modify the library.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  Also, for each distributor's protection, we want to make certain
 | 
				
			||||||
 | 
					that everyone understands that there is no warranty for this free
 | 
				
			||||||
 | 
					library.  If the library is modified by someone else and passed on, we
 | 
				
			||||||
 | 
					want its recipients to know that what they have is not the original
 | 
				
			||||||
 | 
					version, so that any problems introduced by others will not reflect on
 | 
				
			||||||
 | 
					the original authors' reputations.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  Finally, any free program is threatened constantly by software
 | 
				
			||||||
 | 
					patents.  We wish to avoid the danger that companies distributing free
 | 
				
			||||||
 | 
					software will individually obtain patent licenses, thus in effect
 | 
				
			||||||
 | 
					transforming the program into proprietary software.  To prevent this,
 | 
				
			||||||
 | 
					we have made it clear that any patent must be licensed for everyone's
 | 
				
			||||||
 | 
					free use or not licensed at all.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  Most GNU software, including some libraries, is covered by the ordinary
 | 
				
			||||||
 | 
					GNU General Public License, which was designed for utility programs.  This
 | 
				
			||||||
 | 
					license, the GNU Library General Public License, applies to certain
 | 
				
			||||||
 | 
					designated libraries.  This license is quite different from the ordinary
 | 
				
			||||||
 | 
					one; be sure to read it in full, and don't assume that anything in it is
 | 
				
			||||||
 | 
					the same as in the ordinary license.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  The reason we have a separate public license for some libraries is that
 | 
				
			||||||
 | 
					they blur the distinction we usually make between modifying or adding to a
 | 
				
			||||||
 | 
					program and simply using it.  Linking a program with a library, without
 | 
				
			||||||
 | 
					changing the library, is in some sense simply using the library, and is
 | 
				
			||||||
 | 
					analogous to running a utility program or application program.  However, in
 | 
				
			||||||
 | 
					a textual and legal sense, the linked executable is a combined work, a
 | 
				
			||||||
 | 
					derivative of the original library, and the ordinary General Public License
 | 
				
			||||||
 | 
					treats it as such.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  Because of this blurred distinction, using the ordinary General
 | 
				
			||||||
 | 
					Public License for libraries did not effectively promote software
 | 
				
			||||||
 | 
					sharing, because most developers did not use the libraries.  We
 | 
				
			||||||
 | 
					concluded that weaker conditions might promote sharing better.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  However, unrestricted linking of non-free programs would deprive the
 | 
				
			||||||
 | 
					users of those programs of all benefit from the free status of the
 | 
				
			||||||
 | 
					libraries themselves.  This Library General Public License is intended to
 | 
				
			||||||
 | 
					permit developers of non-free programs to use free libraries, while
 | 
				
			||||||
 | 
					preserving your freedom as a user of such programs to change the free
 | 
				
			||||||
 | 
					libraries that are incorporated in them.  (We have not seen how to achieve
 | 
				
			||||||
 | 
					this as regards changes in header files, but we have achieved it as regards
 | 
				
			||||||
 | 
					changes in the actual functions of the Library.)  The hope is that this
 | 
				
			||||||
 | 
					will lead to faster development of free libraries.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  The precise terms and conditions for copying, distribution and
 | 
				
			||||||
 | 
					modification follow.  Pay close attention to the difference between a
 | 
				
			||||||
 | 
					"work based on the library" and a "work that uses the library".  The
 | 
				
			||||||
 | 
					former contains code derived from the library, while the latter only
 | 
				
			||||||
 | 
					works together with the library.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  Note that it is possible for a library to be covered by the ordinary
 | 
				
			||||||
 | 
					General Public License rather than by this special one.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							  GNU LIBRARY GENERAL PUBLIC LICENSE
 | 
				
			||||||
 | 
					   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  0. This License Agreement applies to any software library which
 | 
				
			||||||
 | 
					contains a notice placed by the copyright holder or other authorized
 | 
				
			||||||
 | 
					party saying it may be distributed under the terms of this Library
 | 
				
			||||||
 | 
					General Public License (also called "this License").  Each licensee is
 | 
				
			||||||
 | 
					addressed as "you".
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  A "library" means a collection of software functions and/or data
 | 
				
			||||||
 | 
					prepared so as to be conveniently linked with application programs
 | 
				
			||||||
 | 
					(which use some of those functions and data) to form executables.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  The "Library", below, refers to any such software library or work
 | 
				
			||||||
 | 
					which has been distributed under these terms.  A "work based on the
 | 
				
			||||||
 | 
					Library" means either the Library or any derivative work under
 | 
				
			||||||
 | 
					copyright law: that is to say, a work containing the Library or a
 | 
				
			||||||
 | 
					portion of it, either verbatim or with modifications and/or translated
 | 
				
			||||||
 | 
					straightforwardly into another language.  (Hereinafter, translation is
 | 
				
			||||||
 | 
					included without limitation in the term "modification".)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  "Source code" for a work means the preferred form of the work for
 | 
				
			||||||
 | 
					making modifications to it.  For a library, complete source code means
 | 
				
			||||||
 | 
					all the source code for all modules it contains, plus any associated
 | 
				
			||||||
 | 
					interface definition files, plus the scripts used to control compilation
 | 
				
			||||||
 | 
					and installation of the library.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  Activities other than copying, distribution and modification are not
 | 
				
			||||||
 | 
					covered by this License; they are outside its scope.  The act of
 | 
				
			||||||
 | 
					running a program using the Library is not restricted, and output from
 | 
				
			||||||
 | 
					such a program is covered only if its contents constitute a work based
 | 
				
			||||||
 | 
					on the Library (independent of the use of the Library in a tool for
 | 
				
			||||||
 | 
					writing it).  Whether that is true depends on what the Library does
 | 
				
			||||||
 | 
					and what the program that uses the Library does.
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					  1. You may copy and distribute verbatim copies of the Library's
 | 
				
			||||||
 | 
					complete source code as you receive it, in any medium, provided that
 | 
				
			||||||
 | 
					you conspicuously and appropriately publish on each copy an
 | 
				
			||||||
 | 
					appropriate copyright notice and disclaimer of warranty; keep intact
 | 
				
			||||||
 | 
					all the notices that refer to this License and to the absence of any
 | 
				
			||||||
 | 
					warranty; and distribute a copy of this License along with the
 | 
				
			||||||
 | 
					Library.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  You may charge a fee for the physical act of transferring a copy,
 | 
				
			||||||
 | 
					and you may at your option offer warranty protection in exchange for a
 | 
				
			||||||
 | 
					fee.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  2. You may modify your copy or copies of the Library or any portion
 | 
				
			||||||
 | 
					of it, thus forming a work based on the Library, and copy and
 | 
				
			||||||
 | 
					distribute such modifications or work under the terms of Section 1
 | 
				
			||||||
 | 
					above, provided that you also meet all of these conditions:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    a) The modified work must itself be a software library.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    b) You must cause the files modified to carry prominent notices
 | 
				
			||||||
 | 
					    stating that you changed the files and the date of any change.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    c) You must cause the whole of the work to be licensed at no
 | 
				
			||||||
 | 
					    charge to all third parties under the terms of this License.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    d) If a facility in the modified Library refers to a function or a
 | 
				
			||||||
 | 
					    table of data to be supplied by an application program that uses
 | 
				
			||||||
 | 
					    the facility, other than as an argument passed when the facility
 | 
				
			||||||
 | 
					    is invoked, then you must make a good faith effort to ensure that,
 | 
				
			||||||
 | 
					    in the event an application does not supply such function or
 | 
				
			||||||
 | 
					    table, the facility still operates, and performs whatever part of
 | 
				
			||||||
 | 
					    its purpose remains meaningful.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    (For example, a function in a library to compute square roots has
 | 
				
			||||||
 | 
					    a purpose that is entirely well-defined independent of the
 | 
				
			||||||
 | 
					    application.  Therefore, Subsection 2d requires that any
 | 
				
			||||||
 | 
					    application-supplied function or table used by this function must
 | 
				
			||||||
 | 
					    be optional: if the application does not supply it, the square
 | 
				
			||||||
 | 
					    root function must still compute square roots.)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					These requirements apply to the modified work as a whole.  If
 | 
				
			||||||
 | 
					identifiable sections of that work are not derived from the Library,
 | 
				
			||||||
 | 
					and can be reasonably considered independent and separate works in
 | 
				
			||||||
 | 
					themselves, then this License, and its terms, do not apply to those
 | 
				
			||||||
 | 
					sections when you distribute them as separate works.  But when you
 | 
				
			||||||
 | 
					distribute the same sections as part of a whole which is a work based
 | 
				
			||||||
 | 
					on the Library, the distribution of the whole must be on the terms of
 | 
				
			||||||
 | 
					this License, whose permissions for other licensees extend to the
 | 
				
			||||||
 | 
					entire whole, and thus to each and every part regardless of who wrote
 | 
				
			||||||
 | 
					it.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Thus, it is not the intent of this section to claim rights or contest
 | 
				
			||||||
 | 
					your rights to work written entirely by you; rather, the intent is to
 | 
				
			||||||
 | 
					exercise the right to control the distribution of derivative or
 | 
				
			||||||
 | 
					collective works based on the Library.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					In addition, mere aggregation of another work not based on the Library
 | 
				
			||||||
 | 
					with the Library (or with a work based on the Library) on a volume of
 | 
				
			||||||
 | 
					a storage or distribution medium does not bring the other work under
 | 
				
			||||||
 | 
					the scope of this License.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  3. You may opt to apply the terms of the ordinary GNU General Public
 | 
				
			||||||
 | 
					License instead of this License to a given copy of the Library.  To do
 | 
				
			||||||
 | 
					this, you must alter all the notices that refer to this License, so
 | 
				
			||||||
 | 
					that they refer to the ordinary GNU General Public License, version 2,
 | 
				
			||||||
 | 
					instead of to this License.  (If a newer version than version 2 of the
 | 
				
			||||||
 | 
					ordinary GNU General Public License has appeared, then you can specify
 | 
				
			||||||
 | 
					that version instead if you wish.)  Do not make any other change in
 | 
				
			||||||
 | 
					these notices.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  Once this change is made in a given copy, it is irreversible for
 | 
				
			||||||
 | 
					that copy, so the ordinary GNU General Public License applies to all
 | 
				
			||||||
 | 
					subsequent copies and derivative works made from that copy.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  This option is useful when you wish to copy part of the code of
 | 
				
			||||||
 | 
					the Library into a program that is not a library.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  4. You may copy and distribute the Library (or a portion or
 | 
				
			||||||
 | 
					derivative of it, under Section 2) in object code or executable form
 | 
				
			||||||
 | 
					under the terms of Sections 1 and 2 above provided that you accompany
 | 
				
			||||||
 | 
					it with the complete corresponding machine-readable source code, which
 | 
				
			||||||
 | 
					must be distributed under the terms of Sections 1 and 2 above on a
 | 
				
			||||||
 | 
					medium customarily used for software interchange.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  If distribution of object code is made by offering access to copy
 | 
				
			||||||
 | 
					from a designated place, then offering equivalent access to copy the
 | 
				
			||||||
 | 
					source code from the same place satisfies the requirement to
 | 
				
			||||||
 | 
					distribute the source code, even though third parties are not
 | 
				
			||||||
 | 
					compelled to copy the source along with the object code.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  5. A program that contains no derivative of any portion of the
 | 
				
			||||||
 | 
					Library, but is designed to work with the Library by being compiled or
 | 
				
			||||||
 | 
					linked with it, is called a "work that uses the Library".  Such a
 | 
				
			||||||
 | 
					work, in isolation, is not a derivative work of the Library, and
 | 
				
			||||||
 | 
					therefore falls outside the scope of this License.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  However, linking a "work that uses the Library" with the Library
 | 
				
			||||||
 | 
					creates an executable that is a derivative of the Library (because it
 | 
				
			||||||
 | 
					contains portions of the Library), rather than a "work that uses the
 | 
				
			||||||
 | 
					library".  The executable is therefore covered by this License.
 | 
				
			||||||
 | 
					Section 6 states terms for distribution of such executables.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  When a "work that uses the Library" uses material from a header file
 | 
				
			||||||
 | 
					that is part of the Library, the object code for the work may be a
 | 
				
			||||||
 | 
					derivative work of the Library even though the source code is not.
 | 
				
			||||||
 | 
					Whether this is true is especially significant if the work can be
 | 
				
			||||||
 | 
					linked without the Library, or if the work is itself a library.  The
 | 
				
			||||||
 | 
					threshold for this to be true is not precisely defined by law.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  If such an object file uses only numerical parameters, data
 | 
				
			||||||
 | 
					structure layouts and accessors, and small macros and small inline
 | 
				
			||||||
 | 
					functions (ten lines or less in length), then the use of the object
 | 
				
			||||||
 | 
					file is unrestricted, regardless of whether it is legally a derivative
 | 
				
			||||||
 | 
					work.  (Executables containing this object code plus portions of the
 | 
				
			||||||
 | 
					Library will still fall under Section 6.)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  Otherwise, if the work is a derivative of the Library, you may
 | 
				
			||||||
 | 
					distribute the object code for the work under the terms of Section 6.
 | 
				
			||||||
 | 
					Any executables containing that work also fall under Section 6,
 | 
				
			||||||
 | 
					whether or not they are linked directly with the Library itself.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  6. As an exception to the Sections above, you may also compile or
 | 
				
			||||||
 | 
					link a "work that uses the Library" with the Library to produce a
 | 
				
			||||||
 | 
					work containing portions of the Library, and distribute that work
 | 
				
			||||||
 | 
					under terms of your choice, provided that the terms permit
 | 
				
			||||||
 | 
					modification of the work for the customer's own use and reverse
 | 
				
			||||||
 | 
					engineering for debugging such modifications.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  You must give prominent notice with each copy of the work that the
 | 
				
			||||||
 | 
					Library is used in it and that the Library and its use are covered by
 | 
				
			||||||
 | 
					this License.  You must supply a copy of this License.  If the work
 | 
				
			||||||
 | 
					during execution displays copyright notices, you must include the
 | 
				
			||||||
 | 
					copyright notice for the Library among them, as well as a reference
 | 
				
			||||||
 | 
					directing the user to the copy of this License.  Also, you must do one
 | 
				
			||||||
 | 
					of these things:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    a) Accompany the work with the complete corresponding
 | 
				
			||||||
 | 
					    machine-readable source code for the Library including whatever
 | 
				
			||||||
 | 
					    changes were used in the work (which must be distributed under
 | 
				
			||||||
 | 
					    Sections 1 and 2 above); and, if the work is an executable linked
 | 
				
			||||||
 | 
					    with the Library, with the complete machine-readable "work that
 | 
				
			||||||
 | 
					    uses the Library", as object code and/or source code, so that the
 | 
				
			||||||
 | 
					    user can modify the Library and then relink to produce a modified
 | 
				
			||||||
 | 
					    executable containing the modified Library.  (It is understood
 | 
				
			||||||
 | 
					    that the user who changes the contents of definitions files in the
 | 
				
			||||||
 | 
					    Library will not necessarily be able to recompile the application
 | 
				
			||||||
 | 
					    to use the modified definitions.)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    b) Accompany the work with a written offer, valid for at
 | 
				
			||||||
 | 
					    least three years, to give the same user the materials
 | 
				
			||||||
 | 
					    specified in Subsection 6a, above, for a charge no more
 | 
				
			||||||
 | 
					    than the cost of performing this distribution.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    c) If distribution of the work is made by offering access to copy
 | 
				
			||||||
 | 
					    from a designated place, offer equivalent access to copy the above
 | 
				
			||||||
 | 
					    specified materials from the same place.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    d) Verify that the user has already received a copy of these
 | 
				
			||||||
 | 
					    materials or that you have already sent this user a copy.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  For an executable, the required form of the "work that uses the
 | 
				
			||||||
 | 
					Library" must include any data and utility programs needed for
 | 
				
			||||||
 | 
					reproducing the executable from it.  However, as a special exception,
 | 
				
			||||||
 | 
					the source code distributed need not include anything that is normally
 | 
				
			||||||
 | 
					distributed (in either source or binary form) with the major
 | 
				
			||||||
 | 
					components (compiler, kernel, and so on) of the operating system on
 | 
				
			||||||
 | 
					which the executable runs, unless that component itself accompanies
 | 
				
			||||||
 | 
					the executable.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  It may happen that this requirement contradicts the license
 | 
				
			||||||
 | 
					restrictions of other proprietary libraries that do not normally
 | 
				
			||||||
 | 
					accompany the operating system.  Such a contradiction means you cannot
 | 
				
			||||||
 | 
					use both them and the Library together in an executable that you
 | 
				
			||||||
 | 
					distribute.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  7. You may place library facilities that are a work based on the
 | 
				
			||||||
 | 
					Library side-by-side in a single library together with other library
 | 
				
			||||||
 | 
					facilities not covered by this License, and distribute such a combined
 | 
				
			||||||
 | 
					library, provided that the separate distribution of the work based on
 | 
				
			||||||
 | 
					the Library and of the other library facilities is otherwise
 | 
				
			||||||
 | 
					permitted, and provided that you do these two things:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    a) Accompany the combined library with a copy of the same work
 | 
				
			||||||
 | 
					    based on the Library, uncombined with any other library
 | 
				
			||||||
 | 
					    facilities.  This must be distributed under the terms of the
 | 
				
			||||||
 | 
					    Sections above.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    b) Give prominent notice with the combined library of the fact
 | 
				
			||||||
 | 
					    that part of it is a work based on the Library, and explaining
 | 
				
			||||||
 | 
					    where to find the accompanying uncombined form of the same work.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  8. You may not copy, modify, sublicense, link with, or distribute
 | 
				
			||||||
 | 
					the Library except as expressly provided under this License.  Any
 | 
				
			||||||
 | 
					attempt otherwise to copy, modify, sublicense, link with, or
 | 
				
			||||||
 | 
					distribute the Library is void, and will automatically terminate your
 | 
				
			||||||
 | 
					rights under this License.  However, parties who have received copies,
 | 
				
			||||||
 | 
					or rights, from you under this License will not have their licenses
 | 
				
			||||||
 | 
					terminated so long as such parties remain in full compliance.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  9. You are not required to accept this License, since you have not
 | 
				
			||||||
 | 
					signed it.  However, nothing else grants you permission to modify or
 | 
				
			||||||
 | 
					distribute the Library or its derivative works.  These actions are
 | 
				
			||||||
 | 
					prohibited by law if you do not accept this License.  Therefore, by
 | 
				
			||||||
 | 
					modifying or distributing the Library (or any work based on the
 | 
				
			||||||
 | 
					Library), you indicate your acceptance of this License to do so, and
 | 
				
			||||||
 | 
					all its terms and conditions for copying, distributing or modifying
 | 
				
			||||||
 | 
					the Library or works based on it.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  10. Each time you redistribute the Library (or any work based on the
 | 
				
			||||||
 | 
					Library), the recipient automatically receives a license from the
 | 
				
			||||||
 | 
					original licensor to copy, distribute, link with or modify the Library
 | 
				
			||||||
 | 
					subject to these terms and conditions.  You may not impose any further
 | 
				
			||||||
 | 
					restrictions on the recipients' exercise of the rights granted herein.
 | 
				
			||||||
 | 
					You are not responsible for enforcing compliance by third parties to
 | 
				
			||||||
 | 
					this License.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  11. If, as a consequence of a court judgment or allegation of patent
 | 
				
			||||||
 | 
					infringement or for any other reason (not limited to patent issues),
 | 
				
			||||||
 | 
					conditions are imposed on you (whether by court order, agreement or
 | 
				
			||||||
 | 
					otherwise) that contradict the conditions of this License, they do not
 | 
				
			||||||
 | 
					excuse you from the conditions of this License.  If you cannot
 | 
				
			||||||
 | 
					distribute so as to satisfy simultaneously your obligations under this
 | 
				
			||||||
 | 
					License and any other pertinent obligations, then as a consequence you
 | 
				
			||||||
 | 
					may not distribute the Library at all.  For example, if a patent
 | 
				
			||||||
 | 
					license would not permit royalty-free redistribution of the Library by
 | 
				
			||||||
 | 
					all those who receive copies directly or indirectly through you, then
 | 
				
			||||||
 | 
					the only way you could satisfy both it and this License would be to
 | 
				
			||||||
 | 
					refrain entirely from distribution of the Library.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					If any portion of this section is held invalid or unenforceable under any
 | 
				
			||||||
 | 
					particular circumstance, the balance of the section is intended to apply,
 | 
				
			||||||
 | 
					and the section as a whole is intended to apply in other circumstances.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					It is not the purpose of this section to induce you to infringe any
 | 
				
			||||||
 | 
					patents or other property right claims or to contest validity of any
 | 
				
			||||||
 | 
					such claims; this section has the sole purpose of protecting the
 | 
				
			||||||
 | 
					integrity of the free software distribution system which is
 | 
				
			||||||
 | 
					implemented by public license practices.  Many people have made
 | 
				
			||||||
 | 
					generous contributions to the wide range of software distributed
 | 
				
			||||||
 | 
					through that system in reliance on consistent application of that
 | 
				
			||||||
 | 
					system; it is up to the author/donor to decide if he or she is willing
 | 
				
			||||||
 | 
					to distribute software through any other system and a licensee cannot
 | 
				
			||||||
 | 
					impose that choice.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					This section is intended to make thoroughly clear what is believed to
 | 
				
			||||||
 | 
					be a consequence of the rest of this License.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  12. If the distribution and/or use of the Library is restricted in
 | 
				
			||||||
 | 
					certain countries either by patents or by copyrighted interfaces, the
 | 
				
			||||||
 | 
					original copyright holder who places the Library under this License may add
 | 
				
			||||||
 | 
					an explicit geographical distribution limitation excluding those countries,
 | 
				
			||||||
 | 
					so that distribution is permitted only in or among countries not thus
 | 
				
			||||||
 | 
					excluded.  In such case, this License incorporates the limitation as if
 | 
				
			||||||
 | 
					written in the body of this License.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  13. The Free Software Foundation may publish revised and/or new
 | 
				
			||||||
 | 
					versions of the Library General Public License from time to time.
 | 
				
			||||||
 | 
					Such new versions will be similar in spirit to the present version,
 | 
				
			||||||
 | 
					but may differ in detail to address new problems or concerns.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Each version is given a distinguishing version number.  If the Library
 | 
				
			||||||
 | 
					specifies a version number of this License which applies to it and
 | 
				
			||||||
 | 
					"any later version", you have the option of following the terms and
 | 
				
			||||||
 | 
					conditions either of that version or of any later version published by
 | 
				
			||||||
 | 
					the Free Software Foundation.  If the Library does not specify a
 | 
				
			||||||
 | 
					license version number, you may choose any version ever published by
 | 
				
			||||||
 | 
					the Free Software Foundation.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  14. If you wish to incorporate parts of the Library into other free
 | 
				
			||||||
 | 
					programs whose distribution conditions are incompatible with these,
 | 
				
			||||||
 | 
					write to the author to ask for permission.  For software which is
 | 
				
			||||||
 | 
					copyrighted by the Free Software Foundation, write to the Free
 | 
				
			||||||
 | 
					Software Foundation; we sometimes make exceptions for this.  Our
 | 
				
			||||||
 | 
					decision will be guided by the two goals of preserving the free status
 | 
				
			||||||
 | 
					of all derivatives of our free software and of promoting the sharing
 | 
				
			||||||
 | 
					and reuse of software generally.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								    NO WARRANTY
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
 | 
				
			||||||
 | 
					WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
 | 
				
			||||||
 | 
					EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
 | 
				
			||||||
 | 
					OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
 | 
				
			||||||
 | 
					KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
 | 
				
			||||||
 | 
					IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
 | 
				
			||||||
 | 
					PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
 | 
				
			||||||
 | 
					LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
 | 
				
			||||||
 | 
					THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
 | 
				
			||||||
 | 
					WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
 | 
				
			||||||
 | 
					AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
 | 
				
			||||||
 | 
					FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
 | 
				
			||||||
 | 
					CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
 | 
				
			||||||
 | 
					LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
 | 
				
			||||||
 | 
					RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
 | 
				
			||||||
 | 
					FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
 | 
				
			||||||
 | 
					SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
 | 
				
			||||||
 | 
					DAMAGES.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							     END OF TERMS AND CONDITIONS
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					     Appendix: How to Apply These Terms to Your New Libraries
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  If you develop a new library, and you want it to be of the greatest
 | 
				
			||||||
 | 
					possible use to the public, we recommend making it free software that
 | 
				
			||||||
 | 
					everyone can redistribute and change.  You can do so by permitting
 | 
				
			||||||
 | 
					redistribution under these terms (or, alternatively, under the terms of the
 | 
				
			||||||
 | 
					ordinary General Public License).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  To apply these terms, attach the following notices to the library.  It is
 | 
				
			||||||
 | 
					safest to attach them to the start of each source file to most effectively
 | 
				
			||||||
 | 
					convey the exclusion of warranty; and each file should have at least the
 | 
				
			||||||
 | 
					"copyright" line and a pointer to where the full notice is found.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    <one line to give the library's name and a brief idea of what it does.>
 | 
				
			||||||
 | 
					    Copyright (C) <year>  <name of author>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    This library is free software; you can redistribute it and/or
 | 
				
			||||||
 | 
					    modify it under the terms of the GNU Library General Public
 | 
				
			||||||
 | 
					    License as published by the Free Software Foundation; either
 | 
				
			||||||
 | 
					    version 2 of the License, or (at your option) any later version.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    This library is distributed in the hope that it will be useful,
 | 
				
			||||||
 | 
					    but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
				
			||||||
 | 
					    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 | 
				
			||||||
 | 
					    Library General Public License for more details.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    You should have received a copy of the GNU Library General Public
 | 
				
			||||||
 | 
					    License along with this library; if not, write to the Free
 | 
				
			||||||
 | 
					    Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Also add information on how to contact you by electronic and paper mail.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					You should also get your employer (if you work as a programmer) or your
 | 
				
			||||||
 | 
					school, if any, to sign a "copyright disclaimer" for the library, if
 | 
				
			||||||
 | 
					necessary.  Here is a sample; alter the names:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  Yoyodyne, Inc., hereby disclaims all copyright interest in the
 | 
				
			||||||
 | 
					  library `Frob' (a library for tweaking knobs) written by James Random Hacker.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  <signature of Ty Coon>, 1 April 1990
 | 
				
			||||||
 | 
					  Ty Coon, President of Vice
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					That's all there is to it!
 | 
				
			||||||
 | 
					
 | 
				
			||||||
							
								
								
									
										134
									
								
								docs/GL3.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										134
									
								
								docs/GL3.txt
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,134 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
 | 
					Status of OpenGL 3.x features in Mesa
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Note: when an item is marked as "DONE" it means all the core Mesa
 | 
				
			||||||
 | 
					infrastructure is complete but it may be the case that few (if any) drivers
 | 
				
			||||||
 | 
					implement the features.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Feature                                               Status
 | 
				
			||||||
 | 
					----------------------------------------------------- ------------------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					GL 3.0:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					GLSL 1.30                                             DONE
 | 
				
			||||||
 | 
					glBindFragDataLocation, glGetFragDataLocation         DONE
 | 
				
			||||||
 | 
					Conditional rendering (GL_NV_conditional_render)      DONE (i965, r300, r600, swrast)
 | 
				
			||||||
 | 
					Map buffer subranges (GL_ARB_map_buffer_range)        DONE (i965, r300, r600, swrast)
 | 
				
			||||||
 | 
					Clamping controls (GL_ARB_color_buffer_float)         DONE (i965, r300, r600)
 | 
				
			||||||
 | 
					Float textures, renderbuffers (GL_ARB_texture_float)  DONE (i965, r300, r600)
 | 
				
			||||||
 | 
					GL_EXT_packed_float                                   DONE (i965, r600)
 | 
				
			||||||
 | 
					GL_EXT_texture_shared_exponent                        DONE (i965, r600, swrast)
 | 
				
			||||||
 | 
					Float depth buffers (GL_ARB_depth_buffer_float)       DONE (i965, r600)
 | 
				
			||||||
 | 
					Framebuffer objects (GL_ARB_framebuffer_object)       DONE (i965, r300, r600, swrast)
 | 
				
			||||||
 | 
					Half-float                                            DONE
 | 
				
			||||||
 | 
					Non-normalized Integer texture/framebuffer formats    DONE (i965)
 | 
				
			||||||
 | 
					1D/2D Texture arrays                                  DONE
 | 
				
			||||||
 | 
					Per-buffer blend and masks (GL_EXT_draw_buffers2)     DONE (i965, r600, swrast)
 | 
				
			||||||
 | 
					GL_EXT_texture_compression_rgtc                       DONE (i965, r300, r600, swrast)
 | 
				
			||||||
 | 
					Red and red/green texture formats                     DONE (i965, swrast, gallium)
 | 
				
			||||||
 | 
					Transform feedback (GL_EXT_transform_feedback)        DONE (i965)
 | 
				
			||||||
 | 
					Vertex array objects (GL_APPLE_vertex_array_object)   DONE (i965, r300, r600, swrast)
 | 
				
			||||||
 | 
					sRGB framebuffer format (GL_EXT_framebuffer_sRGB)     DONE (i965, r600)
 | 
				
			||||||
 | 
					glClearBuffer commands                                DONE
 | 
				
			||||||
 | 
					glGetStringi command                                  DONE
 | 
				
			||||||
 | 
					glTexParameterI, glGetTexParameterI commands          DONE
 | 
				
			||||||
 | 
					glVertexAttribI commands                              ~50% done (converts int
 | 
				
			||||||
 | 
					                                                                 values to floats)
 | 
				
			||||||
 | 
					Depth format cube textures                            DONE
 | 
				
			||||||
 | 
					GLX_ARB_create_context (GLX 1.4 is required)          DONE
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					GL 3.1:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					GLSL 1.40                                             needs UBOs (in progress)
 | 
				
			||||||
 | 
					Forward compatibile context support/deprecations      not started
 | 
				
			||||||
 | 
					Instanced drawing (GL_ARB_draw_instanced)             DONE (i965, gallium, swrast)
 | 
				
			||||||
 | 
					Buffer copying (GL_ARB_copy_buffer)                   DONE (i965, r300, r600, swrast)
 | 
				
			||||||
 | 
					Primitive restart (GL_NV_primitive_restart)           DONE (i965, r600)
 | 
				
			||||||
 | 
					16 vertex texture image units                         DONE
 | 
				
			||||||
 | 
					Texture buffer objs (GL_ARB_texture_buffer_object)    needs GL3.1 enabling (i965)
 | 
				
			||||||
 | 
					Rectangular textures (GL_ARB_texture_rectangle)       DONE (i965, r300, r600, swrast)
 | 
				
			||||||
 | 
					Uniform buffer objs (GL_ARB_uniform_buffer_object)    not started
 | 
				
			||||||
 | 
					Signed normalized textures (GL_EXT_texture_snorm)     DONE (i965, r300, r600)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					GL 3.2:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Core/compatibility profiles                           not started
 | 
				
			||||||
 | 
					GLSL 1.50                                             not started
 | 
				
			||||||
 | 
					Geometry shaders (GL_ARB_geometry_shader4)            partially done (Zack)
 | 
				
			||||||
 | 
					BGRA vertex order (GL_ARB_vertex_array_bgra)          DONE (i965, r300, r600, swrast)
 | 
				
			||||||
 | 
					Base vertex offset(GL_ARB_draw_elements_base_vertex)  DONE (i965, r300, r600, swrast)
 | 
				
			||||||
 | 
					Frag shader coord (GL_ARB_fragment_coord_conventions) DONE (i965, r300, r600, swrast)
 | 
				
			||||||
 | 
					Provoking vertex (GL_ARB_provoking_vertex)            DONE (i965, r300, r600, swrast)
 | 
				
			||||||
 | 
					Seamless cubemaps (GL_ARB_seamless_cube_map)          DONE (i965, r600)
 | 
				
			||||||
 | 
					Multisample textures (GL_ARB_texture_multisample)     not started
 | 
				
			||||||
 | 
					Frag depth clamp (GL_ARB_depth_clamp)                 DONE (i965, r600, swrast)
 | 
				
			||||||
 | 
					Fence objects (GL_ARB_sync)                           DONE (i965, r300, r600, swrast)
 | 
				
			||||||
 | 
					GLX_ARB_create_context_profile                        DONE
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					GL 3.3:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					GLSL 3.30                                             new features in this version pretty much done
 | 
				
			||||||
 | 
					GL_ARB_blend_func_extended                            DONE (i965, r600, softpipe)
 | 
				
			||||||
 | 
					GL_ARB_explicit_attrib_location                       DONE (i915, i965, r300, r600, swrast)
 | 
				
			||||||
 | 
					GL_ARB_occlusion_query2                               DONE (r300, r600, swrast)
 | 
				
			||||||
 | 
					GL_ARB_sampler_objects                                DONE (i965, r300, r600)
 | 
				
			||||||
 | 
					GL_ARB_shader_bit_encoding                            DONE
 | 
				
			||||||
 | 
					GL_ARB_texture_rgb10_a2ui                             DONE (i965, r600)
 | 
				
			||||||
 | 
					GL_ARB_texture_swizzle                                DONE (same as EXT version) (i965, r300, r600, swrast)
 | 
				
			||||||
 | 
					GL_ARB_timer_query                                    DONE
 | 
				
			||||||
 | 
					GL_ARB_instanced_arrays                               DONE (i965, r300, r600)
 | 
				
			||||||
 | 
					GL_ARB_vertex_type_2_10_10_10_rev                     DONE (r600)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					GL 4.0:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					GLSL 4.0                                             not started
 | 
				
			||||||
 | 
					GL_ARB_texture_query_lod                             not started
 | 
				
			||||||
 | 
					GL_ARB_draw_buffers_blend                            DONE (i965, r600, softpipe)
 | 
				
			||||||
 | 
					GL_ARB_draw_indirect                                 not started
 | 
				
			||||||
 | 
					GL_ARB_gpu_shader5                                   not started
 | 
				
			||||||
 | 
					GL_ARB_gpu_shader_fp64                               not started
 | 
				
			||||||
 | 
					GL_ARB_sample_shading                                not started
 | 
				
			||||||
 | 
					GL_ARB_shader_subroutine                             not started
 | 
				
			||||||
 | 
					GL_ARB_tessellation_shader                           not started
 | 
				
			||||||
 | 
					GL_ARB_texture_buffer_object_rgb32                   not started
 | 
				
			||||||
 | 
					GL_ARB_texture_cube_map_array                        not started
 | 
				
			||||||
 | 
					GL_ARB_texture_gather                                not started
 | 
				
			||||||
 | 
					GL_ARB_transform_feedback2                           DONE
 | 
				
			||||||
 | 
					GL_ARB_transform_feedback3                           DONE
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					GL 4.1:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					GLSL 4.1                                             not started
 | 
				
			||||||
 | 
					GL_ARB_ES2_compatibility                             DONE (i965, r300, r600)
 | 
				
			||||||
 | 
					GL_ARB_get_program_binary                            not started
 | 
				
			||||||
 | 
					GL_ARB_separate_shader_objects                       some infrastructure done
 | 
				
			||||||
 | 
					GL_ARB_shader_precision                              not started
 | 
				
			||||||
 | 
					GL_ARB_vertex_attrib_64bit                           not started
 | 
				
			||||||
 | 
					GL_ARB_viewport_array                                not started
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					GL 4.2:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					GLSL 4.2                                             not started
 | 
				
			||||||
 | 
					GL_ARB_texture_compression_bptc                      not started
 | 
				
			||||||
 | 
					GL_ARB_compressed_texture_pixel_storage              not started
 | 
				
			||||||
 | 
					GL_ARB_shader_atomic_counters                        not started
 | 
				
			||||||
 | 
					GL_ARB_texture_storage                               DONE (r300, r600, swrast)
 | 
				
			||||||
 | 
					GL_ARB_transform_feedback_instanced                  DONE
 | 
				
			||||||
 | 
					GL_ARB_base_instance                                 DONE (nv50, nvc0, r600, radeonsi)
 | 
				
			||||||
 | 
					GL_ARB_shader_image_load_store                       not started
 | 
				
			||||||
 | 
					GL_ARB_conservative_depth                            DONE (softpipe)
 | 
				
			||||||
 | 
					GL_ARB_shading_language_420pack                      not started
 | 
				
			||||||
 | 
					GL_ARB_internalformat_query                          not started
 | 
				
			||||||
 | 
					GL_ARB_map_buffer_alignment                          not started
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					More info about these features and the work involved can be found at
 | 
				
			||||||
 | 
					http://dri.freedesktop.org/wiki/MissingFunctionality
 | 
				
			||||||
@@ -13,7 +13,8 @@ Contact
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
Status
 | 
					Status
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    Obsolete. Effectively superseded by ARB_vertex_buffer_object.
 | 
					    Shipping (Mesa 4.0.4 and later.  Only implemented in particular
 | 
				
			||||||
 | 
					    XFree86/DRI drivers.)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Version
 | 
					Version
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -12,7 +12,7 @@ Contact
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
Status
 | 
					Status
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    Obsolete.
 | 
					    Shipping (since Mesa version 2.2)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Version
 | 
					Version
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -12,7 +12,7 @@ Contact
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
Status
 | 
					Status
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    Obsolete.
 | 
					    Shipping since Mesa 2.6 in February, 1998.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Version
 | 
					Version
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -16,7 +16,7 @@ IP Status
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
Status
 | 
					Status
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    DEPRECATED - Support removed in Mesa 10.1.
 | 
					    Shipping in Mesa 7.1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Version
 | 
					Version
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -76,9 +76,9 @@ Overview
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    References:
 | 
					    References:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        https://www.opengl.org/discussion_boards/cgi_directory/ultimatebb.cgi?ubb=get_topic;f=3;t=011557
 | 
					        http://www.opengl.org/discussion_boards/cgi_directory/ultimatebb.cgi?ubb=get_topic;f=3;t=011557
 | 
				
			||||||
        https://www.opengl.org/discussion_boards/cgi_directory/ultimatebb.cgi?ubb=get_topic;f=3;t=000516
 | 
					        http://www.opengl.org/discussion_boards/cgi_directory/ultimatebb.cgi?ubb=get_topic;f=3;t=000516
 | 
				
			||||||
        https://www.opengl.org/discussion_boards/cgi_directory/ultimatebb.cgi?ubb=get_topic;f=3;t=011903
 | 
					        http://www.opengl.org/discussion_boards/cgi_directory/ultimatebb.cgi?ubb=get_topic;f=3;t=011903
 | 
				
			||||||
        http://www.delphi3d.net/articles/viewarticle.php?article=terraintex.htm
 | 
					        http://www.delphi3d.net/articles/viewarticle.php?article=terraintex.htm
 | 
				
			||||||
 | 
					
 | 
				
			||||||
New Procedures and Functions
 | 
					New Procedures and Functions
 | 
				
			||||||
@@ -12,7 +12,7 @@ Contact
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
Status
 | 
					Status
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    Obsolete.
 | 
					    XXX - Not complete yet!!!
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Version
 | 
					Version
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -133,7 +133,7 @@ New Tokens
 | 
				
			|||||||
    GetFloatv and GetIntegerv:
 | 
					    GetFloatv and GetIntegerv:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        FRAGMENT_PROGRAM_POSITION_MESA      0x8bb0
 | 
					        FRAGMENT_PROGRAM_POSITION_MESA      0x8bb0
 | 
				
			||||||
        VERTEX_PROGRAM_POSITION_MESA        0x8bb5
 | 
					        VERTEX_PROGRAM_POSITION_MESA        0x8bb4
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    Accepted by the <pname> parameter of GetPointerv:
 | 
					    Accepted by the <pname> parameter of GetPointerv:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user