SlideShare a Scribd company logo
1 of 40
Download to read offline
glGenVertexArrays(1, &vao);
glBindVertexArray(vao);
/* Draw and record */
glBeginTransformFeedback(GL_POINTS);
glDrawArrays(GL_POINTS, 0, 1);
for (i = 0; i < STREAMS; i++) {
glEndQueryIndexed(GL_PRIMITIVES_GENERATED,
i);
glEndQueryIndexed(GL_TRANSFORM_FEEDBACK_
PRIMITIVES_WRITTEN,
i);
}
glEndTransformFeedback();
glDeleteVertexArrays(1, &vao);
if (!piglit_check_gl_error(GL_NO_ERROR))
piglit_report_result(PIGLIT_FAIL);
pass = probe_buffers(xfb, queries,
primitive_n);
PIGLIT_FAIL);
Samuel Iglesias Gonsálvez
siglesias@igalia.com
How to test OpenGL
drivers with Free
Software
Introduction
OpenGL
● OpenGL is an API for rendering 2D and 3D graphics.
● Silicon Graphics Inc. (SGI) started developing
OpenGL in 1991 and released it in January 1992
● Now managed by the non-profit technology
consortium Khronos Group.
OpenGL
● It is widely use in different form factor devices (PC,
tablets, mobile phones, embedded devices...) for
running applications that require 2D/3D graphics
rendering (games, scientific applications, etc)
OpenGL
● However, OpenGL is only an API
specification...
● Implementors are free to provide their
own libraries and drivers.
● Possible incompatibilities between
implementations and OpenGL.
● Solution: OpenGL conformance test suites
OpenGL conformance test suites
OpenGL conformance test suites
● There is an official OpenGL conformance
test suite from Khronos group:
https://www.khronos.org/opengl/adopters/
● It is for free (as in beer) for software
developers but it is not Free Software (as
in speech).
https://www.khronos.org/files/adopters_agreement.pdf
OpenGL conformance test suites
● There are unofficial Free Software OpenGL
conformance test suites:
● Glean
● DrawElements Quality Program (dEQP)
● Piglit
Glean
Glean
● Created in 1999 by Allen Akin.
● MIT license.
● Tested on GNU/Linux and Microsoft Windows.
● There hasn't been much activity in Glean for a
few years now.
● Nowadays, it's part of Piglit
http://glean.sourceforge.net/
dEQP
dEQP
● Draw Elements Quality Program (dEQP)
● Developed by Finnish company called
drawElements.
– Bought by Google in 2014
● Google open-sourced dEQP in the
Android Lollipop release.
● Apache License 2.0
dEQP
● Supports OpenGL ES 2.0 and better,
OpenCL 1.X, and EGL 1.4.
● Supported OSes include Android,
GNU/Linux, Windows, iOS.
● Recently, piglit added support for running
dEQP GLES3 tests.
dEQP
● Clone repository:
$ git clone https://android.googlesource.com/platform/external/deqp/
● [Optional] Add to CMakeLists.txt:
set(PNG_INCLUDE_PATH "/usr/include/libpng")
set(PNG_LIBRARY "/usr/lib/x86_64-linux-gnu/libpng.so")
set(CMAKE_BUILD_TYPE DEBUG)
set(CMAKE_C_FLAGS "-O0 -ggdb")
set(CMAKE_C_FLAGS_DEBUG "-O0 -ggdb")
set(CMAKE_C_FLAGS_RELEASE "-O0 -ggdb")
set(CMAKE_CXX_FLAGS "-O0 -ggdb")
set(CMAKE_CXX_FLAGS_DEBUG "-O0 -ggdb")
set(CMAKE_CXX_FLAGS_RELEASE "-O0 -ggdb")
dEQP
● Build:
$ cmake .
$ make
● Note: it doesn't provide an "install" target.
dEQP
● Run the tests with execserver
● Create list of tests to run
$ cd modules/gles3
$ ./deqp-gles3 --deqp-runmode=xml-caselist
● Launch server
$ execserver/execserver
● Launch executor (in other terminal)
$ ./executor/executor -b deqp-gles3 -wd modules/gles3/
-cd modules/gles3/ -t dEQP-GLES3.functional.* -o ./gles3-
functional.xml --cmdline="--deqp-log-images=disable"
dEQP
dEQP
● Run the tests without execserver:
$ cd ./modules/gles3
$ ./deqp-gles3 -n dEQP-GLES3.functional.*
● Results are saved in TestResults.qpa file
dEQP
dEQP
● How to convert Base64 string to PNG
images:
● http://www.base64-image.net/
Result Reference Error mask
dEQP
● It can convert XML files to CSV
$ executor/testlog-to-csv
● No HTML output
Piglit
Piglit
● Created by Nicolai Hähnle in 2007
● Widely used in Mesa for testing and
development
● MIT license
● Include tests for OpenGL, OpenGL ES,
OpenCL.
http://piglit.freedesktop.org
Piglit
● Dependencies
● Python 2.7.x
● Python mako module
● numpy
● cmake
● GL, glu and glut libraries and development
packages (i.e. headers)
● X11 libraries and development packages (i.e.
headers)
● Waffle: http://www.waffle-gl.org
Piglit
● Build:
$ git clone git://anongit.freedesktop.org/git/piglit
$ cmake .
$ make
● Check installation:
$ ./piglit run tests/sanity.tests results/sanity.results
● Your first complete piglit run:
$ ./piglit run tests/all results/all-run
Piglit
● Process results file:
● HTML output
$ ./piglit summary html summary/summary-all
results/all-run
● CLI output
$ ./piglit summary console results/all-run
● CSV output
$ ./piglit summary csv results/all-run
Piglit
● CLI output
[...]
spec/glsl-1.50/compiler/interface-block-name-uses-gl-
prefix.vert: pass
spec/EXT_framebuffer_object/fbo-clear-formats/GL_ALPHA16 (fbo
incomplete): skip
spec/ARB_copy_image/arb_copy_image-targets
GL_TEXTURE_CUBE_MAP_ARRAY 32 32 18 GL_TEXTURE_2D_ARRAY 32 16 15 11
12 5 5 1 2 14 15 9: pass
spec/glsl-1.30/execution/built-in-functions/fs-op-bitxor-uvec3-
uint: pass
spec/ARB_depth_texture/depthstencil-render-miplevels 146 d=z16:
pass
spec/glsl-1.10/execution/variable-indexing/fs-varying-mat2-col-
row-rd: pass
Piglit
summary:
        pass: 25085
       fail: 262
        crash: 5
       skip: 9746
     timeout: 0
       warn: 13
