Patchwork [meta-browser,v2,3/4] chromium: Add use-egl PACKAGECONFIG option

login
register
mail settings
Submitter dv
Date April 29, 2014, 6:39 a.m.
Message ID <1398753593-4447-4-git-send-email-dv@pseudoterminal.org>
Download mbox | patch
Permalink /patch/71181/
State New, archived
Headers show

Comments

dv - April 29, 2014, 6:39 a.m.
By default, Chromium will try to use GLX and regular OpenGL. On embedded
platforms, these are often not present, or unaccelerated, and using EGL
and OpenGL ES instead makes more sense. To produce builds that use EGL and
OpenGL ES by default instead, this PACKAGECONFIG option can be used.

An EGL/OpenGLES-enabled build produces a chromium version that renders
2D and WebGL with GPU acceleration (if present).

Signed-off-by: Carlos Rafael Giani <dv@pseudoterminal.org>
---
 recipes-browser/chromium/chromium_35.0.1883.0.bb | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)
Otavio Salvador - April 29, 2014, 6:30 p.m.
On Tue, Apr 29, 2014 at 3:39 AM, Carlos Rafael Giani
<dv@pseudoterminal.org> wrote:
> By default, Chromium will try to use GLX and regular OpenGL. On embedded
> platforms, these are often not present, or unaccelerated, and using EGL
> and OpenGL ES instead makes more sense. To produce builds that use EGL and
> OpenGL ES by default instead, this PACKAGECONFIG option can be used.
>
> An EGL/OpenGLES-enabled build produces a chromium version that renders
> 2D and WebGL with GPU acceleration (if present).
>
> Signed-off-by: Carlos Rafael Giani <dv@pseudoterminal.org>
> ---
>  recipes-browser/chromium/chromium_35.0.1883.0.bb | 8 +++++++-
>  1 file changed, 7 insertions(+), 1 deletion(-)
>
> diff --git a/recipes-browser/chromium/chromium_35.0.1883.0.bb b/recipes-browser/chromium/chromium_35.0.1883.0.bb
> index 1923b4e..1fb050f 100644
> --- a/recipes-browser/chromium/chromium_35.0.1883.0.bb
> +++ b/recipes-browser/chromium/chromium_35.0.1883.0.bb
> @@ -23,6 +23,10 @@ COMPATIBLE_MACHINE_armv7a = "(.*)"
>
>  inherit gettext
>
> +# this makes sure the dependencies for the EGL mode are present; otherwise, the configure scripts
> +# automatically and silently fall back to GLX
> +PACKAGECONFIG[use-egl] = ",,virtual/egl virtual/libgles2"

There is any way to 'force' build to use egl here and fail if
something here is missing?
dv - April 29, 2014, 7:53 p.m.
On 2014-04-29 20:30, Otavio Salvador wrote:
> On Tue, Apr 29, 2014 at 3:39 AM, Carlos Rafael Giani
> <dv@pseudoterminal.org> wrote:
>> By default, Chromium will try to use GLX and regular OpenGL. On embedded
>> platforms, these are often not present, or unaccelerated, and using EGL
>> and OpenGL ES instead makes more sense. To produce builds that use EGL and
>> OpenGL ES by default instead, this PACKAGECONFIG option can be used.
>>
>> An EGL/OpenGLES-enabled build produces a chromium version that renders
>> 2D and WebGL with GPU acceleration (if present).
>>
>> Signed-off-by: Carlos Rafael Giani <dv@pseudoterminal.org>
>> ---
>>   recipes-browser/chromium/chromium_35.0.1883.0.bb | 8 +++++++-
>>   1 file changed, 7 insertions(+), 1 deletion(-)
>>
>> diff --git a/recipes-browser/chromium/chromium_35.0.1883.0.bb b/recipes-browser/chromium/chromium_35.0.1883.0.bb
>> index 1923b4e..1fb050f 100644
>> --- a/recipes-browser/chromium/chromium_35.0.1883.0.bb
>> +++ b/recipes-browser/chromium/chromium_35.0.1883.0.bb
>> @@ -23,6 +23,10 @@ COMPATIBLE_MACHINE_armv7a = "(.*)"
>>
>>   inherit gettext
>>
>> +# this makes sure the dependencies for the EGL mode are present; otherwise, the configure scripts
>> +# automatically and silently fall back to GLX
>> +PACKAGECONFIG[use-egl] = ",,virtual/egl virtual/libgles2"
> There is any way to 'force' build to use egl here and fail if
> something here is missing?
>

That is actually tough. Chromium does not simply link to the EGL and 
GLESv2 libraries; it opens them with dlopen() and gets the GL function 
pointers with dlsym() , as part of the sandboxing strategy. Furthermore, 
cairo requires virtual/egl too (not virtual/libgles2 though). As for 
compilation errors, I haven't found a way to provoke them. I am not 
entirely sure if Chromium is using system EGL/GLES headers, or if it is 
always using its internal copy of the Khronos headers instead. I got 
conflicting responses. So, to be sure (and also to emphasize the 
dependency in the recipe), I added it.

What is certain is that without the --use-gl=egl switch, Chromium will 
always use GLX.

Patch

diff --git a/recipes-browser/chromium/chromium_35.0.1883.0.bb b/recipes-browser/chromium/chromium_35.0.1883.0.bb
index 1923b4e..1fb050f 100644
--- a/recipes-browser/chromium/chromium_35.0.1883.0.bb
+++ b/recipes-browser/chromium/chromium_35.0.1883.0.bb
@@ -23,6 +23,10 @@  COMPATIBLE_MACHINE_armv7a = "(.*)"
 
 inherit gettext
 
+# this makes sure the dependencies for the EGL mode are present; otherwise, the configure scripts
+# automatically and silently fall back to GLX
+PACKAGECONFIG[use-egl] = ",,virtual/egl virtual/libgles2"
+
 EXTRA_OEGYP =	" \
 	${@base_contains('DISTRO_FEATURES', 'ld-is-gold', '', '-Dlinux_use_gold_binary=0', d)} \
 	${@base_contains('DISTRO_FEATURES', 'ld-is-gold', '', '-Dlinux_use_gold_flags=0', d)} \
@@ -33,7 +37,9 @@  EXTRA_OEGYP =	" \
 "
 ARMFPABI_armv7a = "${@bb.utils.contains('TUNE_FEATURES', 'callconvention-hard', 'arm_float_abi=hard', 'arm_float_abi=softfp', d)}"
 
-CHROMIUM_EXTRA_ARGS ?= ""
+CHROMIUM_EXTRA_ARGS ?= " \
+	${@bb.utils.contains('PACKAGECONFIG', 'use-egl', '--use-gl=egl', '', d)} \
+"
 
 export GYP_DEFINES="${ARMFPABI} release_extra_cflags='-Wno-error=unused-local-typedefs' sysroot=''"
 do_configure() {