Compare commits
	
		
			86 Commits
		
	
	
		
			mesa-20.0.
			...
			arc-mesa-1
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						 | 
					2e7833ad91 | ||
| 
						 | 
					0a2e4b02ca | ||
| 
						 | 
					c7fc61d15b | ||
| 
						 | 
					1b093b567f | ||
| 
						 | 
					d73e48b63f | ||
| 
						 | 
					ba24ca67f6 | ||
| 
						 | 
					110500cc8a | ||
| 
						 | 
					0b9f6ebfbb | ||
| 
						 | 
					69ebf4569a | ||
| 
						 | 
					385b736238 | ||
| 
						 | 
					4cf1a40f9a | ||
| 
						 | 
					81e053b757 | ||
| 
						 | 
					f30fb27665 | ||
| 
						 | 
					1039285288 | ||
| 
						 | 
					59812ac38d | ||
| 
						 | 
					c19ce6e5e2 | ||
| 
						 | 
					eba57c29b0 | ||
| 
						 | 
					e304007d87 | ||
| 
						 | 
					b4419fdba5 | ||
| 
						 | 
					7ac15d9e42 | ||
| 
						 | 
					6b48451110 | ||
| 
						 | 
					838baab472 | ||
| 
						 | 
					d8534f931c | ||
| 
						 | 
					1f33f3cf3a | ||
| 
						 | 
					fbcd1ad42c | ||
| 
						 | 
					9a5c8d2aab | ||
| 
						 | 
					c55008e5a0 | ||
| 
						 | 
					ab585817e6 | ||
| 
						 | 
					75bec50c2a | ||
| 
						 | 
					62b3bd8cd1 | ||
| 
						 | 
					fb3485bc92 | ||
| 
						 | 
					2a97a3a8e7 | ||
| 
						 | 
					ab70eccc75 | ||
| 
						 | 
					24bb2771b6 | ||
| 
						 | 
					7b5e0f8316 | ||
| 
						 | 
					77102d0151 | ||
| 
						 | 
					c96d433105 | ||
| 
						 | 
					81810fa5db | ||
| 
						 | 
					c5b9774eb4 | ||
| 
						 | 
					a08aba86da | ||
| 
						 | 
					d278b3c187 | ||
| 
						 | 
					5a9b7bce9c | ||
| 
						 | 
					b9e5e15f87 | ||
| 
						 | 
					f305135e0b | ||
| 
						 | 
					eb766a259e | ||
| 
						 | 
					a1ae60e9a3 | ||
| 
						 | 
					37ade3a566 | ||
| 
						 | 
					92fa6d6959 | ||
| 
						 | 
					5e85df1cfd | ||
| 
						 | 
					e9dc4e252f | ||
| 
						 | 
					56a47e3421 | ||
| 
						 | 
					ca36eb12fd | ||
| 
						 | 
					9dd433dfa7 | ||
| 
						 | 
					f59c77ef8c | ||
| 
						 | 
					61c22ba94b | ||
| 
						 | 
					ad2b712a56 | ||
| 
						 | 
					07e299a0a0 | ||
| 
						 | 
					36d99d9ad0 | ||
| 
						 | 
					94f0908216 | ||
| 
						 | 
					f880c74717 | ||
| 
						 | 
					6f36d3bbc0 | ||
| 
						 | 
					b4e8a3294c | ||
| 
						 | 
					ef6809ba88 | ||
| 
						 | 
					7254d2f4a3 | ||
| 
						 | 
					dbc43e3897 | ||
| 
						 | 
					262fd16b99 | ||
| 
						 | 
					452f9b9984 | ||
| 
						 | 
					131f12d49f | ||
| 
						 | 
					f8f68c41a1 | ||
| 
						 | 
					15e2fc16e9 | ||
| 
						 | 
					3f5099180d | ||
| 
						 | 
					9667d89fe6 | ||
| 
						 | 
					c6649ca94d | ||
| 
						 | 
					89f84f98e0 | ||
| 
						 | 
					c824f8031c | ||
| 
						 | 
					7fdb08375f | ||
| 
						 | 
					535cc4f1d5 | ||
| 
						 | 
					7f91ae20b9 | ||
| 
						 | 
					0a72505a9e | ||
| 
						 | 
					31d0079a20 | ||
| 
						 | 
					4d1dd3b0cd | ||
| 
						 | 
					45d1aa2f6c | ||
| 
						 | 
					2fddad9e3f | ||
| 
						 | 
					2b603ee4f1 | ||
| 
						 | 
					e7f6a5d17f | ||
| 
						 | 
					1f5f12687f | 
@@ -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')
 | 
			
		||||
@@ -32,13 +32,9 @@ indent_size = 2
 | 
			
		||||
indent_style = space
 | 
			
		||||
indent_size = 2
 | 
			
		||||
 | 
			
		||||
[*.html]
 | 
			
		||||
indent_style = space
 | 
			
		||||
indent_size = 2
 | 
			
		||||
 | 
			
		||||
[*.patch]
 | 
			
		||||
trim_trailing_whitespace = false
 | 
			
		||||
 | 
			
		||||
[{meson.build,meson_options.txt}]
 | 
			
		||||
[meson.build,meson_options.txt]
 | 
			
		||||
indent_style = space
 | 
			
		||||
indent_size = 2
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										4
									
								
								.gitattributes
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								.gitattributes
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,4 @@
 | 
			
		||||
*.dsp -crlf
 | 
			
		||||
*.dsw -crlf
 | 
			
		||||
*.sln -crlf
 | 
			
		||||
*.vcproj -crlf
 | 
			
		||||
							
								
								
									
										52
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										52
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							@@ -1,4 +1,54 @@
 | 
			
		||||
*.a
 | 
			
		||||
*.dll
 | 
			
		||||
*.exe
 | 
			
		||||
*.ilk
 | 
			
		||||
*.la
 | 
			
		||||
*.lo
 | 
			
		||||
*.log
 | 
			
		||||
*.o
 | 
			
		||||
*.obj
 | 
			
		||||
*.orig
 | 
			
		||||
*.os
 | 
			
		||||
*.pc
 | 
			
		||||
*.pdb
 | 
			
		||||
*.pyc
 | 
			
		||||
*.pyo
 | 
			
		||||
*.out
 | 
			
		||||
*.rej
 | 
			
		||||
*.so
 | 
			
		||||
*.so.*
 | 
			
		||||
*.sw[a-z]
 | 
			
		||||
*.tar
 | 
			
		||||
*.tar.bz2
 | 
			
		||||
*.tar.gz
 | 
			
		||||
*.tar.xz
 | 
			
		||||
*.trs
 | 
			
		||||
*.zip
 | 
			
		||||
*~
 | 
			
		||||
depend
 | 
			
		||||
depend.bak
 | 
			
		||||
bin/ltmain.sh
 | 
			
		||||
lib
 | 
			
		||||
lib64
 | 
			
		||||
configure
 | 
			
		||||
configure.lineno
 | 
			
		||||
autom4te.cache
 | 
			
		||||
aclocal.m4
 | 
			
		||||
config.log
 | 
			
		||||
config.status
 | 
			
		||||
cscope*
 | 
			
		||||
tags
 | 
			
		||||
.scon*
 | 
			
		||||
config.py
 | 
			
		||||
build
 | 
			
		||||
libtool
 | 
			
		||||
manifest.txt
 | 
			
		||||
.dir-locals.el
 | 
			
		||||
.deps/
 | 
			
		||||
.dirstamp
 | 
			
		||||
.libs/
 | 
			
		||||
Makefile
 | 
			
		||||
Makefile.in
 | 
			
		||||
.install-mesa-links
 | 
			
		||||
.install-gallium-links
 | 
			
		||||
/src/git_sha1.h
 | 
			
		||||
TAGS
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										690
									
								
								.gitlab-ci.yml
									
									
									
									
									
								
							
							
						
						
									
										690
									
								
								.gitlab-ci.yml
									
									
									
									
									
								
							@@ -1,690 +0,0 @@
 | 
			
		||||
variables:
 | 
			
		||||
  UPSTREAM_REPO: mesa/mesa
 | 
			
		||||
 | 
			
		||||
include:
 | 
			
		||||
  - project: 'wayland/ci-templates'
 | 
			
		||||
    # Must be the same as in .gitlab-ci/lava-gitlab-ci.yml
 | 
			
		||||
    ref: 0a9bdd33a98f05af6761ab118b5074952242aab0
 | 
			
		||||
    file: '/templates/debian.yml'
 | 
			
		||||
  - local: '.gitlab-ci/lava-gitlab-ci.yml'
 | 
			
		||||
 | 
			
		||||
stages:
 | 
			
		||||
  - container
 | 
			
		||||
  - build
 | 
			
		||||
  - test
 | 
			
		||||
  - success
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# When to automatically run the CI
 | 
			
		||||
.ci-run-policy:
 | 
			
		||||
  rules:
 | 
			
		||||
    # Run pipeline by default for merge requests changing files affecting it
 | 
			
		||||
    - if: '$CI_MERGE_REQUEST_SOURCE_BRANCH_NAME == $CI_COMMIT_REF_NAME'
 | 
			
		||||
      changes: &paths
 | 
			
		||||
      - VERSION
 | 
			
		||||
      - bin/**/*
 | 
			
		||||
      # GitLab CI
 | 
			
		||||
      - .gitlab-ci.yml
 | 
			
		||||
      - .gitlab-ci/**/*
 | 
			
		||||
      # Meson
 | 
			
		||||
      - meson*
 | 
			
		||||
      - build-support/**/*
 | 
			
		||||
      - subprojects/**/*
 | 
			
		||||
      # SCons
 | 
			
		||||
      - SConstruct
 | 
			
		||||
      - scons/**/*
 | 
			
		||||
      - common.py
 | 
			
		||||
      # Source code
 | 
			
		||||
      - include/**/*
 | 
			
		||||
      - src/**/*
 | 
			
		||||
      when: on_success
 | 
			
		||||
    # Run pipeline by default in the main project if files affecting it were
 | 
			
		||||
    # changed
 | 
			
		||||
    - if: '$CI_PROJECT_PATH == "mesa/mesa"'
 | 
			
		||||
      changes:
 | 
			
		||||
        *paths
 | 
			
		||||
      when: on_success
 | 
			
		||||
    # Allow triggering jobs manually on branches of forked projects
 | 
			
		||||
    - if: '$CI_PROJECT_PATH != "mesa/mesa" && $CI_MERGE_REQUEST_SOURCE_BRANCH_NAME != $CI_COMMIT_REF_NAME'
 | 
			
		||||
      when: manual
 | 
			
		||||
    # Otherwise, most jobs won't run
 | 
			
		||||
    - when: never
 | 
			
		||||
  retry:
 | 
			
		||||
    max: 2
 | 
			
		||||
    when:
 | 
			
		||||
      - runner_system_failure
 | 
			
		||||
  # Cancel CI run if a newer commit is pushed to the same branch
 | 
			
		||||
  interruptible: true
 | 
			
		||||
 | 
			
		||||
success:
 | 
			
		||||
  stage: success
 | 
			
		||||
  image: debian:stable-slim
 | 
			
		||||
  only:
 | 
			
		||||
    - merge_requests
 | 
			
		||||
  except:
 | 
			
		||||
    changes:
 | 
			
		||||
      *paths
 | 
			
		||||
  variables:
 | 
			
		||||
    GIT_STRATEGY: none
 | 
			
		||||
  script:
 | 
			
		||||
    - echo "Dummy job to make sure every merge request pipeline runs at least one job"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
.ci-deqp-artifacts:
 | 
			
		||||
  artifacts:
 | 
			
		||||
    when: always
 | 
			
		||||
    untracked: false
 | 
			
		||||
    paths:
 | 
			
		||||
      # Watch out!  Artifacts are relative to the build dir.
 | 
			
		||||
      # https://gitlab.com/gitlab-org/gitlab-ce/commit/8788fb925706cad594adf6917a6c5f6587dd1521
 | 
			
		||||
      - artifacts
 | 
			
		||||
 | 
			
		||||
# Build the CI docker images.
 | 
			
		||||
#
 | 
			
		||||
# DEBIAN_TAG is the tag of the docker image used by later stage jobs. If the
 | 
			
		||||
# image doesn't exist yet, the container stage job generates it.
 | 
			
		||||
#
 | 
			
		||||
# In order to generate a new image, one should generally change the tag.
 | 
			
		||||
# While removing the image from the registry would also work, that's not
 | 
			
		||||
# recommended except for ephemeral images during development: Replacing
 | 
			
		||||
# an image after a significant amount of time might pull in newer
 | 
			
		||||
# versions of gcc/clang or other packages, which might break the build
 | 
			
		||||
# with older commits using the same tag.
 | 
			
		||||
#
 | 
			
		||||
# After merging a change resulting in generating a new image to the
 | 
			
		||||
# main repository, it's recommended to remove the image from the source
 | 
			
		||||
# repository's container registry, so that the image from the main
 | 
			
		||||
# repository's registry will be used there as well.
 | 
			
		||||
 | 
			
		||||
.container:
 | 
			
		||||
  stage: container
 | 
			
		||||
  extends:
 | 
			
		||||
    - .ci-run-policy
 | 
			
		||||
  variables:
 | 
			
		||||
    DEBIAN_VERSION: buster-slim
 | 
			
		||||
    REPO_SUFFIX: $CI_JOB_NAME
 | 
			
		||||
    DEBIAN_EXEC: 'bash .gitlab-ci/container/${CI_JOB_NAME}.sh'
 | 
			
		||||
    # no need to pull the whole repo to build the container image
 | 
			
		||||
    GIT_STRATEGY: none
 | 
			
		||||
 | 
			
		||||
# Debian 10 based x86 build image
 | 
			
		||||
x86_build:
 | 
			
		||||
  extends:
 | 
			
		||||
    - .debian@container-ifnot-exists
 | 
			
		||||
    - .container
 | 
			
		||||
  variables:
 | 
			
		||||
    DEBIAN_TAG: &x86_build "2020-01-14"
 | 
			
		||||
 | 
			
		||||
.use-x86_build:
 | 
			
		||||
  variables:
 | 
			
		||||
    TAG: *x86_build
 | 
			
		||||
  image: "$CI_REGISTRY_IMAGE/debian/x86_build:$TAG"
 | 
			
		||||
  needs:
 | 
			
		||||
    - x86_build
 | 
			
		||||
 | 
			
		||||
# Debian 10 based x86 test image for GL
 | 
			
		||||
x86_test-gl:
 | 
			
		||||
  extends: x86_build
 | 
			
		||||
  variables:
 | 
			
		||||
    DEBIAN_TAG: &x86_test-gl "2020-01-14"
 | 
			
		||||
 | 
			
		||||
# Debian 10 based x86 test image for VK
 | 
			
		||||
x86_test-vk:
 | 
			
		||||
  extends: x86_build
 | 
			
		||||
  variables:
 | 
			
		||||
    DEBIAN_TAG: &x86_test-vk "2020-01-14"
 | 
			
		||||
  # Can only be triggered manually on personal branches because RADV is the only
 | 
			
		||||
  # driver that does Vulkan testing at the moment.
 | 
			
		||||
  rules:
 | 
			
		||||
    # Never build the test image for VK by default in the main project.
 | 
			
		||||
    - if: '$CI_PROJECT_PATH == "mesa/mesa"'
 | 
			
		||||
      when: never
 | 
			
		||||
    # Never build the test image for VK by default for merge requests.
 | 
			
		||||
    - if: '$CI_MERGE_REQUEST_SOURCE_BRANCH_NAME == $CI_COMMIT_REF_NAME'
 | 
			
		||||
      when: never
 | 
			
		||||
    # Otherwise, allow building it manually for personal branches.
 | 
			
		||||
    - when: manual
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Debian 9 based x86 build image (old LLVM)
 | 
			
		||||
x86_build_old:
 | 
			
		||||
  extends: x86_build
 | 
			
		||||
  variables:
 | 
			
		||||
    DEBIAN_TAG: &x86_build_old "2019-09-18"
 | 
			
		||||
    DEBIAN_VERSION: stretch-slim
 | 
			
		||||
 | 
			
		||||
.use-x86_build_old:
 | 
			
		||||
  variables:
 | 
			
		||||
    TAG: *x86_build_old
 | 
			
		||||
  image: "$CI_REGISTRY_IMAGE/debian/x86_build_old:$TAG"
 | 
			
		||||
  needs:
 | 
			
		||||
    - x86_build_old
 | 
			
		||||
 | 
			
		||||
# Debian 10 based ARM build image
 | 
			
		||||
arm_build:
 | 
			
		||||
  extends:
 | 
			
		||||
    - .debian@container-ifnot-exists@arm64v8
 | 
			
		||||
    - .container
 | 
			
		||||
  variables:
 | 
			
		||||
    DEBIAN_TAG: &arm_build "2020-01-14"
 | 
			
		||||
 | 
			
		||||
.use-arm_build:
 | 
			
		||||
  variables:
 | 
			
		||||
    TAG: *arm_build
 | 
			
		||||
  image: "$CI_REGISTRY_IMAGE/debian/arm_build:$TAG"
 | 
			
		||||
  needs:
 | 
			
		||||
    - arm_build
 | 
			
		||||
 | 
			
		||||
# Debian 10 based ARM test image
 | 
			
		||||
arm_test:
 | 
			
		||||
  extends: arm_build
 | 
			
		||||
  variables:
 | 
			
		||||
    DEBIAN_TAG: &arm_test "2019-12-18"
 | 
			
		||||
 | 
			
		||||
.use-arm_test:
 | 
			
		||||
  variables:
 | 
			
		||||
    TAG: *arm_test
 | 
			
		||||
  image: "$CI_REGISTRY_IMAGE/debian/arm_test:$TAG"
 | 
			
		||||
  needs:
 | 
			
		||||
    - meson-arm64
 | 
			
		||||
    - arm_test
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# BUILD
 | 
			
		||||
 | 
			
		||||
# Shared between windows and Linux
 | 
			
		||||
.build-common:
 | 
			
		||||
  extends: .ci-run-policy
 | 
			
		||||
  stage: build
 | 
			
		||||
  artifacts:
 | 
			
		||||
    when: always
 | 
			
		||||
    paths:
 | 
			
		||||
      - _build/meson-logs/*.txt
 | 
			
		||||
      # scons:
 | 
			
		||||
      - build/*/config.log
 | 
			
		||||
      - shader-db
 | 
			
		||||
 | 
			
		||||
# Just Linux
 | 
			
		||||
.build-linux:
 | 
			
		||||
  extends: .build-common
 | 
			
		||||
  variables:
 | 
			
		||||
    CCACHE_COMPILERCHECK: "content"
 | 
			
		||||
    CCACHE_COMPRESS: "true"
 | 
			
		||||
    CCACHE_DIR: /cache/mesa/ccache
 | 
			
		||||
  # Use ccache transparently, and print stats before/after
 | 
			
		||||
  before_script:
 | 
			
		||||
    - export PATH="/usr/lib/ccache:$PATH"
 | 
			
		||||
    - export CCACHE_BASEDIR="$PWD"
 | 
			
		||||
    - ccache --show-stats
 | 
			
		||||
  after_script:
 | 
			
		||||
    - ccache --show-stats
 | 
			
		||||
 | 
			
		||||
.build-windows:
 | 
			
		||||
  extends: .build-common
 | 
			
		||||
  tags:
 | 
			
		||||
    - mesa-windows
 | 
			
		||||
  cache:
 | 
			
		||||
    key: ${CI_JOB_NAME}
 | 
			
		||||
    paths:
 | 
			
		||||
      - subprojects/packagecache
 | 
			
		||||
 | 
			
		||||
.meson-build:
 | 
			
		||||
  extends:
 | 
			
		||||
    - .build-linux
 | 
			
		||||
    - .use-x86_build
 | 
			
		||||
  variables:
 | 
			
		||||
    LLVM_VERSION: 9
 | 
			
		||||
  script:
 | 
			
		||||
    - .gitlab-ci/meson-build.sh
 | 
			
		||||
 | 
			
		||||
.scons-build:
 | 
			
		||||
  extends:
 | 
			
		||||
    - .build-linux
 | 
			
		||||
    - .use-x86_build
 | 
			
		||||
  variables:
 | 
			
		||||
    SCONSFLAGS: "-j4"
 | 
			
		||||
  script:
 | 
			
		||||
    - .gitlab-ci/scons-build.sh
 | 
			
		||||
 | 
			
		||||
meson-testing:
 | 
			
		||||
  extends:
 | 
			
		||||
    - .meson-build
 | 
			
		||||
    - .ci-deqp-artifacts
 | 
			
		||||
  variables:
 | 
			
		||||
    UNWIND: "true"
 | 
			
		||||
    DRI_LOADERS: >
 | 
			
		||||
      -D glx=dri
 | 
			
		||||
      -D gbm=true
 | 
			
		||||
      -D egl=true
 | 
			
		||||
      -D platforms=x11,drm,surfaceless
 | 
			
		||||
    GALLIUM_ST: >
 | 
			
		||||
      -D dri3=true
 | 
			
		||||
    GALLIUM_DRIVERS: "swrast"
 | 
			
		||||
    VULKAN_DRIVERS: amd
 | 
			
		||||
    BUILDTYPE: "debugoptimized"
 | 
			
		||||
  script:
 | 
			
		||||
    - .gitlab-ci/meson-build.sh
 | 
			
		||||
    - .gitlab-ci/prepare-artifacts.sh
 | 
			
		||||
 | 
			
		||||
meson-main:
 | 
			
		||||
  extends: .meson-build
 | 
			
		||||
  variables:
 | 
			
		||||
    UNWIND: "true"
 | 
			
		||||
    DRI_LOADERS: >
 | 
			
		||||
      -D glx=dri
 | 
			
		||||
      -D gbm=true
 | 
			
		||||
      -D egl=true
 | 
			
		||||
      -D platforms=x11,wayland,drm,surfaceless
 | 
			
		||||
    DRI_DRIVERS: "i915,i965,r100,r200,nouveau"
 | 
			
		||||
    GALLIUM_ST: >
 | 
			
		||||
      -D dri3=true
 | 
			
		||||
      -D gallium-extra-hud=true
 | 
			
		||||
      -D gallium-vdpau=true
 | 
			
		||||
      -D gallium-xvmc=true
 | 
			
		||||
      -D gallium-omx=bellagio
 | 
			
		||||
      -D gallium-va=true
 | 
			
		||||
      -D gallium-xa=true
 | 
			
		||||
      -D gallium-nine=true
 | 
			
		||||
      -D gallium-opencl=disabled
 | 
			
		||||
    GALLIUM_DRIVERS: "iris,nouveau,kmsro,r300,r600,freedreno,swr,swrast,svga,v3d,vc4,virgl,etnaviv,panfrost,lima,zink"
 | 
			
		||||
    EXTRA_OPTION: >
 | 
			
		||||
      -D osmesa=gallium
 | 
			
		||||
      -D tools=all
 | 
			
		||||
  script:
 | 
			
		||||
    - .gitlab-ci/meson-build.sh
 | 
			
		||||
    - .gitlab-ci/run-shader-db.sh
 | 
			
		||||
 | 
			
		||||
.meson-cross:
 | 
			
		||||
  extends:
 | 
			
		||||
    - .meson-build
 | 
			
		||||
  variables:
 | 
			
		||||
    UNWIND: "false"
 | 
			
		||||
    DRI_LOADERS: >
 | 
			
		||||
      -D glx=disabled
 | 
			
		||||
      -D gbm=false
 | 
			
		||||
      -D egl=true
 | 
			
		||||
      -D platforms=surfaceless
 | 
			
		||||
      -D osmesa=none
 | 
			
		||||
    GALLIUM_ST: >
 | 
			
		||||
      -D dri3=false
 | 
			
		||||
      -D gallium-vdpau=false
 | 
			
		||||
      -D gallium-xvmc=false
 | 
			
		||||
      -D gallium-omx=disabled
 | 
			
		||||
      -D gallium-va=false
 | 
			
		||||
      -D gallium-xa=false
 | 
			
		||||
      -D gallium-nine=false
 | 
			
		||||
 | 
			
		||||
.meson-arm:
 | 
			
		||||
  extends:
 | 
			
		||||
    - .meson-cross
 | 
			
		||||
    - .use-arm_build
 | 
			
		||||
  variables:
 | 
			
		||||
    VULKAN_DRIVERS: freedreno
 | 
			
		||||
    GALLIUM_DRIVERS: "etnaviv,freedreno,kmsro,lima,nouveau,panfrost,swrast,tegra,v3d,vc4"
 | 
			
		||||
    BUILDTYPE: "debugoptimized"
 | 
			
		||||
    EXTRA_OPTION: >
 | 
			
		||||
      -D I-love-half-baked-turnips=true
 | 
			
		||||
  tags:
 | 
			
		||||
    - aarch64
 | 
			
		||||
 | 
			
		||||
meson-armhf:
 | 
			
		||||
  extends:
 | 
			
		||||
    - .meson-arm
 | 
			
		||||
    - .ci-deqp-artifacts
 | 
			
		||||
  variables:
 | 
			
		||||
    CROSS: armhf
 | 
			
		||||
    LLVM_VERSION: "7"
 | 
			
		||||
  script:
 | 
			
		||||
    - .gitlab-ci/meson-build.sh
 | 
			
		||||
    - .gitlab-ci/prepare-artifacts.sh
 | 
			
		||||
 | 
			
		||||
meson-arm64:
 | 
			
		||||
  extends:
 | 
			
		||||
    - .meson-arm
 | 
			
		||||
    - .ci-deqp-artifacts
 | 
			
		||||
  variables:
 | 
			
		||||
    LLVM_VERSION: "8"
 | 
			
		||||
    VULKAN_DRIVERS: "freedreno,amd"
 | 
			
		||||
  script:
 | 
			
		||||
    - .gitlab-ci/meson-build.sh
 | 
			
		||||
    - .gitlab-ci/prepare-artifacts.sh
 | 
			
		||||
 | 
			
		||||
meson-clang:
 | 
			
		||||
  extends: .meson-build
 | 
			
		||||
  variables:
 | 
			
		||||
    UNWIND: "true"
 | 
			
		||||
    DRI_LOADERS: >
 | 
			
		||||
      -D glvnd=true
 | 
			
		||||
    DRI_DRIVERS: "auto"
 | 
			
		||||
    GALLIUM_DRIVERS: "auto"
 | 
			
		||||
    VULKAN_DRIVERS: intel,amd,freedreno
 | 
			
		||||
    CC: "ccache clang-9"
 | 
			
		||||
    CXX: "ccache clang++-9"
 | 
			
		||||
 | 
			
		||||
.meson-windows:
 | 
			
		||||
  extends:
 | 
			
		||||
    - .build-windows
 | 
			
		||||
  before_script:
 | 
			
		||||
    - $ENV:ARCH = "x86"
 | 
			
		||||
    - $ENV:VERSION = "2019\Community"
 | 
			
		||||
  script:
 | 
			
		||||
    - cmd /C .gitlab-ci\meson-build.bat
 | 
			
		||||
 | 
			
		||||
scons-swr:
 | 
			
		||||
  extends: .scons-build
 | 
			
		||||
  variables:
 | 
			
		||||
    SCONS_TARGET: "swr=1"
 | 
			
		||||
    SCONS_CHECK_COMMAND: "true"
 | 
			
		||||
    LLVM_VERSION: "6.0"
 | 
			
		||||
 | 
			
		||||
scons-win64:
 | 
			
		||||
  extends: .scons-build
 | 
			
		||||
  variables:
 | 
			
		||||
    SCONS_TARGET: platform=windows machine=x86_64
 | 
			
		||||
    SCONS_CHECK_COMMAND: "true"
 | 
			
		||||
 | 
			
		||||
meson-clover:
 | 
			
		||||
  extends: .meson-build
 | 
			
		||||
  variables:
 | 
			
		||||
    UNWIND: "true"
 | 
			
		||||
    DRI_LOADERS: >
 | 
			
		||||
      -D glx=disabled
 | 
			
		||||
      -D egl=false
 | 
			
		||||
      -D gbm=false
 | 
			
		||||
    GALLIUM_ST: >
 | 
			
		||||
      -D dri3=false
 | 
			
		||||
      -D gallium-vdpau=false
 | 
			
		||||
      -D gallium-xvmc=false
 | 
			
		||||
      -D gallium-omx=disabled
 | 
			
		||||
      -D gallium-va=false
 | 
			
		||||
      -D gallium-xa=false
 | 
			
		||||
      -D gallium-nine=false
 | 
			
		||||
      -D gallium-opencl=icd
 | 
			
		||||
  script:
 | 
			
		||||
    - export GALLIUM_DRIVERS="r600,radeonsi"
 | 
			
		||||
    - .gitlab-ci/meson-build.sh
 | 
			
		||||
    - LLVM_VERSION=8 .gitlab-ci/meson-build.sh
 | 
			
		||||
    - export GALLIUM_DRIVERS="i915,r600"
 | 
			
		||||
    - LLVM_VERSION=6.0 .gitlab-ci/meson-build.sh
 | 
			
		||||
    - LLVM_VERSION=7 .gitlab-ci/meson-build.sh
 | 
			
		||||
 | 
			
		||||
meson-clover-old-llvm:
 | 
			
		||||
  extends:
 | 
			
		||||
    - meson-clover
 | 
			
		||||
    - .use-x86_build_old
 | 
			
		||||
  variables:
 | 
			
		||||
    UNWIND: "false"
 | 
			
		||||
    DRI_LOADERS: >
 | 
			
		||||
      -D glx=disabled
 | 
			
		||||
      -D egl=false
 | 
			
		||||
      -D gbm=false
 | 
			
		||||
      -D platforms=drm,surfaceless
 | 
			
		||||
    GALLIUM_DRIVERS: "i915,r600"
 | 
			
		||||
  script:
 | 
			
		||||
    - LLVM_VERSION=3.9 .gitlab-ci/meson-build.sh
 | 
			
		||||
    - LLVM_VERSION=4.0 .gitlab-ci/meson-build.sh
 | 
			
		||||
    - LLVM_VERSION=5.0 .gitlab-ci/meson-build.sh
 | 
			
		||||
 | 
			
		||||
meson-vulkan:
 | 
			
		||||
  extends: .meson-build
 | 
			
		||||
  variables:
 | 
			
		||||
    UNWIND: "false"
 | 
			
		||||
    DRI_LOADERS: >
 | 
			
		||||
      -D glx=disabled
 | 
			
		||||
      -D gbm=false
 | 
			
		||||
      -D egl=false
 | 
			
		||||
      -D platforms=x11,wayland,drm
 | 
			
		||||
      -D osmesa=none
 | 
			
		||||
    GALLIUM_ST: >
 | 
			
		||||
      -D dri3=true
 | 
			
		||||
      -D gallium-vdpau=false
 | 
			
		||||
      -D gallium-xvmc=false
 | 
			
		||||
      -D gallium-omx=disabled
 | 
			
		||||
      -D gallium-va=false
 | 
			
		||||
      -D gallium-xa=false
 | 
			
		||||
      -D gallium-nine=false
 | 
			
		||||
      -D gallium-opencl=disabled
 | 
			
		||||
      -D b_sanitize=undefined
 | 
			
		||||
      -D c_args=-fno-sanitize-recover=all
 | 
			
		||||
      -D cpp_args=-fno-sanitize-recover=all
 | 
			
		||||
    UBSAN_OPTIONS: "print_stacktrace=1"
 | 
			
		||||
    VULKAN_DRIVERS: intel,amd,freedreno
 | 
			
		||||
    EXTRA_OPTION: >
 | 
			
		||||
      -D vulkan-overlay-layer=true
 | 
			
		||||
 | 
			
		||||
# While the main point of this build is testing the i386 cross build,
 | 
			
		||||
# we also use this one to test some other options that are exclusive
 | 
			
		||||
# with meson-main's choices (classic swrast and osmesa)
 | 
			
		||||
meson-i386:
 | 
			
		||||
  extends: .meson-cross
 | 
			
		||||
  variables:
 | 
			
		||||
    CROSS: i386
 | 
			
		||||
    VULKAN_DRIVERS: intel
 | 
			
		||||
    DRI_DRIVERS: "swrast"
 | 
			
		||||
    GALLIUM_DRIVERS: "iris"
 | 
			
		||||
    EXTRA_OPTION: >
 | 
			
		||||
      -D vulkan-overlay-layer=true
 | 
			
		||||
      -D llvm=false
 | 
			
		||||
      -D osmesa=classic
 | 
			
		||||
      -D werror=true
 | 
			
		||||
 | 
			
		||||
meson-mingw32-x86_64:
 | 
			
		||||
  extends: .meson-build
 | 
			
		||||
  variables:
 | 
			
		||||
    UNWIND: "false"
 | 
			
		||||
    DRI_DRIVERS: ""
 | 
			
		||||
    GALLIUM_DRIVERS: "swrast"
 | 
			
		||||
    EXTRA_OPTION: >
 | 
			
		||||
      -Dllvm=false
 | 
			
		||||
      -Dosmesa=gallium
 | 
			
		||||
      --cross-file=.gitlab-ci/x86_64-w64-mingw32
 | 
			
		||||
 | 
			
		||||
scons:
 | 
			
		||||
  extends: .scons-build
 | 
			
		||||
  variables:
 | 
			
		||||
    SCONS_TARGET: "llvm=1"
 | 
			
		||||
    SCONS_CHECK_COMMAND: "scons llvm=1 force_scons=1 check"
 | 
			
		||||
  script:
 | 
			
		||||
    - SCONS_TARGET="" SCONS_CHECK_COMMAND="scons check force_scons=1" .gitlab-ci/scons-build.sh
 | 
			
		||||
    - LLVM_VERSION=9 .gitlab-ci/scons-build.sh
 | 
			
		||||
 | 
			
		||||
scons-old-llvm:
 | 
			
		||||
  extends:
 | 
			
		||||
    - scons
 | 
			
		||||
    - .use-x86_build_old
 | 
			
		||||
  script:
 | 
			
		||||
    - LLVM_VERSION=3.9 .gitlab-ci/scons-build.sh
 | 
			
		||||
 | 
			
		||||
.test:
 | 
			
		||||
  extends:
 | 
			
		||||
    - .ci-run-policy
 | 
			
		||||
  stage: test
 | 
			
		||||
  variables:
 | 
			
		||||
    GIT_STRATEGY: none # testing doesn't build anything from source
 | 
			
		||||
  before_script:
 | 
			
		||||
    # Note: Build dir (and thus install) may be dirty due to GIT_STRATEGY
 | 
			
		||||
    - rm -rf install
 | 
			
		||||
    - tar -xf artifacts/install.tar
 | 
			
		||||
    - LD_LIBRARY_PATH=install/lib find install/lib -name "*.so" -print -exec ldd {} \;
 | 
			
		||||
  artifacts:
 | 
			
		||||
    when: always
 | 
			
		||||
    name: "$CI_JOB_NAME-$CI_COMMIT_REF_NAME"
 | 
			
		||||
    paths:
 | 
			
		||||
      - results/
 | 
			
		||||
  dependencies:
 | 
			
		||||
    - meson-testing
 | 
			
		||||
 | 
			
		||||
.test-gl:
 | 
			
		||||
  extends:
 | 
			
		||||
    - .test
 | 
			
		||||
  variables:
 | 
			
		||||
    TAG: *x86_test-gl
 | 
			
		||||
  image: "$CI_REGISTRY_IMAGE/debian/x86_test-gl:$TAG"
 | 
			
		||||
  needs:
 | 
			
		||||
    - meson-testing
 | 
			
		||||
    - x86_test-gl
 | 
			
		||||
 | 
			
		||||
.test-vk:
 | 
			
		||||
  extends:
 | 
			
		||||
    - .test
 | 
			
		||||
  variables:
 | 
			
		||||
    TAG: *x86_test-vk
 | 
			
		||||
  image: "$CI_REGISTRY_IMAGE/debian/x86_test-vk:$TAG"
 | 
			
		||||
  needs:
 | 
			
		||||
    - meson-testing
 | 
			
		||||
    - x86_test-vk
 | 
			
		||||
 | 
			
		||||
.piglit-test:
 | 
			
		||||
  extends: .test-gl
 | 
			
		||||
  artifacts:
 | 
			
		||||
    when: on_failure
 | 
			
		||||
    name: "$CI_JOB_NAME-$CI_COMMIT_REF_NAME"
 | 
			
		||||
    paths:
 | 
			
		||||
      - summary/
 | 
			
		||||
  variables:
 | 
			
		||||
    LIBGL_ALWAYS_SOFTWARE: 1
 | 
			
		||||
    PIGLIT_NO_WINDOW: 1
 | 
			
		||||
  script:
 | 
			
		||||
    - artifacts/piglit/run.sh
 | 
			
		||||
 | 
			
		||||
piglit-quick_gl:
 | 
			
		||||
  extends: .piglit-test
 | 
			
		||||
  variables:
 | 
			
		||||
    LP_NUM_THREADS: 0
 | 
			
		||||
    NIR_VALIDATE: 0
 | 
			
		||||
    PIGLIT_OPTIONS: >
 | 
			
		||||
      --process-isolation false
 | 
			
		||||
      -x arb_gpu_shader5
 | 
			
		||||
      -x egl_ext_device_
 | 
			
		||||
      -x egl_ext_platform_device
 | 
			
		||||
      -x ext_timer_query@time-elapsed
 | 
			
		||||
      -x glx-multithread-clearbuffer
 | 
			
		||||
      -x glx-multithread-shader-compile
 | 
			
		||||
      -x max-texture-size
 | 
			
		||||
      -x maxsize
 | 
			
		||||
    PIGLIT_PROFILES: quick_gl
 | 
			
		||||
 | 
			
		||||
piglit-glslparser:
 | 
			
		||||
  extends: .piglit-test
 | 
			
		||||
  variables:
 | 
			
		||||
    LP_NUM_THREADS: 0
 | 
			
		||||
    NIR_VALIDATE: 0
 | 
			
		||||
    PIGLIT_PROFILES: glslparser
 | 
			
		||||
 | 
			
		||||
piglit-quick_shader:
 | 
			
		||||
  extends: .piglit-test
 | 
			
		||||
  variables:
 | 
			
		||||
    LP_NUM_THREADS: 1
 | 
			
		||||
    NIR_VALIDATE: 0
 | 
			
		||||
    PIGLIT_PROFILES: quick_shader
 | 
			
		||||
 | 
			
		||||
.deqp-test:
 | 
			
		||||
  variables:
 | 
			
		||||
    DEQP_SKIPS: deqp-default-skips.txt
 | 
			
		||||
  script:
 | 
			
		||||
    - ./artifacts/deqp-runner.sh
 | 
			
		||||
 | 
			
		||||
.deqp-test-gl:
 | 
			
		||||
  extends:
 | 
			
		||||
    - .test-gl
 | 
			
		||||
    - .deqp-test
 | 
			
		||||
 | 
			
		||||
.deqp-test-vk:
 | 
			
		||||
  extends:
 | 
			
		||||
    - .test-vk
 | 
			
		||||
    - .deqp-test
 | 
			
		||||
  variables:
 | 
			
		||||
    DEQP_VER: vk
 | 
			
		||||
 | 
			
		||||
test-llvmpipe-gles2:
 | 
			
		||||
  variables:
 | 
			
		||||
    DEQP_VER: gles2
 | 
			
		||||
    DEQP_PARALLEL: 4
 | 
			
		||||
    NIR_VALIDATE: 0
 | 
			
		||||
    # Don't use threads inside llvmpipe, we've already got all 4 cores
 | 
			
		||||
    # busy with DEQP_PARALLEL.
 | 
			
		||||
    LP_NUM_THREADS: 0
 | 
			
		||||
    DEQP_EXPECTED_FAILS: deqp-llvmpipe-fails.txt
 | 
			
		||||
    LIBGL_ALWAYS_SOFTWARE: "true"
 | 
			
		||||
  extends: .deqp-test-gl
 | 
			
		||||
 | 
			
		||||
test-softpipe-gles2:
 | 
			
		||||
  extends: test-llvmpipe-gles2
 | 
			
		||||
  variables:
 | 
			
		||||
    DEQP_EXPECTED_FAILS: deqp-softpipe-fails.txt
 | 
			
		||||
    DEQP_SKIPS: deqp-softpipe-skips.txt
 | 
			
		||||
    GALLIUM_DRIVER: "softpipe"
 | 
			
		||||
 | 
			
		||||
test-softpipe-gles3:
 | 
			
		||||
  parallel: 2
 | 
			
		||||
  variables:
 | 
			
		||||
    DEQP_VER: gles3
 | 
			
		||||
  extends: test-softpipe-gles2
 | 
			
		||||
 | 
			
		||||
test-softpipe-gles31:
 | 
			
		||||
  parallel: 4
 | 
			
		||||
  variables:
 | 
			
		||||
    DEQP_VER: gles31
 | 
			
		||||
  extends: test-softpipe-gles2
 | 
			
		||||
 | 
			
		||||
arm64_a630_gles2:
 | 
			
		||||
  extends:
 | 
			
		||||
    - .deqp-test-gl
 | 
			
		||||
    - .use-arm_test
 | 
			
		||||
  variables:
 | 
			
		||||
    DEQP_VER: gles2
 | 
			
		||||
    DEQP_EXPECTED_FAILS: deqp-freedreno-a630-fails.txt
 | 
			
		||||
    DEQP_SKIPS: deqp-freedreno-a630-skips.txt
 | 
			
		||||
    NIR_VALIDATE: 0
 | 
			
		||||
    DEQP_PARALLEL: 4
 | 
			
		||||
    FLAKES_CHANNEL: "#freedreno-ci"
 | 
			
		||||
  tags:
 | 
			
		||||
    - mesa-cheza
 | 
			
		||||
  dependencies:
 | 
			
		||||
    - meson-arm64
 | 
			
		||||
 | 
			
		||||
arm64_a630_gles31:
 | 
			
		||||
  extends: arm64_a630_gles2
 | 
			
		||||
  variables:
 | 
			
		||||
    DEQP_VER: gles31
 | 
			
		||||
 | 
			
		||||
arm64_a630_gles3:
 | 
			
		||||
  extends: arm64_a630_gles2
 | 
			
		||||
  variables:
 | 
			
		||||
    DEQP_VER: gles3
 | 
			
		||||
 | 
			
		||||
arm64_a306_gles2:
 | 
			
		||||
  extends: arm64_a630_gles2
 | 
			
		||||
  variables:
 | 
			
		||||
    DEQP_EXPECTED_FAILS: deqp-freedreno-a307-fails.txt
 | 
			
		||||
    DEQP_SKIPS: deqp-default-skips.txt
 | 
			
		||||
  tags:
 | 
			
		||||
    - db410c
 | 
			
		||||
 | 
			
		||||
# RADV CI
 | 
			
		||||
.test-radv:
 | 
			
		||||
  variables:
 | 
			
		||||
    VK_DRIVER: radeon
 | 
			
		||||
    RADV_DEBUG: checkir
 | 
			
		||||
  # Can only be triggered manually on personal branches because RADV is the only
 | 
			
		||||
  # driver that does Vulkan testing at the moment.
 | 
			
		||||
  rules:
 | 
			
		||||
    # Never test RADV by default in the main project.
 | 
			
		||||
    - if: '$CI_PROJECT_PATH == "mesa/mesa"'
 | 
			
		||||
      when: never
 | 
			
		||||
    # Never test RADV by default for merge requests.
 | 
			
		||||
    - if: '$CI_MERGE_REQUEST_SOURCE_BRANCH_NAME == $CI_COMMIT_REF_NAME'
 | 
			
		||||
      when: never
 | 
			
		||||
    # Otherwise, allow testing RADV if the test image for VK has been manually
 | 
			
		||||
    # started.
 | 
			
		||||
    - when: on_success
 | 
			
		||||
 | 
			
		||||
radv_polaris10_vkcts:
 | 
			
		||||
  extends:
 | 
			
		||||
    - .deqp-test-vk
 | 
			
		||||
    - .test-radv
 | 
			
		||||
  variables:
 | 
			
		||||
    DEQP_PARALLEL: 4
 | 
			
		||||
    DEQP_SKIPS: deqp-radv-polaris10-skips.txt
 | 
			
		||||
  tags:
 | 
			
		||||
    - polaris10
 | 
			
		||||
@@ -1,122 +0,0 @@
 | 
			
		||||
## Mesa testing using gitlab-runner
 | 
			
		||||
 | 
			
		||||
The goal of the "test" stage of the .gitlab-ci.yml is to do pre-merge
 | 
			
		||||
testing of Mesa drivers on various platforms, so that we can ensure no
 | 
			
		||||
regressions are merged, as long as developers are merging code using
 | 
			
		||||
the "Merge when pipeline completes" button.
 | 
			
		||||
 | 
			
		||||
This document only covers the CI from .gitlab-ci.yml and this
 | 
			
		||||
directory.  For other CI systems, see Intel's [Mesa
 | 
			
		||||
CI](https://gitlab.freedesktop.org/Mesa_CI) or panfrost's LAVA-based
 | 
			
		||||
CI (`src/gallium/drivers/panfrost/ci/`)
 | 
			
		||||
 | 
			
		||||
### Software architecture
 | 
			
		||||
 | 
			
		||||
For freedreno and llvmpipe CI, we're using gitlab-runner on the test
 | 
			
		||||
devices (DUTs), cached docker containers with VK-GL-CTS, and the
 | 
			
		||||
normal shared x86_64 runners to build the Mesa drivers to be run
 | 
			
		||||
inside of those containers on the DUTs.
 | 
			
		||||
 | 
			
		||||
The docker containers are rebuilt from the debian-install.sh script
 | 
			
		||||
when DEBIAN\_TAG is changed in .gitlab-ci.yml, and
 | 
			
		||||
debian-test-install.sh when DEBIAN\_ARM64\_TAG is changed in
 | 
			
		||||
.gitlab-ci.yml.  The resulting images are around 500MB, and are
 | 
			
		||||
expected to change approximately weekly (though an individual
 | 
			
		||||
developer working on them may produce many more images while trying to
 | 
			
		||||
come up with a working MR!).
 | 
			
		||||
 | 
			
		||||
gitlab-runner is a client that polls gitlab.freedesktop.org for
 | 
			
		||||
available jobs, with no inbound networking requirements.  Jobs can
 | 
			
		||||
have tags, so we can have DUT-specific jobs that only run on runners
 | 
			
		||||
with that tag marked in the gitlab UI.
 | 
			
		||||
 | 
			
		||||
Since dEQP takes a long time to run, we mark the job as "parallel" at
 | 
			
		||||
some level, which spawns multiple jobs from one definition, and then
 | 
			
		||||
deqp-runner.sh takes the corresponding fraction of the test list for
 | 
			
		||||
that job.
 | 
			
		||||
 | 
			
		||||
To reduce dEQP runtime (or avoid tests with unreliable results), a
 | 
			
		||||
deqp-runner.sh invocation can provide a list of tests to skip.  If
 | 
			
		||||
your driver is not yet conformant, you can pass a list of expected
 | 
			
		||||
failures, and the job will only fail on tests that aren't listed (look
 | 
			
		||||
at the job's log for which specific tests failed).
 | 
			
		||||
 | 
			
		||||
### DUT requirements
 | 
			
		||||
 | 
			
		||||
#### DUTs must have a stable kernel and GPU reset.
 | 
			
		||||
 | 
			
		||||
If the system goes down during a test run, that job will eventually
 | 
			
		||||
time out and fail (default 1 hour).  However, if the kernel can't
 | 
			
		||||
reliably reset the GPU on failure, bugs in one MR may leak into
 | 
			
		||||
spurious failures in another MR.  This would be an unacceptable impact
 | 
			
		||||
on Mesa developers working on other drivers.
 | 
			
		||||
 | 
			
		||||
#### DUTs must be able to run docker
 | 
			
		||||
 | 
			
		||||
The Mesa gitlab-runner based test architecture is built around docker,
 | 
			
		||||
so that we can cache the debian package installation and CTS build
 | 
			
		||||
step across multiple test runs.  Since the images are large and change
 | 
			
		||||
approximately weekly, the DUTs also need to be running some script to
 | 
			
		||||
prune stale docker images periodically in order to not run out of disk
 | 
			
		||||
space as we rev those containers (perhaps [this
 | 
			
		||||
script](https://gitlab.com/gitlab-org/gitlab-runner/issues/2980#note_169233611)).
 | 
			
		||||
 | 
			
		||||
Note that docker doesn't allow containers to be stored on NFS, and
 | 
			
		||||
doesn't allow multiple docker daemons to interact with the same
 | 
			
		||||
network block device, so you will probably need some sort of physical
 | 
			
		||||
storage on your DUTs.
 | 
			
		||||
 | 
			
		||||
#### DUTs must be public
 | 
			
		||||
 | 
			
		||||
By including your device in .gitlab-ci.yml, you're effectively letting
 | 
			
		||||
anyone on the internet run code on your device.  docker containers may
 | 
			
		||||
provide some limited protection, but how much you trust that and what
 | 
			
		||||
you do to mitigate hostile access is up to you.
 | 
			
		||||
 | 
			
		||||
#### DUTs must expose the dri device nodes to the containers.
 | 
			
		||||
 | 
			
		||||
Obviously, to get access to the HW, we need to pass the render node
 | 
			
		||||
through.  This is done by adding `devices = ["/dev/dri"]` to the
 | 
			
		||||
`runners.docker` section of /etc/gitlab-runner/config.toml.
 | 
			
		||||
 | 
			
		||||
### HW CI farm expectations
 | 
			
		||||
 | 
			
		||||
To make sure that testing of one vendor's drivers doesn't block
 | 
			
		||||
unrelated work by other vendors, we require that a given driver's test
 | 
			
		||||
farm produces a spurious failure no more than once a week.  If every
 | 
			
		||||
driver had CI and failed once a week, we would be seeing someone's
 | 
			
		||||
code getting blocked on a spurious failure daily, which is an
 | 
			
		||||
unacceptable cost to the project.
 | 
			
		||||
 | 
			
		||||
Additionally, the test farm needs to be able to provide a short enough
 | 
			
		||||
turnaround time that people can regularly use the "Merge when pipeline
 | 
			
		||||
succeeds" button successfully (until we get
 | 
			
		||||
[marge-bot](https://github.com/smarkets/marge-bot) in place on
 | 
			
		||||
freedesktop.org).  As a result, we require that the test farm be able
 | 
			
		||||
to handle a whole pipeline's worth of jobs in less than 5 minutes (to
 | 
			
		||||
compare, the build stage is about 10 minutes, if you could get all
 | 
			
		||||
your jobs scheduled on the shared runners in time.).
 | 
			
		||||
 | 
			
		||||
If a test farm is short the HW to provide these guarantees, consider
 | 
			
		||||
dropping tests to reduce runtime.
 | 
			
		||||
`VK-GL-CTS/scripts/log/bottleneck_report.py` can help you find what
 | 
			
		||||
tests were slow in a `results.qpa` file.  Or, you can have a job with
 | 
			
		||||
no `parallel` field set and:
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
  variables:
 | 
			
		||||
    CI_NODE_INDEX: 1
 | 
			
		||||
    CI_NODE_TOTAL: 10
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
to just run 1/10th of the test list.
 | 
			
		||||
 | 
			
		||||
If a HW CI farm goes offline (network dies and all CI pipelines end up
 | 
			
		||||
stalled) or its runners are consistenly spuriously failing (disk
 | 
			
		||||
full?), and the maintainer is not immediately available to fix the
 | 
			
		||||
issue, please push through an MR disabling that farm's jobs by adding
 | 
			
		||||
'.' to the front of the jobs names until the maintainer can bring
 | 
			
		||||
things back up.  If this happens, the farm maintainer should provide a
 | 
			
		||||
report to mesa-dev@lists.freedesktop.org after the fact explaining
 | 
			
		||||
what happened and what the mitigation plan is for that failure next
 | 
			
		||||
time.
 | 
			
		||||
@@ -1,46 +0,0 @@
 | 
			
		||||
CONFIG_LOCALVERSION="ccu"
 | 
			
		||||
 | 
			
		||||
CONFIG_DEBUG_KERNEL=y
 | 
			
		||||
 | 
			
		||||
CONFIG_DEVFREQ_GOV_PERFORMANCE=y
 | 
			
		||||
CONFIG_DEVFREQ_GOV_POWERSAVE=y
 | 
			
		||||
CONFIG_DEVFREQ_GOV_USERSPACE=y
 | 
			
		||||
CONFIG_DEVFREQ_GOV_PASSIVE=y
 | 
			
		||||
CONFIG_DEVFREQ_GOV_SIMPLE_ONDEMAND=y
 | 
			
		||||
 | 
			
		||||
CONFIG_DRM=y
 | 
			
		||||
CONFIG_DRM_ROCKCHIP=y
 | 
			
		||||
CONFIG_DRM_PANFROST=y
 | 
			
		||||
CONFIG_DRM_LIMA=y
 | 
			
		||||
CONFIG_DRM_PANEL_SIMPLE=y
 | 
			
		||||
CONFIG_PWM_CROS_EC=y
 | 
			
		||||
CONFIG_BACKLIGHT_PWM=y
 | 
			
		||||
 | 
			
		||||
CONFIG_ROCKCHIP_CDN_DP=n
 | 
			
		||||
 | 
			
		||||
CONFIG_SPI_ROCKCHIP=y
 | 
			
		||||
CONFIG_PWM_ROCKCHIP=y
 | 
			
		||||
CONFIG_PHY_ROCKCHIP_DP=y
 | 
			
		||||
CONFIG_DWMAC_ROCKCHIP=y
 | 
			
		||||
 | 
			
		||||
CONFIG_MFD_RK808=y
 | 
			
		||||
CONFIG_REGULATOR_RK808=y
 | 
			
		||||
CONFIG_RTC_DRV_RK808=y
 | 
			
		||||
CONFIG_COMMON_CLK_RK808=y
 | 
			
		||||
 | 
			
		||||
CONFIG_REGULATOR_FAN53555=y
 | 
			
		||||
CONFIG_REGULATOR=y
 | 
			
		||||
 | 
			
		||||
CONFIG_REGULATOR_VCTRL=y
 | 
			
		||||
 | 
			
		||||
CONFIG_KASAN=n
 | 
			
		||||
CONFIG_KASAN_INLINE=n
 | 
			
		||||
CONFIG_STACKTRACE=n
 | 
			
		||||
 | 
			
		||||
CONFIG_TMPFS=y
 | 
			
		||||
 | 
			
		||||
CONFIG_PROVE_LOCKING=n
 | 
			
		||||
CONFIG_DEBUG_LOCKDEP=n
 | 
			
		||||
CONFIG_SOFTLOCKUP_DETECTOR=n
 | 
			
		||||
CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC=n
 | 
			
		||||
 | 
			
		||||
@@ -1,83 +0,0 @@
 | 
			
		||||
CONFIG_LOCALVERSION="ccu"
 | 
			
		||||
 | 
			
		||||
CONFIG_DEBUG_KERNEL=y
 | 
			
		||||
 | 
			
		||||
CONFIG_DEVFREQ_GOV_PERFORMANCE=y
 | 
			
		||||
CONFIG_DEVFREQ_GOV_POWERSAVE=y
 | 
			
		||||
CONFIG_DEVFREQ_GOV_USERSPACE=y
 | 
			
		||||
CONFIG_DEVFREQ_GOV_PASSIVE=y
 | 
			
		||||
 | 
			
		||||
CONFIG_DRM=y
 | 
			
		||||
CONFIG_DRM_ROCKCHIP=y
 | 
			
		||||
CONFIG_DRM_PANFROST=y
 | 
			
		||||
CONFIG_DRM_LIMA=y
 | 
			
		||||
CONFIG_DRM_PANEL_SIMPLE=y
 | 
			
		||||
CONFIG_PWM_CROS_EC=y
 | 
			
		||||
CONFIG_BACKLIGHT_PWM=y
 | 
			
		||||
 | 
			
		||||
CONFIG_ROCKCHIP_CDN_DP=n
 | 
			
		||||
 | 
			
		||||
CONFIG_SPI_ROCKCHIP=y
 | 
			
		||||
CONFIG_PWM_ROCKCHIP=y
 | 
			
		||||
CONFIG_PHY_ROCKCHIP_DP=y
 | 
			
		||||
CONFIG_DWMAC_ROCKCHIP=y
 | 
			
		||||
CONFIG_STMMAC_ETH=y
 | 
			
		||||
CONFIG_TYPEC_FUSB302=y
 | 
			
		||||
CONFIG_TYPEC=y
 | 
			
		||||
CONFIG_TYPEC_TCPM=y
 | 
			
		||||
 | 
			
		||||
CONFIG_ARCH_ALPINE=n
 | 
			
		||||
CONFIG_ARCH_BCM2835=n
 | 
			
		||||
CONFIG_ARCH_BCM_IPROC=n
 | 
			
		||||
CONFIG_ARCH_BERLIN=n
 | 
			
		||||
CONFIG_ARCH_BRCMSTB=n
 | 
			
		||||
CONFIG_ARCH_EXYNOS=n
 | 
			
		||||
CONFIG_ARCH_K3=n
 | 
			
		||||
CONFIG_ARCH_LAYERSCAPE=n
 | 
			
		||||
CONFIG_ARCH_LG1K=n
 | 
			
		||||
CONFIG_ARCH_HISI=n
 | 
			
		||||
CONFIG_ARCH_MEDIATEK=n
 | 
			
		||||
CONFIG_ARCH_MVEBU=n
 | 
			
		||||
CONFIG_ARCH_QCOM=n
 | 
			
		||||
CONFIG_ARCH_SEATTLE=n
 | 
			
		||||
CONFIG_ARCH_SYNQUACER=n
 | 
			
		||||
CONFIG_ARCH_RENESAS=n
 | 
			
		||||
CONFIG_ARCH_R8A774A1=n
 | 
			
		||||
CONFIG_ARCH_R8A774C0=n
 | 
			
		||||
CONFIG_ARCH_R8A7795=n
 | 
			
		||||
CONFIG_ARCH_R8A7796=n
 | 
			
		||||
CONFIG_ARCH_R8A77965=n
 | 
			
		||||
CONFIG_ARCH_R8A77970=n
 | 
			
		||||
CONFIG_ARCH_R8A77980=n
 | 
			
		||||
CONFIG_ARCH_R8A77990=n
 | 
			
		||||
CONFIG_ARCH_R8A77995=n
 | 
			
		||||
CONFIG_ARCH_STRATIX10=n
 | 
			
		||||
CONFIG_ARCH_TEGRA=n
 | 
			
		||||
CONFIG_ARCH_SPRD=n
 | 
			
		||||
CONFIG_ARCH_THUNDER=n
 | 
			
		||||
CONFIG_ARCH_THUNDER2=n
 | 
			
		||||
CONFIG_ARCH_UNIPHIER=n
 | 
			
		||||
CONFIG_ARCH_VEXPRESS=n
 | 
			
		||||
CONFIG_ARCH_XGENE=n
 | 
			
		||||
CONFIG_ARCH_ZX=n
 | 
			
		||||
CONFIG_ARCH_ZYNQMP=n
 | 
			
		||||
 | 
			
		||||
CONFIG_ACPI=n
 | 
			
		||||
 | 
			
		||||
CONFIG_REGULATOR_FAN53555=y
 | 
			
		||||
CONFIG_REGULATOR=y
 | 
			
		||||
 | 
			
		||||
CONFIG_REGULATOR_VCTRL=y
 | 
			
		||||
 | 
			
		||||
CONFIG_KASAN=n
 | 
			
		||||
CONFIG_KASAN_INLINE=n
 | 
			
		||||
CONFIG_STACKTRACE=n
 | 
			
		||||
 | 
			
		||||
CONFIG_TMPFS=y
 | 
			
		||||
 | 
			
		||||
CONFIG_PROVE_LOCKING=n
 | 
			
		||||
CONFIG_DEBUG_LOCKDEP=n
 | 
			
		||||
CONFIG_SOFTLOCKUP_DETECTOR=y
 | 
			
		||||
CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC=y
 | 
			
		||||
 | 
			
		||||
CONFIG_DETECT_HUNG_TASK=y
 | 
			
		||||
@@ -1,10 +0,0 @@
 | 
			
		||||
#!/bin/bash
 | 
			
		||||
 | 
			
		||||
set -ex
 | 
			
		||||
 | 
			
		||||
git clone https://gitlab.freedesktop.org/mesa/parallel-deqp-runner.git --depth 1 -b mesa-ci-2019-12-17
 | 
			
		||||
cd parallel-deqp-runner
 | 
			
		||||
meson build/ $EXTRA_MESON_ARGS
 | 
			
		||||
ninja -C build -j4 install
 | 
			
		||||
cd ..
 | 
			
		||||
rm -rf parallel-deqp-runner
 | 
			
		||||
@@ -1,61 +0,0 @@
 | 
			
		||||
git config --global user.email "mesa@example.com"
 | 
			
		||||
git config --global user.name "Mesa CI"
 | 
			
		||||
# XXX: Use --depth 1 once we can drop the cherry-picks.
 | 
			
		||||
git clone \
 | 
			
		||||
    https://github.com/KhronosGroup/VK-GL-CTS.git \
 | 
			
		||||
    -b opengl-es-cts-3.2.5.1 \
 | 
			
		||||
    /VK-GL-CTS
 | 
			
		||||
pushd /VK-GL-CTS
 | 
			
		||||
# Fix surfaceless build
 | 
			
		||||
git cherry-pick -x 22f41e5e321c6dcd8569c4dad91bce89f06b3670
 | 
			
		||||
git cherry-pick -x 1daa8dff73161ea60ead965bd6c9f2a0a2165648
 | 
			
		||||
 | 
			
		||||
# surfaceless links against libkms and such despite not using it.
 | 
			
		||||
sed -i '/gbm/d' targets/surfaceless/surfaceless.cmake
 | 
			
		||||
sed -i '/libkms/d' targets/surfaceless/surfaceless.cmake
 | 
			
		||||
sed -i '/libgbm/d' targets/surfaceless/surfaceless.cmake
 | 
			
		||||
 | 
			
		||||
# --insecure is due to SSL cert failures hitting sourceforge for zlib and
 | 
			
		||||
# libpng (sigh).  The archives get their checksums checked anyway, and git
 | 
			
		||||
# always goes through ssh or https.
 | 
			
		||||
python3 external/fetch_sources.py --insecure
 | 
			
		||||
 | 
			
		||||
mkdir -p /deqp
 | 
			
		||||
 | 
			
		||||
# Save the testlog stylesheets:
 | 
			
		||||
cp doc/testlog-stylesheet/testlog.{css,xsl} /deqp
 | 
			
		||||
popd
 | 
			
		||||
 | 
			
		||||
pushd /deqp
 | 
			
		||||
cmake -G Ninja \
 | 
			
		||||
      -DDEQP_TARGET=surfaceless               \
 | 
			
		||||
      -DCMAKE_BUILD_TYPE=Release              \
 | 
			
		||||
      $EXTRA_CMAKE_ARGS                       \
 | 
			
		||||
      /VK-GL-CTS
 | 
			
		||||
ninja
 | 
			
		||||
 | 
			
		||||
# Copy out the mustpass lists we want from a bunch of other junk.
 | 
			
		||||
mkdir /deqp/mustpass
 | 
			
		||||
for gles in gles2 gles3 gles31; do
 | 
			
		||||
    cp \
 | 
			
		||||
        /deqp/external/openglcts/modules/gl_cts/data/mustpass/gles/aosp_mustpass/3.2.5.x/$gles-master.txt \
 | 
			
		||||
        /deqp/mustpass/$gles-master.txt
 | 
			
		||||
done
 | 
			
		||||
 | 
			
		||||
# Save *some* executor utils, but otherwise strip things down
 | 
			
		||||
# to reduct deqp build size:
 | 
			
		||||
mkdir /deqp/executor.save
 | 
			
		||||
cp /deqp/executor/testlog-to-* /deqp/executor.save
 | 
			
		||||
rm -rf /deqp/executor
 | 
			
		||||
mv /deqp/executor.save /deqp/executor
 | 
			
		||||
 | 
			
		||||
rm -rf /deqp/external
 | 
			
		||||
rm -rf /deqp/modules/internal
 | 
			
		||||
rm -rf /deqp/execserver
 | 
			
		||||
rm -rf /deqp/modules/egl
 | 
			
		||||
rm -rf /deqp/framework
 | 
			
		||||
find -iname '*cmake*' -o -name '*ninja*' -o -name '*.o' -o -name '*.a' | xargs rm -rf
 | 
			
		||||
${STRIP_CMD:-strip} modules/*/deqp-*
 | 
			
		||||
du -sh *
 | 
			
		||||
rm -rf /VK-GL-CTS
 | 
			
		||||
popd
 | 
			
		||||
@@ -1,33 +0,0 @@
 | 
			
		||||
git clone --depth 1 \
 | 
			
		||||
    https://github.com/KhronosGroup/VK-GL-CTS.git \
 | 
			
		||||
    -b vulkan-cts-1.1.6.0 \
 | 
			
		||||
    /VK-GL-CTS
 | 
			
		||||
cd /VK-GL-CTS
 | 
			
		||||
 | 
			
		||||
# --insecure is due to SSL cert failures hitting sourceforge for zlib and
 | 
			
		||||
# libpng (sigh).  The archives get their checksums checked anyway, and git
 | 
			
		||||
# always goes through ssh or https.
 | 
			
		||||
python3 external/fetch_sources.py --insecure
 | 
			
		||||
 | 
			
		||||
mkdir -p /deqp
 | 
			
		||||
cd /deqp
 | 
			
		||||
cmake -G Ninja \
 | 
			
		||||
      -DDEQP_TARGET=x11_glx \
 | 
			
		||||
      -DCMAKE_BUILD_TYPE=Release \
 | 
			
		||||
      /VK-GL-CTS
 | 
			
		||||
ninja -j4
 | 
			
		||||
 | 
			
		||||
# Copy out the mustpass list we want.
 | 
			
		||||
mkdir /deqp/mustpass
 | 
			
		||||
cp /VK-GL-CTS/external/vulkancts/mustpass/master/vk-default.txt \
 | 
			
		||||
   /deqp/mustpass/vk-master.txt
 | 
			
		||||
 | 
			
		||||
rm -rf /deqp/modules/internal
 | 
			
		||||
rm -rf /deqp/executor
 | 
			
		||||
rm -rf /deqp/execserver
 | 
			
		||||
rm -rf /deqp/modules/egl
 | 
			
		||||
rm -rf /deqp/framework
 | 
			
		||||
find -iname '*cmake*' -o -name '*ninja*' -o -name '*.o' -o -name '*.a' | xargs rm -rf
 | 
			
		||||
strip external/vulkancts/modules/vulkan/deqp-vk
 | 
			
		||||
du -sh *
 | 
			
		||||
rm -rf /VK-GL-CTS
 | 
			
		||||
@@ -1,13 +0,0 @@
 | 
			
		||||
#!/bin/bash
 | 
			
		||||
 | 
			
		||||
set -ex
 | 
			
		||||
 | 
			
		||||
git clone https://gitlab.freedesktop.org/mesa/piglit.git --single-branch --no-checkout /piglit
 | 
			
		||||
pushd /piglit
 | 
			
		||||
git checkout 8771c3860505db2bcf4877216221d774bf90af6b
 | 
			
		||||
patch -p1 <$OLDPWD/.gitlab-ci/piglit/disable-vs_in.diff
 | 
			
		||||
cmake -G Ninja -DCMAKE_BUILD_TYPE=Release
 | 
			
		||||
ninja -j4
 | 
			
		||||
find -name .git -o -name '*ninja*' -o -iname '*cmake*' -o -name '*.[chao]' | xargs rm -rf
 | 
			
		||||
rm -rf target_api
 | 
			
		||||
popd
 | 
			
		||||
@@ -1,74 +0,0 @@
 | 
			
		||||
#!/bin/bash
 | 
			
		||||
 | 
			
		||||
set -e
 | 
			
		||||
set -o xtrace
 | 
			
		||||
 | 
			
		||||
############### Install packages for building
 | 
			
		||||
apt-get -y install ca-certificates
 | 
			
		||||
sed -i -e 's/http:\/\/deb/https:\/\/deb/g' /etc/apt/sources.list
 | 
			
		||||
echo 'deb https://deb.debian.org/debian buster-backports main' >/etc/apt/sources.list.d/backports.list
 | 
			
		||||
dpkg --add-architecture armhf
 | 
			
		||||
apt-get update
 | 
			
		||||
apt-get -y install \
 | 
			
		||||
	bc \
 | 
			
		||||
	bison \
 | 
			
		||||
	ccache \
 | 
			
		||||
	cmake \
 | 
			
		||||
	cpio \
 | 
			
		||||
	crossbuild-essential-armhf \
 | 
			
		||||
	debootstrap \
 | 
			
		||||
	flex \
 | 
			
		||||
	g++ \
 | 
			
		||||
	gettext \
 | 
			
		||||
	git \
 | 
			
		||||
	lavacli \
 | 
			
		||||
	libdrm-dev:armhf \
 | 
			
		||||
	libegl1-mesa-dev \
 | 
			
		||||
	libegl1-mesa-dev:armhf \
 | 
			
		||||
	libelf-dev \
 | 
			
		||||
	libelf-dev:armhf \
 | 
			
		||||
	libexpat1-dev \
 | 
			
		||||
	libexpat1-dev:armhf \
 | 
			
		||||
	libgles2-mesa-dev \
 | 
			
		||||
	libgles2-mesa-dev:armhf \
 | 
			
		||||
	libpng-dev \
 | 
			
		||||
	libpng-dev:armhf \
 | 
			
		||||
	libssl-dev \
 | 
			
		||||
	libvulkan-dev \
 | 
			
		||||
	libvulkan-dev:armhf \
 | 
			
		||||
	llvm-7-dev:armhf \
 | 
			
		||||
	llvm-8-dev \
 | 
			
		||||
	meson \
 | 
			
		||||
	pkg-config \
 | 
			
		||||
	python \
 | 
			
		||||
	python3-mako \
 | 
			
		||||
	unzip \
 | 
			
		||||
	wget \
 | 
			
		||||
	zlib1g-dev
 | 
			
		||||
 | 
			
		||||
# dependencies where we want a specific version
 | 
			
		||||
export LIBDRM_VERSION=libdrm-2.4.100
 | 
			
		||||
 | 
			
		||||
wget https://dri.freedesktop.org/libdrm/$LIBDRM_VERSION.tar.bz2
 | 
			
		||||
tar -xvf $LIBDRM_VERSION.tar.bz2 && rm $LIBDRM_VERSION.tar.bz2
 | 
			
		||||
cd $LIBDRM_VERSION; meson build -D vc4=true -D freedreno=true -D etnaviv=true; ninja -j4 -C build install; cd ..
 | 
			
		||||
rm -rf $LIBDRM_VERSION
 | 
			
		||||
 | 
			
		||||
############### Generate cross build file for Meson
 | 
			
		||||
 | 
			
		||||
cross_file="/cross_file-armhf.txt"
 | 
			
		||||
/usr/share/meson/debcrossgen --arch armhf -o "$cross_file"
 | 
			
		||||
# Explicitly set ccache path for cross compilers
 | 
			
		||||
sed -i "s|/usr/bin/\([^-]*\)-linux-gnu\([^-]*\)-g|/usr/lib/ccache/\\1-linux-gnu\\2-g|g" "$cross_file"
 | 
			
		||||
# Don't need wrapper for armhf executables
 | 
			
		||||
sed -i -e '/\[properties\]/a\' -e "needs_exe_wrapper = False" "$cross_file"
 | 
			
		||||
 | 
			
		||||
############### Generate kernel, ramdisk, test suites, etc for LAVA jobs
 | 
			
		||||
 | 
			
		||||
DEBIAN_ARCH=arm64 . .gitlab-ci/container/lava_arm.sh
 | 
			
		||||
DEBIAN_ARCH=armhf . .gitlab-ci/container/lava_arm.sh
 | 
			
		||||
 | 
			
		||||
apt-get purge -y \
 | 
			
		||||
        wget
 | 
			
		||||
 | 
			
		||||
apt-get autoremove -y --purge
 | 
			
		||||
@@ -1,64 +0,0 @@
 | 
			
		||||
#!/bin/bash
 | 
			
		||||
 | 
			
		||||
set -e
 | 
			
		||||
set -o xtrace
 | 
			
		||||
 | 
			
		||||
############### Install packages for building
 | 
			
		||||
apt-get -y install ca-certificates
 | 
			
		||||
sed -i -e 's/http:\/\/deb/https:\/\/deb/g' /etc/apt/sources.list
 | 
			
		||||
echo 'deb https://deb.debian.org/debian buster-backports main' >/etc/apt/sources.list.d/backports.list
 | 
			
		||||
apt-get update
 | 
			
		||||
apt-get -y install \
 | 
			
		||||
	bzip2 \
 | 
			
		||||
	cmake \
 | 
			
		||||
	g++ \
 | 
			
		||||
	gcc \
 | 
			
		||||
	git \
 | 
			
		||||
	libc6-dev \
 | 
			
		||||
	libdrm-nouveau2 \
 | 
			
		||||
	libexpat1 \
 | 
			
		||||
	libgbm-dev \
 | 
			
		||||
	libgbm-dev \
 | 
			
		||||
	libgles2-mesa-dev \
 | 
			
		||||
	libllvm8 \
 | 
			
		||||
	libpng16-16 \
 | 
			
		||||
	libpng-dev \
 | 
			
		||||
	libvulkan-dev \
 | 
			
		||||
	libvulkan1 \
 | 
			
		||||
	meson \
 | 
			
		||||
	netcat \
 | 
			
		||||
	pkg-config \
 | 
			
		||||
	procps \
 | 
			
		||||
	python \
 | 
			
		||||
	waffle-utils \
 | 
			
		||||
	wget \
 | 
			
		||||
	zlib1g
 | 
			
		||||
 | 
			
		||||
############### Build dEQP runner
 | 
			
		||||
 | 
			
		||||
. .gitlab-ci/build-cts-runner.sh
 | 
			
		||||
 | 
			
		||||
############### Build dEQP GL
 | 
			
		||||
 | 
			
		||||
. .gitlab-ci/build-deqp-gl.sh
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
############### Uninstall the build software
 | 
			
		||||
 | 
			
		||||
apt-get purge -y \
 | 
			
		||||
        bzip2 \
 | 
			
		||||
        cmake \
 | 
			
		||||
        g++ \
 | 
			
		||||
        gcc \
 | 
			
		||||
        git \
 | 
			
		||||
        libc6-dev \
 | 
			
		||||
        libgbm-dev \
 | 
			
		||||
        libgles2-mesa-dev \
 | 
			
		||||
        libpng-dev \
 | 
			
		||||
        libvulkan-dev \
 | 
			
		||||
        meson \
 | 
			
		||||
        pkg-config \
 | 
			
		||||
        python \
 | 
			
		||||
        wget
 | 
			
		||||
 | 
			
		||||
apt-get autoremove -y --purge
 | 
			
		||||
@@ -1,63 +0,0 @@
 | 
			
		||||
#!/bin/bash
 | 
			
		||||
 | 
			
		||||
set -e
 | 
			
		||||
set -o xtrace
 | 
			
		||||
 | 
			
		||||
if [[ "$DEBIAN_ARCH" = "arm64" ]]; then
 | 
			
		||||
    GCC_ARCH="aarch64-linux-gnu"
 | 
			
		||||
    KERNEL_ARCH="arm64"
 | 
			
		||||
    DEFCONFIG="arch/arm64/configs/defconfig"
 | 
			
		||||
    DEVICE_TREES="arch/arm64/boot/dts/rockchip/rk3399-gru-kevin.dtb arch/arm64/boot/dts/amlogic/meson-gxl-s905x-libretech-cc.dtb arch/arm64/boot/dts/allwinner/sun50i-h6-pine-h64.dtb arch/arm64/boot/dts/amlogic/meson-gxm-khadas-vim2.dtb"
 | 
			
		||||
    KERNEL_IMAGE_NAME="Image"
 | 
			
		||||
else
 | 
			
		||||
    GCC_ARCH="arm-linux-gnueabihf"
 | 
			
		||||
    KERNEL_ARCH="arm"
 | 
			
		||||
    DEFCONFIG="arch/arm/configs/multi_v7_defconfig"
 | 
			
		||||
    DEVICE_TREES="arch/arm/boot/dts/rk3288-veyron-jaq.dtb arch/arm/boot/dts/sun8i-h3-libretech-all-h3-cc.dtb"
 | 
			
		||||
    KERNEL_IMAGE_NAME="zImage"
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
############### Build dEQP runner
 | 
			
		||||
if [[ "$DEBIAN_ARCH" = "armhf" ]]; then
 | 
			
		||||
    EXTRA_MESON_ARGS="--cross-file /cross_file-armhf.txt"
 | 
			
		||||
fi
 | 
			
		||||
. .gitlab-ci/build-cts-runner.sh
 | 
			
		||||
mkdir -p /lava-files/rootfs-${DEBIAN_ARCH}/usr/bin
 | 
			
		||||
mv /usr/local/bin/deqp-runner /lava-files/rootfs-${DEBIAN_ARCH}/usr/bin/.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
############### Build dEQP
 | 
			
		||||
EXTRA_CMAKE_ARGS="-DCMAKE_C_COMPILER=${GCC_ARCH}-gcc -DCMAKE_CXX_COMPILER=${GCC_ARCH}-g++"
 | 
			
		||||
STRIP_CMD="${GCC_ARCH}-strip"
 | 
			
		||||
. .gitlab-ci/build-deqp-gl.sh
 | 
			
		||||
mv /deqp /lava-files/rootfs-${DEBIAN_ARCH}/.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
############### Cross-build kernel
 | 
			
		||||
KERNEL_URL="https://gitlab.freedesktop.org/tomeu/linux/-/archive/v5.5-rc5-panfrost-fixes/linux-v5.5-rc5-panfrost-fixes.tar.gz"
 | 
			
		||||
 | 
			
		||||
if [[ "$DEBIAN_ARCH" = "armhf" ]]; then
 | 
			
		||||
    export ARCH=${KERNEL_ARCH}
 | 
			
		||||
    export CROSS_COMPILE="${GCC_ARCH}-"
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
mkdir -p kernel
 | 
			
		||||
wget -qO- ${KERNEL_URL} | tar -xz --strip-components=1 -C kernel
 | 
			
		||||
pushd kernel
 | 
			
		||||
./scripts/kconfig/merge_config.sh ${DEFCONFIG} ../.gitlab-ci/${KERNEL_ARCH}.config
 | 
			
		||||
make -j12 ${KERNEL_IMAGE_NAME} dtbs
 | 
			
		||||
cp arch/${KERNEL_ARCH}/boot/${KERNEL_IMAGE_NAME} /lava-files/.
 | 
			
		||||
cp ${DEVICE_TREES} /lava-files/.
 | 
			
		||||
popd
 | 
			
		||||
rm -rf kernel
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
############### Create rootfs
 | 
			
		||||
set +e
 | 
			
		||||
debootstrap --variant=minbase --arch=${DEBIAN_ARCH} testing /lava-files/rootfs-${DEBIAN_ARCH}/ http://deb.debian.org/debian
 | 
			
		||||
cat /lava-files/rootfs-${DEBIAN_ARCH}/debootstrap/debootstrap.log
 | 
			
		||||
set -e
 | 
			
		||||
 | 
			
		||||
cp .gitlab-ci/create-rootfs.sh /lava-files/rootfs-${DEBIAN_ARCH}/.
 | 
			
		||||
chroot /lava-files/rootfs-${DEBIAN_ARCH} sh /create-rootfs.sh
 | 
			
		||||
rm /lava-files/rootfs-${DEBIAN_ARCH}/create-rootfs.sh
 | 
			
		||||
@@ -1,52 +0,0 @@
 | 
			
		||||
-----BEGIN PGP PUBLIC KEY BLOCK-----
 | 
			
		||||
Version: GnuPG v1.4.12 (GNU/Linux)
 | 
			
		||||
 | 
			
		||||
mQINBFE9lCwBEADi0WUAApM/mgHJRU8lVkkw0CHsZNpqaQDNaHefD6Rw3S4LxNmM
 | 
			
		||||
EZaOTkhP200XZM8lVdbfUW9xSjA3oPldc1HG26NjbqqCmWpdo2fb+r7VmU2dq3NM
 | 
			
		||||
R18ZlKixiLDE6OUfaXWKamZsXb6ITTYmgTO6orQWYrnW6ckYHSeaAkW0wkDAryl2
 | 
			
		||||
B5v8aoFnQ1rFiVEMo4NGzw4UX+MelF7rxaaregmKVTPiqCOSPJ1McC1dHFN533FY
 | 
			
		||||
Wh/RVLKWo6npu+owtwYFQW+zyQhKzSIMvNujFRzhIxzxR9Gn87MoLAyfgKEzrbbT
 | 
			
		||||
DhqqNXTxS4UMUKCQaO93TzetX/EBrRpJj+vP640yio80h4Dr5pAd7+LnKwgpTDk1
 | 
			
		||||
G88bBXJAcPZnTSKu9I2c6KY4iRNbvRz4i+ZdwwZtdW4nSdl2792L7Sl7Nc44uLL/
 | 
			
		||||
ZqkKDXEBF6lsX5XpABwyK89S/SbHOytXv9o4puv+65Ac5/UShspQTMSKGZgvDauU
 | 
			
		||||
cs8kE1U9dPOqVNCYq9Nfwinkf6RxV1k1+gwtclxQuY7UpKXP0hNAXjAiA5KS5Crq
 | 
			
		||||
7aaJg9q2F4bub0mNU6n7UI6vXguF2n4SEtzPRk6RP+4TiT3bZUsmr+1ktogyOJCc
 | 
			
		||||
Ha8G5VdL+NBIYQthOcieYCBnTeIH7D3Sp6FYQTYtVbKFzmMK+36ERreL/wARAQAB
 | 
			
		||||
tD1TeWx2ZXN0cmUgTGVkcnUgLSBEZWJpYW4gTExWTSBwYWNrYWdlcyA8c3lsdmVz
 | 
			
		||||
dHJlQGRlYmlhbi5vcmc+iQI4BBMBAgAiBQJRPZQsAhsDBgsJCAcDAgYVCAIJCgsE
 | 
			
		||||
FgIDAQIeAQIXgAAKCRAVz00Yr090Ibx+EADArS/hvkDF8juWMXxh17CgR0WZlHCC
 | 
			
		||||
9CTBWkg5a0bNN/3bb97cPQt/vIKWjQtkQpav6/5JTVCSx2riL4FHYhH0iuo4iAPR
 | 
			
		||||
udC7Cvg8g7bSPrKO6tenQZNvQm+tUmBHgFiMBJi92AjZ/Qn1Shg7p9ITivFxpLyX
 | 
			
		||||
wpmnF1OKyI2Kof2rm4BFwfSWuf8Fvh7kDMRLHv+MlnK/7j/BNpKdozXxLcwoFBmn
 | 
			
		||||
l0WjpAH3OFF7Pvm1LJdf1DjWKH0Dc3sc6zxtmBR/KHHg6kK4BGQNnFKujcP7TVdv
 | 
			
		||||
gMYv84kun14pnwjZcqOtN3UJtcx22880DOQzinoMs3Q4w4o05oIF+sSgHViFpc3W
 | 
			
		||||
R0v+RllnH05vKZo+LDzc83DQVrdwliV12eHxrMQ8UYg88zCbF/cHHnlzZWAJgftg
 | 
			
		||||
hB08v1BKPgYRUzwJ6VdVqXYcZWEaUJmQAPuAALyZESw94hSo28FAn0/gzEc5uOYx
 | 
			
		||||
K+xG/lFwgAGYNb3uGM5m0P6LVTfdg6vDwwOeTNIExVk3KVFXeSQef2ZMkhwA7wya
 | 
			
		||||
KJptkb62wBHFE+o9TUdtMCY6qONxMMdwioRE5BYNwAsS1PnRD2+jtlI0DzvKHt7B
 | 
			
		||||
MWd8hnoUKhMeZ9TNmo+8CpsAtXZcBho0zPGz/R8NlJhAWpdAZ1CmcPo83EW86Yq7
 | 
			
		||||
BxQUKnNHcwj2ebkCDQRRPZQsARAA4jxYmbTHwmMjqSizlMJYNuGOpIidEdx9zQ5g
 | 
			
		||||
zOr431/VfWq4S+VhMDhs15j9lyml0y4ok215VRFwrAREDg6UPMr7ajLmBQGau0Fc
 | 
			
		||||
bvZJ90l4NjXp5p0NEE/qOb9UEHT7EGkEhaZ1ekkWFTWCgsy7rRXfZLxB6sk7pzLC
 | 
			
		||||
DshyW3zjIakWAnpQ5j5obiDy708pReAuGB94NSyb1HoW/xGsGgvvCw4r0w3xPStw
 | 
			
		||||
F1PhmScE6NTBIfLliea3pl8vhKPlCh54Hk7I8QGjo1ETlRP4Qll1ZxHJ8u25f/ta
 | 
			
		||||
RES2Aw8Hi7j0EVcZ6MT9JWTI83yUcnUlZPZS2HyeWcUj+8nUC8W4N8An+aNps9l/
 | 
			
		||||
21inIl2TbGo3Yn1JQLnA1YCoGwC34g8QZTJhElEQBN0X29ayWW6OdFx8MDvllbBV
 | 
			
		||||
ymmKq2lK1U55mQTfDli7S3vfGz9Gp/oQwZ8bQpOeUkc5hbZszYwP4RX+68xDPfn+
 | 
			
		||||
M9udl+qW9wu+LyePbW6HX90LmkhNkkY2ZzUPRPDHZANU5btaPXc2H7edX4y4maQa
 | 
			
		||||
xenqD0lGh9LGz/mps4HEZtCI5CY8o0uCMF3lT0XfXhuLksr7Pxv57yue8LLTItOJ
 | 
			
		||||
d9Hmzp9G97SRYYeqU+8lyNXtU2PdrLLq7QHkzrsloG78lCpQcalHGACJzrlUWVP/
 | 
			
		||||
fN3Ht3kAEQEAAYkCHwQYAQIACQUCUT2ULAIbDAAKCRAVz00Yr090IbhWEADbr50X
 | 
			
		||||
OEXMIMGRLe+YMjeMX9NG4jxs0jZaWHc/WrGR+CCSUb9r6aPXeLo+45949uEfdSsB
 | 
			
		||||
pbaEdNWxF5Vr1CSjuO5siIlgDjmT655voXo67xVpEN4HhMrxugDJfCa6z97P0+ML
 | 
			
		||||
PdDxim57uNqkam9XIq9hKQaurxMAECDPmlEXI4QT3eu5qw5/knMzDMZj4Vi6hovL
 | 
			
		||||
wvvAeLHO/jsyfIdNmhBGU2RWCEZ9uo/MeerPHtRPfg74g+9PPfP6nyHD2Wes6yGd
 | 
			
		||||
oVQwtPNAQD6Cj7EaA2xdZYLJ7/jW6yiPu98FFWP74FN2dlyEA2uVziLsfBrgpS4l
 | 
			
		||||
tVOlrO2YzkkqUGrybzbLpj6eeHx+Cd7wcjI8CalsqtL6cG8cUEjtWQUHyTbQWAgG
 | 
			
		||||
5VPEgIAVhJ6RTZ26i/G+4J8neKyRs4vz+57UGwY6zI4AB1ZcWGEE3Bf+CDEDgmnP
 | 
			
		||||
LSwbnHefK9IljT9XU98PelSryUO/5UPw7leE0akXKB4DtekToO226px1VnGp3Bov
 | 
			
		||||
1GBGvpHvL2WizEwdk+nfk8LtrLzej+9FtIcq3uIrYnsac47Pf7p0otcFeTJTjSq3
 | 
			
		||||
krCaoG4Hx0zGQG2ZFpHrSrZTVy6lxvIdfi0beMgY6h78p6M9eYZHQHc02DjFkQXN
 | 
			
		||||
bXb5c6gCHESH5PXwPU4jQEE7Ib9J6sbk7ZT2Mw==
 | 
			
		||||
=j+4q
 | 
			
		||||
-----END PGP PUBLIC KEY BLOCK-----
 | 
			
		||||
@@ -1,220 +0,0 @@
 | 
			
		||||
#!/bin/bash
 | 
			
		||||
 | 
			
		||||
set -e
 | 
			
		||||
set -o xtrace
 | 
			
		||||
 | 
			
		||||
export DEBIAN_FRONTEND=noninteractive
 | 
			
		||||
 | 
			
		||||
CROSS_ARCHITECTURES="i386"
 | 
			
		||||
for arch in $CROSS_ARCHITECTURES; do
 | 
			
		||||
    dpkg --add-architecture $arch
 | 
			
		||||
done
 | 
			
		||||
 | 
			
		||||
apt-get install -y \
 | 
			
		||||
      ca-certificates \
 | 
			
		||||
      gnupg \
 | 
			
		||||
      unzip \
 | 
			
		||||
      wget
 | 
			
		||||
 | 
			
		||||
# Upstream LLVM package repository
 | 
			
		||||
apt-key add .gitlab-ci/container/llvm-snapshot.gpg.key
 | 
			
		||||
echo "deb https://apt.llvm.org/buster/ llvm-toolchain-buster-9 main" >/etc/apt/sources.list.d/llvm9.list
 | 
			
		||||
 | 
			
		||||
sed -i -e 's/http:\/\/deb/https:\/\/deb/g' /etc/apt/sources.list
 | 
			
		||||
echo 'deb https://deb.debian.org/debian buster-backports main' >/etc/apt/sources.list.d/backports.list
 | 
			
		||||
 | 
			
		||||
apt-get update
 | 
			
		||||
 | 
			
		||||
# Use newer packages from backports by default
 | 
			
		||||
cat >/etc/apt/preferences <<EOF
 | 
			
		||||
Package: *
 | 
			
		||||
Pin: release a=buster-backports
 | 
			
		||||
Pin-Priority: 500
 | 
			
		||||
EOF
 | 
			
		||||
 | 
			
		||||
apt-get dist-upgrade -y
 | 
			
		||||
 | 
			
		||||
apt-get install -y --no-remove \
 | 
			
		||||
      autoconf \
 | 
			
		||||
      automake \
 | 
			
		||||
      autotools-dev \
 | 
			
		||||
      bison \
 | 
			
		||||
      clang-9 \
 | 
			
		||||
      cmake \
 | 
			
		||||
      flex \
 | 
			
		||||
      g++ \
 | 
			
		||||
      gcc \
 | 
			
		||||
      gettext \
 | 
			
		||||
      git \
 | 
			
		||||
      libclang-6.0-dev \
 | 
			
		||||
      libclang-7-dev \
 | 
			
		||||
      libclang-8-dev \
 | 
			
		||||
      libclang-9-dev \
 | 
			
		||||
      libclc-dev \
 | 
			
		||||
      libelf-dev \
 | 
			
		||||
      libepoxy-dev \
 | 
			
		||||
      libexpat1-dev \
 | 
			
		||||
      libgbm-dev \
 | 
			
		||||
      libgtk-3-dev \
 | 
			
		||||
      libomxil-bellagio-dev \
 | 
			
		||||
      libpciaccess-dev \
 | 
			
		||||
      libtool \
 | 
			
		||||
      libunwind-dev \
 | 
			
		||||
      libva-dev \
 | 
			
		||||
      libvdpau-dev \
 | 
			
		||||
      libvulkan-dev \
 | 
			
		||||
      libx11-dev \
 | 
			
		||||
      libx11-xcb-dev \
 | 
			
		||||
      libxdamage-dev \
 | 
			
		||||
      libxext-dev \
 | 
			
		||||
      libxrandr-dev \
 | 
			
		||||
      libxrender-dev \
 | 
			
		||||
      libxshmfence-dev \
 | 
			
		||||
      libxvmc-dev \
 | 
			
		||||
      libxxf86vm-dev \
 | 
			
		||||
      llvm-6.0-dev \
 | 
			
		||||
      llvm-7-dev \
 | 
			
		||||
      llvm-8-dev \
 | 
			
		||||
      llvm-9-dev \
 | 
			
		||||
      meson \
 | 
			
		||||
      pkg-config \
 | 
			
		||||
      python-mako \
 | 
			
		||||
      python3-mako \
 | 
			
		||||
      scons \
 | 
			
		||||
      x11proto-dri2-dev \
 | 
			
		||||
      x11proto-gl-dev \
 | 
			
		||||
      x11proto-randr-dev \
 | 
			
		||||
      xz-utils \
 | 
			
		||||
      zlib1g-dev
 | 
			
		||||
 | 
			
		||||
# Cross-build Mesa deps
 | 
			
		||||
for arch in $CROSS_ARCHITECTURES; do
 | 
			
		||||
    apt-get install -y --no-remove \
 | 
			
		||||
            crossbuild-essential-${arch} \
 | 
			
		||||
            libdrm-dev:${arch} \
 | 
			
		||||
            libelf-dev:${arch} \
 | 
			
		||||
            libexpat1-dev:${arch}
 | 
			
		||||
done
 | 
			
		||||
 | 
			
		||||
# for 64bit windows cross-builds
 | 
			
		||||
apt-get install -y --no-remove \
 | 
			
		||||
    libz-mingw-w64-dev \
 | 
			
		||||
    mingw-w64 \
 | 
			
		||||
    wine \
 | 
			
		||||
    wine32 \
 | 
			
		||||
    wine64
 | 
			
		||||
 | 
			
		||||
# Debian's pkg-config wrapers for mingw are broken, and there's no sign that
 | 
			
		||||
# they're going to be fixed, so we'll just have to fix it ourselves
 | 
			
		||||
# https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=930492
 | 
			
		||||
cat >/usr/local/bin/x86_64-w64-mingw32-pkg-config <<EOF
 | 
			
		||||
#!/bin/sh
 | 
			
		||||
 | 
			
		||||
PKG_CONFIG_LIBDIR=/usr/x86_64-w64-mingw32/lib/pkgconfig pkg-config \$@
 | 
			
		||||
EOF
 | 
			
		||||
chmod +x /usr/local/bin/x86_64-w64-mingw32-pkg-config
 | 
			
		||||
 | 
			
		||||
# for the vulkan overlay layer
 | 
			
		||||
wget https://github.com/KhronosGroup/glslang/releases/download/master-tot/glslang-master-linux-Release.zip
 | 
			
		||||
unzip glslang-master-linux-Release.zip bin/glslangValidator
 | 
			
		||||
install -m755 bin/glslangValidator /usr/local/bin/
 | 
			
		||||
rm bin/glslangValidator glslang-master-linux-Release.zip
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# dependencies where we want a specific version
 | 
			
		||||
export              XORG_RELEASES=https://xorg.freedesktop.org/releases/individual
 | 
			
		||||
export               XCB_RELEASES=https://xcb.freedesktop.org/dist
 | 
			
		||||
export           WAYLAND_RELEASES=https://wayland.freedesktop.org/releases
 | 
			
		||||
 | 
			
		||||
export         XORGMACROS_VERSION=util-macros-1.19.0
 | 
			
		||||
export             LIBDRM_VERSION=libdrm-2.4.100
 | 
			
		||||
export           XCBPROTO_VERSION=xcb-proto-1.13
 | 
			
		||||
export             LIBXCB_VERSION=libxcb-1.13
 | 
			
		||||
export         LIBWAYLAND_VERSION=wayland-1.15.0
 | 
			
		||||
export  WAYLAND_PROTOCOLS_VERSION=wayland-protocols-1.12
 | 
			
		||||
 | 
			
		||||
wget $XORG_RELEASES/util/$XORGMACROS_VERSION.tar.bz2
 | 
			
		||||
tar -xvf $XORGMACROS_VERSION.tar.bz2 && rm $XORGMACROS_VERSION.tar.bz2
 | 
			
		||||
cd $XORGMACROS_VERSION; ./configure; make install; cd ..
 | 
			
		||||
rm -rf $XORGMACROS_VERSION
 | 
			
		||||
 | 
			
		||||
wget $XCB_RELEASES/$XCBPROTO_VERSION.tar.bz2
 | 
			
		||||
tar -xvf $XCBPROTO_VERSION.tar.bz2 && rm $XCBPROTO_VERSION.tar.bz2
 | 
			
		||||
cd $XCBPROTO_VERSION; ./configure; make install; cd ..
 | 
			
		||||
rm -rf $XCBPROTO_VERSION
 | 
			
		||||
 | 
			
		||||
wget $XCB_RELEASES/$LIBXCB_VERSION.tar.bz2
 | 
			
		||||
tar -xvf $LIBXCB_VERSION.tar.bz2 && rm $LIBXCB_VERSION.tar.bz2
 | 
			
		||||
cd $LIBXCB_VERSION; ./configure; make install; cd ..
 | 
			
		||||
rm -rf $LIBXCB_VERSION
 | 
			
		||||
 | 
			
		||||
wget https://dri.freedesktop.org/libdrm/$LIBDRM_VERSION.tar.bz2
 | 
			
		||||
tar -xvf $LIBDRM_VERSION.tar.bz2 && rm $LIBDRM_VERSION.tar.bz2
 | 
			
		||||
cd $LIBDRM_VERSION; meson build -D vc4=true -D freedreno=true -D etnaviv=true; ninja -j4 -C build install; cd ..
 | 
			
		||||
rm -rf $LIBDRM_VERSION
 | 
			
		||||
 | 
			
		||||
wget $WAYLAND_RELEASES/$LIBWAYLAND_VERSION.tar.xz
 | 
			
		||||
tar -xvf $LIBWAYLAND_VERSION.tar.xz && rm $LIBWAYLAND_VERSION.tar.xz
 | 
			
		||||
cd $LIBWAYLAND_VERSION; ./configure --enable-libraries --without-host-scanner --disable-documentation --disable-dtd-validation; make install; cd ..
 | 
			
		||||
rm -rf $LIBWAYLAND_VERSION
 | 
			
		||||
 | 
			
		||||
wget $WAYLAND_RELEASES/$WAYLAND_PROTOCOLS_VERSION.tar.xz
 | 
			
		||||
tar -xvf $WAYLAND_PROTOCOLS_VERSION.tar.xz && rm $WAYLAND_PROTOCOLS_VERSION.tar.xz
 | 
			
		||||
cd $WAYLAND_PROTOCOLS_VERSION; ./configure; make install; cd ..
 | 
			
		||||
rm -rf $WAYLAND_PROTOCOLS_VERSION
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# The version of libglvnd-dev in debian is too old
 | 
			
		||||
# Check this page to see when this local compilation can be dropped in favour of the package:
 | 
			
		||||
# https://packages.debian.org/libglvnd-dev
 | 
			
		||||
GLVND_VERSION=1.2.0
 | 
			
		||||
wget https://gitlab.freedesktop.org/glvnd/libglvnd/-/archive/v$GLVND_VERSION/libglvnd-v$GLVND_VERSION.tar.gz
 | 
			
		||||
tar -xvf libglvnd-v$GLVND_VERSION.tar.gz && rm libglvnd-v$GLVND_VERSION.tar.gz
 | 
			
		||||
pushd libglvnd-v$GLVND_VERSION; ./autogen.sh; ./configure; make install; popd
 | 
			
		||||
rm -rf libglvnd-v$GLVND_VERSION
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
pushd /usr/local
 | 
			
		||||
git clone https://gitlab.freedesktop.org/mesa/shader-db.git --depth 1
 | 
			
		||||
rm -rf shader-db/.git
 | 
			
		||||
cd shader-db
 | 
			
		||||
make
 | 
			
		||||
popd
 | 
			
		||||
 | 
			
		||||
# Use ccache to speed up builds
 | 
			
		||||
apt-get install -y --no-remove ccache
 | 
			
		||||
 | 
			
		||||
# We need xmllint to validate the XML files in Mesa
 | 
			
		||||
apt-get install -y --no-remove libxml2-utils
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Generate cross build files for Meson
 | 
			
		||||
for arch in $CROSS_ARCHITECTURES; do
 | 
			
		||||
  cross_file="/cross_file-$arch.txt"
 | 
			
		||||
  /usr/share/meson/debcrossgen --arch "$arch" -o "$cross_file"
 | 
			
		||||
  # Explicitly set ccache path for cross compilers
 | 
			
		||||
  sed -i "s|/usr/bin/\([^-]*\)-linux-gnu\([^-]*\)-g|/usr/lib/ccache/\\1-linux-gnu\\2-g|g" "$cross_file"
 | 
			
		||||
  if [ "$arch" = "i386" ]; then
 | 
			
		||||
    # Work around a bug in debcrossgen that should be fixed in the next release
 | 
			
		||||
    sed -i "s|cpu_family = 'i686'|cpu_family = 'x86'|g" "$cross_file"
 | 
			
		||||
    # Don't need wrapper for i386 executables
 | 
			
		||||
    sed -i -e '/\[properties\]/a\' -e "needs_exe_wrapper = False" "$cross_file"
 | 
			
		||||
  fi
 | 
			
		||||
done
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
############### Uninstall the build software
 | 
			
		||||
 | 
			
		||||
apt-get purge -y \
 | 
			
		||||
      autoconf \
 | 
			
		||||
      automake \
 | 
			
		||||
      autotools-dev \
 | 
			
		||||
      cmake \
 | 
			
		||||
      git \
 | 
			
		||||
      gnupg \
 | 
			
		||||
      libgbm-dev \
 | 
			
		||||
      libtool \
 | 
			
		||||
      unzip \
 | 
			
		||||
      wget
 | 
			
		||||
 | 
			
		||||
apt-get autoremove -y --purge
 | 
			
		||||
@@ -1,59 +0,0 @@
 | 
			
		||||
#!/bin/bash
 | 
			
		||||
 | 
			
		||||
set -e
 | 
			
		||||
set -o xtrace
 | 
			
		||||
 | 
			
		||||
export DEBIAN_FRONTEND=noninteractive
 | 
			
		||||
 | 
			
		||||
apt-get install -y \
 | 
			
		||||
      apt-transport-https \
 | 
			
		||||
      ca-certificates
 | 
			
		||||
 | 
			
		||||
sed -i -e 's/http:\/\/deb/https:\/\/deb/g' /etc/apt/sources.list
 | 
			
		||||
echo 'deb https://deb.debian.org/debian stretch-backports main' >/etc/apt/sources.list.d/backports.list
 | 
			
		||||
 | 
			
		||||
apt-get update
 | 
			
		||||
 | 
			
		||||
# Use newer packages from backports by default
 | 
			
		||||
cat >/etc/apt/preferences <<EOF
 | 
			
		||||
Package: *
 | 
			
		||||
Pin: release a=stretch-backports
 | 
			
		||||
Pin-Priority: 500
 | 
			
		||||
EOF
 | 
			
		||||
 | 
			
		||||
apt-get dist-upgrade -y
 | 
			
		||||
 | 
			
		||||
apt-get install -y --no-remove \
 | 
			
		||||
      llvm-3.9-dev \
 | 
			
		||||
      libclang-3.9-dev \
 | 
			
		||||
      llvm-4.0-dev \
 | 
			
		||||
      libclang-4.0-dev \
 | 
			
		||||
      llvm-5.0-dev \
 | 
			
		||||
      libclang-5.0-dev \
 | 
			
		||||
      g++ \
 | 
			
		||||
      bzip2 \
 | 
			
		||||
      ccache \
 | 
			
		||||
      zlib1g-dev \
 | 
			
		||||
      pkg-config \
 | 
			
		||||
      gcc \
 | 
			
		||||
      git \
 | 
			
		||||
      libepoxy-dev \
 | 
			
		||||
      libclc-dev \
 | 
			
		||||
      xz-utils \
 | 
			
		||||
      libdrm-dev \
 | 
			
		||||
      libexpat1-dev \
 | 
			
		||||
      libelf-dev \
 | 
			
		||||
      libunwind-dev \
 | 
			
		||||
      libpng-dev \
 | 
			
		||||
      python-mako \
 | 
			
		||||
      python3-mako \
 | 
			
		||||
      bison \
 | 
			
		||||
      flex \
 | 
			
		||||
      gettext \
 | 
			
		||||
      scons \
 | 
			
		||||
      meson
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
############### Uninstall unused packages
 | 
			
		||||
 | 
			
		||||
apt-get autoremove -y --purge
 | 
			
		||||
@@ -1,96 +0,0 @@
 | 
			
		||||
#!/bin/bash
 | 
			
		||||
 | 
			
		||||
set -e
 | 
			
		||||
set -o xtrace
 | 
			
		||||
 | 
			
		||||
export DEBIAN_FRONTEND=noninteractive
 | 
			
		||||
 | 
			
		||||
apt-get install -y \
 | 
			
		||||
        ca-certificates \
 | 
			
		||||
        gnupg \
 | 
			
		||||
 | 
			
		||||
# Upstream LLVM package repository
 | 
			
		||||
apt-key add .gitlab-ci/container/llvm-snapshot.gpg.key
 | 
			
		||||
echo "deb https://apt.llvm.org/buster/ llvm-toolchain-buster-9 main" >/etc/apt/sources.list.d/llvm9.list
 | 
			
		||||
 | 
			
		||||
sed -i -e 's/http:\/\/deb/https:\/\/deb/g' /etc/apt/sources.list
 | 
			
		||||
echo 'deb https://deb.debian.org/debian buster-backports main' >/etc/apt/sources.list.d/backports.list
 | 
			
		||||
 | 
			
		||||
apt-get update
 | 
			
		||||
 | 
			
		||||
# Use newer packages from backports by default
 | 
			
		||||
cat >/etc/apt/preferences <<EOF
 | 
			
		||||
Package: *
 | 
			
		||||
Pin: release a=buster-backports
 | 
			
		||||
Pin-Priority: 500
 | 
			
		||||
EOF
 | 
			
		||||
 | 
			
		||||
apt-get dist-upgrade -y
 | 
			
		||||
 | 
			
		||||
apt-get install -y --no-remove \
 | 
			
		||||
      cmake \
 | 
			
		||||
      g++ \
 | 
			
		||||
      git \
 | 
			
		||||
      gcc \
 | 
			
		||||
      libexpat1 \
 | 
			
		||||
      libgbm-dev \
 | 
			
		||||
      libgles2-mesa-dev \
 | 
			
		||||
      libpng16-16 \
 | 
			
		||||
      libpng-dev \
 | 
			
		||||
      libvulkan1 \
 | 
			
		||||
      libvulkan-dev \
 | 
			
		||||
      libwaffle-dev \
 | 
			
		||||
      libwayland-server0 \
 | 
			
		||||
      libxcb-xfixes0 \
 | 
			
		||||
      libxkbcommon0 \
 | 
			
		||||
      libxkbcommon-dev \
 | 
			
		||||
      libxrender1 \
 | 
			
		||||
      libxrender-dev \
 | 
			
		||||
      libllvm9 \
 | 
			
		||||
      meson \
 | 
			
		||||
      patch \
 | 
			
		||||
      pkg-config \
 | 
			
		||||
      python3-mako \
 | 
			
		||||
      python3-numpy \
 | 
			
		||||
      python3-six \
 | 
			
		||||
      python \
 | 
			
		||||
      waffle-utils \
 | 
			
		||||
      xauth \
 | 
			
		||||
      xvfb \
 | 
			
		||||
      zlib1g
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
############### Build piglit
 | 
			
		||||
 | 
			
		||||
. .gitlab-ci/build-piglit.sh
 | 
			
		||||
 | 
			
		||||
############### Build dEQP runner
 | 
			
		||||
 | 
			
		||||
. .gitlab-ci/build-cts-runner.sh
 | 
			
		||||
 | 
			
		||||
############### Build dEQP GL
 | 
			
		||||
 | 
			
		||||
. .gitlab-ci/build-deqp-gl.sh
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
############### Uninstall the build software
 | 
			
		||||
 | 
			
		||||
apt-get purge -y \
 | 
			
		||||
      cmake \
 | 
			
		||||
      g++ \
 | 
			
		||||
      gcc \
 | 
			
		||||
      git \
 | 
			
		||||
      gnupg \
 | 
			
		||||
      libc6-dev \
 | 
			
		||||
      libgbm-dev \
 | 
			
		||||
      libgles2-mesa-dev \
 | 
			
		||||
      libpng-dev \
 | 
			
		||||
      libwaffle-dev \
 | 
			
		||||
      libxkbcommon-dev \
 | 
			
		||||
      libxrender-dev \
 | 
			
		||||
      meson \
 | 
			
		||||
      patch \
 | 
			
		||||
      pkg-config \
 | 
			
		||||
      python
 | 
			
		||||
 | 
			
		||||
apt-get autoremove -y --purge
 | 
			
		||||
@@ -1,87 +0,0 @@
 | 
			
		||||
#!/bin/bash
 | 
			
		||||
 | 
			
		||||
set -e
 | 
			
		||||
set -o xtrace
 | 
			
		||||
 | 
			
		||||
export DEBIAN_FRONTEND=noninteractive
 | 
			
		||||
 | 
			
		||||
apt-get install -y \
 | 
			
		||||
        ca-certificates \
 | 
			
		||||
        gnupg \
 | 
			
		||||
 | 
			
		||||
# Upstream LLVM package repository
 | 
			
		||||
apt-key add .gitlab-ci/container/llvm-snapshot.gpg.key
 | 
			
		||||
echo "deb https://apt.llvm.org/buster/ llvm-toolchain-buster-9 main" >/etc/apt/sources.list.d/llvm9.list
 | 
			
		||||
 | 
			
		||||
sed -i -e 's/http:\/\/deb/https:\/\/deb/g' /etc/apt/sources.list
 | 
			
		||||
echo 'deb https://deb.debian.org/debian buster-backports main' >/etc/apt/sources.list.d/backports.list
 | 
			
		||||
 | 
			
		||||
apt-get update
 | 
			
		||||
 | 
			
		||||
# Use newer packages from backports by default
 | 
			
		||||
cat >/etc/apt/preferences <<EOF
 | 
			
		||||
Package: *
 | 
			
		||||
Pin: release a=buster-backports
 | 
			
		||||
Pin-Priority: 500
 | 
			
		||||
EOF
 | 
			
		||||
 | 
			
		||||
apt-get dist-upgrade -y
 | 
			
		||||
 | 
			
		||||
apt-get install -y --no-remove \
 | 
			
		||||
      cmake \
 | 
			
		||||
      g++ \
 | 
			
		||||
      git \
 | 
			
		||||
      gcc \
 | 
			
		||||
      libexpat1 \
 | 
			
		||||
      libgbm-dev \
 | 
			
		||||
      libgles2-mesa-dev \
 | 
			
		||||
      libpng16-16 \
 | 
			
		||||
      libpng-dev \
 | 
			
		||||
      libvulkan1 \
 | 
			
		||||
      libvulkan-dev \
 | 
			
		||||
      libwayland-server0 \
 | 
			
		||||
      libxcb-randr0 \
 | 
			
		||||
      libxcb-xfixes0 \
 | 
			
		||||
      libxkbcommon0 \
 | 
			
		||||
      libxkbcommon-dev \
 | 
			
		||||
      libxrender1 \
 | 
			
		||||
      libxrender-dev \
 | 
			
		||||
      libllvm9 \
 | 
			
		||||
      meson \
 | 
			
		||||
      patch \
 | 
			
		||||
      pkg-config \
 | 
			
		||||
      python3-distutils \
 | 
			
		||||
      python \
 | 
			
		||||
      xauth \
 | 
			
		||||
      xvfb
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
############### Build dEQP runner
 | 
			
		||||
 | 
			
		||||
. .gitlab-ci/build-cts-runner.sh
 | 
			
		||||
 | 
			
		||||
############### Build dEQP VK
 | 
			
		||||
 | 
			
		||||
. .gitlab-ci/build-deqp-vk.sh
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
############### Uninstall the build software
 | 
			
		||||
 | 
			
		||||
apt-get purge -y \
 | 
			
		||||
      cmake \
 | 
			
		||||
      g++ \
 | 
			
		||||
      gcc \
 | 
			
		||||
      git \
 | 
			
		||||
      gnupg \
 | 
			
		||||
      libgbm-dev \
 | 
			
		||||
      libgles2-mesa-dev \
 | 
			
		||||
      libpng-dev \
 | 
			
		||||
      libvulkan-dev \
 | 
			
		||||
      libxkbcommon-dev \
 | 
			
		||||
      libxrender-dev \
 | 
			
		||||
      meson \
 | 
			
		||||
      patch \
 | 
			
		||||
      pkg-config \
 | 
			
		||||
      python
 | 
			
		||||
 | 
			
		||||
apt-get autoremove -y --purge
 | 
			
		||||
@@ -1,195 +0,0 @@
 | 
			
		||||
#!/bin/bash
 | 
			
		||||
 | 
			
		||||
set -ex
 | 
			
		||||
 | 
			
		||||
LLVM=libllvm8
 | 
			
		||||
 | 
			
		||||
# LLVMPipe on armhf is broken with LLVM 8
 | 
			
		||||
if [ `dpkg --print-architecture` = "armhf" ]; then
 | 
			
		||||
        LLVM=libllvm7
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
apt-get -y install --no-install-recommends \
 | 
			
		||||
    initramfs-tools \
 | 
			
		||||
    libpng16-16 \
 | 
			
		||||
    strace \
 | 
			
		||||
    libsensors5 \
 | 
			
		||||
    libexpat1 \
 | 
			
		||||
    libdrm2 \
 | 
			
		||||
    libdrm-nouveau2 \
 | 
			
		||||
    $LLVM
 | 
			
		||||
passwd root -d
 | 
			
		||||
chsh -s /bin/sh
 | 
			
		||||
ln -s /bin/sh /init
 | 
			
		||||
 | 
			
		||||
#######################################################################
 | 
			
		||||
# Strip the image to a small minimal system without removing the debian
 | 
			
		||||
# toolchain.
 | 
			
		||||
 | 
			
		||||
# Copy timezone file and remove tzdata package
 | 
			
		||||
rm -rf /etc/localtime
 | 
			
		||||
cp /usr/share/zoneinfo/Etc/UTC /etc/localtime
 | 
			
		||||
 | 
			
		||||
UNNEEDED_PACKAGES="libfdisk1
 | 
			
		||||
                   tzdata
 | 
			
		||||
                   diffutils"
 | 
			
		||||
 | 
			
		||||
export DEBIAN_FRONTEND=noninteractive
 | 
			
		||||
 | 
			
		||||
# Removing unused packages
 | 
			
		||||
for PACKAGE in ${UNNEEDED_PACKAGES}
 | 
			
		||||
do
 | 
			
		||||
	echo ${PACKAGE}
 | 
			
		||||
	if ! apt-get remove --purge --yes "${PACKAGE}"
 | 
			
		||||
	then
 | 
			
		||||
		echo "WARNING: ${PACKAGE} isn't installed"
 | 
			
		||||
	fi
 | 
			
		||||
done
 | 
			
		||||
 | 
			
		||||
apt-get autoremove --yes || true
 | 
			
		||||
 | 
			
		||||
# Dropping logs
 | 
			
		||||
rm -rf /var/log/*
 | 
			
		||||
 | 
			
		||||
# Dropping documentation, localization, i18n files, etc
 | 
			
		||||
rm -rf /usr/share/doc/*
 | 
			
		||||
rm -rf /usr/share/locale/*
 | 
			
		||||
rm -rf /usr/share/man
 | 
			
		||||
rm -rf /usr/share/i18n/*
 | 
			
		||||
rm -rf /usr/share/info/*
 | 
			
		||||
rm -rf /usr/share/lintian/*
 | 
			
		||||
rm -rf /usr/share/common-licenses/*
 | 
			
		||||
rm -rf /usr/share/mime/*
 | 
			
		||||
 | 
			
		||||
# Dropping reportbug scripts
 | 
			
		||||
rm -rf /usr/share/bug
 | 
			
		||||
 | 
			
		||||
# Drop udev hwdb not required on a stripped system
 | 
			
		||||
rm -rf /lib/udev/hwdb.bin /lib/udev/hwdb.d/*
 | 
			
		||||
 | 
			
		||||
# Drop all gconv conversions && binaries
 | 
			
		||||
rm -rf usr/bin/iconv
 | 
			
		||||
rm -rf usr/sbin/iconvconfig
 | 
			
		||||
rm -rf usr/lib/*/gconv/
 | 
			
		||||
 | 
			
		||||
# Remove libusb database
 | 
			
		||||
rm -rf usr/sbin/update-usbids
 | 
			
		||||
rm -rf var/lib/usbutils/usb.ids
 | 
			
		||||
rm -rf usr/share/misc/usb.ids
 | 
			
		||||
 | 
			
		||||
#######################################################################
 | 
			
		||||
# Crush into a minimal production image to be deployed via some type of image
 | 
			
		||||
# updating system.
 | 
			
		||||
# IMPORTANT: The Debian system is not longer functional at this point,
 | 
			
		||||
# for example, apt and dpkg will stop working
 | 
			
		||||
 | 
			
		||||
UNNEEDED_PACKAGES="apt libapt-pkg5.0 "\
 | 
			
		||||
"ncurses-bin ncurses-base libncursesw5 libncurses5 "\
 | 
			
		||||
"perl-base "\
 | 
			
		||||
"debconf libdebconfclient0 "\
 | 
			
		||||
"e2fsprogs e2fslibs libfdisk1 "\
 | 
			
		||||
"insserv "\
 | 
			
		||||
"udev "\
 | 
			
		||||
"init-system-helpers "\
 | 
			
		||||
"bash "\
 | 
			
		||||
"cpio "\
 | 
			
		||||
"passwd "\
 | 
			
		||||
"libsemanage1 libsemanage-common "\
 | 
			
		||||
"libsepol1 "\
 | 
			
		||||
"gzip "\
 | 
			
		||||
"gpgv "\
 | 
			
		||||
"hostname "\
 | 
			
		||||
"adduser "\
 | 
			
		||||
"debian-archive-keyring "\
 | 
			
		||||
 | 
			
		||||
# Removing unneeded packages
 | 
			
		||||
for PACKAGE in ${UNNEEDED_PACKAGES}
 | 
			
		||||
do
 | 
			
		||||
	echo "Forcing removal of ${PACKAGE}"
 | 
			
		||||
	if ! dpkg --purge --force-remove-essential --force-depends "${PACKAGE}"
 | 
			
		||||
	then
 | 
			
		||||
		echo "WARNING: ${PACKAGE} isn't installed"
 | 
			
		||||
	fi
 | 
			
		||||
done
 | 
			
		||||
 | 
			
		||||
# Show what's left package-wise before dropping dpkg itself
 | 
			
		||||
COLUMNS=300 dpkg-query -W --showformat='${Installed-Size;10}\t${Package}\n' | sort -k1,1n
 | 
			
		||||
 | 
			
		||||
# Drop dpkg
 | 
			
		||||
dpkg --purge --force-remove-essential --force-depends  dpkg
 | 
			
		||||
 | 
			
		||||
# No apt or dpkg, no need for its configuration archives
 | 
			
		||||
rm -rf etc/apt
 | 
			
		||||
rm -rf etc/dpkg
 | 
			
		||||
 | 
			
		||||
# Drop directories not part of ostree
 | 
			
		||||
# Note that /var needs to exist as ostree bind mounts the deployment /var over
 | 
			
		||||
# it
 | 
			
		||||
rm -rf var/* opt srv share
 | 
			
		||||
 | 
			
		||||
# ca-certificates are in /etc drop the source
 | 
			
		||||
rm -rf usr/share/ca-certificates
 | 
			
		||||
 | 
			
		||||
# No bash, no need for completions
 | 
			
		||||
rm -rf usr/share/bash-completion
 | 
			
		||||
 | 
			
		||||
# No zsh, no need for comletions
 | 
			
		||||
rm -rf usr/share/zsh/vendor-completions
 | 
			
		||||
 | 
			
		||||
# drop gcc-6 python helpers
 | 
			
		||||
rm -rf usr/share/gcc-6
 | 
			
		||||
 | 
			
		||||
# Drop sysvinit leftovers
 | 
			
		||||
rm -rf etc/init.d
 | 
			
		||||
rm -rf etc/rc[0-6S].d
 | 
			
		||||
 | 
			
		||||
# Drop upstart helpers
 | 
			
		||||
rm -rf etc/init
 | 
			
		||||
 | 
			
		||||
# Various xtables helpers
 | 
			
		||||
rm -rf usr/lib/xtables
 | 
			
		||||
 | 
			
		||||
# Drop all locales
 | 
			
		||||
# TODO: only remaining locale is actually "C". Should we really remove it?
 | 
			
		||||
rm -rf usr/lib/locale/*
 | 
			
		||||
 | 
			
		||||
# partition helpers
 | 
			
		||||
rm usr/sbin/*fdisk
 | 
			
		||||
 | 
			
		||||
# local compiler
 | 
			
		||||
rm usr/bin/localedef
 | 
			
		||||
 | 
			
		||||
# Systemd dns resolver
 | 
			
		||||
find usr etc -name '*systemd-resolve*' -prune -exec rm -r {} \;
 | 
			
		||||
 | 
			
		||||
# Systemd network configuration
 | 
			
		||||
find usr etc -name '*networkd*' -prune -exec rm -r {} \;
 | 
			
		||||
 | 
			
		||||
# systemd ntp client
 | 
			
		||||
find usr etc -name '*timesyncd*' -prune -exec rm -r {} \;
 | 
			
		||||
 | 
			
		||||
# systemd hw database manager
 | 
			
		||||
find usr etc -name '*systemd-hwdb*' -prune -exec rm -r {} \;
 | 
			
		||||
 | 
			
		||||
# No need for fuse
 | 
			
		||||
find usr etc -name '*fuse*' -prune -exec rm -r {} \;
 | 
			
		||||
 | 
			
		||||
# lsb init function leftovers
 | 
			
		||||
rm -rf usr/lib/lsb
 | 
			
		||||
 | 
			
		||||
# Only needed when adding libraries
 | 
			
		||||
rm usr/sbin/ldconfig*
 | 
			
		||||
 | 
			
		||||
# Games, unused
 | 
			
		||||
rmdir usr/games
 | 
			
		||||
 | 
			
		||||
# Remove pam module to authenticate against a DB
 | 
			
		||||
# plus libdb-5.3.so that is only used by this pam module
 | 
			
		||||
rm usr/lib/*/security/pam_userdb.so
 | 
			
		||||
rm usr/lib/*/libdb-5.3.so
 | 
			
		||||
 | 
			
		||||
# remove NSS support for nis, nisplus and hesiod
 | 
			
		||||
rm usr/lib/*/libnss_hesiod*
 | 
			
		||||
rm usr/lib/*/libnss_nis*
 | 
			
		||||
 | 
			
		||||
rm bin/tar
 | 
			
		||||
@@ -1 +0,0 @@
 | 
			
		||||
u_format_test
 | 
			
		||||
@@ -1,10 +0,0 @@
 | 
			
		||||
# Note: skips lists for CI are just a list of lines that, when
 | 
			
		||||
# non-zero-length and not starting with '#', will regex match to
 | 
			
		||||
# delete lines from the test list.  Be careful.
 | 
			
		||||
 | 
			
		||||
# Skip the perf/stress tests to keep runtime manageable
 | 
			
		||||
dEQP-GLES[0-9]*.performance.*
 | 
			
		||||
dEQP-GLES[0-9]*.stress.*
 | 
			
		||||
 | 
			
		||||
# These are really slow on tiling architectures (including llvmpipe).
 | 
			
		||||
dEQP-GLES[0-9]*.functional.flush_finish.*
 | 
			
		||||
@@ -1,33 +0,0 @@
 | 
			
		||||
dEQP-GLES2.functional.clipping.line.wide_line_clip_viewport_center
 | 
			
		||||
dEQP-GLES2.functional.clipping.line.wide_line_clip_viewport_corner
 | 
			
		||||
dEQP-GLES2.functional.clipping.point.wide_point_clip
 | 
			
		||||
dEQP-GLES2.functional.clipping.point.wide_point_clip_viewport_center
 | 
			
		||||
dEQP-GLES2.functional.clipping.point.wide_point_clip_viewport_corner
 | 
			
		||||
dEQP-GLES2.functional.clipping.triangle_vertex.clip_three.clip_neg_x_neg_z_and_pos_x_pos_z_and_neg_x_neg_y_pos_z
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.recreate_depthbuffer.rebind_rbo_rgb565_depth_component16
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.recreate_depthbuffer.rebind_rbo_rgb5_a1_depth_component16
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.recreate_depthbuffer.rebind_rbo_rgba4_depth_component16
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.recreate_depthbuffer.rebind_tex2d_rgba_depth_component16
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.recreate_depthbuffer.rebind_tex2d_rgb_depth_component16
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.recreate_stencilbuffer.rebind_rbo_rgb565_stencil_index8
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.recreate_stencilbuffer.rebind_rbo_rgb5_a1_stencil_index8
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.recreate_stencilbuffer.rebind_rbo_rgba4_stencil_index8
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.recreate_stencilbuffer.rebind_tex2d_rgba_stencil_index8
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.recreate_stencilbuffer.rebind_tex2d_rgb_stencil_index8
 | 
			
		||||
dEQP-GLES2.functional.polygon_offset.fixed16_displacement_with_units
 | 
			
		||||
dEQP-GLES2.functional.texture.filtering.2d.linear_nearest_clamp_l8_npot
 | 
			
		||||
dEQP-GLES2.functional.texture.filtering.2d.linear_nearest_clamp_rgb888_npot
 | 
			
		||||
dEQP-GLES2.functional.texture.filtering.2d.linear_nearest_clamp_rgba4444_npot
 | 
			
		||||
dEQP-GLES2.functional.texture.filtering.2d.linear_nearest_clamp_rgba8888_npot
 | 
			
		||||
dEQP-GLES2.functional.texture.filtering.2d.nearest_linear_clamp_l8_npot
 | 
			
		||||
dEQP-GLES2.functional.texture.filtering.2d.nearest_linear_clamp_rgb888_npot
 | 
			
		||||
dEQP-GLES2.functional.texture.filtering.2d.nearest_linear_clamp_rgba4444_npot
 | 
			
		||||
dEQP-GLES2.functional.texture.filtering.2d.nearest_linear_clamp_rgba8888_npot
 | 
			
		||||
dEQP-GLES2.functional.texture.filtering.cube.linear_nearest_clamp_l8_npot
 | 
			
		||||
dEQP-GLES2.functional.texture.filtering.cube.linear_nearest_clamp_rgb888_npot
 | 
			
		||||
dEQP-GLES2.functional.texture.filtering.cube.linear_nearest_clamp_rgba4444_npot
 | 
			
		||||
dEQP-GLES2.functional.texture.filtering.cube.linear_nearest_clamp_rgba8888_npot
 | 
			
		||||
dEQP-GLES2.functional.texture.filtering.cube.nearest_linear_clamp_l8_npot
 | 
			
		||||
dEQP-GLES2.functional.texture.filtering.cube.nearest_linear_clamp_rgb888_npot
 | 
			
		||||
dEQP-GLES2.functional.texture.filtering.cube.nearest_linear_clamp_rgba4444_npot
 | 
			
		||||
dEQP-GLES2.functional.texture.filtering.cube.nearest_linear_clamp_rgba8888_npot
 | 
			
		||||
@@ -1,3 +0,0 @@
 | 
			
		||||
dEQP-GLES2.functional.clipping.triangle_vertex.clip_three.clip_neg_x_neg_z_and_pos_x_pos_z_and_neg_x_neg_y_pos_z
 | 
			
		||||
dEQP-GLES31.functional.stencil_texturing.render.depth24_stencil8_clear
 | 
			
		||||
dEQP-GLES31.functional.stencil_texturing.render.depth24_stencil8_draw
 | 
			
		||||
@@ -1,21 +0,0 @@
 | 
			
		||||
# Note: skips lists for CI are just a list of lines that, when
 | 
			
		||||
# non-zero-length and not starting with '#', will regex match to
 | 
			
		||||
# delete lines from the test list.  Be careful.
 | 
			
		||||
 | 
			
		||||
# Skip the perf/stress tests to keep runtime manageable
 | 
			
		||||
dEQP-GLES[0-9]*.performance.*
 | 
			
		||||
dEQP-GLES[0-9]*.stress.*
 | 
			
		||||
 | 
			
		||||
# These are really slow on tiling architectures (including llvmpipe).
 | 
			
		||||
dEQP-GLES[0-9]*.functional.flush_finish.*
 | 
			
		||||
 | 
			
		||||
# Unstable test results
 | 
			
		||||
#dEQP-GLES3.functional.fragment_out.random.*
 | 
			
		||||
dEQP-GLES3.functional.transform_feedback.*points.*
 | 
			
		||||
dEQP-GLES3.functional.transform_feedback.*lines.*
 | 
			
		||||
dEQP-GLES31.functional.primitive_bounding_box.*
 | 
			
		||||
#dEQP-GLES31.functional.layout_binding.ssbo.fragment_binding_array.*
 | 
			
		||||
 | 
			
		||||
# Intermittent timeout
 | 
			
		||||
dEQP-GLES31.functional.ssbo.layout.random.all_shared_buffer.23
 | 
			
		||||
 | 
			
		||||
@@ -1,205 +0,0 @@
 | 
			
		||||
dEQP-GLES2.functional.clipping.line.wide_line_clip_viewport_center
 | 
			
		||||
dEQP-GLES2.functional.clipping.line.wide_line_clip_viewport_corner
 | 
			
		||||
dEQP-GLES2.functional.clipping.triangle_vertex.clip_two.clip_neg_x_neg_y_pos_z_and_pos_x_pos_y_neg_z
 | 
			
		||||
dEQP-GLES2.functional.clipping.triangle_vertex.clip_two.clip_neg_x_pos_y_pos_z_and_pos_x_neg_y_neg_z
 | 
			
		||||
dEQP-GLES2.functional.clipping.triangle_vertex.clip_two.clip_pos_x_neg_y_pos_z_and_neg_x_pos_y_neg_z
 | 
			
		||||
dEQP-GLES2.functional.clipping.triangle_vertex.clip_two.clip_pos_x_pos_y_pos_z_and_neg_x_neg_y_neg_z
 | 
			
		||||
dEQP-GLES2.functional.depth_stencil_clear.depth_stencil_masked
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.no_rebind_rbo_rgb565_depth_component16
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.no_rebind_rbo_rgb565_stencil_index8
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.no_rebind_rbo_rgb5_a1_depth_component16
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.no_rebind_rbo_rgb5_a1_stencil_index8
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.no_rebind_rbo_rgba4_depth_component16
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.no_rebind_rbo_rgba4_stencil_index8
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.no_rebind_tex2d_rgba_depth_component16
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.no_rebind_tex2d_rgba_stencil_index8
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.no_rebind_tex2d_rgb_depth_component16
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.no_rebind_tex2d_rgb_stencil_index8
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.rebind_rbo_rgb565_depth_component16
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.rebind_rbo_rgb565_stencil_index8
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.rebind_rbo_rgb5_a1_depth_component16
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.rebind_rbo_rgb5_a1_stencil_index8
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.rebind_rbo_rgba4_depth_component16
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.rebind_rbo_rgba4_stencil_index8
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.rebind_tex2d_rgba_depth_component16
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.rebind_tex2d_rgba_stencil_index8
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.rebind_tex2d_rgb_depth_component16
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.rebind_tex2d_rgb_stencil_index8
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.shared_colorbuffer.rbo_rgb565_stencil_index8
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.shared_colorbuffer.rbo_rgb5_a1_stencil_index8
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.shared_colorbuffer.rbo_rgba4_stencil_index8
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.shared_colorbuffer.tex2d_rgba_stencil_index8
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.shared_colorbuffer.tex2d_rgb_stencil_index8
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.shared_depthbuffer.rbo_rgb565_depth_component16
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.shared_depthbuffer.rbo_rgb5_a1_depth_component16
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.shared_depthbuffer.rbo_rgba4_depth_component16
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.shared_depthbuffer.tex2d_rgba_depth_component16
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.shared_depthbuffer.tex2d_rgb_depth_component16
 | 
			
		||||
dEQP-GLES2.functional.fragment_ops.depth_stencil.random.0
 | 
			
		||||
dEQP-GLES2.functional.fragment_ops.depth_stencil.random.1
 | 
			
		||||
dEQP-GLES2.functional.fragment_ops.depth_stencil.random.10
 | 
			
		||||
dEQP-GLES2.functional.fragment_ops.depth_stencil.random.11
 | 
			
		||||
dEQP-GLES2.functional.fragment_ops.depth_stencil.random.12
 | 
			
		||||
dEQP-GLES2.functional.fragment_ops.depth_stencil.random.13
 | 
			
		||||
dEQP-GLES2.functional.fragment_ops.depth_stencil.random.14
 | 
			
		||||
dEQP-GLES2.functional.fragment_ops.depth_stencil.random.15
 | 
			
		||||
dEQP-GLES2.functional.fragment_ops.depth_stencil.random.16
 | 
			
		||||
dEQP-GLES2.functional.fragment_ops.depth_stencil.random.17
 | 
			
		||||
dEQP-GLES2.functional.fragment_ops.depth_stencil.random.18
 | 
			
		||||
dEQP-GLES2.functional.fragment_ops.depth_stencil.random.19
 | 
			
		||||
dEQP-GLES2.functional.fragment_ops.depth_stencil.random.2
 | 
			
		||||
dEQP-GLES2.functional.fragment_ops.depth_stencil.random.20
 | 
			
		||||
dEQP-GLES2.functional.fragment_ops.depth_stencil.random.21
 | 
			
		||||
dEQP-GLES2.functional.fragment_ops.depth_stencil.random.22
 | 
			
		||||
dEQP-GLES2.functional.fragment_ops.depth_stencil.random.23
 | 
			
		||||
dEQP-GLES2.functional.fragment_ops.depth_stencil.random.24
 | 
			
		||||
dEQP-GLES2.functional.fragment_ops.depth_stencil.random.3
 | 
			
		||||
dEQP-GLES2.functional.fragment_ops.depth_stencil.random.4
 | 
			
		||||
dEQP-GLES2.functional.fragment_ops.depth_stencil.random.5
 | 
			
		||||
dEQP-GLES2.functional.fragment_ops.depth_stencil.random.6
 | 
			
		||||
dEQP-GLES2.functional.fragment_ops.depth_stencil.random.7
 | 
			
		||||
dEQP-GLES2.functional.fragment_ops.depth_stencil.random.8
 | 
			
		||||
dEQP-GLES2.functional.fragment_ops.depth_stencil.random.9
 | 
			
		||||
dEQP-GLES2.functional.fragment_ops.depth_stencil.write_mask.stencil
 | 
			
		||||
dEQP-GLES2.functional.shaders.algorithm.hsl_to_rgb_vertex
 | 
			
		||||
dEQP-GLES2.functional.shaders.functions.array_arguments.global_in_int_vertex
 | 
			
		||||
dEQP-GLES2.functional.shaders.functions.array_arguments.local_in_int_vertex
 | 
			
		||||
dEQP-GLES2.functional.shaders.functions.datatypes.int_int_vertex
 | 
			
		||||
dEQP-GLES2.functional.shaders.functions.overloading.builtin_sin_vertex
 | 
			
		||||
dEQP-GLES2.functional.shaders.functions.overloading.builtin_step_vertex
 | 
			
		||||
dEQP-GLES2.functional.shaders.functions.overloading.user_func_arg_int_types_vertex
 | 
			
		||||
dEQP-GLES2.functional.shaders.functions.qualifiers.inout_highp_int_vertex
 | 
			
		||||
dEQP-GLES2.functional.shaders.functions.qualifiers.inout_int_vertex
 | 
			
		||||
dEQP-GLES2.functional.shaders.functions.qualifiers.inout_lowp_int_vertex
 | 
			
		||||
dEQP-GLES2.functional.shaders.functions.qualifiers.out_highp_int_vertex
 | 
			
		||||
dEQP-GLES2.functional.shaders.functions.qualifiers.out_int_vertex
 | 
			
		||||
dEQP-GLES2.functional.shaders.functions.qualifiers.out_lowp_int_vertex
 | 
			
		||||
dEQP-GLES2.functional.shaders.indexing.matrix_subscript.mat3_dynamic_loop_write_static_loop_read_vertex
 | 
			
		||||
dEQP-GLES2.functional.shaders.indexing.matrix_subscript.mat3_dynamic_loop_write_static_read_vertex
 | 
			
		||||
dEQP-GLES2.functional.shaders.indexing.matrix_subscript.mat3_dynamic_write_dynamic_loop_read_vertex
 | 
			
		||||
dEQP-GLES2.functional.shaders.loops.do_while_constant_iterations.conditional_body_vertex
 | 
			
		||||
dEQP-GLES2.functional.shaders.loops.do_while_dynamic_iterations.vector_counter_fragment
 | 
			
		||||
dEQP-GLES2.functional.shaders.loops.do_while_uniform_iterations.conditional_body_vertex
 | 
			
		||||
dEQP-GLES2.functional.shaders.loops.do_while_uniform_iterations.nested_tricky_dataflow_2_vertex
 | 
			
		||||
dEQP-GLES2.functional.shaders.loops.for_dynamic_iterations.vector_counter_fragment
 | 
			
		||||
dEQP-GLES2.functional.shaders.loops.while_constant_iterations.compound_statement_vertex
 | 
			
		||||
dEQP-GLES2.functional.shaders.loops.while_constant_iterations.sequence_statement_vertex
 | 
			
		||||
dEQP-GLES2.functional.shaders.loops.while_dynamic_iterations.nested_sequence_vertex
 | 
			
		||||
dEQP-GLES2.functional.shaders.loops.while_dynamic_iterations.vector_counter_fragment
 | 
			
		||||
dEQP-GLES2.functional.shaders.loops.while_uniform_iterations.nested_vertex
 | 
			
		||||
dEQP-GLES2.functional.shaders.operator.binary_operator.sub_assign_effect.highp_int_vertex
 | 
			
		||||
dEQP-GLES2.functional.shaders.operator.binary_operator.sub_assign_effect.highp_ivec2_int_vertex
 | 
			
		||||
dEQP-GLES2.functional.shaders.operator.binary_operator.sub_assign_effect.highp_ivec2_vertex
 | 
			
		||||
dEQP-GLES2.functional.shaders.operator.binary_operator.sub_assign_effect.highp_ivec3_int_vertex
 | 
			
		||||
dEQP-GLES2.functional.shaders.operator.binary_operator.sub_assign_effect.highp_ivec3_vertex
 | 
			
		||||
dEQP-GLES2.functional.shaders.operator.binary_operator.sub_assign_effect.highp_ivec4_int_vertex
 | 
			
		||||
dEQP-GLES2.functional.shaders.operator.binary_operator.sub_assign_effect.highp_ivec4_vertex
 | 
			
		||||
dEQP-GLES2.functional.shaders.operator.binary_operator.sub_assign_effect.lowp_int_vertex
 | 
			
		||||
dEQP-GLES2.functional.shaders.operator.binary_operator.sub_assign_effect.lowp_ivec2_int_vertex
 | 
			
		||||
dEQP-GLES2.functional.shaders.operator.binary_operator.sub_assign_effect.lowp_ivec2_vertex
 | 
			
		||||
dEQP-GLES2.functional.shaders.operator.binary_operator.sub_assign_effect.lowp_ivec3_int_vertex
 | 
			
		||||
dEQP-GLES2.functional.shaders.operator.binary_operator.sub_assign_effect.lowp_ivec3_vertex
 | 
			
		||||
dEQP-GLES2.functional.shaders.operator.binary_operator.sub_assign_effect.lowp_ivec4_int_vertex
 | 
			
		||||
dEQP-GLES2.functional.shaders.operator.binary_operator.sub_assign_effect.lowp_ivec4_vertex
 | 
			
		||||
dEQP-GLES2.functional.shaders.operator.binary_operator.sub_assign_effect.mediump_int_vertex
 | 
			
		||||
dEQP-GLES2.functional.shaders.operator.binary_operator.sub_assign_effect.mediump_ivec2_int_vertex
 | 
			
		||||
dEQP-GLES2.functional.shaders.operator.binary_operator.sub_assign_effect.mediump_ivec2_vertex
 | 
			
		||||
dEQP-GLES2.functional.shaders.operator.binary_operator.sub_assign_effect.mediump_ivec3_int_vertex
 | 
			
		||||
dEQP-GLES2.functional.shaders.operator.binary_operator.sub_assign_effect.mediump_ivec3_vertex
 | 
			
		||||
dEQP-GLES2.functional.shaders.operator.binary_operator.sub_assign_effect.mediump_ivec4_int_vertex
 | 
			
		||||
dEQP-GLES2.functional.shaders.operator.binary_operator.sub_assign_effect.mediump_ivec4_vertex
 | 
			
		||||
dEQP-GLES2.functional.shaders.operator.binary_operator.sub_assign_result.highp_int_vertex
 | 
			
		||||
dEQP-GLES2.functional.shaders.operator.binary_operator.sub_assign_result.highp_ivec2_int_vertex
 | 
			
		||||
dEQP-GLES2.functional.shaders.operator.binary_operator.sub_assign_result.highp_ivec2_vertex
 | 
			
		||||
dEQP-GLES2.functional.shaders.operator.binary_operator.sub_assign_result.highp_ivec3_int_vertex
 | 
			
		||||
dEQP-GLES2.functional.shaders.operator.binary_operator.sub_assign_result.highp_ivec3_vertex
 | 
			
		||||
dEQP-GLES2.functional.shaders.operator.binary_operator.sub_assign_result.highp_ivec4_int_vertex
 | 
			
		||||
dEQP-GLES2.functional.shaders.operator.binary_operator.sub_assign_result.highp_ivec4_vertex
 | 
			
		||||
dEQP-GLES2.functional.shaders.operator.binary_operator.sub_assign_result.lowp_int_vertex
 | 
			
		||||
dEQP-GLES2.functional.shaders.operator.binary_operator.sub_assign_result.lowp_ivec2_int_vertex
 | 
			
		||||
dEQP-GLES2.functional.shaders.operator.binary_operator.sub_assign_result.lowp_ivec2_vertex
 | 
			
		||||
dEQP-GLES2.functional.shaders.operator.binary_operator.sub_assign_result.lowp_ivec3_int_vertex
 | 
			
		||||
dEQP-GLES2.functional.shaders.operator.binary_operator.sub_assign_result.lowp_ivec3_vertex
 | 
			
		||||
dEQP-GLES2.functional.shaders.operator.binary_operator.sub_assign_result.lowp_ivec4_int_vertex
 | 
			
		||||
dEQP-GLES2.functional.shaders.operator.binary_operator.sub_assign_result.lowp_ivec4_vertex
 | 
			
		||||
dEQP-GLES2.functional.shaders.operator.binary_operator.sub_assign_result.mediump_int_vertex
 | 
			
		||||
dEQP-GLES2.functional.shaders.operator.binary_operator.sub_assign_result.mediump_ivec2_int_vertex
 | 
			
		||||
dEQP-GLES2.functional.shaders.operator.binary_operator.sub_assign_result.mediump_ivec2_vertex
 | 
			
		||||
dEQP-GLES2.functional.shaders.operator.binary_operator.sub_assign_result.mediump_ivec3_int_vertex
 | 
			
		||||
dEQP-GLES2.functional.shaders.operator.binary_operator.sub_assign_result.mediump_ivec3_vertex
 | 
			
		||||
dEQP-GLES2.functional.shaders.operator.binary_operator.sub_assign_result.mediump_ivec4_int_vertex
 | 
			
		||||
dEQP-GLES2.functional.shaders.operator.binary_operator.sub_assign_result.mediump_ivec4_vertex
 | 
			
		||||
dEQP-GLES2.functional.shaders.operator.binary_operator.sub.highp_int_ivec2_vertex
 | 
			
		||||
dEQP-GLES2.functional.shaders.operator.binary_operator.sub.highp_int_ivec3_vertex
 | 
			
		||||
dEQP-GLES2.functional.shaders.operator.binary_operator.sub.highp_int_ivec4_vertex
 | 
			
		||||
dEQP-GLES2.functional.shaders.operator.binary_operator.sub.highp_int_vertex
 | 
			
		||||
dEQP-GLES2.functional.shaders.operator.binary_operator.sub.highp_ivec2_int_vertex
 | 
			
		||||
dEQP-GLES2.functional.shaders.operator.binary_operator.sub.highp_ivec2_vertex
 | 
			
		||||
dEQP-GLES2.functional.shaders.operator.binary_operator.sub.highp_ivec3_int_vertex
 | 
			
		||||
dEQP-GLES2.functional.shaders.operator.binary_operator.sub.highp_ivec3_vertex
 | 
			
		||||
dEQP-GLES2.functional.shaders.operator.binary_operator.sub.highp_ivec4_int_vertex
 | 
			
		||||
dEQP-GLES2.functional.shaders.operator.binary_operator.sub.highp_ivec4_vertex
 | 
			
		||||
dEQP-GLES2.functional.shaders.operator.binary_operator.sub.lowp_int_ivec2_vertex
 | 
			
		||||
dEQP-GLES2.functional.shaders.operator.binary_operator.sub.lowp_int_ivec3_vertex
 | 
			
		||||
dEQP-GLES2.functional.shaders.operator.binary_operator.sub.lowp_int_ivec4_vertex
 | 
			
		||||
dEQP-GLES2.functional.shaders.operator.binary_operator.sub.lowp_int_vertex
 | 
			
		||||
dEQP-GLES2.functional.shaders.operator.binary_operator.sub.lowp_ivec2_int_vertex
 | 
			
		||||
dEQP-GLES2.functional.shaders.operator.binary_operator.sub.lowp_ivec2_vertex
 | 
			
		||||
dEQP-GLES2.functional.shaders.operator.binary_operator.sub.lowp_ivec3_int_vertex
 | 
			
		||||
dEQP-GLES2.functional.shaders.operator.binary_operator.sub.lowp_ivec3_vertex
 | 
			
		||||
dEQP-GLES2.functional.shaders.operator.binary_operator.sub.lowp_ivec4_int_vertex
 | 
			
		||||
dEQP-GLES2.functional.shaders.operator.binary_operator.sub.lowp_ivec4_vertex
 | 
			
		||||
dEQP-GLES2.functional.shaders.operator.binary_operator.sub.mediump_int_ivec2_vertex
 | 
			
		||||
dEQP-GLES2.functional.shaders.operator.binary_operator.sub.mediump_int_ivec3_vertex
 | 
			
		||||
dEQP-GLES2.functional.shaders.operator.binary_operator.sub.mediump_int_ivec4_vertex
 | 
			
		||||
dEQP-GLES2.functional.shaders.operator.binary_operator.sub.mediump_int_vertex
 | 
			
		||||
dEQP-GLES2.functional.shaders.operator.binary_operator.sub.mediump_ivec2_int_vertex
 | 
			
		||||
dEQP-GLES2.functional.shaders.operator.binary_operator.sub.mediump_ivec2_vertex
 | 
			
		||||
dEQP-GLES2.functional.shaders.operator.binary_operator.sub.mediump_ivec3_int_vertex
 | 
			
		||||
dEQP-GLES2.functional.shaders.operator.binary_operator.sub.mediump_ivec3_vertex
 | 
			
		||||
dEQP-GLES2.functional.shaders.operator.binary_operator.sub.mediump_ivec4_int_vertex
 | 
			
		||||
dEQP-GLES2.functional.shaders.operator.binary_operator.sub.mediump_ivec4_vertex
 | 
			
		||||
dEQP-GLES2.functional.shaders.operator.unary_operator.minus.highp_int_vertex
 | 
			
		||||
dEQP-GLES2.functional.shaders.operator.unary_operator.minus.highp_ivec2_vertex
 | 
			
		||||
dEQP-GLES2.functional.shaders.operator.unary_operator.minus.highp_ivec3_vertex
 | 
			
		||||
dEQP-GLES2.functional.shaders.operator.unary_operator.minus.highp_ivec4_vertex
 | 
			
		||||
dEQP-GLES2.functional.shaders.operator.unary_operator.minus.lowp_int_vertex
 | 
			
		||||
dEQP-GLES2.functional.shaders.operator.unary_operator.minus.lowp_ivec2_vertex
 | 
			
		||||
dEQP-GLES2.functional.shaders.operator.unary_operator.minus.lowp_ivec3_vertex
 | 
			
		||||
dEQP-GLES2.functional.shaders.operator.unary_operator.minus.lowp_ivec4_vertex
 | 
			
		||||
dEQP-GLES2.functional.shaders.operator.unary_operator.minus.mediump_int_vertex
 | 
			
		||||
dEQP-GLES2.functional.shaders.operator.unary_operator.minus.mediump_ivec2_vertex
 | 
			
		||||
dEQP-GLES2.functional.shaders.operator.unary_operator.minus.mediump_ivec3_vertex
 | 
			
		||||
dEQP-GLES2.functional.shaders.operator.unary_operator.minus.mediump_ivec4_vertex
 | 
			
		||||
dEQP-GLES2.functional.shaders.random.all_features.fragment.37
 | 
			
		||||
dEQP-GLES2.functional.shaders.random.exponential.fragment.11
 | 
			
		||||
dEQP-GLES2.functional.shaders.random.exponential.fragment.12
 | 
			
		||||
dEQP-GLES2.functional.shaders.random.exponential.fragment.14
 | 
			
		||||
dEQP-GLES2.functional.shaders.random.exponential.fragment.37
 | 
			
		||||
dEQP-GLES2.functional.shaders.random.exponential.fragment.5
 | 
			
		||||
dEQP-GLES2.functional.shaders.random.exponential.fragment.74
 | 
			
		||||
dEQP-GLES2.functional.shaders.random.texture.fragment.28
 | 
			
		||||
dEQP-GLES2.functional.shaders.random.trigonometric.fragment.1
 | 
			
		||||
dEQP-GLES2.functional.shaders.random.trigonometric.fragment.65
 | 
			
		||||
dEQP-GLES2.functional.shaders.random.trigonometric.fragment.69
 | 
			
		||||
dEQP-GLES2.functional.shaders.texture_functions.fragment.texture2d_bias
 | 
			
		||||
dEQP-GLES2.functional.shaders.texture_functions.fragment.texture2dproj_vec4_bias
 | 
			
		||||
dEQP-GLES2.functional.shaders.texture_functions.fragment.texturecube_bias
 | 
			
		||||
dEQP-GLES2.functional.texture.filtering.2d.linear_mipmap_linear_linear_clamp_etc1
 | 
			
		||||
dEQP-GLES2.functional.texture.filtering.2d.linear_mipmap_linear_linear_clamp_rgba8888
 | 
			
		||||
dEQP-GLES2.functional.texture.filtering.2d.linear_mipmap_linear_linear_mirror_etc1
 | 
			
		||||
dEQP-GLES2.functional.texture.filtering.2d.linear_mipmap_linear_linear_mirror_rgba8888
 | 
			
		||||
dEQP-GLES2.functional.texture.filtering.2d.linear_mipmap_linear_nearest_clamp_etc1
 | 
			
		||||
dEQP-GLES2.functional.texture.filtering.2d.linear_mipmap_linear_nearest_clamp_rgba8888
 | 
			
		||||
dEQP-GLES2.functional.texture.filtering.2d.linear_mipmap_linear_nearest_mirror_etc1
 | 
			
		||||
dEQP-GLES2.functional.texture.filtering.2d.linear_mipmap_linear_nearest_mirror_rgba8888
 | 
			
		||||
dEQP-GLES2.functional.texture.mipmap.cube.basic.linear_linear
 | 
			
		||||
dEQP-GLES2.functional.texture.mipmap.cube.basic.linear_nearest
 | 
			
		||||
dEQP-GLES2.functional.texture.mipmap.cube.bias.linear_linear
 | 
			
		||||
dEQP-GLES2.functional.texture.mipmap.cube.bias.linear_nearest
 | 
			
		||||
dEQP-GLES2.functional.texture.mipmap.cube.projected.linear_linear
 | 
			
		||||
dEQP-GLES2.functional.texture.mipmap.cube.projected.linear_nearest
 | 
			
		||||
dEQP-GLES2.functional.texture.specification.basic_copytexsubimage2d.2d_rgb
 | 
			
		||||
dEQP-GLES2.functional.texture.specification.basic_copytexsubimage2d.2d_rgba
 | 
			
		||||
dEQP-GLES2.functional.texture.specification.basic_copytexsubimage2d.cube_rgb
 | 
			
		||||
dEQP-GLES2.functional.texture.specification.basic_copytexsubimage2d.cube_rgba
 | 
			
		||||
@@ -1,46 +0,0 @@
 | 
			
		||||
# Note: skips lists for CI are just a list of lines that, when
 | 
			
		||||
# non-zero-length and not starting with '#', will regex match to
 | 
			
		||||
# delete lines from the test list.  Be careful.
 | 
			
		||||
 | 
			
		||||
# Skip the perf/stress tests to keep runtime manageable
 | 
			
		||||
dEQP-GLES[0-9]*.performance
 | 
			
		||||
dEQP-GLES[0-9]*.stress
 | 
			
		||||
 | 
			
		||||
# These are really slow on tiling architectures (including llvmpipe).
 | 
			
		||||
dEQP-GLES[0-9]*.functional.flush_finish
 | 
			
		||||
 | 
			
		||||
# Crashes
 | 
			
		||||
dEQP-GLES2.functional.shaders.invariance.highp.common_subexpression_1
 | 
			
		||||
dEQP-GLES2.functional.shaders.invariance.mediump.common_subexpression_1
 | 
			
		||||
dEQP-GLES2.functional.shaders.invariance.lowp.common_subexpression_1
 | 
			
		||||
 | 
			
		||||
# Flaky
 | 
			
		||||
dEQP-GLES2.functional.fbo.completeness.size.distinct
 | 
			
		||||
dEQP-GLES2.functional.negative_api.shader.uniform_matrixfv_invalid_transpose
 | 
			
		||||
dEQP-GLES2.functional.negative_api.texture.generatemipmap_zero_level_array_compressed
 | 
			
		||||
dEQP-GLES2.functional.shaders.random.exponential.fragment.94
 | 
			
		||||
dEQP-GLES2.functional.shaders.random.all_features.fragment.55
 | 
			
		||||
dEQP-GLES2.functional.clipping.triangle_vertex.clip_three.clip_neg_x_neg_z_and_pos_x_pos_z_and_neg_x_neg_y_pos_z
 | 
			
		||||
 | 
			
		||||
# Driver bugs causing GPU errors
 | 
			
		||||
dEQP-GLES2.functional.shaders.loops.while_constant_iterations.nested_sequence_vertex
 | 
			
		||||
dEQP-GLES2.functional.shaders.loops.while_constant_iterations.conditional_body_vertex
 | 
			
		||||
dEQP-GLES2.functional.shaders.loops.while_uniform_iterations.conditional_continue_vertex
 | 
			
		||||
dEQP-GLES2.functional.shaders.loops.while_uniform_iterations.double_continue_vertex
 | 
			
		||||
 | 
			
		||||
# Hangs / OOM
 | 
			
		||||
dEQP-GLES2.functional.shaders.indexing.varying_array.vec4_dynamic_loop_write_static_read
 | 
			
		||||
dEQP-GLES2.functional.shaders.indexing.varying_array.vec4_dynamic_loop_write_dynamic_read
 | 
			
		||||
dEQP-GLES2.functional.shaders.indexing.varying_array.vec4_dynamic_loop_write_static_loop_read
 | 
			
		||||
dEQP-GLES2.functional.shaders.indexing.varying_array.vec4_dynamic_loop_write_dynamic_loop_read
 | 
			
		||||
dEQP-GLES2.functional.shaders.indexing.tmp_array.vec3_dynamic_loop_write_dynamic_read_vertex
 | 
			
		||||
 | 
			
		||||
dEQP-GLES2.functional.shaders.indexing.tmp_array.vec4_dynamic_loop_write_static_read_vertex
 | 
			
		||||
dEQP-GLES2.functional.shaders.indexing.tmp_array.vec4_dynamic_loop_write_dynamic_read_vertex
 | 
			
		||||
dEQP-GLES2.functional.shaders.indexing.tmp_array.vec4_dynamic_loop_write_static_loop_read_vertex
 | 
			
		||||
dEQP-GLES2.functional.shaders.indexing.tmp_array.vec4_dynamic_loop_write_dynamic_loop_read_vertex
 | 
			
		||||
 | 
			
		||||
dEQP-GLES2.functional.shaders.indexing.matrix_subscript.mat4_dynamic_loop_write_static_read_vertex
 | 
			
		||||
dEQP-GLES2.functional.shaders.indexing.matrix_subscript.mat4_dynamic_loop_write_dynamic_read_vertex
 | 
			
		||||
dEQP-GLES2.functional.shaders.indexing.matrix_subscript.mat4_dynamic_loop_write_static_loop_read_vertex
 | 
			
		||||
dEQP-GLES2.functional.shaders.indexing.matrix_subscript.mat4_dynamic_loop_write_dynamic_loop_read_vertex
 | 
			
		||||
@@ -1,124 +0,0 @@
 | 
			
		||||
dEQP-GLES2.functional.clipping.line.wide_line_clip_viewport_center
 | 
			
		||||
dEQP-GLES2.functional.clipping.line.wide_line_clip_viewport_corner
 | 
			
		||||
dEQP-GLES2.functional.clipping.point.wide_point_clip
 | 
			
		||||
dEQP-GLES2.functional.clipping.point.wide_point_clip_viewport_center
 | 
			
		||||
dEQP-GLES2.functional.clipping.point.wide_point_clip_viewport_corner
 | 
			
		||||
dEQP-GLES2.functional.clipping.triangle_vertex.clip_two.clip_neg_y_neg_z_and_neg_x_neg_y_pos_z
 | 
			
		||||
dEQP-GLES2.functional.clipping.triangle_vertex.clip_two.clip_pos_y_pos_z_and_neg_x_neg_y_neg_z
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.color_clear.rbo_rgba4
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.color_clear.rbo_rgba4_depth_component16
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.color_clear.rbo_rgba4_stencil_index8
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.depth.rbo_rgba4_depth_component16
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.no_rebind_rbo_rgba4
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.no_rebind_rbo_rgba4_stencil_index8
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.rebind_rbo_rgba4
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.rebind_rbo_rgba4_stencil_index8
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.recreate_depthbuffer.no_rebind_rbo_rgba4_depth_component16
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.recreate_depthbuffer.rebind_rbo_rgba4_depth_component16
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.recreate_stencilbuffer.no_rebind_rbo_rgba4_stencil_index8
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.recreate_stencilbuffer.rebind_rbo_rgba4_stencil_index8
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.shared_colorbuffer.rbo_rgba4
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.shared_colorbuffer.rbo_rgba4_depth_component16
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.shared_depthbuffer.rbo_rgba4_depth_component16
 | 
			
		||||
dEQP-GLES2.functional.polygon_offset.default_displacement_with_units
 | 
			
		||||
dEQP-GLES2.functional.polygon_offset.fixed16_displacement_with_units
 | 
			
		||||
dEQP-GLES2.functional.rasterization.interpolation.basic.line_loop_wide
 | 
			
		||||
dEQP-GLES2.functional.rasterization.interpolation.basic.line_strip_wide
 | 
			
		||||
dEQP-GLES2.functional.rasterization.interpolation.basic.lines_wide
 | 
			
		||||
dEQP-GLES2.functional.rasterization.interpolation.projected.line_loop_wide
 | 
			
		||||
dEQP-GLES2.functional.rasterization.interpolation.projected.line_strip_wide
 | 
			
		||||
dEQP-GLES2.functional.rasterization.interpolation.projected.lines_wide
 | 
			
		||||
dEQP-GLES2.functional.rasterization.limits.points
 | 
			
		||||
dEQP-GLES2.functional.shaders.texture_functions.fragment.texture2d_bias
 | 
			
		||||
dEQP-GLES2.functional.shaders.texture_functions.fragment.texture2dproj_vec3_bias
 | 
			
		||||
dEQP-GLES2.functional.shaders.texture_functions.fragment.texture2dproj_vec4_bias
 | 
			
		||||
dEQP-GLES2.functional.texture.filtering.2d.linear_mipmap_linear_linear_clamp_rgba8888
 | 
			
		||||
dEQP-GLES2.functional.texture.filtering.2d.linear_mipmap_linear_linear_mirror_etc1
 | 
			
		||||
dEQP-GLES2.functional.texture.filtering.2d.linear_mipmap_linear_linear_mirror_rgba8888
 | 
			
		||||
dEQP-GLES2.functional.texture.filtering.2d.linear_mipmap_linear_linear_repeat_etc1
 | 
			
		||||
dEQP-GLES2.functional.texture.filtering.2d.linear_mipmap_linear_linear_repeat_rgba8888
 | 
			
		||||
dEQP-GLES2.functional.texture.filtering.2d.linear_mipmap_linear_nearest_clamp_rgba8888
 | 
			
		||||
dEQP-GLES2.functional.texture.filtering.2d.linear_mipmap_linear_nearest_mirror_etc1
 | 
			
		||||
dEQP-GLES2.functional.texture.filtering.2d.linear_mipmap_linear_nearest_mirror_rgba8888
 | 
			
		||||
dEQP-GLES2.functional.texture.filtering.2d.linear_mipmap_linear_nearest_repeat_etc1
 | 
			
		||||
dEQP-GLES2.functional.texture.filtering.2d.linear_mipmap_linear_nearest_repeat_l8
 | 
			
		||||
dEQP-GLES2.functional.texture.filtering.2d.linear_mipmap_linear_nearest_repeat_rgb888
 | 
			
		||||
dEQP-GLES2.functional.texture.filtering.2d.linear_mipmap_linear_nearest_repeat_rgba4444
 | 
			
		||||
dEQP-GLES2.functional.texture.filtering.2d.linear_mipmap_linear_nearest_repeat_rgba8888
 | 
			
		||||
dEQP-GLES2.functional.texture.filtering.2d.nearest_mipmap_linear_linear_clamp_rgba8888
 | 
			
		||||
dEQP-GLES2.functional.texture.filtering.2d.nearest_mipmap_linear_linear_mirror_etc1
 | 
			
		||||
dEQP-GLES2.functional.texture.filtering.2d.nearest_mipmap_linear_linear_mirror_rgba8888
 | 
			
		||||
dEQP-GLES2.functional.texture.filtering.2d.nearest_mipmap_linear_linear_repeat_etc1
 | 
			
		||||
dEQP-GLES2.functional.texture.filtering.2d.nearest_mipmap_linear_linear_repeat_rgba8888
 | 
			
		||||
dEQP-GLES2.functional.texture.filtering.2d.nearest_mipmap_linear_nearest_clamp_rgba8888
 | 
			
		||||
dEQP-GLES2.functional.texture.filtering.2d.nearest_mipmap_linear_nearest_mirror_etc1
 | 
			
		||||
dEQP-GLES2.functional.texture.filtering.2d.nearest_mipmap_linear_nearest_mirror_rgba8888
 | 
			
		||||
dEQP-GLES2.functional.texture.filtering.2d.nearest_mipmap_linear_nearest_repeat_etc1
 | 
			
		||||
dEQP-GLES2.functional.texture.filtering.2d.nearest_mipmap_linear_nearest_repeat_l8
 | 
			
		||||
dEQP-GLES2.functional.texture.filtering.2d.nearest_mipmap_linear_nearest_repeat_rgb888
 | 
			
		||||
dEQP-GLES2.functional.texture.filtering.2d.nearest_mipmap_linear_nearest_repeat_rgba4444
 | 
			
		||||
dEQP-GLES2.functional.texture.filtering.2d.nearest_mipmap_linear_nearest_repeat_rgba8888
 | 
			
		||||
dEQP-GLES2.functional.texture.mipmap.2d.affine.linear_linear_repeat
 | 
			
		||||
dEQP-GLES2.functional.texture.mipmap.2d.affine.nearest_linear_clamp
 | 
			
		||||
dEQP-GLES2.functional.texture.mipmap.2d.affine.nearest_linear_mirror
 | 
			
		||||
dEQP-GLES2.functional.texture.mipmap.2d.affine.nearest_linear_repeat
 | 
			
		||||
dEQP-GLES2.functional.texture.mipmap.2d.basic.linear_linear_repeat
 | 
			
		||||
dEQP-GLES2.functional.texture.mipmap.2d.basic.linear_linear_repeat_non_square
 | 
			
		||||
dEQP-GLES2.functional.texture.mipmap.2d.basic.nearest_linear_clamp
 | 
			
		||||
dEQP-GLES2.functional.texture.mipmap.2d.basic.nearest_linear_clamp_non_square
 | 
			
		||||
dEQP-GLES2.functional.texture.mipmap.2d.basic.nearest_linear_mirror
 | 
			
		||||
dEQP-GLES2.functional.texture.mipmap.2d.basic.nearest_linear_mirror_non_square
 | 
			
		||||
dEQP-GLES2.functional.texture.mipmap.2d.basic.nearest_linear_repeat
 | 
			
		||||
dEQP-GLES2.functional.texture.mipmap.2d.basic.nearest_linear_repeat_non_square
 | 
			
		||||
dEQP-GLES2.functional.texture.mipmap.2d.projected.linear_linear_repeat
 | 
			
		||||
dEQP-GLES2.functional.texture.mipmap.2d.projected.nearest_linear_clamp
 | 
			
		||||
dEQP-GLES2.functional.texture.mipmap.2d.projected.nearest_linear_mirror
 | 
			
		||||
dEQP-GLES2.functional.texture.mipmap.2d.projected.nearest_linear_repeat
 | 
			
		||||
dEQP-GLES2.functional.texture.mipmap.cube.basic.linear_linear
 | 
			
		||||
dEQP-GLES2.functional.texture.mipmap.cube.basic.linear_nearest
 | 
			
		||||
dEQP-GLES2.functional.texture.mipmap.cube.bias.linear_linear
 | 
			
		||||
dEQP-GLES2.functional.texture.mipmap.cube.bias.linear_nearest
 | 
			
		||||
dEQP-GLES2.functional.texture.mipmap.cube.projected.linear_linear
 | 
			
		||||
dEQP-GLES2.functional.texture.mipmap.cube.projected.linear_nearest
 | 
			
		||||
dEQP-GLES2.functional.texture.vertex.2d.filtering.linear_mipmap_linear_linear_clamp
 | 
			
		||||
dEQP-GLES2.functional.texture.vertex.2d.filtering.linear_mipmap_linear_linear_mirror
 | 
			
		||||
dEQP-GLES2.functional.texture.vertex.2d.filtering.linear_mipmap_linear_linear_repeat
 | 
			
		||||
dEQP-GLES2.functional.texture.vertex.2d.filtering.linear_mipmap_linear_nearest_clamp
 | 
			
		||||
dEQP-GLES2.functional.texture.vertex.2d.filtering.linear_mipmap_linear_nearest_mirror
 | 
			
		||||
dEQP-GLES2.functional.texture.vertex.2d.filtering.linear_mipmap_linear_nearest_repeat
 | 
			
		||||
dEQP-GLES2.functional.texture.vertex.2d.filtering.nearest_mipmap_linear_linear_clamp
 | 
			
		||||
dEQP-GLES2.functional.texture.vertex.2d.filtering.nearest_mipmap_linear_linear_mirror
 | 
			
		||||
dEQP-GLES2.functional.texture.vertex.2d.filtering.nearest_mipmap_linear_linear_repeat
 | 
			
		||||
dEQP-GLES2.functional.texture.vertex.2d.filtering.nearest_mipmap_linear_nearest_clamp
 | 
			
		||||
dEQP-GLES2.functional.texture.vertex.2d.filtering.nearest_mipmap_linear_nearest_mirror
 | 
			
		||||
dEQP-GLES2.functional.texture.vertex.2d.filtering.nearest_mipmap_linear_nearest_repeat
 | 
			
		||||
dEQP-GLES2.functional.texture.vertex.2d.wrap.clamp_clamp
 | 
			
		||||
dEQP-GLES2.functional.texture.vertex.2d.wrap.clamp_mirror
 | 
			
		||||
dEQP-GLES2.functional.texture.vertex.2d.wrap.clamp_repeat
 | 
			
		||||
dEQP-GLES2.functional.texture.vertex.2d.wrap.mirror_clamp
 | 
			
		||||
dEQP-GLES2.functional.texture.vertex.2d.wrap.mirror_mirror
 | 
			
		||||
dEQP-GLES2.functional.texture.vertex.2d.wrap.mirror_repeat
 | 
			
		||||
dEQP-GLES2.functional.texture.vertex.2d.wrap.repeat_clamp
 | 
			
		||||
dEQP-GLES2.functional.texture.vertex.2d.wrap.repeat_mirror
 | 
			
		||||
dEQP-GLES2.functional.texture.vertex.2d.wrap.repeat_repeat
 | 
			
		||||
dEQP-GLES2.functional.texture.vertex.cube.filtering.linear_mipmap_linear_linear_clamp
 | 
			
		||||
dEQP-GLES2.functional.texture.vertex.cube.filtering.linear_mipmap_linear_linear_mirror
 | 
			
		||||
dEQP-GLES2.functional.texture.vertex.cube.filtering.linear_mipmap_linear_linear_repeat
 | 
			
		||||
dEQP-GLES2.functional.texture.vertex.cube.filtering.linear_mipmap_linear_nearest_clamp
 | 
			
		||||
dEQP-GLES2.functional.texture.vertex.cube.filtering.linear_mipmap_linear_nearest_mirror
 | 
			
		||||
dEQP-GLES2.functional.texture.vertex.cube.filtering.linear_mipmap_linear_nearest_repeat
 | 
			
		||||
dEQP-GLES2.functional.texture.vertex.cube.filtering.nearest_mipmap_linear_linear_clamp
 | 
			
		||||
dEQP-GLES2.functional.texture.vertex.cube.filtering.nearest_mipmap_linear_linear_mirror
 | 
			
		||||
dEQP-GLES2.functional.texture.vertex.cube.filtering.nearest_mipmap_linear_linear_repeat
 | 
			
		||||
dEQP-GLES2.functional.texture.vertex.cube.filtering.nearest_mipmap_linear_nearest_clamp
 | 
			
		||||
dEQP-GLES2.functional.texture.vertex.cube.filtering.nearest_mipmap_linear_nearest_mirror
 | 
			
		||||
dEQP-GLES2.functional.texture.vertex.cube.filtering.nearest_mipmap_linear_nearest_repeat
 | 
			
		||||
dEQP-GLES2.functional.texture.vertex.cube.wrap.clamp_clamp
 | 
			
		||||
dEQP-GLES2.functional.texture.vertex.cube.wrap.clamp_mirror
 | 
			
		||||
dEQP-GLES2.functional.texture.vertex.cube.wrap.clamp_repeat
 | 
			
		||||
dEQP-GLES2.functional.texture.vertex.cube.wrap.mirror_clamp
 | 
			
		||||
dEQP-GLES2.functional.texture.vertex.cube.wrap.mirror_mirror
 | 
			
		||||
dEQP-GLES2.functional.texture.vertex.cube.wrap.mirror_repeat
 | 
			
		||||
dEQP-GLES2.functional.texture.vertex.cube.wrap.repeat_clamp
 | 
			
		||||
dEQP-GLES2.functional.texture.vertex.cube.wrap.repeat_mirror
 | 
			
		||||
dEQP-GLES2.functional.texture.vertex.cube.wrap.repeat_repeat
 | 
			
		||||
@@ -1,31 +0,0 @@
 | 
			
		||||
dEQP-GLES2.functional.depth_stencil_clear.depth_stencil_masked
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.no_rebind_rbo_rgb565_depth_component16
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.no_rebind_rbo_rgb565_stencil_index8
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.no_rebind_rbo_rgb5_a1_depth_component16
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.no_rebind_rbo_rgb5_a1_stencil_index8
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.no_rebind_rbo_rgba4_depth_component16
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.no_rebind_rbo_rgba4_stencil_index8
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.no_rebind_tex2d_rgb_depth_component16
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.no_rebind_tex2d_rgb_stencil_index8
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.no_rebind_tex2d_rgba_depth_component16
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.no_rebind_tex2d_rgba_stencil_index8
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.rebind_rbo_rgb565_depth_component16
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.rebind_rbo_rgb565_stencil_index8
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.rebind_rbo_rgb5_a1_depth_component16
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.rebind_rbo_rgb5_a1_stencil_index8
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.rebind_rbo_rgba4_depth_component16
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.rebind_rbo_rgba4_stencil_index8
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.rebind_tex2d_rgb_depth_component16
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.rebind_tex2d_rgb_stencil_index8
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.rebind_tex2d_rgba_depth_component16
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.rebind_tex2d_rgba_stencil_index8
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.shared_colorbuffer.rbo_rgb565_depth_component16
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.shared_colorbuffer.rbo_rgb5_a1_depth_component16
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.shared_colorbuffer.rbo_rgba4_depth_component16
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.shared_colorbuffer.tex2d_rgb_depth_component16
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.shared_colorbuffer.tex2d_rgba_depth_component16
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.shared_depthbuffer.rbo_rgb565_depth_component16
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.shared_depthbuffer.rbo_rgb5_a1_depth_component16
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.shared_depthbuffer.rbo_rgba4_depth_component16
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.shared_depthbuffer.tex2d_rgb_depth_component16
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.shared_depthbuffer.tex2d_rgba_depth_component16
 | 
			
		||||
@@ -1,14 +0,0 @@
 | 
			
		||||
# Note: skips lists for CI are just a list of lines that, when
 | 
			
		||||
# non-zero-length and not starting with '#', will regex match to
 | 
			
		||||
# delete lines from the test list.  Be careful.
 | 
			
		||||
 | 
			
		||||
# Skip the perf/stress tests to keep runtime manageable
 | 
			
		||||
dEQP-GLES[0-9]*.performance.*
 | 
			
		||||
dEQP-GLES[0-9]*.stress.*
 | 
			
		||||
 | 
			
		||||
# These are really slow on tiling architectures (including llvmpipe).
 | 
			
		||||
dEQP-GLES[0-9]*.functional.flush_finish.*
 | 
			
		||||
 | 
			
		||||
# XXX: Why does this flake?
 | 
			
		||||
dEQP-GLES2.functional.clipping.triangle_vertex.clip_three.clip_neg_x_neg_z_and_pos_x_pos_z_and_neg_x_neg_y_pos_z
 | 
			
		||||
 | 
			
		||||
@@ -1,31 +0,0 @@
 | 
			
		||||
dEQP-GLES2.functional.depth_stencil_clear.depth_stencil_masked
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.no_rebind_rbo_rgb565_depth_component16
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.no_rebind_rbo_rgb565_stencil_index8
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.no_rebind_rbo_rgb5_a1_depth_component16
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.no_rebind_rbo_rgb5_a1_stencil_index8
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.no_rebind_rbo_rgba4_depth_component16
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.no_rebind_rbo_rgba4_stencil_index8
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.no_rebind_tex2d_rgb_depth_component16
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.no_rebind_tex2d_rgb_stencil_index8
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.no_rebind_tex2d_rgba_depth_component16
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.no_rebind_tex2d_rgba_stencil_index8
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.rebind_rbo_rgb565_depth_component16
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.rebind_rbo_rgb565_stencil_index8
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.rebind_rbo_rgb5_a1_depth_component16
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.rebind_rbo_rgb5_a1_stencil_index8
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.rebind_rbo_rgba4_depth_component16
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.rebind_rbo_rgba4_stencil_index8
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.rebind_tex2d_rgb_depth_component16
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.rebind_tex2d_rgb_stencil_index8
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.rebind_tex2d_rgba_depth_component16
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.rebind_tex2d_rgba_stencil_index8
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.shared_colorbuffer.rbo_rgb565_depth_component16
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.shared_colorbuffer.rbo_rgb5_a1_depth_component16
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.shared_colorbuffer.rbo_rgba4_depth_component16
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.shared_colorbuffer.tex2d_rgb_depth_component16
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.shared_colorbuffer.tex2d_rgba_depth_component16
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.shared_depthbuffer.rbo_rgb565_depth_component16
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.shared_depthbuffer.rbo_rgb5_a1_depth_component16
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.shared_depthbuffer.rbo_rgba4_depth_component16
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.shared_depthbuffer.tex2d_rgb_depth_component16
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.shared_depthbuffer.tex2d_rgba_depth_component16
 | 
			
		||||
@@ -1,10 +0,0 @@
 | 
			
		||||
# Note: skips lists for CI are just a list of lines that, when
 | 
			
		||||
# non-zero-length and not starting with '#', will regex match to
 | 
			
		||||
# delete lines from the test list.  Be careful.
 | 
			
		||||
 | 
			
		||||
# Skip the perf/stress tests to keep runtime manageable
 | 
			
		||||
dEQP-GLES[0-9]*.performance.*
 | 
			
		||||
dEQP-GLES[0-9]*.stress.*
 | 
			
		||||
 | 
			
		||||
# These are really slow on tiling architectures (including llvmpipe).
 | 
			
		||||
dEQP-GLES[0-9]*.functional.flush_finish.*
 | 
			
		||||
@@ -1,31 +0,0 @@
 | 
			
		||||
dEQP-GLES2.functional.depth_stencil_clear.depth_stencil_masked
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.no_rebind_rbo_rgb565_depth_component16
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.no_rebind_rbo_rgb565_stencil_index8
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.no_rebind_rbo_rgb5_a1_depth_component16
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.no_rebind_rbo_rgb5_a1_stencil_index8
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.no_rebind_rbo_rgba4_depth_component16
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.no_rebind_rbo_rgba4_stencil_index8
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.no_rebind_tex2d_rgb_depth_component16
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.no_rebind_tex2d_rgb_stencil_index8
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.no_rebind_tex2d_rgba_depth_component16
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.no_rebind_tex2d_rgba_stencil_index8
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.rebind_rbo_rgb565_depth_component16
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.rebind_rbo_rgb565_stencil_index8
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.rebind_rbo_rgb5_a1_depth_component16
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.rebind_rbo_rgb5_a1_stencil_index8
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.rebind_rbo_rgba4_depth_component16
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.rebind_rbo_rgba4_stencil_index8
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.rebind_tex2d_rgb_depth_component16
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.rebind_tex2d_rgb_stencil_index8
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.rebind_tex2d_rgba_depth_component16
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.rebind_tex2d_rgba_stencil_index8
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.shared_colorbuffer.rbo_rgb565_depth_component16
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.shared_colorbuffer.rbo_rgb5_a1_depth_component16
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.shared_colorbuffer.rbo_rgba4_depth_component16
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.shared_colorbuffer.tex2d_rgb_depth_component16
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.shared_colorbuffer.tex2d_rgba_depth_component16
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.shared_depthbuffer.rbo_rgb565_depth_component16
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.shared_depthbuffer.rbo_rgb5_a1_depth_component16
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.shared_depthbuffer.rbo_rgba4_depth_component16
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.shared_depthbuffer.tex2d_rgb_depth_component16
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.shared_depthbuffer.tex2d_rgba_depth_component16
 | 
			
		||||
@@ -1,13 +0,0 @@
 | 
			
		||||
# Note: skips lists for CI are just a list of lines that, when
 | 
			
		||||
# non-zero-length and not starting with '#', will regex match to
 | 
			
		||||
# delete lines from the test list.  Be careful.
 | 
			
		||||
 | 
			
		||||
# Skip the perf/stress tests to keep runtime manageable
 | 
			
		||||
dEQP-GLES[0-9]*.performance.*
 | 
			
		||||
dEQP-GLES[0-9]*.stress.*
 | 
			
		||||
 | 
			
		||||
# These are really slow on tiling architectures (including llvmpipe).
 | 
			
		||||
dEQP-GLES[0-9]*.functional.flush_finish.*
 | 
			
		||||
 | 
			
		||||
# XXX: Why does this flake?
 | 
			
		||||
dEQP-GLES2.functional.clipping.triangle_vertex.clip_three.clip_neg_x_neg_z_and_pos_x_pos_z_and_neg_x_neg_y_pos_z
 | 
			
		||||
@@ -1,31 +0,0 @@
 | 
			
		||||
dEQP-GLES2.functional.depth_stencil_clear.depth_stencil_masked
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.no_rebind_rbo_rgb565_depth_component16
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.no_rebind_rbo_rgb565_stencil_index8
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.no_rebind_rbo_rgb5_a1_depth_component16
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.no_rebind_rbo_rgb5_a1_stencil_index8
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.no_rebind_rbo_rgba4_depth_component16
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.no_rebind_rbo_rgba4_stencil_index8
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.no_rebind_tex2d_rgb_depth_component16
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.no_rebind_tex2d_rgb_stencil_index8
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.no_rebind_tex2d_rgba_depth_component16
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.no_rebind_tex2d_rgba_stencil_index8
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.rebind_rbo_rgb565_depth_component16
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.rebind_rbo_rgb565_stencil_index8
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.rebind_rbo_rgb5_a1_depth_component16
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.rebind_rbo_rgb5_a1_stencil_index8
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.rebind_rbo_rgba4_depth_component16
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.rebind_rbo_rgba4_stencil_index8
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.rebind_tex2d_rgb_depth_component16
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.rebind_tex2d_rgb_stencil_index8
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.rebind_tex2d_rgba_depth_component16
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.rebind_tex2d_rgba_stencil_index8
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.shared_colorbuffer.rbo_rgb565_depth_component16
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.shared_colorbuffer.rbo_rgb5_a1_depth_component16
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.shared_colorbuffer.rbo_rgba4_depth_component16
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.shared_colorbuffer.tex2d_rgb_depth_component16
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.shared_colorbuffer.tex2d_rgba_depth_component16
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.shared_depthbuffer.rbo_rgb565_depth_component16
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.shared_depthbuffer.rbo_rgb5_a1_depth_component16
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.shared_depthbuffer.rbo_rgba4_depth_component16
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.shared_depthbuffer.tex2d_rgb_depth_component16
 | 
			
		||||
dEQP-GLES2.functional.fbo.render.shared_depthbuffer.tex2d_rgba_depth_component16
 | 
			
		||||
@@ -1,13 +0,0 @@
 | 
			
		||||
# Note: skips lists for CI are just a list of lines that, when
 | 
			
		||||
# non-zero-length and not starting with '#', will regex match to
 | 
			
		||||
# delete lines from the test list.  Be careful.
 | 
			
		||||
 | 
			
		||||
# Skip the perf/stress tests to keep runtime manageable
 | 
			
		||||
dEQP-GLES[0-9]*.performance.*
 | 
			
		||||
dEQP-GLES[0-9]*.stress.*
 | 
			
		||||
 | 
			
		||||
# These are really slow on tiling architectures (including llvmpipe).
 | 
			
		||||
dEQP-GLES[0-9]*.functional.flush_finish.*
 | 
			
		||||
 | 
			
		||||
# XXX: Why does this flake?
 | 
			
		||||
dEQP-GLES2.functional.clipping.triangle_vertex.clip_three.clip_neg_x_neg_z_and_pos_x_pos_z_and_neg_x_neg_y_pos_z
 | 
			
		||||
@@ -1,31 +0,0 @@
 | 
			
		||||
# Disable a TON of tests to keep the run around 5-10 minutes because my runner is
 | 
			
		||||
# slow.
 | 
			
		||||
dEQP-VK.api.*
 | 
			
		||||
dEQP-VK.binding_model.*
 | 
			
		||||
dEQP-VK.clipping.*
 | 
			
		||||
dEQP-VK.compute.*
 | 
			
		||||
dEQP-VK.conditional_rendering.*
 | 
			
		||||
dEQP-VK.descriptor_indexing.*
 | 
			
		||||
dEQP-VK.device_group.*
 | 
			
		||||
dEQP-VK.fragment_operations.*
 | 
			
		||||
dEQP-VK.fragment_shader_interlock.*
 | 
			
		||||
dEQP-VK.graphicsfuzz.*
 | 
			
		||||
dEQP-VK.image.*
 | 
			
		||||
dEQP-VK.imageless_framebuffer.*
 | 
			
		||||
dEQP-VK.info.*
 | 
			
		||||
dEQP-VK.memory.*
 | 
			
		||||
dEQP-VK.memory_model.*
 | 
			
		||||
dEQP-VK.multiview.*
 | 
			
		||||
dEQP-VK.pipeline.*
 | 
			
		||||
dEQP-VK.protected_memory.*
 | 
			
		||||
dEQP-VK.query_pool.*
 | 
			
		||||
dEQP-VK.robustness.*
 | 
			
		||||
dEQP-VK.sparse_resources.*
 | 
			
		||||
dEQP-VK.spirv_assembly.*
 | 
			
		||||
dEQP-VK.subgroups.*
 | 
			
		||||
dEQP-VK.synchronization.*
 | 
			
		||||
dEQP-VK.texture.*
 | 
			
		||||
dEQP-VK.transform_feedback.*
 | 
			
		||||
dEQP-VK.ubo.*
 | 
			
		||||
dEQP-VK.wsi.*
 | 
			
		||||
dEQP-VK.ycbcr.*
 | 
			
		||||
@@ -1,237 +0,0 @@
 | 
			
		||||
#!/bin/sh
 | 
			
		||||
 | 
			
		||||
set -ex
 | 
			
		||||
 | 
			
		||||
DEQP_OPTIONS="--deqp-surface-width=256 --deqp-surface-height=256"
 | 
			
		||||
DEQP_OPTIONS="$DEQP_OPTIONS --deqp-surface-type=pbuffer"
 | 
			
		||||
DEQP_OPTIONS="$DEQP_OPTIONS --deqp-gl-config-name=rgba8888d24s8ms0"
 | 
			
		||||
DEQP_OPTIONS="$DEQP_OPTIONS --deqp-visibility=hidden"
 | 
			
		||||
 | 
			
		||||
# It would be nice to be able to enable the watchdog, so that hangs in a test
 | 
			
		||||
# don't need to wait the full hour for the run to time out.  However, some
 | 
			
		||||
# shaders end up taking long enough to compile
 | 
			
		||||
# (dEQP-GLES31.functional.ubo.random.all_per_block_buffers.20 for example)
 | 
			
		||||
# that they'll sporadically trigger the watchdog.
 | 
			
		||||
#DEQP_OPTIONS="$DEQP_OPTIONS --deqp-watchdog=enable"
 | 
			
		||||
 | 
			
		||||
if [ -z "$DEQP_VER" ]; then
 | 
			
		||||
   echo 'DEQP_VER must be set to something like "gles2", "gles31" or "vk" for the test run'
 | 
			
		||||
   exit 1
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
if [ "$DEQP_VER" = "vk" ]; then
 | 
			
		||||
   if [ -z "$VK_DRIVER" ]; then
 | 
			
		||||
      echo 'VK_DRIVER must be to something like "radeon" or "intel" for the test run'
 | 
			
		||||
      exit 1
 | 
			
		||||
   fi
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
if [ -z "$DEQP_SKIPS" ]; then
 | 
			
		||||
   echo 'DEQP_SKIPS must be set to something like "deqp-default-skips.txt"'
 | 
			
		||||
   exit 1
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
ARTIFACTS=`pwd`/artifacts
 | 
			
		||||
 | 
			
		||||
# Set up the driver environment.
 | 
			
		||||
export LD_LIBRARY_PATH=`pwd`/install/lib/
 | 
			
		||||
export EGL_PLATFORM=surfaceless
 | 
			
		||||
export VK_ICD_FILENAMES=`pwd`/install/share/vulkan/icd.d/"$VK_DRIVER"_icd.x86_64.json
 | 
			
		||||
 | 
			
		||||
# the runner was failing to look for libkms in /usr/local/lib for some reason
 | 
			
		||||
# I never figured out.
 | 
			
		||||
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib
 | 
			
		||||
 | 
			
		||||
RESULTS=`pwd`/results
 | 
			
		||||
mkdir -p $RESULTS
 | 
			
		||||
 | 
			
		||||
# Generate test case list file.
 | 
			
		||||
if [ "$DEQP_VER" = "vk" ]; then
 | 
			
		||||
   cp /deqp/mustpass/vk-master.txt /tmp/case-list.txt
 | 
			
		||||
   DEQP=/deqp/external/vulkancts/modules/vulkan/deqp-vk
 | 
			
		||||
else
 | 
			
		||||
   cp /deqp/mustpass/$DEQP_VER-master.txt /tmp/case-list.txt
 | 
			
		||||
   DEQP=/deqp/modules/$DEQP_VER/deqp-$DEQP_VER
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
# If the job is parallel, take the corresponding fraction of the caselist.
 | 
			
		||||
# Note: N~M is a gnu sed extension to match every nth line (first line is #1).
 | 
			
		||||
if [ -n "$CI_NODE_INDEX" ]; then
 | 
			
		||||
   sed -ni $CI_NODE_INDEX~$CI_NODE_TOTAL"p" /tmp/case-list.txt
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
if [ ! -s /tmp/case-list.txt ]; then
 | 
			
		||||
    echo "Caselist generation failed"
 | 
			
		||||
    exit 1
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
if [ -n "$DEQP_EXPECTED_FAILS" ]; then
 | 
			
		||||
    XFAIL="--xfail-list $ARTIFACTS/$DEQP_EXPECTED_FAILS"
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
set +e
 | 
			
		||||
 | 
			
		||||
run_cts() {
 | 
			
		||||
    deqp=$1
 | 
			
		||||
    caselist=$2
 | 
			
		||||
    output=$3
 | 
			
		||||
    deqp-runner \
 | 
			
		||||
        --deqp $deqp \
 | 
			
		||||
        --output $output \
 | 
			
		||||
        --caselist $caselist \
 | 
			
		||||
        --exclude-list $ARTIFACTS/$DEQP_SKIPS \
 | 
			
		||||
        $XFAIL \
 | 
			
		||||
        --job ${DEQP_PARALLEL:-1} \
 | 
			
		||||
	--allow-flakes true \
 | 
			
		||||
	$DEQP_RUNNER_OPTIONS \
 | 
			
		||||
        -- \
 | 
			
		||||
        $DEQP_OPTIONS
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
report_flakes() {
 | 
			
		||||
    if [ -z "$FLAKES_CHANNEL" ]; then
 | 
			
		||||
        return 0
 | 
			
		||||
    fi
 | 
			
		||||
    flakes=$1
 | 
			
		||||
    bot="$CI_RUNNER_DESCRIPTION-$CI_PIPELINE_ID"
 | 
			
		||||
    channel="$FLAKES_CHANNEL"
 | 
			
		||||
    (
 | 
			
		||||
    echo NICK $bot
 | 
			
		||||
    echo USER $bot unused unused :Gitlab CI Notifier
 | 
			
		||||
    sleep 10
 | 
			
		||||
    echo "JOIN $channel"
 | 
			
		||||
    sleep 1
 | 
			
		||||
    desc="Flakes detected in job: $CI_JOB_URL on $CI_RUNNER_DESCRIPTION"
 | 
			
		||||
    if [ -n "CI_MERGE_REQUEST_SOURCE_BRANCH_NAME" ]; then
 | 
			
		||||
        desc="$desc on branch $CI_MERGE_REQUEST_SOURCE_BRANCH_NAME ($CI_MERGE_REQUEST_TITLE)"
 | 
			
		||||
    fi
 | 
			
		||||
    echo "PRIVMSG $channel :$desc"
 | 
			
		||||
    for flake in `cat $flakes`; do
 | 
			
		||||
        echo "PRIVMSG $channel :$flake"
 | 
			
		||||
    done
 | 
			
		||||
    echo "PRIVMSG $channel :See $CI_JOB_URL/artifacts/browse/results/"
 | 
			
		||||
    echo "QUIT"
 | 
			
		||||
    ) | nc irc.freenode.net 6667 > /dev/null
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
extract_xml_result() {
 | 
			
		||||
    testcase=$1
 | 
			
		||||
    shift 1
 | 
			
		||||
    qpas=$*
 | 
			
		||||
    start="#beginTestCaseResult $testcase"
 | 
			
		||||
    for qpa in $qpas; do
 | 
			
		||||
        while IFS= read -r line; do
 | 
			
		||||
            if [ "$line" = "$start" ]; then
 | 
			
		||||
                dst="$testcase.qpa"
 | 
			
		||||
                echo "#beginSession" > $dst
 | 
			
		||||
                echo $line >> $dst
 | 
			
		||||
                while IFS= read -r line; do
 | 
			
		||||
                    if [ "$line" = "#endTestCaseResult" ]; then
 | 
			
		||||
                        echo $line >> $dst
 | 
			
		||||
                        echo "#endSession" >> $dst
 | 
			
		||||
                        /deqp/executor/testlog-to-xml $dst "$RESULTS/$testcase.xml"
 | 
			
		||||
                        # copy the stylesheets here so they only end up in artifacts
 | 
			
		||||
                        # if we have one or more result xml in artifacts
 | 
			
		||||
                        cp /deqp/testlog.css "$RESULTS/"
 | 
			
		||||
                        cp /deqp/testlog.xsl "$RESULTS/"
 | 
			
		||||
                        return 0
 | 
			
		||||
                    fi
 | 
			
		||||
                    echo $line >> $dst
 | 
			
		||||
                done
 | 
			
		||||
                return 1
 | 
			
		||||
            fi
 | 
			
		||||
        done < $qpa
 | 
			
		||||
    done
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
extract_xml_results() {
 | 
			
		||||
    qpas=$*
 | 
			
		||||
    while IFS= read -r testcase; do
 | 
			
		||||
        testcase=${testcase%,*}
 | 
			
		||||
        extract_xml_result $testcase $qpas
 | 
			
		||||
    done
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# Generate junit results
 | 
			
		||||
generate_junit() {
 | 
			
		||||
    results=$1
 | 
			
		||||
    echo "<?xml version=\"1.0\" encoding=\"utf-8\"?>"
 | 
			
		||||
    echo "<testsuites>"
 | 
			
		||||
    echo "<testsuite name=\"$DEQP_VER-$CI_NODE_INDEX\">"
 | 
			
		||||
    while read line; do
 | 
			
		||||
        testcase=${line%,*}
 | 
			
		||||
        result=${line#*,}
 | 
			
		||||
        # avoid counting Skip's in the # of tests:
 | 
			
		||||
        if [ "$result" = "Skip" ]; then
 | 
			
		||||
            continue;
 | 
			
		||||
        fi
 | 
			
		||||
        echo "<testcase name=\"$testcase\">"
 | 
			
		||||
        if [ "$result" != "Pass" ]; then
 | 
			
		||||
            echo "<failure type=\"$result\">"
 | 
			
		||||
            echo "$result: See $CI_JOB_URL/artifacts/results/$testcase.xml"
 | 
			
		||||
            echo "</failure>"
 | 
			
		||||
        fi
 | 
			
		||||
        echo "</testcase>"
 | 
			
		||||
    done < $results
 | 
			
		||||
    echo "</testsuite>"
 | 
			
		||||
    echo "</testsuites>"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# wrapper to supress +x to avoid spamming the log
 | 
			
		||||
quiet() {
 | 
			
		||||
    set +x
 | 
			
		||||
    "$@"
 | 
			
		||||
    set -x
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
run_cts $DEQP /tmp/case-list.txt $RESULTS/cts-runner-results.txt
 | 
			
		||||
DEQP_EXITCODE=$?
 | 
			
		||||
 | 
			
		||||
quiet generate_junit $RESULTS/cts-runner-results.txt > $RESULTS/results.xml
 | 
			
		||||
 | 
			
		||||
if [ $DEQP_EXITCODE -ne 0 ]; then
 | 
			
		||||
    # preserve caselist files in case of failures:
 | 
			
		||||
    cp /tmp/deqp_runner.*.txt $RESULTS/
 | 
			
		||||
    echo "Some unexpected results found (see cts-runner-results.txt in artifacts for full results):"
 | 
			
		||||
    cat $RESULTS/cts-runner-results.txt | \
 | 
			
		||||
        grep -v ",Pass" | \
 | 
			
		||||
        grep -v ",Skip" | \
 | 
			
		||||
        grep -v ",ExpectedFail" > \
 | 
			
		||||
        $RESULTS/cts-runner-unexpected-results.txt
 | 
			
		||||
    head -n 50 $RESULTS/cts-runner-unexpected-results.txt
 | 
			
		||||
 | 
			
		||||
    if [ -z "$DEQP_NO_SAVE_RESULTS" ]; then
 | 
			
		||||
        # Save the logs for up to the first 50 unexpected results:
 | 
			
		||||
        head -n 50 $RESULTS/cts-runner-unexpected-results.txt | quiet extract_xml_results /tmp/*.qpa
 | 
			
		||||
    fi
 | 
			
		||||
 | 
			
		||||
    count=`cat $RESULTS/cts-runner-unexpected-results.txt | wc -l`
 | 
			
		||||
 | 
			
		||||
    # Re-run fails to detect flakes.  But use a small threshold, if
 | 
			
		||||
    # something was fundamentally broken, we don't want to re-run
 | 
			
		||||
    # the entire caselist
 | 
			
		||||
else
 | 
			
		||||
    cat $RESULTS/cts-runner-results.txt | \
 | 
			
		||||
        grep ",Flake" > \
 | 
			
		||||
        $RESULTS/cts-runner-flakes.txt
 | 
			
		||||
 | 
			
		||||
    count=`cat $RESULTS/cts-runner-flakes.txt | wc -l`
 | 
			
		||||
    if [ $count -gt 0 ]; then
 | 
			
		||||
        echo "Some flakes found (see cts-runner-flakes.txt in artifacts for full results):"
 | 
			
		||||
        head -n 50 $RESULTS/cts-runner-flakes.txt
 | 
			
		||||
 | 
			
		||||
        if [ -z "$DEQP_NO_SAVE_RESULTS" ]; then
 | 
			
		||||
            # Save the logs for up to the first 50 flakes:
 | 
			
		||||
            head -n 50 $RESULTS/cts-runner-flakes.txt | quiet extract_xml_results /tmp/*.qpa
 | 
			
		||||
        fi
 | 
			
		||||
 | 
			
		||||
        # Report the flakes to IRC channel for monitoring (if configured):
 | 
			
		||||
        quiet report_flakes $RESULTS/cts-runner-flakes.txt
 | 
			
		||||
    else
 | 
			
		||||
        # no flakes, so clean-up:
 | 
			
		||||
        rm $RESULTS/cts-runner-flakes.txt
 | 
			
		||||
    fi
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
exit $DEQP_EXITCODE
 | 
			
		||||
@@ -1,844 +0,0 @@
 | 
			
		||||
dEQP-GLES2.functional.clipping.line.wide_line_clip_viewport_center
 | 
			
		||||
dEQP-GLES2.functional.clipping.line.wide_line_clip_viewport_corner
 | 
			
		||||
dEQP-GLES2.functional.clipping.point.wide_point_clip
 | 
			
		||||
dEQP-GLES2.functional.clipping.point.wide_point_clip_viewport_center
 | 
			
		||||
dEQP-GLES2.functional.clipping.point.wide_point_clip_viewport_corner
 | 
			
		||||
dEQP-GLES2.functional.clipping.triangle_vertex.clip_two.clip_neg_y_neg_z_and_neg_x_neg_y_pos_z
 | 
			
		||||
dEQP-GLES2.functional.clipping.triangle_vertex.clip_two.clip_pos_y_pos_z_and_neg_x_neg_y_neg_z
 | 
			
		||||
dEQP-GLES2.functional.polygon_offset.default_displacement_with_units
 | 
			
		||||
dEQP-GLES2.functional.polygon_offset.fixed16_displacement_with_units
 | 
			
		||||
dEQP-GLES2.functional.rasterization.interpolation.basic.line_loop_wide
 | 
			
		||||
dEQP-GLES2.functional.rasterization.interpolation.basic.line_strip_wide
 | 
			
		||||
dEQP-GLES2.functional.rasterization.interpolation.basic.lines_wide
 | 
			
		||||
dEQP-GLES2.functional.rasterization.interpolation.projected.line_loop_wide
 | 
			
		||||
dEQP-GLES2.functional.rasterization.interpolation.projected.line_strip_wide
 | 
			
		||||
dEQP-GLES2.functional.rasterization.interpolation.projected.lines_wide
 | 
			
		||||
dEQP-GLES2.functional.rasterization.limits.points
 | 
			
		||||
dEQP-GLES2.functional.rasterization.primitives.points
 | 
			
		||||
dEQP-GLES3.functional.clipping.line.wide_line_clip_viewport_center
 | 
			
		||||
dEQP-GLES3.functional.clipping.line.wide_line_clip_viewport_corner
 | 
			
		||||
dEQP-GLES3.functional.clipping.point.wide_point_clip
 | 
			
		||||
dEQP-GLES3.functional.clipping.point.wide_point_clip_viewport_center
 | 
			
		||||
dEQP-GLES3.functional.clipping.point.wide_point_clip_viewport_corner
 | 
			
		||||
dEQP-GLES3.functional.clipping.triangle_vertex.clip_two.clip_neg_y_neg_z_and_neg_x_neg_y_pos_z
 | 
			
		||||
dEQP-GLES3.functional.clipping.triangle_vertex.clip_two.clip_pos_y_pos_z_and_neg_x_neg_y_neg_z
 | 
			
		||||
dEQP-GLES3.functional.draw.random.124
 | 
			
		||||
dEQP-GLES3.functional.fbo.depth.depth_test_clamp.depth24_stencil8
 | 
			
		||||
dEQP-GLES3.functional.fbo.depth.depth_test_clamp.depth32f_stencil8
 | 
			
		||||
dEQP-GLES3.functional.fbo.depth.depth_test_clamp.depth_component16
 | 
			
		||||
dEQP-GLES3.functional.fbo.depth.depth_test_clamp.depth_component24
 | 
			
		||||
dEQP-GLES3.functional.fbo.depth.depth_test_clamp.depth_component32f
 | 
			
		||||
dEQP-GLES3.functional.fbo.depth.depth_write_clamp.depth32f_stencil8
 | 
			
		||||
dEQP-GLES3.functional.fbo.depth.depth_write_clamp.depth_component32f
 | 
			
		||||
dEQP-GLES3.functional.fbo.invalidate.sub.unbind_blit_msaa_color
 | 
			
		||||
dEQP-GLES3.functional.fbo.invalidate.sub.unbind_blit_msaa_depth
 | 
			
		||||
dEQP-GLES3.functional.fbo.invalidate.sub.unbind_blit_msaa_depth_stencil
 | 
			
		||||
dEQP-GLES3.functional.fbo.invalidate.sub.unbind_blit_msaa_stencil
 | 
			
		||||
dEQP-GLES3.functional.fbo.invalidate.whole.unbind_blit_msaa_color
 | 
			
		||||
dEQP-GLES3.functional.fbo.invalidate.whole.unbind_blit_msaa_depth
 | 
			
		||||
dEQP-GLES3.functional.fbo.invalidate.whole.unbind_blit_msaa_depth_stencil
 | 
			
		||||
dEQP-GLES3.functional.fbo.invalidate.whole.unbind_blit_msaa_stencil
 | 
			
		||||
dEQP-GLES3.functional.fbo.msaa.2_samples.depth24_stencil8
 | 
			
		||||
dEQP-GLES3.functional.fbo.msaa.2_samples.depth32f_stencil8
 | 
			
		||||
dEQP-GLES3.functional.fbo.msaa.2_samples.depth_component16
 | 
			
		||||
dEQP-GLES3.functional.fbo.msaa.2_samples.depth_component24
 | 
			
		||||
dEQP-GLES3.functional.fbo.msaa.2_samples.depth_component32f
 | 
			
		||||
dEQP-GLES3.functional.fbo.msaa.2_samples.r11f_g11f_b10f
 | 
			
		||||
dEQP-GLES3.functional.fbo.msaa.2_samples.r16f
 | 
			
		||||
dEQP-GLES3.functional.fbo.msaa.2_samples.r8
 | 
			
		||||
dEQP-GLES3.functional.fbo.msaa.2_samples.rg16f
 | 
			
		||||
dEQP-GLES3.functional.fbo.msaa.2_samples.rg8
 | 
			
		||||
dEQP-GLES3.functional.fbo.msaa.2_samples.rgb10_a2
 | 
			
		||||
dEQP-GLES3.functional.fbo.msaa.2_samples.rgb565
 | 
			
		||||
dEQP-GLES3.functional.fbo.msaa.2_samples.rgb5_a1
 | 
			
		||||
dEQP-GLES3.functional.fbo.msaa.2_samples.rgb8
 | 
			
		||||
dEQP-GLES3.functional.fbo.msaa.2_samples.rgba4
 | 
			
		||||
dEQP-GLES3.functional.fbo.msaa.2_samples.rgba8
 | 
			
		||||
dEQP-GLES3.functional.fbo.msaa.2_samples.srgb8_alpha8
 | 
			
		||||
dEQP-GLES3.functional.fbo.msaa.2_samples.stencil_index8
 | 
			
		||||
dEQP-GLES3.functional.fbo.msaa.4_samples.depth24_stencil8
 | 
			
		||||
dEQP-GLES3.functional.fbo.msaa.4_samples.depth32f_stencil8
 | 
			
		||||
dEQP-GLES3.functional.fbo.msaa.4_samples.depth_component16
 | 
			
		||||
dEQP-GLES3.functional.fbo.msaa.4_samples.depth_component24
 | 
			
		||||
dEQP-GLES3.functional.fbo.msaa.4_samples.depth_component32f
 | 
			
		||||
dEQP-GLES3.functional.fbo.msaa.4_samples.r11f_g11f_b10f
 | 
			
		||||
dEQP-GLES3.functional.fbo.msaa.4_samples.r16f
 | 
			
		||||
dEQP-GLES3.functional.fbo.msaa.4_samples.r8
 | 
			
		||||
dEQP-GLES3.functional.fbo.msaa.4_samples.rg16f
 | 
			
		||||
dEQP-GLES3.functional.fbo.msaa.4_samples.rg8
 | 
			
		||||
dEQP-GLES3.functional.fbo.msaa.4_samples.rgb10_a2
 | 
			
		||||
dEQP-GLES3.functional.fbo.msaa.4_samples.rgb565
 | 
			
		||||
dEQP-GLES3.functional.fbo.msaa.4_samples.rgb5_a1
 | 
			
		||||
dEQP-GLES3.functional.fbo.msaa.4_samples.rgb8
 | 
			
		||||
dEQP-GLES3.functional.fbo.msaa.4_samples.rgba4
 | 
			
		||||
dEQP-GLES3.functional.fbo.msaa.4_samples.rgba8
 | 
			
		||||
dEQP-GLES3.functional.fbo.msaa.4_samples.srgb8_alpha8
 | 
			
		||||
dEQP-GLES3.functional.fbo.msaa.4_samples.stencil_index8
 | 
			
		||||
dEQP-GLES3.functional.multisample.fbo_max_samples.proportionality_alpha_to_coverage
 | 
			
		||||
dEQP-GLES3.functional.multisample.fbo_max_samples.proportionality_sample_coverage
 | 
			
		||||
dEQP-GLES3.functional.multisample.fbo_max_samples.proportionality_sample_coverage_inverted
 | 
			
		||||
dEQP-GLES3.functional.multisample.fbo_max_samples.sample_coverage_invert
 | 
			
		||||
dEQP-GLES3.functional.negative_api.buffer.blit_framebuffer_multisample
 | 
			
		||||
dEQP-GLES3.functional.negative_api.buffer.read_pixels_fbo_format_mismatch
 | 
			
		||||
dEQP-GLES3.functional.polygon_offset.default_displacement_with_units
 | 
			
		||||
dEQP-GLES3.functional.polygon_offset.fixed16_displacement_with_units
 | 
			
		||||
dEQP-GLES3.functional.polygon_offset.fixed24_displacement_with_units
 | 
			
		||||
dEQP-GLES3.functional.polygon_offset.float32_displacement_with_units
 | 
			
		||||
dEQP-GLES3.functional.rasterization.fbo.rbo_multisample_max.interpolation.lines_wide
 | 
			
		||||
dEQP-GLES3.functional.rasterization.fbo.rbo_multisample_max.primitives.lines_wide
 | 
			
		||||
dEQP-GLES3.functional.rasterization.fbo.rbo_singlesample.interpolation.lines_wide
 | 
			
		||||
dEQP-GLES3.functional.rasterization.fbo.rbo_singlesample.primitives.points
 | 
			
		||||
dEQP-GLES3.functional.rasterization.fbo.texture_2d.interpolation.lines_wide
 | 
			
		||||
dEQP-GLES3.functional.rasterization.fbo.texture_2d.primitives.points
 | 
			
		||||
dEQP-GLES3.functional.rasterization.interpolation.basic.line_loop_wide
 | 
			
		||||
dEQP-GLES3.functional.rasterization.interpolation.basic.line_strip_wide
 | 
			
		||||
dEQP-GLES3.functional.rasterization.interpolation.basic.lines_wide
 | 
			
		||||
dEQP-GLES3.functional.rasterization.interpolation.projected.line_loop_wide
 | 
			
		||||
dEQP-GLES3.functional.rasterization.interpolation.projected.line_strip_wide
 | 
			
		||||
dEQP-GLES3.functional.rasterization.interpolation.projected.lines_wide
 | 
			
		||||
dEQP-GLES3.functional.rasterization.primitives.points
 | 
			
		||||
dEQP-GLES3.functional.rasterizer_discard.basic.write_depth_points
 | 
			
		||||
dEQP-GLES3.functional.rasterizer_discard.basic.write_stencil_points
 | 
			
		||||
dEQP-GLES3.functional.rasterizer_discard.fbo.write_depth_points
 | 
			
		||||
dEQP-GLES3.functional.rasterizer_discard.fbo.write_stencil_points
 | 
			
		||||
dEQP-GLES3.functional.rasterizer_discard.scissor.write_depth_points
 | 
			
		||||
dEQP-GLES3.functional.rasterizer_discard.scissor.write_stencil_points
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.dfdx.fastest.fbo_msaa4.float_highp
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.dfdx.fastest.fbo_msaa4.float_mediump
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.dfdx.fastest.fbo_msaa4.vec2_highp
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.dfdx.fastest.fbo_msaa4.vec2_mediump
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.dfdx.fastest.fbo_msaa4.vec3_highp
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.dfdx.fastest.fbo_msaa4.vec3_mediump
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.dfdx.fastest.fbo_msaa4.vec4_highp
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.dfdx.fastest.fbo_msaa4.vec4_mediump
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.dfdx.fbo_msaa2.float_highp
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.dfdx.fbo_msaa2.float_mediump
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.dfdx.fbo_msaa2.vec2_highp
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.dfdx.fbo_msaa2.vec2_mediump
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.dfdx.fbo_msaa2.vec3_highp
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.dfdx.fbo_msaa2.vec3_mediump
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.dfdx.fbo_msaa2.vec4_highp
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.dfdx.fbo_msaa2.vec4_mediump
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.dfdx.fbo_msaa4.float_highp
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.dfdx.fbo_msaa4.float_mediump
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.dfdx.fbo_msaa4.vec2_highp
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.dfdx.fbo_msaa4.vec2_mediump
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.dfdx.fbo_msaa4.vec3_highp
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.dfdx.fbo_msaa4.vec3_mediump
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.dfdx.fbo_msaa4.vec4_highp
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.dfdx.fbo_msaa4.vec4_mediump
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.dfdx.nicest.fbo_msaa4.float_highp
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.dfdx.nicest.fbo_msaa4.float_mediump
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.dfdx.nicest.fbo_msaa4.vec2_highp
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.dfdx.nicest.fbo_msaa4.vec2_mediump
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.dfdx.nicest.fbo_msaa4.vec3_highp
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.dfdx.nicest.fbo_msaa4.vec3_mediump
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.dfdx.nicest.fbo_msaa4.vec4_highp
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.dfdx.nicest.fbo_msaa4.vec4_mediump
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.dfdx.texture.msaa4.float_highp
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.dfdx.texture.msaa4.float_mediump
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.dfdx.texture.msaa4.vec2_highp
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.dfdx.texture.msaa4.vec2_mediump
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.dfdx.texture.msaa4.vec3_highp
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.dfdx.texture.msaa4.vec3_mediump
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.dfdx.texture.msaa4.vec4_highp
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.dfdx.texture.msaa4.vec4_mediump
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.dfdy.fastest.fbo_msaa4.float_highp
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.dfdy.fastest.fbo_msaa4.float_mediump
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.dfdy.fastest.fbo_msaa4.vec2_highp
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.dfdy.fastest.fbo_msaa4.vec2_mediump
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.dfdy.fastest.fbo_msaa4.vec3_highp
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.dfdy.fastest.fbo_msaa4.vec3_mediump
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.dfdy.fastest.fbo_msaa4.vec4_highp
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.dfdy.fastest.fbo_msaa4.vec4_mediump
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.dfdy.fbo_msaa2.float_highp
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.dfdy.fbo_msaa2.float_mediump
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.dfdy.fbo_msaa2.vec2_highp
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.dfdy.fbo_msaa2.vec2_mediump
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.dfdy.fbo_msaa2.vec3_highp
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.dfdy.fbo_msaa2.vec3_mediump
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.dfdy.fbo_msaa2.vec4_highp
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.dfdy.fbo_msaa2.vec4_mediump
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.dfdy.fbo_msaa4.float_highp
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.dfdy.fbo_msaa4.float_mediump
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.dfdy.fbo_msaa4.vec2_highp
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.dfdy.fbo_msaa4.vec2_mediump
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.dfdy.fbo_msaa4.vec3_highp
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.dfdy.fbo_msaa4.vec3_mediump
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.dfdy.fbo_msaa4.vec4_highp
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.dfdy.fbo_msaa4.vec4_mediump
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.dfdy.nicest.fbo_msaa4.float_highp
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.dfdy.nicest.fbo_msaa4.float_mediump
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.dfdy.nicest.fbo_msaa4.vec2_highp
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.dfdy.nicest.fbo_msaa4.vec2_mediump
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.dfdy.nicest.fbo_msaa4.vec3_highp
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.dfdy.nicest.fbo_msaa4.vec3_mediump
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.dfdy.nicest.fbo_msaa4.vec4_highp
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.dfdy.nicest.fbo_msaa4.vec4_mediump
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.dfdy.texture.msaa4.float_highp
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.dfdy.texture.msaa4.float_mediump
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.dfdy.texture.msaa4.vec2_highp
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.dfdy.texture.msaa4.vec2_mediump
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.dfdy.texture.msaa4.vec3_highp
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.dfdy.texture.msaa4.vec3_mediump
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.dfdy.texture.msaa4.vec4_highp
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.dfdy.texture.msaa4.vec4_mediump
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.fwidth.fastest.fbo_msaa4.float_highp
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.fwidth.fastest.fbo_msaa4.float_mediump
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.fwidth.fastest.fbo_msaa4.vec2_highp
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.fwidth.fastest.fbo_msaa4.vec2_mediump
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.fwidth.fastest.fbo_msaa4.vec3_highp
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.fwidth.fastest.fbo_msaa4.vec3_mediump
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.fwidth.fastest.fbo_msaa4.vec4_highp
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.fwidth.fastest.fbo_msaa4.vec4_mediump
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.fwidth.fbo_msaa2.float_highp
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.fwidth.fbo_msaa2.float_mediump
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.fwidth.fbo_msaa2.vec2_highp
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.fwidth.fbo_msaa2.vec2_mediump
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.fwidth.fbo_msaa2.vec3_highp
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.fwidth.fbo_msaa2.vec3_mediump
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.fwidth.fbo_msaa2.vec4_highp
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.fwidth.fbo_msaa2.vec4_mediump
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.fwidth.fbo_msaa4.float_highp
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.fwidth.fbo_msaa4.float_mediump
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.fwidth.fbo_msaa4.vec2_highp
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.fwidth.fbo_msaa4.vec2_mediump
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.fwidth.fbo_msaa4.vec3_highp
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.fwidth.fbo_msaa4.vec3_mediump
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.fwidth.fbo_msaa4.vec4_highp
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.fwidth.fbo_msaa4.vec4_mediump
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.fwidth.nicest.fbo_msaa4.float_highp
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.fwidth.nicest.fbo_msaa4.float_mediump
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.fwidth.nicest.fbo_msaa4.vec2_highp
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.fwidth.nicest.fbo_msaa4.vec2_mediump
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.fwidth.nicest.fbo_msaa4.vec3_highp
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.fwidth.nicest.fbo_msaa4.vec3_mediump
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.fwidth.nicest.fbo_msaa4.vec4_highp
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.fwidth.nicest.fbo_msaa4.vec4_mediump
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.fwidth.texture.msaa4.float_highp
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.fwidth.texture.msaa4.float_mediump
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.fwidth.texture.msaa4.vec2_highp
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.fwidth.texture.msaa4.vec2_mediump
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.fwidth.texture.msaa4.vec3_highp
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.fwidth.texture.msaa4.vec3_mediump
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.fwidth.texture.msaa4.vec4_highp
 | 
			
		||||
dEQP-GLES3.functional.shaders.derivate.fwidth.texture.msaa4.vec4_mediump
 | 
			
		||||
dEQP-GLES3.functional.state_query.integers.max_samples_getfloat
 | 
			
		||||
dEQP-GLES3.functional.state_query.integers.max_samples_getinteger64
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_linear_clamp_clamp_mirror
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_linear_clamp_clamp_repeat
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_linear_clamp_mirror_mirror
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_linear_clamp_mirror_repeat
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_linear_clamp_repeat_mirror
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_linear_clamp_repeat_repeat
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_linear_mirror_clamp_mirror
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_linear_mirror_clamp_repeat
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_linear_mirror_mirror_mirror
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_linear_mirror_mirror_repeat
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_linear_mirror_repeat_mirror
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_linear_mirror_repeat_repeat
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_linear_repeat_clamp_mirror
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_linear_repeat_clamp_repeat
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_linear_repeat_mirror_mirror
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_linear_repeat_mirror_repeat
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_linear_repeat_repeat_mirror
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_linear_repeat_repeat_repeat
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_mipmap_linear_linear_clamp_clamp_repeat
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_mipmap_linear_linear_clamp_mirror_repeat
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_mipmap_linear_linear_clamp_repeat_repeat
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_mipmap_linear_linear_mirror_clamp_repeat
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_mipmap_linear_linear_mirror_mirror_repeat
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_mipmap_linear_linear_mirror_repeat_repeat
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_mipmap_linear_linear_repeat_clamp_mirror
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_mipmap_linear_linear_repeat_clamp_repeat
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_mipmap_linear_linear_repeat_mirror_mirror
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_mipmap_linear_linear_repeat_mirror_repeat
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_mipmap_linear_linear_repeat_repeat_mirror
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_mipmap_linear_linear_repeat_repeat_repeat
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_mipmap_linear_nearest_repeat_clamp_mirror
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_mipmap_linear_nearest_repeat_clamp_repeat
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_mipmap_linear_nearest_repeat_mirror_mirror
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_mipmap_linear_nearest_repeat_mirror_repeat
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_mipmap_linear_nearest_repeat_repeat_mirror
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_mipmap_linear_nearest_repeat_repeat_repeat
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_mipmap_nearest_linear_clamp_clamp_repeat
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_mipmap_nearest_linear_clamp_mirror_repeat
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_mipmap_nearest_linear_clamp_repeat_repeat
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_mipmap_nearest_linear_mirror_clamp_repeat
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_mipmap_nearest_linear_mirror_mirror_repeat
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_mipmap_nearest_linear_mirror_repeat_repeat
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_mipmap_nearest_linear_repeat_clamp_mirror
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_mipmap_nearest_linear_repeat_clamp_repeat
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_mipmap_nearest_linear_repeat_mirror_mirror
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_mipmap_nearest_linear_repeat_mirror_repeat
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_mipmap_nearest_linear_repeat_repeat_mirror
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_mipmap_nearest_linear_repeat_repeat_repeat
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_mipmap_nearest_nearest_repeat_clamp_mirror
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_mipmap_nearest_nearest_repeat_clamp_repeat
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_mipmap_nearest_nearest_repeat_mirror_mirror
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_mipmap_nearest_nearest_repeat_mirror_repeat
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_mipmap_nearest_nearest_repeat_repeat_mirror
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_mipmap_nearest_nearest_repeat_repeat_repeat
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_nearest_clamp_clamp_mirror
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_nearest_clamp_clamp_repeat
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_nearest_clamp_mirror_mirror
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_nearest_clamp_mirror_repeat
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_nearest_clamp_repeat_mirror
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_nearest_clamp_repeat_repeat
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_nearest_mirror_clamp_mirror
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_nearest_mirror_clamp_repeat
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_nearest_mirror_mirror_mirror
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_nearest_mirror_mirror_repeat
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_nearest_mirror_repeat_mirror
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_nearest_mirror_repeat_repeat
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_nearest_repeat_clamp_mirror
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_nearest_repeat_clamp_repeat
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_nearest_repeat_mirror_mirror
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_nearest_repeat_mirror_repeat
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_nearest_repeat_repeat_mirror
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_nearest_repeat_repeat_repeat
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_linear_clamp_clamp_repeat
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_linear_clamp_mirror_repeat
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_linear_clamp_repeat_repeat
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_linear_mirror_clamp_repeat
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_linear_mirror_mirror_repeat
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_linear_mirror_repeat_repeat
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_linear_repeat_clamp_mirror
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_linear_repeat_clamp_repeat
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_linear_repeat_mirror_mirror
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_linear_repeat_mirror_repeat
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_linear_repeat_repeat_mirror
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_linear_repeat_repeat_repeat
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_mipmap_linear_linear_clamp_clamp_repeat
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_mipmap_linear_linear_clamp_mirror_repeat
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_mipmap_linear_linear_clamp_repeat_repeat
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_mipmap_linear_linear_mirror_clamp_repeat
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_mipmap_linear_linear_mirror_mirror_repeat
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_mipmap_linear_linear_mirror_repeat_repeat
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_mipmap_linear_linear_repeat_clamp_mirror
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_mipmap_linear_linear_repeat_clamp_repeat
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_mipmap_linear_linear_repeat_mirror_mirror
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_mipmap_linear_linear_repeat_mirror_repeat
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_mipmap_linear_linear_repeat_repeat_mirror
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_mipmap_linear_linear_repeat_repeat_repeat
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_mipmap_nearest_linear_clamp_clamp_repeat
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_mipmap_nearest_linear_clamp_mirror_repeat
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_mipmap_nearest_linear_clamp_repeat_repeat
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_mipmap_nearest_linear_mirror_clamp_repeat
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_mipmap_nearest_linear_mirror_mirror_repeat
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_mipmap_nearest_linear_mirror_repeat_repeat
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_mipmap_nearest_linear_repeat_clamp_mirror
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_mipmap_nearest_linear_repeat_clamp_repeat
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_mipmap_nearest_linear_repeat_mirror_mirror
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_mipmap_nearest_linear_repeat_mirror_repeat
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_mipmap_nearest_linear_repeat_repeat_mirror
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_mipmap_nearest_linear_repeat_repeat_repeat
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.formats.r11f_g11f_b10f_linear
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.formats.r11f_g11f_b10f_linear_mipmap_linear
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.formats.r11f_g11f_b10f_linear_mipmap_nearest
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.formats.r11f_g11f_b10f_nearest_mipmap_linear
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.formats.r11f_g11f_b10f_nearest_mipmap_nearest
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.formats.rgb10_a2_linear
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.formats.rgb10_a2_linear_mipmap_linear
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.formats.rgb10_a2_linear_mipmap_nearest
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.formats.rgb10_a2_nearest_mipmap_linear
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.formats.rgb10_a2_nearest_mipmap_nearest
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.formats.rgb565_linear
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.formats.rgb565_linear_mipmap_linear
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.formats.rgb565_linear_mipmap_nearest
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.formats.rgb565_nearest_mipmap_linear
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.formats.rgb565_nearest_mipmap_nearest
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.formats.rgb5_a1_linear
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.formats.rgb5_a1_linear_mipmap_linear
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.formats.rgb5_a1_linear_mipmap_nearest
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.formats.rgb5_a1_nearest_mipmap_linear
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.formats.rgb5_a1_nearest_mipmap_nearest
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.formats.rgb9_e5_linear
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.formats.rgb9_e5_linear_mipmap_linear
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.formats.rgb9_e5_linear_mipmap_nearest
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.formats.rgb9_e5_nearest_mipmap_linear
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.formats.rgb9_e5_nearest_mipmap_nearest
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.formats.rgba16f_linear
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.formats.rgba16f_linear_mipmap_linear
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.formats.rgba16f_linear_mipmap_nearest
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.formats.rgba16f_nearest_mipmap_linear
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.formats.rgba16f_nearest_mipmap_nearest
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.formats.rgba4_linear
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.formats.rgba4_linear_mipmap_linear
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.formats.rgba4_linear_mipmap_nearest
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.formats.rgba4_nearest_mipmap_linear
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.formats.rgba4_nearest_mipmap_nearest
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.formats.rgba8_linear
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.formats.rgba8_linear_mipmap_linear
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.formats.rgba8_linear_mipmap_nearest
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.formats.rgba8_nearest_mipmap_linear
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.formats.rgba8_nearest_mipmap_nearest
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.formats.rgba8_snorm_linear
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.formats.rgba8_snorm_linear_mipmap_linear
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.formats.rgba8_snorm_linear_mipmap_nearest
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.formats.rgba8_snorm_nearest_mipmap_linear
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.formats.rgba8_snorm_nearest_mipmap_nearest
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.formats.srgb8_alpha8_linear
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.formats.srgb8_alpha8_linear_mipmap_linear
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.formats.srgb8_alpha8_linear_mipmap_nearest
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.formats.srgb8_alpha8_nearest_mipmap_linear
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.formats.srgb8_alpha8_nearest_mipmap_nearest
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.formats.srgb_r8_linear
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.formats.srgb_r8_linear_mipmap_linear
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.formats.srgb_r8_linear_mipmap_nearest
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.formats.srgb_r8_nearest_mipmap_linear
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.formats.srgb_r8_nearest_mipmap_nearest
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.sizes.128x32x64_linear
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.sizes.128x32x64_linear_mipmap_linear
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.sizes.128x32x64_linear_mipmap_nearest
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.sizes.128x32x64_nearest_mipmap_linear
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.sizes.128x32x64_nearest_mipmap_nearest
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.sizes.63x63x63_linear
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.sizes.63x63x63_linear_mipmap_linear
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.sizes.63x63x63_linear_mipmap_nearest
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.sizes.63x63x63_nearest_mipmap_linear
 | 
			
		||||
dEQP-GLES3.functional.texture.filtering.3d.sizes.63x63x63_nearest_mipmap_nearest
 | 
			
		||||
dEQP-GLES3.functional.texture.vertex.3d.filtering.linear_linear_clamp
 | 
			
		||||
dEQP-GLES3.functional.texture.vertex.3d.filtering.linear_linear_mirror
 | 
			
		||||
dEQP-GLES3.functional.texture.vertex.3d.filtering.linear_linear_repeat
 | 
			
		||||
dEQP-GLES3.functional.texture.vertex.3d.filtering.linear_mipmap_linear_linear_clamp
 | 
			
		||||
dEQP-GLES3.functional.texture.vertex.3d.filtering.linear_mipmap_linear_linear_mirror
 | 
			
		||||
dEQP-GLES3.functional.texture.vertex.3d.filtering.linear_mipmap_linear_linear_repeat
 | 
			
		||||
dEQP-GLES3.functional.texture.vertex.3d.filtering.linear_mipmap_linear_nearest_clamp
 | 
			
		||||
dEQP-GLES3.functional.texture.vertex.3d.filtering.linear_mipmap_linear_nearest_mirror
 | 
			
		||||
dEQP-GLES3.functional.texture.vertex.3d.filtering.linear_mipmap_linear_nearest_repeat
 | 
			
		||||
dEQP-GLES3.functional.texture.vertex.3d.filtering.linear_mipmap_nearest_linear_repeat
 | 
			
		||||
dEQP-GLES3.functional.texture.vertex.3d.filtering.linear_nearest_clamp
 | 
			
		||||
dEQP-GLES3.functional.texture.vertex.3d.filtering.linear_nearest_mirror
 | 
			
		||||
dEQP-GLES3.functional.texture.vertex.3d.filtering.linear_nearest_repeat
 | 
			
		||||
dEQP-GLES3.functional.texture.vertex.3d.filtering.nearest_linear_repeat
 | 
			
		||||
dEQP-GLES3.functional.texture.vertex.3d.filtering.nearest_mipmap_linear_linear_repeat
 | 
			
		||||
dEQP-GLES3.functional.texture.vertex.3d.filtering.nearest_mipmap_nearest_linear_repeat
 | 
			
		||||
dEQP-GLES3.functional.texture.vertex.3d.wrap.clamp_clamp_clamp
 | 
			
		||||
dEQP-GLES3.functional.texture.vertex.3d.wrap.clamp_clamp_mirror
 | 
			
		||||
dEQP-GLES3.functional.texture.vertex.3d.wrap.clamp_clamp_repeat
 | 
			
		||||
dEQP-GLES3.functional.texture.vertex.3d.wrap.clamp_mirror_mirror
 | 
			
		||||
dEQP-GLES3.functional.texture.vertex.3d.wrap.clamp_mirror_repeat
 | 
			
		||||
dEQP-GLES3.functional.texture.vertex.3d.wrap.clamp_repeat_mirror
 | 
			
		||||
dEQP-GLES3.functional.texture.vertex.3d.wrap.clamp_repeat_repeat
 | 
			
		||||
dEQP-GLES3.functional.texture.vertex.3d.wrap.mirror_clamp_clamp
 | 
			
		||||
dEQP-GLES3.functional.texture.vertex.3d.wrap.mirror_clamp_mirror
 | 
			
		||||
dEQP-GLES3.functional.texture.vertex.3d.wrap.mirror_clamp_repeat
 | 
			
		||||
dEQP-GLES3.functional.texture.vertex.3d.wrap.mirror_mirror_mirror
 | 
			
		||||
dEQP-GLES3.functional.texture.vertex.3d.wrap.mirror_mirror_repeat
 | 
			
		||||
dEQP-GLES3.functional.texture.vertex.3d.wrap.mirror_repeat_mirror
 | 
			
		||||
dEQP-GLES3.functional.texture.vertex.3d.wrap.mirror_repeat_repeat
 | 
			
		||||
dEQP-GLES3.functional.texture.vertex.3d.wrap.repeat_clamp_clamp
 | 
			
		||||
dEQP-GLES3.functional.texture.vertex.3d.wrap.repeat_clamp_mirror
 | 
			
		||||
dEQP-GLES3.functional.texture.vertex.3d.wrap.repeat_clamp_repeat
 | 
			
		||||
dEQP-GLES3.functional.texture.vertex.3d.wrap.repeat_mirror_clamp
 | 
			
		||||
dEQP-GLES3.functional.texture.vertex.3d.wrap.repeat_mirror_mirror
 | 
			
		||||
dEQP-GLES3.functional.texture.vertex.3d.wrap.repeat_mirror_repeat
 | 
			
		||||
dEQP-GLES3.functional.texture.vertex.3d.wrap.repeat_repeat_clamp
 | 
			
		||||
dEQP-GLES3.functional.texture.vertex.3d.wrap.repeat_repeat_mirror
 | 
			
		||||
dEQP-GLES3.functional.texture.vertex.3d.wrap.repeat_repeat_repeat
 | 
			
		||||
dEQP-GLES3.functional.texture.wrap.astc_8x8.repeat_repeat_linear_divisible
 | 
			
		||||
dEQP-GLES3.functional.texture.wrap.astc_8x8.repeat_repeat_linear_not_divisible
 | 
			
		||||
dEQP-GLES3.functional.texture.wrap.astc_8x8_srgb.repeat_repeat_linear_divisible
 | 
			
		||||
dEQP-GLES3.functional.texture.wrap.astc_8x8_srgb.repeat_repeat_linear_not_divisible
 | 
			
		||||
dEQP-GLES3.functional.vertex_arrays.single_attribute.normalize.int2_10_10_10.components4_quads1
 | 
			
		||||
dEQP-GLES3.functional.vertex_arrays.single_attribute.normalize.int2_10_10_10.components4_quads256
 | 
			
		||||
dEQP-GLES31.functional.debug.error_filters.case_29
 | 
			
		||||
dEQP-GLES31.functional.debug.negative_coverage.callbacks.buffer.read_pixels_fbo_format_mismatch
 | 
			
		||||
dEQP-GLES31.functional.debug.negative_coverage.get_error.buffer.blit_framebuffer_multisample
 | 
			
		||||
dEQP-GLES31.functional.debug.negative_coverage.get_error.buffer.read_pixels_fbo_format_mismatch
 | 
			
		||||
dEQP-GLES31.functional.debug.negative_coverage.log.buffer.read_pixels_fbo_format_mismatch
 | 
			
		||||
dEQP-GLES31.functional.draw_base_vertex.draw_elements_instanced_base_vertex.line_loop.instanced_attributes
 | 
			
		||||
dEQP-GLES31.functional.draw_buffers_indexed.overwrite_indexed.common_color_mask_buffer_color_mask
 | 
			
		||||
dEQP-GLES31.functional.draw_buffers_indexed.random.max_implementation_draw_buffers.0
 | 
			
		||||
dEQP-GLES31.functional.draw_buffers_indexed.random.max_implementation_draw_buffers.1
 | 
			
		||||
dEQP-GLES31.functional.draw_buffers_indexed.random.max_implementation_draw_buffers.10
 | 
			
		||||
dEQP-GLES31.functional.draw_buffers_indexed.random.max_implementation_draw_buffers.11
 | 
			
		||||
dEQP-GLES31.functional.draw_buffers_indexed.random.max_implementation_draw_buffers.12
 | 
			
		||||
dEQP-GLES31.functional.draw_buffers_indexed.random.max_implementation_draw_buffers.14
 | 
			
		||||
dEQP-GLES31.functional.draw_buffers_indexed.random.max_implementation_draw_buffers.16
 | 
			
		||||
dEQP-GLES31.functional.draw_buffers_indexed.random.max_implementation_draw_buffers.17
 | 
			
		||||
dEQP-GLES31.functional.draw_buffers_indexed.random.max_implementation_draw_buffers.19
 | 
			
		||||
dEQP-GLES31.functional.draw_buffers_indexed.random.max_implementation_draw_buffers.2
 | 
			
		||||
dEQP-GLES31.functional.draw_buffers_indexed.random.max_implementation_draw_buffers.3
 | 
			
		||||
dEQP-GLES31.functional.draw_buffers_indexed.random.max_implementation_draw_buffers.4
 | 
			
		||||
dEQP-GLES31.functional.draw_buffers_indexed.random.max_implementation_draw_buffers.5
 | 
			
		||||
dEQP-GLES31.functional.draw_buffers_indexed.random.max_implementation_draw_buffers.6
 | 
			
		||||
dEQP-GLES31.functional.draw_buffers_indexed.random.max_implementation_draw_buffers.7
 | 
			
		||||
dEQP-GLES31.functional.draw_buffers_indexed.random.max_implementation_draw_buffers.8
 | 
			
		||||
dEQP-GLES31.functional.draw_buffers_indexed.random.max_implementation_draw_buffers.9
 | 
			
		||||
dEQP-GLES31.functional.draw_buffers_indexed.random.max_required_draw_buffers.0
 | 
			
		||||
dEQP-GLES31.functional.draw_buffers_indexed.random.max_required_draw_buffers.1
 | 
			
		||||
dEQP-GLES31.functional.draw_buffers_indexed.random.max_required_draw_buffers.14
 | 
			
		||||
dEQP-GLES31.functional.draw_buffers_indexed.random.max_required_draw_buffers.15
 | 
			
		||||
dEQP-GLES31.functional.draw_buffers_indexed.random.max_required_draw_buffers.16
 | 
			
		||||
dEQP-GLES31.functional.draw_buffers_indexed.random.max_required_draw_buffers.17
 | 
			
		||||
dEQP-GLES31.functional.draw_buffers_indexed.random.max_required_draw_buffers.19
 | 
			
		||||
dEQP-GLES31.functional.draw_buffers_indexed.random.max_required_draw_buffers.2
 | 
			
		||||
dEQP-GLES31.functional.draw_buffers_indexed.random.max_required_draw_buffers.4
 | 
			
		||||
dEQP-GLES31.functional.draw_buffers_indexed.random.max_required_draw_buffers.5
 | 
			
		||||
dEQP-GLES31.functional.draw_buffers_indexed.random.max_required_draw_buffers.7
 | 
			
		||||
dEQP-GLES31.functional.draw_buffers_indexed.random.max_required_draw_buffers.9
 | 
			
		||||
dEQP-GLES31.functional.draw_indirect.draw_arrays_indirect.line_strip.multiple_attributes
 | 
			
		||||
dEQP-GLES31.functional.fbo.no_attachments.interaction.17x512ms4_default_16x16ms2
 | 
			
		||||
dEQP-GLES31.functional.fbo.no_attachments.interaction.1x1ms0_default_2048x2048ms4
 | 
			
		||||
dEQP-GLES31.functional.fbo.no_attachments.interaction.2048x2048ms4_default_1x1ms0
 | 
			
		||||
dEQP-GLES31.functional.fbo.no_attachments.interaction.256x256ms0_default_512x512ms2
 | 
			
		||||
dEQP-GLES31.functional.fbo.no_attachments.interaction.256x256ms2_default_128x512ms0
 | 
			
		||||
dEQP-GLES31.functional.fbo.no_attachments.multisample.samples2
 | 
			
		||||
dEQP-GLES31.functional.fbo.no_attachments.multisample.samples3
 | 
			
		||||
dEQP-GLES31.functional.fbo.no_attachments.multisample.samples4
 | 
			
		||||
dEQP-GLES31.functional.fbo.no_attachments.random.1
 | 
			
		||||
dEQP-GLES31.functional.fbo.no_attachments.random.11
 | 
			
		||||
dEQP-GLES31.functional.fbo.no_attachments.random.14
 | 
			
		||||
dEQP-GLES31.functional.fbo.no_attachments.random.15
 | 
			
		||||
dEQP-GLES31.functional.fbo.no_attachments.random.4
 | 
			
		||||
dEQP-GLES31.functional.fbo.no_attachments.random.9
 | 
			
		||||
dEQP-GLES31.functional.geometry_shading.query.primitives_generated_amplification
 | 
			
		||||
dEQP-GLES31.functional.geometry_shading.query.primitives_generated_instanced
 | 
			
		||||
dEQP-GLES31.functional.geometry_shading.query.primitives_generated_no_amplification
 | 
			
		||||
dEQP-GLES31.functional.geometry_shading.query.primitives_generated_no_geometry
 | 
			
		||||
dEQP-GLES31.functional.geometry_shading.query.primitives_generated_partial_primitives
 | 
			
		||||
dEQP-GLES31.functional.image_load_store.early_fragment_tests.early_fragment_tests_stencil
 | 
			
		||||
dEQP-GLES31.functional.image_load_store.early_fragment_tests.early_fragment_tests_stencil_fbo
 | 
			
		||||
dEQP-GLES31.functional.image_load_store.early_fragment_tests.no_early_fragment_tests_depth
 | 
			
		||||
dEQP-GLES31.functional.image_load_store.early_fragment_tests.no_early_fragment_tests_depth_fbo
 | 
			
		||||
dEQP-GLES31.functional.shaders.opaque_type_indexing.ubo.dynamically_uniform_geometry
 | 
			
		||||
dEQP-GLES31.functional.state_query.integer.max_framebuffer_samples_getfloat
 | 
			
		||||
dEQP-GLES31.functional.state_query.integer.max_framebuffer_samples_getinteger
 | 
			
		||||
dEQP-GLES31.functional.state_query.integer.max_framebuffer_samples_getinteger64
 | 
			
		||||
dEQP-GLES31.functional.state_query.texture.texture_2d_multisample.texture_immutable_format_float
 | 
			
		||||
dEQP-GLES31.functional.state_query.texture.texture_2d_multisample.texture_immutable_format_integer
 | 
			
		||||
dEQP-GLES31.functional.state_query.texture.texture_2d_multisample.texture_immutable_format_pure_int
 | 
			
		||||
dEQP-GLES31.functional.state_query.texture.texture_2d_multisample.texture_immutable_format_pure_uint
 | 
			
		||||
dEQP-GLES31.functional.state_query.texture.texture_2d_multisample.texture_immutable_levels_float
 | 
			
		||||
dEQP-GLES31.functional.state_query.texture.texture_2d_multisample.texture_immutable_levels_integer
 | 
			
		||||
dEQP-GLES31.functional.state_query.texture.texture_2d_multisample.texture_immutable_levels_pure_int
 | 
			
		||||
dEQP-GLES31.functional.state_query.texture.texture_2d_multisample.texture_immutable_levels_pure_uint
 | 
			
		||||
dEQP-GLES31.functional.state_query.texture.texture_2d_multisample_array.texture_immutable_format_float
 | 
			
		||||
dEQP-GLES31.functional.state_query.texture.texture_2d_multisample_array.texture_immutable_format_integer
 | 
			
		||||
dEQP-GLES31.functional.state_query.texture.texture_2d_multisample_array.texture_immutable_format_pure_int
 | 
			
		||||
dEQP-GLES31.functional.state_query.texture.texture_2d_multisample_array.texture_immutable_format_pure_uint
 | 
			
		||||
dEQP-GLES31.functional.state_query.texture.texture_2d_multisample_array.texture_immutable_levels_float
 | 
			
		||||
dEQP-GLES31.functional.state_query.texture.texture_2d_multisample_array.texture_immutable_levels_integer
 | 
			
		||||
dEQP-GLES31.functional.state_query.texture.texture_2d_multisample_array.texture_immutable_levels_pure_int
 | 
			
		||||
dEQP-GLES31.functional.state_query.texture.texture_2d_multisample_array.texture_immutable_levels_pure_uint
 | 
			
		||||
dEQP-GLES31.functional.texture.border_clamp.depth_compare_mode.depth32f_stencil8.linear_size_npot
 | 
			
		||||
dEQP-GLES31.functional.texture.border_clamp.depth_compare_mode.depth32f_stencil8.linear_size_pot
 | 
			
		||||
dEQP-GLES31.functional.texture.filtering.cube_array.combinations.nearest_linear_clamp_repeat
 | 
			
		||||
dEQP-GLES31.functional.texture.filtering.cube_array.combinations.nearest_linear_mirror_repeat
 | 
			
		||||
dEQP-GLES31.functional.texture.filtering.cube_array.combinations.nearest_linear_repeat_clamp
 | 
			
		||||
dEQP-GLES31.functional.texture.filtering.cube_array.combinations.nearest_linear_repeat_mirror
 | 
			
		||||
dEQP-GLES31.functional.texture.filtering.cube_array.combinations.nearest_linear_repeat_repeat
 | 
			
		||||
dEQP-GLES31.functional.texture.filtering.cube_array.combinations.nearest_mipmap_linear_linear_clamp_repeat
 | 
			
		||||
dEQP-GLES31.functional.texture.filtering.cube_array.combinations.nearest_mipmap_linear_linear_mirror_repeat
 | 
			
		||||
dEQP-GLES31.functional.texture.filtering.cube_array.combinations.nearest_mipmap_linear_linear_repeat_clamp
 | 
			
		||||
dEQP-GLES31.functional.texture.filtering.cube_array.combinations.nearest_mipmap_linear_linear_repeat_repeat
 | 
			
		||||
dEQP-GLES31.functional.texture.filtering.cube_array.combinations.nearest_mipmap_linear_nearest_clamp_repeat
 | 
			
		||||
dEQP-GLES31.functional.texture.filtering.cube_array.combinations.nearest_mipmap_linear_nearest_mirror_repeat
 | 
			
		||||
dEQP-GLES31.functional.texture.filtering.cube_array.combinations.nearest_mipmap_linear_nearest_repeat_clamp
 | 
			
		||||
dEQP-GLES31.functional.texture.filtering.cube_array.combinations.nearest_mipmap_linear_nearest_repeat_mirror
 | 
			
		||||
dEQP-GLES31.functional.texture.filtering.cube_array.combinations.nearest_mipmap_nearest_linear_clamp_repeat
 | 
			
		||||
dEQP-GLES31.functional.texture.filtering.cube_array.combinations.nearest_mipmap_nearest_linear_mirror_repeat
 | 
			
		||||
dEQP-GLES31.functional.texture.filtering.cube_array.combinations.nearest_mipmap_nearest_linear_repeat_clamp
 | 
			
		||||
dEQP-GLES31.functional.texture.filtering.cube_array.combinations.nearest_mipmap_nearest_linear_repeat_mirror
 | 
			
		||||
dEQP-GLES31.functional.texture.filtering.cube_array.combinations.nearest_mipmap_nearest_nearest_repeat_clamp
 | 
			
		||||
dEQP-GLES31.functional.texture.filtering.cube_array.combinations.nearest_mipmap_nearest_nearest_repeat_mirror
 | 
			
		||||
dEQP-GLES31.functional.texture.filtering.cube_array.combinations.nearest_mipmap_nearest_nearest_repeat_repeat
 | 
			
		||||
dEQP-GLES31.functional.texture.filtering.cube_array.combinations.nearest_nearest_repeat_mirror
 | 
			
		||||
dEQP-GLES31.functional.texture.filtering.cube_array.formats.rgb10_a2_linear_mipmap_linear
 | 
			
		||||
dEQP-GLES31.functional.texture.filtering.cube_array.formats.rgb10_a2_nearest
 | 
			
		||||
dEQP-GLES31.functional.texture.filtering.cube_array.formats.rgb10_a2_nearest_mipmap_linear
 | 
			
		||||
dEQP-GLES31.functional.texture.filtering.cube_array.formats.rgb10_a2_nearest_mipmap_nearest
 | 
			
		||||
dEQP-GLES31.functional.texture.filtering.cube_array.formats.rgb565_nearest
 | 
			
		||||
dEQP-GLES31.functional.texture.filtering.cube_array.formats.rgb565_nearest_mipmap_linear
 | 
			
		||||
dEQP-GLES31.functional.texture.filtering.cube_array.formats.rgb5_a1_nearest
 | 
			
		||||
dEQP-GLES31.functional.texture.filtering.cube_array.formats.rgb5_a1_nearest_mipmap_linear
 | 
			
		||||
dEQP-GLES31.functional.texture.filtering.cube_array.formats.rgb9_e5_nearest_mipmap_linear
 | 
			
		||||
dEQP-GLES31.functional.texture.filtering.cube_array.formats.rgb9_e5_nearest_mipmap_nearest
 | 
			
		||||
dEQP-GLES31.functional.texture.filtering.cube_array.formats.rgba16f_nearest_mipmap_linear
 | 
			
		||||
dEQP-GLES31.functional.texture.filtering.cube_array.formats.rgba16f_nearest_mipmap_nearest
 | 
			
		||||
dEQP-GLES31.functional.texture.filtering.cube_array.formats.rgba4_nearest
 | 
			
		||||
dEQP-GLES31.functional.texture.filtering.cube_array.formats.rgba4_nearest_mipmap_linear
 | 
			
		||||
dEQP-GLES31.functional.texture.filtering.cube_array.formats.rgba8_nearest_mipmap_linear
 | 
			
		||||
dEQP-GLES31.functional.texture.filtering.cube_array.formats.rgba8_nearest_mipmap_nearest
 | 
			
		||||
dEQP-GLES31.functional.texture.filtering.cube_array.formats.rgba8_snorm_nearest
 | 
			
		||||
dEQP-GLES31.functional.texture.filtering.cube_array.formats.rgba8_snorm_nearest_mipmap_nearest
 | 
			
		||||
dEQP-GLES31.functional.texture.filtering.cube_array.formats.sr8_nearest_mipmap_nearest
 | 
			
		||||
dEQP-GLES31.functional.texture.filtering.cube_array.formats.srgb8_alpha8_nearest
 | 
			
		||||
dEQP-GLES31.functional.texture.filtering.cube_array.formats.srgb8_alpha8_nearest_mipmap_linear
 | 
			
		||||
dEQP-GLES31.functional.texture.filtering.cube_array.sizes.128x128x12_linear
 | 
			
		||||
dEQP-GLES31.functional.texture.filtering.cube_array.sizes.128x128x12_linear_mipmap_linear
 | 
			
		||||
dEQP-GLES31.functional.texture.filtering.cube_array.sizes.128x128x12_linear_mipmap_nearest
 | 
			
		||||
dEQP-GLES31.functional.texture.filtering.cube_array.sizes.128x128x12_nearest_mipmap_linear
 | 
			
		||||
dEQP-GLES31.functional.texture.filtering.cube_array.sizes.128x128x12_nearest_mipmap_nearest
 | 
			
		||||
dEQP-GLES31.functional.texture.filtering.cube_array.sizes.63x63x18_nearest_mipmap_nearest
 | 
			
		||||
dEQP-GLES31.functional.texture.filtering.cube_array.sizes.64x64x12_nearest_mipmap_linear
 | 
			
		||||
dEQP-GLES31.functional.texture.filtering.cube_array.sizes.64x64x12_nearest_mipmap_nearest
 | 
			
		||||
dEQP-GLES31.functional.texture.filtering.cube_array.sizes.8x8x6_nearest
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.basic.2d.rgba8i.texture_swizzle.alpha_zero_one_red
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.basic.2d.rgba8i.texture_swizzle.blue_alpha_zero_one
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.basic.2d.rgba8i.texture_swizzle.one_red_green_blue
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.basic.2d.rgba8i.texture_swizzle.zero_one_red_green
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.basic.2d.rgba8ui.texture_swizzle.alpha_zero_one_red
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.basic.2d.rgba8ui.texture_swizzle.blue_alpha_zero_one
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.basic.2d.rgba8ui.texture_swizzle.one_red_green_blue
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.basic.2d.rgba8ui.texture_swizzle.zero_one_red_green
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.basic.2d_array.rgba8i.texture_swizzle.alpha_zero_one_red
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.basic.2d_array.rgba8i.texture_swizzle.blue_alpha_zero_one
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.basic.2d_array.rgba8i.texture_swizzle.one_red_green_blue
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.basic.2d_array.rgba8i.texture_swizzle.zero_one_red_green
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.basic.2d_array.rgba8ui.texture_swizzle.alpha_zero_one_red
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.basic.2d_array.rgba8ui.texture_swizzle.blue_alpha_zero_one
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.basic.2d_array.rgba8ui.texture_swizzle.one_red_green_blue
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.basic.2d_array.rgba8ui.texture_swizzle.zero_one_red_green
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.basic.cube.rgba8.no_corners.size_pot.clamp_to_edge_repeat
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.basic.cube.rgba8.no_corners.size_pot.mirrored_repeat_clamp_to_edge
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.basic.cube.rgba8.no_corners.size_pot.repeat_mirrored_repeat
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.basic.cube.rgba8i.no_corners.size_pot.clamp_to_edge_repeat
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.basic.cube.rgba8i.no_corners.size_pot.mirrored_repeat_clamp_to_edge
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.basic.cube.rgba8i.no_corners.size_pot.repeat_mirrored_repeat
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.basic.cube.rgba8i.texture_swizzle.alpha_zero_one_red
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.basic.cube.rgba8i.texture_swizzle.blue_alpha_zero_one
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.basic.cube.rgba8i.texture_swizzle.one_red_green_blue
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.basic.cube.rgba8i.texture_swizzle.zero_one_red_green
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.basic.cube.rgba8ui.no_corners.size_pot.clamp_to_edge_repeat
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.basic.cube.rgba8ui.no_corners.size_pot.mirrored_repeat_clamp_to_edge
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.basic.cube.rgba8ui.no_corners.size_pot.repeat_mirrored_repeat
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.basic.cube.rgba8ui.texture_swizzle.alpha_zero_one_red
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.basic.cube.rgba8ui.texture_swizzle.blue_alpha_zero_one
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.basic.cube.rgba8ui.texture_swizzle.one_red_green_blue
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.basic.cube.rgba8ui.texture_swizzle.zero_one_red_green
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d.rgba8i.texture_swizzle.alpha_zero_one_red
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d.rgba8i.texture_swizzle.blue_alpha_zero_one
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d.rgba8i.texture_swizzle.one_red_green_blue
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d.rgba8i.texture_swizzle.zero_one_red_green
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d.rgba8ui.texture_swizzle.alpha_zero_one_red
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d.rgba8ui.texture_swizzle.blue_alpha_zero_one
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d.rgba8ui.texture_swizzle.one_red_green_blue
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d.rgba8ui.texture_swizzle.zero_one_red_green
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d_array.rgba8i.texture_swizzle.alpha_zero_one_red
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d_array.rgba8i.texture_swizzle.blue_alpha_zero_one
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d_array.rgba8i.texture_swizzle.one_red_green_blue
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d_array.rgba8i.texture_swizzle.zero_one_red_green
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d_array.rgba8ui.texture_swizzle.alpha_zero_one_red
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d_array.rgba8ui.texture_swizzle.blue_alpha_zero_one
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d_array.rgba8ui.texture_swizzle.one_red_green_blue
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d_array.rgba8ui.texture_swizzle.zero_one_red_green
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.depth32f.base_level.level_1
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.depth32f.base_level.level_2
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.depth32f.filter_mode.min_linear_mag_linear
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.depth32f.filter_mode.min_linear_mipmap_linear_mag_linear
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.depth32f.filter_mode.min_linear_mipmap_nearest_mag_linear
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.depth32f.filter_mode.min_nearest_mipmap_linear_mag_linear
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.depth32f.filter_mode.min_nearest_mipmap_nearest_mag_linear
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.depth32f.size_npot.compare_greater.clamp_to_edge_repeat
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.depth32f.size_npot.compare_greater.mirrored_repeat_clamp_to_edge
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.depth32f.size_npot.compare_greater.repeat_mirrored_repeat
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.depth32f.size_npot.compare_less.clamp_to_edge_repeat
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.depth32f.size_npot.compare_less.mirrored_repeat_clamp_to_edge
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.depth32f.size_npot.compare_less.repeat_mirrored_repeat
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.depth32f.size_pot.compare_greater.clamp_to_edge_repeat
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.depth32f.size_pot.compare_greater.mirrored_repeat_clamp_to_edge
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.depth32f.size_pot.compare_greater.repeat_mirrored_repeat
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.depth32f.size_pot.compare_less.clamp_to_edge_repeat
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.depth32f.size_pot.compare_less.mirrored_repeat_clamp_to_edge
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.depth32f.size_pot.compare_less.repeat_mirrored_repeat
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.rgba8.base_level.level_1
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.rgba8.base_level.level_2
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.rgba8.filter_mode.min_linear_mag_linear
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.rgba8.filter_mode.min_linear_mipmap_linear_mag_linear
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.rgba8.filter_mode.min_linear_mipmap_nearest_mag_linear
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.rgba8.filter_mode.min_nearest_mipmap_linear_mag_linear
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.rgba8.filter_mode.min_nearest_mipmap_nearest_mag_linear
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.rgba8.size_npot.clamp_to_edge_repeat
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.rgba8.size_npot.mirrored_repeat_clamp_to_edge
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.rgba8.size_npot.repeat_mirrored_repeat
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.rgba8.size_pot.clamp_to_edge_repeat
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.rgba8.size_pot.mirrored_repeat_clamp_to_edge
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.rgba8.size_pot.repeat_mirrored_repeat
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.rgba8.texture_swizzle.alpha_zero_one_red
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.rgba8.texture_swizzle.blue_alpha_zero_one
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.rgba8.texture_swizzle.green_blue_alpha_zero
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.rgba8.texture_swizzle.one_red_green_blue
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.rgba8.texture_swizzle.red_green_blue_alpha
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.rgba8.texture_swizzle.zero_one_red_green
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.rgba8i.base_level.level_1
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.rgba8i.base_level.level_2
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.rgba8i.filter_mode.min_nearest_mipmap_nearest_mag_nearest
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.rgba8i.size_npot.clamp_to_edge_repeat
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.rgba8i.size_npot.mirrored_repeat_clamp_to_edge
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.rgba8i.size_npot.repeat_mirrored_repeat
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.rgba8i.size_pot.clamp_to_edge_repeat
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.rgba8i.size_pot.mirrored_repeat_clamp_to_edge
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.rgba8i.size_pot.repeat_mirrored_repeat
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.rgba8i.texture_swizzle.alpha_zero_one_red
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.rgba8i.texture_swizzle.blue_alpha_zero_one
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.rgba8i.texture_swizzle.green_blue_alpha_zero
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.rgba8i.texture_swizzle.one_red_green_blue
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.rgba8i.texture_swizzle.red_green_blue_alpha
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.rgba8i.texture_swizzle.zero_one_red_green
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.rgba8ui.base_level.level_1
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.rgba8ui.base_level.level_2
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.rgba8ui.filter_mode.min_nearest_mipmap_nearest_mag_nearest
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.rgba8ui.size_npot.clamp_to_edge_repeat
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.rgba8ui.size_npot.mirrored_repeat_clamp_to_edge
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.rgba8ui.size_npot.repeat_mirrored_repeat
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.rgba8ui.size_pot.clamp_to_edge_repeat
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.rgba8ui.size_pot.mirrored_repeat_clamp_to_edge
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.rgba8ui.size_pot.repeat_mirrored_repeat
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.rgba8ui.texture_swizzle.alpha_zero_one_red
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.rgba8ui.texture_swizzle.blue_alpha_zero_one
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.rgba8ui.texture_swizzle.green_blue_alpha_zero
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.rgba8ui.texture_swizzle.one_red_green_blue
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.rgba8ui.texture_swizzle.red_green_blue_alpha
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d.rgba8ui.texture_swizzle.zero_one_red_green
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.depth32f.base_level.level_1
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.depth32f.base_level.level_2
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.depth32f.filter_mode.min_linear_mag_linear
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.depth32f.filter_mode.min_linear_mipmap_linear_mag_linear
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.depth32f.filter_mode.min_linear_mipmap_nearest_mag_linear
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.depth32f.filter_mode.min_nearest_mipmap_linear_mag_linear
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.depth32f.filter_mode.min_nearest_mipmap_nearest_mag_linear
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.depth32f.size_npot.compare_greater.clamp_to_edge_repeat
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.depth32f.size_npot.compare_greater.mirrored_repeat_clamp_to_edge
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.depth32f.size_npot.compare_greater.repeat_mirrored_repeat
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.depth32f.size_npot.compare_less.clamp_to_edge_repeat
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.depth32f.size_npot.compare_less.mirrored_repeat_clamp_to_edge
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.depth32f.size_npot.compare_less.repeat_mirrored_repeat
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.depth32f.size_pot.compare_greater.clamp_to_edge_repeat
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.depth32f.size_pot.compare_greater.mirrored_repeat_clamp_to_edge
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.depth32f.size_pot.compare_greater.repeat_mirrored_repeat
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.depth32f.size_pot.compare_less.clamp_to_edge_repeat
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.depth32f.size_pot.compare_less.mirrored_repeat_clamp_to_edge
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.depth32f.size_pot.compare_less.repeat_mirrored_repeat
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.rgba8.base_level.level_1
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.rgba8.base_level.level_2
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.rgba8.filter_mode.min_linear_mag_linear
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.rgba8.filter_mode.min_linear_mipmap_linear_mag_linear
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.rgba8.filter_mode.min_linear_mipmap_nearest_mag_linear
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.rgba8.filter_mode.min_nearest_mipmap_linear_mag_linear
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.rgba8.filter_mode.min_nearest_mipmap_nearest_mag_linear
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.rgba8.size_npot.clamp_to_edge_repeat
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.rgba8.size_npot.mirrored_repeat_clamp_to_edge
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.rgba8.size_npot.repeat_mirrored_repeat
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.rgba8.size_pot.clamp_to_edge_repeat
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.rgba8.size_pot.mirrored_repeat_clamp_to_edge
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.rgba8.size_pot.repeat_mirrored_repeat
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.rgba8.texture_swizzle.alpha_zero_one_red
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.rgba8.texture_swizzle.blue_alpha_zero_one
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.rgba8.texture_swizzle.green_blue_alpha_zero
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.rgba8.texture_swizzle.one_red_green_blue
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.rgba8.texture_swizzle.red_green_blue_alpha
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.rgba8.texture_swizzle.zero_one_red_green
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.rgba8i.base_level.level_1
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.rgba8i.base_level.level_2
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.rgba8i.filter_mode.min_nearest_mipmap_nearest_mag_nearest
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.rgba8i.size_npot.clamp_to_edge_repeat
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.rgba8i.size_npot.mirrored_repeat_clamp_to_edge
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.rgba8i.size_npot.repeat_mirrored_repeat
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.rgba8i.size_pot.clamp_to_edge_repeat
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.rgba8i.size_pot.mirrored_repeat_clamp_to_edge
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.rgba8i.size_pot.repeat_mirrored_repeat
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.rgba8i.texture_swizzle.alpha_zero_one_red
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.rgba8i.texture_swizzle.blue_alpha_zero_one
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.rgba8i.texture_swizzle.green_blue_alpha_zero
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.rgba8i.texture_swizzle.one_red_green_blue
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.rgba8i.texture_swizzle.red_green_blue_alpha
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.rgba8i.texture_swizzle.zero_one_red_green
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.rgba8ui.base_level.level_1
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.rgba8ui.base_level.level_2
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.rgba8ui.filter_mode.min_nearest_mipmap_nearest_mag_nearest
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.rgba8ui.size_npot.clamp_to_edge_repeat
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.rgba8ui.size_npot.mirrored_repeat_clamp_to_edge
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.rgba8ui.size_npot.repeat_mirrored_repeat
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.rgba8ui.size_pot.clamp_to_edge_repeat
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.rgba8ui.size_pot.mirrored_repeat_clamp_to_edge
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.rgba8ui.size_pot.repeat_mirrored_repeat
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.rgba8ui.texture_swizzle.alpha_zero_one_red
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.rgba8ui.texture_swizzle.blue_alpha_zero_one
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.rgba8ui.texture_swizzle.green_blue_alpha_zero
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.rgba8ui.texture_swizzle.one_red_green_blue
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.rgba8ui.texture_swizzle.red_green_blue_alpha
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.implementation_offset.2d_array.rgba8ui.texture_swizzle.zero_one_red_green
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d.depth32f.size_npot.compare_greater.clamp_to_edge_repeat
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d.depth32f.size_npot.compare_greater.mirrored_repeat_clamp_to_edge
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d.depth32f.size_npot.compare_greater.repeat_mirrored_repeat
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d.depth32f.size_npot.compare_less.clamp_to_edge_repeat
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d.depth32f.size_npot.compare_less.mirrored_repeat_clamp_to_edge
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d.depth32f.size_npot.compare_less.repeat_mirrored_repeat
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d.depth32f.size_pot.compare_greater.clamp_to_edge_repeat
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d.depth32f.size_pot.compare_greater.mirrored_repeat_clamp_to_edge
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d.depth32f.size_pot.compare_greater.repeat_mirrored_repeat
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d.depth32f.size_pot.compare_less.clamp_to_edge_repeat
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d.depth32f.size_pot.compare_less.mirrored_repeat_clamp_to_edge
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d.depth32f.size_pot.compare_less.repeat_mirrored_repeat
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d.rgba8.size_npot.clamp_to_edge_repeat
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d.rgba8.size_npot.mirrored_repeat_clamp_to_edge
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d.rgba8.size_npot.repeat_mirrored_repeat
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d.rgba8.size_pot.clamp_to_edge_repeat
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d.rgba8.size_pot.mirrored_repeat_clamp_to_edge
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d.rgba8.size_pot.repeat_mirrored_repeat
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d.rgba8i.size_npot.clamp_to_edge_repeat
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d.rgba8i.size_npot.mirrored_repeat_clamp_to_edge
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d.rgba8i.size_npot.repeat_mirrored_repeat
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d.rgba8i.size_pot.clamp_to_edge_repeat
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d.rgba8i.size_pot.mirrored_repeat_clamp_to_edge
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d.rgba8i.size_pot.repeat_mirrored_repeat
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d.rgba8ui.size_npot.clamp_to_edge_repeat
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d.rgba8ui.size_npot.mirrored_repeat_clamp_to_edge
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d.rgba8ui.size_npot.repeat_mirrored_repeat
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d.rgba8ui.size_pot.clamp_to_edge_repeat
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d.rgba8ui.size_pot.mirrored_repeat_clamp_to_edge
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d.rgba8ui.size_pot.repeat_mirrored_repeat
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d_array.depth32f.size_npot.compare_greater.clamp_to_edge_repeat
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d_array.depth32f.size_npot.compare_greater.mirrored_repeat_clamp_to_edge
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d_array.depth32f.size_npot.compare_greater.repeat_mirrored_repeat
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d_array.depth32f.size_npot.compare_less.clamp_to_edge_repeat
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d_array.depth32f.size_npot.compare_less.mirrored_repeat_clamp_to_edge
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d_array.depth32f.size_npot.compare_less.repeat_mirrored_repeat
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d_array.depth32f.size_pot.compare_greater.clamp_to_edge_repeat
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d_array.depth32f.size_pot.compare_greater.mirrored_repeat_clamp_to_edge
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d_array.depth32f.size_pot.compare_greater.repeat_mirrored_repeat
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d_array.depth32f.size_pot.compare_less.clamp_to_edge_repeat
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d_array.depth32f.size_pot.compare_less.mirrored_repeat_clamp_to_edge
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d_array.depth32f.size_pot.compare_less.repeat_mirrored_repeat
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d_array.rgba8.size_npot.clamp_to_edge_repeat
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d_array.rgba8.size_npot.mirrored_repeat_clamp_to_edge
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d_array.rgba8.size_npot.repeat_mirrored_repeat
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d_array.rgba8.size_pot.clamp_to_edge_repeat
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d_array.rgba8.size_pot.mirrored_repeat_clamp_to_edge
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d_array.rgba8.size_pot.repeat_mirrored_repeat
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d_array.rgba8i.size_npot.clamp_to_edge_repeat
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d_array.rgba8i.size_npot.mirrored_repeat_clamp_to_edge
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d_array.rgba8i.size_npot.repeat_mirrored_repeat
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d_array.rgba8i.size_pot.clamp_to_edge_repeat
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d_array.rgba8i.size_pot.mirrored_repeat_clamp_to_edge
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d_array.rgba8i.size_pot.repeat_mirrored_repeat
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d_array.rgba8ui.size_npot.clamp_to_edge_repeat
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d_array.rgba8ui.size_npot.mirrored_repeat_clamp_to_edge
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d_array.rgba8ui.size_npot.repeat_mirrored_repeat
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d_array.rgba8ui.size_pot.clamp_to_edge_repeat
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d_array.rgba8ui.size_pot.mirrored_repeat_clamp_to_edge
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offset_dynamic.min_required_offset.2d_array.rgba8ui.size_pot.repeat_mirrored_repeat
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offsets.implementation_offset.2d.rgba8i.texture_swizzle.alpha_zero_one_red
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offsets.implementation_offset.2d.rgba8i.texture_swizzle.blue_alpha_zero_one
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offsets.implementation_offset.2d.rgba8i.texture_swizzle.one_red_green_blue
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offsets.implementation_offset.2d.rgba8i.texture_swizzle.zero_one_red_green
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offsets.implementation_offset.2d.rgba8ui.texture_swizzle.alpha_zero_one_red
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offsets.implementation_offset.2d.rgba8ui.texture_swizzle.blue_alpha_zero_one
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offsets.implementation_offset.2d.rgba8ui.texture_swizzle.one_red_green_blue
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offsets.implementation_offset.2d.rgba8ui.texture_swizzle.zero_one_red_green
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offsets.implementation_offset.2d_array.rgba8i.texture_swizzle.alpha_zero_one_red
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offsets.implementation_offset.2d_array.rgba8i.texture_swizzle.blue_alpha_zero_one
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offsets.implementation_offset.2d_array.rgba8i.texture_swizzle.one_red_green_blue
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offsets.implementation_offset.2d_array.rgba8i.texture_swizzle.zero_one_red_green
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offsets.implementation_offset.2d_array.rgba8ui.texture_swizzle.alpha_zero_one_red
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offsets.implementation_offset.2d_array.rgba8ui.texture_swizzle.blue_alpha_zero_one
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offsets.implementation_offset.2d_array.rgba8ui.texture_swizzle.one_red_green_blue
 | 
			
		||||
dEQP-GLES31.functional.texture.gather.offsets.implementation_offset.2d_array.rgba8ui.texture_swizzle.zero_one_red_green
 | 
			
		||||
dEQP-GLES31.functional.texture.multisample.samples_1.sample_mask_and_alpha_to_coverage
 | 
			
		||||
dEQP-GLES31.functional.texture.multisample.samples_1.sample_mask_and_sample_coverage
 | 
			
		||||
dEQP-GLES31.functional.texture.multisample.samples_1.sample_mask_and_sample_coverage_and_alpha_to_coverage
 | 
			
		||||
dEQP-GLES31.functional.texture.multisample.samples_1.sample_mask_non_effective_bits
 | 
			
		||||
dEQP-GLES31.functional.texture.multisample.samples_1.sample_mask_only
 | 
			
		||||
@@ -1,16 +0,0 @@
 | 
			
		||||
# Note: skips lists for CI are just a list of lines that, when
 | 
			
		||||
# non-zero-length and not starting with '#', will regex match to
 | 
			
		||||
# delete lines from the test list.  Be careful.
 | 
			
		||||
 | 
			
		||||
# Skip the perf/stress tests to keep runtime manageable
 | 
			
		||||
dEQP-GLES[0-9]*.performance.*
 | 
			
		||||
dEQP-GLES[0-9]*.stress.*
 | 
			
		||||
 | 
			
		||||
# These are really slow on tiling architectures (including llvmpipe).
 | 
			
		||||
dEQP-GLES[0-9]*.functional.flush_finish.*
 | 
			
		||||
 | 
			
		||||
# Random failures
 | 
			
		||||
dEQP-GLES31.functional.shaders.builtin_functions.*geometry
 | 
			
		||||
 | 
			
		||||
dEQP-GLES31.functional.fbo.no_attachments.maximums.all
 | 
			
		||||
dEQP-GLES31.functional.fbo.no_attachments.maximums.size
 | 
			
		||||
@@ -1,45 +0,0 @@
 | 
			
		||||
#!/usr/bin/env python3
 | 
			
		||||
 | 
			
		||||
from jinja2 import Environment, FileSystemLoader
 | 
			
		||||
import argparse
 | 
			
		||||
import os
 | 
			
		||||
 | 
			
		||||
parser = argparse.ArgumentParser()
 | 
			
		||||
parser.add_argument("--template")
 | 
			
		||||
parser.add_argument("--pipeline-info")
 | 
			
		||||
parser.add_argument("--base-artifacts-url")
 | 
			
		||||
parser.add_argument("--device-type")
 | 
			
		||||
parser.add_argument("--kernel-image-name")
 | 
			
		||||
parser.add_argument("--kernel-image-type", nargs='?', default="")
 | 
			
		||||
parser.add_argument("--gpu-version")
 | 
			
		||||
parser.add_argument("--boot-method")
 | 
			
		||||
parser.add_argument("--lava-tags", nargs='?', default="")
 | 
			
		||||
parser.add_argument("--env-vars", nargs='?', default="")
 | 
			
		||||
parser.add_argument("--deqp-version")
 | 
			
		||||
parser.add_argument("--arch")
 | 
			
		||||
parser.add_argument("--ci-node-index")
 | 
			
		||||
parser.add_argument("--ci-node-total")
 | 
			
		||||
args = parser.parse_args()
 | 
			
		||||
 | 
			
		||||
env = Environment(loader = FileSystemLoader(os.path.dirname(args.template)), trim_blocks=True, lstrip_blocks=True)
 | 
			
		||||
template = env.get_template(os.path.basename(args.template))
 | 
			
		||||
 | 
			
		||||
values = {}
 | 
			
		||||
values['pipeline_info'] = args.pipeline_info
 | 
			
		||||
values['base_artifacts_url'] = args.base_artifacts_url
 | 
			
		||||
values['device_type'] = args.device_type
 | 
			
		||||
values['kernel_image_name'] = args.kernel_image_name
 | 
			
		||||
values['kernel_image_type'] = args.kernel_image_type
 | 
			
		||||
values['gpu_version'] = args.gpu_version
 | 
			
		||||
values['boot_method'] = args.boot_method
 | 
			
		||||
values['tags'] = args.lava_tags
 | 
			
		||||
values['env_vars'] = args.env_vars
 | 
			
		||||
values['deqp_version'] = args.deqp_version
 | 
			
		||||
values['arch'] = args.arch
 | 
			
		||||
values['ci_node_index'] = args.ci_node_index
 | 
			
		||||
values['ci_node_total'] = args.ci_node_total
 | 
			
		||||
 | 
			
		||||
f = open('lava-deqp.yml', "w")
 | 
			
		||||
f.write(template.render(values))
 | 
			
		||||
f.close()
 | 
			
		||||
 | 
			
		||||
@@ -1,93 +0,0 @@
 | 
			
		||||
job_name: mesa-deqp-{{ gpu_version }} {{ pipeline_info }}
 | 
			
		||||
device_type: {{ device_type }}
 | 
			
		||||
timeouts:
 | 
			
		||||
  job:
 | 
			
		||||
    minutes: 40
 | 
			
		||||
  action:
 | 
			
		||||
   minutes: 10
 | 
			
		||||
  actions:
 | 
			
		||||
    power-off:
 | 
			
		||||
      seconds: 30
 | 
			
		||||
priority: 75
 | 
			
		||||
visibility: public
 | 
			
		||||
{% if tags %}
 | 
			
		||||
tags:
 | 
			
		||||
{% for tag in tags %}
 | 
			
		||||
  - {{ tag }}
 | 
			
		||||
{% endfor %}
 | 
			
		||||
{% endif %}
 | 
			
		||||
actions:
 | 
			
		||||
- deploy:
 | 
			
		||||
    timeout:
 | 
			
		||||
      minutes: 10
 | 
			
		||||
    to: tftp
 | 
			
		||||
    kernel:
 | 
			
		||||
      url: {{ base_artifacts_url }}/{{ kernel_image_name }}
 | 
			
		||||
{% if kernel_image_type %}
 | 
			
		||||
      {{ kernel_image_type }}
 | 
			
		||||
{% endif %}
 | 
			
		||||
    ramdisk:
 | 
			
		||||
      url: {{ base_artifacts_url }}/lava-rootfs-{{ arch }}.cpio.gz
 | 
			
		||||
      compression: gz
 | 
			
		||||
    dtb:
 | 
			
		||||
      url: {{ base_artifacts_url }}/{{ device_type }}.dtb
 | 
			
		||||
    os: oe
 | 
			
		||||
- boot:
 | 
			
		||||
    timeout:
 | 
			
		||||
      minutes: 5
 | 
			
		||||
    method: {{ boot_method }}
 | 
			
		||||
    commands: ramdisk
 | 
			
		||||
    prompts:
 | 
			
		||||
      - '#' 
 | 
			
		||||
- test:
 | 
			
		||||
    timeout:
 | 
			
		||||
      minutes: 60
 | 
			
		||||
    definitions:
 | 
			
		||||
    - repository:
 | 
			
		||||
        metadata:
 | 
			
		||||
          format: Lava-Test Test Definition 1.0
 | 
			
		||||
          name: deqp
 | 
			
		||||
          description: "Mesa dEQP test plan"
 | 
			
		||||
          os:
 | 
			
		||||
          - oe
 | 
			
		||||
          scope:
 | 
			
		||||
          - functional
 | 
			
		||||
        run:
 | 
			
		||||
          steps:
 | 
			
		||||
          - mount -t proc none /proc
 | 
			
		||||
          - mount -t sysfs none /sys 
 | 
			
		||||
          - mount -t devtmpfs none /dev
 | 
			
		||||
          - mkdir -p /dev/pts
 | 
			
		||||
          - mount -t devpts devpts /dev/pts
 | 
			
		||||
 | 
			
		||||
{% if env_vars %}
 | 
			
		||||
          - export {{ env_vars }}
 | 
			
		||||
{% endif %}
 | 
			
		||||
 | 
			
		||||
          - export DEQP_NO_SAVE_RESULTS=1
 | 
			
		||||
          - 'export DEQP_RUNNER_OPTIONS="--compact-display false --shuffle false"'
 | 
			
		||||
          - export DEQP_EXPECTED_FAILS=deqp-{{ gpu_version }}-fails.txt
 | 
			
		||||
          - export DEQP_SKIPS=deqp-{{ gpu_version }}-skips.txt
 | 
			
		||||
          - export DEQP_VER={{ deqp_version }}
 | 
			
		||||
          - export LIBGL_DRIVERS_PATH=`pwd`/install/lib/dri
 | 
			
		||||
          - export CI_NODE_INDEX={{ ci_node_index }}
 | 
			
		||||
          - export CI_NODE_TOTAL={{ ci_node_total }}
 | 
			
		||||
 | 
			
		||||
          # Put stuff where the runner script expects it
 | 
			
		||||
          - mkdir artifacts
 | 
			
		||||
          - mkdir results
 | 
			
		||||
          - mkdir -p install/lib
 | 
			
		||||
          - cp /deqp/$DEQP_EXPECTED_FAILS artifacts/.
 | 
			
		||||
          - cp /deqp/$DEQP_SKIPS artifacts/.
 | 
			
		||||
          - mv /mesa/lib/* install/lib/.
 | 
			
		||||
 | 
			
		||||
          - "if sh /deqp/deqp-runner.sh; then
 | 
			
		||||
                  echo 'deqp: pass';
 | 
			
		||||
             else
 | 
			
		||||
                  echo 'deqp: fail';
 | 
			
		||||
             fi"
 | 
			
		||||
        parse:
 | 
			
		||||
          pattern: '(?P<test_case_id>\S*):\s+(?P<result>(pass|fail))'
 | 
			
		||||
      from: inline
 | 
			
		||||
      name: deqp
 | 
			
		||||
      path: inline/mesa-deqp.yaml
 | 
			
		||||
@@ -1,122 +0,0 @@
 | 
			
		||||
.lava-test:
 | 
			
		||||
  extends:
 | 
			
		||||
    - .ci-run-policy
 | 
			
		||||
  stage: test
 | 
			
		||||
  variables:
 | 
			
		||||
    GIT_STRATEGY: none # testing doesn't build anything from source
 | 
			
		||||
    ENV_VARS: "MESA_GLES_VERSION_OVERRIDE=3.0 DEQP_PARALLEL=6"
 | 
			
		||||
  script:
 | 
			
		||||
    - BUILD_JOB_ID=`cat artifacts/build_job_id.txt`
 | 
			
		||||
    - >
 | 
			
		||||
      artifacts/generate_lava.py \
 | 
			
		||||
        --template artifacts/lava-deqp.yml.jinja2 \
 | 
			
		||||
        --pipeline-info "$CI_PIPELINE_URL on $CI_COMMIT_REF_NAME ${CI_NODE_INDEX}/${CI_NODE_TOTAL}" \
 | 
			
		||||
        --base-artifacts-url $CI_PROJECT_URL/-/jobs/$BUILD_JOB_ID/artifacts/raw/artifacts \
 | 
			
		||||
        --device-type ${DEVICE_TYPE} \
 | 
			
		||||
        --env-vars "${ENV_VARS}" \
 | 
			
		||||
        --arch ${ARCH} \
 | 
			
		||||
        --deqp-version gles2 \
 | 
			
		||||
        --kernel-image-name ${KERNEL_IMAGE_NAME} \
 | 
			
		||||
        --kernel-image-type "${KERNEL_IMAGE_TYPE}" \
 | 
			
		||||
        --gpu-version ${GPU_VERSION} \
 | 
			
		||||
        --boot-method ${BOOT_METHOD} \
 | 
			
		||||
        --lava-tags "${LAVA_TAGS}" \
 | 
			
		||||
        --ci-node-index "${CI_NODE_INDEX}" \
 | 
			
		||||
        --ci-node-total "${CI_NODE_TOTAL}"
 | 
			
		||||
    - lava_job_id=`lavacli jobs submit lava-deqp.yml`
 | 
			
		||||
    - echo $lava_job_id
 | 
			
		||||
    - rm -rf artifacts/*
 | 
			
		||||
    - cp lava-deqp.yml artifacts/.
 | 
			
		||||
    - lavacli jobs logs $lava_job_id | grep -a -v "{'case':" | tee artifacts/lava-deqp-$lava_job_id.log
 | 
			
		||||
    - lavacli jobs show $lava_job_id
 | 
			
		||||
    - result=`lavacli results $lava_job_id 0_deqp deqp | head -1`
 | 
			
		||||
    - echo $result
 | 
			
		||||
    - '[[ "$result" == "pass" ]]'
 | 
			
		||||
  artifacts:
 | 
			
		||||
    when: always
 | 
			
		||||
    paths:
 | 
			
		||||
      - artifacts/
 | 
			
		||||
 | 
			
		||||
.lava-test:armhf:
 | 
			
		||||
  variables:
 | 
			
		||||
    ARCH: armhf
 | 
			
		||||
    KERNEL_IMAGE_NAME: zImage
 | 
			
		||||
    KERNEL_IMAGE_TYPE: "type:\ zimage"
 | 
			
		||||
    BOOT_METHOD: u-boot
 | 
			
		||||
  extends:
 | 
			
		||||
    - .lava-test
 | 
			
		||||
    - .use-arm_build
 | 
			
		||||
  dependencies:
 | 
			
		||||
    - meson-armhf
 | 
			
		||||
  needs:
 | 
			
		||||
    - meson-armhf
 | 
			
		||||
 | 
			
		||||
.lava-test:arm64:
 | 
			
		||||
  variables:
 | 
			
		||||
    ARCH: arm64
 | 
			
		||||
    KERNEL_IMAGE_NAME: Image
 | 
			
		||||
    KERNEL_IMAGE_TYPE: "type:\ image"
 | 
			
		||||
    BOOT_METHOD: u-boot
 | 
			
		||||
  extends:
 | 
			
		||||
    - .lava-test
 | 
			
		||||
    - .use-arm_build
 | 
			
		||||
  dependencies:
 | 
			
		||||
    - meson-arm64
 | 
			
		||||
  needs:
 | 
			
		||||
    - meson-arm64
 | 
			
		||||
 | 
			
		||||
panfrost-t720-test:arm64:
 | 
			
		||||
  extends: .lava-test:arm64
 | 
			
		||||
  variables:
 | 
			
		||||
    DEVICE_TYPE: sun50i-h6-pine-h64
 | 
			
		||||
    GPU_VERSION: panfrost-t720
 | 
			
		||||
  tags:
 | 
			
		||||
    - lava-sun50i-h6-pine-h64
 | 
			
		||||
 | 
			
		||||
panfrost-t760-test:armhf:
 | 
			
		||||
  extends: .lava-test:armhf
 | 
			
		||||
  variables:
 | 
			
		||||
    DEVICE_TYPE: rk3288-veyron-jaq
 | 
			
		||||
    GPU_VERSION: panfrost-t760
 | 
			
		||||
    BOOT_METHOD: depthcharge
 | 
			
		||||
    KERNEL_IMAGE_TYPE: ""
 | 
			
		||||
  tags:
 | 
			
		||||
    - lava-rk3288-veyron-jaq
 | 
			
		||||
 | 
			
		||||
panfrost-t860-test:arm64:
 | 
			
		||||
  extends: .lava-test:arm64
 | 
			
		||||
  variables:
 | 
			
		||||
    DEVICE_TYPE: rk3399-gru-kevin
 | 
			
		||||
    GPU_VERSION: panfrost-t860
 | 
			
		||||
    BOOT_METHOD: depthcharge
 | 
			
		||||
    KERNEL_IMAGE_TYPE: ""
 | 
			
		||||
  tags:
 | 
			
		||||
    - lava-rk3399-gru-kevin
 | 
			
		||||
 | 
			
		||||
.panfrost-t820-test:arm64:
 | 
			
		||||
  extends: .lava-test:arm64
 | 
			
		||||
  variables:
 | 
			
		||||
    DEVICE_TYPE: meson-gxm-khadas-vim2
 | 
			
		||||
    GPU_VERSION: panfrost-t820
 | 
			
		||||
    LAVA_TAGS: panfrost
 | 
			
		||||
  tags:
 | 
			
		||||
    - lava-meson-gxm-khadas-vim2
 | 
			
		||||
 | 
			
		||||
.lima-mali400-test:armhf:
 | 
			
		||||
  parallel: 2
 | 
			
		||||
  extends: .lava-test:armhf
 | 
			
		||||
  variables:
 | 
			
		||||
    DEVICE_TYPE: sun8i-h3-libretech-all-h3-cc
 | 
			
		||||
    GPU_VERSION: lima
 | 
			
		||||
    ENV_VARS: "DEQP_PARALLEL=3"
 | 
			
		||||
  tags:
 | 
			
		||||
    - lava-sun8i-h3-libretech-all-h3-cc
 | 
			
		||||
 | 
			
		||||
lima-mali450-test:arm64:
 | 
			
		||||
  extends: .lava-test:arm64
 | 
			
		||||
  variables:
 | 
			
		||||
    DEVICE_TYPE: meson-gxl-s905x-libretech-cc
 | 
			
		||||
    GPU_VERSION: lima
 | 
			
		||||
    ENV_VARS: "DEQP_PARALLEL=6"
 | 
			
		||||
  tags:
 | 
			
		||||
    - lava-meson-gxl-s905x-libretech-cc
 | 
			
		||||
@@ -1,13 +0,0 @@
 | 
			
		||||
call "C:\Program Files (x86)\Microsoft Visual Studio\%VERSION%\Common7\Tools\VsDevCmd.bat" -arch=%ARCH%
 | 
			
		||||
 | 
			
		||||
del /Q /S _build
 | 
			
		||||
meson _build ^
 | 
			
		||||
        -Dbuild-tests=true ^
 | 
			
		||||
        -Db_vscrt=mtd ^
 | 
			
		||||
        -Dbuildtype=release ^
 | 
			
		||||
        -Dllvm=false ^
 | 
			
		||||
        -Dgallium-drivers=swrast ^
 | 
			
		||||
        -Dosmesa=gallium
 | 
			
		||||
meson configure _build
 | 
			
		||||
ninja -C _build
 | 
			
		||||
ninja -C _build test
 | 
			
		||||
@@ -1,64 +0,0 @@
 | 
			
		||||
#!/bin/bash
 | 
			
		||||
 | 
			
		||||
set -e
 | 
			
		||||
set -o xtrace
 | 
			
		||||
 | 
			
		||||
CROSS_FILE=/cross_file-"$CROSS".txt
 | 
			
		||||
 | 
			
		||||
# We need to control the version of llvm-config we're using, so we'll
 | 
			
		||||
# tweak the cross file or generate a native file to do so.
 | 
			
		||||
if test -n "$LLVM_VERSION"; then
 | 
			
		||||
    LLVM_CONFIG="llvm-config-${LLVM_VERSION}"
 | 
			
		||||
    echo -e "[binaries]\nllvm-config = '`which $LLVM_CONFIG`'" > native.file
 | 
			
		||||
    if [ -n "$CROSS" ]; then
 | 
			
		||||
        sed -i -e '/\[binaries\]/a\' -e "llvm-config = '`which $LLVM_CONFIG`'" $CROSS_FILE
 | 
			
		||||
    fi
 | 
			
		||||
    $LLVM_CONFIG --version
 | 
			
		||||
else
 | 
			
		||||
    rm -f native.file
 | 
			
		||||
    touch native.file
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
# cross-xfail-$CROSS, if it exists, contains a list of tests that are expected
 | 
			
		||||
# to fail for the $CROSS configuration, one per line. you can then mark those
 | 
			
		||||
# tests in their meson.build with:
 | 
			
		||||
#
 | 
			
		||||
# test(...,
 | 
			
		||||
#      should_fail: meson.get_cross_property('xfail', '').contains(t),
 | 
			
		||||
#     )
 | 
			
		||||
#
 | 
			
		||||
# where t is the name of the test, and the '' is the string to search when
 | 
			
		||||
# not cross-compiling (which is empty, because for amd64 everything is
 | 
			
		||||
# expected to pass).
 | 
			
		||||
if [ -n "$CROSS" ]; then
 | 
			
		||||
    CROSS_XFAIL=.gitlab-ci/cross-xfail-"$CROSS"
 | 
			
		||||
    if [ -s "$CROSS_XFAIL" ]; then
 | 
			
		||||
        sed -i \
 | 
			
		||||
            -e '/\[properties\]/a\' \
 | 
			
		||||
            -e "xfail = '$(tr '\n' , < $CROSS_XFAIL)'" \
 | 
			
		||||
            "$CROSS_FILE"
 | 
			
		||||
    fi
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
rm -rf _build
 | 
			
		||||
meson _build --native-file=native.file \
 | 
			
		||||
      --wrap-mode=nofallback \
 | 
			
		||||
      ${CROSS+--cross "$CROSS_FILE"} \
 | 
			
		||||
      -D prefix=`pwd`/install \
 | 
			
		||||
      -D libdir=lib \
 | 
			
		||||
      -D buildtype=${BUILDTYPE:-debug} \
 | 
			
		||||
      -D build-tests=true \
 | 
			
		||||
      -D libunwind=${UNWIND} \
 | 
			
		||||
      ${DRI_LOADERS} \
 | 
			
		||||
      -D dri-drivers=${DRI_DRIVERS:-[]} \
 | 
			
		||||
      ${GALLIUM_ST} \
 | 
			
		||||
      -D gallium-drivers=${GALLIUM_DRIVERS:-[]} \
 | 
			
		||||
      -D vulkan-drivers=${VULKAN_DRIVERS:-[]} \
 | 
			
		||||
      -D I-love-half-baked-turnips=true \
 | 
			
		||||
      ${EXTRA_OPTION}
 | 
			
		||||
cd _build
 | 
			
		||||
meson configure
 | 
			
		||||
ninja -j4
 | 
			
		||||
LC_ALL=C.UTF-8 ninja test
 | 
			
		||||
ninja install
 | 
			
		||||
cd ..
 | 
			
		||||
@@ -1,36 +0,0 @@
 | 
			
		||||
diff --git a/generated_tests/CMakeLists.txt b/generated_tests/CMakeLists.txt
 | 
			
		||||
index 738526546..6f89048cd 100644
 | 
			
		||||
--- a/generated_tests/CMakeLists.txt
 | 
			
		||||
+++ b/generated_tests/CMakeLists.txt
 | 
			
		||||
@@ -206,11 +206,6 @@ piglit_make_generated_tests(
 | 
			
		||||
	templates/gen_variable_index_write_tests/vs.shader_test.mako
 | 
			
		||||
	templates/gen_variable_index_write_tests/fs.shader_test.mako
 | 
			
		||||
	templates/gen_variable_index_write_tests/helpers.mako)
 | 
			
		||||
-piglit_make_generated_tests(
 | 
			
		||||
-	vs_in_fp64.list
 | 
			
		||||
-	gen_vs_in_fp64.py
 | 
			
		||||
-	templates/gen_vs_in_fp64/columns.shader_test.mako
 | 
			
		||||
-	templates/gen_vs_in_fp64/regular.shader_test.mako)
 | 
			
		||||
 piglit_make_generated_tests(
 | 
			
		||||
	shader_framebuffer_fetch_tests.list
 | 
			
		||||
	gen_shader_framebuffer_fetch_tests.py)
 | 
			
		||||
@@ -279,7 +274,6 @@ add_custom_target(gen-gl-tests
 | 
			
		||||
			gen_extensions_defined.list
 | 
			
		||||
			vp-tex.list
 | 
			
		||||
			variable_index_write_tests.list
 | 
			
		||||
-			vs_in_fp64.list
 | 
			
		||||
			gpu_shader4_tests.list
 | 
			
		||||
 )
 | 
			
		||||
 | 
			
		||||
diff --git a/tests/sanity.py b/tests/sanity.py
 | 
			
		||||
index 12f1614c9..9019087e2 100644
 | 
			
		||||
--- a/tests/sanity.py
 | 
			
		||||
+++ b/tests/sanity.py
 | 
			
		||||
@@ -100,7 +100,6 @@ shader_tests = (
 | 
			
		||||
     'spec/arb_tessellation_shader/execution/barrier-patch.shader_test',
 | 
			
		||||
     'spec/arb_tessellation_shader/execution/built-in-functions/tcs-any-bvec4-using-if.shader_test',
 | 
			
		||||
     'spec/arb_tessellation_shader/execution/sanity.shader_test',
 | 
			
		||||
-    'spec/arb_vertex_attrib_64bit/execution/vs_in/vs-input-uint_uvec4-double_dmat3x4_array2-position.shader_test',
 | 
			
		||||
     'spec/glsl-1.50/execution/geometry-basic.shader_test',
 | 
			
		||||
     'spec/oes_viewport_array/viewport-gs-write-simple.shader_test',
 | 
			
		||||
 )
 | 
			
		||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							@@ -1,29 +0,0 @@
 | 
			
		||||
#!/bin/bash
 | 
			
		||||
 | 
			
		||||
set -e
 | 
			
		||||
set -o xtrace
 | 
			
		||||
 | 
			
		||||
VERSION=`cat artifacts/VERSION`
 | 
			
		||||
 | 
			
		||||
cd /piglit
 | 
			
		||||
 | 
			
		||||
PIGLIT_OPTIONS=$(echo $PIGLIT_OPTIONS | head -n 1)
 | 
			
		||||
xvfb-run --server-args="-noreset" sh -c \
 | 
			
		||||
         "export LD_LIBRARY_PATH=$OLDPWD/install/lib;
 | 
			
		||||
         wflinfo --platform glx --api gl --profile core | grep \"Mesa $VERSION\\\$\" &&
 | 
			
		||||
         ./piglit run -j4 $PIGLIT_OPTIONS $PIGLIT_PROFILES $OLDPWD/results"
 | 
			
		||||
 | 
			
		||||
PIGLIT_RESULTS=${PIGLIT_RESULTS:-$PIGLIT_PROFILES}
 | 
			
		||||
mkdir -p .gitlab-ci/piglit
 | 
			
		||||
cp $OLDPWD/artifacts/piglit/$PIGLIT_RESULTS.txt .gitlab-ci/piglit/$PIGLIT_RESULTS.txt.baseline
 | 
			
		||||
./piglit summary console $OLDPWD/results | head -n -1 | grep -v ": pass" >.gitlab-ci/piglit/$PIGLIT_RESULTS.txt
 | 
			
		||||
 | 
			
		||||
if diff -q .gitlab-ci/piglit/$PIGLIT_RESULTS.txt{.baseline,}; then
 | 
			
		||||
    exit 0
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
./piglit summary html --exclude-details=pass $OLDPWD/summary $OLDPWD/results
 | 
			
		||||
 | 
			
		||||
echo Unexpected change in results:
 | 
			
		||||
diff -u .gitlab-ci/piglit/$PIGLIT_RESULTS.txt{.baseline,}
 | 
			
		||||
exit 1
 | 
			
		||||
@@ -1,59 +0,0 @@
 | 
			
		||||
#!/bin/bash
 | 
			
		||||
 | 
			
		||||
set -e
 | 
			
		||||
set -o xtrace
 | 
			
		||||
 | 
			
		||||
CROSS_FILE=/cross_file-"$CROSS".txt
 | 
			
		||||
 | 
			
		||||
# Delete unused bin and includes from artifacts to save space.
 | 
			
		||||
rm -rf install/bin install/include
 | 
			
		||||
 | 
			
		||||
# Strip the drivers in the artifacts to cut 80% of the artifacts size.
 | 
			
		||||
if [ -n "$CROSS" ]; then
 | 
			
		||||
    STRIP=`sed -n -E "s/strip\s*=\s*'(.*)'/\1/p" "$CROSS_FILE"`
 | 
			
		||||
    if [ -z "$STRIP" ]; then
 | 
			
		||||
        echo "Failed to find strip command in cross file"
 | 
			
		||||
        exit 1
 | 
			
		||||
    fi
 | 
			
		||||
else
 | 
			
		||||
    STRIP="strip"
 | 
			
		||||
fi
 | 
			
		||||
find install -name \*.so -exec $STRIP {} \;
 | 
			
		||||
 | 
			
		||||
# Test runs don't pull down the git tree, so put the dEQP helper
 | 
			
		||||
# script and associated bits there.
 | 
			
		||||
mkdir -p artifacts/
 | 
			
		||||
cp VERSION artifacts/
 | 
			
		||||
cp -Rp .gitlab-ci/deqp* artifacts/
 | 
			
		||||
cp -Rp .gitlab-ci/piglit artifacts/
 | 
			
		||||
 | 
			
		||||
# Tar up the install dir so that symlinks and hardlinks aren't each
 | 
			
		||||
# packed separately in the zip file.
 | 
			
		||||
tar -cf artifacts/install.tar install
 | 
			
		||||
 | 
			
		||||
# If the container has LAVA stuff, prepare the artifacts for LAVA jobs
 | 
			
		||||
if [ -d /lava-files ]; then
 | 
			
		||||
        # Copy kernel and device trees for LAVA
 | 
			
		||||
        cp /lava-files/*Image artifacts/.
 | 
			
		||||
        cp /lava-files/*.dtb artifacts/.
 | 
			
		||||
 | 
			
		||||
        # Pack ramdisk for LAVA
 | 
			
		||||
        mkdir -p /lava-files/rootfs-${CROSS:-arm64}/mesa
 | 
			
		||||
        cp -a install/* /lava-files/rootfs-${CROSS:-arm64}/mesa/.
 | 
			
		||||
 | 
			
		||||
        cp .gitlab-ci/deqp-runner.sh /lava-files/rootfs-${CROSS:-arm64}/deqp/.
 | 
			
		||||
        cp .gitlab-ci/deqp-*-fails.txt /lava-files/rootfs-${CROSS:-arm64}/deqp/.
 | 
			
		||||
        cp .gitlab-ci/deqp-*-skips.txt /lava-files/rootfs-${CROSS:-arm64}/deqp/.
 | 
			
		||||
        find /lava-files/rootfs-${CROSS:-arm64}/ -type f -printf "%s\t%i\t%p\n" | sort -n | tail -100
 | 
			
		||||
 | 
			
		||||
        pushd /lava-files/rootfs-${CROSS:-arm64}/
 | 
			
		||||
        find -H  |  cpio -H newc -o | gzip -c - > $CI_PROJECT_DIR/artifacts/lava-rootfs-${CROSS:-arm64}.cpio.gz
 | 
			
		||||
        popd
 | 
			
		||||
 | 
			
		||||
        # Store job ID so the test stage can build URLs to the artifacts
 | 
			
		||||
        echo $CI_JOB_ID > artifacts/build_job_id.txt
 | 
			
		||||
 | 
			
		||||
        # Pass needed files to the test stage
 | 
			
		||||
        cp $CI_PROJECT_DIR/.gitlab-ci/generate_lava.py artifacts/.
 | 
			
		||||
        cp $CI_PROJECT_DIR/.gitlab-ci/lava-deqp.yml.jinja2 artifacts/.
 | 
			
		||||
fi
 | 
			
		||||
@@ -1,17 +0,0 @@
 | 
			
		||||
set -e
 | 
			
		||||
set -v
 | 
			
		||||
 | 
			
		||||
ARTIFACTSDIR=`pwd`/shader-db
 | 
			
		||||
mkdir -p $ARTIFACTSDIR
 | 
			
		||||
export DRM_SHIM_DEBUG=true
 | 
			
		||||
 | 
			
		||||
LIBDIR=`pwd`/install/lib
 | 
			
		||||
export LD_LIBRARY_PATH=$LIBDIR
 | 
			
		||||
 | 
			
		||||
cd /usr/local/shader-db
 | 
			
		||||
 | 
			
		||||
for driver in freedreno v3d; do
 | 
			
		||||
    env LD_PRELOAD=$LIBDIR/lib${driver}_noop_drm_shim.so \
 | 
			
		||||
        ./run -j 4 ./shaders \
 | 
			
		||||
            > $ARTIFACTSDIR/${driver}-shader-db.txt
 | 
			
		||||
done
 | 
			
		||||
@@ -1,12 +0,0 @@
 | 
			
		||||
#!/bin/bash
 | 
			
		||||
 | 
			
		||||
set -e
 | 
			
		||||
set -o xtrace
 | 
			
		||||
 | 
			
		||||
if test -n "$LLVM_VERSION"; then
 | 
			
		||||
    export LLVM_CONFIG="llvm-config-${LLVM_VERSION}"
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
rm -rf build
 | 
			
		||||
scons $SCONS_TARGET force_scons=on
 | 
			
		||||
eval $SCONS_CHECK_COMMAND 
 | 
			
		||||
@@ -1,20 +0,0 @@
 | 
			
		||||
[binaries]
 | 
			
		||||
c = ['ccache', 'x86_64-w64-mingw32-gcc']
 | 
			
		||||
cpp = ['ccache', 'x86_64-w64-mingw32-g++']
 | 
			
		||||
ar = 'x86_64-w64-mingw32-ar'
 | 
			
		||||
strip = 'x86_64-w64-mingw32-strip'
 | 
			
		||||
pkgconfig = '/usr/local/bin/x86_64-w64-mingw32-pkg-config'
 | 
			
		||||
windres = 'x86_64-w64-mingw32-windres'
 | 
			
		||||
exe_wrapper = ['wine64']
 | 
			
		||||
 | 
			
		||||
[properties]
 | 
			
		||||
needs_exe_wrapper = True
 | 
			
		||||
sys_root = '/usr/x86_64-w64-mingw32/'
 | 
			
		||||
 | 
			
		||||
[host_machine]
 | 
			
		||||
system = 'windows'
 | 
			
		||||
cpu_family = 'x86_64'
 | 
			
		||||
cpu = 'x86_64'
 | 
			
		||||
endian = 'little'
 | 
			
		||||
 | 
			
		||||
; vim: ft=dosini
 | 
			
		||||
							
								
								
									
										23
									
								
								.mailmap
									
									
									
									
									
								
							
							
						
						
									
										23
									
								
								.mailmap
									
									
									
									
									
								
							@@ -26,8 +26,6 @@ Alexander Monakov <amonakov@gmail.com> <amonakov@ispras.ru>
 | 
			
		||||
 | 
			
		||||
Alexander von Gluck IV <kallisti5@unixzen.com> Alexander von Gluck <kallisti5@unixzen.com>
 | 
			
		||||
 | 
			
		||||
Alexandros Frantzis <alexandros.frantzis@collabora.com> <Alexandros.Frantzis@canonical.com>
 | 
			
		||||
 | 
			
		||||
Alex Corscadden <alexc@vmware.com> <alexc@alexc-dev1.prom.eng.vmware.com>
 | 
			
		||||
Alex Corscadden <alexc@vmware.com> <alexc@alexc-dev1.vmware.com>
 | 
			
		||||
 | 
			
		||||
@@ -52,8 +50,6 @@ Andrew Randrianasulu <randrianasulu@gmail.com> <randrik@mail.ru>
 | 
			
		||||
 | 
			
		||||
Arthur Huillet <arthur.huillet@free.fr> Arthur HUILLET <arthur.huillet@free.fr>
 | 
			
		||||
 | 
			
		||||
Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl> <basni@chromium.org>
 | 
			
		||||
 | 
			
		||||
Benjamin Franzke <benjaminfranzke@googlemail.com> ben <benjaminfranzke@googlemail.com>
 | 
			
		||||
 | 
			
		||||
Ben Skeggs <bskeggs@redhat.com> <darktama@beleth.(none)>
 | 
			
		||||
@@ -133,8 +129,8 @@ David Miller <davem@davemloft.net> David S. Miller <davem@davemloft.net>
 | 
			
		||||
David Miller <davem@davemloft.net> Dave Miller <davem@davemloft.net>
 | 
			
		||||
David Miller <davem@davemloft.net> davem69 <davem69>
 | 
			
		||||
 | 
			
		||||
David Heidelberg <david@ixit.cz> David Heidelberger <david.heidelberger@ixit.cz>
 | 
			
		||||
David Heidelberg <david@ixit.cz> <d.okias@gmail.com>
 | 
			
		||||
David Heidelberger <david.heidelberger@ixit.cz> David Heidelberg <david@ixit.cz>
 | 
			
		||||
David Heidelberger <david.heidelberger@ixit.cz> <d.okias@gmail.com>
 | 
			
		||||
 | 
			
		||||
David Reveman <reveman@chromium.org> <c99drn@cs.umu.se>
 | 
			
		||||
 | 
			
		||||
@@ -146,8 +142,6 @@ Dylan Baker <dylanx.c.baker@intel.com> <baker.dylan.c@gmail.com>
 | 
			
		||||
 | 
			
		||||
Edward O'Callaghan <funfunctor@folklore1984.net> <eocallaghan@alterapraxis.com>
 | 
			
		||||
 | 
			
		||||
Elie Tournier <tournier.elie@gmail.com>
 | 
			
		||||
 | 
			
		||||
Emeric Grange <emeric.grange@gmail.com> Emeric <emeric.grange@gmail.com>
 | 
			
		||||
 | 
			
		||||
Emil Velikov <emil.l.velikov@gmail.com> <emil.velikov@collabora.com>
 | 
			
		||||
@@ -160,7 +154,6 @@ Emil Velikov <emil.l.velikov@gmail.com> <emmil.velikov@collabora.com>
 | 
			
		||||
Eric Anholt <eric@anholt.net> Eric Anholt <anholt@FreeBSD.org>
 | 
			
		||||
 | 
			
		||||
Eric Engestrom <eric@engestrom.ch> <eric.engestrom@imgtec.com>
 | 
			
		||||
Eric Engestrom <eric@engestrom.ch> <eric.engestrom@intel.com>
 | 
			
		||||
 | 
			
		||||
Eugeni Dodonov <eugeni.dodonov@intel.com> <eugeni@mandriva.com>
 | 
			
		||||
 | 
			
		||||
@@ -169,14 +162,10 @@ Fabian Bieler <der.fabe@gmx.net> <<der.fabe@gmx.net>>
 | 
			
		||||
 | 
			
		||||
Feng, Haitao <haitao.feng@intel.com> Haitao Feng <haitao.feng@intel.com>
 | 
			
		||||
 | 
			
		||||
Frank Binns <frank.binns@imgtec.com> <francisbinns@gmail.com>
 | 
			
		||||
 | 
			
		||||
Frank Henigman <fjhenigman@google.com> <fjhenigman@chromium.org>
 | 
			
		||||
 | 
			
		||||
George Sapountzis <gsapountzis@gmail.com> George Sapountzis <gsap7@yahoo.gr>
 | 
			
		||||
 | 
			
		||||
Gert Wollny <gert.wollny@collabora.com> <gw.fossdev@gmail.com>
 | 
			
		||||
 | 
			
		||||
Gwenole Beauchesne <gwenole.beauchesne@intel.com> <gb.devel@gmail.com>
 | 
			
		||||
 | 
			
		||||
Hamish Marson <hmarson@users.sourceforge.net> hmarson <hmarson>
 | 
			
		||||
@@ -195,8 +184,6 @@ Jakob Bornecrantz <wallbraker@gmail.com> <jakob@aurora.(none)>
 | 
			
		||||
Jakob Bornecrantz <wallbraker@gmail.com> <jakob@aurora.walkyrie.se>
 | 
			
		||||
Jakob Bornecrantz <wallbraker@gmail.com> <jakob@tungstengraphics.com>
 | 
			
		||||
Jakob Bornecrantz <wallbraker@gmail.com> <wallbraker 'at' gmail 'dot' com>
 | 
			
		||||
Jakob Bornecrantz <wallbraker@gmail.com> <jakob.bornecrantz@collabora.com>
 | 
			
		||||
Jakob Bornecrantz <wallbraker@gmail.com> <jakob@collabora.com>
 | 
			
		||||
 | 
			
		||||
Jakub Bogusz <qboosh@pld-linux.org> <gboosh@pld-linux.org>
 | 
			
		||||
 | 
			
		||||
@@ -278,9 +265,6 @@ Kristian Høgsberg <krh@bitplanet.net> <krh@hinata.boston.redhat.com>
 | 
			
		||||
Kristian Høgsberg <krh@bitplanet.net> <krh@sasori.boston.redhat.com>
 | 
			
		||||
Kristian Høgsberg <krh@bitplanet.net> <krh@temari.boston.redhat.com>
 | 
			
		||||
Kristian Høgsberg <krh@bitplanet.net> <kristian.h.kristensen@intel.com>
 | 
			
		||||
Kristian Høgsberg <krh@bitplanet.net> <hoegsberg@chromium.org>
 | 
			
		||||
Kristian Høgsberg <krh@bitplanet.net> <hoegsberg@google.com>
 | 
			
		||||
Kristian Høgsberg <krh@bitplanet.net> <hoegsberg@gmail.com>
 | 
			
		||||
 | 
			
		||||
Krzesimir Nowak <qdlacz@gmail.com> <krzesimir@kinvolk.io>
 | 
			
		||||
 | 
			
		||||
@@ -341,7 +325,6 @@ Michel Dänzer <michel@daenzer.net> <daenzer@vmware.com>
 | 
			
		||||
Michel Dänzer <michel@daenzer.net> <michel@tungstengraphics.com>
 | 
			
		||||
Michel Dänzer <michel@daenzer.net> Michel Daenzer <michel.daenzer@amd.com>
 | 
			
		||||
Michel Dänzer <michel@daenzer.net> Michel Daenzer <daenzer@localhost.(none)>
 | 
			
		||||
Michel Dänzer <michel@daenzer.net> <mdaenzer@redhat.com>
 | 
			
		||||
 | 
			
		||||
Mike Kaplinskiy <mike.kaplinskiy@gmail.com> Mike Kaplinksiy <mike.kaplinskiy@gmail.com>
 | 
			
		||||
Mike Kaplinskiy <mike.kaplinskiy@gmail.com> <mike.kaplinskiy@gmai.com>
 | 
			
		||||
@@ -467,8 +450,6 @@ Tom Fogal <tfogal@alumni.unh.edu> <tfogal@sci.utah.edu>
 | 
			
		||||
Tom Stellard <thomas.stellard@amd.com> <tstellar@gmail.com>
 | 
			
		||||
Tom Stellard <thomas.stellard@amd.com> Thomas Stellard <tom.stellard@amd.com>
 | 
			
		||||
 | 
			
		||||
Tomeu Vizoso <tomeu.vizoso@collabora.com> <tomeu@tomeuvizoso.net>
 | 
			
		||||
 | 
			
		||||
Tormod Volden <debian.tormod@gmail.com> <lists.tormod@gmail.com>
 | 
			
		||||
 | 
			
		||||
Török Edwin <edwin+mesa@etorok.net> Török Edvin <edwintorok@gmail.com>
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										1361
									
								
								.pick_status.json
									
									
									
									
									
								
							
							
						
						
									
										1361
									
								
								.pick_status.json
									
									
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										862
									
								
								.travis.yml
									
									
									
									
									
								
							
							
						
						
									
										862
									
								
								.travis.yml
									
									
									
									
									
								
							@@ -1,64 +1,852 @@
 | 
			
		||||
language: c
 | 
			
		||||
 | 
			
		||||
os: osx
 | 
			
		||||
dist: xenial
 | 
			
		||||
 | 
			
		||||
cache:
 | 
			
		||||
  apt: true
 | 
			
		||||
  ccache: true
 | 
			
		||||
 | 
			
		||||
env:
 | 
			
		||||
  global:
 | 
			
		||||
    - PKG_CONFIG_PATH=""
 | 
			
		||||
    - XORG_RELEASES=https://xorg.freedesktop.org/releases/individual
 | 
			
		||||
    - XCB_RELEASES=https://xcb.freedesktop.org/dist
 | 
			
		||||
    - WAYLAND_RELEASES=https://wayland.freedesktop.org/releases
 | 
			
		||||
    - XORGMACROS_VERSION=util-macros-1.19.0
 | 
			
		||||
    - GLPROTO_VERSION=glproto-1.4.17
 | 
			
		||||
    - DRI2PROTO_VERSION=dri2proto-2.8
 | 
			
		||||
    - LIBPCIACCESS_VERSION=libpciaccess-0.13.4
 | 
			
		||||
    - LIBDRM_VERSION=libdrm-2.4.97
 | 
			
		||||
    - XCBPROTO_VERSION=xcb-proto-1.13
 | 
			
		||||
    - RANDRPROTO_VERSION=randrproto-1.3.0
 | 
			
		||||
    - LIBXRANDR_VERSION=libXrandr-1.3.0
 | 
			
		||||
    - LIBXCB_VERSION=libxcb-1.13
 | 
			
		||||
    - LIBXSHMFENCE_VERSION=libxshmfence-1.2
 | 
			
		||||
    - LIBVDPAU_VERSION=libvdpau-1.1
 | 
			
		||||
    - LIBVA_VERSION=libva-1.7.0
 | 
			
		||||
    - LIBWAYLAND_VERSION=wayland-1.15.0
 | 
			
		||||
    - WAYLAND_PROTOCOLS_VERSION=wayland-protocols-1.8
 | 
			
		||||
    - PKG_CONFIG_PATH=$HOME/prefix/lib/pkgconfig:$HOME/prefix/share/pkgconfig
 | 
			
		||||
    - LD_LIBRARY_PATH="$HOME/prefix/lib:$LD_LIBRARY_PATH"
 | 
			
		||||
    - PATH="$HOME/prefix/bin:$PATH"
 | 
			
		||||
 | 
			
		||||
matrix:
 | 
			
		||||
  include:
 | 
			
		||||
    - env:
 | 
			
		||||
      - BUILD=meson
 | 
			
		||||
        - LABEL="meson Vulkan"
 | 
			
		||||
        - BUILD=meson
 | 
			
		||||
        - UNWIND="false"
 | 
			
		||||
        - DRI_LOADERS="-Dglx=disabled -Dgbm=false -Degl=false -Dplatforms=x11,wayland,drm -Dosmesa=none"
 | 
			
		||||
        - GALLIUM_ST="-Ddri3=true -Dgallium-vdpau=false -Dgallium-xvmc=false -Dgallium-omx=disabled -Dgallium-va=false -Dgallium-xa=false -Dgallium-nine=false -Dgallium-opencl=disabled"
 | 
			
		||||
        - VULKAN_DRIVERS="intel,amd"
 | 
			
		||||
        - LLVM_VERSION=7
 | 
			
		||||
        - LLVM_CONFIG="llvm-config-${LLVM_VERSION}"
 | 
			
		||||
      addons:
 | 
			
		||||
        apt:
 | 
			
		||||
          sources:
 | 
			
		||||
            - sourceline: 'deb http://apt.llvm.org/xenial/ llvm-toolchain-xenial-7 main'
 | 
			
		||||
              key_url: https://apt.llvm.org/llvm-snapshot.gpg.key
 | 
			
		||||
          packages:
 | 
			
		||||
            - llvm-7-dev
 | 
			
		||||
            # Common
 | 
			
		||||
            - xz-utils
 | 
			
		||||
            - libexpat1-dev
 | 
			
		||||
            - libx11-xcb-dev
 | 
			
		||||
            - libelf-dev
 | 
			
		||||
            - python3.5
 | 
			
		||||
            - python3-pip
 | 
			
		||||
            - python3-setuptools
 | 
			
		||||
    - env:
 | 
			
		||||
      - BUILD=scons
 | 
			
		||||
        - LABEL="meson loaders/classic DRI"
 | 
			
		||||
        - BUILD=meson
 | 
			
		||||
        - UNWIND="false"
 | 
			
		||||
        - DRI_LOADERS="-Dglx=dri -Dgbm=true -Degl=true -Dplatforms=x11,wayland,drm,surfaceless -Dosmesa=classic"
 | 
			
		||||
        - DRI_DRIVERS="i915,i965,r100,r200,swrast,nouveau"
 | 
			
		||||
        - GALLIUM_ST="-Ddri3=true -Dgallium-vdpau=false -Dgallium-xvmc=false -Dgallium-omx=disabled -Dgallium-va=false -Dgallium-xa=false -Dgallium-nine=false -Dgallium-opencl=disabled"
 | 
			
		||||
      addons:
 | 
			
		||||
        apt:
 | 
			
		||||
          packages:
 | 
			
		||||
            - xz-utils
 | 
			
		||||
            - x11proto-xf86vidmode-dev
 | 
			
		||||
            - libxxf86vm-dev
 | 
			
		||||
            - libexpat1-dev
 | 
			
		||||
            - libx11-xcb-dev
 | 
			
		||||
            - libxdamage-dev
 | 
			
		||||
            - libxfixes-dev
 | 
			
		||||
            - python3.5
 | 
			
		||||
            - python3-pip
 | 
			
		||||
            - python3-setuptools
 | 
			
		||||
    - env:
 | 
			
		||||
        - LABEL="make loaders/classic DRI"
 | 
			
		||||
        - BUILD=make
 | 
			
		||||
        - MAKEFLAGS="-j4"
 | 
			
		||||
        - MAKE_CHECK_COMMAND="make check"
 | 
			
		||||
        - DRI_LOADERS="--enable-glx --enable-gbm --enable-egl --with-platforms=x11,drm,surfaceless,wayland --enable-osmesa"
 | 
			
		||||
        - DRI_DRIVERS="i915,i965,radeon,r200,swrast,nouveau"
 | 
			
		||||
        - GALLIUM_ST="--enable-dri --disable-opencl --disable-xa --disable-nine --disable-xvmc --disable-vdpau --disable-va --disable-omx-bellagio --disable-gallium-osmesa"
 | 
			
		||||
        - GALLIUM_DRIVERS=""
 | 
			
		||||
        - VULKAN_DRIVERS=""
 | 
			
		||||
        - LIBUNWIND_FLAGS="--disable-libunwind"
 | 
			
		||||
      addons:
 | 
			
		||||
        apt:
 | 
			
		||||
          packages:
 | 
			
		||||
            - xz-utils
 | 
			
		||||
            - x11proto-xf86vidmode-dev
 | 
			
		||||
            - libxxf86vm-dev
 | 
			
		||||
            - libexpat1-dev
 | 
			
		||||
            - libx11-xcb-dev
 | 
			
		||||
            - libxdamage-dev
 | 
			
		||||
            - libxfixes-dev
 | 
			
		||||
            - python3-pip
 | 
			
		||||
            - python3-setuptools
 | 
			
		||||
    - env:
 | 
			
		||||
        # NOTE: Building SWR is 2x (yes two) times slower than all the other
 | 
			
		||||
        # gallium drivers combined.
 | 
			
		||||
        # Start this early so that it doesn't hunder the run time.
 | 
			
		||||
        - LABEL="meson Gallium Drivers SWR"
 | 
			
		||||
        - BUILD=meson
 | 
			
		||||
        - UNWIND="true"
 | 
			
		||||
        - DRI_LOADERS="-Dglx=disabled -Degl=false -Dgbm=false"
 | 
			
		||||
        - GALLIUM_ST="-Ddri3=false -Dgallium-vdpau=false -Dgallium-xvmc=false -Dgallium-omx=disabled -Dgallium-va=false -Dgallium-xa=false -Dgallium-nine=false -Dgallium-opencl=disabled"
 | 
			
		||||
        - GALLIUM_DRIVERS="swr"
 | 
			
		||||
        - LLVM_VERSION=6.0
 | 
			
		||||
        - LLVM_CONFIG="llvm-config-${LLVM_VERSION}"
 | 
			
		||||
      addons:
 | 
			
		||||
        apt:
 | 
			
		||||
          packages:
 | 
			
		||||
            - llvm-6.0-dev
 | 
			
		||||
            # Common
 | 
			
		||||
            - xz-utils
 | 
			
		||||
            - libexpat1-dev
 | 
			
		||||
            - libx11-xcb-dev
 | 
			
		||||
            - libelf-dev
 | 
			
		||||
            - libunwind8-dev
 | 
			
		||||
            - python3.5
 | 
			
		||||
            - python3-pip
 | 
			
		||||
            - python3-setuptools
 | 
			
		||||
    - env:
 | 
			
		||||
        - LABEL="meson Gallium Drivers RadeonSI"
 | 
			
		||||
        - BUILD=meson
 | 
			
		||||
        - UNWIND="true"
 | 
			
		||||
        - DRI_LOADERS="-Dglx=disabled -Degl=false -Dgbm=false"
 | 
			
		||||
        - GALLIUM_ST="-Ddri3=false -Dgallium-vdpau=false -Dgallium-xvmc=false -Dgallium-omx=disabled -Dgallium-va=false -Dgallium-xa=false -Dgallium-nine=false -Dgallium-opencl=disabled"
 | 
			
		||||
        - GALLIUM_DRIVERS="radeonsi"
 | 
			
		||||
        - LLVM_VERSION=7
 | 
			
		||||
        - LLVM_CONFIG="llvm-config-${LLVM_VERSION}"
 | 
			
		||||
      addons:
 | 
			
		||||
        apt:
 | 
			
		||||
          sources:
 | 
			
		||||
            - sourceline: 'deb http://apt.llvm.org/xenial/ llvm-toolchain-xenial-7 main'
 | 
			
		||||
              key_url: https://apt.llvm.org/llvm-snapshot.gpg.key
 | 
			
		||||
          packages:
 | 
			
		||||
            # From sources above
 | 
			
		||||
            - llvm-7-dev
 | 
			
		||||
            # Common
 | 
			
		||||
            - xz-utils
 | 
			
		||||
            - libexpat1-dev
 | 
			
		||||
            - libx11-xcb-dev
 | 
			
		||||
            - libelf-dev
 | 
			
		||||
            - libunwind8-dev
 | 
			
		||||
            - python3.5
 | 
			
		||||
            - python3-pip
 | 
			
		||||
            - python3-setuptools
 | 
			
		||||
    - env:
 | 
			
		||||
        - LABEL="meson Gallium Drivers Other"
 | 
			
		||||
        - BUILD=meson
 | 
			
		||||
        - UNWIND="true"
 | 
			
		||||
        - DRI_LOADERS="-Dglx=disabled -Degl=false -Dgbm=false"
 | 
			
		||||
        - GALLIUM_ST="-Ddri3=false -Dgallium-vdpau=false -Dgallium-xvmc=false -Dgallium-omx=disabled -Dgallium-va=false -Dgallium-xa=false -Dgallium-nine=false -Dgallium-opencl=disabled"
 | 
			
		||||
        - GALLIUM_DRIVERS="i915,nouveau,kmsro,r300,r600,freedreno,svga,swrast,v3d,vc4,virgl,etnaviv"
 | 
			
		||||
        - LLVM_VERSION=5.0
 | 
			
		||||
        - LLVM_CONFIG="llvm-config-${LLVM_VERSION}"
 | 
			
		||||
      addons:
 | 
			
		||||
        apt:
 | 
			
		||||
          packages:
 | 
			
		||||
            # LLVM packaging is broken and misses these dependencies
 | 
			
		||||
            - libedit-dev
 | 
			
		||||
            - llvm-5.0-dev
 | 
			
		||||
            # Common
 | 
			
		||||
            - xz-utils
 | 
			
		||||
            - libexpat1-dev
 | 
			
		||||
            - libx11-xcb-dev
 | 
			
		||||
            - libelf-dev
 | 
			
		||||
            - libunwind8-dev
 | 
			
		||||
            - python3.5
 | 
			
		||||
            - python3-pip
 | 
			
		||||
            - python3-setuptools
 | 
			
		||||
    - env:
 | 
			
		||||
        - LABEL="meson Gallium ST Clover LLVM-5.0"
 | 
			
		||||
        - BUILD=meson
 | 
			
		||||
        - UNWIND="true"
 | 
			
		||||
        - DRI_LOADERS="-Dglx=disabled -Degl=false -Dgbm=false"
 | 
			
		||||
        - GALLIUM_ST="-Ddri3=false -Dgallium-vdpau=false -Dgallium-xvmc=false -Dgallium-omx=disabled -Dgallium-va=false -Dgallium-xa=false -Dgallium-nine=false -Dgallium-opencl=icd"
 | 
			
		||||
        - GALLIUM_DRIVERS="r600"
 | 
			
		||||
        - LLVM_VERSION=5.0
 | 
			
		||||
        - LLVM_CONFIG="llvm-config-${LLVM_VERSION}"
 | 
			
		||||
      addons:
 | 
			
		||||
        apt:
 | 
			
		||||
          packages:
 | 
			
		||||
            - libclc-dev
 | 
			
		||||
            # LLVM packaging is broken and misses these dependencies
 | 
			
		||||
            - libedit-dev
 | 
			
		||||
            - llvm-5.0-dev
 | 
			
		||||
            - clang-5.0
 | 
			
		||||
            - libclang-5.0-dev
 | 
			
		||||
            # Common
 | 
			
		||||
            - xz-utils
 | 
			
		||||
            - libexpat1-dev
 | 
			
		||||
            - libx11-xcb-dev
 | 
			
		||||
            - libelf-dev
 | 
			
		||||
            - libunwind8-dev
 | 
			
		||||
            - python3-pip
 | 
			
		||||
            - python3-setuptools
 | 
			
		||||
    - env:
 | 
			
		||||
        - LABEL="meson Gallium ST Clover LLVM-6.0"
 | 
			
		||||
        - BUILD=meson
 | 
			
		||||
        - UNWIND="true"
 | 
			
		||||
        - DRI_LOADERS="-Dglx=disabled -Degl=false -Dgbm=false"
 | 
			
		||||
        - GALLIUM_ST="-Ddri3=false -Dgallium-vdpau=false -Dgallium-xvmc=false -Dgallium-omx=disabled -Dgallium-va=false -Dgallium-xa=false -Dgallium-nine=false -Dgallium-opencl=icd"
 | 
			
		||||
        - GALLIUM_DRIVERS="r600"
 | 
			
		||||
        - LLVM_VERSION=6.0
 | 
			
		||||
        - LLVM_CONFIG="llvm-config-${LLVM_VERSION}"
 | 
			
		||||
      addons:
 | 
			
		||||
        apt:
 | 
			
		||||
          packages:
 | 
			
		||||
            - libclc-dev
 | 
			
		||||
            - llvm-6.0-dev
 | 
			
		||||
            - clang-6.0
 | 
			
		||||
            - libclang-6.0-dev
 | 
			
		||||
            # Common
 | 
			
		||||
            - xz-utils
 | 
			
		||||
            - libexpat1-dev
 | 
			
		||||
            - libx11-xcb-dev
 | 
			
		||||
            - libelf-dev
 | 
			
		||||
            - libunwind8-dev
 | 
			
		||||
            - python3.5
 | 
			
		||||
            - python3-pip
 | 
			
		||||
            - python3-setuptools
 | 
			
		||||
    - env:
 | 
			
		||||
        - LABEL="meson Gallium ST Clover LLVM-7"
 | 
			
		||||
        - BUILD=meson
 | 
			
		||||
        - UNWIND="true"
 | 
			
		||||
        - DRI_LOADERS="-Dglx=disabled -Degl=false -Dgbm=false"
 | 
			
		||||
        - GALLIUM_ST="-Ddri3=false -Dgallium-vdpau=false -Dgallium-xvmc=false -Dgallium-omx=disabled -Dgallium-va=false -Dgallium-xa=false -Dgallium-nine=false -Dgallium-opencl=icd"
 | 
			
		||||
        - GALLIUM_DRIVERS="r600,radeonsi"
 | 
			
		||||
        - LLVM_VERSION=7
 | 
			
		||||
        - LLVM_CONFIG="llvm-config-${LLVM_VERSION}"
 | 
			
		||||
      addons:
 | 
			
		||||
        apt:
 | 
			
		||||
          sources:
 | 
			
		||||
            - sourceline: 'deb http://apt.llvm.org/xenial/ llvm-toolchain-xenial-7 main'
 | 
			
		||||
              key_url: https://apt.llvm.org/llvm-snapshot.gpg.key
 | 
			
		||||
          packages:
 | 
			
		||||
            - libclc-dev
 | 
			
		||||
            # From sources above
 | 
			
		||||
            - llvm-7-dev
 | 
			
		||||
            - clang-7
 | 
			
		||||
            - libclang-7-dev
 | 
			
		||||
            # Common
 | 
			
		||||
            - xz-utils
 | 
			
		||||
            - libexpat1-dev
 | 
			
		||||
            - libx11-xcb-dev
 | 
			
		||||
            - libelf-dev
 | 
			
		||||
            - libunwind8-dev
 | 
			
		||||
            - python3.5
 | 
			
		||||
            - python3-pip
 | 
			
		||||
            - python3-setuptools
 | 
			
		||||
    - env:
 | 
			
		||||
        - LABEL="meson Gallium ST Other"
 | 
			
		||||
        - BUILD=meson
 | 
			
		||||
        - UNWIND="true"
 | 
			
		||||
        - DRI_LOADERS="-Dglx=disabled -Degl=false -Dgbm=false"
 | 
			
		||||
        - GALLIUM_ST="-Ddri3=true -Dgallium-vdpau=true -Dgallium-xvmc=true -Dgallium-omx=bellagio -Dgallium-va=true -Dgallium-xa=true -Dgallium-nine=true -Dgallium-opencl=disabled -Dosmesa=gallium"
 | 
			
		||||
        # We need swrast for osmesa and nine.
 | 
			
		||||
        # Nouveau supports, or builds at least against all ST.
 | 
			
		||||
        - GALLIUM_DRIVERS="nouveau,swrast"
 | 
			
		||||
        - LLVM_VERSION=5.0
 | 
			
		||||
        - LLVM_CONFIG="llvm-config-${LLVM_VERSION}"
 | 
			
		||||
      addons:
 | 
			
		||||
        apt:
 | 
			
		||||
          packages:
 | 
			
		||||
            - llvm-5.0-dev
 | 
			
		||||
            # LLVM packaging is broken and misses these dependencies
 | 
			
		||||
            - libedit-dev
 | 
			
		||||
            # Nine requires gcc 4.6... which is the one we have right ?
 | 
			
		||||
            - libxvmc-dev
 | 
			
		||||
            # Build locally, for now.
 | 
			
		||||
            #- libvdpau-dev
 | 
			
		||||
            #- libva-dev
 | 
			
		||||
            - libomxil-bellagio-dev
 | 
			
		||||
            # Common
 | 
			
		||||
            - xz-utils
 | 
			
		||||
            - libexpat1-dev
 | 
			
		||||
            - libx11-xcb-dev
 | 
			
		||||
            - libelf-dev
 | 
			
		||||
            - libunwind8-dev
 | 
			
		||||
            - python3.5
 | 
			
		||||
            - python3-pip
 | 
			
		||||
            - python3-setuptools
 | 
			
		||||
    - env:
 | 
			
		||||
        # NOTE: Building SWR is 2x (yes two) times slower than all the other
 | 
			
		||||
        # gallium drivers combined.
 | 
			
		||||
        # Start this early so that it doesn't hunder the run time.
 | 
			
		||||
        - LABEL="make Gallium Drivers SWR"
 | 
			
		||||
        - BUILD=make
 | 
			
		||||
        - MAKEFLAGS="-j4"
 | 
			
		||||
        - MAKE_CHECK_COMMAND="true"
 | 
			
		||||
        - LLVM_VERSION=6.0
 | 
			
		||||
        - LLVM_CONFIG="llvm-config-${LLVM_VERSION}"
 | 
			
		||||
        - DRI_LOADERS="--disable-glx --disable-gbm --disable-egl"
 | 
			
		||||
        - DRI_DRIVERS=""
 | 
			
		||||
        - GALLIUM_ST="--enable-dri --disable-opencl --disable-xa --disable-nine --disable-xvmc --disable-vdpau --disable-va --disable-omx-bellagio --disable-gallium-osmesa"
 | 
			
		||||
        - GALLIUM_DRIVERS="swr"
 | 
			
		||||
        - VULKAN_DRIVERS=""
 | 
			
		||||
        - LIBUNWIND_FLAGS="--enable-libunwind"
 | 
			
		||||
      addons:
 | 
			
		||||
        apt:
 | 
			
		||||
          packages:
 | 
			
		||||
            - llvm-6.0-dev
 | 
			
		||||
            # Common
 | 
			
		||||
            - xz-utils
 | 
			
		||||
            - libexpat1-dev
 | 
			
		||||
            - libx11-xcb-dev
 | 
			
		||||
            - libelf-dev
 | 
			
		||||
            - libunwind8-dev
 | 
			
		||||
            - python3-pip
 | 
			
		||||
            - python3-setuptools
 | 
			
		||||
    - env:
 | 
			
		||||
        - LABEL="make Gallium Drivers RadeonSI"
 | 
			
		||||
        - BUILD=make
 | 
			
		||||
        - MAKEFLAGS="-j4"
 | 
			
		||||
        - MAKE_CHECK_COMMAND="true"
 | 
			
		||||
        - LLVM_VERSION=7
 | 
			
		||||
        - LLVM_CONFIG="llvm-config-${LLVM_VERSION}"
 | 
			
		||||
        - DRI_LOADERS="--disable-glx --disable-gbm --disable-egl"
 | 
			
		||||
        - DRI_DRIVERS=""
 | 
			
		||||
        - GALLIUM_ST="--enable-dri --disable-opencl --disable-xa --disable-nine --disable-xvmc --disable-vdpau --disable-va --disable-omx-bellagio --disable-gallium-osmesa"
 | 
			
		||||
        - GALLIUM_DRIVERS="radeonsi"
 | 
			
		||||
        - VULKAN_DRIVERS=""
 | 
			
		||||
        - LIBUNWIND_FLAGS="--enable-libunwind"
 | 
			
		||||
      addons:
 | 
			
		||||
        apt:
 | 
			
		||||
          sources:
 | 
			
		||||
            - sourceline: 'deb http://apt.llvm.org/xenial/ llvm-toolchain-xenial-7 main'
 | 
			
		||||
              key_url: https://apt.llvm.org/llvm-snapshot.gpg.key
 | 
			
		||||
          packages:
 | 
			
		||||
            # From sources above
 | 
			
		||||
            - llvm-7-dev
 | 
			
		||||
            # Common
 | 
			
		||||
            - xz-utils
 | 
			
		||||
            - libexpat1-dev
 | 
			
		||||
            - libx11-xcb-dev
 | 
			
		||||
            - libelf-dev
 | 
			
		||||
            - libunwind8-dev
 | 
			
		||||
            - python3-pip
 | 
			
		||||
            - python3-setuptools
 | 
			
		||||
    - env:
 | 
			
		||||
        - LABEL="make Gallium Drivers Other"
 | 
			
		||||
        - BUILD=make
 | 
			
		||||
        - MAKEFLAGS="-j4"
 | 
			
		||||
        - MAKE_CHECK_COMMAND="true"
 | 
			
		||||
        - LLVM_VERSION=3.9
 | 
			
		||||
        - LLVM_CONFIG="llvm-config-${LLVM_VERSION}"
 | 
			
		||||
        - DRI_LOADERS="--disable-glx --disable-gbm --disable-egl"
 | 
			
		||||
        - DRI_DRIVERS=""
 | 
			
		||||
        - GALLIUM_ST="--enable-dri --disable-opencl --disable-xa --disable-nine --disable-xvmc --disable-vdpau --disable-va --disable-omx-bellagio --disable-gallium-osmesa"
 | 
			
		||||
        - GALLIUM_DRIVERS="i915,nouveau,kmsro,r300,r600,freedreno,svga,swrast,v3d,vc4,virgl,etnaviv"
 | 
			
		||||
        - VULKAN_DRIVERS=""
 | 
			
		||||
        - LIBUNWIND_FLAGS="--enable-libunwind"
 | 
			
		||||
      addons:
 | 
			
		||||
        apt:
 | 
			
		||||
          packages:
 | 
			
		||||
            # LLVM packaging is broken and misses these dependencies
 | 
			
		||||
            - libedit-dev
 | 
			
		||||
            - llvm-3.9-dev
 | 
			
		||||
            # Common
 | 
			
		||||
            - xz-utils
 | 
			
		||||
            - libexpat1-dev
 | 
			
		||||
            - libx11-xcb-dev
 | 
			
		||||
            - libelf-dev
 | 
			
		||||
            - libunwind8-dev
 | 
			
		||||
            - python3-pip
 | 
			
		||||
            - python3-setuptools
 | 
			
		||||
    - env:
 | 
			
		||||
        - LABEL="make Gallium ST Clover LLVM-3.9"
 | 
			
		||||
        - BUILD=make
 | 
			
		||||
        - MAKEFLAGS="-j4"
 | 
			
		||||
        - MAKE_CHECK_COMMAND="true"
 | 
			
		||||
        - LLVM_VERSION=3.9
 | 
			
		||||
        - LLVM_CONFIG="llvm-config-${LLVM_VERSION}"
 | 
			
		||||
        - DRI_LOADERS="--disable-glx --disable-gbm --disable-egl"
 | 
			
		||||
        - DRI_DRIVERS=""
 | 
			
		||||
        - GALLIUM_ST="--disable-dri --enable-opencl --enable-opencl-icd --enable-llvm --disable-xa --disable-nine --disable-xvmc --disable-vdpau --disable-va --disable-omx-bellagio --disable-gallium-osmesa"
 | 
			
		||||
        - GALLIUM_DRIVERS="r600"
 | 
			
		||||
        - VULKAN_DRIVERS=""
 | 
			
		||||
        - LIBUNWIND_FLAGS="--enable-libunwind"
 | 
			
		||||
      addons:
 | 
			
		||||
        apt:
 | 
			
		||||
          packages:
 | 
			
		||||
            - libclc-dev
 | 
			
		||||
            # LLVM packaging is broken and misses these dependencies
 | 
			
		||||
            - libedit-dev
 | 
			
		||||
            - llvm-3.9-dev
 | 
			
		||||
            - clang-3.9
 | 
			
		||||
            - libclang-3.9-dev
 | 
			
		||||
            # Common
 | 
			
		||||
            - xz-utils
 | 
			
		||||
            - libexpat1-dev
 | 
			
		||||
            - libx11-xcb-dev
 | 
			
		||||
            - libelf-dev
 | 
			
		||||
            - libunwind8-dev
 | 
			
		||||
            - python3-pip
 | 
			
		||||
            - python3-setuptools
 | 
			
		||||
    - env:
 | 
			
		||||
        - LABEL="make Gallium ST Clover LLVM-4.0"
 | 
			
		||||
        - BUILD=make
 | 
			
		||||
        - MAKEFLAGS="-j4"
 | 
			
		||||
        - MAKE_CHECK_COMMAND="true"
 | 
			
		||||
        - LLVM_VERSION=4.0
 | 
			
		||||
        - LLVM_CONFIG="llvm-config-${LLVM_VERSION}"
 | 
			
		||||
        - DRI_LOADERS="--disable-glx --disable-gbm --disable-egl"
 | 
			
		||||
        - DRI_DRIVERS=""
 | 
			
		||||
        - GALLIUM_ST="--disable-dri --enable-opencl --enable-opencl-icd --enable-llvm --disable-xa --disable-nine --disable-xvmc --disable-vdpau --disable-va --disable-omx-bellagio --disable-gallium-osmesa"
 | 
			
		||||
        - GALLIUM_DRIVERS="r600"
 | 
			
		||||
        - VULKAN_DRIVERS=""
 | 
			
		||||
        - LIBUNWIND_FLAGS="--enable-libunwind"
 | 
			
		||||
      addons:
 | 
			
		||||
        apt:
 | 
			
		||||
          packages:
 | 
			
		||||
            - libclc-dev
 | 
			
		||||
            # LLVM packaging is broken and misses these dependencies
 | 
			
		||||
            - libedit-dev
 | 
			
		||||
            - llvm-4.0-dev
 | 
			
		||||
            - clang-4.0
 | 
			
		||||
            - libclang-4.0-dev
 | 
			
		||||
            # Common
 | 
			
		||||
            - xz-utils
 | 
			
		||||
            - libexpat1-dev
 | 
			
		||||
            - libx11-xcb-dev
 | 
			
		||||
            - libelf-dev
 | 
			
		||||
            - libunwind8-dev
 | 
			
		||||
            - python3-pip
 | 
			
		||||
            - python3-setuptools
 | 
			
		||||
    - env:
 | 
			
		||||
        - LABEL="make Gallium ST Clover LLVM-5.0"
 | 
			
		||||
        - BUILD=make
 | 
			
		||||
        - MAKEFLAGS="-j4"
 | 
			
		||||
        - MAKE_CHECK_COMMAND="true"
 | 
			
		||||
        - LLVM_VERSION=5.0
 | 
			
		||||
        - LLVM_CONFIG="llvm-config-${LLVM_VERSION}"
 | 
			
		||||
        - DRI_LOADERS="--disable-glx --disable-gbm --disable-egl"
 | 
			
		||||
        - DRI_DRIVERS=""
 | 
			
		||||
        - GALLIUM_ST="--disable-dri --enable-opencl --enable-opencl-icd --enable-llvm --disable-xa --disable-nine --disable-xvmc --disable-vdpau --disable-va --disable-omx-bellagio --disable-gallium-osmesa"
 | 
			
		||||
        - GALLIUM_DRIVERS="r600"
 | 
			
		||||
        - VULKAN_DRIVERS=""
 | 
			
		||||
        - LIBUNWIND_FLAGS="--enable-libunwind"
 | 
			
		||||
      addons:
 | 
			
		||||
        apt:
 | 
			
		||||
          packages:
 | 
			
		||||
            - libclc-dev
 | 
			
		||||
            # LLVM packaging is broken and misses these dependencies
 | 
			
		||||
            - libedit-dev
 | 
			
		||||
            - llvm-5.0-dev
 | 
			
		||||
            - clang-5.0
 | 
			
		||||
            - libclang-5.0-dev
 | 
			
		||||
            # Common
 | 
			
		||||
            - xz-utils
 | 
			
		||||
            - libexpat1-dev
 | 
			
		||||
            - libx11-xcb-dev
 | 
			
		||||
            - libelf-dev
 | 
			
		||||
            - libunwind8-dev
 | 
			
		||||
            - python3-pip
 | 
			
		||||
            - python3-setuptools
 | 
			
		||||
    - env:
 | 
			
		||||
        - LABEL="make Gallium ST Clover LLVM-6.0"
 | 
			
		||||
        - BUILD=make
 | 
			
		||||
        - MAKEFLAGS="-j4"
 | 
			
		||||
        - MAKE_CHECK_COMMAND="true"
 | 
			
		||||
        - LLVM_VERSION=6.0
 | 
			
		||||
        - LLVM_CONFIG="llvm-config-${LLVM_VERSION}"
 | 
			
		||||
        - DRI_LOADERS="--disable-glx --disable-gbm --disable-egl"
 | 
			
		||||
        - DRI_DRIVERS=""
 | 
			
		||||
        - GALLIUM_ST="--disable-dri --enable-opencl --enable-opencl-icd --enable-llvm --disable-xa --disable-nine --disable-xvmc --disable-vdpau --disable-va --disable-omx-bellagio --disable-gallium-osmesa"
 | 
			
		||||
        - GALLIUM_DRIVERS="r600"
 | 
			
		||||
        - VULKAN_DRIVERS=""
 | 
			
		||||
        - LIBUNWIND_FLAGS="--enable-libunwind"
 | 
			
		||||
      addons:
 | 
			
		||||
        apt:
 | 
			
		||||
          packages:
 | 
			
		||||
            - libclc-dev
 | 
			
		||||
            - llvm-6.0-dev
 | 
			
		||||
            - clang-6.0
 | 
			
		||||
            - libclang-6.0-dev
 | 
			
		||||
            # Common
 | 
			
		||||
            - xz-utils
 | 
			
		||||
            - libexpat1-dev
 | 
			
		||||
            - libx11-xcb-dev
 | 
			
		||||
            - libelf-dev
 | 
			
		||||
            - libunwind8-dev
 | 
			
		||||
            - python3-pip
 | 
			
		||||
            - python3-setuptools
 | 
			
		||||
    - env:
 | 
			
		||||
        - LABEL="make Gallium ST Clover LLVM-7"
 | 
			
		||||
        - BUILD=make
 | 
			
		||||
        - MAKEFLAGS="-j4"
 | 
			
		||||
        - MAKE_CHECK_COMMAND="true"
 | 
			
		||||
        - LLVM_VERSION=7
 | 
			
		||||
        - LLVM_CONFIG="llvm-config-${LLVM_VERSION}"
 | 
			
		||||
        - DRI_LOADERS="--disable-glx --disable-gbm --disable-egl"
 | 
			
		||||
        - DRI_DRIVERS=""
 | 
			
		||||
        - GALLIUM_ST="--disable-dri --enable-opencl --enable-opencl-icd --enable-llvm --disable-xa --disable-nine --disable-xvmc --disable-vdpau --disable-va --disable-omx-bellagio --disable-gallium-osmesa"
 | 
			
		||||
        - GALLIUM_DRIVERS="r600,radeonsi"
 | 
			
		||||
        - VULKAN_DRIVERS=""
 | 
			
		||||
        - LIBUNWIND_FLAGS="--enable-libunwind"
 | 
			
		||||
      addons:
 | 
			
		||||
        apt:
 | 
			
		||||
          sources:
 | 
			
		||||
            - sourceline: 'deb http://apt.llvm.org/xenial/ llvm-toolchain-xenial-7 main'
 | 
			
		||||
              key_url: https://apt.llvm.org/llvm-snapshot.gpg.key
 | 
			
		||||
          packages:
 | 
			
		||||
            - libclc-dev
 | 
			
		||||
            # From sources above
 | 
			
		||||
            - llvm-7-dev
 | 
			
		||||
            - clang-7
 | 
			
		||||
            - libclang-7-dev
 | 
			
		||||
            # Common
 | 
			
		||||
            - xz-utils
 | 
			
		||||
            - libexpat1-dev
 | 
			
		||||
            - libx11-xcb-dev
 | 
			
		||||
            - libelf-dev
 | 
			
		||||
            - libunwind8-dev
 | 
			
		||||
    - env:
 | 
			
		||||
        - LABEL="make Gallium ST Other"
 | 
			
		||||
        - BUILD=make
 | 
			
		||||
        - MAKEFLAGS="-j4"
 | 
			
		||||
        - MAKE_CHECK_COMMAND="true"
 | 
			
		||||
        - LLVM_VERSION=3.5
 | 
			
		||||
        - LLVM_CONFIG="llvm-config-${LLVM_VERSION}"
 | 
			
		||||
        - DRI_LOADERS="--disable-glx --disable-gbm --disable-egl"
 | 
			
		||||
        - DRI_DRIVERS=""
 | 
			
		||||
        - GALLIUM_ST="--enable-dri --disable-opencl --enable-xa --enable-nine --enable-xvmc --enable-vdpau --enable-va --enable-omx-bellagio --enable-gallium-osmesa"
 | 
			
		||||
        # We need swrast for osmesa and nine.
 | 
			
		||||
        # i915 most likely doesn't work with most ST.
 | 
			
		||||
        # Regardless - we're doing a quick build test here.
 | 
			
		||||
        - GALLIUM_DRIVERS="i915,swrast"
 | 
			
		||||
        - VULKAN_DRIVERS=""
 | 
			
		||||
        - LIBUNWIND_FLAGS="--enable-libunwind"
 | 
			
		||||
      addons:
 | 
			
		||||
        apt:
 | 
			
		||||
          packages:
 | 
			
		||||
            # We actually want to test against llvm-3.3, yet 3.5 is available
 | 
			
		||||
            - llvm-3.5-dev
 | 
			
		||||
            # Nine requires gcc 4.6... which is the one we have right ?
 | 
			
		||||
            - libxvmc-dev
 | 
			
		||||
            # Build locally, for now.
 | 
			
		||||
            #- libvdpau-dev
 | 
			
		||||
            #- libva-dev
 | 
			
		||||
            - libomxil-bellagio-dev
 | 
			
		||||
            # LLVM packaging is broken and misses these dependencies
 | 
			
		||||
            - libedit-dev
 | 
			
		||||
            # Common
 | 
			
		||||
            - xz-utils
 | 
			
		||||
            - libexpat1-dev
 | 
			
		||||
            - libx11-xcb-dev
 | 
			
		||||
            - libelf-dev
 | 
			
		||||
            - libunwind8-dev
 | 
			
		||||
            - python3-pip
 | 
			
		||||
            - python3-setuptools
 | 
			
		||||
    - env:
 | 
			
		||||
        - LABEL="make Vulkan"
 | 
			
		||||
        - BUILD=make
 | 
			
		||||
        - MAKEFLAGS="-j4"
 | 
			
		||||
        - MAKE_CHECK_COMMAND="make -C src/gtest check && make -C src/intel check"
 | 
			
		||||
        - LLVM_VERSION=7
 | 
			
		||||
        - LLVM_CONFIG="llvm-config-${LLVM_VERSION}"
 | 
			
		||||
        - DRI_LOADERS="--disable-glx --disable-gbm --disable-egl --with-platforms=x11,wayland"
 | 
			
		||||
        - DRI_DRIVERS=""
 | 
			
		||||
        - GALLIUM_ST="--enable-dri --enable-dri3 --disable-opencl --disable-xa --disable-nine --disable-xvmc --disable-vdpau --disable-va --disable-omx-bellagio --disable-gallium-osmesa"
 | 
			
		||||
        - GALLIUM_DRIVERS=""
 | 
			
		||||
        - VULKAN_DRIVERS="intel,radeon"
 | 
			
		||||
        - LIBUNWIND_FLAGS="--disable-libunwind"
 | 
			
		||||
      addons:
 | 
			
		||||
        apt:
 | 
			
		||||
          sources:
 | 
			
		||||
            - sourceline: 'deb http://apt.llvm.org/xenial/ llvm-toolchain-xenial-7 main'
 | 
			
		||||
              key_url: https://apt.llvm.org/llvm-snapshot.gpg.key
 | 
			
		||||
          packages:
 | 
			
		||||
            # From sources above
 | 
			
		||||
            - llvm-7-dev
 | 
			
		||||
            # Common
 | 
			
		||||
            - xz-utils
 | 
			
		||||
            - libexpat1-dev
 | 
			
		||||
            - libx11-xcb-dev
 | 
			
		||||
            - libelf-dev
 | 
			
		||||
            - python3-pip
 | 
			
		||||
            - python3-setuptools
 | 
			
		||||
    - env:
 | 
			
		||||
        - LABEL="scons"
 | 
			
		||||
        - BUILD=scons
 | 
			
		||||
        - SCONSFLAGS="-j4"
 | 
			
		||||
        # Explicitly disable.
 | 
			
		||||
        - SCONS_TARGET="llvm=0"
 | 
			
		||||
        # Keep it symmetrical to the make build.
 | 
			
		||||
        - SCONS_CHECK_COMMAND="scons llvm=0 check"
 | 
			
		||||
      addons:
 | 
			
		||||
        apt:
 | 
			
		||||
          packages:
 | 
			
		||||
            # Common
 | 
			
		||||
            - xz-utils
 | 
			
		||||
            - x11proto-xf86vidmode-dev
 | 
			
		||||
            - libexpat1-dev
 | 
			
		||||
            - libx11-xcb-dev
 | 
			
		||||
            - libelf-dev
 | 
			
		||||
    - env:
 | 
			
		||||
        - LABEL="scons LLVM"
 | 
			
		||||
        - BUILD=scons
 | 
			
		||||
        - SCONSFLAGS="-j4"
 | 
			
		||||
        - SCONS_TARGET="llvm=1"
 | 
			
		||||
        # Keep it symmetrical to the make build.
 | 
			
		||||
        - SCONS_CHECK_COMMAND="scons llvm=1 check"
 | 
			
		||||
        - LLVM_VERSION=3.5
 | 
			
		||||
        - LLVM_CONFIG="llvm-config-${LLVM_VERSION}"
 | 
			
		||||
      addons:
 | 
			
		||||
        apt:
 | 
			
		||||
          packages:
 | 
			
		||||
            # LLVM packaging is broken and misses these dependencies
 | 
			
		||||
            - libedit-dev
 | 
			
		||||
            # We actually want to test against llvm-3.3, yet 3.5 is available
 | 
			
		||||
            - llvm-3.5-dev
 | 
			
		||||
            # Common
 | 
			
		||||
            - xz-utils
 | 
			
		||||
            - x11proto-xf86vidmode-dev
 | 
			
		||||
            - libexpat1-dev
 | 
			
		||||
            - libx11-xcb-dev
 | 
			
		||||
            - libelf-dev
 | 
			
		||||
    - env:
 | 
			
		||||
        - LABEL="scons SWR"
 | 
			
		||||
        - BUILD=scons
 | 
			
		||||
        - SCONSFLAGS="-j4"
 | 
			
		||||
        - SCONS_TARGET="swr=1"
 | 
			
		||||
        - LLVM_VERSION=6.0
 | 
			
		||||
        - LLVM_CONFIG="llvm-config-${LLVM_VERSION}"
 | 
			
		||||
        # Keep it symmetrical to the make build. There's no actual SWR, yet.
 | 
			
		||||
        - SCONS_CHECK_COMMAND="true"
 | 
			
		||||
      addons:
 | 
			
		||||
        apt:
 | 
			
		||||
          packages:
 | 
			
		||||
            - llvm-6.0-dev
 | 
			
		||||
            # Common
 | 
			
		||||
            - xz-utils
 | 
			
		||||
            - x11proto-xf86vidmode-dev
 | 
			
		||||
            - libexpat1-dev
 | 
			
		||||
            - libx11-xcb-dev
 | 
			
		||||
            - libelf-dev
 | 
			
		||||
    - env:
 | 
			
		||||
        - LABEL="macOS make"
 | 
			
		||||
        - BUILD=make
 | 
			
		||||
        - MAKEFLAGS="-j4"
 | 
			
		||||
        - MAKE_CHECK_COMMAND="make check"
 | 
			
		||||
        - DRI_LOADERS="--with-platforms=x11 --disable-egl"
 | 
			
		||||
      os: osx
 | 
			
		||||
    - env:
 | 
			
		||||
        - LABEL="macOS meson"
 | 
			
		||||
        - BUILD=meson
 | 
			
		||||
        - UNWIND="false"
 | 
			
		||||
        - DRI_LOADERS="-Dglx=dri -Dgbm=false -Degl=false -Dplatforms=x11 -Dosmesa=none"
 | 
			
		||||
        - GALLIUM_ST="-Ddri3=true -Dgallium-vdpau=false -Dgallium-xvmc=false -Dgallium-omx=disabled -Dgallium-va=false -Dgallium-xa=false -Dgallium-nine=false -Dgallium-opencl=disabled"
 | 
			
		||||
      os: osx
 | 
			
		||||
 | 
			
		||||
before_install:
 | 
			
		||||
  - HOMEBREW_NO_AUTO_UPDATE=1 brew install expat gettext
 | 
			
		||||
  - if test "x$BUILD" = xmeson; then
 | 
			
		||||
      HOMEBREW_NO_AUTO_UPDATE=1 brew install ninja;
 | 
			
		||||
    fi
 | 
			
		||||
  - if test "x$BUILD" = xscons; then
 | 
			
		||||
      HOMEBREW_NO_AUTO_UPDATE=1 brew install scons;
 | 
			
		||||
    fi
 | 
			
		||||
  - |
 | 
			
		||||
    if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then
 | 
			
		||||
      HOMEBREW_NO_AUTO_UPDATE=1 brew install python3 ninja expat gettext
 | 
			
		||||
      # Set PATH for homebrew pip3 installs
 | 
			
		||||
      PATH="$HOME/Library/Python/3.6/bin:${PATH}"
 | 
			
		||||
      # Set PKG_CONFIG_PATH for keg-only expat
 | 
			
		||||
      PKG_CONFIG_PATH="/usr/local/opt/expat/lib/pkgconfig:${PKG_CONFIG_PATH}"
 | 
			
		||||
      # Set PATH for keg-only gettext
 | 
			
		||||
      PATH="/usr/local/opt/gettext/bin:${PATH}"
 | 
			
		||||
 | 
			
		||||
  # Set PATH for homebrew pip3 installs
 | 
			
		||||
  - PYTHON_VERSION=$(python3 -V | awk '{print $2}' | cut -d. -f1-2)
 | 
			
		||||
  - PATH="$HOME/Library/Python/$PYTHON_VERSION/bin:${PATH}"
 | 
			
		||||
  # Set PKG_CONFIG_PATH for keg-only expat
 | 
			
		||||
  - PKG_CONFIG_PATH="/usr/local/opt/expat/lib/pkgconfig:${PKG_CONFIG_PATH}"
 | 
			
		||||
  # Set PATH for keg-only gettext
 | 
			
		||||
  - PATH="/usr/local/opt/gettext/bin:${PATH}"
 | 
			
		||||
 | 
			
		||||
  # Install xquartz for prereqs ...
 | 
			
		||||
  - XQUARTZ_VERSION="2.7.11"
 | 
			
		||||
  - wget -nv https://dl.bintray.com/xquartz/downloads/XQuartz-${XQUARTZ_VERSION}.dmg
 | 
			
		||||
  - hdiutil attach XQuartz-${XQUARTZ_VERSION}.dmg
 | 
			
		||||
  - sudo installer -pkg /Volumes/XQuartz-${XQUARTZ_VERSION}/XQuartz.pkg -target /
 | 
			
		||||
  - hdiutil detach /Volumes/XQuartz-${XQUARTZ_VERSION}
 | 
			
		||||
  # ... and set paths
 | 
			
		||||
  - PKG_CONFIG_PATH="/opt/X11/share/pkgconfig:/opt/X11/lib/pkgconfig:${PKG_CONFIG_PATH}"
 | 
			
		||||
      # Install xquartz for prereqs ...
 | 
			
		||||
      XQUARTZ_VERSION="2.7.11"
 | 
			
		||||
      wget -nv https://dl.bintray.com/xquartz/downloads/XQuartz-${XQUARTZ_VERSION}.dmg
 | 
			
		||||
      hdiutil attach XQuartz-${XQUARTZ_VERSION}.dmg
 | 
			
		||||
      sudo installer -pkg /Volumes/XQuartz-${XQUARTZ_VERSION}/XQuartz.pkg -target /
 | 
			
		||||
      hdiutil detach /Volumes/XQuartz-${XQUARTZ_VERSION}
 | 
			
		||||
      # ... and set paths
 | 
			
		||||
      PATH="/opt/X11/bin:${PATH}"
 | 
			
		||||
      PKG_CONFIG_PATH="/opt/X11/share/pkgconfig:/opt/X11/lib/pkgconfig:${PKG_CONFIG_PATH}"
 | 
			
		||||
      ACLOCAL="aclocal -I /opt/X11/share/aclocal -I /usr/local/share/aclocal"
 | 
			
		||||
    fi
 | 
			
		||||
 | 
			
		||||
install:
 | 
			
		||||
  # Install a more modern meson from pip, since the version in the
 | 
			
		||||
  # ubuntu repos is often quite old.
 | 
			
		||||
  - if test "x$BUILD" = xmeson; then
 | 
			
		||||
      pip3 install --user meson;
 | 
			
		||||
      pip3 install --user mako;
 | 
			
		||||
    fi
 | 
			
		||||
  - if test "x$BUILD" = xscons; then
 | 
			
		||||
 | 
			
		||||
  # Install autotools build dependencies
 | 
			
		||||
  - if test "x$BUILD" = xmake; then
 | 
			
		||||
      pip2 install --user mako;
 | 
			
		||||
    fi
 | 
			
		||||
 | 
			
		||||
script:
 | 
			
		||||
  - if test "x$BUILD" = xmeson; then
 | 
			
		||||
      meson _build -Dbuild-tests=true;
 | 
			
		||||
      ninja -C _build || travis_terminate 1;
 | 
			
		||||
      ninja -C _build test || travis_terminate 1;
 | 
			
		||||
      ninja -C _build install || travis_terminate 1;
 | 
			
		||||
    fi
 | 
			
		||||
  # Install a more modern scons from pip.
 | 
			
		||||
  - if test "x$BUILD" = xscons; then
 | 
			
		||||
      scons force_scons=1 || travis_terminate 1;
 | 
			
		||||
      scons force_scons=1 check || travis_terminate 1;
 | 
			
		||||
      pip2 install --user "scons>=2.4";
 | 
			
		||||
      pip2 install --user mako;
 | 
			
		||||
    fi
 | 
			
		||||
 | 
			
		||||
  # Install dependencies where we require specific versions (or where
 | 
			
		||||
  # disallowed by Travis CI's package whitelisting).
 | 
			
		||||
 | 
			
		||||
  - |
 | 
			
		||||
    if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then
 | 
			
		||||
      wget $XORG_RELEASES/util/$XORGMACROS_VERSION.tar.bz2
 | 
			
		||||
      tar -jxvf $XORGMACROS_VERSION.tar.bz2
 | 
			
		||||
      (cd $XORGMACROS_VERSION && ./configure --prefix=$HOME/prefix && make install)
 | 
			
		||||
 | 
			
		||||
      wget $XORG_RELEASES/proto/$GLPROTO_VERSION.tar.bz2
 | 
			
		||||
      tar -jxvf $GLPROTO_VERSION.tar.bz2
 | 
			
		||||
      (cd $GLPROTO_VERSION && ./configure --prefix=$HOME/prefix && make install)
 | 
			
		||||
 | 
			
		||||
      wget $XORG_RELEASES/proto/$DRI2PROTO_VERSION.tar.bz2
 | 
			
		||||
      tar -jxvf $DRI2PROTO_VERSION.tar.bz2
 | 
			
		||||
      (cd $DRI2PROTO_VERSION && ./configure --prefix=$HOME/prefix && make install)
 | 
			
		||||
 | 
			
		||||
      wget $XCB_RELEASES/$XCBPROTO_VERSION.tar.bz2
 | 
			
		||||
      tar -jxvf $XCBPROTO_VERSION.tar.bz2
 | 
			
		||||
      (cd $XCBPROTO_VERSION && ./configure --prefix=$HOME/prefix && make install)
 | 
			
		||||
 | 
			
		||||
      wget $XCB_RELEASES/$LIBXCB_VERSION.tar.bz2
 | 
			
		||||
      tar -jxvf $LIBXCB_VERSION.tar.bz2
 | 
			
		||||
      (cd $LIBXCB_VERSION && ./configure --prefix=$HOME/prefix && make install)
 | 
			
		||||
 | 
			
		||||
      wget $XORG_RELEASES/lib/$LIBPCIACCESS_VERSION.tar.bz2
 | 
			
		||||
      tar -jxvf $LIBPCIACCESS_VERSION.tar.bz2
 | 
			
		||||
      (cd $LIBPCIACCESS_VERSION && ./configure --prefix=$HOME/prefix && make install)
 | 
			
		||||
 | 
			
		||||
      wget https://dri.freedesktop.org/libdrm/$LIBDRM_VERSION.tar.bz2
 | 
			
		||||
      tar -jxvf $LIBDRM_VERSION.tar.bz2
 | 
			
		||||
      (cd $LIBDRM_VERSION && ./configure --prefix=$HOME/prefix --enable-vc4 --enable-freedreno --enable-etnaviv-experimental-api && make install)
 | 
			
		||||
 | 
			
		||||
      wget $XORG_RELEASES/proto/$RANDRPROTO_VERSION.tar.bz2
 | 
			
		||||
      tar -jxvf $RANDRPROTO_VERSION.tar.bz2
 | 
			
		||||
      (cd $RANDRPROTO_VERSION && ./configure --prefix=$HOME/prefix && make install)
 | 
			
		||||
 | 
			
		||||
      wget $XORG_RELEASES/lib/$LIBXRANDR_VERSION.tar.bz2
 | 
			
		||||
      tar -jxvf $LIBXRANDR_VERSION.tar.bz2
 | 
			
		||||
      (cd $LIBXRANDR_VERSION && ./configure --prefix=$HOME/prefix && make install)
 | 
			
		||||
 | 
			
		||||
      wget $XORG_RELEASES/lib/$LIBXSHMFENCE_VERSION.tar.bz2
 | 
			
		||||
      tar -jxvf $LIBXSHMFENCE_VERSION.tar.bz2
 | 
			
		||||
      (cd $LIBXSHMFENCE_VERSION && ./configure --prefix=$HOME/prefix && make install)
 | 
			
		||||
 | 
			
		||||
      wget https://people.freedesktop.org/~aplattner/vdpau/$LIBVDPAU_VERSION.tar.bz2
 | 
			
		||||
      tar -jxvf $LIBVDPAU_VERSION.tar.bz2
 | 
			
		||||
      (cd $LIBVDPAU_VERSION && ./configure --prefix=$HOME/prefix && make install)
 | 
			
		||||
 | 
			
		||||
      wget https://www.freedesktop.org/software/vaapi/releases/libva/$LIBVA_VERSION.tar.bz2
 | 
			
		||||
      tar -jxvf $LIBVA_VERSION.tar.bz2
 | 
			
		||||
      (cd $LIBVA_VERSION && ./configure --prefix=$HOME/prefix --disable-wayland --disable-dummy-driver && make install)
 | 
			
		||||
 | 
			
		||||
      wget $WAYLAND_RELEASES/$LIBWAYLAND_VERSION.tar.xz
 | 
			
		||||
      tar -axvf $LIBWAYLAND_VERSION.tar.xz
 | 
			
		||||
      (cd $LIBWAYLAND_VERSION && ./configure --prefix=$HOME/prefix --enable-libraries --without-host-scanner --disable-documentation --disable-dtd-validation && make install)
 | 
			
		||||
 | 
			
		||||
      wget $WAYLAND_RELEASES/$WAYLAND_PROTOCOLS_VERSION.tar.xz
 | 
			
		||||
      tar -axvf $WAYLAND_PROTOCOLS_VERSION.tar.xz
 | 
			
		||||
      (cd $WAYLAND_PROTOCOLS_VERSION && ./configure --prefix=$HOME/prefix && make install)
 | 
			
		||||
 | 
			
		||||
      # Meson requires ninja >= 1.6, but xenial has 1.3.x
 | 
			
		||||
      wget https://github.com/ninja-build/ninja/releases/download/v1.6.0/ninja-linux.zip
 | 
			
		||||
      unzip ninja-linux.zip
 | 
			
		||||
      mv ninja $HOME/prefix/bin/
 | 
			
		||||
 | 
			
		||||
      # Generate this header since one is missing on the Travis instance
 | 
			
		||||
      mkdir -p linux
 | 
			
		||||
      printf "%s\n" \
 | 
			
		||||
           "#ifndef _LINUX_MEMFD_H" \
 | 
			
		||||
           "#define _LINUX_MEMFD_H" \
 | 
			
		||||
           "" \
 | 
			
		||||
           "#define MFD_CLOEXEC             0x0001U" \
 | 
			
		||||
           "#define MFD_ALLOW_SEALING       0x0002U" \
 | 
			
		||||
           "" \
 | 
			
		||||
           "#endif /* _LINUX_MEMFD_H */" > linux/memfd.h
 | 
			
		||||
 | 
			
		||||
      # Generate this header, including the missing SYS_memfd_create
 | 
			
		||||
      # macro, which is not provided by the header in the Travis
 | 
			
		||||
      # instance
 | 
			
		||||
      mkdir -p sys
 | 
			
		||||
      printf "%s\n" \
 | 
			
		||||
           "#ifndef _SYSCALL_H" \
 | 
			
		||||
           "#define _SYSCALL_H      1" \
 | 
			
		||||
           "" \
 | 
			
		||||
           "#include <asm/unistd.h>" \
 | 
			
		||||
           "" \
 | 
			
		||||
           "#ifndef _LIBC" \
 | 
			
		||||
           "# include <bits/syscall.h>" \
 | 
			
		||||
           "#endif" \
 | 
			
		||||
           "" \
 | 
			
		||||
           "#ifndef __NR_memfd_create" \
 | 
			
		||||
           "# define __NR_memfd_create 319 /* Taken from <asm/unistd_64.h> */" \
 | 
			
		||||
           "#endif" \
 | 
			
		||||
           "" \
 | 
			
		||||
           "#ifndef SYS_memfd_create" \
 | 
			
		||||
           "# define SYS_memfd_create __NR_memfd_create" \
 | 
			
		||||
           "#endif" \
 | 
			
		||||
           "" \
 | 
			
		||||
           "#endif" > sys/syscall.h
 | 
			
		||||
    fi
 | 
			
		||||
 | 
			
		||||
script:
 | 
			
		||||
  - if test "x$BUILD" = xmake; then
 | 
			
		||||
      export CFLAGS="$CFLAGS -isystem`pwd`";
 | 
			
		||||
 | 
			
		||||
      mkdir build &&
 | 
			
		||||
      cd build &&
 | 
			
		||||
      ../autogen.sh
 | 
			
		||||
        --enable-autotools
 | 
			
		||||
        --enable-debug
 | 
			
		||||
        $LIBUNWIND_FLAGS
 | 
			
		||||
        $DRI_LOADERS
 | 
			
		||||
        --with-dri-drivers=$DRI_DRIVERS
 | 
			
		||||
        $GALLIUM_ST
 | 
			
		||||
        --with-gallium-drivers=$GALLIUM_DRIVERS
 | 
			
		||||
        --with-vulkan-drivers=$VULKAN_DRIVERS
 | 
			
		||||
        --disable-llvm-shared-libs
 | 
			
		||||
        &&
 | 
			
		||||
      make && eval $MAKE_CHECK_COMMAND;
 | 
			
		||||
    fi
 | 
			
		||||
 | 
			
		||||
  - if test "x$BUILD" = xscons; then
 | 
			
		||||
      scons $SCONS_TARGET && eval $SCONS_CHECK_COMMAND;
 | 
			
		||||
    fi
 | 
			
		||||
 | 
			
		||||
  - |
 | 
			
		||||
    if test "x$BUILD" = xmeson; then
 | 
			
		||||
      if test -n "$LLVM_CONFIG"; then
 | 
			
		||||
        # We need to control the version of llvm-config we're using, so we'll
 | 
			
		||||
        # generate a native file to do so. This requires meson >=0.49
 | 
			
		||||
        #
 | 
			
		||||
        echo -e "[binaries]\nllvm-config = '`which $LLVM_CONFIG`'" > native.file
 | 
			
		||||
 | 
			
		||||
        $LLVM_CONFIG --version
 | 
			
		||||
      else
 | 
			
		||||
        : > native.file
 | 
			
		||||
      fi
 | 
			
		||||
 | 
			
		||||
      export CFLAGS="$CFLAGS -isystem`pwd`"
 | 
			
		||||
      meson _build \
 | 
			
		||||
                   --native-file=native.file \
 | 
			
		||||
                   -Dbuild-tests=true \
 | 
			
		||||
                   -Dlibunwind=${UNWIND} \
 | 
			
		||||
                   ${DRI_LOADERS} \
 | 
			
		||||
                   -Ddri-drivers=${DRI_DRIVERS:-[]} \
 | 
			
		||||
                   ${GALLIUM_ST} \
 | 
			
		||||
                   -Dgallium-drivers=${GALLIUM_DRIVERS:-[]} \
 | 
			
		||||
                   -Dvulkan-drivers=${VULKAN_DRIVERS:-[]}
 | 
			
		||||
      meson configure _build
 | 
			
		||||
      ninja -C _build
 | 
			
		||||
      ninja -C _build test
 | 
			
		||||
    fi
 | 
			
		||||
 
 | 
			
		||||
@@ -32,14 +32,13 @@ LOCAL_C_INCLUDES += \
 | 
			
		||||
MESA_VERSION := $(shell cat $(MESA_TOP)/VERSION)
 | 
			
		||||
LOCAL_CFLAGS += \
 | 
			
		||||
	-Wno-error \
 | 
			
		||||
	-Werror=incompatible-pointer-types \
 | 
			
		||||
	-Wno-unused-parameter \
 | 
			
		||||
	-Wno-pointer-arith \
 | 
			
		||||
	-Wno-missing-field-initializers \
 | 
			
		||||
	-Wno-initializer-overrides \
 | 
			
		||||
	-Wno-mismatched-tags \
 | 
			
		||||
	-DPACKAGE_VERSION=\"$(MESA_VERSION)\" \
 | 
			
		||||
	-DPACKAGE_BUGREPORT=\"https://gitlab.freedesktop.org/mesa/mesa/issues\"
 | 
			
		||||
	-DPACKAGE_BUGREPORT=\"https://bugs.freedesktop.org/enter_bug.cgi?product=Mesa\"
 | 
			
		||||
 | 
			
		||||
# XXX: The following __STDC_*_MACROS defines should not be needed.
 | 
			
		||||
# It's likely due to a bug elsewhere, but let's temporarily add them
 | 
			
		||||
@@ -98,14 +97,12 @@ ifeq ($(filter 5 6 7 8 9, $(MESA_ANDROID_MAJOR_VERSION)),)
 | 
			
		||||
LOCAL_CFLAGS += -DHAVE_TIMESPEC_GET
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
# Android's libc began supporting shm in Oreo
 | 
			
		||||
ifeq ($(shell test $(PLATFORM_SDK_VERSION) -ge 26 && echo true),true)
 | 
			
		||||
LOCAL_CFLAGS += -DHAVE_SYS_SHM_H
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
ifeq ($(strip $(MESA_ENABLE_ASM)),true)
 | 
			
		||||
ifeq ($(TARGET_ARCH),x86)
 | 
			
		||||
LOCAL_CFLAGS += \
 | 
			
		||||
	-DUSE_X86_ASM
 | 
			
		||||
 | 
			
		||||
endif
 | 
			
		||||
endif
 | 
			
		||||
ifeq ($(ARCH_ARM_HAVE_NEON),true)
 | 
			
		||||
LOCAL_CFLAGS_arm += -DUSE_ARM_ASM
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										30
									
								
								Android.mk
									
									
									
									
									
								
							
							
						
						
									
										30
									
								
								Android.mk
									
									
									
									
									
								
							@@ -24,7 +24,7 @@
 | 
			
		||||
# BOARD_GPU_DRIVERS should be defined.  The valid values are
 | 
			
		||||
#
 | 
			
		||||
#   classic drivers: i915 i965
 | 
			
		||||
#   gallium drivers: swrast freedreno i915g nouveau kmsro r300g r600g radeonsi vc4 virgl vmwgfx etnaviv iris lima panfrost
 | 
			
		||||
#   gallium drivers: swrast freedreno i915g nouveau kmsro r300g r600g radeonsi vc4 virgl vmwgfx etnaviv
 | 
			
		||||
#
 | 
			
		||||
# The main target is libGLES_mesa.  For each classic driver enabled, a DRI
 | 
			
		||||
# module will also be built.  DRI modules will be loaded by libGLES_mesa.
 | 
			
		||||
@@ -59,10 +59,7 @@ gallium_drivers := \
 | 
			
		||||
	vmwgfx.HAVE_GALLIUM_VMWGFX \
 | 
			
		||||
	vc4.HAVE_GALLIUM_VC4 \
 | 
			
		||||
	virgl.HAVE_GALLIUM_VIRGL \
 | 
			
		||||
	etnaviv.HAVE_GALLIUM_ETNAVIV \
 | 
			
		||||
	iris.HAVE_GALLIUM_IRIS \
 | 
			
		||||
	lima.HAVE_GALLIUM_LIMA \
 | 
			
		||||
	panfrost.HAVE_GALLIUM_PANFROST
 | 
			
		||||
	etnaviv.HAVE_GALLIUM_ETNAVIV
 | 
			
		||||
 | 
			
		||||
ifeq ($(BOARD_GPU_DRIVERS),all)
 | 
			
		||||
MESA_BUILD_CLASSIC := $(filter HAVE_%, $(subst ., , $(classic_drivers)))
 | 
			
		||||
@@ -84,21 +81,33 @@ endif
 | 
			
		||||
 | 
			
		||||
$(foreach d, $(MESA_BUILD_CLASSIC) $(MESA_BUILD_GALLIUM), $(eval $(d) := true))
 | 
			
		||||
 | 
			
		||||
# host and target must be the same arch to generate matypes.h
 | 
			
		||||
ifeq ($(TARGET_ARCH),$(HOST_ARCH))
 | 
			
		||||
MESA_ENABLE_ASM := true
 | 
			
		||||
else
 | 
			
		||||
MESA_ENABLE_ASM := false
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
ifneq ($(filter true, $(HAVE_GALLIUM_RADEONSI)),)
 | 
			
		||||
MESA_ENABLE_LLVM := true
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
define mesa-build-with-llvm
 | 
			
		||||
  $(if $(filter $(MESA_ANDROID_MAJOR_VERSION), 4 5 6 7), \
 | 
			
		||||
  $(if $(filter $(MESA_ANDROID_MAJOR_VERSION), 4 5), \
 | 
			
		||||
    $(warning Unsupported LLVM version in Android $(MESA_ANDROID_MAJOR_VERSION)),) \
 | 
			
		||||
  $(eval LOCAL_CFLAGS += -DLLVM_AVAILABLE -DMESA_LLVM_VERSION_STRING=\"3.9\") \
 | 
			
		||||
  $(if $(filter 6,$(MESA_ANDROID_MAJOR_VERSION)), \
 | 
			
		||||
    $(eval LOCAL_CFLAGS += -DHAVE_LLVM=0x0307 -DMESA_LLVM_VERSION_PATCH=0)) \
 | 
			
		||||
  $(if $(filter 7,$(MESA_ANDROID_MAJOR_VERSION)), \
 | 
			
		||||
    $(eval LOCAL_CFLAGS += -DHAVE_LLVM=0x0308 -DMESA_LLVM_VERSION_PATCH=0)) \
 | 
			
		||||
  $(if $(filter 8,$(MESA_ANDROID_MAJOR_VERSION)), \
 | 
			
		||||
    $(eval LOCAL_CFLAGS += -DHAVE_LLVM=0x0309 -DMESA_LLVM_VERSION_PATCH=0)) \
 | 
			
		||||
  $(if $(filter P,$(MESA_ANDROID_MAJOR_VERSION)), \
 | 
			
		||||
    $(eval LOCAL_CFLAGS += -DHAVE_LLVM=0x0309 -DMESA_LLVM_VERSION_PATCH=0)) \
 | 
			
		||||
  $(eval LOCAL_SHARED_LIBRARIES += libLLVM)
 | 
			
		||||
endef
 | 
			
		||||
 | 
			
		||||
# add subdirectories
 | 
			
		||||
SUBDIRS := \
 | 
			
		||||
	src/etnaviv \
 | 
			
		||||
	src/freedreno \
 | 
			
		||||
	src/gbm \
 | 
			
		||||
	src/loader \
 | 
			
		||||
	src/mapi \
 | 
			
		||||
@@ -110,8 +119,7 @@ SUBDIRS := \
 | 
			
		||||
	src/broadcom \
 | 
			
		||||
	src/intel \
 | 
			
		||||
	src/mesa/drivers/dri \
 | 
			
		||||
	src/vulkan \
 | 
			
		||||
	src/panfrost \
 | 
			
		||||
	src/vulkan
 | 
			
		||||
 | 
			
		||||
INC_DIRS := $(call all-named-subdir-makefiles,$(SUBDIRS))
 | 
			
		||||
INC_DIRS += $(call all-named-subdir-makefiles,src/gallium)
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										93
									
								
								Makefile.am
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										93
									
								
								Makefile.am
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,93 @@
 | 
			
		||||
# Copyright © 2012 Intel Corporation
 | 
			
		||||
#
 | 
			
		||||
# Permission is hereby granted, free of charge, to any person obtaining a
 | 
			
		||||
# copy of this software and associated documentation files (the "Software"),
 | 
			
		||||
# to deal in the Software without restriction, including without limitation
 | 
			
		||||
# the rights to use, copy, modify, merge, publish, distribute, sublicense,
 | 
			
		||||
# and/or sell copies of the Software, and to permit persons to whom the
 | 
			
		||||
# Software is furnished to do so, subject to the following conditions:
 | 
			
		||||
#
 | 
			
		||||
# The above copyright notice and this permission notice (including the next
 | 
			
		||||
# paragraph) shall be included in all copies or substantial portions of the
 | 
			
		||||
# Software.
 | 
			
		||||
#
 | 
			
		||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 | 
			
		||||
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 | 
			
		||||
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
 | 
			
		||||
# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 | 
			
		||||
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
 | 
			
		||||
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
 | 
			
		||||
# IN THE SOFTWARE.
 | 
			
		||||
 | 
			
		||||
SUBDIRS = src
 | 
			
		||||
 | 
			
		||||
AM_DISTCHECK_CONFIGURE_FLAGS = \
 | 
			
		||||
	--enable-autotools \
 | 
			
		||||
	--enable-dri \
 | 
			
		||||
	--enable-dri3 \
 | 
			
		||||
	--enable-egl \
 | 
			
		||||
	--enable-gallium-tests \
 | 
			
		||||
	--enable-gallium-osmesa \
 | 
			
		||||
	--enable-llvm \
 | 
			
		||||
	--enable-gbm \
 | 
			
		||||
	--enable-gles1 \
 | 
			
		||||
	--enable-gles2 \
 | 
			
		||||
	--enable-glx \
 | 
			
		||||
	--enable-glx-tls \
 | 
			
		||||
	--enable-nine \
 | 
			
		||||
	--enable-opencl \
 | 
			
		||||
	--enable-opencl-icd \
 | 
			
		||||
	--enable-opengl \
 | 
			
		||||
	--enable-va \
 | 
			
		||||
	--enable-vdpau \
 | 
			
		||||
	--enable-xa \
 | 
			
		||||
	--enable-xvmc \
 | 
			
		||||
	--enable-llvm-shared-libs \
 | 
			
		||||
	--enable-libunwind \
 | 
			
		||||
	--with-platforms=x11,wayland,drm,surfaceless \
 | 
			
		||||
	--with-dri-drivers=i915,i965,nouveau,radeon,r200,swrast \
 | 
			
		||||
	--with-gallium-drivers=i915,nouveau,r300,kmsro,r600,radeonsi,freedreno,svga,swrast,vc4,tegra,virgl,swr,etnaviv \
 | 
			
		||||
	--with-vulkan-drivers=intel,radeon
 | 
			
		||||
 | 
			
		||||
ACLOCAL_AMFLAGS = -I m4
 | 
			
		||||
 | 
			
		||||
EXTRA_DIST = \
 | 
			
		||||
	autogen.sh \
 | 
			
		||||
	common.py \
 | 
			
		||||
	docs \
 | 
			
		||||
	doxygen \
 | 
			
		||||
	bin/git_sha1_gen.py \
 | 
			
		||||
	scons \
 | 
			
		||||
	SConstruct \
 | 
			
		||||
	build-support/conftest.dyn \
 | 
			
		||||
	build-support/conftest.map \
 | 
			
		||||
	meson.build \
 | 
			
		||||
	meson_options.txt \
 | 
			
		||||
	bin/meson.build \
 | 
			
		||||
	include/meson.build \
 | 
			
		||||
	bin/install_megadrivers.py \
 | 
			
		||||
	bin/meson_get_version.py
 | 
			
		||||
 | 
			
		||||
noinst_HEADERS = \
 | 
			
		||||
	include/c99_alloca.h \
 | 
			
		||||
	include/c99_compat.h \
 | 
			
		||||
	include/c99_math.h \
 | 
			
		||||
	include/c11 \
 | 
			
		||||
	include/drm-uapi/drm.h \
 | 
			
		||||
	include/drm-uapi/drm_fourcc.h \
 | 
			
		||||
	include/drm-uapi/drm_mode.h \
 | 
			
		||||
	include/drm-uapi/i915_drm.h \
 | 
			
		||||
	include/drm-uapi/tegra_drm.h \
 | 
			
		||||
	include/drm-uapi/v3d_drm.h \
 | 
			
		||||
	include/drm-uapi/vc4_drm.h \
 | 
			
		||||
	include/D3D9 \
 | 
			
		||||
	include/GL/wglext.h \
 | 
			
		||||
	include/HaikuGL \
 | 
			
		||||
	include/no_extern_c.h \
 | 
			
		||||
	include/pci_ids \
 | 
			
		||||
	include/vulkan
 | 
			
		||||
 | 
			
		||||
# We list some directories in EXTRA_DIST, but don't actually want to include
 | 
			
		||||
# the .gitignore files in the tarball.
 | 
			
		||||
dist-hook:
 | 
			
		||||
	find $(distdir) -name .gitignore -exec $(RM) {} +
 | 
			
		||||
							
								
								
									
										22
									
								
								README.rst
									
									
									
									
									
								
							
							
						
						
									
										22
									
								
								README.rst
									
									
									
									
									
								
							@@ -9,6 +9,25 @@ This repository lives at https://gitlab.freedesktop.org/mesa/mesa.
 | 
			
		||||
Other repositories are likely forks, and code found there is not supported.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Build status
 | 
			
		||||
------------
 | 
			
		||||
 | 
			
		||||
Travis:
 | 
			
		||||
 | 
			
		||||
.. image:: https://travis-ci.org/mesa3d/mesa.svg?branch=master
 | 
			
		||||
    :target: https://travis-ci.org/mesa3d/mesa
 | 
			
		||||
 | 
			
		||||
Appveyor:
 | 
			
		||||
 | 
			
		||||
.. image:: https://img.shields.io/appveyor/ci/mesa3d/mesa.svg
 | 
			
		||||
    :target: https://ci.appveyor.com/project/mesa3d/mesa
 | 
			
		||||
 | 
			
		||||
Coverity:
 | 
			
		||||
 | 
			
		||||
.. image:: https://scan.coverity.com/projects/139/badge.svg?flat=1
 | 
			
		||||
    :target: https://scan.coverity.com/projects/mesa
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Build & install
 | 
			
		||||
---------------
 | 
			
		||||
 | 
			
		||||
@@ -56,4 +75,5 @@ Contributions are welcome, and step-by-step instructions can be found in our
 | 
			
		||||
documentation (`docs/submittingpatches.html
 | 
			
		||||
<https://mesa3d.org/submittingpatches.html>`_).
 | 
			
		||||
 | 
			
		||||
Note that Mesa uses gitlab for patches submission, review and discussions.
 | 
			
		||||
Note that Mesa uses email mailing-lists for patches submission, review and
 | 
			
		||||
discussions.
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										49
									
								
								REVIEWERS
									
									
									
									
									
								
							
							
						
						
									
										49
									
								
								REVIEWERS
									
									
									
									
									
								
							@@ -1,11 +1,30 @@
 | 
			
		||||
Overview:
 | 
			
		||||
 | 
			
		||||
	This file is similar in syntax (or more precisly a subset) of what is
 | 
			
		||||
	used by the MAINTAINERS file in the linux kernel.
 | 
			
		||||
	used by the MAINTAINERS file in the linux kernel.  Some fields do not
 | 
			
		||||
	apply, for example, in all cases, send patches to:
 | 
			
		||||
 | 
			
		||||
		mesa-dev@lists.freedesktop.org
 | 
			
		||||
 | 
			
		||||
	and in all cases the patchwork instance is:
 | 
			
		||||
 | 
			
		||||
		https://patchwork.freedesktop.org/project/mesa/
 | 
			
		||||
 | 
			
		||||
	The purpose is not exactly the same the MAINTAINERS file in the linux
 | 
			
		||||
	kernel, as there are not official/formal maintainers of different
 | 
			
		||||
	subsystems in mesa, but is meant to give an idea of who to CC for
 | 
			
		||||
	various patches for review.
 | 
			
		||||
	various patches for review, and to allow the use of
 | 
			
		||||
	scripts/get_reviewer.pl as git --cc-cmd.
 | 
			
		||||
 | 
			
		||||
Usage:
 | 
			
		||||
 | 
			
		||||
	When sending patches:
 | 
			
		||||
 | 
			
		||||
		git send-email --cc-cmd ./scripts/get_reviewer.pl ...
 | 
			
		||||
 | 
			
		||||
	Or to configure as default:
 | 
			
		||||
 | 
			
		||||
		git config sendemail.cccmd ./scripts/get_reviewer.pl
 | 
			
		||||
 | 
			
		||||
Descriptions of section entries:
 | 
			
		||||
 | 
			
		||||
@@ -17,6 +36,14 @@ Descriptions of section entries:
 | 
			
		||||
	   F:	drivers/net/*	all files in drivers/net, but not below
 | 
			
		||||
	   F:	*/net/*		all files in "any top level directory"/net
 | 
			
		||||
	   One pattern per line.  Multiple F: lines acceptable.
 | 
			
		||||
	N: Files and directories with regex patterns.
 | 
			
		||||
	   N:	[^a-z]tegra	all files whose path contains the word tegra
 | 
			
		||||
	   One pattern per line.  Multiple N: lines acceptable.
 | 
			
		||||
	   scripts/get_maintainer.pl has different behavior for files that
 | 
			
		||||
	   match F: pattern and matches of N: patterns.  By default,
 | 
			
		||||
	   get_maintainer will not look at git log history when an F: pattern
 | 
			
		||||
	   match occurs.  When an N: match occurs, git log history is used
 | 
			
		||||
	   to also notify the people that have git commit signatures.
 | 
			
		||||
 | 
			
		||||
Maintainers List (try to look for most precise areas first)
 | 
			
		||||
 | 
			
		||||
@@ -67,6 +94,14 @@ GALLIUM TARGETS
 | 
			
		||||
R: Emil Velikov <emil.l.velikov@gmail.com>
 | 
			
		||||
F: src/gallium/targets/
 | 
			
		||||
 | 
			
		||||
AUTOCONF BUILD
 | 
			
		||||
R: Emil Velikov <emil.l.velikov@gmail.com>
 | 
			
		||||
F: autogen.sh
 | 
			
		||||
F: configure.ac
 | 
			
		||||
F: */Automake.inc
 | 
			
		||||
F: */Makefile.*am
 | 
			
		||||
F: */Makefile.sources
 | 
			
		||||
 | 
			
		||||
SCONS BUILD
 | 
			
		||||
F: scons/
 | 
			
		||||
F: */SConscript*
 | 
			
		||||
@@ -108,13 +143,3 @@ VULKAN
 | 
			
		||||
R: Eric Engestrom <eric@engestrom.ch>
 | 
			
		||||
F: src/vulkan/
 | 
			
		||||
F: include/vulkan/
 | 
			
		||||
 | 
			
		||||
VMWARE DRIVER
 | 
			
		||||
R: Brian Paul <brianp@vmware.com>
 | 
			
		||||
R: Charmaine Lee <charmainel@vmware.com>
 | 
			
		||||
F: src/gallium/drivers/svga/
 | 
			
		||||
 | 
			
		||||
VMWARE WINSYS CODE
 | 
			
		||||
R: Thomas Hellstrom <thellstrom@vmware.com>
 | 
			
		||||
R: Deepak Rawat <drawat@vmware.com>
 | 
			
		||||
F: src/gallium/winsys/svga/
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										23
									
								
								SConstruct
									
									
									
									
									
								
							
							
						
						
									
										23
									
								
								SConstruct
									
									
									
									
									
								
							@@ -20,7 +20,6 @@
 | 
			
		||||
# to get the full list of options. See scons manpage for more info.
 | 
			
		||||
#
 | 
			
		||||
 | 
			
		||||
from __future__ import print_function
 | 
			
		||||
import os
 | 
			
		||||
import os.path
 | 
			
		||||
import sys
 | 
			
		||||
@@ -67,26 +66,6 @@ else:
 | 
			
		||||
 | 
			
		||||
Help(opts.GenerateHelpText(env))
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#######################################################################
 | 
			
		||||
# Print a deprecation warning for using scons on non-windows
 | 
			
		||||
 | 
			
		||||
if common.host_platform != 'windows' and env['platform'] != 'windows':
 | 
			
		||||
    if env['force_scons']:
 | 
			
		||||
        print("WARNING: Scons is deprecated for non-windows platforms (including cygwin) "
 | 
			
		||||
              "please use meson instead.", file=sys.stderr)
 | 
			
		||||
    else:
 | 
			
		||||
        print("ERROR: Scons is deprecated for non-windows platforms (including cygwin) "
 | 
			
		||||
              "please use meson instead. If you really need to use scons you "
 | 
			
		||||
              "can add `force_scons=1` to the scons command line.", file=sys.stderr)
 | 
			
		||||
        sys.exit(1)
 | 
			
		||||
else:
 | 
			
		||||
    print("WARNING: Scons support is in the process of being deprecated on "
 | 
			
		||||
          "on windows platforms (including mingw). If you haven't already "
 | 
			
		||||
          "please try using meson for windows builds. Be sure to report any "
 | 
			
		||||
          "issues you run into", file=sys.stderr)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#######################################################################
 | 
			
		||||
# Environment setup
 | 
			
		||||
 | 
			
		||||
@@ -94,7 +73,7 @@ with open("VERSION") as f:
 | 
			
		||||
  mesa_version = f.read().strip()
 | 
			
		||||
env.Append(CPPDEFINES = [
 | 
			
		||||
    ('PACKAGE_VERSION', '\\"%s\\"' % mesa_version),
 | 
			
		||||
    ('PACKAGE_BUGREPORT', '\\"https://gitlab.freedesktop.org/mesa/mesa/issues\\"'),
 | 
			
		||||
    ('PACKAGE_BUGREPORT', '\\"https://bugs.freedesktop.org/enter_bug.cgi?product=Mesa\\"'),
 | 
			
		||||
])
 | 
			
		||||
 | 
			
		||||
# Includes
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										41
									
								
								appveyor.yml
									
									
									
									
									
								
							
							
						
						
									
										41
									
								
								appveyor.yml
									
									
									
									
									
								
							@@ -38,7 +38,6 @@ cache:
 | 
			
		||||
- '%LOCALAPPDATA%\pip\Cache -> appveyor.yml'
 | 
			
		||||
- win_flex_bison-2.5.15.zip
 | 
			
		||||
- llvm-5.0.1-msvc2017-mtd.7z
 | 
			
		||||
- subprojects\packagecache -> subprojects\*.wrap
 | 
			
		||||
 | 
			
		||||
os: Visual Studio 2017
 | 
			
		||||
 | 
			
		||||
@@ -50,21 +49,41 @@ init:
 | 
			
		||||
environment:
 | 
			
		||||
  WINFLEXBISON_VERSION: 2.5.15
 | 
			
		||||
  LLVM_ARCHIVE: llvm-5.0.1-msvc2017-mtd.7z
 | 
			
		||||
  matrix:
 | 
			
		||||
  - compiler: msvc
 | 
			
		||||
    buildsystem: scons
 | 
			
		||||
  - compiler: msvc
 | 
			
		||||
    buildsystem: meson
 | 
			
		||||
    path: C:\Python38-x64;C:\Python38-x64\Scripts;%path%
 | 
			
		||||
 | 
			
		||||
install:
 | 
			
		||||
- cmd: .appveyor\appveyor_msvc.bat install
 | 
			
		||||
# Check git config
 | 
			
		||||
- git config core.autocrlf
 | 
			
		||||
# Check pip
 | 
			
		||||
- python --version
 | 
			
		||||
- python -m pip --version
 | 
			
		||||
# Install Mako
 | 
			
		||||
- python -m pip install Mako==1.0.7
 | 
			
		||||
# Install pywin32 extensions, needed by SCons
 | 
			
		||||
- python -m pip install pypiwin32
 | 
			
		||||
# Install python wheels, necessary to install SCons via pip
 | 
			
		||||
- python -m pip install wheel
 | 
			
		||||
# Install SCons
 | 
			
		||||
- python -m pip install scons==3.0.1
 | 
			
		||||
- scons --version
 | 
			
		||||
# 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
 | 
			
		||||
# Download and extract LLVM
 | 
			
		||||
- if not exist "%LLVM_ARCHIVE%" appveyor DownloadFile "https://people.freedesktop.org/~jrfonseca/llvm/%LLVM_ARCHIVE%"
 | 
			
		||||
- 7z x -y "%LLVM_ARCHIVE%" > nul
 | 
			
		||||
- mkdir llvm\bin
 | 
			
		||||
- set LLVM=%CD%\llvm
 | 
			
		||||
 | 
			
		||||
build_script:
 | 
			
		||||
- cmd: .appveyor\appveyor_msvc.bat build_script
 | 
			
		||||
- scons -j%NUMBER_OF_PROCESSORS% MSVC_VERSION=14.1 llvm=1
 | 
			
		||||
 | 
			
		||||
after_build:
 | 
			
		||||
- scons -j%NUMBER_OF_PROCESSORS% MSVC_VERSION=14.1 llvm=1 check
 | 
			
		||||
 | 
			
		||||
test_script:
 | 
			
		||||
- cmd: .appveyor\appveyor_msvc.bat test_script
 | 
			
		||||
 | 
			
		||||
# It's possible to setup notification here, as described in
 | 
			
		||||
# http://www.appveyor.com/docs/notifications#appveyor-yml-configuration , but
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										14
									
								
								autogen.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										14
									
								
								autogen.sh
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,14 @@
 | 
			
		||||
#! /bin/sh
 | 
			
		||||
 | 
			
		||||
srcdir=`dirname "$0"`
 | 
			
		||||
test -z "$srcdir" && srcdir=.
 | 
			
		||||
 | 
			
		||||
ORIGDIR=`pwd`
 | 
			
		||||
cd "$srcdir"
 | 
			
		||||
 | 
			
		||||
autoreconf --force --verbose --install || exit 1
 | 
			
		||||
cd "$ORIGDIR" || exit $?
 | 
			
		||||
 | 
			
		||||
if test -z "$NOCONFIGURE"; then
 | 
			
		||||
    "$srcdir"/configure "$@"
 | 
			
		||||
fi
 | 
			
		||||
							
								
								
									
										3
									
								
								bin/.cherry-ignore
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								bin/.cherry-ignore
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,3 @@
 | 
			
		||||
# Both of these were already merged with different shas
 | 
			
		||||
da48cba61ef6fefb799bf96e6364b70dbf4ec712
 | 
			
		||||
c812c740e60c14060eb89db66039111881a0f42f
 | 
			
		||||
							
								
								
									
										9
									
								
								bin/.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								bin/.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,9 @@
 | 
			
		||||
config.guess
 | 
			
		||||
config.sub
 | 
			
		||||
install-sh
 | 
			
		||||
/depcomp
 | 
			
		||||
/missing
 | 
			
		||||
ylwrap
 | 
			
		||||
compile
 | 
			
		||||
ar-lib
 | 
			
		||||
/test-driver
 | 
			
		||||
							
								
								
									
										35
									
								
								bin/bugzilla_mesa.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										35
									
								
								bin/bugzilla_mesa.sh
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,35 @@
 | 
			
		||||
#!/bin/sh
 | 
			
		||||
 | 
			
		||||
# This script is used to generate the list of fixed bugs that
 | 
			
		||||
# appears in the release notes files, with HTML formatting.
 | 
			
		||||
#
 | 
			
		||||
# Note: This script could take a while until all details have
 | 
			
		||||
#       been fetched from bugzilla.
 | 
			
		||||
#
 | 
			
		||||
# Usage examples:
 | 
			
		||||
#
 | 
			
		||||
# $ bin/bugzilla_mesa.sh mesa-9.0.2..mesa-9.0.3
 | 
			
		||||
# $ bin/bugzilla_mesa.sh mesa-9.0.2..mesa-9.0.3 > bugfixes
 | 
			
		||||
# $ bin/bugzilla_mesa.sh mesa-9.0.2..mesa-9.0.3 | tee bugfixes
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# regex pattern: trim before bug number
 | 
			
		||||
trim_before='s/.*show_bug.cgi?id=\([0-9]*\).*/\1/'
 | 
			
		||||
 | 
			
		||||
# regex pattern: reconstruct the url
 | 
			
		||||
use_after='s,^,https://bugs.freedesktop.org/show_bug.cgi?id=,'
 | 
			
		||||
 | 
			
		||||
echo "<ul>"
 | 
			
		||||
echo ""
 | 
			
		||||
 | 
			
		||||
# extract fdo urls from commit log
 | 
			
		||||
git log --pretty=medium $* | grep 'bugs.freedesktop.org/show_bug' | sed -e $trim_before | sort -n -u | sed -e $use_after |\
 | 
			
		||||
while read url
 | 
			
		||||
do
 | 
			
		||||
	id=$(echo $url | cut -d'=' -f2)
 | 
			
		||||
	summary=$(wget --quiet -O - $url | grep -e '<title>.*</title>' | sed -e 's/ *<title>[0-9]\+ – \(.*\)<\/title>/\1/')
 | 
			
		||||
	echo "<li><a href=\"$url\">Bug $id</a> - $summary</li>"
 | 
			
		||||
	echo ""
 | 
			
		||||
done
 | 
			
		||||
 | 
			
		||||
echo "</ul>"
 | 
			
		||||
@@ -1,272 +0,0 @@
 | 
			
		||||
#!/usr/bin/env python3
 | 
			
		||||
# Copyright © 2019 Intel Corporation
 | 
			
		||||
 | 
			
		||||
# Permission is hereby granted, free of charge, to any person obtaining a copy
 | 
			
		||||
# of this software and associated documentation files (the "Software"), to deal
 | 
			
		||||
# in the Software without restriction, including without limitation the rights
 | 
			
		||||
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 | 
			
		||||
# copies of the Software, and to permit persons to whom the Software is
 | 
			
		||||
# furnished to do so, subject to the following conditions:
 | 
			
		||||
 | 
			
		||||
# The above copyright notice and this permission notice shall be included in
 | 
			
		||||
# all copies or substantial portions of the Software.
 | 
			
		||||
 | 
			
		||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 | 
			
		||||
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 | 
			
		||||
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 | 
			
		||||
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 | 
			
		||||
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 | 
			
		||||
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 | 
			
		||||
# SOFTWARE.
 | 
			
		||||
 | 
			
		||||
"""Generates release notes for a given version of mesa."""
 | 
			
		||||
 | 
			
		||||
import asyncio
 | 
			
		||||
import datetime
 | 
			
		||||
import os
 | 
			
		||||
import pathlib
 | 
			
		||||
import sys
 | 
			
		||||
import textwrap
 | 
			
		||||
import typing
 | 
			
		||||
import urllib.parse
 | 
			
		||||
 | 
			
		||||
import aiohttp
 | 
			
		||||
from mako.template import Template
 | 
			
		||||
from mako import exceptions
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
CURRENT_GL_VERSION = '4.6'
 | 
			
		||||
CURRENT_VK_VERSION = '1.1'
 | 
			
		||||
 | 
			
		||||
TEMPLATE = Template(textwrap.dedent("""\
 | 
			
		||||
    <%!
 | 
			
		||||
        import html
 | 
			
		||||
    %>
 | 
			
		||||
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
 | 
			
		||||
    <html lang="en">
 | 
			
		||||
    <head>
 | 
			
		||||
    <meta http-equiv="content-type" content="text/html; charset=utf-8">
 | 
			
		||||
    <title>Mesa Release Notes</title>
 | 
			
		||||
    <link rel="stylesheet" type="text/css" href="../mesa.css">
 | 
			
		||||
    </head>
 | 
			
		||||
    <body>
 | 
			
		||||
 | 
			
		||||
    <div class="header">
 | 
			
		||||
    <h1>The Mesa 3D Graphics Library</h1>
 | 
			
		||||
    </div>
 | 
			
		||||
 | 
			
		||||
    <iframe src="../contents.html"></iframe>
 | 
			
		||||
    <div class="content">
 | 
			
		||||
 | 
			
		||||
    <h1>Mesa ${next_version} Release Notes / ${today}</h1>
 | 
			
		||||
 | 
			
		||||
    <p>
 | 
			
		||||
    %if not bugfix:
 | 
			
		||||
        Mesa ${next_version} is a new development release. People who are concerned
 | 
			
		||||
        with stability and reliability should stick with a previous release or
 | 
			
		||||
        wait for Mesa ${version[:-1]}1.
 | 
			
		||||
    %else:
 | 
			
		||||
        Mesa ${next_version} is a bug fix release which fixes bugs found since the ${version} release.
 | 
			
		||||
    %endif
 | 
			
		||||
    </p>
 | 
			
		||||
    <p>
 | 
			
		||||
    Mesa ${next_version} implements the OpenGL ${gl_version} API, but the version reported by
 | 
			
		||||
    glGetString(GL_VERSION) or glGetIntegerv(GL_MAJOR_VERSION) /
 | 
			
		||||
    glGetIntegerv(GL_MINOR_VERSION) depends on the particular driver being used.
 | 
			
		||||
    Some drivers don't support all the features required in OpenGL ${gl_version}. OpenGL
 | 
			
		||||
    ${gl_version} is <strong>only</strong> available if requested at context creation.
 | 
			
		||||
    Compatibility contexts may report a lower version depending on each driver.
 | 
			
		||||
    </p>
 | 
			
		||||
    <p>
 | 
			
		||||
    Mesa ${next_version} implements the Vulkan ${vk_version} API, but the version reported by
 | 
			
		||||
    the apiVersion property of the VkPhysicalDeviceProperties struct
 | 
			
		||||
    depends on the particular driver being used.
 | 
			
		||||
    </p>
 | 
			
		||||
 | 
			
		||||
    <h2>SHA256 checksum</h2>
 | 
			
		||||
    <pre>
 | 
			
		||||
    TBD.
 | 
			
		||||
    </pre>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    <h2>New features</h2>
 | 
			
		||||
 | 
			
		||||
    <ul>
 | 
			
		||||
    %for f in features:
 | 
			
		||||
        <li>${html.escape(f)}</li>
 | 
			
		||||
    %endfor
 | 
			
		||||
    </ul>
 | 
			
		||||
 | 
			
		||||
    <h2>Bug fixes</h2>
 | 
			
		||||
 | 
			
		||||
    <ul>
 | 
			
		||||
    %for b in bugs:
 | 
			
		||||
        <li>${html.escape(b)}</li>
 | 
			
		||||
    %endfor
 | 
			
		||||
    </ul>
 | 
			
		||||
 | 
			
		||||
    <h2>Changes</h2>
 | 
			
		||||
 | 
			
		||||
    <ul>
 | 
			
		||||
    %for c, author in changes:
 | 
			
		||||
      %if author:
 | 
			
		||||
        <p>${html.escape(c)}</p>
 | 
			
		||||
      %else:
 | 
			
		||||
        <li>${html.escape(c)}</li>
 | 
			
		||||
      %endif
 | 
			
		||||
    %endfor
 | 
			
		||||
    </ul>
 | 
			
		||||
 | 
			
		||||
    </div>
 | 
			
		||||
    </body>
 | 
			
		||||
    </html>
 | 
			
		||||
    """))
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
async def gather_commits(version: str) -> str:
 | 
			
		||||
    p = await asyncio.create_subprocess_exec(
 | 
			
		||||
        'git', 'log', f'mesa-{version}..', '--grep', r'Closes: \(https\|#\).*',
 | 
			
		||||
        stdout=asyncio.subprocess.PIPE)
 | 
			
		||||
    out, _ = await p.communicate()
 | 
			
		||||
    assert p.returncode == 0, f"git log didn't work: {version}"
 | 
			
		||||
    return out.decode().strip()
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
async def gather_bugs(version: str) -> typing.List[str]:
 | 
			
		||||
    commits = await gather_commits(version)
 | 
			
		||||
 | 
			
		||||
    issues: typing.List[str] = []
 | 
			
		||||
    for commit in commits.split('\n'):
 | 
			
		||||
        sha, message = commit.split(maxsplit=1)
 | 
			
		||||
        p = await asyncio.create_subprocess_exec(
 | 
			
		||||
            'git', 'log', '--max-count', '1', r'--format=%b', sha,
 | 
			
		||||
            stdout=asyncio.subprocess.PIPE)
 | 
			
		||||
        _out, _ = await p.communicate()
 | 
			
		||||
        out = _out.decode().split('\n')
 | 
			
		||||
        for line in reversed(out):
 | 
			
		||||
            if line.startswith('Closes:'):
 | 
			
		||||
                bug = line.lstrip('Closes:').strip()
 | 
			
		||||
                break
 | 
			
		||||
        else:
 | 
			
		||||
            raise Exception('No closes found?')
 | 
			
		||||
        if bug.startswith('h'):
 | 
			
		||||
            # This means we have a bug in the form "Closes: https://..."
 | 
			
		||||
            issues.append(os.path.basename(urllib.parse.urlparse(bug).path))
 | 
			
		||||
        else:
 | 
			
		||||
            issues.append(bug.lstrip('#'))
 | 
			
		||||
 | 
			
		||||
    loop = asyncio.get_event_loop()
 | 
			
		||||
    async with aiohttp.ClientSession(loop=loop) as session:
 | 
			
		||||
        results = await asyncio.gather(*[get_bug(session, i) for i in issues])
 | 
			
		||||
    typing.cast(typing.Tuple[str, ...], results)
 | 
			
		||||
    return list(results)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
async def get_bug(session: aiohttp.ClientSession, bug_id: str) -> str:
 | 
			
		||||
    """Query gitlab to get the name of the issue that was closed."""
 | 
			
		||||
    # Mesa's gitlab id is 176,
 | 
			
		||||
    url = 'https://gitlab.freedesktop.org/api/v4/projects/176/issues'
 | 
			
		||||
    params = {'iids[]': bug_id}
 | 
			
		||||
    async with session.get(url, params=params) as response:
 | 
			
		||||
        content = await response.json()
 | 
			
		||||
    return content[0]['title']
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
async def get_shortlog(version: str) -> str:
 | 
			
		||||
    """Call git shortlog."""
 | 
			
		||||
    p = await asyncio.create_subprocess_exec('git', 'shortlog', f'mesa-{version}..',
 | 
			
		||||
                                             stdout=asyncio.subprocess.PIPE)
 | 
			
		||||
    out, _ = await p.communicate()
 | 
			
		||||
    assert p.returncode == 0, 'error getting shortlog'
 | 
			
		||||
    assert out is not None, 'just for mypy'
 | 
			
		||||
    return out.decode()
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def walk_shortlog(log: str) -> typing.Generator[typing.Tuple[str, bool], None, None]:
 | 
			
		||||
    for l in log.split('\n'):
 | 
			
		||||
        if l.startswith(' '): # this means we have a patch description
 | 
			
		||||
            yield l, False
 | 
			
		||||
        else:
 | 
			
		||||
            yield l, True
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def calculate_next_version(version: str, is_point: bool) -> str:
 | 
			
		||||
    """Calculate the version about to be released."""
 | 
			
		||||
    if '-' in version:
 | 
			
		||||
        version = version.split('-')[0]
 | 
			
		||||
    if is_point:
 | 
			
		||||
        base = version.split('.')
 | 
			
		||||
        base[2] = str(int(base[2]) + 1)
 | 
			
		||||
        return '.'.join(base)
 | 
			
		||||
    return version
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def calculate_previous_version(version: str, is_point: bool) -> str:
 | 
			
		||||
    """Calculate the previous version to compare to.
 | 
			
		||||
 | 
			
		||||
    In the case of -rc to final that verison is the previous .0 release,
 | 
			
		||||
    (19.3.0 in the case of 20.0.0, for example). for point releases that is
 | 
			
		||||
    the last point release. This value will be the same as the input value
 | 
			
		||||
    for a point release, but different for a major release.
 | 
			
		||||
    """
 | 
			
		||||
    if '-' in version:
 | 
			
		||||
        version = version.split('-')[0]
 | 
			
		||||
    if is_point:
 | 
			
		||||
        return version
 | 
			
		||||
    base = version.split('.')
 | 
			
		||||
    if base[1] == '0':
 | 
			
		||||
        base[0] = str(int(base[0]) - 1)
 | 
			
		||||
        base[1] = '3'
 | 
			
		||||
    else:
 | 
			
		||||
        base[1] = str(int(base[1]) - 1)
 | 
			
		||||
    return '.'.join(base)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def get_features(is_point_release: bool) -> typing.Generator[str, None, None]:
 | 
			
		||||
    p = pathlib.Path(__file__).parent.parent / 'docs' / 'relnotes' / 'new_features.txt'
 | 
			
		||||
    if p.exists():
 | 
			
		||||
        if is_point_release:
 | 
			
		||||
            print("WARNING: new features being introduced in a point release", file=sys.stderr)
 | 
			
		||||
        with p.open('rt') as f:
 | 
			
		||||
            for line in f:
 | 
			
		||||
                yield line
 | 
			
		||||
    else:
 | 
			
		||||
        yield "None"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
async def main() -> None:
 | 
			
		||||
    v = pathlib.Path(__file__).parent.parent / 'VERSION'
 | 
			
		||||
    with v.open('rt') as f:
 | 
			
		||||
        raw_version = f.read().strip()
 | 
			
		||||
    is_point_release = '-rc' not in raw_version
 | 
			
		||||
    assert '-devel' not in raw_version, 'Do not run this script on -devel'
 | 
			
		||||
    version = raw_version.split('-')[0]
 | 
			
		||||
    previous_version = calculate_previous_version(version, is_point_release)
 | 
			
		||||
    next_version = calculate_next_version(version, is_point_release)
 | 
			
		||||
 | 
			
		||||
    shortlog, bugs = await asyncio.gather(
 | 
			
		||||
        get_shortlog(previous_version),
 | 
			
		||||
        gather_bugs(previous_version),
 | 
			
		||||
    )
 | 
			
		||||
 | 
			
		||||
    final = pathlib.Path(__file__).parent.parent / 'docs' / 'relnotes' / f'{next_version}.html'
 | 
			
		||||
    with final.open('wt') as f:
 | 
			
		||||
        try:
 | 
			
		||||
            f.write(TEMPLATE.render(
 | 
			
		||||
                bugfix=is_point_release,
 | 
			
		||||
                bugs=bugs,
 | 
			
		||||
                changes=walk_shortlog(shortlog),
 | 
			
		||||
                features=get_features(is_point_release),
 | 
			
		||||
                gl_version=CURRENT_GL_VERSION,
 | 
			
		||||
                next_version=next_version,
 | 
			
		||||
                today=datetime.date.today(),
 | 
			
		||||
                version=previous_version,
 | 
			
		||||
                vk_version=CURRENT_VK_VERSION,
 | 
			
		||||
            ))
 | 
			
		||||
        except:
 | 
			
		||||
            print(exceptions.text_error_template().render())
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
if __name__ == "__main__":
 | 
			
		||||
    loop = asyncio.get_event_loop()
 | 
			
		||||
    loop.run_until_complete(main())
 | 
			
		||||
@@ -1,62 +0,0 @@
 | 
			
		||||
# Copyright © 2019 Intel Corporation
 | 
			
		||||
 | 
			
		||||
# Permission is hereby granted, free of charge, to any person obtaining a copy
 | 
			
		||||
# of this software and associated documentation files (the "Software"), to deal
 | 
			
		||||
# in the Software without restriction, including without limitation the rights
 | 
			
		||||
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 | 
			
		||||
# copies of the Software, and to permit persons to whom the Software is
 | 
			
		||||
# furnished to do so, subject to the following conditions:
 | 
			
		||||
 | 
			
		||||
# The above copyright notice and this permission notice shall be included in
 | 
			
		||||
# all copies or substantial portions of the Software.
 | 
			
		||||
 | 
			
		||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 | 
			
		||||
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 | 
			
		||||
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 | 
			
		||||
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 | 
			
		||||
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 | 
			
		||||
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 | 
			
		||||
# SOFTWARE.
 | 
			
		||||
 | 
			
		||||
from unittest import mock
 | 
			
		||||
 | 
			
		||||
import pytest
 | 
			
		||||
 | 
			
		||||
from .gen_release_notes import *
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@pytest.mark.parametrize(
 | 
			
		||||
    'current, is_point, expected',
 | 
			
		||||
    [
 | 
			
		||||
        ('19.2.0', True, '19.2.1'),
 | 
			
		||||
        ('19.3.6', True, '19.3.7'),
 | 
			
		||||
        ('20.0.0-rc4', False, '20.0.0'),
 | 
			
		||||
    ])
 | 
			
		||||
def test_next_version(current: str, is_point: bool, expected: str) -> None:
 | 
			
		||||
    assert calculate_next_version(current, is_point) == expected
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@pytest.mark.parametrize(
 | 
			
		||||
    'current, is_point, expected',
 | 
			
		||||
    [
 | 
			
		||||
        ('19.3.6', True, '19.3.6'),
 | 
			
		||||
        ('20.0.0-rc4', False, '19.3.0'),
 | 
			
		||||
    ])
 | 
			
		||||
def test_previous_version(current: str, is_point: bool, expected: str) -> None:
 | 
			
		||||
    assert calculate_previous_version(current, is_point) == expected
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@pytest.mark.asyncio
 | 
			
		||||
async def test_get_shortlog():
 | 
			
		||||
    # Certainly not perfect, but it's something
 | 
			
		||||
    version = '19.2.0'
 | 
			
		||||
    out = await get_shortlog(version)
 | 
			
		||||
    assert out
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@pytest.mark.asyncio
 | 
			
		||||
async def test_gather_commits():
 | 
			
		||||
    # Certainly not perfect, but it's something
 | 
			
		||||
    version = '19.2.0'
 | 
			
		||||
    out = await gather_commits(version)
 | 
			
		||||
    assert out
 | 
			
		||||
@@ -32,7 +32,7 @@ is_sha_nomination()
 | 
			
		||||
{
 | 
			
		||||
	fixes=`git show --pretty=medium -s $1 | tr -d "\n" | \
 | 
			
		||||
		sed -e 's/'"$2"'/\nfixes:/Ig' | \
 | 
			
		||||
		grep -Eo 'fixes:[a-f0-9]{4,40}'`
 | 
			
		||||
		grep -Eo 'fixes:[a-f0-9]{8,40}'`
 | 
			
		||||
 | 
			
		||||
	fixes_count=`echo "$fixes" | grep "fixes:" | wc -l`
 | 
			
		||||
	if test $fixes_count -eq 0; then
 | 
			
		||||
@@ -143,7 +143,7 @@ do
 | 
			
		||||
	esac
 | 
			
		||||
 | 
			
		||||
	printf "[ %8s ] " "$tag"
 | 
			
		||||
	git --no-pager show --no-patch --pretty=oneline $sha
 | 
			
		||||
	git --no-pager show --no-patch --oneline $sha
 | 
			
		||||
done
 | 
			
		||||
 | 
			
		||||
rm -f already_picked
 | 
			
		||||
 
 | 
			
		||||
@@ -1,6 +1,5 @@
 | 
			
		||||
#!/usr/bin/env python3
 | 
			
		||||
# encoding=utf-8
 | 
			
		||||
# Copyright 2017-2018 Intel Corporation
 | 
			
		||||
# Copyright © 2017-2018 Intel Corporation
 | 
			
		||||
 | 
			
		||||
# Permission is hereby granted, free of charge, to any person obtaining a copy
 | 
			
		||||
# of this software and associated documentation files (the "Software"), to deal
 | 
			
		||||
@@ -25,6 +24,7 @@
 | 
			
		||||
from __future__ import print_function
 | 
			
		||||
import argparse
 | 
			
		||||
import os
 | 
			
		||||
import shutil
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def main():
 | 
			
		||||
@@ -35,11 +35,7 @@ def main():
 | 
			
		||||
    args = parser.parse_args()
 | 
			
		||||
 | 
			
		||||
    if os.path.isabs(args.libdir):
 | 
			
		||||
        destdir = os.environ.get('DESTDIR')
 | 
			
		||||
        if destdir:
 | 
			
		||||
            to = os.path.join(destdir, args.libdir[1:])
 | 
			
		||||
        else:
 | 
			
		||||
            to = args.libdir
 | 
			
		||||
        to = os.path.join(os.environ.get('DESTDIR', '/'), args.libdir[1:])
 | 
			
		||||
    else:
 | 
			
		||||
        to = os.path.join(os.environ['MESON_INSTALL_DESTDIR_PREFIX'], args.libdir)
 | 
			
		||||
 | 
			
		||||
@@ -49,6 +45,7 @@ def main():
 | 
			
		||||
        if os.path.lexists(to):
 | 
			
		||||
            os.unlink(to)
 | 
			
		||||
        os.makedirs(to)
 | 
			
		||||
    shutil.copy(args.megadriver, master)
 | 
			
		||||
 | 
			
		||||
    for driver in args.drivers:
 | 
			
		||||
        abs_driver = os.path.join(to, driver)
 | 
			
		||||
@@ -70,14 +67,7 @@ def main():
 | 
			
		||||
                name, ext = os.path.splitext(name)
 | 
			
		||||
        finally:
 | 
			
		||||
            os.chdir(ret)
 | 
			
		||||
 | 
			
		||||
    # Remove meson-created master .so and symlinks
 | 
			
		||||
    os.unlink(master)
 | 
			
		||||
    name, ext = os.path.splitext(master)
 | 
			
		||||
    while ext != '.so':
 | 
			
		||||
        if os.path.lexists(name):
 | 
			
		||||
            os.unlink(name)
 | 
			
		||||
        name, ext = os.path.splitext(name)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
if __name__ == '__main__':
 | 
			
		||||
 
 | 
			
		||||
@@ -1,63 +0,0 @@
 | 
			
		||||
#!/usr/bin/env python3
 | 
			
		||||
 | 
			
		||||
from os import get_terminal_size
 | 
			
		||||
from textwrap import wrap
 | 
			
		||||
from mesonbuild import coredata
 | 
			
		||||
from mesonbuild import optinterpreter
 | 
			
		||||
 | 
			
		||||
(COLUMNS, _) = get_terminal_size()
 | 
			
		||||
 | 
			
		||||
def describe_option(option_name: str, option_default_value: str,
 | 
			
		||||
                    option_type: str, option_message: str) -> None:
 | 
			
		||||
    print('name:    ' + option_name)
 | 
			
		||||
    print('default: ' + option_default_value)
 | 
			
		||||
    print('type:    ' + option_type)
 | 
			
		||||
    for line in wrap(option_message, width=COLUMNS - 9):
 | 
			
		||||
        print('         ' + line)
 | 
			
		||||
    print('---')
 | 
			
		||||
 | 
			
		||||
oi = optinterpreter.OptionInterpreter('')
 | 
			
		||||
oi.process('meson_options.txt')
 | 
			
		||||
 | 
			
		||||
for (name, value) in oi.options.items():
 | 
			
		||||
    if isinstance(value, coredata.UserStringOption):
 | 
			
		||||
        describe_option(name,
 | 
			
		||||
                        value.value,
 | 
			
		||||
                        'string',
 | 
			
		||||
                        "You can type what you want, but make sure it makes sense")
 | 
			
		||||
    elif isinstance(value, coredata.UserBooleanOption):
 | 
			
		||||
        describe_option(name,
 | 
			
		||||
                        'true' if value.value else 'false',
 | 
			
		||||
                        'boolean',
 | 
			
		||||
                        "You can set it to 'true' or 'false'")
 | 
			
		||||
    elif isinstance(value, coredata.UserIntegerOption):
 | 
			
		||||
        describe_option(name,
 | 
			
		||||
                        str(value.value),
 | 
			
		||||
                        'integer',
 | 
			
		||||
                        "You can set it to any integer value between '{}' and '{}'".format(value.min_value, value.max_value))
 | 
			
		||||
    elif isinstance(value, coredata.UserUmaskOption):
 | 
			
		||||
        describe_option(name,
 | 
			
		||||
                        str(value.value),
 | 
			
		||||
                        'umask',
 | 
			
		||||
                        "You can set it to 'preserve' or a value between '0000' and '0777'")
 | 
			
		||||
    elif isinstance(value, coredata.UserComboOption):
 | 
			
		||||
        choices = '[' + ', '.join(["'" + v + "'" for v in value.choices]) + ']'
 | 
			
		||||
        describe_option(name,
 | 
			
		||||
                        value.value,
 | 
			
		||||
                        'combo',
 | 
			
		||||
                        "You can set it to any one of those values: " + choices)
 | 
			
		||||
    elif isinstance(value, coredata.UserArrayOption):
 | 
			
		||||
        choices = '[' + ', '.join(["'" + v + "'" for v in value.choices]) + ']'
 | 
			
		||||
        value = '[' + ', '.join(["'" + v + "'" for v in value.value]) + ']'
 | 
			
		||||
        describe_option(name,
 | 
			
		||||
                        value,
 | 
			
		||||
                        'array',
 | 
			
		||||
                        "You can set it to one or more of those values: " + choices)
 | 
			
		||||
    elif isinstance(value, coredata.UserFeatureOption):
 | 
			
		||||
        describe_option(name,
 | 
			
		||||
                        value.value,
 | 
			
		||||
                        'feature',
 | 
			
		||||
                        "You can set it to 'auto', 'enabled', or 'disabled'")
 | 
			
		||||
    else:
 | 
			
		||||
        print(name + ' is an option of a type unknown to this script')
 | 
			
		||||
        print('---')
 | 
			
		||||
@@ -19,5 +19,3 @@
 | 
			
		||||
# SOFTWARE.
 | 
			
		||||
 | 
			
		||||
git_sha1_gen_py = files('git_sha1_gen.py')
 | 
			
		||||
symbols_check = find_program('symbols-check.py')
 | 
			
		||||
install_megadrivers_py = find_program('install_megadrivers.py')
 | 
			
		||||
 
 | 
			
		||||
@@ -1,33 +0,0 @@
 | 
			
		||||
#!/usr/bin/env python3
 | 
			
		||||
# Copyright © 2019-2020 Intel Corporation
 | 
			
		||||
 | 
			
		||||
# Permission is hereby granted, free of charge, to any person obtaining a copy
 | 
			
		||||
# of this software and associated documentation files (the "Software"), to deal
 | 
			
		||||
# in the Software without restriction, including without limitation the rights
 | 
			
		||||
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 | 
			
		||||
# copies of the Software, and to permit persons to whom the Software is
 | 
			
		||||
# furnished to do so, subject to the following conditions:
 | 
			
		||||
 | 
			
		||||
# The above copyright notice and this permission notice shall be included in
 | 
			
		||||
# all copies or substantial portions of the Software.
 | 
			
		||||
 | 
			
		||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 | 
			
		||||
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 | 
			
		||||
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 | 
			
		||||
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 | 
			
		||||
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 | 
			
		||||
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 | 
			
		||||
# SOFTWARE.
 | 
			
		||||
 | 
			
		||||
import asyncio
 | 
			
		||||
 | 
			
		||||
import urwid
 | 
			
		||||
 | 
			
		||||
from pick.ui import UI, PALETTE
 | 
			
		||||
 | 
			
		||||
if __name__ == "__main__":
 | 
			
		||||
    u = UI()
 | 
			
		||||
    evl = urwid.AsyncioEventLoop(loop=asyncio.get_event_loop())
 | 
			
		||||
    loop = urwid.MainLoop(u.render(), PALETTE, event_loop=evl)
 | 
			
		||||
    u.mainloop = loop
 | 
			
		||||
    loop.run()
 | 
			
		||||
							
								
								
									
										367
									
								
								bin/pick/core.py
									
									
									
									
									
								
							
							
						
						
									
										367
									
								
								bin/pick/core.py
									
									
									
									
									
								
							@@ -1,367 +0,0 @@
 | 
			
		||||
# Copyright © 2019-2020 Intel Corporation
 | 
			
		||||
 | 
			
		||||
# Permission is hereby granted, free of charge, to any person obtaining a copy
 | 
			
		||||
# of this software and associated documentation files (the "Software"), to deal
 | 
			
		||||
# in the Software without restriction, including without limitation the rights
 | 
			
		||||
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 | 
			
		||||
# copies of the Software, and to permit persons to whom the Software is
 | 
			
		||||
# furnished to do so, subject to the following conditions:
 | 
			
		||||
 | 
			
		||||
# The above copyright notice and this permission notice shall be included in
 | 
			
		||||
# all copies or substantial portions of the Software.
 | 
			
		||||
 | 
			
		||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 | 
			
		||||
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 | 
			
		||||
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 | 
			
		||||
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 | 
			
		||||
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 | 
			
		||||
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 | 
			
		||||
# SOFTWARE.
 | 
			
		||||
 | 
			
		||||
"""Core data structures and routines for pick."""
 | 
			
		||||
 | 
			
		||||
import asyncio
 | 
			
		||||
import enum
 | 
			
		||||
import json
 | 
			
		||||
import pathlib
 | 
			
		||||
import re
 | 
			
		||||
import typing
 | 
			
		||||
 | 
			
		||||
import attr
 | 
			
		||||
 | 
			
		||||
if typing.TYPE_CHECKING:
 | 
			
		||||
    from .ui import UI
 | 
			
		||||
 | 
			
		||||
    import typing_extensions
 | 
			
		||||
 | 
			
		||||
    class CommitDict(typing_extensions.TypedDict):
 | 
			
		||||
 | 
			
		||||
        sha: str
 | 
			
		||||
        description: str
 | 
			
		||||
        nomintated: bool
 | 
			
		||||
        nomination_type: typing.Optional[int]
 | 
			
		||||
        resolution: typing.Optional[int]
 | 
			
		||||
        master_sha: typing.Optional[str]
 | 
			
		||||
 | 
			
		||||
IS_FIX = re.compile(r'^\s*fixes:\s*([a-f0-9]{6,40})', flags=re.MULTILINE | re.IGNORECASE)
 | 
			
		||||
# FIXME: I dislike the duplication in this regex, but I couldn't get it to work otherwise
 | 
			
		||||
IS_CC = re.compile(r'^\s*cc:\s*["\']?([0-9]{2}\.[0-9])?["\']?\s*["\']?([0-9]{2}\.[0-9])?["\']?\s*\<?mesa-stable',
 | 
			
		||||
                   flags=re.MULTILINE | re.IGNORECASE)
 | 
			
		||||
IS_REVERT = re.compile(r'This reverts commit ([0-9a-f]{40})')
 | 
			
		||||
 | 
			
		||||
# XXX: hack
 | 
			
		||||
SEM = asyncio.Semaphore(50)
 | 
			
		||||
 | 
			
		||||
COMMIT_LOCK = asyncio.Lock()
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class PickUIException(Exception):
 | 
			
		||||
    pass
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@enum.unique
 | 
			
		||||
class NominationType(enum.Enum):
 | 
			
		||||
 | 
			
		||||
    CC = 0
 | 
			
		||||
    FIXES = 1
 | 
			
		||||
    REVERT = 2
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@enum.unique
 | 
			
		||||
class Resolution(enum.Enum):
 | 
			
		||||
 | 
			
		||||
    UNRESOLVED = 0
 | 
			
		||||
    MERGED = 1
 | 
			
		||||
    DENOMINATED = 2
 | 
			
		||||
    BACKPORTED = 3
 | 
			
		||||
    NOTNEEDED = 4
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
async def commit_state(*, amend: bool = False, message: str = 'Update') -> None:
 | 
			
		||||
    """Commit the .pick_status.json file."""
 | 
			
		||||
    f = pathlib.Path(__file__).parent.parent.parent / '.pick_status.json'
 | 
			
		||||
    async with COMMIT_LOCK:
 | 
			
		||||
        p = await asyncio.create_subprocess_exec(
 | 
			
		||||
            'git', 'add', f.as_posix(),
 | 
			
		||||
            stdout=asyncio.subprocess.DEVNULL,
 | 
			
		||||
            stderr=asyncio.subprocess.DEVNULL,
 | 
			
		||||
        )
 | 
			
		||||
        v = await p.wait()
 | 
			
		||||
        if v != 0:
 | 
			
		||||
            return False
 | 
			
		||||
 | 
			
		||||
        if amend:
 | 
			
		||||
            cmd = ['--amend', '--no-edit']
 | 
			
		||||
        else:
 | 
			
		||||
            cmd = ['--message', f'.pick_status.json: {message}']
 | 
			
		||||
        p = await asyncio.create_subprocess_exec(
 | 
			
		||||
            'git', 'commit', *cmd,
 | 
			
		||||
            stdout=asyncio.subprocess.DEVNULL,
 | 
			
		||||
            stderr=asyncio.subprocess.DEVNULL,
 | 
			
		||||
        )
 | 
			
		||||
        v = await p.wait()
 | 
			
		||||
        if v != 0:
 | 
			
		||||
            return False
 | 
			
		||||
    return True
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@attr.s(slots=True)
 | 
			
		||||
class Commit:
 | 
			
		||||
 | 
			
		||||
    sha: str = attr.ib()
 | 
			
		||||
    description: str = attr.ib()
 | 
			
		||||
    nominated: bool = attr.ib(False)
 | 
			
		||||
    nomination_type: typing.Optional[NominationType] = attr.ib(None)
 | 
			
		||||
    resolution: Resolution = attr.ib(Resolution.UNRESOLVED)
 | 
			
		||||
    master_sha: typing.Optional[str] = attr.ib(None)
 | 
			
		||||
    because_sha: typing.Optional[str] = attr.ib(None)
 | 
			
		||||
 | 
			
		||||
    def to_json(self) -> 'CommitDict':
 | 
			
		||||
        d: typing.Dict[str, typing.Any] = attr.asdict(self)
 | 
			
		||||
        if self.nomination_type is not None:
 | 
			
		||||
            d['nomination_type'] = self.nomination_type.value
 | 
			
		||||
        if self.resolution is not None:
 | 
			
		||||
            d['resolution'] = self.resolution.value
 | 
			
		||||
        return typing.cast('CommitDict', d)
 | 
			
		||||
 | 
			
		||||
    @classmethod
 | 
			
		||||
    def from_json(cls, data: 'CommitDict') -> 'Commit':
 | 
			
		||||
        c = cls(data['sha'], data['description'], data['nominated'], master_sha=data['master_sha'], because_sha=data['because_sha'])
 | 
			
		||||
        if data['nomination_type'] is not None:
 | 
			
		||||
            c.nomination_type = NominationType(data['nomination_type'])
 | 
			
		||||
        if data['resolution'] is not None:
 | 
			
		||||
            c.resolution = Resolution(data['resolution'])
 | 
			
		||||
        return c
 | 
			
		||||
 | 
			
		||||
    async def apply(self, ui: 'UI') -> typing.Tuple[bool, str]:
 | 
			
		||||
        # FIXME: This isn't really enough if we fail to cherry-pick because the
 | 
			
		||||
        # git tree will still be dirty
 | 
			
		||||
        async with COMMIT_LOCK:
 | 
			
		||||
            p = await asyncio.create_subprocess_exec(
 | 
			
		||||
                'git', 'cherry-pick', '-x', self.sha,
 | 
			
		||||
                stdout=asyncio.subprocess.DEVNULL,
 | 
			
		||||
                stderr=asyncio.subprocess.PIPE,
 | 
			
		||||
            )
 | 
			
		||||
            _, err = await p.communicate()
 | 
			
		||||
 | 
			
		||||
        if p.returncode != 0:
 | 
			
		||||
            return (False, err)
 | 
			
		||||
 | 
			
		||||
        self.resolution = Resolution.MERGED
 | 
			
		||||
        await ui.feedback(f'{self.sha} ({self.description}) applied successfully')
 | 
			
		||||
 | 
			
		||||
        # Append the changes to the .pickstatus.json file
 | 
			
		||||
        ui.save()
 | 
			
		||||
        v = await commit_state(amend=True)
 | 
			
		||||
        return (v, '')
 | 
			
		||||
 | 
			
		||||
    async def abort_cherry(self, ui: 'UI', err: str) -> None:
 | 
			
		||||
        await ui.feedback(f'{self.sha} ({self.description}) failed to apply\n{err}')
 | 
			
		||||
        async with COMMIT_LOCK:
 | 
			
		||||
            p = await asyncio.create_subprocess_exec(
 | 
			
		||||
                'git', 'cherry-pick', '--abort',
 | 
			
		||||
                stdout=asyncio.subprocess.DEVNULL,
 | 
			
		||||
                stderr=asyncio.subprocess.DEVNULL,
 | 
			
		||||
            )
 | 
			
		||||
            r = await p.wait()
 | 
			
		||||
        await ui.feedback(f'{"Successfully" if r == 0 else "Failed to"} abort cherry-pick.')
 | 
			
		||||
 | 
			
		||||
    async def denominate(self, ui: 'UI') -> bool:
 | 
			
		||||
        self.resolution = Resolution.DENOMINATED
 | 
			
		||||
        ui.save()
 | 
			
		||||
        v = await commit_state(message=f'Mark {self.sha} as denominated')
 | 
			
		||||
        assert v
 | 
			
		||||
        await ui.feedback(f'{self.sha} ({self.description}) denominated successfully')
 | 
			
		||||
        return True
 | 
			
		||||
 | 
			
		||||
    async def backport(self, ui: 'UI') -> bool:
 | 
			
		||||
        self.resolution = Resolution.BACKPORTED
 | 
			
		||||
        ui.save()
 | 
			
		||||
        v = await commit_state(message=f'Mark {self.sha} as backported')
 | 
			
		||||
        assert v
 | 
			
		||||
        await ui.feedback(f'{self.sha} ({self.description}) backported successfully')
 | 
			
		||||
        return True
 | 
			
		||||
 | 
			
		||||
    async def resolve(self, ui: 'UI') -> None:
 | 
			
		||||
        self.resolution = Resolution.MERGED
 | 
			
		||||
        ui.save()
 | 
			
		||||
        v = await commit_state(amend=True)
 | 
			
		||||
        assert v
 | 
			
		||||
        await ui.feedback(f'{self.sha} ({self.description}) committed successfully')
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
async def get_new_commits(sha: str) -> typing.List[typing.Tuple[str, str]]:
 | 
			
		||||
    # TODO: config file that points to the upstream branch
 | 
			
		||||
    p = await asyncio.create_subprocess_exec(
 | 
			
		||||
        'git', 'log', '--pretty=oneline', f'{sha}..master',
 | 
			
		||||
        stdout=asyncio.subprocess.PIPE,
 | 
			
		||||
        stderr=asyncio.subprocess.DEVNULL)
 | 
			
		||||
    out, _ = await p.communicate()
 | 
			
		||||
    assert p.returncode == 0, f"git log didn't work: {sha}"
 | 
			
		||||
    return list(split_commit_list(out.decode().strip()))
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def split_commit_list(commits: str) -> typing.Generator[typing.Tuple[str, str], None, None]:
 | 
			
		||||
    if not commits:
 | 
			
		||||
        return
 | 
			
		||||
    for line in commits.split('\n'):
 | 
			
		||||
        v = tuple(line.split(' ', 1))
 | 
			
		||||
        assert len(v) == 2, 'this is really just for mypy'
 | 
			
		||||
        yield typing.cast(typing.Tuple[str, str], v)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
async def is_commit_in_branch(sha: str) -> bool:
 | 
			
		||||
    async with SEM:
 | 
			
		||||
        p = await asyncio.create_subprocess_exec(
 | 
			
		||||
            'git', 'merge-base', '--is-ancestor', sha, 'HEAD',
 | 
			
		||||
            stdout=asyncio.subprocess.DEVNULL,
 | 
			
		||||
            stderr=asyncio.subprocess.DEVNULL,
 | 
			
		||||
        )
 | 
			
		||||
        await p.wait()
 | 
			
		||||
    return p.returncode == 0
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
async def full_sha(sha: str) -> str:
 | 
			
		||||
    async with SEM:
 | 
			
		||||
        p = await asyncio.create_subprocess_exec(
 | 
			
		||||
            'git', 'rev-parse', sha,
 | 
			
		||||
            stdout=asyncio.subprocess.PIPE,
 | 
			
		||||
            stderr=asyncio.subprocess.DEVNULL,
 | 
			
		||||
        )
 | 
			
		||||
        out, _ = await p.communicate()
 | 
			
		||||
    if p.returncode:
 | 
			
		||||
        raise PickUIException(f'Invalid Sha {sha}')
 | 
			
		||||
    return out.decode().strip()
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
async def resolve_nomination(commit: 'Commit', version: str) -> 'Commit':
 | 
			
		||||
    async with SEM:
 | 
			
		||||
        p = await asyncio.create_subprocess_exec(
 | 
			
		||||
            'git', 'log', '--pretty=medium', '-1', commit.sha,
 | 
			
		||||
            stdout=asyncio.subprocess.PIPE,
 | 
			
		||||
            stderr=asyncio.subprocess.DEVNULL,
 | 
			
		||||
        )
 | 
			
		||||
        _out, _ = await p.communicate()
 | 
			
		||||
        assert p.returncode == 0, f'git log for {commit.sha} failed'
 | 
			
		||||
    out = _out.decode()
 | 
			
		||||
 | 
			
		||||
    # We give presedence to fixes and cc tags over revert tags.
 | 
			
		||||
    # XXX: not having the wallrus operator available makes me sad :=
 | 
			
		||||
    m = IS_FIX.search(out)
 | 
			
		||||
    if m:
 | 
			
		||||
        # We set the nomination_type and because_sha here so that we can later
 | 
			
		||||
        # check to see if this fixes another staged commit.
 | 
			
		||||
        try:
 | 
			
		||||
            commit.because_sha = fixed = await full_sha(m.group(1))
 | 
			
		||||
        except PickUIException:
 | 
			
		||||
            pass
 | 
			
		||||
        else:
 | 
			
		||||
            commit.nomination_type = NominationType.FIXES
 | 
			
		||||
            if await is_commit_in_branch(fixed):
 | 
			
		||||
                commit.nominated = True
 | 
			
		||||
                return commit
 | 
			
		||||
 | 
			
		||||
    m = IS_CC.search(out)
 | 
			
		||||
    if m:
 | 
			
		||||
        if m.groups() == (None, None) or version in m.groups():
 | 
			
		||||
            commit.nominated = True
 | 
			
		||||
            commit.nomination_type = NominationType.CC
 | 
			
		||||
            return commit
 | 
			
		||||
 | 
			
		||||
    m = IS_REVERT.search(out)
 | 
			
		||||
    if m:
 | 
			
		||||
        # See comment for IS_FIX path
 | 
			
		||||
        try:
 | 
			
		||||
            commit.because_sha = reverted = await full_sha(m.group(1))
 | 
			
		||||
        except PickUIException:
 | 
			
		||||
            pass
 | 
			
		||||
        else:
 | 
			
		||||
            commit.nomination_type = NominationType.REVERT
 | 
			
		||||
            if await is_commit_in_branch(reverted):
 | 
			
		||||
                commit.nominated = True
 | 
			
		||||
                return commit
 | 
			
		||||
 | 
			
		||||
    return commit
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
async def resolve_fixes(commits: typing.List['Commit'], previous: typing.List['Commit']) -> None:
 | 
			
		||||
    """Determine if any of the undecided commits fix/revert a staged commit.
 | 
			
		||||
 | 
			
		||||
    The are still needed if they apply to a commit that is staged for
 | 
			
		||||
    inclusion, but not yet included.
 | 
			
		||||
 | 
			
		||||
    This must be done in order, because a commit 3 might fix commit 2 which
 | 
			
		||||
    fixes commit 1.
 | 
			
		||||
    """
 | 
			
		||||
    shas: typing.Set[str] = set(c.sha for c in previous if c.nominated)
 | 
			
		||||
    assert None not in shas, 'None in shas'
 | 
			
		||||
 | 
			
		||||
    for commit in reversed(commits):
 | 
			
		||||
        if not commit.nominated and commit.nomination_type is NominationType.FIXES:
 | 
			
		||||
            commit.nominated = commit.because_sha in shas
 | 
			
		||||
 | 
			
		||||
        if commit.nominated:
 | 
			
		||||
            shas.add(commit.sha)
 | 
			
		||||
 | 
			
		||||
    for commit in commits:
 | 
			
		||||
        if (commit.nomination_type is NominationType.REVERT and
 | 
			
		||||
                commit.because_sha in shas):
 | 
			
		||||
            for oldc in reversed(commits):
 | 
			
		||||
                if oldc.sha == commit.because_sha:
 | 
			
		||||
                    # In this case a commit that hasn't yet been applied is
 | 
			
		||||
                    # reverted, we don't want to apply that commit at all
 | 
			
		||||
                    oldc.nominated = False
 | 
			
		||||
                    oldc.resolution = Resolution.DENOMINATED
 | 
			
		||||
                    commit.nominated = False
 | 
			
		||||
                    commit.resolution = Resolution.DENOMINATED
 | 
			
		||||
                    shas.remove(commit.because_sha)
 | 
			
		||||
                    break
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
async def gather_commits(version: str, previous: typing.List['Commit'],
 | 
			
		||||
                         new: typing.List[typing.Tuple[str, str]], cb) -> typing.List['Commit']:
 | 
			
		||||
    # We create an array of the final size up front, then we pass that array
 | 
			
		||||
    # to the "inner" co-routine, which is turned into a list of tasks and
 | 
			
		||||
    # collected by asyncio.gather. We do this to allow the tasks to be
 | 
			
		||||
    # asyncrounously gathered, but to also ensure that the commits list remains
 | 
			
		||||
    # in order.
 | 
			
		||||
    commits = [None] * len(new)
 | 
			
		||||
    tasks = []
 | 
			
		||||
 | 
			
		||||
    async def inner(commit: 'Commit', version: str, commits: typing.List['Commit'],
 | 
			
		||||
                    index: int, cb) -> None:
 | 
			
		||||
        commits[index] = await resolve_nomination(commit, version)
 | 
			
		||||
        cb()
 | 
			
		||||
 | 
			
		||||
    for i, (sha, desc) in enumerate(new):
 | 
			
		||||
        tasks.append(asyncio.ensure_future(
 | 
			
		||||
            inner(Commit(sha, desc), version, commits, i, cb)))
 | 
			
		||||
 | 
			
		||||
    await asyncio.gather(*tasks)
 | 
			
		||||
    assert None not in commits
 | 
			
		||||
 | 
			
		||||
    await resolve_fixes(commits, previous)
 | 
			
		||||
 | 
			
		||||
    for commit in commits:
 | 
			
		||||
        if commit.resolution is Resolution.UNRESOLVED and not commit.nominated:
 | 
			
		||||
            commit.resolution = Resolution.NOTNEEDED
 | 
			
		||||
 | 
			
		||||
    return commits
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def load() -> typing.List['Commit']:
 | 
			
		||||
    p = pathlib.Path(__file__).parent.parent.parent / '.pick_status.json'
 | 
			
		||||
    if not p.exists():
 | 
			
		||||
        return []
 | 
			
		||||
    with p.open('r') as f:
 | 
			
		||||
        raw = json.load(f)
 | 
			
		||||
        return [Commit.from_json(c) for c in raw]
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def save(commits: typing.Iterable['Commit']) -> None:
 | 
			
		||||
    p = pathlib.Path(__file__).parent.parent.parent / '.pick_status.json'
 | 
			
		||||
    commits = list(commits)
 | 
			
		||||
    with p.open('wt') as f:
 | 
			
		||||
        json.dump([c.to_json() for c in commits], f, indent=4)
 | 
			
		||||
 | 
			
		||||
    asyncio.ensure_future(commit_state(message=f'Update to {commits[0].sha}'))
 | 
			
		||||
@@ -1,470 +0,0 @@
 | 
			
		||||
# Copyright © 2019-2020 Intel Corporation
 | 
			
		||||
 | 
			
		||||
# Permission is hereby granted, free of charge, to any person obtaining a copy
 | 
			
		||||
# of this software and associated documentation files (the "Software"), to deal
 | 
			
		||||
# in the Software without restriction, including without limitation the rights
 | 
			
		||||
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 | 
			
		||||
# copies of the Software, and to permit persons to whom the Software is
 | 
			
		||||
# furnished to do so, subject to the following conditions:
 | 
			
		||||
 | 
			
		||||
# The above copyright notice and this permission notice shall be included in
 | 
			
		||||
# all copies or substantial portions of the Software.
 | 
			
		||||
 | 
			
		||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 | 
			
		||||
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 | 
			
		||||
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 | 
			
		||||
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 | 
			
		||||
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 | 
			
		||||
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 | 
			
		||||
# SOFTWARE.
 | 
			
		||||
 | 
			
		||||
"""Tests for pick's core data structures and routines."""
 | 
			
		||||
 | 
			
		||||
from unittest import mock
 | 
			
		||||
import textwrap
 | 
			
		||||
import typing
 | 
			
		||||
 | 
			
		||||
import attr
 | 
			
		||||
import pytest
 | 
			
		||||
 | 
			
		||||
from . import core
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class TestCommit:
 | 
			
		||||
 | 
			
		||||
    @pytest.fixture
 | 
			
		||||
    def unnominated_commit(self) -> 'core.Commit':
 | 
			
		||||
        return core.Commit('abc123', 'sub: A commit', master_sha='45678')
 | 
			
		||||
 | 
			
		||||
    @pytest.fixture
 | 
			
		||||
    def nominated_commit(self) -> 'core.Commit':
 | 
			
		||||
        return core.Commit('abc123', 'sub: A commit', True,
 | 
			
		||||
                           core.NominationType.CC, core.Resolution.UNRESOLVED)
 | 
			
		||||
 | 
			
		||||
    class TestToJson:
 | 
			
		||||
 | 
			
		||||
        def test_not_nominated(self, unnominated_commit: 'core.Commit'):
 | 
			
		||||
            c = unnominated_commit
 | 
			
		||||
            v = c.to_json()
 | 
			
		||||
            assert v == {'sha': 'abc123', 'description': 'sub: A commit', 'nominated': False,
 | 
			
		||||
                         'nomination_type': None, 'resolution': core.Resolution.UNRESOLVED.value,
 | 
			
		||||
                         'master_sha': '45678', 'because_sha': None}
 | 
			
		||||
 | 
			
		||||
        def test_nominated(self, nominated_commit: 'core.Commit'):
 | 
			
		||||
            c = nominated_commit
 | 
			
		||||
            v = c.to_json()
 | 
			
		||||
            assert v == {'sha': 'abc123',
 | 
			
		||||
                         'description': 'sub: A commit',
 | 
			
		||||
                         'nominated': True,
 | 
			
		||||
                         'nomination_type': core.NominationType.CC.value,
 | 
			
		||||
                         'resolution': core.Resolution.UNRESOLVED.value,
 | 
			
		||||
                         'master_sha': None,
 | 
			
		||||
                         'because_sha': None}
 | 
			
		||||
 | 
			
		||||
    class TestFromJson:
 | 
			
		||||
 | 
			
		||||
        def test_not_nominated(self, unnominated_commit: 'core.Commit'):
 | 
			
		||||
            c = unnominated_commit
 | 
			
		||||
            v = c.to_json()
 | 
			
		||||
            c2 = core.Commit.from_json(v)
 | 
			
		||||
            assert c == c2
 | 
			
		||||
 | 
			
		||||
        def test_nominated(self, nominated_commit: 'core.Commit'):
 | 
			
		||||
            c = nominated_commit
 | 
			
		||||
            v = c.to_json()
 | 
			
		||||
            c2 = core.Commit.from_json(v)
 | 
			
		||||
            assert c == c2
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class TestRE:
 | 
			
		||||
 | 
			
		||||
    """Tests for the regular expressions used to identify commits."""
 | 
			
		||||
 | 
			
		||||
    class TestFixes:
 | 
			
		||||
 | 
			
		||||
        def test_simple(self):
 | 
			
		||||
            message = textwrap.dedent("""\
 | 
			
		||||
                etnaviv: fix vertex buffer state emission for single stream GPUs
 | 
			
		||||
 | 
			
		||||
                GPUs with a single supported vertex stream must use the single state
 | 
			
		||||
                address to program the stream.
 | 
			
		||||
 | 
			
		||||
                Fixes: 3d09bb390a39 (etnaviv: GC7000: State changes for HALTI3..5)
 | 
			
		||||
                Signed-off-by: Lucas Stach <l.stach@pengutronix.de>
 | 
			
		||||
                Reviewed-by: Jonathan Marek <jonathan@marek.ca>
 | 
			
		||||
            """)
 | 
			
		||||
 | 
			
		||||
            m = core.IS_FIX.search(message)
 | 
			
		||||
            assert m is not None
 | 
			
		||||
            assert m.group(1) == '3d09bb390a39'
 | 
			
		||||
 | 
			
		||||
    class TestCC:
 | 
			
		||||
 | 
			
		||||
        def test_single_branch(self):
 | 
			
		||||
            """Tests commit meant for a single branch, ie, 19.1"""
 | 
			
		||||
            message = textwrap.dedent("""\
 | 
			
		||||
                radv: fix DCC fast clear code for intensity formats
 | 
			
		||||
 | 
			
		||||
                This fixes a rendering issue with DiRT 4 on GFX10. Only GFX10 was
 | 
			
		||||
                affected because intensity formats are different.
 | 
			
		||||
 | 
			
		||||
                Cc: 19.2 <mesa-stable@lists.freedesktop.org>
 | 
			
		||||
                Closes: https://gitlab.freedesktop.org/mesa/mesa/issues/1923
 | 
			
		||||
                Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
 | 
			
		||||
                Reviewed-by: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl>
 | 
			
		||||
            """)
 | 
			
		||||
 | 
			
		||||
            m = core.IS_CC.search(message)
 | 
			
		||||
            assert m is not None
 | 
			
		||||
            assert m.group(1) == '19.2'
 | 
			
		||||
 | 
			
		||||
        def test_multiple_branches(self):
 | 
			
		||||
            """Tests commit with more than one branch specified"""
 | 
			
		||||
            message = textwrap.dedent("""\
 | 
			
		||||
                radeonsi: enable zerovram for Rocket League
 | 
			
		||||
 | 
			
		||||
                Fixes corruption on game startup.
 | 
			
		||||
                Closes: https://gitlab.freedesktop.org/mesa/mesa/issues/1888
 | 
			
		||||
 | 
			
		||||
                Cc: 19.1 19.2 <mesa-stable@lists.freedesktop.org>
 | 
			
		||||
                Reviewed-by: Pierre-Eric Pelloux-Prayer <pierre-eric.pelloux-prayer@amd.com>
 | 
			
		||||
            """)
 | 
			
		||||
 | 
			
		||||
            m = core.IS_CC.search(message)
 | 
			
		||||
            assert m is not None
 | 
			
		||||
            assert m.group(1) == '19.1'
 | 
			
		||||
            assert m.group(2) == '19.2'
 | 
			
		||||
 | 
			
		||||
        def test_no_branch(self):
 | 
			
		||||
            """Tests commit with no branch specification"""
 | 
			
		||||
            message = textwrap.dedent("""\
 | 
			
		||||
                anv/android: fix images created with external format support
 | 
			
		||||
 | 
			
		||||
                This fixes a case where user first creates image and then later binds it
 | 
			
		||||
                with memory created from AHW buffer.
 | 
			
		||||
 | 
			
		||||
                Cc: <mesa-stable@lists.freedesktop.org>
 | 
			
		||||
                Signed-off-by: Tapani Pälli <tapani.palli@intel.com>
 | 
			
		||||
                Reviewed-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com>
 | 
			
		||||
            """)
 | 
			
		||||
 | 
			
		||||
            m = core.IS_CC.search(message)
 | 
			
		||||
            assert m is not None
 | 
			
		||||
 | 
			
		||||
        def test_quotes(self):
 | 
			
		||||
            """Tests commit with quotes around the versions"""
 | 
			
		||||
            message = textwrap.dedent("""\
 | 
			
		||||
                 anv: Always fill out the AUX table even if CCS is disabled
 | 
			
		||||
 | 
			
		||||
                 Cc: "20.0" mesa-stable@lists.freedesktop.org
 | 
			
		||||
                 Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
 | 
			
		||||
                 Tested-by: Marge Bot <https://gitlab.freedesktop.org/mesa/mesa/merge_requests/3454>
 | 
			
		||||
                 Part-of: <https://gitlab.freedesktop.org/mesa/mesa/merge_requests/3454>
 | 
			
		||||
            """)
 | 
			
		||||
 | 
			
		||||
            m = core.IS_CC.search(message)
 | 
			
		||||
            assert m is not None
 | 
			
		||||
            assert m.group(1) == '20.0'
 | 
			
		||||
 | 
			
		||||
        def test_multiple_quotes(self):
 | 
			
		||||
            """Tests commit with quotes around the versions"""
 | 
			
		||||
            message = textwrap.dedent("""\
 | 
			
		||||
                 anv: Always fill out the AUX table even if CCS is disabled
 | 
			
		||||
 | 
			
		||||
                 Cc: "20.0" "20.1" mesa-stable@lists.freedesktop.org
 | 
			
		||||
                 Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
 | 
			
		||||
                 Tested-by: Marge Bot <https://gitlab.freedesktop.org/mesa/mesa/merge_requests/3454>
 | 
			
		||||
                 Part-of: <https://gitlab.freedesktop.org/mesa/mesa/merge_requests/3454>
 | 
			
		||||
            """)
 | 
			
		||||
 | 
			
		||||
            m = core.IS_CC.search(message)
 | 
			
		||||
            assert m is not None
 | 
			
		||||
            assert m.group(1) == '20.0'
 | 
			
		||||
            assert m.group(2) == '20.1'
 | 
			
		||||
 | 
			
		||||
        def test_single_quotes(self):
 | 
			
		||||
            """Tests commit with quotes around the versions"""
 | 
			
		||||
            message = textwrap.dedent("""\
 | 
			
		||||
                 anv: Always fill out the AUX table even if CCS is disabled
 | 
			
		||||
 | 
			
		||||
                 Cc: '20.0' mesa-stable@lists.freedesktop.org
 | 
			
		||||
                 Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
 | 
			
		||||
                 Tested-by: Marge Bot <https://gitlab.freedesktop.org/mesa/mesa/merge_requests/3454>
 | 
			
		||||
                 Part-of: <https://gitlab.freedesktop.org/mesa/mesa/merge_requests/3454>
 | 
			
		||||
            """)
 | 
			
		||||
 | 
			
		||||
            m = core.IS_CC.search(message)
 | 
			
		||||
            assert m is not None
 | 
			
		||||
            assert m.group(1) == '20.0'
 | 
			
		||||
 | 
			
		||||
        def test_multiple_single_quotes(self):
 | 
			
		||||
            """Tests commit with quotes around the versions"""
 | 
			
		||||
            message = textwrap.dedent("""\
 | 
			
		||||
                 anv: Always fill out the AUX table even if CCS is disabled
 | 
			
		||||
 | 
			
		||||
                 Cc: '20.0' '20.1' mesa-stable@lists.freedesktop.org
 | 
			
		||||
                 Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
 | 
			
		||||
                 Tested-by: Marge Bot <https://gitlab.freedesktop.org/mesa/mesa/merge_requests/3454>
 | 
			
		||||
                 Part-of: <https://gitlab.freedesktop.org/mesa/mesa/merge_requests/3454>
 | 
			
		||||
            """)
 | 
			
		||||
 | 
			
		||||
            m = core.IS_CC.search(message)
 | 
			
		||||
            assert m is not None
 | 
			
		||||
            assert m.group(1) == '20.0'
 | 
			
		||||
            assert m.group(2) == '20.1'
 | 
			
		||||
 | 
			
		||||
    class TestRevert:
 | 
			
		||||
 | 
			
		||||
        def test_simple(self):
 | 
			
		||||
            message = textwrap.dedent("""\
 | 
			
		||||
                Revert "radv: do not emit PKT3_CONTEXT_CONTROL with AMDGPU 3.6.0+"
 | 
			
		||||
 | 
			
		||||
                This reverts commit 2ca8629fa9b303e24783b76a7b3b0c2513e32fbd.
 | 
			
		||||
 | 
			
		||||
                This was initially ported from RadeonSI, but in the meantime it has
 | 
			
		||||
                been reverted because it might hang. Be conservative and re-introduce
 | 
			
		||||
                this packet emission.
 | 
			
		||||
 | 
			
		||||
                Unfortunately this doesn't fix anything known.
 | 
			
		||||
 | 
			
		||||
                Cc: 19.2 <mesa-stable@lists.freedesktop.org>
 | 
			
		||||
                Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
 | 
			
		||||
                Reviewed-by: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl>
 | 
			
		||||
            """)
 | 
			
		||||
 | 
			
		||||
            m = core.IS_REVERT.search(message)
 | 
			
		||||
            assert m is not None
 | 
			
		||||
            assert m.group(1) == '2ca8629fa9b303e24783b76a7b3b0c2513e32fbd'
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class TestResolveNomination:
 | 
			
		||||
 | 
			
		||||
    @attr.s(slots=True)
 | 
			
		||||
    class FakeSubprocess:
 | 
			
		||||
 | 
			
		||||
        """A fake asyncio.subprocess like classe for use with mock."""
 | 
			
		||||
 | 
			
		||||
        out: typing.Optional[bytes] = attr.ib(None)
 | 
			
		||||
        returncode: int = attr.ib(0)
 | 
			
		||||
 | 
			
		||||
        async def mock(self, *_, **__):
 | 
			
		||||
            """A dirtly little helper for mocking."""
 | 
			
		||||
            return self
 | 
			
		||||
 | 
			
		||||
        async def communicate(self) -> typing.Tuple[bytes, bytes]:
 | 
			
		||||
            assert self.out is not None
 | 
			
		||||
            return self.out, b''
 | 
			
		||||
 | 
			
		||||
        async def wait(self) -> int:
 | 
			
		||||
            return self.returncode
 | 
			
		||||
 | 
			
		||||
    @staticmethod
 | 
			
		||||
    async def return_true(*_, **__) -> bool:
 | 
			
		||||
        return True
 | 
			
		||||
 | 
			
		||||
    @staticmethod
 | 
			
		||||
    async def return_false(*_, **__) -> bool:
 | 
			
		||||
        return False
 | 
			
		||||
 | 
			
		||||
    @pytest.mark.asyncio
 | 
			
		||||
    async def test_fix_is_nominated(self):
 | 
			
		||||
        s = self.FakeSubprocess(b'Fixes: 3d09bb390a39 (etnaviv: GC7000: State changes for HALTI3..5)')
 | 
			
		||||
        c = core.Commit('abcdef1234567890', 'a commit')
 | 
			
		||||
 | 
			
		||||
        with mock.patch('bin.pick.core.asyncio.create_subprocess_exec', s.mock):
 | 
			
		||||
            with mock.patch('bin.pick.core.is_commit_in_branch', self.return_true):
 | 
			
		||||
                await core.resolve_nomination(c, '')
 | 
			
		||||
 | 
			
		||||
        assert c.nominated
 | 
			
		||||
        assert c.nomination_type is core.NominationType.FIXES
 | 
			
		||||
 | 
			
		||||
    @pytest.mark.asyncio
 | 
			
		||||
    async def test_fix_is_not_nominated(self):
 | 
			
		||||
        s = self.FakeSubprocess(b'Fixes: 3d09bb390a39 (etnaviv: GC7000: State changes for HALTI3..5)')
 | 
			
		||||
        c = core.Commit('abcdef1234567890', 'a commit')
 | 
			
		||||
 | 
			
		||||
        with mock.patch('bin.pick.core.asyncio.create_subprocess_exec', s.mock):
 | 
			
		||||
            with mock.patch('bin.pick.core.is_commit_in_branch', self.return_false):
 | 
			
		||||
                await core.resolve_nomination(c, '')
 | 
			
		||||
 | 
			
		||||
        assert not c.nominated
 | 
			
		||||
        assert c.nomination_type is core.NominationType.FIXES
 | 
			
		||||
 | 
			
		||||
    @pytest.mark.asyncio
 | 
			
		||||
    async def test_cc_is_nominated(self):
 | 
			
		||||
        s = self.FakeSubprocess(b'Cc: 16.2 <mesa-stable@lists.freedesktop.org>')
 | 
			
		||||
        c = core.Commit('abcdef1234567890', 'a commit')
 | 
			
		||||
 | 
			
		||||
        with mock.patch('bin.pick.core.asyncio.create_subprocess_exec', s.mock):
 | 
			
		||||
            await core.resolve_nomination(c, '16.2')
 | 
			
		||||
 | 
			
		||||
        assert c.nominated
 | 
			
		||||
        assert c.nomination_type is core.NominationType.CC
 | 
			
		||||
 | 
			
		||||
    @pytest.mark.asyncio
 | 
			
		||||
    async def test_cc_is_nominated2(self):
 | 
			
		||||
        s = self.FakeSubprocess(b'Cc: mesa-stable@lists.freedesktop.org')
 | 
			
		||||
        c = core.Commit('abcdef1234567890', 'a commit')
 | 
			
		||||
 | 
			
		||||
        with mock.patch('bin.pick.core.asyncio.create_subprocess_exec', s.mock):
 | 
			
		||||
            await core.resolve_nomination(c, '16.2')
 | 
			
		||||
 | 
			
		||||
        assert c.nominated
 | 
			
		||||
        assert c.nomination_type is core.NominationType.CC
 | 
			
		||||
 | 
			
		||||
    @pytest.mark.asyncio
 | 
			
		||||
    async def test_cc_is_not_nominated(self):
 | 
			
		||||
        s = self.FakeSubprocess(b'Cc: 16.2 <mesa-stable@lists.freedesktop.org>')
 | 
			
		||||
        c = core.Commit('abcdef1234567890', 'a commit')
 | 
			
		||||
 | 
			
		||||
        with mock.patch('bin.pick.core.asyncio.create_subprocess_exec', s.mock):
 | 
			
		||||
            await core.resolve_nomination(c, '16.1')
 | 
			
		||||
 | 
			
		||||
        assert not c.nominated
 | 
			
		||||
        assert c.nomination_type is None
 | 
			
		||||
 | 
			
		||||
    @pytest.mark.asyncio
 | 
			
		||||
    async def test_revert_is_nominated(self):
 | 
			
		||||
        s = self.FakeSubprocess(b'This reverts commit 1234567890123456789012345678901234567890.')
 | 
			
		||||
        c = core.Commit('abcdef1234567890', 'a commit')
 | 
			
		||||
 | 
			
		||||
        with mock.patch('bin.pick.core.asyncio.create_subprocess_exec', s.mock):
 | 
			
		||||
            with mock.patch('bin.pick.core.is_commit_in_branch', self.return_true):
 | 
			
		||||
                await core.resolve_nomination(c, '')
 | 
			
		||||
 | 
			
		||||
        assert c.nominated
 | 
			
		||||
        assert c.nomination_type is core.NominationType.REVERT
 | 
			
		||||
 | 
			
		||||
    @pytest.mark.asyncio
 | 
			
		||||
    async def test_revert_is_not_nominated(self):
 | 
			
		||||
        s = self.FakeSubprocess(b'This reverts commit 1234567890123456789012345678901234567890.')
 | 
			
		||||
        c = core.Commit('abcdef1234567890', 'a commit')
 | 
			
		||||
 | 
			
		||||
        with mock.patch('bin.pick.core.asyncio.create_subprocess_exec', s.mock):
 | 
			
		||||
            with mock.patch('bin.pick.core.is_commit_in_branch', self.return_false):
 | 
			
		||||
                await core.resolve_nomination(c, '')
 | 
			
		||||
 | 
			
		||||
        assert not c.nominated
 | 
			
		||||
        assert c.nomination_type is core.NominationType.REVERT
 | 
			
		||||
 | 
			
		||||
    @pytest.mark.asyncio
 | 
			
		||||
    async def test_is_fix_and_cc(self):
 | 
			
		||||
        s = self.FakeSubprocess(
 | 
			
		||||
            b'Fixes: 3d09bb390a39 (etnaviv: GC7000: State changes for HALTI3..5)\n'
 | 
			
		||||
            b'Cc: 16.1 <mesa-stable@lists.freedesktop.org>'
 | 
			
		||||
        )
 | 
			
		||||
        c = core.Commit('abcdef1234567890', 'a commit')
 | 
			
		||||
 | 
			
		||||
        with mock.patch('bin.pick.core.asyncio.create_subprocess_exec', s.mock):
 | 
			
		||||
            with mock.patch('bin.pick.core.is_commit_in_branch', self.return_true):
 | 
			
		||||
                await core.resolve_nomination(c, '16.1')
 | 
			
		||||
 | 
			
		||||
        assert c.nominated
 | 
			
		||||
        assert c.nomination_type is core.NominationType.FIXES
 | 
			
		||||
 | 
			
		||||
    @pytest.mark.asyncio
 | 
			
		||||
    async def test_is_fix_and_revert(self):
 | 
			
		||||
        s = self.FakeSubprocess(
 | 
			
		||||
            b'Fixes: 3d09bb390a39 (etnaviv: GC7000: State changes for HALTI3..5)\n'
 | 
			
		||||
            b'This reverts commit 1234567890123456789012345678901234567890.'
 | 
			
		||||
        )
 | 
			
		||||
        c = core.Commit('abcdef1234567890', 'a commit')
 | 
			
		||||
 | 
			
		||||
        with mock.patch('bin.pick.core.asyncio.create_subprocess_exec', s.mock):
 | 
			
		||||
            with mock.patch('bin.pick.core.is_commit_in_branch', self.return_true):
 | 
			
		||||
                await core.resolve_nomination(c, '16.1')
 | 
			
		||||
 | 
			
		||||
        assert c.nominated
 | 
			
		||||
        assert c.nomination_type is core.NominationType.FIXES
 | 
			
		||||
 | 
			
		||||
    @pytest.mark.asyncio
 | 
			
		||||
    async def test_is_cc_and_revert(self):
 | 
			
		||||
        s = self.FakeSubprocess(
 | 
			
		||||
            b'This reverts commit 1234567890123456789012345678901234567890.\n'
 | 
			
		||||
            b'Cc: 16.1 <mesa-stable@lists.freedesktop.org>'
 | 
			
		||||
        )
 | 
			
		||||
        c = core.Commit('abcdef1234567890', 'a commit')
 | 
			
		||||
 | 
			
		||||
        with mock.patch('bin.pick.core.asyncio.create_subprocess_exec', s.mock):
 | 
			
		||||
            with mock.patch('bin.pick.core.is_commit_in_branch', self.return_true):
 | 
			
		||||
                await core.resolve_nomination(c, '16.1')
 | 
			
		||||
 | 
			
		||||
        assert c.nominated
 | 
			
		||||
        assert c.nomination_type is core.NominationType.CC
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class TestResolveFixes:
 | 
			
		||||
 | 
			
		||||
    @pytest.mark.asyncio
 | 
			
		||||
    async def test_in_new(self):
 | 
			
		||||
        """Because commit abcd is nominated, so f123 should be as well."""
 | 
			
		||||
        c = [
 | 
			
		||||
            core.Commit('f123', 'desc', nomination_type=core.NominationType.FIXES, because_sha='abcd'),
 | 
			
		||||
            core.Commit('abcd', 'desc', True),
 | 
			
		||||
        ]
 | 
			
		||||
        await core.resolve_fixes(c, [])
 | 
			
		||||
        assert c[1].nominated
 | 
			
		||||
 | 
			
		||||
    @pytest.mark.asyncio
 | 
			
		||||
    async def test_not_in_new(self):
 | 
			
		||||
        """Because commit abcd is not nominated, commit f123 shouldn't be either."""
 | 
			
		||||
        c = [
 | 
			
		||||
            core.Commit('f123', 'desc', nomination_type=core.NominationType.FIXES, because_sha='abcd'),
 | 
			
		||||
            core.Commit('abcd', 'desc'),
 | 
			
		||||
        ]
 | 
			
		||||
        await core.resolve_fixes(c, [])
 | 
			
		||||
        assert not c[0].nominated
 | 
			
		||||
 | 
			
		||||
    @pytest.mark.asyncio
 | 
			
		||||
    async def test_in_previous(self):
 | 
			
		||||
        """Because commit abcd is nominated, so f123 should be as well."""
 | 
			
		||||
        p = [
 | 
			
		||||
            core.Commit('abcd', 'desc', True),
 | 
			
		||||
        ]
 | 
			
		||||
        c = [
 | 
			
		||||
            core.Commit('f123', 'desc', nomination_type=core.NominationType.FIXES, because_sha='abcd'),
 | 
			
		||||
        ]
 | 
			
		||||
        await core.resolve_fixes(c, p)
 | 
			
		||||
        assert c[0].nominated
 | 
			
		||||
 | 
			
		||||
    @pytest.mark.asyncio
 | 
			
		||||
    async def test_not_in_previous(self):
 | 
			
		||||
        """Because commit abcd is not nominated, commit f123 shouldn't be either."""
 | 
			
		||||
        p = [
 | 
			
		||||
            core.Commit('abcd', 'desc'),
 | 
			
		||||
        ]
 | 
			
		||||
        c = [
 | 
			
		||||
            core.Commit('f123', 'desc', nomination_type=core.NominationType.FIXES, because_sha='abcd'),
 | 
			
		||||
        ]
 | 
			
		||||
        await core.resolve_fixes(c, p)
 | 
			
		||||
        assert not c[0].nominated
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class TestIsCommitInBranch:
 | 
			
		||||
 | 
			
		||||
    @pytest.mark.asyncio
 | 
			
		||||
    async def test_no(self):
 | 
			
		||||
        # Hopefully this is never true?
 | 
			
		||||
        value = await core.is_commit_in_branch('ffffffffffffffffffffffffffffff')
 | 
			
		||||
        assert not value
 | 
			
		||||
 | 
			
		||||
    @pytest.mark.asyncio
 | 
			
		||||
    async def test_yes(self):
 | 
			
		||||
        # This commit is from 2000, it better always be in the branch
 | 
			
		||||
        value = await core.is_commit_in_branch('88f3b89a2cb77766d2009b9868c44e03abe2dbb2')
 | 
			
		||||
        assert value
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class TestFullSha:
 | 
			
		||||
 | 
			
		||||
    @pytest.mark.asyncio
 | 
			
		||||
    async def test_basic(self):
 | 
			
		||||
        # This commit is from 2000, it better always be in the branch
 | 
			
		||||
        value = await core.full_sha('88f3b89a2cb777')
 | 
			
		||||
        assert value
 | 
			
		||||
 | 
			
		||||
    @pytest.mark.asyncio
 | 
			
		||||
    async def test_invalid(self):
 | 
			
		||||
        # This commit is from 2000, it better always be in the branch
 | 
			
		||||
        with pytest.raises(core.PickUIException):
 | 
			
		||||
            await core.full_sha('fffffffffffffffffffffffffffffffffff')
 | 
			
		||||
							
								
								
									
										259
									
								
								bin/pick/ui.py
									
									
									
									
									
								
							
							
						
						
									
										259
									
								
								bin/pick/ui.py
									
									
									
									
									
								
							@@ -1,259 +0,0 @@
 | 
			
		||||
# Copyright © 2020-2020 Intel Corporation
 | 
			
		||||
 | 
			
		||||
# Permission is hereby granted, free of charge, to any person obtaining a copy
 | 
			
		||||
# of this software and associated documentation files (the "Software"), to deal
 | 
			
		||||
# in the Software without restriction, including without limitation the rights
 | 
			
		||||
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 | 
			
		||||
# copies of the Software, and to permit persons to whom the Software is
 | 
			
		||||
# furnished to do so, subject to the following conditions:
 | 
			
		||||
 | 
			
		||||
# The above copyright notice and this permission notice shall be included in
 | 
			
		||||
# all copies or substantial portions of the Software.
 | 
			
		||||
 | 
			
		||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 | 
			
		||||
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 | 
			
		||||
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 | 
			
		||||
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 | 
			
		||||
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 | 
			
		||||
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 | 
			
		||||
# SOFTWARE.
 | 
			
		||||
 | 
			
		||||
"""Urwid UI for pick script."""
 | 
			
		||||
 | 
			
		||||
import asyncio
 | 
			
		||||
import functools
 | 
			
		||||
import itertools
 | 
			
		||||
import textwrap
 | 
			
		||||
import typing
 | 
			
		||||
 | 
			
		||||
import attr
 | 
			
		||||
import urwid
 | 
			
		||||
 | 
			
		||||
from . import core
 | 
			
		||||
 | 
			
		||||
if typing.TYPE_CHECKING:
 | 
			
		||||
    WidgetType = typing.TypeVar('WidgetType', bound=urwid.Widget)
 | 
			
		||||
 | 
			
		||||
PALETTE = [
 | 
			
		||||
    ('a', 'black', 'light gray'),
 | 
			
		||||
    ('b', 'black', 'dark red'),
 | 
			
		||||
    ('bg', 'black', 'dark blue'),
 | 
			
		||||
    ('reversed', 'standout', ''),
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class RootWidget(urwid.Frame):
 | 
			
		||||
 | 
			
		||||
    def __init__(self, *args, ui: 'UI' = None, **kwargs):
 | 
			
		||||
        super().__init__(*args, **kwargs)
 | 
			
		||||
        assert ui is not None
 | 
			
		||||
        self.ui = ui
 | 
			
		||||
 | 
			
		||||
    def keypress(self, size: int, key: str) -> typing.Optional[str]:
 | 
			
		||||
        if key == 'q':
 | 
			
		||||
            raise urwid.ExitMainLoop()
 | 
			
		||||
        elif key == 'u':
 | 
			
		||||
            asyncio.ensure_future(self.ui.update())
 | 
			
		||||
        elif key == 'a':
 | 
			
		||||
            self.ui.add()
 | 
			
		||||
        else:
 | 
			
		||||
            return super().keypress(size, key)
 | 
			
		||||
        return None
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class CommitWidget(urwid.Text):
 | 
			
		||||
 | 
			
		||||
    # urwid.Text is normally not interactable, this is required to tell urwid
 | 
			
		||||
    # to use our keypress method
 | 
			
		||||
    _selectable = True
 | 
			
		||||
 | 
			
		||||
    def __init__(self, ui: 'UI', commit: 'core.Commit'):
 | 
			
		||||
        super().__init__(commit.description)
 | 
			
		||||
        self.ui = ui
 | 
			
		||||
        self.commit = commit
 | 
			
		||||
 | 
			
		||||
    async def apply(self) -> None:
 | 
			
		||||
        result, err = await self.commit.apply(self.ui)
 | 
			
		||||
        if not result:
 | 
			
		||||
            self.ui.chp_failed(self, err)
 | 
			
		||||
        else:
 | 
			
		||||
            self.ui.remove_commit(self)
 | 
			
		||||
 | 
			
		||||
    async def denominate(self) -> None:
 | 
			
		||||
        await self.commit.denominate(self.ui)
 | 
			
		||||
        self.ui.remove_commit(self)
 | 
			
		||||
 | 
			
		||||
    async def backport(self) -> None:
 | 
			
		||||
        await self.commit.backport(self.ui)
 | 
			
		||||
        self.ui.remove_commit(self)
 | 
			
		||||
 | 
			
		||||
    def keypress(self, size: int, key: str) -> typing.Optional[str]:
 | 
			
		||||
        if key == 'c':
 | 
			
		||||
            asyncio.ensure_future(self.apply())
 | 
			
		||||
        elif key == 'd':
 | 
			
		||||
            asyncio.ensure_future(self.denominate())
 | 
			
		||||
        elif key == 'b':
 | 
			
		||||
            asyncio.ensure_future(self.backport())
 | 
			
		||||
        else:
 | 
			
		||||
            return key
 | 
			
		||||
        return None
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@attr.s(slots=True)
 | 
			
		||||
class UI:
 | 
			
		||||
 | 
			
		||||
    """Main management object.
 | 
			
		||||
 | 
			
		||||
    :previous_commits: A list of commits to master since this branch was created
 | 
			
		||||
    :new_commits: Commits added to master since the last time this script was run
 | 
			
		||||
    """
 | 
			
		||||
 | 
			
		||||
    commit_list: typing.List['urwid.Button'] = attr.ib(factory=lambda: urwid.SimpleFocusListWalker([]), init=False)
 | 
			
		||||
    feedback_box: typing.List['urwid.Text'] = attr.ib(factory=lambda: urwid.SimpleFocusListWalker([]), init=False)
 | 
			
		||||
    header: 'urwid.Text' = attr.ib(factory=lambda: urwid.Text('Mesa Stable Picker', align='center'), init=False)
 | 
			
		||||
    body: 'urwid.Columns' = attr.ib(attr.Factory(lambda s: s._make_body(), True), init=False)
 | 
			
		||||
    footer: 'urwid.Columns' = attr.ib(attr.Factory(lambda s: s._make_footer(), True), init=False)
 | 
			
		||||
    root: RootWidget = attr.ib(attr.Factory(lambda s: s._make_root(), True), init=False)
 | 
			
		||||
    mainloop: urwid.MainLoop = attr.ib(None, init=False)
 | 
			
		||||
 | 
			
		||||
    previous_commits: typing.List['core.Commit'] = attr.ib(factory=list, init=False)
 | 
			
		||||
    new_commits: typing.List['core.Commit'] = attr.ib(factory=list, init=False)
 | 
			
		||||
 | 
			
		||||
    def _make_body(self) -> 'urwid.Columns':
 | 
			
		||||
        commits = urwid.ListBox(self.commit_list)
 | 
			
		||||
        feedback = urwid.ListBox(self.feedback_box)
 | 
			
		||||
        return urwid.Columns([commits, feedback])
 | 
			
		||||
 | 
			
		||||
    def _make_footer(self) -> 'urwid.Columns':
 | 
			
		||||
        body = [
 | 
			
		||||
            urwid.Text('[U]pdate'),
 | 
			
		||||
            urwid.Text('[Q]uit'),
 | 
			
		||||
            urwid.Text('[C]herry Pick'),
 | 
			
		||||
            urwid.Text('[D]enominate'),
 | 
			
		||||
            urwid.Text('[B]ackport'),
 | 
			
		||||
            urwid.Text('[A]pply additional patch')
 | 
			
		||||
        ]
 | 
			
		||||
        return urwid.Columns(body)
 | 
			
		||||
 | 
			
		||||
    def _make_root(self) -> 'RootWidget':
 | 
			
		||||
        return RootWidget(self.body, self.header, self.footer, 'body', ui=self)
 | 
			
		||||
 | 
			
		||||
    def render(self) -> 'WidgetType':
 | 
			
		||||
        asyncio.ensure_future(self.update())
 | 
			
		||||
        return self.root
 | 
			
		||||
 | 
			
		||||
    def load(self) -> None:
 | 
			
		||||
        self.previous_commits = core.load()
 | 
			
		||||
 | 
			
		||||
    async def update(self) -> None:
 | 
			
		||||
        self.load()
 | 
			
		||||
        with open('VERSION', 'r') as f:
 | 
			
		||||
            version = f.read().strip()[:4]
 | 
			
		||||
        if self.previous_commits:
 | 
			
		||||
            sha = self.previous_commits[0].sha
 | 
			
		||||
        else:
 | 
			
		||||
            sha = f'{version}-branchpoint'
 | 
			
		||||
 | 
			
		||||
        new_commits = await core.get_new_commits(sha)
 | 
			
		||||
 | 
			
		||||
        if new_commits:
 | 
			
		||||
            pb = urwid.ProgressBar('a', 'b', done=len(new_commits))
 | 
			
		||||
            o = self.mainloop.widget
 | 
			
		||||
            self.mainloop.widget = urwid.Overlay(
 | 
			
		||||
                urwid.Filler(urwid.LineBox(pb)), o, 'center', ('relative', 50), 'middle', ('relative', 50))
 | 
			
		||||
            self.new_commits = await core.gather_commits(
 | 
			
		||||
                version, self.previous_commits, new_commits,
 | 
			
		||||
                lambda: pb.set_completion(pb.current + 1))
 | 
			
		||||
            self.mainloop.widget = o
 | 
			
		||||
 | 
			
		||||
        for commit in reversed(list(itertools.chain(self.new_commits, self.previous_commits))):
 | 
			
		||||
            if commit.nominated and commit.resolution is core.Resolution.UNRESOLVED:
 | 
			
		||||
                b = urwid.AttrMap(CommitWidget(self, commit), None, focus_map='reversed')
 | 
			
		||||
                self.commit_list.append(b)
 | 
			
		||||
        self.save()
 | 
			
		||||
 | 
			
		||||
    async def feedback(self, text: str) -> None:
 | 
			
		||||
        self.feedback_box.append(urwid.AttrMap(urwid.Text(text), None))
 | 
			
		||||
 | 
			
		||||
    def remove_commit(self, commit: CommitWidget) -> None:
 | 
			
		||||
        for i, c in enumerate(self.commit_list):
 | 
			
		||||
            if c.base_widget is commit:
 | 
			
		||||
                del self.commit_list[i]
 | 
			
		||||
                break
 | 
			
		||||
 | 
			
		||||
    def save(self):
 | 
			
		||||
        core.save(itertools.chain(self.new_commits, self.previous_commits))
 | 
			
		||||
 | 
			
		||||
    def add(self) -> None:
 | 
			
		||||
        """Add an additional commit which isn't nominated."""
 | 
			
		||||
        o = self.mainloop.widget
 | 
			
		||||
 | 
			
		||||
        def reset_cb(_) -> None:
 | 
			
		||||
            self.mainloop.widget = o
 | 
			
		||||
 | 
			
		||||
        async def apply_cb(edit: urwid.Edit) -> None:
 | 
			
		||||
            text: str = edit.get_edit_text()
 | 
			
		||||
 | 
			
		||||
            # In case the text is empty
 | 
			
		||||
            if not text:
 | 
			
		||||
                return
 | 
			
		||||
 | 
			
		||||
            sha = await core.full_sha(text)
 | 
			
		||||
            for c in reversed(list(itertools.chain(self.new_commits, self.previous_commits))):
 | 
			
		||||
                if c.sha == sha:
 | 
			
		||||
                    commit = c
 | 
			
		||||
                    break
 | 
			
		||||
            else:
 | 
			
		||||
                raise RuntimeError(f"Couldn't find {sha}")
 | 
			
		||||
 | 
			
		||||
            await commit.apply(self)
 | 
			
		||||
 | 
			
		||||
        q = urwid.Edit("Comit sha\n")
 | 
			
		||||
        ok_btn = urwid.Button('Ok')
 | 
			
		||||
        urwid.connect_signal(ok_btn, 'click', lambda _: asyncio.ensure_future(apply_cb(q)))
 | 
			
		||||
        urwid.connect_signal(ok_btn, 'click', reset_cb)
 | 
			
		||||
 | 
			
		||||
        can_btn = urwid.Button('Cancel')
 | 
			
		||||
        urwid.connect_signal(can_btn, 'click', reset_cb)
 | 
			
		||||
 | 
			
		||||
        cols = urwid.Columns([ok_btn, can_btn])
 | 
			
		||||
        pile = urwid.Pile([q, cols])
 | 
			
		||||
        box = urwid.LineBox(pile)
 | 
			
		||||
 | 
			
		||||
        self.mainloop.widget = urwid.Overlay(
 | 
			
		||||
            urwid.Filler(box), o, 'center', ('relative', 50), 'middle', ('relative', 50)
 | 
			
		||||
        )
 | 
			
		||||
 | 
			
		||||
    def chp_failed(self, commit: 'CommitWidget', err: str) -> None:
 | 
			
		||||
        o = self.mainloop.widget
 | 
			
		||||
 | 
			
		||||
        def reset_cb(_) -> None:
 | 
			
		||||
            self.mainloop.widget = o
 | 
			
		||||
 | 
			
		||||
        t = urwid.Text(textwrap.dedent(f"""
 | 
			
		||||
            Failed to apply {commit.commit.sha} {commit.commit.description} with the following error:
 | 
			
		||||
 | 
			
		||||
            {err}
 | 
			
		||||
 | 
			
		||||
            You can either cancel, or resolve the conflicts, commit the
 | 
			
		||||
            changes and select ok."""))
 | 
			
		||||
 | 
			
		||||
        can_btn = urwid.Button('Cancel')
 | 
			
		||||
        urwid.connect_signal(can_btn, 'click', reset_cb)
 | 
			
		||||
        urwid.connect_signal(
 | 
			
		||||
            can_btn, 'click', lambda _: asyncio.ensure_future(commit.commit.abort_cherry(self, err)))
 | 
			
		||||
 | 
			
		||||
        ok_btn = urwid.Button('Ok')
 | 
			
		||||
        urwid.connect_signal(ok_btn, 'click', reset_cb)
 | 
			
		||||
        urwid.connect_signal(
 | 
			
		||||
            ok_btn, 'click', lambda _: asyncio.ensure_future(commit.commit.resolve(self)))
 | 
			
		||||
        urwid.connect_signal(
 | 
			
		||||
            ok_btn, 'click', lambda _: self.remove_commit(commit))
 | 
			
		||||
 | 
			
		||||
        cols = urwid.Columns([ok_btn, can_btn])
 | 
			
		||||
        pile = urwid.Pile([t, cols])
 | 
			
		||||
        box = urwid.LineBox(pile)
 | 
			
		||||
 | 
			
		||||
        self.mainloop.widget = urwid.Overlay(
 | 
			
		||||
            urwid.Filler(box), o, 'center', ('relative', 50), 'middle', ('relative', 50)
 | 
			
		||||
        )
 | 
			
		||||
@@ -1,117 +0,0 @@
 | 
			
		||||
#!/usr/bin/env python3
 | 
			
		||||
# Copyright © 2019 Intel Corporation
 | 
			
		||||
 | 
			
		||||
# Permission is hereby granted, free of charge, to any person obtaining a copy
 | 
			
		||||
# of this software and associated documentation files (the "Software"), to deal
 | 
			
		||||
# in the Software without restriction, including without limitation the rights
 | 
			
		||||
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 | 
			
		||||
# copies of the Software, and to permit persons to whom the Software is
 | 
			
		||||
# furnished to do so, subject to the following conditions:
 | 
			
		||||
 | 
			
		||||
# The above copyright notice and this permission notice shall be included in
 | 
			
		||||
# all copies or substantial portions of the Software.
 | 
			
		||||
 | 
			
		||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 | 
			
		||||
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 | 
			
		||||
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 | 
			
		||||
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 | 
			
		||||
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 | 
			
		||||
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 | 
			
		||||
# SOFTWARE.
 | 
			
		||||
 | 
			
		||||
"""Update the main page, release notes, and calendar."""
 | 
			
		||||
 | 
			
		||||
import argparse
 | 
			
		||||
import calendar
 | 
			
		||||
import datetime
 | 
			
		||||
import pathlib
 | 
			
		||||
from lxml import (
 | 
			
		||||
    etree,
 | 
			
		||||
    html,
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def calculate_previous_version(version: str, is_point: bool) -> str:
 | 
			
		||||
    """Calculate the previous version to compare to.
 | 
			
		||||
 | 
			
		||||
    In the case of -rc to final that verison is the previous .0 release,
 | 
			
		||||
    (19.3.0 in the case of 20.0.0, for example). for point releases that is
 | 
			
		||||
    the last point release. This value will be the same as the input value
 | 
			
		||||
    for a poiont release, but different for a major release.
 | 
			
		||||
    """
 | 
			
		||||
    if '-' in version:
 | 
			
		||||
        version = version.split('-')[0]
 | 
			
		||||
    if is_point:
 | 
			
		||||
        return version
 | 
			
		||||
    base = version.split('.')
 | 
			
		||||
    if base[1] == '0':
 | 
			
		||||
        base[0] = str(int(base[0]) - 1)
 | 
			
		||||
        base[1] = '3'
 | 
			
		||||
    else:
 | 
			
		||||
        base[1] = str(int(base[1]) - 1)
 | 
			
		||||
    return '.'.join(base)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def is_point_release(version: str) -> bool:
 | 
			
		||||
    return not version.endswith('.0')
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def update_index(is_point: bool, version: str, previous_version: str) -> None:
 | 
			
		||||
    p = pathlib.Path(__file__).parent.parent / 'docs' / 'index.html'
 | 
			
		||||
    with p.open('rt') as f:
 | 
			
		||||
        tree = html.parse(f)
 | 
			
		||||
 | 
			
		||||
    news = tree.xpath('.//h1')[0]
 | 
			
		||||
 | 
			
		||||
    date = datetime.date.today()
 | 
			
		||||
    month = calendar.month_name[date.month]
 | 
			
		||||
    header = etree.Element('h2')
 | 
			
		||||
    header.text = f"{month} {date.day}, {date.year}"
 | 
			
		||||
 | 
			
		||||
    body = etree.Element('p')
 | 
			
		||||
    a = etree.SubElement(
 | 
			
		||||
        body, 'a', attrib={'href': f'relnotes/{previous_version}.html'})
 | 
			
		||||
    a.text = f"Mesa {previous_version}"
 | 
			
		||||
    if is_point:
 | 
			
		||||
        a.tail = " is released. This is a bug fix release."
 | 
			
		||||
    else:
 | 
			
		||||
        a.tail = (" is released. This is a new development release. "
 | 
			
		||||
                  "See the release notes for mor information about this release.")
 | 
			
		||||
 | 
			
		||||
    root = news.getparent()
 | 
			
		||||
    index = root.index(news) + 1
 | 
			
		||||
    root.insert(index, body)
 | 
			
		||||
    root.insert(index, header)
 | 
			
		||||
 | 
			
		||||
    tree.write(p.as_posix(), method='html')
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def update_release_notes(previous_version: str) -> None:
 | 
			
		||||
    p = pathlib.Path(__file__).parent.parent / 'docs' / 'relnotes.html'
 | 
			
		||||
    with p.open('rt') as f:
 | 
			
		||||
        tree = html.parse(f)
 | 
			
		||||
 | 
			
		||||
    li = etree.Element('li')
 | 
			
		||||
    a = etree.SubElement(li, 'a', href=f'relnotes/{previous_version}.html')
 | 
			
		||||
    a.text = f'{previous_version} release notes'
 | 
			
		||||
 | 
			
		||||
    ul = tree.xpath('.//ul')[0]
 | 
			
		||||
    ul.insert(0, li)
 | 
			
		||||
 | 
			
		||||
    tree.write(p.as_posix(), method='html')
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def main() -> None:
 | 
			
		||||
    parser = argparse.ArgumentParser()
 | 
			
		||||
    parser.add_argument('version', help="The released version.")
 | 
			
		||||
    args = parser.parse_args()
 | 
			
		||||
 | 
			
		||||
    is_point = is_point_release(args.version)
 | 
			
		||||
    previous_version = calculate_previous_version(args.version, is_point)
 | 
			
		||||
 | 
			
		||||
    update_index(is_point, args.version, previous_version)
 | 
			
		||||
    update_release_notes(previous_version)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
if __name__ == "__main__":
 | 
			
		||||
    main()
 | 
			
		||||
							
								
								
									
										29
									
								
								bin/shortlog_mesa.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										29
									
								
								bin/shortlog_mesa.sh
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,29 @@
 | 
			
		||||
#!/bin/sh
 | 
			
		||||
 | 
			
		||||
# This script is used to generate the list of changes that
 | 
			
		||||
# appears in the release notes files, with HTML formatting.
 | 
			
		||||
#
 | 
			
		||||
# Usage examples:
 | 
			
		||||
#
 | 
			
		||||
# $ bin/shortlog_mesa.sh mesa-9.0.2..mesa-9.0.3
 | 
			
		||||
# $ bin/shortlog_mesa.sh mesa-9.0.2..mesa-9.0.3 > changes
 | 
			
		||||
# $ bin/shortlog_mesa.sh mesa-9.0.2..mesa-9.0.3 | tee changes
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
in_log=0
 | 
			
		||||
 | 
			
		||||
git shortlog $* | while read l
 | 
			
		||||
do
 | 
			
		||||
    if [ $in_log -eq 0 ]; then
 | 
			
		||||
	echo '<p>'$l'</p>'
 | 
			
		||||
	echo '<ul>'
 | 
			
		||||
	in_log=1
 | 
			
		||||
    elif echo "$l" | egrep -q '^$' ; then
 | 
			
		||||
	echo '</ul>'
 | 
			
		||||
	echo
 | 
			
		||||
	in_log=0
 | 
			
		||||
    else
 | 
			
		||||
        mesg=$(echo $l | sed 's/ (cherry picked from commit [0-9a-f]\+)//;s/\&/&/g;s/</\</g;s/>/\>/g')
 | 
			
		||||
	echo '  <li>'${mesg}'</li>'
 | 
			
		||||
    fi
 | 
			
		||||
done
 | 
			
		||||
@@ -1,172 +0,0 @@
 | 
			
		||||
#!/usr/bin/env python
 | 
			
		||||
 | 
			
		||||
import argparse
 | 
			
		||||
import os
 | 
			
		||||
import platform
 | 
			
		||||
import subprocess
 | 
			
		||||
 | 
			
		||||
# This list contains symbols that _might_ be exported for some platforms
 | 
			
		||||
PLATFORM_SYMBOLS = [
 | 
			
		||||
    '__bss_end__',
 | 
			
		||||
    '__bss_start__',
 | 
			
		||||
    '__bss_start',
 | 
			
		||||
    '__end__',
 | 
			
		||||
    '_bss_end__',
 | 
			
		||||
    '_edata',
 | 
			
		||||
    '_end',
 | 
			
		||||
    '_fini',
 | 
			
		||||
    '_init',
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def get_symbols_nm(nm, lib):
 | 
			
		||||
    '''
 | 
			
		||||
    List all the (non platform-specific) symbols exported by the library
 | 
			
		||||
    using `nm`
 | 
			
		||||
    '''
 | 
			
		||||
    symbols = []
 | 
			
		||||
    platform_name = platform.system()
 | 
			
		||||
    output = subprocess.check_output([nm, '-gP', lib],
 | 
			
		||||
                                     stderr=open(os.devnull, 'w')).decode("ascii")
 | 
			
		||||
    for line in output.splitlines():
 | 
			
		||||
        fields = line.split()
 | 
			
		||||
        if len(fields) == 2 or fields[1] == 'U':
 | 
			
		||||
            continue
 | 
			
		||||
        symbol_name = fields[0]
 | 
			
		||||
        if platform_name == 'Linux':
 | 
			
		||||
            if symbol_name in PLATFORM_SYMBOLS:
 | 
			
		||||
                continue
 | 
			
		||||
        elif platform_name == 'Darwin':
 | 
			
		||||
            assert symbol_name[0] == '_'
 | 
			
		||||
            symbol_name = symbol_name[1:]
 | 
			
		||||
        symbols.append(symbol_name)
 | 
			
		||||
    return symbols
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def get_symbols_dumpbin(dumpbin, lib):
 | 
			
		||||
    '''
 | 
			
		||||
    List all the (non platform-specific) symbols exported by the library
 | 
			
		||||
    using `dumpbin`
 | 
			
		||||
    '''
 | 
			
		||||
    symbols = []
 | 
			
		||||
    output = subprocess.check_output([dumpbin, '/exports', lib],
 | 
			
		||||
                                     stderr=open(os.devnull, 'w')).decode("ascii")
 | 
			
		||||
    for line in output.splitlines():
 | 
			
		||||
        fields = line.split()
 | 
			
		||||
        # The lines with the symbols are made of at least 4 columns; see details below
 | 
			
		||||
        if len(fields) < 4:
 | 
			
		||||
            continue
 | 
			
		||||
        try:
 | 
			
		||||
            # Making sure the first 3 columns are a dec counter, a hex counter
 | 
			
		||||
            # and a hex address
 | 
			
		||||
            _ = int(fields[0], 10)
 | 
			
		||||
            _ = int(fields[1], 16)
 | 
			
		||||
            _ = int(fields[2], 16)
 | 
			
		||||
        except ValueError:
 | 
			
		||||
            continue
 | 
			
		||||
        symbol_name = fields[3]
 | 
			
		||||
        # De-mangle symbols
 | 
			
		||||
        if symbol_name[0] == '_':
 | 
			
		||||
            symbol_name = symbol_name[1:].split('@')[0]
 | 
			
		||||
        symbols.append(symbol_name)
 | 
			
		||||
    return symbols
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def main():
 | 
			
		||||
    parser = argparse.ArgumentParser()
 | 
			
		||||
    parser.add_argument('--symbols-file',
 | 
			
		||||
                        action='store',
 | 
			
		||||
                        required=True,
 | 
			
		||||
                        help='path to file containing symbols')
 | 
			
		||||
    parser.add_argument('--lib',
 | 
			
		||||
                        action='store',
 | 
			
		||||
                        required=True,
 | 
			
		||||
                        help='path to library')
 | 
			
		||||
    parser.add_argument('--nm',
 | 
			
		||||
                        action='store',
 | 
			
		||||
                        help='path to binary (or name in $PATH)')
 | 
			
		||||
    parser.add_argument('--dumpbin',
 | 
			
		||||
                        action='store',
 | 
			
		||||
                        help='path to binary (or name in $PATH)')
 | 
			
		||||
    args = parser.parse_args()
 | 
			
		||||
 | 
			
		||||
    try:
 | 
			
		||||
        if platform.system() == 'Windows':
 | 
			
		||||
            if not args.dumpbin:
 | 
			
		||||
                parser.error('--dumpbin is mandatory')
 | 
			
		||||
            lib_symbols = get_symbols_dumpbin(args.dumpbin, args.lib)
 | 
			
		||||
        else:
 | 
			
		||||
            if not args.nm:
 | 
			
		||||
                parser.error('--nm is mandatory')
 | 
			
		||||
            lib_symbols = get_symbols_nm(args.nm, args.lib)
 | 
			
		||||
    except:
 | 
			
		||||
        # We can't run this test, but we haven't technically failed it either
 | 
			
		||||
        # Return the GNU "skip" error code
 | 
			
		||||
        exit(77)
 | 
			
		||||
    mandatory_symbols = []
 | 
			
		||||
    optional_symbols = []
 | 
			
		||||
    with open(args.symbols_file) as symbols_file:
 | 
			
		||||
        qualifier_optional = '(optional)'
 | 
			
		||||
        for line in symbols_file.readlines():
 | 
			
		||||
 | 
			
		||||
            # Strip comments
 | 
			
		||||
            line = line.split('#')[0]
 | 
			
		||||
            line = line.strip()
 | 
			
		||||
            if not line:
 | 
			
		||||
                continue
 | 
			
		||||
 | 
			
		||||
            # Line format:
 | 
			
		||||
            # [qualifier] symbol
 | 
			
		||||
            qualifier = None
 | 
			
		||||
            symbol = None
 | 
			
		||||
 | 
			
		||||
            fields = line.split()
 | 
			
		||||
            if len(fields) == 1:
 | 
			
		||||
                symbol = fields[0]
 | 
			
		||||
            elif len(fields) == 2:
 | 
			
		||||
                qualifier = fields[0]
 | 
			
		||||
                symbol = fields[1]
 | 
			
		||||
            else:
 | 
			
		||||
                print(args.symbols_file + ': invalid format: ' + line)
 | 
			
		||||
                exit(1)
 | 
			
		||||
 | 
			
		||||
            # The only supported qualifier is 'optional', which means the
 | 
			
		||||
            # symbol doesn't have to be exported by the library
 | 
			
		||||
            if qualifier and not qualifier == qualifier_optional:
 | 
			
		||||
                print(args.symbols_file + ': invalid qualifier: ' + qualifier)
 | 
			
		||||
                exit(1)
 | 
			
		||||
 | 
			
		||||
            if qualifier == qualifier_optional:
 | 
			
		||||
                optional_symbols.append(symbol)
 | 
			
		||||
            else:
 | 
			
		||||
                mandatory_symbols.append(symbol)
 | 
			
		||||
 | 
			
		||||
    unknown_symbols = []
 | 
			
		||||
    for symbol in lib_symbols:
 | 
			
		||||
        if symbol in mandatory_symbols:
 | 
			
		||||
            continue
 | 
			
		||||
        if symbol in optional_symbols:
 | 
			
		||||
            continue
 | 
			
		||||
        if symbol[:2] == '_Z':
 | 
			
		||||
            # Ignore random C++ symbols
 | 
			
		||||
            #TODO: figure out if there's any way to avoid exporting them in the first place
 | 
			
		||||
            continue
 | 
			
		||||
        unknown_symbols.append(symbol)
 | 
			
		||||
 | 
			
		||||
    missing_symbols = [
 | 
			
		||||
        sym for sym in mandatory_symbols if sym not in lib_symbols
 | 
			
		||||
    ]
 | 
			
		||||
 | 
			
		||||
    for symbol in unknown_symbols:
 | 
			
		||||
        print(args.lib + ': unknown symbol exported: ' + symbol)
 | 
			
		||||
 | 
			
		||||
    for symbol in missing_symbols:
 | 
			
		||||
        print(args.lib + ': missing symbol: ' + symbol)
 | 
			
		||||
 | 
			
		||||
    if unknown_symbols or missing_symbols:
 | 
			
		||||
        exit(1)
 | 
			
		||||
    exit(0)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
if __name__ == '__main__':
 | 
			
		||||
    main()
 | 
			
		||||
							
								
								
									
										13
									
								
								common.py
									
									
									
									
									
								
							
							
						
						
									
										13
									
								
								common.py
									
									
									
									
									
								
							@@ -17,9 +17,6 @@ import SCons.Script.SConscript
 | 
			
		||||
host_platform = _platform.system().lower()
 | 
			
		||||
if host_platform.startswith('cygwin'):
 | 
			
		||||
    host_platform = 'cygwin'
 | 
			
		||||
# MSYS2 default platform selection.
 | 
			
		||||
if host_platform.startswith('mingw'):
 | 
			
		||||
    host_platform = 'windows'
 | 
			
		||||
 | 
			
		||||
# Search sys.argv[] for a "platform=foo" argument since we don't have
 | 
			
		||||
# an 'env' variable at this point.
 | 
			
		||||
@@ -52,18 +49,9 @@ if 'PROCESSOR_ARCHITECTURE' in os.environ:
 | 
			
		||||
else:
 | 
			
		||||
    host_machine = _platform.machine()
 | 
			
		||||
host_machine = _machine_map.get(host_machine, 'generic')
 | 
			
		||||
# MSYS2 default machine selection.
 | 
			
		||||
if _platform.system().lower().startswith('mingw') and 'MSYSTEM' in os.environ:
 | 
			
		||||
    if os.environ['MSYSTEM'] == 'MINGW32':
 | 
			
		||||
        host_machine = 'x86'
 | 
			
		||||
    if os.environ['MSYSTEM'] == 'MINGW64':
 | 
			
		||||
        host_machine = 'x86_64'
 | 
			
		||||
 | 
			
		||||
default_machine = host_machine
 | 
			
		||||
default_toolchain = 'default'
 | 
			
		||||
# MSYS2 default toolchain selection.
 | 
			
		||||
if _platform.system().lower().startswith('mingw'):
 | 
			
		||||
    default_toolchain = 'mingw'
 | 
			
		||||
 | 
			
		||||
if target_platform == 'windows' and host_platform != 'windows':
 | 
			
		||||
    default_machine = 'x86'
 | 
			
		||||
@@ -112,7 +100,6 @@ def AddOptions(opts):
 | 
			
		||||
    opts.Add(BoolOption('asan', 'enable Address Sanitizer', 'no'))
 | 
			
		||||
    opts.Add('toolchain', 'compiler toolchain', default_toolchain)
 | 
			
		||||
    opts.Add(BoolOption('llvm', 'use LLVM', default_llvm))
 | 
			
		||||
    opts.Add(BoolOption('force_scons', 'Force enable scons on deprecated platforms', 'false'))
 | 
			
		||||
    opts.Add(BoolOption('openmp', 'EXPERIMENTAL: compile with openmp (swrast)',
 | 
			
		||||
                        'no'))
 | 
			
		||||
    opts.Add(BoolOption('debug', 'DEPRECATED: debug build', 'yes'))
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										3378
									
								
								configure.ac
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3378
									
								
								configure.ac
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							@@ -8,7 +8,7 @@
 | 
			
		||||
<body>
 | 
			
		||||
 | 
			
		||||
<div class="header">
 | 
			
		||||
  The Mesa 3D Graphics Library
 | 
			
		||||
  <h1>The Mesa 3D Graphics Library</h1>
 | 
			
		||||
</div>
 | 
			
		||||
 | 
			
		||||
<iframe src="contents.html"></iframe>
 | 
			
		||||
@@ -48,25 +48,23 @@ start-up because of an extension string buffer-overflow problem.
 | 
			
		||||
 | 
			
		||||
<p>
 | 
			
		||||
The problem is a modern OpenGL driver will return a very long string
 | 
			
		||||
for the <code>glGetString(GL_EXTENSIONS)</code> query and if the application
 | 
			
		||||
for the glGetString(GL_EXTENSIONS) query and if the application
 | 
			
		||||
naively copies the string into a fixed-size buffer it can overflow the
 | 
			
		||||
buffer and crash the application.
 | 
			
		||||
</p>
 | 
			
		||||
 | 
			
		||||
<p>
 | 
			
		||||
The work-around is to set the <code>MESA_EXTENSION_MAX_YEAR</code>
 | 
			
		||||
environment variable to the approximate release year of the game.
 | 
			
		||||
This will cause the <code>glGetString(GL_EXTENSIONS)</code> query to only report
 | 
			
		||||
extensions older than the given year.
 | 
			
		||||
The work-around is to set the MESA_EXTENSION_MAX_YEAR environment variable
 | 
			
		||||
to the approximate release year of the game.
 | 
			
		||||
This will cause the glGetString(GL_EXTENSIONS) query to only report extensions
 | 
			
		||||
older than the given year.
 | 
			
		||||
</p>
 | 
			
		||||
 | 
			
		||||
<p>
 | 
			
		||||
For example, if the game was released in 2001, do
 | 
			
		||||
</p>
 | 
			
		||||
<pre>
 | 
			
		||||
export MESA_EXTENSION_MAX_YEAR=2001
 | 
			
		||||
</pre>
 | 
			
		||||
<p>
 | 
			
		||||
before running the game.
 | 
			
		||||
</p>
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										270
									
								
								docs/autoconf.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										270
									
								
								docs/autoconf.html
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,270 @@
 | 
			
		||||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
 | 
			
		||||
<html lang="en">
 | 
			
		||||
<head>
 | 
			
		||||
  <meta http-equiv="content-type" content="text/html; charset=utf-8">
 | 
			
		||||
  <title>Compilation and Installation using Autoconf</title>
 | 
			
		||||
  <link rel="stylesheet" type="text/css" href="mesa.css">
 | 
			
		||||
</head>
 | 
			
		||||
<body>
 | 
			
		||||
 | 
			
		||||
<div class="header">
 | 
			
		||||
  <h1>The Mesa 3D Graphics Library</h1>
 | 
			
		||||
</div>
 | 
			
		||||
 | 
			
		||||
<iframe src="contents.html"></iframe>
 | 
			
		||||
<div class="content">
 | 
			
		||||
 | 
			
		||||
<h1>Compilation and Installation using Autoconf</h1>
 | 
			
		||||
 | 
			
		||||
<ol>
 | 
			
		||||
<li><p><a href="#basic">Basic Usage</a></li>
 | 
			
		||||
<li><p><a href="#driver">Driver Options</a>
 | 
			
		||||
  <ul>
 | 
			
		||||
  <li><a href="#xlib">Xlib Driver Options</a></li>
 | 
			
		||||
  <li><a href="#dri">DRI Driver Options</a></li>
 | 
			
		||||
  <li><a href="#osmesa">OSMesa Driver Options</a></li>
 | 
			
		||||
  </ul>
 | 
			
		||||
</ol>
 | 
			
		||||
 | 
			
		||||
<h2>ATTENTION:</h2>
 | 
			
		||||
<p>
 | 
			
		||||
    The autotools build is being replaced by the <a href="meson.html">meson</a>
 | 
			
		||||
    build system. If you haven't yet now is a good time to try using meson and
 | 
			
		||||
    report any issues you run into.
 | 
			
		||||
</p>
 | 
			
		||||
 | 
			
		||||
<h2 id="basic">1. Basic Usage</h2>
 | 
			
		||||
 | 
			
		||||
<p>
 | 
			
		||||
The autoconf generated configure script can be used to guess your
 | 
			
		||||
platform and change various options for building Mesa. To use the
 | 
			
		||||
configure script, type:
 | 
			
		||||
</p>
 | 
			
		||||
 | 
			
		||||
<pre>
 | 
			
		||||
    ./configure
 | 
			
		||||
</pre>
 | 
			
		||||
 | 
			
		||||
<p>
 | 
			
		||||
To see a short description of all the options, type <code>./configure
 | 
			
		||||
--help</code>. If you are using a development snapshot and the configure
 | 
			
		||||
script does not exist, type <code>./autogen.sh</code> to generate it
 | 
			
		||||
first. If you know the options you want to pass to
 | 
			
		||||
<code>configure</code>, you can pass them to <code>autogen.sh</code>. It
 | 
			
		||||
will run <code>configure</code> with these options after it is
 | 
			
		||||
generated. Once you have run <code>configure</code> and set the options
 | 
			
		||||
to your preference, type:
 | 
			
		||||
</p>
 | 
			
		||||
 | 
			
		||||
<pre>
 | 
			
		||||
    make
 | 
			
		||||
</pre>
 | 
			
		||||
 | 
			
		||||
<p>
 | 
			
		||||
This will produce libGL.so and/or several other libraries depending on the
 | 
			
		||||
options you have chosen. Later, if you want to rebuild for a different
 | 
			
		||||
configuration run <code>make realclean</code> before rebuilding.
 | 
			
		||||
</p>
 | 
			
		||||
 | 
			
		||||
<p>
 | 
			
		||||
Some of the generic autoconf options are used with Mesa:
 | 
			
		||||
</p>
 | 
			
		||||
<dl>
 | 
			
		||||
<dt><code>--prefix=PREFIX</code></dt>
 | 
			
		||||
<dd><p>This is the root directory where
 | 
			
		||||
files will be installed by <code>make install</code>. The default is
 | 
			
		||||
<code>/usr/local</code>.</p>
 | 
			
		||||
</dd>
 | 
			
		||||
 | 
			
		||||
<dt><code>--exec-prefix=EPREFIX</code></dt>
 | 
			
		||||
<dd><p>This is the root directory
 | 
			
		||||
where architecture-dependent files will be installed. In Mesa, this is
 | 
			
		||||
only used to derive the directory for the libraries. The default is
 | 
			
		||||
<code>${prefix}</code>.</p>
 | 
			
		||||
</dd>
 | 
			
		||||
 | 
			
		||||
<dt><code>--libdir=LIBDIR</code></dt>
 | 
			
		||||
<dd><p>This option specifies the directory
 | 
			
		||||
where the GL libraries will be installed. The default is
 | 
			
		||||
<code>${exec_prefix}/lib</code>. It also serves as the name of the
 | 
			
		||||
library staging area in the source tree. For instance, if the option
 | 
			
		||||
<code>--libdir=/usr/local/lib64</code> is used, the libraries will be
 | 
			
		||||
created in a <code>lib64</code> directory at the top of the Mesa source
 | 
			
		||||
tree.</p>
 | 
			
		||||
</dd>
 | 
			
		||||
 | 
			
		||||
<dt><code>--sysconfdir=DIR</code></dt>
 | 
			
		||||
<dd><p>This option specifies the directory where the configuration
 | 
			
		||||
files will be installed. The default is <code>${prefix}/etc</code>.
 | 
			
		||||
Currently there's only one config file provided when dri drivers are
 | 
			
		||||
enabled - it's <code>drirc</code>.</p>
 | 
			
		||||
</dd>
 | 
			
		||||
 | 
			
		||||
<dt><code>--datadir=DIR</code></dt>
 | 
			
		||||
<dd><p>This option specifies the directory where the data files will
 | 
			
		||||
be installed. The default is <code>${prefix}/share</code>.
 | 
			
		||||
Currently when dri drivers are enabled, <code>drirc.d/</code> is at
 | 
			
		||||
this place.</p>
 | 
			
		||||
</dd>
 | 
			
		||||
 | 
			
		||||
<dt><code>--enable-static, --disable-shared</code></dt>
 | 
			
		||||
<dd><p>By default, Mesa
 | 
			
		||||
will build shared libraries. Either of these options will force static
 | 
			
		||||
libraries to be built. It is not currently possible to build static and
 | 
			
		||||
shared libraries in a single pass.</p>
 | 
			
		||||
</dd>
 | 
			
		||||
 | 
			
		||||
<dt><code>CC, CFLAGS, CXX, CXXFLAGS</code></dt>
 | 
			
		||||
<dd><p>These environment variables
 | 
			
		||||
control the C and C++ compilers used during the build. By default,
 | 
			
		||||
<code>gcc</code> and <code>g++</code> are used and the debug/optimisation
 | 
			
		||||
level is left unchanged.</p>
 | 
			
		||||
</dd>
 | 
			
		||||
 | 
			
		||||
<dt><code>LDFLAGS</code></dt>
 | 
			
		||||
<dd><p>An environment variable specifying flags to
 | 
			
		||||
pass when linking programs. These should be empty and
 | 
			
		||||
<code>PKG_CONFIG_PATH</code> is recommended to be used instead. If needed
 | 
			
		||||
it can be used to direct the linker to use libraries in nonstandard
 | 
			
		||||
directories. For example, <code>LDFLAGS="-L/usr/X11R6/lib"</code>.</p>
 | 
			
		||||
</dd>
 | 
			
		||||
 | 
			
		||||
<dt><code>PKG_CONFIG_PATH</code></dt>
 | 
			
		||||
<dd><p>The
 | 
			
		||||
<code>pkg-config</code> utility is a hard requirement for configuring and
 | 
			
		||||
building mesa. It is used to search for external libraries
 | 
			
		||||
on the system. This environment variable is used to control the search
 | 
			
		||||
path for <code>pkg-config</code>. For instance, setting
 | 
			
		||||
<code>PKG_CONFIG_PATH=/usr/X11R6/lib/pkgconfig</code> will search for
 | 
			
		||||
package metadata in <code>/usr/X11R6</code> before the standard
 | 
			
		||||
directories.</p>
 | 
			
		||||
</dd>
 | 
			
		||||
</dl>
 | 
			
		||||
 | 
			
		||||
<p>
 | 
			
		||||
There are also a few general options for altering the Mesa build:
 | 
			
		||||
</p>
 | 
			
		||||
<dl>
 | 
			
		||||
<dt><code>--enable-debug</code></dt>
 | 
			
		||||
<dd><p>This option will set the compiler debug/optimisation levels (if the user
 | 
			
		||||
hasn't already set them via the CFLAGS/CXXFLAGS) and macros to aid in
 | 
			
		||||
debugging the Mesa libraries.</p>
 | 
			
		||||
 | 
			
		||||
<p>Note that enabling this option can lead to noticeable loss of performance.</p>
 | 
			
		||||
 | 
			
		||||
<dt><code>--disable-asm</code></dt>
 | 
			
		||||
<dd><p>There are assembly routines
 | 
			
		||||
available for a few architectures. These will be used by default if
 | 
			
		||||
one of these architectures is detected. This option ensures that
 | 
			
		||||
assembly will not be used.</p>
 | 
			
		||||
</dd>
 | 
			
		||||
 | 
			
		||||
<dt><code>--build=</code></dt>
 | 
			
		||||
<dt><code>--host=</code></dt>
 | 
			
		||||
<dd><p>By default, the build will compile code for the architecture that
 | 
			
		||||
it's running on. In order to build cross-compile Mesa on a x86-64 machine
 | 
			
		||||
that is to run on a i686, one would need to set the options to:</p>
 | 
			
		||||
 | 
			
		||||
<p><code>--build=x86_64-pc-linux-gnu --host=i686-pc-linux-gnu</code></p>
 | 
			
		||||
 | 
			
		||||
Note that these can vary from distribution to distribution. For more
 | 
			
		||||
information check with the
 | 
			
		||||
<a href="https://www.gnu.org/savannah-checkouts/gnu/autoconf/manual/autoconf-2.69/html_node/Specifying-Target-Triplets.html">
 | 
			
		||||
autoconf manual</a>.
 | 
			
		||||
Note that you will need to correctly set <code>PKG_CONFIG_PATH</code> as well.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
<p>In some cases a single compiler is capable of handling both architectures
 | 
			
		||||
(multilib) in that case one would need to set the <code>CC,CXX</code> variables
 | 
			
		||||
appending the correct machine options. Seek your compiler documentation for
 | 
			
		||||
further information -
 | 
			
		||||
<a href="https://gcc.gnu.org/onlinedocs/gcc/Submodel-Options.html"> gcc
 | 
			
		||||
machine dependent options</a></p>
 | 
			
		||||
 | 
			
		||||
<p>In addition to specifying correct <code>PKG_CONFIG_PATH</code> for the target
 | 
			
		||||
architecture, the following should be sufficient to configure multilib Mesa</p>
 | 
			
		||||
 | 
			
		||||
<code>./configure CC="gcc -m32" CXX="g++ -m32" --build=x86_64-pc-linux-gnu --host=i686-pc-linux-gnu ...</code>
 | 
			
		||||
</dd>
 | 
			
		||||
</dl>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
<h2 id="driver">2. GL Driver Options</h2>
 | 
			
		||||
 | 
			
		||||
<p>
 | 
			
		||||
There are several different driver modes that Mesa can use. These are
 | 
			
		||||
described in more detail in the <a href="install.html">basic
 | 
			
		||||
installation instructions</a>. The Mesa driver is controlled through the
 | 
			
		||||
configure options <code>--enable-glx</code> and <code>--enable-osmesa</code>
 | 
			
		||||
</p>
 | 
			
		||||
 | 
			
		||||
<h3 id="xlib">Xlib</h3><p>
 | 
			
		||||
It uses Xlib as a software renderer to do all rendering. It corresponds
 | 
			
		||||
to the option <code>--enable-glx=xlib</code> or <code>--enable-glx=gallium-xlib</code>.
 | 
			
		||||
 | 
			
		||||
<h3 id="dri">DRI</h3><p>This mode uses the DRI hardware drivers for
 | 
			
		||||
accelerated OpenGL rendering. To enable use <code>--enable-glx=dri
 | 
			
		||||
--enable-dri</code>.
 | 
			
		||||
 | 
			
		||||
<!-- DRI specific options -->
 | 
			
		||||
<dl>
 | 
			
		||||
<dt><code>--with-dri-driverdir=DIR</code>
 | 
			
		||||
<dd><p> This option specifies the
 | 
			
		||||
location the DRI drivers will be installed to and the location libGL
 | 
			
		||||
will search for DRI drivers. The default is <code>${libdir}/dri</code>.
 | 
			
		||||
<dt><code>--with-dri-drivers=DRIVER,DRIVER,...</code>
 | 
			
		||||
<dd><p> This option
 | 
			
		||||
allows a specific set of DRI drivers to be built. For example,
 | 
			
		||||
<code>--with-dri-drivers="swrast,i965,radeon,nouveau"</code>. By
 | 
			
		||||
default, the drivers will be chosen depending on the target platform.
 | 
			
		||||
See the directory <code>src/mesa/drivers/dri</code> in the source tree
 | 
			
		||||
for available drivers. Beware that the swrast DRI driver is used by both
 | 
			
		||||
libGL and the X.Org xserver GLX module to do software rendering, so you
 | 
			
		||||
may run into problems if it is not available.
 | 
			
		||||
<!-- This explanation might be totally bogus. Kristian? -->
 | 
			
		||||
<dt><code>--disable-driglx-direct</code>
 | 
			
		||||
<dd><p> Disable direct rendering in
 | 
			
		||||
GLX. Normally, direct hardware rendering through the DRI drivers and
 | 
			
		||||
indirect software rendering are enabled in GLX. This option disables
 | 
			
		||||
direct rendering entirely. It can be useful on architectures where
 | 
			
		||||
kernel DRM modules are not available.
 | 
			
		||||
<dt><code>--enable-glx-tls</code> <dd><p>
 | 
			
		||||
Enable Thread Local Storage (TLS) in
 | 
			
		||||
GLX.
 | 
			
		||||
<dt><code>--with-expat=DIR</code>
 | 
			
		||||
<dd><p><strong>DEPRECATED</strong>, use <code>PKG_CONFIG_PATH</code> instead.</p>
 | 
			
		||||
<p>The DRI-enabled libGL uses expat to
 | 
			
		||||
parse the DRI configuration files in <code>${sysconfdir}/drirc</code> and
 | 
			
		||||
<code>~/.drirc</code>. This option allows a specific expat installation
 | 
			
		||||
to be used. For example, <code>--with-expat=/usr/local</code> will
 | 
			
		||||
search for expat headers and libraries in <code>/usr/local/include</code>
 | 
			
		||||
and <code>/usr/local/lib</code>, respectively.
 | 
			
		||||
</dl>
 | 
			
		||||
 | 
			
		||||
<h3 id="osmesa">OSMesa </h3><p> No libGL is built in this
 | 
			
		||||
mode. Instead, the driver code is built into the Off-Screen Mesa
 | 
			
		||||
(OSMesa) library. See the <a href="osmesa.html">Off-Screen Rendering</a>
 | 
			
		||||
page for more details.  It corresponds to the option
 | 
			
		||||
<code>--enable-osmesa</code>.
 | 
			
		||||
 | 
			
		||||
<!-- OSMesa specific options -->
 | 
			
		||||
<dl>
 | 
			
		||||
<dt><code>--with-osmesa-bits=BITS</code>
 | 
			
		||||
<dd><p> This option allows the size
 | 
			
		||||
of the color channel in bits to be specified. By default, an 8-bit
 | 
			
		||||
channel will be used, and the driver will be named libOSMesa. Other
 | 
			
		||||
options are 16- and 32-bit color channels, which will add the bit size
 | 
			
		||||
to the library name. For example, <code>--with-osmesa-bits=16</code>
 | 
			
		||||
will create the libOSMesa16 library with a 16-bit color channel.
 | 
			
		||||
</dl>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
<h2 id="library">3. Library Options</h2>
 | 
			
		||||
 | 
			
		||||
<p>
 | 
			
		||||
The configure script provides more fine grained control over the libraries
 | 
			
		||||
that will be built.
 | 
			
		||||
 | 
			
		||||
</div>
 | 
			
		||||
</body>
 | 
			
		||||
</html>
 | 
			
		||||
@@ -2,19 +2,19 @@
 | 
			
		||||
<html lang="en">
 | 
			
		||||
<head>
 | 
			
		||||
  <meta http-equiv="content-type" content="text/html; charset=utf-8">
 | 
			
		||||
  <title>Report a Bug</title>
 | 
			
		||||
  <title>Mesa Bug Reporting</title>
 | 
			
		||||
  <link rel="stylesheet" type="text/css" href="mesa.css">
 | 
			
		||||
</head>
 | 
			
		||||
<body>
 | 
			
		||||
 | 
			
		||||
<div class="header">
 | 
			
		||||
  The Mesa 3D Graphics Library
 | 
			
		||||
  <h1>The Mesa 3D Graphics Library</h1>
 | 
			
		||||
</div>
 | 
			
		||||
 | 
			
		||||
<iframe src="contents.html"></iframe>
 | 
			
		||||
<div class="content">
 | 
			
		||||
 | 
			
		||||
<h1>Report a Bug</h1>
 | 
			
		||||
<h1>Bug Database</h1>
 | 
			
		||||
 | 
			
		||||
<p>
 | 
			
		||||
The Mesa bug database is hosted on
 | 
			
		||||
@@ -24,8 +24,8 @@ The old bug database on SourceForge is no longer used.
 | 
			
		||||
 | 
			
		||||
<p>
 | 
			
		||||
To file a Mesa bug, go to
 | 
			
		||||
<a href="https://gitlab.freedesktop.org/mesa/mesa/issues">
 | 
			
		||||
GitLab on freedesktop.org</a>
 | 
			
		||||
<a href="https://bugs.freedesktop.org/enter_bug.cgi?product=Mesa">
 | 
			
		||||
Bugzilla on freedesktop.org</a>
 | 
			
		||||
</p>
 | 
			
		||||
 | 
			
		||||
<p>
 | 
			
		||||
 
 | 
			
		||||
@@ -8,7 +8,7 @@
 | 
			
		||||
<body>
 | 
			
		||||
 | 
			
		||||
<div class="header">
 | 
			
		||||
  The Mesa 3D Graphics Library
 | 
			
		||||
  <h1>The Mesa 3D Graphics Library</h1>
 | 
			
		||||
</div>
 | 
			
		||||
 | 
			
		||||
<iframe src="contents.html"></iframe>
 | 
			
		||||
@@ -41,69 +41,69 @@ as if you're defining a large, static table of information.
 | 
			
		||||
<li>Opening braces go on the same line as the if/for/while statement.
 | 
			
		||||
For example:
 | 
			
		||||
<pre>
 | 
			
		||||
if (condition) {
 | 
			
		||||
   foo;
 | 
			
		||||
} else {
 | 
			
		||||
   bar;
 | 
			
		||||
}
 | 
			
		||||
   if (condition) {
 | 
			
		||||
      foo;
 | 
			
		||||
   } else {
 | 
			
		||||
      bar;
 | 
			
		||||
   }
 | 
			
		||||
</pre>
 | 
			
		||||
 | 
			
		||||
<li>Put a space before/after operators.  For example, <code>a = b + c;</code>
 | 
			
		||||
and not <code>a=b+c;</code>
 | 
			
		||||
<li>Put a space before/after operators.  For example, <tt>a = b + c;</tt>
 | 
			
		||||
and not <tt>a=b+c;</tt>
 | 
			
		||||
 | 
			
		||||
<li>This GNU indent command generally does the right thing for formatting:
 | 
			
		||||
<pre>
 | 
			
		||||
indent -br -i3 -npcs --no-tabs infile.c -o outfile.c
 | 
			
		||||
   indent -br -i3 -npcs --no-tabs infile.c -o outfile.c
 | 
			
		||||
</pre>
 | 
			
		||||
 | 
			
		||||
<li>
 | 
			
		||||
<p>Use comments wherever you think it would be helpful for other developers.
 | 
			
		||||
<li>Use comments wherever you think it would be helpful for other developers.
 | 
			
		||||
Several specific cases and style examples follow.  Note that we roughly
 | 
			
		||||
follow <a href="http://www.doxygen.nl">Doxygen</a> conventions.
 | 
			
		||||
</p>
 | 
			
		||||
follow <a href="https://www.stack.nl/~dimitri/doxygen/">Doxygen</a> conventions.
 | 
			
		||||
<br>
 | 
			
		||||
<br>
 | 
			
		||||
Single-line comments:
 | 
			
		||||
<pre>
 | 
			
		||||
/* null-out pointer to prevent dangling reference below */
 | 
			
		||||
bufferObj = NULL;
 | 
			
		||||
   /* null-out pointer to prevent dangling reference below */
 | 
			
		||||
   bufferObj = NULL;
 | 
			
		||||
</pre>
 | 
			
		||||
Or,
 | 
			
		||||
<pre>
 | 
			
		||||
bufferObj = NULL;  /* prevent dangling reference below */
 | 
			
		||||
   bufferObj = NULL;  /* prevent dangling reference below */
 | 
			
		||||
</pre>
 | 
			
		||||
Multi-line comment:
 | 
			
		||||
<pre>
 | 
			
		||||
/* If this is a new buffer object id, or one which was generated but
 | 
			
		||||
 * never used before, allocate a buffer object now.
 | 
			
		||||
 */
 | 
			
		||||
   /* If this is a new buffer object id, or one which was generated but
 | 
			
		||||
    * never used before, allocate a buffer object now.
 | 
			
		||||
    */
 | 
			
		||||
</pre>
 | 
			
		||||
We try to quote the OpenGL specification where prudent:
 | 
			
		||||
<pre>
 | 
			
		||||
/* Page 38 of the PDF of the OpenGL ES 3.0 spec says:
 | 
			
		||||
 *
 | 
			
		||||
 *     "An INVALID_OPERATION error is generated for any of the following
 | 
			
		||||
 *     conditions:
 | 
			
		||||
 *
 | 
			
		||||
 *     * <length> is zero."
 | 
			
		||||
 *
 | 
			
		||||
 * Additionally, page 94 of the PDF of the OpenGL 4.5 core spec
 | 
			
		||||
 * (30.10.2014) also says this, so it's no longer allowed for desktop GL,
 | 
			
		||||
 * either.
 | 
			
		||||
 */
 | 
			
		||||
   /* Page 38 of the PDF of the OpenGL ES 3.0 spec says:
 | 
			
		||||
    *
 | 
			
		||||
    *     "An INVALID_OPERATION error is generated for any of the following
 | 
			
		||||
    *     conditions:
 | 
			
		||||
    *
 | 
			
		||||
    *     * <length> is zero."
 | 
			
		||||
    *
 | 
			
		||||
    * Additionally, page 94 of the PDF of the OpenGL 4.5 core spec
 | 
			
		||||
    * (30.10.2014) also says this, so it's no longer allowed for desktop GL,
 | 
			
		||||
    * either.
 | 
			
		||||
    */
 | 
			
		||||
</pre>
 | 
			
		||||
Function comment example:
 | 
			
		||||
<pre>
 | 
			
		||||
/**
 | 
			
		||||
 * Create and initialize a new buffer object.  Called via the
 | 
			
		||||
 * ctx->Driver.CreateObject() driver callback function.
 | 
			
		||||
 * \param  name  integer name of the object
 | 
			
		||||
 * \param  type  one of GL_FOO, GL_BAR, etc.
 | 
			
		||||
 * \return  pointer to new object or NULL if error
 | 
			
		||||
 */
 | 
			
		||||
struct gl_object *
 | 
			
		||||
_mesa_create_object(GLuint name, GLenum type)
 | 
			
		||||
{
 | 
			
		||||
   /* function body */
 | 
			
		||||
}
 | 
			
		||||
   /**
 | 
			
		||||
    * Create and initialize a new buffer object.  Called via the
 | 
			
		||||
    * ctx->Driver.CreateObject() driver callback function.
 | 
			
		||||
    * \param  name  integer name of the object
 | 
			
		||||
    * \param  type  one of GL_FOO, GL_BAR, etc.
 | 
			
		||||
    * \return  pointer to new object or NULL if error
 | 
			
		||||
    */
 | 
			
		||||
   struct gl_object *
 | 
			
		||||
   _mesa_create_object(GLuint name, GLenum type)
 | 
			
		||||
   {
 | 
			
		||||
      /* function body */
 | 
			
		||||
   }
 | 
			
		||||
</pre>
 | 
			
		||||
 | 
			
		||||
<li>Put the function return type and qualifiers on one line and the function
 | 
			
		||||
@@ -113,30 +113,29 @@ the opening brace goes on the next line by itself (see above.)
 | 
			
		||||
 | 
			
		||||
<li>Function names follow various conventions depending on the type of function:
 | 
			
		||||
<pre>
 | 
			
		||||
glFooBar()       - a public GL entry point (in glapi_dispatch.c)
 | 
			
		||||
_mesa_FooBar()   - the internal immediate mode function
 | 
			
		||||
save_FooBar()    - retained mode (display list) function in dlist.c
 | 
			
		||||
foo_bar()        - a static (private) function
 | 
			
		||||
_mesa_foo_bar()  - an internal non-static Mesa function
 | 
			
		||||
   glFooBar()       - a public GL entry point (in glapi_dispatch.c)
 | 
			
		||||
   _mesa_FooBar()   - the internal immediate mode function
 | 
			
		||||
   save_FooBar()    - retained mode (display list) function in dlist.c
 | 
			
		||||
   foo_bar()        - a static (private) function
 | 
			
		||||
   _mesa_foo_bar()  - an internal non-static Mesa function
 | 
			
		||||
</pre>
 | 
			
		||||
 | 
			
		||||
<li>Constants, macros and enum names are <code>ALL_UPPERCASE</code>, with _
 | 
			
		||||
between words.
 | 
			
		||||
<li>Mesa usually uses camel case for local variables (Ex:
 | 
			
		||||
<code>localVarname</code>) while gallium typically uses underscores (Ex:
 | 
			
		||||
<code>local_var_name</code>).
 | 
			
		||||
<li>Constants, macros and enum names are ALL_UPPERCASE, with _ between
 | 
			
		||||
words.
 | 
			
		||||
<li>Mesa usually uses camel case for local variables (Ex: "localVarname")
 | 
			
		||||
while gallium typically uses underscores (Ex: "local_var_name").
 | 
			
		||||
<li>Global variables are almost never used because Mesa should be thread-safe.
 | 
			
		||||
 | 
			
		||||
<li>Booleans.  Places that are not directly visible to the GL API
 | 
			
		||||
should prefer the use of <code>bool</code>, <code>true</code>, and
 | 
			
		||||
<code>false</code> over <code>GLboolean</code>, <code>GL_TRUE</code>, and
 | 
			
		||||
<code>GL_FALSE</code>.  In C code, this may mean that
 | 
			
		||||
<code>#include <stdbool.h></code> needs to be added.  The
 | 
			
		||||
<code>try_emit_*</code> methods in <code>src/mesa/program/ir_to_mesa.cpp</code>
 | 
			
		||||
and <code>src/mesa/state_tracker/st_glsl_to_tgsi.cpp</code> can serve as
 | 
			
		||||
examples.
 | 
			
		||||
should prefer the use of <tt>bool</tt>, <tt>true</tt>, and
 | 
			
		||||
<tt>false</tt> over <tt>GLboolean</tt>, <tt>GL_TRUE</tt>, and
 | 
			
		||||
<tt>GL_FALSE</tt>.  In C code, this may mean that
 | 
			
		||||
<tt>#include <stdbool.h></tt> needs to be added.  The
 | 
			
		||||
<tt>try_emit_</tt>* methods in src/mesa/program/ir_to_mesa.cpp and
 | 
			
		||||
src/mesa/state_tracker/st_glsl_to_tgsi.cpp can serve as examples.
 | 
			
		||||
 | 
			
		||||
</ul>
 | 
			
		||||
</p>
 | 
			
		||||
 | 
			
		||||
</div>
 | 
			
		||||
</body>
 | 
			
		||||
 
 | 
			
		||||
@@ -2,19 +2,19 @@
 | 
			
		||||
<html lang="en">
 | 
			
		||||
<head>
 | 
			
		||||
  <meta http-equiv="content-type" content="text/html; charset=utf-8">
 | 
			
		||||
  <title>Conformance Testing</title>
 | 
			
		||||
  <title>Conformance</title>
 | 
			
		||||
  <link rel="stylesheet" type="text/css" href="mesa.css">
 | 
			
		||||
</head>
 | 
			
		||||
<body>
 | 
			
		||||
 | 
			
		||||
<div class="header">
 | 
			
		||||
  The Mesa 3D Graphics Library
 | 
			
		||||
  <h1>The Mesa 3D Graphics Library</h1>
 | 
			
		||||
</div>
 | 
			
		||||
 | 
			
		||||
<iframe src="contents.html"></iframe>
 | 
			
		||||
<div class="content">
 | 
			
		||||
 | 
			
		||||
<h1>Conformance Testing</h1>
 | 
			
		||||
<h1>Conformance</h1>
 | 
			
		||||
 | 
			
		||||
<p>
 | 
			
		||||
The SGI OpenGL conformance tests verify correct operation of OpenGL
 | 
			
		||||
 
 | 
			
		||||
@@ -12,10 +12,6 @@
 | 
			
		||||
      background-color: #cccccc;
 | 
			
		||||
      color: black;
 | 
			
		||||
    }
 | 
			
		||||
    h2 {
 | 
			
		||||
      font-size: inherit;
 | 
			
		||||
      font-weight: bold;
 | 
			
		||||
    }
 | 
			
		||||
    a:link {
 | 
			
		||||
      color: #000;
 | 
			
		||||
    }
 | 
			
		||||
@@ -27,56 +23,59 @@
 | 
			
		||||
</head>
 | 
			
		||||
<body>
 | 
			
		||||
 | 
			
		||||
<h2>Documentation</h2>
 | 
			
		||||
<b>Documentation</b>
 | 
			
		||||
<ul>
 | 
			
		||||
<li><a href="intro.html" target="_parent">Introduction</a>
 | 
			
		||||
<li><a href="index.html" target="_parent">News</a>
 | 
			
		||||
<li><a href="developers.html" target="_parent">Developers</a>
 | 
			
		||||
<li><a href="systems.html" target="_parent">Platforms and Drivers</a>
 | 
			
		||||
<li><a href="license.html" target="_parent">License and Copyright</a>
 | 
			
		||||
<li><a href="faq.html" target="_parent">Frequently Asked Questions</a>
 | 
			
		||||
<li><a href="license.html" target="_parent">License & Copyright</a>
 | 
			
		||||
<li><a href="faq.html" target="_parent">FAQ</a>
 | 
			
		||||
<li><a href="relnotes.html" target="_parent">Release Notes</a>
 | 
			
		||||
<li><a href="thanks.html" target="_parent">Acknowledgements</a>
 | 
			
		||||
<li><a href="conform.html" target="_parent">Conformance Testing</a>
 | 
			
		||||
<li>more docs below...
 | 
			
		||||
</ul>
 | 
			
		||||
 | 
			
		||||
<h2>Download and Install</h2>
 | 
			
		||||
<b>Download / Install</b>
 | 
			
		||||
<ul>
 | 
			
		||||
<li><a href="download.html" target="_parent">Downloading and Unpacking</a>
 | 
			
		||||
<li><a href="install.html" target="_parent">Compiling and Installing</a>
 | 
			
		||||
<li><a href="download.html" target="_parent">Downloading / Unpacking</a>
 | 
			
		||||
<li><a href="install.html" target="_parent">Compiling / Installing</a>
 | 
			
		||||
  <ul>
 | 
			
		||||
    <li><a href="autoconf.html" target="_parent">Autoconf</a></li>
 | 
			
		||||
    <li><a href="meson.html" target="_parent">Meson</a></li>
 | 
			
		||||
  </ul>
 | 
			
		||||
</li>
 | 
			
		||||
<li><a href="precompiled.html" target="_parent">Precompiled Libraries</a>
 | 
			
		||||
</ul>
 | 
			
		||||
 | 
			
		||||
<h2>Need help?</h2>
 | 
			
		||||
<b>Resources</b>
 | 
			
		||||
<ul>
 | 
			
		||||
<li><a href="lists.html" target="_parent">Mailing Lists</a>
 | 
			
		||||
<li><a href="bugs.html" target="_parent">Report a bug</a>
 | 
			
		||||
<li><a href="bugs.html" target="_parent">Bug Database</a>
 | 
			
		||||
<li><a href="webmaster.html" target="_parent">Webmaster</a>
 | 
			
		||||
<li><a href="https://dri.freedesktop.org/" target="_parent">Mesa/DRI Wiki</a>
 | 
			
		||||
</ul>
 | 
			
		||||
 | 
			
		||||
<h2>User Topics</h2>
 | 
			
		||||
<b>User Topics</b>
 | 
			
		||||
<ul>
 | 
			
		||||
<li><a href="shading.html" target="_parent">Shading Language</a>
 | 
			
		||||
<li><a href="egl.html" target="_parent">EGL</a>
 | 
			
		||||
<li><a href="opengles.html" target="_parent">OpenGL ES</a>
 | 
			
		||||
<li><a href="envvars.html" target="_parent">Environment Variables</a>
 | 
			
		||||
<li><a href="osmesa.html" target="_parent">Off-screen Rendering</a>
 | 
			
		||||
<li><a href="osmesa.html" target="_parent">Off-Screen Rendering</a>
 | 
			
		||||
<li><a href="debugging.html" target="_parent">Debugging Tips</a>
 | 
			
		||||
<li><a href="perf.html" target="_parent">Performance Tips</a>
 | 
			
		||||
<li><a href="extensions.html" target="_parent">Mesa Extensions</a>
 | 
			
		||||
<li><a href="llvmpipe.html" target="_parent">Gallium LLVMpipe Driver</a>
 | 
			
		||||
<li><a href="vmware-guest.html" target="_parent">VMware SVGA3D Guest Driver</a>
 | 
			
		||||
<li><a href="postprocess.html" target="_parent">Gallium Post-processing</a>
 | 
			
		||||
<li><a href="mangling.html" target="_parent">GL Function Name Mangling</a>
 | 
			
		||||
<li><a href="llvmpipe.html" target="_parent">Gallium llvmpipe driver</a>
 | 
			
		||||
<li><a href="vmware-guest.html" target="_parent">VMware SVGA3D guest driver</a>
 | 
			
		||||
<li><a href="postprocess.html" target="_parent">Gallium post-processing</a>
 | 
			
		||||
<li><a href="application-issues.html" target="_parent">Application Issues</a>
 | 
			
		||||
<li><a href="viewperf.html" target="_parent">Viewperf Issues</a>
 | 
			
		||||
</ul>
 | 
			
		||||
 | 
			
		||||
<h2>Developer Topics</h2>
 | 
			
		||||
<b>Developer Topics</b>
 | 
			
		||||
<ul>
 | 
			
		||||
<li><a href="repository.html" target="_parent">Source Code Repository</a>
 | 
			
		||||
<li><a href="sourcetree.html" target="_parent">Source Code Tree</a>
 | 
			
		||||
@@ -84,25 +83,26 @@
 | 
			
		||||
<li><a href="helpwanted.html" target="_parent">Help Wanted</a>
 | 
			
		||||
<li><a href="devinfo.html" target="_parent">Development Notes</a>
 | 
			
		||||
<li><a href="codingstyle.html" target="_parent">Coding Style</a>
 | 
			
		||||
<li><a href="submittingpatches.html" target="_parent">Submitting Patches</a>
 | 
			
		||||
<li><a href="releasing.html" target="_parent">Releasing Process</a>
 | 
			
		||||
<li><a href="release-calendar.html" target="_parent">Release Calendar</a>
 | 
			
		||||
<li><a href="submittingpatches.html" target="_parent">Submitting patches</a>
 | 
			
		||||
<li><a href="releasing.html" target="_parent">Releasing process</a>
 | 
			
		||||
<li><a href="release-calendar.html" target="_parent">Release calendar</a>
 | 
			
		||||
<li><a href="sourcedocs.html" target="_parent">Source Documentation</a>
 | 
			
		||||
<li><a href="dispatch.html" target="_parent">GL Dispatch</a>
 | 
			
		||||
</ul>
 | 
			
		||||
 | 
			
		||||
<h2>Links</h2>
 | 
			
		||||
<b>Links</b>
 | 
			
		||||
<ul>
 | 
			
		||||
<li><a href="https://www.opengl.org" target="_parent">OpenGL Website</a>
 | 
			
		||||
<li><a href="https://dri.freedesktop.org" target="_parent">DRI Website</a>
 | 
			
		||||
<li><a href="https://www.opengl.org" target="_parent">OpenGL website</a>
 | 
			
		||||
<li><a href="https://dri.freedesktop.org" target="_parent">DRI website</a>
 | 
			
		||||
<li><a href="https://www.freedesktop.org" target="_parent">freedesktop.org</a>
 | 
			
		||||
<li><a href="https://planet.freedesktop.org" target="_parent">Developer Blogs</a>
 | 
			
		||||
<li><a href="https://planet.freedesktop.org" target="_parent">Developer blogs</a>
 | 
			
		||||
</ul>
 | 
			
		||||
 | 
			
		||||
<h2>Hosted by:</h2>
 | 
			
		||||
<dl>
 | 
			
		||||
<dd><a href="https://www.freedesktop.org" target="_parent">freedesktop.org</a>
 | 
			
		||||
</dl>
 | 
			
		||||
<b>Hosted by:</b>
 | 
			
		||||
<br>
 | 
			
		||||
<blockquote>
 | 
			
		||||
<a href="https://freedesktop.org" target="_parent">freedesktop.org</a>
 | 
			
		||||
</blockquote>
 | 
			
		||||
 | 
			
		||||
</body>
 | 
			
		||||
</html>
 | 
			
		||||
 
 | 
			
		||||
@@ -8,7 +8,7 @@
 | 
			
		||||
<body>
 | 
			
		||||
 | 
			
		||||
<div class="header">
 | 
			
		||||
  The Mesa 3D Graphics Library
 | 
			
		||||
  <h1>The Mesa 3D Graphics Library</h1>
 | 
			
		||||
</div>
 | 
			
		||||
 | 
			
		||||
<iframe src="contents.html"></iframe>
 | 
			
		||||
@@ -20,22 +20,26 @@
 | 
			
		||||
   Normally Mesa (and OpenGL) records but does not notify the user of
 | 
			
		||||
   errors.  It is up to the application to call
 | 
			
		||||
   <code>glGetError</code> to check for errors.  Mesa supports an
 | 
			
		||||
   environment variable, <code>MESA_DEBUG</code>, to help with debugging.  If
 | 
			
		||||
   <code>MESA_DEBUG</code> is defined, a message will be printed to stdout
 | 
			
		||||
   whenever an error occurs.
 | 
			
		||||
   environment variable, MESA_DEBUG, to help with debugging.  If
 | 
			
		||||
   MESA_DEBUG is defined, a message will be printed to stdout whenever
 | 
			
		||||
   an error occurs.
 | 
			
		||||
</p>
 | 
			
		||||
 | 
			
		||||
<p>
 | 
			
		||||
   More extensive error checking is done in DEBUG builds
 | 
			
		||||
   (<code>--buildtype debug</code> for meson, <code>build=debug</code> for scons).
 | 
			
		||||
   More extensive error checking is done when Mesa is compiled with the
 | 
			
		||||
   DEBUG symbol defined.  You'll have to edit the Make-config file and
 | 
			
		||||
   add -DDEBUG to the CFLAGS line for your system configuration.  You may
 | 
			
		||||
   also want to replace any optimization flags with the -g flag so you can
 | 
			
		||||
   use your debugger.  After you've edited Make-config type 'make clean'
 | 
			
		||||
   before recompiling.
 | 
			
		||||
</p>
 | 
			
		||||
<p>
 | 
			
		||||
   In your debugger you can set a breakpoint in <code>_mesa_error()</code> to trap
 | 
			
		||||
   Mesa errors.
 | 
			
		||||
   In your debugger you can set a breakpoint in _mesa_error() to trap Mesa
 | 
			
		||||
   errors.
 | 
			
		||||
</p>
 | 
			
		||||
<p>
 | 
			
		||||
   There is a display list printing/debugging facility.  See the end of
 | 
			
		||||
   <code>src/dlist.c</code> for details.
 | 
			
		||||
   src/dlist.c for details.
 | 
			
		||||
</p>
 | 
			
		||||
 | 
			
		||||
</div>
 | 
			
		||||
 
 | 
			
		||||
@@ -8,7 +8,7 @@
 | 
			
		||||
<body>
 | 
			
		||||
 | 
			
		||||
<div class="header">
 | 
			
		||||
  The Mesa 3D Graphics Library
 | 
			
		||||
  <h1>The Mesa 3D Graphics Library</h1>
 | 
			
		||||
</div>
 | 
			
		||||
 | 
			
		||||
<iframe src="contents.html"></iframe>
 | 
			
		||||
 
 | 
			
		||||
@@ -8,7 +8,7 @@
 | 
			
		||||
<body>
 | 
			
		||||
 | 
			
		||||
<div class="header">
 | 
			
		||||
  The Mesa 3D Graphics Library
 | 
			
		||||
  <h1>The Mesa 3D Graphics Library</h1>
 | 
			
		||||
</div>
 | 
			
		||||
 | 
			
		||||
<iframe src="contents.html"></iframe>
 | 
			
		||||
@@ -25,12 +25,11 @@
 | 
			
		||||
 | 
			
		||||
<p>
 | 
			
		||||
To add a new GL extension to Mesa you have to do at least the following.
 | 
			
		||||
</p>
 | 
			
		||||
 | 
			
		||||
<ul>
 | 
			
		||||
<li>
 | 
			
		||||
   If <code>glext.h</code> doesn't define the extension, edit
 | 
			
		||||
   <code>include/GL/gl.h</code> and add code like this:
 | 
			
		||||
   If glext.h doesn't define the extension, edit include/GL/gl.h and add
 | 
			
		||||
   code like this:
 | 
			
		||||
   <pre>
 | 
			
		||||
     #ifndef GL_EXT_the_extension_name
 | 
			
		||||
     #define GL_EXT_the_extension_name 1
 | 
			
		||||
@@ -41,18 +40,18 @@ To add a new GL extension to Mesa you have to do at least the following.
 | 
			
		||||
   </pre>
 | 
			
		||||
</li>
 | 
			
		||||
<li>
 | 
			
		||||
   In the <code>src/mapi/glapi/gen/</code> directory, add the new extension
 | 
			
		||||
   functions and enums to the <code>gl_API.xml</code> file.
 | 
			
		||||
   In the src/mapi/glapi/gen/ directory, add the new extension functions and
 | 
			
		||||
   enums to the gl_API.xml file.
 | 
			
		||||
   Then, a bunch of source files must be regenerated by executing the
 | 
			
		||||
   corresponding Python scripts.
 | 
			
		||||
</li>
 | 
			
		||||
<li>
 | 
			
		||||
   Add a new entry to the <code>gl_extensions</code> struct in
 | 
			
		||||
   <code>mtypes.h</code> if the extension requires driver capabilities not
 | 
			
		||||
   already exposed by another extension.
 | 
			
		||||
   Add a new entry to the <code>gl_extensions</code> struct in mtypes.h
 | 
			
		||||
   if the extension requires driver capabilities not already exposed by
 | 
			
		||||
   another extension.
 | 
			
		||||
</li>
 | 
			
		||||
<li>
 | 
			
		||||
   Add a new entry to the <code>src/mesa/main/extensions_table.h</code> file.
 | 
			
		||||
   Add a new entry to the src/mesa/main/extensions_table.h file.
 | 
			
		||||
</li>
 | 
			
		||||
<li>
 | 
			
		||||
   From this point, the best way to proceed is to find another extension,
 | 
			
		||||
@@ -60,22 +59,24 @@ To add a new GL extension to Mesa you have to do at least the following.
 | 
			
		||||
   as an example.
 | 
			
		||||
</li>
 | 
			
		||||
<li>
 | 
			
		||||
   If the new extension adds new GL state, the functions in
 | 
			
		||||
   <code>get.c</code>, <code>enable.c</code> and <code>attrib.c</code>
 | 
			
		||||
   will most likely require new code.
 | 
			
		||||
   If the new extension adds new GL state, the functions in get.c, enable.c
 | 
			
		||||
   and attrib.c will most likely require new code.
 | 
			
		||||
</li>
 | 
			
		||||
<li>
 | 
			
		||||
   To determine if the new extension is active in the current context,
 | 
			
		||||
   use the auto-generated <code>_mesa_has_##name_str()</code> function
 | 
			
		||||
   defined in <code>src/mesa/main/extensions.h</code>.
 | 
			
		||||
   use the auto-generated _mesa_has_##name_str() function defined in
 | 
			
		||||
   src/mesa/main/extensions.h.
 | 
			
		||||
</li>
 | 
			
		||||
<li>
 | 
			
		||||
   The dispatch tests <code>check_table.cpp</code> and
 | 
			
		||||
   <code>dispatch_sanity.cpp</code> should be updated with details about
 | 
			
		||||
   the new extensions functions. These tests are run using
 | 
			
		||||
   <code>meson test</code>.
 | 
			
		||||
   The dispatch tests check_table.cpp and dispatch_sanity.cpp
 | 
			
		||||
   should be updated with details about the new extensions functions. These
 | 
			
		||||
   tests are run using 'make check'
 | 
			
		||||
</li>
 | 
			
		||||
</ul>
 | 
			
		||||
</p>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
</div>
 | 
			
		||||
</body>
 | 
			
		||||
 
 | 
			
		||||
@@ -2,19 +2,19 @@
 | 
			
		||||
<html lang="en">
 | 
			
		||||
<head>
 | 
			
		||||
  <meta http-equiv="content-type" content="text/html; charset=utf-8">
 | 
			
		||||
  <title>GL Dispatch</title>
 | 
			
		||||
  <title>GL Dispatch in Mesa</title>
 | 
			
		||||
  <link rel="stylesheet" type="text/css" href="mesa.css">
 | 
			
		||||
</head>
 | 
			
		||||
<body>
 | 
			
		||||
 | 
			
		||||
<div class="header">
 | 
			
		||||
  The Mesa 3D Graphics Library
 | 
			
		||||
  <h1>The Mesa 3D Graphics Library</h1>
 | 
			
		||||
</div>
 | 
			
		||||
 | 
			
		||||
<iframe src="contents.html"></iframe>
 | 
			
		||||
<div class="content">
 | 
			
		||||
 | 
			
		||||
<h1>GL Dispatch</h1>
 | 
			
		||||
<h1>GL Dispatch in Mesa</h1>
 | 
			
		||||
 | 
			
		||||
<p>Several factors combine to make efficient dispatch of OpenGL functions
 | 
			
		||||
fairly complicated.  This document attempts to explain some of the issues
 | 
			
		||||
@@ -30,28 +30,28 @@ of the GL related state for the application.  Every texture, every buffer
 | 
			
		||||
object, every enable, and much, much more is stored in the context.  Since
 | 
			
		||||
an application can have more than one context, the context to be used is
 | 
			
		||||
selected by a window-system dependent function such as
 | 
			
		||||
<code>glXMakeContextCurrent</code>.</p>
 | 
			
		||||
<tt>glXMakeContextCurrent</tt>.</p>
 | 
			
		||||
 | 
			
		||||
<p>In environments that implement OpenGL with X-Windows using GLX, every GL
 | 
			
		||||
function, including the pointers returned by <code>glXGetProcAddress</code>, are
 | 
			
		||||
function, including the pointers returned by <tt>glXGetProcAddress</tt>, are
 | 
			
		||||
<em>context independent</em>.  This means that no matter what context is
 | 
			
		||||
currently active, the same <code>glVertex3fv</code> function is used.</p>
 | 
			
		||||
currently active, the same <tt>glVertex3fv</tt> function is used.</p>
 | 
			
		||||
 | 
			
		||||
<p>This creates the first bit of dispatch complexity.  An application can
 | 
			
		||||
have two GL contexts.  One context is a direct rendering context where
 | 
			
		||||
function calls are routed directly to a driver loaded within the
 | 
			
		||||
application's address space.  The other context is an indirect rendering
 | 
			
		||||
context where function calls are converted to GLX protocol and sent to a
 | 
			
		||||
server.  The same <code>glVertex3fv</code> has to do the right thing depending
 | 
			
		||||
server.  The same <tt>glVertex3fv</tt> has to do the right thing depending
 | 
			
		||||
on which context is current.</p>
 | 
			
		||||
 | 
			
		||||
<p>Highly optimized drivers or GLX protocol implementations may want to
 | 
			
		||||
change the behavior of GL functions depending on current state.  For
 | 
			
		||||
example, <code>glFogCoordf</code> may operate differently depending on whether
 | 
			
		||||
example, <tt>glFogCoordf</tt> may operate differently depending on whether
 | 
			
		||||
or not fog is enabled.</p>
 | 
			
		||||
 | 
			
		||||
<p>In multi-threaded environments, it is possible for each thread to have a
 | 
			
		||||
different GL context current.  This means that poor old <code>glVertex3fv</code>
 | 
			
		||||
different GL context current.  This means that poor old <tt>glVertex3fv</tt>
 | 
			
		||||
has to know which GL context is current in the thread where it is being
 | 
			
		||||
called.</p>
 | 
			
		||||
 | 
			
		||||
@@ -64,38 +64,38 @@ dispatch table stores pointers to functions that actually implement
 | 
			
		||||
specific GL functions.  Each time a new context is made current in a thread,
 | 
			
		||||
these pointers a updated.</p>
 | 
			
		||||
 | 
			
		||||
<p>The implementation of functions such as <code>glVertex3fv</code> becomes
 | 
			
		||||
<p>The implementation of functions such as <tt>glVertex3fv</tt> becomes
 | 
			
		||||
conceptually simple:</p>
 | 
			
		||||
 | 
			
		||||
<ul>
 | 
			
		||||
<li>Fetch the current dispatch table pointer.</li>
 | 
			
		||||
<li>Fetch the pointer to the real <code>glVertex3fv</code> function from the
 | 
			
		||||
<li>Fetch the pointer to the real <tt>glVertex3fv</tt> function from the
 | 
			
		||||
table.</li>
 | 
			
		||||
<li>Call the real function.</li>
 | 
			
		||||
</ul>
 | 
			
		||||
 | 
			
		||||
<p>This can be implemented in just a few lines of C code.  The file
 | 
			
		||||
<code>src/mesa/glapi/glapitemp.h</code> contains code very similar to this.</p>
 | 
			
		||||
<tt>src/mesa/glapi/glapitemp.h</tt> contains code very similar to this.</p>
 | 
			
		||||
 | 
			
		||||
<figure>
 | 
			
		||||
<pre>
 | 
			
		||||
<blockquote>
 | 
			
		||||
<table border="1">
 | 
			
		||||
<tr><td><pre>
 | 
			
		||||
void glVertex3f(GLfloat x, GLfloat y, GLfloat z)
 | 
			
		||||
{
 | 
			
		||||
    const struct _glapi_table * const dispatch = GET_DISPATCH();
 | 
			
		||||
 | 
			
		||||
    (*dispatch->Vertex3f)(x, y, z);
 | 
			
		||||
}
 | 
			
		||||
</pre>
 | 
			
		||||
<figcaption>Sample dispatch function</figcaption>
 | 
			
		||||
</figure>
 | 
			
		||||
}</pre></td></tr>
 | 
			
		||||
<tr><td>Sample dispatch function</td></tr></table>
 | 
			
		||||
</blockquote>
 | 
			
		||||
 | 
			
		||||
<p>The problem with this simple implementation is the large amount of
 | 
			
		||||
overhead that it adds to every GL function call.</p>
 | 
			
		||||
 | 
			
		||||
<p>In a multithreaded environment, a naive implementation of
 | 
			
		||||
<code>GET_DISPATCH</code> involves a call to <code>pthread_getspecific</code> or a
 | 
			
		||||
<tt>GET_DISPATCH</tt> involves a call to <tt>pthread_getspecific</tt> or a
 | 
			
		||||
similar function.  Mesa provides a wrapper function called
 | 
			
		||||
<code>_glapi_get_dispatch</code> that is used by default.</p>
 | 
			
		||||
<tt>_glapi_get_dispatch</tt> that is used by default.</p>
 | 
			
		||||
 | 
			
		||||
<h2>3. Optimizations</h2>
 | 
			
		||||
 | 
			
		||||
@@ -109,7 +109,7 @@ each can or cannot be used are listed.</p>
 | 
			
		||||
<p>The vast majority of OpenGL applications use the API in a single threaded
 | 
			
		||||
manner.  That is, the application has only one thread that makes calls into
 | 
			
		||||
the GL.  In these cases, not only do the calls to
 | 
			
		||||
<code>pthread_getspecific</code> hurt performance, but they are completely
 | 
			
		||||
<tt>pthread_getspecific</tt> hurt performance, but they are completely
 | 
			
		||||
unnecessary!  It is possible to detect this common case and avoid these
 | 
			
		||||
calls.</p>
 | 
			
		||||
 | 
			
		||||
@@ -118,54 +118,56 @@ of the executing thread.  If the same thread ID is always seen, Mesa knows
 | 
			
		||||
that the application is, from OpenGL's point of view, single threaded.</p>
 | 
			
		||||
 | 
			
		||||
<p>As long as an application is single threaded, Mesa stores a pointer to
 | 
			
		||||
the dispatch table in a global variable called <code>_glapi_Dispatch</code>.
 | 
			
		||||
the dispatch table in a global variable called <tt>_glapi_Dispatch</tt>.
 | 
			
		||||
The pointer is also stored in a per-thread location via
 | 
			
		||||
<code>pthread_setspecific</code>.  When Mesa detects that an application has
 | 
			
		||||
become multithreaded, <code>NULL</code> is stored in <code>_glapi_Dispatch</code>.</p>
 | 
			
		||||
<tt>pthread_setspecific</tt>.  When Mesa detects that an application has
 | 
			
		||||
become multithreaded, <tt>NULL</tt> is stored in <tt>_glapi_Dispatch</tt>.</p>
 | 
			
		||||
 | 
			
		||||
<p>Using this simple mechanism the dispatch functions can detect the
 | 
			
		||||
multithreaded case by comparing <code>_glapi_Dispatch</code> to <code>NULL</code>.
 | 
			
		||||
The resulting implementation of <code>GET_DISPATCH</code> is slightly more
 | 
			
		||||
complex, but it avoids the expensive <code>pthread_getspecific</code> call in
 | 
			
		||||
multithreaded case by comparing <tt>_glapi_Dispatch</tt> to <tt>NULL</tt>.
 | 
			
		||||
The resulting implementation of <tt>GET_DISPATCH</tt> is slightly more
 | 
			
		||||
complex, but it avoids the expensive <tt>pthread_getspecific</tt> call in
 | 
			
		||||
the common case.</p>
 | 
			
		||||
 | 
			
		||||
<figure>
 | 
			
		||||
<pre>
 | 
			
		||||
<blockquote>
 | 
			
		||||
<table border="1">
 | 
			
		||||
<tr><td><pre>
 | 
			
		||||
#define GET_DISPATCH() \
 | 
			
		||||
    (_glapi_Dispatch != NULL) \
 | 
			
		||||
        ? _glapi_Dispatch : pthread_getspecific(&_glapi_Dispatch_key)
 | 
			
		||||
</pre>
 | 
			
		||||
<figcaption>Improved <code>GET_DISPATCH</code> Implementation</figcaption>
 | 
			
		||||
</figure>
 | 
			
		||||
        ? _glapi_Dispatch : pthread_getspecific(&_glapi_Dispatch_key)
 | 
			
		||||
</pre></td></tr>
 | 
			
		||||
<tr><td>Improved <tt>GET_DISPATCH</tt> Implementation</td></tr></table>
 | 
			
		||||
</blockquote>
 | 
			
		||||
 | 
			
		||||
<h3>3.2. ELF TLS</h3>
 | 
			
		||||
 | 
			
		||||
<p>Starting with the 2.4.20 Linux kernel, each thread is allocated an area
 | 
			
		||||
of per-thread, global storage.  Variables can be put in this area using some
 | 
			
		||||
extensions to GCC.  By storing the dispatch table pointer in this area, the
 | 
			
		||||
expensive call to <code>pthread_getspecific</code> and the test of
 | 
			
		||||
<code>_glapi_Dispatch</code> can be avoided.</p>
 | 
			
		||||
expensive call to <tt>pthread_getspecific</tt> and the test of
 | 
			
		||||
<tt>_glapi_Dispatch</tt> can be avoided.</p>
 | 
			
		||||
 | 
			
		||||
<p>The dispatch table pointer is stored in a new variable called
 | 
			
		||||
<code>_glapi_tls_Dispatch</code>.  A new variable name is used so that a single
 | 
			
		||||
<tt>_glapi_tls_Dispatch</tt>.  A new variable name is used so that a single
 | 
			
		||||
libGL can implement both interfaces.  This allows the libGL to operate with
 | 
			
		||||
direct rendering drivers that use either interface.  Once the pointer is
 | 
			
		||||
properly declared, <code>GET_DISPACH</code> becomes a simple variable
 | 
			
		||||
properly declared, <tt>GET_DISPACH</tt> becomes a simple variable
 | 
			
		||||
reference.</p>
 | 
			
		||||
 | 
			
		||||
<figure>
 | 
			
		||||
<pre>
 | 
			
		||||
<blockquote>
 | 
			
		||||
<table border="1">
 | 
			
		||||
<tr><td><pre>
 | 
			
		||||
extern __thread struct _glapi_table *_glapi_tls_Dispatch
 | 
			
		||||
    __attribute__((tls_model("initial-exec")));
 | 
			
		||||
 | 
			
		||||
#define GET_DISPATCH() _glapi_tls_Dispatch
 | 
			
		||||
</pre>
 | 
			
		||||
<figcaption>TLS <code>GET_DISPATCH</code> Implementation</figcaption>
 | 
			
		||||
</figure>
 | 
			
		||||
</pre></td></tr>
 | 
			
		||||
<tr><td>TLS <tt>GET_DISPATCH</tt> Implementation</td></tr></table>
 | 
			
		||||
</blockquote>
 | 
			
		||||
 | 
			
		||||
<p>Use of this path is controlled by the preprocessor define
 | 
			
		||||
<code>USE_ELF_TLS</code>.  Any platform capable of using ELF TLS should use this
 | 
			
		||||
as the default dispatch method.</p>
 | 
			
		||||
<tt>GLX_USE_TLS</tt>.  Any platform capable of using TLS should use this as
 | 
			
		||||
the default dispatch method.</p>
 | 
			
		||||
 | 
			
		||||
<h3>3.3. Assembly Language Dispatch Stubs</h3>
 | 
			
		||||
 | 
			
		||||
@@ -183,13 +185,13 @@ ways that the dispatch table pointer can be accessed.  There are four
 | 
			
		||||
different methods that can be used:</p>
 | 
			
		||||
 | 
			
		||||
<ol>
 | 
			
		||||
<li>Using <code>_glapi_Dispatch</code> directly in builds for non-multithreaded
 | 
			
		||||
<li>Using <tt>_glapi_Dispatch</tt> directly in builds for non-multithreaded
 | 
			
		||||
environments.</li>
 | 
			
		||||
<li>Using <code>_glapi_Dispatch</code> and <code>_glapi_get_dispatch</code> in
 | 
			
		||||
<li>Using <tt>_glapi_Dispatch</tt> and <tt>_glapi_get_dispatch</tt> in
 | 
			
		||||
multithreaded environments.</li>
 | 
			
		||||
<li>Using <code>_glapi_Dispatch</code> and <code>pthread_getspecific</code> in
 | 
			
		||||
<li>Using <tt>_glapi_Dispatch</tt> and <tt>pthread_getspecific</tt> in
 | 
			
		||||
multithreaded environments.</li>
 | 
			
		||||
<li>Using <code>_glapi_tls_Dispatch</code> directly in TLS enabled
 | 
			
		||||
<li>Using <tt>_glapi_tls_Dispatch</tt> directly in TLS enabled
 | 
			
		||||
multithreaded environments.</li>
 | 
			
		||||
</ol>
 | 
			
		||||
 | 
			
		||||
@@ -202,23 +204,24 @@ terribly relevant.</p>
 | 
			
		||||
few preprocessor defines.</p>
 | 
			
		||||
 | 
			
		||||
<ul>
 | 
			
		||||
<li>If <code>USE_ELF_TLS</code> is defined, method #3 is used.</li>
 | 
			
		||||
<li>If <code>HAVE_PTHREAD</code> is defined, method #2 is used.</li>
 | 
			
		||||
<li>If <tt>GLX_USE_TLS</tt> is defined, method #3 is used.</li>
 | 
			
		||||
<li>If <tt>HAVE_PTHREAD</tt> is defined, method #2 is used.</li>
 | 
			
		||||
<li>If none of the preceding are defined, method #1 is used.</li>
 | 
			
		||||
</ul>
 | 
			
		||||
 | 
			
		||||
<p>Two different techniques are used to handle the various different cases.
 | 
			
		||||
On x86 and SPARC, a macro called <code>GL_STUB</code> is used.  In the preamble
 | 
			
		||||
On x86 and SPARC, a macro called <tt>GL_STUB</tt> is used.  In the preamble
 | 
			
		||||
of the assembly source file different implementations of the macro are
 | 
			
		||||
selected based on the defined preprocessor variables.  The assembly code
 | 
			
		||||
then consists of a series of invocations of the macros such as:
 | 
			
		||||
 | 
			
		||||
<figure>
 | 
			
		||||
<pre>
 | 
			
		||||
<blockquote>
 | 
			
		||||
<table border="1">
 | 
			
		||||
<tr><td><pre>
 | 
			
		||||
GL_STUB(Color3fv, _gloffset_Color3fv)
 | 
			
		||||
</pre>
 | 
			
		||||
<figcaption>SPARC Assembly Implementation of <code>glColor3fv</code></figcaption>
 | 
			
		||||
</figure>
 | 
			
		||||
</pre></td></tr>
 | 
			
		||||
<tr><td>SPARC Assembly Implementation of <tt>glColor3fv</tt></td></tr></table>
 | 
			
		||||
</blockquote>
 | 
			
		||||
 | 
			
		||||
<p>The benefit of this technique is that changes to the calling pattern
 | 
			
		||||
(i.e., addition of a new dispatch table pointer access method) require fewer
 | 
			
		||||
@@ -228,32 +231,32 @@ changed lines in the assembly code.</p>
 | 
			
		||||
implementation does not change based on the parameters passed to the
 | 
			
		||||
function.  For example, since x86 passes all parameters on the stack, no
 | 
			
		||||
additional code is needed to save and restore function parameters around a
 | 
			
		||||
call to <code>pthread_getspecific</code>.  Since x86-64 passes parameters in
 | 
			
		||||
call to <tt>pthread_getspecific</tt>.  Since x86-64 passes parameters in
 | 
			
		||||
registers, varying amounts of code needs to be inserted around the call to
 | 
			
		||||
<code>pthread_getspecific</code> to save and restore the GL function's
 | 
			
		||||
<tt>pthread_getspecific</tt> to save and restore the GL function's
 | 
			
		||||
parameters.</p>
 | 
			
		||||
 | 
			
		||||
<p>The other technique, used by platforms like x86-64 that cannot use the
 | 
			
		||||
first technique, is to insert <code>#ifdef</code> within the assembly
 | 
			
		||||
first technique, is to insert <tt>#ifdef</tt> within the assembly
 | 
			
		||||
implementation of each function.  This makes the assembly file considerably
 | 
			
		||||
larger (e.g., 29,332 lines for <code>glapi_x86-64.S</code> versus 1,155 lines for
 | 
			
		||||
<code>glapi_x86.S</code>) and causes simple changes to the function
 | 
			
		||||
larger (e.g., 29,332 lines for <tt>glapi_x86-64.S</tt> versus 1,155 lines for
 | 
			
		||||
<tt>glapi_x86.S</tt>) and causes simple changes to the function
 | 
			
		||||
implementation to generate many lines of diffs.  Since the assembly files
 | 
			
		||||
are typically generated by scripts (see <a href="#autogen">below</a>), this
 | 
			
		||||
isn't a significant problem.</p>
 | 
			
		||||
 | 
			
		||||
<p>Once a new assembly file is created, it must be inserted in the build
 | 
			
		||||
system.  There are two steps to this.  The file must first be added to
 | 
			
		||||
<code>src/mesa/sources</code>.  That gets the file built and linked.  The second
 | 
			
		||||
step is to add the correct <code>#ifdef</code> magic to
 | 
			
		||||
<code>src/mesa/glapi/glapi_dispatch.c</code> to prevent the C version of the
 | 
			
		||||
<tt>src/mesa/sources</tt>.  That gets the file built and linked.  The second
 | 
			
		||||
step is to add the correct <tt>#ifdef</tt> magic to
 | 
			
		||||
<tt>src/mesa/glapi/glapi_dispatch.c</tt> to prevent the C version of the
 | 
			
		||||
dispatch functions from being built.</p>
 | 
			
		||||
 | 
			
		||||
<h3 id="fixedsize">3.4. Fixed-Length Dispatch Stubs</h3>
 | 
			
		||||
 | 
			
		||||
<p>To implement <code>glXGetProcAddress</code>, Mesa stores a table that
 | 
			
		||||
<p>To implement <tt>glXGetProcAddress</tt>, Mesa stores a table that
 | 
			
		||||
associates function names with pointers to those functions.  This table is
 | 
			
		||||
stored in <code>src/mesa/glapi/glprocs.h</code>.  For different reasons on
 | 
			
		||||
stored in <tt>src/mesa/glapi/glprocs.h</tt>.  For different reasons on
 | 
			
		||||
different platforms, storing all of those pointers is inefficient.  On most
 | 
			
		||||
platforms, including all known platforms that support TLS, we can avoid this
 | 
			
		||||
added overhead.</p>
 | 
			
		||||
@@ -264,10 +267,12 @@ calculated by multiplying the size of the dispatch stub by the offset of the
 | 
			
		||||
function in the table.  This value is then added to the address of the first
 | 
			
		||||
dispatch stub.</p>
 | 
			
		||||
 | 
			
		||||
<p>This path is activated by adding the correct <code>#ifdef</code> magic to
 | 
			
		||||
<code>src/mesa/glapi/glapi.c</code> just before <code>glprocs.h</code> is
 | 
			
		||||
<p>This path is activated by adding the correct <tt>#ifdef</tt> magic to
 | 
			
		||||
<tt>src/mesa/glapi/glapi.c</tt> just before <tt>glprocs.h</tt> is
 | 
			
		||||
included.</p>
 | 
			
		||||
 | 
			
		||||
<h2 id="autogen">4. Automatic Generation of Dispatch Stubs</h2>
 | 
			
		||||
 | 
			
		||||
</div>
 | 
			
		||||
</body>
 | 
			
		||||
</html>
 | 
			
		||||
 
 | 
			
		||||
@@ -2,63 +2,77 @@
 | 
			
		||||
<html lang="en">
 | 
			
		||||
<head>
 | 
			
		||||
  <meta http-equiv="content-type" content="text/html; charset=utf-8">
 | 
			
		||||
  <title>Downloading and Unpacking</title>
 | 
			
		||||
  <title>Getting Mesa</title>
 | 
			
		||||
  <link rel="stylesheet" type="text/css" href="mesa.css">
 | 
			
		||||
</head>
 | 
			
		||||
<body>
 | 
			
		||||
 | 
			
		||||
<div class="header">
 | 
			
		||||
  The Mesa 3D Graphics Library
 | 
			
		||||
  <h1>The Mesa 3D Graphics Library</h1>
 | 
			
		||||
</div>
 | 
			
		||||
 | 
			
		||||
<iframe src="contents.html"></iframe>
 | 
			
		||||
<div class="content">
 | 
			
		||||
 | 
			
		||||
<h1>Downloading and Unpacking</h1>
 | 
			
		||||
 | 
			
		||||
<h2>Downloading</h2>
 | 
			
		||||
<h1>Downloading</h1>
 | 
			
		||||
 | 
			
		||||
<p>
 | 
			
		||||
You can download the released versions of Mesa via
 | 
			
		||||
<a href="https://mesa.freedesktop.org/archive/">HTTPS</a>
 | 
			
		||||
or
 | 
			
		||||
<a href="ftp://ftp.freedesktop.org/pub/mesa/">FTP</a>.
 | 
			
		||||
Primary Mesa download site:
 | 
			
		||||
<a href="ftp://ftp.freedesktop.org/pub/mesa/">ftp.freedesktop.org</a> (FTP)
 | 
			
		||||
or <a href="https://mesa.freedesktop.org/archive/">mesa.freedesktop.org</a>
 | 
			
		||||
(HTTPS).
 | 
			
		||||
</p>
 | 
			
		||||
 | 
			
		||||
<p>
 | 
			
		||||
Starting with the first release of 2017, Mesa's version scheme is
 | 
			
		||||
year-based. Filenames are in the form <code>mesa-Y.N.P.tar.gz</code>, where
 | 
			
		||||
<code>Y</code> is the year (two digits), <code>N</code> is an incremental number
 | 
			
		||||
(starting at 0) and <code>P</code> is the patch number (0 for the first
 | 
			
		||||
year-based. Filenames are in the form <tt>mesa-Y.N.P.tar.gz</tt>, where
 | 
			
		||||
<tt>Y</tt> is the year (two digits), <tt>N</tt> is an incremental number
 | 
			
		||||
(starting at 0) and <tt>P</tt> is the patch number (0 for the first
 | 
			
		||||
release, 1 for the first patch after that).
 | 
			
		||||
</p>
 | 
			
		||||
 | 
			
		||||
<p>
 | 
			
		||||
When a new release is coming, release candidates (betas) may be found
 | 
			
		||||
in the same directory, and are recognisable by the
 | 
			
		||||
<code>mesa-Y.N.P-<b>rc</b>X.tar.gz</code> filename.
 | 
			
		||||
<tt>mesa-Y.N.P-<b>rc</b>X.tar.gz</tt> filename.
 | 
			
		||||
</p>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
<h2>Unpacking</h2>
 | 
			
		||||
<h1>Unpacking</h1>
 | 
			
		||||
 | 
			
		||||
<p>
 | 
			
		||||
Mesa releases are available in two formats: <code>.tar.xz</code> and <code>.tar.gz</code>.
 | 
			
		||||
Mesa releases are available in two formats: <tt>.tar.xz</tt> and <tt>.tar.gz</tt>.
 | 
			
		||||
</p>
 | 
			
		||||
 | 
			
		||||
<p>
 | 
			
		||||
To unpack the tarball:
 | 
			
		||||
</p>
 | 
			
		||||
<pre>
 | 
			
		||||
	tar xf mesa-Y.N.P.tar.xz
 | 
			
		||||
</pre>
 | 
			
		||||
<p>or</p>
 | 
			
		||||
or
 | 
			
		||||
<pre>
 | 
			
		||||
	tar xf mesa-Y.N.P.tar.gz
 | 
			
		||||
</pre>
 | 
			
		||||
</p>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
<h2>Contents</h2>
 | 
			
		||||
<h1>Contents</h1>
 | 
			
		||||
 | 
			
		||||
<p>
 | 
			
		||||
After unpacking you'll have these files and directories (among others):
 | 
			
		||||
</p>
 | 
			
		||||
<pre>
 | 
			
		||||
autogen.sh	- Autoconf script for *nix systems
 | 
			
		||||
scons/		- SCons script for Windows builds
 | 
			
		||||
include/	- GL header (include) files
 | 
			
		||||
bin/		- shell scripts for making shared libraries, etc
 | 
			
		||||
docs/		- documentation
 | 
			
		||||
src/		- source code for libraries
 | 
			
		||||
src/mesa	- sources for the main Mesa library and device drivers
 | 
			
		||||
src/gallium     - sources for Gallium and Gallium drivers
 | 
			
		||||
src/glx		- sources for building libGL with full GLX and DRI support
 | 
			
		||||
</pre>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
<p>
 | 
			
		||||
Proceed to the <a href="install.html">compilation and installation
 | 
			
		||||
@@ -66,7 +80,7 @@ instructions</a>.
 | 
			
		||||
</p>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
<h2>Demos, GLUT, and GLU</h2>
 | 
			
		||||
<h1>Demos, GLUT, and GLU</h1>
 | 
			
		||||
 | 
			
		||||
<p>
 | 
			
		||||
A package of SGI's GLU library is available
 | 
			
		||||
 
 | 
			
		||||
@@ -2,19 +2,19 @@
 | 
			
		||||
<html lang="en">
 | 
			
		||||
<head>
 | 
			
		||||
  <meta http-equiv="content-type" content="text/html; charset=utf-8">
 | 
			
		||||
  <title>EGL</title>
 | 
			
		||||
  <title>Mesa EGL</title>
 | 
			
		||||
  <link rel="stylesheet" type="text/css" href="mesa.css">
 | 
			
		||||
</head>
 | 
			
		||||
<body>
 | 
			
		||||
 | 
			
		||||
<div class="header">
 | 
			
		||||
  The Mesa 3D Graphics Library
 | 
			
		||||
  <h1>The Mesa 3D Graphics Library</h1>
 | 
			
		||||
</div>
 | 
			
		||||
 | 
			
		||||
<iframe src="contents.html"></iframe>
 | 
			
		||||
<div class="content">
 | 
			
		||||
 | 
			
		||||
<h1>EGL</h1>
 | 
			
		||||
<h1>Mesa EGL</h1>
 | 
			
		||||
 | 
			
		||||
<p>The current version of EGL in Mesa implements EGL 1.4.  More information
 | 
			
		||||
about EGL can be found at
 | 
			
		||||
@@ -33,16 +33,13 @@ directly dispatched to the drivers.</p>
 | 
			
		||||
 | 
			
		||||
<ol>
 | 
			
		||||
<li>
 | 
			
		||||
<p>Configure your build with the desired client APIs and enable
 | 
			
		||||
the driver for your hardware.  For example:</p>
 | 
			
		||||
<p>Run <code>configure</code> with the desired client APIs and enable
 | 
			
		||||
the driver for your hardware.  For example</p>
 | 
			
		||||
 | 
			
		||||
<pre>
 | 
			
		||||
$ meson configure \
 | 
			
		||||
        -D egl=true \
 | 
			
		||||
        -D gles1=true \
 | 
			
		||||
        -D gles2=true \
 | 
			
		||||
        -D dri-drivers=... \
 | 
			
		||||
        -D gallium-drivers=...
 | 
			
		||||
  $ ./configure --enable-gles1 --enable-gles2 \
 | 
			
		||||
                --with-dri-drivers=... \
 | 
			
		||||
                --with-gallium-drivers=...
 | 
			
		||||
</pre>
 | 
			
		||||
 | 
			
		||||
<p>The main library and OpenGL is enabled by default.  The first two options
 | 
			
		||||
@@ -64,7 +61,7 @@ or more EGL drivers.</p>
 | 
			
		||||
time</p>
 | 
			
		||||
 | 
			
		||||
<dl>
 | 
			
		||||
<dt><code>-D egl=true</code></dt>
 | 
			
		||||
<dt><code>--enable-egl</code></dt>
 | 
			
		||||
<dd>
 | 
			
		||||
 | 
			
		||||
<p>By default, EGL is enabled.  When disabled, the main library and the drivers
 | 
			
		||||
@@ -72,11 +69,19 @@ will not be built.</p>
 | 
			
		||||
 | 
			
		||||
</dd>
 | 
			
		||||
 | 
			
		||||
<dt><code>-D platforms=...</code></dt>
 | 
			
		||||
<dt><code>--with-egl-driver-dir</code></dt>
 | 
			
		||||
<dd>
 | 
			
		||||
 | 
			
		||||
<p>The directory EGL drivers should be installed to.  If not specified, EGL
 | 
			
		||||
drivers will be installed to <code>${libdir}/egl</code>.</p>
 | 
			
		||||
 | 
			
		||||
</dd>
 | 
			
		||||
 | 
			
		||||
<dt><code>--with-platforms</code></dt>
 | 
			
		||||
<dd>
 | 
			
		||||
 | 
			
		||||
<p>List the platforms (window systems) to support.  Its argument is a comma
 | 
			
		||||
separated string such as <code>-D platforms=x11,drm</code>.  It decides
 | 
			
		||||
separated string such as <code>--with-platforms=x11,drm</code>.  It decides
 | 
			
		||||
the platforms a driver may support.  The first listed platform is also used by
 | 
			
		||||
the main library to decide the native platform.</p>
 | 
			
		||||
 | 
			
		||||
@@ -85,13 +90,15 @@ the main library to decide the native platform.</p>
 | 
			
		||||
and <code>haiku</code>.
 | 
			
		||||
The <code>android</code> platform can either be built as a system
 | 
			
		||||
component, part of AOSP, using <code>Android.mk</code> files, or
 | 
			
		||||
cross-compiled using appropriate options.
 | 
			
		||||
cross-compiled using appropriate <code>configure</code> options.
 | 
			
		||||
The <code>haiku</code> platform can only be built with SCons.
 | 
			
		||||
Unless for special needs, the build system should
 | 
			
		||||
select the right platforms automatically.</p>
 | 
			
		||||
 | 
			
		||||
</dd>
 | 
			
		||||
 | 
			
		||||
<dt><code>-D gles1=true</code> and <code>-D gles2=true</code></dt>
 | 
			
		||||
<dt><code>--enable-gles1</code></dt>
 | 
			
		||||
<dt><code>--enable-gles2</code></dt>
 | 
			
		||||
<dd>
 | 
			
		||||
 | 
			
		||||
<p>These options enable OpenGL ES support in OpenGL.  The result is one big
 | 
			
		||||
@@ -99,7 +106,7 @@ internal library that supports multiple APIs.</p>
 | 
			
		||||
 | 
			
		||||
</dd>
 | 
			
		||||
 | 
			
		||||
<dt><code>-D shared-glapi=true</code></dt>
 | 
			
		||||
<dt><code>--enable-shared-glapi</code></dt>
 | 
			
		||||
<dd>
 | 
			
		||||
 | 
			
		||||
<p>By default, <code>libGL</code> has its own copy of <code>libglapi</code>.
 | 
			
		||||
@@ -127,9 +134,9 @@ runtime</p>
 | 
			
		||||
<dd>
 | 
			
		||||
 | 
			
		||||
<p>This variable specifies the native platform.  The valid values are the same
 | 
			
		||||
as those for <code>-D platforms=...</code>.  When the variable is not set,
 | 
			
		||||
as those for <code>--with-platforms</code>.  When the variable is not set,
 | 
			
		||||
the main library uses the first platform listed in
 | 
			
		||||
<code>-D platforms=...</code> as the native platform.</p>
 | 
			
		||||
<code>--with-platforms</code> as the native platform.</p>
 | 
			
		||||
 | 
			
		||||
<p>Extensions like <code>EGL_MESA_drm_display</code> define new functions to
 | 
			
		||||
create displays for non-native platforms.  These extensions are usually used by
 | 
			
		||||
 
 | 
			
		||||
Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user