dmesg-warn: 0
dmesg-fail: 0
       total: 35111
Piglit
Piglit
Piglit
● How to run standalone tests
$ bin/texsubimage pbo -auto -fbo
Using test set: Core formats
texsubimage failed
target: GL_TEXTURE_2D
internal format: GL_COMPRESSED_RGB_S3TC_DXT1_EXT
region: 8, 8 48 x 28
[...]
PIGLIT: {"result": "fail" }
Piglit
● Tailor your piglit run
● Add Dmesg information: --dmesg
● Verbose: -l verbose
● Run all concurrent: --all-concurrent
● Disable concurrent test runs: --no-
concurrency
Piglit
● Tailor your piglit run
● Execute by name (*texture*)
$ ./piglit run tests/all -t texture results/all-texture
● Remove tests by name (*color*)
$ ./piglit run tests/all -t texture -x color results/all-
texture
● More information:
$ ./piglit run -h
Piglit
● Test profile
– List of tests to be executed by piglit
in a given run.
– Usually imports other test profile and
edits the list of test (add/remove).
– Written in python.
Piglit
Piglit
● DEQP GLES 3 support
$ export
PIGLIT_DEQP_GLES3_EXE=~/deqp/modules/gles3/deqp-
gles3
$ ./piglit run tests/deqp_gles3.py -t dEQP-
GLES3.functional.* results/gles3-functional
Conclusions
Conclusions
● OpenGL is an API
● Implementations can be incompatible
● Need OpenGL conformance test suites
● Khronos provides an official one but it is
not Free Software (as in speech).
● There are unofficial Free Software
alternatives:
– Glean, dEQP, piglit
Questions?
This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License.

More Related Content

Viewers also liked

Optimizing with persistent data structures (LLVM Cauldron 2016)
Optimizing with persistent data structures (LLVM Cauldron 2016)Optimizing with persistent data structures (LLVM Cauldron 2016)
Optimizing with persistent data structures (LLVM Cauldron 2016)Igalia
 
Spelunking through JPEG with Racket (Sixth RacketCon)
Spelunking through JPEG with Racket (Sixth RacketCon)Spelunking through JPEG with Racket (Sixth RacketCon)
Spelunking through JPEG with Racket (Sixth RacketCon)Igalia
 
TGS AME Namibia N2R93RE15 2D
TGS AME Namibia N2R93RE15 2DTGS AME Namibia N2R93RE15 2D
TGS AME Namibia N2R93RE15 2DTGS
 
La Digestión Anaerobia como parte medular de la sustentabilidad ambiental
La Digestión Anaerobia como parte medular de la sustentabilidad ambientalLa Digestión Anaerobia como parte medular de la sustentabilidad ambiental
La Digestión Anaerobia como parte medular de la sustentabilidad ambientalAcademia de Ingeniería de México
 
Rk village plaza 180th
Rk village plaza   180thRk village plaza   180th
Rk village plaza 180thRK Centers
 
Presentación detallada HallTech
Presentación detallada HallTechPresentación detallada HallTech
Presentación detallada HallTechrichardhh
 
Manejo de equipo de activo fijo
Manejo de equipo de activo fijoManejo de equipo de activo fijo
Manejo de equipo de activo fijocibg
 
mFLOR. Presentación técnica
mFLOR. Presentación técnicamFLOR. Presentación técnica
mFLOR. Presentación técnicagusserrano
 
Planeta oroneta presentació crevillent 2015
Planeta oroneta presentació crevillent 2015Planeta oroneta presentació crevillent 2015
Planeta oroneta presentació crevillent 2015Jesús Martínez Vargas
 
"Discover windows phone" 02. page navigation
"Discover windows phone"   02. page navigation"Discover windows phone"   02. page navigation
"Discover windows phone" 02. page navigationYasmine Abdelhady
 
