Compare commits
	
		
			245 Commits
		
	
	
		
			mesa-20.1.
			...
			texman_0_1
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						 | 
					8ecd83f6cd | ||
| 
						 | 
					cff7e025ed | ||
| 
						 | 
					3de9a9bd1d | ||
| 
						 | 
					e6cae6e6f6 | ||
| 
						 | 
					9cf5945b83 | ||
| 
						 | 
					d6ddc33f07 | ||
| 
						 | 
					ec32d129b7 | ||
| 
						 | 
					cd41c27446 | ||
| 
						 | 
					af6a480117 | ||
| 
						 | 
					14e9700621 | ||
| 
						 | 
					7fb177c367 | ||
| 
						 | 
					d65cda4ce3 | ||
| 
						 | 
					460a375d85 | ||
| 
						 | 
					c3c5652602 | ||
| 
						 | 
					e1998baef8 | ||
| 
						 | 
					3e980901b0 | ||
| 
						 | 
					14fe63a12b | ||
| 
						 | 
					fbd147c0b5 | ||
| 
						 | 
					7b7c54e94c | ||
| 
						 | 
					84dd9c8112 | ||
| 
						 | 
					bba85343e7 | ||
| 
						 | 
					6484b373c3 | ||
| 
						 | 
					245a3c54c7 | ||
| 
						 | 
					1266e633cc | ||
| 
						 | 
					86042f53f2 | ||
| 
						 | 
					068062f997 | ||
| 
						 | 
					c62af8e3b7 | ||
| 
						 | 
					8e5650d7f4 | ||
| 
						 | 
					65f1cf2cbf | ||
| 
						 | 
					f04f5e990a | ||
| 
						 | 
					1854ebe77e | ||
| 
						 | 
					3500f2e3c4 | ||
| 
						 | 
					cfeefc9b81 | ||
| 
						 | 
					3ad6adfb57 | ||
| 
						 | 
					8a126f1166 | ||
| 
						 | 
					6315aabcf2 | ||
| 
						 | 
					a8c2344364 | ||
| 
						 | 
					2929b2569b | ||
| 
						 | 
					f14790d7b0 | ||
| 
						 | 
					8fb2e61801 | ||
| 
						 | 
					b3c94f9d9d | ||
| 
						 | 
					5b889f7f2d | ||
| 
						 | 
					0f531b5b48 | ||
| 
						 | 
					c6482c0d41 | ||
| 
						 | 
					b71748efd1 | ||
| 
						 | 
					1c4b9edc41 | ||
| 
						 | 
					2b464d93d1 | ||
| 
						 | 
					497f80ac34 | ||
| 
						 | 
					2be748769b | ||
| 
						 | 
					45a1083ee7 | ||
| 
						 | 
					3a45baa70d | ||
| 
						 | 
					0bc3a7ac2e | ||
| 
						 | 
					08f0579176 | ||
| 
						 | 
					d689cd0715 | ||
| 
						 | 
					e957f39f67 | ||
| 
						 | 
					416f09d3e6 | ||
| 
						 | 
					40cc5d36fd | ||
| 
						 | 
					62f9613dbc | ||
| 
						 | 
					7f31255eb2 | ||
| 
						 | 
					78382b4bbe | ||
| 
						 | 
					bd8e90857c | ||
| 
						 | 
					b7cc448ff8 | ||
| 
						 | 
					0ea582acbe | ||
| 
						 | 
					05c824db87 | ||
| 
						 | 
					829f6909bd | ||
| 
						 | 
					34f1ebc72f | ||
| 
						 | 
					c6e586ee0c | ||
| 
						 | 
					9180d932c6 | ||
| 
						 | 
					95df1b67a2 | ||
| 
						 | 
					bc400c3f30 | ||
| 
						 | 
					3a3db0e9ec | ||
| 
						 | 
					613e395ab8 | ||
| 
						 | 
					86c5de8b85 | ||
| 
						 | 
					44c8c42ab9 | ||
| 
						 | 
					31a82a663c | ||
| 
						 | 
					dafdf6512e | ||
| 
						 | 
					9caacb015a | ||
| 
						 | 
					2887770534 | ||
| 
						 | 
					fb440c9f82 | ||
| 
						 | 
					576c9c310f | ||
| 
						 | 
					ec1db9db1f | ||
| 
						 | 
					e1f70cf5e2 | ||
| 
						 | 
					a7cdbf5c38 | ||
| 
						 | 
					fe37adfde3 | ||
| 
						 | 
					315396ac6c | ||
| 
						 | 
					a7252f42ae | ||
| 
						 | 
					bffc66109e | ||
| 
						 | 
					0089c7f4ee | ||
| 
						 | 
					54f435340b | ||
| 
						 | 
					66d887d605 | ||
| 
						 | 
					c6dc5cc8ab | ||
| 
						 | 
					e0412bb726 | ||
| 
						 | 
					cc5cbd1bca | ||
| 
						 | 
					93fbfa5781 | ||
| 
						 | 
					30709caad6 | ||
| 
						 | 
					a647198f65 | ||
| 
						 | 
					7ad6ea6ff2 | ||
| 
						 | 
					ceee2c45cd | ||
| 
						 | 
					26dc161fde | ||
| 
						 | 
					b176ef05f2 | ||
| 
						 | 
					6d6e7a08c7 | ||
| 
						 | 
					eb75ec2349 | ||
| 
						 | 
					2a8bd4e329 | ||
| 
						 | 
					c247268499 | ||
| 
						 | 
					b2cb8920c2 | ||
| 
						 | 
					af4d93f256 | ||
| 
						 | 
					c8dd839acb | ||
| 
						 | 
					e43c3c38fb | ||
| 
						 | 
					9194782fdc | ||
| 
						 | 
					ec36d5b537 | ||
| 
						 | 
					6e5da1a860 | ||
| 
						 | 
					21f6e8a2d0 | ||
| 
						 | 
					18772c9e88 | ||
| 
						 | 
					5df4283b53 | ||
| 
						 | 
					6734bab3b2 | ||
| 
						 | 
					0a5fea5f96 | ||
| 
						 | 
					9b2762d7b9 | ||
| 
						 | 
					571bf7a71b | ||
| 
						 | 
					4ab3b9aa76 | ||
| 
						 | 
					88c018ee47 | ||
| 
						 | 
					cead52ef68 | ||
| 
						 | 
					9cf0ed6059 | ||
| 
						 | 
					2c1c8dccf7 | ||
| 
						 | 
					b87f9f6056 | ||
| 
						 | 
					427bf0171d | ||
| 
						 | 
					98c5445c75 | ||
| 
						 | 
					15ffb3bbab | ||
| 
						 | 
					97b570b999 | ||
| 
						 | 
					e8e6374a16 | ||
| 
						 | 
					d9f31f16c0 | ||
| 
						 | 
					1173198f51 | ||
| 
						 | 
					01a56d23e6 | ||
| 
						 | 
					bf050799ac | ||
| 
						 | 
					3697eca493 | ||
| 
						 | 
					de2b3506ea | ||
| 
						 | 
					bfbe2eb6e9 | ||
| 
						 | 
					8bd395f601 | ||
| 
						 | 
					735925d15b | ||
| 
						 | 
					448a3456a9 | ||
| 
						 | 
					e176b11b74 | ||
| 
						 | 
					cdc8771893 | ||
| 
						 | 
					789399d3f4 | ||
| 
						 | 
					dfa8624e83 | ||
| 
						 | 
					36b64bbd4f | ||
| 
						 | 
					651985f813 | ||
| 
						 | 
					9f2b49a7b3 | ||
| 
						 | 
					05c6361b0b | ||
| 
						 | 
					9621817253 | ||
| 
						 | 
					7e2e4a6b1a | ||
| 
						 | 
					656c71ca3f | ||
| 
						 | 
					6ce7055dcc | ||
| 
						 | 
					c848a65b5e | ||
| 
						 | 
					1ff99fcd50 | ||
| 
						 | 
					67342052d2 | ||
| 
						 | 
					ccf52b6784 | ||
| 
						 | 
					78aa58c914 | ||
| 
						 | 
					4291f24abd | ||
| 
						 | 
					f4211722f1 | ||
| 
						 | 
					71380a1325 | ||
| 
						 | 
					33e55c6a7d | ||
| 
						 | 
					cd32164cc6 | ||
| 
						 | 
					7c1348ac8f | ||
| 
						 | 
					2560061cfe | ||
| 
						 | 
					0c047b8847 | ||
| 
						 | 
					c64a08c286 | ||
| 
						 | 
					bb409e88d8 | ||
| 
						 | 
					af69eefcba | ||
| 
						 | 
					d9c071adec | ||
| 
						 | 
					833d19c21d | ||
| 
						 | 
					7245757174 | ||
| 
						 | 
					3d96cb7d48 | ||
| 
						 | 
					f565ab2dd5 | ||
| 
						 | 
					7ad0c51f48 | ||
| 
						 | 
					fea684c533 | ||
| 
						 | 
					4e8845fc0c | ||
| 
						 | 
					ffcc1cdb41 | ||
| 
						 | 
					afc90075ba | ||
| 
						 | 
					79acea2708 | ||
| 
						 | 
					a12063a540 | ||
| 
						 | 
					9826d83439 | ||
| 
						 | 
					84f7ded925 | ||
| 
						 | 
					59dd8ad752 | ||
| 
						 | 
					4afd26982e | ||
| 
						 | 
					17e4a7ea17 | ||
| 
						 | 
					3d67655cce | ||
| 
						 | 
					b5d7c69884 | ||
| 
						 | 
					b6759e2be7 | ||
| 
						 | 
					af853b0da7 | ||
| 
						 | 
					8d349798da | ||
| 
						 | 
					4aea628194 | ||
| 
						 | 
					008ddf628a | ||
| 
						 | 
					716496f263 | ||
| 
						 | 
					b3b325e560 | ||
| 
						 | 
					382ce985ac | ||
| 
						 | 
					54b7eca7a0 | ||
| 
						 | 
					f74e06bf11 | ||
| 
						 | 
					9c02649d18 | ||
| 
						 | 
					2c34704e41 | ||
| 
						 | 
					85d0041ff0 | ||
| 
						 | 
					67ff8b354e | ||
| 
						 | 
					08e7957571 | ||
| 
						 | 
					9c1f7089d8 | ||
| 
						 | 
					5381ac5f11 | ||
| 
						 | 
					a6f78d4eee | ||
| 
						 | 
					ae695e3566 | ||
| 
						 | 
					c82c3335e1 | ||
| 
						 | 
					f8246f504b | ||
| 
						 | 
					499458bcdb | ||
| 
						 | 
					37a53fd6a0 | ||
| 
						 | 
					5ec38fb2ea | ||
| 
						 | 
					11c0215bf8 | ||
| 
						 | 
					6a13b6c346 | ||
| 
						 | 
					a103097ee5 | ||
| 
						 | 
					7efad0d84c | ||
| 
						 | 
					42c88cd072 | ||
| 
						 | 
					2541c54e79 | ||
| 
						 | 
					33529e3d8e | ||
| 
						 | 
					84c1b82081 | ||
| 
						 | 
					a97a1439ae | ||
| 
						 | 
					2fd2910010 | ||
| 
						 | 
					fbbda155e0 | ||
| 
						 | 
					a49c3c0fae | ||
| 
						 | 
					baf5998d59 | ||
| 
						 | 
					4c5acef241 | ||
| 
						 | 
					9839e272cf | ||
| 
						 | 
					b57e79ff14 | ||
| 
						 | 
					43824acb4e | ||
| 
						 | 
					d8f509e749 | ||
| 
						 | 
					eb91c93c2e | ||
| 
						 | 
					79de983b6f | ||
| 
						 | 
					fdb3acf016 | ||
| 
						 | 
					2807d1f58a | ||
| 
						 | 
					93f913926e | ||
| 
						 | 
					33ca04f379 | ||
| 
						 | 
					398cb30c72 | ||
| 
						 | 
					f67bb30314 | ||
| 
						 | 
					4578d7b9f0 | ||
| 
						 | 
					dcdfc154c3 | ||
| 
						 | 
					696ba32779 | ||
| 
						 | 
					dcfe55539f | ||
| 
						 | 
					ff84b1f1b2 | ||
| 
						 | 
					3bca9c47f4 | ||
| 
						 | 
					d4d7fdb43b | ||
| 
						 | 
					d65dab5777 | ||
| 
						 | 
					638ca019ef | 
@@ -1,66 +0,0 @@
 | 
			
		||||
goto %1
 | 
			
		||||
 | 
			
		||||
:install
 | 
			
		||||
rem Check pip
 | 
			
		||||
if "%buildsystem%" == "scons" (
 | 
			
		||||
    python --version
 | 
			
		||||
    python -m pip --version
 | 
			
		||||
    rem Install Mako
 | 
			
		||||
    python -m pip install Mako==1.0.7
 | 
			
		||||
    rem Install pywin32 extensions, needed by SCons
 | 
			
		||||
    python -m pip install pypiwin32
 | 
			
		||||
    rem Install python wheels, necessary to install SCons via pip
 | 
			
		||||
    python -m pip install wheel
 | 
			
		||||
    rem Install SCons
 | 
			
		||||
    python -m pip install scons==3.0.1
 | 
			
		||||
    call scons --version
 | 
			
		||||
) else (
 | 
			
		||||
    python --version
 | 
			
		||||
    python -m pip install Mako meson
 | 
			
		||||
    meson --version
 | 
			
		||||
 | 
			
		||||
    rem Install pkg-config, which meson requires even on windows
 | 
			
		||||
    cinst -y pkgconfiglite
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
rem Install flex/bison
 | 
			
		||||
set WINFLEXBISON_ARCHIVE=win_flex_bison-%WINFLEXBISON_VERSION%.zip
 | 
			
		||||
if not exist "%WINFLEXBISON_ARCHIVE%" appveyor DownloadFile "https://github.com/lexxmark/winflexbison/releases/download/v%WINFLEXBISON_VERSION%/%WINFLEXBISON_ARCHIVE%"
 | 
			
		||||
7z x -y -owinflexbison\ "%WINFLEXBISON_ARCHIVE%" > nul
 | 
			
		||||
set Path=%CD%\winflexbison;%Path%
 | 
			
		||||
win_flex --version
 | 
			
		||||
win_bison --version
 | 
			
		||||
rem Download and extract LLVM
 | 
			
		||||
if not exist "%LLVM_ARCHIVE%" appveyor DownloadFile "https://people.freedesktop.org/~jrfonseca/llvm/%LLVM_ARCHIVE%"
 | 
			
		||||
7z x -y "%LLVM_ARCHIVE%" > nul
 | 
			
		||||
if "%buildsystem%" == "scons" (
 | 
			
		||||
    mkdir llvm\bin
 | 
			
		||||
    set LLVM=%CD%\llvm
 | 
			
		||||
) else (
 | 
			
		||||
    move llvm subprojects\
 | 
			
		||||
    copy .appveyor\llvm-wrap.meson subprojects\llvm\meson.build
 | 
			
		||||
)
 | 
			
		||||
goto :eof
 | 
			
		||||
 | 
			
		||||
:build_script
 | 
			
		||||
if "%buildsystem%" == "scons" (
 | 
			
		||||
    call scons -j%NUMBER_OF_PROCESSORS% MSVC_VERSION=14.1 llvm=1
 | 
			
		||||
) else (
 | 
			
		||||
    call "C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\Tools\VsDevCmd.bat" -arch=x86
 | 
			
		||||
    rem We use default-library as static to affect any wraps (such as expat and zlib)
 | 
			
		||||
    rem it would be better if we could set subprojects buildtype independently,
 | 
			
		||||
    rem but I haven't written that patch yet :)
 | 
			
		||||
    call meson builddir --backend=vs2017 --default-library=static -Dbuild-tests=true -Db_vscrt=mtd --buildtype=release -Dllvm=true -Dgallium-drivers=swrast -Dosmesa=gallium
 | 
			
		||||
    pushd builddir
 | 
			
		||||
    call msbuild mesa.sln /m
 | 
			
		||||
    popd
 | 
			
		||||
)
 | 
			
		||||
goto :eof
 | 
			
		||||
 | 
			
		||||
:test_script
 | 
			
		||||
if "%buildsystem%" == "scons" (
 | 
			
		||||
    call scons -j%NUMBER_OF_PROCESSORS% MSVC_VERSION=14.1 llvm=1 check
 | 
			
		||||
) else (
 | 
			
		||||
    call meson test -C builddir
 | 
			
		||||
)
 | 
			
		||||
goto :eof
 | 
			
		||||
@@ -1,36 +0,0 @@
 | 
			
		||||
# A meson.build file for binary wrapping the LLVM used in the appvyeor CI
 | 
			
		||||
project('llvm', ['cpp'])
 | 
			
		||||
 | 
			
		||||
cpp = meson.get_compiler('cpp')
 | 
			
		||||
 | 
			
		||||
_deps = []
 | 
			
		||||
_search = join_paths(meson.current_source_dir(), 'lib')
 | 
			
		||||
foreach d : ['LLVMAnalysis', 'LLVMAsmParser', 'LLVMAsmPrinter',
 | 
			
		||||
             'LLVMBinaryFormat', 'LLVMBitReader', 'LLVMBitWriter',
 | 
			
		||||
             'LLVMCodeGen', 'LLVMCore', 'LLVMCoroutines', 'LLVMCoverage',
 | 
			
		||||
             'LLVMDebugInfoCodeView', 'LLVMDebugInfoDWARF',
 | 
			
		||||
             'LLVMDebugInfoMSF', 'LLVMDebugInfoPDB', 'LLVMDemangle',
 | 
			
		||||
             'LLVMDlltoolDriver', 'LLVMExecutionEngine', 'LLVMGlobalISel',
 | 
			
		||||
             'LLVMInstCombine', 'LLVMInstrumentation', 'LLVMInterpreter',
 | 
			
		||||
             'LLVMipo', 'LLVMIRReader', 'LLVMLibDriver', 'LLVMLineEditor',
 | 
			
		||||
             'LLVMLinker', 'LLVMLTO', 'LLVMMCDisassembler', 'LLVMMCJIT',
 | 
			
		||||
             'LLVMMC', 'LLVMMCParser', 'LLVMMIRParser', 'LLVMObjCARCOpts',
 | 
			
		||||
             'LLVMObject', 'LLVMObjectYAML', 'LLVMOption', 'LLVMOrcJIT',
 | 
			
		||||
             'LLVMPasses', 'LLVMProfileData', 'LLVMRuntimeDyld',
 | 
			
		||||
             'LLVMScalarOpts', 'LLVMSelectionDAG', 'LLVMSupport',
 | 
			
		||||
             'LLVMSymbolize', 'LLVMTableGen', 'LLVMTarget',
 | 
			
		||||
             'LLVMTransformUtils', 'LLVMVectorize', 'LLVMX86AsmParser',
 | 
			
		||||
             'LLVMX86AsmPrinter', 'LLVMX86CodeGen', 'LLVMX86Desc',
 | 
			
		||||
             'LLVMX86Disassembler', 'LLVMX86Info', 'LLVMX86Utils',
 | 
			
		||||
             'LLVMXRay']
 | 
			
		||||
  _deps += cpp.find_library(d, dirs : _search)
 | 
			
		||||
endforeach
 | 
			
		||||
 | 
			
		||||
dep_llvm = declare_dependency(
 | 
			
		||||
  include_directories : include_directories('include'),
 | 
			
		||||
  dependencies : _deps,
 | 
			
		||||
  version : '5.0.1',
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
has_rtti = false
 | 
			
		||||
irbuilder_h = files('include/llvm/IR/IRBuilder.h')
 | 
			
		||||
@@ -1,18 +0,0 @@
 | 
			
		||||
((nil . ((show-trailing-whitespace . t)))
 | 
			
		||||
 (prog-mode
 | 
			
		||||
  (indent-tabs-mode . nil)
 | 
			
		||||
  (tab-width . 8)
 | 
			
		||||
  (c-basic-offset . 3)
 | 
			
		||||
  (c-file-style . "stroustrup")
 | 
			
		||||
  (fill-column . 78)
 | 
			
		||||
  (eval . (progn
 | 
			
		||||
	    (c-set-offset 'case-label '0)
 | 
			
		||||
	    (c-set-offset 'innamespace '0)
 | 
			
		||||
	    (c-set-offset 'inline-open '0)))
 | 
			
		||||
  (whitespace-style face indentation)
 | 
			
		||||
  (whitespace-line-column . 79)
 | 
			
		||||
  (eval ignore-errors
 | 
			
		||||
        (require 'whitespace)
 | 
			
		||||
        (whitespace-mode 1)))
 | 
			
		||||
 (makefile-mode (indent-tabs-mode . t))
 | 
			
		||||
 )
 | 
			
		||||
@@ -1,44 +0,0 @@
 | 
			
		||||
# To use this config on you editor, follow the instructions at:
 | 
			
		||||
# http://editorconfig.org
 | 
			
		||||
 | 
			
		||||
root = true
 | 
			
		||||
 | 
			
		||||
[*]
 | 
			
		||||
charset = utf-8
 | 
			
		||||
insert_final_newline = true
 | 
			
		||||
tab_width = 8
 | 
			
		||||
 | 
			
		||||
[*.{c,h,cpp,hpp,cc,hh}]
 | 
			
		||||
indent_style = space
 | 
			
		||||
indent_size = 3
 | 
			
		||||
max_line_length = 78
 | 
			
		||||
 | 
			
		||||
[{Makefile*,*.mk}]
 | 
			
		||||
indent_style = tab
 | 
			
		||||
 | 
			
		||||
[{*.py,SCons*}]
 | 
			
		||||
indent_style = space
 | 
			
		||||
indent_size = 4
 | 
			
		||||
 | 
			
		||||
[*.pl]
 | 
			
		||||
indent_style = space
 | 
			
		||||
indent_size = 4
 | 
			
		||||
 | 
			
		||||
[*.m4]
 | 
			
		||||
indent_style = space
 | 
			
		||||
indent_size = 2
 | 
			
		||||
 | 
			
		||||
[*.yml]
 | 
			
		||||
indent_style = space
 | 
			
		||||
indent_size = 2
 | 
			
		||||
 | 
			
		||||
[*.html]
 | 
			
		||||
indent_style = space
 | 
			
		||||
indent_size = 2
 | 
			
		||||
 | 
			
		||||
[*.patch]
 | 
			
		||||
trim_trailing_whitespace = false
 | 
			
		||||
 | 
			
		||||
[{meson.build,meson_options.txt}]
 | 
			
		||||
indent_style = space
 | 
			
		||||
indent_size = 2
 | 
			
		||||
							
								
								
									
										4
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										4
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							@@ -1,4 +0,0 @@
 | 
			
		||||
*.pyc
 | 
			
		||||
*.pyo
 | 
			
		||||
*.out
 | 
			
		||||
build
 | 
			
		||||
							
								
								
									
										1008
									
								
								.gitlab-ci.yml
									
									
									
									
									
								
							
							
						
						
									
										1008
									
								
								.gitlab-ci.yml
									
									
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							@@ -1,212 +0,0 @@
 | 
			
		||||
# Mesa testing
 | 
			
		||||
 | 
			
		||||
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
 | 
			
		||||
marge-bot.
 | 
			
		||||
 | 
			
		||||
There are currently 4 automated testing systems deployed for Mesa.
 | 
			
		||||
LAVA and gitlab-runner on the DUTs are used in pre-merge testing and
 | 
			
		||||
are described in this document.  Managing bare metal using
 | 
			
		||||
gitlab-runner is described under [bare-metal/README.md].  Intel also
 | 
			
		||||
has a jenkins-based CI system with restricted access that isn't
 | 
			
		||||
connected to gitlab.
 | 
			
		||||
 | 
			
		||||
## Mesa testing using LAVA
 | 
			
		||||
 | 
			
		||||
[LAVA](https://lavasoftware.org/) is a system for functional testing
 | 
			
		||||
of boards including deploying custom bootloaders and kernels.  This is
 | 
			
		||||
particularly relevant to testing Mesa because we often need to change
 | 
			
		||||
kernels for UAPI changes (and this lets us do full testing of a new
 | 
			
		||||
kernel during development), and our workloads can easily take down
 | 
			
		||||
boards when mistakes are made (kernel oopses, OOMs that take out
 | 
			
		||||
critical system services).
 | 
			
		||||
 | 
			
		||||
### Mesa-LAVA software architecture
 | 
			
		||||
 | 
			
		||||
The gitlab-runner will run on some host that has access to the LAVA
 | 
			
		||||
lab, with tags like "lava-mesa-boardname" to control only taking in
 | 
			
		||||
jobs for the hardware that the LAVA lab contains.  The gitlab-runner
 | 
			
		||||
spawns a docker container with lava-cli in it, and connects to the
 | 
			
		||||
LAVA lab using a predefined token to submit jobs under a specific
 | 
			
		||||
device type.
 | 
			
		||||
 | 
			
		||||
The LAVA instance manages scheduling those jobs to the boards present.
 | 
			
		||||
For a job, it will deploy the kernel, device tree, and the ramdisk
 | 
			
		||||
containing the CTS.
 | 
			
		||||
 | 
			
		||||
### Deploying a new Mesa-LAVA lab
 | 
			
		||||
 | 
			
		||||
You'll want to start with setting up your LAVA instance and getting
 | 
			
		||||
some boards booting using test jobs.  Start with the stock QEMU
 | 
			
		||||
examples to make sure your instance works at all.  Then, you'll need
 | 
			
		||||
to define your actual boards.
 | 
			
		||||
 | 
			
		||||
The device type in lava-gitlab-ci.yml is the device type you create in
 | 
			
		||||
your LAVA instance, which doesn't have to match the board's name in
 | 
			
		||||
`/etc/lava-dispatcher/device-types`.  You create your boards under
 | 
			
		||||
that device type and the Mesa jobs will be scheduled to any of them.
 | 
			
		||||
Instantiate your boards by creating them in the UI or at the command
 | 
			
		||||
line attached to that device type, then populate their dictionary
 | 
			
		||||
(using an "extends" line probably referencing the board's template in
 | 
			
		||||
`/etc/lava-dispatcher/device-types`).  Now, go find a relevant
 | 
			
		||||
healthcheck job for your board as a test job definition, or cobble
 | 
			
		||||
something together from a board that boots using the same boot_method
 | 
			
		||||
and some public images, and figure out how to get your boards booting.
 | 
			
		||||
 | 
			
		||||
Once you can boot your board using a custom job definition, it's time
 | 
			
		||||
to connect Mesa CI to it.  Install gitlab-runner and register as a
 | 
			
		||||
shared runner (you'll need a gitlab admin for help with this).  The
 | 
			
		||||
runner *must* have a tag (like "mesa-lava-db410c") to restrict the
 | 
			
		||||
jobs it takes or it will grab random jobs from tasks across fd.o, and
 | 
			
		||||
your runner isn't ready for that.
 | 
			
		||||
 | 
			
		||||
The runner will be running an ARM docker image (we haven't done any
 | 
			
		||||
x86 LAVA yet, so that isn't documented).  If your host for the
 | 
			
		||||
gitlab-runner is x86, then you'll need to install qemu-user-static and
 | 
			
		||||
the binfmt support.
 | 
			
		||||
 | 
			
		||||
The docker image will need access to the lava instance.  If it's on a
 | 
			
		||||
public network it should be fine.  If you're running the LAVA instance
 | 
			
		||||
on localhost, you'll need to set `network_mode="host"` in
 | 
			
		||||
`/etc/gitlab-runner/config.toml` so it can access localhost.  Create a
 | 
			
		||||
gitlab-runner user in your LAVA instance, log in under that user on
 | 
			
		||||
the web interface, and create an API token.  Copy that into a
 | 
			
		||||
`lavacli.yaml`:
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
default:
 | 
			
		||||
  token: <token contents>
 | 
			
		||||
  uri: <url to the instance>
 | 
			
		||||
  username: gitlab-runner
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
Add a volume mount of that `lavacli.yaml` to
 | 
			
		||||
`/etc/gitlab-runner/config.toml` so that the docker container can
 | 
			
		||||
access it.  You probably have a `volumes = ["/cache"]` already, so now it would be
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
  volumes = ["/home/anholt/lava-config/lavacli.yaml:/root/.config/lavacli.yaml", "/cache"]
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
Note that this token is visible to anybody that can submit MRs to
 | 
			
		||||
Mesa!  It is not an actual secret.  We could just bake it into the
 | 
			
		||||
gitlab CI yml, but this way the current method of connecting to the
 | 
			
		||||
LAVA instance is separated from the Mesa branches (particularly
 | 
			
		||||
relevant as we have many stable branches all using CI).
 | 
			
		||||
 | 
			
		||||
Now it's time to define your test runner in
 | 
			
		||||
`.gitlab-ci/lava-gitlab-ci.yml`.
 | 
			
		||||
 | 
			
		||||
## Mesa testing using gitlab-runner on DUTs
 | 
			
		||||
 | 
			
		||||
### 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,47 +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
 | 
			
		||||
 | 
			
		||||
CONFIG_FW_LOADER_COMPRESS=y
 | 
			
		||||
@@ -1,118 +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_DRM_MSM=y
 | 
			
		||||
CONFIG_DRM_I2C_ADV7511=y
 | 
			
		||||
CONFIG_DRM_I2C_ADV7533=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
 | 
			
		||||
 | 
			
		||||
# Cheza platform bits
 | 
			
		||||
CONFIG_QCOM_RPMHPD=y
 | 
			
		||||
CONFIG_SDM_GPUCC_845=y
 | 
			
		||||
CONFIG_SDM_VIDEOCC_845=y
 | 
			
		||||
CONFIG_SDM_DISPCC_845=y
 | 
			
		||||
CONFIG_SDM_LPASSCC_845=y
 | 
			
		||||
CONFIG_SDM_CAMCC_845=y
 | 
			
		||||
CONFIG_RESET_QCOM_PDC=y
 | 
			
		||||
CONFIG_DRM_TI_SN65DSI86=y
 | 
			
		||||
CONFIG_I2C_QCOM_GENI=y
 | 
			
		||||
CONFIG_SPI_QCOM_GENI=y
 | 
			
		||||
CONFIG_PHY_QCOM_QUSB2=y
 | 
			
		||||
CONFIG_PHY_QCOM_QMP=y
 | 
			
		||||
CONFIG_QCOM_LLCC=y
 | 
			
		||||
CONFIG_QCOM_SPMI_TEMP_ALARM=y
 | 
			
		||||
CONFIG_POWER_RESET_QCOM_PON=y
 | 
			
		||||
CONFIG_RTC_DRV_PM8XXX=y
 | 
			
		||||
CONFIG_INTERCONNECT=y
 | 
			
		||||
CONFIG_INTERCONNECT_QCOM_SDM845=y
 | 
			
		||||
CONFIG_QCOM_WDT=y
 | 
			
		||||
 | 
			
		||||
# db410c ethernet
 | 
			
		||||
CONFIG_USB_RTL8152=y
 | 
			
		||||
 | 
			
		||||
CONFIG_ARCH_ALPINE=n
 | 
			
		||||
CONFIG_ARCH_BCM2835=n
 | 
			
		||||
CONFIG_ARCH_BCM_IPROC=n
 | 
			
		||||
CONFIG_ARCH_BERLIN=n
 | 
			
		||||
CONFIG_ARCH_BRCMSTB=n
 | 
			
		||||
CONFIG_ARCH_EXYNOS=n
 | 
			
		||||
CONFIG_ARCH_K3=n
 | 
			
		||||
CONFIG_ARCH_LAYERSCAPE=n
 | 
			
		||||
CONFIG_ARCH_LG1K=n
 | 
			
		||||
CONFIG_ARCH_HISI=n
 | 
			
		||||
CONFIG_ARCH_MEDIATEK=n
 | 
			
		||||
CONFIG_ARCH_MVEBU=n
 | 
			
		||||
CONFIG_ARCH_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
 | 
			
		||||
 | 
			
		||||
# Strip out some stuff we don't need for graphics testing, to reduce
 | 
			
		||||
# the build.
 | 
			
		||||
CONFIG_CAN=n
 | 
			
		||||
CONFIG_WIRELESS=n
 | 
			
		||||
CONFIG_RFKILL=n
 | 
			
		||||
CONFIG_WLAN=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
 | 
			
		||||
 | 
			
		||||
CONFIG_FW_LOADER_COMPRESS=y
 | 
			
		||||
CONFIG_FW_LOADER_USER_HELPER=n
 | 
			
		||||
CONFIG_SUNRPC_DEBUG=y
 | 
			
		||||
@@ -1,2 +0,0 @@
 | 
			
		||||
[*.sh]
 | 
			
		||||
indent_size = 2
 | 
			
		||||
@@ -1,124 +0,0 @@
 | 
			
		||||
# bare-metal Mesa testing
 | 
			
		||||
 | 
			
		||||
Testing Mesa with gitlab-runner running on the devices being tested
 | 
			
		||||
(DUTs) proved to be too unstable, so this set of scripts is for
 | 
			
		||||
running Mesa testing on bare-metal boards connected to a separate
 | 
			
		||||
system using gitlab-runner.  Currently only "fastboot" and "ChromeOS
 | 
			
		||||
Servo" devices are supported.
 | 
			
		||||
 | 
			
		||||
In comparison with LAVA, this doesn't involve maintaining a separate
 | 
			
		||||
webservice with its own job scheduler and replicating jobs between the
 | 
			
		||||
two.  It also places more of the board support in git, instead of
 | 
			
		||||
webservice configuration.  On the other hand, the serial interactions
 | 
			
		||||
and bootloader support are more primitive.
 | 
			
		||||
 | 
			
		||||
## Requirements (fastboot)
 | 
			
		||||
 | 
			
		||||
This testing requires power control of the DUTs by the gitlab-runner
 | 
			
		||||
machine, since this is what we use to reset the system and get back to
 | 
			
		||||
a pristine state at the start of testing.
 | 
			
		||||
 | 
			
		||||
We require access to the console output from the gitlab-runner system,
 | 
			
		||||
since that is how we get the final results back from the tests.  You
 | 
			
		||||
should probably have the console on a serial connection, so that you
 | 
			
		||||
can see bootloader progress.
 | 
			
		||||
 | 
			
		||||
The boards need to be able to have a kernel/initramfs supplied by the
 | 
			
		||||
gitlab-runner system, since the initramfs is what contains the Mesa
 | 
			
		||||
testing payload.
 | 
			
		||||
 | 
			
		||||
The boards should have networking, so that (in a future iteration of
 | 
			
		||||
this code) we can extract the dEQP .xml results to artifacts on
 | 
			
		||||
gitlab.
 | 
			
		||||
 | 
			
		||||
## Requirements (servo)
 | 
			
		||||
 | 
			
		||||
For servo-connected boards, we can use the EC connection for power
 | 
			
		||||
control to reboot the board.  However, loading a kernel is not as easy
 | 
			
		||||
as fastboot, so we assume your bootloader can do TFTP, and that your
 | 
			
		||||
gitlab-runner mounts the runner's tftp directory specific to the board
 | 
			
		||||
at /tftp in the container.
 | 
			
		||||
 | 
			
		||||
Since we're going the TFTP route, we also use NFS root.  This avoids
 | 
			
		||||
packing the rootfs and sending it to the board as a ramdisk, which
 | 
			
		||||
means we can support larger rootfses (for piglit or tracie testing),
 | 
			
		||||
at the cost of needing more storage on the runner.
 | 
			
		||||
 | 
			
		||||
Telling the board about where its TFTP and NFS should come from is
 | 
			
		||||
done using dnsmasq on the runner host.  For example, this snippet in
 | 
			
		||||
the dnsmasq.conf.d in the google farm, with the gitlab-runner host we
 | 
			
		||||
call "servo".
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
dhcp-host=1c:69:7a:0d:a3:d3,10.42.0.10,set:servo
 | 
			
		||||
 | 
			
		||||
# Fixed dhcp addresses for my sanity, and setting a tag for
 | 
			
		||||
# specializing other DHCP options
 | 
			
		||||
dhcp-host=a0:ce:c8:c8:d9:5d,10.42.0.11,set:cheza1
 | 
			
		||||
dhcp-host=a0:ce:c8:c8:d8:81,10.42.0.12,set:cheza2
 | 
			
		||||
 | 
			
		||||
# Specify the next server, watch out for the double ',,'.  The
 | 
			
		||||
# filename didn't seem to get picked up by the bootloader, so we use
 | 
			
		||||
# tftp-unique-root and mount directories like
 | 
			
		||||
# /srv/tftp/10.42.0.11/jwerner/cheza as /tftp in the job containers.
 | 
			
		||||
tftp-unique-root
 | 
			
		||||
dhcp-boot=tag:cheza1,cheza1/vmlinuz,,10.42.0.10
 | 
			
		||||
dhcp-boot=tag:cheza2,cheza2/vmlinuz,,10.42.0.10
 | 
			
		||||
 | 
			
		||||
dhcp-option=tag:cheza1,option:root-path,/srv/nfs/cheza1
 | 
			
		||||
dhcp-option=tag:cheza2,option:root-path,/srv/nfs/cheza2
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
## Setup
 | 
			
		||||
 | 
			
		||||
Each board will be registered in fd.o gitlab.  You'll want something
 | 
			
		||||
like this to register a fastboot board:
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
sudo gitlab-runner register \
 | 
			
		||||
     --url https://gitlab.freedesktop.org \
 | 
			
		||||
     --registration-token $1 \
 | 
			
		||||
     --name MY_BOARD_NAME \
 | 
			
		||||
     --tag-list MY_BOARD_TAG \
 | 
			
		||||
     --executor docker \
 | 
			
		||||
     --docker-image "alpine:latest" \
 | 
			
		||||
     --docker-volumes "/dev:/dev" \
 | 
			
		||||
     --docker-network-mode "host" \
 | 
			
		||||
     --docker-privileged \
 | 
			
		||||
     --non-interactive
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
For a servo board, you'll need to also volume mount the board's NFS
 | 
			
		||||
root dir at /nfs and TFTP kernel directory at /tftp.
 | 
			
		||||
 | 
			
		||||
The registration token has to come from a fd.o gitlab admin going to
 | 
			
		||||
https://gitlab.freedesktop.org/admin/runners
 | 
			
		||||
 | 
			
		||||
The name scheme for Google's lab is google-freedreno-boardname-n, and
 | 
			
		||||
our tag is something like google-freedreno-db410c.  The tag is what
 | 
			
		||||
identifies a board type so that board-specific jobs can be dispatched
 | 
			
		||||
into that pool.
 | 
			
		||||
 | 
			
		||||
We need privileged mode and the /dev bind mount in order to get at the
 | 
			
		||||
serial console and fastboot USB devices (--device arguments don't
 | 
			
		||||
apply to devices that show up after container start, which is the case
 | 
			
		||||
with fastboot, and the servo serial devices are acctually links to
 | 
			
		||||
/dev/pts).  We use host network mode so that we can (in the future)
 | 
			
		||||
spin up a server to collect XML results for fastboot.
 | 
			
		||||
 | 
			
		||||
Once you've added your boards, you're going to need to add a little
 | 
			
		||||
more customization in `/etc/gitlab-runner/config.toml`.  First, add
 | 
			
		||||
`concurrent = <number of boards>` at the top ("we should have up to
 | 
			
		||||
this many jobs running managed by this gitlab-runner").  Then for each
 | 
			
		||||
board's runner, set `limit = 1` ("only 1 job served by this board at a
 | 
			
		||||
time").  Finally, add the board-specific environment variables
 | 
			
		||||
required by your bare-metal script, something like:
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
[[runners]]
 | 
			
		||||
  name = "google-freedreno-db410c-1"
 | 
			
		||||
  environment = ["BM_SERIAL=/dev/ttyDB410c8", "BM_POWERUP=google-power-up.sh 8", "BM_FASTBOOT_SERIAL=15e9e390"]
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
Once you've updated your runners' configs, restart with `sudo service
 | 
			
		||||
gitlab-runner restart`
 | 
			
		||||
@@ -1,97 +0,0 @@
 | 
			
		||||
#!/bin/bash
 | 
			
		||||
 | 
			
		||||
# Boot script for Chrome OS devices attached to a servo debug connector, using
 | 
			
		||||
# NFS and TFTP to boot.
 | 
			
		||||
 | 
			
		||||
# We're run from the root of the repo, make a helper var for our paths
 | 
			
		||||
BM=$CI_PROJECT_DIR/.gitlab-ci/bare-metal
 | 
			
		||||
 | 
			
		||||
# Runner config checks
 | 
			
		||||
if [ -z "$BM_SERIAL" ]; then
 | 
			
		||||
  echo "Must set BM_SERIAL in your gitlab-runner config.toml [[runners]] environment"
 | 
			
		||||
  echo "This is the CPU serial device."
 | 
			
		||||
  exit 1
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
if [ -z "$BM_SERIAL_EC" ]; then
 | 
			
		||||
  echo "Must set BM_SERIAL in your gitlab-runner config.toml [[runners]] environment"
 | 
			
		||||
  echo "This is the EC serial device for controlling board power"
 | 
			
		||||
  exit 1
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
if [ ! -d /nfs ]; then
 | 
			
		||||
  echo "NFS rootfs directory needs to be mounted at /nfs by the gitlab runner"
 | 
			
		||||
  exit 1
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
if [ ! -d /tftp ]; then
 | 
			
		||||
  echo "TFTP directory for this board needs to be mounted at /tftp by the gitlab runner"
 | 
			
		||||
  exit 1
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
# job config checks
 | 
			
		||||
if [ -z "$BM_KERNEL" ]; then
 | 
			
		||||
  echo "Must set BM_KERNEL to your board's kernel FIT image"
 | 
			
		||||
  exit 1
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
if [ -z "$BM_ROOTFS" ]; then
 | 
			
		||||
  echo "Must set BM_ROOTFS to your board's rootfs directory in the job's variables"
 | 
			
		||||
  exit 1
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
if [ -z "$BM_CMDLINE" ]; then
 | 
			
		||||
  echo "Must set BM_CMDLINE to your board's kernel command line arguments"
 | 
			
		||||
  exit 1
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
set -ex
 | 
			
		||||
 | 
			
		||||
# Create the rootfs in the NFS directory.  rm to make sure it's in a pristine
 | 
			
		||||
# state, since it's volume-mounted on the host.
 | 
			
		||||
rm -rf /nfs/*
 | 
			
		||||
mkdir -p /nfs/results
 | 
			
		||||
. $BM/rootfs-setup.sh /nfs
 | 
			
		||||
 | 
			
		||||
# Set up the TFTP kernel/cmdline.  When we support more than one board with
 | 
			
		||||
# this method, we'll need to do some check on the runner name or something.
 | 
			
		||||
rm -rf /tftp/*
 | 
			
		||||
cp $BM_KERNEL /tftp/vmlinuz
 | 
			
		||||
echo "$BM_CMDLINE" > /tftp/cmdline
 | 
			
		||||
 | 
			
		||||
# Start watching serials, and power up the device.
 | 
			
		||||
$BM/serial-buffer.py $BM_SERIAL_EC | tee serial-ec-output.txt | sed -u 's|^|SERIAL-EC> |g' &
 | 
			
		||||
$BM/serial-buffer.py $BM_SERIAL | tee serial-output.txt | sed -u 's|^|SERIAL-CPU> |g'  &
 | 
			
		||||
while [ ! -e serial-output.txt ]; do
 | 
			
		||||
  sleep 1
 | 
			
		||||
done
 | 
			
		||||
# Flush any partial commands in the EC's prompt, then ask for a reboot.
 | 
			
		||||
$BM/write-serial.py $BM_SERIAL_EC ""
 | 
			
		||||
$BM/write-serial.py $BM_SERIAL_EC reboot
 | 
			
		||||
 | 
			
		||||
# This is emitted right when the bootloader pauses to check for input.  Emit a
 | 
			
		||||
# ^N character to request network boot, because we don't have a
 | 
			
		||||
# direct-to-netboot firmware on cheza.
 | 
			
		||||
$BM/expect-output.sh serial-output.txt "load_archive: loading locale_en.bin"
 | 
			
		||||
$BM/write-serial.py $BM_SERIAL `printf '\016'`
 | 
			
		||||
 | 
			
		||||
# Wait for the device to complete the deqp run
 | 
			
		||||
$BM/expect-output.sh serial-output.txt "DEQP RESULT"
 | 
			
		||||
 | 
			
		||||
# power down the CPU on the device
 | 
			
		||||
$BM/write-serial.py $BM_SERIAL_EC 'power off'
 | 
			
		||||
 | 
			
		||||
set -ex
 | 
			
		||||
 | 
			
		||||
# Bring artifacts back from the NFS dir to the build dir where gitlab-runner
 | 
			
		||||
# will look for them.  Note that results/ may already exist, so be careful
 | 
			
		||||
# with cp.
 | 
			
		||||
mkdir -p results
 | 
			
		||||
cp -Rp /nfs/results/. results/
 | 
			
		||||
 | 
			
		||||
set +e
 | 
			
		||||
if grep -q "DEQP RESULT: pass" serial-output.txt; then
 | 
			
		||||
   exit 0
 | 
			
		||||
else
 | 
			
		||||
   exit 1
 | 
			
		||||
fi
 | 
			
		||||
@@ -1,9 +0,0 @@
 | 
			
		||||
#!/bin/bash
 | 
			
		||||
 | 
			
		||||
set -e
 | 
			
		||||
 | 
			
		||||
echo "Waiting for $1 to say '$2'"
 | 
			
		||||
 | 
			
		||||
while ! grep -q "$2" $1; do
 | 
			
		||||
  sleep 2
 | 
			
		||||
done
 | 
			
		||||
@@ -1,88 +0,0 @@
 | 
			
		||||
#!/bin/bash
 | 
			
		||||
 | 
			
		||||
BM=$CI_PROJECT_DIR/.gitlab-ci/bare-metal
 | 
			
		||||
 | 
			
		||||
if [ -z "$BM_SERIAL" ]; then
 | 
			
		||||
  echo "Must set BM_SERIAL in your gitlab-runner config.toml [[runners]] environment"
 | 
			
		||||
  echo "This is the serial device to talk to for waiting for fastboot to be ready and logging from the kernel."
 | 
			
		||||
  exit 1
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
if [ -z "$BM_POWERUP" ]; then
 | 
			
		||||
  echo "Must set BM_POWERUP in your gitlab-runner config.toml [[runners]] environment"
 | 
			
		||||
  echo "This is a shell script that should reset the device and begin its boot sequence"
 | 
			
		||||
  echo "such that it pauses at fastboot."
 | 
			
		||||
  exit 1
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
if [ -z "$BM_POWERDOWN" ]; then
 | 
			
		||||
  echo "Must set BM_POWERDOWN in your gitlab-runner config.toml [[runners]] environment"
 | 
			
		||||
  echo "This is a shell script that should power off the device."
 | 
			
		||||
  exit 1
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
if [ -z "$BM_FASTBOOT_SERIAL" ]; then
 | 
			
		||||
  echo "Must set BM_FASTBOOT_SERIAL in your gitlab-runner config.toml [[runners]] environment"
 | 
			
		||||
  echo "This must be the a stable-across-resets fastboot serial number."
 | 
			
		||||
  exit 1
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
if [ -z "$BM_KERNEL" ]; then
 | 
			
		||||
  echo "Must set BM_KERNEL to your board's kernel vmlinuz or Image.gz in the job's variables:"
 | 
			
		||||
  exit 1
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
if [ -z "$BM_DTB" ]; then
 | 
			
		||||
  echo "Must set BM_DTB to your board's DTB file in the job's variables:"
 | 
			
		||||
  exit 1
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
if [ -z "$BM_ROOTFS" ]; then
 | 
			
		||||
  echo "Must set BM_ROOTFS to your board's rootfs directory in the job's variables:"
 | 
			
		||||
  exit 1
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
set -ex
 | 
			
		||||
 | 
			
		||||
# Create the rootfs in a temp dir
 | 
			
		||||
mkdir rootfs
 | 
			
		||||
. .gitlab-ci/bare-metal/rootfs-setup.sh rootfs
 | 
			
		||||
 | 
			
		||||
# Finally, pack it up into a cpio rootfs.
 | 
			
		||||
pushd rootfs
 | 
			
		||||
  find -H | cpio -H newc -o | xz --check=crc32 -T4 - > $CI_PROJECT_DIR/rootfs.cpio.gz
 | 
			
		||||
popd
 | 
			
		||||
 | 
			
		||||
cat $BM_KERNEL $BM_DTB > Image.gz-dtb
 | 
			
		||||
 | 
			
		||||
abootimg \
 | 
			
		||||
  --create artifacts/fastboot.img \
 | 
			
		||||
  -k Image.gz-dtb \
 | 
			
		||||
  -r rootfs.cpio.gz \
 | 
			
		||||
  -c cmdline="$BM_CMDLINE"
 | 
			
		||||
rm Image.gz-dtb
 | 
			
		||||
 | 
			
		||||
# Start watching serial, and power up the device.
 | 
			
		||||
$BM/serial-buffer.py $BM_SERIAL | tee artifacts/serial-output.txt &
 | 
			
		||||
while [ ! -e artifacts/serial-output.txt ]; do
 | 
			
		||||
  sleep 1
 | 
			
		||||
done
 | 
			
		||||
PATH=$BM:$PATH $BM_POWERUP
 | 
			
		||||
 | 
			
		||||
# Once fastboot is ready, boot our image.
 | 
			
		||||
$BM/expect-output.sh artifacts/serial-output.txt "fastboot: processing commands"
 | 
			
		||||
fastboot boot -s $BM_FASTBOOT_SERIAL artifacts/fastboot.img
 | 
			
		||||
 | 
			
		||||
# Wait for the device to complete the deqp run
 | 
			
		||||
$BM/expect-output.sh artifacts/serial-output.txt "DEQP RESULT"
 | 
			
		||||
 | 
			
		||||
# power down the device
 | 
			
		||||
PATH=$BM:$PATH $BM_POWERDOWN
 | 
			
		||||
 | 
			
		||||
set +e
 | 
			
		||||
if grep -q "DEQP RESULT: pass" artifacts/serial-output.txt; then
 | 
			
		||||
   exit 0
 | 
			
		||||
else
 | 
			
		||||
   exit 1
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
@@ -1,10 +0,0 @@
 | 
			
		||||
#!/bin/bash
 | 
			
		||||
 | 
			
		||||
relay=$1
 | 
			
		||||
 | 
			
		||||
if [ -z "$relay" ]; then
 | 
			
		||||
    echo "Must supply a relay arg"
 | 
			
		||||
    exit 1
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
$CI_PROJECT_DIR/.gitlab-ci/bare-metal/google-power-relay.py off $relay
 | 
			
		||||
@@ -1,19 +0,0 @@
 | 
			
		||||
#!/usr/bin/python3
 | 
			
		||||
 | 
			
		||||
import sys
 | 
			
		||||
import serial
 | 
			
		||||
 | 
			
		||||
mode = sys.argv[1]
 | 
			
		||||
relay = sys.argv[2]
 | 
			
		||||
 | 
			
		||||
# our relays are "off" means "board is powered".
 | 
			
		||||
mode_swap = {
 | 
			
		||||
     "on" : "off",
 | 
			
		||||
     "off" : "on",
 | 
			
		||||
}
 | 
			
		||||
mode = mode_swap[mode]
 | 
			
		||||
 | 
			
		||||
ser = serial.Serial('/dev/ttyACM0', 115200, timeout=2)
 | 
			
		||||
command = "relay {} {}\n\r".format(mode, relay)
 | 
			
		||||
ser.write(command.encode())
 | 
			
		||||
ser.close()
 | 
			
		||||
@@ -1,12 +0,0 @@
 | 
			
		||||
#!/bin/bash
 | 
			
		||||
 | 
			
		||||
relay=$1
 | 
			
		||||
 | 
			
		||||
if [ -z "$relay" ]; then
 | 
			
		||||
    echo "Must supply a relay arg"
 | 
			
		||||
    exit 1
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
$CI_PROJECT_DIR/.gitlab-ci/bare-metal/google-power-relay.py off $relay
 | 
			
		||||
sleep 5
 | 
			
		||||
$CI_PROJECT_DIR/.gitlab-ci/bare-metal/google-power-relay.py on $relay
 | 
			
		||||
@@ -1,28 +0,0 @@
 | 
			
		||||
#!/bin/sh
 | 
			
		||||
 | 
			
		||||
set -ex
 | 
			
		||||
 | 
			
		||||
mount -t proc none /proc
 | 
			
		||||
mount -t sysfs none /sys
 | 
			
		||||
mount -t devtmpfs none /dev || echo possibly already mounted
 | 
			
		||||
mkdir -p /dev/pts
 | 
			
		||||
mount -t devpts devpts /dev/pts
 | 
			
		||||
 | 
			
		||||
. /set-job-env-vars.sh
 | 
			
		||||
 | 
			
		||||
echo "nameserver 8.8.8.8" > /etc/resolv.conf
 | 
			
		||||
 | 
			
		||||
export DEQP_SKIPS=deqp-skips.txt
 | 
			
		||||
if [ -e /install/deqp-expected-fails.txt ]; then
 | 
			
		||||
  export DEQP_EXPECTED_FAILS=deqp-expected-fails.txt
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
if sh /deqp/deqp-runner.sh; then
 | 
			
		||||
    echo "DEQP RESULT: pass"
 | 
			
		||||
else
 | 
			
		||||
    echo "DEQP RESULT: fail"
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
# Wait until the job would have timed out anyway, so we don't spew a "init
 | 
			
		||||
# exited" panic.
 | 
			
		||||
sleep 6000
 | 
			
		||||
@@ -1,55 +0,0 @@
 | 
			
		||||
#!/bin/bash
 | 
			
		||||
 | 
			
		||||
rootfs_dst=$1
 | 
			
		||||
 | 
			
		||||
# Copy the rootfs to a temporary for our setup, as I believe changes to the
 | 
			
		||||
# container can end up impacting future runs.
 | 
			
		||||
cp -Rp $BM_ROOTFS/. $rootfs_dst
 | 
			
		||||
 | 
			
		||||
# Set up the init script that brings up the system.
 | 
			
		||||
cp $BM/init.sh $rootfs_dst/init
 | 
			
		||||
 | 
			
		||||
set +x
 | 
			
		||||
# Pass through relevant env vars from the gitlab job to the baremetal init script
 | 
			
		||||
touch $rootfs_dst/set-job-env-vars.sh
 | 
			
		||||
chmod +x $rootfs_dst/set-job-env-vars.sh
 | 
			
		||||
for var in \
 | 
			
		||||
    CI_COMMIT_BRANCH \
 | 
			
		||||
    CI_COMMIT_TITLE \
 | 
			
		||||
    CI_JOB_ID \
 | 
			
		||||
    CI_JOB_URL \
 | 
			
		||||
    CI_MERGE_REQUEST_SOURCE_BRANCH_NAME \
 | 
			
		||||
    CI_MERGE_REQUEST_TITLE \
 | 
			
		||||
    CI_NODE_INDEX \
 | 
			
		||||
    CI_NODE_TOTAL \
 | 
			
		||||
    CI_PIPELINE_ID \
 | 
			
		||||
    CI_RUNNER_DESCRIPTION \
 | 
			
		||||
    DEQP_CASELIST_FILTER \
 | 
			
		||||
    DEQP_EXPECTED_RENDERER \
 | 
			
		||||
    DEQP_NO_SAVE_RESULTS \
 | 
			
		||||
    DEQP_PARALLEL \
 | 
			
		||||
    DEQP_RUN_SUFFIX \
 | 
			
		||||
    DEQP_VER \
 | 
			
		||||
    FD_MESA_DEBUG \
 | 
			
		||||
    FLAKES_CHANNEL \
 | 
			
		||||
    IR3_SHADER_DEBUG \
 | 
			
		||||
    NIR_VALIDATE \
 | 
			
		||||
    ; do
 | 
			
		||||
  val=`echo ${!var} | sed 's|"||g'`
 | 
			
		||||
  echo "export $var=\"${val}\"" >> $rootfs_dst/set-job-env-vars.sh
 | 
			
		||||
done
 | 
			
		||||
echo "Variables passed through:"
 | 
			
		||||
cat $rootfs_dst/set-job-env-vars.sh
 | 
			
		||||
set -x
 | 
			
		||||
 | 
			
		||||
# Add the Mesa drivers we built, and make a consistent symlink to them.
 | 
			
		||||
mkdir -p $rootfs_dst/$CI_PROJECT_DIR
 | 
			
		||||
tar -C $rootfs_dst/$CI_PROJECT_DIR/ -xf $CI_PROJECT_DIR/artifacts/install.tar
 | 
			
		||||
ln -sf $CI_PROJECT_DIR/install $rootfs_dst/install
 | 
			
		||||
 | 
			
		||||
# Copy the deqp runner script and metadata.
 | 
			
		||||
cp .gitlab-ci/deqp-runner.sh $rootfs_dst/deqp/
 | 
			
		||||
cp .gitlab-ci/$DEQP_SKIPS $rootfs_dst/$CI_PROJECT_DIR/install/deqp-skips.txt
 | 
			
		||||
if [ -n "$DEQP_EXPECTED_FAILS" ]; then
 | 
			
		||||
  cp .gitlab-ci/$DEQP_EXPECTED_FAILS $rootfs_dst/$CI_PROJECT_DIR/install/deqp-expected-fails.txt
 | 
			
		||||
fi
 | 
			
		||||
@@ -1,46 +0,0 @@
 | 
			
		||||
#!/usr/bin/python3
 | 
			
		||||
 | 
			
		||||
# Copyright © 2020 Google LLC
 | 
			
		||||
#
 | 
			
		||||
# 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.
 | 
			
		||||
 | 
			
		||||
# Tiny script to read bytes from serial, and write the output to stdout, with a
 | 
			
		||||
# buffer in between so we don't lose serial output from its buffer.
 | 
			
		||||
#
 | 
			
		||||
# We don't use 'cu' because it requires stdin to be hooked up and I never
 | 
			
		||||
# managed to make that work without getting blocked somewhere.  We don't use
 | 
			
		||||
# 'conserver' because it's non-free.
 | 
			
		||||
 | 
			
		||||
import sys
 | 
			
		||||
import serial
 | 
			
		||||
import select
 | 
			
		||||
import os
 | 
			
		||||
import posix
 | 
			
		||||
 | 
			
		||||
dev=sys.argv[1]
 | 
			
		||||
 | 
			
		||||
ser = serial.Serial(dev, 115200, timeout=10)
 | 
			
		||||
 | 
			
		||||
while True:
 | 
			
		||||
    bytes = ser.read()
 | 
			
		||||
    sys.stdout.buffer.write(bytes)
 | 
			
		||||
    sys.stdout.flush()
 | 
			
		||||
 | 
			
		||||
ser.close()
 | 
			
		||||
@@ -1,11 +0,0 @@
 | 
			
		||||
#!/usr/bin/python3
 | 
			
		||||
 | 
			
		||||
import sys
 | 
			
		||||
import serial
 | 
			
		||||
 | 
			
		||||
dev = sys.argv[1]
 | 
			
		||||
command = sys.argv[2] + '\n'
 | 
			
		||||
 | 
			
		||||
ser = serial.Serial(dev, 115200, timeout=5)
 | 
			
		||||
ser.write(command.encode())
 | 
			
		||||
ser.close()
 | 
			
		||||
@@ -1,30 +0,0 @@
 | 
			
		||||
#!/bin/bash
 | 
			
		||||
 | 
			
		||||
set -ex
 | 
			
		||||
 | 
			
		||||
# Need an unreleased version of Waffle for surfaceless support in apitrace
 | 
			
		||||
# Replace this build with the Debian package once that's possible
 | 
			
		||||
 | 
			
		||||
WAFFLE_VERSION="e3c995d9a2693b687501715b6550619922346089"
 | 
			
		||||
git clone https://gitlab.freedesktop.org/mesa/waffle.git --single-branch --no-checkout /waffle
 | 
			
		||||
pushd /waffle
 | 
			
		||||
git checkout "$WAFFLE_VERSION"
 | 
			
		||||
cmake -B_build -DCMAKE_INSTALL_LIBDIR=lib -DCMAKE_BUILD_TYPE=Release .
 | 
			
		||||
make -C _build -j4 install
 | 
			
		||||
popd
 | 
			
		||||
rm -rf /waffle
 | 
			
		||||
 | 
			
		||||
APITRACE_VERSION="9.0"
 | 
			
		||||
 | 
			
		||||
git clone https://github.com/apitrace/apitrace.git --single-branch --no-checkout /apitrace
 | 
			
		||||
pushd /apitrace
 | 
			
		||||
git checkout "$APITRACE_VERSION"
 | 
			
		||||
cmake -G Ninja -B_build -H. -DCMAKE_BUILD_TYPE=Release -DENABLE_GUI=False -DENABLE_WAFFLE=on -DWaffle_DIR=/usr/local/lib/cmake/Waffle/
 | 
			
		||||
ninja -C _build
 | 
			
		||||
mkdir build
 | 
			
		||||
cp _build/apitrace build
 | 
			
		||||
cp _build/glretrace build
 | 
			
		||||
cp _build/eglretrace build
 | 
			
		||||
strip build/*
 | 
			
		||||
find . -not -path './build' -not -path './build/*' -delete
 | 
			
		||||
popd
 | 
			
		||||
@@ -1,10 +0,0 @@
 | 
			
		||||
#!/bin/bash
 | 
			
		||||
 | 
			
		||||
set -ex
 | 
			
		||||
 | 
			
		||||
git clone https://gitlab.freedesktop.org/mesa/parallel-deqp-runner.git --depth 1 -b mesa-ci-2019-12-17 /parallel-deqp-runner
 | 
			
		||||
pushd /parallel-deqp-runner
 | 
			
		||||
meson build/ $EXTRA_MESON_ARGS
 | 
			
		||||
ninja -C build install
 | 
			
		||||
popd
 | 
			
		||||
rm -rf /parallel-deqp-runner
 | 
			
		||||
@@ -1,60 +0,0 @@
 | 
			
		||||
#!/bin/bash
 | 
			
		||||
 | 
			
		||||
git config --global user.email "mesa@example.com"
 | 
			
		||||
git config --global user.name "Mesa CI"
 | 
			
		||||
git clone \
 | 
			
		||||
    --depth 1 \
 | 
			
		||||
    https://github.com/KhronosGroup/VK-GL-CTS.git \
 | 
			
		||||
    -b opengl-es-cts-3.2.6.1 \
 | 
			
		||||
    /VK-GL-CTS
 | 
			
		||||
pushd /VK-GL-CTS
 | 
			
		||||
 | 
			
		||||
# surfaceless links against libkms and such despite not using it.
 | 
			
		||||
sed -i '/gbm/d' targets/surfaceless/surfaceless.cmake
 | 
			
		||||
sed -i '/libkms/d' targets/surfaceless/surfaceless.cmake
 | 
			
		||||
sed -i '/libgbm/d' targets/surfaceless/surfaceless.cmake
 | 
			
		||||
 | 
			
		||||
# --insecure is due to SSL cert failures hitting sourceforge for zlib and
 | 
			
		||||
# libpng (sigh).  The archives get their checksums checked anyway, and git
 | 
			
		||||
# always goes through ssh or https.
 | 
			
		||||
python3 external/fetch_sources.py --insecure
 | 
			
		||||
 | 
			
		||||
mkdir -p /deqp
 | 
			
		||||
 | 
			
		||||
# Save the testlog stylesheets:
 | 
			
		||||
cp doc/testlog-stylesheet/testlog.{css,xsl} /deqp
 | 
			
		||||
popd
 | 
			
		||||
 | 
			
		||||
pushd /deqp
 | 
			
		||||
cmake -G Ninja \
 | 
			
		||||
      -DDEQP_TARGET=surfaceless               \
 | 
			
		||||
      -DCMAKE_BUILD_TYPE=Release              \
 | 
			
		||||
      $EXTRA_CMAKE_ARGS                       \
 | 
			
		||||
      /VK-GL-CTS
 | 
			
		||||
ninja
 | 
			
		||||
 | 
			
		||||
# Copy out the mustpass lists we want from a bunch of other junk.
 | 
			
		||||
mkdir /deqp/mustpass
 | 
			
		||||
for gles in gles2 gles3 gles31; do
 | 
			
		||||
    cp \
 | 
			
		||||
        /deqp/external/openglcts/modules/gl_cts/data/mustpass/gles/aosp_mustpass/3.2.6.x/$gles-master.txt \
 | 
			
		||||
        /deqp/mustpass/$gles-master.txt
 | 
			
		||||
done
 | 
			
		||||
 | 
			
		||||
# Save *some* executor utils, but otherwise strip things down
 | 
			
		||||
# to reduct deqp build size:
 | 
			
		||||
mkdir /deqp/executor.save
 | 
			
		||||
cp /deqp/executor/testlog-to-* /deqp/executor.save
 | 
			
		||||
rm -rf /deqp/executor
 | 
			
		||||
mv /deqp/executor.save /deqp/executor
 | 
			
		||||
 | 
			
		||||
rm -rf /deqp/external
 | 
			
		||||
rm -rf /deqp/modules/internal
 | 
			
		||||
rm -rf /deqp/execserver
 | 
			
		||||
rm -rf /deqp/modules/egl
 | 
			
		||||
rm -rf /deqp/framework
 | 
			
		||||
find -iname '*cmake*' -o -name '*ninja*' -o -name '*.o' -o -name '*.a' | xargs rm -rf
 | 
			
		||||
${STRIP_CMD:-strip} modules/*/deqp-*
 | 
			
		||||
du -sh *
 | 
			
		||||
rm -rf /VK-GL-CTS
 | 
			
		||||
popd
 | 
			
		||||
@@ -1,42 +0,0 @@
 | 
			
		||||
#!/bin/bash
 | 
			
		||||
 | 
			
		||||
set -ex
 | 
			
		||||
 | 
			
		||||
git clone \
 | 
			
		||||
    --depth 1 \
 | 
			
		||||
    https://github.com/KhronosGroup/VK-GL-CTS.git \
 | 
			
		||||
    -b vulkan-cts-1.2.1.0 \
 | 
			
		||||
    /VK-GL-CTS
 | 
			
		||||
pushd /VK-GL-CTS
 | 
			
		||||
 | 
			
		||||
# --insecure is due to SSL cert failures hitting sourceforge for zlib and
 | 
			
		||||
# libpng (sigh).  The archives get their checksums checked anyway, and git
 | 
			
		||||
# always goes through ssh or https.
 | 
			
		||||
python3 external/fetch_sources.py --insecure
 | 
			
		||||
 | 
			
		||||
mkdir -p /deqp
 | 
			
		||||
 | 
			
		||||
popd
 | 
			
		||||
 | 
			
		||||
pushd /deqp
 | 
			
		||||
cmake -G Ninja \
 | 
			
		||||
      -DDEQP_TARGET=x11_glx \
 | 
			
		||||
      -DCMAKE_BUILD_TYPE=Release \
 | 
			
		||||
      /VK-GL-CTS
 | 
			
		||||
ninja
 | 
			
		||||
 | 
			
		||||
# Copy out the mustpass list we want.
 | 
			
		||||
mkdir /deqp/mustpass
 | 
			
		||||
cp /VK-GL-CTS/external/vulkancts/mustpass/master/vk-default.txt \
 | 
			
		||||
   /deqp/mustpass/vk-master.txt
 | 
			
		||||
 | 
			
		||||
rm -rf /deqp/modules/internal
 | 
			
		||||
rm -rf /deqp/executor
 | 
			
		||||
rm -rf /deqp/execserver
 | 
			
		||||
rm -rf /deqp/modules/egl
 | 
			
		||||
rm -rf /deqp/framework
 | 
			
		||||
find -iname '*cmake*' -o -name '*ninja*' -o -name '*.o' -o -name '*.a' | xargs rm -rf
 | 
			
		||||
strip external/vulkancts/modules/vulkan/deqp-vk
 | 
			
		||||
du -sh *
 | 
			
		||||
rm -rf /VK-GL-CTS
 | 
			
		||||
popd
 | 
			
		||||
@@ -1,14 +0,0 @@
 | 
			
		||||
#!/bin/bash
 | 
			
		||||
 | 
			
		||||
set -ex
 | 
			
		||||
 | 
			
		||||
git clone https://github.com/ValveSoftware/Fossilize.git
 | 
			
		||||
cd Fossilize
 | 
			
		||||
git checkout 6b5b570008c9ab5269e341f04c811fe49a1bb72c
 | 
			
		||||
git submodule update --init
 | 
			
		||||
mkdir build
 | 
			
		||||
cd build
 | 
			
		||||
cmake .. -DCMAKE_BUILD_TYPE=Release -G Ninja
 | 
			
		||||
ninja -C . install
 | 
			
		||||
cd ../..
 | 
			
		||||
rm -rf Fossilize
 | 
			
		||||
@@ -1,19 +0,0 @@
 | 
			
		||||
#!/bin/bash
 | 
			
		||||
 | 
			
		||||
set -ex
 | 
			
		||||
 | 
			
		||||
# https://github.com/LunarG/gfxreconstruct/issues/328
 | 
			
		||||
GFXRECONSTRUCT_VERSION=b66cd392a84b226cb60ad9d4130ddeb58a1559cb
 | 
			
		||||
 | 
			
		||||
git clone https://github.com/LunarG/gfxreconstruct.git --single-branch --no-checkout /gfxreconstruct
 | 
			
		||||
pushd /gfxreconstruct
 | 
			
		||||
git checkout "$GFXRECONSTRUCT_VERSION"
 | 
			
		||||
git submodule update --init
 | 
			
		||||
git submodule update
 | 
			
		||||
cmake -G Ninja -B_build -H. -DCMAKE_BUILD_TYPE=Release
 | 
			
		||||
ninja -C _build gfxrecon-replay
 | 
			
		||||
mkdir -p build/bin
 | 
			
		||||
install _build/tools/replay/gfxrecon-replay build/bin
 | 
			
		||||
strip build/bin/*
 | 
			
		||||
find . -not -path './build' -not -path './build/*' -delete
 | 
			
		||||
popd
 | 
			
		||||
@@ -1,13 +0,0 @@
 | 
			
		||||
#!/bin/bash
 | 
			
		||||
 | 
			
		||||
set -ex
 | 
			
		||||
 | 
			
		||||
git clone https://gitlab.freedesktop.org/mesa/piglit.git --single-branch --no-checkout /piglit
 | 
			
		||||
pushd /piglit
 | 
			
		||||
git checkout 8771c3860505db2bcf4877216221d774bf90af6b
 | 
			
		||||
patch -p1 <$OLDPWD/.gitlab-ci/piglit/disable-vs_in.diff
 | 
			
		||||
cmake -G Ninja -DCMAKE_BUILD_TYPE=Release
 | 
			
		||||
ninja
 | 
			
		||||
find -name .git -o -name '*ninja*' -o -iname '*cmake*' -o -name '*.[chao]' | xargs rm -rf
 | 
			
		||||
rm -rf target_api
 | 
			
		||||
popd
 | 
			
		||||
@@ -1,17 +0,0 @@
 | 
			
		||||
#!/bin/bash
 | 
			
		||||
 | 
			
		||||
set -ex
 | 
			
		||||
 | 
			
		||||
RENDERDOC_VERSION=da02e88201dc3b64316fc33ce6ff69cc729689aa
 | 
			
		||||
 | 
			
		||||
git clone https://github.com/baldurk/renderdoc.git --single-branch --no-checkout /renderdoc
 | 
			
		||||
pushd /renderdoc
 | 
			
		||||
git checkout "$RENDERDOC_VERSION"
 | 
			
		||||
cmake -G Ninja -B_build -H. -DENABLE_QRENDERDOC=false -DCMAKE_BUILD_TYPE=Release
 | 
			
		||||
ninja -C _build
 | 
			
		||||
mkdir -p build/lib
 | 
			
		||||
cp _build/lib/renderdoc.so build/lib
 | 
			
		||||
cp _build/lib/librenderdoc.so build/lib
 | 
			
		||||
strip build/lib/*
 | 
			
		||||
find . -not -path './build' -not -path './build/*' -delete
 | 
			
		||||
popd
 | 
			
		||||
@@ -1,20 +0,0 @@
 | 
			
		||||
#!/bin/bash
 | 
			
		||||
 | 
			
		||||
set -ex
 | 
			
		||||
 | 
			
		||||
mkdir -p /epoxy
 | 
			
		||||
pushd /epoxy
 | 
			
		||||
wget -qO- https://github.com/anholt/libepoxy/releases/download/1.5.4/libepoxy-1.5.4.tar.xz | tar -xJ --strip-components=1
 | 
			
		||||
meson build/ $EXTRA_MESON_ARGS
 | 
			
		||||
ninja -C build install
 | 
			
		||||
popd
 | 
			
		||||
rm -rf /epoxy
 | 
			
		||||
 | 
			
		||||
VIRGLRENDERER_VERSION=70b18e56d5c3ed69c561c36e098e8aea71ebffc2
 | 
			
		||||
git clone https://gitlab.freedesktop.org/virgl/virglrenderer.git --single-branch --no-checkout /virglrenderer
 | 
			
		||||
pushd /virglrenderer
 | 
			
		||||
git checkout "$VIRGLRENDERER_VERSION"
 | 
			
		||||
meson build/ $EXTRA_MESON_ARGS
 | 
			
		||||
ninja -C build install
 | 
			
		||||
popd
 | 
			
		||||
rm -rf /virglrenderer
 | 
			
		||||
@@ -1,29 +0,0 @@
 | 
			
		||||
#!/bin/bash
 | 
			
		||||
 | 
			
		||||
set -ex
 | 
			
		||||
 | 
			
		||||
VULKANTOOLS_VERSION=1862c6a47b64cd09156205d7f7e6b3bfcea76390
 | 
			
		||||
 | 
			
		||||
git clone https://github.com/LunarG/VulkanTools.git --single-branch --no-checkout /VulkanTools
 | 
			
		||||
pushd /VulkanTools
 | 
			
		||||
git checkout "$VULKANTOOLS_VERSION"
 | 
			
		||||
./update_external_sources.sh
 | 
			
		||||
mkdir _build
 | 
			
		||||
./scripts/update_deps.py --dir=_build --config=release --generator=Ninja
 | 
			
		||||
cmake -G Ninja -B_build -H. \
 | 
			
		||||
      -DCMAKE_BUILD_TYPE=Release \
 | 
			
		||||
      -DCMAKE_INSTALL_PREFIX=/VulkanTools/build \
 | 
			
		||||
      -DBUILD_TESTS=OFF \
 | 
			
		||||
      -DBUILD_VLF=OFF \
 | 
			
		||||
      -DBUILD_VKTRACE=OFF \
 | 
			
		||||
      -DBUILD_VIA=OFF \
 | 
			
		||||
      -DBUILD_VKTRACE_REPLAY=OFF \
 | 
			
		||||
      -C_build/helper.cmake
 | 
			
		||||
ninja -C _build VkLayer_screenshot VkLayer_screenshot-staging-json
 | 
			
		||||
mkdir -p build/etc/vulkan/explicit_layer.d
 | 
			
		||||
mkdir build/lib
 | 
			
		||||
install _build/layersvt/staging-json/VkLayer_screenshot.json build/etc/vulkan/explicit_layer.d
 | 
			
		||||
install _build/layersvt/libVkLayer_screenshot.so build/lib
 | 
			
		||||
strip build/lib/*
 | 
			
		||||
find . -not -path './build' -not -path './build/*' -delete
 | 
			
		||||
popd
 | 
			
		||||
@@ -1,78 +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 \
 | 
			
		||||
	abootimg \
 | 
			
		||||
	android-sdk-ext4-utils \
 | 
			
		||||
	bc \
 | 
			
		||||
	bison \
 | 
			
		||||
	ccache \
 | 
			
		||||
	cmake \
 | 
			
		||||
	cpio \
 | 
			
		||||
	crossbuild-essential-armhf \
 | 
			
		||||
	debootstrap \
 | 
			
		||||
	fastboot \
 | 
			
		||||
	flex \
 | 
			
		||||
	g++ \
 | 
			
		||||
	gettext \
 | 
			
		||||
	git \
 | 
			
		||||
	lavacli \
 | 
			
		||||
	libdrm-dev:armhf \
 | 
			
		||||
	libegl1-mesa-dev \
 | 
			
		||||
	libegl1-mesa-dev:armhf \
 | 
			
		||||
	libelf-dev \
 | 
			
		||||
	libelf-dev:armhf \
 | 
			
		||||
	libexpat1-dev \
 | 
			
		||||
	libexpat1-dev:armhf \
 | 
			
		||||
	libgles2-mesa-dev \
 | 
			
		||||
	libgles2-mesa-dev:armhf \
 | 
			
		||||
	libpng-dev \
 | 
			
		||||
	libpng-dev:armhf \
 | 
			
		||||
	libssl-dev \
 | 
			
		||||
	libvulkan-dev \
 | 
			
		||||
	libvulkan-dev:armhf \
 | 
			
		||||
	llvm-7-dev:armhf \
 | 
			
		||||
	llvm-8-dev \
 | 
			
		||||
	meson \
 | 
			
		||||
	pkg-config \
 | 
			
		||||
	python \
 | 
			
		||||
	python3-distutils \
 | 
			
		||||
	python3-mako \
 | 
			
		||||
	python3-serial \
 | 
			
		||||
	unzip \
 | 
			
		||||
	wget \
 | 
			
		||||
	xz-utils \
 | 
			
		||||
	zlib1g-dev
 | 
			
		||||
 | 
			
		||||
. .gitlab-ci/container/container_pre_build.sh
 | 
			
		||||
 | 
			
		||||
# dependencies where we want a specific version
 | 
			
		||||
export LIBDRM_VERSION=libdrm-2.4.100
 | 
			
		||||
 | 
			
		||||
wget https://dri.freedesktop.org/libdrm/$LIBDRM_VERSION.tar.bz2
 | 
			
		||||
tar -xvf $LIBDRM_VERSION.tar.bz2 && rm $LIBDRM_VERSION.tar.bz2
 | 
			
		||||
cd $LIBDRM_VERSION; meson build -D vc4=true -D freedreno=true -D etnaviv=true; ninja -C build install; cd ..
 | 
			
		||||
rm -rf $LIBDRM_VERSION
 | 
			
		||||
 | 
			
		||||
############### Generate cross build file for Meson
 | 
			
		||||
 | 
			
		||||
. .gitlab-ci/create-cross-file.sh armhf
 | 
			
		||||
 | 
			
		||||
############### Generate kernel, ramdisk, test suites, etc for LAVA jobs
 | 
			
		||||
 | 
			
		||||
DEBIAN_ARCH=arm64 . .gitlab-ci/container/lava_arm.sh
 | 
			
		||||
DEBIAN_ARCH=armhf . .gitlab-ci/container/lava_arm.sh
 | 
			
		||||
 | 
			
		||||
apt-get purge -y \
 | 
			
		||||
        python3-distutils \
 | 
			
		||||
        wget
 | 
			
		||||
 | 
			
		||||
. .gitlab-ci/container/container_post_build.sh
 | 
			
		||||
@@ -1,97 +0,0 @@
 | 
			
		||||
#!/bin/bash
 | 
			
		||||
 | 
			
		||||
set -e
 | 
			
		||||
set -o xtrace
 | 
			
		||||
 | 
			
		||||
# etnaviv will eventually need armhf too.
 | 
			
		||||
CROSS_ARCHITECTURES="arm64"
 | 
			
		||||
 | 
			
		||||
for arch in $CROSS_ARCHITECTURES; do
 | 
			
		||||
    dpkg --add-architecture $arch
 | 
			
		||||
done
 | 
			
		||||
 | 
			
		||||
############### Install packages for building
 | 
			
		||||
apt-get install -y ca-certificates
 | 
			
		||||
sed -i -e 's/http:\/\/deb/https:\/\/deb/g' /etc/apt/sources.list
 | 
			
		||||
echo 'deb https://deb.debian.org/debian buster-backports main' >/etc/apt/sources.list.d/backports.list
 | 
			
		||||
apt-get update
 | 
			
		||||
 | 
			
		||||
apt-get install -y --no-remove \
 | 
			
		||||
        abootimg \
 | 
			
		||||
        android-sdk-ext4-utils \
 | 
			
		||||
        bc \
 | 
			
		||||
        bison \
 | 
			
		||||
        bzip2 \
 | 
			
		||||
        ccache \
 | 
			
		||||
        cmake \
 | 
			
		||||
        cpio \
 | 
			
		||||
        g++ \
 | 
			
		||||
        debootstrap \
 | 
			
		||||
        fastboot \
 | 
			
		||||
        flex \
 | 
			
		||||
        git \
 | 
			
		||||
        meson \
 | 
			
		||||
        netcat \
 | 
			
		||||
        python3-distutils \
 | 
			
		||||
        python3-minimal \
 | 
			
		||||
        python3-serial \
 | 
			
		||||
        python3.7 \
 | 
			
		||||
        pkg-config \
 | 
			
		||||
        procps \
 | 
			
		||||
        u-boot-tools \
 | 
			
		||||
        unzip
 | 
			
		||||
 | 
			
		||||
# Cross-build test deps
 | 
			
		||||
for arch in $CROSS_ARCHITECTURES; do
 | 
			
		||||
    apt-get install -y --no-remove \
 | 
			
		||||
        crossbuild-essential-${arch} \
 | 
			
		||||
        libdrm-dev:${arch} \
 | 
			
		||||
        libegl1-mesa-dev:${arch} \
 | 
			
		||||
        libelf-dev:${arch} \
 | 
			
		||||
        libexpat1-dev:${arch} \
 | 
			
		||||
        libffi-dev:${arch} \
 | 
			
		||||
        libgbm-dev:${arch} \
 | 
			
		||||
        libgles2-mesa-dev:${arch} \
 | 
			
		||||
        libpng-dev:${arch} \
 | 
			
		||||
        libstdc++6:${arch} \
 | 
			
		||||
        libtinfo-dev:${arch} \
 | 
			
		||||
        libegl1-mesa-dev:${arch} \
 | 
			
		||||
        libvulkan-dev:${arch}
 | 
			
		||||
 | 
			
		||||
    mkdir /var/cache/apt/archives/${arch}
 | 
			
		||||
done
 | 
			
		||||
 | 
			
		||||
. .gitlab-ci/container/container_pre_build.sh
 | 
			
		||||
 | 
			
		||||
############### Create rootfs
 | 
			
		||||
 | 
			
		||||
for arch in $CROSS_ARCHITECTURES; do
 | 
			
		||||
  . .gitlab-ci/create-cross-file.sh $arch
 | 
			
		||||
 | 
			
		||||
  DEBIAN_ARCH=$arch . .gitlab-ci/container/lava_arm.sh
 | 
			
		||||
done
 | 
			
		||||
 | 
			
		||||
############### Uninstall the build software
 | 
			
		||||
 | 
			
		||||
ccache --show-stats
 | 
			
		||||
 | 
			
		||||
apt-get purge -y \
 | 
			
		||||
        bc \
 | 
			
		||||
        bison \
 | 
			
		||||
        bzip2 \
 | 
			
		||||
        ccache \
 | 
			
		||||
        cmake \
 | 
			
		||||
        g++ \
 | 
			
		||||
        flex \
 | 
			
		||||
        git \
 | 
			
		||||
        meson \
 | 
			
		||||
        pkg-config \
 | 
			
		||||
        python3-distutils \
 | 
			
		||||
        procps \
 | 
			
		||||
        u-boot-tools
 | 
			
		||||
 | 
			
		||||
for arch in $CROSS_ARCHITECTURES; do
 | 
			
		||||
    apt-get purge -y ".*:${arch}"
 | 
			
		||||
done
 | 
			
		||||
 | 
			
		||||
apt-get autoremove -y --purge
 | 
			
		||||
@@ -1,5 +0,0 @@
 | 
			
		||||
#!/bin/sh
 | 
			
		||||
 | 
			
		||||
apt-get autoremove -y --purge
 | 
			
		||||
 | 
			
		||||
ccache --show-stats
 | 
			
		||||
@@ -1,29 +0,0 @@
 | 
			
		||||
#!/bin/sh
 | 
			
		||||
 | 
			
		||||
# Common setup among container builds before we get to building code.
 | 
			
		||||
 | 
			
		||||
export CCACHE_COMPILERCHECK=content
 | 
			
		||||
export CCACHE_COMPRESS=true
 | 
			
		||||
export CCACHE_DIR=/cache/mesa/ccache
 | 
			
		||||
export PATH=/usr/lib/ccache:$PATH
 | 
			
		||||
 | 
			
		||||
# CMake ignores $PATH, so we have to force CC/GCC to the ccache versions.
 | 
			
		||||
# Watch out, you can't have spaces in here because the renderdoc build fails.
 | 
			
		||||
export CC="/usr/lib/ccache/gcc"
 | 
			
		||||
export CXX="/usr/lib/ccache/g++"
 | 
			
		||||
 | 
			
		||||
ccache --show-stats
 | 
			
		||||
 | 
			
		||||
if uname -m | grep -q arm || uname -m | grep -q aarch64; then
 | 
			
		||||
    export JFLAGS=-j8
 | 
			
		||||
else
 | 
			
		||||
    export JFLAGS=-j4
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
# Make a wrapper script for ninja to always include the -j flags
 | 
			
		||||
echo /usr/bin/ninja $JFLAGS '"$@"' > /usr/local/bin/ninja
 | 
			
		||||
chmod +x /usr/local/bin/ninja
 | 
			
		||||
 | 
			
		||||
# Set MAKEFLAGS so that all make invocations in container builds include the
 | 
			
		||||
# flags (doesn't apply to non-container builds, but we don't run make there)
 | 
			
		||||
export MAKEFLAGS=$JFLAGS
 | 
			
		||||
@@ -1,119 +0,0 @@
 | 
			
		||||
#!/bin/bash
 | 
			
		||||
 | 
			
		||||
set -e
 | 
			
		||||
set -o xtrace
 | 
			
		||||
 | 
			
		||||
if [[ "$DEBIAN_ARCH" = "arm64" ]]; then
 | 
			
		||||
    GCC_ARCH="aarch64-linux-gnu"
 | 
			
		||||
    KERNEL_ARCH="arm64"
 | 
			
		||||
    DEFCONFIG="arch/arm64/configs/defconfig"
 | 
			
		||||
    DEVICE_TREES="arch/arm64/boot/dts/rockchip/rk3399-gru-kevin.dtb arch/arm64/boot/dts/amlogic/meson-gxl-s905x-libretech-cc.dtb arch/arm64/boot/dts/allwinner/sun50i-h6-pine-h64.dtb arch/arm64/boot/dts/amlogic/meson-gxm-khadas-vim2.dtb arch/arm64/boot/dts/qcom/apq8016-sbc.dtb"
 | 
			
		||||
    KERNEL_IMAGE_NAME="Image"
 | 
			
		||||
else
 | 
			
		||||
    GCC_ARCH="arm-linux-gnueabihf"
 | 
			
		||||
    KERNEL_ARCH="arm"
 | 
			
		||||
    DEFCONFIG="arch/arm/configs/multi_v7_defconfig"
 | 
			
		||||
    DEVICE_TREES="arch/arm/boot/dts/rk3288-veyron-jaq.dtb arch/arm/boot/dts/sun8i-h3-libretech-all-h3-cc.dtb"
 | 
			
		||||
    KERNEL_IMAGE_NAME="zImage"
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
# Determine if we're in a cross build.
 | 
			
		||||
if [[ -e /cross_file-$DEBIAN_ARCH.txt ]]; then
 | 
			
		||||
    EXTRA_MESON_ARGS="--cross-file /cross_file-$DEBIAN_ARCH.txt"
 | 
			
		||||
    EXTRA_CMAKE_ARGS="-DCMAKE_TOOLCHAIN_FILE=/toolchain-$DEBIAN_ARCH.cmake"
 | 
			
		||||
 | 
			
		||||
    export ARCH=${KERNEL_ARCH}
 | 
			
		||||
    export CROSS_COMPILE="${GCC_ARCH}-"
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
############### Build dEQP runner
 | 
			
		||||
. .gitlab-ci/build-cts-runner.sh
 | 
			
		||||
mkdir -p /lava-files/rootfs-${DEBIAN_ARCH}/usr/bin
 | 
			
		||||
mv /usr/local/bin/deqp-runner /lava-files/rootfs-${DEBIAN_ARCH}/usr/bin/.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
############### Build dEQP
 | 
			
		||||
STRIP_CMD="${GCC_ARCH}-strip"
 | 
			
		||||
. .gitlab-ci/build-deqp-gl.sh
 | 
			
		||||
mv /deqp /lava-files/rootfs-${DEBIAN_ARCH}/.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
############### Cross-build kernel
 | 
			
		||||
KERNEL_URL="https://gitlab.freedesktop.org/tomeu/linux/-/archive/v5.5-panfrost-fixes/linux-v5.5-panfrost-fixes.tar.gz"
 | 
			
		||||
 | 
			
		||||
mkdir -p kernel
 | 
			
		||||
wget -qO- ${KERNEL_URL} | tar -xz --strip-components=1 -C kernel
 | 
			
		||||
pushd kernel
 | 
			
		||||
./scripts/kconfig/merge_config.sh ${DEFCONFIG} ../.gitlab-ci/${KERNEL_ARCH}.config
 | 
			
		||||
make ${KERNEL_IMAGE_NAME} dtbs
 | 
			
		||||
for image in ${KERNEL_IMAGE_NAME}; do
 | 
			
		||||
    cp arch/${KERNEL_ARCH}/boot/${image} /lava-files/.
 | 
			
		||||
done
 | 
			
		||||
cp ${DEVICE_TREES} /lava-files/.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
if [[ ${DEBIAN_ARCH} = "arm64" ]] && which mkimage > /dev/null; then
 | 
			
		||||
    make Image.lzma
 | 
			
		||||
    mkimage \
 | 
			
		||||
        -f auto \
 | 
			
		||||
        -A arm \
 | 
			
		||||
        -O linux \
 | 
			
		||||
        -d arch/arm64/boot/Image.lzma \
 | 
			
		||||
        -C lzma\
 | 
			
		||||
        -b arch/arm64/boot/dts/qcom/sdm845-cheza-r3.dtb \
 | 
			
		||||
        /lava-files/cheza-kernel
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
popd
 | 
			
		||||
rm -rf kernel
 | 
			
		||||
 | 
			
		||||
############### Create rootfs
 | 
			
		||||
set +e
 | 
			
		||||
debootstrap \
 | 
			
		||||
    --variant=minbase \
 | 
			
		||||
    --arch=${DEBIAN_ARCH} \
 | 
			
		||||
     --components main,contrib,non-free \
 | 
			
		||||
    testing \
 | 
			
		||||
    /lava-files/rootfs-${DEBIAN_ARCH}/ \
 | 
			
		||||
    http://deb.debian.org/debian
 | 
			
		||||
 | 
			
		||||
cat /lava-files/rootfs-${DEBIAN_ARCH}/debootstrap/debootstrap.log
 | 
			
		||||
set -e
 | 
			
		||||
 | 
			
		||||
cp .gitlab-ci/create-rootfs.sh /lava-files/rootfs-${DEBIAN_ARCH}/.
 | 
			
		||||
chroot /lava-files/rootfs-${DEBIAN_ARCH} sh /create-rootfs.sh
 | 
			
		||||
rm /lava-files/rootfs-${DEBIAN_ARCH}/create-rootfs.sh
 | 
			
		||||
 | 
			
		||||
if [ ${DEBIAN_ARCH} = arm64 ]; then
 | 
			
		||||
    # Pull down a specific build of qcomlt/release/qcomlt-5.4 8c79b3d12355
 | 
			
		||||
    # ("Merge tag 'v5.4.23' into release/qcomlt-5.4"), where I used the
 | 
			
		||||
    # .config from
 | 
			
		||||
    # http://snapshots.linaro.org/96boards/dragonboard820c/linaro/debian/457/config-5.4.0-qcomlt-arm64
 | 
			
		||||
    # with the following merged in:
 | 
			
		||||
    #
 | 
			
		||||
    # CONFIG_DRM=y
 | 
			
		||||
    # CONFIG_DRM_MSM=y
 | 
			
		||||
    # CONFIG_ATL1C=y
 | 
			
		||||
    #
 | 
			
		||||
    # Reason: 5.5 has a big stack of oopses and warns on db820c.  4.14-5.4
 | 
			
		||||
    # linaro kernel binaries (see above .config link) have these as modules
 | 
			
		||||
    # and distributed the modules only in the debian system, not the initrd,
 | 
			
		||||
    # so they're very hard to extract (involving simg2img and loopback
 | 
			
		||||
    # mounting).  4.11 is missing d72fea538fe6 ("drm/msm: Fix the check for
 | 
			
		||||
    # the command size") so it can't actually run fredreno.  qcomlt-4.14 is
 | 
			
		||||
    # unstable at boot (~10% instaboot rate).  The 5.4 qcomlt kernel with msm
 | 
			
		||||
    # built in seems like the easiest way to go.
 | 
			
		||||
    wget https://people.freedesktop.org/~anholt/qcomlt-5.4-msm-build/Image.gz -O Image.gz \
 | 
			
		||||
         -O /lava-files/db820c-kernel
 | 
			
		||||
    wget https://people.freedesktop.org/~anholt/qcomlt-5.4-msm-build/apq8096-db820c.dtb \
 | 
			
		||||
         -O /lava-files/db820c.dtb
 | 
			
		||||
 | 
			
		||||
    # Make a gzipped copy of the Image for db410c.
 | 
			
		||||
    gzip -k /lava-files/Image
 | 
			
		||||
 | 
			
		||||
    # Add missing a630 firmware, added to debian packge in apr 2020
 | 
			
		||||
    wget https://git.kernel.org/pub/scm/linux/kernel/git/firmware/linux-firmware.git/plain/qcom/a630_gmu.bin \
 | 
			
		||||
         -O /lava-files/rootfs-arm64/lib/firmware/qcom/a630_gmu.bin
 | 
			
		||||
    wget https://git.kernel.org/pub/scm/linux/kernel/git/firmware/linux-firmware.git/plain/qcom/a630_sqe.fw \
 | 
			
		||||
         -O /lava-files/rootfs-arm64/lib/firmware/qcom/a630_sqe.fw
 | 
			
		||||
fi
 | 
			
		||||
@@ -1,52 +0,0 @@
 | 
			
		||||
-----BEGIN PGP PUBLIC KEY BLOCK-----
 | 
			
		||||
Version: GnuPG v1.4.12 (GNU/Linux)
 | 
			
		||||
 | 
			
		||||
mQINBFE9lCwBEADi0WUAApM/mgHJRU8lVkkw0CHsZNpqaQDNaHefD6Rw3S4LxNmM
 | 
			
		||||
EZaOTkhP200XZM8lVdbfUW9xSjA3oPldc1HG26NjbqqCmWpdo2fb+r7VmU2dq3NM
 | 
			
		||||
R18ZlKixiLDE6OUfaXWKamZsXb6ITTYmgTO6orQWYrnW6ckYHSeaAkW0wkDAryl2
 | 
			
		||||
B5v8aoFnQ1rFiVEMo4NGzw4UX+MelF7rxaaregmKVTPiqCOSPJ1McC1dHFN533FY
 | 
			
		||||
Wh/RVLKWo6npu+owtwYFQW+zyQhKzSIMvNujFRzhIxzxR9Gn87MoLAyfgKEzrbbT
 | 
			
		||||
DhqqNXTxS4UMUKCQaO93TzetX/EBrRpJj+vP640yio80h4Dr5pAd7+LnKwgpTDk1
 | 
			
		||||
G88bBXJAcPZnTSKu9I2c6KY4iRNbvRz4i+ZdwwZtdW4nSdl2792L7Sl7Nc44uLL/
 | 
			
		||||
ZqkKDXEBF6lsX5XpABwyK89S/SbHOytXv9o4puv+65Ac5/UShspQTMSKGZgvDauU
 | 
			
		||||
cs8kE1U9dPOqVNCYq9Nfwinkf6RxV1k1+gwtclxQuY7UpKXP0hNAXjAiA5KS5Crq
 | 
			
		||||
7aaJg9q2F4bub0mNU6n7UI6vXguF2n4SEtzPRk6RP+4TiT3bZUsmr+1ktogyOJCc
 | 
			
		||||
Ha8G5VdL+NBIYQthOcieYCBnTeIH7D3Sp6FYQTYtVbKFzmMK+36ERreL/wARAQAB
 | 
			
		||||
tD1TeWx2ZXN0cmUgTGVkcnUgLSBEZWJpYW4gTExWTSBwYWNrYWdlcyA8c3lsdmVz
 | 
			
		||||
dHJlQGRlYmlhbi5vcmc+iQI4BBMBAgAiBQJRPZQsAhsDBgsJCAcDAgYVCAIJCgsE
 | 
			
		||||
FgIDAQIeAQIXgAAKCRAVz00Yr090Ibx+EADArS/hvkDF8juWMXxh17CgR0WZlHCC
 | 
			
		||||
9CTBWkg5a0bNN/3bb97cPQt/vIKWjQtkQpav6/5JTVCSx2riL4FHYhH0iuo4iAPR
 | 
			
		||||
udC7Cvg8g7bSPrKO6tenQZNvQm+tUmBHgFiMBJi92AjZ/Qn1Shg7p9ITivFxpLyX
 | 
			
		||||
wpmnF1OKyI2Kof2rm4BFwfSWuf8Fvh7kDMRLHv+MlnK/7j/BNpKdozXxLcwoFBmn
 | 
			
		||||
l0WjpAH3OFF7Pvm1LJdf1DjWKH0Dc3sc6zxtmBR/KHHg6kK4BGQNnFKujcP7TVdv
 | 
			
		||||
gMYv84kun14pnwjZcqOtN3UJtcx22880DOQzinoMs3Q4w4o05oIF+sSgHViFpc3W
 | 
			
		||||
R0v+RllnH05vKZo+LDzc83DQVrdwliV12eHxrMQ8UYg88zCbF/cHHnlzZWAJgftg
 | 
			
		||||
hB08v1BKPgYRUzwJ6VdVqXYcZWEaUJmQAPuAALyZESw94hSo28FAn0/gzEc5uOYx
 | 
			
		||||
K+xG/lFwgAGYNb3uGM5m0P6LVTfdg6vDwwOeTNIExVk3KVFXeSQef2ZMkhwA7wya
 | 
			
		||||
KJptkb62wBHFE+o9TUdtMCY6qONxMMdwioRE5BYNwAsS1PnRD2+jtlI0DzvKHt7B
 | 
			
		||||
MWd8hnoUKhMeZ9TNmo+8CpsAtXZcBho0zPGz/R8NlJhAWpdAZ1CmcPo83EW86Yq7
 | 
			
		||||
BxQUKnNHcwj2ebkCDQRRPZQsARAA4jxYmbTHwmMjqSizlMJYNuGOpIidEdx9zQ5g
 | 
			
		||||
zOr431/VfWq4S+VhMDhs15j9lyml0y4ok215VRFwrAREDg6UPMr7ajLmBQGau0Fc
 | 
			
		||||
bvZJ90l4NjXp5p0NEE/qOb9UEHT7EGkEhaZ1ekkWFTWCgsy7rRXfZLxB6sk7pzLC
 | 
			
		||||
DshyW3zjIakWAnpQ5j5obiDy708pReAuGB94NSyb1HoW/xGsGgvvCw4r0w3xPStw
 | 
			
		||||
F1PhmScE6NTBIfLliea3pl8vhKPlCh54Hk7I8QGjo1ETlRP4Qll1ZxHJ8u25f/ta
 | 
			
		||||
RES2Aw8Hi7j0EVcZ6MT9JWTI83yUcnUlZPZS2HyeWcUj+8nUC8W4N8An+aNps9l/
 | 
			
		||||
21inIl2TbGo3Yn1JQLnA1YCoGwC34g8QZTJhElEQBN0X29ayWW6OdFx8MDvllbBV
 | 
			
		||||
ymmKq2lK1U55mQTfDli7S3vfGz9Gp/oQwZ8bQpOeUkc5hbZszYwP4RX+68xDPfn+
 | 
			
		||||
M9udl+qW9wu+LyePbW6HX90LmkhNkkY2ZzUPRPDHZANU5btaPXc2H7edX4y4maQa
 | 
			
		||||
xenqD0lGh9LGz/mps4HEZtCI5CY8o0uCMF3lT0XfXhuLksr7Pxv57yue8LLTItOJ
 | 
			
		||||
d9Hmzp9G97SRYYeqU+8lyNXtU2PdrLLq7QHkzrsloG78lCpQcalHGACJzrlUWVP/
 | 
			
		||||
fN3Ht3kAEQEAAYkCHwQYAQIACQUCUT2ULAIbDAAKCRAVz00Yr090IbhWEADbr50X
 | 
			
		||||
OEXMIMGRLe+YMjeMX9NG4jxs0jZaWHc/WrGR+CCSUb9r6aPXeLo+45949uEfdSsB
 | 
			
		||||
pbaEdNWxF5Vr1CSjuO5siIlgDjmT655voXo67xVpEN4HhMrxugDJfCa6z97P0+ML
 | 
			
		||||
PdDxim57uNqkam9XIq9hKQaurxMAECDPmlEXI4QT3eu5qw5/knMzDMZj4Vi6hovL
 | 
			
		||||
wvvAeLHO/jsyfIdNmhBGU2RWCEZ9uo/MeerPHtRPfg74g+9PPfP6nyHD2Wes6yGd
 | 
			
		||||
oVQwtPNAQD6Cj7EaA2xdZYLJ7/jW6yiPu98FFWP74FN2dlyEA2uVziLsfBrgpS4l
 | 
			
		||||
tVOlrO2YzkkqUGrybzbLpj6eeHx+Cd7wcjI8CalsqtL6cG8cUEjtWQUHyTbQWAgG
 | 
			
		||||
5VPEgIAVhJ6RTZ26i/G+4J8neKyRs4vz+57UGwY6zI4AB1ZcWGEE3Bf+CDEDgmnP
 | 
			
		||||
LSwbnHefK9IljT9XU98PelSryUO/5UPw7leE0akXKB4DtekToO226px1VnGp3Bov
 | 
			
		||||
1GBGvpHvL2WizEwdk+nfk8LtrLzej+9FtIcq3uIrYnsac47Pf7p0otcFeTJTjSq3
 | 
			
		||||
krCaoG4Hx0zGQG2ZFpHrSrZTVy6lxvIdfi0beMgY6h78p6M9eYZHQHc02DjFkQXN
 | 
			
		||||
bXb5c6gCHESH5PXwPU4jQEE7Ib9J6sbk7ZT2Mw==
 | 
			
		||||
=j+4q
 | 
			
		||||
-----END PGP PUBLIC KEY BLOCK-----
 | 
			
		||||
@@ -1,247 +0,0 @@
 | 
			
		||||
#!/bin/bash
 | 
			
		||||
 | 
			
		||||
set -e
 | 
			
		||||
set -o xtrace
 | 
			
		||||
 | 
			
		||||
export DEBIAN_FRONTEND=noninteractive
 | 
			
		||||
 | 
			
		||||
CROSS_ARCHITECTURES="i386 ppc64el s390x"
 | 
			
		||||
for arch in $CROSS_ARCHITECTURES; do
 | 
			
		||||
    dpkg --add-architecture $arch
 | 
			
		||||
done
 | 
			
		||||
 | 
			
		||||
apt-get install -y \
 | 
			
		||||
      ca-certificates \
 | 
			
		||||
      gnupg \
 | 
			
		||||
      unzip \
 | 
			
		||||
      wget
 | 
			
		||||
 | 
			
		||||
# Upstream LLVM package repository
 | 
			
		||||
apt-key add .gitlab-ci/container/llvm-snapshot.gpg.key
 | 
			
		||||
echo "deb https://apt.llvm.org/buster/ llvm-toolchain-buster-9 main" >/etc/apt/sources.list.d/llvm9.list
 | 
			
		||||
 | 
			
		||||
sed -i -e 's/http:\/\/deb/https:\/\/deb/g' /etc/apt/sources.list
 | 
			
		||||
echo 'deb https://deb.debian.org/debian buster-backports main' >/etc/apt/sources.list.d/backports.list
 | 
			
		||||
echo 'deb https://deb.debian.org/debian testing main' >/etc/apt/sources.list.d/testing.list
 | 
			
		||||
 | 
			
		||||
apt-get update
 | 
			
		||||
 | 
			
		||||
# Don't use newer packages from testing by default
 | 
			
		||||
cat >/etc/apt/preferences <<EOF
 | 
			
		||||
Package: *
 | 
			
		||||
Pin: release a=testing
 | 
			
		||||
Pin-Priority: 100
 | 
			
		||||
EOF
 | 
			
		||||
 | 
			
		||||
apt-get dist-upgrade -y
 | 
			
		||||
 | 
			
		||||
apt-get install -y --no-remove \
 | 
			
		||||
      autoconf \
 | 
			
		||||
      automake \
 | 
			
		||||
      autotools-dev \
 | 
			
		||||
      bison \
 | 
			
		||||
      ccache \
 | 
			
		||||
      clang-9 \
 | 
			
		||||
      cmake \
 | 
			
		||||
      flex \
 | 
			
		||||
      g++ \
 | 
			
		||||
      gcc \
 | 
			
		||||
      gettext \
 | 
			
		||||
      git \
 | 
			
		||||
      libclang-6.0-dev \
 | 
			
		||||
      libclang-7-dev \
 | 
			
		||||
      libclang-9-dev \
 | 
			
		||||
      libclc-dev \
 | 
			
		||||
      libdrm-dev:s390x \
 | 
			
		||||
      libelf-dev \
 | 
			
		||||
      libepoxy-dev \
 | 
			
		||||
      libexpat1-dev \
 | 
			
		||||
      libgbm-dev \
 | 
			
		||||
      libgtk-3-dev \
 | 
			
		||||
      libomxil-bellagio-dev \
 | 
			
		||||
      libpciaccess-dev \
 | 
			
		||||
      libpciaccess-dev:i386 \
 | 
			
		||||
      libtool \
 | 
			
		||||
      libunwind-dev \
 | 
			
		||||
      libva-dev \
 | 
			
		||||
      libvdpau-dev \
 | 
			
		||||
      libvulkan-dev \
 | 
			
		||||
      libvulkan-dev:ppc64el \
 | 
			
		||||
      libx11-dev \
 | 
			
		||||
      libx11-xcb-dev \
 | 
			
		||||
      libxdamage-dev \
 | 
			
		||||
      libxext-dev \
 | 
			
		||||
      libxml2-utils \
 | 
			
		||||
      libxrandr-dev \
 | 
			
		||||
      libxrender-dev \
 | 
			
		||||
      libxshmfence-dev \
 | 
			
		||||
      libxvmc-dev \
 | 
			
		||||
      libxxf86vm-dev \
 | 
			
		||||
      llvm-6.0-dev \
 | 
			
		||||
      llvm-7-dev \
 | 
			
		||||
      llvm-9-dev \
 | 
			
		||||
      meson \
 | 
			
		||||
      pkg-config \
 | 
			
		||||
      python-mako \
 | 
			
		||||
      python3-mako \
 | 
			
		||||
      python3-pil \
 | 
			
		||||
      python3-requests \
 | 
			
		||||
      qemu-user \
 | 
			
		||||
      scons \
 | 
			
		||||
      x11proto-dri2-dev \
 | 
			
		||||
      x11proto-gl-dev \
 | 
			
		||||
      x11proto-randr-dev \
 | 
			
		||||
      xz-utils \
 | 
			
		||||
      zlib1g-dev
 | 
			
		||||
 | 
			
		||||
apt-get install -y --no-remove -t buster-backports \
 | 
			
		||||
      libclang-8-dev
 | 
			
		||||
 | 
			
		||||
# Cross-build Mesa deps
 | 
			
		||||
for arch in $CROSS_ARCHITECTURES; do
 | 
			
		||||
    apt-get install -y --no-remove \
 | 
			
		||||
            crossbuild-essential-${arch} \
 | 
			
		||||
            libelf-dev:${arch} \
 | 
			
		||||
            libexpat1-dev:${arch} \
 | 
			
		||||
            libffi-dev:${arch} \
 | 
			
		||||
            libstdc++6:${arch} \
 | 
			
		||||
            libtinfo-dev:${arch}
 | 
			
		||||
 | 
			
		||||
    apt-get install -y --no-remove -t buster-backports \
 | 
			
		||||
            libllvm8:${arch}
 | 
			
		||||
 | 
			
		||||
    mkdir /var/cache/apt/archives/${arch}
 | 
			
		||||
    # Download llvm-* packages, but don't install them yet, since they can
 | 
			
		||||
    # only be installed for one architecture at a time
 | 
			
		||||
    apt-get install -o Dir::Cache::archives=/var/cache/apt/archives/$arch --download-only \
 | 
			
		||||
       -y --no-remove -t buster-backports \
 | 
			
		||||
       llvm-8-dev:${arch}
 | 
			
		||||
done
 | 
			
		||||
 | 
			
		||||
apt-get install -y --no-remove -t buster-backports \
 | 
			
		||||
      llvm-8-dev \
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Install packages we need from Debian testing last, to avoid pulling in more
 | 
			
		||||
 | 
			
		||||
# Need to allow removing libgcc1 for these
 | 
			
		||||
apt-get install -y -t testing \
 | 
			
		||||
      libstdc++6:i386 \
 | 
			
		||||
      libstdc++6:ppc64el \
 | 
			
		||||
      libstdc++6:s390x
 | 
			
		||||
 | 
			
		||||
apt-get install -y --no-remove -t testing \
 | 
			
		||||
      g++-mingw-w64-x86-64-win32 \
 | 
			
		||||
      libz-mingw-w64-dev \
 | 
			
		||||
      wine \
 | 
			
		||||
      wine32 \
 | 
			
		||||
      wine64
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
. .gitlab-ci/container/container_pre_build.sh
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# 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
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Generate cross build files for Meson
 | 
			
		||||
for arch in $CROSS_ARCHITECTURES; do
 | 
			
		||||
    . .gitlab-ci/create-cross-file.sh $arch
 | 
			
		||||
done
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# for the vulkan overlay layer
 | 
			
		||||
wget https://github.com/KhronosGroup/glslang/releases/download/master-tot/glslang-master-linux-Release.zip
 | 
			
		||||
unzip glslang-master-linux-Release.zip bin/glslangValidator
 | 
			
		||||
install -m755 bin/glslangValidator /usr/local/bin/
 | 
			
		||||
rm bin/glslangValidator glslang-master-linux-Release.zip
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# dependencies where we want a specific version
 | 
			
		||||
export              XORG_RELEASES=https://xorg.freedesktop.org/releases/individual
 | 
			
		||||
export               XCB_RELEASES=https://xcb.freedesktop.org/dist
 | 
			
		||||
export           WAYLAND_RELEASES=https://wayland.freedesktop.org/releases
 | 
			
		||||
 | 
			
		||||
export         XORGMACROS_VERSION=util-macros-1.19.0
 | 
			
		||||
export             LIBDRM_VERSION=libdrm-2.4.100
 | 
			
		||||
export           XCBPROTO_VERSION=xcb-proto-1.13
 | 
			
		||||
export             LIBXCB_VERSION=libxcb-1.13
 | 
			
		||||
export         LIBWAYLAND_VERSION=wayland-1.15.0
 | 
			
		||||
export  WAYLAND_PROTOCOLS_VERSION=wayland-protocols-1.12
 | 
			
		||||
 | 
			
		||||
wget $XORG_RELEASES/util/$XORGMACROS_VERSION.tar.bz2
 | 
			
		||||
tar -xvf $XORGMACROS_VERSION.tar.bz2 && rm $XORGMACROS_VERSION.tar.bz2
 | 
			
		||||
cd $XORGMACROS_VERSION; ./configure; make install; cd ..
 | 
			
		||||
rm -rf $XORGMACROS_VERSION
 | 
			
		||||
 | 
			
		||||
wget $XCB_RELEASES/$XCBPROTO_VERSION.tar.bz2
 | 
			
		||||
tar -xvf $XCBPROTO_VERSION.tar.bz2 && rm $XCBPROTO_VERSION.tar.bz2
 | 
			
		||||
cd $XCBPROTO_VERSION; ./configure; make install; cd ..
 | 
			
		||||
rm -rf $XCBPROTO_VERSION
 | 
			
		||||
 | 
			
		||||
wget $XCB_RELEASES/$LIBXCB_VERSION.tar.bz2
 | 
			
		||||
tar -xvf $LIBXCB_VERSION.tar.bz2 && rm $LIBXCB_VERSION.tar.bz2
 | 
			
		||||
cd $LIBXCB_VERSION; ./configure; make install; cd ..
 | 
			
		||||
rm -rf $LIBXCB_VERSION
 | 
			
		||||
 | 
			
		||||
wget https://dri.freedesktop.org/libdrm/$LIBDRM_VERSION.tar.bz2
 | 
			
		||||
tar -xvf $LIBDRM_VERSION.tar.bz2 && rm $LIBDRM_VERSION.tar.bz2
 | 
			
		||||
cd $LIBDRM_VERSION
 | 
			
		||||
meson build -D vc4=true -D freedreno=true -D etnaviv=true -D libdir=lib/x86_64-linux-gnu; ninja -C build install
 | 
			
		||||
rm -rf build; meson --cross-file=/cross_file-ppc64el.txt build -D libdir=lib/powerpc64le-linux-gnu; ninja -C build install
 | 
			
		||||
rm -rf build; meson --cross-file=/cross_file-i386.txt build -D libdir=lib/i386-linux-gnu; ninja -C build install
 | 
			
		||||
cd ..
 | 
			
		||||
rm -rf $LIBDRM_VERSION
 | 
			
		||||
 | 
			
		||||
wget $WAYLAND_RELEASES/$LIBWAYLAND_VERSION.tar.xz
 | 
			
		||||
tar -xvf $LIBWAYLAND_VERSION.tar.xz && rm $LIBWAYLAND_VERSION.tar.xz
 | 
			
		||||
cd $LIBWAYLAND_VERSION; ./configure --enable-libraries --without-host-scanner --disable-documentation --disable-dtd-validation; make install; cd ..
 | 
			
		||||
rm -rf $LIBWAYLAND_VERSION
 | 
			
		||||
 | 
			
		||||
wget $WAYLAND_RELEASES/$WAYLAND_PROTOCOLS_VERSION.tar.xz
 | 
			
		||||
tar -xvf $WAYLAND_PROTOCOLS_VERSION.tar.xz && rm $WAYLAND_PROTOCOLS_VERSION.tar.xz
 | 
			
		||||
cd $WAYLAND_PROTOCOLS_VERSION; ./configure; make install; cd ..
 | 
			
		||||
rm -rf $WAYLAND_PROTOCOLS_VERSION
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# The version of libglvnd-dev in debian is too old
 | 
			
		||||
# Check this page to see when this local compilation can be dropped in favour of the package:
 | 
			
		||||
# https://packages.debian.org/libglvnd-dev
 | 
			
		||||
GLVND_VERSION=1.2.0
 | 
			
		||||
wget https://gitlab.freedesktop.org/glvnd/libglvnd/-/archive/v$GLVND_VERSION/libglvnd-v$GLVND_VERSION.tar.gz
 | 
			
		||||
tar -xvf libglvnd-v$GLVND_VERSION.tar.gz && rm libglvnd-v$GLVND_VERSION.tar.gz
 | 
			
		||||
pushd libglvnd-v$GLVND_VERSION; ./autogen.sh; ./configure; make install; popd
 | 
			
		||||
rm -rf libglvnd-v$GLVND_VERSION
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
pushd /usr/local
 | 
			
		||||
git clone https://gitlab.freedesktop.org/mesa/shader-db.git --depth 1
 | 
			
		||||
rm -rf shader-db/.git
 | 
			
		||||
cd shader-db
 | 
			
		||||
make
 | 
			
		||||
popd
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
############### Uninstall the build software
 | 
			
		||||
 | 
			
		||||
apt-get purge -y \
 | 
			
		||||
      autoconf \
 | 
			
		||||
      automake \
 | 
			
		||||
      autotools-dev \
 | 
			
		||||
      cmake \
 | 
			
		||||
      git \
 | 
			
		||||
      gnupg \
 | 
			
		||||
      libgbm-dev \
 | 
			
		||||
      libtool \
 | 
			
		||||
      unzip \
 | 
			
		||||
      wget
 | 
			
		||||
 | 
			
		||||
. .gitlab-ci/container/container_post_build.sh
 | 
			
		||||
@@ -1,60 +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 \
 | 
			
		||||
      bison \
 | 
			
		||||
      bzip2 \
 | 
			
		||||
      ccache \
 | 
			
		||||
      flex \
 | 
			
		||||
      g++ \
 | 
			
		||||
      gcc \
 | 
			
		||||
      gettext \
 | 
			
		||||
      git \
 | 
			
		||||
      libclang-3.9-dev \
 | 
			
		||||
      libclang-4.0-dev \
 | 
			
		||||
      libclang-5.0-dev \
 | 
			
		||||
      libclc-dev \
 | 
			
		||||
      libdrm-dev \
 | 
			
		||||
      libelf-dev \
 | 
			
		||||
      libepoxy-dev \
 | 
			
		||||
      libexpat1-dev \
 | 
			
		||||
      libpng-dev \
 | 
			
		||||
      libunwind-dev \
 | 
			
		||||
      llvm-3.9-dev \
 | 
			
		||||
      llvm-4.0-dev \
 | 
			
		||||
      llvm-5.0-dev \
 | 
			
		||||
      meson \
 | 
			
		||||
      pkg-config \
 | 
			
		||||
      python-mako \
 | 
			
		||||
      python3-mako \
 | 
			
		||||
      scons \
 | 
			
		||||
      xz-utils \
 | 
			
		||||
      zlib1g-dev
 | 
			
		||||
 | 
			
		||||
. .gitlab-ci/container/container_pre_build.sh
 | 
			
		||||
 | 
			
		||||
############### Uninstall unused packages
 | 
			
		||||
 | 
			
		||||
. .gitlab-ci/container/container_post_build.sh
 | 
			
		||||
@@ -1,143 +0,0 @@
 | 
			
		||||
#!/bin/bash
 | 
			
		||||
 | 
			
		||||
set -e
 | 
			
		||||
set -o xtrace
 | 
			
		||||
 | 
			
		||||
export DEBIAN_FRONTEND=noninteractive
 | 
			
		||||
 | 
			
		||||
apt-get install -y \
 | 
			
		||||
      ca-certificates \
 | 
			
		||||
      gnupg
 | 
			
		||||
 | 
			
		||||
# Upstream LLVM package repository
 | 
			
		||||
apt-key add .gitlab-ci/container/llvm-snapshot.gpg.key
 | 
			
		||||
echo "deb https://apt.llvm.org/buster/ llvm-toolchain-buster-9 main" >/etc/apt/sources.list.d/llvm9.list
 | 
			
		||||
 | 
			
		||||
sed -i -e 's/http:\/\/deb/https:\/\/deb/g' /etc/apt/sources.list
 | 
			
		||||
echo 'deb https://deb.debian.org/debian testing main' >/etc/apt/sources.list.d/testing.list
 | 
			
		||||
 | 
			
		||||
apt-get update
 | 
			
		||||
 | 
			
		||||
# Don't use newer packages from testing by default
 | 
			
		||||
cat >/etc/apt/preferences <<EOF
 | 
			
		||||
Package: *
 | 
			
		||||
Pin: release a=testing
 | 
			
		||||
Pin-Priority: 100
 | 
			
		||||
EOF
 | 
			
		||||
 | 
			
		||||
apt-get dist-upgrade -y
 | 
			
		||||
 | 
			
		||||
apt-get install -y --no-remove \
 | 
			
		||||
      autoconf \
 | 
			
		||||
      automake \
 | 
			
		||||
      ccache \
 | 
			
		||||
      cmake \
 | 
			
		||||
      g++ \
 | 
			
		||||
      gcc \
 | 
			
		||||
      git \
 | 
			
		||||
      libexpat1 \
 | 
			
		||||
      libgbm-dev \
 | 
			
		||||
      libgles2-mesa-dev \
 | 
			
		||||
      libllvm9 \
 | 
			
		||||
      libpcre3-dev \
 | 
			
		||||
      libpcre32-3 \
 | 
			
		||||
      libpng-dev \
 | 
			
		||||
      libpng16-16 \
 | 
			
		||||
      libpython3.7 \
 | 
			
		||||
      libvulkan-dev \
 | 
			
		||||
      libvulkan1 \
 | 
			
		||||
      libwaffle-dev \
 | 
			
		||||
      libwayland-server0 \
 | 
			
		||||
      libxcb-keysyms1 \
 | 
			
		||||
      libxcb-keysyms1-dev \
 | 
			
		||||
      libxcb-xfixes0 \
 | 
			
		||||
      libxkbcommon-dev \
 | 
			
		||||
      libxkbcommon0 \
 | 
			
		||||
      libxrender-dev \
 | 
			
		||||
      libxrender1 \
 | 
			
		||||
      make \
 | 
			
		||||
      meson \
 | 
			
		||||
      patch \
 | 
			
		||||
      pkg-config \
 | 
			
		||||
      python \
 | 
			
		||||
      python3-distutils \
 | 
			
		||||
      python3-mako \
 | 
			
		||||
      python3-numpy \
 | 
			
		||||
      python3-pil \
 | 
			
		||||
      python3-pytest \
 | 
			
		||||
      python3-requests \
 | 
			
		||||
      python3-six \
 | 
			
		||||
      python3-yaml \
 | 
			
		||||
      python3.7 \
 | 
			
		||||
      python3.7-dev \
 | 
			
		||||
      qt5-default \
 | 
			
		||||
      qt5-qmake \
 | 
			
		||||
      waffle-utils \
 | 
			
		||||
      wget \
 | 
			
		||||
      xauth \
 | 
			
		||||
      xvfb \
 | 
			
		||||
      xz-utils \
 | 
			
		||||
      zlib1g
 | 
			
		||||
 | 
			
		||||
# Install packages we need from Debian testing last, to avoid pulling in more
 | 
			
		||||
apt-get install -y -t testing \
 | 
			
		||||
      libc6-dev
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
. .gitlab-ci/container/container_pre_build.sh
 | 
			
		||||
 | 
			
		||||
############### Build virglrenderer
 | 
			
		||||
 | 
			
		||||
. .gitlab-ci/build-virglrenderer.sh
 | 
			
		||||
 | 
			
		||||
############### Build piglit
 | 
			
		||||
 | 
			
		||||
. .gitlab-ci/build-piglit.sh
 | 
			
		||||
 | 
			
		||||
############### Build dEQP runner
 | 
			
		||||
 | 
			
		||||
. .gitlab-ci/build-cts-runner.sh
 | 
			
		||||
 | 
			
		||||
############### Build dEQP GL
 | 
			
		||||
 | 
			
		||||
. .gitlab-ci/build-deqp-gl.sh
 | 
			
		||||
 | 
			
		||||
############### Build apitrace
 | 
			
		||||
 | 
			
		||||
. .gitlab-ci/build-apitrace.sh
 | 
			
		||||
 | 
			
		||||
############### Build renderdoc
 | 
			
		||||
 | 
			
		||||
. .gitlab-ci/build-renderdoc.sh
 | 
			
		||||
 | 
			
		||||
############### Uninstall the build software
 | 
			
		||||
 | 
			
		||||
ccache --show-stats
 | 
			
		||||
 | 
			
		||||
apt-get purge -y \
 | 
			
		||||
      autoconf \
 | 
			
		||||
      automake \
 | 
			
		||||
      ccache \
 | 
			
		||||
      cmake \
 | 
			
		||||
      g++ \
 | 
			
		||||
      gcc \
 | 
			
		||||
      gnupg \
 | 
			
		||||
      libc6-dev \
 | 
			
		||||
      libgbm-dev \
 | 
			
		||||
      libgles2-mesa-dev \
 | 
			
		||||
      libpcre3-dev \
 | 
			
		||||
      libpng-dev \
 | 
			
		||||
      libwaffle-dev \
 | 
			
		||||
      libxcb-keysyms1-dev \
 | 
			
		||||
      libxkbcommon-dev \
 | 
			
		||||
      libxrender-dev \
 | 
			
		||||
      make \
 | 
			
		||||
      meson \
 | 
			
		||||
      patch \
 | 
			
		||||
      pkg-config \
 | 
			
		||||
      python3-distutils \
 | 
			
		||||
      python3.7-dev \
 | 
			
		||||
      wget \
 | 
			
		||||
      xz-utils
 | 
			
		||||
 | 
			
		||||
apt-get autoremove -y --purge
 | 
			
		||||
@@ -1,195 +0,0 @@
 | 
			
		||||
#!/bin/bash
 | 
			
		||||
 | 
			
		||||
set -e
 | 
			
		||||
set -o xtrace
 | 
			
		||||
 | 
			
		||||
export DEBIAN_FRONTEND=noninteractive
 | 
			
		||||
 | 
			
		||||
apt-get install -y \
 | 
			
		||||
      ca-certificates \
 | 
			
		||||
      gnupg
 | 
			
		||||
 | 
			
		||||
# Upstream LLVM package repository
 | 
			
		||||
apt-key add .gitlab-ci/container/llvm-snapshot.gpg.key
 | 
			
		||||
echo "deb https://apt.llvm.org/buster/ llvm-toolchain-buster-9 main" >/etc/apt/sources.list.d/llvm9.list
 | 
			
		||||
 | 
			
		||||
sed -i -e 's/http:\/\/deb/https:\/\/deb/g' /etc/apt/sources.list
 | 
			
		||||
echo 'deb https://deb.debian.org/debian testing main' >/etc/apt/sources.list.d/testing.list
 | 
			
		||||
 | 
			
		||||
apt-get update
 | 
			
		||||
 | 
			
		||||
# Don't use newer packages from testing by default
 | 
			
		||||
cat >/etc/apt/preferences <<EOF
 | 
			
		||||
Package: *
 | 
			
		||||
Pin: release a=testing
 | 
			
		||||
Pin-Priority: 100
 | 
			
		||||
EOF
 | 
			
		||||
 | 
			
		||||
apt-get dist-upgrade -y
 | 
			
		||||
 | 
			
		||||
apt-get install -y --no-remove \
 | 
			
		||||
      ccache \
 | 
			
		||||
      cmake \
 | 
			
		||||
      g++ \
 | 
			
		||||
      gcc \
 | 
			
		||||
      git \
 | 
			
		||||
      git-lfs \
 | 
			
		||||
      libexpat1 \
 | 
			
		||||
      libgbm-dev \
 | 
			
		||||
      libgles2-mesa-dev \
 | 
			
		||||
      libllvm9 \
 | 
			
		||||
      liblz4-1 \
 | 
			
		||||
      liblz4-dev \
 | 
			
		||||
      libpng-dev \
 | 
			
		||||
      libpng16-16 \
 | 
			
		||||
      libvulkan-dev \
 | 
			
		||||
      libvulkan1 \
 | 
			
		||||
      libwayland-client0 \
 | 
			
		||||
      libwayland-server0 \
 | 
			
		||||
      libxcb-ewmh-dev \
 | 
			
		||||
      libxcb-ewmh2 \
 | 
			
		||||
      libxcb-keysyms1 \
 | 
			
		||||
      libxcb-keysyms1-dev \
 | 
			
		||||
      libxcb-randr0 \
 | 
			
		||||
      libxcb-xfixes0 \
 | 
			
		||||
      libxkbcommon-dev \
 | 
			
		||||
      libxkbcommon0 \
 | 
			
		||||
      libxrandr-dev \
 | 
			
		||||
      libxrandr2 \
 | 
			
		||||
      libxrender-dev \
 | 
			
		||||
      libxrender1 \
 | 
			
		||||
      meson \
 | 
			
		||||
      p7zip \
 | 
			
		||||
      pkg-config \
 | 
			
		||||
      python \
 | 
			
		||||
      python3-distutils \
 | 
			
		||||
      python3-pil \
 | 
			
		||||
      python3-pytest \
 | 
			
		||||
      python3-requests \
 | 
			
		||||
      python3-yaml \
 | 
			
		||||
      vulkan-tools \
 | 
			
		||||
      wget \
 | 
			
		||||
      xauth \
 | 
			
		||||
      xvfb
 | 
			
		||||
 | 
			
		||||
# We need multiarch for Wine
 | 
			
		||||
dpkg --add-architecture i386
 | 
			
		||||
 | 
			
		||||
apt-get update
 | 
			
		||||
 | 
			
		||||
apt-get install -y --no-remove \
 | 
			
		||||
      wine \
 | 
			
		||||
      wine32 \
 | 
			
		||||
      wine64
 | 
			
		||||
 | 
			
		||||
# Install packages we need from Debian testing last, to avoid pulling in more
 | 
			
		||||
apt-get install -y -t testing \
 | 
			
		||||
      libc6-dev
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
############### Set up Wine env variables
 | 
			
		||||
 | 
			
		||||
export WINEDEBUG="-all"
 | 
			
		||||
export WINEPREFIX="/dxvk-wine64"
 | 
			
		||||
 | 
			
		||||
############### Install DXVK
 | 
			
		||||
 | 
			
		||||
DXVK_VERSION="1.6"
 | 
			
		||||
 | 
			
		||||
# We don't want crash dialogs
 | 
			
		||||
cat >crashdialog.reg <<EOF
 | 
			
		||||
Windows Registry Editor Version 5.00
 | 
			
		||||
 | 
			
		||||
[HKEY_CURRENT_USER\Software\Wine\WineDbg]
 | 
			
		||||
"ShowCrashDialog"=dword:00000000
 | 
			
		||||
 | 
			
		||||
EOF
 | 
			
		||||
 | 
			
		||||
# Set the wine prefix and disable the crash dialog
 | 
			
		||||
wine regedit crashdialog.reg
 | 
			
		||||
rm crashdialog.reg
 | 
			
		||||
 | 
			
		||||
# DXVK's setup often fails with:
 | 
			
		||||
# "${WINEPREFIX}: Not a valid wine prefix."
 | 
			
		||||
# and that is just spit because of checking the existance of the
 | 
			
		||||
# system.reg file, which fails.
 | 
			
		||||
# Just giving it a bit more of time for it to be created solves the
 | 
			
		||||
# problem ...
 | 
			
		||||
test -f  "${WINEPREFIX}/system.reg" || sleep 2
 | 
			
		||||
 | 
			
		||||
wget "https://github.com/doitsujin/dxvk/releases/download/v${DXVK_VERSION}/dxvk-${DXVK_VERSION}.tar.gz"
 | 
			
		||||
tar xzpf dxvk-"${DXVK_VERSION}".tar.gz
 | 
			
		||||
dxvk-"${DXVK_VERSION}"/setup_dxvk.sh install
 | 
			
		||||
rm -rf dxvk-"${DXVK_VERSION}"
 | 
			
		||||
rm dxvk-"${DXVK_VERSION}".tar.gz
 | 
			
		||||
 | 
			
		||||
############### Install Windows' apitrace binaries
 | 
			
		||||
 | 
			
		||||
APITRACE_VERSION="9.0"
 | 
			
		||||
APITRACE_VERSION_DATE="20191126"
 | 
			
		||||
 | 
			
		||||
wget "https://github.com/apitrace/apitrace/releases/download/${APITRACE_VERSION}/apitrace-${APITRACE_VERSION}.${APITRACE_VERSION_DATE}-win64.7z"
 | 
			
		||||
7zr x "apitrace-${APITRACE_VERSION}.${APITRACE_VERSION_DATE}-win64.7z" \
 | 
			
		||||
      "apitrace-${APITRACE_VERSION}.${APITRACE_VERSION_DATE}-win64/bin/apitrace.exe" \
 | 
			
		||||
      "apitrace-${APITRACE_VERSION}.${APITRACE_VERSION_DATE}-win64/bin/d3dretrace.exe"
 | 
			
		||||
mv "apitrace-${APITRACE_VERSION}.${APITRACE_VERSION_DATE}-win64" /apitrace-msvc-win64
 | 
			
		||||
rm "apitrace-${APITRACE_VERSION}.${APITRACE_VERSION_DATE}-win64.7z"
 | 
			
		||||
 | 
			
		||||
# Add the apitrace path to the registry
 | 
			
		||||
wine \
 | 
			
		||||
    reg add "HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\Environment" \
 | 
			
		||||
    /v Path \
 | 
			
		||||
    /t REG_EXPAND_SZ \
 | 
			
		||||
    /d "C:\windows\system32;C:\windows;C:\windows\system32\wbem;Z:\apitrace-msvc-win64\bin" \
 | 
			
		||||
    /f
 | 
			
		||||
 | 
			
		||||
############### Building ...
 | 
			
		||||
 | 
			
		||||
. .gitlab-ci/container/container_pre_build.sh
 | 
			
		||||
 | 
			
		||||
############### Build dEQP runner
 | 
			
		||||
 | 
			
		||||
. .gitlab-ci/build-cts-runner.sh
 | 
			
		||||
 | 
			
		||||
############### Build Fossilize
 | 
			
		||||
 | 
			
		||||
. .gitlab-ci/build-fossilize.sh
 | 
			
		||||
 | 
			
		||||
############### Build dEQP VK
 | 
			
		||||
 | 
			
		||||
. .gitlab-ci/build-deqp-vk.sh
 | 
			
		||||
 | 
			
		||||
############### Build gfxreconstruct
 | 
			
		||||
 | 
			
		||||
. .gitlab-ci/build-gfxreconstruct.sh
 | 
			
		||||
 | 
			
		||||
############### Build VulkanTools
 | 
			
		||||
 | 
			
		||||
. .gitlab-ci/build-vulkantools.sh
 | 
			
		||||
 | 
			
		||||
############### Uninstall the build software
 | 
			
		||||
 | 
			
		||||
ccache --show-stats
 | 
			
		||||
 | 
			
		||||
apt-get purge -y \
 | 
			
		||||
      ccache \
 | 
			
		||||
      cmake \
 | 
			
		||||
      g++ \
 | 
			
		||||
      gcc \
 | 
			
		||||
      gnupg \
 | 
			
		||||
      libgbm-dev \
 | 
			
		||||
      libgles2-mesa-dev \
 | 
			
		||||
      liblz4-dev \
 | 
			
		||||
      libpng-dev \
 | 
			
		||||
      libvulkan-dev \
 | 
			
		||||
      libxcb-ewmh-dev \
 | 
			
		||||
      libxcb-keysyms1-dev \
 | 
			
		||||
      libxkbcommon-dev \
 | 
			
		||||
      libxrandr-dev \
 | 
			
		||||
      libxrender-dev \
 | 
			
		||||
      meson \
 | 
			
		||||
      p7zip \
 | 
			
		||||
      pkg-config \
 | 
			
		||||
      wget
 | 
			
		||||
 | 
			
		||||
apt-get autoremove -y --purge
 | 
			
		||||
@@ -1,34 +0,0 @@
 | 
			
		||||
#!/bin/bash
 | 
			
		||||
 | 
			
		||||
arch=$1
 | 
			
		||||
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"
 | 
			
		||||
fi
 | 
			
		||||
# Rely on qemu-user being configured in binfmt_misc on the host
 | 
			
		||||
sed -i -e '/\[properties\]/a\' -e "needs_exe_wrapper = False" "$cross_file"
 | 
			
		||||
 | 
			
		||||
# Set up cmake cross compile toolchain file for dEQP builds
 | 
			
		||||
toolchain_file="/toolchain-$arch.cmake"
 | 
			
		||||
if [[ "$arch" = "arm64" ]]; then
 | 
			
		||||
    GCC_ARCH="aarch64-linux-gnu"
 | 
			
		||||
    DE_CPU="DE_CPU_ARM_64"
 | 
			
		||||
    CMAKE_ARCH=arm
 | 
			
		||||
elif [[ "$arch" = "armhf" ]]; then
 | 
			
		||||
    GCC_ARCH="arm-linux-gnueabihf"
 | 
			
		||||
    DE_CPU="DE_CPU_ARM"
 | 
			
		||||
    CMAKE_ARCH=arm
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
if [[ -n "$GCC_ARCH" ]]; then
 | 
			
		||||
    echo "set(CMAKE_SYSTEM_NAME Linux)" > "$toolchain_file"
 | 
			
		||||
    echo "set(CMAKE_SYSTEM_PROCESSOR arm)" >> "$toolchain_file"
 | 
			
		||||
    echo "set(CMAKE_C_COMPILER /usr/lib/ccache/$GCC_ARCH-gcc)" >> "$toolchain_file"
 | 
			
		||||
    echo "set(CMAKE_CXX_COMPILER /usr/lib/ccache/$GCC_ARCH-g++)" >> "$toolchain_file"
 | 
			
		||||
    echo "set(ENV{PKG_CONFIG} \"/usr/bin/$GCC_ARCH-pkg-config\")" >> "$toolchain_file"
 | 
			
		||||
    echo "set(DE_CPU $DE_CPU)" >> "$toolchain_file"
 | 
			
		||||
fi
 | 
			
		||||
@@ -1,206 +0,0 @@
 | 
			
		||||
#!/bin/bash
 | 
			
		||||
 | 
			
		||||
set -ex
 | 
			
		||||
 | 
			
		||||
apt-get -y install --no-install-recommends \
 | 
			
		||||
    ca-certificates \
 | 
			
		||||
    initramfs-tools \
 | 
			
		||||
    libpng16-16 \
 | 
			
		||||
    strace \
 | 
			
		||||
    libsensors5 \
 | 
			
		||||
    libexpat1 \
 | 
			
		||||
    libdrm2 \
 | 
			
		||||
    libdrm-nouveau2 \
 | 
			
		||||
    firmware-qcom-media \
 | 
			
		||||
    netcat-openbsd \
 | 
			
		||||
    wget \
 | 
			
		||||
    xz-utils
 | 
			
		||||
passwd root -d
 | 
			
		||||
chsh -s /bin/sh
 | 
			
		||||
 | 
			
		||||
cat > /init <<EOF
 | 
			
		||||
#!/bin/sh
 | 
			
		||||
export PS1=lava-shell:
 | 
			
		||||
exec sh
 | 
			
		||||
EOF
 | 
			
		||||
chmod +x  /init
 | 
			
		||||
 | 
			
		||||
mkdir -p /lib/firmware/rtl_nic
 | 
			
		||||
wget https://git.kernel.org/pub/scm/linux/kernel/git/firmware/linux-firmware.git/tree/rtl_nic/rtl8153a-3.fw -O /lib/firmware/rtl_nic/rtl8153a-3.fw
 | 
			
		||||
 | 
			
		||||
#######################################################################
 | 
			
		||||
# Strip the image to a small minimal system without removing the debian
 | 
			
		||||
# toolchain.
 | 
			
		||||
 | 
			
		||||
# xz compress firmware so it doesn't waste RAM at runtime.  Except db820c's
 | 
			
		||||
# GPU firmware, due to using a precompiled kernel without compression support.
 | 
			
		||||
find /lib/firmware -type f -print0 | \
 | 
			
		||||
    grep -vz a530 | \
 | 
			
		||||
    xargs -0r -P4 -n4 xz -T1 -C crc32
 | 
			
		||||
ln -s /lib/firmware/qcom/a530* /lib/firmware/
 | 
			
		||||
 | 
			
		||||
# 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-pkg6.0 "\
 | 
			
		||||
"ncurses-bin ncurses-base libncursesw6 libncurses6 "\
 | 
			
		||||
"perl-base "\
 | 
			
		||||
"debconf libdebconfclient0 "\
 | 
			
		||||
"e2fsprogs e2fslibs libfdisk1 "\
 | 
			
		||||
"insserv "\
 | 
			
		||||
"udev "\
 | 
			
		||||
"init-system-helpers "\
 | 
			
		||||
"bash "\
 | 
			
		||||
"cpio "\
 | 
			
		||||
"xz-utils "\
 | 
			
		||||
"passwd "\
 | 
			
		||||
"libsemanage1 libsemanage-common "\
 | 
			
		||||
"libsepol1 "\
 | 
			
		||||
"gpgv "\
 | 
			
		||||
"hostname "\
 | 
			
		||||
"adduser "\
 | 
			
		||||
"debian-archive-keyring "\
 | 
			
		||||
 | 
			
		||||
# Removing unneeded packages
 | 
			
		||||
for PACKAGE in ${UNNEEDED_PACKAGES}
 | 
			
		||||
do
 | 
			
		||||
	echo "Forcing removal of ${PACKAGE}"
 | 
			
		||||
	if ! dpkg --purge --force-remove-essential --force-depends "${PACKAGE}"
 | 
			
		||||
	then
 | 
			
		||||
		echo "WARNING: ${PACKAGE} isn't installed"
 | 
			
		||||
	fi
 | 
			
		||||
done
 | 
			
		||||
 | 
			
		||||
# Show what's left package-wise before dropping dpkg itself
 | 
			
		||||
COLUMNS=300 dpkg-query -W --showformat='${Installed-Size;10}\t${Package}\n' | sort -k1,1n
 | 
			
		||||
 | 
			
		||||
# Drop dpkg
 | 
			
		||||
dpkg --purge --force-remove-essential --force-depends  dpkg
 | 
			
		||||
 | 
			
		||||
# No apt or dpkg, no need for its configuration archives
 | 
			
		||||
rm -rf etc/apt
 | 
			
		||||
rm -rf etc/dpkg
 | 
			
		||||
 | 
			
		||||
# Drop directories not part of ostree
 | 
			
		||||
# Note that /var needs to exist as ostree bind mounts the deployment /var over
 | 
			
		||||
# it
 | 
			
		||||
rm -rf var/* opt srv share
 | 
			
		||||
 | 
			
		||||
# ca-certificates are in /etc drop the source
 | 
			
		||||
rm -rf usr/share/ca-certificates
 | 
			
		||||
 | 
			
		||||
# No bash, no need for completions
 | 
			
		||||
rm -rf usr/share/bash-completion
 | 
			
		||||
 | 
			
		||||
# No zsh, no need for comletions
 | 
			
		||||
rm -rf usr/share/zsh/vendor-completions
 | 
			
		||||
 | 
			
		||||
# drop gcc-6 python helpers
 | 
			
		||||
rm -rf usr/share/gcc-6
 | 
			
		||||
 | 
			
		||||
# Drop sysvinit leftovers
 | 
			
		||||
rm -rf etc/init.d
 | 
			
		||||
rm -rf etc/rc[0-6S].d
 | 
			
		||||
 | 
			
		||||
# Drop upstart helpers
 | 
			
		||||
rm -rf etc/init
 | 
			
		||||
 | 
			
		||||
# Various xtables helpers
 | 
			
		||||
rm -rf usr/lib/xtables
 | 
			
		||||
 | 
			
		||||
# Drop all locales
 | 
			
		||||
# TODO: only remaining locale is actually "C". Should we really remove it?
 | 
			
		||||
rm -rf usr/lib/locale/*
 | 
			
		||||
 | 
			
		||||
# partition helpers
 | 
			
		||||
rm -rf usr/sbin/*fdisk
 | 
			
		||||
 | 
			
		||||
# local compiler
 | 
			
		||||
rm -rf 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 -rf 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 -rf usr/lib/*/security/pam_userdb.so
 | 
			
		||||
rm -rf usr/lib/*/libdb-5.3.so
 | 
			
		||||
 | 
			
		||||
# remove NSS support for nis, nisplus and hesiod
 | 
			
		||||
rm -rf usr/lib/*/libnss_hesiod*
 | 
			
		||||
rm -rf usr/lib/*/libnss_nis*
 | 
			
		||||
@@ -1 +0,0 @@
 | 
			
		||||
u_format_test
 | 
			
		||||
@@ -1,4 +0,0 @@
 | 
			
		||||
lp_test_arit
 | 
			
		||||
roundeven
 | 
			
		||||
u_format_test
 | 
			
		||||
u_half_test
 | 
			
		||||
@@ -1,4 +0,0 @@
 | 
			
		||||
lp_test_arit
 | 
			
		||||
lp_test_format
 | 
			
		||||
lp_test_printf
 | 
			
		||||
u_format_test
 | 
			
		||||
@@ -1,10 +0,0 @@
 | 
			
		||||
# Note: skips lists for CI are just a list of lines that, when
 | 
			
		||||
# non-zero-length and not starting with '#', will regex match to
 | 
			
		||||
# delete lines from the test list.  Be careful.
 | 
			
		||||
 | 
			
		||||
# Skip the perf/stress tests to keep runtime manageable
 | 
			
		||||
dEQP-GLES[0-9]*.performance.*
 | 
			
		||||
dEQP-GLES[0-9]*.stress.*
 | 
			
		||||
 | 
			
		||||
# These are really slow on tiling architectures (including llvmpipe).
 | 
			
		||||
dEQP-GLES[0-9]*.functional.flush_finish.*
 | 
			
		||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							@@ -1,23 +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.*
 | 
			
		||||
 | 
			
		||||
# Flaky results
 | 
			
		||||
dEQP-GLES3.functional.occlusion_query.stencil_write
 | 
			
		||||
dEQP-GLES3.functional.rasterization.fbo.rbo_.*
 | 
			
		||||
dEQP-GLES3.functional.rasterization.fbo.texture_2d.interpolation.triangles
 | 
			
		||||
dEQP-GLES3.functional.rasterization.fbo.texture_2d.primitives.points
 | 
			
		||||
dEQP-GLES3.functional.rasterization.flatshading.lines_wide
 | 
			
		||||
dEQP-GLES3.functional.rasterization.flatshading.triangles
 | 
			
		||||
dEQP-GLES3.functional.shaders.linkage.varying.interpolation.centroid
 | 
			
		||||
dEQP-GLES3.functional.shaders.texture_functions.texturegradoffset.*
 | 
			
		||||
dEQP-GLES3.functional.shaders.texture_functions.textureprojgradoffset.*
 | 
			
		||||
dEQP-GLES3.functional.texture.units.4_units.only_3d.*
 | 
			
		||||
dEQP-GLES3.functional.vertex_arrays.single_attribute.*
 | 
			
		||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							@@ -1,17 +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 results (probably related to the iommu faults).
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.*
 | 
			
		||||
dEQP-GLES3.functional.texture.vertex.3d.filtering.*
 | 
			
		||||
dEQP-GLES3.functional.fbo.invalidate.sub.unbind_blit_msaa_stencil
 | 
			
		||||
dEQP-GLES3.functional.fbo.invalidate.whole.unbind_blit_msaa_stencil
 | 
			
		||||
dEQP-GLES31.functional.ubo.2_level_struct_array.single_buffer.packed_instance_array_fragment
 | 
			
		||||
@@ -1,96 +0,0 @@
 | 
			
		||||
dEQP-GLES31.functional.blend_equation_advanced.barrier.colorburn
 | 
			
		||||
dEQP-GLES31.functional.blend_equation_advanced.barrier.colordodge
 | 
			
		||||
dEQP-GLES31.functional.blend_equation_advanced.barrier.darken
 | 
			
		||||
dEQP-GLES31.functional.blend_equation_advanced.barrier.difference
 | 
			
		||||
dEQP-GLES31.functional.blend_equation_advanced.barrier.exclusion
 | 
			
		||||
dEQP-GLES31.functional.blend_equation_advanced.barrier.hardlight
 | 
			
		||||
dEQP-GLES31.functional.blend_equation_advanced.barrier.hsl_color
 | 
			
		||||
dEQP-GLES31.functional.blend_equation_advanced.barrier.hsl_hue
 | 
			
		||||
dEQP-GLES31.functional.blend_equation_advanced.barrier.hsl_luminosity
 | 
			
		||||
dEQP-GLES31.functional.blend_equation_advanced.barrier.hsl_saturation
 | 
			
		||||
dEQP-GLES31.functional.blend_equation_advanced.barrier.lighten
 | 
			
		||||
dEQP-GLES31.functional.blend_equation_advanced.barrier.multiply
 | 
			
		||||
dEQP-GLES31.functional.blend_equation_advanced.barrier.overlay
 | 
			
		||||
dEQP-GLES31.functional.blend_equation_advanced.barrier.screen
 | 
			
		||||
dEQP-GLES31.functional.blend_equation_advanced.barrier.softlight
 | 
			
		||||
dEQP-GLES31.functional.blend_equation_advanced.basic.colorburn
 | 
			
		||||
dEQP-GLES31.functional.blend_equation_advanced.basic.colordodge
 | 
			
		||||
dEQP-GLES31.functional.blend_equation_advanced.basic.darken
 | 
			
		||||
dEQP-GLES31.functional.blend_equation_advanced.basic.difference
 | 
			
		||||
dEQP-GLES31.functional.blend_equation_advanced.basic.exclusion
 | 
			
		||||
dEQP-GLES31.functional.blend_equation_advanced.basic.hardlight
 | 
			
		||||
dEQP-GLES31.functional.blend_equation_advanced.basic.hsl_color
 | 
			
		||||
dEQP-GLES31.functional.blend_equation_advanced.basic.hsl_hue
 | 
			
		||||
dEQP-GLES31.functional.blend_equation_advanced.basic.hsl_luminosity
 | 
			
		||||
dEQP-GLES31.functional.blend_equation_advanced.basic.hsl_saturation
 | 
			
		||||
dEQP-GLES31.functional.blend_equation_advanced.basic.lighten
 | 
			
		||||
dEQP-GLES31.functional.blend_equation_advanced.basic.multiply
 | 
			
		||||
dEQP-GLES31.functional.blend_equation_advanced.basic.overlay
 | 
			
		||||
dEQP-GLES31.functional.blend_equation_advanced.basic.screen
 | 
			
		||||
dEQP-GLES31.functional.blend_equation_advanced.basic.softlight
 | 
			
		||||
dEQP-GLES31.functional.blend_equation_advanced.msaa.colorburn
 | 
			
		||||
dEQP-GLES31.functional.blend_equation_advanced.msaa.colordodge
 | 
			
		||||
dEQP-GLES31.functional.blend_equation_advanced.msaa.darken
 | 
			
		||||
dEQP-GLES31.functional.blend_equation_advanced.msaa.difference
 | 
			
		||||
dEQP-GLES31.functional.blend_equation_advanced.msaa.exclusion
 | 
			
		||||
dEQP-GLES31.functional.blend_equation_advanced.msaa.hardlight
 | 
			
		||||
dEQP-GLES31.functional.blend_equation_advanced.msaa.hsl_color
 | 
			
		||||
dEQP-GLES31.functional.blend_equation_advanced.msaa.hsl_hue
 | 
			
		||||
dEQP-GLES31.functional.blend_equation_advanced.msaa.hsl_luminosity
 | 
			
		||||
dEQP-GLES31.functional.blend_equation_advanced.msaa.hsl_saturation
 | 
			
		||||
dEQP-GLES31.functional.blend_equation_advanced.msaa.lighten
 | 
			
		||||
dEQP-GLES31.functional.blend_equation_advanced.msaa.multiply
 | 
			
		||||
dEQP-GLES31.functional.blend_equation_advanced.msaa.overlay
 | 
			
		||||
dEQP-GLES31.functional.blend_equation_advanced.msaa.screen
 | 
			
		||||
dEQP-GLES31.functional.blend_equation_advanced.msaa.softlight
 | 
			
		||||
dEQP-GLES31.functional.blend_equation_advanced.srgb.colorburn
 | 
			
		||||
dEQP-GLES31.functional.blend_equation_advanced.srgb.colordodge
 | 
			
		||||
dEQP-GLES31.functional.blend_equation_advanced.srgb.darken
 | 
			
		||||
dEQP-GLES31.functional.blend_equation_advanced.srgb.difference
 | 
			
		||||
dEQP-GLES31.functional.blend_equation_advanced.srgb.exclusion
 | 
			
		||||
dEQP-GLES31.functional.blend_equation_advanced.srgb.hardlight
 | 
			
		||||
dEQP-GLES31.functional.blend_equation_advanced.srgb.hsl_color
 | 
			
		||||
dEQP-GLES31.functional.blend_equation_advanced.srgb.hsl_hue
 | 
			
		||||
dEQP-GLES31.functional.blend_equation_advanced.srgb.hsl_luminosity
 | 
			
		||||
dEQP-GLES31.functional.blend_equation_advanced.srgb.hsl_saturation
 | 
			
		||||
dEQP-GLES31.functional.blend_equation_advanced.srgb.lighten
 | 
			
		||||
dEQP-GLES31.functional.blend_equation_advanced.srgb.multiply
 | 
			
		||||
dEQP-GLES31.functional.blend_equation_advanced.srgb.overlay
 | 
			
		||||
dEQP-GLES31.functional.blend_equation_advanced.srgb.screen
 | 
			
		||||
dEQP-GLES31.functional.blend_equation_advanced.srgb.softlight
 | 
			
		||||
dEQP-GLES31.functional.compute.basic.shared_var_single_group
 | 
			
		||||
dEQP-GLES31.functional.draw_buffers_indexed.overwrite_common.common_advanced_blend_eq_buffer_advanced_blend_eq
 | 
			
		||||
dEQP-GLES31.functional.draw_buffers_indexed.overwrite_common.common_blend_eq_buffer_advanced_blend_eq
 | 
			
		||||
dEQP-GLES31.functional.draw_buffers_indexed.overwrite_common.common_separate_blend_eq_buffer_advanced_blend_eq
 | 
			
		||||
dEQP-GLES31.functional.draw_buffers_indexed.overwrite_indexed.common_advanced_blend_eq_buffer_advanced_blend_eq
 | 
			
		||||
dEQP-GLES31.functional.draw_buffers_indexed.overwrite_indexed.common_advanced_blend_eq_buffer_blend_eq
 | 
			
		||||
dEQP-GLES31.functional.draw_buffers_indexed.overwrite_indexed.common_advanced_blend_eq_buffer_separate_blend_eq
 | 
			
		||||
dEQP-GLES31.functional.draw_buffers_indexed.overwrite_indexed.common_separate_blend_eq_buffer_blend_eq
 | 
			
		||||
dEQP-GLES31.functional.draw_buffers_indexed.random.max_implementation_draw_buffers.11
 | 
			
		||||
dEQP-GLES31.functional.draw_buffers_indexed.random.max_implementation_draw_buffers.15
 | 
			
		||||
dEQP-GLES31.functional.draw_buffers_indexed.random.max_implementation_draw_buffers.17
 | 
			
		||||
dEQP-GLES31.functional.draw_buffers_indexed.random.max_implementation_draw_buffers.18
 | 
			
		||||
dEQP-GLES31.functional.draw_buffers_indexed.random.max_implementation_draw_buffers.2
 | 
			
		||||
dEQP-GLES31.functional.draw_buffers_indexed.random.max_implementation_draw_buffers.3
 | 
			
		||||
dEQP-GLES31.functional.draw_buffers_indexed.random.max_implementation_draw_buffers.6
 | 
			
		||||
dEQP-GLES31.functional.draw_buffers_indexed.random.max_implementation_draw_buffers.7
 | 
			
		||||
dEQP-GLES31.functional.draw_buffers_indexed.random.max_required_draw_buffers.19
 | 
			
		||||
dEQP-GLES31.functional.draw_buffers_indexed.random.max_required_draw_buffers.3
 | 
			
		||||
dEQP-GLES31.functional.image_load_store.early_fragment_tests.early_fragment_tests_depth_fbo
 | 
			
		||||
dEQP-GLES31.functional.ssbo.layout.3_level_array.std140.column_major_mat4x2
 | 
			
		||||
dEQP-GLES31.functional.ssbo.layout.3_level_unsized_array.std430.mat3
 | 
			
		||||
dEQP-GLES31.functional.ssbo.layout.random.arrays_of_arrays.6
 | 
			
		||||
dEQP-GLES31.functional.ssbo.layout.unsized_struct_array.per_block_buffer.shared_instance_array
 | 
			
		||||
dEQP-GLES31.functional.stencil_texturing.render.depth24_stencil8_draw
 | 
			
		||||
dEQP-GLES31.functional.stencil_texturing.render.depth32f_stencil8_clear
 | 
			
		||||
dEQP-GLES31.functional.stencil_texturing.render.depth32f_stencil8_draw
 | 
			
		||||
dEQP-GLES31.functional.tessellation.invariance.inner_triangle_set.quads_fractional_even_spacing
 | 
			
		||||
dEQP-GLES31.functional.tessellation.invariance.tess_coord_component_range.triangles_fractional_odd_spacing_cw
 | 
			
		||||
dEQP-GLES31.functional.texture.multisample.samples_1.use_texture_depth_2d
 | 
			
		||||
dEQP-GLES31.functional.texture.multisample.samples_1.use_texture_depth_2d_array
 | 
			
		||||
dEQP-GLES31.functional.texture.multisample.samples_2.use_texture_depth_2d
 | 
			
		||||
dEQP-GLES31.functional.texture.multisample.samples_2.use_texture_depth_2d_array
 | 
			
		||||
dEQP-GLES31.functional.texture.multisample.samples_3.use_texture_depth_2d
 | 
			
		||||
dEQP-GLES31.functional.texture.multisample.samples_3.use_texture_depth_2d_array
 | 
			
		||||
dEQP-GLES31.functional.texture.multisample.samples_4.use_texture_depth_2d
 | 
			
		||||
dEQP-GLES31.functional.texture.multisample.samples_4.use_texture_depth_2d_array
 | 
			
		||||
@@ -1,4 +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-GLES2.functional.clip_control.depth_mode_zero_to_one
 | 
			
		||||
dEQP-GLES31.functional.stencil_texturing.render.depth24_stencil8_clear
 | 
			
		||||
dEQP-GLES31.functional.stencil_texturing.render.depth24_stencil8_draw
 | 
			
		||||
@@ -1,80 +0,0 @@
 | 
			
		||||
dEQP-GLES31.functional.stencil_texturing.render.depth24_stencil8_clear
 | 
			
		||||
dEQP-GLES31.functional.stencil_texturing.render.depth24_stencil8_draw
 | 
			
		||||
dEQP-GLES31.functional.ubo.random.all_per_block_buffers.0
 | 
			
		||||
dEQP-GLES31.functional.ubo.random.all_per_block_buffers.11
 | 
			
		||||
dEQP-GLES31.functional.ubo.random.all_per_block_buffers.12
 | 
			
		||||
dEQP-GLES31.functional.ubo.random.all_per_block_buffers.15
 | 
			
		||||
dEQP-GLES31.functional.ubo.random.all_per_block_buffers.16
 | 
			
		||||
dEQP-GLES31.functional.ubo.random.all_per_block_buffers.18
 | 
			
		||||
dEQP-GLES31.functional.ubo.random.all_per_block_buffers.19
 | 
			
		||||
dEQP-GLES31.functional.ubo.random.all_per_block_buffers.20
 | 
			
		||||
dEQP-GLES31.functional.ubo.random.all_per_block_buffers.21
 | 
			
		||||
dEQP-GLES31.functional.ubo.random.all_per_block_buffers.23
 | 
			
		||||
dEQP-GLES31.functional.ubo.random.all_per_block_buffers.24
 | 
			
		||||
dEQP-GLES31.functional.ubo.random.all_per_block_buffers.27
 | 
			
		||||
dEQP-GLES31.functional.ubo.random.all_per_block_buffers.28
 | 
			
		||||
dEQP-GLES31.functional.ubo.random.all_per_block_buffers.29
 | 
			
		||||
dEQP-GLES31.functional.ubo.random.all_per_block_buffers.3
 | 
			
		||||
dEQP-GLES31.functional.ubo.random.all_per_block_buffers.31
 | 
			
		||||
dEQP-GLES31.functional.ubo.random.all_per_block_buffers.35
 | 
			
		||||
dEQP-GLES31.functional.ubo.random.all_per_block_buffers.37
 | 
			
		||||
dEQP-GLES31.functional.ubo.random.all_per_block_buffers.39
 | 
			
		||||
dEQP-GLES31.functional.ubo.random.all_per_block_buffers.40
 | 
			
		||||
dEQP-GLES31.functional.ubo.random.all_per_block_buffers.43
 | 
			
		||||
dEQP-GLES31.functional.ubo.random.all_per_block_buffers.44
 | 
			
		||||
dEQP-GLES31.functional.ubo.random.all_per_block_buffers.45
 | 
			
		||||
dEQP-GLES31.functional.ubo.random.all_per_block_buffers.48
 | 
			
		||||
dEQP-GLES31.functional.ubo.random.all_per_block_buffers.5
 | 
			
		||||
dEQP-GLES31.functional.ubo.random.all_per_block_buffers.6
 | 
			
		||||
dEQP-GLES31.functional.ubo.random.all_per_block_buffers.7
 | 
			
		||||
dEQP-GLES31.functional.ubo.random.all_per_block_buffers.8
 | 
			
		||||
dEQP-GLES31.functional.ubo.random.all_shared_buffer.0
 | 
			
		||||
dEQP-GLES31.functional.ubo.random.all_shared_buffer.12
 | 
			
		||||
dEQP-GLES31.functional.ubo.random.all_shared_buffer.14
 | 
			
		||||
dEQP-GLES31.functional.ubo.random.all_shared_buffer.16
 | 
			
		||||
dEQP-GLES31.functional.ubo.random.all_shared_buffer.17
 | 
			
		||||
dEQP-GLES31.functional.ubo.random.all_shared_buffer.18
 | 
			
		||||
dEQP-GLES31.functional.ubo.random.all_shared_buffer.2
 | 
			
		||||
dEQP-GLES31.functional.ubo.random.all_shared_buffer.20
 | 
			
		||||
dEQP-GLES31.functional.ubo.random.all_shared_buffer.21
 | 
			
		||||
dEQP-GLES31.functional.ubo.random.all_shared_buffer.23
 | 
			
		||||
dEQP-GLES31.functional.ubo.random.all_shared_buffer.24
 | 
			
		||||
dEQP-GLES31.functional.ubo.random.all_shared_buffer.25
 | 
			
		||||
dEQP-GLES31.functional.ubo.random.all_shared_buffer.27
 | 
			
		||||
dEQP-GLES31.functional.ubo.random.all_shared_buffer.29
 | 
			
		||||
dEQP-GLES31.functional.ubo.random.all_shared_buffer.3
 | 
			
		||||
dEQP-GLES31.functional.ubo.random.all_shared_buffer.31
 | 
			
		||||
dEQP-GLES31.functional.ubo.random.all_shared_buffer.35
 | 
			
		||||
dEQP-GLES31.functional.ubo.random.all_shared_buffer.37
 | 
			
		||||
dEQP-GLES31.functional.ubo.random.all_shared_buffer.4
 | 
			
		||||
dEQP-GLES31.functional.ubo.random.all_shared_buffer.40
 | 
			
		||||
dEQP-GLES31.functional.ubo.random.all_shared_buffer.43
 | 
			
		||||
dEQP-GLES31.functional.ubo.random.all_shared_buffer.45
 | 
			
		||||
dEQP-GLES31.functional.ubo.random.all_shared_buffer.46
 | 
			
		||||
dEQP-GLES31.functional.ubo.random.all_shared_buffer.47
 | 
			
		||||
dEQP-GLES31.functional.ubo.random.all_shared_buffer.48
 | 
			
		||||
dEQP-GLES31.functional.ubo.random.all_shared_buffer.5
 | 
			
		||||
dEQP-GLES31.functional.ubo.random.all_shared_buffer.6
 | 
			
		||||
dEQP-GLES31.functional.ubo.random.all_shared_buffer.9
 | 
			
		||||
dEQP-GLES31.functional.ubo.random.basic_type_arrays.0
 | 
			
		||||
dEQP-GLES31.functional.ubo.random.basic_type_arrays.1
 | 
			
		||||
dEQP-GLES31.functional.ubo.random.basic_type_arrays.10
 | 
			
		||||
dEQP-GLES31.functional.ubo.random.basic_type_arrays.11
 | 
			
		||||
dEQP-GLES31.functional.ubo.random.basic_type_arrays.12
 | 
			
		||||
dEQP-GLES31.functional.ubo.random.basic_type_arrays.13
 | 
			
		||||
dEQP-GLES31.functional.ubo.random.basic_type_arrays.15
 | 
			
		||||
dEQP-GLES31.functional.ubo.random.basic_type_arrays.16
 | 
			
		||||
dEQP-GLES31.functional.ubo.random.basic_type_arrays.18
 | 
			
		||||
dEQP-GLES31.functional.ubo.random.basic_type_arrays.19
 | 
			
		||||
dEQP-GLES31.functional.ubo.random.basic_type_arrays.20
 | 
			
		||||
dEQP-GLES31.functional.ubo.random.basic_type_arrays.21
 | 
			
		||||
dEQP-GLES31.functional.ubo.random.basic_type_arrays.22
 | 
			
		||||
dEQP-GLES31.functional.ubo.random.basic_type_arrays.23
 | 
			
		||||
dEQP-GLES31.functional.ubo.random.basic_type_arrays.24
 | 
			
		||||
dEQP-GLES31.functional.ubo.random.basic_type_arrays.3
 | 
			
		||||
dEQP-GLES31.functional.ubo.random.basic_type_arrays.4
 | 
			
		||||
dEQP-GLES31.functional.ubo.random.basic_type_arrays.5
 | 
			
		||||
dEQP-GLES31.functional.ubo.random.basic_type_arrays.6
 | 
			
		||||
dEQP-GLES31.functional.ubo.random.basic_type_arrays.7
 | 
			
		||||
dEQP-GLES31.functional.ubo.random.basic_type_arrays.8
 | 
			
		||||
dEQP-GLES31.functional.ubo.random.basic_type_arrays.9
 | 
			
		||||
@@ -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.*
 | 
			
		||||
 | 
			
		||||
# Unstable test results
 | 
			
		||||
#dEQP-GLES3.functional.fragment_out.random.*
 | 
			
		||||
dEQP-GLES3.functional.transform_feedback.*points.*
 | 
			
		||||
dEQP-GLES3.functional.transform_feedback.*lines.*
 | 
			
		||||
dEQP-GLES31.functional.primitive_bounding_box.*
 | 
			
		||||
#dEQP-GLES31.functional.layout_binding.ssbo.fragment_binding_array.*
 | 
			
		||||
 | 
			
		||||
# Intermittent timeout
 | 
			
		||||
dEQP-GLES31.functional.ssbo.layout.random.all_shared_buffer.23
 | 
			
		||||
dEQP-GLES31.functional.ssbo.layout.random.all_shared_buffer.48
 | 
			
		||||
 | 
			
		||||
# Flakes reported more than once during Jan-Feb 2020
 | 
			
		||||
dEQP-GLES31.functional.layout_binding.ssbo.fragment_binding_array
 | 
			
		||||
dEQP-GLES3.functional.fragment_out.random.0
 | 
			
		||||
dEQP-GLES3.functional.fragment_out.random.1
 | 
			
		||||
dEQP-GLES3.functional.fragment_out.random.12
 | 
			
		||||
dEQP-GLES3.functional.fragment_out.random.13
 | 
			
		||||
dEQP-GLES3.functional.fragment_out.random.17
 | 
			
		||||
dEQP-GLES3.functional.fragment_out.random.24
 | 
			
		||||
dEQP-GLES3.functional.fragment_out.random.27
 | 
			
		||||
dEQP-GLES3.functional.fragment_out.random.28
 | 
			
		||||
dEQP-GLES3.functional.fragment_out.random.32
 | 
			
		||||
dEQP-GLES3.functional.fragment_out.random.34
 | 
			
		||||
dEQP-GLES3.functional.fragment_out.random.35
 | 
			
		||||
dEQP-GLES3.functional.fragment_out.random.36
 | 
			
		||||
dEQP-GLES3.functional.fragment_out.random.40
 | 
			
		||||
dEQP-GLES3.functional.fragment_out.random.44
 | 
			
		||||
dEQP-GLES3.functional.fragment_out.random.47
 | 
			
		||||
dEQP-GLES3.functional.fragment_out.random.5
 | 
			
		||||
dEQP-GLES3.functional.fragment_out.random.50
 | 
			
		||||
dEQP-GLES3.functional.fragment_out.random.51
 | 
			
		||||
dEQP-GLES3.functional.fragment_out.random.55
 | 
			
		||||
dEQP-GLES3.functional.fragment_out.random.58
 | 
			
		||||
dEQP-GLES3.functional.fragment_out.random.59
 | 
			
		||||
dEQP-GLES3.functional.fragment_out.random.61
 | 
			
		||||
dEQP-GLES3.functional.fragment_out.random.63
 | 
			
		||||
dEQP-GLES3.functional.fragment_out.random.66
 | 
			
		||||
dEQP-GLES3.functional.fragment_out.random.67
 | 
			
		||||
dEQP-GLES3.functional.fragment_out.random.69
 | 
			
		||||
dEQP-GLES3.functional.fragment_out.random.70
 | 
			
		||||
dEQP-GLES3.functional.fragment_out.random.71
 | 
			
		||||
dEQP-GLES3.functional.fragment_out.random.80
 | 
			
		||||
dEQP-GLES3.functional.fragment_out.random.82
 | 
			
		||||
dEQP-GLES3.functional.fragment_out.random.86
 | 
			
		||||
dEQP-GLES3.functional.fragment_out.random.88
 | 
			
		||||
dEQP-GLES3.functional.fragment_out.random.91
 | 
			
		||||
dEQP-GLES3.functional.fragment_out.random.93
 | 
			
		||||
dEQP-GLES3.functional.fragment_out.random.95
 | 
			
		||||
dEQP-GLES3.functional.fragment_out.random.96
 | 
			
		||||
dEQP-GLES3.functional.transform_feedback.array_element.interleaved.triangles.highp_mat2x3
 | 
			
		||||
dEQP-GLES3.functional.transform_feedback.array_element.interleaved.triangles.lowp_mat2x4
 | 
			
		||||
dEQP-GLES3.functional.transform_feedback.array_element.separate.triangles.lowp_mat2x4
 | 
			
		||||
@@ -1,66 +0,0 @@
 | 
			
		||||
dEQP-GLES2.functional.clipping.line.wide_line_clip_viewport_center
 | 
			
		||||
dEQP-GLES2.functional.clipping.line.wide_line_clip_viewport_corner
 | 
			
		||||
dEQP-GLES2.functional.clipping.triangle_vertex.clip_two.clip_neg_x_neg_y_pos_z_and_pos_x_pos_y_neg_z
 | 
			
		||||
dEQP-GLES2.functional.clipping.triangle_vertex.clip_two.clip_neg_x_pos_y_pos_z_and_pos_x_neg_y_neg_z
 | 
			
		||||
dEQP-GLES2.functional.clipping.triangle_vertex.clip_two.clip_pos_x_neg_y_pos_z_and_neg_x_pos_y_neg_z
 | 
			
		||||
dEQP-GLES2.functional.clipping.triangle_vertex.clip_two.clip_pos_x_pos_y_pos_z_and_neg_x_neg_y_neg_z
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.shared_depthbuffer.rbo_rgb565_depth_component16
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.shared_depthbuffer.rbo_rgb5_a1_depth_component16
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.shared_depthbuffer.rbo_rgba4_depth_component16
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.shared_depthbuffer.tex2d_rgba_depth_component16
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.shared_depthbuffer.tex2d_rgb_depth_component16
 | 
			
		||||
dEQP-GLES2.functional.fragment_ops.depth_stencil.random.0
 | 
			
		||||
dEQP-GLES2.functional.fragment_ops.depth_stencil.random.1
 | 
			
		||||
dEQP-GLES2.functional.fragment_ops.depth_stencil.random.10
 | 
			
		||||
dEQP-GLES2.functional.fragment_ops.depth_stencil.random.11
 | 
			
		||||
dEQP-GLES2.functional.fragment_ops.depth_stencil.random.12
 | 
			
		||||
dEQP-GLES2.functional.fragment_ops.depth_stencil.random.13
 | 
			
		||||
dEQP-GLES2.functional.fragment_ops.depth_stencil.random.14
 | 
			
		||||
dEQP-GLES2.functional.fragment_ops.depth_stencil.random.15
 | 
			
		||||
dEQP-GLES2.functional.fragment_ops.depth_stencil.random.16
 | 
			
		||||
dEQP-GLES2.functional.fragment_ops.depth_stencil.random.17
 | 
			
		||||
dEQP-GLES2.functional.fragment_ops.depth_stencil.random.18
 | 
			
		||||
dEQP-GLES2.functional.fragment_ops.depth_stencil.random.19
 | 
			
		||||
dEQP-GLES2.functional.fragment_ops.depth_stencil.random.2
 | 
			
		||||
dEQP-GLES2.functional.fragment_ops.depth_stencil.random.20
 | 
			
		||||
dEQP-GLES2.functional.fragment_ops.depth_stencil.random.21
 | 
			
		||||
dEQP-GLES2.functional.fragment_ops.depth_stencil.random.22
 | 
			
		||||
dEQP-GLES2.functional.fragment_ops.depth_stencil.random.23
 | 
			
		||||
dEQP-GLES2.functional.fragment_ops.depth_stencil.random.24
 | 
			
		||||
dEQP-GLES2.functional.fragment_ops.depth_stencil.random.3
 | 
			
		||||
dEQP-GLES2.functional.fragment_ops.depth_stencil.random.4
 | 
			
		||||
dEQP-GLES2.functional.fragment_ops.depth_stencil.random.5
 | 
			
		||||
dEQP-GLES2.functional.fragment_ops.depth_stencil.random.6
 | 
			
		||||
dEQP-GLES2.functional.fragment_ops.depth_stencil.random.7
 | 
			
		||||
dEQP-GLES2.functional.fragment_ops.depth_stencil.random.8
 | 
			
		||||
dEQP-GLES2.functional.fragment_ops.depth_stencil.random.9
 | 
			
		||||
dEQP-GLES2.functional.fragment_ops.depth_stencil.write_mask.stencil
 | 
			
		||||
dEQP-GLES2.functional.shaders.loops.do_while_dynamic_iterations.vector_counter_fragment
 | 
			
		||||
dEQP-GLES2.functional.shaders.loops.for_dynamic_iterations.vector_counter_fragment
 | 
			
		||||
dEQP-GLES2.functional.shaders.loops.while_dynamic_iterations.vector_counter_fragment
 | 
			
		||||
dEQP-GLES2.functional.shaders.random.all_features.fragment.37
 | 
			
		||||
dEQP-GLES2.functional.shaders.random.exponential.fragment.11
 | 
			
		||||
dEQP-GLES2.functional.shaders.random.exponential.fragment.12
 | 
			
		||||
dEQP-GLES2.functional.shaders.random.exponential.fragment.14
 | 
			
		||||
dEQP-GLES2.functional.shaders.random.exponential.fragment.37
 | 
			
		||||
dEQP-GLES2.functional.shaders.random.exponential.fragment.5
 | 
			
		||||
dEQP-GLES2.functional.shaders.random.exponential.fragment.74
 | 
			
		||||
dEQP-GLES2.functional.shaders.random.texture.fragment.28
 | 
			
		||||
dEQP-GLES2.functional.shaders.random.trigonometric.fragment.65
 | 
			
		||||
dEQP-GLES2.functional.shaders.texture_functions.fragment.texture2d_bias
 | 
			
		||||
dEQP-GLES2.functional.shaders.texture_functions.fragment.texture2dproj_vec4_bias
 | 
			
		||||
dEQP-GLES2.functional.shaders.texture_functions.fragment.texturecube_bias
 | 
			
		||||
dEQP-GLES2.functional.texture.filtering.2d.linear_mipmap_linear_linear_clamp_rgba8888
 | 
			
		||||
dEQP-GLES2.functional.texture.filtering.2d.linear_mipmap_linear_linear_mirror_rgba8888
 | 
			
		||||
dEQP-GLES2.functional.texture.filtering.2d.linear_mipmap_linear_nearest_clamp_rgba8888
 | 
			
		||||
dEQP-GLES2.functional.texture.filtering.2d.linear_mipmap_linear_nearest_mirror_rgba8888
 | 
			
		||||
dEQP-GLES2.functional.texture.mipmap.cube.basic.linear_linear
 | 
			
		||||
dEQP-GLES2.functional.texture.mipmap.cube.basic.linear_nearest
 | 
			
		||||
dEQP-GLES2.functional.texture.mipmap.cube.bias.linear_linear
 | 
			
		||||
dEQP-GLES2.functional.texture.mipmap.cube.bias.linear_nearest
 | 
			
		||||
dEQP-GLES2.functional.texture.mipmap.cube.projected.linear_linear
 | 
			
		||||
dEQP-GLES2.functional.texture.mipmap.cube.projected.linear_nearest
 | 
			
		||||
dEQP-GLES2.functional.texture.specification.basic_copytexsubimage2d.2d_rgb
 | 
			
		||||
dEQP-GLES2.functional.texture.specification.basic_copytexsubimage2d.2d_rgba
 | 
			
		||||
dEQP-GLES2.functional.texture.specification.basic_copytexsubimage2d.cube_rgb
 | 
			
		||||
dEQP-GLES2.functional.texture.specification.basic_copytexsubimage2d.cube_rgba
 | 
			
		||||
@@ -1,38 +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
 | 
			
		||||
 | 
			
		||||
# Flaky
 | 
			
		||||
dEQP-GLES2.functional.clipping.triangle_vertex.clip_three.clip_neg_x_neg_z_and_pos_x_pos_z_and_neg_x_neg_y_pos_z
 | 
			
		||||
dEQP-GLES2.functional.default_vertex_attrib.*
 | 
			
		||||
dEQP-GLES2.functional.fbo.completeness.size.distinct
 | 
			
		||||
dEQP-GLES2.functional.negative_api.shader.uniform_matrixfv_invalid_transpose
 | 
			
		||||
dEQP-GLES2.functional.negative_api.texture.generatemipmap_zero_level_array_compressed
 | 
			
		||||
dEQP-GLES2.functional.shaders.builtin_variable.frontfacing
 | 
			
		||||
dEQP-GLES2.functional.shaders.random.exponential.fragment.94
 | 
			
		||||
dEQP-GLES2.functional.shaders.random.all_features.fragment.55
 | 
			
		||||
dEQP-GLES2.functional.shaders.random.trigonometric.fragment.1
 | 
			
		||||
dEQP-GLES2.functional.shaders.random.trigonometric.fragment.69
 | 
			
		||||
 | 
			
		||||
# Hangs / OOM
 | 
			
		||||
dEQP-GLES2.functional.shaders.indexing.varying_array.vec4_dynamic_loop_write_static_read
 | 
			
		||||
dEQP-GLES2.functional.shaders.indexing.varying_array.vec4_dynamic_loop_write_dynamic_read
 | 
			
		||||
dEQP-GLES2.functional.shaders.indexing.varying_array.vec4_dynamic_loop_write_static_loop_read
 | 
			
		||||
dEQP-GLES2.functional.shaders.indexing.varying_array.vec4_dynamic_loop_write_dynamic_loop_read
 | 
			
		||||
 | 
			
		||||
dEQP-GLES2.functional.shaders.indexing.tmp_array.vec4_dynamic_loop_write_static_read_vertex
 | 
			
		||||
dEQP-GLES2.functional.shaders.indexing.tmp_array.vec4_dynamic_loop_write_dynamic_read_vertex
 | 
			
		||||
dEQP-GLES2.functional.shaders.indexing.tmp_array.vec4_dynamic_loop_write_static_loop_read_vertex
 | 
			
		||||
dEQP-GLES2.functional.shaders.indexing.tmp_array.vec4_dynamic_loop_write_dynamic_loop_read_vertex
 | 
			
		||||
 | 
			
		||||
dEQP-GLES2.functional.shaders.indexing.matrix_subscript.mat4_dynamic_loop_write_static_read_vertex
 | 
			
		||||
dEQP-GLES2.functional.shaders.indexing.matrix_subscript.mat4_dynamic_loop_write_dynamic_read_vertex
 | 
			
		||||
dEQP-GLES2.functional.shaders.indexing.matrix_subscript.mat4_dynamic_loop_write_static_loop_read_vertex
 | 
			
		||||
dEQP-GLES2.functional.shaders.indexing.matrix_subscript.mat4_dynamic_loop_write_dynamic_loop_read_vertex
 | 
			
		||||
@@ -1,123 +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.shaders.texture_functions.fragment.texture2d_bias
 | 
			
		||||
dEQP-GLES2.functional.shaders.texture_functions.fragment.texture2dproj_vec3_bias
 | 
			
		||||
dEQP-GLES2.functional.shaders.texture_functions.fragment.texture2dproj_vec4_bias
 | 
			
		||||
dEQP-GLES2.functional.texture.filtering.2d.linear_mipmap_linear_linear_clamp_rgba8888
 | 
			
		||||
dEQP-GLES2.functional.texture.filtering.2d.linear_mipmap_linear_linear_mirror_etc1
 | 
			
		||||
dEQP-GLES2.functional.texture.filtering.2d.linear_mipmap_linear_linear_mirror_rgba8888
 | 
			
		||||
dEQP-GLES2.functional.texture.filtering.2d.linear_mipmap_linear_linear_repeat_etc1
 | 
			
		||||
dEQP-GLES2.functional.texture.filtering.2d.linear_mipmap_linear_linear_repeat_rgba8888
 | 
			
		||||
dEQP-GLES2.functional.texture.filtering.2d.linear_mipmap_linear_nearest_clamp_rgba8888
 | 
			
		||||
dEQP-GLES2.functional.texture.filtering.2d.linear_mipmap_linear_nearest_mirror_etc1
 | 
			
		||||
dEQP-GLES2.functional.texture.filtering.2d.linear_mipmap_linear_nearest_mirror_rgba8888
 | 
			
		||||
dEQP-GLES2.functional.texture.filtering.2d.linear_mipmap_linear_nearest_repeat_etc1
 | 
			
		||||
dEQP-GLES2.functional.texture.filtering.2d.linear_mipmap_linear_nearest_repeat_l8
 | 
			
		||||
dEQP-GLES2.functional.texture.filtering.2d.linear_mipmap_linear_nearest_repeat_rgb888
 | 
			
		||||
dEQP-GLES2.functional.texture.filtering.2d.linear_mipmap_linear_nearest_repeat_rgba4444
 | 
			
		||||
dEQP-GLES2.functional.texture.filtering.2d.linear_mipmap_linear_nearest_repeat_rgba8888
 | 
			
		||||
dEQP-GLES2.functional.texture.filtering.2d.nearest_mipmap_linear_linear_clamp_rgba8888
 | 
			
		||||
dEQP-GLES2.functional.texture.filtering.2d.nearest_mipmap_linear_linear_mirror_etc1
 | 
			
		||||
dEQP-GLES2.functional.texture.filtering.2d.nearest_mipmap_linear_linear_mirror_rgba8888
 | 
			
		||||
dEQP-GLES2.functional.texture.filtering.2d.nearest_mipmap_linear_linear_repeat_etc1
 | 
			
		||||
dEQP-GLES2.functional.texture.filtering.2d.nearest_mipmap_linear_linear_repeat_rgba8888
 | 
			
		||||
dEQP-GLES2.functional.texture.filtering.2d.nearest_mipmap_linear_nearest_clamp_rgba8888
 | 
			
		||||
dEQP-GLES2.functional.texture.filtering.2d.nearest_mipmap_linear_nearest_mirror_etc1
 | 
			
		||||
dEQP-GLES2.functional.texture.filtering.2d.nearest_mipmap_linear_nearest_mirror_rgba8888
 | 
			
		||||
dEQP-GLES2.functional.texture.filtering.2d.nearest_mipmap_linear_nearest_repeat_etc1
 | 
			
		||||
dEQP-GLES2.functional.texture.filtering.2d.nearest_mipmap_linear_nearest_repeat_l8
 | 
			
		||||
dEQP-GLES2.functional.texture.filtering.2d.nearest_mipmap_linear_nearest_repeat_rgb888
 | 
			
		||||
dEQP-GLES2.functional.texture.filtering.2d.nearest_mipmap_linear_nearest_repeat_rgba4444
 | 
			
		||||
dEQP-GLES2.functional.texture.filtering.2d.nearest_mipmap_linear_nearest_repeat_rgba8888
 | 
			
		||||
dEQP-GLES2.functional.texture.mipmap.2d.affine.linear_linear_repeat
 | 
			
		||||
dEQP-GLES2.functional.texture.mipmap.2d.affine.nearest_linear_clamp
 | 
			
		||||
dEQP-GLES2.functional.texture.mipmap.2d.affine.nearest_linear_mirror
 | 
			
		||||
dEQP-GLES2.functional.texture.mipmap.2d.affine.nearest_linear_repeat
 | 
			
		||||
dEQP-GLES2.functional.texture.mipmap.2d.basic.linear_linear_repeat
 | 
			
		||||
dEQP-GLES2.functional.texture.mipmap.2d.basic.linear_linear_repeat_non_square
 | 
			
		||||
dEQP-GLES2.functional.texture.mipmap.2d.basic.nearest_linear_clamp
 | 
			
		||||
dEQP-GLES2.functional.texture.mipmap.2d.basic.nearest_linear_clamp_non_square
 | 
			
		||||
dEQP-GLES2.functional.texture.mipmap.2d.basic.nearest_linear_mirror
 | 
			
		||||
dEQP-GLES2.functional.texture.mipmap.2d.basic.nearest_linear_mirror_non_square
 | 
			
		||||
dEQP-GLES2.functional.texture.mipmap.2d.basic.nearest_linear_repeat
 | 
			
		||||
dEQP-GLES2.functional.texture.mipmap.2d.basic.nearest_linear_repeat_non_square
 | 
			
		||||
dEQP-GLES2.functional.texture.mipmap.2d.projected.linear_linear_repeat
 | 
			
		||||
dEQP-GLES2.functional.texture.mipmap.2d.projected.nearest_linear_clamp
 | 
			
		||||
dEQP-GLES2.functional.texture.mipmap.2d.projected.nearest_linear_mirror
 | 
			
		||||
dEQP-GLES2.functional.texture.mipmap.2d.projected.nearest_linear_repeat
 | 
			
		||||
dEQP-GLES2.functional.texture.mipmap.cube.basic.linear_linear
 | 
			
		||||
dEQP-GLES2.functional.texture.mipmap.cube.basic.linear_nearest
 | 
			
		||||
dEQP-GLES2.functional.texture.mipmap.cube.bias.linear_linear
 | 
			
		||||
dEQP-GLES2.functional.texture.mipmap.cube.bias.linear_nearest
 | 
			
		||||
dEQP-GLES2.functional.texture.mipmap.cube.projected.linear_linear
 | 
			
		||||
dEQP-GLES2.functional.texture.mipmap.cube.projected.linear_nearest
 | 
			
		||||
dEQP-GLES2.functional.texture.vertex.2d.filtering.linear_mipmap_linear_linear_clamp
 | 
			
		||||
dEQP-GLES2.functional.texture.vertex.2d.filtering.linear_mipmap_linear_linear_mirror
 | 
			
		||||
dEQP-GLES2.functional.texture.vertex.2d.filtering.linear_mipmap_linear_linear_repeat
 | 
			
		||||
dEQP-GLES2.functional.texture.vertex.2d.filtering.linear_mipmap_linear_nearest_clamp
 | 
			
		||||
dEQP-GLES2.functional.texture.vertex.2d.filtering.linear_mipmap_linear_nearest_mirror
 | 
			
		||||
dEQP-GLES2.functional.texture.vertex.2d.filtering.linear_mipmap_linear_nearest_repeat
 | 
			
		||||
dEQP-GLES2.functional.texture.vertex.2d.filtering.nearest_mipmap_linear_linear_clamp
 | 
			
		||||
dEQP-GLES2.functional.texture.vertex.2d.filtering.nearest_mipmap_linear_linear_mirror
 | 
			
		||||
dEQP-GLES2.functional.texture.vertex.2d.filtering.nearest_mipmap_linear_linear_repeat
 | 
			
		||||
dEQP-GLES2.functional.texture.vertex.2d.filtering.nearest_mipmap_linear_nearest_clamp
 | 
			
		||||
dEQP-GLES2.functional.texture.vertex.2d.filtering.nearest_mipmap_linear_nearest_mirror
 | 
			
		||||
dEQP-GLES2.functional.texture.vertex.2d.filtering.nearest_mipmap_linear_nearest_repeat
 | 
			
		||||
dEQP-GLES2.functional.texture.vertex.2d.wrap.clamp_clamp
 | 
			
		||||
dEQP-GLES2.functional.texture.vertex.2d.wrap.clamp_mirror
 | 
			
		||||
dEQP-GLES2.functional.texture.vertex.2d.wrap.clamp_repeat
 | 
			
		||||
dEQP-GLES2.functional.texture.vertex.2d.wrap.mirror_clamp
 | 
			
		||||
dEQP-GLES2.functional.texture.vertex.2d.wrap.mirror_mirror
 | 
			
		||||
dEQP-GLES2.functional.texture.vertex.2d.wrap.mirror_repeat
 | 
			
		||||
dEQP-GLES2.functional.texture.vertex.2d.wrap.repeat_clamp
 | 
			
		||||
dEQP-GLES2.functional.texture.vertex.2d.wrap.repeat_mirror
 | 
			
		||||
dEQP-GLES2.functional.texture.vertex.2d.wrap.repeat_repeat
 | 
			
		||||
dEQP-GLES2.functional.texture.vertex.cube.filtering.linear_mipmap_linear_linear_clamp
 | 
			
		||||
dEQP-GLES2.functional.texture.vertex.cube.filtering.linear_mipmap_linear_linear_mirror
 | 
			
		||||
dEQP-GLES2.functional.texture.vertex.cube.filtering.linear_mipmap_linear_linear_repeat
 | 
			
		||||
dEQP-GLES2.functional.texture.vertex.cube.filtering.linear_mipmap_linear_nearest_clamp
 | 
			
		||||
dEQP-GLES2.functional.texture.vertex.cube.filtering.linear_mipmap_linear_nearest_mirror
 | 
			
		||||
dEQP-GLES2.functional.texture.vertex.cube.filtering.linear_mipmap_linear_nearest_repeat
 | 
			
		||||
dEQP-GLES2.functional.texture.vertex.cube.filtering.nearest_mipmap_linear_linear_clamp
 | 
			
		||||
dEQP-GLES2.functional.texture.vertex.cube.filtering.nearest_mipmap_linear_linear_mirror
 | 
			
		||||
dEQP-GLES2.functional.texture.vertex.cube.filtering.nearest_mipmap_linear_linear_repeat
 | 
			
		||||
dEQP-GLES2.functional.texture.vertex.cube.filtering.nearest_mipmap_linear_nearest_clamp
 | 
			
		||||
dEQP-GLES2.functional.texture.vertex.cube.filtering.nearest_mipmap_linear_nearest_mirror
 | 
			
		||||
dEQP-GLES2.functional.texture.vertex.cube.filtering.nearest_mipmap_linear_nearest_repeat
 | 
			
		||||
dEQP-GLES2.functional.texture.vertex.cube.wrap.clamp_clamp
 | 
			
		||||
dEQP-GLES2.functional.texture.vertex.cube.wrap.clamp_mirror
 | 
			
		||||
dEQP-GLES2.functional.texture.vertex.cube.wrap.clamp_repeat
 | 
			
		||||
dEQP-GLES2.functional.texture.vertex.cube.wrap.mirror_clamp
 | 
			
		||||
dEQP-GLES2.functional.texture.vertex.cube.wrap.mirror_mirror
 | 
			
		||||
dEQP-GLES2.functional.texture.vertex.cube.wrap.mirror_repeat
 | 
			
		||||
dEQP-GLES2.functional.texture.vertex.cube.wrap.repeat_clamp
 | 
			
		||||
dEQP-GLES2.functional.texture.vertex.cube.wrap.repeat_mirror
 | 
			
		||||
dEQP-GLES2.functional.texture.vertex.cube.wrap.repeat_repeat
 | 
			
		||||
@@ -1,31 +0,0 @@
 | 
			
		||||
dEQP-GLES2.functional.depth_stencil_clear.depth_stencil_masked
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.no_rebind_rbo_rgb565_depth_component16
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.no_rebind_rbo_rgb565_stencil_index8
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.no_rebind_rbo_rgb5_a1_depth_component16
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.no_rebind_rbo_rgb5_a1_stencil_index8
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.no_rebind_rbo_rgba4_depth_component16
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.no_rebind_rbo_rgba4_stencil_index8
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.no_rebind_tex2d_rgb_depth_component16
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.no_rebind_tex2d_rgb_stencil_index8
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.no_rebind_tex2d_rgba_depth_component16
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.no_rebind_tex2d_rgba_stencil_index8
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.rebind_rbo_rgb565_depth_component16
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.rebind_rbo_rgb565_stencil_index8
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.rebind_rbo_rgb5_a1_depth_component16
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.rebind_rbo_rgb5_a1_stencil_index8
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.rebind_rbo_rgba4_depth_component16
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.rebind_rbo_rgba4_stencil_index8
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.rebind_tex2d_rgb_depth_component16
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.rebind_tex2d_rgb_stencil_index8
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.rebind_tex2d_rgba_depth_component16
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.rebind_tex2d_rgba_stencil_index8
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.shared_colorbuffer.rbo_rgb565_depth_component16
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.shared_colorbuffer.rbo_rgb5_a1_depth_component16
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.shared_colorbuffer.rbo_rgba4_depth_component16
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.shared_colorbuffer.tex2d_rgb_depth_component16
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.shared_colorbuffer.tex2d_rgba_depth_component16
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.shared_depthbuffer.rbo_rgb565_depth_component16
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.shared_depthbuffer.rbo_rgb5_a1_depth_component16
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.shared_depthbuffer.rbo_rgba4_depth_component16
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.shared_depthbuffer.tex2d_rgb_depth_component16
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.shared_depthbuffer.tex2d_rgba_depth_component16
 | 
			
		||||
@@ -1,14 +0,0 @@
 | 
			
		||||
# Note: skips lists for CI are just a list of lines that, when
 | 
			
		||||
# non-zero-length and not starting with '#', will regex match to
 | 
			
		||||
# delete lines from the test list.  Be careful.
 | 
			
		||||
 | 
			
		||||
# Skip the perf/stress tests to keep runtime manageable
 | 
			
		||||
dEQP-GLES[0-9]*.performance.*
 | 
			
		||||
dEQP-GLES[0-9]*.stress.*
 | 
			
		||||
 | 
			
		||||
# These are really slow on tiling architectures (including llvmpipe).
 | 
			
		||||
dEQP-GLES[0-9]*.functional.flush_finish.*
 | 
			
		||||
 | 
			
		||||
# XXX: Why does this flake?
 | 
			
		||||
dEQP-GLES2.functional.clipping.triangle_vertex.clip_three.clip_neg_x_neg_z_and_pos_x_pos_z_and_neg_x_neg_y_pos_z
 | 
			
		||||
 | 
			
		||||
@@ -1,31 +0,0 @@
 | 
			
		||||
dEQP-GLES2.functional.depth_stencil_clear.depth_stencil_masked
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.no_rebind_rbo_rgb565_depth_component16
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.no_rebind_rbo_rgb565_stencil_index8
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.no_rebind_rbo_rgb5_a1_depth_component16
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.no_rebind_rbo_rgb5_a1_stencil_index8
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.no_rebind_rbo_rgba4_depth_component16
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.no_rebind_rbo_rgba4_stencil_index8
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.no_rebind_tex2d_rgb_depth_component16
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.no_rebind_tex2d_rgb_stencil_index8
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.no_rebind_tex2d_rgba_depth_component16
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.no_rebind_tex2d_rgba_stencil_index8
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.rebind_rbo_rgb565_depth_component16
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.rebind_rbo_rgb565_stencil_index8
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.rebind_rbo_rgb5_a1_depth_component16
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.rebind_rbo_rgb5_a1_stencil_index8
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.rebind_rbo_rgba4_depth_component16
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.rebind_rbo_rgba4_stencil_index8
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.rebind_tex2d_rgb_depth_component16
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.rebind_tex2d_rgb_stencil_index8
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.rebind_tex2d_rgba_depth_component16
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.rebind_tex2d_rgba_stencil_index8
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.shared_colorbuffer.rbo_rgb565_depth_component16
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.shared_colorbuffer.rbo_rgb5_a1_depth_component16
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.shared_colorbuffer.rbo_rgba4_depth_component16
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.shared_colorbuffer.tex2d_rgb_depth_component16
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.shared_colorbuffer.tex2d_rgba_depth_component16
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.shared_depthbuffer.rbo_rgb565_depth_component16
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.shared_depthbuffer.rbo_rgb5_a1_depth_component16
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.shared_depthbuffer.rbo_rgba4_depth_component16
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.shared_depthbuffer.tex2d_rgb_depth_component16
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.shared_depthbuffer.tex2d_rgba_depth_component16
 | 
			
		||||
@@ -1,11 +0,0 @@
 | 
			
		||||
# Note: skips lists for CI are just a list of lines that, when
 | 
			
		||||
# non-zero-length and not starting with '#', will regex match to
 | 
			
		||||
# delete lines from the test list.  Be careful.
 | 
			
		||||
 | 
			
		||||
# Skip the perf/stress tests to keep runtime manageable
 | 
			
		||||
dEQP-GLES[0-9]*.performance.*
 | 
			
		||||
dEQP-GLES[0-9]*.stress.*
 | 
			
		||||
 | 
			
		||||
# These are really slow on tiling architectures (including llvmpipe).
 | 
			
		||||
dEQP-GLES[0-9]*.functional.flush_finish.*
 | 
			
		||||
 | 
			
		||||
@@ -1,31 +0,0 @@
 | 
			
		||||
dEQP-GLES2.functional.depth_stencil_clear.depth_stencil_masked
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.no_rebind_rbo_rgb565_depth_component16
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.no_rebind_rbo_rgb565_stencil_index8
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.no_rebind_rbo_rgb5_a1_depth_component16
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.no_rebind_rbo_rgb5_a1_stencil_index8
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.no_rebind_rbo_rgba4_depth_component16
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.no_rebind_rbo_rgba4_stencil_index8
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.no_rebind_tex2d_rgb_depth_component16
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.no_rebind_tex2d_rgb_stencil_index8
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.no_rebind_tex2d_rgba_depth_component16
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.no_rebind_tex2d_rgba_stencil_index8
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.rebind_rbo_rgb565_depth_component16
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.rebind_rbo_rgb565_stencil_index8
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.rebind_rbo_rgb5_a1_depth_component16
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.rebind_rbo_rgb5_a1_stencil_index8
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.rebind_rbo_rgba4_depth_component16
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.rebind_rbo_rgba4_stencil_index8
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.rebind_tex2d_rgb_depth_component16
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.rebind_tex2d_rgb_stencil_index8
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.rebind_tex2d_rgba_depth_component16
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.rebind_tex2d_rgba_stencil_index8
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.shared_colorbuffer.rbo_rgb565_depth_component16
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.shared_colorbuffer.rbo_rgb5_a1_depth_component16
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.shared_colorbuffer.rbo_rgba4_depth_component16
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.shared_colorbuffer.tex2d_rgb_depth_component16
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.shared_colorbuffer.tex2d_rgba_depth_component16
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.shared_depthbuffer.rbo_rgb565_depth_component16
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.shared_depthbuffer.rbo_rgb5_a1_depth_component16
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.shared_depthbuffer.rbo_rgba4_depth_component16
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.shared_depthbuffer.tex2d_rgb_depth_component16
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.shared_depthbuffer.tex2d_rgba_depth_component16
 | 
			
		||||
@@ -1,13 +0,0 @@
 | 
			
		||||
# Note: skips lists for CI are just a list of lines that, when
 | 
			
		||||
# non-zero-length and not starting with '#', will regex match to
 | 
			
		||||
# delete lines from the test list.  Be careful.
 | 
			
		||||
 | 
			
		||||
# Skip the perf/stress tests to keep runtime manageable
 | 
			
		||||
dEQP-GLES[0-9]*.performance.*
 | 
			
		||||
dEQP-GLES[0-9]*.stress.*
 | 
			
		||||
 | 
			
		||||
# These are really slow on tiling architectures (including llvmpipe).
 | 
			
		||||
dEQP-GLES[0-9]*.functional.flush_finish.*
 | 
			
		||||
 | 
			
		||||
# XXX: Why does this flake?
 | 
			
		||||
dEQP-GLES2.functional.clipping.triangle_vertex.clip_three.clip_neg_x_neg_z_and_pos_x_pos_z_and_neg_x_neg_y_pos_z
 | 
			
		||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							@@ -1,20 +0,0 @@
 | 
			
		||||
# Note: skips lists for CI are just a list of lines that, when
 | 
			
		||||
# non-zero-length and not starting with '#', will regex match to
 | 
			
		||||
# delete lines from the test list.  Be careful.
 | 
			
		||||
 | 
			
		||||
# Skip the perf/stress tests to keep runtime manageable
 | 
			
		||||
dEQP-GLES[0-9]*.performance.*
 | 
			
		||||
dEQP-GLES[0-9]*.stress.*
 | 
			
		||||
 | 
			
		||||
# These are really slow on tiling architectures (including llvmpipe).
 | 
			
		||||
dEQP-GLES[0-9]*.functional.flush_finish.*
 | 
			
		||||
 | 
			
		||||
# XXX: Why does this flake?
 | 
			
		||||
dEQP-GLES2.functional.clipping.triangle_vertex.clip_three.clip_neg_x_neg_z_and_pos_x_pos_z_and_neg_x_neg_y_pos_z
 | 
			
		||||
 | 
			
		||||
# XXX: Causes irrecoverable GPU hangs when run in parallel with dEQP-GLES3.functional.transform_feedback.*
 | 
			
		||||
dEQP-GLES3.functional.rasterizer_discard.*
 | 
			
		||||
 | 
			
		||||
# XXX: Not completely implemented yet, behave flakily
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.*
 | 
			
		||||
 | 
			
		||||
@@ -1,3 +0,0 @@
 | 
			
		||||
# Exclude WSI related tests.
 | 
			
		||||
dEQP-VK.image.swapchain_mutable.*
 | 
			
		||||
dEQP-VK.wsi.*
 | 
			
		||||
@@ -1,32 +0,0 @@
 | 
			
		||||
# CTS bug (should be fixed in next version)
 | 
			
		||||
dEQP-VK.api.buffer_marker.graphics.default_mem.bottom_of_pipe.memory_dep.draw
 | 
			
		||||
dEQP-VK.api.buffer_marker.graphics.external_host_mem.bottom_of_pipe.memory_dep.draw
 | 
			
		||||
 | 
			
		||||
# SPIR-V->NIR issues.
 | 
			
		||||
dEQP-VK.glsl.builtin.precision.asin.highp.scalar
 | 
			
		||||
dEQP-VK.glsl.builtin.precision.asin.highp.vec2
 | 
			
		||||
dEQP-VK.glsl.builtin.precision.asin.highp.vec3
 | 
			
		||||
dEQP-VK.glsl.builtin.precision.asin.highp.vec4
 | 
			
		||||
 | 
			
		||||
# CTS bug (list of extensions not up-to-date).
 | 
			
		||||
dEQP-VK.info.device_extensions
 | 
			
		||||
 | 
			
		||||
# Interesting failures...
 | 
			
		||||
dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_16_64_6.samples_2.d32_sfloat_s8_uint.stencil_max
 | 
			
		||||
dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_16_64_6.samples_2.d32_sfloat_s8_uint.stencil_min
 | 
			
		||||
dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_16_64_6.samples_2.d32_sfloat_s8_uint.stencil_zero
 | 
			
		||||
dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_16_64_6.samples_2.d32_sfloat_s8_uint_separate_layouts.stencil_max
 | 
			
		||||
dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_16_64_6.samples_2.d32_sfloat_s8_uint_separate_layouts.stencil_min
 | 
			
		||||
dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_16_64_6.samples_2.d32_sfloat_s8_uint_separate_layouts.stencil_zero
 | 
			
		||||
dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_16_64_6.samples_4.d32_sfloat_s8_uint.stencil_max
 | 
			
		||||
dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_16_64_6.samples_4.d32_sfloat_s8_uint.stencil_min
 | 
			
		||||
dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_16_64_6.samples_4.d32_sfloat_s8_uint.stencil_zero
 | 
			
		||||
dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_16_64_6.samples_4.d32_sfloat_s8_uint_separate_layouts.stencil_max
 | 
			
		||||
dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_16_64_6.samples_4.d32_sfloat_s8_uint_separate_layouts.stencil_min
 | 
			
		||||
dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_16_64_6.samples_4.d32_sfloat_s8_uint_separate_layouts.stencil_zero
 | 
			
		||||
dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_16_64_6.samples_8.d32_sfloat_s8_uint.stencil_max
 | 
			
		||||
dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_16_64_6.samples_8.d32_sfloat_s8_uint.stencil_min
 | 
			
		||||
dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_16_64_6.samples_8.d32_sfloat_s8_uint.stencil_zero
 | 
			
		||||
dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_16_64_6.samples_8.d32_sfloat_s8_uint_separate_layouts.stencil_max
 | 
			
		||||
dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_16_64_6.samples_8.d32_sfloat_s8_uint_separate_layouts.stencil_min
 | 
			
		||||
dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_16_64_6.samples_8.d32_sfloat_s8_uint_separate_layouts.stencil_zero
 | 
			
		||||
@@ -1,12 +0,0 @@
 | 
			
		||||
# SPIR-V->NIR issues.
 | 
			
		||||
dEQP-VK.glsl.builtin.precision.asin.highp.scalar
 | 
			
		||||
dEQP-VK.glsl.builtin.precision.asin.highp.vec2
 | 
			
		||||
dEQP-VK.glsl.builtin.precision.asin.highp.vec3
 | 
			
		||||
dEQP-VK.glsl.builtin.precision.asin.highp.vec4
 | 
			
		||||
 | 
			
		||||
# CTS bug (list of extensions not up-to-date).
 | 
			
		||||
dEQP-VK.info.device_extensions
 | 
			
		||||
 | 
			
		||||
# ACO specific issues.
 | 
			
		||||
dEQP-VK.transform_feedback.simple.multistreams_1
 | 
			
		||||
dEQP-VK.transform_feedback.simple.multistreams_3
 | 
			
		||||
@@ -1,8 +0,0 @@
 | 
			
		||||
# SPIR-V->NIR issues.
 | 
			
		||||
dEQP-VK.glsl.builtin.precision.asin.highp.scalar
 | 
			
		||||
dEQP-VK.glsl.builtin.precision.asin.highp.vec2
 | 
			
		||||
dEQP-VK.glsl.builtin.precision.asin.highp.vec3
 | 
			
		||||
dEQP-VK.glsl.builtin.precision.asin.highp.vec4
 | 
			
		||||
 | 
			
		||||
# CTS bug (list of extensions not up-to-date).
 | 
			
		||||
dEQP-VK.info.device_extensions
 | 
			
		||||
@@ -1,12 +0,0 @@
 | 
			
		||||
# CTS bug (should be fixed in next version)
 | 
			
		||||
dEQP-VK.api.buffer_marker.graphics.default_mem.bottom_of_pipe.memory_dep.draw
 | 
			
		||||
dEQP-VK.api.buffer_marker.graphics.external_host_mem.bottom_of_pipe.memory_dep.draw
 | 
			
		||||
 | 
			
		||||
# SPIR-V->NIR issues.
 | 
			
		||||
dEQP-VK.glsl.builtin.precision.asin.highp.scalar
 | 
			
		||||
dEQP-VK.glsl.builtin.precision.asin.highp.vec2
 | 
			
		||||
dEQP-VK.glsl.builtin.precision.asin.highp.vec3
 | 
			
		||||
dEQP-VK.glsl.builtin.precision.asin.highp.vec4
 | 
			
		||||
 | 
			
		||||
# CTS bug (list of extensions not up-to-date).
 | 
			
		||||
dEQP-VK.info.device_extensions
 | 
			
		||||
@@ -1,31 +0,0 @@
 | 
			
		||||
# Disable a TON of tests to keep the run around 5-10 minutes because my runner is
 | 
			
		||||
# slow.
 | 
			
		||||
dEQP-VK.api.*
 | 
			
		||||
dEQP-VK.binding_model.*
 | 
			
		||||
dEQP-VK.clipping.*
 | 
			
		||||
dEQP-VK.compute.*
 | 
			
		||||
dEQP-VK.conditional_rendering.*
 | 
			
		||||
dEQP-VK.descriptor_indexing.*
 | 
			
		||||
dEQP-VK.device_group.*
 | 
			
		||||
dEQP-VK.fragment_operations.*
 | 
			
		||||
dEQP-VK.fragment_shader_interlock.*
 | 
			
		||||
dEQP-VK.graphicsfuzz.*
 | 
			
		||||
dEQP-VK.image.*
 | 
			
		||||
dEQP-VK.imageless_framebuffer.*
 | 
			
		||||
dEQP-VK.info.*
 | 
			
		||||
dEQP-VK.memory.*
 | 
			
		||||
dEQP-VK.memory_model.*
 | 
			
		||||
dEQP-VK.multiview.*
 | 
			
		||||
dEQP-VK.pipeline.*
 | 
			
		||||
dEQP-VK.protected_memory.*
 | 
			
		||||
dEQP-VK.query_pool.*
 | 
			
		||||
dEQP-VK.robustness.*
 | 
			
		||||
dEQP-VK.sparse_resources.*
 | 
			
		||||
dEQP-VK.spirv_assembly.*
 | 
			
		||||
dEQP-VK.subgroups.*
 | 
			
		||||
dEQP-VK.synchronization.*
 | 
			
		||||
dEQP-VK.texture.*
 | 
			
		||||
dEQP-VK.transform_feedback.*
 | 
			
		||||
dEQP-VK.ubo.*
 | 
			
		||||
dEQP-VK.wsi.*
 | 
			
		||||
dEQP-VK.ycbcr.*
 | 
			
		||||
@@ -1,12 +0,0 @@
 | 
			
		||||
# SPIR-V->NIR issues.
 | 
			
		||||
dEQP-VK.glsl.builtin.precision.asin.highp.scalar
 | 
			
		||||
dEQP-VK.glsl.builtin.precision.asin.highp.vec2
 | 
			
		||||
dEQP-VK.glsl.builtin.precision.asin.highp.vec3
 | 
			
		||||
dEQP-VK.glsl.builtin.precision.asin.highp.vec4
 | 
			
		||||
 | 
			
		||||
# CTS bug (list of extensions not up-to-date).
 | 
			
		||||
dEQP-VK.info.device_extensions
 | 
			
		||||
 | 
			
		||||
# ACO specific issues.
 | 
			
		||||
dEQP-VK.transform_feedback.simple.multistreams_1
 | 
			
		||||
dEQP-VK.transform_feedback.simple.multistreams_3
 | 
			
		||||
@@ -1,311 +0,0 @@
 | 
			
		||||
#!/bin/sh
 | 
			
		||||
 | 
			
		||||
set -ex
 | 
			
		||||
 | 
			
		||||
DEQP_OPTIONS="$DEQP_OPTIONS --deqp-surface-width=256 --deqp-surface-height=256"
 | 
			
		||||
DEQP_OPTIONS="$DEQP_OPTIONS --deqp-surface-type=pbuffer"
 | 
			
		||||
DEQP_OPTIONS="$DEQP_OPTIONS --deqp-gl-config-name=rgba8888d24s8ms0"
 | 
			
		||||
DEQP_OPTIONS="$DEQP_OPTIONS --deqp-visibility=hidden"
 | 
			
		||||
 | 
			
		||||
if [ -z "$DEQP_VER" ]; then
 | 
			
		||||
   echo 'DEQP_VER must be set to something like "gles2", "gles31" or "vk" for the test run'
 | 
			
		||||
   exit 1
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
if [ "$DEQP_VER" = "vk" ]; then
 | 
			
		||||
   if [ -z "$VK_DRIVER" ]; then
 | 
			
		||||
      echo 'VK_DRIVER must be to something like "radeon" or "intel" for the test run'
 | 
			
		||||
      exit 1
 | 
			
		||||
   fi
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
if [ -z "$DEQP_SKIPS" ]; then
 | 
			
		||||
   echo 'DEQP_SKIPS must be set to something like "deqp-default-skips.txt"'
 | 
			
		||||
   exit 1
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
INSTALL=`pwd`/install
 | 
			
		||||
 | 
			
		||||
# Set up the driver environment.
 | 
			
		||||
export LD_LIBRARY_PATH=`pwd`/install/lib/
 | 
			
		||||
export EGL_PLATFORM=surfaceless
 | 
			
		||||
export VK_ICD_FILENAMES=`pwd`/install/share/vulkan/icd.d/"$VK_DRIVER"_icd.`uname -m`.json
 | 
			
		||||
 | 
			
		||||
# the runner was failing to look for libkms in /usr/local/lib for some reason
 | 
			
		||||
# I never figured out.
 | 
			
		||||
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib
 | 
			
		||||
 | 
			
		||||
RESULTS=`pwd`/results
 | 
			
		||||
mkdir -p $RESULTS
 | 
			
		||||
 | 
			
		||||
# Generate test case list file.
 | 
			
		||||
if [ "$DEQP_VER" = "vk" ]; then
 | 
			
		||||
   cp /deqp/mustpass/vk-master.txt /tmp/case-list.txt
 | 
			
		||||
   DEQP=/deqp/external/vulkancts/modules/vulkan/deqp-vk
 | 
			
		||||
else
 | 
			
		||||
   cp /deqp/mustpass/$DEQP_VER-master.txt /tmp/case-list.txt
 | 
			
		||||
   DEQP=/deqp/modules/$DEQP_VER/deqp-$DEQP_VER
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
# If the job is parallel, take the corresponding fraction of the caselist.
 | 
			
		||||
# Note: N~M is a gnu sed extension to match every nth line (first line is #1).
 | 
			
		||||
if [ -n "$CI_NODE_INDEX" ]; then
 | 
			
		||||
   sed -ni $CI_NODE_INDEX~$CI_NODE_TOTAL"p" /tmp/case-list.txt
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
if [ -n "$DEQP_CASELIST_FILTER" ]; then
 | 
			
		||||
    sed -ni "/$DEQP_CASELIST_FILTER/p" /tmp/case-list.txt
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
if [ ! -s /tmp/case-list.txt ]; then
 | 
			
		||||
    echo "Caselist generation failed"
 | 
			
		||||
    exit 1
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
if [ -n "$DEQP_EXPECTED_FAILS" ]; then
 | 
			
		||||
    XFAIL="--xfail-list $INSTALL/$DEQP_EXPECTED_FAILS"
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
set +e
 | 
			
		||||
 | 
			
		||||
if [ -n "$DEQP_PARALLEL" ]; then
 | 
			
		||||
   JOB="--job $DEQP_PARALLEL"
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
run_cts() {
 | 
			
		||||
    deqp=$1
 | 
			
		||||
    caselist=$2
 | 
			
		||||
    output=$3
 | 
			
		||||
    deqp-runner \
 | 
			
		||||
        --deqp $deqp \
 | 
			
		||||
        --output $output \
 | 
			
		||||
        --caselist $caselist \
 | 
			
		||||
        --exclude-list $INSTALL/$DEQP_SKIPS \
 | 
			
		||||
        --compact-display false \
 | 
			
		||||
        $XFAIL \
 | 
			
		||||
        $JOB \
 | 
			
		||||
	--allow-flakes true \
 | 
			
		||||
	$DEQP_RUNNER_OPTIONS \
 | 
			
		||||
        -- \
 | 
			
		||||
        $DEQP_OPTIONS
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
report_flakes() {
 | 
			
		||||
    if [ -z "$FLAKES_CHANNEL" ]; then
 | 
			
		||||
        return 0
 | 
			
		||||
    fi
 | 
			
		||||
    flakes=$1
 | 
			
		||||
    # The nick needs to be something unique so that multiple runners
 | 
			
		||||
    # connecting at the same time don't race for one nick and get blocked.
 | 
			
		||||
    # freenode has a 16-char limit on nicks (9 is the IETF standard, but
 | 
			
		||||
    # various servers extend that).  So, trim off the common prefixes of the
 | 
			
		||||
    # runner name, and append the job ID so that software runners with more
 | 
			
		||||
    # than one concurrent job (think swrast) don't collide.  For freedreno,
 | 
			
		||||
    # that gives us a nick as long as db410c-N-JJJJJJJJ, and it'll be a while
 | 
			
		||||
    # before we make it to 9-digit jobs (we're at 7 so far).
 | 
			
		||||
    runner=`echo $CI_RUNNER_DESCRIPTION | sed 's|mesa-||' | sed 's|google-freedreno-||g'`
 | 
			
		||||
    bot="$runner-$CI_JOB_ID"
 | 
			
		||||
    channel="$FLAKES_CHANNEL"
 | 
			
		||||
    (
 | 
			
		||||
    echo NICK $bot
 | 
			
		||||
    echo USER $bot unused unused :Gitlab CI Notifier
 | 
			
		||||
    sleep 10
 | 
			
		||||
    echo "JOIN $channel"
 | 
			
		||||
    sleep 1
 | 
			
		||||
    desc="Flakes detected in job: $CI_JOB_URL on $CI_RUNNER_DESCRIPTION"
 | 
			
		||||
    if [ -n "$CI_MERGE_REQUEST_SOURCE_BRANCH_NAME" ]; then
 | 
			
		||||
        desc="$desc on branch $CI_MERGE_REQUEST_SOURCE_BRANCH_NAME ($CI_MERGE_REQUEST_TITLE)"
 | 
			
		||||
    elif [ -n "$CI_COMMIT_BRANCH" ]; then
 | 
			
		||||
        desc="$desc on branch $CI_COMMIT_BRANCH ($CI_COMMIT_TITLE)"
 | 
			
		||||
    fi
 | 
			
		||||
    echo "PRIVMSG $channel :$desc"
 | 
			
		||||
    for flake in `cat $flakes`; do
 | 
			
		||||
        echo "PRIVMSG $channel :$flake"
 | 
			
		||||
    done
 | 
			
		||||
    echo "PRIVMSG $channel :See $CI_JOB_URL/artifacts/browse/results/"
 | 
			
		||||
    echo "QUIT"
 | 
			
		||||
    ) | nc irc.freenode.net 6667 > /dev/null
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
extract_xml_result() {
 | 
			
		||||
    testcase=$1
 | 
			
		||||
    shift 1
 | 
			
		||||
    qpas=$*
 | 
			
		||||
    start="#beginTestCaseResult $testcase"
 | 
			
		||||
 | 
			
		||||
    # Pick the first QPA mentioning our testcase
 | 
			
		||||
    qpa=`grep -l "$start" $qpas | head -n 1`
 | 
			
		||||
 | 
			
		||||
    # If we found one, go extract just that testcase's contents from the QPA
 | 
			
		||||
    # to a new QPA, then do testlog-to-xml on that.
 | 
			
		||||
    if [ -n "$qpa" ]; then
 | 
			
		||||
        while IFS= read -r line; do
 | 
			
		||||
            if [ "$line" = "$start" ]; then
 | 
			
		||||
                dst="$testcase.qpa"
 | 
			
		||||
                echo "#beginSession" > $dst
 | 
			
		||||
                echo $line >> $dst
 | 
			
		||||
                while IFS= read -r line; do
 | 
			
		||||
                    if [ "$line" = "#endTestCaseResult" ]; then
 | 
			
		||||
                        echo $line >> $dst
 | 
			
		||||
                        echo "#endSession" >> $dst
 | 
			
		||||
                        /deqp/executor/testlog-to-xml $dst "$RESULTS/$testcase$DEQP_RUN_SUFFIX.xml"
 | 
			
		||||
                        # copy the stylesheets here so they only end up in artifacts
 | 
			
		||||
                        # if we have one or more result xml in artifacts
 | 
			
		||||
                        cp /deqp/testlog.css "$RESULTS/"
 | 
			
		||||
                        cp /deqp/testlog.xsl "$RESULTS/"
 | 
			
		||||
                        return 0
 | 
			
		||||
                    fi
 | 
			
		||||
                    echo $line >> $dst
 | 
			
		||||
                done
 | 
			
		||||
                return 1
 | 
			
		||||
            fi
 | 
			
		||||
        done < $qpa
 | 
			
		||||
    fi
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
extract_xml_results() {
 | 
			
		||||
    qpas=$*
 | 
			
		||||
    while IFS= read -r testcase; do
 | 
			
		||||
        testcase=${testcase%,*}
 | 
			
		||||
        extract_xml_result $testcase $qpas
 | 
			
		||||
    done
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# Generate junit results
 | 
			
		||||
generate_junit() {
 | 
			
		||||
    results=$1
 | 
			
		||||
    echo "<?xml version=\"1.0\" encoding=\"utf-8\"?>"
 | 
			
		||||
    echo "<testsuites>"
 | 
			
		||||
    echo "<testsuite name=\"$DEQP_VER-$CI_NODE_INDEX\">"
 | 
			
		||||
    while read line; do
 | 
			
		||||
        testcase=${line%,*}
 | 
			
		||||
        result=${line#*,}
 | 
			
		||||
        # avoid counting Skip's in the # of tests:
 | 
			
		||||
        if [ "$result" = "Skip" ]; then
 | 
			
		||||
            continue;
 | 
			
		||||
        fi
 | 
			
		||||
        echo "<testcase name=\"$testcase\">"
 | 
			
		||||
        if [ "$result" != "Pass" ]; then
 | 
			
		||||
            echo "<failure type=\"$result\">"
 | 
			
		||||
            echo "$result: See $CI_JOB_URL/artifacts/results/$testcase.xml"
 | 
			
		||||
            echo "</failure>"
 | 
			
		||||
        fi
 | 
			
		||||
        echo "</testcase>"
 | 
			
		||||
    done < $results
 | 
			
		||||
    echo "</testsuite>"
 | 
			
		||||
    echo "</testsuites>"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
parse_renderer() {
 | 
			
		||||
    RENDERER=`grep -A1 TestCaseResult.\*info.renderer $RESULTS/deqp-info.qpa | grep '<Text' | sed 's|.*<Text>||g' | sed 's|</Text>||g'`
 | 
			
		||||
    VERSION=`grep -A1 TestCaseResult.\*info.version $RESULTS/deqp-info.qpa | grep '<Text' | sed 's|.*<Text>||g' | sed 's|</Text>||g'`
 | 
			
		||||
    echo "Renderer: $RENDERER"
 | 
			
		||||
    echo "Version: $VERSION "
 | 
			
		||||
 | 
			
		||||
    if ! echo $RENDERER | grep -q $DEQP_EXPECTED_RENDERER; then
 | 
			
		||||
        echo "Expected GL_RENDERER $DEQP_EXPECTED_RENDERER"
 | 
			
		||||
        exit 1
 | 
			
		||||
    fi
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
check_renderer() {
 | 
			
		||||
    echo "Capturing renderer info for GLES driver sanity checks"
 | 
			
		||||
    # If you're having trouble loading your driver, uncommenting this may help
 | 
			
		||||
    # debug.
 | 
			
		||||
    # export EGL_LOG_LEVEL=debug
 | 
			
		||||
    VERSION=`echo $DEQP_VER | tr '[a-z]' '[A-Z]'`
 | 
			
		||||
    $DEQP $DEQP_OPTIONS --deqp-case=dEQP-$VERSION.info.\* --deqp-log-filename=$RESULTS/deqp-info.qpa
 | 
			
		||||
    parse_renderer
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
check_vk_device_name() {
 | 
			
		||||
    echo "Capturing device info for VK driver sanity checks"
 | 
			
		||||
    $DEQP $DEQP_OPTIONS --deqp-case=dEQP-VK.info.device --deqp-log-filename=$RESULTS/deqp-info.qpa
 | 
			
		||||
    DEVICENAME=`grep deviceName $RESULTS/deqp-info.qpa | sed 's|deviceName: ||g'`
 | 
			
		||||
    echo "deviceName: $DEVICENAME"
 | 
			
		||||
    if [ -n "$DEQP_EXPECTED_RENDERER" -a $DEVICENAME != "$DEQP_EXPECTED_RENDERER" ]; then
 | 
			
		||||
        echo "Expected deviceName $DEQP_EXPECTED_RENDERER"
 | 
			
		||||
        exit 1
 | 
			
		||||
    fi
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# wrapper to supress +x to avoid spamming the log
 | 
			
		||||
quiet() {
 | 
			
		||||
    set +x
 | 
			
		||||
    "$@"
 | 
			
		||||
    set -x
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
if [ "$GALLIUM_DRIVER" = "virpipe" ]; then
 | 
			
		||||
    # deqp is to use virpipe, and virgl_test_server llvmpipe
 | 
			
		||||
    export GALLIUM_DRIVER="$GALLIUM_DRIVER"
 | 
			
		||||
 | 
			
		||||
    GALLIUM_DRIVER=llvmpipe \
 | 
			
		||||
    GALLIVM_PERF="nopt,no_filter_hacks" \
 | 
			
		||||
    VTEST_USE_EGL_SURFACELESS=1 \
 | 
			
		||||
    VTEST_USE_GLES=1 \
 | 
			
		||||
    virgl_test_server >$RESULTS/vtest-log.txt 2>&1 &
 | 
			
		||||
 | 
			
		||||
    sleep 1
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
if [ $DEQP_VER = vk ]; then
 | 
			
		||||
    quiet check_vk_device_name
 | 
			
		||||
else
 | 
			
		||||
    quiet check_renderer
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
RESULTSFILE=$RESULTS/cts-runner-results$DEQP_RUN_SUFFIX.txt
 | 
			
		||||
UNEXPECTED_RESULTSFILE=$RESULTS/cts-runner-unexpected-results$DEQP_RUN_SUFFIX.txt
 | 
			
		||||
FLAKESFILE=$RESULTS/cts-runner-flakes$DEQP_RUN_SUFFIX.txt
 | 
			
		||||
 | 
			
		||||
run_cts $DEQP /tmp/case-list.txt $RESULTSFILE
 | 
			
		||||
DEQP_EXITCODE=$?
 | 
			
		||||
 | 
			
		||||
# junit is disabled, because it overloads gitlab.freedesktop.org to parse it.
 | 
			
		||||
#quiet generate_junit $RESULTSFILE > $RESULTS/results.xml
 | 
			
		||||
 | 
			
		||||
if [ $DEQP_EXITCODE -ne 0 ]; then
 | 
			
		||||
    # preserve caselist files in case of failures:
 | 
			
		||||
    cp /tmp/deqp_runner.*.txt $RESULTS/
 | 
			
		||||
    egrep -v ",Pass|,Skip|,ExpectedFail" $RESULTSFILE > $UNEXPECTED_RESULTSFILE
 | 
			
		||||
 | 
			
		||||
    if [ -z "$DEQP_NO_SAVE_RESULTS" ]; then
 | 
			
		||||
        echo "Some unexpected results found (see cts-runner-results.txt in artifacts for full results):"
 | 
			
		||||
        head -n 50 $UNEXPECTED_RESULTSFILE
 | 
			
		||||
 | 
			
		||||
        # Save the logs for up to the first 50 unexpected results:
 | 
			
		||||
        head -n 50 $UNEXPECTED_RESULTSFILE | quiet extract_xml_results /tmp/*.qpa
 | 
			
		||||
    else
 | 
			
		||||
        echo "Unexpected results found:"
 | 
			
		||||
        cat $UNEXPECTED_RESULTSFILE
 | 
			
		||||
    fi
 | 
			
		||||
 | 
			
		||||
    count=`cat $UNEXPECTED_RESULTSFILE | wc -l`
 | 
			
		||||
 | 
			
		||||
    # Re-run fails to detect flakes.  But use a small threshold, if
 | 
			
		||||
    # something was fundamentally broken, we don't want to re-run
 | 
			
		||||
    # the entire caselist
 | 
			
		||||
else
 | 
			
		||||
    grep ",Flake" $RESULTSFILE > $FLAKESFILE
 | 
			
		||||
 | 
			
		||||
    count=`cat $FLAKESFILE | wc -l`
 | 
			
		||||
    if [ $count -gt 0 ]; then
 | 
			
		||||
        echo "Some flakes found (see cts-runner-flakes.txt in artifacts for full results):"
 | 
			
		||||
        head -n 50 $FLAKESFILE
 | 
			
		||||
 | 
			
		||||
        if [ -z "$DEQP_NO_SAVE_RESULTS" ]; then
 | 
			
		||||
            # Save the logs for up to the first 50 flakes:
 | 
			
		||||
            head -n 50 $FLAKESFILE | quiet extract_xml_results /tmp/*.qpa
 | 
			
		||||
        fi
 | 
			
		||||
 | 
			
		||||
        # Report the flakes to IRC channel for monitoring (if configured):
 | 
			
		||||
        quiet report_flakes $FLAKESFILE
 | 
			
		||||
    else
 | 
			
		||||
        # no flakes, so clean-up:
 | 
			
		||||
        rm $FLAKESFILE
 | 
			
		||||
    fi
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
exit $DEQP_EXITCODE
 | 
			
		||||
@@ -1,843 +0,0 @@
 | 
			
		||||
dEQP-GLES2.functional.clipping.line.wide_line_clip_viewport_center
 | 
			
		||||
dEQP-GLES2.functional.clipping.line.wide_line_clip_viewport_corner
 | 
			
		||||
dEQP-GLES2.functional.clipping.point.wide_point_clip
 | 
			
		||||
dEQP-GLES2.functional.clipping.point.wide_point_clip_viewport_center
 | 
			
		||||
dEQP-GLES2.functional.clipping.point.wide_point_clip_viewport_corner
 | 
			
		||||
dEQP-GLES2.functional.clipping.triangle_vertex.clip_two.clip_neg_y_neg_z_and_neg_x_neg_y_pos_z
 | 
			
		||||
dEQP-GLES2.functional.clipping.triangle_vertex.clip_two.clip_pos_y_pos_z_and_neg_x_neg_y_neg_z
 | 
			
		||||
dEQP-GLES2.functional.polygon_offset.default_displacement_with_units
 | 
			
		||||
dEQP-GLES2.functional.polygon_offset.fixed16_displacement_with_units
 | 
			
		||||
dEQP-GLES2.functional.rasterization.interpolation.basic.line_loop_wide
 | 
			
		||||
dEQP-GLES2.functional.rasterization.interpolation.basic.line_strip_wide
 | 
			
		||||
dEQP-GLES2.functional.rasterization.interpolation.basic.lines_wide
 | 
			
		||||
dEQP-GLES2.functional.rasterization.interpolation.projected.line_loop_wide
 | 
			
		||||
dEQP-GLES2.functional.rasterization.interpolation.projected.line_strip_wide
 | 
			
		||||
dEQP-GLES2.functional.rasterization.interpolation.projected.lines_wide
 | 
			
		||||
dEQP-GLES2.functional.rasterization.limits.points
 | 
			
		||||
dEQP-GLES2.functional.rasterization.primitives.points
 | 
			
		||||
dEQP-GLES3.functional.clipping.line.wide_line_clip_viewport_center
 | 
			
		||||
dEQP-GLES3.functional.clipping.line.wide_line_clip_viewport_corner
 | 
			
		||||
dEQP-GLES3.functional.clipping.point.wide_point_clip
 | 
			
		||||
dEQP-GLES3.functional.clipping.point.wide_point_clip_viewport_center
 | 
			
		||||
dEQP-GLES3.functional.clipping.point.wide_point_clip_viewport_corner
 | 
			
		||||
dEQP-GLES3.functional.clipping.triangle_vertex.clip_two.clip_neg_y_neg_z_and_neg_x_neg_y_pos_z
 | 
			
		||||
dEQP-GLES3.functional.clipping.triangle_vertex.clip_two.clip_pos_y_pos_z_and_neg_x_neg_y_neg_z
 | 
			
		||||
dEQP-GLES3.functional.draw.random.124
 | 
			
		||||
dEQP-GLES3.functional.fbo.depth.depth_test_clamp.depth24_stencil8
 | 
			
		||||
dEQP-GLES3.functional.fbo.depth.depth_test_clamp.depth32f_stencil8
 | 
			
		||||
dEQP-GLES3.functional.fbo.depth.depth_test_clamp.depth_component16
 | 
			
		||||
dEQP-GLES3.functional.fbo.depth.depth_test_clamp.depth_component24
 | 
			
		||||
dEQP-GLES3.functional.fbo.depth.depth_test_clamp.depth_component32f
 | 
			
		||||
dEQP-GLES3.functional.fbo.depth.depth_write_clamp.depth32f_stencil8
 | 
			
		||||
dEQP-GLES3.functional.fbo.depth.depth_write_clamp.depth_component32f
 | 
			
		||||
dEQP-GLES3.functional.fbo.invalidate.sub.unbind_blit_msaa_color
 | 
			
		||||
dEQP-GLES3.functional.fbo.invalidate.sub.unbind_blit_msaa_depth
 | 
			
		||||
dEQP-GLES3.functional.fbo.invalidate.sub.unbind_blit_msaa_depth_stencil
 | 
			
		||||
dEQP-GLES3.functional.fbo.invalidate.sub.unbind_blit_msaa_stencil
 | 
			
		||||
dEQP-GLES3.functional.fbo.invalidate.whole.unbind_blit_msaa_color
 | 
			
		||||
dEQP-GLES3.functional.fbo.invalidate.whole.unbind_blit_msaa_depth
 | 
			
		||||
dEQP-GLES3.functional.fbo.invalidate.whole.unbind_blit_msaa_depth_stencil
 | 
			
		||||
dEQP-GLES3.functional.fbo.invalidate.whole.unbind_blit_msaa_stencil
 | 
			
		||||
dEQP-GLES3.functional.fbo.msaa.2_samples.depth24_stencil8
 | 
			
		||||
dEQP-GLES3.functional.fbo.msaa.2_samples.depth32f_stencil8
 | 
			
		||||
dEQP-GLES3.functional.fbo.msaa.2_samples.depth_component16
 | 
			
		||||
dEQP-GLES3.functional.fbo.msaa.2_samples.depth_component24
 | 
			
		||||
dEQP-GLES3.functional.fbo.msaa.2_samples.depth_component32f
 | 
			
		||||
dEQP-GLES3.functional.fbo.msaa.2_samples.r11f_g11f_b10f
 | 
			
		||||
dEQP-GLES3.functional.fbo.msaa.2_samples.r16f
 | 
			
		||||
dEQP-GLES3.functional.fbo.msaa.2_samples.r8
 | 
			
		||||
dEQP-GLES3.functional.fbo.msaa.2_samples.rg16f
 | 
			
		||||
dEQP-GLES3.functional.fbo.msaa.2_samples.rg8
 | 
			
		||||
dEQP-GLES3.functional.fbo.msaa.2_samples.rgb10_a2
 | 
			
		||||
dEQP-GLES3.functional.fbo.msaa.2_samples.rgb565
 | 
			
		||||
dEQP-GLES3.functional.fbo.msaa.2_samples.rgb5_a1
 | 
			
		||||
dEQP-GLES3.functional.fbo.msaa.2_samples.rgb8
 | 
			
		||||
dEQP-GLES3.functional.fbo.msaa.2_samples.rgba4
 | 
			
		||||
dEQP-GLES3.functional.fbo.msaa.2_samples.rgba8
 | 
			
		||||
dEQP-GLES3.functional.fbo.msaa.2_samples.srgb8_alpha8
 | 
			
		||||
dEQP-GLES3.functional.fbo.msaa.2_samples.stencil_index8
 | 
			
		||||
dEQP-GLES3.functional.fbo.msaa.4_samples.depth24_stencil8
 | 
			
		||||
dEQP-GLES3.functional.fbo.msaa.4_samples.depth32f_stencil8
 | 
			
		||||
dEQP-GLES3.functional.fbo.msaa.4_samples.depth_component16
 | 
			
		||||
dEQP-GLES3.functional.fbo.msaa.4_samples.depth_component24
 | 
			
		||||
dEQP-GLES3.functional.fbo.msaa.4_samples.depth_component32f
 | 
			
		||||
dEQP-GLES3.functional.fbo.msaa.4_samples.r11f_g11f_b10f
 | 
			
		||||
dEQP-GLES3.functional.fbo.msaa.4_samples.r16f
 | 
			
		||||
dEQP-GLES3.functional.fbo.msaa.4_samples.r8
 | 
			
		||||
dEQP-GLES3.functional.fbo.msaa.4_samples.rg16f
 | 
			
		||||
dEQP-GLES3.functional.fbo.msaa.4_samples.rg8
 | 
			
		||||
dEQP-GLES3.functional.fbo.msaa.4_samples.rgb10_a2
 | 
			
		||||
dEQP-GLES3.functional.fbo.msaa.4_samples.rgb565
 | 
			
		||||
dEQP-GLES3.functional.fbo.msaa.4_samples.rgb5_a1
 | 
			
		||||
dEQP-GLES3.functional.fbo.msaa.4_samples.rgb8
 | 
			
		||||
dEQP-GLES3.functional.fbo.msaa.4_samples.rgba4
 | 
			
		||||
dEQP-GLES3.functional.fbo.msaa.4_samples.rgba8
 | 
			
		||||
dEQP-GLES3.functional.fbo.msaa.4_samples.srgb8_alpha8
 | 
			
		||||
dEQP-GLES3.functional.fbo.msaa.4_samples.stencil_index8
 | 
			
		||||
dEQP-GLES3.functional.multisample.fbo_max_samples.proportionality_alpha_to_coverage
 | 
			
		||||
dEQP-GLES3.functional.multisample.fbo_max_samples.proportionality_sample_coverage
 | 
			
		||||
dEQP-GLES3.functional.multisample.fbo_max_samples.proportionality_sample_coverage_inverted
 | 
			
		||||
dEQP-GLES3.functional.multisample.fbo_max_samples.sample_coverage_invert
 | 
			
		||||
dEQP-GLES3.functional.negative_api.buffer.blit_framebuffer_multisample
 | 
			
		||||
dEQP-GLES3.functional.negative_api.buffer.read_pixels_fbo_format_mismatch
 | 
			
		||||
dEQP-GLES3.functional.polygon_offset.default_displacement_with_units
 | 
			
		||||
dEQP-GLES3.functional.polygon_offset.fixed16_displacement_with_units
 | 
			
		||||
dEQP-GLES3.functional.polygon_offset.fixed24_displacement_with_units
 | 
			
		||||
dEQP-GLES3.functional.polygon_offset.float32_displacement_with_units
 | 
			
		||||
dEQP-GLES3.functional.rasterization.fbo.rbo_multisample_max.interpolation.lines_wide
 | 
			
		||||
dEQP-GLES3.functional.rasterization.fbo.rbo_multisample_max.primitives.lines_wide
 | 
			
		||||
dEQP-GLES3.functional.rasterization.fbo.rbo_singlesample.interpolation.lines_wide
 | 
			
		||||
dEQP-GLES3.functional.rasterization.fbo.rbo_singlesample.primitives.points
 | 
			
		||||
dEQP-GLES3.functional.rasterization.fbo.texture_2d.interpolation.lines_wide
 | 
			
		||||
dEQP-GLES3.functional.rasterization.fbo.texture_2d.primitives.points
 | 
			
		||||
dEQP-GLES3.functional.rasterization.interpolation.basic.line_loop_wide
 | 
			
		||||
dEQP-GLES3.functional.rasterization.interpolation.basic.line_strip_wide
 | 
			
		||||
dEQP-GLES3.functional.rasterization.interpolation.basic.lines_wide
 | 
			
		||||
dEQP-GLES3.functional.rasterization.interpolation.projected.line_loop_wide
 | 
			
		||||
dEQP-GLES3.functional.rasterization.interpolation.projected.line_strip_wide
 | 
			
		||||
dEQP-GLES3.functional.rasterization.interpolation.projected.lines_wide
 | 
			
		||||
dEQP-GLES3.functional.rasterization.primitives.points
 | 
			
		||||
dEQP-GLES3.functional.rasterizer_discard.basic.write_depth_points
 | 
			
		||||
dEQP-GLES3.functional.rasterizer_discard.basic.write_stencil_points
 | 
			
		||||
dEQP-GLES3.functional.rasterizer_discard.fbo.write_depth_points
 | 
			
		||||
dEQP-GLES3.functional.rasterizer_discard.fbo.write_stencil_points
 | 
			
		||||
dEQP-GLES3.functional.rasterizer_discard.scissor.write_depth_points
 | 
			
		||||
dEQP-GLES3.functional.rasterizer_discard.scissor.write_stencil_points
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.dfdx.fastest.fbo_msaa4.float_highp
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.dfdx.fastest.fbo_msaa4.float_mediump
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.dfdx.fastest.fbo_msaa4.vec2_highp
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.dfdx.fastest.fbo_msaa4.vec2_mediump
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.dfdx.fastest.fbo_msaa4.vec3_highp
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.dfdx.fastest.fbo_msaa4.vec3_mediump
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.dfdx.fastest.fbo_msaa4.vec4_highp
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.dfdx.fastest.fbo_msaa4.vec4_mediump
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.dfdx.fbo_msaa2.float_highp
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.dfdx.fbo_msaa2.float_mediump
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.dfdx.fbo_msaa2.vec2_highp
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.dfdx.fbo_msaa2.vec2_mediump
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.dfdx.fbo_msaa2.vec3_highp
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.dfdx.fbo_msaa2.vec3_mediump
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.dfdx.fbo_msaa2.vec4_highp
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.dfdx.fbo_msaa2.vec4_mediump
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.dfdx.fbo_msaa4.float_highp
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.dfdx.fbo_msaa4.float_mediump
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.dfdx.fbo_msaa4.vec2_highp
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.dfdx.fbo_msaa4.vec2_mediump
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.dfdx.fbo_msaa4.vec3_highp
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.dfdx.fbo_msaa4.vec3_mediump
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.dfdx.fbo_msaa4.vec4_highp
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.dfdx.fbo_msaa4.vec4_mediump
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.dfdx.nicest.fbo_msaa4.float_highp
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.dfdx.nicest.fbo_msaa4.float_mediump
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.dfdx.nicest.fbo_msaa4.vec2_highp
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.dfdx.nicest.fbo_msaa4.vec2_mediump
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.dfdx.nicest.fbo_msaa4.vec3_highp
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.dfdx.nicest.fbo_msaa4.vec3_mediump
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.dfdx.nicest.fbo_msaa4.vec4_highp
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.dfdx.nicest.fbo_msaa4.vec4_mediump
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.dfdx.texture.msaa4.float_highp
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.dfdx.texture.msaa4.float_mediump
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.dfdx.texture.msaa4.vec2_highp
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.dfdx.texture.msaa4.vec2_mediump
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.dfdx.texture.msaa4.vec3_highp
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.dfdx.texture.msaa4.vec3_mediump
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.dfdx.texture.msaa4.vec4_highp
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.dfdx.texture.msaa4.vec4_mediump
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.dfdy.fastest.fbo_msaa4.float_highp
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.dfdy.fastest.fbo_msaa4.float_mediump
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.dfdy.fastest.fbo_msaa4.vec2_highp
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.dfdy.fastest.fbo_msaa4.vec2_mediump
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.dfdy.fastest.fbo_msaa4.vec3_highp
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.dfdy.fastest.fbo_msaa4.vec3_mediump
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.dfdy.fastest.fbo_msaa4.vec4_highp
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.dfdy.fastest.fbo_msaa4.vec4_mediump
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.dfdy.fbo_msaa2.float_highp
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.dfdy.fbo_msaa2.float_mediump
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.dfdy.fbo_msaa2.vec2_highp
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.dfdy.fbo_msaa2.vec2_mediump
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.dfdy.fbo_msaa2.vec3_highp
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.dfdy.fbo_msaa2.vec3_mediump
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.dfdy.fbo_msaa2.vec4_highp
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.dfdy.fbo_msaa2.vec4_mediump
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.dfdy.fbo_msaa4.float_highp
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.dfdy.fbo_msaa4.float_mediump
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.dfdy.fbo_msaa4.vec2_highp
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.dfdy.fbo_msaa4.vec2_mediump
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.dfdy.fbo_msaa4.vec3_highp
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.dfdy.fbo_msaa4.vec3_mediump
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.dfdy.fbo_msaa4.vec4_highp
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.dfdy.fbo_msaa4.vec4_mediump
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.dfdy.nicest.fbo_msaa4.float_highp
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.dfdy.nicest.fbo_msaa4.float_mediump
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.dfdy.nicest.fbo_msaa4.vec2_highp
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.dfdy.nicest.fbo_msaa4.vec2_mediump
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.dfdy.nicest.fbo_msaa4.vec3_highp
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.dfdy.nicest.fbo_msaa4.vec3_mediump
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.dfdy.nicest.fbo_msaa4.vec4_highp
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.dfdy.nicest.fbo_msaa4.vec4_mediump
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.dfdy.texture.msaa4.float_highp
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.dfdy.texture.msaa4.float_mediump
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.dfdy.texture.msaa4.vec2_highp
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.dfdy.texture.msaa4.vec2_mediump
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.dfdy.texture.msaa4.vec3_highp
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.dfdy.texture.msaa4.vec3_mediump
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.dfdy.texture.msaa4.vec4_highp
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.dfdy.texture.msaa4.vec4_mediump
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.fwidth.fastest.fbo_msaa4.float_highp
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.fwidth.fastest.fbo_msaa4.float_mediump
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.fwidth.fastest.fbo_msaa4.vec2_highp
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.fwidth.fastest.fbo_msaa4.vec2_mediump
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.fwidth.fastest.fbo_msaa4.vec3_highp
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.fwidth.fastest.fbo_msaa4.vec3_mediump
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.fwidth.fastest.fbo_msaa4.vec4_highp
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.fwidth.fastest.fbo_msaa4.vec4_mediump
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.fwidth.fbo_msaa2.float_highp
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.fwidth.fbo_msaa2.float_mediump
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.fwidth.fbo_msaa2.vec2_highp
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.fwidth.fbo_msaa2.vec2_mediump
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.fwidth.fbo_msaa2.vec3_highp
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.fwidth.fbo_msaa2.vec3_mediump
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.fwidth.fbo_msaa2.vec4_highp
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.fwidth.fbo_msaa2.vec4_mediump
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.fwidth.fbo_msaa4.float_highp
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.fwidth.fbo_msaa4.float_mediump
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.fwidth.fbo_msaa4.vec2_highp
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.fwidth.fbo_msaa4.vec2_mediump
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.fwidth.fbo_msaa4.vec3_highp
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.fwidth.fbo_msaa4.vec3_mediump
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.fwidth.fbo_msaa4.vec4_highp
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.fwidth.fbo_msaa4.vec4_mediump
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.fwidth.nicest.fbo_msaa4.float_highp
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.fwidth.nicest.fbo_msaa4.float_mediump
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.fwidth.nicest.fbo_msaa4.vec2_highp
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.fwidth.nicest.fbo_msaa4.vec2_mediump
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.fwidth.nicest.fbo_msaa4.vec3_highp
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.fwidth.nicest.fbo_msaa4.vec3_mediump
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.fwidth.nicest.fbo_msaa4.vec4_highp
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.fwidth.nicest.fbo_msaa4.vec4_mediump
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.fwidth.texture.msaa4.float_highp
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.fwidth.texture.msaa4.float_mediump
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.fwidth.texture.msaa4.vec2_highp
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.fwidth.texture.msaa4.vec2_mediump
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.fwidth.texture.msaa4.vec3_highp
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.fwidth.texture.msaa4.vec3_mediump
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.fwidth.texture.msaa4.vec4_highp
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.fwidth.texture.msaa4.vec4_mediump
 | 
			
		||||
dEQP-GLES3.functional.state_query.integers.max_samples_getfloat
 | 
			
		||||
dEQP-GLES3.functional.state_query.integers.max_samples_getinteger64
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_linear_clamp_clamp_mirror
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_linear_clamp_clamp_repeat
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_linear_clamp_mirror_mirror
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_linear_clamp_mirror_repeat
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_linear_clamp_repeat_mirror
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_linear_clamp_repeat_repeat
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_linear_mirror_clamp_mirror
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_linear_mirror_clamp_repeat
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_linear_mirror_mirror_mirror
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_linear_mirror_mirror_repeat
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_linear_mirror_repeat_mirror
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_linear_mirror_repeat_repeat
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_linear_repeat_clamp_mirror
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_linear_repeat_clamp_repeat
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_linear_repeat_mirror_mirror
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_linear_repeat_mirror_repeat
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_linear_repeat_repeat_mirror
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_linear_repeat_repeat_repeat
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_mipmap_linear_linear_clamp_clamp_repeat
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_mipmap_linear_linear_clamp_mirror_repeat
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_mipmap_linear_linear_clamp_repeat_repeat
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_mipmap_linear_linear_mirror_clamp_repeat
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_mipmap_linear_linear_mirror_mirror_repeat
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_mipmap_linear_linear_mirror_repeat_repeat
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_mipmap_linear_linear_repeat_clamp_mirror
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_mipmap_linear_linear_repeat_clamp_repeat
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_mipmap_linear_linear_repeat_mirror_mirror
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_mipmap_linear_linear_repeat_mirror_repeat
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_mipmap_linear_linear_repeat_repeat_mirror
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_mipmap_linear_linear_repeat_repeat_repeat
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_mipmap_linear_nearest_repeat_clamp_mirror
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_mipmap_linear_nearest_repeat_clamp_repeat
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_mipmap_linear_nearest_repeat_mirror_mirror
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_mipmap_linear_nearest_repeat_mirror_repeat
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_mipmap_linear_nearest_repeat_repeat_mirror
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_mipmap_linear_nearest_repeat_repeat_repeat
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_mipmap_nearest_linear_clamp_clamp_repeat
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_mipmap_nearest_linear_clamp_mirror_repeat
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_mipmap_nearest_linear_clamp_repeat_repeat
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_mipmap_nearest_linear_mirror_clamp_repeat
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_mipmap_nearest_linear_mirror_mirror_repeat
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_mipmap_nearest_linear_mirror_repeat_repeat
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_mipmap_nearest_linear_repeat_clamp_mirror
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_mipmap_nearest_linear_repeat_clamp_repeat
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_mipmap_nearest_linear_repeat_mirror_mirror
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_mipmap_nearest_linear_repeat_mirror_repeat
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_mipmap_nearest_linear_repeat_repeat_mirror
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_mipmap_nearest_linear_repeat_repeat_repeat
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_mipmap_nearest_nearest_repeat_clamp_mirror
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_mipmap_nearest_nearest_repeat_clamp_repeat
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_mipmap_nearest_nearest_repeat_mirror_mirror
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_mipmap_nearest_nearest_repeat_mirror_repeat
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_mipmap_nearest_nearest_repeat_repeat_mirror
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_mipmap_nearest_nearest_repeat_repeat_repeat
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_nearest_clamp_clamp_mirror
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_nearest_clamp_clamp_repeat
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_nearest_clamp_mirror_mirror
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_nearest_clamp_mirror_repeat
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_nearest_clamp_repeat_mirror
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_nearest_clamp_repeat_repeat
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_nearest_mirror_clamp_mirror
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_nearest_mirror_clamp_repeat
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_nearest_mirror_mirror_mirror
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_nearest_mirror_mirror_repeat
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_nearest_mirror_repeat_mirror
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_nearest_mirror_repeat_repeat
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_nearest_repeat_clamp_mirror
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_nearest_repeat_clamp_repeat
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_nearest_repeat_mirror_mirror
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_nearest_repeat_mirror_repeat
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_nearest_repeat_repeat_mirror
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_nearest_repeat_repeat_repeat
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_linear_clamp_clamp_repeat
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_linear_clamp_mirror_repeat
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_linear_clamp_repeat_repeat
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_linear_mirror_clamp_repeat
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_linear_mirror_mirror_repeat
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_linear_mirror_repeat_repeat
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_linear_repeat_clamp_mirror
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_linear_repeat_clamp_repeat
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_linear_repeat_mirror_mirror
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_linear_repeat_mirror_repeat
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_linear_repeat_repeat_mirror
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_linear_repeat_repeat_repeat
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_mipmap_linear_linear_clamp_clamp_repeat
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_mipmap_linear_linear_clamp_mirror_repeat
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_mipmap_linear_linear_clamp_repeat_repeat
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_mipmap_linear_linear_mirror_clamp_repeat
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_mipmap_linear_linear_mirror_mirror_repeat
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_mipmap_linear_linear_mirror_repeat_repeat
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_mipmap_linear_linear_repeat_clamp_mirror
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_mipmap_linear_linear_repeat_clamp_repeat
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_mipmap_linear_linear_repeat_mirror_mirror
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_mipmap_linear_linear_repeat_mirror_repeat
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_mipmap_linear_linear_repeat_repeat_mirror
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_mipmap_linear_linear_repeat_repeat_repeat
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_mipmap_nearest_linear_clamp_clamp_repeat
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_mipmap_nearest_linear_clamp_mirror_repeat
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_mipmap_nearest_linear_clamp_repeat_repeat
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_mipmap_nearest_linear_mirror_clamp_repeat
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_mipmap_nearest_linear_mirror_mirror_repeat
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_mipmap_nearest_linear_mirror_repeat_repeat
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_mipmap_nearest_linear_repeat_clamp_mirror
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_mipmap_nearest_linear_repeat_clamp_repeat
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_mipmap_nearest_linear_repeat_mirror_mirror
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_mipmap_nearest_linear_repeat_mirror_repeat
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_mipmap_nearest_linear_repeat_repeat_mirror
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_mipmap_nearest_linear_repeat_repeat_repeat
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.formats.r11f_g11f_b10f_linear
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.formats.r11f_g11f_b10f_linear_mipmap_linear
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.formats.r11f_g11f_b10f_linear_mipmap_nearest
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.formats.r11f_g11f_b10f_nearest_mipmap_linear
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.formats.r11f_g11f_b10f_nearest_mipmap_nearest
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.formats.rgb10_a2_linear
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.formats.rgb10_a2_linear_mipmap_linear
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.formats.rgb10_a2_linear_mipmap_nearest
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.formats.rgb10_a2_nearest_mipmap_linear
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.formats.rgb10_a2_nearest_mipmap_nearest
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.formats.rgb565_linear
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.formats.rgb565_linear_mipmap_linear
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.formats.rgb565_linear_mipmap_nearest
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.formats.rgb565_nearest_mipmap_linear
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.formats.rgb565_nearest_mipmap_nearest
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.formats.rgb5_a1_linear
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.formats.rgb5_a1_linear_mipmap_linear
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.formats.rgb5_a1_linear_mipmap_nearest
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.formats.rgb5_a1_nearest_mipmap_linear
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.formats.rgb5_a1_nearest_mipmap_nearest
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.formats.rgb9_e5_linear
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.formats.rgb9_e5_linear_mipmap_linear
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.formats.rgb9_e5_linear_mipmap_nearest
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.formats.rgb9_e5_nearest_mipmap_linear
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.formats.rgb9_e5_nearest_mipmap_nearest
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.formats.rgba16f_linear
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.formats.rgba16f_linear_mipmap_linear
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.formats.rgba16f_linear_mipmap_nearest
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.formats.rgba16f_nearest_mipmap_linear
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.formats.rgba16f_nearest_mipmap_nearest
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.formats.rgba4_linear
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.formats.rgba4_linear_mipmap_linear
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.formats.rgba4_linear_mipmap_nearest
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.formats.rgba4_nearest_mipmap_linear
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.formats.rgba4_nearest_mipmap_nearest
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.formats.rgba8_linear
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.formats.rgba8_linear_mipmap_linear
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.formats.rgba8_linear_mipmap_nearest
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.formats.rgba8_nearest_mipmap_linear
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.formats.rgba8_nearest_mipmap_nearest
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.formats.rgba8_snorm_linear
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.formats.rgba8_snorm_linear_mipmap_linear
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.formats.rgba8_snorm_linear_mipmap_nearest
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.formats.rgba8_snorm_nearest_mipmap_linear
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.formats.rgba8_snorm_nearest_mipmap_nearest
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.formats.srgb8_alpha8_linear
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.formats.srgb8_alpha8_linear_mipmap_linear
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.formats.srgb8_alpha8_linear_mipmap_nearest
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.formats.srgb8_alpha8_nearest_mipmap_linear
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.formats.srgb8_alpha8_nearest_mipmap_nearest
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.formats.srgb_r8_linear
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.formats.srgb_r8_linear_mipmap_linear
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.formats.srgb_r8_linear_mipmap_nearest
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.formats.srgb_r8_nearest_mipmap_linear
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.formats.srgb_r8_nearest_mipmap_nearest
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.sizes.128x32x64_linear
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.sizes.128x32x64_linear_mipmap_linear
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.sizes.128x32x64_linear_mipmap_nearest
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.sizes.128x32x64_nearest_mipmap_linear
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.sizes.128x32x64_nearest_mipmap_nearest
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.sizes.63x63x63_linear
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.sizes.63x63x63_linear_mipmap_linear
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.sizes.63x63x63_linear_mipmap_nearest
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.sizes.63x63x63_nearest_mipmap_linear
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.sizes.63x63x63_nearest_mipmap_nearest
 | 
			
		||||
dEQP-GLES3.functional.texture.vertex.3d.filtering.linear_linear_clamp
 | 
			
		||||
dEQP-GLES3.functional.texture.vertex.3d.filtering.linear_linear_mirror
 | 
			
		||||
dEQP-GLES3.functional.texture.vertex.3d.filtering.linear_linear_repeat
 | 
			
		||||
dEQP-GLES3.functional.texture.vertex.3d.filtering.linear_mipmap_linear_linear_clamp
 | 
			
		||||
dEQP-GLES3.functional.texture.vertex.3d.filtering.linear_mipmap_linear_linear_mirror
 | 
			
		||||
dEQP-GLES3.functional.texture.vertex.3d.filtering.linear_mipmap_linear_linear_repeat
 | 
			
		||||
dEQP-GLES3.functional.texture.vertex.3d.filtering.linear_mipmap_linear_nearest_clamp
 | 
			
		||||
dEQP-GLES3.functional.texture.vertex.3d.filtering.linear_mipmap_linear_nearest_mirror
 | 
			
		||||
dEQP-GLES3.functional.texture.vertex.3d.filtering.linear_mipmap_linear_nearest_repeat
 | 
			
		||||
dEQP-GLES3.functional.texture.vertex.3d.filtering.linear_mipmap_nearest_linear_repeat
 | 
			
		||||
dEQP-GLES3.functional.texture.vertex.3d.filtering.linear_nearest_clamp
 | 
			
		||||
dEQP-GLES3.functional.texture.vertex.3d.filtering.linear_nearest_mirror
 | 
			
		||||
dEQP-GLES3.functional.texture.vertex.3d.filtering.linear_nearest_repeat
 | 
			
		||||
dEQP-GLES3.functional.texture.vertex.3d.filtering.nearest_linear_repeat
 | 
			
		||||
dEQP-GLES3.functional.texture.vertex.3d.filtering.nearest_mipmap_linear_linear_repeat
 | 
			
		||||
dEQP-GLES3.functional.texture.vertex.3d.filtering.nearest_mipmap_nearest_linear_repeat
 | 
			
		||||
dEQP-GLES3.functional.texture.vertex.3d.wrap.clamp_clamp_clamp
 | 
			
		||||
dEQP-GLES3.functional.texture.vertex.3d.wrap.clamp_clamp_mirror
 | 
			
		||||
dEQP-GLES3.functional.texture.vertex.3d.wrap.clamp_clamp_repeat
 | 
			
		||||
dEQP-GLES3.functional.texture.vertex.3d.wrap.clamp_mirror_mirror
 | 
			
		||||
dEQP-GLES3.functional.texture.vertex.3d.wrap.clamp_mirror_repeat
 | 
			
		||||
dEQP-GLES3.functional.texture.vertex.3d.wrap.clamp_repeat_mirror
 | 
			
		||||
dEQP-GLES3.functional.texture.vertex.3d.wrap.clamp_repeat_repeat
 | 
			
		||||
dEQP-GLES3.functional.texture.vertex.3d.wrap.mirror_clamp_clamp
 | 
			
		||||
dEQP-GLES3.functional.texture.vertex.3d.wrap.mirror_clamp_mirror
 | 
			
		||||
dEQP-GLES3.functional.texture.vertex.3d.wrap.mirror_clamp_repeat
 | 
			
		||||
dEQP-GLES3.functional.texture.vertex.3d.wrap.mirror_mirror_mirror
 | 
			
		||||
dEQP-GLES3.functional.texture.vertex.3d.wrap.mirror_mirror_repeat
 | 
			
		||||
dEQP-GLES3.functional.texture.vertex.3d.wrap.mirror_repeat_mirror
 | 
			
		||||
dEQP-GLES3.functional.texture.vertex.3d.wrap.mirror_repeat_repeat
 | 
			
		||||
dEQP-GLES3.functional.texture.vertex.3d.wrap.repeat_clamp_clamp
 | 
			
		||||
dEQP-GLES3.functional.texture.vertex.3d.wrap.repeat_clamp_mirror
 | 
			
		||||
dEQP-GLES3.functional.texture.vertex.3d.wrap.repeat_clamp_repeat
 | 
			
		||||
dEQP-GLES3.functional.texture.vertex.3d.wrap.repeat_mirror_clamp
 | 
			
		||||
dEQP-GLES3.functional.texture.vertex.3d.wrap.repeat_mirror_mirror
 | 
			
		||||
dEQP-GLES3.functional.texture.vertex.3d.wrap.repeat_mirror_repeat
 | 
			
		||||
dEQP-GLES3.functional.texture.vertex.3d.wrap.repeat_repeat_clamp
 | 
			
		||||
dEQP-GLES3.functional.texture.vertex.3d.wrap.repeat_repeat_mirror
 | 
			
		||||
dEQP-GLES3.functional.texture.vertex.3d.wrap.repeat_repeat_repeat
 | 
			
		||||
dEQP-GLES3.functional.texture.wrap.astc_8x8.repeat_repeat_linear_divisible
 | 
			
		||||
dEQP-GLES3.functional.texture.wrap.astc_8x8.repeat_repeat_linear_not_divisible
 | 
			
		||||
dEQP-GLES3.functional.texture.wrap.astc_8x8_srgb.repeat_repeat_linear_divisible
 | 
			
		||||
dEQP-GLES3.functional.texture.wrap.astc_8x8_srgb.repeat_repeat_linear_not_divisible
 | 
			
		||||
dEQP-GLES3.functional.vertex_arrays.single_attribute.normalize.int2_10_10_10.components4_quads1
 | 
			
		||||
dEQP-GLES3.functional.vertex_arrays.single_attribute.normalize.int2_10_10_10.components4_quads256
 | 
			
		||||
dEQP-GLES31.functional.debug.error_filters.case_29
 | 
			
		||||
dEQP-GLES31.functional.debug.negative_coverage.callbacks.buffer.read_pixels_fbo_format_mismatch
 | 
			
		||||
dEQP-GLES31.functional.debug.negative_coverage.get_error.buffer.blit_framebuffer_multisample
 | 
			
		||||
dEQP-GLES31.functional.debug.negative_coverage.get_error.buffer.read_pixels_fbo_format_mismatch
 | 
			
		||||
dEQP-GLES31.functional.debug.negative_coverage.log.buffer.read_pixels_fbo_format_mismatch
 | 
			
		||||
dEQP-GLES31.functional.draw_base_vertex.draw_elements_instanced_base_vertex.line_loop.instanced_attributes
 | 
			
		||||
dEQP-GLES31.functional.draw_buffers_indexed.random.max_implementation_draw_buffers.0
 | 
			
		||||
dEQP-GLES31.functional.draw_buffers_indexed.random.max_implementation_draw_buffers.1
 | 
			
		||||
dEQP-GLES31.functional.draw_buffers_indexed.random.max_implementation_draw_buffers.10
 | 
			
		||||
dEQP-GLES31.functional.draw_buffers_indexed.random.max_implementation_draw_buffers.11
 | 
			
		||||
dEQP-GLES31.functional.draw_buffers_indexed.random.max_implementation_draw_buffers.12
 | 
			
		||||
dEQP-GLES31.functional.draw_buffers_indexed.random.max_implementation_draw_buffers.14
 | 
			
		||||
dEQP-GLES31.functional.draw_buffers_indexed.random.max_implementation_draw_buffers.16
 | 
			
		||||
dEQP-GLES31.functional.draw_buffers_indexed.random.max_implementation_draw_buffers.17
 | 
			
		||||
dEQP-GLES31.functional.draw_buffers_indexed.random.max_implementation_draw_buffers.19
 | 
			
		||||
dEQP-GLES31.functional.draw_buffers_indexed.random.max_implementation_draw_buffers.2
 | 
			
		||||
dEQP-GLES31.functional.draw_buffers_indexed.random.max_implementation_draw_buffers.3
 | 
			
		||||
dEQP-GLES31.functional.draw_buffers_indexed.random.max_implementation_draw_buffers.4
 | 
			
		||||
dEQP-GLES31.functional.draw_buffers_indexed.random.max_implementation_draw_buffers.5
 | 
			
		||||
dEQP-GLES31.functional.draw_buffers_indexed.random.max_implementation_draw_buffers.6
 | 
			
		||||
dEQP-GLES31.functional.draw_buffers_indexed.random.max_implementation_draw_buffers.7
 | 
			
		||||
dEQP-GLES31.functional.draw_buffers_indexed.random.max_implementation_draw_buffers.8
 | 
			
		||||
dEQP-GLES31.functional.draw_buffers_indexed.random.max_implementation_draw_buffers.9
 | 
			
		||||
dEQP-GLES31.functional.draw_buffers_indexed.random.max_required_draw_buffers.0
 | 
			
		||||
dEQP-GLES31.functional.draw_buffers_indexed.random.max_required_draw_buffers.1
 | 
			
		||||
dEQP-GLES31.functional.draw_buffers_indexed.random.max_required_draw_buffers.14
 | 
			
		||||
dEQP-GLES31.functional.draw_buffers_indexed.random.max_required_draw_buffers.15
 | 
			
		||||
dEQP-GLES31.functional.draw_buffers_indexed.random.max_required_draw_buffers.16
 | 
			
		||||
dEQP-GLES31.functional.draw_buffers_indexed.random.max_required_draw_buffers.17
 | 
			
		||||
dEQP-GLES31.functional.draw_buffers_indexed.random.max_required_draw_buffers.19
 | 
			
		||||
dEQP-GLES31.functional.draw_buffers_indexed.random.max_required_draw_buffers.2
 | 
			
		||||
dEQP-GLES31.functional.draw_buffers_indexed.random.max_required_draw_buffers.4
 | 
			
		||||
dEQP-GLES31.functional.draw_buffers_indexed.random.max_required_draw_buffers.5
 | 
			
		||||
dEQP-GLES31.functional.draw_buffers_indexed.random.max_required_draw_buffers.7
 | 
			
		||||
dEQP-GLES31.functional.draw_buffers_indexed.random.max_required_draw_buffers.9
 | 
			
		||||
dEQP-GLES31.functional.draw_indirect.draw_arrays_indirect.line_strip.multiple_attributes
 | 
			
		||||
dEQP-GLES31.functional.fbo.no_attachments.interaction.17x512ms4_default_16x16ms2
 | 
			
		||||
dEQP-GLES31.functional.fbo.no_attachments.interaction.1x1ms0_default_2048x2048ms4
 | 
			
		||||
dEQP-GLES31.functional.fbo.no_attachments.interaction.2048x2048ms4_default_1x1ms0
 | 
			
		||||
dEQP-GLES31.functional.fbo.no_attachments.interaction.256x256ms0_default_512x512ms2
 | 
			
		||||
dEQP-GLES31.functional.fbo.no_attachments.interaction.256x256ms2_default_128x512ms0
 | 
			
		||||
dEQP-GLES31.functional.fbo.no_attachments.multisample.samples2
 | 
			
		||||
dEQP-GLES31.functional.fbo.no_attachments.multisample.samples3
 | 
			
		||||
dEQP-GLES31.functional.fbo.no_attachments.multisample.samples4
 | 
			
		||||
dEQP-GLES31.functional.fbo.no_attachments.random.1
 | 
			
		||||
dEQP-GLES31.functional.fbo.no_attachments.random.11
 | 
			
		||||
dEQP-GLES31.functional.fbo.no_attachments.random.14
 | 
			
		||||
dEQP-GLES31.functional.fbo.no_attachments.random.15
 | 
			
		||||
dEQP-GLES31.functional.fbo.no_attachments.random.4
 | 
			
		||||
dEQP-GLES31.functional.fbo.no_attachments.random.9
 | 
			
		||||
dEQP-GLES31.functional.geometry_shading.query.primitives_generated_amplification
 | 
			
		||||
dEQP-GLES31.functional.geometry_shading.query.primitives_generated_instanced
 | 
			
		||||
dEQP-GLES31.functional.geometry_shading.query.primitives_generated_no_amplification
 | 
			
		||||
dEQP-GLES31.functional.geometry_shading.query.primitives_generated_no_geometry
 | 
			
		||||
dEQP-GLES31.functional.geometry_shading.query.primitives_generated_partial_primitives
 | 
			
		||||
dEQP-GLES31.functional.image_load_store.early_fragment_tests.early_fragment_tests_stencil
 | 
			
		||||
dEQP-GLES31.functional.image_load_store.early_fragment_tests.early_fragment_tests_stencil_fbo
 | 
			
		||||
dEQP-GLES31.functional.image_load_store.early_fragment_tests.no_early_fragment_tests_depth
 | 
			
		||||
dEQP-GLES31.functional.image_load_store.early_fragment_tests.no_early_fragment_tests_depth_fbo
 | 
			
		||||
dEQP-GLES31.functional.shaders.opaque_type_indexing.ubo.dynamically_uniform_geometry
 | 
			
		||||
dEQP-GLES31.functional.state_query.integer.max_framebuffer_samples_getfloat
 | 
			
		||||
dEQP-GLES31.functional.state_query.integer.max_framebuffer_samples_getinteger
 | 
			
		||||
dEQP-GLES31.functional.state_query.integer.max_framebuffer_samples_getinteger64
 | 
			
		||||
dEQP-GLES31.functional.state_query.texture.texture_2d_multisample.texture_immutable_format_float
 | 
			
		||||
dEQP-GLES31.functional.state_query.texture.texture_2d_multisample.texture_immutable_format_integer
 | 
			
		||||
dEQP-GLES31.functional.state_query.texture.texture_2d_multisample.texture_immutable_format_pure_int
 | 
			
		||||
dEQP-GLES31.functional.state_query.texture.texture_2d_multisample.texture_immutable_format_pure_uint
 | 
			
		||||
dEQP-GLES31.functional.state_query.texture.texture_2d_multisample.texture_immutable_levels_float
 | 
			
		||||
dEQP-GLES31.functional.state_query.texture.texture_2d_multisample.texture_immutable_levels_integer
 | 
			
		||||
dEQP-GLES31.functional.state_query.texture.texture_2d_multisample.texture_immutable_levels_pure_int
 | 
			
		||||
dEQP-GLES31.functional.state_query.texture.texture_2d_multisample.texture_immutable_levels_pure_uint
 | 
			
		||||
dEQP-GLES31.functional.state_query.texture.texture_2d_multisample_array.texture_immutable_format_float
 | 
			
		||||
dEQP-GLES31.functional.state_query.texture.texture_2d_multisample_array.texture_immutable_format_integer
 | 
			
		||||
dEQP-GLES31.functional.state_query.texture.texture_2d_multisample_array.texture_immutable_format_pure_int
 | 
			
		||||
dEQP-GLES31.functional.state_query.texture.texture_2d_multisample_array.texture_immutable_format_pure_uint
 | 
			
		||||
dEQP-GLES31.functional.state_query.texture.texture_2d_multisample_array.texture_immutable_levels_float
 | 
			
		||||
dEQP-GLES31.functional.state_query.texture.texture_2d_multisample_array.texture_immutable_levels_integer
 | 
			
		||||
dEQP-GLES31.functional.state_query.texture.texture_2d_multisample_array.texture_immutable_levels_pure_int
 | 
			
		||||
dEQP-GLES31.functional.state_query.texture.texture_2d_multisample_array.texture_immutable_levels_pure_uint
 | 
			
		||||
dEQP-GLES31.functional.texture.border_clamp.depth_compare_mode.depth32f_stencil8.linear_size_npot
 | 
			
		||||
dEQP-GLES31.functional.texture.border_clamp.depth_compare_mode.depth32f_stencil8.linear_size_pot
 | 
			
		||||
dEQP-GLES31.functional.texture.filtering.cube_array.combinations.nearest_linear_clamp_repeat
 | 
			
		||||
dEQP-GLES31.functional.texture.filtering.cube_array.combinations.nearest_linear_mirror_repeat
 | 
			
		||||
dEQP-GLES31.functional.texture.filtering.cube_array.combinations.nearest_linear_repeat_clamp
 | 
			
		||||
dEQP-GLES31.functional.texture.filtering.cube_array.combinations.nearest_linear_repeat_mirror
 | 
			
		||||
dEQP-GLES31.functional.texture.filtering.cube_array.combinations.nearest_linear_repeat_repeat
 | 
			
		||||
dEQP-GLES31.functional.texture.filtering.cube_array.combinations.nearest_mipmap_linear_linear_clamp_repeat
 | 
			
		||||
dEQP-GLES31.functional.texture.filtering.cube_array.combinations.nearest_mipmap_linear_linear_mirror_repeat
 | 
			
		||||
dEQP-GLES31.functional.texture.filtering.cube_array.combinations.nearest_mipmap_linear_linear_repeat_clamp
 | 
			
		||||
dEQP-GLES31.functional.texture.filtering.cube_array.combinations.nearest_mipmap_linear_linear_repeat_repeat
 | 
			
		||||
dEQP-GLES31.functional.texture.filtering.cube_array.combinations.nearest_mipmap_linear_nearest_clamp_repeat
 | 
			
		||||
dEQP-GLES31.functional.texture.filtering.cube_array.combinations.nearest_mipmap_linear_nearest_mirror_repeat
 | 
			
		||||
dEQP-GLES31.functional.texture.filtering.cube_array.combinations.nearest_mipmap_linear_nearest_repeat_clamp
 | 
			
		||||
dEQP-GLES31.functional.texture.filtering.cube_array.combinations.nearest_mipmap_linear_nearest_repeat_mirror
 | 
			
		||||
dEQP-GLES31.functional.texture.filtering.cube_array.combinations.nearest_mipmap_nearest_linear_clamp_repeat
 | 
			
		||||
dEQP-GLES31.functional.texture.filtering.cube_array.combinations.nearest_mipmap_nearest_linear_mirror_repeat
 | 
			
		||||
dEQP-GLES31.functional.texture.filtering.cube_array.combinations.nearest_mipmap_nearest_linear_repeat_clamp
 | 
			
		||||
dEQP-GLES31.functional.texture.filtering.cube_array.combinations.nearest_mipmap_nearest_linear_repeat_mirror
 | 
			
		||||
dEQP-GLES31.functional.texture.filtering.cube_array.combinations.nearest_mipmap_nearest_nearest_repeat_clamp
 | 
			
		||||
dEQP-GLES31.functional.texture.filtering.cube_array.combinations.nearest_mipmap_nearest_nearest_repeat_mirror
 | 
			
		||||
dEQP-GLES31.functional.texture.filtering.cube_array.combinations.nearest_mipmap_nearest_nearest_repeat_repeat
 | 
			
		||||
dEQP-GLES31.functional.texture.filtering.cube_array.combinations.nearest_nearest_repeat_mirror
 | 
			
		||||
dEQP-GLES31.functional.texture.filtering.cube_array.formats.rgb10_a2_linear_mipmap_linear
 | 
			
		||||
dEQP-GLES31.functional.texture.filtering.cube_array.formats.rgb10_a2_nearest
 | 
			
		||||
dEQP-GLES31.functional.texture.filtering.cube_array.formats.rgb10_a2_nearest_mipmap_linear
 | 
			
		||||
dEQP-GLES31.functional.texture.filtering.cube_array.formats.rgb10_a2_nearest_mipmap_nearest
 | 
			
		||||
dEQP-GLES31.functional.texture.filtering.cube_array.formats.rgb565_nearest
 | 
			
		||||
dEQP-GLES31.functional.texture.filtering.cube_array.formats.rgb565_nearest_mipmap_linear
 | 
			
		||||
dEQP-GLES31.functional.texture.filtering.cube_array.formats.rgb5_a1_nearest
 | 
			
		||||
dEQP-GLES31.functional.texture.filtering.cube_array.formats.rgb5_a1_nearest_mipmap_linear
 | 
			
		||||
dEQP-GLES31.functional.texture.filtering.cube_array.formats.rgb9_e5_nearest_mipmap_linear
 | 
			
		||||
dEQP-GLES31.functional.texture.filtering.cube_array.formats.rgb9_e5_nearest_mipmap_nearest
 | 
			
		||||
dEQP-GLES31.functional.texture.filtering.cube_array.formats.rgba16f_nearest_mipmap_linear
 | 
			
		||||
dEQP-GLES31.functional.texture.filtering.cube_array.formats.rgba16f_nearest_mipmap_nearest
 | 
			
		||||
dEQP-GLES31.functional.texture.filtering.cube_array.formats.rgba4_nearest
 | 
			
		||||
dEQP-GLES31.functional.texture.filtering.cube_array.formats.rgba4_nearest_mipmap_linear
 | 
			
		||||
dEQP-GLES31.functional.texture.filtering.cube_array.formats.rgba8_nearest_mipmap_linear
 | 
			
		||||
dEQP-GLES31.functional.texture.filtering.cube_array.formats.rgba8_nearest_mipmap_nearest
 | 
			
		||||
dEQP-GLES31.functional.texture.filtering.cube_array.formats.rgba8_snorm_nearest
 | 
			
		||||
dEQP-GLES31.functional.texture.filtering.cube_array.formats.rgba8_snorm_nearest_mipmap_nearest
 | 
			
		||||
dEQP-GLES31.functional.texture.filtering.cube_array.formats.sr8_nearest_mipmap_nearest
 | 
			
		||||
dEQP-GLES31.functional.texture.filtering.cube_array.formats.srgb8_alpha8_nearest
 | 
			
		||||
dEQP-GLES31.functional.texture.filtering.cube_array.formats.srgb8_alpha8_nearest_mipmap_linear
 | 
			
		||||
dEQP-GLES31.functional.texture.filtering.cube_array.sizes.128x128x12_linear
 | 
			
		||||
dEQP-GLES31.functional.texture.filtering.cube_array.sizes.128x128x12_linear_mipmap_linear
 | 
			
		||||
dEQP-GLES31.functional.texture.filtering.cube_array.sizes.128x128x12_linear_mipmap_nearest
 | 
			
		||||
dEQP-GLES31.functional.texture.filtering.cube_array.sizes.128x128x12_nearest_mipmap_linear
 | 
			
		||||
dEQP-GLES31.functional.texture.filtering.cube_array.sizes.128x128x12_nearest_mipmap_nearest
 | 
			
		||||
dEQP-GLES31.functional.texture.filtering.cube_array.sizes.63x63x18_nearest_mipmap_nearest
 | 
			
		||||
dEQP-GLES31.functional.texture.filtering.cube_array.sizes.64x64x12_nearest_mipmap_linear
 | 
			
		||||
dEQP-GLES31.functional.texture.filtering.cube_array.sizes.64x64x12_nearest_mipmap_nearest
 | 
			
		||||
dEQP-GLES31.functional.texture.filtering.cube_array.sizes.8x8x6_nearest
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.basic.2d.rgba8i.texture_swizzle.alpha_zero_one_red
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.basic.2d.rgba8i.texture_swizzle.blue_alpha_zero_one
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.basic.2d.rgba8i.texture_swizzle.one_red_green_blue
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.basic.2d.rgba8i.texture_swizzle.zero_one_red_green
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.basic.2d.rgba8ui.texture_swizzle.alpha_zero_one_red
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.basic.2d.rgba8ui.texture_swizzle.blue_alpha_zero_one
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.basic.2d.rgba8ui.texture_swizzle.one_red_green_blue
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.basic.2d.rgba8ui.texture_swizzle.zero_one_red_green
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.basic.2d_array.rgba8i.texture_swizzle.alpha_zero_one_red
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.basic.2d_array.rgba8i.texture_swizzle.blue_alpha_zero_one
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.basic.2d_array.rgba8i.texture_swizzle.one_red_green_blue
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.basic.2d_array.rgba8i.texture_swizzle.zero_one_red_green
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.basic.2d_array.rgba8ui.texture_swizzle.alpha_zero_one_red
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.basic.2d_array.rgba8ui.texture_swizzle.blue_alpha_zero_one
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.basic.2d_array.rgba8ui.texture_swizzle.one_red_green_blue
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.basic.2d_array.rgba8ui.texture_swizzle.zero_one_red_green
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.basic.cube.rgba8.no_corners.size_pot.clamp_to_edge_repeat
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.basic.cube.rgba8.no_corners.size_pot.mirrored_repeat_clamp_to_edge
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.basic.cube.rgba8.no_corners.size_pot.repeat_mirrored_repeat
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.basic.cube.rgba8i.no_corners.size_pot.clamp_to_edge_repeat
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.basic.cube.rgba8i.no_corners.size_pot.mirrored_repeat_clamp_to_edge
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.basic.cube.rgba8i.no_corners.size_pot.repeat_mirrored_repeat
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.basic.cube.rgba8i.texture_swizzle.alpha_zero_one_red
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.basic.cube.rgba8i.texture_swizzle.blue_alpha_zero_one
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.basic.cube.rgba8i.texture_swizzle.one_red_green_blue
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.basic.cube.rgba8i.texture_swizzle.zero_one_red_green
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.basic.cube.rgba8ui.no_corners.size_pot.clamp_to_edge_repeat
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.basic.cube.rgba8ui.no_corners.size_pot.mirrored_repeat_clamp_to_edge
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.basic.cube.rgba8ui.no_corners.size_pot.repeat_mirrored_repeat
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.basic.cube.rgba8ui.texture_swizzle.alpha_zero_one_red
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.basic.cube.rgba8ui.texture_swizzle.blue_alpha_zero_one
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.basic.cube.rgba8ui.texture_swizzle.one_red_green_blue
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.basic.cube.rgba8ui.texture_swizzle.zero_one_red_green
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d.rgba8i.texture_swizzle.alpha_zero_one_red
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d.rgba8i.texture_swizzle.blue_alpha_zero_one
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d.rgba8i.texture_swizzle.one_red_green_blue
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d.rgba8i.texture_swizzle.zero_one_red_green
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d.rgba8ui.texture_swizzle.alpha_zero_one_red
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d.rgba8ui.texture_swizzle.blue_alpha_zero_one
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d.rgba8ui.texture_swizzle.one_red_green_blue
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d.rgba8ui.texture_swizzle.zero_one_red_green
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d_array.rgba8i.texture_swizzle.alpha_zero_one_red
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d_array.rgba8i.texture_swizzle.blue_alpha_zero_one
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d_array.rgba8i.texture_swizzle.one_red_green_blue
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d_array.rgba8i.texture_swizzle.zero_one_red_green
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d_array.rgba8ui.texture_swizzle.alpha_zero_one_red
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d_array.rgba8ui.texture_swizzle.blue_alpha_zero_one
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d_array.rgba8ui.texture_swizzle.one_red_green_blue
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d_array.rgba8ui.texture_swizzle.zero_one_red_green
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.depth32f.base_level.level_1
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.depth32f.base_level.level_2
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.depth32f.filter_mode.min_linear_mag_linear
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.depth32f.filter_mode.min_linear_mipmap_linear_mag_linear
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.depth32f.filter_mode.min_linear_mipmap_nearest_mag_linear
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.depth32f.filter_mode.min_nearest_mipmap_linear_mag_linear
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.depth32f.filter_mode.min_nearest_mipmap_nearest_mag_linear
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.depth32f.size_npot.compare_greater.clamp_to_edge_repeat
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.depth32f.size_npot.compare_greater.mirrored_repeat_clamp_to_edge
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.depth32f.size_npot.compare_greater.repeat_mirrored_repeat
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.depth32f.size_npot.compare_less.clamp_to_edge_repeat
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.depth32f.size_npot.compare_less.mirrored_repeat_clamp_to_edge
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.depth32f.size_npot.compare_less.repeat_mirrored_repeat
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.depth32f.size_pot.compare_greater.clamp_to_edge_repeat
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.depth32f.size_pot.compare_greater.mirrored_repeat_clamp_to_edge
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.depth32f.size_pot.compare_greater.repeat_mirrored_repeat
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.depth32f.size_pot.compare_less.clamp_to_edge_repeat
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.depth32f.size_pot.compare_less.mirrored_repeat_clamp_to_edge
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.depth32f.size_pot.compare_less.repeat_mirrored_repeat
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.rgba8.base_level.level_1
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.rgba8.base_level.level_2
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.rgba8.filter_mode.min_linear_mag_linear
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.rgba8.filter_mode.min_linear_mipmap_linear_mag_linear
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.rgba8.filter_mode.min_linear_mipmap_nearest_mag_linear
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.rgba8.filter_mode.min_nearest_mipmap_linear_mag_linear
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.rgba8.filter_mode.min_nearest_mipmap_nearest_mag_linear
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.rgba8.size_npot.clamp_to_edge_repeat
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.rgba8.size_npot.mirrored_repeat_clamp_to_edge
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.rgba8.size_npot.repeat_mirrored_repeat
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.rgba8.size_pot.clamp_to_edge_repeat
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.rgba8.size_pot.mirrored_repeat_clamp_to_edge
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.rgba8.size_pot.repeat_mirrored_repeat
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.rgba8.texture_swizzle.alpha_zero_one_red
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.rgba8.texture_swizzle.blue_alpha_zero_one
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.rgba8.texture_swizzle.green_blue_alpha_zero
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.rgba8.texture_swizzle.one_red_green_blue
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.rgba8.texture_swizzle.red_green_blue_alpha
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.rgba8.texture_swizzle.zero_one_red_green
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.rgba8i.base_level.level_1
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.rgba8i.base_level.level_2
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.rgba8i.filter_mode.min_nearest_mipmap_nearest_mag_nearest
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.rgba8i.size_npot.clamp_to_edge_repeat
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.rgba8i.size_npot.mirrored_repeat_clamp_to_edge
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.rgba8i.size_npot.repeat_mirrored_repeat
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.rgba8i.size_pot.clamp_to_edge_repeat
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.rgba8i.size_pot.mirrored_repeat_clamp_to_edge
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.rgba8i.size_pot.repeat_mirrored_repeat
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.rgba8i.texture_swizzle.alpha_zero_one_red
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.rgba8i.texture_swizzle.blue_alpha_zero_one
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.rgba8i.texture_swizzle.green_blue_alpha_zero
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.rgba8i.texture_swizzle.one_red_green_blue
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.rgba8i.texture_swizzle.red_green_blue_alpha
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.rgba8i.texture_swizzle.zero_one_red_green
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.rgba8ui.base_level.level_1
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.rgba8ui.base_level.level_2
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.rgba8ui.filter_mode.min_nearest_mipmap_nearest_mag_nearest
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.rgba8ui.size_npot.clamp_to_edge_repeat
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.rgba8ui.size_npot.mirrored_repeat_clamp_to_edge
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.rgba8ui.size_npot.repeat_mirrored_repeat
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.rgba8ui.size_pot.clamp_to_edge_repeat
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.rgba8ui.size_pot.mirrored_repeat_clamp_to_edge
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.rgba8ui.size_pot.repeat_mirrored_repeat
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.rgba8ui.texture_swizzle.alpha_zero_one_red
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.rgba8ui.texture_swizzle.blue_alpha_zero_one
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.rgba8ui.texture_swizzle.green_blue_alpha_zero
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.rgba8ui.texture_swizzle.one_red_green_blue
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.rgba8ui.texture_swizzle.red_green_blue_alpha
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.rgba8ui.texture_swizzle.zero_one_red_green
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.depth32f.base_level.level_1
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.depth32f.base_level.level_2
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.depth32f.filter_mode.min_linear_mag_linear
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.depth32f.filter_mode.min_linear_mipmap_linear_mag_linear
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.depth32f.filter_mode.min_linear_mipmap_nearest_mag_linear
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.depth32f.filter_mode.min_nearest_mipmap_linear_mag_linear
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.depth32f.filter_mode.min_nearest_mipmap_nearest_mag_linear
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.depth32f.size_npot.compare_greater.clamp_to_edge_repeat
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.depth32f.size_npot.compare_greater.mirrored_repeat_clamp_to_edge
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.depth32f.size_npot.compare_greater.repeat_mirrored_repeat
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.depth32f.size_npot.compare_less.clamp_to_edge_repeat
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.depth32f.size_npot.compare_less.mirrored_repeat_clamp_to_edge
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.depth32f.size_npot.compare_less.repeat_mirrored_repeat
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.depth32f.size_pot.compare_greater.clamp_to_edge_repeat
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.depth32f.size_pot.compare_greater.mirrored_repeat_clamp_to_edge
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.depth32f.size_pot.compare_greater.repeat_mirrored_repeat
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.depth32f.size_pot.compare_less.clamp_to_edge_repeat
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.depth32f.size_pot.compare_less.mirrored_repeat_clamp_to_edge
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.depth32f.size_pot.compare_less.repeat_mirrored_repeat
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.rgba8.base_level.level_1
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.rgba8.base_level.level_2
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.rgba8.filter_mode.min_linear_mag_linear
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.rgba8.filter_mode.min_linear_mipmap_linear_mag_linear
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.rgba8.filter_mode.min_linear_mipmap_nearest_mag_linear
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.rgba8.filter_mode.min_nearest_mipmap_linear_mag_linear
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.rgba8.filter_mode.min_nearest_mipmap_nearest_mag_linear
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.rgba8.size_npot.clamp_to_edge_repeat
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.rgba8.size_npot.mirrored_repeat_clamp_to_edge
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.rgba8.size_npot.repeat_mirrored_repeat
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.rgba8.size_pot.clamp_to_edge_repeat
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.rgba8.size_pot.mirrored_repeat_clamp_to_edge
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.rgba8.size_pot.repeat_mirrored_repeat
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.rgba8.texture_swizzle.alpha_zero_one_red
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.rgba8.texture_swizzle.blue_alpha_zero_one
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.rgba8.texture_swizzle.green_blue_alpha_zero
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.rgba8.texture_swizzle.one_red_green_blue
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.rgba8.texture_swizzle.red_green_blue_alpha
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.rgba8.texture_swizzle.zero_one_red_green
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.rgba8i.base_level.level_1
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.rgba8i.base_level.level_2
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.rgba8i.filter_mode.min_nearest_mipmap_nearest_mag_nearest
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.rgba8i.size_npot.clamp_to_edge_repeat
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.rgba8i.size_npot.mirrored_repeat_clamp_to_edge
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.rgba8i.size_npot.repeat_mirrored_repeat
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.rgba8i.size_pot.clamp_to_edge_repeat
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.rgba8i.size_pot.mirrored_repeat_clamp_to_edge
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.rgba8i.size_pot.repeat_mirrored_repeat
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.rgba8i.texture_swizzle.alpha_zero_one_red
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.rgba8i.texture_swizzle.blue_alpha_zero_one
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.rgba8i.texture_swizzle.green_blue_alpha_zero
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.rgba8i.texture_swizzle.one_red_green_blue
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.rgba8i.texture_swizzle.red_green_blue_alpha
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.rgba8i.texture_swizzle.zero_one_red_green
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.rgba8ui.base_level.level_1
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.rgba8ui.base_level.level_2
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.rgba8ui.filter_mode.min_nearest_mipmap_nearest_mag_nearest
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.rgba8ui.size_npot.clamp_to_edge_repeat
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.rgba8ui.size_npot.mirrored_repeat_clamp_to_edge
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.rgba8ui.size_npot.repeat_mirrored_repeat
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.rgba8ui.size_pot.clamp_to_edge_repeat
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.rgba8ui.size_pot.mirrored_repeat_clamp_to_edge
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.rgba8ui.size_pot.repeat_mirrored_repeat
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.rgba8ui.texture_swizzle.alpha_zero_one_red
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.rgba8ui.texture_swizzle.blue_alpha_zero_one
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.rgba8ui.texture_swizzle.green_blue_alpha_zero
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.rgba8ui.texture_swizzle.one_red_green_blue
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.rgba8ui.texture_swizzle.red_green_blue_alpha
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.rgba8ui.texture_swizzle.zero_one_red_green
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d.depth32f.size_npot.compare_greater.clamp_to_edge_repeat
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d.depth32f.size_npot.compare_greater.mirrored_repeat_clamp_to_edge
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d.depth32f.size_npot.compare_greater.repeat_mirrored_repeat
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d.depth32f.size_npot.compare_less.clamp_to_edge_repeat
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d.depth32f.size_npot.compare_less.mirrored_repeat_clamp_to_edge
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d.depth32f.size_npot.compare_less.repeat_mirrored_repeat
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d.depth32f.size_pot.compare_greater.clamp_to_edge_repeat
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d.depth32f.size_pot.compare_greater.mirrored_repeat_clamp_to_edge
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d.depth32f.size_pot.compare_greater.repeat_mirrored_repeat
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d.depth32f.size_pot.compare_less.clamp_to_edge_repeat
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d.depth32f.size_pot.compare_less.mirrored_repeat_clamp_to_edge
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d.depth32f.size_pot.compare_less.repeat_mirrored_repeat
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d.rgba8.size_npot.clamp_to_edge_repeat
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d.rgba8.size_npot.mirrored_repeat_clamp_to_edge
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d.rgba8.size_npot.repeat_mirrored_repeat
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d.rgba8.size_pot.clamp_to_edge_repeat
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d.rgba8.size_pot.mirrored_repeat_clamp_to_edge
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d.rgba8.size_pot.repeat_mirrored_repeat
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d.rgba8i.size_npot.clamp_to_edge_repeat
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d.rgba8i.size_npot.mirrored_repeat_clamp_to_edge
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d.rgba8i.size_npot.repeat_mirrored_repeat
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d.rgba8i.size_pot.clamp_to_edge_repeat
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d.rgba8i.size_pot.mirrored_repeat_clamp_to_edge
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d.rgba8i.size_pot.repeat_mirrored_repeat
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d.rgba8ui.size_npot.clamp_to_edge_repeat
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d.rgba8ui.size_npot.mirrored_repeat_clamp_to_edge
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d.rgba8ui.size_npot.repeat_mirrored_repeat
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d.rgba8ui.size_pot.clamp_to_edge_repeat
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d.rgba8ui.size_pot.mirrored_repeat_clamp_to_edge
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d.rgba8ui.size_pot.repeat_mirrored_repeat
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d_array.depth32f.size_npot.compare_greater.clamp_to_edge_repeat
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d_array.depth32f.size_npot.compare_greater.mirrored_repeat_clamp_to_edge
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d_array.depth32f.size_npot.compare_greater.repeat_mirrored_repeat
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d_array.depth32f.size_npot.compare_less.clamp_to_edge_repeat
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d_array.depth32f.size_npot.compare_less.mirrored_repeat_clamp_to_edge
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d_array.depth32f.size_npot.compare_less.repeat_mirrored_repeat
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d_array.depth32f.size_pot.compare_greater.clamp_to_edge_repeat
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d_array.depth32f.size_pot.compare_greater.mirrored_repeat_clamp_to_edge
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d_array.depth32f.size_pot.compare_greater.repeat_mirrored_repeat
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d_array.depth32f.size_pot.compare_less.clamp_to_edge_repeat
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d_array.depth32f.size_pot.compare_less.mirrored_repeat_clamp_to_edge
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d_array.depth32f.size_pot.compare_less.repeat_mirrored_repeat
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d_array.rgba8.size_npot.clamp_to_edge_repeat
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d_array.rgba8.size_npot.mirrored_repeat_clamp_to_edge
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d_array.rgba8.size_npot.repeat_mirrored_repeat
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d_array.rgba8.size_pot.clamp_to_edge_repeat
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d_array.rgba8.size_pot.mirrored_repeat_clamp_to_edge
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d_array.rgba8.size_pot.repeat_mirrored_repeat
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d_array.rgba8i.size_npot.clamp_to_edge_repeat
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d_array.rgba8i.size_npot.mirrored_repeat_clamp_to_edge
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d_array.rgba8i.size_npot.repeat_mirrored_repeat
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d_array.rgba8i.size_pot.clamp_to_edge_repeat
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d_array.rgba8i.size_pot.mirrored_repeat_clamp_to_edge
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d_array.rgba8i.size_pot.repeat_mirrored_repeat
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d_array.rgba8ui.size_npot.clamp_to_edge_repeat
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d_array.rgba8ui.size_npot.mirrored_repeat_clamp_to_edge
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d_array.rgba8ui.size_npot.repeat_mirrored_repeat
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d_array.rgba8ui.size_pot.clamp_to_edge_repeat
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d_array.rgba8ui.size_pot.mirrored_repeat_clamp_to_edge
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d_array.rgba8ui.size_pot.repeat_mirrored_repeat
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offsets.implementation_offset.2d.rgba8i.texture_swizzle.alpha_zero_one_red
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offsets.implementation_offset.2d.rgba8i.texture_swizzle.blue_alpha_zero_one
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offsets.implementation_offset.2d.rgba8i.texture_swizzle.one_red_green_blue
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offsets.implementation_offset.2d.rgba8i.texture_swizzle.zero_one_red_green
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offsets.implementation_offset.2d.rgba8ui.texture_swizzle.alpha_zero_one_red
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offsets.implementation_offset.2d.rgba8ui.texture_swizzle.blue_alpha_zero_one
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offsets.implementation_offset.2d.rgba8ui.texture_swizzle.one_red_green_blue
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offsets.implementation_offset.2d.rgba8ui.texture_swizzle.zero_one_red_green
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offsets.implementation_offset.2d_array.rgba8i.texture_swizzle.alpha_zero_one_red
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offsets.implementation_offset.2d_array.rgba8i.texture_swizzle.blue_alpha_zero_one
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offsets.implementation_offset.2d_array.rgba8i.texture_swizzle.one_red_green_blue
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offsets.implementation_offset.2d_array.rgba8i.texture_swizzle.zero_one_red_green
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offsets.implementation_offset.2d_array.rgba8ui.texture_swizzle.alpha_zero_one_red
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offsets.implementation_offset.2d_array.rgba8ui.texture_swizzle.blue_alpha_zero_one
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offsets.implementation_offset.2d_array.rgba8ui.texture_swizzle.one_red_green_blue
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offsets.implementation_offset.2d_array.rgba8ui.texture_swizzle.zero_one_red_green
 | 
			
		||||
dEQP-GLES31.functional.texture.multisample.samples_1.sample_mask_and_alpha_to_coverage
 | 
			
		||||
dEQP-GLES31.functional.texture.multisample.samples_1.sample_mask_and_sample_coverage
 | 
			
		||||
dEQP-GLES31.functional.texture.multisample.samples_1.sample_mask_and_sample_coverage_and_alpha_to_coverage
 | 
			
		||||
dEQP-GLES31.functional.texture.multisample.samples_1.sample_mask_non_effective_bits
 | 
			
		||||
dEQP-GLES31.functional.texture.multisample.samples_1.sample_mask_only
 | 
			
		||||
@@ -1,19 +0,0 @@
 | 
			
		||||
# Note: skips lists for CI are just a list of lines that, when
 | 
			
		||||
# non-zero-length and not starting with '#', will regex match to
 | 
			
		||||
# delete lines from the test list.  Be careful.
 | 
			
		||||
 | 
			
		||||
# Skip the perf/stress tests to keep runtime manageable
 | 
			
		||||
dEQP-GLES[0-9]*.performance.*
 | 
			
		||||
dEQP-GLES[0-9]*.stress.*
 | 
			
		||||
 | 
			
		||||
# These are really slow on tiling architectures (including llvmpipe).
 | 
			
		||||
dEQP-GLES[0-9]*.functional.flush_finish.*
 | 
			
		||||
 | 
			
		||||
# Random failures
 | 
			
		||||
dEQP-GLES31.functional.draw_buffers_indexed.overwrite_indexed.common_color_mask_buffer_color_mask
 | 
			
		||||
dEQP-GLES31.functional.fbo.no_attachments.maximums.all
 | 
			
		||||
dEQP-GLES31.functional.fbo.no_attachments.maximums.size
 | 
			
		||||
dEQP-GLES31.functional.geometry_shading.input.basic_primitive.points
 | 
			
		||||
dEQP-GLES31.functional.shaders.builtin_functions.*geometry
 | 
			
		||||
dEQP-GLES31.functional.shaders.opaque_type_indexing.sampler.const_expression.geometry.usampler3d
 | 
			
		||||
dEQP-GLES31.functional.shaders.opaque_type_indexing.sampler.dynamically_uniform.geometry.sampler2darray
 | 
			
		||||
@@ -1,292 +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.draw.random.10
 | 
			
		||||
dEQP-GLES2.functional.draw.random.42
 | 
			
		||||
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-GLES3.functional.clipping.line.wide_line_clip_viewport_corner
 | 
			
		||||
dEQP-GLES3.functional.clipping.point.wide_point_clip_viewport_center
 | 
			
		||||
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.draw.random.174
 | 
			
		||||
dEQP-GLES3.functional.draw.random.31
 | 
			
		||||
dEQP-GLES3.functional.fbo.blit.rect.nearest_consistency_mag
 | 
			
		||||
dEQP-GLES3.functional.fbo.blit.rect.nearest_consistency_mag_reverse_dst_x
 | 
			
		||||
dEQP-GLES3.functional.fbo.blit.rect.nearest_consistency_mag_reverse_src_dst_y
 | 
			
		||||
dEQP-GLES3.functional.fbo.blit.rect.nearest_consistency_min_reverse_src_dst_x
 | 
			
		||||
dEQP-GLES3.functional.fbo.depth.depth_test_clamp.depth_component16
 | 
			
		||||
dEQP-GLES3.functional.fbo.invalidate.sub.unbind_blit_msaa_color
 | 
			
		||||
dEQP-GLES3.functional.fbo.invalidate.sub.unbind_blit_msaa_depth_stencil
 | 
			
		||||
dEQP-GLES3.functional.fbo.invalidate.whole.unbind_blit_msaa_depth
 | 
			
		||||
dEQP-GLES3.functional.fbo.msaa.2_samples.depth_component16
 | 
			
		||||
dEQP-GLES3.functional.fbo.msaa.2_samples.r16f
 | 
			
		||||
dEQP-GLES3.functional.fbo.msaa.2_samples.rgb565
 | 
			
		||||
dEQP-GLES3.functional.fbo.msaa.2_samples.rgba4
 | 
			
		||||
dEQP-GLES3.functional.fbo.msaa.2_samples.rgba8
 | 
			
		||||
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.depth_component24
 | 
			
		||||
dEQP-GLES3.functional.fbo.msaa.4_samples.r11f_g11f_b10f
 | 
			
		||||
dEQP-GLES3.functional.fbo.msaa.4_samples.r8
 | 
			
		||||
dEQP-GLES3.functional.fbo.msaa.4_samples.rgb10_a2
 | 
			
		||||
dEQP-GLES3.functional.fbo.msaa.4_samples.rgb8
 | 
			
		||||
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_render_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.texture_2d.interpolation.lines_wide
 | 
			
		||||
dEQP-GLES3.functional.rasterization.interpolation.basic.line_loop_wide
 | 
			
		||||
dEQP-GLES3.functional.rasterization.interpolation.projected.line_loop_wide
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.dfdx.fastest.fbo_msaa4.float_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.fbo_msaa2.vec2_mediump
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.dfdx.fbo_msaa2.vec3_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.vec4_mediump
 | 
			
		||||
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.texture.msaa4.vec2_mediump
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.dfdx.texture.msaa4.vec3_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.vec4_mediump
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.dfdy.fbo_msaa2.float_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_msaa4.vec2_mediump
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.dfdy.fbo_msaa4.vec3_highp
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.dfdy.nicest.fbo_msaa4.float_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.texture.msaa4.float_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.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.vec4_mediump
 | 
			
		||||
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.vec4_mediump
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.fwidth.fbo_msaa4.float_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.nicest.fbo_msaa4.vec2_mediump
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.fwidth.nicest.fbo_msaa4.vec3_highp
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.fwidth.texture.msaa4.float_highp
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.fwidth.texture.msaa4.vec3_mediump
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.fwidth.texture.msaa4.vec4_highp
 | 
			
		||||
dEQP-GLES3.functional.state_query.integers.max_samples_getinteger64
 | 
			
		||||
dEQP-GLES3.functional.vertex_arrays.single_attribute.normalize.int2_10_10_10.components4_quads1
 | 
			
		||||
dEQP-GLES3.functional.vertex_arrays.single_attribute.output_types.unsigned_int.components2_vec2_quads256
 | 
			
		||||
dEQP-GLES3.functional.vertex_arrays.single_attribute.output_types.unsigned_int.components2_vec3_quads256
 | 
			
		||||
dEQP-GLES3.functional.vertex_arrays.single_attribute.output_types.unsigned_int.components2_vec4_quads256
 | 
			
		||||
dEQP-GLES3.functional.vertex_arrays.single_attribute.output_types.unsigned_int.components4_vec2_quads1
 | 
			
		||||
dEQP-GLES3.functional.vertex_arrays.single_attribute.output_types.unsigned_int.components4_vec4_quads1
 | 
			
		||||
dEQP-GLES31.functional.copy_image.mixed.viewclass_128_bits_mixed.rgba32f_rgba_astc_10x10_khr.texture3d_to_texture2d_array
 | 
			
		||||
dEQP-GLES31.functional.copy_image.mixed.viewclass_128_bits_mixed.rgba32f_rgba_astc_10x5_khr.texture2d_to_texture2d_array
 | 
			
		||||
dEQP-GLES31.functional.copy_image.mixed.viewclass_128_bits_mixed.rgba32f_rgba_astc_10x6_khr.cubemap_to_texture2d_array
 | 
			
		||||
dEQP-GLES31.functional.copy_image.mixed.viewclass_128_bits_mixed.rgba32f_rgba_astc_12x10_khr.texture2d_array_to_texture2d_array
 | 
			
		||||
dEQP-GLES31.functional.copy_image.mixed.viewclass_128_bits_mixed.rgba32f_rgba_astc_12x12_khr.texture2d_to_texture2d_array
 | 
			
		||||
dEQP-GLES31.functional.copy_image.mixed.viewclass_128_bits_mixed.rgba32f_rgba_astc_5x4_khr.texture3d_to_texture2d_array
 | 
			
		||||
dEQP-GLES31.functional.copy_image.mixed.viewclass_128_bits_mixed.rgba32f_rgba_astc_5x5_khr.texture2d_array_to_texture2d_array
 | 
			
		||||
dEQP-GLES31.functional.copy_image.mixed.viewclass_128_bits_mixed.rgba32f_rgba_astc_6x5_khr.texture2d_to_texture2d_array
 | 
			
		||||
dEQP-GLES31.functional.copy_image.mixed.viewclass_128_bits_mixed.rgba32f_rgba_astc_6x6_khr.cubemap_to_texture2d_array
 | 
			
		||||
dEQP-GLES31.functional.copy_image.mixed.viewclass_128_bits_mixed.rgba32f_rgba_astc_8x6_khr.texture3d_to_texture2d_array
 | 
			
		||||
dEQP-GLES31.functional.copy_image.mixed.viewclass_128_bits_mixed.rgba32f_rgba_astc_8x8_khr.texture2d_array_to_texture2d_array
 | 
			
		||||
dEQP-GLES31.functional.copy_image.mixed.viewclass_128_bits_mixed.rgba32f_srgb8_alpha8_astc_10x5_khr.texture2d_array_to_texture2d_array
 | 
			
		||||
dEQP-GLES31.functional.copy_image.mixed.viewclass_128_bits_mixed.rgba32f_srgb8_alpha8_astc_10x6_khr.texture2d_to_texture2d_array
 | 
			
		||||
dEQP-GLES31.functional.copy_image.mixed.viewclass_128_bits_mixed.rgba32f_srgb8_alpha8_astc_10x8_khr.cubemap_to_texture2d_array
 | 
			
		||||
dEQP-GLES31.functional.copy_image.mixed.viewclass_128_bits_mixed.rgba32f_srgb8_alpha8_astc_12x10_khr.texture3d_to_texture2d_array
 | 
			
		||||
dEQP-GLES31.functional.copy_image.mixed.viewclass_128_bits_mixed.rgba32f_srgb8_alpha8_astc_12x12_khr.texture2d_array_to_texture2d_array
 | 
			
		||||
dEQP-GLES31.functional.copy_image.mixed.viewclass_128_bits_mixed.rgba32f_srgb8_alpha8_astc_4x4_khr.cubemap_to_texture2d_array
 | 
			
		||||
dEQP-GLES31.functional.copy_image.mixed.viewclass_128_bits_mixed.rgba32f_srgb8_alpha8_astc_5x5_khr.texture3d_to_texture2d_array
 | 
			
		||||
dEQP-GLES31.functional.copy_image.mixed.viewclass_128_bits_mixed.rgba32f_srgb8_alpha8_astc_6x5_khr.texture2d_array_to_texture2d_array
 | 
			
		||||
dEQP-GLES31.functional.copy_image.mixed.viewclass_128_bits_mixed.rgba32f_srgb8_alpha8_astc_6x6_khr.texture2d_to_texture2d_array
 | 
			
		||||
dEQP-GLES31.functional.copy_image.mixed.viewclass_128_bits_mixed.rgba32f_srgb8_alpha8_astc_8x5_khr.cubemap_to_texture2d_array
 | 
			
		||||
dEQP-GLES31.functional.copy_image.mixed.viewclass_128_bits_mixed.rgba32f_srgb8_alpha8_astc_8x8_khr.texture3d_to_texture2d_array
 | 
			
		||||
dEQP-GLES31.functional.copy_image.mixed.viewclass_128_bits_mixed.rgba_astc_10x10_khr_rgba32f.cubemap_to_texture2d_array
 | 
			
		||||
dEQP-GLES31.functional.copy_image.mixed.viewclass_128_bits_mixed.rgba_astc_10x10_khr_rgba32f.texture2d_to_texture3d
 | 
			
		||||
dEQP-GLES31.functional.copy_image.mixed.viewclass_128_bits_mixed.rgba_astc_10x6_khr_rgba32f.texture2d_array_to_texture2d_array
 | 
			
		||||
dEQP-GLES31.functional.copy_image.mixed.viewclass_128_bits_mixed.rgba_astc_10x8_khr_rgba32f.texture2d_array_to_texture3d
 | 
			
		||||
dEQP-GLES31.functional.copy_image.mixed.viewclass_128_bits_mixed.rgba_astc_10x8_khr_rgba32f.texture2d_to_texture2d_array
 | 
			
		||||
dEQP-GLES31.functional.copy_image.mixed.viewclass_128_bits_mixed.rgba_astc_12x10_khr_rgba32f.cubemap_to_texture3d
 | 
			
		||||
dEQP-GLES31.functional.copy_image.mixed.viewclass_128_bits_mixed.rgba_astc_4x4_khr_rgba32f.texture2d_array_to_texture3d
 | 
			
		||||
dEQP-GLES31.functional.copy_image.mixed.viewclass_128_bits_mixed.rgba_astc_4x4_khr_rgba32f.texture2d_to_texture2d_array
 | 
			
		||||
dEQP-GLES31.functional.copy_image.mixed.viewclass_128_bits_mixed.rgba_astc_5x4_khr_rgba32f.cubemap_to_texture2d_array
 | 
			
		||||
dEQP-GLES31.functional.copy_image.mixed.viewclass_128_bits_mixed.rgba_astc_5x4_khr_rgba32f.texture2d_to_texture3d
 | 
			
		||||
dEQP-GLES31.functional.copy_image.mixed.viewclass_128_bits_mixed.rgba_astc_5x5_khr_rgba32f.cubemap_to_texture3d
 | 
			
		||||
dEQP-GLES31.functional.copy_image.mixed.viewclass_128_bits_mixed.rgba_astc_6x6_khr_rgba32f.texture2d_array_to_texture2d_array
 | 
			
		||||
dEQP-GLES31.functional.copy_image.mixed.viewclass_128_bits_mixed.rgba_astc_8x5_khr_rgba32f.texture2d_array_to_texture3d
 | 
			
		||||
dEQP-GLES31.functional.copy_image.mixed.viewclass_128_bits_mixed.rgba_astc_8x5_khr_rgba32f.texture2d_to_texture2d_array
 | 
			
		||||
dEQP-GLES31.functional.copy_image.mixed.viewclass_128_bits_mixed.rgba_astc_8x6_khr_rgba32f.cubemap_to_texture2d_array
 | 
			
		||||
dEQP-GLES31.functional.copy_image.mixed.viewclass_128_bits_mixed.rgba_astc_8x6_khr_rgba32f.texture2d_to_texture3d
 | 
			
		||||
dEQP-GLES31.functional.copy_image.mixed.viewclass_128_bits_mixed.rgba_astc_8x8_khr_rgba32f.cubemap_to_texture3d
 | 
			
		||||
dEQP-GLES31.functional.copy_image.mixed.viewclass_128_bits_mixed.srgb8_alpha8_astc_10x10_khr_rgba32f.texture2d_array_to_texture3d
 | 
			
		||||
dEQP-GLES31.functional.copy_image.mixed.viewclass_128_bits_mixed.srgb8_alpha8_astc_10x10_khr_rgba32f.texture2d_to_texture2d_array
 | 
			
		||||
dEQP-GLES31.functional.copy_image.mixed.viewclass_128_bits_mixed.srgb8_alpha8_astc_10x5_khr_rgba32f.cubemap_to_texture3d
 | 
			
		||||
dEQP-GLES31.functional.copy_image.mixed.viewclass_128_bits_mixed.srgb8_alpha8_astc_10x8_khr_rgba32f.texture2d_array_to_texture2d_array
 | 
			
		||||
dEQP-GLES31.functional.copy_image.mixed.viewclass_128_bits_mixed.srgb8_alpha8_astc_12x10_khr_rgba32f.cubemap_to_texture2d_array
 | 
			
		||||
dEQP-GLES31.functional.copy_image.mixed.viewclass_128_bits_mixed.srgb8_alpha8_astc_12x10_khr_rgba32f.texture2d_to_texture3d
 | 
			
		||||
dEQP-GLES31.functional.copy_image.mixed.viewclass_128_bits_mixed.srgb8_alpha8_astc_12x12_khr_rgba32f.cubemap_to_texture3d
 | 
			
		||||
dEQP-GLES31.functional.copy_image.mixed.viewclass_128_bits_mixed.srgb8_alpha8_astc_4x4_khr_rgba32f.texture2d_array_to_texture2d_array
 | 
			
		||||
dEQP-GLES31.functional.copy_image.mixed.viewclass_128_bits_mixed.srgb8_alpha8_astc_5x4_khr_rgba32f.texture2d_array_to_texture3d
 | 
			
		||||
dEQP-GLES31.functional.copy_image.mixed.viewclass_128_bits_mixed.srgb8_alpha8_astc_5x4_khr_rgba32f.texture2d_to_texture2d_array
 | 
			
		||||
dEQP-GLES31.functional.copy_image.mixed.viewclass_128_bits_mixed.srgb8_alpha8_astc_5x5_khr_rgba32f.cubemap_to_texture2d_array
 | 
			
		||||
dEQP-GLES31.functional.copy_image.mixed.viewclass_128_bits_mixed.srgb8_alpha8_astc_5x5_khr_rgba32f.texture2d_to_texture3d
 | 
			
		||||
dEQP-GLES31.functional.copy_image.mixed.viewclass_128_bits_mixed.srgb8_alpha8_astc_6x5_khr_rgba32f.cubemap_to_texture3d
 | 
			
		||||
dEQP-GLES31.functional.copy_image.mixed.viewclass_128_bits_mixed.srgb8_alpha8_astc_8x5_khr_rgba32f.texture2d_array_to_texture2d_array
 | 
			
		||||
dEQP-GLES31.functional.copy_image.mixed.viewclass_128_bits_mixed.srgb8_alpha8_astc_8x6_khr_rgba32f.texture2d_array_to_texture3d
 | 
			
		||||
dEQP-GLES31.functional.copy_image.mixed.viewclass_128_bits_mixed.srgb8_alpha8_astc_8x6_khr_rgba32f.texture2d_to_texture2d_array
 | 
			
		||||
dEQP-GLES31.functional.copy_image.mixed.viewclass_128_bits_mixed.srgb8_alpha8_astc_8x8_khr_rgba32f.cubemap_to_texture2d_array
 | 
			
		||||
dEQP-GLES31.functional.copy_image.mixed.viewclass_128_bits_mixed.srgb8_alpha8_astc_8x8_khr_rgba32f.texture2d_to_texture3d
 | 
			
		||||
dEQP-GLES31.functional.debug.negative_coverage.get_error.buffer.read_pixels_fbo_format_mismatch
 | 
			
		||||
dEQP-GLES31.functional.fbo.no_attachments.interaction.127x127ms0_default_129x129ms0
 | 
			
		||||
dEQP-GLES31.functional.fbo.no_attachments.npot_size.15x511
 | 
			
		||||
dEQP-GLES31.functional.fbo.no_attachments.npot_size.65x65
 | 
			
		||||
dEQP-GLES31.functional.fbo.no_attachments.random.0
 | 
			
		||||
dEQP-GLES31.functional.shaders.builtin_constants.tessellation_shader.max_tess_control_total_output_components
 | 
			
		||||
dEQP-GLES31.functional.shaders.builtin_constants.tessellation_shader.max_tess_evaluation_uniform_components
 | 
			
		||||
dEQP-GLES31.functional.shaders.builtin_functions.common.abs.int_highp_tess_eval
 | 
			
		||||
dEQP-GLES31.functional.shaders.builtin_functions.common.abs.ivec3_mediump_tess_eval
 | 
			
		||||
dEQP-GLES31.functional.shaders.builtin_functions.common.abs.vec2_mediump_tess_eval
 | 
			
		||||
dEQP-GLES31.functional.shaders.builtin_functions.common.abs.vec4_lowp_tess_eval
 | 
			
		||||
dEQP-GLES31.functional.shaders.builtin_functions.common.ceil.vec2_lowp_tess_eval
 | 
			
		||||
dEQP-GLES31.functional.shaders.builtin_functions.common.ceil.vec3_highp_tess_eval
 | 
			
		||||
dEQP-GLES31.functional.shaders.builtin_functions.common.floatbitstoint.vec2_lowp_tess_eval
 | 
			
		||||
dEQP-GLES31.functional.shaders.builtin_functions.common.floatbitstoint.vec3_highp_tess_eval
 | 
			
		||||
dEQP-GLES31.functional.shaders.builtin_functions.common.floatbitstouint.float_mediump_tess_eval
 | 
			
		||||
dEQP-GLES31.functional.shaders.builtin_functions.common.floatbitstouint.vec3_lowp_tess_eval
 | 
			
		||||
dEQP-GLES31.functional.shaders.builtin_functions.common.floatbitstouint.vec4_highp_tess_eval
 | 
			
		||||
dEQP-GLES31.functional.shaders.builtin_functions.common.floor.float_mediump_tess_eval
 | 
			
		||||
dEQP-GLES31.functional.shaders.builtin_functions.common.floor.vec3_lowp_tess_eval
 | 
			
		||||
dEQP-GLES31.functional.shaders.builtin_functions.common.floor.vec4_highp_tess_eval
 | 
			
		||||
dEQP-GLES31.functional.shaders.builtin_functions.common.fract.float_mediump_tess_eval
 | 
			
		||||
dEQP-GLES31.functional.shaders.builtin_functions.common.fract.vec3_lowp_tess_eval
 | 
			
		||||
dEQP-GLES31.functional.shaders.builtin_functions.common.fract.vec4_highp_tess_eval
 | 
			
		||||
dEQP-GLES31.functional.shaders.builtin_functions.common.frexp.vec2_mediump_tess_eval
 | 
			
		||||
dEQP-GLES31.functional.shaders.builtin_functions.common.frexp.vec4_lowp_tess_eval
 | 
			
		||||
dEQP-GLES31.functional.shaders.builtin_functions.common.intbitstofloat.int_highp_tess_eval
 | 
			
		||||
dEQP-GLES31.functional.shaders.builtin_functions.common.isinf.float_lowp_tess_eval
 | 
			
		||||
dEQP-GLES31.functional.shaders.builtin_functions.common.isinf.vec2_highp_tess_eval
 | 
			
		||||
dEQP-GLES31.functional.shaders.builtin_functions.common.isinf.vec4_mediump_tess_eval
 | 
			
		||||
dEQP-GLES31.functional.shaders.builtin_functions.common.isnan.float_highp_tess_eval
 | 
			
		||||
dEQP-GLES31.functional.shaders.builtin_functions.common.isnan.vec3_mediump_tess_eval
 | 
			
		||||
dEQP-GLES31.functional.shaders.builtin_functions.common.ldexp.float_highp_tess_eval
 | 
			
		||||
dEQP-GLES31.functional.shaders.builtin_functions.common.ldexp.vec3_mediump_tess_eval
 | 
			
		||||
dEQP-GLES31.functional.shaders.builtin_functions.common.modf.vec2_mediump_tess_eval
 | 
			
		||||
dEQP-GLES31.functional.shaders.builtin_functions.common.modf.vec4_lowp_tess_eval
 | 
			
		||||
dEQP-GLES31.functional.shaders.builtin_functions.common.round.float_highp_tess_eval
 | 
			
		||||
dEQP-GLES31.functional.shaders.builtin_functions.common.round.vec3_mediump_tess_eval
 | 
			
		||||
dEQP-GLES31.functional.shaders.builtin_functions.common.roundeven.float_lowp_tess_eval
 | 
			
		||||
dEQP-GLES31.functional.shaders.builtin_functions.common.roundeven.vec2_highp_tess_eval
 | 
			
		||||
dEQP-GLES31.functional.shaders.builtin_functions.common.roundeven.vec4_mediump_tess_eval
 | 
			
		||||
dEQP-GLES31.functional.shaders.builtin_functions.common.sign.float_lowp_tess_eval
 | 
			
		||||
dEQP-GLES31.functional.shaders.builtin_functions.common.sign.ivec2_lowp_tess_eval
 | 
			
		||||
dEQP-GLES31.functional.shaders.builtin_functions.common.sign.ivec3_highp_tess_eval
 | 
			
		||||
dEQP-GLES31.functional.shaders.builtin_functions.common.sign.vec2_highp_tess_eval
 | 
			
		||||
dEQP-GLES31.functional.shaders.builtin_functions.common.sign.vec4_mediump_tess_eval
 | 
			
		||||
dEQP-GLES31.functional.shaders.builtin_functions.common.trunc.vec2_mediump_tess_eval
 | 
			
		||||
dEQP-GLES31.functional.shaders.builtin_functions.common.trunc.vec4_lowp_tess_eval
 | 
			
		||||
dEQP-GLES31.functional.shaders.builtin_functions.common.uintbitstofloat.uvec3_highp_tess_eval
 | 
			
		||||
dEQP-GLES31.functional.shaders.builtin_functions.integer.bitcount.int_highp_tess_eval
 | 
			
		||||
dEQP-GLES31.functional.shaders.builtin_functions.integer.bitcount.ivec3_mediump_tess_eval
 | 
			
		||||
dEQP-GLES31.functional.shaders.builtin_functions.integer.bitcount.uint_lowp_tess_eval
 | 
			
		||||
dEQP-GLES31.functional.shaders.builtin_functions.integer.bitcount.uvec2_highp_tess_eval
 | 
			
		||||
dEQP-GLES31.functional.shaders.builtin_functions.integer.bitcount.uvec4_mediump_tess_eval
 | 
			
		||||
dEQP-GLES31.functional.shaders.builtin_functions.integer.bitfieldextract.ivec2_mediump_tess_eval
 | 
			
		||||
dEQP-GLES31.functional.shaders.builtin_functions.integer.bitfieldextract.ivec4_lowp_tess_eval
 | 
			
		||||
dEQP-GLES31.functional.shaders.builtin_functions.integer.bitfieldextract.uint_highp_tess_eval
 | 
			
		||||
dEQP-GLES31.functional.shaders.builtin_functions.integer.bitfieldextract.uvec3_mediump_tess_eval
 | 
			
		||||
dEQP-GLES31.functional.shaders.builtin_functions.integer.bitfieldinsert.int_lowp_tess_eval
 | 
			
		||||
dEQP-GLES31.functional.shaders.builtin_functions.integer.bitfieldinsert.ivec2_highp_tess_eval
 | 
			
		||||
dEQP-GLES31.functional.shaders.builtin_functions.integer.bitfieldinsert.ivec4_mediump_tess_eval
 | 
			
		||||
dEQP-GLES31.functional.shaders.builtin_functions.integer.bitfieldinsert.uvec2_lowp_tess_eval
 | 
			
		||||
dEQP-GLES31.functional.shaders.builtin_functions.integer.bitfieldinsert.uvec3_highp_tess_eval
 | 
			
		||||
dEQP-GLES31.functional.shaders.builtin_functions.integer.bitfieldreverse.int_mediump_tess_eval
 | 
			
		||||
dEQP-GLES31.functional.shaders.builtin_functions.integer.bitfieldreverse.ivec3_lowp_tess_eval
 | 
			
		||||
dEQP-GLES31.functional.shaders.builtin_functions.integer.bitfieldreverse.ivec4_highp_tess_eval
 | 
			
		||||
dEQP-GLES31.functional.shaders.builtin_functions.integer.bitfieldreverse.uvec2_mediump_tess_eval
 | 
			
		||||
dEQP-GLES31.functional.shaders.builtin_functions.integer.bitfieldreverse.uvec4_lowp_tess_eval
 | 
			
		||||
dEQP-GLES31.functional.shaders.builtin_functions.integer.findlsb.ivec2_lowp_tess_eval
 | 
			
		||||
dEQP-GLES31.functional.shaders.builtin_functions.integer.findlsb.ivec3_highp_tess_eval
 | 
			
		||||
dEQP-GLES31.functional.shaders.builtin_functions.integer.findlsb.uint_mediump_tess_eval
 | 
			
		||||
dEQP-GLES31.functional.shaders.builtin_functions.integer.findlsb.uvec3_lowp_tess_eval
 | 
			
		||||
dEQP-GLES31.functional.shaders.builtin_functions.integer.findlsb.uvec4_highp_tess_eval
 | 
			
		||||
dEQP-GLES31.functional.shaders.builtin_functions.integer.findmsb.ivec2_mediump_tess_eval
 | 
			
		||||
dEQP-GLES31.functional.shaders.builtin_functions.integer.findmsb.ivec4_lowp_tess_eval
 | 
			
		||||
dEQP-GLES31.functional.shaders.builtin_functions.integer.findmsb.uint_highp_tess_eval
 | 
			
		||||
dEQP-GLES31.functional.shaders.builtin_functions.integer.findmsb.uvec3_mediump_tess_eval
 | 
			
		||||
dEQP-GLES31.functional.shaders.builtin_functions.integer.imulextended.ivec4_highp_tess_eval
 | 
			
		||||
dEQP-GLES31.functional.shaders.builtin_functions.integer.uaddcarry.uint_mediump_tess_eval
 | 
			
		||||
dEQP-GLES31.functional.shaders.builtin_functions.integer.uaddcarry.uvec3_lowp_tess_eval
 | 
			
		||||
dEQP-GLES31.functional.shaders.builtin_functions.integer.uaddcarry.uvec4_highp_tess_eval
 | 
			
		||||
dEQP-GLES31.functional.shaders.builtin_functions.integer.umulextended.uvec3_highp_tess_eval
 | 
			
		||||
dEQP-GLES31.functional.shaders.builtin_functions.integer.usubborrow.uvec2_mediump_tess_eval
 | 
			
		||||
dEQP-GLES31.functional.shaders.builtin_functions.integer.usubborrow.uvec4_lowp_tess_eval
 | 
			
		||||
dEQP-GLES31.functional.shaders.builtin_functions.pack_unpack.packsnorm4x8_mediump_tess_eval
 | 
			
		||||
dEQP-GLES31.functional.shaders.builtin_functions.pack_unpack.packunorm4x8_highp_tess_eval
 | 
			
		||||
dEQP-GLES31.functional.shaders.builtin_functions.texture_size.samples_1_texture_2d_array
 | 
			
		||||
dEQP-GLES31.functional.shaders.builtin_functions.uniform.findLSBMinusOne.mediump_tess_eval
 | 
			
		||||
dEQP-GLES31.functional.shaders.builtin_functions.uniform.findMSBMinusOne.highp_tess_eval
 | 
			
		||||
dEQP-GLES31.functional.shaders.builtin_functions.uniform.findMSBZero.lowp_tess_eval
 | 
			
		||||
dEQP-GLES31.functional.shaders.linkage.es31.tessellation.uniform.types.int
 | 
			
		||||
dEQP-GLES31.functional.shaders.linkage.es31.tessellation.uniform.types.vec4
 | 
			
		||||
dEQP-GLES31.functional.shaders.linkage.es31.tessellation.varying.rules.internal_superfluous_declaration
 | 
			
		||||
dEQP-GLES31.functional.shaders.linkage.es31.tessellation.varying.types.ivec2
 | 
			
		||||
dEQP-GLES31.functional.shaders.linkage.es31.tessellation.varying.types.mat2
 | 
			
		||||
dEQP-GLES31.functional.shaders.opaque_type_indexing.atomic_counter.const_literal_tessellation_evaluation
 | 
			
		||||
dEQP-GLES31.functional.shaders.opaque_type_indexing.sampler.const_expression.tessellation_control.isampler2d
 | 
			
		||||
dEQP-GLES31.functional.shaders.opaque_type_indexing.sampler.const_expression.tessellation_evaluation.isamplercube
 | 
			
		||||
dEQP-GLES31.functional.shaders.opaque_type_indexing.sampler.const_literal.tessellation_control.samplercube
 | 
			
		||||
dEQP-GLES31.functional.shaders.opaque_type_indexing.sampler.const_literal.tessellation_control.usampler2d
 | 
			
		||||
dEQP-GLES31.functional.shaders.opaque_type_indexing.sampler.const_literal.tessellation_evaluation.sampler2darray
 | 
			
		||||
dEQP-GLES31.functional.shaders.opaque_type_indexing.sampler.const_literal.tessellation_evaluation.usamplercube
 | 
			
		||||
dEQP-GLES31.functional.shaders.opaque_type_indexing.ubo.const_expression_tessellation_evaluation
 | 
			
		||||
dEQP-GLES31.functional.state_query.integer.max_framebuffer_samples_getinteger64
 | 
			
		||||
dEQP-GLES31.functional.state_query.texture.texture_2d_multisample.texture_immutable_format_pure_uint
 | 
			
		||||
dEQP-GLES31.functional.state_query.texture.texture_2d_multisample_array.texture_immutable_levels_integer
 | 
			
		||||
dEQP-GLES31.functional.synchronization.inter_invocation.image_atomic_read_write
 | 
			
		||||
dEQP-GLES31.functional.synchronization.inter_invocation.ssbo_atomic_read_write
 | 
			
		||||
dEQP-GLES31.functional.tessellation.common_edge.quads_fractional_odd_spacing
 | 
			
		||||
dEQP-GLES31.functional.tessellation.misc_draw.fill_overlap_quads_equal_spacing
 | 
			
		||||
dEQP-GLES31.functional.tessellation.shader_input_output.barrier
 | 
			
		||||
dEQP-GLES31.functional.tessellation.shader_input_output.patch_vertices_in_tes
 | 
			
		||||
dEQP-GLES31.functional.tessellation.user_defined_io.per_vertex.vertex_io_array_size_query.quads_explicit_tcs_out_size
 | 
			
		||||
dEQP-GLES31.functional.tessellation.user_defined_io.per_vertex.vertex_io_array_size_shader_builtin.triangles
 | 
			
		||||
dEQP-GLES31.functional.tessellation.user_defined_io.per_vertex_block.vertex_io_array_size_shader_builtin.isolines
 | 
			
		||||
dEQP-GLES31.functional.texture.border_clamp.range_clamp.nearest_float_depth
 | 
			
		||||
@@ -1,16 +0,0 @@
 | 
			
		||||
#!/bin/sh
 | 
			
		||||
 | 
			
		||||
set -ex
 | 
			
		||||
 | 
			
		||||
if [ -z "$VK_DRIVER" ]; then
 | 
			
		||||
   echo 'VK_DRIVER must be to something like "radeon" or "intel" for the test run'
 | 
			
		||||
   exit 1
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
INSTALL=`pwd`/install
 | 
			
		||||
 | 
			
		||||
# Set up the driver environment.
 | 
			
		||||
export LD_LIBRARY_PATH=`pwd`/install/lib/
 | 
			
		||||
export VK_ICD_FILENAMES=`pwd`/install/share/vulkan/icd.d/"$VK_DRIVER"_icd.x86_64.json
 | 
			
		||||
 | 
			
		||||
"$INSTALL/fossils/fossils.sh" "$INSTALL/fossils.yml"
 | 
			
		||||
@@ -1,6 +0,0 @@
 | 
			
		||||
fossils-db:
 | 
			
		||||
  repo: "https://gitlab.freedesktop.org/hakzsam/fossils-db"
 | 
			
		||||
  commit: "59b11cd19e375c5871c512f73b1f8ecc33a5c417"
 | 
			
		||||
 | 
			
		||||
fossils:
 | 
			
		||||
  - path: sascha-willems/database.foz
 | 
			
		||||
@@ -1,71 +0,0 @@
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
 | 
			
		||||
FOSSILS_SCRIPT_DIR="$(dirname "$(readlink -f "$0")")"
 | 
			
		||||
FOSSILS_YAML="$(readlink -f "$1")"
 | 
			
		||||
 | 
			
		||||
clone_fossils_db()
 | 
			
		||||
{
 | 
			
		||||
    local repo="$1"
 | 
			
		||||
    local commit="$2"
 | 
			
		||||
    rm -rf fossils-db
 | 
			
		||||
    git clone --no-checkout "$repo" fossils-db
 | 
			
		||||
    (cd fossils-db; git reset "$commit" || git reset "origin/$commit")
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
query_fossils_yaml()
 | 
			
		||||
{
 | 
			
		||||
    python3 "$FOSSILS_SCRIPT_DIR/query_fossils_yaml.py" \
 | 
			
		||||
        --file "$FOSSILS_YAML" "$@"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
create_clean_git()
 | 
			
		||||
{
 | 
			
		||||
    rm -rf .clean_git
 | 
			
		||||
    cp -R .git .clean_git
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
restore_clean_git()
 | 
			
		||||
{
 | 
			
		||||
    rm -rf .git
 | 
			
		||||
    cp -R .clean_git .git
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
fetch_fossil()
 | 
			
		||||
{
 | 
			
		||||
    local fossil="${1//,/?}"
 | 
			
		||||
    echo -n "[fetch_fossil] Fetching $1... "
 | 
			
		||||
    local output=$(git lfs pull -I "$fossil" 2>&1)
 | 
			
		||||
    local ret=0
 | 
			
		||||
    if [[ $? -ne 0 || ! -f "$1" ]]; then
 | 
			
		||||
        echo "ERROR"
 | 
			
		||||
        echo "$output"
 | 
			
		||||
        ret=1
 | 
			
		||||
    else
 | 
			
		||||
        echo "OK"
 | 
			
		||||
    fi
 | 
			
		||||
    restore_clean_git
 | 
			
		||||
    return $ret
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
if [[ -n "$(query_fossils_yaml fossils_db_repo)" ]]; then
 | 
			
		||||
    clone_fossils_db "$(query_fossils_yaml fossils_db_repo)" \
 | 
			
		||||
                     "$(query_fossils_yaml fossils_db_commit)"
 | 
			
		||||
    cd fossils-db
 | 
			
		||||
else
 | 
			
		||||
    echo "Warning: No fossils-db entry in $FOSSILS_YAML, assuming fossils-db is current directory"
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
# During git operations various git objects get created which
 | 
			
		||||
# may take up significant space. Store a clean .git instance,
 | 
			
		||||
# which we restore after various git operations to keep our
 | 
			
		||||
# storage consumption low.
 | 
			
		||||
create_clean_git
 | 
			
		||||
 | 
			
		||||
for fossil in $(query_fossils_yaml fossils)
 | 
			
		||||
do
 | 
			
		||||
    fetch_fossil "$fossil" || exit $?
 | 
			
		||||
    fossilize-replay $fossil || exit $?
 | 
			
		||||
    rm $fossil
 | 
			
		||||
done
 | 
			
		||||
 | 
			
		||||
exit $ret
 | 
			
		||||
@@ -1,69 +0,0 @@
 | 
			
		||||
#!/usr/bin/python3
 | 
			
		||||
 | 
			
		||||
# Copyright (c) 2019 Collabora Ltd
 | 
			
		||||
# Copyright (c) 2020 Valve 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.
 | 
			
		||||
#
 | 
			
		||||
# SPDX-License-Identifier: MIT
 | 
			
		||||
 | 
			
		||||
import argparse
 | 
			
		||||
import yaml
 | 
			
		||||
 | 
			
		||||
def cmd_fossils_db_repo(args):
 | 
			
		||||
    with open(args.file, 'r') as f:
 | 
			
		||||
        y = yaml.safe_load(f)
 | 
			
		||||
    print(y['fossils-db']['repo'])
 | 
			
		||||
 | 
			
		||||
def cmd_fossils_db_commit(args):
 | 
			
		||||
    with open(args.file, 'r') as f:
 | 
			
		||||
        y = yaml.safe_load(f)
 | 
			
		||||
    print(y['fossils-db']['commit'])
 | 
			
		||||
 | 
			
		||||
def cmd_fossils(args):
 | 
			
		||||
    with open(args.file, 'r') as f:
 | 
			
		||||
        y = yaml.safe_load(f)
 | 
			
		||||
 | 
			
		||||
    fossils = list(y['fossils'])
 | 
			
		||||
    if len(fossils) == 0:
 | 
			
		||||
        return
 | 
			
		||||
 | 
			
		||||
    print('\n'.join((t['path'] for t in fossils)))
 | 
			
		||||
 | 
			
		||||
def main():
 | 
			
		||||
    parser = argparse.ArgumentParser()
 | 
			
		||||
    parser.add_argument('--file', required=True,
 | 
			
		||||
                        help='the name of the yaml file')
 | 
			
		||||
 | 
			
		||||
    subparsers = parser.add_subparsers(help='sub-command help')
 | 
			
		||||
 | 
			
		||||
    parser_fossils_db_repo = subparsers.add_parser('fossils_db_repo')
 | 
			
		||||
    parser_fossils_db_repo.set_defaults(func=cmd_fossils_db_repo)
 | 
			
		||||
 | 
			
		||||
    parser_fossils_db_commit = subparsers.add_parser('fossils_db_commit')
 | 
			
		||||
    parser_fossils_db_commit.set_defaults(func=cmd_fossils_db_commit)
 | 
			
		||||
 | 
			
		||||
    parser_fossils = subparsers.add_parser('fossils')
 | 
			
		||||
    parser_fossils.set_defaults(func=cmd_fossils)
 | 
			
		||||
 | 
			
		||||
    args = parser.parse_args()
 | 
			
		||||
    args.func(args)
 | 
			
		||||
 | 
			
		||||
if __name__ == "__main__":
 | 
			
		||||
    main()
 | 
			
		||||
@@ -1,45 +0,0 @@
 | 
			
		||||
#!/usr/bin/env python3
 | 
			
		||||
 | 
			
		||||
from jinja2 import Environment, FileSystemLoader
 | 
			
		||||
import argparse
 | 
			
		||||
import os
 | 
			
		||||
 | 
			
		||||
parser = argparse.ArgumentParser()
 | 
			
		||||
parser.add_argument("--template")
 | 
			
		||||
parser.add_argument("--pipeline-info")
 | 
			
		||||
parser.add_argument("--base-artifacts-url")
 | 
			
		||||
parser.add_argument("--device-type")
 | 
			
		||||
parser.add_argument("--kernel-image-name")
 | 
			
		||||
parser.add_argument("--kernel-image-type", nargs='?', default="")
 | 
			
		||||
parser.add_argument("--gpu-version")
 | 
			
		||||
parser.add_argument("--boot-method")
 | 
			
		||||
parser.add_argument("--lava-tags", nargs='?', default="")
 | 
			
		||||
parser.add_argument("--env-vars", nargs='?', default="")
 | 
			
		||||
parser.add_argument("--deqp-version")
 | 
			
		||||
parser.add_argument("--arch")
 | 
			
		||||
parser.add_argument("--ci-node-index")
 | 
			
		||||
parser.add_argument("--ci-node-total")
 | 
			
		||||
args = parser.parse_args()
 | 
			
		||||
 | 
			
		||||
env = Environment(loader = FileSystemLoader(os.path.dirname(args.template)), trim_blocks=True, lstrip_blocks=True)
 | 
			
		||||
template = env.get_template(os.path.basename(args.template))
 | 
			
		||||
 | 
			
		||||
env_vars = "%s CI_NODE_INDEX=%s CI_NODE_TOTAL=%s" % (args.env_vars, args.ci_node_index, args.ci_node_total)
 | 
			
		||||
 | 
			
		||||
values = {}
 | 
			
		||||
values['pipeline_info'] = args.pipeline_info
 | 
			
		||||
values['base_artifacts_url'] = args.base_artifacts_url
 | 
			
		||||
values['device_type'] = args.device_type
 | 
			
		||||
values['kernel_image_name'] = args.kernel_image_name
 | 
			
		||||
values['kernel_image_type'] = args.kernel_image_type
 | 
			
		||||
values['gpu_version'] = args.gpu_version
 | 
			
		||||
values['boot_method'] = args.boot_method
 | 
			
		||||
values['tags'] = args.lava_tags
 | 
			
		||||
values['env_vars'] = env_vars
 | 
			
		||||
values['deqp_version'] = args.deqp_version
 | 
			
		||||
values['arch'] = args.arch
 | 
			
		||||
 | 
			
		||||
f = open('lava-deqp.yml', "w")
 | 
			
		||||
f.write(template.render(values))
 | 
			
		||||
f.close()
 | 
			
		||||
 | 
			
		||||
@@ -1,105 +0,0 @@
 | 
			
		||||
job_name: mesa-deqp-{{ deqp_version }}-{{ gpu_version }} {{ pipeline_info }}
 | 
			
		||||
device_type: {{ device_type }}
 | 
			
		||||
timeouts:
 | 
			
		||||
  job:
 | 
			
		||||
    minutes: 40
 | 
			
		||||
  action:
 | 
			
		||||
   minutes: 10
 | 
			
		||||
  actions:
 | 
			
		||||
    power-off:
 | 
			
		||||
      seconds: 30
 | 
			
		||||
priority: 75
 | 
			
		||||
visibility: public
 | 
			
		||||
{% if tags %}
 | 
			
		||||
{% set lavatags = tags.split(',') %}
 | 
			
		||||
tags:
 | 
			
		||||
{% for tag in lavatags %}
 | 
			
		||||
  - {{ tag }}
 | 
			
		||||
{% endfor %}
 | 
			
		||||
{% endif %}
 | 
			
		||||
actions:
 | 
			
		||||
- deploy:
 | 
			
		||||
    timeout:
 | 
			
		||||
      minutes: 10
 | 
			
		||||
{% if boot_method == "fastboot" %}
 | 
			
		||||
{# fastboot has just one boot image with the dtb and rootfs packed in #}
 | 
			
		||||
    to: fastboot
 | 
			
		||||
    images:
 | 
			
		||||
      boot:
 | 
			
		||||
        url: {{ base_artifacts_url }}/{{ kernel_image_name }}
 | 
			
		||||
{% else %}
 | 
			
		||||
    to: tftp
 | 
			
		||||
    kernel:
 | 
			
		||||
      url: {{ base_artifacts_url }}/{{ kernel_image_name }}
 | 
			
		||||
{% if kernel_image_type %}
 | 
			
		||||
      {{ kernel_image_type }}
 | 
			
		||||
{% endif %}
 | 
			
		||||
    ramdisk:
 | 
			
		||||
      url: {{ base_artifacts_url }}/lava-rootfs-{{ arch }}.cpio.gz
 | 
			
		||||
      compression: gz
 | 
			
		||||
    dtb:
 | 
			
		||||
      url: {{ base_artifacts_url }}/{{ device_type }}.dtb
 | 
			
		||||
{% endif %}
 | 
			
		||||
    os: oe
 | 
			
		||||
- boot:
 | 
			
		||||
    timeout:
 | 
			
		||||
      minutes: 5
 | 
			
		||||
    method: {{ boot_method }}
 | 
			
		||||
{% if boot_method == "fastboot" %}
 | 
			
		||||
{#
 | 
			
		||||
   For fastboot, LAVA doesn't know how to unpack the rootfs/apply overlay/repack,
 | 
			
		||||
   so we transfer the overlay over the network after boot.
 | 
			
		||||
#}
 | 
			
		||||
    transfer_overlay:
 | 
			
		||||
      download_command: wget -S --progress=dot:giga
 | 
			
		||||
      unpack_command: tar -C / -xzf
 | 
			
		||||
{% else %}
 | 
			
		||||
    commands: ramdisk
 | 
			
		||||
{% endif %}
 | 
			
		||||
    prompts:
 | 
			
		||||
      - 'lava-shell:'
 | 
			
		||||
- 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 || echo possibly already mounted
 | 
			
		||||
          - mkdir -p /dev/pts
 | 
			
		||||
          - mount -t devpts devpts /dev/pts
 | 
			
		||||
 | 
			
		||||
{% if env_vars %}
 | 
			
		||||
          - export {{ env_vars }}
 | 
			
		||||
{% endif %}
 | 
			
		||||
 | 
			
		||||
          # deqp-runner.sh assumes some stuff is in pwd
 | 
			
		||||
          - cd /
 | 
			
		||||
 | 
			
		||||
          - export DEQP_NO_SAVE_RESULTS=1
 | 
			
		||||
          - 'export DEQP_RUNNER_OPTIONS="--shuffle false"'
 | 
			
		||||
          - export DEQP_EXPECTED_FAILS=deqp-{{ gpu_version }}-fails.txt
 | 
			
		||||
          - export DEQP_SKIPS=deqp-{{ gpu_version }}-skips.txt
 | 
			
		||||
          - export DEQP_VER={{ deqp_version }}
 | 
			
		||||
          - export LIBGL_DRIVERS_PATH=`pwd`/install/lib/dri
 | 
			
		||||
 | 
			
		||||
          - "if sh /install/deqp-runner.sh; then
 | 
			
		||||
                  echo 'deqp: pass';
 | 
			
		||||
             else
 | 
			
		||||
                  echo 'deqp: fail';
 | 
			
		||||
             fi"
 | 
			
		||||
        parse:
 | 
			
		||||
          pattern: '(?P<test_case_id>\S*):\s+(?P<result>(pass|fail))'
 | 
			
		||||
      from: inline
 | 
			
		||||
      name: deqp
 | 
			
		||||
      path: inline/mesa-deqp.yaml
 | 
			
		||||
@@ -1,173 +0,0 @@
 | 
			
		||||
.lava-test:
 | 
			
		||||
  extends:
 | 
			
		||||
    - .ci-run-policy
 | 
			
		||||
  variables:
 | 
			
		||||
    GIT_STRATEGY: none # testing doesn't build anything from source
 | 
			
		||||
    ENV_VARS: "DEQP_PARALLEL=6"
 | 
			
		||||
    DEQP_VERSION: gles2
 | 
			
		||||
  script:
 | 
			
		||||
    - mkdir -p /srv/${FILES_HOST_NAME}/$CI_JOB_ID/
 | 
			
		||||
    - cp /lava-files/${KERNEL_IMAGE_NAME} /srv/${FILES_HOST_NAME}/$CI_JOB_ID/.
 | 
			
		||||
    - cp /lava-files/${DEVICE_TYPE}.dtb /srv/${FILES_HOST_NAME}/$CI_JOB_ID/.
 | 
			
		||||
    - tar -C /lava-files/rootfs-${ARCH} -xf artifacts/install.tar
 | 
			
		||||
    - pushd /lava-files/rootfs-${ARCH}
 | 
			
		||||
    - find -H  |  cpio -H newc -o | gzip -c - > /srv/${FILES_HOST_NAME}/$CI_JOB_ID/lava-rootfs-${ARCH}.cpio.gz
 | 
			
		||||
    - popd
 | 
			
		||||
    - >
 | 
			
		||||
      artifacts/generate_lava.py \
 | 
			
		||||
        --template artifacts/lava-deqp.yml.jinja2 \
 | 
			
		||||
        --pipeline-info "$CI_PIPELINE_URL on $CI_COMMIT_REF_NAME ${CI_NODE_INDEX}/${CI_NODE_TOTAL}" \
 | 
			
		||||
        --base-artifacts-url ${FILES_HOST_URL}/$CI_JOB_ID \
 | 
			
		||||
        --device-type ${DEVICE_TYPE} \
 | 
			
		||||
        --env-vars "${ENV_VARS}" \
 | 
			
		||||
        --arch ${ARCH} \
 | 
			
		||||
        --deqp-version ${DEQP_VERSION} \
 | 
			
		||||
        --kernel-image-name ${KERNEL_IMAGE_NAME} \
 | 
			
		||||
        --kernel-image-type "${KERNEL_IMAGE_TYPE}" \
 | 
			
		||||
        --gpu-version ${GPU_VERSION} \
 | 
			
		||||
        --boot-method ${BOOT_METHOD} \
 | 
			
		||||
        --lava-tags "${LAVA_TAGS}" \
 | 
			
		||||
        --ci-node-index "${CI_NODE_INDEX}" \
 | 
			
		||||
        --ci-node-total "${CI_NODE_TOTAL}"
 | 
			
		||||
    - lava_job_id=`lavacli jobs submit lava-deqp.yml` || lavacli jobs submit lava-deqp.yml
 | 
			
		||||
    - echo $lava_job_id
 | 
			
		||||
    - rm -rf artifacts/*
 | 
			
		||||
    - cp lava-deqp.yml artifacts/.
 | 
			
		||||
    - lavacli jobs logs $lava_job_id | tee artifacts/lava-deqp-$lava_job_id.log
 | 
			
		||||
    - lavacli jobs show $lava_job_id
 | 
			
		||||
    - result=`lavacli results $lava_job_id 0_deqp deqp | head -1`
 | 
			
		||||
    - echo $result
 | 
			
		||||
    - '[[ "$result" == "pass" ]]'
 | 
			
		||||
  after_script:
 | 
			
		||||
    - rm -rf /srv/${FILES_HOST_NAME}/$CI_JOB_ID/
 | 
			
		||||
  artifacts:
 | 
			
		||||
    name: "mesa_${CI_JOB_NAME}"
 | 
			
		||||
    when: always
 | 
			
		||||
    paths:
 | 
			
		||||
      - artifacts/
 | 
			
		||||
 | 
			
		||||
.lava-test:armhf:
 | 
			
		||||
  variables:
 | 
			
		||||
    ARCH: armhf
 | 
			
		||||
    KERNEL_IMAGE_NAME: zImage
 | 
			
		||||
    KERNEL_IMAGE_TYPE: "type:\ zimage"
 | 
			
		||||
    BOOT_METHOD: u-boot
 | 
			
		||||
  extends:
 | 
			
		||||
    - .lava-test
 | 
			
		||||
    - .use-arm_build
 | 
			
		||||
  dependencies:
 | 
			
		||||
    - meson-armhf
 | 
			
		||||
  needs:
 | 
			
		||||
    - arm_build
 | 
			
		||||
    - meson-armhf
 | 
			
		||||
 | 
			
		||||
.lava-test:arm64:
 | 
			
		||||
  variables:
 | 
			
		||||
    ARCH: arm64
 | 
			
		||||
    KERNEL_IMAGE_NAME: Image
 | 
			
		||||
    KERNEL_IMAGE_TYPE: "type:\ image"
 | 
			
		||||
    BOOT_METHOD: u-boot
 | 
			
		||||
  extends:
 | 
			
		||||
    - .lava-test
 | 
			
		||||
    - .use-arm_build
 | 
			
		||||
  dependencies:
 | 
			
		||||
    - meson-arm64
 | 
			
		||||
  needs:
 | 
			
		||||
    - arm_build
 | 
			
		||||
    - meson-arm64
 | 
			
		||||
 | 
			
		||||
panfrost-t720-gles2:arm64:
 | 
			
		||||
  extends:
 | 
			
		||||
    - .lava-test:arm64
 | 
			
		||||
    - .panfrost-rules
 | 
			
		||||
  variables:
 | 
			
		||||
    DEVICE_TYPE: sun50i-h6-pine-h64
 | 
			
		||||
    GPU_VERSION: panfrost-t720
 | 
			
		||||
    ENV_VARS: "PAN_MESA_DEBUG=gles3 DEQP_PARALLEL=6 DEQP_EXPECTED_RENDERER=T720"
 | 
			
		||||
    FILES_HOST_NAME: "mesa-ci-lava-files.freedesktop.org"
 | 
			
		||||
    FILES_HOST_URL: "https://mesa-ci-lava-files.freedesktop.org"
 | 
			
		||||
  tags:
 | 
			
		||||
    - mesa-ci-aarch64-lava-collabora
 | 
			
		||||
 | 
			
		||||
panfrost-t760-gles2:armhf:
 | 
			
		||||
  extends:
 | 
			
		||||
    - .lava-test:armhf
 | 
			
		||||
    - .panfrost-rules
 | 
			
		||||
  variables:
 | 
			
		||||
    DEVICE_TYPE: rk3288-veyron-jaq
 | 
			
		||||
    GPU_VERSION: panfrost-t760
 | 
			
		||||
    BOOT_METHOD: depthcharge
 | 
			
		||||
    KERNEL_IMAGE_TYPE: ""
 | 
			
		||||
    ENV_VARS: "PAN_MESA_DEBUG=gles3 DEQP_PARALLEL=6 DEQP_EXPECTED_RENDERER=T760"
 | 
			
		||||
    FILES_HOST_NAME: "mesa-ci-lava-files.freedesktop.org"
 | 
			
		||||
    FILES_HOST_URL: "https://mesa-ci-lava-files.freedesktop.org"
 | 
			
		||||
  tags:
 | 
			
		||||
    - mesa-ci-aarch64-lava-collabora
 | 
			
		||||
 | 
			
		||||
panfrost-t860-gles2:arm64:
 | 
			
		||||
  extends:
 | 
			
		||||
    - .lava-test:arm64
 | 
			
		||||
    - .panfrost-rules
 | 
			
		||||
  variables:
 | 
			
		||||
    DEVICE_TYPE: rk3399-gru-kevin
 | 
			
		||||
    GPU_VERSION: panfrost-t860
 | 
			
		||||
    BOOT_METHOD: depthcharge
 | 
			
		||||
    KERNEL_IMAGE_TYPE: ""
 | 
			
		||||
    ENV_VARS: "PAN_MESA_DEBUG=gles3 DEQP_PARALLEL=6 DEQP_EXPECTED_RENDERER=T860"
 | 
			
		||||
    FILES_HOST_NAME: "mesa-ci-lava-files.freedesktop.org"
 | 
			
		||||
    FILES_HOST_URL: "https://mesa-ci-lava-files.freedesktop.org"
 | 
			
		||||
  tags:
 | 
			
		||||
    - mesa-ci-aarch64-lava-collabora
 | 
			
		||||
 | 
			
		||||
panfrost-t860-gles3:arm64:
 | 
			
		||||
  extends:
 | 
			
		||||
    - .lava-test:arm64
 | 
			
		||||
    - .panfrost-rules
 | 
			
		||||
  variables:
 | 
			
		||||
    DEVICE_TYPE: rk3399-gru-kevin
 | 
			
		||||
    GPU_VERSION: panfrost-t860
 | 
			
		||||
    BOOT_METHOD: depthcharge
 | 
			
		||||
    KERNEL_IMAGE_TYPE: ""
 | 
			
		||||
    DEQP_VERSION: gles3
 | 
			
		||||
    ENV_VARS: "PAN_MESA_DEBUG=gles3 DEQP_PARALLEL=6 DEQP_EXPECTED_RENDERER=T860"
 | 
			
		||||
    CI_NODE_INDEX: 1
 | 
			
		||||
    CI_NODE_TOTAL: 5
 | 
			
		||||
    FILES_HOST_NAME: "mesa-ci-lava-files.freedesktop.org"
 | 
			
		||||
    FILES_HOST_URL: "https://mesa-ci-lava-files.freedesktop.org"
 | 
			
		||||
  tags:
 | 
			
		||||
    - mesa-ci-aarch64-lava-collabora
 | 
			
		||||
 | 
			
		||||
panfrost-t820-gles2:arm64:
 | 
			
		||||
  extends:
 | 
			
		||||
    - .lava-test:arm64
 | 
			
		||||
    - .panfrost-rules
 | 
			
		||||
  variables:
 | 
			
		||||
    DEVICE_TYPE: meson-gxm-khadas-vim2
 | 
			
		||||
    GPU_VERSION: panfrost-t820
 | 
			
		||||
    LAVA_TAGS: panfrost
 | 
			
		||||
    ENV_VARS: "PAN_MESA_DEBUG=gles3 DEQP_PARALLEL=6 DEQP_EXPECTED_RENDERER=T820"
 | 
			
		||||
  tags:
 | 
			
		||||
    - mesa-ci-aarch64-lava-baylibre
 | 
			
		||||
 | 
			
		||||
lima-mali400-test:armhf:
 | 
			
		||||
  parallel: 2
 | 
			
		||||
  extends:
 | 
			
		||||
    - .lava-test:armhf
 | 
			
		||||
    - .lima-rules
 | 
			
		||||
  variables:
 | 
			
		||||
    DEVICE_TYPE: sun8i-h3-libretech-all-h3-cc
 | 
			
		||||
    GPU_VERSION: lima
 | 
			
		||||
    ENV_VARS: "DEQP_PARALLEL=3 DEQP_EXPECTED_RENDERER=Mali400"
 | 
			
		||||
  tags:
 | 
			
		||||
    - mesa-ci-aarch64-lava-baylibre
 | 
			
		||||
 | 
			
		||||
lima-mali450-test:arm64:
 | 
			
		||||
  extends:
 | 
			
		||||
    - .lava-test:arm64
 | 
			
		||||
    - .lima-rules
 | 
			
		||||
  variables:
 | 
			
		||||
    DEVICE_TYPE: meson-gxl-s905x-libretech-cc
 | 
			
		||||
    GPU_VERSION: lima
 | 
			
		||||
    ENV_VARS: "DEQP_PARALLEL=6 DEQP_EXPECTED_RENDERER=Mali450"
 | 
			
		||||
  tags:
 | 
			
		||||
    - mesa-ci-aarch64-lava-baylibre
 | 
			
		||||
@@ -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,63 +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:-[]} \
 | 
			
		||||
      ${EXTRA_OPTION}
 | 
			
		||||
cd _build
 | 
			
		||||
meson configure
 | 
			
		||||
ninja
 | 
			
		||||
LC_ALL=C.UTF-8 ninja test
 | 
			
		||||
ninja install
 | 
			
		||||
cd ..
 | 
			
		||||
@@ -1,36 +0,0 @@
 | 
			
		||||
diff --git a/generated_tests/CMakeLists.txt b/generated_tests/CMakeLists.txt
 | 
			
		||||
index 738526546..6f89048cd 100644
 | 
			
		||||
--- a/generated_tests/CMakeLists.txt
 | 
			
		||||
+++ b/generated_tests/CMakeLists.txt
 | 
			
		||||
@@ -206,11 +206,6 @@ piglit_make_generated_tests(
 | 
			
		||||
	templates/gen_variable_index_write_tests/vs.shader_test.mako
 | 
			
		||||
	templates/gen_variable_index_write_tests/fs.shader_test.mako
 | 
			
		||||
	templates/gen_variable_index_write_tests/helpers.mako)
 | 
			
		||||
-piglit_make_generated_tests(
 | 
			
		||||
-	vs_in_fp64.list
 | 
			
		||||
-	gen_vs_in_fp64.py
 | 
			
		||||
-	templates/gen_vs_in_fp64/columns.shader_test.mako
 | 
			
		||||
-	templates/gen_vs_in_fp64/regular.shader_test.mako)
 | 
			
		||||
 piglit_make_generated_tests(
 | 
			
		||||
	shader_framebuffer_fetch_tests.list
 | 
			
		||||
	gen_shader_framebuffer_fetch_tests.py)
 | 
			
		||||
@@ -279,7 +274,6 @@ add_custom_target(gen-gl-tests
 | 
			
		||||
			gen_extensions_defined.list
 | 
			
		||||
			vp-tex.list
 | 
			
		||||
			variable_index_write_tests.list
 | 
			
		||||
-			vs_in_fp64.list
 | 
			
		||||
			gpu_shader4_tests.list
 | 
			
		||||
 )
 | 
			
		||||
 | 
			
		||||
diff --git a/tests/sanity.py b/tests/sanity.py
 | 
			
		||||
index 12f1614c9..9019087e2 100644
 | 
			
		||||
--- a/tests/sanity.py
 | 
			
		||||
+++ b/tests/sanity.py
 | 
			
		||||
@@ -100,7 +100,6 @@ shader_tests = (
 | 
			
		||||
     'spec/arb_tessellation_shader/execution/barrier-patch.shader_test',
 | 
			
		||||
     'spec/arb_tessellation_shader/execution/built-in-functions/tcs-any-bvec4-using-if.shader_test',
 | 
			
		||||
     'spec/arb_tessellation_shader/execution/sanity.shader_test',
 | 
			
		||||
-    'spec/arb_vertex_attrib_64bit/execution/vs_in/vs-input-uint_uvec4-double_dmat3x4_array2-position.shader_test',
 | 
			
		||||
     'spec/glsl-1.50/execution/geometry-basic.shader_test',
 | 
			
		||||
     'spec/oes_viewport_array/viewport-gs-write-simple.shader_test',
 | 
			
		||||
 )
 | 
			
		||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							@@ -1,29 +0,0 @@
 | 
			
		||||
#!/bin/bash
 | 
			
		||||
 | 
			
		||||
set -e
 | 
			
		||||
set -o xtrace
 | 
			
		||||
 | 
			
		||||
VERSION=`cat install/VERSION`
 | 
			
		||||
 | 
			
		||||
cd /piglit
 | 
			
		||||
 | 
			
		||||
PIGLIT_OPTIONS=$(echo $PIGLIT_OPTIONS | head -n 1)
 | 
			
		||||
xvfb-run --server-args="-noreset" sh -c \
 | 
			
		||||
         "export LD_LIBRARY_PATH=$OLDPWD/install/lib;
 | 
			
		||||
         wflinfo --platform glx --api gl --profile core | grep \"Mesa $VERSION\\\$\" &&
 | 
			
		||||
         ./piglit run -j4 $PIGLIT_OPTIONS $PIGLIT_PROFILES $OLDPWD/results"
 | 
			
		||||
 | 
			
		||||
PIGLIT_RESULTS=${PIGLIT_RESULTS:-$PIGLIT_PROFILES}
 | 
			
		||||
mkdir -p .gitlab-ci/piglit
 | 
			
		||||
cp $OLDPWD/install/piglit/$PIGLIT_RESULTS.txt .gitlab-ci/piglit/$PIGLIT_RESULTS.txt.baseline
 | 
			
		||||
./piglit summary console $OLDPWD/results | head -n -1 | grep -v ": pass" >.gitlab-ci/piglit/$PIGLIT_RESULTS.txt
 | 
			
		||||
 | 
			
		||||
if diff -q .gitlab-ci/piglit/$PIGLIT_RESULTS.txt{.baseline,}; then
 | 
			
		||||
    exit 0
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
./piglit summary html --exclude-details=pass $OLDPWD/summary $OLDPWD/results
 | 
			
		||||
 | 
			
		||||
echo Unexpected change in results:
 | 
			
		||||
diff -u .gitlab-ci/piglit/$PIGLIT_RESULTS.txt{.baseline,}
 | 
			
		||||
exit 1
 | 
			
		||||
@@ -1,49 +0,0 @@
 | 
			
		||||
#!/bin/bash
 | 
			
		||||
 | 
			
		||||
set -e
 | 
			
		||||
set -o xtrace
 | 
			
		||||
 | 
			
		||||
CROSS_FILE=/cross_file-"$CROSS".txt
 | 
			
		||||
 | 
			
		||||
# Delete unused bin and includes from artifacts to save space.
 | 
			
		||||
rm -rf install/bin install/include
 | 
			
		||||
 | 
			
		||||
# Strip the drivers in the artifacts to cut 80% of the artifacts size.
 | 
			
		||||
if [ -n "$CROSS" ]; then
 | 
			
		||||
    STRIP=`sed -n -E "s/strip\s*=\s*'(.*)'/\1/p" "$CROSS_FILE"`
 | 
			
		||||
    if [ -z "$STRIP" ]; then
 | 
			
		||||
        echo "Failed to find strip command in cross file"
 | 
			
		||||
        exit 1
 | 
			
		||||
    fi
 | 
			
		||||
else
 | 
			
		||||
    STRIP="strip"
 | 
			
		||||
fi
 | 
			
		||||
find install -name \*.so -exec $STRIP {} \;
 | 
			
		||||
 | 
			
		||||
# Test runs don't pull down the git tree, so put the dEQP helper
 | 
			
		||||
# script and associated bits there.
 | 
			
		||||
cp VERSION install/
 | 
			
		||||
cp -Rp .gitlab-ci/deqp* install/
 | 
			
		||||
cp -Rp .gitlab-ci/piglit install/
 | 
			
		||||
cp -Rp .gitlab-ci/traces.yml install/
 | 
			
		||||
cp -Rp .gitlab-ci/tracie install/
 | 
			
		||||
cp -Rp .gitlab-ci/tracie-runner-gl.sh install/
 | 
			
		||||
cp -Rp .gitlab-ci/tracie-runner-vk.sh install/
 | 
			
		||||
cp -Rp .gitlab-ci/fossils.yml install/
 | 
			
		||||
cp -Rp .gitlab-ci/fossils install/
 | 
			
		||||
cp -Rp .gitlab-ci/fossilize-runner.sh install/
 | 
			
		||||
cp -Rp .gitlab-ci/deqp-runner.sh install/
 | 
			
		||||
cp -Rp .gitlab-ci/deqp-*-fails.txt install/
 | 
			
		||||
cp -Rp .gitlab-ci/deqp-*-skips.txt install/
 | 
			
		||||
 | 
			
		||||
# Tar up the install dir so that symlinks and hardlinks aren't each
 | 
			
		||||
# packed separately in the zip file.
 | 
			
		||||
mkdir -p artifacts/
 | 
			
		||||
tar -cf artifacts/install.tar install
 | 
			
		||||
 | 
			
		||||
# If the container has LAVA stuff, prepare the artifacts for LAVA jobs
 | 
			
		||||
if [ -d /lava-files ]; then
 | 
			
		||||
    # Pass needed files to the test stage
 | 
			
		||||
    cp $CI_PROJECT_DIR/.gitlab-ci/generate_lava.py artifacts/.
 | 
			
		||||
    cp $CI_PROJECT_DIR/.gitlab-ci/lava-deqp.yml.jinja2 artifacts/.
 | 
			
		||||
fi
 | 
			
		||||
@@ -1,17 +0,0 @@
 | 
			
		||||
set -e
 | 
			
		||||
set -v
 | 
			
		||||
 | 
			
		||||
ARTIFACTSDIR=`pwd`/shader-db
 | 
			
		||||
mkdir -p $ARTIFACTSDIR
 | 
			
		||||
export DRM_SHIM_DEBUG=true
 | 
			
		||||
 | 
			
		||||
LIBDIR=`pwd`/install/lib
 | 
			
		||||
export LD_LIBRARY_PATH=$LIBDIR
 | 
			
		||||
 | 
			
		||||
cd /usr/local/shader-db
 | 
			
		||||
 | 
			
		||||
for driver in freedreno v3d; do
 | 
			
		||||
    env LD_PRELOAD=$LIBDIR/lib${driver}_noop_drm_shim.so \
 | 
			
		||||
        ./run -j 4 ./shaders \
 | 
			
		||||
            > $ARTIFACTSDIR/${driver}-shader-db.txt
 | 
			
		||||
done
 | 
			
		||||
@@ -1,12 +0,0 @@
 | 
			
		||||
#!/bin/bash
 | 
			
		||||
 | 
			
		||||
set -e
 | 
			
		||||
set -o xtrace
 | 
			
		||||
 | 
			
		||||
if test -n "$LLVM_VERSION"; then
 | 
			
		||||
    export LLVM_CONFIG="llvm-config-${LLVM_VERSION}"
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
rm -rf build
 | 
			
		||||
scons $SCONS_TARGET force_scons=on
 | 
			
		||||
eval $SCONS_CHECK_COMMAND 
 | 
			
		||||
@@ -1,147 +0,0 @@
 | 
			
		||||
# This file list source dependencies to avoid creating/running jobs
 | 
			
		||||
# those outcome cannot be changed by the modifications from a branch.
 | 
			
		||||
 | 
			
		||||
# Mesa core source file dependencies
 | 
			
		||||
# ----------------------------------
 | 
			
		||||
.mesa-rules:
 | 
			
		||||
  rules:
 | 
			
		||||
    - changes: &mesa_core_file_list
 | 
			
		||||
      - .gitlab-ci.yml
 | 
			
		||||
      - .gitlab-ci/**/*
 | 
			
		||||
      - include/**/*
 | 
			
		||||
      - meson.build
 | 
			
		||||
      - SConstruct
 | 
			
		||||
      - src/*
 | 
			
		||||
      - src/compiler/**/*
 | 
			
		||||
      - src/drm-shim/**/*
 | 
			
		||||
      - src/egl/**/*
 | 
			
		||||
      - src/gbm/**/*
 | 
			
		||||
      - src/glx/**/*
 | 
			
		||||
      - src/gtest/**/*
 | 
			
		||||
      - src/hgl/**/*
 | 
			
		||||
      - src/include/**/*
 | 
			
		||||
      - src/loader/**/*
 | 
			
		||||
      - src/mapi/**/*
 | 
			
		||||
      - src/mesa/**/*
 | 
			
		||||
      - src/util/**/*
 | 
			
		||||
 | 
			
		||||
# Gallium core source file dependencies
 | 
			
		||||
# -------------------------------------
 | 
			
		||||
.gallium-rules:
 | 
			
		||||
  rules:
 | 
			
		||||
    - changes: &gallium_core_file_list
 | 
			
		||||
      - src/gallium/*
 | 
			
		||||
      - src/gallium/auxiliary/**/*
 | 
			
		||||
      - src/gallium/drivers/*
 | 
			
		||||
      - src/gallium/include/**/*
 | 
			
		||||
      - src/gallium/state_trackers/**/*
 | 
			
		||||
      - src/gallium/targets/**/*
 | 
			
		||||
      - src/gallium/tests/**/*
 | 
			
		||||
      - src/gallium/winsys/*
 | 
			
		||||
 | 
			
		||||
.softpipe-rules:
 | 
			
		||||
  stage: softpipe
 | 
			
		||||
  rules:
 | 
			
		||||
    - changes:
 | 
			
		||||
        *mesa_core_file_list
 | 
			
		||||
      when: on_success
 | 
			
		||||
    - changes:
 | 
			
		||||
        *gallium_core_file_list
 | 
			
		||||
      when: on_success
 | 
			
		||||
    - changes:
 | 
			
		||||
      - src/gallium/drivers/softpipe/**/*
 | 
			
		||||
      - src/gallium/winsys/sw/**/*
 | 
			
		||||
      when: on_success
 | 
			
		||||
    - when: never
 | 
			
		||||
 | 
			
		||||
.llvmpipe-rules:
 | 
			
		||||
  stage: llvmpipe
 | 
			
		||||
  rules:
 | 
			
		||||
    - changes:
 | 
			
		||||
        *mesa_core_file_list
 | 
			
		||||
      when: on_success
 | 
			
		||||
    - changes:
 | 
			
		||||
        *gallium_core_file_list
 | 
			
		||||
      when: on_success
 | 
			
		||||
    - changes: &llvmpipe_file_list
 | 
			
		||||
      - src/gallium/drivers/llvmpipe/**/*
 | 
			
		||||
      - src/gallium/winsys/sw/**/*
 | 
			
		||||
      when: on_success
 | 
			
		||||
    - when: never
 | 
			
		||||
 | 
			
		||||
.freedreno-rules:
 | 
			
		||||
  stage: freedreno
 | 
			
		||||
  rules:
 | 
			
		||||
    - changes:
 | 
			
		||||
        *mesa_core_file_list
 | 
			
		||||
      when: on_success
 | 
			
		||||
    - changes:
 | 
			
		||||
        *gallium_core_file_list
 | 
			
		||||
      when: on_success
 | 
			
		||||
    - changes:
 | 
			
		||||
      - src/freedreno/**/*
 | 
			
		||||
      - src/gallium/drivers/freedreno/**/*
 | 
			
		||||
      - src/gallium/winsys/freedreno/**/*
 | 
			
		||||
      when: on_success
 | 
			
		||||
    - when: never
 | 
			
		||||
 | 
			
		||||
.panfrost-rules:
 | 
			
		||||
  stage: panfrost
 | 
			
		||||
  rules:
 | 
			
		||||
    - changes:
 | 
			
		||||
        *mesa_core_file_list
 | 
			
		||||
      when: on_success
 | 
			
		||||
    - changes:
 | 
			
		||||
        *gallium_core_file_list
 | 
			
		||||
      when: on_success
 | 
			
		||||
    - changes:
 | 
			
		||||
      - src/gallium/drivers/panfrost/**/*
 | 
			
		||||
      - src/gallium/winsys/panfrost/**/*
 | 
			
		||||
      - src/panfrost/**/*
 | 
			
		||||
      when: on_success
 | 
			
		||||
    - when: never
 | 
			
		||||
 | 
			
		||||
.lima-rules:
 | 
			
		||||
  stage: lima
 | 
			
		||||
  rules:
 | 
			
		||||
    - changes:
 | 
			
		||||
        *mesa_core_file_list
 | 
			
		||||
      when: on_success
 | 
			
		||||
    - changes:
 | 
			
		||||
        *gallium_core_file_list
 | 
			
		||||
      when: on_success
 | 
			
		||||
    - changes:
 | 
			
		||||
      - src/gallium/drivers/lima/**/*
 | 
			
		||||
      - src/gallium/winsys/lima/**/*
 | 
			
		||||
      - src/lima/**/*
 | 
			
		||||
      when: on_success
 | 
			
		||||
    - when: never
 | 
			
		||||
 | 
			
		||||
.radv-rules:
 | 
			
		||||
  rules:
 | 
			
		||||
    - changes:
 | 
			
		||||
        *mesa_core_file_list
 | 
			
		||||
      when: on_success
 | 
			
		||||
    - changes:
 | 
			
		||||
      - src/amd/**/*
 | 
			
		||||
      - src/vulkan/**/*
 | 
			
		||||
      when: on_success
 | 
			
		||||
    - when: never
 | 
			
		||||
 | 
			
		||||
.virgl-rules:
 | 
			
		||||
  stage: virgl
 | 
			
		||||
  rules:
 | 
			
		||||
    - changes:
 | 
			
		||||
        *mesa_core_file_list
 | 
			
		||||
      when: on_success
 | 
			
		||||
    - changes:
 | 
			
		||||
        *gallium_core_file_list
 | 
			
		||||
      when: on_success
 | 
			
		||||
    - changes:
 | 
			
		||||
        *llvmpipe_file_list
 | 
			
		||||
      when: on_success
 | 
			
		||||
    - changes:
 | 
			
		||||
      - src/gallium/drivers/virgl/**/*
 | 
			
		||||
      - src/gallium/winsys/virgl/**/*
 | 
			
		||||
      when: on_success
 | 
			
		||||
    - when: never
 | 
			
		||||
@@ -1,35 +0,0 @@
 | 
			
		||||
traces-db:
 | 
			
		||||
  gitlab-project-url: "https://gitlab.freedesktop.org/gfx-ci/tracie/traces-db"
 | 
			
		||||
  commit: "d3b1efe0cd69ef6ae40a29a14ed733ee0ba0cb4c"
 | 
			
		||||
 | 
			
		||||
traces:
 | 
			
		||||
  - path: glmark2/desktop-blur-radius=5:effect=blur:passes=1:separable=true:windows=4.rdc
 | 
			
		||||
    expectations:
 | 
			
		||||
      - device: gl-vmware-llvmpipe
 | 
			
		||||
        checksum: 8867f3a41f180626d0d4b7661ff5c0f4
 | 
			
		||||
      - device: gl-virgl
 | 
			
		||||
        checksum: 8867f3a41f180626d0d4b7661ff5c0f4
 | 
			
		||||
  - path: glmark2/jellyfish.rdc
 | 
			
		||||
    expectations:
 | 
			
		||||
      - device: gl-vmware-llvmpipe
 | 
			
		||||
        checksum: e0fe979fee129c0ed42a3059d1a4e1c9
 | 
			
		||||
      - device: gl-virgl
 | 
			
		||||
        checksum: e0fe979fee129c0ed42a3059d1a4e1c9
 | 
			
		||||
  - path: glxgears/glxgears.trace
 | 
			
		||||
    expectations:
 | 
			
		||||
      - device: gl-vmware-llvmpipe
 | 
			
		||||
        checksum: 02aca9b4b4ad6fd60331df6e4f87f2cd
 | 
			
		||||
      - device: gl-virgl
 | 
			
		||||
        checksum: 02aca9b4b4ad6fd60331df6e4f87f2cd
 | 
			
		||||
  - path: KhronosGroup-Vulkan-Tools/vkcube.gfxr
 | 
			
		||||
    expectations:
 | 
			
		||||
      - device: vk-amd-polaris10
 | 
			
		||||
        checksum: 29dc9e5e55c3de331407248737c23aa7
 | 
			
		||||
  - path: LunarG-VulkanSamples/Hologram:-w:640:-h:480.gfxr
 | 
			
		||||
    expectations:
 | 
			
		||||
      - device: vk-amd-polaris10
 | 
			
		||||
        checksum: 351710942ea93d511cef39ae2d7c68da
 | 
			
		||||
  - path: Wicked-Engine/Tests:Cloth_Physics_Test.trace-dxgi
 | 
			
		||||
    expectations:
 | 
			
		||||
      - device: vk-amd-polaris10
 | 
			
		||||
        checksum: 6b6d27df609b8d086cc3335e6d103581
 | 
			
		||||
@@ -1,49 +0,0 @@
 | 
			
		||||
#!/bin/sh
 | 
			
		||||
 | 
			
		||||
set -ex
 | 
			
		||||
 | 
			
		||||
INSTALL="$(pwd)/install"
 | 
			
		||||
 | 
			
		||||
# Set up the driver environment.
 | 
			
		||||
export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:$(pwd)/install/lib/"
 | 
			
		||||
 | 
			
		||||
# Set environment for renderdoc libraries.
 | 
			
		||||
export PYTHONPATH="$PYTHONPATH:/renderdoc/build/lib"
 | 
			
		||||
export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/renderdoc/build/lib"
 | 
			
		||||
 | 
			
		||||
# Set environment for the waffle library.
 | 
			
		||||
export LD_LIBRARY_PATH="/waffle/build/lib:$LD_LIBRARY_PATH"
 | 
			
		||||
 | 
			
		||||
# Set environment for apitrace executable.
 | 
			
		||||
export PATH="/apitrace/build:$PATH"
 | 
			
		||||
 | 
			
		||||
# Use the surfaceless EGL platform.
 | 
			
		||||
export EGL_PLATFORM="surfaceless"
 | 
			
		||||
export DISPLAY=
 | 
			
		||||
export WAFFLE_PLATFORM="surfaceless_egl"
 | 
			
		||||
 | 
			
		||||
RESULTS=`pwd`/results
 | 
			
		||||
mkdir -p $RESULTS
 | 
			
		||||
 | 
			
		||||
# Perform a self-test to ensure tracie is working properly.
 | 
			
		||||
python3 -m pytest -v --pyargs $INSTALL/tracie/tests/test.py
 | 
			
		||||
 | 
			
		||||
if [ "$GALLIUM_DRIVER" = "virpipe" ]; then
 | 
			
		||||
    # tracie is to use virpipe, and virgl_test_server llvmpipe
 | 
			
		||||
    export GALLIUM_DRIVER="$GALLIUM_DRIVER"
 | 
			
		||||
 | 
			
		||||
    GALLIUM_DRIVER=llvmpipe \
 | 
			
		||||
    GALLIVM_PERF="nopt,no_filter_hacks" \
 | 
			
		||||
    VTEST_USE_EGL_SURFACELESS=1 \
 | 
			
		||||
    VTEST_USE_GLES=1 \
 | 
			
		||||
    virgl_test_server >$RESULTS/vtest-log.txt 2>&1 &
 | 
			
		||||
 | 
			
		||||
    sleep 1
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
# Sanity check to ensure that our environment is sufficient to make our tests
 | 
			
		||||
# run against the Mesa built by CI, rather than any installed distro version.
 | 
			
		||||
MESA_VERSION=$(cat "$INSTALL/VERSION" | sed 's/\./\\./g')
 | 
			
		||||
wflinfo --platform surfaceless_egl --api gles2 | grep "Mesa $MESA_VERSION\(\s\|$\)"
 | 
			
		||||
 | 
			
		||||
python3 "$INSTALL/tracie/tracie.py" --file "$INSTALL/traces.yml" --device-name "$DEVICE_NAME"
 | 
			
		||||
@@ -1,37 +0,0 @@
 | 
			
		||||
#!/bin/sh
 | 
			
		||||
 | 
			
		||||
set -ex
 | 
			
		||||
 | 
			
		||||
INSTALL="$(pwd)/install"
 | 
			
		||||
 | 
			
		||||
# Set the Vulkan driver to use.
 | 
			
		||||
export VK_ICD_FILENAMES="$(pwd)/install/share/vulkan/icd.d/${VK_DRIVER}_icd.x86_64.json"
 | 
			
		||||
 | 
			
		||||
# Set environment for VulkanTools' VK_LAYER_LUNARG_screenshot layer.
 | 
			
		||||
export VK_LAYER_PATH="$VK_LAYER_PATH:/VulkanTools/build/etc/vulkan/explicit_layer.d"
 | 
			
		||||
export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/VulkanTools/build/lib"
 | 
			
		||||
 | 
			
		||||
# Set environment for Wine
 | 
			
		||||
export WINEDEBUG="-all"
 | 
			
		||||
export WINEPREFIX="/dxvk-wine64"
 | 
			
		||||
export WINEESYNC=1
 | 
			
		||||
 | 
			
		||||
# Set environment for DXVK
 | 
			
		||||
export DXVK_LOG_LEVEL="none"
 | 
			
		||||
export DXVK_STATE_CACHE=0
 | 
			
		||||
 | 
			
		||||
# Perform a self-test to ensure tracie is working properly.
 | 
			
		||||
python3 -m pytest -v --pyargs $INSTALL/tracie/tests/test.py
 | 
			
		||||
 | 
			
		||||
# Sanity check to ensure that our environment is sufficient to make our tests
 | 
			
		||||
# run against the Mesa built by CI, rather than any installed distro version.
 | 
			
		||||
MESA_VERSION=$(cat "$INSTALL/VERSION" | sed 's/\./\\./g')
 | 
			
		||||
vulkaninfo | grep "Mesa $MESA_VERSION\(\s\|$\)"
 | 
			
		||||
 | 
			
		||||
# Run gfxreconstruct traces against the host's running X server (xvfb
 | 
			
		||||
# doesn't have DRI3 support).
 | 
			
		||||
# Set the DISPLAY env variable in each gitlab-runner's configuration
 | 
			
		||||
# file:
 | 
			
		||||
# https://docs.gitlab.com/runner/configuration/advanced-configuration.html#the-runners-section
 | 
			
		||||
PATH="/gfxreconstruct/build/bin:$PATH" \
 | 
			
		||||
    python3 "$INSTALL/tracie/tracie.py" --file "$INSTALL/traces.yml" --device-name "$DEVICE_NAME"
 | 
			
		||||
@@ -1,156 +0,0 @@
 | 
			
		||||
Tracie - Mesa Traces Continuous Integration System
 | 
			
		||||
==================================================
 | 
			
		||||
 | 
			
		||||
Home of the Mesa trace testing effort.
 | 
			
		||||
 | 
			
		||||
### Traces definition file
 | 
			
		||||
 | 
			
		||||
The trace definition file contains information about the GitLab
 | 
			
		||||
project and git commit to get the traces from, and a list of the
 | 
			
		||||
traces to run along with their expected image checksums on each
 | 
			
		||||
device. An example:
 | 
			
		||||
 | 
			
		||||
```yaml
 | 
			
		||||
traces-db:
 | 
			
		||||
  gitlab-project-url: https://gitlab.freedesktop.org/gfx-ci/tracie/traces-db
 | 
			
		||||
  commit: master
 | 
			
		||||
 | 
			
		||||
traces:
 | 
			
		||||
  - path: glmark2/jellyfish.rdc
 | 
			
		||||
    expectations:
 | 
			
		||||
      - device: gl-intel-0x3185
 | 
			
		||||
        checksum: 58359ea4caf6ad44c6b65526881bbd17
 | 
			
		||||
      - device: gl-vmware-llvmpipe
 | 
			
		||||
        checksum: d82267c25a0decdad7b563c56bb81106
 | 
			
		||||
  - path: supertuxkart/supertuxkart-antediluvian-abyss.rdc
 | 
			
		||||
    expectations:
 | 
			
		||||
      - device: gl-intel-0x3185
 | 
			
		||||
        checksum: ff827f7eb069afd87cc305a422cba939
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
The `traces-db` entry can be absent, in which case it is assumed that
 | 
			
		||||
the traces can be found in the `CWD/traces-db` directory.
 | 
			
		||||
 | 
			
		||||
Traces that don't have an expectation for the current device are skipped
 | 
			
		||||
during trace replay.
 | 
			
		||||
 | 
			
		||||
Adding a new trace to the list involves commiting the trace to the git repo and
 | 
			
		||||
adding an entry to the `traces` list. The reference checksums can be calculated
 | 
			
		||||
with the [image_checksum.py](.gitlab-ci/tracie/image_checksum.py) script.
 | 
			
		||||
Alternatively, an arbitrary checksum can be used, and during replay (see below)
 | 
			
		||||
the scripts will report the mismatch and expected checksum.
 | 
			
		||||
 | 
			
		||||
### Trace-db GitLab projects
 | 
			
		||||
 | 
			
		||||
The trace-db GitLab projects are assumed to have git repositories
 | 
			
		||||
using LFS for their trace files. This is so that trace files can be
 | 
			
		||||
potentially checked out and replayed individually, thus reducing
 | 
			
		||||
storage requirements during CI runs.
 | 
			
		||||
 | 
			
		||||
### Enabling trace testing on a new device
 | 
			
		||||
 | 
			
		||||
To enable trace testing on a new device:
 | 
			
		||||
 | 
			
		||||
1. Create a new job in .gitlab-ci.yml. The job will need to be tagged
 | 
			
		||||
   to run on runners with the appropriate hardware.
 | 
			
		||||
 | 
			
		||||
   1. If you mean to test GL traces, use the `.traces-test-gl`
 | 
			
		||||
      template jobs as a base, and make sure you set a unique value for the
 | 
			
		||||
     `DEVICE_NAME` variable:
 | 
			
		||||
 | 
			
		||||
   ```yaml
 | 
			
		||||
   my-hardware-gl-traces:
 | 
			
		||||
     extends: .traces-test-gl
 | 
			
		||||
     variables:
 | 
			
		||||
       DEVICE_NAME: "gl-myhardware"
 | 
			
		||||
   ```
 | 
			
		||||
 | 
			
		||||
   2. If you mean to test Vulkan traces, use the `.traces-test-vk`
 | 
			
		||||
      template jobs as a base, set the `VK_DRIVER` variable, and make
 | 
			
		||||
      sure you set a unique value for the `DEVICE_NAME` variable:
 | 
			
		||||
 | 
			
		||||
   ```yaml
 | 
			
		||||
   my-hardware-vk-traces:
 | 
			
		||||
     extends: .traces-test-vk
 | 
			
		||||
     variables:
 | 
			
		||||
       VK_DRIVER: "radeon"
 | 
			
		||||
       DEVICE_NAME: "vk-myhardware"
 | 
			
		||||
   ```
 | 
			
		||||
 | 
			
		||||
2. Update the .gitlab-ci/traces.yml file with expectations for the new device.
 | 
			
		||||
   Ensure that the device name used in the expectations matches the one
 | 
			
		||||
   set in the job. For more information, and tips about how to calculate
 | 
			
		||||
   the checksums, see the section describing the trace definition files.
 | 
			
		||||
 | 
			
		||||
### Trace files
 | 
			
		||||
 | 
			
		||||
Tracie supports renderdoc (.rdc), apitrace (.trace) and gfxreconstruct
 | 
			
		||||
(.gfxr) files. Trace files need to have the correct extension so that
 | 
			
		||||
tracie can detect them properly.
 | 
			
		||||
 | 
			
		||||
The trace files that are contained in public traces-db repositories must be
 | 
			
		||||
legally redistributable. This is typically true for FOSS games and
 | 
			
		||||
applications. Traces for proprietary games and application are typically not
 | 
			
		||||
redistributable, unless specific redistribution rights have been granted by the
 | 
			
		||||
publisher.
 | 
			
		||||
 | 
			
		||||
### Replaying traces
 | 
			
		||||
 | 
			
		||||
Mesa traces CI uses a set of scripts to replay traces and check the output
 | 
			
		||||
against reference checksums.
 | 
			
		||||
 | 
			
		||||
The high level script [tracie.py](.gitlab-ci/tracie/tracie.py) accepts
 | 
			
		||||
a traces definition file and the name of the device to be tested:
 | 
			
		||||
 | 
			
		||||
    tracie.py --file .gitlab-ci/traces.yml --device-name gl-vmware-llvmpipe
 | 
			
		||||
 | 
			
		||||
tracie.py copies the produced artifacts to the `$CI_PROJECT_DIR/result`
 | 
			
		||||
directory. By default, created images from traces are only stored in case of a
 | 
			
		||||
checksum mismatch. The `TRACIE_STORE_IMAGES` CI/environment variable can be set
 | 
			
		||||
to `1` to force storing images, e.g., to get a complete set of reference
 | 
			
		||||
images.
 | 
			
		||||
 | 
			
		||||
At a lower level the
 | 
			
		||||
[dump_trace_images.py](.gitlab-ci/tracie/dump_trace_images.py) script is
 | 
			
		||||
called, which replays a trace, dumping a set of images in the process. By
 | 
			
		||||
default only the image corresponding to the last frame of the trace is dumped,
 | 
			
		||||
but this can be changed with the `--calls` parameter. The dumped images are
 | 
			
		||||
stored in a subdirectory `test/<device-name>` next to the trace file itself,
 | 
			
		||||
with names of the form `tracefilename-callnum.png`.  The full log of any
 | 
			
		||||
commands used while dumping the images is also saved in a file in the
 | 
			
		||||
'test/<device-name>' subdirectory, named after the trace name with '.log'
 | 
			
		||||
appended.
 | 
			
		||||
 | 
			
		||||
Examples:
 | 
			
		||||
 | 
			
		||||
    python3 dump_traces_images.py --device-name=gl-vmware-llvmpipe mytrace.trace
 | 
			
		||||
    python3 dump_traces_images.py --device-name=gl-vmware-llvmpipe --calls=2075,3300 mytrace.trace
 | 
			
		||||
 | 
			
		||||
### Running the replay scripts locally
 | 
			
		||||
 | 
			
		||||
It's often useful, especially during development, to be able to run the scripts
 | 
			
		||||
locally.
 | 
			
		||||
 | 
			
		||||
Depending on the target 3D API, the scripts require a recent version
 | 
			
		||||
of apitrace being in the path, and also the renderdoc python module
 | 
			
		||||
being available, for GL traces.
 | 
			
		||||
 | 
			
		||||
To ensure python3 can find the renderdoc python module you need to set
 | 
			
		||||
`PYTHONPATH` to point to the location of `renderdoc.so` (binary python modules)
 | 
			
		||||
and `LD_LIBRARY_PATH` to point to the location of `librenderdoc.so`. In the
 | 
			
		||||
renderdoc build tree, both of these are in `renderdoc/<builddir>/lib`. Note
 | 
			
		||||
that renderdoc doesn't install the `renderdoc.so` python module.
 | 
			
		||||
 | 
			
		||||
In the case of Vulkan traces, the scripts need a recent version of
 | 
			
		||||
gfxrecon-replay being in the path, and also the
 | 
			
		||||
`VK_LAYER_LUNARG_screenshot` Vulkan layer from LunarG's VulkanTools.
 | 
			
		||||
 | 
			
		||||
To ensure that this layer can be found when running the trace you need
 | 
			
		||||
to set `VK_LAYER_PATH` to point to the location of
 | 
			
		||||
`VkLayer_screenshot.json` and `LD_LIBRARY_PATH` to point to the
 | 
			
		||||
location of `libVkLayer_screenshot.so`.
 | 
			
		||||
 | 
			
		||||
In the case of DXGI traces, the scripts require Wine, a recent version
 | 
			
		||||
of DXVK installed in the default `WINEPREFIX`, and a recent binary
 | 
			
		||||
version of apitrace for Windows which should be reachable through
 | 
			
		||||
Windows' `PATH` environment variable.
 | 
			
		||||
@@ -1,180 +0,0 @@
 | 
			
		||||
#!/usr/bin/python3
 | 
			
		||||
 | 
			
		||||
# Copyright (c) 2019 Collabora Ltd
 | 
			
		||||
# Copyright © 2019-2020 Valve 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.
 | 
			
		||||
#
 | 
			
		||||
# SPDX-License-Identifier: MIT
 | 
			
		||||
 | 
			
		||||
import argparse
 | 
			
		||||
import os
 | 
			
		||||
import sys
 | 
			
		||||
import subprocess
 | 
			
		||||
from pathlib import Path
 | 
			
		||||
from traceutil import trace_type_from_filename, TraceType
 | 
			
		||||
 | 
			
		||||
def log(severity, msg, end='\n'):
 | 
			
		||||
    print("[dump_trace_images] %s: %s" % (severity, msg), flush=True, end=end)
 | 
			
		||||
 | 
			
		||||
def log_result(msg):
 | 
			
		||||
    print(msg, flush=True)
 | 
			
		||||
 | 
			
		||||
def run_logged_command(cmd, env, log_path):
 | 
			
		||||
    ret = subprocess.run(cmd, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, env=env)
 | 
			
		||||
    logoutput = ("[dump_trace_images] Running: %s\n" % " ".join(cmd)).encode() + \
 | 
			
		||||
                ret.stdout
 | 
			
		||||
    log_path.parent.mkdir(parents=True, exist_ok=True)
 | 
			
		||||
    with log_path.open(mode='wb') as log:
 | 
			
		||||
        log.write(logoutput)
 | 
			
		||||
    if ret.returncode:
 | 
			
		||||
        raise RuntimeError(
 | 
			
		||||
            logoutput.decode(errors='replace') +
 | 
			
		||||
            "[dump_traces_images] Process failed with error code: %d" % ret.returncode)
 | 
			
		||||
 | 
			
		||||
def get_last_apitrace_frame_call(cmd_wrapper, trace_path):
 | 
			
		||||
    cmd = cmd_wrapper + ["apitrace", "dump", "--calls=frame", str(trace_path)]
 | 
			
		||||
    ret = subprocess.run(cmd, stdout=subprocess.PIPE)
 | 
			
		||||
    for l in reversed(ret.stdout.decode(errors='replace').splitlines()):
 | 
			
		||||
        s = l.split(None, 1)
 | 
			
		||||
        if len(s) >= 1 and s[0].isnumeric():
 | 
			
		||||
            return int(s[0])
 | 
			
		||||
    return -1
 | 
			
		||||
 | 
			
		||||
def get_last_gfxreconstruct_frame_call(trace_path):
 | 
			
		||||
    # FIXME: It would be great to have another way to get the amount of
 | 
			
		||||
    # traces which wouldn't imply replaying the whole trace:
 | 
			
		||||
    # https://github.com/LunarG/gfxreconstruct/issues/329
 | 
			
		||||
    cmd = ["gfxrecon-replay", str(trace_path)]
 | 
			
		||||
    ret = subprocess.run(cmd, stdout=subprocess.PIPE)
 | 
			
		||||
    for l in reversed(ret.stdout.decode(errors='replace').splitlines()):
 | 
			
		||||
        s = l.split(", ", 2)
 | 
			
		||||
        if len(s) >= 3:
 | 
			
		||||
            c = s[2].split(None, 1)
 | 
			
		||||
            if len(c) >= 1 and c[0].isnumeric():
 | 
			
		||||
                return int(c[0])
 | 
			
		||||
    return -1
 | 
			
		||||
 | 
			
		||||
def dump_with_apitrace(retrace_cmd, trace_path, calls, device_name):
 | 
			
		||||
    outputdir = str(trace_path.parent / "test" / device_name)
 | 
			
		||||
    os.makedirs(outputdir, exist_ok=True)
 | 
			
		||||
    outputprefix = str(Path(outputdir) / trace_path.name) + "-"
 | 
			
		||||
    if len(calls) == 0:
 | 
			
		||||
        calls = [str(get_last_apitrace_frame_call(retrace_cmd[:-1], trace_path))]
 | 
			
		||||
    cmd = retrace_cmd + ["--headless",
 | 
			
		||||
                         "--snapshot=" + ','.join(calls),
 | 
			
		||||
                         "--snapshot-prefix=" + outputprefix, str(trace_path)]
 | 
			
		||||
    log_path = Path(outputdir) / (trace_path.name + ".log")
 | 
			
		||||
    run_logged_command(cmd, None, log_path)
 | 
			
		||||
 | 
			
		||||
def dump_with_renderdoc(trace_path, calls, device_name):
 | 
			
		||||
    outputdir = str(trace_path.parent / "test" / device_name)
 | 
			
		||||
    script_path = Path(os.path.dirname(os.path.abspath(__file__)))
 | 
			
		||||
    cmd = [str(script_path / "renderdoc_dump_images.py"), str(trace_path), outputdir]
 | 
			
		||||
    cmd.extend(calls)
 | 
			
		||||
    log_path = Path(outputdir) / (trace_path.name + ".log")
 | 
			
		||||
    run_logged_command(cmd, None, log_path)
 | 
			
		||||
 | 
			
		||||
def dump_with_gfxreconstruct(trace_path, calls, device_name):
 | 
			
		||||
    from PIL import Image
 | 
			
		||||
    outputdir_path = trace_path.parent / "test" / device_name
 | 
			
		||||
    outputdir_path.mkdir(parents=True, exist_ok=True)
 | 
			
		||||
    outputprefix = str(outputdir_path / trace_path.name) + "-"
 | 
			
		||||
    if len(calls) == 0:
 | 
			
		||||
        # FIXME: The VK_LAYER_LUNARG_screenshot numbers the calls from
 | 
			
		||||
        # 0 to (total-num-calls - 1) while gfxreconstruct does it from
 | 
			
		||||
        # 1 to total-num-calls:
 | 
			
		||||
        # https://github.com/LunarG/gfxreconstruct/issues/284
 | 
			
		||||
        calls = [str(get_last_gfxreconstruct_frame_call(trace_path) - 1)]
 | 
			
		||||
    cmd = ["gfxrecon-replay", str(trace_path)]
 | 
			
		||||
    log_path = outputdir_path / (trace_path.name + ".log")
 | 
			
		||||
    env = os.environ.copy()
 | 
			
		||||
    env["VK_INSTANCE_LAYERS"] = "VK_LAYER_LUNARG_screenshot"
 | 
			
		||||
    env["VK_SCREENSHOT_FRAMES"] = ",".join(calls)
 | 
			
		||||
    env["VK_SCREENSHOT_DIR"] = str(outputdir_path)
 | 
			
		||||
    run_logged_command(cmd, env, log_path)
 | 
			
		||||
    for c in calls:
 | 
			
		||||
        ppm = str(outputdir_path / c) + ".ppm"
 | 
			
		||||
        outputfile = outputprefix + c + ".png"
 | 
			
		||||
        with log_path.open(mode='w') as log:
 | 
			
		||||
            log.write("Writing: %s to %s" % (ppm, outputfile))
 | 
			
		||||
        Image.open(ppm).save(outputfile)
 | 
			
		||||
        os.remove(ppm)
 | 
			
		||||
 | 
			
		||||
def dump_with_testtrace(trace_path, calls, device_name):
 | 
			
		||||
    from PIL import Image
 | 
			
		||||
    outputdir_path = trace_path.parent / "test" / device_name
 | 
			
		||||
    outputdir_path.mkdir(parents=True, exist_ok=True)
 | 
			
		||||
    with trace_path.open() as f:
 | 
			
		||||
        rgba = f.read()
 | 
			
		||||
    color = [int(rgba[0:2], 16), int(rgba[2:4], 16),
 | 
			
		||||
             int(rgba[4:6], 16), int(rgba[6:8], 16)]
 | 
			
		||||
    if len(calls) == 0: calls = ["0"]
 | 
			
		||||
    for c in calls:
 | 
			
		||||
        outputfile = str(outputdir_path / trace_path.name) + "-" + c + ".png"
 | 
			
		||||
        log_path = outputdir_path / (trace_path.name + ".log")
 | 
			
		||||
        with log_path.open(mode='w') as log:
 | 
			
		||||
            log.write("Writing RGBA: %s to %s" % (rgba, outputfile))
 | 
			
		||||
        Image.frombytes('RGBA', (32, 32), bytes(color * 32 * 32)).save(outputfile)
 | 
			
		||||
 | 
			
		||||
def dump_from_trace(trace_path, calls, device_name):
 | 
			
		||||
    log("Info", "Dumping trace %s" % trace_path, end='... ')
 | 
			
		||||
    trace_type = trace_type_from_filename(trace_path.name)
 | 
			
		||||
    try:
 | 
			
		||||
        if trace_type == TraceType.APITRACE:
 | 
			
		||||
            dump_with_apitrace(["eglretrace"], trace_path, calls, device_name)
 | 
			
		||||
        elif trace_type == TraceType.APITRACE_DXGI:
 | 
			
		||||
            dump_with_apitrace(["wine", "d3dretrace"], trace_path, calls, device_name)
 | 
			
		||||
        elif trace_type == TraceType.RENDERDOC:
 | 
			
		||||
            dump_with_renderdoc(trace_path, calls, device_name)
 | 
			
		||||
        elif trace_type == TraceType.GFXRECONSTRUCT:
 | 
			
		||||
            dump_with_gfxreconstruct(trace_path, calls, device_name)
 | 
			
		||||
        elif trace_type == TraceType.TESTTRACE:
 | 
			
		||||
            dump_with_testtrace(trace_path, calls, device_name)
 | 
			
		||||
        else:
 | 
			
		||||
            raise RuntimeError("Unknown tracefile extension")
 | 
			
		||||
        log_result("OK")
 | 
			
		||||
        return True
 | 
			
		||||
    except Exception as e:
 | 
			
		||||
        log_result("ERROR")
 | 
			
		||||
        log("Debug", "=== Failure log start ===")
 | 
			
		||||
        print(e)
 | 
			
		||||
        log("Debug", "=== Failure log end ===")
 | 
			
		||||
        return False
 | 
			
		||||
 | 
			
		||||
def main():
 | 
			
		||||
    parser = argparse.ArgumentParser()
 | 
			
		||||
    parser.add_argument('tracepath', help="trace to dump")
 | 
			
		||||
    parser.add_argument('--device-name', required=True,
 | 
			
		||||
                        help="the name of the graphics device used to produce images")
 | 
			
		||||
    parser.add_argument('--calls', required=False,
 | 
			
		||||
                        help="the call numbers from the trace to dump (default: last frame)")
 | 
			
		||||
 | 
			
		||||
    args = parser.parse_args()
 | 
			
		||||
    if args.calls is not None:
 | 
			
		||||
        args.calls = args.calls.split(",")
 | 
			
		||||
    else:
 | 
			
		||||
        args.calls = []
 | 
			
		||||
 | 
			
		||||
    success = dump_from_trace(Path(args.tracepath), args.calls, args.device_name)
 | 
			
		||||
 | 
			
		||||
    sys.exit(0 if success else 1)
 | 
			
		||||
 | 
			
		||||
if __name__ == "__main__":
 | 
			
		||||
    main()
 | 
			
		||||
Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user