diff --git a/components/servo/Cargo.lock b/components/servo/Cargo.lock index 4b3053f9a8a..438fac9a17b 100644 --- a/components/servo/Cargo.lock +++ b/components/servo/Cargo.lock @@ -20,7 +20,7 @@ dependencies = [ "glutin_app 0.0.1", "image 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", "ipc-channel 0.2.1 (git+https://github.com/servo/ipc-channel)", - "layers 0.2.2 (git+https://github.com/servo/rust-layers)", + "layers 0.2.4 (git+https://github.com/servo/rust-layers)", "layout 0.0.1", "libc 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", @@ -162,7 +162,7 @@ dependencies = [ "gfx_traits 0.0.1", "gleam 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", "ipc-channel 0.2.1 (git+https://github.com/servo/ipc-channel)", - "layers 0.2.2 (git+https://github.com/servo/rust-layers)", + "layers 0.2.4 (git+https://github.com/servo/rust-layers)", "log 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", "num 0.1.31 (registry+https://github.com/rust-lang/crates.io-index)", "offscreen_gl_context 0.1.0 (git+https://github.com/ecoal95/rust-offscreen-rendering-context)", @@ -182,7 +182,7 @@ dependencies = [ "heapsize 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", "heapsize_plugin 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", "ipc-channel 0.2.1 (git+https://github.com/servo/ipc-channel)", - "layers 0.2.2 (git+https://github.com/servo/rust-layers)", + "layers 0.2.4 (git+https://github.com/servo/rust-layers)", "offscreen_gl_context 0.1.0 (git+https://github.com/ecoal95/rust-offscreen-rendering-context)", "plugins 0.0.1", "serde 0.6.15 (registry+https://github.com/rust-lang/crates.io-index)", @@ -286,7 +286,7 @@ dependencies = [ "gleam 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", "image 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", "ipc-channel 0.2.1 (git+https://github.com/servo/ipc-channel)", - "layers 0.2.2 (git+https://github.com/servo/rust-layers)", + "layers 0.2.4 (git+https://github.com/servo/rust-layers)", "layout_traits 0.0.1", "log 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", "msg 0.0.1", @@ -672,7 +672,7 @@ dependencies = [ "heapsize 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", "heapsize_plugin 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", "ipc-channel 0.2.1 (git+https://github.com/servo/ipc-channel)", - "layers 0.2.2 (git+https://github.com/servo/rust-layers)", + "layers 0.2.4 (git+https://github.com/servo/rust-layers)", "lazy_static 0.1.15 (registry+https://github.com/rust-lang/crates.io-index)", "libc 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", @@ -717,7 +717,7 @@ dependencies = [ "euclid 0.6.4 (registry+https://github.com/rust-lang/crates.io-index)", "heapsize 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", "heapsize_plugin 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", - "layers 0.2.2 (git+https://github.com/servo/rust-layers)", + "layers 0.2.4 (git+https://github.com/servo/rust-layers)", "msg 0.0.1", "plugins 0.0.1", "serde 0.6.15 (registry+https://github.com/rust-lang/crates.io-index)", @@ -767,7 +767,7 @@ dependencies = [ "compositing 0.0.1", "euclid 0.6.4 (registry+https://github.com/rust-lang/crates.io-index)", "gleam 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", - "layers 0.2.2 (git+https://github.com/servo/rust-layers)", + "layers 0.2.4 (git+https://github.com/servo/rust-layers)", "msg 0.0.1", "net_traits 0.0.1", "script_traits 0.0.1", @@ -992,8 +992,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "layers" -version = "0.2.2" -source = "git+https://github.com/servo/rust-layers#dd28dbee88fa18cfe416403d59e9c74c7299d7ab" +version = "0.2.4" +source = "git+https://github.com/servo/rust-layers#3cb5df49d7f069eea1f1f0550921c5833cb5bc7f" dependencies = [ "azure 0.4.3 (git+https://github.com/servo/rust-azure)", "cgl 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1224,7 +1224,7 @@ dependencies = [ "heapsize_plugin 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", "hyper 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", "ipc-channel 0.2.1 (git+https://github.com/servo/ipc-channel)", - "layers 0.2.2 (git+https://github.com/servo/rust-layers)", + "layers 0.2.4 (git+https://github.com/servo/rust-layers)", "plugins 0.0.1", "rustc-serialize 0.3.16 (registry+https://github.com/rust-lang/crates.io-index)", "serde 0.6.15 (registry+https://github.com/rust-lang/crates.io-index)", diff --git a/components/util/opts.rs b/components/util/opts.rs index 410b9da7c11..1b9129b7c8e 100644 --- a/components/util/opts.rs +++ b/components/util/opts.rs @@ -186,6 +186,9 @@ pub struct Opts { /// True if WebRender should use multisample antialiasing. pub use_msaa: bool, + + // Which rendering API to use. + pub render_api: RenderApi, } fn print_usage(app: &str, opts: &Options) { @@ -391,6 +394,14 @@ enum UserAgent { Gonk, } +#[derive(Clone, Debug, Eq, Deserialize, PartialEq, Serialize)] +pub enum RenderApi { + GL, + ES2, +} + +const DEFAULT_RENDER_API: RenderApi = RenderApi::GL; + fn default_user_agent_string(agent: UserAgent) -> String { #[cfg(all(target_os = "linux", target_arch = "x86_64"))] const DESKTOP_UA_STRING: &'static str = @@ -487,6 +498,7 @@ pub fn default_opts() -> Opts { use_webrender: false, webrender_stats: false, use_msaa: false, + render_api: DEFAULT_RENDER_API, } } @@ -531,6 +543,7 @@ pub fn from_cmdline_args(args: &[String]) -> ArgumentParsingResult { "A preference to set to enable", "dom.mozbrowser.enabled"); opts.optflag("b", "no-native-titlebar", "Do not use native titlebar"); opts.optflag("w", "webrender", "Use webrender backend"); + opts.optopt("G", "graphics", "Select graphics backend (gl or es2)", "gl"); let opt_match = match opts.parse(args) { Ok(m) => m, @@ -675,6 +688,13 @@ pub fn from_cmdline_args(args: &[String]) -> ArgumentParsingResult { let use_webrender = opt_match.opt_present("w") && !opt_match.opt_present("z"); + let render_api = match opt_match.opt_str("G") { + Some(ref ga) if ga == "gl" => RenderApi::GL, + Some(ref ga) if ga == "es2" => RenderApi::ES2, + None => DEFAULT_RENDER_API, + _ => args_fail(&format!("error: graphics option must be gl or es2:")), + }; + let opts = Opts { is_running_problem_test: is_running_problem_test, url: Some(url), @@ -704,6 +724,7 @@ pub fn from_cmdline_args(args: &[String]) -> ArgumentParsingResult { user_agent: user_agent, multiprocess: opt_match.opt_present("M"), sandbox: opt_match.opt_present("S"), + render_api: render_api, show_debug_borders: debug_options.show_compositor_borders, show_debug_fragment_borders: debug_options.show_fragment_borders, show_debug_parallel_paint: debug_options.show_parallel_paint, diff --git a/ports/cef/Cargo.lock b/ports/cef/Cargo.lock index eed1743770c..bc46adf57d2 100644 --- a/ports/cef/Cargo.lock +++ b/ports/cef/Cargo.lock @@ -15,7 +15,7 @@ dependencies = [ "gleam 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", "glutin_app 0.0.1", "js 0.1.2 (git+https://github.com/servo/rust-mozjs)", - "layers 0.2.2 (git+https://github.com/servo/rust-layers)", + "layers 0.2.4 (git+https://github.com/servo/rust-layers)", "libc 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", "msg 0.0.1", @@ -147,7 +147,7 @@ dependencies = [ "gfx_traits 0.0.1", "gleam 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", "ipc-channel 0.2.1 (git+https://github.com/servo/ipc-channel)", - "layers 0.2.2 (git+https://github.com/servo/rust-layers)", + "layers 0.2.4 (git+https://github.com/servo/rust-layers)", "log 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", "num 0.1.31 (registry+https://github.com/rust-lang/crates.io-index)", "offscreen_gl_context 0.1.0 (git+https://github.com/ecoal95/rust-offscreen-rendering-context)", @@ -167,7 +167,7 @@ dependencies = [ "heapsize 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", "heapsize_plugin 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", "ipc-channel 0.2.1 (git+https://github.com/servo/ipc-channel)", - "layers 0.2.2 (git+https://github.com/servo/rust-layers)", + "layers 0.2.4 (git+https://github.com/servo/rust-layers)", "offscreen_gl_context 0.1.0 (git+https://github.com/ecoal95/rust-offscreen-rendering-context)", "plugins 0.0.1", "serde 0.6.15 (registry+https://github.com/rust-lang/crates.io-index)", @@ -256,7 +256,7 @@ dependencies = [ "gleam 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", "image 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", "ipc-channel 0.2.1 (git+https://github.com/servo/ipc-channel)", - "layers 0.2.2 (git+https://github.com/servo/rust-layers)", + "layers 0.2.4 (git+https://github.com/servo/rust-layers)", "layout_traits 0.0.1", "log 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", "msg 0.0.1", @@ -609,7 +609,7 @@ dependencies = [ "heapsize 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", "heapsize_plugin 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", "ipc-channel 0.2.1 (git+https://github.com/servo/ipc-channel)", - "layers 0.2.2 (git+https://github.com/servo/rust-layers)", + "layers 0.2.4 (git+https://github.com/servo/rust-layers)", "lazy_static 0.1.15 (registry+https://github.com/rust-lang/crates.io-index)", "libc 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", @@ -645,7 +645,7 @@ dependencies = [ "euclid 0.6.4 (registry+https://github.com/rust-lang/crates.io-index)", "heapsize 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", "heapsize_plugin 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", - "layers 0.2.2 (git+https://github.com/servo/rust-layers)", + "layers 0.2.4 (git+https://github.com/servo/rust-layers)", "msg 0.0.1", "plugins 0.0.1", "serde 0.6.15 (registry+https://github.com/rust-lang/crates.io-index)", @@ -695,7 +695,7 @@ dependencies = [ "compositing 0.0.1", "euclid 0.6.4 (registry+https://github.com/rust-lang/crates.io-index)", "gleam 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", - "layers 0.2.2 (git+https://github.com/servo/rust-layers)", + "layers 0.2.4 (git+https://github.com/servo/rust-layers)", "msg 0.0.1", "net_traits 0.0.1", "script_traits 0.0.1", @@ -920,8 +920,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "layers" -version = "0.2.2" -source = "git+https://github.com/servo/rust-layers#dd28dbee88fa18cfe416403d59e9c74c7299d7ab" +version = "0.2.4" +source = "git+https://github.com/servo/rust-layers#3cb5df49d7f069eea1f1f0550921c5833cb5bc7f" dependencies = [ "azure 0.4.3 (git+https://github.com/servo/rust-azure)", "cgl 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1152,7 +1152,7 @@ dependencies = [ "heapsize_plugin 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", "hyper 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", "ipc-channel 0.2.1 (git+https://github.com/servo/ipc-channel)", - "layers 0.2.2 (git+https://github.com/servo/rust-layers)", + "layers 0.2.4 (git+https://github.com/servo/rust-layers)", "plugins 0.0.1", "rustc-serialize 0.3.16 (registry+https://github.com/rust-lang/crates.io-index)", "serde 0.6.15 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1684,7 +1684,7 @@ dependencies = [ "gleam 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", "glutin_app 0.0.1", "ipc-channel 0.2.1 (git+https://github.com/servo/ipc-channel)", - "layers 0.2.2 (git+https://github.com/servo/rust-layers)", + "layers 0.2.4 (git+https://github.com/servo/rust-layers)", "layout 0.0.1", "libc 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", diff --git a/ports/glutin/window.rs b/ports/glutin/window.rs index 8f5c1e56211..a2550d76f77 100644 --- a/ports/glutin/window.rs +++ b/ports/glutin/window.rs @@ -33,7 +33,7 @@ use style_traits::cursor::Cursor; use url::Url; use util::geometry::ScreenPx; #[cfg(feature = "window")] -use util::opts; +use util::opts::{self, RenderApi}; #[cfg(feature = "window")] static mut g_nested_event_loop_listener: Option<*mut (NestedEventLoopListener + 'static)> = None; @@ -157,9 +157,15 @@ impl Window { #[cfg(not(target_os = "android"))] fn gl_version() -> GlRequest { if opts::get().use_webrender { - GlRequest::Specific(Api::OpenGl, (3, 2)) - } else { - GlRequest::Specific(Api::OpenGl, (2, 1)) + return GlRequest::Specific(Api::OpenGl, (3, 2)); + } + match opts::get().render_api { + RenderApi::GL => { + GlRequest::Specific(Api::OpenGl, (2, 1)) + } + RenderApi::ES2 => { + GlRequest::Specific(Api::OpenGlEs, (2, 0)) + } } } @@ -672,7 +678,14 @@ impl WindowMethods for Window { fn native_display(&self) -> NativeDisplay { use x11::xlib; unsafe { - NativeDisplay::new(self.window.platform_display() as *mut xlib::Display) + match opts::get().render_api { + RenderApi::GL => { + NativeDisplay::new(self.window.platform_display() as *mut xlib::Display) + }, + RenderApi::ES2 => { + NativeDisplay::new_egl_display() + } + } } } diff --git a/ports/gonk/Cargo.lock b/ports/gonk/Cargo.lock index 8f43878a726..bcd49657287 100644 --- a/ports/gonk/Cargo.lock +++ b/ports/gonk/Cargo.lock @@ -9,7 +9,7 @@ dependencies = [ "euclid 0.6.4 (registry+https://github.com/rust-lang/crates.io-index)", "gfx 0.0.1", "gleam 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", - "layers 0.2.2 (git+https://github.com/servo/rust-layers)", + "layers 0.2.4 (git+https://github.com/servo/rust-layers)", "layout 0.0.1", "libc 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", "msg 0.0.1", @@ -140,7 +140,7 @@ dependencies = [ "gfx_traits 0.0.1", "gleam 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", "ipc-channel 0.2.1 (git+https://github.com/servo/ipc-channel)", - "layers 0.2.2 (git+https://github.com/servo/rust-layers)", + "layers 0.2.4 (git+https://github.com/servo/rust-layers)", "log 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", "num 0.1.31 (registry+https://github.com/rust-lang/crates.io-index)", "offscreen_gl_context 0.1.0 (git+https://github.com/ecoal95/rust-offscreen-rendering-context)", @@ -160,7 +160,7 @@ dependencies = [ "heapsize 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", "heapsize_plugin 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", "ipc-channel 0.2.1 (git+https://github.com/servo/ipc-channel)", - "layers 0.2.2 (git+https://github.com/servo/rust-layers)", + "layers 0.2.4 (git+https://github.com/servo/rust-layers)", "offscreen_gl_context 0.1.0 (git+https://github.com/ecoal95/rust-offscreen-rendering-context)", "plugins 0.0.1", "serde 0.6.15 (registry+https://github.com/rust-lang/crates.io-index)", @@ -249,7 +249,7 @@ dependencies = [ "gleam 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", "image 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", "ipc-channel 0.2.1 (git+https://github.com/servo/ipc-channel)", - "layers 0.2.2 (git+https://github.com/servo/rust-layers)", + "layers 0.2.4 (git+https://github.com/servo/rust-layers)", "layout_traits 0.0.1", "log 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", "msg 0.0.1", @@ -612,7 +612,7 @@ dependencies = [ "heapsize 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", "heapsize_plugin 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", "ipc-channel 0.2.1 (git+https://github.com/servo/ipc-channel)", - "layers 0.2.2 (git+https://github.com/servo/rust-layers)", + "layers 0.2.4 (git+https://github.com/servo/rust-layers)", "lazy_static 0.1.15 (registry+https://github.com/rust-lang/crates.io-index)", "libc 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", @@ -648,7 +648,7 @@ dependencies = [ "euclid 0.6.4 (registry+https://github.com/rust-lang/crates.io-index)", "heapsize 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", "heapsize_plugin 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", - "layers 0.2.2 (git+https://github.com/servo/rust-layers)", + "layers 0.2.4 (git+https://github.com/servo/rust-layers)", "msg 0.0.1", "plugins 0.0.1", "serde 0.6.15 (registry+https://github.com/rust-lang/crates.io-index)", @@ -902,8 +902,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "layers" -version = "0.2.2" -source = "git+https://github.com/servo/rust-layers#dd28dbee88fa18cfe416403d59e9c74c7299d7ab" +version = "0.2.4" +source = "git+https://github.com/servo/rust-layers#3cb5df49d7f069eea1f1f0550921c5833cb5bc7f" dependencies = [ "azure 0.4.3 (git+https://github.com/servo/rust-azure)", "cgl 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1134,7 +1134,7 @@ dependencies = [ "heapsize_plugin 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", "hyper 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", "ipc-channel 0.2.1 (git+https://github.com/servo/ipc-channel)", - "layers 0.2.2 (git+https://github.com/servo/rust-layers)", + "layers 0.2.4 (git+https://github.com/servo/rust-layers)", "plugins 0.0.1", "rustc-serialize 0.3.16 (registry+https://github.com/rust-lang/crates.io-index)", "serde 0.6.15 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1665,7 +1665,7 @@ dependencies = [ "gfx 0.0.1", "gleam 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", "ipc-channel 0.2.1 (git+https://github.com/servo/ipc-channel)", - "layers 0.2.2 (git+https://github.com/servo/rust-layers)", + "layers 0.2.4 (git+https://github.com/servo/rust-layers)", "layout 0.0.1", "libc 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)",