Api 581 sec.3 nivel 2 areas de consecuencias
Api 581 sec.3 nivel 2 areas de consecuenciasApi 581 sec.3 nivel 2 areas de consecuencias
Api 581 sec.3 nivel 2 areas de consecuenciasadan gonzalez torres
 
Congreso Actualización - Carrera en AUPSA
Congreso Actualización - Carrera en AUPSACongreso Actualización - Carrera en AUPSA
Congreso Actualización - Carrera en AUPSAAoduber
 
Annexes 050 meteo
Annexes 050 meteoAnnexes 050 meteo
Annexes 050 meteoESTEL ,asn
 
Ntc 1692 peligrosos
Ntc 1692 peligrososNtc 1692 peligrosos
Ntc 1692 peligrososAeroux
 
Sistema de transporte de datos sobre redes inalambricas WLAN
Sistema de transporte de datos sobre redes inalambricas WLANSistema de transporte de datos sobre redes inalambricas WLAN
Sistema de transporte de datos sobre redes inalambricas WLANdegarden
 
Tutorial unad sobre el plagio (Flor Posada Parada)
Tutorial unad sobre el plagio (Flor Posada Parada)Tutorial unad sobre el plagio (Flor Posada Parada)
Tutorial unad sobre el plagio (Flor Posada Parada)Flor Yamile Posada Parada
 
Juego de la vida y como jugarlo
Juego de la vida y como jugarloJuego de la vida y como jugarlo
Juego de la vida y como jugarloGlayde Calher
 

Viewers also liked (20)

Optimizing with persistent data structures (LLVM Cauldron 2016)
Optimizing with persistent data structures (LLVM Cauldron 2016)Optimizing with persistent data structures (LLVM Cauldron 2016)
Optimizing with persistent data structures (LLVM Cauldron 2016)
 
Spelunking through JPEG with Racket (Sixth RacketCon)
Spelunking through JPEG with Racket (Sixth RacketCon)Spelunking through JPEG with Racket (Sixth RacketCon)
Spelunking through JPEG with Racket (Sixth RacketCon)
 
Herbst 2010
Herbst 2010Herbst 2010
Herbst 2010
 
TGS AME Namibia N2R93RE15 2D
TGS AME Namibia N2R93RE15 2DTGS AME Namibia N2R93RE15 2D
TGS AME Namibia N2R93RE15 2D
 
La Digestión Anaerobia como parte medular de la sustentabilidad ambiental
La Digestión Anaerobia como parte medular de la sustentabilidad ambientalLa Digestión Anaerobia como parte medular de la sustentabilidad ambiental
La Digestión Anaerobia como parte medular de la sustentabilidad ambiental
 
Rk village plaza 180th
Rk village plaza   180thRk village plaza   180th
Rk village plaza 180th
 
Reino animal
Reino animalReino animal
Reino animal
 
Presentación detallada HallTech
Presentación detallada HallTechPresentación detallada HallTech
Presentación detallada HallTech
 
Manejo de equipo de activo fijo
Manejo de equipo de activo fijoManejo de equipo de activo fijo
Manejo de equipo de activo fijo
 
mFLOR. Presentación técnica
mFLOR. Presentación técnicamFLOR. Presentación técnica
mFLOR. Presentación técnica
 
Planeta oroneta presentació crevillent 2015
Planeta oroneta presentació crevillent 2015Planeta oroneta presentació crevillent 2015
Planeta oroneta presentació crevillent 2015
 
"Discover windows phone" 02. page navigation
"Discover windows phone"   02. page navigation"Discover windows phone"   02. page navigation
"Discover windows phone" 02. page navigation
 
Api 581 sec.3 nivel 2 areas de consecuencias
Api 581 sec.3 nivel 2 areas de consecuenciasApi 581 sec.3 nivel 2 areas de consecuencias
Api 581 sec.3 nivel 2 areas de consecuencias
 
Congreso Actualización - Carrera en AUPSA
Congreso Actualización - Carrera en AUPSACongreso Actualización - Carrera en AUPSA
Congreso Actualización - Carrera en AUPSA
 
Annexes 050 meteo
Annexes 050 meteoAnnexes 050 meteo
Annexes 050 meteo
 
Sabidura perenne
Sabidura perenneSabidura perenne
Sabidura perenne
 
Ntc 1692 peligrosos
Ntc 1692 peligrososNtc 1692 peligrosos
Ntc 1692 peligrosos
 
Sistema de transporte de datos sobre redes inalambricas WLAN
Sistema de transporte de datos sobre redes inalambricas WLANSistema de transporte de datos sobre redes inalambricas WLAN
Sistema de transporte de datos sobre redes inalambricas WLAN
 
Tutorial unad sobre el plagio (Flor Posada Parada)
Tutorial unad sobre el plagio (Flor Posada Parada)Tutorial unad sobre el plagio (Flor Posada Parada)
Tutorial unad sobre el plagio (Flor Posada Parada)
 
Juego de la vida y como jugarlo
Juego de la vida y como jugarloJuego de la vida y como jugarlo
Juego de la vida y como jugarlo
 

Similar to How to test OpenGL drivers using Free Software (FOSDEM 2015)

01.Opengl_intro-2.ppt
01.Opengl_intro-2.ppt01.Opengl_intro-2.ppt
01.Opengl_intro-2.pptEngrZamaan
 
Computer Graphics and Multimedia lab report
Computer Graphics and Multimedia lab reportComputer Graphics and Multimedia lab report
Computer Graphics and Multimedia lab reportBijoy679
 
C c++-meetup-1nov2017-autofdo
C c++-meetup-1nov2017-autofdoC c++-meetup-1nov2017-autofdo
C c++-meetup-1nov2017-autofdoKim Phillips
 
Intro to Computer Graphics.ppt
Intro to Computer Graphics.pptIntro to Computer Graphics.ppt
Intro to Computer Graphics.pptadil104135
 
The Ring programming language version 1.6 book - Part 60 of 189
The Ring programming language version 1.6 book - Part 60 of 189The Ring programming language version 1.6 book - Part 60 of 189
The Ring programming language version 1.6 book - Part 60 of 189Mahmoud Samir Fayed
 
The Ring programming language version 1.6 book - Part 10 of 189
The Ring programming language version 1.6 book - Part 10 of 189The Ring programming language version 1.6 book - Part 10 of 189
The Ring programming language version 1.6 book - Part 10 of 189Mahmoud Samir Fayed
 
GLX, DRI, and i965
GLX, DRI, and i965GLX, DRI, and i965
GLX, DRI, and i965Chia-I Wu
 
The Ring programming language version 1.7 book - Part 11 of 196
The Ring programming language version 1.7 book - Part 11 of 196The Ring programming language version 1.7 book - Part 11 of 196
The Ring programming language version 1.7 book - Part 11 of 196Mahmoud Samir Fayed
 
OpenGL-SolarSystem-master.gitattributes# Auto detect text fil.docx
OpenGL-SolarSystem-master.gitattributes# Auto detect text fil.docxOpenGL-SolarSystem-master.gitattributes# Auto detect text fil.docx
OpenGL-SolarSystem-master.gitattributes# Auto detect text fil.docxhopeaustin33688
 
computer graphics at openGL
computer graphics at openGLcomputer graphics at openGL
computer graphics at openGLYasir Khan
 
Computer Graphics with OpenGL presentation Slides.pptx
Computer Graphics with OpenGL presentation Slides.pptxComputer Graphics with OpenGL presentation Slides.pptx
Computer Graphics with OpenGL presentation Slides.pptxAnandM62785
 
Cli jbug
Cli jbugCli jbug
Cli jbugmaeste
 
Google App Engine: Basic
Google App Engine: BasicGoogle App Engine: Basic
Google App Engine: BasicKAI CHU CHUNG
 
Ceph Day Melbourne - Troubleshooting Ceph
Ceph Day Melbourne - Troubleshooting Ceph Ceph Day Melbourne - Troubleshooting Ceph
Ceph Day Melbourne - Troubleshooting Ceph Ceph Community
 
The Ring programming language version 1.5.2 book - Part 8 of 181
The Ring programming language version 1.5.2 book - Part 8 of 181The Ring programming language version 1.5.2 book - Part 8 of 181
The Ring programming language version 1.5.2 book - Part 8 of 181Mahmoud Samir Fayed
 
OpenGL Introduction.
OpenGL Introduction.OpenGL Introduction.
OpenGL Introduction.Girish Ghate
 

Similar to How to test OpenGL drivers using Free Software (FOSDEM 2015) (20)

01.Opengl_intro-2.ppt
01.Opengl_intro-2.ppt01.Opengl_intro-2.ppt
01.Opengl_intro-2.ppt
 
201707 SER332 Lecture 03
201707 SER332 Lecture 03   201707 SER332 Lecture 03
201707 SER332 Lecture 03
 
Computer Graphics and Multimedia lab report
Computer Graphics and Multimedia lab reportComputer Graphics and Multimedia lab report
Computer Graphics and Multimedia lab report
 
C c++-meetup-1nov2017-autofdo
C c++-meetup-1nov2017-autofdoC c++-meetup-1nov2017-autofdo
C c++-meetup-1nov2017-autofdo
 
opengl.ppt
opengl.pptopengl.ppt
opengl.ppt
 
Intro to Computer Graphics.ppt
Intro to Computer Graphics.pptIntro to Computer Graphics.ppt
Intro to Computer Graphics.ppt
 
The Ring programming language version 1.6 book - Part 60 of 189
The Ring programming language version 1.6 book - Part 60 of 189The Ring programming language version 1.6 book - Part 60 of 189
The Ring programming language version 1.6 book - Part 60 of 189
 
Open gl
Open glOpen gl
Open gl
 
The Ring programming language version 1.6 book - Part 10 of 189
The Ring programming language version 1.6 book - Part 10 of 189The Ring programming language version 1.6 book - Part 10 of 189
The Ring programming language version 1.6 book - Part 10 of 189
 
GLX, DRI, and i965
GLX, DRI, and i965GLX, DRI, and i965
GLX, DRI, and i965
 
The Ring programming language version 1.7 book - Part 11 of 196
The Ring programming language version 1.7 book - Part 11 of 196The Ring programming language version 1.7 book - Part 11 of 196
The Ring programming language version 1.7 book - Part 11 of 196
 
OpenGL-SolarSystem-master.gitattributes# Auto detect text fil.docx
OpenGL-SolarSystem-master.gitattributes# Auto detect text fil.docxOpenGL-SolarSystem-master.gitattributes# Auto detect text fil.docx
OpenGL-SolarSystem-master.gitattributes# Auto detect text fil.docx
 
computer graphics at openGL
computer graphics at openGLcomputer graphics at openGL
computer graphics at openGL
 
Computer Graphics with OpenGL presentation Slides.pptx
Computer Graphics with OpenGL presentation Slides.pptxComputer Graphics with OpenGL presentation Slides.pptx
Computer Graphics with OpenGL presentation Slides.pptx
 
Cli jbug
Cli jbugCli jbug
Cli jbug
 
AS7 and CLI
AS7 and CLIAS7 and CLI
AS7 and CLI
 
Google App Engine: Basic
Google App Engine: BasicGoogle App Engine: Basic
Google App Engine: Basic
 
Ceph Day Melbourne - Troubleshooting Ceph
Ceph Day Melbourne - Troubleshooting Ceph Ceph Day Melbourne - Troubleshooting Ceph
Ceph Day Melbourne - Troubleshooting Ceph
 
The Ring programming language version 1.5.2 book - Part 8 of 181
The Ring programming language version 1.5.2 book - Part 8 of 181The Ring programming language version 1.5.2 book - Part 8 of 181
The Ring programming language version 1.5.2 book - Part 8 of 181
 
OpenGL Introduction.
OpenGL Introduction.OpenGL Introduction.
OpenGL Introduction.
 

More from Igalia

Building End-user Applications on Embedded Devices with WPE
Building End-user Applications on Embedded Devices with WPEBuilding End-user Applications on Embedded Devices with WPE
Building End-user Applications on Embedded Devices with WPEIgalia
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Igalia
 
Automated Testing for Web-based Systems on Embedded Devices
Automated Testing for Web-based Systems on Embedded DevicesAutomated Testing for Web-based Systems on Embedded Devices
Automated Testing for Web-based Systems on Embedded DevicesIgalia
 
Embedding WPE WebKit - from Bring-up to Maintenance
Embedding WPE WebKit - from Bring-up to MaintenanceEmbedding WPE WebKit - from Bring-up to Maintenance
Embedding WPE WebKit - from Bring-up to MaintenanceIgalia
 
Optimizing Scheduler for Linux Gaming.pdf
Optimizing Scheduler for Linux Gaming.pdfOptimizing Scheduler for Linux Gaming.pdf
Optimizing Scheduler for Linux Gaming.pdfIgalia
 
Running JS via WASM faster with JIT
Running JS via WASM      faster with JITRunning JS via WASM      faster with JIT
Running JS via WASM faster with JITIgalia
 
To crash or not to crash: if you do, at least recover fast!
To crash or not to crash: if you do, at least recover fast!To crash or not to crash: if you do, at least recover fast!
To crash or not to crash: if you do, at least recover fast!Igalia
 
Implementing a Vulkan Video Encoder From Mesa to GStreamer
Implementing a Vulkan Video Encoder From Mesa to GStreamerImplementing a Vulkan Video Encoder From Mesa to GStreamer
Implementing a Vulkan Video Encoder From Mesa to GStreamerIgalia
 
8 Years of Open Drivers, including the State of Vulkan in Mesa
8 Years of Open Drivers, including the State of Vulkan in Mesa8 Years of Open Drivers, including the State of Vulkan in Mesa
8 Years of Open Drivers, including the State of Vulkan in MesaIgalia
 
Introducción a Mesa. Caso específico dos dispositivos Raspberry Pi por Igalia
Introducción a Mesa. Caso específico dos dispositivos Raspberry Pi por IgaliaIntroducción a Mesa. Caso específico dos dispositivos Raspberry Pi por Igalia
Introducción a Mesa. Caso específico dos dispositivos Raspberry Pi por IgaliaIgalia
 
2023 in Chimera Linux
2023 in Chimera                    Linux2023 in Chimera                    Linux
2023 in Chimera LinuxIgalia
 
Building a Linux distro with LLVM
Building a Linux distro        with LLVMBuilding a Linux distro        with LLVM
Building a Linux distro with LLVMIgalia
 
turnip: Update on Open Source Vulkan Driver for Adreno GPUs
turnip: Update on Open Source Vulkan Driver for Adreno GPUsturnip: Update on Open Source Vulkan Driver for Adreno GPUs
turnip: Update on Open Source Vulkan Driver for Adreno GPUsIgalia
 
Graphics stack updates for Raspberry Pi devices
Graphics stack updates for Raspberry Pi devicesGraphics stack updates for Raspberry Pi devices
Graphics stack updates for Raspberry Pi devicesIgalia
 
Delegated Compositing - Utilizing Wayland Protocols for Chromium on ChromeOS
Delegated Compositing - Utilizing Wayland Protocols for Chromium on ChromeOSDelegated Compositing - Utilizing Wayland Protocols for Chromium on ChromeOS
Delegated Compositing - Utilizing Wayland Protocols for Chromium on ChromeOSIgalia
 
MessageFormat: The future of i18n on the web
MessageFormat: The future of i18n on the webMessageFormat: The future of i18n on the web
MessageFormat: The future of i18n on the webIgalia
 
Replacing the geometry pipeline with mesh shaders
Replacing the geometry pipeline with mesh shadersReplacing the geometry pipeline with mesh shaders
Replacing the geometry pipeline with mesh shadersIgalia
 
I'm not an AMD expert, but...
I'm not an AMD expert, but...I'm not an AMD expert, but...
I'm not an AMD expert, but...Igalia
 
Status of Vulkan on Raspberry
Status of Vulkan on RaspberryStatus of Vulkan on Raspberry
Status of Vulkan on RaspberryIgalia
 
Enable hardware acceleration for GL applications without glamor on Xorg modes...
Enable hardware acceleration for GL applications without glamor on Xorg modes...Enable hardware acceleration for GL applications without glamor on Xorg modes...
Enable hardware acceleration for GL applications without glamor on Xorg modes...Igalia
 

More from Igalia (20)

Building End-user Applications on Embedded Devices with WPE
Building End-user Applications on Embedded Devices with WPEBuilding End-user Applications on Embedded Devices with WPE
Building End-user Applications on Embedded Devices with WPE
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
 
Automated Testing for Web-based Systems on Embedded Devices
Automated Testing for Web-based Systems on Embedded DevicesAutomated Testing for Web-based Systems on Embedded Devices
Automated Testing for Web-based Systems on Embedded Devices
 
Embedding WPE WebKit - from Bring-up to Maintenance
Embedding WPE WebKit - from Bring-up to MaintenanceEmbedding WPE WebKit - from Bring-up to Maintenance
Embedding WPE WebKit - from Bring-up to Maintenance
 
Optimizing Scheduler for Linux Gaming.pdf
Optimizing Scheduler for Linux Gaming.pdfOptimizing Scheduler for Linux Gaming.pdf
Optimizing Scheduler for Linux Gaming.pdf
 
Running JS via WASM faster with JIT
Running JS via WASM      faster with JITRunning JS via WASM      faster with JIT
Running JS via WASM faster with JIT
 
To crash or not to crash: if you do, at least recover fast!
To crash or not to crash: if you do, at least recover fast!To crash or not to crash: if you do, at least recover fast!
To crash or not to crash: if you do, at least recover fast!
 
Implementing a Vulkan Video Encoder From Mesa to GStreamer
Implementing a Vulkan Video Encoder From Mesa to GStreamerImplementing a Vulkan Video Encoder From Mesa to GStreamer
Implementing a Vulkan Video Encoder From Mesa to GStreamer
 
8 Years of Open Drivers, including the State of Vulkan in Mesa
8 Years of Open Drivers, including the State of Vulkan in Mesa8 Years of Open Drivers, including the State of Vulkan in Mesa
8 Years of Open Drivers, including the State of Vulkan in Mesa
 
Introducción a Mesa. Caso específico dos dispositivos Raspberry Pi por Igalia
Introducción a Mesa. Caso específico dos dispositivos Raspberry Pi por IgaliaIntroducción a Mesa. Caso específico dos dispositivos Raspberry Pi por Igalia
Introducción a Mesa. Caso específico dos dispositivos Raspberry Pi por Igalia
 
2023 in Chimera Linux
2023 in Chimera                    Linux2023 in Chimera                    Linux
2023 in Chimera Linux
 
Building a Linux distro with LLVM
Building a Linux distro        with LLVMBuilding a Linux distro        with LLVM
Building a Linux distro with LLVM
 
turnip: Update on Open Source Vulkan Driver for Adreno GPUs
turnip: Update on Open Source Vulkan Driver for Adreno GPUsturnip: Update on Open Source Vulkan Driver for Adreno GPUs
turnip: Update on Open Source Vulkan Driver for Adreno GPUs
 
Graphics stack updates for Raspberry Pi devices
Graphics stack updates for Raspberry Pi devicesGraphics stack updates for Raspberry Pi devices
Graphics stack updates for Raspberry Pi devices
 
Delegated Compositing - Utilizing Wayland Protocols for Chromium on ChromeOS
Delegated Compositing - Utilizing Wayland Protocols for Chromium on ChromeOSDelegated Compositing - Utilizing Wayland Protocols for Chromium on ChromeOS
Delegated Compositing - Utilizing Wayland Protocols for Chromium on ChromeOS
 
MessageFormat: The future of i18n on the web
MessageFormat: The future of i18n on the webMessageFormat: The future of i18n on the web
MessageFormat: The future of i18n on the web
 
Replacing the geometry pipeline with mesh shaders
Replacing the geometry pipeline with mesh shadersReplacing the geometry pipeline with mesh shaders
Replacing the geometry pipeline with mesh shaders
 
I'm not an AMD expert, but...
I'm not an AMD expert, but...I'm not an AMD expert, but...
I'm not an AMD expert, but...
 
Status of Vulkan on Raspberry
Status of Vulkan on RaspberryStatus of Vulkan on Raspberry
Status of Vulkan on Raspberry
 
Enable hardware acceleration for GL applications without glamor on Xorg modes...
Enable hardware acceleration for GL applications without glamor on Xorg modes...Enable hardware acceleration for GL applications without glamor on Xorg modes...
Enable hardware acceleration for GL applications without glamor on Xorg modes...
 

Recently uploaded

Bluetooth Controlled Car with Arduino.pdf
Bluetooth Controlled Car with Arduino.pdfBluetooth Controlled Car with Arduino.pdf
Bluetooth Controlled Car with Arduino.pdfngoud9212
 
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticsKotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticscarlostorres15106
 
Understanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitectureUnderstanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitecturePixlogix Infotech
 
Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Mattias Andersson
 
CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):comworks
 
SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024Scott Keck-Warren
 
Pigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping ElbowsPigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping ElbowsPigging Solutions
 
New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024
New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024
New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024BookNet Canada
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupFlorian Wilhelm
 
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 3652toLead Limited
 
Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesSinan KOZAK
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationRidwan Fadjar
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubKalema Edgar
 
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024BookNet Canada
 
AI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsAI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsMemoori
 
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks..."LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...Fwdays
 
Pigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food ManufacturingPigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food ManufacturingPigging Solutions
 
Transcript: New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024BookNet Canada
 

Recently uploaded (20)

Bluetooth Controlled Car with Arduino.pdf
Bluetooth Controlled Car with Arduino.pdfBluetooth Controlled Car with Arduino.pdf
Bluetooth Controlled Car with Arduino.pdf
 
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticsKotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
 
Understanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitectureUnderstanding the Laravel MVC Architecture
Understanding the Laravel MVC Architecture
 
Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?
 
CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):
 
SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024
 
Pigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping ElbowsPigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping Elbows
 
New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024
New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024
New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project Setup
 
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
 
Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen Frames
 
DMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special EditionDMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special Edition
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 Presentation
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding Club
 
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
 
AI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsAI as an Interface for Commercial Buildings
AI as an Interface for Commercial Buildings
 
The transition to renewables in India.pdf
The transition to renewables in India.pdfThe transition to renewables in India.pdf
The transition to renewables in India.pdf
 
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks..."LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
 
Pigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food ManufacturingPigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food Manufacturing
 
Transcript: New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024
 

How to test OpenGL drivers using Free Software (FOSDEM 2015)

  • 1. glGenVertexArrays(1, &vao); glBindVertexArray(vao); /* Draw and record */ glBeginTransformFeedback(GL_POINTS); glDrawArrays(GL_POINTS, 0, 1); for (i = 0; i < STREAMS; i++) { glEndQueryIndexed(GL_PRIMITIVES_GENERATED, i); glEndQueryIndexed(GL_TRANSFORM_FEEDBACK_ PRIMITIVES_WRITTEN, i); } glEndTransformFeedback(); glDeleteVertexArrays(1, &vao); if (!piglit_check_gl_error(GL_NO_ERROR)) piglit_report_result(PIGLIT_FAIL); pass = probe_buffers(xfb, queries, primitive_n); PIGLIT_FAIL); Samuel Iglesias Gonsálvez siglesias@igalia.com How to test OpenGL drivers with Free Software
  • 3. OpenGL ● OpenGL is an API for rendering 2D and 3D graphics. ● Silicon Graphics Inc. (SGI) started developing OpenGL in 1991 and released it in January 1992 ● Now managed by the non-profit technology consortium Khronos Group.
  • 4. OpenGL ● It is widely use in different form factor devices (PC, tablets, mobile phones, embedded devices...) for running applications that require 2D/3D graphics rendering (games, scientific applications, etc)
  • 5. OpenGL ● However, OpenGL is only an API specification... ● Implementors are free to provide their own libraries and drivers. ● Possible incompatibilities between implementations and OpenGL. ● Solution: OpenGL conformance test suites
  • 7. OpenGL conformance test suites ● There is an official OpenGL conformance test suite from Khronos group: https://www.khronos.org/opengl/adopters/ ● It is for free (as in beer) for software developers but it is not Free Software (as in speech). https://www.khronos.org/files/adopters_agreement.pdf
  • 8. OpenGL conformance test suites ● There are unofficial Free Software OpenGL conformance test suites: ● Glean ● DrawElements Quality Program (dEQP) ● Piglit
  • 10. Glean ● Created in 1999 by Allen Akin. ● MIT license. ● Tested on GNU/Linux and Microsoft Windows. ● There hasn't been much activity in Glean for a few years now. ● Nowadays, it's part of Piglit http://glean.sourceforge.net/
  • 11. dEQP
  • 12. dEQP ● Draw Elements Quality Program (dEQP) ● Developed by Finnish company called drawElements. – Bought by Google in 2014 ● Google open-sourced dEQP in the Android Lollipop release. ● Apache License 2.0
  • 13. dEQP ● Supports OpenGL ES 2.0 and better, OpenCL 1.X, and EGL 1.4. ● Supported OSes include Android, GNU/Linux, Windows, iOS. ● Recently, piglit added support for running dEQP GLES3 tests.
  • 14. dEQP ● Clone repository: $ git clone https://android.googlesource.com/platform/external/deqp/ ● [Optional] Add to CMakeLists.txt: set(PNG_INCLUDE_PATH "/usr/include/libpng") set(PNG_LIBRARY "/usr/lib/x86_64-linux-gnu/libpng.so") set(CMAKE_BUILD_TYPE DEBUG) set(CMAKE_C_FLAGS "-O0 -ggdb") set(CMAKE_C_FLAGS_DEBUG "-O0 -ggdb") set(CMAKE_C_FLAGS_RELEASE "-O0 -ggdb") set(CMAKE_CXX_FLAGS "-O0 -ggdb") set(CMAKE_CXX_FLAGS_DEBUG "-O0 -ggdb") set(CMAKE_CXX_FLAGS_RELEASE "-O0 -ggdb")
  • 15. dEQP ● Build: $ cmake . $ make ● Note: it doesn't provide an "install" target.
  • 16. dEQP ● Run the tests with execserver ● Create list of tests to run $ cd modules/gles3 $ ./deqp-gles3 --deqp-runmode=xml-caselist ● Launch server $ execserver/execserver ● Launch executor (in other terminal) $ ./executor/executor -b deqp-gles3 -wd modules/gles3/ -cd modules/gles3/ -t dEQP-GLES3.functional.* -o ./gles3- functional.xml --cmdline="--deqp-log-images=disable"
  • 17. dEQP
  • 18. dEQP ● Run the tests without execserver: $ cd ./modules/gles3 $ ./deqp-gles3 -n dEQP-GLES3.functional.* ● Results are saved in TestResults.qpa file
  • 19. dEQP
  • 20. dEQP ● How to convert Base64 string to PNG images: ● http://www.base64-image.net/ Result Reference Error mask
  • 21. dEQP ● It can convert XML files to CSV $ executor/testlog-to-csv ● No HTML output
  • 23. Piglit ● Created by Nicolai Hähnle in 2007 ● Widely used in Mesa for testing and development ● MIT license ● Include tests for OpenGL, OpenGL ES, OpenCL. http://piglit.freedesktop.org
  • 24. Piglit ● Dependencies ● Python 2.7.x ● Python mako module ● numpy ● cmake ● GL, glu and glut libraries and development packages (i.e. headers) ● X11 libraries and development packages (i.e. headers) ● Waffle: http://www.waffle-gl.org
  • 25. Piglit ● Build: $ git clone git://anongit.freedesktop.org/git/piglit $ cmake . $ make ● Check installation: $ ./piglit run tests/sanity.tests results/sanity.results ● Your first complete piglit run: $ ./piglit run tests/all results/all-run
  • 26. Piglit ● Process results file: ● HTML output $ ./piglit summary html summary/summary-all results/all-run ● CLI output $ ./piglit summary console results/all-run ● CSV output $ ./piglit summary csv results/all-run
  • 27. Piglit ● CLI output [...] spec/glsl-1.50/compiler/interface-block-name-uses-gl- prefix.vert: pass spec/EXT_framebuffer_object/fbo-clear-formats/GL_ALPHA16 (fbo incomplete): skip spec/ARB_copy_image/arb_copy_image-targets GL_TEXTURE_CUBE_MAP_ARRAY 32 32 18 GL_TEXTURE_2D_ARRAY 32 16 15 11 12 5 5 1 2 14 15 9: pass spec/glsl-1.30/execution/built-in-functions/fs-op-bitxor-uvec3- uint: pass spec/ARB_depth_texture/depthstencil-render-miplevels 146 d=z16: pass spec/glsl-1.10/execution/variable-indexing/fs-varying-mat2-col- row-rd: pass
  • 28. Piglit summary:         pass: 25085        fail: 262         crash: 5        skip: 9746      timeout: 0        warn: 13 dmesg-warn: 0 dmesg-fail: 0        total: 35111
  • 31. Piglit ● How to run standalone tests $ bin/texsubimage pbo -auto -fbo Using test set: Core formats texsubimage failed target: GL_TEXTURE_2D internal format: GL_COMPRESSED_RGB_S3TC_DXT1_EXT region: 8, 8 48 x 28 [...] PIGLIT: {"result": "fail" }
  • 32. Piglit ● Tailor your piglit run ● Add Dmesg information: --dmesg ● Verbose: -l verbose ● Run all concurrent: --all-concurrent ● Disable concurrent test runs: --no- concurrency
  • 33. Piglit ● Tailor your piglit run ● Execute by name (*texture*) $ ./piglit run tests/all -t texture results/all-texture ● Remove tests by name (*color*) $ ./piglit run tests/all -t texture -x color results/all- texture ● More information: $ ./piglit run -h
  • 34. Piglit ● Test profile – List of tests to be executed by piglit in a given run. – Usually imports other test profile and edits the list of test (add/remove). – Written in python.
  • 36. Piglit ● DEQP GLES 3 support $ export PIGLIT_DEQP_GLES3_EXE=~/deqp/modules/gles3/deqp- gles3 $ ./piglit run tests/deqp_gles3.py -t dEQP- GLES3.functional.* results/gles3-functional
  • 38. Conclusions ● OpenGL is an API ● Implementations can be incompatible ● Need OpenGL conformance test suites ● Khronos provides an official one but it is not Free Software (as in speech). ● There are unofficial Free Software alternatives: – Glean, dEQP, piglit
  • 40. This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License.